From: Kern Sibbald Date: Thu, 27 Mar 2014 17:53:59 +0000 (+0100) Subject: Backport from BEE X-Git-Tag: Release-7.0.0~7 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=b6a1f7208143a51f07573fe986fcea297f90944b;p=bacula%2Fbacula Backport from BEE --- diff --git a/bacula/.gitignore b/bacula/.gitignore index d558258629..42ce645d04 100644 --- a/bacula/.gitignore +++ b/bacula/.gitignore @@ -6,7 +6,7 @@ # *.[oa] # *~ -# +# *.la *.a *.o @@ -93,6 +93,7 @@ oldtxt kerns-bs-config libtool config.status.lineno +win32 # autoconf/ autoconf/autom4te.cache @@ -170,6 +171,8 @@ po/*.mo po/*.gmo # scripts/ +scripts/bs_alert +scripts/bsg_persist scripts/breload scripts/make_catalog_backup.pl scripts/bacula_config @@ -295,6 +298,7 @@ src/cats/.libs src/cats/libbacsql.a # src/console/ +src/console/bbconsjson src/console/console.conf src/console/test-console.conf src/console/test-bconsole.conf @@ -309,6 +313,7 @@ src/console/static-bconsole src/console/.libs # src/dird/ +src/dird/bdirjson src/dird/1 src/dird/2 src/dird/3 @@ -324,6 +329,7 @@ src/dird/filelist.exc src/dird/.libs # src/filed/ +src/filed/bfdjson src/filed/Makefile src/filed/bacula-fd src/filed/bacula-fd.conf @@ -376,7 +382,7 @@ src/lib/libbaccfg.a src/lib/libbacpy.a # src/plugins/dir/ -src/plugins/dir/*.o +src/plugins/dir/*.o src/plugins/dir/*.so src/plugins/dir/main src/plugins/dir/Makefile @@ -492,6 +498,7 @@ src/qt-console/ts/bat_fr.qm src/qt-console/ts/bat_de.qm # src/stored/ +src/stored/bsdjson src/stored/1 src/stored/2 src/stored/Makefile @@ -523,6 +530,7 @@ src/stored/unmount-simulator src/stored/.libs # src/tools/ +src/tools/find_bad_jobmedia.pl src/tools/ing_test src/tools/bregex src/tools/bwild @@ -542,6 +550,7 @@ src/tools/grow src/tools/.libs src/tools/bvfs_test src/tools/bpluginfo +src/tools/timelimit # src/tray-monitor/ src/tray-monitor/tray-monitor.conf @@ -571,6 +580,7 @@ src/win32/debug src/win32/release32 src/win32/release64 src/win32/dll +src/win32/build.log # src/win32 src/win32*.user @@ -778,6 +788,15 @@ src/wx-console/bwx-console.conf src/wx-console/.libs # updatedb/ +updatedb/update_mysql_tables_1014_to_1015 +updatedb/update_mysql_tables_1015_to_1016 +updatedb/update_mysql_tables_12_to_13 +updatedb/update_mysql_tables_13_to_14 +updatedb/update_mysql_tables_14_to_1014 +updatedb/update_postgresql_tables_1014_to_1015 +updatedb/update_postgresql_tables_12_to_13 +updatedb/update_postgresql_tables_13_to_14 +updatedb/update_postgresql_tables_14_to_1014 updatedb/update_mysql_tables_12_to_14 updatedb/update_postgresql_tables_12_to_14 updatedb/update_sqlite3_tables_12_to_14 diff --git a/bacula/ABOUT-NLS b/bacula/ABOUT-NLS deleted file mode 100644 index ed3565aef9..0000000000 --- a/bacula/ABOUT-NLS +++ /dev/null @@ -1,986 +0,0 @@ -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. - - When reporting bugs in the `intl/' directory or bugs which may be -related to internationalization, you should tell about the version of -`gettext' which is used. The information can be found in the -`intl/VERSION' file, in internationalized packages. - -1.1 Quick configuration advice -============================== - -If you want to exploit the full power of internationalization, you -should configure it using - - ./configure --with-included-gettext - -to force usage of internationalizing routines provided within this -package, despite the existence of internationalizing capabilities in the -operating system where this package is being installed. So far, only -the `gettext' implementation in the GNU C library version 2 provides as -many features (such as locale alias, message inheritance, automatic -charset conversion or plural form handling) as the implementation here. -It is also not possible to offer this additional functionality on top -of a `catgets' implementation. Future versions of GNU `gettext' will -very likely convey even more functionality. So it might be a good idea -to change to GNU `gettext' as soon as possible. - - So you need _not_ provide this option if you are using GNU libc 2 or -you have installed a recent copy of the GNU gettext package with the -included `libintl'. - -1.2 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. If not, the included GNU -`gettext' library will be used. This library is wholly contained -within this package, usually in the `intl/' subdirectory, so prior -installation of the GNU `gettext' package is _not_ required. -Installers may use special options at configuration time for changing -the default behaviour. The commands: - - ./configure --with-included-gettext - ./configure --disable-nls - -will, respectively, bypass any pre-existing `gettext' to use the -internationalizing routines provided within this package, or else, -_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.a' file and -will decide to use this. This might not be desirable. You should use -the more recent version of the GNU `gettext' library. I.e. if the file -`intl/VERSION' shows that the library which comes with this package is -more recent, you should use - - ./configure --with-included-gettext - -to prevent auto-detection. - - The configuration process will not test for the `catgets' function -and therefore it will not be used. The reason is that even an -emulation of `gettext' on top of `catgets' could not provide all the -extensions of the GNU `gettext' library. - - 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.3 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. 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 country 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.4 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://www.iro.umontreal.ca/contrib/po/HTML/', in the "National 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 `translation@iro.umontreal.ca' 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 skill are praised more than -programming skill, here. - -1.5 Available Packages -====================== - -Languages are not equally supported in all packages. The following -matrix shows the current state of internationalization, as of April -2005. 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 ar az be bg bs ca cs cy da de el en en_GB - +-------------------------------------------------+ - GNUnet | | - a2ps | [] [] [] [] [] | - aegis | () | - ant-phone | () | - anubis | [] | - ap-utils | | - aspell | [] [] [] [] | - bash | [] [] | - batchelor | [] | - bfd | | - bibshelf | [] | - binutils | [] | - bison | [] [] | - bluez-pin | [] [] [] [] | - clisp | [] [] | - console-tools | [] [] | - coreutils | [] [] [] [] | - cpio | | - cpplib | [] [] [] | - darkstat | [] () [] | - dialog | [] [] [] [] [] [] | - diffutils | [] [] [] [] [] | - doodle | [] | - e2fsprogs | [] [] | - enscript | [] [] [] [] | - error | [] [] [] [] | - fetchmail | [] () [] [] [] | - fileutils | [] [] | - findutils | [] [] [] | - flex | [] [] [] | - fslint | [] | - gas | | - gawk | [] [] [] | - gbiff | [] | - gcal | [] | - gcc | [] | - gettext-examples | [] [] [] [] | - gettext-runtime | [] [] [] [] | - gettext-tools | [] [] | - gimp-print | [] [] [] [] | - gip | | - gliv | [] | - glunarclock | | - gmult | [] [] | - gnubiff | () | - gnucash | [] () () [] | - gnucash-glossary | [] () | - gpe-aerial | [] [] | - gpe-beam | [] [] | - gpe-calendar | [] [] | - gpe-clock | [] [] | - gpe-conf | [] [] | - gpe-contacts | | - gpe-edit | [] | - gpe-go | [] | - gpe-login | [] [] | - gpe-ownerinfo | [] [] | - gpe-sketchbook | [] [] | - gpe-su | [] [] | - gpe-taskmanager | [] [] | - gpe-timesheet | [] | - gpe-today | [] [] | - gpe-todo | [] [] | - gphoto2 | [] [] [] [] | - gprof | [] [] | - gpsdrive | () () | - gramadoir | [] [] | - grep | [] [] [] [] [] [] | - gretl | | - gsasl | [] | - gss | | - gst-plugins | [] [] [] [] [] [] | - gstreamer | [] [] [] [] [] | - gtick | [] () | - gtkspell | [] [] [] | - hello | [] [] [] [] | - id-utils | [] [] | - impost | | - indent | [] [] | - iso_3166 | | - iso_3166_1 | [] [] [] [] [] | - iso_3166_2 | | - iso_3166_3 | [] | - iso_4217 | | - iso_639 | | - jpilot | [] | - jtag | | - jwhois | | - kbd | [] [] [] [] | - latrine | () | - ld | [] | - libc | [] [] [] [] [] | - libextractor | | - libgpewidget | [] [] [] | - libgsasl | | - libiconv | [] [] [] [] [] | - libidn | | - lifelines | [] () | - lilypond | [] | - lingoteach | | - lynx | [] [] [] [] | - m4 | [] [] [] [] | - mailutils | [] | - make | [] [] | - man-db | [] () [] [] | - minicom | [] [] | - mysecretdiary | [] [] | - nano | [] () [] | - nano_1_0 | [] () [] [] | - opcodes | [] | - parted | [] [] [] [] | - psmisc | | - ptx | [] [] [] | - pwdutils | | - python | | - radius | [] | - recode | [] [] [] [] [] | - rpm | [] [] | - screem | | - scrollkeeper | [] [] [] [] [] [] [] [] | - sed | [] [] | - sh-utils | [] [] | - shared-mime-info | [] [] | - sharutils | [] [] [] [] [] | - silky | | - skencil | [] () | - sketch | [] () | - solfege | [] | - soundtracker | [] [] | - sp | [] | - stardict | [] | - tar | | - texinfo | [] [] | - textutils | [] [] [] | - tin | () () | - tp-robot | [] | - tuxpaint | [] [] [] [] [] [] [] | - unicode-han-tra... | | - unicode-transla... | | - util-linux | [] [] [] [] | - vorbis-tools | [] [] [] [] | - wastesedge | () | - wdiff | [] [] [] [] | - wget | [] [] [] [] [] [] | - xchat | [] [] [] [] | - xkeyboard-config | | - xpad | | - +-------------------------------------------------+ - af am ar az be bg bs ca cs cy da de el en en_GB - 10 0 0 2 7 4 0 41 43 3 52 90 20 1 15 - - eo es et eu fa fi fr ga gl he hr hu id is it - +-----------------------------------------------+ - GNUnet | | - a2ps | [] [] [] () | - aegis | | - ant-phone | [] | - anubis | [] | - ap-utils | [] | - aspell | [] [] | - bash | [] [] [] [] | - batchelor | [] [] | - bfd | [] | - bibshelf | [] [] [] | - binutils | [] [] | - bison | [] [] [] [] [] [] | - bluez-pin | [] [] [] [] [] [] | - clisp | [] [] | - console-tools | | - coreutils | [] [] [] [] [] | - cpio | [] [] | - cpplib | [] [] | - darkstat | [] () [] [] [] | - dialog | [] [] [] [] [] [] [] [] | - diffutils | [] [] [] [] [] [] [] [] [] [] | - doodle | [] [] | - e2fsprogs | [] [] [] | - enscript | [] [] | - error | [] [] [] [] [] | - fetchmail | [] | - fileutils | [] [] [] [] [] [] | - findutils | [] [] [] [] [] | - flex | [] [] [] | - fslint | [] | - gas | [] [] | - gawk | [] [] [] [] | - gbiff | [] | - gcal | [] [] | - gcc | [] | - gettext-examples | [] [] [] [] | - gettext-runtime | [] [] [] [] [] [] | - gettext-tools | [] [] [] | - gimp-print | [] [] | - gip | [] [] [] | - gliv | () | - glunarclock | [] [] [] | - gmult | [] [] [] | - gnubiff | () () | - gnucash | [] () [] | - gnucash-glossary | [] [] | - gpe-aerial | [] [] | - gpe-beam | [] [] | - gpe-calendar | [] [] [] [] | - gpe-clock | [] [] [] | - gpe-conf | [] | - gpe-contacts | [] | - gpe-edit | [] [] | - gpe-go | [] [] | - gpe-login | [] [] [] | - gpe-ownerinfo | [] [] [] [] [] | - gpe-sketchbook | [] [] | - gpe-su | [] [] [] | - gpe-taskmanager | [] [] [] | - gpe-timesheet | [] [] [] [] | - gpe-today | [] [] [] [] | - gpe-todo | [] [] [] | - gphoto2 | [] [] [] [] [] | - gprof | [] [] [] | - gpsdrive | () () [] () | - gramadoir | [] [] | - grep | [] [] [] [] [] [] [] [] [] [] [] [] | - gretl | [] [] [] | - gsasl | [] [] [] | - gss | [] | - gst-plugins | [] [] [] | - gstreamer | [] | - gtick | [] [] [] [] [] | - gtkspell | [] [] [] [] [] [] | - hello | [] [] [] [] [] [] [] [] [] [] [] [] [] [] | - id-utils | [] [] [] [] | - impost | [] [] | - indent | [] [] [] [] [] [] [] [] [] [] [] | - iso_3166 | [] [] [] | - iso_3166_1 | [] [] [] [] [] [] [] | - iso_3166_2 | [] | - iso_3166_3 | [] | - iso_4217 | [] [] [] | - iso_639 | [] [] [] [] | - jpilot | [] [] | - jtag | [] | - jwhois | [] [] [] [] [] | - kbd | [] [] | - latrine | [] [] [] | - ld | [] [] | - libc | [] [] [] [] [] | - libextractor | | - libgpewidget | [] [] [] [] [] | - libgsasl | [] [] | - libiconv | [] [] [] [] [] [] [] [] [] [] [] | - libidn | [] [] | - lifelines | () | - lilypond | [] | - lingoteach | [] [] [] | - lynx | [] [] [] | - m4 | [] [] [] [] | - mailutils | [] [] | - make | [] [] [] [] [] [] [] | - man-db | () | - minicom | [] [] [] [] | - mysecretdiary | [] [] [] | - nano | [] [] () [] [] | - nano_1_0 | [] [] [] [] [] | - opcodes | [] [] | - parted | [] [] [] [] | - psmisc | [] [] | - ptx | [] [] [] [] [] [] [] [] [] | - pwdutils | | - python | | - radius | [] [] | - recode | [] [] [] [] [] [] [] [] | - rpm | [] | - screem | | - scrollkeeper | [] [] [] | - sed | [] [] [] [] [] | - sh-utils | [] [] [] [] [] [] [] | - shared-mime-info | [] [] [] [] [] [] | - sharutils | [] [] [] [] [] [] [] | - silky | [] | - skencil | [] [] | - sketch | [] [] | - solfege | [] | - soundtracker | [] [] [] | - sp | [] | - stardict | [] | - tar | [] [] [] [] [] | - texinfo | [] [] [] | - textutils | [] [] [] [] [] | - tin | [] () | - tp-robot | [] [] | - tuxpaint | [] [] [] [] [] [] [] [] [] | - unicode-han-tra... | | - unicode-transla... | [] [] | - util-linux | [] [] [] [] [] [] | - vorbis-tools | [] [] | - wastesedge | () | - wdiff | [] [] [] [] [] [] [] [] | - wget | [] [] [] [] [] [] [] [] [] [] | - xchat | [] [] [] [] [] | - xkeyboard-config | | - xpad | [] [] [] | - +-----------------------------------------------+ - eo es et eu fa fi fr ga gl he hr hu id is it - 13 85 21 15 2 35 115 45 17 8 6 40 27 1 45 - - ja ko ku lg lt lv mk mn ms mt nb nl nn no nso - +-----------------------------------------------+ - GNUnet | | - a2ps | () [] [] () | - aegis | () | - ant-phone | [] | - anubis | [] [] [] | - ap-utils | | - aspell | [] [] | - bash | [] | - batchelor | [] | - bfd | | - bibshelf | | - binutils | | - bison | [] [] [] | - bluez-pin | [] | - clisp | [] | - console-tools | | - coreutils | [] [] | - cpio | | - cpplib | | - darkstat | [] [] | - dialog | [] | - diffutils | [] [] [] | - doodle | | - e2fsprogs | | - enscript | [] | - error | [] | - fetchmail | [] [] | - fileutils | [] [] | - findutils | [] | - flex | [] [] | - fslint | [] | - gas | | - gawk | [] [] | - gbiff | [] | - gcal | | - gcc | | - gettext-examples | [] [] | - gettext-runtime | [] [] [] | - gettext-tools | [] [] | - gimp-print | [] [] | - gip | [] | - gliv | [] | - glunarclock | [] [] | - gmult | [] | - gnubiff | | - gnucash | () () [] | - gnucash-glossary | [] | - gpe-aerial | [] | - gpe-beam | [] | - gpe-calendar | [] | - gpe-clock | [] | - gpe-conf | [] | - gpe-contacts | | - gpe-edit | [] | - gpe-go | [] | - gpe-login | [] | - gpe-ownerinfo | [] | - gpe-sketchbook | [] | - gpe-su | [] | - gpe-taskmanager | [] [] | - gpe-timesheet | [] | - gpe-today | [] | - gpe-todo | [] | - gphoto2 | [] [] | - gprof | | - gpsdrive | () () () | - gramadoir | () | - grep | [] [] [] | - gretl | | - gsasl | [] | - gss | | - gst-plugins | [] | - gstreamer | [] | - gtick | [] | - gtkspell | [] [] | - hello | [] [] [] [] [] [] [] [] | - id-utils | [] | - impost | | - indent | [] [] | - iso_3166 | [] | - iso_3166_1 | [] [] | - iso_3166_2 | [] | - iso_3166_3 | [] | - iso_4217 | [] [] [] | - iso_639 | [] [] [] | - jpilot | () () () | - jtag | | - jwhois | [] | - kbd | [] | - latrine | [] | - ld | | - libc | [] [] [] [] [] | - libextractor | | - libgpewidget | [] | - libgsasl | [] | - libiconv | [] | - libidn | | - lifelines | [] | - lilypond | [] | - lingoteach | [] | - lynx | [] [] | - m4 | [] [] | - mailutils | | - make | [] [] [] | - man-db | () | - minicom | [] | - mysecretdiary | [] | - nano | [] [] | - nano_1_0 | [] [] [] | - opcodes | [] | - parted | [] [] | - psmisc | [] [] | - ptx | [] [] [] | - pwdutils | | - python | | - radius | | - recode | [] | - rpm | [] [] | - screem | [] | - scrollkeeper | [] [] [] | - sed | [] [] | - sh-utils | [] [] | - shared-mime-info | [] [] [] [] | - sharutils | [] [] | - silky | [] | - skencil | | - sketch | | - solfege | [] [] | - soundtracker | | - sp | () | - stardict | [] [] | - tar | [] [] | - texinfo | [] [] [] | - textutils | [] [] [] | - tin | | - tp-robot | [] | - tuxpaint | [] [] [] [] [] [] | - unicode-han-tra... | | - unicode-transla... | | - util-linux | [] [] | - vorbis-tools | [] | - wastesedge | [] | - wdiff | [] [] | - wget | [] [] | - xchat | [] [] [] [] | - xkeyboard-config | [] | - xpad | [] | - +-----------------------------------------------+ - ja ko ku lg lt lv mk mn ms mt nb nl nn no nso - 33 11 1 1 1 2 2 3 11 0 15 96 7 5 0 - - or pa pl pt pt_BR rm ro ru rw sk sl sq sr sv ta - +-------------------------------------------------+ - GNUnet | | - a2ps | () [] [] [] [] [] [] | - aegis | () () | - ant-phone | [] | - anubis | [] [] [] | - ap-utils | () | - aspell | [] [] | - bash | [] [] [] | - batchelor | [] | - bfd | | - bibshelf | | - binutils | [] [] | - bison | [] [] [] [] [] | - bluez-pin | [] [] [] [] [] [] [] [] | - clisp | [] | - console-tools | [] | - coreutils | [] [] [] [] | - cpio | [] [] | - cpplib | | - darkstat | [] [] [] [] [] [] | - dialog | [] [] [] [] [] [] [] | - diffutils | [] [] [] [] [] [] | - doodle | [] | - e2fsprogs | [] [] | - enscript | [] [] [] [] | - error | [] [] [] | - fetchmail | [] () [] [] [] | - fileutils | [] [] [] [] [] | - findutils | [] [] [] [] [] [] | - flex | [] [] [] [] [] | - fslint | [] [] [] | - gas | | - gawk | [] [] [] [] | - gbiff | [] | - gcal | [] | - gcc | | - gettext-examples | [] [] [] [] [] [] | - gettext-runtime | [] [] [] [] [] [] [] | - gettext-tools | [] [] [] [] [] [] [] | - gimp-print | [] [] | - gip | [] [] [] | - gliv | [] [] [] | - glunarclock | [] [] [] [] [] [] | - gmult | [] [] [] [] | - gnubiff | () [] | - gnucash | () [] [] [] [] | - gnucash-glossary | [] [] [] | - gpe-aerial | [] [] [] [] [] [] | - gpe-beam | [] [] [] [] [] [] | - gpe-calendar | [] [] [] [] [] [] [] | - gpe-clock | [] [] [] [] [] [] [] | - gpe-conf | [] [] [] [] [] [] | - gpe-contacts | [] [] [] | - gpe-edit | [] [] [] [] [] [] [] | - gpe-go | [] [] [] [] [] | - gpe-login | [] [] [] [] [] [] [] | - gpe-ownerinfo | [] [] [] [] [] [] [] | - gpe-sketchbook | [] [] [] [] [] [] [] | - gpe-su | [] [] [] [] [] [] [] | - gpe-taskmanager | [] [] [] [] [] [] [] | - gpe-timesheet | [] [] [] [] [] [] [] | - gpe-today | [] [] [] [] [] [] [] | - gpe-todo | [] [] [] [] [] [] [] | - gphoto2 | [] [] [] [] | - gprof | [] [] [] | - gpsdrive | [] | - gramadoir | [] | - grep | [] [] [] [] [] [] [] | - gretl | [] | - gsasl | [] [] [] [] [] | - gss | [] [] [] | - gst-plugins | [] [] [] [] | - gstreamer | [] [] [] [] | - gtick | [] [] [] | - gtkspell | [] [] [] [] [] [] | - hello | [] [] [] [] [] [] [] | - id-utils | [] [] [] [] | - impost | | - indent | [] [] [] [] [] [] | - iso_3166 | [] [] [] [] [] | - iso_3166_1 | [] [] [] [] | - iso_3166_2 | | - iso_3166_3 | [] [] [] | - iso_4217 | [] [] | - iso_639 | [] [] [] | - jpilot | | - jtag | [] | - jwhois | [] [] [] () () | - kbd | [] [] [] | - latrine | [] [] | - ld | [] | - libc | [] [] [] [] [] | - libextractor | [] | - libgpewidget | [] [] [] [] [] [] | - libgsasl | [] [] [] | - libiconv | [] [] [] [] [] [] [] [] [] [] | - libidn | [] () | - lifelines | [] [] | - lilypond | [] | - lingoteach | [] | - lynx | [] [] [] | - m4 | [] [] [] [] [] | - mailutils | [] [] [] | - make | [] [] [] [] | - man-db | [] [] | - minicom | [] [] [] [] | - mysecretdiary | [] [] [] [] | - nano | [] [] [] | - nano_1_0 | [] [] [] [] | - opcodes | [] [] | - parted | [] [] [] [] | - psmisc | [] [] | - ptx | [] [] [] [] [] [] | - pwdutils | [] | - python | | - radius | [] [] | - recode | [] [] [] [] [] [] | - rpm | [] [] [] [] | - screem | | - scrollkeeper | [] [] [] [] [] [] [] | - sed | [] [] [] [] [] [] [] [] | - sh-utils | [] [] [] | - shared-mime-info | [] [] [] [] [] | - sharutils | [] [] [] | - silky | [] | - skencil | [] [] [] | - sketch | [] [] [] | - solfege | | - soundtracker | [] [] | - sp | | - stardict | [] [] | - tar | [] [] [] [] | - texinfo | [] [] [] [] | - textutils | [] [] [] | - tin | | - tp-robot | [] | - tuxpaint | [] [] [] [] [] [] [] [] | - unicode-han-tra... | | - unicode-transla... | | - util-linux | [] [] [] | - vorbis-tools | [] [] | - wastesedge | | - wdiff | [] [] [] [] [] [] | - wget | [] [] [] [] [] [] [] [] [] | - xchat | [] [] [] [] [] [] | - xkeyboard-config | | - xpad | | - +-------------------------------------------------+ - or pa pl pt pt_BR rm ro ru rw sk sl sq sr sv ta - 1 0 48 30 58 6 79 71 5 45 13 12 50 86 0 - - tg th tk tr uk ven vi wa xh zh_CN zh_TW zu - +--------------------------------------------+ - GNUnet | | 0 - a2ps | [] [] [] | 19 - aegis | | 0 - ant-phone | [] | 4 - anubis | [] | 9 - ap-utils | () | 1 - aspell | [] [] [] | 13 - bash | | 10 - batchelor | [] [] | 7 - bfd | | 1 - bibshelf | [] | 5 - binutils | [] | 6 - bison | [] | 17 - bluez-pin | [] [] [] [] [] | 24 - clisp | | 7 - console-tools | [] | 4 - coreutils | [] | 16 - cpio | [] [] | 6 - cpplib | [] [] | 7 - darkstat | [] () () | 15 - dialog | [] [] [] | 25 - diffutils | [] [] [] [] | 28 - doodle | [] | 5 - e2fsprogs | [] | 8 - enscript | [] | 12 - error | [] [] [] | 16 - fetchmail | [] | 12 - fileutils | [] [] [] | 18 - findutils | [] [] | 17 - flex | [] [] | 15 - fslint | [] | 7 - gas | [] | 3 - gawk | [] | 14 - gbiff | | 4 - gcal | [] | 5 - gcc | [] | 3 - gettext-examples | [] [] [] [] | 20 - gettext-runtime | [] [] [] [] [] | 25 - gettext-tools | [] [] [] | 17 - gimp-print | [] | 11 - gip | [] | 8 - gliv | [] | 6 - glunarclock | [] [] | 13 - gmult | [] [] [] | 13 - gnubiff | [] | 3 - gnucash | () [] | 10 - gnucash-glossary | [] | 8 - gpe-aerial | [] [] | 13 - gpe-beam | [] [] | 13 - gpe-calendar | [] [] [] [] | 18 - gpe-clock | [] [] [] [] | 17 - gpe-conf | [] [] | 12 - gpe-contacts | [] [] | 6 - gpe-edit | [] [] [] [] | 15 - gpe-go | [] [] | 11 - gpe-login | [] [] [] [] [] | 18 - gpe-ownerinfo | [] [] [] [] | 19 - gpe-sketchbook | [] [] | 14 - gpe-su | [] [] [] | 16 - gpe-taskmanager | [] [] [] | 17 - gpe-timesheet | [] [] [] [] | 17 - gpe-today | [] [] [] [] [] | 19 - gpe-todo | [] [] [] | 16 - gphoto2 | [] [] | 17 - gprof | [] [] | 10 - gpsdrive | | 2 - gramadoir | [] | 6 - grep | [] [] [] [] | 32 - gretl | | 4 - gsasl | [] [] | 12 - gss | [] | 5 - gst-plugins | [] [] | 16 - gstreamer | [] [] [] | 14 - gtick | [] | 11 - gtkspell | [] [] [] | 20 - hello | [] [] [] [] | 37 - id-utils | [] [] | 13 - impost | [] | 3 - indent | [] [] [] | 24 - iso_3166 | [] [] [] | 12 - iso_3166_1 | [] [] | 20 - iso_3166_2 | | 2 - iso_3166_3 | [] [] | 8 - iso_4217 | [] [] | 10 - iso_639 | [] [] | 12 - jpilot | [] [] [] | 6 - jtag | | 2 - jwhois | [] [] [] | 12 - kbd | [] [] | 12 - latrine | [] [] | 8 - ld | [] | 5 - libc | [] [] | 22 - libextractor | | 1 - libgpewidget | [] [] | 17 - libgsasl | [] | 7 - libiconv | [] [] [] [] [] | 32 - libidn | [] [] | 5 - lifelines | | 4 - lilypond | [] | 5 - lingoteach | | 5 - lynx | [] [] | 14 - m4 | [] [] | 17 - mailutils | [] | 7 - make | [] [] | 18 - man-db | | 5 - minicom | | 11 - mysecretdiary | [] [] | 12 - nano | | 11 - nano_1_0 | [] [] | 17 - opcodes | [] | 7 - parted | [] [] [] | 17 - psmisc | [] | 7 - ptx | [] [] | 23 - pwdutils | | 1 - python | | 0 - radius | [] | 6 - recode | [] [] | 22 - rpm | [] [] | 11 - screem | | 1 - scrollkeeper | [] [] | 23 - sed | [] [] | 19 - sh-utils | [] | 15 - shared-mime-info | [] [] | 19 - sharutils | [] [] [] | 20 - silky | | 3 - skencil | | 6 - sketch | | 6 - solfege | | 4 - soundtracker | [] | 8 - sp | [] | 3 - stardict | [] [] [] [] | 10 - tar | [] [] | 13 - texinfo | [] [] | 14 - textutils | [] [] [] | 17 - tin | | 1 - tp-robot | [] [] | 7 - tuxpaint | [] [] [] [] | 34 - unicode-han-tra... | | 0 - unicode-transla... | | 2 - util-linux | [] [] | 17 - vorbis-tools | [] | 10 - wastesedge | | 1 - wdiff | [] [] | 22 - wget | [] [] [] [] | 31 - xchat | [] [] [] | 22 - xkeyboard-config | | 1 - xpad | [] | 5 - +--------------------------------------------+ - 72 teams tg th tk tr uk ven vi wa xh zh_CN zh_TW zu - 147 domains 0 0 1 78 29 0 71 16 0 41 20 0 1711 - - 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 April 2005 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://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'. - -1.6 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 Library 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 -`translation@iro.umontreal.ca' to make the `.pot' files available to -the translation teams. - diff --git a/bacula/AUTHORS b/bacula/AUTHORS index 7fdeccba94..f9b62fa4ab 100644 --- a/bacula/AUTHORS +++ b/bacula/AUTHORS @@ -1,10 +1,12 @@ -This file contains a list of the people who have contributed code, programs or -documentation to the Bacula project. Thanks to all of you. Without your -participation, Bacula would not be the success it is today. +This file contains a list of the people who have contributed code, +programs or documentation to the Bacula project. Thanks to all of +you. Without your participation, Bacula would not be the success it +is today. -If you have made a contribution and do not find your -name on this list, please send a note to me: kern@sibbald.com +If you have made a contribution and do not find your name on this +list, please send a note to license@bacula.org or to the person from +whom you received the distribution. Contributors: @@ -25,14 +27,14 @@ Attila Fülöp Ben Walton Bernd Frick Bill Moran -Bastian Friedrich +Bastian Friedrich Carlos A. Molina G Carsten Paeth Chris Lee Christian Masopust Christopher Hull Craig Miskell -Dan Langille +Dan Langille Daniele Eccher David Boyes David Duchscher @@ -51,7 +53,7 @@ Frank Sweetser Graham Keeling Grzegorz Grabowski Howard Thomson -Jaime Ventura +Jaime Ventura James Harper Jan Kesten jgorig @@ -62,14 +64,15 @@ John Kodis John Walker Jorj Bauer Jose Herrera -Jose Luis Tallon -Jo Simoens -Juan Luis Frances -Juergen Lock +Jose Luis Tallon +Josip Almasi +Jo Simoens +Juan Luis Frances +Juergen Lock Karl Cunningham Kern Sibbald Kjetil Torgrim Homme -Landon Fuller +Landon Fuller Laurent Papier Lukas Nykryn Lorenz Schori @@ -77,15 +80,16 @@ Luca Berra Lucas B. Cohen Lucas Di Pentima Ludovic Strappazon -Marc Cousin +Marc Cousin Marc Schiffbauer +Marcin Haba Marco van Wieringen Martin Schmid -Martin Simmons +Martin Simmons Meno Abels Michael Renner Michael -buk- Scherer -Michael Stapelberg +Michael Stapelberg Michel Meyers Morgan Nic Bellamy @@ -98,16 +102,16 @@ Philippe Chauvat Phil Stracchino Preben Guldberg Riccardo Ghetta -Richard Mortimer +Richard Mortimer Robert Nelson Rudolf Cejka Russel Howe Scott Bailey Sergey Svishchev Stefan Reddig -Thomas Glatthor +Thomas Glatthor Thorsten Enge -Tim Oberfoell +Tim Oberfoell Tomas Cameron Tullio Andreatta Ulrich Leodolter diff --git a/bacula/ChangeLog b/bacula/ChangeLog index 0e175d0e8b..cc28e5b91b 100644 --- a/bacula/ChangeLog +++ b/bacula/ChangeLog @@ -1,5 +1,51 @@ - Changelog on version 5.2.13 - + Changelog on version 7.0.0 + +Release version 7.0.0 + +24Mar14 + - Add Josip Almasi to AUTHORS + - [PATCH] Support for restricted consoles in BAT config + - [PATCH] Fix for free director directive + - [PATCH] Fix auto-select restricted console for director in bconsole + - Realign output display + - Update ua_output.c from Branch-6.7 + - Add some missing Branch-6.7 updates + - Added needed empty directories to Baculum + - Fix for support PostgreSQL, MySQL and SQLite + - Framework adjusting to Baculum database connections + - Framework fix for lower case tables names in MySQL + - Fix for Baculum SQLite support + - Initial commit Baculum + - Add Marcin to AUTHORS file + - Strip trailing blanks + - Update copyright year + - Update LICENSE and header files + - Remove old file + - Add new header in misc files + - Remove tray-monitor bwx-console manual installation + - Remove FD python and examples + - Fixup spec files + - Remove pythonlib from lib + - Update package-list + - Fix SDCallsClient daemon synchronization + - Add debug code + make 127.0.0.1 same as localhost for tls tests + - Fix multiple DIRs in console + - Make failure for bat to connect to DIR non-fatal + - Fix bat style to one that works + - Take disk-changer from Branch-6.7 + - Simplify Version output + - Fix FDVersion for SD Calls Client test + - Update accurate test + - Update differential test + - Add new regress timing scripts + - Improve plugin make clean + - Implement regress FORCE_SDCALLS + - Remove win32 tray-monitor and wx-console directories + - Remove regress-config need only regress-config.in + - Add configure archivedir + - Improve SQL failure reporting + - Major backport from BEE to community + - Add copyright to mtx-changer.in Release version 5.2.13 @@ -29,7 +75,7 @@ Release version 5.2.13 - Fix update_postgresql_tables 10 to 11 30Jan13 - - Clean after building doc binaries requested by Willem vd Akker for Debian + - Clean after building doc binaries requested by Willem vd Akker for Debian build 29Jan13 @@ -189,7 +235,7 @@ Version 5.2.11 - Simplify safer delete code using a single regex 08Sep12 - - Clean up error message generation during update attributes -- should fix bug + - Clean up error message generation during update attributes -- should fix bug #1823 - Eliminate heartbeat error messages. Fixes bug #1925 @@ -285,7 +331,7 @@ Version 5.2.8 10Jun12 - Apply readline without TERM_LIB dependency patch from bug #1871 - - Ensure cancel status is set for canceled duplicate jobs -- partial fix for + - Ensure cancel status is set for canceled duplicate jobs -- partial fix for bug #1851 - Enhance Win32 error messages -- fixes bug #1879 @@ -294,7 +340,7 @@ Version 5.2.8 - Remove config variables from examples/devices fixes bug #1884 - Add more debug code for bug 1885 - Add more debug to block.c when read rejected - - Fail job that attempts to read from closed device -- reported in bug 1885 but + - Fail job that attempts to read from closed device -- reported in bug 1885 but not fixed - Detect Python 2.7 fixes bug #1888 - Recompile configure @@ -400,7 +446,7 @@ Version 5.2.7 - Fix bug #1853: bacula-sd dead but pid file exists. 23Mar12 - - Fix bug #1841 estimate command level=differential goes wrong in accurate + - Fix bug #1841 estimate command level=differential goes wrong in accurate mode. 22Mar12 @@ -408,7 +454,7 @@ Version 5.2.7 - Fix bug #1848 bsock.c:335 Socket has errors=1 on call to client 10Mar12 - - Force the re-initialization of BaseJobOpts, AccurateOpts and VerifyOpts + - Force the re-initialization of BaseJobOpts, AccurateOpts and VerifyOpts between two Include{} 08Mar12 @@ -516,7 +562,7 @@ Version 5.2.4 - Back out bad MinValue patch 14Jan12 - - Fix bug #1810 use single quotes instead of double quotes for MinValue and + - Fix bug #1810 use single quotes instead of double quotes for MinValue and MaxValue in catalog 11Jan12 @@ -524,7 +570,7 @@ Version 5.2.4 - Set job status to running when restore job really starts 10Jan12 - - Remove ifdeffing that turned off JS_Warning status -- must have been missed + - Remove ifdeffing that turned off JS_Warning status -- must have been missed test code - Add support for soname setting in libtool. @@ -768,7 +814,7 @@ Version 5.2.1 - Lower some messages from level M_ERROR to M_WARNING in acl/xatttr. 07Sep11 - - Fix spooldata and ignoreduplicates run command options to use JCR instead of + - Fix spooldata and ignoreduplicates run command options to use JCR instead of the Job resource. 30Aug11 @@ -824,7 +870,7 @@ Version 5.2.0rc1 - Fix #1602 about Uninstall /S that should not prompt for user interaction 05Jul11 -- Change JobFiles display from %f to %F in RunScript because %f was already +- Change JobFiles display from %f to %F in RunScript because %f was already affected to Fileset name 28Jun11 @@ -834,7 +880,7 @@ Version 5.2.0rc1 21Jun11 - Solaris make doesn't like comments in make rules. - Fix OSX acl regression test. -- Storing the result in a local variable from sql_num_fields saves us a lot of +- Storing the result in a local variable from sql_num_fields saves us a lot of callbacks. 15Jun11 @@ -854,7 +900,7 @@ Version 5.2.0rc1 - Fix small memory leak when job get canceled. 01Jun11 -- Fix small memory leak in dbcheck not calling free_pool_memory for name +- Fix small memory leak in dbcheck not calling free_pool_memory for name variable. - Remove global variable shadowing by local variable. @@ -881,7 +927,7 @@ Version 5.2.0rc1 - AC_CHECK_DECL doesn't seem to work so lets do it somewhat differently. 13May11 -- First attempt at fixing bug #1735 where acls on OSX doesn't seem to reach the +- First attempt at fixing bug #1735 where acls on OSX doesn't seem to reach the backup. 10May11 @@ -890,7 +936,7 @@ Version 5.2.0rc1 04May11 - Don't force job duplicate checking on copy and migration jobs. - Simplify the code path in migration and copy jobs -- Allow duplicate job check override from run cmdline for migrate and copy +- Allow duplicate job check override from run cmdline for migrate and copy jobs. - Initialize spool_data_set as boolean. - Add stat packet size to encode/decode_ routines to detect compile differences @@ -910,7 +956,7 @@ Version 5.2.0rc1 21Apr11 - Use user arguments when upgrading catalog - Change all sm_checks into Dsm_check for performance reasons -- Free database results on class destruction (e.g. when reference count == +- Free database results on class destruction (e.g. when reference count == 0) 20Apr11 @@ -1004,7 +1050,6 @@ Version 5.2.0rc1 - Comment out unused variables in tray-monitor - Fix uninitialized variable in bat - Fix lock race conditions in bug #1675 -- Add missing code for rename incomplete to rerunning - Rename incomplete to rerunning for clarity 23Feb11 @@ -1021,7 +1066,6 @@ Version 5.2.0rc1 - Add %h option in runscript to get client address 21Feb11 -- Rework Incomplete job intereaction with Base and Accurate - Fix seg fault during cancel in SD 19Feb11 @@ -1054,7 +1098,7 @@ Version 5.2.0rc1 - Use old list_result() in db_list_xxx for good formating 04Feb11 -- Increase Windows backup/restore privileges possible fix to Virtual Disk +- Increase Windows backup/restore privileges possible fix to Virtual Disk ticket 05Feb11 @@ -1063,10 +1107,10 @@ Version 5.2.0rc1 03Feb11 - Add configure magic for detecting getpagesize -- Implement mntent_cache on top of the new htable code using a small htable big +- Implement mntent_cache on top of the new htable code using a small htable big buffer of 128 Kb to start with. -- Added support to htable for giving a hint on the number of pages to allocate - for the buffer used for hash_mallocs so we can have htables without the +- Added support to htable for giving a hint on the number of pages to allocate + for the buffer used for hash_mallocs so we can have htables without the previous default of 10 Mb. 05Feb11 @@ -1076,20 +1120,20 @@ Version 5.2.0rc1 - Add patch from bug #1574 for Scientific Linux spec - Apply patches from bug #1672 to clean up configuration - Check if volume name is valid in select_media_dbr() -- Small change to exporting functions not found in include files on some - platforms. Wrap it as one extern "C" block just like its done on most platforms +- Small change to exporting functions not found in include files on some + platforms. Wrap it as one extern "C" block just like its done on most platforms in the proper include files. -- Fixed some compile errors in IRIX and TRU64 xattr code which is kind of hard - to test without a proper platform. Compiled it now using some tricks on an - other platform defining it is the given platform and fix the compile errors +- Fixed some compile errors in IRIX and TRU64 xattr code which is kind of hard + to test without a proper platform. Compiled it now using some tricks on an + other platform defining it is the given platform and fix the compile errors that way using a fake header file. 04Feb11 - Improve bat stability by checking if page valid - Fix segfault with print_memory_pool_stats() -- Drop last SQL_INC leftovers. Due to backend abstraction there is no need to - include backend specific include files anywhere then in the backend driver - which use now per backend specific include directives. SQL_INC is not set by +- Drop last SQL_INC leftovers. Due to backend abstraction there is no need to + include backend specific include files anywhere then in the backend driver + which use now per backend specific include directives. SQL_INC is not set by configure anymore and should not be used anymore. 03Feb11 @@ -1114,22 +1158,22 @@ Version 5.2.0rc1 - Fix bad character in cats/sql_cmds.c 31Jan11 -- Removed old queries from sql_cmds.[ch] which are no longer referenced and +- Removed old queries from sql_cmds.[ch] which are no longer referenced and thus polluting the namespace for no obvious reason. - Fix possible core-dump as seen in regression testing 28Jan11 - Ensure that we always close the transaction in db_big_sql_query() -- Implement db_big_sql_query() that uses cursor on PostgreSQL and limit memory +- Implement db_big_sql_query() that uses cursor on PostgreSQL and limit memory usage in db_list_xxx - Detect mount/junction points and ignore junctions in Windows 25Jan11 -- Added set_db_type function to set global debug symbol removed when doing - class based catalog backends. Coding is a bit different as we need get_db_type - which needs a bdb class so we have to set it as part of the loop over all - catalogs. This way we may set the global variable a couple of times but the - code frees the global variable if needed so other then being somewhat overkill +- Added set_db_type function to set global debug symbol removed when doing + class based catalog backends. Coding is a bit different as we need get_db_type + which needs a bdb class so we have to set it as part of the loop over all + catalogs. This way we may set the global variable a couple of times but the + code frees the global variable if needed so other then being somewhat overkill no harm is done. - Drop removed catalog function prototype. - Fix logic inversion. @@ -1162,7 +1206,7 @@ Version 5.2.0rc1 - Fix #1685 about JobBytes counter when using Accurate/BaseJobs with checksum 12Jan11 -- Ignore replace=xx for directories. Corrects (not total solution) ticket 2317 +- Ignore replace=xx for directories. Corrects (not total solution) ticket 2317 and bug #1444 - Add restore replace=never test ticket 2317 - Add replace=xxx on restore command line @@ -1211,14 +1255,14 @@ Version 5.2.0rc1 - Fix compiler warning. 19Dec10 -- Set proper status of autochanger slots with 0 on startup -- no volume rather +- Set proper status of autochanger slots with 0 on startup -- no volume rather than unknown 14Dec10 - Add indentation in lsmark command output 17Dec10 -- Change SELECT count(*) to SELECT 1 .. LIMIT 1 to speed up PostgreSQL and +- Change SELECT count(*) to SELECT 1 .. LIMIT 1 to speed up PostgreSQL and Innodb in is_volume_purged() 01Dec10 @@ -1232,14 +1276,14 @@ Version 5.2.0rc1 - Fix end plugin stream index 16Dec10 -- Add missing switch values although the code works this is cleaner. Give - better error when trying to restore a particular type of acl on a filesystem +- Add missing switch values although the code works this is cleaner. Give + better error when trying to restore a particular type of acl on a filesystem without support for those types of acls. 15Dec10 -- Added support for NFSv4 ACLs added to FreeBSD 8.1. Some small updates to some +- Added support for NFSv4 ACLs added to FreeBSD 8.1. Some small updates to some comments of other ACL implementations. -- Added additional extended attributes used under FreeBSD for the storage of +- Added additional extended attributes used under FreeBSD for the storage of ACLs. 14Dec10 @@ -1279,7 +1323,7 @@ Version 5.2.0rc1 - Prepare for adding high bits to Stream - Use new FO_xxx bits in backup/restore and plugins - Define new stream bits -- Separate definitions of streams, filetypes, and fileoptions to separate +- Separate definitions of streams, filetypes, and fileoptions to separate files - Rename bEventVssSnapshotLetters to bEventPrepareSnapshot - rename plugin->len to plugin->file_len @@ -1389,7 +1433,7 @@ Version 5.2.0rc1 - Set daemon name and host name to zero 05Nov10 -- Permit to get Where/RegexWhere from Plugin and give access to Accurate +- Permit to get Where/RegexWhere from Plugin and give access to Accurate data - Allow Plugin command without argument - Fix compilation problem on win64 @@ -1419,18 +1463,18 @@ Version 5.2.0rc1 - Use start-stop-daemon handler to run daemons as bacula:bacula 26Sep10 -- Reverted the change of TRU64 to OSF1 for the OS detection rules. Although +- Reverted the change of TRU64 to OSF1 for the OS detection rules. Although Compaq/HP renamed OSF1 to TRU64 lets leave it for now. -- Fix new IRIX xattr code. Be a bit smarter when freeing data and do it in the +- Fix new IRIX xattr code. Be a bit smarter when freeing data and do it in the exception handler (e.g. after the goto label) - Fix some trivial errors and implemented the restore of IRIX xattrs. - Added first try at supporting IRIX extended attributes. 25Sep10 -- Added configure logic for detecting the TRU64 extended attributes interface. - Also made the acl and xattr configure logic use the HAVE_XXX_OS_TRUE variable - which is set by BA_CHECK_OPSYS macro so we only check for a certain interface - that we know only exist on a certain platform when we are running on that +- Added configure logic for detecting the TRU64 extended attributes interface. + Also made the acl and xattr configure logic use the HAVE_XXX_OS_TRUE variable + which is set by BA_CHECK_OPSYS macro so we only check for a certain interface + that we know only exist on a certain platform when we are running on that platform. This should make the configure output much cleaner. 24Sep10 @@ -1484,30 +1528,30 @@ Version 5.2.0rc1 23Sep10 - Add missing new stream definitions. -- Added xattr interface found in AIX 6.x and higher which mimics the Linux/OSF - interface but has just a bit different named functions and the error codes - are somewhat different so its not a perfect match to extend the generic - interface (which is named generic now instead of the linux interface as it +- Added xattr interface found in AIX 6.x and higher which mimics the Linux/OSF + interface but has just a bit different named functions and the error codes + are somewhat different so its not a perfect match to extend the generic + interface (which is named generic now instead of the linux interface as it used by Linux and OSX). - Added configure support for the AIX extended attributes interface. -- Added extra check for Solaris xattr support so we don't get false positives +- Added extra check for Solaris xattr support so we don't get false positives on other os-es (AIX) etc. 22Sep10 -- First compiling version of AIX 5.3 and later acl code using the new aclx_get +- First compiling version of AIX 5.3 and later acl code using the new aclx_get and aclx_put interface. -- AIX also supports setmntent/getmntent so use that instead of much more - complicated other interface which is left for AIX systems that might not +- AIX also supports setmntent/getmntent so use that instead of much more + complicated other interface which is left for AIX systems that might not support the setmntent/getmntent interface. 17Sep10 - Handle the old stream using the old system call just to be safe for now. 16Sep10 -- First steps for adding new interface for acls added to AIX 5.3 and later. - Added 2 new streams and basic code to handle these streams. Next step is the +- First steps for adding new interface for acls added to AIX 5.3 and later. + Added 2 new streams and basic code to handle these streams. Next step is the actual implementation. -- Rewrote ACL configure logic to be somewhat better readable in the same style +- Rewrote ACL configure logic to be somewhat better readable in the same style as the new xattr configure logic. 22Sep10 @@ -1524,7 +1568,7 @@ Version 5.2.0rc1 - Add skeleton of new bat run dialogs 18Sep10 -- Fix getmntinfo handling on FreeBSD as it seems its the same as OSX (no real +- Fix getmntinfo handling on FreeBSD as it seems its the same as OSX (no real surprise). 10Sep10 @@ -1535,19 +1579,19 @@ Version 5.2.0rc1 - Tweack project file to mark Item 7 done 30Aug10 -- Fix the insert_autokey_record functions to be 64bit compliant. This fixes a - long standing bug in the postgresql code where the id was converted using +- Fix the insert_autokey_record functions to be 64bit compliant. This fixes a + long standing bug in the postgresql code where the id was converted using atoi which is now changed into a str_to_int64. 17Aug10 -- When moving zlib into its seperate ZLIBS variable forgot to update the stored - Makefile.in which still uses FDLIBS. But as FDLIBS now only contains libraries - explicitly needed for building the filed this doesn't work. This should fix - that. This is mostly a problem on Solaris like operating system as the linker +- When moving zlib into its seperate ZLIBS variable forgot to update the stored + Makefile.in which still uses FDLIBS. But as FDLIBS now only contains libraries + explicitly needed for building the filed this doesn't work. This should fix + that. This is mostly a problem on Solaris like operating system as the linker doesn't load all dependency libs and gives unresolved symbols. 20Sep10 -- Fix bug #1623 about indexes that are already created or deleted in postgresql +- Fix bug #1623 about indexes that are already created or deleted in postgresql upgrade process. - First cut of bat rerun a Job from Jobs Run - Allow sorting of more bat media columns @@ -1590,7 +1634,7 @@ Version 5.2.0rc1 12Aug10 - Make third argument of DEVICE::d_ioctl optionnal to emulate varg -- Use SMARTALLOC+memset instead of overload new/delete that doesn't work in +- Use SMARTALLOC+memset instead of overload new/delete that doesn't work in bat 02Sep10 @@ -1704,9 +1748,9 @@ Version 5.2.0rc1 - Fix #1600 about problems with Accurate code on MySQL 26Jun10 -- Fix bug #1587 if you have clients with different catalogs configured, both +- Fix bug #1587 if you have clients with different catalogs configured, both catalogs contains all clients after a reload or restart of the dir -- Fix bug #1577 During migration: ERROR in block.c:950 Failed ASSERT: dev->is_open() +- Fix bug #1577 During migration: ERROR in block.c:950 Failed ASSERT: dev->is_open() by moving and commenting out the ASSERT() 24Jun10 @@ -1747,7 +1791,7 @@ Version 5.2.0rc1 - Attempt to fix duplicate job kill seg fault - Replace pthread_kill by my_thread_send_signal() in jcr.c - Fix postgresql error in grant script -- fix #1595 about batch mode detection problem for postgresql with non standard +- fix #1595 about batch mode detection problem for postgresql with non standard install dir - Add TestName to gdb traceback - Fix accurate code @@ -1767,7 +1811,7 @@ Version 5.2.0rc1 11Jun10 - Add new upgrade script from DB vers 12 to 13 -- Add BDB_VERSION for scripts + prepare update 11 to 12 + automate BDB_VERSION +- Add BDB_VERSION for scripts + prepare update 11 to 12 + automate BDB_VERSION checking 09Jun10 @@ -1784,7 +1828,7 @@ Version 5.2.0rc1 01Jun10 - Fix segfault on "cancel jobid=" command -- Create table with jobids as a temporary table and move the sql definition to +- Create table with jobids as a temporary table and move the sql definition to sql_cmds.c. We use a default query for all databases but Ingres. - Update makefiles for new libtool revision - Simplify libtool revision and use VERSION as default @@ -1794,7 +1838,7 @@ Version 5.2.0rc1 - Convert all Jmsg on the watchdog thread to Qmsg 30May10 -- Don't set socket buffer size unless explicite set by users. Suggested change +- Don't set socket buffer size unless explicite set by users. Suggested change from bug #1493 - Fix bug #1554 Windows installer doesn't honor /S flag @@ -1806,10 +1850,10 @@ Version 5.2.0rc1 27May10 - Fix bug #1581 ASSERTs in src/dird/jobq.c can never trigger -- Removed workaround for bug in Ingres with insert into tables with sequences - from the batch insert temporary table. Added comment to the Ingres make table - script to document the bug numbers which should be fixed in the Ingres - version to be able to run batch inserts and currently known patch numbers for +- Removed workaround for bug in Ingres with insert into tables with sequences + from the batch insert temporary table. Added comment to the Ingres make table + script to document the bug numbers which should be fixed in the Ingres + version to be able to run batch inserts and currently known patch numbers for Solaris x86 and Linux x86_64. 25May10 @@ -1827,23 +1871,23 @@ Version 5.2.0rc1 - Do not use mtime with basejobs 18May10 -- Optimize the selection process for saving either AFS or Native ACLS by - keeping track of the filesystem we are doing a backup of. This way we don't - have to check if a filesystem is still either AFS or not as when we know if - it is all files on the same filesystem are either AFS or not. We also clear - the native save flag when a filesystem says it doesn't support acls so we +- Optimize the selection process for saving either AFS or Native ACLS by + keeping track of the filesystem we are doing a backup of. This way we don't + have to check if a filesystem is still either AFS or not as when we know if + it is all files on the same filesystem are either AFS or not. We also clear + the native save flag when a filesystem says it doesn't support acls so we don't keep on trying saving acls on filesystem that don't support them. 16May10 -- Added preliminary AFS acl support. The code may need some testing on a real - AFS enabled server as most of the code was written using information available +- Added preliminary AFS acl support. The code may need some testing on a real + AFS enabled server as most of the code was written using information available on the Internet. The code compiles and links on Linux using OpenAFS 1.4. -- Added fstype rewrite code so we have a uniform way of retrieving the fstype - on Linux and OSF1 without the need to add code for each new filesystem added +- Added fstype rewrite code so we have a uniform way of retrieving the fstype + on Linux and OSF1 without the need to add code for each new filesystem added to a OS. 14May10 -- First stab at a simple script to dump the content of the complete Ingres +- First stab at a simple script to dump the content of the complete Ingres bacula database for disaster recovery purposes. 10May10 @@ -1873,10 +1917,10 @@ Version 5.2.0rc1 - Fix RestoreObject for PostgreSQL 01May10 -- Move some AC_MSG_RESULT macros around so the configure output looks somewhat +- Move some AC_MSG_RESULT macros around so the configure output looks somewhat cleaner. -- Move libz out of FDLIBS into a seperate variable as we need it for libbac.so - now too as it also has libz compiled functions. This way we keep the FDLIBS +- Move libz out of FDLIBS into a seperate variable as we need it for libbac.so + now too as it also has libz compiled functions. This way we keep the FDLIBS cleaner with only extra libs need for the Filed to compile. - Fix RestoreObject schema on PostgreSQL - Fix insertion of RestoreObject @@ -1887,9 +1931,9 @@ Version 5.2.0rc1 - Rework sql queries for update copies 30Apr10 -- Don't hardcode temporary table creation as some backend have a somewhat +- Don't hardcode temporary table creation as some backend have a somewhat different SQL syntax. -- Added missing column in Ingres database definition for new database object as +- Added missing column in Ingres database definition for new database object as reported by Stefan. 28Apr10 @@ -1898,9 +1942,9 @@ Version 5.2.0rc1 - Fix File and Job Retention in show pool command 27Apr10 -- Add Polish translation. This translation project is sponsored by Inteos Sp. z +- Add Polish translation. This translation project is sponsored by Inteos Sp. z o.o. based in Warsaw, PL. -- Change Ingres query filter to set a realy early timestamp instead of an empty +- Change Ingres query filter to set a realy early timestamp instead of an empty string which doesn't seem to work on all Ingres versions. - Add new file I missed from James' plugin patch @@ -1915,19 +1959,19 @@ Version 5.2.0rc1 - Put attr.c debug on dbglvl 24Apr10 -- Use lwps cmd in dbx and no threads as it seems to give some strange side - effects e.g. doesn't work and lwps seems to always work. So lwps it is +- Use lwps cmd in dbx and no threads as it seems to give some strange side + effects e.g. doesn't work and lwps seems to always work. So lwps it is then. - Fix #1559 problem when restoring pruned jobs with a regexp -- Do some work on the btraceback on Solaris, we test to see what debugger is - available and we prefer the debuggers in this order: dbx, gdb, mdb. Also - enchanced the dbx bactrace somewhat that it always dumps all available - threads (e.g. we also changed from lwp to threads for dbx). We also print - some variables that the gdb script also dumps on a bactrace. Hopefully we get - some better dumps using this. The mdb is used as a last resort as it should - be always installed on a Solaris box (dbx and gdb may not) but at the moment - I'm still trying to find out how to get some more understandable dumps from - mdb as its rather rudimentary and more a crash debugger then a source code +- Do some work on the btraceback on Solaris, we test to see what debugger is + available and we prefer the debuggers in this order: dbx, gdb, mdb. Also + enchanced the dbx bactrace somewhat that it always dumps all available + threads (e.g. we also changed from lwp to threads for dbx). We also print + some variables that the gdb script also dumps on a bactrace. Hopefully we get + some better dumps using this. The mdb is used as a last resort as it should + be always installed on a Solaris box (dbx and gdb may not) but at the moment + I'm still trying to find out how to get some more understandable dumps from + mdb as its rather rudimentary and more a crash debugger then a source code debugger. - Fix for bug #1560 bcopy cannot find Volume - Add beef @@ -1942,31 +1986,31 @@ Version 5.2.0rc1 - Fix cancel crash bug #1551 21Apr10 -- A timestamp can only be assigned to a timestamp in Ingres unless we convert - it inline. But why should we the code to get Timestamps is already there so +- A timestamp can only be assigned to a timestamp in Ingres unless we convert + it inline. But why should we the code to get Timestamps is already there so change it and we are allright. - For Ingres always enable batch mode inserts. - reindent some Ingres DECLARE queries so they are better readable. -- Lets not use the mdb->transaction bool but create a private one named mdb->explicit_commit - as mdb->transaction is used by the bacula core and we need a private setting +- Lets not use the mdb->transaction bool but create a private one named mdb->explicit_commit + as mdb->transaction is used by the bacula core and we need a private setting for Ingres. -- Lets have a single exit from db_write_batch_file_records where we always drop +- Lets have a single exit from db_write_batch_file_records where we always drop the temporary batch table. - Fix job_metadata name problem - Allow traceback with gdb on Solaris 20Apr10 -- Implement IS_NUM for Ingres by using eqsqlda.h IISQ_ values for numeric types +- Implement IS_NUM for Ingres by using eqsqlda.h IISQ_ values for numeric types supported by Ingres. - Correct Pool display in SD status. Fixes bug #1541 - Add performance notes in make_xxx_tables.in files 19Apr10 -- Fix Ingres problems with queries with have both an LIMIT and OFFSET clause as - we need to reorder this query for Ingres to be understandable we need some - more regexp magic for now. Lets make things exentsible and allow for multiple - regexps all being fired on a query transforming it into the query to execute. - Dropped the encoding check which is for postgresql but not interesting for +- Fix Ingres problems with queries with have both an LIMIT and OFFSET clause as + we need to reorder this query for Ingres to be understandable we need some + more regexp magic for now. Lets make things exentsible and allow for multiple + regexps all being fired on a query transforming it into the query to execute. + Dropped the encoding check which is for postgresql but not interesting for Ingres now we use VARBYTE and not VARCHAR. - Fix cancel crash reported by Stephen Thompson - Check if sql backend is thread-safe @@ -1991,9 +2035,9 @@ Version 5.2.0rc1 17Apr10 - Update Ingres temporary table definitions with new datatypes and lengths. -- Added extra check to scream when we encounter a database datatype which we - don't support yet. This should never happen as we should implement new - datatypes when we use them in the schema but some defensive programming +- Added extra check to scream when we encounter a database datatype which we + don't support yet. This should never happen as we should implement new + datatypes when we use them in the schema but some defensive programming doesn't hurt. - Some small indent changes. - Possible fix for big-files-test @@ -2001,41 +2045,41 @@ Version 5.2.0rc1 - Add back line accidentally deleted -- fixes verify-vol tests - Remove inappropriate comments and unused line - Fix badly named index -- First stab at rewriting the ingres database schema to allow bigger path and - filenames up to the current limit of 32000 bytes. Also reindented the database - definitions to the Bacula standards which make it somewhat easier to read. - Implemented the retrieval of some additional datatypes in the ingres backend +- First stab at rewriting the ingres database schema to allow bigger path and + filenames up to the current limit of 32000 bytes. Also reindented the database + definitions to the Bacula standards which make it somewhat easier to read. + Implemented the retrieval of some additional datatypes in the ingres backend now we switched some types from VARCHAR to VARBYTE. 16Apr10 - Remove closelog() in bpipe fixes bug #1536 - Convert restore object to use STREAM_RESTORE_OBJECT; cleaner code -- For now the Ingres type is not TEXT but VARCHAR(256) so lets define the +- For now the Ingres type is not TEXT but VARCHAR(256) so lets define the temporary table that way. -- Seperate some basejob queries into sql_cmds.c so the code is cleaner and we +- Seperate some basejob queries into sql_cmds.c so the code is cleaner and we can specify the Ingres specific definition of a temporary table. -- Remove some strange includes halve way this file which seems to be some +- Remove some strange includes halve way this file which seems to be some copied code from the top of the file. - Fix RestoreObject make_sqlite3_table.in syntax 15Apr10 -- DISTINCT ON postgresql queries won't work on Ingres so try if the MySQL +- DISTINCT ON postgresql queries won't work on Ingres so try if the MySQL queries do any better on Ingres. -- Small changes to btraceback script so on solaris we don't get strange errors - as PNAME is not a single binary name and that doesn't work to great for doing +- Small changes to btraceback script so on solaris we don't get strange errors + as PNAME is not a single binary name and that doesn't work to great for doing a gcore. - Add install and uninstall of btraceback.mdb script 14Apr10 - Remove bad index tips on mysql creation script - Apply James' patch with my restore object changes -- Add vss_close_backup_session after find_files + add object_name to restore +- Add vss_close_backup_session after find_files + add object_name to restore object 13Apr10 -- Ingres doesn't understand a query string with ORDER BY LastWritten IS NULL,LastWritten - DESC,MediaId and we must rewrite it to ORDER BY IFNULL(LastWritten, '') - DESC,MediaId which we now do by using an array with the correct order statement +- Ingres doesn't understand a query string with ORDER BY LastWritten IS NULL,LastWritten + DESC,MediaId and we must rewrite it to ORDER BY IFNULL(LastWritten, '') + DESC,MediaId which we now do by using an array with the correct order statement per backend in sql_cmds just as some of the other database specific queries. 12Apr10 @@ -2049,8 +2093,8 @@ Version 5.2.0rc1 10Apr10 - Extract restore object and send to FD first cut - Add Ingres RestoreObject SQL changes -- Rename sql_insert_id into sql_insert_autokey_record so things are somewhat - cleaner in name and things don't seem to imply we are just a mysql_insert_id +- Rename sql_insert_id into sql_insert_autokey_record so things are somewhat + cleaner in name and things don't seem to imply we are just a mysql_insert_id replacement, which we are not. 09Apr10 @@ -2081,10 +2125,10 @@ Version 5.2.0rc1 - Start RESTORE_OBJECT code 08Apr10 -- Fixed postgresql grant script which I seem to have updated while I thought I - updated the Ingres one. Also added a missing entry as reported by Martin +- Fixed postgresql grant script which I seem to have updated while I thought I + updated the Ingres one. Also added a missing entry as reported by Martin Simmons. -- First attempt at using mdb on Solaris instead of dbx which isn't standard on +- First attempt at using mdb on Solaris instead of dbx which isn't standard on most current Solaris versions. - fix grant_postgresql_privileges doesn t grant permissions on jobhisto_jobid_seq - Add back something that for whatever reason got lost on last big merge. @@ -2100,41 +2144,41 @@ Version 5.2.0rc1 05Apr10 - Added empty db_check_backend_thread_safe to dbi backend. - Change cryptic aop name -- Make sql_insert_id a atomic function which executes the insert query and when - that succeeds retrieves the id the database used for storing the inserted - record. Some databases want this to be atomic (e.g. without a COMMIT in +- Make sql_insert_id a atomic function which executes the insert query and when + that succeeds retrieves the id the database used for storing the inserted + record. Some databases want this to be atomic (e.g. without a COMMIT in between.) Coding wise this is also much cleaner. - Drop have_insert_id in mdb as its always true for all backends. -- Lets call it COMMIT and not END as that seems to be the counterpart of BEGIN - for transactions. Updated Ingres lock queries to only start a transaction as +- Lets call it COMMIT and not END as that seems to be the counterpart of BEGIN + for transactions. Updated Ingres lock queries to only start a transaction as the current SQL is not valid Ingres SQL. 04Apr10 -- First attempt at making things multi-threaded and make it possible to have - multiple connections to the database without having the dreaded ERR=E_LQ002E - The 'execute immediate' query has been issued outside of a DBMS session. This +- First attempt at making things multi-threaded and make it possible to have + multiple connections to the database without having the dreaded ERR=E_LQ002E + The 'execute immediate' query has been issued outside of a DBMS session. This compiles but seems to give some problems so into the debugger it is. -- Use -lq.1 -lcompat.1 as shared libraries instead of linking with -lingres - which is a static library. Also need to change generated code of esqlcc a bit +- Use -lq.1 -lcompat.1 as shared libraries instead of linking with -lingres + which is a static library. Also need to change generated code of esqlcc a bit to get things to link with the IIsqlca function. -- As we have a multithreaded application let tell that to esqlcc so it can +- As we have a multithreaded application let tell that to esqlcc so it can optimize for that. - Fix bscan segfault with new comment field 03Apr10 -- Creating a database as an other user and giving grants doesn't seem to work - for Ingres. Strange so for now create everything using the -u${db_user} - option. This is something that needs to be investigated as it should be +- Creating a database as an other user and giving grants doesn't seem to work + for Ingres. Strange so for now create everything using the -u${db_user} + option. This is something that needs to be investigated as it should be possible to have an different owner of the database. - Create user in the right database for Ingres. -- Do all Ingres operations as the user invoking the script just as for all the - other databases. The grant script will make sure the db_user will have the +- Do all Ingres operations as the user invoking the script just as for all the + other databases. The grant script will make sure the db_user will have the proper access rights to the database tables and sequences. - Fix username argument to sql for Ingres grants. - Replace ASSERT in block.c with fail Job - Make the Ingres grant script work. - Use uint32_t for max_concurrent_jobs -- Fix grant script to set grants on correct sequence names and not PostgreSQL +- Fix grant script to set grants on correct sequence names and not PostgreSQL names. - Add new item to projects @@ -2142,10 +2186,10 @@ Version 5.2.0rc1 - Fix bug #1542 File Daemon outputs usage message to stdout instead of stderr - Apply James' rename events patch - Apply James' plugin patch -- Added limit_filter which rewrites queries which use the LIMIT functions into - something Ingres can understand. Removed all static functions from the - myingres.sh file as they are no longer an exported interface (we can always - put that back when we have the need to export more functions). Some other +- Added limit_filter which rewrites queries which use the LIMIT functions into + something Ingres can understand. Removed all static functions from the + myingres.sh file as they are no longer an exported interface (we can always + put that back when we have the need to export more functions). Some other rewrites of the code to make it somewhat cleaner. 01Apr10 @@ -2166,7 +2210,7 @@ Version 5.2.0rc1 27Mar10 - Fix compiler warning. -- Fix database locking calling db_lock and returning from function without +- Fix database locking calling db_lock and returning from function without calling db_unlock. - Apply James' wide char patch - Patch from James @@ -2206,7 +2250,7 @@ Version 5.2.0rc1 - syntax fix, test improved, empty results fixed - Add read_vol_list mutex to lockmgr prio - Fix #1527 about deadlock during migration -- When including term.h we don't need prototypes for tgetent, tgetnum and +- When including term.h we don't need prototypes for tgetent, tgetnum and tgetstr as they are defined in term.h on Solaris. 10Mar10 @@ -2237,8 +2281,8 @@ Version 5.2.0rc1 - Fix bug #1524 verify fails after adding or removing files - Fix bug 1523. - Apply fix suggested by Andreas in bug #1502 for mediaview column sort problem -- Lets not generate the ingres code automatically when the .sc or .sh files - changes as it seems these files get outdated on some systems and then this +- Lets not generate the ingres code automatically when the .sc or .sh files + changes as it seems these files get outdated on some systems and then this rule kicks in on systems that don't have the esqlcc ingres compiler installed. 04Mar10 @@ -2249,18 +2293,18 @@ Version 5.2.0rc1 05Mar10 - This adds sql debugging to these classes that Eric wrote. -- This is a 1/2 fix of the issue. It allows for the sorting of the two non - graphic columns, but still does not allow for sorting the graphic columns. - The issue is with last. By setting the sort value, you are setting the value - on the last. To experiment with what I mean, use the set background that I +- This is a 1/2 fix of the issue. It allows for the sorting of the two non + graphic columns, but still does not allow for sorting the graphic columns. + The issue is with last. By setting the sort value, you are setting the value + on the last. To experiment with what I mean, use the set background that I have commented out in this commit. 04Mar10 - Create AddExclude entry point for plugins 03Mar10 -- Lets generate ingres code by calling esqlcc and not esqlc as we want c++ - code. Replaced some strncpy by bstrncpy calls. Add dependency in Makefile of +- Lets generate ingres code by calling esqlcc and not esqlc as we want c++ + code. Replaced some strncpy by bstrncpy calls. Add dependency in Makefile of generated code on it source file. - Another file to add James' code to get VssObject - Add James' code to get VssObject @@ -2268,7 +2312,7 @@ Version 5.2.0rc1 - Display AllowCompress warning message only if compression used in FileSet 01Mar10 -- Added comment on dbi backend needing a recent version of libdbi from CVS as +- Added comment on dbi backend needing a recent version of libdbi from CVS as the version currently released 0.8.3 wont work for compiling the code. - Add Warning check to SQL - Fix readline to use TERM_LIB found for conio @@ -2316,8 +2360,8 @@ Version 5.2.0rc1 - Added patch from Stefan Reddig -- improved ingres db test - Added patch from Stefan Reddig -- added some checks, db test prog - bug report 1505 -- This version fixes an issue where the console window would start out not - docked. It is fixed by initiating the variables in the Pages class with a +- This version fixes an issue where the console window would start out not + docked. It is fixed by initiating the variables in the Pages class with a constructor. 19Feb10 @@ -2342,7 +2386,7 @@ Version 5.2.0rc1 - Avoid error message if git not installed 15Feb10 -- Apply fix to previous fix of Copy problem. Fix proposed by reporter of bug +- Apply fix to previous fix of Copy problem. Fix proposed by reporter of bug #1476 - Set default Allow Duplicate Jobs = yes - Better cancel + fix Allow Dups code @@ -2367,7 +2411,7 @@ Version 5.2.0rc1 - Add code to check and prevent setting StorageId to zero 12Feb10 -- Lets call the Ingres version of the tables also version 12 as it already has +- Lets call the Ingres version of the tables also version 12 as it already has all the new tables introduced in version 12 on the other backends. - First cut at fixing AllowDuplicateJobs bugs - Fix bug #1501 -t does not print errors @@ -2384,7 +2428,7 @@ Version 5.2.0rc1 10Feb10 - Work around SQLite3 bug in bat submitted by Andreas Piesk a.piesk@gmx.net -- Move shared object numbers into version.h + use -release for libtool rather +- Move shared object numbers into version.h + use -release for libtool rather than -version-info - Make mtx-changer errors clearer - Check for existence of mtx-changer.conf in mtx-changer script @@ -2407,7 +2451,7 @@ Version 5.2.0rc1 07Feb10 - Fix Mysql database upgrade. -- Fix bug #1488 -- create delivery_error() subroutine to avoid recursion and +- Fix bug #1488 -- create delivery_error() subroutine to avoid recursion and race conditions in messages.c - Upgrade cats lib also to 5.1.0 @@ -2416,7 +2460,7 @@ Version 5.2.0rc1 - Move msg trace into subroutine - Move bat help files into help subdirectory - Add bat help files to Win64 installer -- Win -- add help files to installer + stop any running bacula-fd before +- Win -- add help files to installer + stop any running bacula-fd before install - Fix bug #1481 -- bat consumes all console file descriptors - Update date on win32 rc file @@ -2436,7 +2480,7 @@ Version 5.2.0rc1 - Implement new "purge volume action" command to trigg ActionOnPurge. - Disable action_on_purge message in Storage - Change db_get_media_ids() to use more MEDIA_DBR info in search -- Remove qmake-qt4 code so tht alternate qt4 build works. Fixes build problems +- Remove qmake-qt4 code so tht alternate qt4 build works. Fixes build problems in bug #1468 - Make configure.in changes recommended by Markus Elfring - Patch from checks multple CNs when using TLS @@ -2448,10 +2492,10 @@ Version 5.2.0rc1 - Fix seg fault in SQlite driver 29Jan10 -- - fixed the database/table scripts - db_user was missing - updated database - schema - fixed missing statements in sql*.h - since there is a db_type for - Ingres now, there have to be 5, not 4, members in the arrays - worked alot on - myingres.c - queries seems to be working, but the first INSERT fails with a +- - fixed the database/table scripts - db_user was missing - updated database + schema - fixed missing statements in sql*.h - since there is a db_type for + Ingres now, there have to be 5, not 4, members in the arrays - worked alot on + myingres.c - queries seems to be working, but the first INSERT fails with a segfault - Remove old bdb files + change DQUEUE to use dlist - Change copyright date @@ -2489,7 +2533,7 @@ Release version 5.0.3 - Fix compilation problem with zlib 02Aug10 -- Remove comments field from tls-duplicate-job-test -- add back next database +- Remove comments field from tls-duplicate-job-test -- add back next database upgrade 01Aug10 @@ -2590,9 +2634,9 @@ Release version 5.0.3 - Fix SD crash due to mismatched lock/unlock in error condition 26Jun10 -- Fix bug #1587 if you have clients with different catalogs configured, both +- Fix bug #1587 if you have clients with different catalogs configured, both catalogs contains all clients after a reload or restart of the dir -- Fix bug #1577 During migration: ERROR in block.c:950 Failed ASSERT: dev->is_open() +- Fix bug #1577 During migration: ERROR in block.c:950 Failed ASSERT: dev->is_open() by moving and commenting out the ASSERT() 23Jun10 @@ -2627,7 +2671,7 @@ Release version 5.0.3 18Jun10 - Attempt to fix duplicate job kill seg fault - Replace pthread_kill by my_thread_send_signal() in jcr.c -- fix #1595 about batch mode detection problem for postgresql with non standard +- fix #1595 about batch mode detection problem for postgresql with non standard install dir - Fix accurate code - Add TestName to gdb traceback @@ -2767,18 +2811,18 @@ Release Version 5.0.2 - Fix bug #1524 verify fails after adding or removing files - Fix bug 1523. - Apply fix suggested by Andreas in bug #1502 for mediaview column sort problem -- Lets not generate the ingres code automatically when the .sc or .sh files - changes as it seems these files get outdated on some systems and then this +- Lets not generate the ingres code automatically when the .sc or .sh files + changes as it seems these files get outdated on some systems and then this rule kicks in on systems that don't have the esqlcc ingres compiler installed. - Fix CentOS detection in regression get-os script 05Mar10 - Create subroutines to add exclusion for plugins - This adds sql debugging to these classes that Eric wrote. -- This is a 1/2 fix of the issue. It allows for the sorting of the two non - graphic columns, but still does not allow for sorting the graphic columns. - The issue is with last. By setting the sort value, you are setting the value - on the last. To experiment with what I mean, use the set background that I +- This is a 1/2 fix of the issue. It allows for the sorting of the two non + graphic columns, but still does not allow for sorting the graphic columns. + The issue is with last. By setting the sort value, you are setting the value + on the last. To experiment with what I mean, use the set background that I have commented out in this commit. 03Mar10 @@ -2786,7 +2830,7 @@ Release Version 5.0.2 - Display AllowCompress warning message only if compression used in FileSet 01Mar10 -- Added comment on dbi backend needing a recent version of libdbi from CVS as +- Added comment on dbi backend needing a recent version of libdbi from CVS as the version currently released 0.8.3 wont work for compiling the code. - Add Warning check to SQL - Fix readline to use TERM_LIB found for conio @@ -2878,7 +2922,7 @@ Release Version 4.0.1 - Switch to AGPLv3 22Jul10 -- Clear class buffer in operator new + add safe_free and correct some calls to +- Clear class buffer in operator new + add safe_free and correct some calls to use it - Really free free pool memory before sm_dump - Garbage collect memory pool at end of job and before sm_dump @@ -2890,7 +2934,7 @@ Release Version 4.0.1 - Add exclude code + fix a few orphaned buffers 19Jul10 -- Fix malloc of wrong size causing buffer overrun on restore with Windows +- Fix malloc of wrong size causing buffer overrun on restore with Windows plugins - Fix free of unallocated buffer in win plugin code - Add debug info to smartall.c for buffer overrun @@ -2970,7 +3014,7 @@ Release Version 4.0.0 Release Version 4.0.0-RC3 19Jun10 -- Move some AC_MSG_RESULT macros around so the configure output looks somewhat +- Move some AC_MSG_RESULT macros around so the configure output looks somewhat cleaner. - Save any dumps during regression to dumps directory - Fix crash from rw_lock/unlock miss match @@ -2980,7 +3024,7 @@ Release Version 4.0.0-RC3 18Jun10 - Fix postgresql error in grant script -- fix #1595 about batch mode detection problem for postgresql with non standard +- fix #1595 about batch mode detection problem for postgresql with non standard install dir - Fix accurate code @@ -2997,7 +3041,7 @@ Release Version 4.0.0-RC3 - Fix restore object compression flag -- James 11Jun10 -- Add BDB_VERSION for scripts + prepare update 11 to 12 + automate BDB_VERSION +- Add BDB_VERSION for scripts + prepare update 11 to 12 + automate BDB_VERSION checking 07Jun10 @@ -3024,7 +3068,7 @@ Release Version 4.0.0-RC3 - Fix problem with BaseJob and Accurate FileSet options on client side 12May10 -- Adjusted path handling to make 'where' work. 'where' is basically ignored. a +- Adjusted path handling to make 'where' work. 'where' is basically ignored. a 'regexwhere' that affects plugin paths will probably still break things 11May10 @@ -3034,15 +3078,15 @@ Release Version 4.0.0-RC3 10May10 - memory leak fixes - make tocharstring() report line and file correctly for sm_alloc -- use free instead of delete to free memory allocated with wcsdup remove DOS +- use free instead of delete to free memory allocated with wcsdup remove DOS EOLs - Free some memory allocated in find_filespec - plugin: Use smartalloc in find_filespec -- update find_filespec to allocate it's own memory and not retain any pointers +- update find_filespec to allocate it's own memory and not retain any pointers from the caller 08May10 -- remove GUID from the writer 'directory' name. Rely on the name of the instance_{GUID} +- remove GUID from the writer 'directory' name. Rely on the name of the instance_{GUID} dummy file instead - add some deletes back in now that find_filespec does the expected - Clean some stale code and superfluous debugging output @@ -3069,29 +3113,29 @@ Release Version 4.0.0-RC1 - Fix xml_name in plugin 03May10 -- Fix case order in vss_writer to resolve crash at the end of the writer +- Fix case order in vss_writer to resolve crash at the end of the writer backup - Fix segfault when loading Plugins 01May10 - Fix insertion of RestoreObject - Fix RestoreObject schema on PostgreSQL -- Use lwps cmd in dbx and no threads as it seems to give some strange side - effects e.g. doesn't work and lwps seems to always work. So lwps it is +- Use lwps cmd in dbx and no threads as it seems to give some strange side + effects e.g. doesn't work and lwps seems to always work. So lwps it is then. -- Do some work on the btraceback on Solaris, we test to see what debugger is - available and we prefer the debuggers in this order: dbx, gdb, mdb. Also - enchanced the dbx bactrace somewhat that it always dumps all available - threads (e.g. we also changed from lwp to threads for dbx). We also print - some variables that the gdb script also dumps on a bactrace. Hopefully we get - some better dumps using this. The mdb is used as a last resort as it should - be always installed on a Solaris box (dbx and gdb may not) but at the moment - I'm still trying to find out how to get some more understandable dumps from - mdb as its rather rudimentary and more a crash debugger then a source code +- Do some work on the btraceback on Solaris, we test to see what debugger is + available and we prefer the debuggers in this order: dbx, gdb, mdb. Also + enchanced the dbx bactrace somewhat that it always dumps all available + threads (e.g. we also changed from lwp to threads for dbx). We also print + some variables that the gdb script also dumps on a bactrace. Hopefully we get + some better dumps using this. The mdb is used as a last resort as it should + be always installed on a Solaris box (dbx and gdb may not) but at the moment + I'm still trying to find out how to get some more understandable dumps from + mdb as its rather rudimentary and more a crash debugger then a source code debugger. - Remove RestoreObjects when pruning Jobs - Fix File and Job Retention in show pool command -- Add Polish translation. This translation project is sponsored by Inteos Sp. z +- Add Polish translation. This translation project is sponsored by Inteos Sp. z o.o. based in Warsaw, PL. - Fix bug #1538 Start Scripts return incorrect value - Fix bug #1564 init scripts not LSB compliant @@ -3145,7 +3189,7 @@ Release Version 4.0.0-RC1 - Add File and Line info to rw_lock for lmgr 27Mar10 -- Fix database locking calling db_lock and returning from function without +- Fix database locking calling db_lock and returning from function without calling db_unlock. 26Mar10 @@ -3186,30 +3230,30 @@ Release Version 4.0.0-RC1 - Fix bug #1524 verify fails after adding or removing files - Fix bug 1523. - Apply fix suggested by Andreas in bug #1502 for mediaview column sort problem -- Lets not generate the ingres code automatically when the .sc or .sh files - changes as it seems these files get outdated on some systems and then this +- Lets not generate the ingres code automatically when the .sc or .sh files + changes as it seems these files get outdated on some systems and then this rule kicks in on systems that don't have the esqlcc ingres compiler installed. - Fix CentOS detection in regression get-os script 05Mar10 - Create subroutines to add exclusion for plugins - This adds sql debugging to these classes that Eric wrote. -- This is a 1/2 fix of the issue. It allows for the sorting of the two non - graphic columns, but still does not allow for sorting the graphic columns. - The issue is with last. By setting the sort value, you are setting the value - on the last. To experiment with what I mean, use the set background that I +- This is a 1/2 fix of the issue. It allows for the sorting of the two non + graphic columns, but still does not allow for sorting the graphic columns. + The issue is with last. By setting the sort value, you are setting the value + on the last. To experiment with what I mean, use the set background that I have commented out in this commit. 03Mar10 - Fix configure.in -- Lets generate ingres code by calling esqlcc and not esqlc as we want c++ - code. Replaced some strncpy by bstrncpy calls. Add dependency in Makefile of +- Lets generate ingres code by calling esqlcc and not esqlc as we want c++ + code. Replaced some strncpy by bstrncpy calls. Add dependency in Makefile of generated code on it source file. - Fix OpenSSL 1.x problem in crypto.c on Fedora 12 - Display AllowCompress warning message only if compression used in FileSet 01Mar10 -- Added comment on dbi backend needing a recent version of libdbi from CVS as +- Added comment on dbi backend needing a recent version of libdbi from CVS as the version currently released 0.8.3 wont work for compiling the code. - Add Warning check to SQL - Fix readline to use TERM_LIB found for conio @@ -3241,22 +3285,22 @@ Release Version 4.0.0-RC1 - Replace MIN by code as recommended by Marco to avoid compiler warning - Make script more portable - Add Fedora 11 and 12 build tags. -- Lets close the Ingres cursor otherwise the code complains the cursor is still +- Lets close the Ingres cursor otherwise the code complains the cursor is still open when we try to reuse it. -- Fix segv when indicator field is null. Also added some extra checks around +- Fix segv when indicator field is null. Also added some extra checks around free calls so we don't try to free null pointers. -- Changed strcpy to bstrncpy and sprintf to bsnprintf and changed the bsnprintf +- Changed strcpy to bstrncpy and sprintf to bsnprintf and changed the bsnprintf format. - Small indent changes 20Feb10 -- Sync between master and this branch as some ingres changes did go into master +- Sync between master and this branch as some ingres changes did go into master but not into this branch. -- Remove include file that makes the compile complain and doesn't seem to be +- Remove include file that makes the compile complain and doesn't seem to be used as removing makes the code compile ok. - Some small indent changes. - Reindented myingres.sc to Bacula "style" and regenerated myingres.c -- Merged in rejects from previous patch and regenerated new myingres.c from +- Merged in rejects from previous patch and regenerated new myingres.c from myingres.sc using esqlc. Changed sprintf into snprintf. - Added patch from Stefan Reddig -- fixed date types, errmsg - Added patch from Stefan Reddig -- improved ingres db test @@ -3269,8 +3313,8 @@ Release Version 4.0.0-RC1 - Remove mysql version variable. - Enable readline support. - bug report 1505 -- This version fixes an issue where the console window would start out not - docked. It is fixed by initiating the variables in the Pages class with a +- This version fixes an issue where the console window would start out not + docked. It is fixed by initiating the variables in the Pages class with a constructor. 19Feb10 @@ -3284,22 +3328,22 @@ Release Version 4.0.0-RC1 - Replace MIN by code as recommended by Marco to avoid compiler warning - Make script more portable - Add Fedora 11 and 12 build tags. -- Lets close the Ingres cursor otherwise the code complains the cursor is still +- Lets close the Ingres cursor otherwise the code complains the cursor is still open when we try to reuse it. -- Fix segv when indicator field is null. Also added some extra checks around +- Fix segv when indicator field is null. Also added some extra checks around free calls so we don't try to free null pointers. -- Changed strcpy to bstrncpy and sprintf to bsnprintf and changed the bsnprintf +- Changed strcpy to bstrncpy and sprintf to bsnprintf and changed the bsnprintf format. - Small indent changes 20Feb10 -- Sync between master and this branch as some ingres changes did go into master +- Sync between master and this branch as some ingres changes did go into master but not into this branch. -- Remove include file that makes the compile complain and doesn't seem to be +- Remove include file that makes the compile complain and doesn't seem to be used as removing makes the code compile ok. - Some small indent changes. - Reindented myingres.sc to Bacula "style" and regenerated myingres.c -- Merged in rejects from previous patch and regenerated new myingres.c from +- Merged in rejects from previous patch and regenerated new myingres.c from myingres.sc using esqlc. Changed sprintf into snprintf. - Added patch from Stefan Reddig -- fixed date types, errmsg - Added patch from Stefan Reddig -- improved ingres db test @@ -3312,8 +3356,8 @@ Release Version 4.0.0-RC1 - Remove mysql version variable. - Enable readline support. - bug report 1505 -- This version fixes an issue where the console window would start out not - docked. It is fixed by initiating the variables in the Pages class with a +- This version fixes an issue where the console window would start out not + docked. It is fixed by initiating the variables in the Pages class with a constructor. 19Feb10 @@ -3779,7 +3823,7 @@ Release Version 5.0.0 - update 09Nov09 -- Optimize SQL to determine file selection with directories. It is enabled for +- Optimize SQL to determine file selection with directories. It is enabled for ascii path. 07Nov09 @@ -3840,7 +3884,7 @@ Release Version 5.0.0 - update bat on win32 project file 27Oct09 -- Small fix to Eric great patch for readline commandcompletion so it also +- Small fix to Eric great patch for readline commandcompletion so it also compiles on non gcc compilers. - Add readline completion for commands and argument @@ -3874,7 +3918,7 @@ Release Version 5.0.0 - Disallow Qmsg when despooling - Fix Qmsg race condition reported by Eric - add test for bad messages ressource -- bat: Display a nice graphic on media usage depending on the average size for +- bat: Display a nice graphic on media usage depending on the average size for this mediatype. 22Oct09 @@ -3887,12 +3931,12 @@ Release Version 5.0.0 - Make new configure per Marco's request - bat: add new Expired button in MediaView - fix vtape test -- Redirect errors to /dev/null and only run uname -p on Linux where we know it +- Redirect errors to /dev/null and only run uname -p on Linux where we know it works. This is probably the most portable way of doing things. 20Oct09 -- Add MediaView form that displays the Media list in a QTableWidget. It permits - to search and sort media. Rename current "Media" tab to "Pool" as it displays +- Add MediaView form that displays the Media list in a QTableWidget. It permits + to search and sort media. Rename current "Media" tab to "Pool" as it displays Pools - Permit to use MediaId or VolumeName in MediaEdit panel - add StringList to handle locations, volstatus and mediatypes @@ -3911,7 +3955,7 @@ Release Version 5.0.0 18Oct09 - update fr.po - Added acl and xattr regression tests for FreeBSD -- Use getfattr and setfattr on Linux not attr as that is a XFS tool which works +- Use getfattr and setfattr on Linux not attr as that is a XFS tool which works too but is not native. - Don't enable SUN compiler by default and make the configdir configurable. - Add test when ActionOnPurge=None Add test for update volume=xxx actiononpurge=yyy @@ -3921,7 +3965,7 @@ Release Version 5.0.0 - update regress 17Oct09 -- Ensure that Ubuntu /var/run is created in init.d scripts suggested by nick +- Ensure that Ubuntu /var/run is created in init.d scripts suggested by nick - Implement Dan's suggestion to avoid IPv6 problems - Add makeall for release @@ -3936,7 +3980,7 @@ Release Version 5.0.0 - Add Marco's run regression wrapper script - Possible fix for problem with Volume in another drive - Make new configure from Marco's configure.in -- Try to unmount by running the unmount command specified in the config on file +- Try to unmount by running the unmount command specified in the config on file and dvd devices. - Fix switching read device reported by Nicolae Mihalache @@ -3947,7 +3991,7 @@ Release Version 5.0.0 - Add comments to fileregexp test - Add more debug in filregexp test - Eliminate compiler warning -- Fix bug #1391 Job status improperly set due to subtle variable overload +- Fix bug #1391 Job status improperly set due to subtle variable overload problem 14Oct09 @@ -3962,7 +4006,7 @@ Release Version 5.0.0 - Fix #1352 about double free with regexp and big filenames on windows 11Oct09 -- Small update to cache the current attrspace we are saving and make a private +- Small update to cache the current attrspace we are saving and make a private copy of that string representation. - Change acl and xattr errors from Qmsg to Jmsg - Add comment @@ -3983,29 +4027,29 @@ Release Version 5.0.0 - fix bash/sh problem in disk-changer.in - Fix some comments - remove old db_get_int_handler() -- Add support when extattr_get_file is supported but extattr_get_link is +- Add support when extattr_get_file is supported but extattr_get_link is not. - Regenerated config.h.in 08Oct09 -- Implement transfer and listall command in mtx-changer and disk-changer +- Implement transfer and listall command in mtx-changer and disk-changer scripts - Add new autochanger command to get all information about content 07Oct09 -- As things are no longer as generic rename the generic to the linux interface +- As things are no longer as generic rename the generic to the linux interface (b.t.w. OSX also implements this interface) -- Just as with serializing first unserialize all xattr structures in memory and +- Just as with serializing first unserialize all xattr structures in memory and then walk that list for restoring them. - delete the alist in the destroy function -- Implement the extattr xBSD interface Moved some code around to be able to - reuse the encoding and decoding for both the extattr and xattr interface Use - an alist for storing the xattr list so we don't have to count the number of +- Implement the extattr xBSD interface Moved some code around to be able to + reuse the encoding and decoding for both the extattr and xattr interface Use + an alist for storing the xattr list so we don't have to count the number of xattr first -- Use extattr interface for all xBSD filesystems. Added OpenBSD also to the +- Use extattr interface for all xBSD filesystems. Added OpenBSD also to the mix. -- As it seems FreeBSD doesn't have the llistxattr or listxattr interface as - Linux, OSX and NetBSD have but has an interface named extattr. This is a +- As it seems FreeBSD doesn't have the llistxattr or listxattr interface as + Linux, OSX and NetBSD have but has an interface named extattr. This is a first breakdown to implement that interface. 05Oct09 @@ -4040,7 +4084,7 @@ Release Version 5.0.0 - Implement console 'timeout' feature using bacula socket timers - revert the update_bacula_table script change with bad indexes - Add index modification in update_sqlite/sqlite3/postgresql scripts -- Remove the inx4 index for SQLite2/3 (FilenameId, PathId) on File table. +- Remove the inx4 index for SQLite2/3 (FilenameId, PathId) on File table. Replace it by an index over (JobId, PathId, FilenameId). 28Sep09 @@ -4063,9 +4107,9 @@ Release Version 5.0.0 - Fix Alpha ifdefing -- should fix bug #1359 22Sep09 -- Remove the file_fp_idx index for Postgresql (FilenameId, PathId) on File - table. It is useless for common usage, and causes performance issues. This - index fragments over the time and the update cost grows very quickly. (This +- Remove the file_fp_idx index for Postgresql (FilenameId, PathId) on File + table. It is useless for common usage, and causes performance issues. This + index fragments over the time and the update cost grows very quickly. (This index is not present on Mysql schema) 21Sep09 @@ -4140,14 +4184,14 @@ Release Version 5.0.0 09Sep09 - Keep valgrind happy - Fix Exclude Dir Containing ignored when scanning the top_level dir -- Update the new exclude-dir-test with multiple Include {} section and different +- Update the new exclude-dir-test with multiple Include {} section and different Exclude Dir Contain directive. - Add patch for #1370 -- Fix #1370 about the implementation of the "Exclude Dir Containing" option on +- Fix #1370 about the implementation of the "Exclude Dir Containing" option on FD. - Add new exclude-dir-test - Add patch for 3.0.2 release -- Fix #1369 about segfault when using ExcludeDirContaining before defining +- Fix #1369 about segfault when using ExcludeDirContaining before defining Options{} block. - Verify if the Exclude Dir Containing directive does his job - Add a regress script for Exclude Dir Containing option @@ -4160,15 +4204,15 @@ Release Version 5.0.0 07Sep09 - fix compilation warning -- Make output of new commands .lsdir/.lsfile more usable. Fix Bvfs with new +- Make output of new commands .lsdir/.lsfile more usable. Fix Bvfs with new db_list object - Fix header defines -- Remove some #ifdef-ed code and make it just as the acl and xattr code use a +- Remove some #ifdef-ed code and make it just as the acl and xattr code use a const bool to enable the code. - Redone comments -- Move restore struct defintions to seperate include file. Small change to +- Move restore struct defintions to seperate include file. Small change to acl.h and xattr.h to use define inline with other header files. -- Move finderinfo restore into seperate function so we can use cleaner coding +- Move finderinfo restore into seperate function so we can use cleaner coding in the restore loop. - Loose #ifdef and use const bool wrapper for some cleaner coding. - Added support for acl and xattr regression test on Solaris @@ -4195,7 +4239,7 @@ Release Version 5.0.0 03Sep09 - btape: Add speed command - btape: Add speed information on qfill and raw command -- Commit patch for: Fix bug #1355 Director crashes with double free in Accurate +- Commit patch for: Fix bug #1355 Director crashes with double free in Accurate SQL query - Include file,blk in btape fill output - Create exit_code for fill with multiple tapes @@ -4211,7 +4255,7 @@ Release Version 5.0.0 - Attempt to fix SQLite3 seg fault in list routines - Merge master with SF - Update tape tests for hardware certification -- Rename .lsdirs/.lsfiles/.update to .bvfs_xxx to avoid confusion with future +- Rename .lsdirs/.lsfiles/.update to .bvfs_xxx to avoid confusion with future commands - Update tape tests for hardware certification - Eliminate xattr.c compiler warning @@ -4219,9 +4263,9 @@ Release Version 5.0.0 31Aug09 - Prohibit copy and assignment in db_list_ctx - Use new db_list_ctx class instead of bad POOLMEM* -- Exclude OSX resource forks from saving using the xattr code Exclude OSX acl - data from saving using the xattr code when normal acl mode is also enabled. - Make excluding certain xattr in the generic functions somewhat easier for +- Exclude OSX resource forks from saving using the xattr code Exclude OSX acl + data from saving using the xattr code when normal acl mode is also enabled. + Make excluding certain xattr in the generic functions somewhat easier for certain OS specific attributes. - Fix Win32/64 build @@ -4254,12 +4298,12 @@ Release Version 5.0.0 - Test of git commit. - bat: fix variable name - bat: Simplify the code to make TableWidget in read-only -- Free Volume in several places. Fixes virtual-changer problem and possibly bug +- Free Volume in several places. Fixes virtual-changer problem and possibly bug #1346. - Add SD Volume debug code 22Aug09 -- Don't print different filesystem. Will not descend message if directory +- Don't print different filesystem. Will not descend message if directory explicitly excluded - capitalize bytes in message @@ -4275,57 +4319,57 @@ Release Version 5.0.0 - in status slots command, unlock db just after sql query 19Aug09 -- Add BWEBCONF env variable to specify the bweb.conf path without touching the +- Add BWEBCONF env variable to specify the bweb.conf path without touching the Bweb.pm file with lighttpd - Fix bat crash due to alignment diff in bat and core code - Fix acl-xattr-test by using attr -- Add BWEBCONF env variable to specify the bweb.conf path without touching the +- Add BWEBCONF env variable to specify the bweb.conf path without touching the Bweb.pm file with lighttpd - Ensure that timestamp put in SQL log 15Aug09 -- prevent status page from requesting status before it has been brought to the +- prevent status page from requesting status before it has been brought to the front - Move global acquire lock to lock by device - Restrict acquire to one job at a time - Fix acquire.c locking - Try to fix acquire not to block during despooling - Add fullname parameter to btime in order to debug regress script. -- No need to flush the members of the xattr link cache as they are not dynamically +- No need to flush the members of the xattr link cache as they are not dynamically created. Small oversight from my side, was thinking I had a memory leak. - fix couple of segfault in acl/xattr code - Eliminate git pull in config_dart -- Some small fixes to the counting and some small relayout of small code +- Some small fixes to the counting and some small relayout of small code sniplets. -- Lets first output statistics before freeing them. Saves a rather stupid +- Lets first output statistics before freeing them. Saves a rather stupid segmentation fault. - Fix merge conflict leftover -- Add all acl and xattr related variables which are either global or already - part of the JCR into a simple structure and reference that from the JCR +- Add all acl and xattr related variables which are either global or already + part of the JCR into a simple structure and reference that from the JCR structure. 14Aug09 -- Some small fixes to the counting and some small relayout of small code +- Some small fixes to the counting and some small relayout of small code sniplets. -- Lets first output statistics before freeing them. Saves a rather stupid +- Lets first output statistics before freeing them. Saves a rather stupid segmentation fault. - Ignore regress time.out file - Fix merge conflict leftover -- Add all acl and xattr related variables which are either global or already - part of the JCR into a simple structure and reference that from the JCR +- Add all acl and xattr related variables which are either global or already + part of the JCR into a simple structure and reference that from the JCR structure. - fix compilation problem reported by Dan - Correct spelling of writing -- reported by Dan -- Loose void pointer and use C++ supported declaration elsewhere defined +- Loose void pointer and use C++ supported declaration elsewhere defined structure. -- Move global variables into jcr private xattr data structure so we can have +- Move global variables into jcr private xattr data structure so we can have parallel saves of xattr on solaris. 13Aug09 - update lock manager to get better traces - Fix files wiped out by merge - Missed commiting one file last time -- bat: Add a re-run button on job info page, that allows to run the selected +- bat: Add a re-run button on job info page, that allows to run the selected job with the same properties (level, pool, etc...) - bat: small fix on hrule - fix missing copyright @@ -4337,13 +4381,13 @@ Release Version 5.0.0 - Add .lsfiles, .lsdirs, .update command to interface user with bvfs object - More comments - Update virtual regress comments -- bat: fix sql with volreadtime volwritetime bat: add drive=0 in update slots +- bat: fix sql with volreadtime volwritetime bat: add drive=0 in update slots command -- bat: Put the content panel as a child of the Storage item bat: use slot +- bat: Put the content panel as a child of the Storage item bat: use slot selection in update slots command and in label command 11Aug09 -- bat: fix volreadtime/volwritetime and messages in stderr about unknown +- bat: fix volreadtime/volwritetime and messages in stderr about unknown slots - Change backup-acl to acl-xattr-test and make it skip if acl/xattr not installed - Use tmp instead of /tmp + fix strip-test so diff works @@ -4375,33 +4419,32 @@ Release Version 5.0.0 - Small change to comments - Added comment on entry points - Added missing ENOENT switch case. -- Fix problem with counting xattr and returning a non-ok on count 0, also added - some extra comment and make sure the xattr_value_list is initialized to NULL +- Fix problem with counting xattr and returning a non-ok on count 0, also added + some extra comment and make sure the xattr_value_list is initialized to NULL and checked on bail_out. - Loose default_stream parameter. - Changed snprintf to bsnprintf - Use bstrncpy instead of strncpy - Fixed Jmsg4 to Mmsg4 -- Added support for counting xattr errors and only print a limited set of - errors but count all. The lower level functions now store there error message +- Added support for counting xattr errors and only print a limited set of + errors but count all. The lower level functions now store there error message in jcr->errmsg so the upper level routines have access to them. -- Added support for counting acl errors and only print a limited set of errors - but count all. The lower level functions now store there error message in +- Added support for counting acl errors and only print a limited set of errors + but count all. The lower level functions now store there error message in jcr->errmsg so the upper level routines have access to them. - Small changes to ifdef layout. - Drop unneeded target for libbacfind.a -- Moved the berrno as a local variable of the function and not a local context +- Moved the berrno as a local variable of the function and not a local context variable. Same as previous change for acl.c -- Make sure it compiles and moved the berrno as a local variable of the function +- Make sure it compiles and moved the berrno as a local variable of the function and not a local context variable. Moved tri-state enum to protos.h -- Moved list of supported xattr to start of per OS implementation like in +- Moved list of supported xattr to start of per OS implementation like in acl.c - Imported patch from older git tree. - bat: init storage content view 08Aug09 - Fix cats.h date -- Start adding Incomplete Job status - bat: display a Warning symbole when having Errors>0 and Status=T - Add data end tracking an attribute spooling - Fix compiler warning in bvfs code @@ -4410,8 +4453,8 @@ Release Version 5.0.0 - Ignore src/tools/bvfs_test 07Aug09 -- bvfs: Add example to list files versions bvfs: Fix directory listing bvfs: - Add limit/offset implementation to save resources on director bvfs: Create +- bvfs: Add example to list files versions bvfs: Fix directory listing bvfs: + Add limit/offset implementation to save resources on director bvfs: Create cache tables on the fly when using Bvfs object (for testing) - Bvfs: Create cache tables when updating the cache if they don't exist @@ -4421,7 +4464,7 @@ Release Version 5.0.0 - add user handler to print directory add -j, -p to bvfs_test tool - Document FT_DELETED FileIndex=0 special value in database Schema - Add the rest of files for new Bvfs -- Add a new Bvfs class that implements brestore instant navigation cache inside +- Add a new Bvfs class that implements brestore instant navigation cache inside Bacula. Works for Mysql, Postgresql and Sqlite3 - bat: fix compiler warning for unreferenced argument - fix mysql case problem in bweb/bresto @@ -4440,7 +4483,7 @@ Release Version 5.0.0 - Apply patch for regress from Frank Sweester - connect button from mediainfo to real actions - bat fill mediainfo fields -- bat: Go to the media info panel when double-click on job page or media +- bat: Go to the media info panel when double-click on job page or media list 03Aug09 @@ -4533,7 +4576,7 @@ Release Version 5.0.0 - Remove docs from spec - Split docs into bacula-docs.spec - Move bat and mtx to their own spec files -- found a bug. Joblist page would not come up unless dockPage was called when +- found a bug. Joblist page would not come up unless dockPage was called when page was opened with initial paramaters. 01Aug09 @@ -4551,7 +4594,7 @@ Release Version 5.0.0 31Jul09 - Split docs out of bacula.spec - Insert the tabbed widgets as opposed to adding to the end. -- Don't dock the page for dirstat and restore tree until the page selector tree +- Don't dock the page for dirstat and restore tree until the page selector tree widget is clicked. - I like this sorting method better. - Update bacula.spec @@ -4598,7 +4641,7 @@ Release Version 5.0.0 - Attempt to fix SQLite seg fault problem - Fix Expired option in media list to select Used media - Set selection items on top. -- this should resolve issues that people are having with this splitter. If you +- this should resolve issues that people are having with this splitter. If you try to make it too large, it just snaps back. 23Jul09 @@ -4614,7 +4657,7 @@ Release Version 5.0.0 - Modify setJobStatus so cancel has same priority as fatal errors - Fix Solaris compiler warning in signal.c - Change selection behavior in the director status screen. -- Do not restore spliiter settings if the settings do not contain settings for +- Do not restore spliiter settings if the settings do not contain settings for that splitter. - This is committing most of the patch received from Eric. @@ -4627,7 +4670,7 @@ Release Version 5.0.0 - es.po merged with bacula.pot 3.0.2 19Jul09 -- This is the change that may be used in the future to resolve the issue with +- This is the change that may be used in the future to resolve the issue with text input required during a console communication. - Final changes - Add es lingua @@ -4653,7 +4696,7 @@ Release Version 5.0.0 16Jul09 - Remove print and save menu -- Simplify the main screen, removing the status dir console icon and the "go +- Simplify the main screen, removing the status dir console icon and the "go back" one - fix spell - fix case problem in field name @@ -4670,11 +4713,11 @@ Release Version 5.0.0 - Fix #1323 about a problem when mounting a requested volume during a restore. - Use the read as primary color in bweb - Fix script for vtape tests -- Fix graph_font parameter to work with graph module Avoid warning messages in +- Fix graph_font parameter to work with graph module Avoid warning messages in apache log with graph module - Update - update INSTALL file -- update apache section in INSTALL file and try to choose better color for +- update apache section in INSTALL file and try to choose better color for graphs. - Fix Spanish files translated @@ -4684,7 +4727,7 @@ Release Version 5.0.0 - Make CONF::init header and .c file agree about types - update - update cloud project -- Force the client_encoding to SQL_ASCII when database is already using this +- Force the client_encoding to SQL_ASCII when database is already using this mode. - Fix #1335 about postgresql error message during copy session - Add documentation about new restore menu @@ -4721,7 +4764,7 @@ Release Version 5.0.0 09Jul09 - More changes in es.po (37%) - add --with-hostname to ./configure -- Changed ACL_OTHER into ACL_OTHER_OBJ as IRIX doesn't seem to have ACL_OTHER. +- Changed ACL_OTHER into ACL_OTHER_OBJ as IRIX doesn't seem to have ACL_OTHER. Fixes bug #1333 06Jul09 @@ -4739,14 +4782,14 @@ Release Version 5.0.0 03Jul09 - Correct registered trademark notice -- Should fix the first part #1323 about the restore option "List Jobs where a +- Should fix the first part #1323 about the restore option "List Jobs where a given File is saved" wich display deleted files 02Jul09 - Add estimate accurate doc - add accurate=yes/no test for estimate - Update help page with accurate=yes/no -- Add estimate accurate=yes/no ebl Change the code to check jcr->accurate and +- Add estimate accurate=yes/no ebl Change the code to check jcr->accurate and not jcr->job->accurate - Add estimate test - Make estimate command accurate compatible. Should fix #1318 @@ -4781,17 +4824,17 @@ Release Version 5.0.0 - Added symbols required for win32 build 25Jun09 -- Modify xattr.c and acl.c not to fail the job on errors. This should fix bug +- Modify xattr.c and acl.c not to fail the job on errors. This should fix bug #1305. 23Jun09 -- Fix 2 rather big bugs in the xattr and acl code and fix a small memory leak +- Fix 2 rather big bugs in the xattr and acl code and fix a small memory leak on a particular code path for Linux xattr/acl handling. - update newfeature with project 37 - Update FileSetId when initializing job. - fix compilation problem - add a note about /sys/class/scsi_tape/nst0/default_compression, fix #1314 -- Add '*' when volume is online when displaying volume list in restore. Should +- Add '*' when volume is online when displaying volume list in restore. Should complete project 31. 21Jun09 @@ -4802,12 +4845,12 @@ Release Version 5.0.0 - Fix bat install for 3.x 19Jun09 -- Add a boolean to console class to allow for the warning popup, except in - cases where I want to prevent the popup. So far this is only for purging +- Add a boolean to console class to allow for the warning popup, except in + cases where I want to prevent the popup. So far this is only for purging jobs. - Correct a misspelling in a relatively trivial spot. -- Add job type and first volume of the job to the 4th pane the version table. - This is so that when looking at what version to restore with copy jobs the +- Add job type and first volume of the job to the 4th pane the version table. + This is so that when looking at what version to restore with copy jobs the user can make a better decision as to which job to restore from 18Jun09 @@ -4833,20 +4876,20 @@ Release Version 5.0.0 - Add a previous page button to the button bar. 13Jun09 -- Add feature in pages to have a console command that does not set the console +- Add feature in pages to have a console command that does not set the console current. Then also use that feature in joblist to purge or delete a job. -- Add a stringlist and a foreach after populating to at least acknowledge to - the user that a new fileset. Bat would not show the fileset until the database +- Add a stringlist and a foreach after populating to at least acknowledge to + the user that a new fileset. Bat would not show the fileset until the database table had the fileset which was not until used. 12Jun09 - Remove non-portable code referencing pthread_t fixes bug #1308. - Remove non-portable code referencing pthread_t -- Create patch that may fix bug #1298 and bug #1304, which causes an SD crash +- Create patch that may fix bug #1298 and bug #1304, which causes an SD crash after canceling a job. 11Jun09 -- When looking at what got backed up from a windows differential, found a bug +- When looking at what got backed up from a windows differential, found a bug where it would create many "Bases". This fixes it subtly. 09Jun09 @@ -4857,7 +4900,7 @@ Release Version 5.0.0 - Commit migrate patch for bug #1303 05Jun09 -- Improve error messages when a migration sql query is used and correct the +- Improve error messages when a migration sql query is used and correct the problem identified in bug #1303 with starting Job names containing spaces. - Fix #1306 when building static bconsole @@ -4870,11 +4913,11 @@ Release Version 5.0.0 - update 01Jun09 -- Setting actions up like this I think is better. No restore from job or time +- Setting actions up like this I think is better. No restore from job or time if more than one job selected. -- Add columns for first media and volume count. Change some semantics of how +- Add columns for first media and volume count. Change some semantics of how signals execute functions when a selection list is changed. -- Prevent warnings from showing as dialog boxes that can interupt multiple +- Prevent warnings from showing as dialog boxes that can interupt multiple operations performed in a foreach. 31May09 @@ -4882,7 +4925,7 @@ Release Version 5.0.0 30May09 - A fix for mysql database sql syntax. -- Add columns to the tree to show read/write time, scratch pool, recycle +- Add columns to the tree to show read/write time, scratch pool, recycle count. - Somehow I was losing the refresh jobs action. This should keep it in. @@ -4892,26 +4935,26 @@ Release Version 5.0.0 28May09 - Correct incorrect placement of trap for m_firstpopulated. -- There was an issue with empty directories. The director would print node xxx - has no children and bat would interpret that as a directory. This fixes it +- There was an issue with empty directories. The director would print node xxx + has no children and bat would interpret that as a directory. This fixes it but it may not be the best solution. - update 27May09 -- Make sure that vtape directory is created during -tape tests ebl change grep +- Make sure that vtape directory is created during -tape tests ebl change grep -e to grep -E to make source-addr-test working as expected - Simplify mysql bresto part. Should be faster, but need tests 26May09 - On vacation I am having a little fun !! - Add documentation for new directives DirSourceAddress and FDSourceAddress -- Apply Steve Polyack patch to add DirSourceAddress and FDSourceAddress directives. +- Apply Steve Polyack patch to add DirSourceAddress and FDSourceAddress directives. That permits to choose the outgoing interface. - make fileregexp-test working with git repository 25May09 -- Apply Marco's patch: mvw Allow acl and xattr to be explicitly enabled and - fail the configure if we are asked to enable acl or xattr support and the OS +- Apply Marco's patch: mvw Allow acl and xattr to be explicitly enabled and + fail the configure if we are asked to enable acl or xattr support and the OS doesn't support acls or xattrs. - Add more Spanish site modifications @@ -4923,7 +4966,7 @@ Release Version 5.0.0 - Disable scratchpool-pool-test because it hangs - Rework printed message when files are purged on restore - Turn off useless End of file message during restore. -- When doing a tree selection restore, look at the PurgedFiles column in the +- When doing a tree selection restore, look at the PurgedFiles column in the first JobId, and if non-zero, the Job was purged, so do not do selection - Yet another try to get qmake to install bat correctly @@ -4932,7 +4975,7 @@ Release Version 5.0.0 20May09 - Add Spanish directory -- Fix race in director job start which was allowing the number of concurrent +- Fix race in director job start which was allowing the number of concurrent jobs to exceed the maximum 19May09 @@ -4942,14 +4985,14 @@ Release Version 5.0.0 - update - Fix #1029 about resolution address order. Thanks to David. - Add patch for #1029 -- During jcr destruction hold jcr_chaing lock only for minimum time necessary. +- During jcr destruction hold jcr_chaing lock only for minimum time necessary. This should fix the SD deadlock in bug #1287. -- Simplify messages printed by SD when reserve fails. This should fix bug +- Simplify messages printed by SD when reserve fails. This should fix bug #1285 - Add sleep in vtape changer to simulate real hardware 17May09 -- speed up mysql to compute restore table ebl speed up mysql when computing +- speed up mysql to compute restore table ebl speed up mysql when computing media list ebl fix media list display ebl fix bresto problem with drag&drop 16May09 @@ -4960,20 +5003,20 @@ Release Version 5.0.0 - Back out unwanted change. Should fix problem reported by Yuri - add index on temporary table to speed up mysql part during restore - Fix display of / on bfileview -- Yet another attempt to get qmake to generate valid Makefiles that installs +- Yet another attempt to get qmake to generate valid Makefiles that installs the binaries. It seems to require the binary to exist at qmake time -- Apply fix to sql_cmds.c suggested by Ulrich Leodolter which prevents restore by file selection from using Copy jobs. - fix drag&drop 14May09 -- Add new nagios_plugin_check_bacula.tgz from Masopust, Christian -- Reduce bconsole help to fit in 80 columns kes Add bconsole @help command kes +- Reduce bconsole help to fit in 80 columns kes Add bconsole @help command kes Fix Show FileSet command to handle spaces - Allow specification of base daemon resource name. --with-basename= - Fix bat to automatically use installed bat.conf -- bat not installed even if configured. Fix by working around apparent bug in +- bat not installed even if configured. Fix by working around apparent bug in qmake 13May09 @@ -5002,7 +5045,7 @@ Release Version 5.0.0 - small fix 05May09 -- ebl Make working the "compute with directories" option --This line, and those +- ebl Make working the "compute with directories" option --This line, and those below, will be ignored-- 04May09 @@ -5022,13 +5065,13 @@ Release Version 5.0.0 - Update - update - Only define winapi's for 32 bit build. Already defined for 64 bit apparently... -- Change GetComputerName to GetComputerNameEx so that in a cluster we get the - name of the vserver instead of the local machine. Added prototypes for +- Change GetComputerName to GetComputerNameEx so that in a cluster we get the + name of the vserver instead of the local machine. Added prototypes for GetComputerNameEx which appear to be missing. 02May09 - 3.0.1 -- Don't run backup at same time as restore to avoid deadlock in concurrent +- Don't run backup at same time as restore to avoid deadlock in concurrent test 01May09 @@ -5046,9 +5089,9 @@ Release Version 5.0.0 - Add bypool option - add bypool option - Fix error message -- Fix bug #1282 Setting job.Priority in python crashes director by checking if +- Fix bug #1282 Setting job.Priority in python crashes director by checking if string addr is NULL. Not tested. -- Fix bug #1281 allow all on restore command line to restore pruned JobIds +- Fix bug #1281 allow all on restore command line to restore pruned JobIds without prompting. - Add vectorized bat image @@ -5056,14 +5099,14 @@ Release Version 5.0.0 - Check for job_canceled() in fd_plugin code - Update Win32/64 table creation to have new DB version 11 format - Remove illegal Options in Exclude of default Win32/64 bacula-dir.conf -- This is the fix to http://bugs.bacula.org/view.php?id=1276. The select class - was just not working with the new requirements of setting and clearing the +- This is the fix to http://bugs.bacula.org/view.php?id=1276. The select class + was just not working with the new requirements of setting and clearing the notify. 27Apr09 -- Fix bug #1274 where a migration job can be canceled like the original job by +- Fix bug #1274 where a migration job can be canceled like the original job by the MaxRunTime directive. -- Added fix for bug #1275 where acl or xattr data is saved for virtual filenames +- Added fix for bug #1275 where acl or xattr data is saved for virtual filenames generated by filed plugins. 26Apr09 @@ -5071,7 +5114,7 @@ Release Version 5.0.0 - Permits to eject Used tape - update ScriptAlias - Remove Reposition info message -- Fix platform scripts not to clean configured files during 'make clean' use +- Fix platform scripts not to clean configured files during 'make clean' use 'make distclean' to clean everything. 25Apr09 @@ -5086,7 +5129,7 @@ Release Version 5.0.0 16Apr09 - Add additional mysql connection debug code -- Fix bug #1246 Sometimes access denied with VSS enabled. UCS conversion cache +- Fix bug #1246 Sometimes access denied with VSS enabled. UCS conversion cache was not properly flushed at the end of a Job 15Apr09 @@ -5113,7 +5156,7 @@ Release Version 5.0.0 - Test postgresql encoding at the start of the test 11Apr09 -- Modify insertion of read Volumes in SD to be done before the drive reservation. +- Modify insertion of read Volumes in SD to be done before the drive reservation. This ensures that a Volume to be read will not be reserved for writing. - Clean old patchnotes - Turn developer back on diff --git a/bacula/CheckList b/bacula/CheckList deleted file mode 100644 index a373777734..0000000000 --- a/bacula/CheckList +++ /dev/null @@ -1,61 +0,0 @@ - - Release Check List - -Assume release is in bacula/base bacula/gui bacula/docs bacula/rescue - -- Build it for Win32 and on Win64 -# No longer done -# - Build it on Solaris and run regression tests -# - Build it on FreeBSD and run regression tests -- Update ChangeLog (add release date) -- Update ReleaeNotes -- Do a svn commit -# ./makerel -- Run ./makerel Branch-2.0 branch-2.0 2.0.x -- Run the regression tests on the new bacula - directory that is created. Run regression on - Linux. -- Run the production version over night in production. -- Manually test Win32 version - (with Robert's work, it is now possible to run the - Regression scripts). -- Write final ReleaseNotes -- If everything is good -- cd bacula -# The below needs to be updated more -- Run - cd base - svn update - cd ../gui - svn update - cd ../docs - svn update - cd manual - make tex - latex bacula.tex - (make sure the above finishes. If it stops and asks - what to do, correct the problem). - cd .. - cd ../rescue - svn update - cd .. - ./makerel base 2.0.x - ./makeguirel gui 2.0.x - ./makedocsrel docs 2.0.x - ./makerescuerel rescue 2.0.x - cd base/win32 - make - cp release/winbacula-2.0.x.exe $HOME/bacula - cd $HOME/bacula - ./sign winbacula-2.0.x.exe - -- Upload everything to appropriate part of Source Forge - and release it. I use releaseforge -- After releasing everything. -- Either download everything and compare the signatures, - or simply check the upload sizes of everything. -- cd docs/manual - make -- Upload new release doc to web site. - Upload bacula.pdf to web site. -- Update news on web site. diff --git a/bacula/LICENSE b/bacula/LICENSE index 3fb3657bdd..e2512f8655 100644 --- a/bacula/LICENSE +++ b/bacula/LICENSE @@ -1,197 +1,68 @@ +Bacula is licensed under the GNU Affero General Public License, version +3.0 as published by the Free Software Foundation, Inc. ("AGPLv3"). -History: -The original Bacula code was Copyright Kern Sibbald and John Walker. -After November 2004, it became Copyright Kern Sibbald, and finally, -the copyright was transferred to the Free Software Foundation Europe -on 15 November 2006. The license was changed from GPLv2 to AGPLv3 -on 24 July 2010. - -Trademark: -The name Bacula is a registered trademark of Kern Sibbald. - -=================================== - -License: -For the most part, Bacula is licensed under the AGPL version 3. This -code is listed under Copyright Free Software Foundation Europe e.V. -What follows is the addition(s) to the AGPL version 3 license, that -applies to code that is copyrighted by the Free Software Foundation -Europe e.V. - -Linking: -As a special exception to the AGPLv3, the Bacula Project gives -permission to link the code of its release of Bacula with the OpenSSL -project's "OpenSSL" library (or with modified versions of it that use -the same license as the "OpenSSL" library), and distribute the linked -executables. You must obey the GNU Affero General Public License in all -respects for all of the code used other than "OpenSSL". - -As a special exception to the AGPLv3, the Bacula Project gives -permission to link the code of its release of the Bacula Win32 File -daemon with the Microsoft supplied Volume Shadow Copy (VSS) libraries -and distribute the linked executables. You must obey the GNU General -Public License in all respects for all of the code used other than for -the Microsoft VSS code, where you must obey their license terms. - -The Bacula Project gives permission for plugins with AGPLv3 compatible -licenses to be loaded and distributed with the Bacula executables as -long as the combined work is distributed under the terms listed in the -Bacula LICENSE file. A full list of AGPLv3 compatible licenses can be -found at: http://www.fsf.org/licensing/licenses/. If you wish to load -or distribute plugins with different licensing terms please contact -the Bacula Project at: license@bacula.org - -=================================== - - -What follows is information from the authors of the code: - -License: -To the best of our knowledge, all code used in Bacula, which is -copyrighted by a third party, has licenses that are compatible -with the OpenSSL license, and so given the exception that we have -made to the AGPLv3 above, Bacula can be freely linked and distributed -with the OpenSSL libraries. - -Intellectual Property rights: -Recipient understands that although each Contributor to Bacula grants -the licenses to its Contributions set forth herein, no assurances are -provided by any Contributor that the Program does not infringe the -patent or other intellectual property rights of any other entity. -Each Contributor disclaims any liability to Recipient for claims -brought by any other entity based on infringement of intellectual -property rights or otherwise. As a condition to exercising the rights -and licenses granted hereunder, each Recipient hereby assumes sole -responsibility to secure any other intellectual property rights -needed, if any. For example, if a third party patent license is -required to allow Recipient to distribute the Program, it is -Recipient's responsibility to acquire that license before distributing -the Program. - -Copyrights: -Each Contributor to Bacula represents that to its knowledge it has -sufficient copyright rights in its Contribution, if any, to grant -the copyright license set forth in this Agreement. - -Code falling under the above conditions will be marked as follows: - - Bacula® - The Network Backup Solution - - Copyright (C) 2000-2010 Free Software Foundation Europe e.V. - - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation plus additions - that are listed in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. - - Bacula® is a registered trademark of Kern Sibbald. - - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. - - -Windows: -Certain source code used to build the Windows version of the -Bacula File daemon is copyrighted and or trademarked by Microsoft -and may contain Microsoft intellectual property (examples: -Microsoft VC++, the source to the VSS libraries, the Microsoft C -runtime libraries). As such we cannot and do not distribute that -software. We are permitted however to distribute Bacula with the -necessary Microsoft libraries in binary form. - -You may obtain the parts that we cannot distribute as follows. The -Microsoft compiler available for purchase, and Microsoft provides a free -version of the compiler. The source code and libraries are available for -download from Microsoft public Web servers. We have documented in the -src/win32 directory the URLs from which we obtained the library source, and -how we build the Windows File daemon and many users have succeeded in doing -so themselves. Our intention is to respect as closely as possible Open -Source practices while maintaining full respect for proprietary and -copyrighted code. - -GPLv2 or later license: - src/tools/bsmtp.c - Copyright (C) 1997 Ralf S. Engelschall, All Rights Reserved. - (note, bsmtp.c does not use OpenSSL, nor is it used with the code - of any other part of Bacula) - -3 clause BSD License notice for inclusion with the binary: - src/lib/fnmatch.c - * Copyright (c) 1989, 1993, 1994 - * The Regents of the University of California. All rights reserved. - src/lib/fnmatch.h - * Copyright (c) 1992, 1993 - * The Regents of the University of California. All rights reserved. - -Permissive licenses: - src/lib/var.c/h - ** OSSP var - Variable Expansion - ** Copyright (c) 2001-2002 Ralf S. Engelschall - ** Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/) - ** Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/) - - src/lib/bsnprintf.c - * Copyright Patrick Powell 1995 - - src/bregex.c/h - * Copyright (c) 1991 Tatu Ylonen, Espoo, Finland - - src/lib/sha1.c/h - Copyright (C) The Internet Society (2001). All Rights Reserved. - - src/win32/compat/getopt.c - "... licensed under IBM copyrights to use the IBM-provided source code - in any way he or she deems fit ..." - - src/win32/compat/sys/mtio.h (LGPL) - Copyright (C) 1996, 1997 Free Software Foundation, Inc. - - -Bacula can be enabled with data encryption and/or communications -encryption. If this is the case, you will be including OpenSSL code that -that contains cryptographic software written by Eric Young -(eay@cryptsoft.com) and also software written by Tim Hudson -(tjh@cryptsoft.com). - -There are parts of Bacula that are licensed under the LGPL so -that those files may be used in proprietary code to interface with -Bacula. - -Finally there are parts of Bacula that are in the public domain. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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. IN NO EVENT SHALL THE COPYRIGHT OWNER -OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (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 entire AGPL is reproduced below, in the manuals distributed with the -Bacula documentation and can also be found online on the GNU web site -as well as at www.bacula.org. You may also obtain a copy of the -AGPL (or LGPL) by writing to: Free Software Foundation, Inc., -51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +Additional Terms on the work licensed herein, pursuant to Section 7 of Affero +General Public License are as follows: + + 1. The name Bacula is a registered trademark of Kern Sibbald, and Kern + Sibbald hereby declines to grant a trademark license to "Bacula" + pursuant to AGPLv3, Section 7(e) without a separate agreement with Kern + Sibbald. + + 2. Pursuant to AGPLv3, Section 7(a), in addition to the warranty and + liability disclaimers already found in AGPLv3, the copyright holders + specifically disclaim any liability for accusations of patent + infringement by any third party. + + 3. Pursuant to AGPLv3, Section 7(b), the portions of the file AUTHORS that + are deemed to be specified reasonable legal notices and/or author + attributions shall be preserved in redistribution of source code and/or + modifications thereof. Furthermore, when the following notice appears in + a source code file, it must be preserved when source code is conveyed + and/or propagated: + + Copyright (C) 20xx-2014 Free Software Foundation Europe e.V. + + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. + + Bacula® is a registered trademark of Kern Sibbald. + +Additional Permissions on the work licensed herein, pursuant to Section 7 of +AGPLv3 are as follows: + +1. As a special exception to the AGPLv3, the copyright holders give + permission to link the code of its release of Bacula with the OpenSSL + project's "OpenSSL" library (or with modified versions of it that use the + same license as the "OpenSSL" library), and distribute the linked + executables. You must follow the requirements of AGPLv3 in all respects + for all of the code used other than "OpenSSL". + +2. As a special exception to the AGPLv3, the copyright holders give + permission to link the code of its release of the Bacula Win32 File daemon + with the Microsoft supplied Volume Shadow Copy (VSS) libraries and + distribute the linked executables. You must follow the requirements of + the AGPLv3 in all respects for all of the code used other than for the + Microsoft VSS code. + +3. As a special exception to the AGPLv3, the copyright holders gives + permission to link the code of its release of the Bacula Win32 File daemon + with the Microsoft supplied Volume Shadow Copy (VSS) libraries and + distribute the linked executables. You must follow the AGPLv3 in all + respects for all of the code used other than for the Microsoft VSS code. + + +###################################################################### +The entire AGPL is below, in the manuals distributed with the Bacula +documentation and can also be found online on the GNU web site at +www.bacula.org. You may also obtain a copy of the AGPL (or LGPL) by writing +to: Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +02110-1301 USA GNU AFFERO GENERAL PUBLIC LICENSE @@ -855,6 +726,3 @@ specific requirements. if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU AGPL, see . - - -=========================================== diff --git a/bacula/LICENSE-FAQ b/bacula/LICENSE-FAQ new file mode 100644 index 0000000000..1e0767e6d8 --- /dev/null +++ b/bacula/LICENSE-FAQ @@ -0,0 +1,107 @@ + + Affero General Public License +History: +The original Bacula code was Copyright Kern Sibbald and John Walker. +After November 2004, it became Copyright Kern Sibbald, and finally, +the copyright was transferred to the Free Software Foundation Europe +on 15 November 2006. The license was changed from GPLv2 to AGPLv3 +on 24 July 2010. + +Trademark: +The name Bacula is a registered trademark of Kern Sibbald. + +=================================== + +What follows is information from the authors of the code: + +License: +To the best of our knowledge, all code used in Bacula, which is +copyrighted by a third party, has licenses that are compatible +with the OpenSSL license, and so given the exceptions that we have +made to the AGPLv3 above, Bacula can be freely linked and distributed +with the OpenSSL libraries, and in binary form with the Microsoft +VSS libraries. + +Intellectual Property rights: +Recipient understands that although each Contributor to Bacula grants +the licenses to its Contributions set forth herein, no assurances are +provided by any Contributor that the Program does not infringe the +patent or other intellectual property rights of any other entity. +Each Contributor disclaims any liability to Recipient for claims +brought by any other entity based on infringement of intellectual +property rights or otherwise. As a condition to exercising the rights +and licenses granted hereunder, each Recipient hereby assumes sole +responsibility to secure any other intellectual property rights +needed, if any. For example, if a third party patent license is +required to allow Recipient to distribute the Program, it is +Recipient's responsibility to acquire that license before distributing +the Program. + +Copyrights: +Each Contributor to Bacula represents that to its knowledge it has +sufficient copyright rights in its Contribution, if any, to grant +the copyright license set forth in this Agreement. + +Other Licenses used in some source files: + +GPLv2 or later license: + src/tools/bsmtp.c + Copyright (C) 1997 Ralf S. Engelschall, All Rights Reserved. + (note, bsmtp.c does not use OpenSSL, nor is it used with the code + of any other part of Bacula) + +3 clause BSD License notice for inclusion with the binary: + src/lib/fnmatch.c + * Copyright (c) 1989, 1993, 1994 + * The Regents of the University of California. All rights reserved. + src/lib/fnmatch.h + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + +Permissive licenses: + src/lib/var.c/h + ** OSSP var - Variable Expansion + ** Copyright (c) 2001-2002 Ralf S. Engelschall + ** Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/) + ** Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/) + + src/lib/bsnprintf.c + * Copyright Patrick Powell 1995 + + src/bregex.c/h + * Copyright (c) 1991 Tatu Ylonen, Espoo, Finland + + src/lib/sha1.c/h + Copyright (C) The Internet Society (2001). All Rights Reserved. + + src/win32/compat/getopt.c + "... licensed under IBM copyrights to use the IBM-provided source code + in any way he or she deems fit ..." + + src/win32/compat/sys/mtio.h (LGPL) + Copyright (C) 1996, 1997 Free Software Foundation, Inc. + + +Bacula can be enabled with data encryption and/or communications +encryption. If this is the case, you will be including OpenSSL code that +that contains cryptographic software written by Eric Young +(eay@cryptsoft.com) and also software written by Tim Hudson +(tjh@cryptsoft.com). + +There are parts of Bacula that are licensed under the LGPL so +that those files may be used in proprietary code to interface with +Bacula. + +Finally there are parts of Bacula that are in the public domain. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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. IN NO EVENT SHALL THE COPYRIGHT OWNER +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/bacula/Makefile.in b/bacula/Makefile.in index 5483fe3197..63acc13605 100755 --- a/bacula/Makefile.in +++ b/bacula/Makefile.in @@ -19,8 +19,7 @@ dummy: # --client-only directories fd_subdirs = src scripts src/lib src/findlib src/filed \ - @READLINE_SRC@ @BAT_DIR@ @TRAY_MONITOR_DIR@ @WX_DIR@ \ - src/console @FD_PLUGIN_DIR@ + @READLINE_SRC@ @BAT_DIR@ src/console @FD_PLUGIN_DIR@ # Non-client-only directores subdirs = src/cats @DIRD_DIR@ @STORED_DIR@ src/tools diff --git a/bacula/ReleaseNotes b/bacula/ReleaseNotes index 8ae7b58027..b9b71bbd5c 100644 --- a/bacula/ReleaseNotes +++ b/bacula/ReleaseNotes @@ -1,22 +1,14 @@ - Release Notes for Bacula 5.2.13 + Release Notes for Bacula 7.0.0 - Bacula code: Total files = 1,110 Total lines = 231,439 (Using SLOCCount) + Bacula code: Total files = 713 Total lines = 305,722 + The diff between Bacula 5.2.13 and Bacula 7.0.0 is 622,577 lines, + which represents very large change. -General: --------- -This is an important bug fix release. - -Version 5.2.13 version has 20 bug fixes since the last -release. Some of the bug fixes are important. - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -Please note that with this version of Bacula, during the install -of the shared libraries from the src/cats, src/lib, and src/findlib -directories, any old Bacula libraries in the installation -destination directory will be removed. This should not cause -any problems and at least keeps the installation library cleaner. -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +This is a major new release with many new features and a +number of changes. Please take care to test this code carefully +before putting it into production. Although the new features +have been tested, they have not run in a production environment. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! For packagers, if you change options, naming, and the way @@ -25,1364 +17,117 @@ you are creating a situation where the user may not be able to run multiple versions of Bacula on the same machine, which is often very useful, and in addition, you create a configuration that the project cannot properly support. -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -If you are upgrading from a version older than 5.2.10, please -read all the old ReleaseNotes of all versions released -after the version you are upgrading from. There area -many important notices sumarized here, and we do not -repeat them each bug fix release. -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -Compatibility: --------------- - As always, both the Director and Storage daemon must be upgraded at - the same time. - - Older 5.0.x and 3.0.x File Daemons are compatible with the 5.2.13 - Director and Storage daemons. There should be no need to upgrade older File - Daemons. - -Important changes since last release: - -19Feb13 - - Fix build/configure problems with bpluginfo.c - - Refactor lock_volumes so most lock a vol rather than globally - - Add virtualfull-extreme test - - Apply patch for chio-changer-openbsd from bug #1984 -- Implements listall - - Add bat Mac patch from bug #1953 - - Fix bug #1812 cannot run Copy/Migrate jobs from bat - - Fix loading of bat translations. Patch from bug #1890 - - Fix text input in bat. Fixe bug #1965 - - Remove Device from show command as it is not used or updated - - Fix #1982 update enabled keyword in help command - - Fix update_postgresql_tables 10 to 11 - - Clean after building doc binaries requested by Willem vd Akker for Debian - build - - Require Qt version 4.8.4 - - Fix bug #1955 that OK to run? does not retry on bad response - - Backport new lock calls + debug for SD - - Fix bug #1975 new label ignored when first is duplicate. - - Pull src/lib changes from master - - Pull SD files from master - - Turn off prune-test - - Add logdir and bsrdir to regression config - - Add bsrdir and logdir to regress-config - - Changed default directories from /var/bacula to /opt/bacula - - Make spool size max message more explicit - - Display more info when maximum spool size is reached - - Fix TERM defs for Solaris 11 in conio.c - - Allow group to cd to sysconfdir - - Make sysconfdir belong to Bacula user/group and exclude others - - Fix Virtual Full file close bug -- race condition - - Enhance mount message to include read/append - - Improve vol_mgr swap messages - - Enhance output of Using Device to include for read/write - - Add jobid to Pmsg output - - Fix bug #1959 input validation on delete of jobs. - - Fix bug #1956 Authorization Errors false - - Add workaround for #5507 where autoprune and reload are in deadlock - - Allow conf file quoted strings to be used in a list - - Make bfgets handle very long lines - - Avoid seg fault by checking for NULL client -- reported by Arno - - Final fix of bug #1943 - - Fix bug #1948 MailOnSuccess get executed on error. - - Fix missing index on Media table - - Fix bug #1943 no message storage on closed database connection. - - Fix bug #1946 Fix problem with MySQL with big Base jobs. - - Reduce wait time in regression RunScripts - - Implement a timeout on regression tests of 15 minutes - - Fix #5346 .bvfs_lsfiles and .bvfs_restore to handle deleted files - - Fix spooldata, accurate and ingnoreduplicate run argument - - Fix messages segfault - - Implement feature request #1939 - - fix #1938 about PATH_MAX on hurd - - fix #1938 about MAXPATHLEN on hurd - - Fix bug #1937 OpenBSD autochanger example script - - Fix #4996 about MaxRunTime canceling the job too early - - Fix bug #1934 Wrong values at media list in BAT - - Fix race condition in close_msg that causes seg fault - - Fix double unlink - - More tests for freeing NULL pointers - - Add MaximumConcurrentReadJobs directive to Storage resource - - Add ujobid to .bvfs_get_jobids - - Avoid problem when stripping a relative path - - Fix #4513 about HIDDEN attribute set to parent directory during restore - -Bugs fixed/closed since last release: -1812 1890 1934 1937 1938 1939 1943 1946 1948 1953 1955 1956 1959 1965 1975 -1982 1984 4513 4996 5346 5507 +Please note that the documentation has significantly changed. +You will need additional packages to build it such as inkscape. +Please see the README and README.pct files in the docs directory. +The packages come with pre-build English pdf and html files, +which are located in the docs/docs/manuals/en/pdf-and-html directory. -================================================================= +Packagers: please note that the Bacula LICENSE has changed, it is still +AGPLv3 and still open source. A new requirement has been added which +requires other projects using the source to keep the acreditations. - -General: --------- -Version 5.2.12 version is a bug fix release. - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -Please note that with this version of Bacula, during the install -of the shared libraries from the src/cats, src/lib, and src/findlib -directories, any old Bacula libraries in the installation -destination directory will be removed. This should not cause -any problems and at least keeps the installation library cleaner. -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -For packagers, if you change options, naming, and the way -we link our shared object files, as at least one of you does, -you are creating a situation where the user may not be able -to run multiple versions of Bacula on the same machine, which -is often very useful, and in addition, you create a configuration -that the project cannot properly support. -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -If you are upgrading from a version older than 5.2.10, please -read all the old ReleaseNotes of all versions released -after the version you are upgrading from. There area -many important notices sumarized here, and we do not -repeat them each bug fix release. +Packagers: please note that the docs license has changed. It is now +licensed: Creative Commons Attribution-ShareAlike 4.0 International +This is a common open source license. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Compatibility: -------------- - As always, both the Director and Storage daemon must be upgraded at - the same time. - - Older 5.0.x and 3.0.x File Daemons are compatible with the 5.2.12 - Director and Storage daemons. There should be no need to upgrade older File - Daemons. - -Important changes since last release: - - A new bpluginfo utility tool - - Make dump_resource respect console ACL's (security fix) - - Add chio-changer-openbsd submitted in bug #1903 - - Important Copy job bug fixed. - -12Sep12 - - Fix accurate option in the estimate command - - Fix bug #1932 director crash. - -10Sep12 - - Add JobId to SD debug output - - Commit batch session every 800,000 files - - Simplify safer delete code using a single regex - - Clean up error message generation during update attributes -- should fix bug - #1823 - - Eliminate heartbeat error messages. Fixes bug #1925 - - Apply patch from bug #1911 to implement --with-logdir - - Add chio-changer-openbsd submitted in bug #1903 - - mysql database install/update scripts patch. Fixes bug #1901 - - Delegate uid/gid changing to systemd. Fixes bug #1905 - - Fix bug #1906 - - Fix manpage errors, fixes bug #1907 - - Final fix for #1859 missed one query. - - bpluginfo - Utility tool display various information - - Backport more master code - - Fix Makefile.in so that testfind builds with acl dependency - - Make dump_resource respect console ACL's (security fix) - - backport code from master - - Fix #1923 about MySQL 4 support for BVFS - - Fix #1902 about bad status slots output - - Fix Sigma Copy bug #4377 - - Fix bsmtp - - Reset bsmtp to only send to IPv4 mailhosts. - -Bugs fixed/closed since last release: -1823 1859 1901 1902 1903 1905 1906 1907 1911 1923 1925 4377 -1932 - - -======================================================= - -Version 5.2.11 was short lived because of a crash - -======================================================= - -General: --------- -The 5.2.10 version is a significant bug fix release including -our first cut at AFS support. - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -Please note that with this version of Bacula, during the install -of the shared libraries from the src/cats, src/lib, and src/findlib -directories, any old Bacula libraries in the installation -destination directory will be removed. This should not cause -any problems and at least keeps the installation library cleaner. -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -For packagers, if you change options, naming, and the way -we link our shared object files, as at least one of you does, -you are creating a situation where the user may not be able -to run multiple versions of Bacula on the same machine, which -is often very useful, and in addition, you create a configuration -that the project cannot properly support. -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -If you are upgrading from a version older than 5.2.9, please -read all the old ReleaseNotes of all versions released -after the version you are upgrading from. There area -many important notices sumarized here, and we do not -repeat them each bug fix release. -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -Compatibility: --------------- - As always, both the Director and Storage daemon must be upgraded at - the same time. - - Older 5.0.x and 3.0.x File Daemons are compatible with the 5.2.9 - Director and Storage daemons. There should be no need to upgrade older File - Daemons. - -Major changes since 5.2.9: -- Fix IPv6 networking -- Fix SQL Counter problems -- Fix Bat hanging after running a number of jobs -- Fix dbcheck rw_writelock problem -- Fix Windows VSS restore bug - -New Feature: -- Add rudimentary support for backing up AFS - - -28Jun12 - - Add extra test for unsupported Protocol Families. - - Fix inet_pton call. - - Real fix of bug #1897 5.2.9 breaks IPv6 connectivity - - Fix bug #1891 wrong daemon name printed with -? option - - Fix bug #1859 INSERT INTO Counters fails - - First try at fixing bug #1897 5.2.9 breaks IPv6 connectivity - - Convert write_rec_to_block() to a state machine - - Fix bat from eating all Dir connections -- fixes bug #1872 - - Back port fixes from BEE to fix Windows restore bug #1892 - - Add block checksum flag to version.h - - Add block checksum debug code - - Fix bug #1893 dbcheck -B gives rwl_writelock error. - - Remove restriction of network buffer size being multiple of a tape block - - Add rudimentary support for saving AFS acls. - - Send level before the fileset in estimate_cmd() like in backup() - -Bugs fixed/closed since last release: -1859 1872 1891 1892 1893 1897 - - -=============================================================== - -General: --------- -The 5.2.9 version is a bug fix release. - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -Please note that with this version of Bacula, during the install -of the shared libraries from the src/cats, src/lib, and src/findlib -directories, any old Bacula libraries in the installation -destination directory will be removed. This should not cause -any problems and at least keeps the installation library cleaner. -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -For packagers, if you change options, naming, and the way -we link our shared object files, as at least one of you does, -you are creating a situation where the user may not be able -to run multiple versions of Bacula on the same machine, which -is often very useful, and in addition, you create a configuration -that the project cannot properly support. -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -If you are upgrading from a version older than 5.2.7, please -read all the old ReleaseNotes of all versions released -after the version you are upgrading from. There area -many important notices sumarized here, and we do not -repeat them each bug fix release. -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -Compatibility: --------------- - As always, both the Director and Storage daemon must be upgraded at - the same time. - - Older 5.0.x and 3.0.x File Daemons are compatible with the 5.2.8 - Director and Storage daemons. There should be no need to upgrade older File - Daemons. - -Changes since 5.2.7: --------------------- - -11Jun12 - - Remove bad TERM_LIB patch from version 5.2.8 - "Apply readline without TERM_LIB dependency patch from bug #1871" - - Ensure cancel status is set for canceled duplicate jobs -- partial fix for - bug #1851 - - Enhance Win32 error messages -- fixes bug #1879 - - Apply patch from bug 1876 to permit dot commands in a runscript - - Remove config variables from examples/devices fixes bug #1884 - - Add more debug code for bug 1885 - - Add more debug to block.c when read rejected - - Fail job that attempts to read from closed device -- reported in bug 1885 but - not fixed - - Detect Python 2.7 fixes bug #1888 - - Apply systemd patch from bug #1886 - - Rewrite some SD subroutines as class members - - New overhaul of xattr code. - - Use IPPROTO_TCP for SOL_TCP if SOL_TCP isn't defined. - - Fix compiler warning. - -Bugs fixed/closed since last release: -1851 1879 1884 1886 1888 - - -==================================================================== - -General: --------- -Version 5.2.8 was a short lived version because it had a TERM_LIB -patch that broke on Solaris and other machines. That patch was -removed in 5.2.9. - -General: --------- -The 5.2.7 version is a significan bug fix release. (The -diff file between 5.2.6 and this one is over 25,000 lines). - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -Please note that with this version of Bacula, during the install -of the shared libraries from the src/cats, src/lib, and src/findlib -directories, any old Bacula libraries in the installation -destination directory will be removed. This should not cause -any problems and at least keeps the installation library cleaner. -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -For packagers, if you change options, naming, and the way -we link our shared object files, as at least one of you does, -you are creating a situation where the user may not be able -to run multiple versions of Bacula on the same machine, which -is often very useful, and in addition, you create a configuration -that the project cannot properly support. -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -If you are upgrading from a version older than 5.2.7, please -read all the old ReleaseNotes of all versions released -after the version you are upgrading from. There area -many important notices sumarized here, and we do not -repeat them each bug fix release. -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -Compatibility: --------------- - As always, both the Director and Storage daemon must be upgraded at - the same time. - - Older 5.0.x and 3.0.x File Daemons are compatible with the 5.2.3 - Director and Storage daemons. There should be no need to upgrade older File - Daemons. - -Changes since 5.2.6: --------------------- -02Jun12 - - Correct Qt version needed for bat - - Turn on SD deadlock detection by default - - Fix bug #1880 ltdl.m4 missing for new feature. - - Fix bug #1870 GNU binutils-gold build failure. - - Add new empty netinet/tcp.h so Windows compile works - - Eliminate compiler warning in stored/dircmd.c - - Fix TCP Heartbeat code - - Align conio.c struct at 8 bytes to fix Sparc bus error. - - Fix get_basename() -- rewrite - - Apply James' exchange-fd.c regression fix - - Add first Dutch translation - - Ensure that StorageId is updated after write - - Fix updating of cached slots + error message numbering - - Remove old shared objects before install - - Add missing dummy bVarPrefixLinks variable retrieval. - - Fix mysql config for older versions of mysql+config. - - Fix problem in BVFS with concurrent queries - - Add more checks to bvfs - - Try to use multi-row insert statements for mysql. - - On some platforms intptr_t is in an other include file. - - Add support for fcntl(fd, F_CLOSEM) to close filedescriptors. - - Use closefrom if available instead of trying to close fds ourself. - - Fix class member shadowing. - - Move storages tls initialization to proper place. - - Fix Copyright on init scripts suse, add specific daemon user & group - - Add support for new POSIX getaddrinfo interface. - - Apply MSQL detection fixes from bug #1829 - - Fix bug #1805 cannot specify hostname in ./configure - - Fix restore_job restore keyword - - Allow plugin to backup a directory - - Print seconds in schedule time as noted in bug #1854 - - Fix #1857 about restore cd command that blocks on empty directory - - Backport new StorageId code - - More definitive fix for update slots bug - - Fix #4062 on make_catalog_backup.pl script when user/password are empty - - Fix bug #1853: bacula-sd dead but pid file exists. - - Fix bug #1841 estimate command level=differential goes wrong in accurate - mode. - - Fix bug #1842 Incorrect port number reported - - Fix bug #1848 bsock.c:335 Socket has errors=1 on call to client - - Force the re-initialization of BaseJobOpts, AccurateOpts and VerifyOpts - between two Include{} - -Bugs fixed/closed since last release: -1805 1829 1841 1842 1848 1853 1854 1857 1870 1874 1880 4062 - - - -General: --------- -The 5.2.6 version is a bug fix release. - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -If you are upgrading directly from 5.0.3 to this version, please see the -important notices below for version 5.2.3, particularly -the database upgrade and the difference in packaging the -SQL shared libraries. -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -If you store .bsr or .mail files in the Bacula working -directory, please be aware that they will all be deleted -each time the Director starts. -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -Compatibility: --------------- - As always, both the Director and Storage daemon must be upgraded at - the same time. - - Older 5.0.x and 3.0.x File Daemons are compatible with the 5.2.3 - Director and Storage daemons. There should be no need to upgrade older File - Daemons. - -New Feature: - - The restore tree cd command accepts wild cards within each - part of a path. Wild cards apply only to a single part at a - time: i.e. cd a*/b*/xx* will match abc/bcd/xxfxx - but */xx* will not match the above filename. - -Changes since 5.2.5: - -17Feb12 - - Fix old exchange-fd plugin Accurate checkFile code. - - Insert the slot field as a numeric field. - - Fix #1831 by dropping the table before creating it - - Make cd accept wildcards - - Remove bad optimization from Accurate code - - Lock read acquire in SD to prevent to read jobs getting the same thing - - Implement more robust check in other drives for tape slot wanted - - Fix lost dcr point -- memory loss in Copy/Migration + possible confusion - - Ensure that bvfs SQL link is not shared - - Fix error printing in acl and xattr code. - - Backport better error debug output for sd plugins. - - Add wait on bad connection for security - - Make mtx-changer more fault tolerant - - Fix 32/64 bit problems in SD sscanf commands - - Skip certain filesystem types on some platforms. - - Allow BVFS to browse and restore Base jobs - - Add error message to .bvfs_clear_cache command - - Fix plugin bug with multiple simultaneous jobs - -Bugs fixed/closed since last release: -1831 - -=============================================================== - -General: --------- -The 5.2.5 version is a bug fix release. - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -If you are upgrading directly from 5.0.3 to this version, please see the -important notices below for version 5.2.3, particularly -the database upgrade and the difference in packaging the -SQL shared libraries. -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -If you store .bsr or .mail files in the Bacula working -directory, please be aware that they will all be deleted -each time the Director starts. -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -Compatibility: --------------- - As always, both the Director and Storage daemon must be upgraded at - the same time. - - Older 5.0.x and 3.0.x File Daemons are compatible with the 5.2.3 - Director and Storage daemons. There should be no need to upgrade older File - Daemons. - -Changes since 5.2.4: - -25Jan12 - - Disable usage of JS_Warning waiting for a more complete implementation - - Removed old sd plugins which doesn't work anymore. - - Adapt sample-query.sql for Warning job status - - Fix location of Qt dlls for Win64 build - - Fix MediaView::getSelection - -Bugs fixed/closed since last release: -1824 (1814 1806 1818 non-bugs) - -============================================================= -General: --------- -The 5.2.4 version is a bug fix release. - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -If you are upgrading directly from 5.0.3 to this version, please see the -important notices below for version 5.2.3, particularly -the database upgrade and the difference in packaging the -SQL shared libraries. -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -If you store .bsr or .mail files in the Bacula working -directory, please be aware that they will all be deleted -each time the Director starts. -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -Compatibility: --------------- - As always, both the Director and Storage daemon must be upgraded at - the same time. - - Older 5.0.x and 3.0.x File Daemons are compatible with the 5.2.3 - Director and Storage daemons. There should be no need to upgrade older File - Daemons. - -Most important changes since 5.2.3: -- Fix LZO detection so that it correctly detects presense of header - files. -- Switch the way we handle shared object versioning. -- Backport Enterprise spec files to platforms/rpms -- Switch to using Qt 4.7.4 (you must download new - depkgs-qt-24Dec11.tar.gz -- Update depkgs to depkgs-24Dec11.tar.gz -- Enhancements to File daemon and Storage daemon plugins -- Compiler warning cleanups -- xattr fixes -- Cleanup old files in the working directory when the Director starts - -Changes since 5.2.3: - -18Jan12 - - Prepare for adding IPv6 to Windows in the future - - Fix bug #1822 Schedule run line parsing fails if value is keyword - - Revert to 5.0 size computation in accurate elements, may fix #1821 - - Mark that a file was found in the accurate list in the ff_pkt with a - variable - - Definitive fix for MySQL MaxValue problem bug #1810 - - Initialize delta_seq to -1 because 0 means that we have already a version - - Adapt bfileview for bvfs tables - - Set job status to running when restore job really starts - - Remove ifdeffing that turned off JS_Warning status -- must have been missed - test code - - Add support for soname setting in libtool. - - Fix bug #1815 - - Fix systemd pid files. - - Limit migration/copy jobs to starting 100 at a time - - Avoid conflict with PAGE_SIZE define - - Send previous Job name during Incremental/Differential to the FD - - Fix bug #1811 Filed fails to backup more then one xattr. - - system.posix_acl_default is also an acl stored as xattr - - Fix bug #1807 - - Add configure for new redhat spec files - - Backport Enterprise spec files - - Fix bad memset() reported by clang - - Test new plugin function in bpipe and test plugin - - Try to fix openssl problem with signal - - Add BSOCK::set_killable() - - Set directory attributes when using Replace=Never when Bacula creates them - - Use RestoreObject type in Catalog - - Add new features in plugin - - Add helper for ini files - - Implement run accurate=yes/no - - Add .bvfs_clear_cache - - Add Accurate and MaxRunSchedTime in Schedule resource - - Fix bug #1802 configure code to detect LZO is broken - - Fix bug #1806 failure to save second and more xattr. - - Add second xattr to show bug 1806 - - Fix seg fault in plugin event loop - - Fix #3210 about slow restore with bvfs - -Bugs fixed/closed since last release: -1802 1806 1807 1810 1811 1815 1821 1822 3210 - - -============================================================== - -General: --------- -The 5.2.3 version is an bug fix release. - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -If you are upgrading directly from 5.0.3 to this version, please see the -important notices below for version 5.2.2, particularly -the database upgrade and the difference in packaging the -SQL shared libraries. -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -Compatibility: --------------- - As always, both the Director and Storage daemon must be upgraded at - the same time. - - Older 5.0.x and 3.0.x File Daemons are compatible with the 5.2.3 - Director and Storage daemons. There should be no need to upgrade older File - Daemons. - -Changes since 5.2.2: - - - Revert patch from Ben to not compress man pages on Solaris fix #1801 - - Fix bug #3322 don't poll when operator is labeling tapes - - bvfs: Fix mysql REGEXP operator - - Fix Mysql 5.5.18 symbol lookup - - fix utf8/iso8859 problems - - Fix #3419, update stats problem - - Fix cats_test to use the new method names. - - Update accurate code to use 1 byte instead of 3 - - Fix segfault in accurate code - - Fix compilation warning on FreeBSD - -Bugs fixed/closed since last release: -1801 3322 3419 - - -================================================================ -Version 5.2.2 - -General: --------- -The 5.2.2 version is an important bug fix release. It contains also some -additions and performance improvements. - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -If you are upgrading directly from 5.0.3 to this version, please see the -important notices below for version 5.2.1, particularly -the database upgrade and the difference in packaging the -SQL shared libraries. -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -Compatibility: --------------- - As always, both the Director and Storage daemon must be upgraded at - the same time. - - Older 5.0.x and 3.0.x File Daemons are compatible with the 5.2.2 - Director and Storage daemons. There should be no need to upgrade older File - Daemons. - -Changes since 5.2.1: ------------------ - - Implement -t option for Bat - - Require correct Qt version 4.6.2 or later to build bat - - Get new lib/plugins.h - - Pull new SD plugin files from Master - - Fix script to set mode of cats scripts - - Add Systemd configure options - - Split messages line by line before sending it to syslog() fix #3325 - - Fix bvfs_restore on MySQL - - Fix #3308 where a SMTP problem can block the director - - Change locking scheme of the mountpoint cache. - - Enhance mountcache with rescan option after interval. - - Add %D option to edit_job_code, simplify callbacks on director side - - Move Zdeflate and Zinflate to seperate file. - - Put libraries in the correct order for non shared libs. - - Remove last traces of @SQL_BINDIR@ and @DB_TYPE@ - - Fix bug #1774 - - Move batch insert detection into db.m4 - - bat: try to fix offset button problem when clicking too much on previous - - bvfs: Use single transaction for each job during update - - Add missing bwild & bregex man8 pages - - Fix compilation issue of wx-console #1778 - - bvfs: fix filter for pattern= bvfs parameter - - Improve speed of BVFS with SQLite, Thanks to J.Starek - - bvfs: add clear_cache function - - bvfs: Handle windows drive when building path hierarchy - -Closed Bugs Since 5.2.1 ------------------------ -1774 1778 3308 3325 - - -================================================================ - -Version 5.2.1 - -The 5.2.1 version is a major release since the last version 5.0.3. -It includes well over 299,387 lines of changes made by 20 contributors, -lots of bug fixes (see below), 1,851 software commits,and a -number of important new features: - -Version 5.2.0 was short lived, because Marco (thanks) found -a number of last minute bugs. So the first official release of 5.2 -is 5.2.1. - -Compatibility: --------------- - As always, both the Director and Storage daemon must be upgraded at - the same time. - - Older 5.0.x and 3.0.x File Daemons are compatible with the 5.2.1 - Director and Storage daemons. There should be no need to upgrade older File - Daemons. - -5.2.1 New Features: ------------------ -- LZO Compression -- New Tray Monitor -- Purge Migration Job -- Changes in Bvfs (Bacula Virtual FileSystem) -- Changes in the Pruning Algorithm -- Ability to Verify any specified Job -- Additions to RunScript variables -- Additions to the Plugin API -- ACL enhancements -- XATTR enhancements -- Class Based Database Backend Drivers -- Hash List Enhancements - -Some of the above are described below; all the above are -described in more detail in the New Features chapter of the -manual. - -Closed Bugs since 5.0.3: ---------------------- -1389 1444 1448 1466 1467 1468 1476 1481 1486 1488 1493 1494 1497 1499 1501 -1502 1504 1509 1511 1513 1516 1524 1526 1527 1532 1536 1538 1541 1542 1549 -1551 1553 1554 1558 1559 1560 1564 1567 1568 1569 1571 1574 1577 1581 1582 -1584 1587 1594 1595 1600 1601 1602 1603 1604 1606 1608 1610 1612 1623 1624 -1633 1643 1648 1655 1661 1664 1666 1669 1672 1675 1684 1685 1695 1696 1699 -1700 1703 1735 1741 1749 1751 1761 1762 1764 1768 1770 1771 2710 - -Note on bug 1612 where Bacula does not save a checksum for hard links during -full backup, but expects one during accurate differential backups. You need -a Full backup with the 5.2.x code to have these checksums in the Catalog. -Doing Incr/Diff over a 5.0.x Full backup will still display lot of errors. - - - -================== Warning !!!!!! ========================== - - The new pruning algorithm will not allow pruning of jobs that are essential to - restore since the last Full backup. This is, of course, correct and desirable, - but it is different from older Bacula versions that could inappropriately - prune jobs. Pruning of volumes is not affected. - -Building Bat: -------------- -To build Bat, you need Qt4 version 4.6.2. If you build with any other -version it is likely not to work. If you do not have version 4.6.2, on -your system, you can download the Bacula depkgs_qt version 16Dec10. - -Packaging the SQL backend: --------------------------- -The main Bacula Director code is independent of the SQL backend -in this version. This means that the Bacula Director can be packaged -by itself, then each of the different SQL backends supported can -be packaged separately. It is possible to build all the DB backends -at the same time. - -- configure can be run with multiple database configure options. - --with-sqlite3 - --with-mysql - --with-postgresql - -Order of testing for database is -- postgresql -- mysql -- sqlite3 - -Each configured backend generates a libbaccats--.so -A dummy catalog library is created named libbaccats-version.so - -At configure time the first detected backend is used as the so called default -backend and at install time the dummy libbaccats-.so is replaced with -the default backend type. - -If you configure all three backends you get three backend libraries and the -postgresql gets installed as the default. When you want to switch the default -you can copy one of the three backend libraries over the -libbaccats-.so e.g. - -cp libbaccats-postgresql-.so libbaccats-.so - -And update the default backend in the following files: - -create_bacula_database -drop_bacula_database -drop_bacula_tables -grant_bacula_privileges -make_bacula_tables -make_catalog_backup -update_bacula_tables - -New Catalog format in version 5.2.0 and greater ------------------------------------------------ -This release of Bacula uses a new catalog format. We provide a set of -scripts that permit to convert a 5.0.x (version 12) catalog to 5.2.1 (version -14). The Bacula project rpm spec files have been modified to -detect the database change and do the upgrade for you. We strongly -recommend that you save a copy of your existing database before upgrading -using rpms. - -The simplest way to upgrade the database assuming you are building from -source (i.e. manually): -1. Stop any current version of Bacula from running. -2. Save a copy of your existing database. -3. Configure, build, and install the 5.2.1 version of Bacula - Note the new ./configure options in the manuals see the link - at the bottom of this file. -4. cd -5. ./update_bacula_tables -6. If you have multiple catalogs, edit the update_bacula_tables - script and put the name of another database, and then - execute the script again. Repeat this until all Bacula - catalogs have been updated. -7. Start the new Bacula. If everything worked, it should - not print any error messages. - -If you start from scratch, you don't need to run the update_bacula_tables -script because the create_bacula_tables script automatically creates the new -table format. However, if you are using a version of Bacula older than 5.0.0 -(e.g. 3.0.3) then you need to run the update_bacula_tables script that will -be found in the /src/cats directory after you run the ./configure -command. As mentioned above, before running this script, please backup your -catalog database, and when you do running it, be sure shutdown Bacula and be -aware that running the script can take some time depending on your database -size. - -================================================================ - -Changes: - -Speed and Memory Usage Enhancements: -- Implement LZO compression algorithm (need lzo2 headers to activate this option) -- New Pruning algoritm -- safer and faster -- Use of PostgreSQL cursor when doing large queries, should reduce the - memory usage during restore and accurate backups. -- limit command in some list commands -- Bacula Virtual File System for fast catalog access -- Faster crc32 algorithm - -Security Enhancements: -- Additional security against injection of illegal characters -- Fix possible fnmatch problem - -Features Enhancements: -- Improvements in ACL and xattr handling on additional platforms: - AIX, Darwind, FreeBSD, HPUX, IRIX, Solaris, Tru64 -- Tray monitor for Windows -- New SQL backend and ./configure that permits building multiple catalog - backends in one build, and has the main Bacula core code totally independent - of the SQL backend, which should simplify packaging (only the - libbacsql.so/dll needs to be changed to switch from one database backend - to another (e.g. MySQL to PostgreSQL). -- Indent lsmark during restore -- Disable batch insert config item -- Director selection option in bconsole -- restorejob command in bconsole -- Many additional features for bat such as "brestore" panel -- The old bat version browser has been turned off since it does not - work correctly and the brestore panel provides the same functionality -- Improved hash table for hard links -- Additional script variable editing such as %b (JobBytes), %F (JobFiles) - and %h (Client Address) - -Other Enhancements: -- Includes better handling for Windows repares points, mount points, and - junction points. -- New database format -- Many new plugin API features -- Improved memory handling for restores -- Significant stability enhancements to bat -- xattr/ACL restore failure are now printed as Warning -- A few path name length limits in Windows have been removed. - - -=========================================================================== - -The 5.0.3 version is significant bug fix update to version 5.0.2. -It includes new code and some new features. -There is no database change since prior versions of 5.0. - -Note, if you are running 5.0.0, read the 5.0.1 and 5.0.2 release notes below in - the 5.0.1 release section. - Important!!! - -Compatibility: --------------- - As always, both the Director and Storage daemon must be upgraded at - the same time. - - Older 5.0.x and 3.0.x File Daemons are compatible with the 5.0.3 - Director and Storage daemons. There should be no need to upgrade older File - Daemons. - -Changes and New Features: -- If a VSS (Windows) snapshot fails, the whole Job is failed, previously - it printed a warning message and continued. -- New editing codes %b = Job Bytes and %f = Job Files for runscripts -- Any non-Bacula project plugins (i.e. third party plugins) - must be upgraded to specify AGPLv3 in place of the GPLv2 used previously - for the PLUGIN_LICENSE. -- The bat Media page text columns can be sorted by clicking on the column. -- If possible, the SD will automatically update the catalog Volume size if - it does not match the Volume size. The mismatch between the Volume sizes - typically occurs when the FD has a comm line drop or the FD crashes. - - -Bug fixes -1538 1554 1564 1567 1568 1569 1571 1577 1581 1582 1587 1594 1595 1606 1610 - -- Change license from GPLv2 to AGPLv3 -- Make Win32 no filesystem change more explicit -- Backport Branch-4.0 release to Branch-5.0 -- Massive backport from Branch-5.1 to Branch-5.0 -- Fix postgresql catalog creation when version is not on the first line -- Fix bug #1610 handle empty xattr values on Linux and xBSD. -- Garbage collect memory pool at end of job and before sm_dump -- Add xattr seg fault protection suggested by Marco for bug #1610 -- Add archlinux to os.m4 -- More fixes for 32/64 bit problems in smartall -- Fix 32/64 bit problem in smartalloc dump routine -- Fix bad copy/paste in commit c88dccb88 prably a seg fault -- Add .dump and .exit commands for daemons -- Make SD automatically fix the Volume size in the Catalog when out of sync -- Use Pmsg in smartall.c rather than printf for tracing Windows -- Up maximum block size to 20M -- Fix for TLS bugs #1568 and #1599 -- Improve comm line error handling for TLS, may fix bug #1568 and #1599 -- Fix problem when sending Cancel event to plugin -- Convert all Jmsg on the watchdog thread to Qmsg -- Fix SD crash due to mismatched lock/unlock in error condition -- Fix bug #1587 if you have clients with different catalogs configured, both - catalogs contains all clients after a reload or restart of the dir -- Fix bug #1577 During migration: ERROR in block.c:950 Failed ASSERT: dev->is_open() - by moving and commenting out the ASSERT() -- Skip HB kill in FD if HB thread terminated -- Fix crash from unequal volume_lock/unlock calls -- New prunning algorithm -- should be more accurate -- Save any dumps during regression to dumps directory -- Fix crash from rw_lock/unlock miss match -- Attempt to fix duplicate job kill seg fault -- Replace pthread_kill by my_thread_send_signal() in jcr.c -- fix #1595 about batch mode detection problem for postgresql with non standard - install dir -- Fix #1594 about prune copy jobs -- Apply literal string fix in printf submitted by Luca Berra -- Fix bug #1582 Restore from multiple storage daemons breaks subsequent backups -- Fix segfault on "cancel jobid=" command -- Fix bug #1554 Windows installer doesn't honor /S flag -- Remove pool zap code that breaks 2drive-concurrent-test -- Fix #1571 and install libraries with 755 perms -- Fix bug #1581 ASSERTs in src/dird/jobq.c can never trigger -- Fix problem with BaseJob and Accurate FileSet options on client side -- Fix for bug #1569 deadlock/crash in Dir -- Fix segfault when loading Plugins -- Fix #1567 about display of long volume names truncated during restore -- Added new bacula-libs package. -- Fix bug #1538 Start Scripts return incorrect value -- Fix bug #1564 init scripts not LSB compliant - -See ChangeLog for more details. - -============================================================================= - - -============= Release 5.0.2 ======================== - -Changes since 5.0.1 -------------------- - -Bug fixes -1502 1511 1517 1524 1527 1532 1536 1541 1549 1551 1553 1559 1560 - -- Probable fix for SD crash bug #1553 -- Fix #1559 problem when restoring pruned jobs with a regexp -- Fix for bug #1560 bcopy cannot find Volume -- Fix cancel crash bug #1551 -- Check if sql backend is thread-safe -- Correct Pool display in SD status. Fixes bug #1541 -- Fix cancel crash reported by Stephen Thompson -- Rewind on close to fix #1549 -- Remove closelog() in bpipe fixes bug #1536 -- Fix #1517 about missing Base level in .level command -- Replace ASSERT in block.c with fail Job -- Fix database locking calling db_lock and returning from function without - calling db_unlock. -- Add missing db_unlock to bvfs_update_cache. -- Fix #1532 about permission on binaries -- Fix #1527 about deadlock during migration -- Another fix for OpenSSLv1 -- Add -lrt to Solaris links -- Fix tls.c for OpenSSLv1 -- Fix #1511 when trying to insert more than 50.000 directories in bvfs -- Fix plugin load not to stop if one plugin bad -- pointed out by James -- Remove --without-qwt from configure statement. -- Second correct fix to bug #1524 verify fails after adding or removing files -- Fix bug #1524 verify fails after adding or removing files -- Apply fix suggested by Andreas in bug #1502 for mediaview column sort problem -- Fix OpenSSL 1.x problem in crypto.c on Fedora 12 -- Display AllowCompress warning message only if compression used in FileSet - -============================================================================= - - -============= Release 5.0.1 ======================== - -!!!!!!!!!!!!!!! NOTE FOR 5.0.0 USERS !!!!!!!!!!!!!!!!!!!! -The Allow Duplicate Jobs directive has been significantly -reworked, and the default value has changed. See below. - -Truncate On Purge has been totally rewritten. See the new -features section of the manual. - -When Volume Poll Interval is set in the SD DEVICE configuration, -(default 5 mins), after a certain number of polling tries (approx -10) polling will stop and the operator will be asked to -resolve the problem. Previously there was no limit, and an -error message could be produced at each poll attempt. -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -Changes since 5.0.0 -------------------- -- We believe that we have resolved most of the problems - concerning canceled or failed jobs being "stuck" in the - Director. There is one outstanding problem in the SD when - canceling jobs that we will fix in the next major release. - If you see jobs that seem to be stuck, in general issuing - a cancel command in bconsole should now make them go away. - -Directives: -- The default for "Allow Duplicate Jobs" has been changed from - no to yes. If you use this directive, please check your - conf file, and note the next two items !!!!!!!!!!!!!!!!!!! -- AllowHigherDuplicates disabled. It did not work as documented - and was confusing. -- New directive "CancelLowerLevelDuplicates" See New Features - section in the manual. -- Truncate on Purge rewritten. See New Features section in the manual. - -Bug fixes: -1448 1466 1467 1468 1476 1481 1486 1488 1494 1497 -1499 1501 1505 1509 1513 - -- Ensure SD asks for help when looping even if poll set. Fixes bug #1513. -- Fix three-pool regress bug -- Modify bacula.spec fixes bug #1505 -- This version fixes an issue where the console window would start out - docked. It is fixed by initiating the variables in the Pages class wi - constructor. -- Fix make_catalog_backup.pl fails when catalog db is on other host -- Apply MacOSX installer patch from bug #1509 -- Apply fix to previous fix of Copy problem. Fix proposed by reporter o - #1476 -- Fix bug #1501 -t does not print errors -- Apply SQLite3 update fix from bug #1497 -- Apply bashism fix for diskchanger.in script from bug #1499 -- Apply rpm fix for Sci Linux from bug #1494 -- Take most recent Ukranian po from bug #1448 -- Probable fix for Copy/Migration bug #1476 -- Fix bug #1488 -- avoid recursion and race conditions in messages.c -- Upgrade cats library also to 5.0.0 -- Fix missing console page in bat -- Add bat help files to Window install -- Improve Windows upgrade to ensure old FD is shutdown -- Fix bug #1481 -- bat consumes all console file descriptors -- Backport truncate on purge from 5.1.x -- Fix bug #1486 -- bat doesn't show any errors on command-line -- Update the bsock error URL -- Correct .my.cnf umask in make_catalog_backup.pl -- Apply fix for dbcheck use by make_catalog_backup.pl -- Fix seg fault in bscan from new comment field -- Allow multiple CNs when using TLS -- Fix seg fault in SQlite driver -- Make shared libs version the same as the Bacula release version -- Remove file_index sequential check -- Fix #1466 about Bogus pruning message - -For Packagers: -1. The default query.sql file is now, except for some comments, empty. -The old file, which we no longer support (it is impossible or difficult to -make it work on every backend, and the queries are mostly contributed) can -be found in /examples/sample-query.sql. The sample file is -not installed by the Makefiles - -2. When you install the mtx-changer script, you must also install -mtx-changer.conf if it does not exist. This new file (mtx-changer.conf) is -required for mtx-changer to work, but it is a user configurable file, so on -any update, any existing file should not be overwritten. - -3. Bat should be built on every platform that is capabable of running Qt. -However, the Qt code is changing rather quickly and is not always -compatible from version to version. We have built and verified bat on Qt -4.3.4. We strongly recommend that you do not build and distribute bat with -any other version of Qt unless you personally test it. To build against Qt -4.3.4, download the depkgs-qt package from the Bacula Source Forge download -location, read the README file and follow the instructions. - -If you are building for Bacula version 5.0.0, please ensure that you do not -have qmake-qt4 loaded on your system. If you do, either remove it or -rename it before trying to build bat. If you do not, bat will probably be -built using the shared objects on your system. For Bacula 5.0.1 and later, -this problem (bug) does not exist. - -depkgs-qt does not install Qt on your system, nor does it interfere with -you having any other version of Qt installed on your system. Once you -build bat with depkgs-qt, it should *not* use the Qt shared objects, but -rather they will be linked into the program. After fully installing bat -(make install), you can run "ldd bat" to see what shared objects it will -use. If any Qt shared objects are referenced, something has gone wrong. - -4. Unless absolutely necessary, we recommend that you do not define any -special library environment variables that apply to the ./configure -- for -example: LIBDIR=/... ./configure is strongly discouraged. -Doing so, could potentially cause Bacula to be linked against the wrong -shared objects. - -5. The Bacula project strongly recommends that you install Bacula into a -single directory, with a few minor exceptions such as the MySQL or -PostgreSQL databases. Preferrably this should be /opt/bacula. The full -recommendation is: - -#!/bin/sh -# Recommended configure script for Bacula -prefix=/opt/bacula -email=xxx@yyy.zz -CFLAGS="-g -O2 -Wall" \ - ./configure \ - --sbindir=${prefix}/bin \ - --sysconfdir=${prefix}/etc \ - --docdir=${prefix}/html \ - --htmldir=${prefix}/html \ - --with-working-dir=${prefix}/working \ - --with-pid-dir=${prefix}/working \ - --with-subsys-dir=${prefix}/working \ - --with-scriptdir=${prefix}/scripts \ - --with-plugindir=${prefix}/plugins \ - --libdir=${prefix}/lib \ - --enable-smartalloc \ - --enable-tray-monitor \ - --enable-bat \ - --with-mysql \ - --with-dump-email=${email} \ - --with-job-email=${email} \ - --with-smtp-host=localhost \ - --with-baseport=9101 - -Obviously, the email, and some of the minor options (mysql, postgresql, -...) can be changed to suit your distribution, but the directory names -defined above are strongly recommended, and over time the default values in -the bacula-dir.conf and bacula-sd.conf will reflect these choices. - -If you have any questions about this or would like a detailed document -describing our recommendations including packaging requirements, please -send an email to the bacula-devel list. - -6. Starting with Bacula version 3.0.0 up to Bacula 5.0.0, the shared -libraries that Bacula uses by default are named xxx-1.0.0. Starting with -Bacula 5.0.1, we are going to name the libraries using the Bacula version. -So in Bacula 5.0.1, the libraries will be named xxx-5.0.1. With future -versions, the last digit may or may not change when we distribute patch -updates (i.e. the last digit of the version changes). This will depend on -whether or not we have changed something in the library. Hopefully this -new procedure will resolve some of the incompatibility problems between -different versions of the shared objects. - -7. The default build option for bconsole is conio (my own little console -routines). I did this because some years ago, readline was very difficult -to maintain -- it and where it was found seemed to change on every release. -This generated at the time a number of support problems. It seems to me -that since then there have been very few problems with readline. As a -consequence, I have no problem if you want to make bconsole with readline -enabled. It will actually give some very nice new bconsole command -completion functionality that Eric has written. Bottom line: feel free to -use readline or not as you please. - -========================================================== - - - -Release Notes for Bacula 5.0.0 - -Release Numbering: ------------------------------------------------------------ -You might be wondering why this release jumps from 3.0.x to -5.0.0 thus skipping version 4.0.0. We have done this for -several reasons: first, we wanted a way of distinguishing -the numbering system for the Bacula System Enterprise version -and the Bacula Project version. So, to do so, we have decided -that the first number of the Bacula Project version will always -be odd, and the first number of the Enterprise version will always -be even. Thus the Bacula Project now moves from 3.0.x to 5.0.x. -In addition, we want to keep the Bacula Project version larger -than the Enterprise version to indicate that the Bacula Project -version is more advanced or has more features than the -Enterprise version. For memory, the current Enterprise version -is 2.6.1, and the next release (in a few months -- before June 2010) -will be version 4.0.0. - -Warning: --------------------------------------------------------------- -Please note the three Warnings below before doing any install or -upgrade. - - -Changes since 3.0.3a (the last Bacula Project release): -------------------------------------------------------- - -Bug fixes: -1337 1351 1352 1354 1357 1361 1367 1369 1370 1373 -1376 1391 1403 1409 1420 1422 1427 1428 1431 1450 -1454 1455 1458 1456 - -Fixed: - - Problem that locks the Director when the SMTP server wasn't - responding to the bsmtp program - - Restore's dir command shows incorrect file sizes - - Fix various problems with the reload command - - Fix problems with conio - - Eliminate several deadlocks or potential race conditions from SD - -Enhancements: - - Project 5: Truncate volume after purge - - Project 6: File Deduplication using Base Jobs - - Project 10: Restore from Multiple Storage Daemons - - Project 11: AllowCompression per Device - - Project 23: Add Maximum Concurent Jobs for Devices to balance load - between drives - - Add Accurate Fileset Options to configure accurate detection. Can use - checksum verification for example. - - Allow FD to keep root read but drop write permission (CAP) - - Secure handling of passwords for catalog backup - - Add Tab-completion for Bconsole when using Readline - - Add Bvfs API to query the catalog without building a memory tree - - Add new speed test to btape program - - Add new Bat screens (Autochanger content, Job view, Media view, ...) - - Windows version of Bat - - Added Spanish Bacula translation - - New bconsole -u nnn option to have timeout on commands - - Allow Migrate, Copy, and Virtual Full to read and write - to the same Pool - - show disabled -- shows disabled Jobs - - Add Pool File and Job retention periods (take precedence over Client) - - Many ACL improvements - - Level added to FD status Job entry - - Allow turning on/off Block Checksum per device - - Set Device Poll interval to 5 minutes -- previously did not poll - - Implement lock manager with bad order protection - -Compatibility: -As always, both the Director and Storage daemon must be upgraded at -the same time, and on any given machine, you must run only one version -of Bacula. This means that on the Director and Storage daemon machines, -you *must* upgrade your File daemon as well. - -Older 3.0.x and possibly 2.4.x File Daemons are compatible with the 5.0.0 -Director and Storage daemons. There should be no need to upgrade older File -Daemons immediately. However, we recommend that you do so as soon -as is reasonable for your situation. - -================== Warning !!!!!! ========================== - -New Catalog format in version 5.0.0 (3.1.9 or later) ------------------------------------------------------ - -This release of Bacula uses a new catalog format. We provide a set of -scripts that permit to convert a 3.0.x (version 11) catalog to 5.0.0 (version -12). The Bacula project rpms distributed on Source Forge will automatically -detect the database change and do the upgrade for you. We strongly -recommend that you save a copy of your existing database before upgrading -using rpms. - -The simplest way to upgrade the database assuming you are building from -source: -1. Stop any current version of Bacula from running. -2. Save a copy of your existing database. -3. Configure, build, and install the 5.0.0 version of Bacula - Note the new ./configure options in the manuals see the link - at the bottom of this file. -4. cd -5. ./update_bacula_tables -6. If you have multiple catalogs, edit the update_bacula_tables - script and put the name of another database, and then - execute the script again. Repeat this until all Bacula - catalogs have been updated. -7. Start the new Bacula. If everything worked, it should - not print any error messages. - -If you start from scratch, you don't need to run the update_bacula_tables -script because the create_bacula_tables script automatically creates the new -table format. However, if you are using a version of Bacula older than 3.1.9 -(e.g. 3.0.3) then you need to run the update_bacula_tables script that will -be found in the /src/cats directory after you run the ./configure -command. As mentioned above, before running this script, please backup your -catalog database, and when you do running it, be sure shutdown Bacula and be -aware that running the script can take some time depending on your database -size. -================================================================ - - -================== Warning !!!!!! ========================== -If you upgrade a previous Win32 client installation, you must -first stop the File daemon, then uninstall it before attempting -the upgrade. If you do not do so, the upgrade will probably -fail and you will need to manually find and run the -Uninstall.exe file, before you can upgrade to the new version. -This is because the file locations are different. If you want -to save your previous bacula-fd.conf file, please do so before -uninstalling it. -================================================================ - -================== Warning !!!!!! ========================== -Due to permissions problems on Windows Vista and later systems, -we no longer require SYSTEM or Administrator permissions to -access the binaries and configuation files. If you wish -to restrict access to these files, please see the New Features -section of the manual for how to set access control lists. -================================================================ - -Note, the Win32 Installer no longer installs the Bacula Servers -(Director and Storage daemon). See the New Features section of -the manual for more details. - -============ Documentation improvements needed ================== - -Note!!!!! The 5.0.0+ documentation has a number of known problems: - -1. We have reduced the number of manuals, which has fixed many - of the broken links found in the old 3.0.x version, but there - are still some that need fixing. - -2. Integration of the 3.0.x features into the main manuals has - not yet been done. - -The documentation will not be completed in the near future due to lack -manpower. If you are unhappy with this situation as we are, we suggest -you help by submitting patches to the documentation. Thanks. -===== - - -This release includes large number of new features and changes. -It should be more or less compatible with previous xx.conf files -and File daemons providing that you are not using any of the new -features. - -Please see the New Features chapter of the new manual, which documents -some but not all the new features (we are still working on it): - -http://www.bacula.org/5.0.x-manuals/en/main/main/New_Features_in_5_0_1.html - -The ChangeLog has more details. +As always, both the Director and Storage daemon(s) must be upgraded at +the same time. Any File daemon running on the same machine as a Director +or Storage daemon must be of the same version. + +Older File Daemons should be compatible with the 7.0.0 Director and Storage +daemons. There should be no need to upgrade older File Daemons. + +The following are new directives, commands and features: +- New Baculum web GUI interface. See the gui/baculum directory. +- Directive fdstorageaddress in Client +- Directive SD Calls Client in Client +- Directive Maximum Bandwidth per Job in Client +- Directive FD Storage Address in Storage +- Directive Maximum Spawned Jobs in Job +- setbandwidth command in bconsole +- Progress meter with FD in status dir +- LastDay of month in schedule +- sixth 6th week in month in schedule +- Improvements in bconsole SQL calls +- Allow list and ranges in cancel as well as the keyword: all +- truncate command in bconsole +- prune expired volumes? +- New hardlink performance enhancements +- restart command +- restore optimizespeed=yes|no for hardlinks default yes +- PkiCipher and PkiDigest in FD Client item + Cipher aes128, aes192, aes256, blowfish + Digest md5, sha1, sha256 +- Maximum Bandwidth Per Job in FD Client resource +- Maximum Bandwidth Per Job in FD Director Resource +- .bvfs_decode_lstat +- DisableCommand in FD Director resource +- DisableCommand in FD Client resource +- status scheduled bconsole command with the following options: + days=nn (0-500 default 10); limit=nn (0-2000 default 100) + time=YYYY-MM-DD HH:MM:SS + schedule=xxx job=xxx +- NextPool in Run override +- Directive NextPool in Job + +Please see the New Features chapter of the manual for more +details. + +The following features or directives have been removed: +- Win32 +- tray-monitor +- wx_console +- Removed cats DBI driver +- Python + +Detailed changes: +================= +24Mar14 + - Add Josip Almasi to AUTHORS + - [PATCH] Support for restricted consoles in BAT config + - [PATCH] Fix for free director directive + - [PATCH] Fix auto-select restricted console for director in bconsole + - Realign output display + - Update ua_output.c from Branch-6.7 + - Add some missing Branch-6.7 updates + - Added needed empty directories to Baculum + - Fix for support PostgreSQL, MySQL and SQLite + - Framework adjusting to Baculum database connections + - Framework fix for lower case tables names in MySQL + - Fix for Baculum SQLite support + - Initial commit Baculum + - Add Marcin to AUTHORS file + - Strip trailing blanks + - Update copyright year + - Update LICENSE and header files + - Remove old file + - Add new header in misc files + - Remove tray-monitor bwx-console manual installation + - Remove FD python and examples + - Fixup spec files + - Remove pythonlib from lib + - Update package-list + - Fix SDCallsClient daemon synchronization + - Add debug code + make 127.0.0.1 same as localhost for tls tests + - Fix multiple DIRs in console + - Make failure for bat to connect to DIR non-fatal + - Fix bat style to one that works + - Take disk-changer from Branch-6.7 + - Simplify Version output + - Fix FDVersion for SD Calls Client test + - Update accurate test + - Update differential test + - Add new regress timing scripts + - Improve plugin make clean + - Implement regress FORCE_SDCALLS + - Remove win32 tray-monitor and wx-console directories + - Remove regress-config need only regress-config.in + - Add configure archivedir + - Improve SQL failure reporting + - First cut backport BEE to community + - Add copyright to mtx-changer.in diff --git a/bacula/autoconf/Make.common.in b/bacula/autoconf/Make.common.in index 17467bbb7f..26aaa95b45 100644 --- a/bacula/autoconf/Make.common.in +++ b/bacula/autoconf/Make.common.in @@ -2,6 +2,20 @@ # This file is pulled in by all the Unix Bacula Makefiles # so it has all the "common" definitions # +# Bacula® - The Network Backup Solution +# +# Copyright (C) 2000-2014 Free Software Foundation Europe e.V. +# +# The main author of Bacula is Kern Sibbald, with contributions from many +# others, a complete list can be found in the file AUTHORS. +# +# You may use this file and others of this release according to the +# license defined in the LICENSE file, which includes the Affero General +# Public License, v3.0 ("AGPLv3") and some additional permissions and +# terms pursuant to its AGPLv3 Section 7. +# +# Bacula® is a registered trademark of Kern Sibbald. +# DATE="@DATE@" LSMDATE=@LSMDATE@ diff --git a/bacula/autoconf/config.h.in b/bacula/autoconf/config.h.in index 4ce9ed2962..d41ae04b4b 100644 --- a/bacula/autoconf/config.h.in +++ b/bacula/autoconf/config.h.in @@ -383,6 +383,12 @@ /* Define to 1 if you have the `fchdir' function. */ #undef HAVE_FCHDIR +/* Define to 1 if you have the `fchmod' function. */ +#undef HAVE_FCHMOD + +/* Define to 1 if you have the `fchown' function. */ +#undef HAVE_FCHOWN + /* Define to 1 if you have the 'fchownat' function. */ #undef HAVE_FCHOWNAT @@ -404,6 +410,9 @@ /* Define to 1 if you have the 'fstatat' function. */ #undef HAVE_FSTATAT +/* Define to 1 if you have the `futimes' function. */ +#undef HAVE_FUTIMES + /* Define to 1 if you have the 'futimesat' function. */ #undef HAVE_FUTIMESAT @@ -449,6 +458,9 @@ /* Define to 1 if you have the `getmntinfo' function. */ #undef HAVE_GETMNTINFO +/* Define to 1 if you have the `getnameinfo' function. */ +#undef HAVE_GETNAMEINFO + /* Set if have getpagesize */ #undef HAVE_GETPAGESIZE @@ -476,9 +488,6 @@ /* Define to 1 if you have the header file. */ #undef HAVE_GRP_H -/* Set if you have GTK 4.2 or greater loaded */ -#undef HAVE_GTK_2_4 - /* Define if you have the iconv() function. */ #undef HAVE_ICONV @@ -510,6 +519,9 @@ /* Define if you have and nl_langinfo(CODESET). */ #undef HAVE_LANGINFO_CODESET +/* Define to 1 if you have the `lchmod' function. */ +#undef HAVE_LCHMOD + /* Define to 1 if you have the `lchown' function. */ #undef HAVE_LCHOWN diff --git a/bacula/autoconf/config.h.in.save b/bacula/autoconf/config.h.in.save deleted file mode 100644 index ecafd61b20..0000000000 --- a/bacula/autoconf/config.h.in.save +++ /dev/null @@ -1,1152 +0,0 @@ -/* autoconf/config.h.in. Generated from autoconf/configure.in by autoheader. */ -/* ------------------------------------------------------------------------- */ -/* -- CONFIGURE SPECIFIED FEATURES -- */ -/* ------------------------------------------------------------------------- */ - -/* Define if you want to use MySQL as Catalog database */ -#undef USE_MYSQL_DB - -/* Define if you want SmartAlloc debug code enabled */ -#undef SMARTALLOC - -/* Define to `int' if doesn't define. */ -#undef daddr_t - -/* Define to `int' if doesn't define. */ -#undef major_t - -/* Define to `int' if doesn't define. */ -#undef minor_t - -/* Define to `int' if doesn't define. */ -#undef ssize_t - -/* Define if you want to use PostgreSQL */ -#undef HAVE_POSTGRESQL - -/* Define if you want to use MySQL */ -#undef HAVE_MYSQL - -/* Set if have entrypoint mysql_thread_safe */ -#undef HAVE_MYSQL_THREAD_SAFE - -/* Define if you want to use embedded MySQL */ -#undef HAVE_EMBEDDED_MYSQL - -/* Define if you want to use SQLite3 */ -#undef HAVE_SQLITE3 - -/* ------------------------------------------------------------------------- */ -/* -- CONFIGURE DETECTED FEATURES -- */ -/* ------------------------------------------------------------------------- */ - -/* Define if you need function prototypes */ -#undef PROTOTYPES - -/* Define if you have XPointer typedef */ -#undef HAVE_XPOINTER - -/* Define if you have _GNU_SOURCE getpt() */ -#undef HAVE_GETPT - -/* Define if you have GCC */ -#undef HAVE_GCC - -/* Define if you have the Andrew File System. */ -#undef AFS - -/* Define If you want find -nouser and -nogroup to make tables of - used UIDs and GIDs at startup instead of using getpwuid or - getgrgid when needed. Speeds up -nouser and -nogroup unless you - are running NIS or Hesiod, which make password and group calls - very expensive. */ -#undef CACHE_IDS - -/* Define to use SVR4 statvfs to get filesystem type. */ -#undef FSTYPE_STATVFS - -/* Define to use SVR3.2 statfs to get filesystem type. */ -#undef FSTYPE_USG_STATFS - -/* Define to use AIX3 statfs to get filesystem type. */ -#undef FSTYPE_AIX_STATFS - -/* Define to use 4.3BSD getmntent to get filesystem type. */ -#undef FSTYPE_MNTENT - -/* Define to use 4.4BSD and OSF1 statfs to get filesystem type. */ -#undef FSTYPE_STATFS - -/* Define to use Ultrix getmnt to get filesystem type. */ -#undef FSTYPE_GETMNT - -/* Define to `unsigned long' if doesn't define. */ -#undef dev_t - -/* Define to `unsigned long' if doesn't define. */ -#undef ino_t - -/* Define to 1 if utime.h exists and declares struct utimbuf. */ -#undef HAVE_UTIME_H - -/* Data types */ -#undef HAVE_U_INT -#undef HAVE_INTXX_T -#undef HAVE_U_INTXX_T -#undef HAVE_UINTXX_T -#undef HAVE_INT64_T -#undef HAVE_U_INT64_T -#undef HAVE_INTMAX_T -#undef HAVE_U_INTMAX_T - -/* Define if you want TCP Wrappers support */ -#undef HAVE_LIBWRAP - -/* Define if you have sys/bitypes.h */ -#undef HAVE_SYS_BITYPES_H - -/* Directory for PID files */ -#undef _PATH_BACULA_PIDDIR - -/* LOCALEDIR */ -#undef LOCALEDIR - -/* Define if you have zlib */ -#undef HAVE_LIBZ - -/* Define if you have lzo lib */ -#undef HAVE_LZO - -/* Define if you have libacl */ -#undef HAVE_ACL - -/* Define if you have AFS acls */ -#undef HAVE_AFS_ACL - -/* General libs */ -#undef LIBS - -/* File daemon specif libraries */ -#undef FDLIBS - -/* Path to Sendmail program */ -#undef SENDMAIL_PATH - -/* What kind of signals we have */ -#undef HAVE_POSIX_SIGNALS -#undef HAVE_BSD_SIGNALS -#undef HAVE_USG_SIGHOLD - -/* Operating systems */ -/* OSes */ -#undef HAVE_LINUX_OS -#undef HAVE_FREEBSD_OS -#undef HAVE_NETBSD_OS -#undef HAVE_OPENBSD_OS -#undef HAVE_BSDI_OS -#undef HAVE_HPUX_OS -#undef HAVE_SUN_OS -#undef HAVE_IRIX_OS -#undef HAVE_AIX_OS -#undef HAVE_SGI_OS -#undef HAVE_CYGWIN -#undef HAVE_OSF1_OS -#undef HAVE_DARWIN_OS - -/* Set to correct scanf value for long long int */ -#undef lld -#undef llu - -#undef HAVE_READLINE -#undef HAVE_PYTHON - -#undef HAVE_GMP - -#undef HAVE_CWEB - -#undef HAVE_FCHDIR - -#undef HAVE_GETOPT_LONG - -#undef HAVE_LIBSM - -/* Check for thread safe routines */ -#undef HAVE_LOCALTIME_R -#undef HAVE_READDIR_R -#undef HAVE_STRERROR_R -#undef HAVE_GETHOSTBYNAME_R - -#undef HAVE_STRTOLL -#undef HAVE_INET_PTON - -#undef HAVE_SOCKLEN_T - -#undef HAVE_OLD_SOCKOPT -#undef USE_THR_SETCONCURRENCY - -/* Defined if Gtk+-2.4 or greater is present */ -#undef HAVE_GTK_2_4 - -/* Needed on HP-UX/g++ systems to support long long ints (int64) */ -#undef _INCLUDE_LONGLONG - -/* Define to system config directory */ -#undef SYSCONFDIR - -/* Define if OPENSSL is available */ -#undef HAVE_OPENSSL - -/* Define if comm encryption should be enabled */ -#undef HAVE_TLS - -/* Define if data encryption should be enabled */ -#undef HAVE_CRYPTO - -/* Define the LOCALEDIR if a translation */ -#undef LOCALEDIR - -/* Define if language support is enabled */ -#undef ENABLE_NLS - - -/* Define if building universal (internal helper macro) */ -#undef AC_APPLE_UNIVERSAL_BUILD - -/* Set if ***BEEF*** DEMO code enabled */ -#undef BEEF_DEMO_ENABLED - -/* Define to 1 if the `closedir' function returns void instead of `int'. */ -#undef CLOSEDIR_VOID - -/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP - systems. This function is required for `alloca.c' support on those systems. - */ -#undef CRAY_STACKSEG_END - -/* Define to 1 if using `alloca.c'. */ -#undef C_ALLOCA - -/* Define to 1 if translation of program messages to the user's native - language is requested. */ -#undef ENABLE_NLS - -/* Normal acl support */ -#undef HAVE_ACL - -/* Defines if your system have the ACL_TYPE_DEFAULT_DIR acl type */ -#undef HAVE_ACL_TYPE_DEFAULT_DIR - -/* Defines if your system have the ACL_TYPE_EXTENDED acl type */ -#undef HAVE_ACL_TYPE_EXTENDED - -/* Defines if your system have the ACL_TYPE_NFS4 acl type */ -#undef HAVE_ACL_TYPE_NFS4 - -/* Define to 1 if you have the 'add_proplist_entry' function. */ -#undef HAVE_ADD_PROPLIST_ENTRY - -/* Define to 1 if your system has AFS support */ -#undef HAVE_AFS - -/* Andrew FileSystem ACL support */ -#undef HAVE_AFS_ACL - -/* Define to 1 if you have the header file. */ -#undef HAVE_AFS_STDS_H - -/* Define to 1 if you have `alloca', as a function or macro. */ -#undef HAVE_ALLOCA - -/* Define to 1 if you have and it should be used (not on Ultrix). - */ -#undef HAVE_ALLOCA_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_ARGZ_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_ARPA_NAMESER_H - -/* Define to 1 if you have the `asprintf' function. */ -#undef HAVE_ASPRINTF - -/* Define to 1 if you have the header file. */ -#undef HAVE_ASSERT_H - -/* Defines if your system have the attr.h header file */ -#undef HAVE_ATTR_H - -/* Define to 1 if you have the `backtrace' function. */ -#undef HAVE_BACKTRACE - -/* Set if Bacula bat Qt4 GUI support enabled */ -#undef HAVE_BAT - -/* Big Endian */ -#undef HAVE_BIG_ENDIAN - -/* Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the - CoreFoundation framework. */ -#undef HAVE_CFLOCALECOPYCURRENT - -/* Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in - the CoreFoundation framework. */ -#undef HAVE_CFPREFERENCESCOPYAPPVALUE - -/* Define to 1 if you have the `chflags' function. */ -#undef HAVE_CHFLAGS - -/* Set if Bacula conio support enabled */ -#undef HAVE_CONIO - -/* Define if encryption support should be enabled */ -#undef HAVE_CRYPTO - -/* Define to 1 if you have the header file. */ -#undef HAVE_CURSES_H - -/* Define if the GNU dcgettext() function is already present or preinstalled. - */ -#undef HAVE_DCGETTEXT - -/* Define to 1 if you have the declaration of `feof_unlocked', and to 0 if you - don't. */ -#undef HAVE_DECL_FEOF_UNLOCKED - -/* Define to 1 if you have the declaration of `fgets_unlocked', and to 0 if - you don't. */ -#undef HAVE_DECL_FGETS_UNLOCKED - -/* Define to 1 if you have the declaration of `getc_unlocked', and to 0 if you - don't. */ -#undef HAVE_DECL_GETC_UNLOCKED - -/* Define to 1 if you have the declaration of `tzname', and to 0 if you don't. - */ -#undef HAVE_DECL_TZNAME - -/* Define to 1 if you have the declaration of `_snprintf', and to 0 if you - don't. */ -#undef HAVE_DECL__SNPRINTF - -/* Define to 1 if you have the declaration of `_snwprintf', and to 0 if you - don't. */ -#undef HAVE_DECL__SNWPRINTF - -/* Define to 1 if you have the header file, and it defines `DIR'. - */ -#undef HAVE_DIRENT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_DLFCN_H - -/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */ -#undef HAVE_DOPRNT - -/* Set if you have an Embedded MySQL Database */ -#undef HAVE_EMBEDDED_MYSQL - -/* Define to 1 if you have the 'extattr_get_file' function. */ -#undef HAVE_EXTATTR_GET_FILE - -/* Define to 1 if you have the 'extattr_get_link' function. */ -#undef HAVE_EXTATTR_GET_LINK - -/* Define to 1 if you have the 'extattr_list_file' function. */ -#undef HAVE_EXTATTR_LIST_FILE - -/* Define to 1 if you have the 'extattr_list_link' function. */ -#undef HAVE_EXTATTR_LIST_LINK - -/* Define to 1 if you have the 'extattr_namespace_to_string' function. */ -#undef HAVE_EXTATTR_NAMESPACE_TO_STRING - -/* Define to 1 if you have the 'extattr_set_file' function. */ -#undef HAVE_EXTATTR_SET_FILE - -/* Define to 1 if you have the 'extattr_set_link' function. */ -#undef HAVE_EXTATTR_SET_LINK - -/* Define to 1 if you have the 'extattr_string_to_namespace' function. */ -#undef HAVE_EXTATTR_STRING_TO_NAMESPACE - -/* Extended acl support */ -#undef HAVE_EXTENDED_ACL - -/* Define to 1 if you have the `fchdir' function. */ -#undef HAVE_FCHDIR - -/* Define to 1 if you have the 'fchownat' function. */ -#undef HAVE_FCHOWNAT - -/* Define to 1 if you have the header file. */ -#undef HAVE_FCNTL_H - -/* Define to 1 if you have the `fdatasync' function. */ -#undef HAVE_FDATASYNC - -/* Define to 1 if you have the `fork' function. */ -#undef HAVE_FORK - -/* Define to 1 if you have the `fseeko' function. */ -#undef HAVE_FSEEKO - -/* Define to 1 if you have the 'fstatat' function. */ -#undef HAVE_FSTATAT - -/* Define to 1 if you have the 'futimesat' function. */ -#undef HAVE_FUTIMESAT - -/* Define to 1 if you have the `fwprintf' function. */ -#undef HAVE_FWPRINTF - -/* Define to 1 if you have the `getcwd' function. */ -#undef HAVE_GETCWD - -/* Define to 1 if you have the 'getea' function. */ -#undef HAVE_GETEA - -/* Define to 1 if you have the `getegid' function. */ -#undef HAVE_GETEGID - -/* Define to 1 if you have the `geteuid' function. */ -#undef HAVE_GETEUID - -/* Define to 1 if you have the `getgid' function. */ -#undef HAVE_GETGID - -/* Define to 1 if you have the `gethostbyname2' function. */ -#undef HAVE_GETHOSTBYNAME2 - -/* Define to 1 if you have the `gethostbyname_r' function. */ -#undef HAVE_GETHOSTBYNAME_R - -/* Define to 1 if you have the `gethostid' function. */ -#undef HAVE_GETHOSTID - -/* Define to 1 if you have the `gethostname' function. */ -#undef HAVE_GETHOSTNAME - -/* Define to 1 if you have the `getmntent' function. */ -#undef HAVE_GETMNTENT - -/* Define to 1 if you have the `getmntinfo' function. */ -#undef HAVE_GETMNTINFO - -/* Set if have getpagesize */ -#undef HAVE_GETPAGESIZE - -/* Define to 1 if you have the `getpid' function. */ -#undef HAVE_GETPID - -/* Define to 1 if you have the 'getproplist' function. */ -#undef HAVE_GETPROPLIST - -/* Define if the GNU gettext() function is already present or preinstalled. */ -#undef HAVE_GETTEXT - -/* Define to 1 if you have the `gettimeofday' function. */ -#undef HAVE_GETTIMEOFDAY - -/* Define to 1 if you have the `getuid' function. */ -#undef HAVE_GETUID - -/* Define to 1 if you have the 'getxattr' function. */ -#undef HAVE_GETXATTR - -/* Define to 1 if you have the 'get_proplist_entry' function. */ -#undef HAVE_GET_PROPLIST_ENTRY - -/* Define to 1 if you have the header file. */ -#undef HAVE_GRP_H - -/* Set if you have GTK 4.2 or greater loaded */ -#undef HAVE_GTK_2_4 - -/* Define if you have the iconv() function. */ -#undef HAVE_ICONV - -/* Define to 1 if you have the `inet_ntop' function. */ -#undef HAVE_INET_NTOP - -/* Define to 1 if you have the `inet_pton' function. */ -#undef HAVE_INET_PTON - -/* Define if you have the 'intmax_t' type in or . */ -#undef HAVE_INTMAX_T - -/* Define to 1 if the system has the type `intptr_t'. */ -#undef HAVE_INTPTR_T - -/* Define if exists and doesn't clash with . */ -#undef HAVE_INTTYPES_H - -/* Define if exists, doesn't clash with , and - declares uintmax_t. */ -#undef HAVE_INTTYPES_H_WITH_UINTMAX - -/* Set if ioctl request is unsigned long int */ -#undef HAVE_IOCTL_ULINT_REQUEST - -/* Whether to enable IPv6 support */ -#undef HAVE_IPV6 - -/* Define if you have and nl_langinfo(CODESET). */ -#undef HAVE_LANGINFO_CODESET - -/* Define to 1 if you have the `lchown' function. */ -#undef HAVE_LCHOWN - -/* Define if your file defines LC_MESSAGES. */ -#undef HAVE_LC_MESSAGES - -/* Define to 1 if you have the 'lgetea' function. */ -#undef HAVE_LGETEA - -/* Define to 1 if you have the 'lgetxattr' function. */ -#undef HAVE_LGETXATTR - -/* Define if you have libcap */ -#undef HAVE_LIBCAP - -/* Define to 1 if you have the header file. */ -#undef HAVE_LIBC_H - -/* Define to 1 if you have the `inet' library (-linet). */ -#undef HAVE_LIBINET - -/* Define to 1 if you have the `nsl' library (-lnsl). */ -#undef HAVE_LIBNSL - -/* Define to 1 if you have the `resolv' library (-lresolv). */ -#undef HAVE_LIBRESOLV - -/* Define to 1 if you have the `socket' library (-lsocket). */ -#undef HAVE_LIBSOCKET - -/* Define to 1 if you have the `sun' library (-lsun). */ -#undef HAVE_LIBSUN - -/* Define to 1 if you have the `util' library (-lutil). */ -#undef HAVE_LIBUTIL - -/* Defines if your system have the libutil.h header file */ -#undef HAVE_LIBUTIL_H - -/* Set to enable libwraper support */ -#undef HAVE_LIBWRAP - -/* Define to 1 if you have the `xnet' library (-lxnet). */ -#undef HAVE_LIBXNET - -/* Define to 1 if you have the header file. */ -#undef HAVE_LIMITS_H - -/* Define to 1 if you have the 'listea' function. */ -#undef HAVE_LISTEA - -/* Define to 1 if you have the 'listxattr' function. */ -#undef HAVE_LISTXATTR - -/* Little Endian */ -#undef HAVE_LITTLE_ENDIAN - -/* Define to 1 if you have the 'llistea' function. */ -#undef HAVE_LLISTEA - -/* Define to 1 if you have the 'llistxattr' function. */ -#undef HAVE_LLISTXATTR - -/* Define to 1 if you have the header file. */ -#undef HAVE_LOCALE_H - -/* Define to 1 if you have the `localtime_r' function. */ -#undef HAVE_LOCALTIME_R - -/* Define if you have the 'long double' type. */ -#undef HAVE_LONG_DOUBLE - -/* Define if you have the 'long long' type. */ -#undef HAVE_LONG_LONG - -/* Define to 1 if you have the 'lsetea' function. */ -#undef HAVE_LSETEA - -/* Define to 1 if you have the 'lsetxattr' function. */ -#undef HAVE_LSETXATTR - -/* Define to 1 if you have the `lstat' function. */ -#undef HAVE_LSTAT - -/* Define to 1 if you have LZO compression */ -#undef HAVE_LZO - -/* Define to 1 if you have the header file. */ -#undef HAVE_MALLOC_H - -/* Set if have malloc_trim */ -#undef HAVE_MALLOC_TRIM - -/* Define to 1 if you have the header file. */ -#undef HAVE_MEMORY_H - -/* Define to 1 if you have the `mempcpy' function. */ -#undef HAVE_MEMPCPY - -/* Define to 1 if you have a working `mmap' system call. */ -#undef HAVE_MMAP - -/* Define to 1 if you have the header file. */ -#undef HAVE_MTIO_H - -/* Define to 1 if you have the `munmap' function. */ -#undef HAVE_MUNMAP - -/* Define to 1 if you have the `nanosleep' function. */ -#undef HAVE_NANOSLEEP - -/* Define to 1 if you have the header file, and it defines `DIR'. */ -#undef HAVE_NDIR_H - -/* Define to 1 if you have the `nl_langinfo' function. */ -#undef HAVE_NL_LANGINFO - -/* Define to 1 if you have the header file. */ -#undef HAVE_NL_TYPES_H - -/* Define to 1 if you have the 'nvlist_next_nvpair' function. */ -#undef HAVE_NVLIST_NEXT_NVPAIR - -/* Define to 1 if you have the 'openat' function. */ -#undef HAVE_OPENAT - -/* Define if OpenSSL library is available */ -#undef HAVE_OPENSSL - -/* Define if the OpenSSL library is export-contrained to 128bit ciphers */ -#undef HAVE_OPENSSL_EXPORT_LIBRARY - -/* Set if have OpenSSL version 1.x */ -#undef HAVE_OPENSSLv1 - -/* Define to 1 if you have the `posix_fadvise' function. */ -#undef HAVE_POSIX_FADVISE - -/* Define if your printf() function supports format strings with positions. */ -#undef HAVE_POSIX_PRINTF - -/* Set if you have an PostgreSQL Database */ -#undef HAVE_POSTGRESQL - -/* Set if PostgreSQL DB batch insert code enabled */ -#undef HAVE_POSTGRESQL_BATCH_FILE_INSERT - -/* Set if have PQisthreadsafe */ -#undef HAVE_PQISTHREADSAFE - -/* Set if have PQputCopyData */ -#undef HAVE_PQ_COPY - -/* Define to 1 if you have the `prctl' function. */ -#undef HAVE_PRCTL - -/* Define to 1 if you have the `putenv' function. */ -#undef HAVE_PUTENV - -/* Define to 1 if you have the header file. */ -#undef HAVE_PWD_H - -/* Define to 1 if you have the `readdir_r' function. */ -#undef HAVE_READDIR_R - -/* Set to enable readline support */ -#undef HAVE_READLINE - -/* Define to 1 if you have the header file. */ -#undef HAVE_REGEX_H - -/* Define if sa_len field exists in struct sockaddr */ -#undef HAVE_SA_LEN - -/* Define to 1 if you have the `select' function. */ -#undef HAVE_SELECT - -/* Define to 1 if you have the 'setea' function. */ -#undef HAVE_SETEA - -/* Define to 1 if you have the `setenv' function. */ -#undef HAVE_SETENV - -/* Define to 1 if you have the `setlocale' function. */ -#undef HAVE_SETLOCALE - -/* Define to 1 if you have the `setpgid' function. */ -#undef HAVE_SETPGID - -/* Define to 1 if you have the `setpgrp' function. */ -#undef HAVE_SETPGRP - -/* Define to 1 if you have the 'setproplist' function. */ -#undef HAVE_SETPROPLIST - -/* Define to 1 if you have the `setreuid' function. */ -#undef HAVE_SETREUID - -/* Define to 1 if you have the `setsid' function. */ -#undef HAVE_SETSID - -/* Define to 1 if you have the 'setxattr' function. */ -#undef HAVE_SETXATTR - -/* Define if the SHA-2 family of digest algorithms is available */ -#undef HAVE_SHA2 - -/* Define to 1 if you have the `signal' function. */ -#undef HAVE_SIGNAL - -/* Define to 1 if you have the 'sizeof_proplist_entry' function. */ -#undef HAVE_SIZEOF_PROPLIST_ENTRY - -/* Define to 1 if you have the `snprintf' function. */ -#undef HAVE_SNPRINTF - -/* Set if socklen_t exists */ -#undef HAVE_SOCKLEN_T - -/* Set if you have an SQLite3 Database */ -#undef HAVE_SQLITE3 - -/* Set if have sqlite3_threadsafe */ -#undef HAVE_SQLITE3_THREADSAFE - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDARG_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDDEF_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDINT_H - -/* Define if exists, doesn't clash with , and declares - uintmax_t. */ -#undef HAVE_STDINT_H_WITH_UINTMAX - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDLIB_H - -/* Define to 1 if you have the `stpcpy' function. */ -#undef HAVE_STPCPY - -/* Define to 1 if you have the `strcasecmp' function. */ -#undef HAVE_STRCASECMP - -/* Define to 1 if you have the `strdup' function. */ -#undef HAVE_STRDUP - -/* Define to 1 if you have the `strerror' function. */ -#undef HAVE_STRERROR - -/* Define to 1 if you have the `strerror_r' function. */ -#undef HAVE_STRERROR_R - -/* Define to 1 if you have the `strftime' function. */ -#undef HAVE_STRFTIME - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRINGS_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRING_H - -/* Define to 1 if you have the `strncmp' function. */ -#undef HAVE_STRNCMP - -/* Define to 1 if you have the `strncpy' function. */ -#undef HAVE_STRNCPY - -/* Define to 1 if you have the `strtoll' function. */ -#undef HAVE_STRTOLL - -/* Define to 1 if you have the `strtoul' function. */ -#undef HAVE_STRTOUL - -/* Define to 1 if `st_blksize' is a member of `struct stat'. */ -#undef HAVE_STRUCT_STAT_ST_BLKSIZE - -/* Define to 1 if `st_blocks' is a member of `struct stat'. */ -#undef HAVE_STRUCT_STAT_ST_BLOCKS - -/* Define to 1 if `st_rdev' is a member of `struct stat'. */ -#undef HAVE_STRUCT_STAT_ST_RDEV - -/* Define to 1 if `tm_zone' is a member of `struct tm'. */ -#undef HAVE_STRUCT_TM_TM_ZONE - -/* Define to 1 if your `struct stat' has `st_blksize'. Deprecated, use - `HAVE_STRUCT_STAT_ST_BLKSIZE' instead. */ -#undef HAVE_ST_BLKSIZE - -/* Define to 1 if your `struct stat' has `st_blocks'. Deprecated, use - `HAVE_STRUCT_STAT_ST_BLOCKS' instead. */ -#undef HAVE_ST_BLOCKS - -/* Define to 1 if your `struct stat' has `st_rdev'. Deprecated, use - `HAVE_STRUCT_STAT_ST_RDEV' instead. */ -#undef HAVE_ST_RDEV - -/* Define to 1 if systemd support should be enabled */ -#undef HAVE_SYSTEMD - -/* Defines if your system have the sys/acl.h header file */ -#undef HAVE_SYS_ACL_H - -/* Defines if your system have the sys/attr.h header file */ -#undef HAVE_SYS_ATTR_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_BITYPES_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_BYTEORDER_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_CAPABILITY_H - -/* Define to 1 if you have the header file, and it defines `DIR'. - */ -#undef HAVE_SYS_DIR_H - -/* Defines if your system have the sys/ea.h header file */ -#undef HAVE_SYS_EA_H - -/* Defines if your system have the sys/extattr.h header file */ -#undef HAVE_SYS_EXTATTR_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_IOCTL_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_MTIO_H - -/* Define to 1 if you have the header file, and it defines `DIR'. - */ -#undef HAVE_SYS_NDIR_H - -/* Defines if your system have the sys/nvpair.h header file */ -#undef HAVE_SYS_NVPAIR_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_PARAM_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_PRCTL_H - -/* Defines if your system have the sys/proplist.h header file */ -#undef HAVE_SYS_PROPLIST_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_SELECT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_SOCKET_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_SOCKIO_H - -/* Defines if your system have the sys/statvfs.h header file */ -#undef HAVE_SYS_STATVFS_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_STAT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_TAPE_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_TIME_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_TYPES_H - -/* Define to 1 if you have that is POSIX.1 compatible. */ -#undef HAVE_SYS_WAIT_H - -/* Defines if your system have the sys/xattr.h header file */ -#undef HAVE_SYS_XATTR_H - -/* Define to 1 if you have the `tcgetattr' function. */ -#undef HAVE_TCGETATTR - -/* Define to 1 if you have the header file. */ -#undef HAVE_TERMCAP_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_TERMIOS_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_TERM_H - -/* Define if TLS support should be enabled */ -#undef HAVE_TLS - -/* Define to 1 if your `struct tm' has `tm_zone'. Deprecated, use - `HAVE_STRUCT_TM_TM_ZONE' instead. */ -#undef HAVE_TM_ZONE - -/* Define to 1 if you have the `tsearch' function. */ -#undef HAVE_TSEARCH - -/* Defind to 1 if compiler has typeof */ -#undef HAVE_TYPEOF - -/* Define to 1 if you don't have `tm_zone' but do have the external array - `tzname'. */ -#undef HAVE_TZNAME - -/* Define if you have the 'uintmax_t' type in or . */ -#undef HAVE_UINTMAX_T - -/* Define to 1 if the system has the type `uintptr_t'. */ -#undef HAVE_UINTPTR_T - -/* Define to 1 if you have the header file. */ -#undef HAVE_UNISTD_H - -/* Define to 1 if you have the 'unlinkat' function. */ -#undef HAVE_UNLINKAT - -/* Define if you have the 'unsigned long long' type. */ -#undef HAVE_UNSIGNED_LONG_LONG - -/* Set if utime.h exists */ -#undef HAVE_UTIME_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_VARARGS_H - -/* Set if va_copy exists */ -#undef HAVE_VA_COPY - -/* Define to 1 if you have the `vfprintf' function. */ -#undef HAVE_VFPRINTF - -/* Define to 1 if you have the `vprintf' function. */ -#undef HAVE_VPRINTF - -/* Define to 1 if you have the `vsnprintf' function. */ -#undef HAVE_VSNPRINTF - -/* Define if you have the 'wchar_t' type. */ -#undef HAVE_WCHAR_T - -/* Define to 1 if you have the `wcslen' function. */ -#undef HAVE_WCSLEN - -/* Define if you have the 'wint_t' type. */ -#undef HAVE_WINT_T - -/* Extended Attributes support */ -#undef HAVE_XATTR - -/* Define to 1 if you have the header file. */ -#undef HAVE_ZLIB_H - -/* Define to 1 if you have the `__argz_count' function. */ -#undef HAVE___ARGZ_COUNT - -/* Define to 1 if you have the `__argz_next' function. */ -#undef HAVE___ARGZ_NEXT - -/* Define to 1 if you have the `__argz_stringify' function. */ -#undef HAVE___ARGZ_STRINGIFY - -/* Define to 1 if you have the `__fsetlocking' function. */ -#undef HAVE___FSETLOCKING - -/* Define as const if the declaration of iconv() needs const. */ -#undef ICONV_CONST - -/* Define if integer division by zero raises signal SIGFPE. */ -#undef INTDIV0_RAISES_SIGFPE - -/* Define to the sub-directory in which libtool stores uninstalled libraries. - */ -#undef LT_OBJDIR - -/* Define to 1 if `major', `minor', and `makedev' are declared in . - */ -#undef MAJOR_IN_MKDEV - -/* Define to 1 if `major', `minor', and `makedev' are declared in - . */ -#undef MAJOR_IN_SYSMACROS - -/* Define to 1 if your C compiler doesn't accept -c and -o together. */ -#undef NO_MINUS_C_MINUS_O - -/* Define to the address where bug reports for this package should be sent. */ -#undef PACKAGE_BUGREPORT - -/* Define to the full name of this package. */ -#undef PACKAGE_NAME - -/* Define to the full name and version of this package. */ -#undef PACKAGE_STRING - -/* Define to the one symbol short name of this package. */ -#undef PACKAGE_TARNAME - -/* Define to the home page for this package. */ -#undef PACKAGE_URL - -/* Define to the version of this package. */ -#undef PACKAGE_VERSION - -/* Define if exists and defines unusable PRI* macros. */ -#undef PRI_MACROS_BROKEN - -/* Define as the return type of signal handlers (`int' or `void'). */ -#undef RETSIGTYPE - -/* Define to 1 if the `setpgrp' function takes no argument. */ -#undef SETPGRP_VOID - -/* The size of `char', as computed by sizeof. */ -#undef SIZEOF_CHAR - -/* The size of `int', as computed by sizeof. */ -#undef SIZEOF_INT - -/* The size of `int *', as computed by sizeof. */ -#undef SIZEOF_INT_P - -/* The size of `long int', as computed by sizeof. */ -#undef SIZEOF_LONG_INT - -/* The size of `long long int', as computed by sizeof. */ -#undef SIZEOF_LONG_LONG_INT - -/* The size of `short int', as computed by sizeof. */ -#undef SIZEOF_SHORT_INT - -/* Define as the maximum value of type 'size_t', if the system doesn't define - it. */ -#undef SIZE_MAX - -/* Set if you want Smartalloc enabled */ -#undef SMARTALLOC - -/* If using the C implementation of alloca, define if you know the - direction of stack growth for your system; otherwise it will be - automatically deduced at runtime. - STACK_DIRECTION > 0 => grows toward higher addresses - STACK_DIRECTION < 0 => grows toward lower addresses - STACK_DIRECTION = 0 => direction of growth unknown */ -#undef STACK_DIRECTION - -/* Define to 1 if the `S_IS*' macros in do not work properly. */ -#undef STAT_MACROS_BROKEN - -/* Define to 1 if you have the ANSI C header files. */ -#undef STDC_HEADERS - -/* Define to 1 if you can safely include both and . */ -#undef TIME_WITH_SYS_TIME - -/* Define to 1 if your declares `struct tm'. */ -#undef TM_IN_SYS_TIME - -/* Set if DB batch insert code enabled */ -#undef USE_BATCH_FILE_INSERT - -/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most - significant byte first (like Motorola and SPARC, unlike Intel). */ -#if defined AC_APPLE_UNIVERSAL_BUILD -# if defined __BIG_ENDIAN__ -# define WORDS_BIGENDIAN 1 -# endif -#else -# ifndef WORDS_BIGENDIAN -# undef WORDS_BIGENDIAN -# endif -#endif - -/* Define to 1 if the X Window System is missing or not being used. */ -#undef X_DISPLAY_MISSING - -/* Number of bits in a file offset, on hosts where this is settable. */ -#undef _FILE_OFFSET_BITS - -/* Define to make fseeko etc. visible, on some hosts. */ -#undef _LARGEFILE_SOURCE - -/* Define for large files, on AIX-style hosts. */ -#undef _LARGE_FILES - -/* Set if you want Lock Manager enabled */ -#undef _USE_LOCKMGR - -/* Define to empty if `const' does not conform to ANSI C. */ -#undef const - -/* Define to `long' if does not define. */ -#undef daddr_t - -/* Define to `unsigned long' if does not define. */ -#undef dev_t - -/* Define to `int' if doesn't define. */ -#undef gid_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 long' if does not define. */ -#undef ino_t - -/* Define to the type of a signed integer type wide enough to hold a pointer, - if such a type exists, and if the system does not define it. */ -#undef intptr_t - -/* Define to `int' if does not define. */ -#undef major_t - -/* Define to `int' if does not define. */ -#undef minor_t - -/* Define to `int' if does not define. */ -#undef mode_t - -/* Define to `long int' if does not define. */ -#undef off_t - -/* Define to `int' if does not define. */ -#undef pid_t - -/* Define as the type of the result of subtracting two pointers, if the system - doesn't define it. */ -#undef ptrdiff_t - -/* Define to empty if the C compiler doesn't support this keyword. */ -#undef signed - -/* Define to `unsigned int' if does not define. */ -#undef size_t - -/* Define to `int' if does not define. */ -#undef ssize_t - -/* Define to `int' if doesn't define. */ -#undef uid_t - -/* Define to unsigned long or unsigned long long if and - don't define. */ -#undef uintmax_t - -/* Define to the type of an unsigned integer type wide enough to hold a - pointer, if such a type exists, and if the system does not define it. */ -#undef uintptr_t diff --git a/bacula/autoconf/configure.in b/bacula/autoconf/configure.in index 1237328061..94df39f4ad 100644 --- a/bacula/autoconf/configure.in +++ b/bacula/autoconf/configure.in @@ -4,7 +4,7 @@ dnl Process this file with autoconf to produce a configure script. dnl dnl require a recent autoconf AC_PREREQ(2.61) -AC_INIT([bacula], m4_esyscmd([sed -n -e 's/^.*VERSION.*"\(.*\)"$/\1/p' ../src/version.h src/version.h 2> /dev/null | tr -d '\n'])) +AC_INIT([bacula], m4_esyscmd([sed -n -e 's/^#define VERSION.*"\(.*\)"$/\1/p' ../src/version.h src/version.h 2> /dev/null | tr -d '\n'])) AC_CONFIG_SRCDIR(src/version.h) BUILD_DIR=`pwd` @@ -16,14 +16,6 @@ AC_SUBST(TOP_DIR) AC_CONFIG_AUX_DIR(${BUILD_DIR}/autoconf) AC_CONFIG_HEADERS(src/config.h:autoconf/config.h.in) -dnl minimal Win32 stuff for "make clean" -WIN32BUILDDIR=${BUILD_DIR}/src/win32 -WIN32MAINDIR=${BUILD_DIR} -WIN32TOPDIR=${TOP_DIR} -AC_SUBST(WIN32BUILDDIR) -AC_SUBST(WIN32MAINDIR) -AC_SUBST(WIN32TOPDIR) - dnl search for true and false programs. AC_PATH_PROGS(TRUEPRG, true, :) AC_PATH_PROGS(FALSEPRG, false, :) @@ -35,16 +27,23 @@ if test "x$BACULA" != x; then post_host=`echo -${BACULA} | tr 'A-Z ' 'a-z-'` fi BACULA=${BACULA:-Bacula} -VERSION=`sed -n -e 's/^.*VERSION.*"\(.*\)"$/\1/p' ${srcdir}/src/version.h` -DATE=`sed -n -e 's/^.*[ \t]*BDATE.*"\(.*\)"$/\1/p' ${srcdir}/src/version.h` -LSMDATE=`sed -n -e 's/^.*LSMDATE.*"\(.*\)"$/\1/p' ${srcdir}/src/version.h` -BDB_VERSION=`sed -n -e 's/^.*BDB_VERSION \(.*\)$/\1/p' ${srcdir}/src/cats/cats.h` -AC_SUBST(VERSION)dnl -AC_SUBST(DATE)dnl -AC_SUBST(LSMDATE)dnl +VERSION=`sed -n -e 's/^#define VERSION.*"\(.*\)"$/\1/p' ${srcdir}/src/version.h` +RELEASE=`sed -n -e 's/^#define RELEASE.*"\(.*\)"$/\1/p' ${srcdir}/src/version.h` +DATE=`sed -n -e 's/^#define BDATE.*"\(.*\)"$/\1/p' ${srcdir}/src/version.h` +LSMDATE=`sed -n -e 's/^#define LSMDATE.*"\(.*\)"$/\1/p' ${srcdir}/src/version.h` +BDB_VERSION=`sed -n -e 's/^#define BDB_VERSION \(.*\)$/\1/p' ${srcdir}/src/cats/cats.h` +DEPKGS_VERSION=`sed -n -e 's/^#define DEPKGS_VERSION \(.*\)$/\1/p' ${srcdir}/src/cats/cats.h` +DEPKGS_QT_VERSION=`sed -n -e 's/^#define DEPKGS_QT_VERSION.*"\(.*\)"$/\1/p' ${srcdir}/src/version.h` +BQT_VERSION=`sed -n -e 's/^#define BQT_VERSION.*"\(.*\)"$/\1/p' ${srcdir}/src/version.h` +AC_SUBST(VERSION)dnl +AC_SUBST(DATE)dnl +AC_SUBST(LSMDATE)dnl AC_SUBST(BACULA)dnl AC_SUBST(post_host)dnl AC_SUBST(BDB_VERSION)dnl +AC_SUBST(DEPKGS_QT_VERSION)dnl +AC_SUBST(DEPKGS_VERSION)dnl +AC_SUBST(BQT4_VERSION)dnl dnl src/lib dnl can be overwritten by specific values from version.h @@ -130,23 +129,17 @@ AC_PATH_PROG(DVDRWFORMAT, dvd+rw-format, dvd+rw-format) AC_PATH_PROG(PKGCONFIG, pkg-config, pkg-config) AC_PATH_PROG(QMAKE, qmake, none) AC_PATH_PROG(GMAKE, gmake, none) -AC_ARG_VAR(WXCONFIG, [wx-config command. On some systems, you must set it to wx-config-2.6 to use wxWidgets 2.6.]) -if test "x$WXCONFIG" = x; then - WXCONFIG=wx-config -fi -AC_PATH_PROG(WXCONFIG, ${WXCONFIG}, ${WXCONFIG}) -AC_ARG_VAR(WXFLAGS, [Parameters to pass to wx-config (e.g. --unicode=no).]) AC_PATH_PROG(CDRECORD, cdrecord, cdrecord) AC_PATH_PROG(PIDOF, pidof, pidof) AC_PROG_AWK # Some AWK programs fail, so test it and warn the user -if echo xfoo | $AWK 'BEGIN { prog=ARGV[1]; ARGC=1 } +if echo xfoo | $AWK 'BEGIN { prog=ARGV[1]; ARGC=1 } { if ((prog == $2) || (("(" prog ")") == $2) || (("[" prog "]") == $2) || ((prog ":") == $2)) { print $1 ; exit 0 } }' xfoo>/dev/null; then :; else AC_MSG_ERROR([!!!!!!!!! WARNING !!!!!!!!!!!!!! - The regex engine of $AWK is too broken to be used you + The regex engine of $AWK is too broken to be used you might want to install GNU AWK. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!]) fi @@ -318,7 +311,7 @@ libdir=`eval echo ${libdir}` includedir=`eval echo ${includedir}` localedir=`eval echo ${datarootdir}/locale` AC_DEFINE_UNQUOTED(SYSCONFDIR, "$sysconfdir") -AC_DEFINE_UNQUOTED(LOCALEDIR, "$localedir") +AC_DEFINE_UNQUOTED(LOCALEDIR, "$localedir") dnl ------------------------------------------------------------------ dnl If the user has not set --sbindir, we set our default as /sbin @@ -349,7 +342,7 @@ if test x$docdir = x'/usr/share/doc/' ; then docdir=`eval echo ${docdir}bacula` fi - + AC_PATH_PROGS(MSGFMT, msgfmt, no) if test "$MSGFMT" = "no" then @@ -362,15 +355,11 @@ fi support_smartalloc=yes support_readline=yes +support_lzo=yes support_conio=yes -support_gnome=no support_bat=no -support_wx_console=no -support_tray_monitor=no support_tls=no support_crypto=no -gnome_version= -wx_version= support_static_tools=no support_static_fd=no support_static_sd=no @@ -388,25 +377,6 @@ dnl -------------------------------------------------------------------------- dnl CHECKING COMMAND LINE OPTIONS dnl -------------------------------------------------------------------------- -dnl ------------------------------------------- -dnl gnome -- no longer supported -dnl ------------------------------------------- -AC_ARG_ENABLE(gnome, - AC_HELP_STRING([--enable-gnome], [enable build of bgnome-console GUI @<:@default=no@:>@]), - [ - if test x$enableval = xyes; then - support_gnome=yes - fi - ] -) - -GNOME_DIR= -if test x$support_gnome = xyes; then - AC_MSG_ERROR(bgnome-console no longer supported) - AC_MSG_ERROR(--enable-gnome option no longer supported) -fi -# AC_SUBST(GNOME_DIR) - dnl ------------------------------------------- dnl bat (default off) dnl ------------------------------------------- @@ -414,7 +384,7 @@ AC_ARG_ENABLE(bat, AC_HELP_STRING([--enable-bat], [enable build of bat Qt4 GUI @<:@default=no@:>@]), [ if test x$enableval = xyes; then - AC_DEFINE(HAVE_BAT, 1, [Set if Bacula bat Qt4 GUI support enabled]) + AC_DEFINE(HAVE_BAT, 1, [Set if Bacula bat Qt4 GUI support enabled]) support_bat=yes fi ] @@ -431,9 +401,9 @@ if test x$support_bat = xyes; then fi fi -dnl +dnl dnl The qwt library was used with bat, but that is no longer the case -dnl +dnl got_qwt=no QWT_INC= QWT_LDFLAGS= @@ -458,13 +428,13 @@ dnl QWT="qwt" dnl fi dnl ;; dnl esac -dnl ] +dnl ] dnl ) dnl dnl dnl dnl Search in standard places, or --with-qwt not specified dnl dnl -dnl if test $no_qwt = no; then +dnl if test $no_qwt = no; then dnl if test x$QWT_INC = x; then dnl for root in /usr /usr/local; do dnl for ver in qwt qwt5 qwt-qt4; do @@ -500,69 +470,6 @@ AC_SUBST(QWT_LDFLAGS) AC_SUBST(QWT_LIB) AC_SUBST(QWT) -dnl ------------------------------------------- -dnl bwx-console (default off) -dnl ------------------------------------------- -AC_ARG_ENABLE(bwx-console, - AC_HELP_STRING([--enable-bwx-console], [enable build of wxWidgets console @<:@default=no@:>@]), - [ - if test x$enableval = xyes; then - support_wx_console=yes - fi - ] -) - -WX_DIR= -if test x$support_wx_console = xyes; then - abc=`$WXCONFIG $WXFLAGS --cppflags` - pkg=$? - if test $pkg = 0; then - wx_version="wxWidgets `$WXCONFIG $WXFLAGS --release`" - WXCONS_CPPFLAGS=`$WXCONFIG $WXFLAGS --cppflags` - WXCONS_LDFLAGS=`$WXCONFIG $WXFLAGS --libs` - - AC_SUBST(WXCONS_CPPFLAGS) - AC_SUBST(WXCONS_LDFLAGS) - WX_DIR="src/wx-console" - else - echo " " - echo "wx-config program not found. bwx-console disabled." - echo " " - support_wx_console=no - fi -fi -AC_SUBST(WX_DIR) - -dnl ------------------------------------------- -dnl tray-monitor (default off) -dnl ------------------------------------------- -AC_ARG_ENABLE(tray-monitor, - AC_HELP_STRING([--enable-tray-monitor], [enable build of Gnome tray monitor (compatible with KDE @<:@default=no@:>@]), - [ - if test x$enableval = xyes; then - support_tray_monitor=yes - fi - ] -) - -TRAY_MONITOR_DIR= -if test x$support_tray_monitor = xyes; then - abc=`$PKGCONFIG --exists gtk+-2.0` - pkg=$? - if test $pkg = 0; then - TRAY_MONITOR_CPPFLAGS=`$PKGCONFIG --cflags gtk+-2.0` - TRAY_MONITOR_LDFLAGS=`$PKGCONFIG --libs gtk+-2.0` - AC_SUBST(TRAY_MONITOR_CPPFLAGS) - AC_SUBST(TRAY_MONITOR_LDFLAGS) - TRAY_MONITOR_DIR=src/tray-monitor - abc=`$PKGCONFIG --atleast-version=2.4 gtk+-2.0` - pkg=$? - if test $pkg = 0; then - AC_DEFINE(HAVE_GTK_2_4, 1, [Set if you have GTK 4.2 or greater loaded]) - fi - fi -fi -AC_SUBST(TRAY_MONITOR_DIR) dnl ------------------------------------------- dnl smartalloc (default off) @@ -605,7 +512,7 @@ AC_ARG_ENABLE(static-tools, [ if test x$enableval = xyes; then if test x$use_libtool = xyes; then - AC_MSG_ERROR([Libtool is enabled, not compatible with static tools, + AC_MSG_ERROR([Libtool is enabled, not compatible with static tools, please rerun configure with --disable-libtool]) fi support_static_tools=yes @@ -627,7 +534,7 @@ AC_ARG_ENABLE(static-fd, [ if test x$enableval = xyes; then if test x$use_libtool = xyes; then - AC_MSG_ERROR([Libtool is enabled, not compatible with static tools, + AC_MSG_ERROR([Libtool is enabled, not compatible with static tools, please rerun configure with --disable-libtool]) fi support_static_fd=yes @@ -649,7 +556,7 @@ AC_ARG_ENABLE(static-sd, [ if test x$enableval = xyes; then if test x$use_libtool = xyes; then - AC_MSG_ERROR([Libtool is enabled, not compatible with static tools, + AC_MSG_ERROR([Libtool is enabled, not compatible with static tools, please rerun configure with --disable-libtool]) fi support_static_sd=yes @@ -671,7 +578,7 @@ AC_ARG_ENABLE(static-dir, [ if test x$enableval = xyes; then if test x$use_libtool = xyes; then - AC_MSG_ERROR([Libtool is enabled, not compatible with static tools, + AC_MSG_ERROR([Libtool is enabled, not compatible with static tools, please rerun configure with --disable-libtool]) fi support_static_dir=yes @@ -693,7 +600,7 @@ AC_ARG_ENABLE(static-cons, [ if test x$enableval = xyes; then if test x$use_libtool = xyes; then - AC_MSG_ERROR([Libtool is enabled, not compatible with static tools, + AC_MSG_ERROR([Libtool is enabled, not compatible with static tools, please rerun configure with --disable-libtool]) fi support_static_cons=yes @@ -702,16 +609,10 @@ AC_ARG_ENABLE(static-cons, ) STATIC_CONS= -STATIC_GNOME_CONS= -STATIC_WX_CONS= if test x$support_static_cons = xyes; then STATIC_CONS="static-bconsole" - STATIC_GNOME_CONS="static-bgnome-console" - STATIC_WX_CONS="static-bwx-console" fi AC_SUBST(STATIC_CONS) -AC_SUBST(STATIC_GNOME_CONS) -AC_SUBST(STATIC_WX_CONS) dnl ------------------------------------------- dnl client_only (default off) @@ -784,18 +685,18 @@ AC_ARG_ENABLE(conio, fi ] ) - + dnl --------------------------------------------------- dnl Check for IPv6 support dnl --------------------------------------------------- dnl this allows you to turn it completely off support_ipv6=yes -AC_ARG_ENABLE(ipv6, +AC_ARG_ENABLE(ipv6, AC_HELP_STRING([--enable-ipv6], [enable ipv6 support @<:@default=yes@:>@]), [ if test x$enableval = xno; then - support_ipv6=no + support_ipv6=no fi ] ) @@ -812,7 +713,7 @@ if test x$support_ipv6 = xyes; then fi TERM_LIB="" -AC_CHECK_HEADER(curses.h, [ +AC_CHECK_HEADER(curses.h, [ AC_CHECK_LIB(tinfo, tgetent, [ TERM_LIB="-ltinfo" ], [ AC_CHECK_LIB(ncurses, tgetent, [ TERM_LIB="-lncurses" ], [ AC_CHECK_LIB(termcap, tgetent, [ TERM_LIB="-ltermcap" ]) @@ -821,7 +722,7 @@ AC_CHECK_HEADER(curses.h, [ ], [ AC_CHECK_HEADERS(curses.h) AC_CHECK_HEADER(term.h, - [ AC_CHECK_LIB(curses, tgetent, + [ AC_CHECK_LIB(curses, tgetent, [ TERM_LIB="-lcurses" ] ) ]) ]) @@ -835,7 +736,7 @@ if test x$support_conio = xyes; then CONS_SRC="conio.c" got_conio="yes" support_readline=no - AC_DEFINE(HAVE_CONIO, 1, [Set if Bacula conio support enabled]) + AC_DEFINE(HAVE_CONIO, 1, [Set if Bacula conio support enabled]) else echo " "; echo "Required libraries not found. CONIO turned off ..."; echo " " fi @@ -854,9 +755,6 @@ AC_ARG_ENABLE(readline, fi ] ) -if test x$TERM_LIB = x ; then - support_readline=no -fi got_readline="no" READLINE_SRC= @@ -877,14 +775,14 @@ if test x$support_readline = xyes; then CONS_LDFLAGS="-L${with_readline}/lib" with_readline="${with_readline}/include/readline" else - with_readline="/usr/include/readline" + with_readline="/usr/include/readline" fi - AC_CHECK_HEADER(${with_readline}/readline.h, + AC_CHECK_HEADER(${with_readline}/readline.h, [ AC_DEFINE(HAVE_READLINE, 1, [Set to enable readline support]) - CONS_LIBS="-lreadline -lhistory $TERM_LIB" - got_readline="yes" + CONS_LIBS="-lreadline -lhistory ${TERM_LIB}" + got_readline="yes" ], [ echo " " echo "readline.h not found. readline turned off ..." @@ -895,20 +793,20 @@ if test x$support_readline = xyes; then esac ],[ dnl check for standard readline library - AC_CHECK_HEADER(/usr/include/readline/readline.h, + AC_CHECK_HEADER(/usr/include/readline/readline.h, [ AC_DEFINE(HAVE_READLINE, 1, [Set to enable readline support]) got_readline="yes" CONS_INC="-I/usr/include/readline" - CONS_LIBS="-lreadline $TERM_LIB" + CONS_LIBS="-lreadline ${TERM_LIB}" ], [ dnl Did not find standard library, so try Bacula's default - AC_CHECK_HEADER(${TOP_DIR}/depkgs/readline/readline.h, + AC_CHECK_HEADER(${TOP_DIR}/depkgs/readline/readline.h, [ AC_DEFINE(HAVE_READLINE, 1, [Set to enable readline support]) - got_readline="yes" + got_readline="yes" CONS_INC="-I${TOP_DIR}/depkgs/readline" - CONS_LIBS="-lreadline -lhistory $TERM_LIB" + CONS_LIBS="-lreadline -lhistory ${TERM_LIB}" CONS_LDFLAGS="-L${TOP_DIR}/depkgs/readline" PRTREADLINE_SRC="${TOP_DIR}/depkgs/readline" ], [ @@ -919,7 +817,7 @@ if test x$support_readline = xyes; then ) ] ) - ] + ] ) fi @@ -935,7 +833,8 @@ MAKE_SHELL=/bin/sh AC_SUBST(MAKE_SHELL) AC_HEADER_STAT AC_HEADER_DIRENT -AC_CHECK_FUNCS(strcasecmp select setenv putenv tcgetattr lstat lchown) +AC_CHECK_FUNCS(strcasecmp select setenv putenv tcgetattr) +AC_CHECK_FUNCS(lstat lchown lchmod futimes fchmod fchown) AC_CHECK_FUNCS(nanosleep nl_langinfo) AC_CHECK_HEADERS(varargs.h) @@ -949,7 +848,7 @@ AC_MSG_CHECKING(for Python support) AC_ARG_WITH(python, AC_HELP_STRING([--with-python@<:@=DIR@:>@], [Include Python support. DIR is the Python base install directory, default is to search through a number of common places for the Python files.]), [ - PYTHON_INCDIR= + PYTHON_INCDIR= PYTHON_LIBS= if test "$withval" != "no"; then if test "$withval" = "yes"; then @@ -966,7 +865,7 @@ AC_ARG_WITH(python, else PYTHON_LIBS="-L$python_root/lib/${ver}/config -l${ver}" fi - break + break fi done done @@ -1045,7 +944,7 @@ AC_CHECK_FUNC(socket, dnl ----------------------------------------------------------- dnl Check whether user wants TCP wrappers support (default off) dnl ----------------------------------------------------------- -TCPW_MSG="no" +TCPW_MSG="no" WRAPLIBS="" AC_ARG_WITH(tcp-wrappers, AC_HELP_STRING([--with-tcp-wrappers@<:@=DIR@:>@], [enable tcpwrappers support]), @@ -1056,7 +955,7 @@ AC_ARG_WITH(tcp-wrappers, AC_SEARCH_LIBS(nanosleep, [rt]) AC_MSG_CHECKING(for libwrap) AC_TRY_LINK( - [ + [ #include #include int deny_severity = 0; @@ -1067,7 +966,7 @@ AC_ARG_WITH(tcp-wrappers, ], [ AC_MSG_RESULT(yes) AC_DEFINE(HAVE_LIBWRAP, 1, [Set to enable libwraper support]) - TCPW_MSG="yes" + TCPW_MSG="yes" LIBS="$saved_LIBS" WRAPLIBS="-lwrap" ], [ @@ -1085,7 +984,7 @@ AC_ARG_WITH(tcp-wrappers, ], [ AC_MSG_RESULT(yes) AC_DEFINE(HAVE_LIBWRAP, 1, [Set to enable libwraper support]) - TCPW_MSG="yes" + TCPW_MSG="yes" LIBS="$saved_LIBS" WRAPLIBS="-lwrap" ], [ @@ -1098,6 +997,7 @@ AC_ARG_WITH(tcp-wrappers, ] ) + dnl ----------------------------------------------------------- dnl Check whether OpenSSL is available dnl ----------------------------------------------------------- @@ -1216,11 +1116,11 @@ AC_SEARCH_LIBS(dlopen, [dl]) dnl ------------------------------------------ dnl Where to place working dir dnl ------------------------------------------ -working_dir=`eval echo ${prefix}/opt/bacula/working` +working_dir=`eval echo /opt/bacula/working` AC_ARG_WITH(working-dir, AC_HELP_STRING([--with-working-dir=PATH], [specify path of Bacula working directory]), [ - if test "x$withval" != "xno" ; then + if test "x$withval" != "xno" ; then working_dir=$withval fi ] @@ -1235,7 +1135,7 @@ archivedir=/tmp AC_ARG_WITH(archivedir, AC_HELP_STRING([--with-archivedir=PATH], [specify path of SD archive directory]), [ - if test "x$withval" != "xno" ; then + if test "x$withval" != "xno" ; then archivedir=$withval fi ] @@ -1250,7 +1150,7 @@ basename=`hostname` AC_ARG_WITH(basename, AC_HELP_STRING([--with-basename=RESNAME], [specify base resource name for daemons]), [ - if test "x$withval" != "xno" ; then + if test "x$withval" != "xno" ; then basename=$withval fi ] @@ -1289,7 +1189,7 @@ scriptdir=`eval echo ${sysconfdir}` AC_ARG_WITH(scriptdir, AC_HELP_STRING([--with-scriptdir=PATH], [specify path of Bacula scripts directory]), [ - if test "x$withval" != "xno" ; then + if test "x$withval" != "xno" ; then scriptdir=$withval fi ] @@ -1301,11 +1201,11 @@ AC_SUBST(scriptdir) dnl ------------------------------------------ dnl Where to place bsrdir (bsr files) dnl ------------------------------------------ -bsrdir=`eval echo ${prefix}/opt/bacula/bsr` +bsrdir=`eval echo /opt/bacula/bsr` AC_ARG_WITH(bsrdir, AC_HELP_STRING([--with-bsrdir=PATH], [specify path of Bacula bsrs directory]), [ - if test "x$withval" != "xno" ; then + if test "x$withval" != "xno" ; then bsrdir=$withval fi ] @@ -1314,13 +1214,13 @@ AC_ARG_WITH(bsrdir, AC_SUBST(bsrdir) dnl ------------------------------------------ -dnl Where to place logdir (bsr files) +dnl Where to place logdir dnl ------------------------------------------ -logdir=`eval echo ${prefix}/opt/bacula/log` +logdir=`eval echo /opt/bacula/log` AC_ARG_WITH(logdir, AC_HELP_STRING([--with-logdir=PATH], [specify path of Bacula logs directory]), [ - if test "x$withval" != "xno" ; then + if test "x$withval" != "xno" ; then logdir=$withval fi ] @@ -1336,7 +1236,7 @@ plugindir=`eval echo ${libdir}` AC_ARG_WITH(plugindir, AC_HELP_STRING([--with-plugindir=PATH], [specify path of Bacula plugins directory]), [ - if test "x$withval" != "xno" ; then + if test "x$withval" != "xno" ; then plugindir=$withval fi ] @@ -1351,7 +1251,7 @@ dump_email=root@localhost AC_ARG_WITH(dump-email, AC_HELP_STRING([--with-dump-email=EMAIL], [dump email address]), [ - if test "x$withval" != "xno" ; then + if test "x$withval" != "xno" ; then dump_email=$withval fi ] @@ -1366,7 +1266,7 @@ job_email=root@localhost AC_ARG_WITH(job-email, AC_HELP_STRING([--with-job-email=EMAIL], [job output email address]), [ - if test "x$withval" != "xno" ; then + if test "x$withval" != "xno" ; then job_email=$withval fi ] @@ -1381,7 +1281,7 @@ smtp_host=localhost AC_ARG_WITH(smtp_host, AC_HELP_STRING([--with-smtp-host=HOST], [SMTP mail host address]), [ - if test "x$withval" != "xno" ; then + if test "x$withval" != "xno" ; then smtp_host=$withval fi ] @@ -1396,7 +1296,7 @@ piddir=/var/run AC_ARG_WITH(pid-dir, AC_HELP_STRING([--with-pid-dir=PATH], [specify location of Bacula pid files]), [ - if test "x$withval" != "xno" ; then + if test "x$withval" != "xno" ; then piddir=$withval fi ] @@ -1419,7 +1319,7 @@ fi AC_ARG_WITH(subsys-dir, AC_HELP_STRING([--with-subsys-dir=PATH], [specify location of Bacula subsys file]), [ - if test "x$withval" != "xno" ; then + if test "x$withval" != "xno" ; then subsysdir=$withval fi ] @@ -1434,7 +1334,7 @@ baseport=9101 AC_ARG_WITH(baseport, AC_HELP_STRING([--with-baseport=PORT], [specify base port address for daemons]), [ - if test "x$withval" != "xno" ; then + if test "x$withval" != "xno" ; then baseport=$withval fi ] @@ -1456,7 +1356,7 @@ dir_password= AC_ARG_WITH(dir-password, AC_HELP_STRING([--with-dir-password=PASSWORD], [specify Director's password]), [ - if test "x$withval" != "xno" ; then + if test "x$withval" != "xno" ; then dir_password=$withval fi ] @@ -1475,7 +1375,7 @@ fd_password= AC_ARG_WITH(fd-password, AC_HELP_STRING([--with-fd-password=PASSWORD], [specify Client's password]), [ - if test "x$withval" != "xno" ; then + if test "x$withval" != "xno" ; then fd_password=$withval fi ] @@ -1494,7 +1394,7 @@ sd_password= AC_ARG_WITH(sd-password, AC_HELP_STRING([--with-sd-password=PASSWORD], [specify Storage daemon's password]), [ - if test "x$withval" != "xno" ; then + if test "x$withval" != "xno" ; then sd_password=$withval fi ] @@ -1513,7 +1413,7 @@ mon_dir_password= AC_ARG_WITH(mon-dir-password, AC_HELP_STRING([--with-mon-dir-password=PASSWORD], [specify Director's password used by the monitor]), [ - if test "x$withval" != "xno" ; then + if test "x$withval" != "xno" ; then mon_dir_password=$withval fi ] @@ -1532,7 +1432,7 @@ mon_fd_password= AC_ARG_WITH(mon-fd-password, AC_HELP_STRING([--with-mon-fd-password=PASSWORD], [specify Client's password used by the monitor]), [ - if test "x$withval" != "xno" ; then + if test "x$withval" != "xno" ; then mon_fd_password=$withval fi ] @@ -1551,7 +1451,7 @@ mon_sd_password= AC_ARG_WITH(mon-sd-password, AC_HELP_STRING([--with-mon-sd-password=PASSWORD], [specify Storage daemon's password used by the monitor]), [ - if test "x$withval" != "xno" ; then + if test "x$withval" != "xno" ; then mon_sd_password=$withval fi ] @@ -1580,7 +1480,7 @@ db_name=bacula AC_ARG_WITH(db_name, AC_HELP_STRING([--with-db-name=DBNAME], [specify database name @<:@default=bacula@:>@]), [ - if test "x$withval" != "x" ; then + if test "x$withval" != "x" ; then db_name=$withval fi ] @@ -1591,7 +1491,7 @@ db_user=bacula AC_ARG_WITH(db_user, AC_HELP_STRING([--with-db-user=UNAME], [specify database user @<:@default=bacula@:>@]), [ - if test "x$withval" != "x" ; then + if test "x$withval" != "x" ; then db_user=$withval fi ] @@ -1602,7 +1502,7 @@ db_password= AC_ARG_WITH(db_password, AC_HELP_STRING([--with-db-password=PWD], [specify database password @<:@default=*none*@:>@]), [ - if test "x$withval" != "x" ; then + if test "x$withval" != "x" ; then db_password=$withval fi ] @@ -1630,7 +1530,7 @@ dir_user= AC_ARG_WITH(dir_user, AC_HELP_STRING([--with-dir-user=USER], [specify user for Director daemon]), [ - if test "x$withval" != "x" ; then + if test "x$withval" != "x" ; then dir_user=$withval fi ] @@ -1640,7 +1540,7 @@ dir_group= AC_ARG_WITH(dir_group, AC_HELP_STRING([--with-dir-group=GROUP], [specify group for Director daemon]), [ - if test "x$withval" != "x" ; then + if test "x$withval" != "x" ; then dir_group=$withval fi ] @@ -1650,7 +1550,7 @@ sd_user= AC_ARG_WITH(sd_user, AC_HELP_STRING([--with-sd-user=USER], [specify user for Storage daemon]), [ - if test "x$withval" != "x" ; then + if test "x$withval" != "x" ; then sd_user=$withval fi ] @@ -1660,7 +1560,7 @@ sd_group= AC_ARG_WITH(sd_group, AC_HELP_STRING([--with-sd-group=GROUP], [specify group for Storage daemon]), [ - if test "x$withval" != "x" ; then + if test "x$withval" != "x" ; then sd_group=$withval fi ] @@ -1670,7 +1570,7 @@ fd_user= AC_ARG_WITH(fd_user, AC_HELP_STRING([--with-fd-user=USER], [specify user for File daemon]), [ - if test "x$withval" != "x" ; then + if test "x$withval" != "x" ; then fd_user=$withval fi ] @@ -1680,7 +1580,7 @@ fd_group= AC_ARG_WITH(fd_group, AC_HELP_STRING([--with-fd-group=GROUP], [specify group for File daemon]), [ - if test "x$withval" != "x" ; then + if test "x$withval" != "x" ; then fd_group=$withval fi ] @@ -1700,7 +1600,7 @@ SBINPERM=0750 AC_ARG_WITH(sbin-perm, AC_HELP_STRING([--with-sbin-perm=MODE], [specify permissions for sbin binaries @<:@default=0750@:>@]), [ - if test "x$withval" != "x" ; then + if test "x$withval" != "x" ; then SBINPERM=$withval fi ] @@ -1740,12 +1640,6 @@ BA_CHECK_MYSQL_DB BA_CHECK_SQLITE3_DB -#BA_CHECK_INGRES_DB - -#BA_CHECK_DBI_DB - -#BA_CHECK_DBI_DRIVER - dnl ------------------------------------------- dnl If no batch insert backend are enable set dnl variable to None @@ -1844,7 +1738,7 @@ if test -z "$CFLAGS" -o "$CFLAGS" = "-g -O2"; then CFLAGS="$CCOPTS" fi -dnl A few others +dnl A few others AC_EXEEXT dnl See if we can use 64 bit file addresses @@ -1899,7 +1793,7 @@ AC_STRUCT_ST_BLOCKS AC_STRUCT_TIMEZONE dnl -------------------------------------------------------------------------- -dnl Check for utime.h structure +dnl Check for utime.h structure dnl -------------------------------------------------------------------------- AC_CACHE_CHECK(for utime.h, ba_cv_header_utime_h, [ @@ -1966,7 +1860,7 @@ test $ba_cv_header_ioctl_req_t = yes && AC_DEFINE(HAVE_IOCTL_ULINT_REQUEST, 1, [ dnl Note: it is more correct to use AC_LANG(C++) but some of the older dnl *BSD systems still use old style C prototypes, which are wrong with -dnl compiled with a C++ compiler. +dnl compiled with a C++ compiler. AC_LANG(C) dnl -------------------------------------------------------------------------- @@ -2026,7 +1920,7 @@ if test $fstype = no; then AC_DEFINE(FSTYPE_AIX_STATFS) fstype=AIX ) fi -if test $fstype = no; then +if test $fstype = no; then AC_TRY_CPP( [ #include @@ -2034,10 +1928,10 @@ if test $fstype = no; then AC_DEFINE(FSTYPE_MNTENT) fstype=4.3BSD ) fi -if test $fstype = no; then +if test $fstype = no; then AC_EGREP_HEADER(f_type;, sys/mount.h, AC_DEFINE(FSTYPE_STATFS) fstype=4.4BSD/OSF1) fi -if test $fstype = no; then +if test $fstype = no; then AC_TRY_CPP( [ #include @@ -2114,7 +2008,7 @@ AC_CACHE_CHECK([for intmax_t type], ac_cv_have_intmax_t, intmax_t a; a = 1; ], [ ac_cv_have_intmax_t="yes" - ], [ + ], [ AC_TRY_COMPILE( [ #include @@ -2127,7 +2021,7 @@ AC_CACHE_CHECK([for intmax_t type], ac_cv_have_intmax_t, ] ) ] - ) + ) ] ) if test "x$ac_cv_have_intmax_t" = "xyes" ; then @@ -2144,7 +2038,7 @@ AC_CACHE_CHECK([for u_intmax_t type], ac_cv_have_u_intmax_t, u_intmax_t a; a = 1; ], [ ac_cv_have_u_intmax_t="yes" - ], [ + ], [ AC_TRY_COMPILE( [ #include @@ -2184,7 +2078,7 @@ if test "x$ac_cv_have_intxx_t" = "xyes" ; then AC_DEFINE(HAVE_INTXX_T) have_intxx_t=1 fi - + AC_CACHE_CHECK([for int64_t type], ac_cv_have_int64_t, [ AC_TRY_COMPILE( @@ -2204,7 +2098,7 @@ if test "x$ac_cv_have_int64_t" = "xyes" ; then AC_DEFINE(HAVE_INT64_T) have_int64_t=1 fi - + AC_CACHE_CHECK([for u_intXX_t types], ac_cv_have_u_intxx_t, [ AC_TRY_COMPILE( @@ -2264,7 +2158,7 @@ then ], [ AC_MSG_RESULT(no) ] - ) + ) fi if test -z "$have_u_intxx_t" ; then @@ -2274,7 +2168,7 @@ if test -z "$have_u_intxx_t" ; then [ #include ], [ - uint8_t a; uint16_t b; + uint8_t a; uint16_t b; uint32_t c; a = b = c = 1; ], [ ac_cv_have_uintxx_t="yes" @@ -2297,7 +2191,7 @@ then [ #include ], [ - int64_t a; u_int64_t b; + int64_t a; u_int64_t b; a = b = 1; ], [ AC_DEFINE(HAVE_U_INT64_T) @@ -2306,7 +2200,7 @@ then ], [ AC_MSG_RESULT(no) ] - ) + ) fi if (test -z "$have_uintxx_t" && \ @@ -2317,7 +2211,7 @@ then [ #include ], [ - uint8_t a; uint16_t b; + uint8_t a; uint16_t b; uint32_t c; a = b = c = 1; ], [ AC_DEFINE(HAVE_UINTXX_T) @@ -2325,7 +2219,7 @@ then ], [ AC_MSG_RESULT(no) ] - ) + ) fi dnl -------------------------------------------------------------------------- @@ -2365,7 +2259,7 @@ AC_CHECK_FUNCS(strtoll, [AC_DEFINE(HAVE_STRTOLL)]) AC_CHECK_FUNCS(posix_fadvise) AC_CHECK_FUNCS(fdatasync) -AC_CHECK_FUNCS(chflags) +AC_CHECK_FUNCS(chflags) AC_CHECK_FUNCS(snprintf vsnprintf gethostid fseeko) @@ -2402,6 +2296,8 @@ AC_CHECK_FUNC(gethostbyname_r, AC_CHECK_FUNCS(inet_pton, [AC_DEFINE(HAVE_INET_PTON)]) AC_CHECK_FUNCS(inet_ntop, [AC_DEFINE(HAVE_INET_NTOP)]) AC_CHECK_FUNCS(gethostbyname2, [AC_DEFINE(HAVE_GETHOSTBYNAME2)]) +AC_CHECK_FUNCS(getnameinfo, [AC_DEFINE(HAVE_GETNAMEINFO)]) + dnl ---------------------------- dnl check sa_len of sockaddr @@ -2499,24 +2395,6 @@ if test x$ZLIBS = x-lz; then fi AC_SUBST(ZLIBS) -dnl -dnl Check for lzo -dnl -have_lzo=no -AC_CHECK_HEADER(lzo/lzoconf.h, -[ - AC_CHECK_HEADER(lzo/lzo1x.h, - [ - AC_CHECK_LIB(lzo2, lzo1x_1_compress, - [ - LZOLIBS="-llzo2" - AC_DEFINE(HAVE_LZO,1,[Define to 1 if you have LZO compression]) - have_lzo=yes - ]) - ]) -]) -AC_SUBST(LZOLIBS) - dnl dnl Check if we have AFS on this system dnl @@ -2624,6 +2502,75 @@ fi AC_SUBST(AFS_CFLAGS) AC_SUBST(AFS_LIBS) +dnl --------------------------------------------------- +dnl Check for lzo support/directory (default on) +dnl --------------------------------------------------- +dnl this allows you to turn it completely off + +AC_ARG_ENABLE(lzo, + AC_HELP_STRING([--disable-lzo], [disable lzo support @<:@default=yes@:>@]), + [ + if test x$enableval = xno; then + support_lzo=no + fi + ] +) + +LZO_INC= +LZO_LIBS= +LZO_LDFLAGS= + +have_lzo="no" +if test x$support_lzo = xyes; then + AC_ARG_WITH(lzo, + AC_HELP_STRING([--with-lzo@<:@=DIR@:>@], [specify lzo library directory]), + [ + case "$with_lzo" in + no) + : + ;; + yes|*) + if test -f ${with_lzo}/include/lzo/lzoconf.h; then + LZO_INC="-I${with_lzo}/include" + LZO_LDFLAGS="-L${with_lzo}/lib" + with_lzo="${with_lzo}/include" + else + with_lzo="/usr/include" + fi + + AC_CHECK_HEADER(${with_lzo}/lzo/lzoconf.h, + [ + AC_DEFINE(HAVE_LZO, 1, [Define to 1 if you have LZO compression]) + LZO_LIBS="${LZO_LDFLAGS} -lzo2" + have_lzo="yes" + ], [ + echo " " + echo "lzoconf.h not found. lzo turned off ..." + echo " " + ] + ) + ;; + esac + ],[ + AC_CHECK_HEADER(lzo/lzoconf.h, + [ + AC_CHECK_HEADER(lzo/lzo1x.h, + [ + AC_CHECK_LIB(lzo2, lzo1x_1_compress, + [ + LZO_LIBS="-llzo2" + AC_DEFINE(HAVE_LZO,1,[Define to 1 if you have LZO compression]) + have_lzo=yes + ]) + ]) + ]) + ]) +fi + +AC_SUBST(LZO_INC) +AC_SUBST(LZO_LIBS) + + dnl dnl Check for ACL support and libraries dnl @@ -2767,7 +2714,7 @@ if test x$support_acl = xyes -o x$support_acl = xauto; then fi if test x$support_acl = xyes -a $have_acl != yes; then - AC_MSG_ERROR([acl support explicitly enabled but no supported acl implementation found, + AC_MSG_ERROR([acl support explicitly enabled but no supported acl implementation found, please either load the acl libraries or rerun configure without --enable-acl]) else if test $have_acl = yes; then @@ -2814,7 +2761,7 @@ if test x$support_xattr = xyes -o x$support_xattr = xauto; then AC_DEFINE([HAVE_EXTATTR_LIST_LINK],1,[Define to 1 if you have the 'extattr_list_link' function.]) ] ) - + if test $have_xattr = no; then AC_CHECK_FUNCS(extattr_get_file extattr_set_file extattr_list_file, [ @@ -2825,7 +2772,7 @@ if test x$support_xattr = xyes -o x$support_xattr = xauto; then ] ) fi - + if test $have_xattr = yes; then have_extattr_string_in_libc=no AC_CHECK_FUNCS(extattr_namespace_to_string extattr_string_to_namespace, @@ -2956,7 +2903,7 @@ if test x$support_xattr = xyes -o x$support_xattr = xauto; then fi if test x$support_xattr = xyes -a $have_xattr != yes; then - AC_MSG_ERROR([xattr support explicitly enabled but no supported xattr implementation found, + AC_MSG_ERROR([xattr support explicitly enabled but no supported xattr implementation found, please either load the xattr libraries or rerun configure without --enable-xattr]) else if test $have_xattr = yes; then @@ -3039,7 +2986,6 @@ dnl dnl PFILES are platform specific files PFILES="platforms/Makefile" PSCMD="ps -e" -WIN32= MACOSX= COMPRESS_MANPAGES=yes @@ -3049,8 +2995,8 @@ aix) PSCMD="ps -e -o pid,comm" PFILES="${PFILES} \ platforms/aix/Makefile" - TAPEDRIVE="/dev/rmt0.1" - ;; + TAPEDRIVE="/dev/rmt0.1" + ;; alpha) DISTVER=`uname -r` PTHREAD_LIB="-lpthread -lexc" @@ -3078,13 +3024,6 @@ bsdi) platforms/bsdi/bacula-dir" largefile_support="yes" ;; -cygwin) - DISTVER=`uname -a |awk '{print $3}'` - TAPEDRIVE="/dev/nrst0" - WIN32=win32 - WCFLAGS="-mwindows" - WLDFLAGS="-mwindows" - ;; darwin) DISTVER=`uname -r` TAPEDRIVE="/dev/nst0" @@ -3126,7 +3065,7 @@ debian) platforms/ubuntu/bacula-fd \ platforms/ubuntu/bacula-sd \ platforms/ubuntu/bacula-dir" - else + else PFILES="${PFILES} \ platforms/debian/Makefile \ platforms/debian/bacula-fd \ @@ -3313,7 +3252,7 @@ unknown) *) echo " === Something went wrong. Unknown DISTNAME $DISTNAME ===" ;; -esac +esac dnl ------------------------------------------- dnl systemd (default off) @@ -3357,7 +3296,6 @@ AC_DEFINE_UNQUOTED(lld, "$lld") AC_DEFINE_UNQUOTED(llu, "$llu") AC_SUBST(TAPEDRIVE) AC_SUBST(PSCMD) -AC_SUBST(WIN32) AC_SUBST(MACOSX) AC_SUBST(DISTNAME) AC_SUBST(DISTVER) @@ -3379,7 +3317,7 @@ if test "x${subsysdir}" = "x${sbindir}" ; then echo " " echo " " exit 1 -fi +fi AC_OUTPUT([autoconf/Make.common \ Makefile \ @@ -3393,22 +3331,12 @@ AC_OUTPUT([autoconf/Make.common \ scripts/devel_bacula \ scripts/Makefile \ scripts/logrotate \ - scripts/bacula.desktop.gnome1 \ - scripts/bacula.desktop.gnome2 \ - scripts/bacula.desktop.gnome1.consolehelper \ - scripts/bacula.desktop.gnome2.consolehelper \ - scripts/bacula.desktop.gnome1.xsu \ - scripts/bacula.desktop.gnome2.xsu \ scripts/mtx-changer \ scripts/disk-changer \ scripts/dvd-handler \ scripts/dvd-simulator \ - scripts/bacula-tray-monitor.desktop \ scripts/logwatch/Makefile \ scripts/logwatch/logfile.bacula.conf \ - scripts/wxconsole.console_apps \ - scripts/wxconsole.desktop.consolehelper \ - scripts/wxconsole.desktop.xsu \ scripts/bat.desktop \ scripts/bat.desktop.xsu \ scripts/bat.desktop.consolehelper \ @@ -3417,16 +3345,10 @@ AC_OUTPUT([autoconf/Make.common \ src/host.h \ src/console/Makefile \ src/console/bconsole.conf \ - src/qt-console/tray-monitor/tray-monitor.pro \ - src/qt-console/tray-monitor/tray-monitor.conf \ src/qt-console/bat.conf \ src/qt-console/bat.pro \ src/qt-console/bat.pro.mingw32 \ src/qt-console/install_conf_file \ - src/wx-console/Makefile \ - src/wx-console/bwx-console.conf \ - src/tray-monitor/Makefile \ - src/tray-monitor/tray-monitor.conf \ src/dird/Makefile \ src/dird/bacula-dir.conf \ src/lib/Makefile \ @@ -3470,7 +3392,6 @@ AC_OUTPUT([autoconf/Make.common \ src/plugins/fd/Makefile \ src/plugins/sd/Makefile \ src/plugins/dir/Makefile \ - src/win32/Makefile.inc \ po/Makefile.in \ updatedb/update_mysql_tables_9_to_10 \ updatedb/update_sqlite3_tables_9_to_10 \ @@ -3481,15 +3402,16 @@ AC_OUTPUT([autoconf/Make.common \ updatedb/update_mysql_tables_11_to_12 \ updatedb/update_sqlite3_tables_11_to_12 \ updatedb/update_postgresql_tables_11_to_12 \ - updatedb/update_mysql_tables_12_to_14 \ - updatedb/update_sqlite3_tables_12_to_14 \ - updatedb/update_postgresql_tables_12_to_14 \ examples/nagios/check_bacula/Makefile \ platforms/rpms/redhat/bacula.spec \ platforms/rpms/redhat/bacula-bat.spec \ platforms/rpms/redhat/bacula-docs.spec \ platforms/rpms/redhat/bacula-mtx.spec \ - $PFILES ], + platforms/rpms/suse/bacula.spec \ + platforms/rpms/suse/bacula-bat.spec \ + platforms/rpms/suse/bacula-docs.spec \ + platforms/rpms/suse/bacula-mtx.spec \ + $PFILES ], [ ] ) @@ -3503,6 +3425,7 @@ if test "${support_bat}" = "yes" ; then touch bat chmod 755 bat rm -f Makefile + rm -rf moc32 obj32 $QMAKE ${MAKE:-make} clean cd ${BUILD_DIR} @@ -3522,9 +3445,9 @@ chmod 755 install_conf_file build-depkgs-qt-console cd ${BUILD_DIR} cd scripts -chmod 755 bacula btraceback mtx-changer +chmod 755 bacula btraceback mtx-changer storage-ctl bsg_persist chmod 755 dvd-handler dvd-simulator -chmod 755 bconsole mtx-changer devel_bacula logrotate +chmod 755 bconsole disk-changer devel_bacula logrotate cd .. c=updatedb @@ -3558,8 +3481,6 @@ chmod 755 $c/mysql chmod 755 $c/install-default-backend -chmod 755 src/win32/build-depkgs-mingw32 - if test "x$ac_cv_sys_largefile_CFLAGS" != "xno" ; then largefile_support="yes" fi @@ -3589,74 +3510,71 @@ ${MAKE:-make} clean echo " Configuration on `date`: - Host: ${host}${post_host} -- ${DISTNAME} ${DISTVER} - Bacula version: ${BACULA} ${VERSION} (${DATE}) - Source code location: ${srcdir} - Install binaries: ${sbindir} - Install libraries: ${libdir} - Install config files: ${sysconfdir} - Scripts directory: ${scriptdir} - Archive directory: ${archivedir} - Working directory: ${working_dir} - PID directory: ${piddir} - Subsys directory: ${subsysdir} - Man directory: ${mandir} - Data directory: ${datarootdir} - Plugin directory: ${plugindir} - C Compiler: ${CC} ${CCVERSION} - C++ Compiler: ${CXX} ${CXXVERSION} - Compiler flags: ${WCFLAGS} ${CFLAGS} - Linker flags: ${WLDFLAGS} ${LDFLAGS} - Libraries: ${LIBS} - Statically Linked Tools: ${support_static_tools} - Statically Linked FD: ${support_static_fd} - Statically Linked SD: ${support_static_sd} - Statically Linked DIR: ${support_static_dir} - Statically Linked CONS: ${support_static_cons} - Database backends: ${db_backends} - Database port: ${db_port} - Database name: ${db_name} - Database user: ${db_user} - - Job Output Email: ${job_email} - Traceback Email: ${dump_email} - SMTP Host Address: ${smtp_host} - - Director Port: ${dir_port} - File daemon Port: ${fd_port} - Storage daemon Port: ${sd_port} - - Director User: ${dir_user} - Director Group: ${dir_group} - Storage Daemon User: ${sd_user} - Storage DaemonGroup: ${sd_group} - File Daemon User: ${fd_user} - File Daemon Group: ${fd_group} - - Large file support: $largefile_support - Bacula conio support: ${got_conio} ${CONS_LIBS} - readline support: ${got_readline} ${PRTREADLINE_SRC} - TCP Wrappers support: ${TCPW_MSG} ${WRAPLIBS} - TLS support: ${support_tls} - Encryption support: ${support_crypto} - ZLIB support: ${have_zlib} - LZO support: ${have_lzo} - enable-smartalloc: ${support_smartalloc} - enable-lockmgr: ${support_lockmgr} - bat support: ${support_bat} - enable-gnome: ${support_gnome} ${gnome_version} - enable-bwx-console: ${support_wx_console} ${wx_version} - enable-tray-monitor: ${support_tray_monitor} - client-only: ${build_client_only} - build-dird: ${build_dird} - build-stored: ${build_stored} - Plugin support: ${have_plugins} - AFS support: ${have_afs} - ACL support: ${have_acl} - XATTR support: ${have_xattr} - Python support: ${support_python} ${PYTHON_LIBS} - systemd support: ${support_systemd} ${SYSTEMD_UNITDIR} - Batch insert enabled: ${batch_insert_db_backends} + Host: ${host}${post_host} -- ${DISTNAME} ${DISTVER} + Bacula version: ${BACULA} ${VERSION} (${DATE}) + Source code location: ${srcdir} + Install binaries: ${sbindir} + Install libraries: ${libdir} + Install config files: ${sysconfdir} + Scripts directory: ${scriptdir} + Archive directory: ${archivedir} + Working directory: ${working_dir} + PID directory: ${piddir} + Subsys directory: ${subsysdir} + Man directory: ${mandir} + Data directory: ${datarootdir} + Plugin directory: ${plugindir} + C Compiler: ${CC} ${CCVERSION} + C++ Compiler: ${CXX} ${CXXVERSION} + Compiler flags: ${WCFLAGS} ${CFLAGS} + Linker flags: ${WLDFLAGS} ${LDFLAGS} + Libraries: ${LIBS} + Statically Linked Tools: ${support_static_tools} + Statically Linked FD: ${support_static_fd} + Statically Linked SD: ${support_static_sd} + Statically Linked DIR: ${support_static_dir} + Statically Linked CONS: ${support_static_cons} + Database backends: ${db_backends} + Database port: ${db_port} + Database name: ${db_name} + Database user: ${db_user} + + Job Output Email: ${job_email} + Traceback Email: ${dump_email} + SMTP Host Address: ${smtp_host} + + Director Port: ${dir_port} + File daemon Port: ${fd_port} + Storage daemon Port: ${sd_port} + + Director User: ${dir_user} + Director Group: ${dir_group} + Storage Daemon User: ${sd_user} + Storage DaemonGroup: ${sd_group} + File Daemon User: ${fd_user} + File Daemon Group: ${fd_group} + + Large file support: $largefile_support + Bacula conio support: ${got_conio} ${CONS_LIBS} + readline support: ${got_readline} ${PRTREADLINE_SRC} + TCP Wrappers support: ${TCPW_MSG} ${WRAPLIBS} + TLS support: ${support_tls} + Encryption support: ${support_crypto} + ZLIB support: ${have_zlib} + LZO support: ${have_lzo} + enable-smartalloc: ${support_smartalloc} + enable-lockmgr: ${support_lockmgr} + bat support: ${support_bat} + client-only: ${build_client_only} + build-dird: ${build_dird} + build-stored: ${build_stored} + Plugin support: ${have_plugins} + AFS support: ${have_afs} + ACL support: ${have_acl} + XATTR support: ${have_xattr} + Python support: ${support_python} ${PYTHON_LIBS} + systemd support: ${support_systemd} ${SYSTEMD_UNITDIR} + Batch insert enabled: ${batch_insert_db_backends} " > config.out diff --git a/bacula/code-changes b/bacula/code-changes deleted file mode 100755 index ebc7843635..0000000000 --- a/bacula/code-changes +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -git diff Release-5.0.3..Branch-5.2 -- | grep '[+-]' | wc -l diff --git a/bacula/configure b/bacula/configure index 21b2a51980..96f9a16736 100755 --- a/bacula/configure +++ b/bacula/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.68 for bacula 5.2.12. +# Generated by GNU Autoconf 2.68 for bacula 7.0.0. # # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, @@ -567,8 +567,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='bacula' PACKAGE_TARNAME='bacula' -PACKAGE_VERSION='5.2.12' -PACKAGE_STRING='bacula 5.2.12' +PACKAGE_VERSION='7.0.0' +PACKAGE_STRING='bacula 7.0.0' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -615,7 +615,6 @@ COMPRESS_MANPAGES DISTVER DISTNAME MACOSX -WIN32 PSCMD TAPEDRIVE SYSTEMD_UNITDIR @@ -628,9 +627,10 @@ DINCLUDE DEBUG FDLIBS CAP_LIBS +LZO_LIBS +LZO_INC AFS_LIBS AFS_CFLAGS -LZOLIBS ZLIBS LIBOBJS X_EXTRA_LIBS @@ -701,19 +701,11 @@ STORED_DIR DIR_TOOLS DIRD_DIR ALL_DIRS -STATIC_WX_CONS -STATIC_GNOME_CONS STATIC_CONS STATIC_DIR STATIC_SD STATIC_FD TTOOL_LDFLAGS -TRAY_MONITOR_DIR -TRAY_MONITOR_LDFLAGS -TRAY_MONITOR_CPPFLAGS -WX_DIR -WXCONS_LDFLAGS -WXCONS_CPPFLAGS QWT QWT_LIB QWT_LDFLAGS @@ -827,8 +819,6 @@ ARFLAGS AWK PIDOF CDRECORD -WXFLAGS -WXCONFIG GMAKE QMAKE PKGCONFIG @@ -870,6 +860,9 @@ LIBBACSQL_LT_RELEASE LIBBACPY_LT_RELEASE LIBBACCFG_LT_RELEASE LIBBAC_LT_RELEASE +BQT4_VERSION +DEPKGS_VERSION +DEPKGS_QT_VERSION BDB_VERSION post_host BACULA @@ -878,9 +871,6 @@ DATE VERSION FALSEPRG TRUEPRG -WIN32TOPDIR -WIN32MAINDIR -WIN32BUILDDIR TOP_DIR BUILD_DIR target_alias @@ -938,10 +928,7 @@ enable_rpath with_libiconv_prefix with_libintl_prefix with_included_gettext -enable_gnome enable_bat -enable_bwx_console -enable_tray_monitor enable_smartalloc enable_lockmgr enable_static_tools @@ -999,6 +986,8 @@ enable_largefile with_x enable_afs with_afsdir +enable_lzo +with_lzo enable_acl enable_xattr with_systemd @@ -1015,8 +1004,6 @@ CXX CXXFLAGS CCC CPP -WXCONFIG -WXFLAGS CXXCPP XMKMF' @@ -1561,7 +1548,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures bacula 5.2.12 to adapt to many kinds of systems. +\`configure' configures bacula 7.0.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1630,7 +1617,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of bacula 5.2.12:";; + short | recursive ) echo "Configuration of bacula 7.0.0:";; esac cat <<\_ACEOF @@ -1647,11 +1634,7 @@ Optional Features: --enable-includes enable installing of include files [default=no] --disable-nls do not use Native Language Support --disable-rpath do not hardcode runtime library paths - --enable-gnome enable build of bgnome-console GUI [default=no] --enable-bat enable build of bat Qt4 GUI [default=no] - --enable-bwx-console enable build of wxWidgets console [default=no] - --enable-tray-monitor enable build of Gnome tray monitor (compatible with - KDE [default=no] --enable-smartalloc enable smartalloc debugging support [default=no] --enable-lockmgr enable lock manager support [default=no] --enable-static-tools enable static tape tools [default=no] @@ -1669,6 +1652,7 @@ Optional Features: --enable-batch-insert enable the DB batch insert code [default=yes] --disable-largefile omit support for large files --disable-afs disable afs support [default=auto] + --disable-lzo disable lzo support [default=yes] --disable-acl disable acl support [default=auto] --disable-xattr disable xattr support [default=auto] @@ -1745,6 +1729,7 @@ Optional Packages: number of common places for the SQLite3 files. --with-x use the X Window System --with-afsdir[=DIR] Directory holding AFS includes/libs + --with-lzo[=DIR] specify lzo library directory --with-systemd[=UNITDIR] Include systemd support. UNITDIR is where systemd system .service files are located, default is to ask @@ -1761,9 +1746,6 @@ Some influential environment variables: CXX C++ compiler command CXXFLAGS C++ compiler flags CPP C preprocessor - WXCONFIG wx-config command. On some systems, you must set it to - wx-config-2.6 to use wxWidgets 2.6. - WXFLAGS Parameters to pass to wx-config (e.g. --unicode=no). CXXCPP C++ preprocessor XMKMF Path to xmkmf, Makefile generator for X Window System @@ -1833,7 +1815,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -bacula configure 5.2.12 +bacula configure 7.0.0 generated by GNU Autoconf 2.68 Copyright (C) 2010 Free Software Foundation, Inc. @@ -2763,7 +2745,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by bacula $as_me 5.2.12, which was +It was created by bacula $as_me 7.0.0, which was generated by GNU Autoconf 2.68. Invocation command line was $ $0 $@ @@ -3154,13 +3136,6 @@ ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. ac_config_headers="$ac_config_headers src/config.h:autoconf/config.h.in" -WIN32BUILDDIR=${BUILD_DIR}/src/win32 -WIN32MAINDIR=${BUILD_DIR} -WIN32TOPDIR=${TOP_DIR} - - - - for ac_prog in true do # Extract the first word of "$ac_prog", so it can be a program name with args. @@ -3260,10 +3235,14 @@ if test "x$BACULA" != x; then post_host=`echo -${BACULA} | tr 'A-Z ' 'a-z-'` fi BACULA=${BACULA:-Bacula} -VERSION=`sed -n -e 's/^.*VERSION.*"\(.*\)"$/\1/p' ${srcdir}/src/version.h` -DATE=`sed -n -e 's/^.* \t*BDATE.*"\(.*\)"$/\1/p' ${srcdir}/src/version.h` -LSMDATE=`sed -n -e 's/^.*LSMDATE.*"\(.*\)"$/\1/p' ${srcdir}/src/version.h` -BDB_VERSION=`sed -n -e 's/^.*BDB_VERSION \(.*\)$/\1/p' ${srcdir}/src/cats/cats.h` +VERSION=`sed -n -e 's/^#define VERSION.*"\(.*\)"$/\1/p' ${srcdir}/src/version.h` +RELEASE=`sed -n -e 's/^#define RELEASE.*"\(.*\)"$/\1/p' ${srcdir}/src/version.h` +DATE=`sed -n -e 's/^#define BDATE.*"\(.*\)"$/\1/p' ${srcdir}/src/version.h` +LSMDATE=`sed -n -e 's/^#define LSMDATE.*"\(.*\)"$/\1/p' ${srcdir}/src/version.h` +BDB_VERSION=`sed -n -e 's/^#define BDB_VERSION \(.*\)$/\1/p' ${srcdir}/src/cats/cats.h` +DEPKGS_VERSION=`sed -n -e 's/^#define DEPKGS_VERSION \(.*\)$/\1/p' ${srcdir}/src/cats/cats.h` +DEPKGS_QT_VERSION=`sed -n -e 's/^#define DEPKGS_QT_VERSION.*"\(.*\)"$/\1/p' ${srcdir}/src/version.h` +BQT_VERSION=`sed -n -e 's/^#define BQT_VERSION.*"\(.*\)"$/\1/p' ${srcdir}/src/version.h` LIBBAC_LT_RELEASE=`sed -n -e 's/^#.*LIBBAC_LT_RELEASE.*"\(.*\)"$/\1/p' ${srcdir}/src/version.h` LIBBACCFG_LT_RELEASE=`sed -n -e 's/^#.*LIBBACCFG_LT_RELEASE.*"\(.*\)"$/\1/p' ${srcdir}/src/version.h` @@ -5682,52 +5661,6 @@ $as_echo "no" >&6; } fi - -if test "x$WXCONFIG" = x; then - WXCONFIG=wx-config -fi -# Extract the first word of "${WXCONFIG}", so it can be a program name with args. -set dummy ${WXCONFIG}; 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_path_WXCONFIG+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $WXCONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_WXCONFIG="$WXCONFIG" # Let the user override the test with a path. - ;; - *) - 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_WXCONFIG="$as_dir/$ac_word$ac_exec_ext" - $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 - - test -z "$ac_cv_path_WXCONFIG" && ac_cv_path_WXCONFIG="${WXCONFIG}" - ;; -esac -fi -WXCONFIG=$ac_cv_path_WXCONFIG -if test -n "$WXCONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WXCONFIG" >&5 -$as_echo "$WXCONFIG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - # Extract the first word of "cdrecord", so it can be a program name with args. set dummy cdrecord; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 @@ -21766,15 +21699,11 @@ fi support_smartalloc=yes support_readline=yes +support_lzo=yes support_conio=yes -support_gnome=no support_bat=no -support_wx_console=no -support_tray_monitor=no support_tls=no support_crypto=no -gnome_version= -wx_version= support_static_tools=no support_static_fd=no support_static_sd=no @@ -21789,24 +21718,6 @@ batch_insert_db_backends="" support_lockmgr=no -# Check whether --enable-gnome was given. -if test "${enable_gnome+set}" = set; then : - enableval=$enable_gnome; - if test x$enableval = xyes; then - support_gnome=yes - fi - - -fi - - -GNOME_DIR= -if test x$support_gnome = xyes; then - as_fn_error $? "bgnome-console no longer supported" "$LINENO" 5 - as_fn_error $? "--enable-gnome option no longer supported" "$LINENO" 5 -fi -# AC_SUBST(GNOME_DIR) - # Check whether --enable-bat was given. if test "${enable_bat+set}" = set; then : enableval=$enable_bat; @@ -21846,69 +21757,6 @@ no_qwt=no -# Check whether --enable-bwx-console was given. -if test "${enable_bwx_console+set}" = set; then : - enableval=$enable_bwx_console; - if test x$enableval = xyes; then - support_wx_console=yes - fi - - -fi - - -WX_DIR= -if test x$support_wx_console = xyes; then - abc=`$WXCONFIG $WXFLAGS --cppflags` - pkg=$? - if test $pkg = 0; then - wx_version="wxWidgets `$WXCONFIG $WXFLAGS --release`" - WXCONS_CPPFLAGS=`$WXCONFIG $WXFLAGS --cppflags` - WXCONS_LDFLAGS=`$WXCONFIG $WXFLAGS --libs` - - - - WX_DIR="src/wx-console" - else - echo " " - echo "wx-config program not found. bwx-console disabled." - echo " " - support_wx_console=no - fi -fi - - -# Check whether --enable-tray-monitor was given. -if test "${enable_tray_monitor+set}" = set; then : - enableval=$enable_tray_monitor; - if test x$enableval = xyes; then - support_tray_monitor=yes - fi - - -fi - - -TRAY_MONITOR_DIR= -if test x$support_tray_monitor = xyes; then - abc=`$PKGCONFIG --exists gtk+-2.0` - pkg=$? - if test $pkg = 0; then - TRAY_MONITOR_CPPFLAGS=`$PKGCONFIG --cflags gtk+-2.0` - TRAY_MONITOR_LDFLAGS=`$PKGCONFIG --libs gtk+-2.0` - - - TRAY_MONITOR_DIR=src/tray-monitor - abc=`$PKGCONFIG --atleast-version=2.4 gtk+-2.0` - pkg=$? - if test $pkg = 0; then - -$as_echo "#define HAVE_GTK_2_4 1" >>confdefs.h - - fi - fi -fi - # Check whether --enable-smartalloc was given. if test "${enable_smartalloc+set}" = set; then : @@ -22045,17 +21893,11 @@ fi STATIC_CONS= -STATIC_GNOME_CONS= -STATIC_WX_CONS= if test x$support_static_cons = xyes; then STATIC_CONS="static-bconsole" - STATIC_GNOME_CONS="static-bgnome-console" - STATIC_WX_CONS="static-bwx-console" fi - - # Check whether --enable-client-only was given. if test "${enable_client_only+set}" = set; then : enableval=$enable_client_only; @@ -22388,9 +22230,6 @@ if test "${enable_readline+set}" = set; then : fi -if test x$TERM_LIB = x ; then - support_readline=no -fi got_readline="no" READLINE_SRC= @@ -22422,7 +22261,7 @@ if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : $as_echo "#define HAVE_READLINE 1" >>confdefs.h - CONS_LIBS="-lreadline -lhistory $TERM_LIB" + CONS_LIBS="-lreadline -lhistory ${TERM_LIB}" got_readline="yes" else @@ -22448,7 +22287,7 @@ $as_echo "#define HAVE_READLINE 1" >>confdefs.h got_readline="yes" CONS_INC="-I/usr/include/readline" - CONS_LIBS="-lreadline $TERM_LIB" + CONS_LIBS="-lreadline ${TERM_LIB}" else @@ -22461,7 +22300,7 @@ $as_echo "#define HAVE_READLINE 1" >>confdefs.h got_readline="yes" CONS_INC="-I${TOP_DIR}/depkgs/readline" - CONS_LIBS="-lreadline -lhistory $TERM_LIB" + CONS_LIBS="-lreadline -lhistory ${TERM_LIB}" CONS_LDFLAGS="-L${TOP_DIR}/depkgs/readline" PRTREADLINE_SRC="${TOP_DIR}/depkgs/readline" @@ -22695,7 +22534,19 @@ fi fi -for ac_func in strcasecmp select setenv putenv tcgetattr lstat lchown +for ac_func in strcasecmp select setenv putenv tcgetattr +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 lstat lchown lchmod futimes fchmod fchown 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" @@ -23224,6 +23075,7 @@ rm -f core conftest.err conftest.$ac_objext \ fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenSSL" >&5 $as_echo_n "checking for OpenSSL... " >&6; } @@ -23486,7 +23338,7 @@ if test "$ac_res" != no; then : fi -working_dir=`eval echo ${prefix}/opt/bacula/working` +working_dir=`eval echo /opt/bacula/working` # Check whether --with-working-dir was given. if test "${with_working_dir+set}" = set; then : @@ -23570,7 +23422,7 @@ fi -bsrdir=`eval echo ${prefix}/opt/bacula/bsr` +bsrdir=`eval echo /opt/bacula/bsr` # Check whether --with-bsrdir was given. if test "${with_bsrdir+set}" = set; then : @@ -23585,7 +23437,7 @@ fi -logdir=`eval echo ${prefix}/opt/bacula/log` +logdir=`eval echo /opt/bacula/log` # Check whether --with-logdir was given. if test "${with_logdir+set}" = set; then : @@ -24874,12 +24726,6 @@ fi -#BA_CHECK_INGRES_DB - -#BA_CHECK_DBI_DB - -#BA_CHECK_DBI_DRIVER - if test -z "${batch_insert_db_backends}"; then batch_insert_db_backends="None" fi @@ -28715,6 +28561,19 @@ _ACEOF fi done +for ac_func in getnameinfo +do : + ac_fn_c_check_func "$LINENO" "getnameinfo" "ac_cv_func_getnameinfo" +if test "x$ac_cv_func_getnameinfo" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_GETNAMEINFO 1 +_ACEOF + $as_echo "#define HAVE_GETNAMEINFO 1" >>confdefs.h + +fi +done + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct sockaddr has a sa_len field" >&5 $as_echo_n "checking for struct sockaddr has a sa_len field... " >&6; } @@ -29402,69 +29261,6 @@ if test x$ZLIBS = x-lz; then fi -have_lzo=no -ac_fn_c_check_header_mongrel "$LINENO" "lzo/lzoconf.h" "ac_cv_header_lzo_lzoconf_h" "$ac_includes_default" -if test "x$ac_cv_header_lzo_lzoconf_h" = xyes; then : - - ac_fn_c_check_header_mongrel "$LINENO" "lzo/lzo1x.h" "ac_cv_header_lzo_lzo1x_h" "$ac_includes_default" -if test "x$ac_cv_header_lzo_lzo1x_h" = xyes; then : - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lzo1x_1_compress in -llzo2" >&5 -$as_echo_n "checking for lzo1x_1_compress in -llzo2... " >&6; } -if ${ac_cv_lib_lzo2_lzo1x_1_compress+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-llzo2 $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char lzo1x_1_compress (); -int -main () -{ -return lzo1x_1_compress (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_lzo2_lzo1x_1_compress=yes -else - ac_cv_lib_lzo2_lzo1x_1_compress=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lzo2_lzo1x_1_compress" >&5 -$as_echo "$ac_cv_lib_lzo2_lzo1x_1_compress" >&6; } -if test "x$ac_cv_lib_lzo2_lzo1x_1_compress" = xyes; then : - - LZOLIBS="-llzo2" - -$as_echo "#define HAVE_LZO 1" >>confdefs.h - - have_lzo=yes - -fi - - -fi - - - -fi - - - - AFS_CFLAGS="" AFS_LIBS="" support_afs=auto @@ -29593,6 +29389,135 @@ fi + +# Check whether --enable-lzo was given. +if test "${enable_lzo+set}" = set; then : + enableval=$enable_lzo; + if test x$enableval = xno; then + support_lzo=no + fi + + +fi + + +LZO_INC= +LZO_LIBS= +LZO_LDFLAGS= + +have_lzo="no" +if test x$support_lzo = xyes; then + +# Check whether --with-lzo was given. +if test "${with_lzo+set}" = set; then : + withval=$with_lzo; + case "$with_lzo" in + no) + : + ;; + yes|*) + if test -f ${with_lzo}/include/lzo/lzoconf.h; then + LZO_INC="-I${with_lzo}/include" + LZO_LDFLAGS="-L${with_lzo}/lib" + with_lzo="${with_lzo}/include" + else + with_lzo="/usr/include" + fi + + as_ac_Header=`$as_echo "ac_cv_header_${with_lzo}/lzo/lzoconf.h" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "${with_lzo}/lzo/lzoconf.h" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + + +$as_echo "#define HAVE_LZO 1" >>confdefs.h + + LZO_LIBS="${LZO_LDFLAGS} -lzo2" + have_lzo="yes" + +else + + echo " " + echo "lzoconf.h not found. lzo turned off ..." + echo " " + + +fi + + + ;; + esac + +else + + ac_fn_c_check_header_mongrel "$LINENO" "lzo/lzoconf.h" "ac_cv_header_lzo_lzoconf_h" "$ac_includes_default" +if test "x$ac_cv_header_lzo_lzoconf_h" = xyes; then : + + ac_fn_c_check_header_mongrel "$LINENO" "lzo/lzo1x.h" "ac_cv_header_lzo_lzo1x_h" "$ac_includes_default" +if test "x$ac_cv_header_lzo_lzo1x_h" = xyes; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lzo1x_1_compress in -llzo2" >&5 +$as_echo_n "checking for lzo1x_1_compress in -llzo2... " >&6; } +if ${ac_cv_lib_lzo2_lzo1x_1_compress+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-llzo2 $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char lzo1x_1_compress (); +int +main () +{ +return lzo1x_1_compress (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_lzo2_lzo1x_1_compress=yes +else + ac_cv_lib_lzo2_lzo1x_1_compress=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lzo2_lzo1x_1_compress" >&5 +$as_echo "$ac_cv_lib_lzo2_lzo1x_1_compress" >&6; } +if test "x$ac_cv_lib_lzo2_lzo1x_1_compress" = xyes; then : + + LZO_LIBS="-llzo2" + +$as_echo "#define HAVE_LZO 1" >>confdefs.h + + have_lzo=yes + +fi + + +fi + + + +fi + + + +fi + +fi + + + + + support_acl=auto # Check whether --enable-acl was given. if test "${enable_acl+set}" = set; then : @@ -30614,7 +30539,6 @@ WLDFLAGS= PFILES="platforms/Makefile" PSCMD="ps -e" -WIN32= MACOSX= COMPRESS_MANPAGES=yes @@ -30653,13 +30577,6 @@ bsdi) platforms/bsdi/bacula-dir" largefile_support="yes" ;; -cygwin) - DISTVER=`uname -a |awk '{print $3}'` - TAPEDRIVE="/dev/nrst0" - WIN32=win32 - WCFLAGS="-mwindows" - WLDFLAGS="-mwindows" - ;; darwin) DISTVER=`uname -r` TAPEDRIVE="/dev/nst0" @@ -30955,7 +30872,6 @@ _ACEOF - MCOMMON=./autoconf/Make.common @@ -30972,7 +30888,7 @@ if test "x${subsysdir}" = "x${sbindir}" ; then exit 1 fi -ac_config_files="$ac_config_files autoconf/Make.common Makefile manpages/Makefile scripts/btraceback scripts/bconsole scripts/bacula scripts/bacula-ctl-dir scripts/bacula-ctl-fd scripts/bacula-ctl-sd scripts/devel_bacula scripts/Makefile scripts/logrotate scripts/bacula.desktop.gnome1 scripts/bacula.desktop.gnome2 scripts/bacula.desktop.gnome1.consolehelper scripts/bacula.desktop.gnome2.consolehelper scripts/bacula.desktop.gnome1.xsu scripts/bacula.desktop.gnome2.xsu scripts/mtx-changer scripts/disk-changer scripts/dvd-handler scripts/dvd-simulator scripts/bacula-tray-monitor.desktop scripts/logwatch/Makefile scripts/logwatch/logfile.bacula.conf scripts/wxconsole.console_apps scripts/wxconsole.desktop.consolehelper scripts/wxconsole.desktop.xsu scripts/bat.desktop scripts/bat.desktop.xsu scripts/bat.desktop.consolehelper scripts/bat.console_apps src/Makefile src/host.h src/console/Makefile src/console/bconsole.conf src/qt-console/tray-monitor/tray-monitor.pro src/qt-console/tray-monitor/tray-monitor.conf src/qt-console/bat.conf src/qt-console/bat.pro src/qt-console/bat.pro.mingw32 src/qt-console/install_conf_file src/wx-console/Makefile src/wx-console/bwx-console.conf src/tray-monitor/Makefile src/tray-monitor/tray-monitor.conf src/dird/Makefile src/dird/bacula-dir.conf src/lib/Makefile src/stored/Makefile src/stored/bacula-sd.conf src/filed/Makefile src/filed/bacula-fd.conf src/cats/Makefile src/cats/make_catalog_backup.pl src/cats/make_catalog_backup src/cats/delete_catalog_backup src/cats/create_postgresql_database src/cats/update_postgresql_tables src/cats/make_postgresql_tables src/cats/grant_postgresql_privileges src/cats/drop_postgresql_tables src/cats/drop_postgresql_database src/cats/create_mysql_database src/cats/update_mysql_tables src/cats/make_mysql_tables src/cats/grant_mysql_privileges src/cats/drop_mysql_tables src/cats/drop_mysql_database src/cats/create_sqlite3_database src/cats/update_sqlite3_tables src/cats/make_sqlite3_tables src/cats/grant_sqlite3_privileges src/cats/drop_sqlite3_tables src/cats/drop_sqlite3_database src/cats/sqlite src/cats/mysql src/cats/create_bacula_database src/cats/update_bacula_tables src/cats/grant_bacula_privileges src/cats/make_bacula_tables src/cats/drop_bacula_tables src/cats/drop_bacula_database src/cats/install-default-backend src/findlib/Makefile src/tools/Makefile src/plugins/fd/Makefile src/plugins/sd/Makefile src/plugins/dir/Makefile src/win32/Makefile.inc po/Makefile.in updatedb/update_mysql_tables_9_to_10 updatedb/update_sqlite3_tables_9_to_10 updatedb/update_postgresql_tables_9_to_10 updatedb/update_mysql_tables_10_to_11 updatedb/update_sqlite3_tables_10_to_11 updatedb/update_postgresql_tables_10_to_11 updatedb/update_mysql_tables_11_to_12 updatedb/update_sqlite3_tables_11_to_12 updatedb/update_postgresql_tables_11_to_12 updatedb/update_mysql_tables_12_to_14 updatedb/update_sqlite3_tables_12_to_14 updatedb/update_postgresql_tables_12_to_14 examples/nagios/check_bacula/Makefile platforms/rpms/redhat/bacula.spec platforms/rpms/redhat/bacula-bat.spec platforms/rpms/redhat/bacula-docs.spec platforms/rpms/redhat/bacula-mtx.spec $PFILES" +ac_config_files="$ac_config_files autoconf/Make.common Makefile manpages/Makefile scripts/btraceback scripts/bconsole scripts/bacula scripts/bacula-ctl-dir scripts/bacula-ctl-fd scripts/bacula-ctl-sd scripts/devel_bacula scripts/Makefile scripts/logrotate scripts/mtx-changer scripts/disk-changer scripts/dvd-handler scripts/dvd-simulator scripts/logwatch/Makefile scripts/logwatch/logfile.bacula.conf scripts/bat.desktop scripts/bat.desktop.xsu scripts/bat.desktop.consolehelper scripts/bat.console_apps src/Makefile src/host.h src/console/Makefile src/console/bconsole.conf src/qt-console/bat.conf src/qt-console/bat.pro src/qt-console/bat.pro.mingw32 src/qt-console/install_conf_file src/dird/Makefile src/dird/bacula-dir.conf src/lib/Makefile src/stored/Makefile src/stored/bacula-sd.conf src/filed/Makefile src/filed/bacula-fd.conf src/cats/Makefile src/cats/make_catalog_backup.pl src/cats/make_catalog_backup src/cats/delete_catalog_backup src/cats/create_postgresql_database src/cats/update_postgresql_tables src/cats/make_postgresql_tables src/cats/grant_postgresql_privileges src/cats/drop_postgresql_tables src/cats/drop_postgresql_database src/cats/create_mysql_database src/cats/update_mysql_tables src/cats/make_mysql_tables src/cats/grant_mysql_privileges src/cats/drop_mysql_tables src/cats/drop_mysql_database src/cats/create_sqlite3_database src/cats/update_sqlite3_tables src/cats/make_sqlite3_tables src/cats/grant_sqlite3_privileges src/cats/drop_sqlite3_tables src/cats/drop_sqlite3_database src/cats/sqlite src/cats/mysql src/cats/create_bacula_database src/cats/update_bacula_tables src/cats/grant_bacula_privileges src/cats/make_bacula_tables src/cats/drop_bacula_tables src/cats/drop_bacula_database src/cats/install-default-backend src/findlib/Makefile src/tools/Makefile src/plugins/fd/Makefile src/plugins/sd/Makefile src/plugins/dir/Makefile po/Makefile.in updatedb/update_mysql_tables_9_to_10 updatedb/update_sqlite3_tables_9_to_10 updatedb/update_postgresql_tables_9_to_10 updatedb/update_mysql_tables_10_to_11 updatedb/update_sqlite3_tables_10_to_11 updatedb/update_postgresql_tables_10_to_11 updatedb/update_mysql_tables_11_to_12 updatedb/update_sqlite3_tables_11_to_12 updatedb/update_postgresql_tables_11_to_12 examples/nagios/check_bacula/Makefile platforms/rpms/redhat/bacula.spec platforms/rpms/redhat/bacula-bat.spec platforms/rpms/redhat/bacula-docs.spec platforms/rpms/redhat/bacula-mtx.spec platforms/rpms/suse/bacula.spec platforms/rpms/suse/bacula-bat.spec platforms/rpms/suse/bacula-docs.spec platforms/rpms/suse/bacula-mtx.spec $PFILES" ac_config_commands="$ac_config_commands default" @@ -31495,7 +31411,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by bacula $as_me 5.2.12, which was +This file was extended by bacula $as_me 7.0.0, which was generated by GNU Autoconf 2.68. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -31561,7 +31477,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -bacula config.status 5.2.12 +bacula config.status 7.0.0 configured by $0, generated by GNU Autoconf 2.68, with options \\"\$ac_cs_config\\" @@ -32087,22 +32003,12 @@ do "scripts/devel_bacula") CONFIG_FILES="$CONFIG_FILES scripts/devel_bacula" ;; "scripts/Makefile") CONFIG_FILES="$CONFIG_FILES scripts/Makefile" ;; "scripts/logrotate") CONFIG_FILES="$CONFIG_FILES scripts/logrotate" ;; - "scripts/bacula.desktop.gnome1") CONFIG_FILES="$CONFIG_FILES scripts/bacula.desktop.gnome1" ;; - "scripts/bacula.desktop.gnome2") CONFIG_FILES="$CONFIG_FILES scripts/bacula.desktop.gnome2" ;; - "scripts/bacula.desktop.gnome1.consolehelper") CONFIG_FILES="$CONFIG_FILES scripts/bacula.desktop.gnome1.consolehelper" ;; - "scripts/bacula.desktop.gnome2.consolehelper") CONFIG_FILES="$CONFIG_FILES scripts/bacula.desktop.gnome2.consolehelper" ;; - "scripts/bacula.desktop.gnome1.xsu") CONFIG_FILES="$CONFIG_FILES scripts/bacula.desktop.gnome1.xsu" ;; - "scripts/bacula.desktop.gnome2.xsu") CONFIG_FILES="$CONFIG_FILES scripts/bacula.desktop.gnome2.xsu" ;; "scripts/mtx-changer") CONFIG_FILES="$CONFIG_FILES scripts/mtx-changer" ;; "scripts/disk-changer") CONFIG_FILES="$CONFIG_FILES scripts/disk-changer" ;; "scripts/dvd-handler") CONFIG_FILES="$CONFIG_FILES scripts/dvd-handler" ;; "scripts/dvd-simulator") CONFIG_FILES="$CONFIG_FILES scripts/dvd-simulator" ;; - "scripts/bacula-tray-monitor.desktop") CONFIG_FILES="$CONFIG_FILES scripts/bacula-tray-monitor.desktop" ;; "scripts/logwatch/Makefile") CONFIG_FILES="$CONFIG_FILES scripts/logwatch/Makefile" ;; "scripts/logwatch/logfile.bacula.conf") CONFIG_FILES="$CONFIG_FILES scripts/logwatch/logfile.bacula.conf" ;; - "scripts/wxconsole.console_apps") CONFIG_FILES="$CONFIG_FILES scripts/wxconsole.console_apps" ;; - "scripts/wxconsole.desktop.consolehelper") CONFIG_FILES="$CONFIG_FILES scripts/wxconsole.desktop.consolehelper" ;; - "scripts/wxconsole.desktop.xsu") CONFIG_FILES="$CONFIG_FILES scripts/wxconsole.desktop.xsu" ;; "scripts/bat.desktop") CONFIG_FILES="$CONFIG_FILES scripts/bat.desktop" ;; "scripts/bat.desktop.xsu") CONFIG_FILES="$CONFIG_FILES scripts/bat.desktop.xsu" ;; "scripts/bat.desktop.consolehelper") CONFIG_FILES="$CONFIG_FILES scripts/bat.desktop.consolehelper" ;; @@ -32111,16 +32017,10 @@ do "src/host.h") CONFIG_FILES="$CONFIG_FILES src/host.h" ;; "src/console/Makefile") CONFIG_FILES="$CONFIG_FILES src/console/Makefile" ;; "src/console/bconsole.conf") CONFIG_FILES="$CONFIG_FILES src/console/bconsole.conf" ;; - "src/qt-console/tray-monitor/tray-monitor.pro") CONFIG_FILES="$CONFIG_FILES src/qt-console/tray-monitor/tray-monitor.pro" ;; - "src/qt-console/tray-monitor/tray-monitor.conf") CONFIG_FILES="$CONFIG_FILES src/qt-console/tray-monitor/tray-monitor.conf" ;; "src/qt-console/bat.conf") CONFIG_FILES="$CONFIG_FILES src/qt-console/bat.conf" ;; "src/qt-console/bat.pro") CONFIG_FILES="$CONFIG_FILES src/qt-console/bat.pro" ;; "src/qt-console/bat.pro.mingw32") CONFIG_FILES="$CONFIG_FILES src/qt-console/bat.pro.mingw32" ;; "src/qt-console/install_conf_file") CONFIG_FILES="$CONFIG_FILES src/qt-console/install_conf_file" ;; - "src/wx-console/Makefile") CONFIG_FILES="$CONFIG_FILES src/wx-console/Makefile" ;; - "src/wx-console/bwx-console.conf") CONFIG_FILES="$CONFIG_FILES src/wx-console/bwx-console.conf" ;; - "src/tray-monitor/Makefile") CONFIG_FILES="$CONFIG_FILES src/tray-monitor/Makefile" ;; - "src/tray-monitor/tray-monitor.conf") CONFIG_FILES="$CONFIG_FILES src/tray-monitor/tray-monitor.conf" ;; "src/dird/Makefile") CONFIG_FILES="$CONFIG_FILES src/dird/Makefile" ;; "src/dird/bacula-dir.conf") CONFIG_FILES="$CONFIG_FILES src/dird/bacula-dir.conf" ;; "src/lib/Makefile") CONFIG_FILES="$CONFIG_FILES src/lib/Makefile" ;; @@ -32164,7 +32064,6 @@ do "src/plugins/fd/Makefile") CONFIG_FILES="$CONFIG_FILES src/plugins/fd/Makefile" ;; "src/plugins/sd/Makefile") CONFIG_FILES="$CONFIG_FILES src/plugins/sd/Makefile" ;; "src/plugins/dir/Makefile") CONFIG_FILES="$CONFIG_FILES src/plugins/dir/Makefile" ;; - "src/win32/Makefile.inc") CONFIG_FILES="$CONFIG_FILES src/win32/Makefile.inc" ;; "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; "updatedb/update_mysql_tables_9_to_10") CONFIG_FILES="$CONFIG_FILES updatedb/update_mysql_tables_9_to_10" ;; "updatedb/update_sqlite3_tables_9_to_10") CONFIG_FILES="$CONFIG_FILES updatedb/update_sqlite3_tables_9_to_10" ;; @@ -32175,14 +32074,15 @@ do "updatedb/update_mysql_tables_11_to_12") CONFIG_FILES="$CONFIG_FILES updatedb/update_mysql_tables_11_to_12" ;; "updatedb/update_sqlite3_tables_11_to_12") CONFIG_FILES="$CONFIG_FILES updatedb/update_sqlite3_tables_11_to_12" ;; "updatedb/update_postgresql_tables_11_to_12") CONFIG_FILES="$CONFIG_FILES updatedb/update_postgresql_tables_11_to_12" ;; - "updatedb/update_mysql_tables_12_to_14") CONFIG_FILES="$CONFIG_FILES updatedb/update_mysql_tables_12_to_14" ;; - "updatedb/update_sqlite3_tables_12_to_14") CONFIG_FILES="$CONFIG_FILES updatedb/update_sqlite3_tables_12_to_14" ;; - "updatedb/update_postgresql_tables_12_to_14") CONFIG_FILES="$CONFIG_FILES updatedb/update_postgresql_tables_12_to_14" ;; "examples/nagios/check_bacula/Makefile") CONFIG_FILES="$CONFIG_FILES examples/nagios/check_bacula/Makefile" ;; "platforms/rpms/redhat/bacula.spec") CONFIG_FILES="$CONFIG_FILES platforms/rpms/redhat/bacula.spec" ;; "platforms/rpms/redhat/bacula-bat.spec") CONFIG_FILES="$CONFIG_FILES platforms/rpms/redhat/bacula-bat.spec" ;; "platforms/rpms/redhat/bacula-docs.spec") CONFIG_FILES="$CONFIG_FILES platforms/rpms/redhat/bacula-docs.spec" ;; "platforms/rpms/redhat/bacula-mtx.spec") CONFIG_FILES="$CONFIG_FILES platforms/rpms/redhat/bacula-mtx.spec" ;; + "platforms/rpms/suse/bacula.spec") CONFIG_FILES="$CONFIG_FILES platforms/rpms/suse/bacula.spec" ;; + "platforms/rpms/suse/bacula-bat.spec") CONFIG_FILES="$CONFIG_FILES platforms/rpms/suse/bacula-bat.spec" ;; + "platforms/rpms/suse/bacula-docs.spec") CONFIG_FILES="$CONFIG_FILES platforms/rpms/suse/bacula-docs.spec" ;; + "platforms/rpms/suse/bacula-mtx.spec") CONFIG_FILES="$CONFIG_FILES platforms/rpms/suse/bacula-mtx.spec" ;; "$PFILES") CONFIG_FILES="$CONFIG_FILES $PFILES" ;; "default") CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;; @@ -33744,6 +33644,7 @@ if test "${support_bat}" = "yes" ; then touch bat chmod 755 bat rm -f Makefile + rm -rf moc32 obj32 $QMAKE ${MAKE:-make} clean cd ${BUILD_DIR} @@ -33759,9 +33660,9 @@ chmod 755 install_conf_file build-depkgs-qt-console cd ${BUILD_DIR} cd scripts -chmod 755 bacula btraceback mtx-changer +chmod 755 bacula btraceback mtx-changer storage-ctl bsg_persist chmod 755 dvd-handler dvd-simulator -chmod 755 bconsole mtx-changer devel_bacula logrotate +chmod 755 bconsole disk-changer devel_bacula logrotate cd .. c=updatedb @@ -33795,8 +33696,6 @@ chmod 755 $c/mysql chmod 755 $c/install-default-backend -chmod 755 src/win32/build-depkgs-mingw32 - if test "x$ac_cv_sys_largefile_CFLAGS" != "xno" ; then largefile_support="yes" fi @@ -33821,74 +33720,71 @@ ${MAKE:-make} clean echo " Configuration on `date`: - Host: ${host}${post_host} -- ${DISTNAME} ${DISTVER} - Bacula version: ${BACULA} ${VERSION} (${DATE}) - Source code location: ${srcdir} - Install binaries: ${sbindir} - Install libraries: ${libdir} - Install config files: ${sysconfdir} - Scripts directory: ${scriptdir} - Archive directory: ${archivedir} - Working directory: ${working_dir} - PID directory: ${piddir} - Subsys directory: ${subsysdir} - Man directory: ${mandir} - Data directory: ${datarootdir} - Plugin directory: ${plugindir} - C Compiler: ${CC} ${CCVERSION} - C++ Compiler: ${CXX} ${CXXVERSION} - Compiler flags: ${WCFLAGS} ${CFLAGS} - Linker flags: ${WLDFLAGS} ${LDFLAGS} - Libraries: ${LIBS} - Statically Linked Tools: ${support_static_tools} - Statically Linked FD: ${support_static_fd} - Statically Linked SD: ${support_static_sd} - Statically Linked DIR: ${support_static_dir} - Statically Linked CONS: ${support_static_cons} - Database backends: ${db_backends} - Database port: ${db_port} - Database name: ${db_name} - Database user: ${db_user} - - Job Output Email: ${job_email} - Traceback Email: ${dump_email} - SMTP Host Address: ${smtp_host} - - Director Port: ${dir_port} - File daemon Port: ${fd_port} - Storage daemon Port: ${sd_port} - - Director User: ${dir_user} - Director Group: ${dir_group} - Storage Daemon User: ${sd_user} - Storage DaemonGroup: ${sd_group} - File Daemon User: ${fd_user} - File Daemon Group: ${fd_group} - - Large file support: $largefile_support - Bacula conio support: ${got_conio} ${CONS_LIBS} - readline support: ${got_readline} ${PRTREADLINE_SRC} - TCP Wrappers support: ${TCPW_MSG} ${WRAPLIBS} - TLS support: ${support_tls} - Encryption support: ${support_crypto} - ZLIB support: ${have_zlib} - LZO support: ${have_lzo} - enable-smartalloc: ${support_smartalloc} - enable-lockmgr: ${support_lockmgr} - bat support: ${support_bat} - enable-gnome: ${support_gnome} ${gnome_version} - enable-bwx-console: ${support_wx_console} ${wx_version} - enable-tray-monitor: ${support_tray_monitor} - client-only: ${build_client_only} - build-dird: ${build_dird} - build-stored: ${build_stored} - Plugin support: ${have_plugins} - AFS support: ${have_afs} - ACL support: ${have_acl} - XATTR support: ${have_xattr} - Python support: ${support_python} ${PYTHON_LIBS} - systemd support: ${support_systemd} ${SYSTEMD_UNITDIR} - Batch insert enabled: ${batch_insert_db_backends} + Host: ${host}${post_host} -- ${DISTNAME} ${DISTVER} + Bacula version: ${BACULA} ${VERSION} (${DATE}) + Source code location: ${srcdir} + Install binaries: ${sbindir} + Install libraries: ${libdir} + Install config files: ${sysconfdir} + Scripts directory: ${scriptdir} + Archive directory: ${archivedir} + Working directory: ${working_dir} + PID directory: ${piddir} + Subsys directory: ${subsysdir} + Man directory: ${mandir} + Data directory: ${datarootdir} + Plugin directory: ${plugindir} + C Compiler: ${CC} ${CCVERSION} + C++ Compiler: ${CXX} ${CXXVERSION} + Compiler flags: ${WCFLAGS} ${CFLAGS} + Linker flags: ${WLDFLAGS} ${LDFLAGS} + Libraries: ${LIBS} + Statically Linked Tools: ${support_static_tools} + Statically Linked FD: ${support_static_fd} + Statically Linked SD: ${support_static_sd} + Statically Linked DIR: ${support_static_dir} + Statically Linked CONS: ${support_static_cons} + Database backends: ${db_backends} + Database port: ${db_port} + Database name: ${db_name} + Database user: ${db_user} + + Job Output Email: ${job_email} + Traceback Email: ${dump_email} + SMTP Host Address: ${smtp_host} + + Director Port: ${dir_port} + File daemon Port: ${fd_port} + Storage daemon Port: ${sd_port} + + Director User: ${dir_user} + Director Group: ${dir_group} + Storage Daemon User: ${sd_user} + Storage DaemonGroup: ${sd_group} + File Daemon User: ${fd_user} + File Daemon Group: ${fd_group} + + Large file support: $largefile_support + Bacula conio support: ${got_conio} ${CONS_LIBS} + readline support: ${got_readline} ${PRTREADLINE_SRC} + TCP Wrappers support: ${TCPW_MSG} ${WRAPLIBS} + TLS support: ${support_tls} + Encryption support: ${support_crypto} + ZLIB support: ${have_zlib} + LZO support: ${have_lzo} + enable-smartalloc: ${support_smartalloc} + enable-lockmgr: ${support_lockmgr} + bat support: ${support_bat} + client-only: ${build_client_only} + build-dird: ${build_dird} + build-stored: ${build_stored} + Plugin support: ${have_plugins} + AFS support: ${have_afs} + ACL support: ${have_acl} + XATTR support: ${have_xattr} + Python support: ${support_python} ${PYTHON_LIBS} + systemd support: ${support_systemd} ${SYSTEMD_UNITDIR} + Batch insert enabled: ${batch_insert_db_backends} " > config.out diff --git a/bacula/examples/nagios/check_bacula/authenticate.c b/bacula/examples/nagios/check_bacula/authenticate.c index c209990b56..94937b7719 100644 --- a/bacula/examples/nagios/check_bacula/authenticate.c +++ b/bacula/examples/nagios/check_bacula/authenticate.c @@ -13,7 +13,7 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2004-2010 Free Software Foundation Europe e.V. + Copyright (C) 2004-2014 Free Software Foundation Europe e.V. The main author of Bacula is Kern Sibbald, with contributions from many others, a complete list can be found in the file AUTHORS. diff --git a/bacula/examples/python/DirStartUp.py b/bacula/examples/python/DirStartUp.py deleted file mode 100644 index a6f3995600..0000000000 --- a/bacula/examples/python/DirStartUp.py +++ /dev/null @@ -1,102 +0,0 @@ -# -# Bacula Python interface script for the Director -# - -# You must import both sys and bacula -import sys, bacula - -# This is the list of Bacula daemon events that you -# can receive. -class BaculaEvents(object): - def __init__(self): - # Called here when a new Bacula Events class is - # is created. Normally not used - noop = 1 - - def JobStart(self, job): - """ - Called here when a new job is started. If you want - to do anything with the Job, you must register - events you want to receive. - """ - events = JobEvents() # create instance of Job class - events.job = job # save Bacula's job pointer - job.set_events(events) # register events desired - sys.stderr = events # send error output to Bacula - sys.stdout = events # send stdout to Bacula - jobid = job.JobId; client = job.Client - numvols = job.NumVols - job.JobReport="Python Dir JobStart: JobId=%d Client=%s NumVols=%d\n" % (jobid,client,numvols) - - # Bacula Job is going to terminate - def JobEnd(self, job): - jobid = job.JobId - client = job.Client - job.JobReport="Python Dir JobEnd output: JobId=%d Status=%s Client=%s.\n" % (jobid, job.JobStatus, client) - - # Called here when the Bacula daemon is going to exit - def Exit(self, job): - print "Daemon exiting." - -bacula.set_events(BaculaEvents()) # register daemon events desired - -""" - There are the Job events that you can receive. -""" -class JobEvents(object): - def __init__(self): - # Called here when you instantiate the Job. Not - # normally used - noop = 1 - - def JobInit(self, job): - noop = 1 - if (job.JobId < 2): - startid = job.run("run kernsave") - job.JobReport = "Python started new Job: jobid=%d\n" % startid - print "name=%s version=%s conf=%s working=%s" % (bacula.Name, bacula.Version, bacula.ConfigFile, bacula.WorkingDir) - - def JobRun(self, job): - noop = 1 - - def NewVolume(self, job): - jobid = job.JobId - client = job.Client - numvol = job.NumVols; - print job.CatalogRes - job.JobReport = "JobId=%d Client=%s NumVols=%d" % (jobid, client, numvol) - job.JobReport="Python before New Volume set for Job.\n" - Vol = "TestA-%d" % numvol - job.JobReport = "Exists=%d TestA-%d" % (job.DoesVolumeExist(Vol), numvol) - job.VolumeName="TestA-%d" % numvol - job.JobReport="Python after New Volume set for Job.\n" - return 1 - - def VolumePurged(self, job): - noop = 1 - - # Pass output back to Bacula - def write(self, text): - self.job.write(text) - - # Open file to be backed up. file is the filename - # NOT YET IMPLEMENTED - def open(self, file): - print "Open %s called" % file - self.fd = open('m.py', 'rb') - jobid = self.job.JobId - print "Open: JobId=%d" % jobid - - # Read file data into Bacula memory buffer (mem) - # return length read. 0 => EOF, -1 => error - # NOT YET IMPLEMENTED - def read(self, mem): - print "Read called\n" - len = self.fd.readinto(mem) - print "Read %s bytes into mem.\n" % len - return len - - # Close file - # NOT YET IMPLEMENTED - def close(self): - self.fd.close() diff --git a/bacula/examples/python/FDStartUp.py b/bacula/examples/python/FDStartUp.py deleted file mode 100644 index 4d53e33bfc..0000000000 --- a/bacula/examples/python/FDStartUp.py +++ /dev/null @@ -1,74 +0,0 @@ -# -# Bacula Python interface script for the File Daemon -# -# You must import both sys and bacula -import sys, bacula - -# This is the list of Bacula daemon events that you -# can receive. -class BaculaEvents(object): - def __init__(self): - # Called here when a new Bacula Events class is - # is created. Normally not used - noop = 1 - - def JobStart(self, job): - """ - Called here when a new job is started. If you want - to do anything with the Job, you must register - events you want to receive. - """ - events = JobEvents() # create instance of Job class - events.job = job # save Bacula's job pointer - job.set_events(events) # register events desired - sys.stderr = events # send error output to Bacula - sys.stdout = events # send stdout to Bacula - jobid = job.JobId - client = job.Client - job.JobReport="Python FD JobStart: JobId=%d Client=%s \n" % (jobid,client) - return 1 - - # Bacula Job is going to terminate - def JobEnd(self, job): - jobid = job.JobId - client = job.Client - job.JobReport="Python FD JobEnd output: JobId=%d Client=%s.\n" % (jobid, client) - - - # Called here when the Bacula daemon is going to exit - def Exit(self): - noop = 1 - -bacula.set_events(BaculaEvents()) # register daemon events desired - -""" - There are the Job events that you can receive. -""" -class JobEvents(object): - def __init__(self): - # Called here when you instantiate the Job. Not - # normally used - noop = 1 - - # Pass output back to Bacula - def write(self, text): - self.job.write(text) - - # Open file to be backed up. file is the filename - def Python_open(self, file): - print "Open %s called" % file - self.fd = open(file, 'rb') - jobid = self.job.JobId - print "Open: %s" % file - - # Read file data into Bacula memory buffer (mem) - # return length read. 0 => EOF, -1 => error - def Python_read(self, mem): - print "Read called\n" - len = self.fd.readinto(mem) - print "Read %s bytes into mem.\n" % len - return len - - # Close file - def Python_close(self): - self.fd.close() diff --git a/bacula/examples/python/SDStartUp.py b/bacula/examples/python/SDStartUp.py deleted file mode 100644 index 1f08beda4c..0000000000 --- a/bacula/examples/python/SDStartUp.py +++ /dev/null @@ -1,56 +0,0 @@ -# -# Bacula Python interface script for the Storage Daemon -# -# You must import both sys and bacula -import sys, bacula - -# This is the list of Bacula daemon events that you -# can receive. -class BaculaEvents(object): - def __init__(self): - # Called here when a new Bacula Events class is - # is created. Normally not used - noop = 1 - - def JobStart(self, job): - """ - Called here when a new job is started. If you want - to do anything with the Job, you must register - events you want to receive. - """ - events = JobEvents() # create instance of Job class - events.job = job # save Bacula's job pointer - job.set_events(events) # register events desired - sys.stderr = events # send error output to Bacula - sys.stdout = events # send stdout to Bacula - jobid = job.JobId - client = job.Client - job.JobReport="Python SD JobStart: JobId=%d Client=%s \n" % (jobid,client) - return 1 - - # Bacula Job is going to terminate - def JobEnd(self, job): - jobid = job.JobId - client = job.Client - job.JobReport="Python SD JobEnd output: JobId=%d Client=%s.\n" % (jobid, client) -# print "Python SD JobEnd\n" - - - # Called here when the Bacula daemon is going to exit - def Exit(self): - noop = 1 - -bacula.set_events(BaculaEvents()) # register daemon events desired - -""" - There are the Job events that you can receive. -""" -class JobEvents(object): - def __init__(self): - # Called here when you instantiate the Job. Not - # normally used - noop = 1 - - # Pass output back to Bacula - def write(self, text): - self.job.write(text) diff --git a/bacula/manpages/Makefile.in b/bacula/manpages/Makefile.in index bbbc6ae87b..4d2b152bda 100644 --- a/bacula/manpages/Makefile.in +++ b/bacula/manpages/Makefile.in @@ -8,7 +8,7 @@ MAN8 = bacula.8 bacula-dir.8 bacula-fd.8 bacula-sd.8 \ bconsole.8 bcopy.8 bextract.8 bls.8 bscan.8 btape.8 \ btraceback.8 dbcheck.8 bwild.8 bregex.8 -MAN1 = bacula-tray-monitor.1 bacula-bwxconsole.1 bsmtp.1 bat.1 +MAN1 = bsmtp.1 bat.1 # bacula-bgnome-console.1 diff --git a/bacula/manpages/bacula-bgnome-console.1 b/bacula/manpages/bacula-bgnome-console.1 index daf85c6c83..876fab080d 100644 --- a/bacula/manpages/bacula-bgnome-console.1 +++ b/bacula/manpages/bacula-bgnome-console.1 @@ -25,7 +25,7 @@ command, the Gnome GUI version of the Bacula administration console. .sp 2 .PP .\" TeX users may be more comfortable with the \fB\fP and -.\" \fI\fP escape sequences to invoke bold face and italics, +.\" \fI\fP escape sequences to invoke bold face and italics, .\" respectively. The Console allows the administrator or user to communicate with the Bacula Director. This is the Gnome version. It will also run under KDE. @@ -41,5 +41,5 @@ of GUI extensions that make interaction easier with point and click. .br .SH AUTHOR This manual page was written by Jose Luis Tallon -.nh +.nh . diff --git a/bacula/manpages/bacula-bwxconsole.1 b/bacula/manpages/bacula-bwxconsole.1 index e4ad3b5194..1e565917be 100644 --- a/bacula/manpages/bacula-bwxconsole.1 +++ b/bacula/manpages/bacula-bwxconsole.1 @@ -41,5 +41,5 @@ Show version and usage of program. .br .SH AUTHOR This manual page was written by Jose Luis Tallon -.nh +.nh . diff --git a/bacula/manpages/bacula-dir.8 b/bacula/manpages/bacula-dir.8 index 50056e8b10..c5cd965c8c 100644 --- a/bacula/manpages/bacula-dir.8 +++ b/bacula/manpages/bacula-dir.8 @@ -18,7 +18,7 @@ This manual page documents briefly the command. .br Bacula's Director Daemon acts as the controller of the -network backup system: it is responsible for scheduling and +network backup system: it is responsible for scheduling and coordinating backups across the network. .SH OPTIONS .TP diff --git a/bacula/manpages/bacula-fd.8 b/bacula/manpages/bacula-fd.8 index 2dfbf9ed57..9e9fca0f3b 100644 --- a/bacula/manpages/bacula-fd.8 +++ b/bacula/manpages/bacula-fd.8 @@ -21,7 +21,7 @@ Bacula's File Daemon acts as the interface between the Bacula network backup system and the filesystems to be backed up: it is responsible for reading/writing/verifying the files to be backup'd/verified/restored. Network transfer can optionally be -compressed. +compressed. .SH OPTIONS .TP .BI \-c\ file diff --git a/bacula/manpages/bacula.8 b/bacula/manpages/bacula.8 index da498c3fc3..fd05604a30 100644 --- a/bacula/manpages/bacula.8 +++ b/bacula/manpages/bacula.8 @@ -6,7 +6,7 @@ .\" TP hanging label .TH Bacula 8 "The Network Backup Solution" .SH NAME -Bacula \- The Network Backup Solution +Bacula \- The Network Backup Solution .SH SYNOPSIS .B bacula-dir \- Director .br @@ -63,7 +63,7 @@ in some of the documentation, the File daemon is referred to as the Client (for example in Bacula's configuration file). In addition to Unix/Linux File daemons, there is a Windows File daemon (normally distributed in binary format). The Windows File -daemon runs on all currently known Windows versions (2K, 2003, XP, +daemon runs on all currently known Windows versions (2K, 2003, XP, and Vista). .LP @@ -91,7 +91,7 @@ and SQLite3, one of which must be chosen when building Bacula. .SH OPTIONS See the HTML/PDF documentation at: .br - + .br for details of the command line options. diff --git a/bacula/manpages/bconsole.8 b/bacula/manpages/bconsole.8 index a765b2ec48..13d892c859 100644 --- a/bacula/manpages/bconsole.8 +++ b/bacula/manpages/bconsole.8 @@ -45,5 +45,5 @@ Show version and usage of program. .br .SH AUTHOR This manual page was written by Jose Luis Tallon -.nh +.nh . diff --git a/bacula/manpages/bcopy.8 b/bacula/manpages/bcopy.8 index 5a1a5b2dd0..df8e456641 100644 --- a/bacula/manpages/bcopy.8 +++ b/bacula/manpages/bcopy.8 @@ -8,9 +8,9 @@ .SH NAME bcopy \- Bacula's 'Copy from tape' .SH SYNOPSIS -.B bcopy +.B bcopy .RI [ options ] -.I input-archive +.I input-archive .I output-archive .br .SH DESCRIPTION @@ -19,7 +19,7 @@ This manual page documents briefly the command. .PP .\" TeX users may be more comfortable with the \fB\fP and -.\" \fI\fP escape sequences to invoke bold face and italics, +.\" \fI\fP escape sequences to invoke bold face and italics, .\" respectively. .SH OPTIONS A summary of options is included below. @@ -59,5 +59,5 @@ Set verbose mode. .br .SH AUTHOR This manual page was written by Jose Luis Tallon -.nh +.nh . diff --git a/bacula/manpages/bextract.8 b/bacula/manpages/bextract.8 index 0a1b0c54d7..ee7b9aa9d6 100644 --- a/bacula/manpages/bextract.8 +++ b/bacula/manpages/bextract.8 @@ -19,7 +19,7 @@ This manual page documents briefly the command. .PP .\" TeX users may be more comfortable with the \fB\fP and -.\" \fI\fP escape sequences to invoke bold face and italics, +.\" \fI\fP escape sequences to invoke bold face and italics, .\" respectively. .SH OPTIONS A summary of options is included below. @@ -59,5 +59,5 @@ Specify volume names. .br .SH AUTHOR This manual page was written by Jose Luis Tallon -.nh +.nh . diff --git a/bacula/manpages/bls.8 b/bacula/manpages/bls.8 index f1553926b3..f413f82689 100644 --- a/bacula/manpages/bls.8 +++ b/bacula/manpages/bls.8 @@ -28,7 +28,7 @@ This manual page documents briefly the command. .PP .\" TeX users may be more comfortable with the \fB\fP and -.\" \fI\fP escape sequences to invoke bold face and italics, +.\" \fI\fP escape sequences to invoke bold face and italics, .\" respectively. .SH OPTIONS A summary of options is included below. @@ -59,7 +59,7 @@ List jobs. .TP .BI \-k List blocks. -.TP +.TP .I (no \-j or \-k option) List saved files .TP @@ -80,5 +80,5 @@ Set verbose mode. .br .SH AUTHOR This manual page was written by Jose Luis Tallon -.nh +.nh . diff --git a/bacula/manpages/bpluginfo.8 b/bacula/manpages/bpluginfo.8 index 683d5e6c95..fbf6b3758d 100644 --- a/bacula/manpages/bpluginfo.8 +++ b/bacula/manpages/bpluginfo.8 @@ -17,7 +17,7 @@ bpluginfo \- Bacula Plugin information utility The main purpose of .B bpluginfo is to display different information about Bacula plugin. You can use it to -check a plugin name, author, license and short description. You can use +check a plugin name, author, license and short description. You can use '-f' option to display API implemented by the plugin. Some plugins may require additional '-a' option for validating a Bacula Daemons API. In most cases it is not required. @@ -35,17 +35,17 @@ A summary of options is included below. Show usage of the program. .TP .BI \-v -Verbose information printing all available data from the plugin, including +Verbose information printing all available data from the plugin, including plugin header and implemented API. .TP .BI \-i Display short information from plugin header only. This is a default option. -Option incompatible with +Option incompatible with .B -f option. .TP .BI \-f -Display information about implemented API functions. +Display information about implemented API functions. .TP .BI \-a\ You can supply the plugin initialization function with a particular Bacula @@ -68,7 +68,7 @@ This is an example of bplufinfo usage with verbose option (-v) and default plugi .RS .nf -\fB$ bpluginfo -v bpipe-fd.so +\fB$ bpluginfo -v bpipe-fd.so Plugin type: File Daemon plugin Plugin magic: *FDPluginData* diff --git a/bacula/manpages/bregex.8 b/bacula/manpages/bregex.8 index 2e9e4c86a0..6004d8d91c 100644 --- a/bacula/manpages/bregex.8 +++ b/bacula/manpages/bregex.8 @@ -30,7 +30,7 @@ command. This program can be useful for testing regex expressions to be applied against a list of filenames. .PP .\" TeX users may be more comfortable with the \fB\fP and -.\" \fI\fP escape sequences to invoke bold face and italics, +.\" \fI\fP escape sequences to invoke bold face and italics, .\" respectively. .SH OPTIONS A summary of options is included below. @@ -45,9 +45,9 @@ Set debug level to \fInn\fP. Print timestamp in debug output .TP .BI \-f\ -The data-file is a filename that contains lines of data to be matched (or not) against one or more patterns. When the program is run, it will prompt you for a regular expression pattern, then apply it one line at a time against the data in the file. Each line that matches will be printed preceded by its line number. You will then be prompted again for another pattern. +The data-file is a filename that contains lines of data to be matched (or not) against one or more patterns. When the program is run, it will prompt you for a regular expression pattern, then apply it one line at a time against the data in the file. Each line that matches will be printed preceded by its line number. You will then be prompted again for another pattern. .TP -.BI \-n +.BI \-n Print lines that do not match .TP .BI \-l @@ -57,5 +57,5 @@ Suppress lines numbers. .br .SH AUTHOR This manual page was written by Bruno Friedmann -.nh +.nh . diff --git a/bacula/manpages/bscan.8 b/bacula/manpages/bscan.8 index e6ff0054c5..fe7520ab4d 100644 --- a/bacula/manpages/bscan.8 +++ b/bacula/manpages/bscan.8 @@ -18,21 +18,21 @@ The purpose of bscan is to read (scan) a Bacula Volume and to recreate or update the database contents with the information found on the Volume. This is done in a non-destructive way. This permits restoring database entries that have been lost by pruning, purging, deleting, or a database -corruption problem. - +corruption problem. + .LP Normally, it should not be necessary to run the bscan command because the database is self maintaining, and most corrupted databases can be repaired by the tools provided by the database vendors. In addition, if you have maintained bootstrap files during backups, you -should be able to recover all your data from the bootstrap file +should be able to recover all your data from the bootstrap file without needed an up to date catalog. .B bscan command. .PP .\" TeX users may be more comfortable with the \fB\fP and -.\" \fI\fP escape sequences to invoke bold face and italics, +.\" \fI\fP escape sequences to invoke bold face and italics, .\" respectively. .SH OPTIONS A summary of options is included below. @@ -99,7 +99,7 @@ Specify working directory (default from conf file) .br .SH AUTHOR This manual page was written by Jose Luis Tallon -.nh +.nh , for the Debian GNU/Linux system (but may be used by others). - + diff --git a/bacula/manpages/btape.8 b/bacula/manpages/btape.8 index dff8d0ea39..e19a36f44b 100644 --- a/bacula/manpages/btape.8 +++ b/bacula/manpages/btape.8 @@ -18,7 +18,7 @@ This manual page documents briefly the command. .PP .\" TeX users may be more comfortable with the \fB\fP and -.\" \fI\fP escape sequences to invoke bold face and italics, +.\" \fI\fP escape sequences to invoke bold face and italics, .\" respectively. .SH OPTIONS A summary of options is included below. @@ -57,7 +57,7 @@ backspace file .TP .B bsr backspace record -.TP +.TP .B cap list device capabilities .TP @@ -139,5 +139,5 @@ quick fill command .br .SH AUTHOR This manual page was written by Jose Luis Tallon -.nh +.nh . diff --git a/bacula/manpages/btraceback.8 b/bacula/manpages/btraceback.8 index 3a76d47a16..dc8de3c158 100644 --- a/bacula/manpages/btraceback.8 +++ b/bacula/manpages/btraceback.8 @@ -9,8 +9,8 @@ btraceback \- wrapper script around gdb and bsmtp .SH SYNOPSIS -.B btraceback -.I /path/to/binary +.B btraceback +.I /path/to/binary .I pid .SH DESCRIPTION @@ -61,7 +61,7 @@ the GDB command batch used to output a stack trace .RE .SH AUTHOR -This manual page was written by Lucas B. Cohen +This manual page was written by Lucas B. Cohen .nh .SH SEE ALSO diff --git a/bacula/platforms/rpms/redhat/bacula-bat.spec.in b/bacula/platforms/rpms/redhat/bacula-bat.spec.in index 21e63842de..ecfcb73f34 100644 --- a/bacula/platforms/rpms/redhat/bacula-bat.spec.in +++ b/bacula/platforms/rpms/redhat/bacula-bat.spec.in @@ -1,20 +1,27 @@ # # Bacula RPM spec file # -# Copyright (C) 2000-2012 Bacula Systems SA +# Copyright (C) 2000-2014 Bacula Systems SA +# # Platform Build Configuration # basic defines for every build -%define _release 1 +%define _release @RELEASE@ %define _version @VERSION@ -%define depkgs_qt_version 24Dec11 +%define depkgs_qt_version @DEPKGS_QT_VERSION@ %define product bacula +%define base_package_name %{product} + +# Don't strip binaries +%define __os_install_post %{nil} +%define __debug_install_post %{nil} +%define debug_package %{nil} -# this is the QT version in depkgs_qt -%define qt4ver 4.7.4 +# this is the Qt version in depkgs_qt +%define qt4ver @BQT_VERSION@ -%define _packager Kern Sibbald +%define _packager Kern Sibbald %define manpage_ext gz @@ -30,6 +37,8 @@ %define _subsysdir /opt/bacula/working %define sqlite_bindir /opt/bacula/sqlite %define _mandir /usr/share/man +%define docs_dir /opt/bacula/docs +%define archive_dir /opt/bacula/archive %define sysconf_dir /opt/bacula/etc %define script_dir /opt/bacula/scripts %define working_dir /opt/bacula/working @@ -90,8 +99,11 @@ exit 1 %endif +%define sqlite 0 +%{?build_sqlite:%define sqlite 1} + Summary: Bacula - The Network Backup Solution -Name: %{product}-bat +Name: %{base_package_name}-bat Version: %{_version} Release: %{_release} Group: System Environment/Daemons @@ -116,7 +128,7 @@ Requires: libgcc Requires: libpng Requires: libstdc++ Requires: zlib -Requires: %{product}-libs +Requires: %{base_package_name}-libs %if %{suse} Requires: freetype2 @@ -161,7 +173,7 @@ This is the Bacula Administration Tool (bat) graphical user interface package. It is an add-on to the client or server packages. # Don't strip symbols -%define debug_package %{nil} +%define debug_package %{nil} # Must explicitly enable debug pkg on SuSE # but not in opensuse_bs @@ -206,7 +218,7 @@ cd ${cwd} %endif # hostname is the build hostname, so use XXX_HOSTNAME_XXX for Address parameter -sed -i s/hostname/basename/ src/console/bconsole.conf.in src/dird/bacula-dir.conf.in src/qt-console/bat.conf.in src/tray-monitor/tray-monitor.conf.in +sed -i s/hostname/basename/ src/console/bconsole.conf.in src/dird/bacula-dir.conf.in src/qt-console/bat.conf.in # Main Bacula configuration with bat %configure \ @@ -214,6 +226,8 @@ sed -i s/hostname/basename/ src/console/bconsole.conf.in src/dird/bacula-dir.con --sbindir=%{_sbindir} \ --sysconfdir=%{sysconf_dir} \ --mandir=%{_mandir} \ + --docdir=%{docs_dir} \ + --with-archivedir=%{archive_dir} \ --with-scriptdir=%{script_dir} \ --with-working-dir=%{working_dir} \ --with-plugindir=%{script_dir} \ @@ -273,6 +287,8 @@ ln -sf consolehelper $RPM_BUILD_ROOT/usr/bin/bat %attr(-, root, %{daemon_group}) %{_sbindir}/bat %attr(-, root, %{daemon_group}) %dir %{sysconf_dir} %attr(-, root, %{daemon_group}) %config(noreplace) %{sysconf_dir}/bat.conf +%attr(-, root, %{daemon_group}) %{docs_dir}/*.html +%attr(-, root, %{daemon_group}) %{docs_dir}/*.png /usr/share/pixmaps/bat_icon.png /usr/share/applications/bat.desktop @@ -303,19 +319,21 @@ fi %post if [ -d %{sysconf_dir} ]; then cd %{sysconf_dir} - for string in XXX_REPLACE_WITH_DIRECTOR_PASSWORD_XXX XXX_REPLACE_WITH_CLIENT_PASSWORD_XXX XXX_REPLACE_WITH_STORAGE_PASSWORD_XXX XXX_REPLACE_WITH_DIRECTOR_MONITOR_PASSWORD_XXX XXX_REPLACE_WITH_CLIENT_MONITOR_PASSWORD_XXX XXX_REPLACE_WITH_STORAGE_MONITOR_PASSWORD_XXX; do - pass=`openssl rand -base64 33` - for file in *.conf; do - sed "s@${string}@${pass}@g" $file > $file.new - cp -f $file.new $file; rm -f $file.new - done - done -# put actual hostname in conf file - host=`hostname` - string="XXX_HOSTNAME_XXX" + if [ ! -f .rpm.sed ]; then + (umask 0177 + echo "# This file is used to ensure that all passwords will" > .rpm.sed + echo "# match between configuration files" >> .rpm.sed + ) + for string in XXX_REPLACE_WITH_DIRECTOR_PASSWORD_XXX XXX_REPLACE_WITH_CLIENT_PASSWORD_XXX XXX_REPLACE_WITH_STORAGE_PASSWORD_XXX XXX_REPLACE_WITH_DIRECTOR_MONITOR_PASSWORD_XXX XXX_REPLACE_WITH_CLIENT_MONITOR_PASSWORD_XXX XXX_REPLACE_WITH_STORAGE_MONITOR_PASSWORD_XXX; do + pass=`openssl rand -base64 33` + echo "s@${string}@${pass}@g" >> .rpm.sed + done + fi + host=`hostname -s` for file in *.conf; do - sed "s@${string}@${host}@g" $file >$file.new - cp -f $file.new $file; rm -f $file.new + sed -f .rpm.sed $file > $file.new + sed "s@XXX_HOSTNAME_XXX@${host}@g" $file.new > $file + rm -f $file.new done fi /sbin/ldconfig @@ -325,17 +343,5 @@ fi rm -rf $RPM_BUILD_DIR/depkgs-qt %changelog -* Sun Oct 03 2010 D. Scott Barninger -- fix bug 1639 -* Sun Mar 14 2010 D. Scott Barninger -- Fix for QT mkspecs location on FC12 -- allow user to build without embedded static QT -* Sat Feb 27 2010 D. Scott Barninger -- add dependency on bacula-libs -* Sat Feb 13 2010 D. Scott Barninger -- create file to allow bat to run nonroot with kdesu -- add dependency information -* Sat Jan 30 2010 D. Scott Barninger -- fix consolehelper/xsu for suse packages * Sat Aug 1 2009 Kern Sibbald - Split bat into separate bacula-bat.spec diff --git a/bacula/platforms/rpms/redhat/bacula-docs.spec.in b/bacula/platforms/rpms/redhat/bacula-docs.spec.in index e6f3b2f642..2c24b067d3 100644 --- a/bacula/platforms/rpms/redhat/bacula-docs.spec.in +++ b/bacula/platforms/rpms/redhat/bacula-docs.spec.in @@ -1,12 +1,12 @@ # # Bacula RPM spec file # -# Copyright (C) 2000-2012 Bacula Systems SA +# Copyright (C) 2000-2014 Bacula Systems SA # Platform Build Configuration # basic defines for every build -%define _release 1 +%define _release @RELEASE@ %define _version @VERSION@ %define product bacula %define _packager Kern Sibbald diff --git a/bacula/platforms/rpms/redhat/bacula-mtx.spec.in b/bacula/platforms/rpms/redhat/bacula-mtx.spec.in index 44e5fbc686..eee1c7b431 100644 --- a/bacula/platforms/rpms/redhat/bacula-mtx.spec.in +++ b/bacula/platforms/rpms/redhat/bacula-mtx.spec.in @@ -1,19 +1,23 @@ # # Bacula RPM spec file # -# Copyright (C) 2000-2012 Bacula Systems SA +# Copyright (C) 2000-2014 Bacula Systems SA # Platform Build Configuration # basic defines for every build -%define _release 1 +%define _release @RELEASE@ %define _version @VERSION@ %define product bacula -%define depkgs_version 24Dec11 -%define _packager Kern Sibbald - +%define depkgs_version @DEPKGS_VERSION@ +%define _packager Kern Sibbald %define manpage_ext gz +# Don't strip binaries +%define __os_install_post %{nil} +%define __debug_install_post %{nil} +%define debug_package %{nil} + %define single_dir 0 %{?single_dir_install:%define single_dir 1} diff --git a/bacula/platforms/rpms/redhat/bacula.spec.in b/bacula/platforms/rpms/redhat/bacula.spec.in index 603ac9f2ab..756e2538f0 100644 --- a/bacula/platforms/rpms/redhat/bacula.spec.in +++ b/bacula/platforms/rpms/redhat/bacula.spec.in @@ -1,19 +1,26 @@ # Bacula RPM spec file # -# Copyright (C) 2000-2012 Bacula Systems SA +# Copyright (C) 2000-2014 Bacula Systems SA +# # Platform Build Configuration # basic defines for every build -%define _release 1 +%define _release @RELEASE@ %define _version @VERSION@ %define product bacula -%define _packager Kern Sibbald -%define depkgs_version 24Dec11 +%define _packager Kern Sibbald +%define depkgs_version @DEPKGS_VERSION@ + +# Don't strip binaries +%define __os_install_post %{nil} +%define __debug_install_post %{nil} +%define debug_package %{nil} %define postgres_version 8 %define pgre84 0 %{?build_rhel5:%define pgre84 1} +%{?build_el5:%define pgre84 1} %if %{pgre84} %define postgres_package postgresql84 %define postgres_server_package postgresql84-server @@ -35,12 +42,15 @@ %define _subsysdir /opt/bacula/working %define sqlite_bindir /opt/bacula/sqlite %define _mandir /usr/share/man +%define docs_dir /opt/bacula/docs +%define archive_dir /opt/bacula/archive %define sysconf_dir /opt/bacula/etc %define script_dir /opt/bacula/scripts %define working_dir /opt/bacula/working %define pid_dir /opt/bacula/working %define plugin_dir /opt/bacula/plugins %define lib_dir /opt/bacula/lib +%define log_dir /opt/bacula/log %else %define _prefix /usr %define _sbindir %_prefix/sbin @@ -54,6 +64,7 @@ %define pid_dir /var/run %define plugin_dir %_libdir/bacula/plugins %define lib_dir %_libdir/bacula/lib +%define log_dir %_libdir/bacula/log %endif # Daemon user:group Don't change them unless you know what you are doing @@ -66,168 +77,20 @@ %define depkgs ../depkgs -# probems with mandriva build: +# probems with mandriva build: # nothing provides libbonobo2_0-devel, nothing provides libbonoboui2_0-devel -# set Macros by opensuse_bs, see http://en.opensuse.org/Build_Service/cross_distribution_package_how_to -#openSUSE 11.1 %if 0%{?suse_version} == 1110 -#openSUSE 11.0 %if 0%{?suse_version} == 1100 -#openSUSE 10.3 %if 0%{?suse_version} == 1030 -#openSUSE 10.2 %if 0%{?suse_version} == 1020 -#SUSE Linux 10.1 %if 0%{?suse_version} == 1010 -#SUSE Linux 10.0 %if 0%{?suse_version} == 1000 -#SUSE Linux 9.3 %if 0%{?suse_version} == 930 -#SLES 9 %if 0%{?sles_version} == 9 also set: %if 0%{?suse_version} == 910 -#SLE 10 %if 0%{?sles_version} == 10 also set: %if 0%{?suse_version} == 1010 -#SLE 11 %if 0%{?sles_version} == 11 also set: %if 0%{?suse_version} == 1110 -#CentOS 5 %if 0%{?centos_version} == 501 -#RHEL 4 %if 0%{?rhel_version} == 406 -#RHEL 5 %if 0%{?rhel_version} == 501 -#Fedora 6 with Extras %if 0%{?fedora_version} == 6 -#Fedora 7 with Extras %if 0%{?fedora_version} == 7 -#Fedora 8 with Extras %if 0%{?fedora_version} == 8 -#Fedora 9 with Extras %if 0%{?fedora_version} == 9 -#Fedora 10 with Extras %if 0%{?fedora_version} == 10 -#Mandriva 2006 %if 0%{?mandriva_version} == 2006 -#Mandriva 2007 %if 0%{?mandriva_version} == 2007 -#Mandriva 2008 %if 0%{?mandriva_version} == 2008 - - -%if 0%{?opensuse_bs} -# am I running in opensuse build service? -# TODO: seems to make problems - -# Build Service: Determine Distribution - -%ifarch x86_64 - %define build_x86_64 1 -%endif - - -%if 0%{?fedora_version} || 0%{?rhel_version} || 0%{?centos_version} -BuildRequires: GConf2-devel -BuildRequires: freetype-devel -BuildRequires: libtermcap-devel -BuildRequires: shadow-utils -%endif - - -%if 0%{?mandriva_version} == 2007 -%define build_mdv 1 -%define _dist "Mandriva 2007" -%endif - -%if 0%{?fedora_version} == 8 -%define build_fc8 1 -%define _dist "Fedora Core 8" -BuildRequires: redhat-release -%endif - -%if 0%{?fedora_version} == 9 -%define build_fc9 1 -%define _dist "Fedora Core 9" -BuildRequires: redhat-release -%endif - - -%if 0%{?fedora_version} == 10 -%define build_fc9 1 -%define _dist "Fedora Core 10" -BuildRequires: PolicyKit-gnome -BuildRequires: fedora-release -%endif - -%if 0%{?fedora_version} == 11 -%define build_fc9 1 -%define _dist "Fedora Core 11" -BuildRequires: PolicyKit-gnome -BuildRequires: fedora-release -%endif - -%if 0%{?rhel_version} == 501 -%define build_rhel5 1 -%define _dist "Red Hat Enterprise Linux Server release 5" -BuildRequires: redhat-release -%endif - -%if 0%{?rhel_version} == 406 -%define build_rhel4 1 -%define _dist "Red Hat Enterprise Linux Server release 4" -BuildRequires: redhat-release -%endif - - -%if 0%{?centos_version} == 501 -%define build_centos5 1 -%define _dist "CentOS 5" -BuildRequires: redhat-release -%endif - - -%if 0%{?suse_version} == 1020 -%define build_su102 1 -%define _dist "OpenSUSE 10.2" -BuildRequires: suse-release -%endif - - -%if 0%{?suse_version} == 1030 -%define build_su103 1 -%define _dist "OpenSUSE 10.3" -BuildRequires: suse-release -%endif - -%if 0%{?suse_version} == 1100 -%define build_su110 1 -%define _dist "SUSE 11" -BuildRequires: suse-release -%endif - - -%if 0%{?suse_version} == 1110 -%define build_su111 1 -%define _dist "SUSE 11" -%endif - -%if 0%{?suse_version} == 1120 -%define build_su112 1 -%define _dist "SUSE 11" -%endif - - -%if 0%{?sles_version} == 9 -%define build_su9 1 -%define _dist "SLES 9" -%endif - - -%if 0%{?sles_version} == 10 -%define build_su10 1 -%define _dist "SLE 10" -%endif - - -%if 0%{?sles_version} == 11 -%define build_su111 1 -%define _dist "SLES 11" -%endif - -%endif -# opensuse-bs? - - -# any patches for this release -# be sure to check the setup section for patch macros - #-------------------------------------------------------------------------- # it should not be necessary to change anything below here for a release # except for patch macros in the setup section #-------------------------------------------------------------------------- +%define base_package_name %{product} + %{?contrib_packager:%define _packager %{contrib_packager}} Summary: Bacula - The Network Backup Solution -Name: %{product} +Name: %{base_package_name} Version: %{_version} Release: %{_release} Group: System Environment/Daemons @@ -238,15 +101,15 @@ Vendor: The Bacula Team Packager: %{_packager} Prefix: %{_prefix} -Source0: http://www.prdownloads.sourceforge.net/bacula/%{name}-%{version}.tar.gz # opensuse build service changes the release itself # what happens if the release is not 1? DSB +Source0: http://www.prdownloads.sourceforge.net/bacula/depkgs-%{depkgs_version}.tar.gz +Source1: http://www.prdownloads.sourceforge.net/bacula/%{product}-%{version}.tar.gz %if 0%{?opensuse_bs} -Source1: Release_Notes-%{version}-1.tar.gz +Source2: Release_Notes-%{version}-1.tar.gz %else -Source1: Release_Notes-%{version}-%{release}.tar.gz +Source2: Release_Notes-%{version}-%{release}.tar.gz %endif -Source2: http://www.prdownloads.sourceforge.net/bacula/depkgs-%{depkgs_version}.tar.gz # define the basic package description %define blurb Bacula - The Leading Open Source Backup Solution. @@ -275,28 +138,12 @@ Source2: http://www.prdownloads.sourceforge.net/bacula/depkgs-%{depkgs_version}. %define rh9 0 %{?build_rh9:%define rh9 1} # Fedora Core build -%define fc1 0 -%{?build_fc1:%define fc1 1} -%define fc3 0 -%{?build_fc3:%define fc3 1} -%define fc4 0 -%{?build_fc4:%define fc4 1} -%define fc5 0 -%{?build_fc5:%define fc5 1} -%define fc6 0 -%{?build_fc6:%define fc6 1} -%define fc7 0 -%{?build_fc7:%define fc7 1} -%define fc8 0 -%{?build_fc8:%define fc8 1} -%define fc9 0 -%{?build_fc9:%define fc9 1} -%define fc10 0 -%{?build_fc10:%define fc10 1} -%define fc11 0 -%{?build_fc11:%define fc11 1} -%define fc12 0 -%{?build_fc12:%define fc12 1} +%define fc16 0 +%{?build_fc16:%define fc16 1} +%define fc17 0 +%{?build_fc17:%define fc17 1} +%define fc18 0 +%{?build_fc18:%define fc18 1} # Whitebox Enterprise build %define wb3 0 %{?build_wb3:%define wb3 1} @@ -307,11 +154,16 @@ Source2: http://www.prdownloads.sourceforge.net/bacula/depkgs-%{depkgs_version}. %define rhel4 0 %{?build_rhel4:%define rhel4 1} %{?build_rhel4:%define fc3 1} +%{?build_el4:%define rhel4 1} +%{?build_el4:%define fc3 1} %define rhel5 0 %{?build_rhel5:%define rhel5 1} %{?build_rhel5:%define fc6 1} +%{?build_el5:%define rhel5 1} +%{?build_el5:%define fc6 1} %define rhel6 0 %{?build_rhel6:%define rhel6 1} +%{?build_el6:%define rhel6 1} # CentOS build %define centos3 0 %{?build_centos3:%define centos3 1} @@ -366,7 +218,7 @@ Source2: http://www.prdownloads.sourceforge.net/bacula/depkgs-%{depkgs_version}. %define rhat 1 %endif %define fed 0 -%if %{fc1} || %{fc3} || %{fc4} || %{fc5} || %{fc6} || %{fc7} || %{fc8} || %{fc9} || %{fc10} || %{fc11} || %{fc12} +%if %{fc16} || %{fc17} || %{fc18} %define fed 1 %endif %define suse 0 @@ -390,7 +242,7 @@ exit 1 %endif # distribution-specific directory for logwatch -%if %{wb3} || %{rh7} || %{rh8} || %{rh9} || %{fc1} || %{fc3} || %{fc4} +%if %{wb3} || %{rh7} || %{rh8} || %{rh9} %define logwatch_dir /etc/log.d %else %define logwatch_dir /etc/logwatch @@ -429,7 +281,7 @@ exit 1 %{?build_x86_64:%define x86_64 1} # check what distribution we are -%if %{fc1} || %{fc3} || %{fc4} || %{fc5} || %{fc7} || %{fc8} || %{fc9} || %{fc10} || %{fc11} || %{fc12} +%if %{fc16} || %{fc17} || %{fc18} %define _dist %(grep Fedora /etc/redhat-release) %endif %if %{centos5} || %{centos4} || %{centos3} @@ -502,7 +354,7 @@ BuildRequires: sysconfig BuildRequires: gcc, gcc-c++, make, autoconf BuildRequires: glibc, glibc-devel -BuildRequires: ncurses-devel, perl, readline-devel +BuildRequires: ncurses-devel, readline-devel BuildRequires: libstdc++-devel, zlib-devel BuildRequires: openssl-devel BuildRequires: libacl-devel @@ -523,12 +375,6 @@ BuildRequires: libstdc++-static-devel BuildRequires: glibc-static-devel %endif -%if %{suse} -BuildRequires: termcap -%else -BuildRequires: libtermcap-devel -%endif - %if %{mysql} && ! %{suse} BuildRequires: mysql-devel %endif @@ -572,9 +418,6 @@ Requires: glibc, readline, %{name}-libs %if %{suse} Conflicts: bacula -Requires: termcap -%else -Requires: libtermcap %endif %if %{mysql} @@ -644,12 +487,6 @@ Provides: %{product}-libs Requires: libstdc++, zlib, openssl Requires: glibc, readline, %{name}-libs -%if %{suse} -Requires: termcap -%else -Requires: libtermcap -%endif - %if %{python} Requires: python >= %{pyver} %endif @@ -665,7 +502,7 @@ Requires: python >= %{pyver} %{blurb7} %{blurb8} -This is the File daemon (Client) only package. It includes the command line +This is the File daemon (Client) only package. It includes the command line console program. %if %{python} This build includes python scripting support. @@ -713,9 +550,6 @@ Group: System Environment/Daemons This package installs the shared libraries used by many bacula programs. -# Don't strip symbols -%define debug_package %{nil} - # Must explicitly enable debug pkg on SuSE # but not in opensuse_bs #%if %{suse} && ! 0%{?opensuse_bs} @@ -723,19 +557,28 @@ This package installs the shared libraries used by many bacula programs. #%endif %prep -%setup -%setup -T -D -b 1 +%setup -T -b 0 -n depkgs +%setup -T -b 1 -n %{product}-%{version} +%setup -T -D -b 2 -n %{product}-%{version} # extract depkgs -%if %{sqlite} -%setup -T -D -b 2 -%endif + %build %if %{suse} -export LDFLAGS="${LDFLAGS} -L/usr/lib/termcap -L/usr/lib64/termcap" +#export LDFLAGS="${LDFLAGS} -L/usr/lib/termcap -L/usr/lib64/termcap" %endif +# You can use a cache for depkgs +# tar xfz depkgs*gz -C ~/ +# cd ~/depkgs +# touch %{depkgs_version} # depkgs version + +if [ -f $HOME/depkgs/%{depkgs_version} ]; then + rm -rf %{depkgs} + ln -s $HOME/depkgs %{depkgs} +fi + cwd=${PWD} %if %{sqlite} cd %{depkgs} @@ -743,12 +586,18 @@ make sqlite3 cd ${cwd} %endif +cd %{depkgs} +make lzo +export LDFLAGS="${LDFLAGS} -L${PWD}/lzo/lib" +export CPPFLAGS="${CPPFLAGS} -I${PWD}/lzo/include" +cd ${cwd} + # hostname is the build hostname, so use XXX_HOSTNAME_XXX for Address parameter -sed -i s/hostname/basename/ src/console/bconsole.conf.in src/dird/bacula-dir.conf.in src/qt-console/bat.conf.in src/tray-monitor/tray-monitor.conf.in +sed -i s/hostname/basename/ src/console/bconsole.conf.in src/dird/bacula-dir.conf.in src/qt-console/bat.conf.in %if %{sqlite} # patches for the bundled sqlite scripts -sed -i s:.SQL_BINDIR.:/opt/bacula/sqlite: src/cats/*_sqlite3_*.in +sed -i s:.SQLITE_BINDIR.:/opt/bacula/sqlite: src/cats/*_sqlite3_*.in # patch the bacula-dir init script to remove sqlite service %if %{suse} @@ -769,6 +618,8 @@ export LDFLAGS="${LDFLAGS} -L/usr/lib64/mysql" export LDFLAGS="${LDFLAGS} -L/usr/lib64/python%{pyver}" %endif +export BACULA="Bacula" + # Main Bacula configuration %configure \ --prefix=%{_prefix} \ @@ -777,13 +628,11 @@ export LDFLAGS="${LDFLAGS} -L/usr/lib64/python%{pyver}" --mandir=%{_mandir} \ --with-scriptdir=%{script_dir} \ --with-working-dir=%{working_dir} \ - --with-plugindir=%{script_dir} \ + --with-plugindir=%{plugin_dir} \ + --with-logdir=%{log_dir} \ --with-pid-dir=%{pid_dir} \ --with-subsys-dir=%{_subsysdir} \ --enable-smartalloc \ - --disable-gnome \ - --disable-bwx-console \ - --disable-tray-monitor \ --disable-conio \ --enable-readline \ %if %{mysql} @@ -802,7 +651,7 @@ export LDFLAGS="${LDFLAGS} -L/usr/lib64/python%{pyver}" %if %{client_only} --enable-client-only \ %endif -%if %{rh7} || %{rh8} || %{rh9} || %{fc1} || %{fc3} || %{wb3} +%if %{rh7} || %{rh8} || %{rh9} --disable-batch-insert \ %endif --with-tcp-wrappers \ @@ -825,7 +674,7 @@ export LDFLAGS="${LDFLAGS} -L/usr/lib64/python%{pyver}" make -j3 %install - + cwd=${PWD} [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "$RPM_BUILD_ROOT" mkdir -p $RPM_BUILD_ROOT/etc/init.d @@ -848,8 +697,10 @@ make DESTDIR=$RPM_BUILD_ROOT install # Remove docs for programs that are depreciated rm -f $RPM_BUILD_ROOT%{_mandir}/man1/bacula-bgnome-console.1.%{manpage_ext} rm -f $RPM_BUILD_ROOT%{_mandir}/man1/bacula-bwxconsole.1.%{manpage_ext} -rm -f $RPM_BUILD_ROOT%{_mandir}/man1/bacula-tray-monitor.1.%{manpage_ext} rm -f $RPM_BUILD_ROOT%{script_dir}/gconsole +# Storage-ctl packaged in shstore rpm +rm -f $RPM_BUILD_ROOT%{script_dir}/storage-ctl +rm -f $RPM_BUILD_ROOT%{script_dir}/storage-ctl.conf # fixme - make installs the mysql scripts for sqlite build %if %{sqlite} @@ -900,6 +751,10 @@ cp -p scripts/logrotate $RPM_BUILD_ROOT/etc/logrotate.d/bacula # install the updatedb scripts cp -p updatedb/* $RPM_BUILD_ROOT%{script_dir}/updatedb/ +# install specific scripts + +# install special upgrade script, except for sqlite3 + %if ! %{client_only} # install the sample-query.sql file cp -p examples/sample-query.sql $RPM_BUILD_ROOT%{script_dir}/sample-query.sql @@ -929,6 +784,8 @@ rm -f $RPM_BUILD_ROOT%{_mandir}/man8/bls.8.%{manpage_ext} rm -f $RPM_BUILD_ROOT%{_mandir}/man8/bscan.8.%{manpage_ext} rm -f $RPM_BUILD_ROOT%{_mandir}/man8/btape.8.%{manpage_ext} rm -f $RPM_BUILD_ROOT%{_mandir}/man8/dbcheck.8.%{manpage_ext} +rm -f $RPM_BUILD_ROOT%{_mandir}/man8/bregex.8.%{manpage_ext} +rm -f $RPM_BUILD_ROOT%{_mandir}/man8/bwild.8.%{manpage_ext} rm -f $RPM_BUILD_ROOT%{_mandir}/man1/bsmtp.1.%{manpage_ext} rm -f $RPM_BUILD_ROOT%{script_dir}/bacula @@ -942,7 +799,6 @@ rm -f $RPM_BUILD_ROOT%{script_dir}/startmysql rm -f $RPM_BUILD_ROOT%{script_dir}/stopmysql rm -rf $RPM_BUILD_ROOT%{script_dir}/updatedb rm -f $RPM_BUILD_ROOT%{script_dir}/bconsole -rm -f $RPM_BUILD_ROOT%{script_dir}/bpipe-fd.so rm -f $RPM_BUILD_ROOT%{script_dir}/mtx-changer.conf rm -f $RPM_BUILD_ROOT%{_sbindir}/bacula %endif @@ -966,8 +822,7 @@ rm -f $RPM_BUILD_DIR/Release_Notes-%{version}-%{release}.txt %attr(-, root, %{daemon_group}) %{script_dir}/drop_mysql_tables %attr(-, root, %{daemon_group}) %{script_dir}/update_mysql_tables %attr(-, root, %{daemon_group}) %{script_dir}/grant_mysql_privileges -%attr(-, root, %{daemon_group}) %{script_dir}/startmysql -%attr(-, root, %{daemon_group}) %{script_dir}/stopmysql +%{_libdir}/libbaccats* %{_libdir}/libbacsql* %endif @@ -983,6 +838,7 @@ rm -f $RPM_BUILD_DIR/Release_Notes-%{version}-%{release}.txt %{sqlite_bindir}/libsqlite3.a %{sqlite_bindir}/sqlite3.h %{sqlite_bindir}/sqlite3 +%{_libdir}/libbaccats* %{_libdir}/libbacsql* %endif @@ -991,12 +847,13 @@ rm -f $RPM_BUILD_DIR/Release_Notes-%{version}-%{release}.txt %if %{postgresql} %files postgresql %defattr(-,root,root) -%attr(-, root, %{daemon_group}) %{script_dir}/create_postgresql_database -%attr(-, root, %{daemon_group}) %{script_dir}/drop_postgresql_database -%attr(-, root, %{daemon_group}) %{script_dir}/make_postgresql_tables -%attr(-, root, %{daemon_group}) %{script_dir}/drop_postgresql_tables -%attr(-, root, %{daemon_group}) %{script_dir}/update_postgresql_tables -%attr(-, root, %{daemon_group}) %{script_dir}/grant_postgresql_privileges +%attr(755, root, %{daemon_group}) %{script_dir}/create_postgresql_database +%attr(755, root, %{daemon_group}) %{script_dir}/drop_postgresql_database +%attr(755, root, %{daemon_group}) %{script_dir}/make_postgresql_tables +%attr(755, root, %{daemon_group}) %{script_dir}/drop_postgresql_tables +%attr(755, root, %{daemon_group}) %{script_dir}/update_postgresql_tables +%attr(755, root, %{daemon_group}) %{script_dir}/grant_postgresql_privileges +%{_libdir}/libbaccats* %{_libdir}/libbacsql* %endif @@ -1005,15 +862,16 @@ rm -f $RPM_BUILD_DIR/Release_Notes-%{version}-%{release}.txt %if ! %{client_only} %attr(-, root, %{daemon_group}) %dir %{script_dir} %attr(-, root, %{daemon_group}) %dir %{sysconf_dir} +#%attr(-, %{director_daemon_user}, %{daemon_group}) %dir %{log_dir} %attr(-, root, %{daemon_group}) %{script_dir}/bacula %attr(-, root, %{daemon_group}) %{script_dir}/bacula_config %attr(-, root, %{daemon_group}) %{script_dir}/bconsole -%attr(-, root, %{daemon_group}) %{script_dir}/create_bacula_database -%attr(-, root, %{daemon_group}) %{script_dir}/drop_bacula_database -%attr(-, root, %{daemon_group}) %{script_dir}/grant_bacula_privileges -%attr(-, root, %{daemon_group}) %{script_dir}/make_bacula_tables -%attr(-, root, %{daemon_group}) %{script_dir}/drop_bacula_tables -%attr(-, root, %{daemon_group}) %{script_dir}/update_bacula_tables +%attr(755, root, %{daemon_group}) %{script_dir}/create_bacula_database +%attr(755, root, %{daemon_group}) %{script_dir}/drop_bacula_database +%attr(755, root, %{daemon_group}) %{script_dir}/grant_bacula_privileges +%attr(755, root, %{daemon_group}) %{script_dir}/make_bacula_tables +%attr(755, root, %{daemon_group}) %{script_dir}/drop_bacula_tables +%attr(755, root, %{daemon_group}) %{script_dir}/update_bacula_tables %attr(-, root, %{daemon_group}) %{script_dir}/make_catalog_backup %attr(-, root, %{daemon_group}) %{script_dir}/make_catalog_backup.pl %attr(-, root, %{daemon_group}) %{script_dir}/delete_catalog_backup @@ -1024,7 +882,7 @@ rm -f $RPM_BUILD_DIR/Release_Notes-%{version}-%{release}.txt %attr(-, root, %{daemon_group}) %{script_dir}/bacula-ctl-dir %attr(-, root, %{daemon_group}) %{script_dir}/bacula-ctl-fd %attr(-, root, %{daemon_group}) %{script_dir}/bacula-ctl-sd -%attr(-, root, %{daemon_group}) %{script_dir}/bpipe-fd.so +%attr(-, root, %{daemon_group}) %{plugin_dir}/bpipe-fd.so %attr(-, root, %{daemon_group}) /etc/init.d/bacula-dir %attr(-, root, %{daemon_group}) /etc/init.d/bacula-fd %attr(-, root, %{daemon_group}) %{_sbindir}/dbcheck @@ -1042,23 +900,23 @@ rm -f $RPM_BUILD_DIR/Release_Notes-%{version}-%{release}.txt %attr(-, root, %{daemon_group}) %config(noreplace) %{sysconf_dir}/bconsole.conf %attr(-, root, %{daemon_group}) %config(noreplace) %{logwatch_dir}/conf/logfiles/bacula.conf %attr(-, root, %{daemon_group}) %config(noreplace) %{logwatch_dir}/conf/services/bacula.conf -%attr(-, root, %{daemon_group}) %config(noreplace) %{script_dir}/query.sql %attr(-, root, %{daemon_group}) %{script_dir}/sample-query.sql %attr(-, %{storage_daemon_user}, %{daemon_group}) %dir %{working_dir} -%{_sbindir}/bacula-dir +%attr(-, root, %{daemon_group}) %{_sbindir}/bacula-dir +%attr(-, root, %{daemon_group}) %{_sbindir}/bacula-sd +%attr(-, root, %{daemon_group}) %{_sbindir}/btraceback +%attr(-, root, %{daemon_group}) %{_sbindir}/bconsole +%attr(-, root, %{daemon_group}) %{_sbindir}/bsmtp +%attr(-, root, %{daemon_group}) %{_sbindir}/bscan +%attr(-, root, %{daemon_group}) %{_sbindir}/btape + %{_sbindir}/bacula-fd -%{_sbindir}/bacula-sd %{_sbindir}/bacula %{_sbindir}/bcopy %{_sbindir}/bextract %{_sbindir}/bls -%{_sbindir}/bscan -%{_sbindir}/btape -%{_sbindir}/btraceback -%{_sbindir}/bconsole -%{_sbindir}/bsmtp %{_sbindir}/bregex %{_sbindir}/bwild %{_mandir}/man8/bacula-fd.8.%{manpage_ext} @@ -1073,6 +931,8 @@ rm -f $RPM_BUILD_DIR/Release_Notes-%{version}-%{release}.txt %{_mandir}/man8/btape.8.%{manpage_ext} %{_mandir}/man8/btraceback.8.%{manpage_ext} %{_mandir}/man8/dbcheck.8.%{manpage_ext} +%{_mandir}/man8/bregex.8.%{manpage_ext} +%{_mandir}/man8/bwild.8.%{manpage_ext} %{_mandir}/man1/bsmtp.1.%{manpage_ext} %{_mandir}/man1/bat.1.%{manpage_ext} %_prefix/share/doc/* @@ -1123,12 +983,12 @@ if [ -s %{working_dir}/bacula.db ] && [ -s %{sqlite_bindir}/sqlite3 ];then %if %{postgresql} %pre postgresql -DB_VER=`echo 'select * from Version;' | psql bacula 2>/dev/null | tail -3 | head -1` +DB_VER=`echo 'SELECT * FROM Version LIMIT 1;' | su - postgres -c 'psql bacula' 2>/dev/null | tail -3 | head -1` %endif %if ! %{client_only} if [ -n "$DB_VER" ] && [ "$DB_VER" -lt "12" ]; then - echo "This bacula upgrade will update a bacula database from version 12 to 13." + echo "This bacula upgrade will update a bacula database from version 12 to 1014." echo "You appear to be running database version $DB_VER. You must first update" echo "your database to version 12 and then install this upgrade. The alternative" echo "is to use %{script_dir}/drop_%{db_backend}_tables to delete all your your current" @@ -1225,19 +1085,21 @@ fi if [ -d %{sysconf_dir} ]; then cd %{sysconf_dir} - for string in XXX_REPLACE_WITH_DIRECTOR_PASSWORD_XXX XXX_REPLACE_WITH_CLIENT_PASSWORD_XXX XXX_REPLACE_WITH_STORAGE_PASSWORD_XXX XXX_REPLACE_WITH_DIRECTOR_MONITOR_PASSWORD_XXX XXX_REPLACE_WITH_CLIENT_MONITOR_PASSWORD_XXX XXX_REPLACE_WITH_STORAGE_MONITOR_PASSWORD_XXX; do - pass=`openssl rand -base64 33` - for file in *.conf; do - sed "s@${string}@${pass}@g" $file > $file.new - cp -f $file.new $file; rm -f $file.new - done - done -# put actual hostname in conf file - host=`hostname` - string="XXX_HOSTNAME_XXX" + if [ ! -f .rpm.sed ]; then + (umask 0177 + echo "# This file is used to ensure that all passwords will" > .rpm.sed + echo "# match between configuration files" >> .rpm.sed + ) + for string in XXX_REPLACE_WITH_DIRECTOR_PASSWORD_XXX XXX_REPLACE_WITH_CLIENT_PASSWORD_XXX XXX_REPLACE_WITH_STORAGE_PASSWORD_XXX XXX_REPLACE_WITH_DIRECTOR_MONITOR_PASSWORD_XXX XXX_REPLACE_WITH_CLIENT_MONITOR_PASSWORD_XXX XXX_REPLACE_WITH_STORAGE_MONITOR_PASSWORD_XXX; do + pass=`openssl rand -base64 33` + echo "s@${string}@${pass}@g" >> .rpm.sed + done + fi + host=`hostname -s` for file in *.conf; do - sed "s@${string}@${host}@g" $file >$file.new - cp -f $file.new $file; rm -f $file.new + sed -f .rpm.sed $file > $file.new + sed "s@XXX_HOSTNAME_XXX@${host}@g" $file.new > $file + rm -f $file.new done fi @@ -1247,30 +1109,29 @@ fi #check, if mysql can be called successfully at all if mysql 2>/dev/null bacula -e 'select * from Version;' ; then -# test for an existing database -# note: this ASSUMES no password has been set for bacula database -DB_VER=`mysql 2>/dev/null bacula -e 'select * from Version;'|tail -n 1` - -# grant privileges and create tables if they do not exist -if [ -z "$DB_VER" ]; then - echo "Hmm, it doesn't look like you have an existing database." - echo "Granting privileges for MySQL user bacula..." - %{script_dir}/grant_mysql_privileges - echo "Creating MySQL bacula database..." - %{script_dir}/create_mysql_database - echo "Creating bacula tables..." - %{script_dir}/make_mysql_tables - -# check to see if we need to upgrade a 3.x database -elif [ "$DB_VER" -lt "13" ]; then - echo "This release requires an upgrade to your bacula database." - echo "Backing up your current database..." - mysqldump -f --opt bacula | bzip2 > %{working_dir}/bacula_backup.sql.bz2 - echo "Upgrading bacula database ..." - %{script_dir}/update_mysql_tables - echo "If bacula works correctly you can remove the backup file %{working_dir}/bacula_backup.sql.bz2" - -fi + # test for an existing database + # note: this ASSUMES no password has been set for bacula database + DB_VER=`mysql 2>/dev/null bacula -e 'select * from Version;'|tail -n 1` + + # grant privileges and create tables if they do not exist + if [ -z "$DB_VER" ]; then + echo "Hmm, it doesn't look like you have an existing database." + echo "Granting privileges for MySQL user bacula..." + %{script_dir}/grant_mysql_privileges + echo "Creating MySQL bacula database..." + %{script_dir}/create_mysql_database + echo "Creating bacula tables..." + %{script_dir}/make_mysql_tables + + elif [ "$DB_VER" -ge "12" -a "$DB_VER" -lt "1015" ]; then + echo "This release requires an upgrade to your bacula database." + echo "Backing up your current database..." + mysqldump -f --opt bacula | bzip2 > %{working_dir}/bacula_backup.sql.bz2 + echo "Upgrading bacula database ..." + %{script_dir}/update_mysql_tables + echo "If bacula works correctly you can remove the backup file %{working_dir}/bacula_backup.sql.bz2" + + fi fi %endif @@ -1279,7 +1140,7 @@ fi if [ -s %{working_dir}/bacula.db ]; then DB_VER=`echo "select * from Version;" | %{sqlite_bindir}/sqlite3 2>/dev/null %{working_dir}/bacula.db | tail -n 1` # check to see if we need to upgrade a 3.x database - if [ "$DB_VER" -lt "13" ] && [ "$DB_VER" -ge "12" ]; then + if [ "$DB_VER" -le "13" ] && [ "$DB_VER" -ge "12" ]; then echo "This release requires an upgrade to your bacula database." echo "Backing up your current database..." echo ".dump" | %{sqlite_bindir}/sqlite3 %{working_dir}/bacula.db | bzip2 > %{working_dir}/bacula_backup.sql.bz2 @@ -1300,51 +1161,54 @@ fi %if %{postgresql} # check if psql can be called successfully at all -if echo 'select * from Version;' | psql bacula 2>/dev/null; then - -# test for an existing database -# note: this ASSUMES no password has been set for bacula database -DB_VER=`echo 'select * from Version;' | psql bacula 2>/dev/null | tail -3 | head -1` - -# grant privileges and create tables if they do not exist -if [ -z "$DB_VER" ]; then - echo "Hmm, doesn't look like you have an existing database." - echo "Creating PostgreSQL bacula database..." - %{script_dir}/create_postgresql_database - echo "Creating bacula tables..." - %{script_dir}/make_postgresql_tables - echo "Granting privileges for PostgreSQL user bacula..." - %{script_dir}/grant_postgresql_privileges - -# check to see if we need to upgrade a 5.0.x database -elif [ "$DB_VER" -lt "13" ]; then - echo "This release requires an upgrade to your bacula database." - echo "Backing up your current database..." - pg_dump bacula | bzip2 > %{working_dir}/bacula_backup.sql.bz2 - echo "Upgrading bacula database ..." - %{script_dir}/update_postgresql_tables - echo "If bacula works correctly you can remove the backup file %{working_dir}/bacula_backup.sql.bz2" - -fi +if echo 'select * from Version;' | su - postgres -c 'psql bacula' 2>/dev/null; then + + # test for an existing database + # note: this ASSUMES no password has been set for bacula database + DB_VER=`echo 'SELECT * FROM Version LIMIT 1;' | su - postgres -c 'psql bacula' 2>/dev/null | tail -3 | head -1` + + # grant privileges and create tables if they do not exist + if [ -z "$DB_VER" ]; then + echo "Hmm, doesn't look like you have an existing database." + echo "Creating PostgreSQL bacula database..." + su - postgres -c %{script_dir}/create_postgresql_database + echo "Creating bacula tables..." + su - postgres -c %{script_dir}/make_postgresql_tables + echo "Granting privileges for PostgreSQL user bacula..." + su - postgres -c %{script_dir}/grant_postgresql_privileges + + elif [ "$DB_VER" -ge "12" -a "$DB_VER" -lt "1015" ]; then + echo "This release requires an upgrade to your bacula database." + echo "Backing up your current database..." + su - postgres -c 'pg_dump bacula' | bzip2 > %{working_dir}/bacula_backup.sql.bz2 + echo "Upgrading bacula database ..." + su - postgres -c %{script_dir}/update_postgresql_tables + echo "If bacula works correctly you can remove the backup file %{working_dir}/bacula_backup.sql.bz2" + echo "Granting privileges for PostgreSQL user bacula..." + su - postgres -c %{script_dir}/grant_postgresql_privileges + + fi fi %endif %if ! %{client_only} if [ -d %{sysconf_dir} ]; then cd %{sysconf_dir} - for string in XXX_REPLACE_WITH_DIRECTOR_PASSWORD_XXX XXX_REPLACE_WITH_CLIENT_PASSWORD_XXX XXX_REPLACE_WITH_STORAGE_PASSWORD_XXX XXX_REPLACE_WITH_DIRECTOR_MONITOR_PASSWORD_XXX XXX_REPLACE_WITH_CLIENT_MONITOR_PASSWORD_XXX XXX_REPLACE_WITH_STORAGE_MONITOR_PASSWORD_XXX; do - pass=`openssl rand -base64 33` - for file in *.conf; do - sed "s@${string}@${pass}@g" $file > $file.new - cp -f $file.new $file; rm -f $file.new - done - done -# put actual hostname in conf file - host=`hostname` - string="XXX_HOSTNAME_XXX" + if [ ! -f .rpm.sed ]; then + (umask 0177 + echo "# This file is used to ensure that all passwords will" > .rpm.sed + echo "# match between configuration files" >> .rpm.sed + ) + for string in XXX_REPLACE_WITH_DIRECTOR_PASSWORD_XXX XXX_REPLACE_WITH_CLIENT_PASSWORD_XXX XXX_REPLACE_WITH_STORAGE_PASSWORD_XXX XXX_REPLACE_WITH_DIRECTOR_MONITOR_PASSWORD_XXX XXX_REPLACE_WITH_CLIENT_MONITOR_PASSWORD_XXX XXX_REPLACE_WITH_STORAGE_MONITOR_PASSWORD_XXX; do + pass=`openssl rand -base64 33` + echo "s@${string}@${pass}@g" >> .rpm.sed + done + fi + host=`hostname -s` for file in *.conf; do - sed "s@${string}@${host}@g" $file >$file.new - cp -f $file.new $file; rm -f $file.new + sed -f .rpm.sed $file > $file.new + sed "s@XXX_HOSTNAME_XXX@${host}@g" $file.new > $file + rm -f $file.new done fi %endif @@ -1372,6 +1236,8 @@ fi %files client %defattr(-,root,root) %attr(-, root, %{daemon_group}) %dir %{script_dir} +%attr(-, root, %{daemon_group}) %dir %{plugin_dir} +#%attr(-, root, %{daemon_group}) %dir %{log_dir} %attr(-, root, %{daemon_group}) %dir %{sysconf_dir} %{script_dir}/bacula-ctl-fd /etc/init.d/bacula-fd @@ -1387,6 +1253,7 @@ fi %attr(-, root, %{daemon_group}) %{script_dir}/btraceback.gdb %attr(-, root, %{daemon_group}) %{script_dir}/btraceback.dbx %attr(-, root, %{daemon_group}) %{script_dir}/btraceback.mdb +%attr(-, root, %{daemon_group}) %{plugin_dir}/bpipe-fd.so %{_sbindir}/bconsole %{_mandir}/man8/bacula-fd.8.%{manpage_ext} %{_mandir}/man8/bacula.8.%{manpage_ext} @@ -1426,19 +1293,21 @@ fi if [ -d %{sysconf_dir} ]; then cd %{sysconf_dir} - for string in XXX_REPLACE_WITH_DIRECTOR_PASSWORD_XXX XXX_REPLACE_WITH_CLIENT_PASSWORD_XXX XXX_REPLACE_WITH_STORAGE_PASSWORD_XXX XXX_REPLACE_WITH_DIRECTOR_MONITOR_PASSWORD_XXX XXX_REPLACE_WITH_CLIENT_MONITOR_PASSWORD_XXX XXX_REPLACE_WITH_STORAGE_MONITOR_PASSWORD_XXX; do - pass=`openssl rand -base64 33` - for file in *.conf; do - sed "s@${string}@${pass}@g" $file > $file.new - cp -f $file.new $file; rm -f $file.new - done - done -# put actual hostname in conf file - host=`hostname` - string="XXX_HOSTNAME_XXX" + if [ ! -f .rpm.sed ]; then + (umask 0177 + echo "# This file is used to ensure that all passwords will" > .rpm.sed + echo "# match between configuration files" >> .rpm.sed + ) + for string in XXX_REPLACE_WITH_DIRECTOR_PASSWORD_XXX XXX_REPLACE_WITH_CLIENT_PASSWORD_XXX XXX_REPLACE_WITH_STORAGE_PASSWORD_XXX XXX_REPLACE_WITH_DIRECTOR_MONITOR_PASSWORD_XXX XXX_REPLACE_WITH_CLIENT_MONITOR_PASSWORD_XXX XXX_REPLACE_WITH_STORAGE_MONITOR_PASSWORD_XXX; do + pass=`openssl rand -base64 33` + echo "s@${string}@${pass}@g" >> .rpm.sed + done + fi + host=`hostname -s` for file in *.conf; do - sed "s@${string}@${host}@g" $file >$file.new - cp -f $file.new $file; rm -f $file.new + sed -f .rpm.sed $file > $file.new + sed "s@XXX_HOSTNAME_XXX@${host}@g" $file.new > $file + rm -f $file.new done fi @@ -1485,81 +1354,3 @@ echo "The database update scripts were installed to %{script_dir}/updatedb" %endif %changelog -* Sun Mar 07 2010 D. Scott Barninger -- remove --without-qwt from configure statement -* Sat Feb 27 2010 D. Scott Barninger -- move shared libraries into bacula-libs package -* Sat Feb 20 2010 D. Scott Barninger -- remove deprecated mysql4 and mysql5 build defines -- add build support for tcpwrappers -- remove bacula_config file for client only build -- remove requirements for database server packages -- enable readline support -- add fc11 and fc12 -* Sat Feb 13 2010 D. Scott Barninger -- 5.0.1 -- fix client only build -- clean up requirements for termcap -- query.sql now empty by default so we install sample-query.sql along side it -- remove old nobuild_mtx switch -* Sun Feb 07 2010 D. Scott Barninger -- fix mysql database upgrade -* Fri Feb 05 2010 D. Scott Barninger -- fix permissions of dbcheck -- misc. cleanup -* Sat Jan 30 2010 D. Scott Barninger -- 5.0.0 -- add su112 and fc10 builds, remove doc package declaration. -- fix source path for logwatch files. -- restore static bundled build of sqlite (who took that out?) and remove use -- of system sqlite. we don't support use of sqlite2. -- upgrade database from version 11 to 12. -* Mon Aug 10 2009 Philipp Storz -- changes to work with opensuse build service -* Sat Aug 1 2009 Kern Sibbald -- Split docs into separate bacula-docs.spec, bacula-bat.spec and bacula-mtx.spec -- removed build of rescue, gnome console and wxconsole -* Sat Jun 20 2009 D. Scott Barninger -- Fix bat install which is now handled by make and uses shared libs -* Sat May 16 2009 D. Scott Barninger -- fix libxml dependency for rh7 per Pasi Kärkkäinen -* Mon May 04 2009 D. Scott Barninger -- Fix post ldconfig problem in client only build -* Sun May 03 2009 D. Scott Barninger -- remove more files installed by client-only build not needed by client package -- remove libbacsql files from client package -* Sat May 02 2009 D. Scott Barninger -- 3.0.1 -- update for new docs configuration -* Sat Apr 25 2009 D. Scott Barninger -- add switch to pass Distribution tag -* Sun Apr 5 2009 D. Scott Barninger -- 3.0.0 release -- database update version 10 to 11 -- make now installs docs so we rm from buildroot -- add shared libs in %_libdir and other misc new files -* Wed Dec 31 2008 D. Scott Barninger -- add su111 target -* Sat Nov 08 2008 D. Scott Barninger -- set paths for QT using pkgconfig -* Sat Oct 11 2008 D. Scott Barninger -- release 2.4.3 update depkgs to 11Sep08 remove file nmshack from mtx package -* Sun Sep 07 2008 D. Scott Barninger -- adjust /opt/bacula install -- add build switch to supress rescue package -* Sun Aug 24 2008 D. Scott Barninger -- add support for install to /opt/bacula -* Sun Aug 17 2008 D. Scott Barninger -- remove libtermcap dependancy for FC9 -* Mon Aug 04 2008 D. Scott Barninger -- fix bat dependencies -* Sat Jun 28 2008 D. Scott Barninger -- add su110 target -* Sat May 24 2008 D. Scott Barninger -- add fc9 target -* Sun Mar 30 2008 D. Scott Barninger -- FHS compatibility changes -* Sat Feb 16 2008 D. Scott Barninger -- remove fix for false buffer overflow detection with glibc >= 2.7 -* Sat Feb 09 2008 D. Scott Barninger -- fix for false buffer overflow detection with glibc >= 2.7 diff --git a/bacula/platforms/rpms/suse/bacula-bat.spec.in b/bacula/platforms/rpms/suse/bacula-bat.spec.in new file mode 100644 index 0000000000..62a3daee3e --- /dev/null +++ b/bacula/platforms/rpms/suse/bacula-bat.spec.in @@ -0,0 +1,351 @@ +# +# Bacula RPM spec file +# +# Copyright (C) 2000-2014 Bacula Systems SA + +# Platform Build Configuration + +# basic defines for every build +%define _release @RELEASE@ +%define _version @VERSION@ +%define depkgs_qt_version @DEPKGS_QT_VERSION@ +%define product bacula + +# Don't strip binaries +%define __os_install_post %{nil} +%define __debug_install_post %{nil} +%define debug_package %{nil} + +# this is the Qt version in depkgs_qt +%define qt4ver @BQT_VERSION@ + +%define _packager Kern Sibbald + +%define manpage_ext gz + +# Force single file build +%define single_dir 1 +%{?single_dir_install:%define single_dir 1} + +# Installation Directory locations +%if %{single_dir} +%define _prefix /opt/bacula +%define _sbindir /opt/bacula/bin +%define _bindir /opt/bacula/bin +%define _subsysdir /opt/bacula/working +%define sqlite_bindir /opt/bacula/sqlite +%define _mandir /usr/share/man +%define docs_dir /opt/bacula/docs +%define archive_dir /opt/bacula/archive +%define sysconf_dir /opt/bacula/etc +%define script_dir /opt/bacula/scripts +%define working_dir /opt/bacula/working +%define pid_dir /opt/bacula/working +%define plugin_dir /opt/bacula/plugins +%define lib_dir /opt/bacula/lib +%else +%define _prefix /usr +%define _sbindir %_prefix/sbin +%define _bindir %_prefix/bin +%define _subsysdir /var/lock/subsys +%define sqlite_bindir %_libdir/bacula/sqlite +%define _mandir %_prefix/share/man +%define sysconf_dir /etc/bacula +%define script_dir %_libdir/bacula +%define working_dir /var/lib/bacula +%define pid_dir /var/run +%define plugin_dir %_libdir/bacula/plugins +%define lib_dir %_libdir/bacula/lib +%endif + +# Daemon user:group Don't change them unless you know what you are doing +%define director_daemon_user bacula +%define daemon_group bacula + +#-------------------------------------------------------------------------- +# it should not be necessary to change anything below here for a release +# except for patch macros in the setup section +#-------------------------------------------------------------------------- + +%{?contrib_packager:%define _packager %{contrib_packager}} + +%{expand: %%define gccver %(rpm -q --queryformat %%{version} gcc)} +%{expand: %%define gccrel %(rpm -q --queryformat %%{release} gcc)} + +%define staticqt 1 +%{?nobuild_staticqt:%define staticqt 0} + +# determine what platform we are building on +%define fedora 0 +%define suse 0 +%define mdk 0 + +%if %{_vendor} == redhat + %define fedora 1 + %define _dist %(cat /etc/redhat-release) +%endif +%if %{_vendor} == suse + %define suse 1 + %define _dist %(grep -i SuSE /etc/SuSE-release) +%endif +%if %{_vendor} == Mandriva + %define mdk 1 + %define _dist %(grep Mand /etc/mandrake-release) +%endif +%if ! %{fedora} && ! %{suse} && ! %{mdk} +%{error: Unknown platform. Please examine the spec file.} +exit 1 +%endif + +%define sqlite 0 +%{?build_sqlite:%define sqlite 1} + +%define base_package_name bacula + +Summary: Bacula - The Network Backup Solution +Name: %{base_package_name}-bat +Version: %{_version} +Release: %{_release} +Group: System Environment/Daemons +License: AGPLv3 +BuildRoot: %{_tmppath}/%{name}-root +URL: http://www.bacula.org/ +Vendor: The Bacula Team +Packager: %{_packager} +Prefix: %{_prefix} +Distribution: %{_dist} + +Source0: http://www.prdownloads.sourceforge.net/bacula/%{product}-%{version}.tar.gz +Source1: http://www.prdownloads.sourceforge.net/bacula/depkgs-qt-%{depkgs_qt_version}.tar.gz + +BuildRequires: gcc, gcc-c++, make, autoconf +BuildRequires: libstdc++-devel = %{gccver}-%{gccrel}, zlib-devel +BuildRequires: openssl-devel, fontconfig-devel, libpng-devel, libstdc++-devel, zlib-devel + +Requires: openssl +Requires: fontconfig +Requires: libgcc +Requires: libpng +%if 0%{?suse_version} > 1210 +Requires: libstdc++.6 +%else +Requires: libstdc++ +%endif +Requires: zlib +Requires: %{base_package_name}-libs + +%if %{suse} +Requires: freetype2 +BuildRequires: freetype2-devel +%else +Requires: usermode +Requires: freetype +BuildRequires: freetype-devel +%endif + +# Source directory locations +%define depkgs_qt ../depkgs-qt + +# define the basic package description +%define blurb Bacula - The Leading Open Source Backup Solution. +%define blurb2 Bacula is a set of computer programs that permit you (or the system +%define blurb3 administrator) to manage backup, recovery, and verification of computer +%define blurb4 data across a network of computers of different kinds. In technical terms, +%define blurb5 it is a network client/server based backup program. Bacula is relatively +%define blurb6 easy to use and efficient, while offering many advanced storage management +%define blurb7 features that make it easy to find and recover lost or damaged files. +%define blurb8 Bacula source code has been released under the AGPL version 3 license. + +%define group_file /etc/group +%define groupadd /usr/sbin/groupadd + +Summary: Bacula - The Network Backup Solution +Group: System Environment/Daemons + +%description +%{blurb} + +%{blurb2} +%{blurb3} +%{blurb4} +%{blurb5} +%{blurb6} +%{blurb7} +%{blurb8} + +This is the Bacula Administration Tool (bat) graphical user interface package. +It is an add-on to the client or server packages. + +# Don't strip symbols +%define debug_package %{nil} + +# Must explicitly enable debug pkg on SuSE +# but not in opensuse_bs +#%if %{suse} && ! 0%{?opensuse_bs} +#%debug_package +#%endif + +%prep +%setup -T -n %{product}-%{_version} -b 0 +%setup -T -D -n %{product}-%{_version} -b 1 + +%build + + +cwd=${PWD} +%if ! %{staticqt} +export QTDIR=$(pkg-config --variable=prefix QtCore) +export QTINC=$(pkg-config --variable=includedir QtCore) +export QTLIB=$(pkg-config --variable=libdir QtCore) +export PATH=${QTDIR}/bin/:${PATH} +%else +# You can use a cache for depkgs-qt +# tar xfz depkgs-qt*gz -C ~/ +# cd ~/depkgs-qt +# echo yes | make qt4 +# touch %{depkgs_qt_version} # depkgs version +if [ -f $HOME/depkgs-qt/%{depkgs_qt_version} ]; then + rm -rf %{depkgs_qt} + ln -s $HOME/depkgs-qt %{depkgs_qt} + cd %{depkgs_qt} +else + cd %{depkgs_qt} + make qt4 </dev/null` +if [ -z "$HAVE_BACULA" ]; then + %{groupadd} -r %{daemon_group} > /dev/null 2>&1 + echo "The group %{daemon_group} has been added to %{group_file}." + echo "See the manual chapter \"Running Bacula\" for details." +fi + + +%post +if [ -d %{sysconf_dir} ]; then + cd %{sysconf_dir} + if [ ! -f .rpm.sed ]; then + (umask 0177 + echo "# This file is used to ensure that all passwords will" > .rpm.sed + echo "# match between configuration files" >> .rpm.sed + ) + for string in XXX_REPLACE_WITH_DIRECTOR_PASSWORD_XXX XXX_REPLACE_WITH_CLIENT_PASSWORD_XXX XXX_REPLACE_WITH_STORAGE_PASSWORD_XXX XXX_REPLACE_WITH_DIRECTOR_MONITOR_PASSWORD_XXX XXX_REPLACE_WITH_CLIENT_MONITOR_PASSWORD_XXX XXX_REPLACE_WITH_STORAGE_MONITOR_PASSWORD_XXX; do + pass=`openssl rand -base64 33` + echo "s@${string}@${pass}@g" >> .rpm.sed + done + fi + host=`hostname -s` + for file in *.conf; do + sed -f .rpm.sed $file > $file.new + sed "s@XXX_HOSTNAME_XXX@${host}@g" $file.new > $file + rm -f $file.new + done +fi +/sbin/ldconfig + +%clean +[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "$RPM_BUILD_ROOT" +rm -rf $RPM_BUILD_DIR/depkgs-qt + +%changelog +* Sat Aug 1 2009 Kern Sibbald +- Split bat into separate bacula-bat.spec diff --git a/bacula/platforms/rpms/suse/bacula-docs.spec.in b/bacula/platforms/rpms/suse/bacula-docs.spec.in new file mode 100644 index 0000000000..2c24b067d3 --- /dev/null +++ b/bacula/platforms/rpms/suse/bacula-docs.spec.in @@ -0,0 +1,91 @@ +# +# Bacula RPM spec file +# +# Copyright (C) 2000-2014 Bacula Systems SA + +# Platform Build Configuration + +# basic defines for every build +%define _release @RELEASE@ +%define _version @VERSION@ +%define product bacula +%define _packager Kern Sibbald + +%define _prefix /usr +%define _sbindir %_prefix/sbin +%define _mandir %_prefix/share/man + + +#-------------------------------------------------------------------------- +# it should not be necessary to change anything below here for a release +# except for patch macros in the setup section +#-------------------------------------------------------------------------- + +%{?contrib_packager:%define _packager %{contrib_packager}} + +Summary: Bacula - The Network Backup Solution +Name: %{product}-docs +Version: %{_version} +Release: %{_release} +Group: System Environment/Daemons +License: AGPLv3 +BuildRoot: %{_tmppath}/%{name}-root +URL: http://www.bacula.org/ +Vendor: The Bacula Team +Packager: %{_packager} +BuildArchitectures: noarch +Prefix: %{_prefix} +Distribution: Bacula Documentation + +Source: %{name}-%{_version}.tar.bz2 + +# Source directory locations +%define _docsrc . + +# define the basic package description +%define blurb Bacula - The Leading Open Source Backup Solution. +%define blurb2 Bacula is a set of computer programs that permit you (or the system +%define blurb3 administrator) to manage backup, recovery, and verification of computer +%define blurb4 data across a network of computers of different kinds. In technical terms, +%define blurb5 it is a network client/server based backup program. Bacula is relatively +%define blurb6 easy to use and efficient, while offering many advanced storage management +%define blurb7 features that make it easy to find and recover lost or damaged files. +%define blurb8 Bacula source code has been released under the AGPL version 3 license. + +Summary: Bacula - The Network Backup Solution +Group: System Environment/Daemons + +%description +%{blurb} + +%{blurb2} +%{blurb3} +%{blurb4} +%{blurb5} +%{blurb6} +%{blurb7} +%{blurb8} + +This package installs the Bacula pdf and html documentation. + +%prep +%setup + + +%clean +[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "$RPM_BUILD_ROOT" +rm -rf $RPM_BUILD_DIR/%{name}-%{_version} + +%files +%doc %{_docsrc}/manuals/en/console/console %{_docsrc}/manuals/en/console/console.pdf +%doc %{_docsrc}/manuals/en/developers/developers %{_docsrc}/manuals/en/developers/developers.pdf +%doc %{_docsrc}/manuals/en/main/main %{_docsrc}/manuals/en/main/main.pdf +%doc %{_docsrc}/manuals/en/misc/misc %{_docsrc}/manuals/en/misc/misc.pdf +%doc %{_docsrc}/manuals/en/problems/problems %{_docsrc}/manuals/en/problems/problems.pdf +%doc %{_docsrc}/manuals/en/utility/utility %{_docsrc}/manuals/en/utility/utility.pdf + +%changelog +* Sat Jan 30 2010 D. Scott Barninger +- change source file to bz2, update for new doc structure +* Sat Aug 1 2009 Kern Sibbald +- Split docs into separate bacula-docs.spec diff --git a/bacula/platforms/rpms/suse/bacula-mtx.spec.in b/bacula/platforms/rpms/suse/bacula-mtx.spec.in new file mode 100644 index 0000000000..eee1c7b431 --- /dev/null +++ b/bacula/platforms/rpms/suse/bacula-mtx.spec.in @@ -0,0 +1,125 @@ +# +# Bacula RPM spec file +# +# Copyright (C) 2000-2014 Bacula Systems SA + +# Platform Build Configuration + +# basic defines for every build +%define _release @RELEASE@ +%define _version @VERSION@ +%define product bacula +%define depkgs_version @DEPKGS_VERSION@ +%define _packager Kern Sibbald +%define manpage_ext gz + +# Don't strip binaries +%define __os_install_post %{nil} +%define __debug_install_post %{nil} +%define debug_package %{nil} + +%define single_dir 0 +%{?single_dir_install:%define single_dir 1} + +# Installation Directory locations +%define _prefix /usr +%define _sbindir %_prefix/sbin +%define _bindir %_prefix/bin +%define _subsysdir /var/lock/subsys +%define sqlite_bindir %_libdir/bacula/sqlite +%define _mandir %_prefix/share/man +%define sysconf_dir /etc/bacula +%define script_dir %_libdir/bacula +%define working_dir /var/lib/bacula +%define pid_dir /var/run +%define plugin_dir %_libdir/bacula/plugins +%define lib_dir %_libdir/bacula/lib + +#-------------------------------------------------------------------------- +# it should not be necessary to change anything below here for a release +# except for patch macros in the setup section +#-------------------------------------------------------------------------- + +%{?contrib_packager:%define _packager %{contrib_packager}} + +Summary: Bacula - The Network Backup Solution +Name: %{product}-mtx +Version: %{_version} +Release: %{_release} +Group: System Environment/Daemons +License: AGPLv3 +BuildRoot: %{_tmppath}/%{name}-root +URL: http://www.bacula.org/ +Vendor: The Bacula Team +Packager: %{_packager} +Prefix: %{_prefix} +Distribution: Bacula Bat + +Source: http://www.prdownloads.sourceforge.net/bacula/depkgs-%{depkgs_version}.tar.gz + +# define the basic package description +%define blurb Bacula - The Leading Open Source Backup Solution. +%define blurb2 Bacula is a set of computer programs that permit you (or the system +%define blurb3 administrator) to manage backup, recovery, and verification of computer +%define blurb4 data across a network of computers of different kinds. In technical terms, +%define blurb5 it is a network client/server based backup program. Bacula is relatively +%define blurb6 easy to use and efficient, while offering many advanced storage management +%define blurb7 features that make it easy to find and recover lost or damaged files. +%define blurb8 Bacula source code has been released under the AGPL version 3 license. + +Summary: Bacula - The Network Backup Solution +Group: System Environment/Daemons + +%description +%{blurb} + +%{blurb2} +%{blurb3} +%{blurb4} +%{blurb5} +%{blurb6} +%{blurb7} +%{blurb8} + +This is Bacula's version of mtx tape utilities for Linux distributions that +do not provide their own mtx package + +%prep +%setup -T -n depkgs -b 0 + +%build + +make mtx + +%install +make \ + prefix=$RPM_BUILD_ROOT%{_prefix} \ + sbindir=$RPM_BUILD_ROOT%{_sbindir} \ + sysconfdir=$RPM_BUILD_ROOT%{sysconf_dir} \ + scriptdir=$RPM_BUILD_ROOT%{script_dir} \ + working_dir=$RPM_BUILD_ROOT%{working_dir} \ + piddir=$RPM_BUILD_ROOT%{pid_dir} \ + mandir=$RPM_BUILD_ROOT%{_mandir} \ + mtx-install + +%files +%defattr(-,root,root) +%attr(-, root, %{storage_daemon_group}) %{_sbindir}/loaderinfo +%attr(-, root, %{storage_daemon_group}) %{_sbindir}/mtx +%attr(-, root, %{storage_daemon_group}) %{_sbindir}/scsitape +%attr(-, root, %{storage_daemon_group}) %{_sbindir}/tapeinfo +%attr(-, root, %{storage_daemon_group}) %{_sbindir}/scsieject +%{_mandir}/man1/loaderinfo.1.%{manpage_ext} +%{_mandir}/man1/mtx.1.%{manpage_ext} +%{_mandir}/man1/scsitape.1.%{manpage_ext} +%{_mandir}/man1/tapeinfo.1.%{manpage_ext} +%{_mandir}/man1/scsieject.1.%{manpage_ext} + + +%clean +[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "$RPM_BUILD_ROOT" +rm -rf $RPM_BUILD_DIR/depkgs + +%changelog +* Sat Aug 1 2009 Kern Sibbald +- Split mtx out into bacula-mtx.spec diff --git a/bacula/platforms/rpms/suse/bacula.spec.in b/bacula/platforms/rpms/suse/bacula.spec.in new file mode 100644 index 0000000000..effd24ac2d --- /dev/null +++ b/bacula/platforms/rpms/suse/bacula.spec.in @@ -0,0 +1,1356 @@ +# Bacula RPM spec file +# +# Copyright (C) 2000-2014 Bacula Systems SA + +# Platform Build Configuration + +# basic defines for every build +%define _release @RELEASE@ +%define _version @VERSION@ +%define product bacula +%define _packager Kern Sibbald +%define depkgs_version @DEPKGS_VERSION@ + +# Don't strip binaries +%define __os_install_post %{nil} +%define __debug_install_post %{nil} +%define debug_package %{nil} + +%define postgres_version 8 +%define pgre84 0 +%{?build_rhel5:%define pgre84 1} +%{?build_el5:%define pgre84 1} +%if %{pgre84} +%define postgres_package postgresql84 +%define postgres_server_package postgresql84-server +%define postgres_devel_package postgresql84-devel +%else +%define postgres_package postgresql +%define postgres_server_package postgresql-server +%define postgres_devel_package postgresql-devel +%endif + +%define single_dir 1 +%{?single_dir_install:%define single_dir 1} + +# Installation Directory locations +%if %{single_dir} +%define _prefix /opt/bacula +%define _sbindir /opt/bacula/bin +%define _bindir /opt/bacula/bin +%define _subsysdir /opt/bacula/working +%define sqlite_bindir /opt/bacula/sqlite +%define _mandir /usr/share/man +%define docs_dir /opt/bacula/docs +%define archive_dir /opt/bacula/archive +%define sysconf_dir /opt/bacula/etc +%define script_dir /opt/bacula/scripts +%define working_dir /opt/bacula/working +%define pid_dir /opt/bacula/working +%define plugin_dir /opt/bacula/plugins +%define lib_dir /opt/bacula/lib +%define log_dir /opt/bacula/log +%else +%define _prefix /usr +%define _sbindir %_prefix/sbin +%define _bindir %_prefix/bin +%define _subsysdir /var/lock/subsys +%define sqlite_bindir %_libdir/bacula/sqlite +%define _mandir %_prefix/share/man +%define sysconf_dir /etc/bacula +%define script_dir %_libdir/bacula +%define working_dir /var/lib/bacula +%define pid_dir /var/run +%define plugin_dir %_libdir/bacula/plugins +%define lib_dir %_libdir/bacula/lib +%define log_dir %_libdir/bacula/log +%endif + +# Daemon user:group Don't change them unless you know what you are doing +%define director_daemon_user bacula +%define storage_daemon_user bacula +%define file_daemon_user root +%define daemon_group bacula +# group that has write access to tape devices, usually disk on Linux +%define storage_daemon_group disk + +%define depkgs ../depkgs + +# probems with mandriva build: +# nothing provides libbonobo2_0-devel, nothing provides libbonoboui2_0-devel + +#-------------------------------------------------------------------------- +# it should not be necessary to change anything below here for a release +# except for patch macros in the setup section +#-------------------------------------------------------------------------- + +%define base_package_name %{product} + +%{?contrib_packager:%define _packager %{contrib_packager}} + +Summary: Bacula - The Network Backup Solution +Name: %{base_package_name} +Version: %{_version} +Release: %{_release} +Group: System Environment/Daemons +License: AGPLv3 +BuildRoot: %{_tmppath}/%{name}-root +URL: http://www.bacula.org/ +Vendor: The Bacula Team +Packager: %{_packager} +Prefix: %{_prefix} + +# opensuse build service changes the release itself +# what happens if the release is not 1? DSB +Source0: http://www.prdownloads.sourceforge.net/bacula/depkgs-%{depkgs_version}.tar.gz +Source1: http://www.prdownloads.sourceforge.net/bacula/%{product}-%{version}.tar.gz +%if 0%{?opensuse_bs} +Source2: Release_Notes-%{version}-1.tar.gz +%else +Source2: Release_Notes-%{version}-%{release}.tar.gz +%endif + +# define the basic package description +%define blurb Bacula - The Leading Open Source Backup Solution. +%define blurb2 Bacula is a set of computer programs that permit you (or the system +%define blurb3 administrator) to manage backup, recovery, and verification of computer +%define blurb4 data across a network of computers of different kinds. In technical terms, +%define blurb5 it is a network client/server based backup program. Bacula is relatively +%define blurb6 easy to use and efficient, while offering many advanced storage management +%define blurb7 features that make it easy to find and recover lost or damaged files. +%define blurb8 Bacula source code has been released under the AGPL version 3 license. + +%define user_file /etc/passwd +%define group_file /etc/group + +# program locations +%define useradd /usr/sbin/useradd +%define groupadd /usr/sbin/groupadd +%define usermod /usr/sbin/usermod + +# platform defines - set one below or define the build_xxx on the command line +# RedHat builds +%define rh7 0 +%{?build_rh7:%define rh7 1} +%define rh8 0 +%{?build_rh8:%define rh8 1} +%define rh9 0 +%{?build_rh9:%define rh9 1} +# Fedora Core build +%define fc16 0 +%{?build_fc16:%define fc16 1} +%define fc17 0 +%{?build_fc17:%define fc17 1} +%define fc18 0 +%{?build_fc18:%define fc18 1} +# Whitebox Enterprise build +%define wb3 0 +%{?build_wb3:%define wb3 1} +# RedHat Enterprise builds +%define rhel3 0 +%{?build_rhel3:%define rhel3 1} +%{?build_rhel3:%define wb3 1} +%define rhel4 0 +%{?build_rhel4:%define rhel4 1} +%{?build_rhel4:%define fc3 1} +%{?build_el4:%define rhel4 1} +%{?build_el4:%define fc3 1} +%define rhel5 0 +%{?build_rhel5:%define rhel5 1} +%{?build_rhel5:%define fc6 1} +%{?build_el5:%define rhel5 1} +%{?build_el5:%define fc6 1} +%define rhel6 0 +%{?build_rhel6:%define rhel6 1} +%{?build_el6:%define rhel6 1} +# CentOS build +%define centos3 0 +%{?build_centos3:%define centos3 1} +%{?build_centos3:%define wb3 1} +%define centos4 0 +%{?build_centos4:%define centos4 1} +%{?build_centos4:%define fc3 1} +%define centos5 0 +%{?build_centos5:%define centos5 1} +%{?build_centos5:%define fc6 1} +%define centos6 0 +%{?build_centos6:%define centos6 1} +# SL build +%define sl3 0 +%{?build_sl3:%define sl3 1} +%{?build_sl3:%define wb3 1} +%define sl4 0 +%{?build_sl4:%define sl4 1} +%{?build_sl4:%define fc3 1} +%define sl5 0 +%{?build_sl5:%define sl5 1} +%{?build_sl5:%define fc6 1} +# SuSE build +%define su9 0 +%{?build_su9:%define su9 1} +%define su10 0 +%{?build_su10:%define su10 1} +%define su102 0 +%{?build_su102:%define su102 1} +%define su103 0 +%{?build_su103:%define su103 1} +%define su110 0 +%{?build_su110:%define su110 1} +%define su111 0 +%{?build_su111:%define su111 1} +%define su112 0 +%{?build_su112:%define su112 1} +# Mandrake builds +%define mdk 0 +%{?build_mdk:%define mdk 1} +%define mdv 0 +%{?build_mdv:%define mdv 1} +%{?build_mdv:%define mdk 1} + +# client only build +%define client_only 0 +%{?build_client_only:%define client_only 1} + +# Setup some short cuts +%define rhat 0 +%if %{rh7} || %{rh8} || %{rh9} +%define rhat 1 +%endif +%define fed 0 +%if %{fc16} || %{fc17} || %{fc18} +%define fed 1 +%endif +%define suse 0 +%if %{su9} || %{su10} || %{su102} || %{su103} || %{su110} || %{su111} || %{su112} +%define suse 1 +%endif +%define rhel 0 +%if %{rhel3} || %{rhel4} || %{rhel5} || %{rhel6} || %{centos3} || %{centos4} || %{centos5} || %{centos6} +%define rhel 1 +%endif +%define scil 0 +%if %{sl3} || %{sl4} || %{sl5} +%define scil 1 +%endif + + +# test for a platform definition +%if !%{rhat} && !%{rhel} && !%{fed} && !%{wb3} && !%{suse} && !%{mdk} && !%{scil} +%{error: You must specify a platform. Please examine the spec file.} +exit 1 +%endif + +# distribution-specific directory for logwatch +%if %{wb3} || %{rh7} || %{rh8} || %{rh9} +%define logwatch_dir /etc/log.d +%else +%define logwatch_dir /etc/logwatch +%endif + +# database defines +# set for database support desired or define the build_xxx on the command line +%define mysql 0 +%{?build_mysql:%define mysql 1} +%define sqlite 0 +%{?build_sqlite:%define sqlite 1} +%define postgresql 0 +%{?build_postgresql:%define postgresql 1} + +# test for a database definition +%if ! %{mysql} && ! %{sqlite} && ! %{postgresql} && ! %{client_only} +%{error: You must specify database support, by passing one of the following to rpmbuild:} +%{error: --define build_postgresql=1} +%{error: --define build_sqlite=1} +%{error: --define build_mysql=1} +exit 1 +%endif + +%if %{mysql} +%define db_backend mysql +%endif +%if %{sqlite} +%define db_backend sqlite3 +%endif +%if %{postgresql} +%define db_backend postgresql +%endif + +# 64 bit support +%define x86_64 0 +%{?build_x86_64:%define x86_64 1} + +# check what distribution we are +%if %{fc16} || %{fc17} || %{fc18} +%define _dist %(grep Fedora /etc/redhat-release) +%endif +%if %{centos5} || %{centos4} || %{centos3} +%define _dist %(grep CentOS /etc/redhat-release) +%endif +%if %{sl5} ||%{sl4} || %{sl3} +%define _dist %(grep 'Scientific Linux' /etc/redhat-release) +%endif +%if %{wb3} && ! %{rhel3} && ! %{centos3} && ! %{sl3} +%define _dist %(grep White /etc/whitebox-release) +%endif +%if %{suse} +%define _dist %(grep -i SuSE /etc/SuSE-release) +%endif +%if %{mdk} +%define _dist %(grep Mand /etc/mandrake-release) +%endif +%if %{rhat} || %{rhel} +%define _dist %(grep Red /etc/redhat-release) +%endif +%{?DISTNAME:%define _dist %{DISTNAME}} + +# only set Disribution if not in opensuse build service, as it sets it itself +%if ! 0%{?opensuse_bs} +Distribution: %{_dist} +%endif + +%if 0%{?opensuse_bs} && %{mysql} && %{suse} +# needed in opensuse_bs, as rpm is installed during build process +BuildRequires: libmysqlclient-devel +BuildRequires: mysql-client +BuildRequires: mysql +%endif +%if 0%{?opensuse_bs} && %{suse} && %{postgresql} +BuildRequires: %{postgres_package} +BuildRequires: %{postgres_server_package} +%endif +BuildRequires: openssl + +%if 0%{?opensuse_bs} && %{suse} +BuildRequires: pwdutils +BuildRequires: sysconfig +%endif + +# should we turn on python support +%define python 0 +%{?build_python:%define python 1} + +# should we enable tcp wrappers support +%define tcpwrappers 1 +%{?build_tcpwrappers:%define tcpwrappers 1} + +# do we need to patch for old postgresql version? +%define old_pgsql 0 +%{?build_old_pgsql:%define old_pgsql 1} + +# Mandriva somehow forces the manpage file extension to bz2 rather than gz +%if %{mdk} +%define manpage_ext bz2 +%else +%define manpage_ext gz +%endif + +# for client only build +%if %{client_only} +%define mysql 0 +%define postgresql 0 +%define sqlite 0 +%endif + +BuildRequires: gcc, gcc-c++, make, autoconf +BuildRequires: glibc, glibc-devel +BuildRequires: ncurses-devel, readline-devel +BuildRequires: libstdc++-devel, zlib-devel +BuildRequires: openssl-devel +BuildRequires: libacl-devel +BuildRequires: pkgconfig +%if ! %{rh7} +BuildRequires: libxml2-devel +%endif +%if %{python} +BuildRequires: python, python-devel +%{expand: %%define pyver %(python -c 'import sys;print(sys.version[0:3])')} +%endif + +%if %{rh7} +BuildRequires: libxml-devel +%endif +%if %{mdk} +BuildRequires: libstdc++-static-devel +BuildRequires: glibc-static-devel +%endif + +%if %{mysql} && ! %{suse} +BuildRequires: mysql-devel +%endif + +%if %{postgresql} && %{wb3} +BuildRequires: rh-postgresql-devel >= %{postgres_version} +%endif + +%if %{postgresql} && ! %{wb3} +BuildRequires: %{postgres_devel_package} >= %{postgres_version} +%endif + +%description +%{blurb} + +%{blurb2} +%{blurb3} +%{blurb4} +%{blurb5} +%{blurb6} +%{blurb7} +%{blurb8} + +%if %{mysql} +%package mysql +%endif +%if %{sqlite} +%package sqlite +%endif +%if %{postgresql} +%package postgresql +%endif + +Summary: Bacula - The Network Backup Solution +Group: System Environment/Daemons +Provides: bacula-dir, bacula-sd, bacula-fd, bacula-server +Conflicts: bacula-client + +Requires: ncurses, libstdc++, zlib, openssl +Requires: glibc, readline, %{name}-libs + +%if %{suse} +Conflicts: bacula +%endif + +%if %{mysql} +Requires: mysql +%endif + +%if %{postgresql} && %{wb3} +Requires: rh-postgresql >= 7 +%endif +%if %{postgresql} && ! %{wb3} +Requires: postgresql >= 7 +%endif + +%if %{mysql} +%description mysql +%endif +%if %{sqlite} +%description sqlite +%endif +%if %{postgresql} +%description postgresql +%endif + +%if %{python} +Requires: python >= %{pyver} +%endif + +%{blurb} + +%{blurb2} +%{blurb3} +%{blurb4} +%{blurb5} +%{blurb6} +%{blurb7} +%{blurb8} + +%if %{mysql} +This build requires MySQL to be installed separately as the catalog database. +%endif +%if %{postgresql} +This build requires PostgreSQL to be installed separately as the catalog database. +%endif +%if %{sqlite} +This build incorporates sqlite3 as the catalog database, statically compiled. +%endif +%if %{python} +This build includes python scripting support. +%endif +%if %{tcpwrappers} +This build includes tcp-wrappers support. +%endif + +%package client +Summary: Bacula - The Network Backup Solution +Group: System Environment/Daemons +Provides: bacula-fd +Conflicts: bacula-mysql +Conflicts: bacula-sqlite +Conflicts: bacula-postgresql + +%if %{suse} +Provides: %{product} +Provides: %{product}-libs +%endif + +Requires: libstdc++, zlib, openssl +Requires: glibc, readline, %{name}-libs + +%if %{python} +Requires: python >= %{pyver} +%endif + +%description client +%{blurb} + +%{blurb2} +%{blurb3} +%{blurb4} +%{blurb5} +%{blurb6} +%{blurb7} +%{blurb8} + +This is the File daemon (Client) only package. It includes the command line +console program. +%if %{python} +This build includes python scripting support. +%endif +%if %{tcpwrappers} +This build includes tcp-wrappers support. +%endif + +%if ! %{client_only} +%package updatedb + +Summary: Bacula - The Network Backup Solution +Group: System Environment/Daemons + +%description updatedb +%{blurb} + +%{blurb2} +%{blurb3} +%{blurb4} +%{blurb5} +%{blurb6} +%{blurb7} +%{blurb8} + +This package installs scripts for updating older versions of the bacula +database. +%endif + +%package libs + +Summary: Bacula - The Network Backup Solution +Group: System Environment/Daemons + +%description libs +%{blurb} + +%{blurb2} +%{blurb3} +%{blurb4} +%{blurb5} +%{blurb6} +%{blurb7} +%{blurb8} + +This package installs the shared libraries used by many bacula programs. + +# Must explicitly enable debug pkg on SuSE +# but not in opensuse_bs +#%if %{suse} && ! 0%{?opensuse_bs} +#%debug_package +#%endif + +%prep +%setup -T -b 0 -n depkgs +%setup -T -b 1 -n %{product}-%{version} +%setup -T -D -b 2 -n %{product}-%{version} +# extract depkgs + + +%build + +%if %{suse} +#export LDFLAGS="${LDFLAGS} -L/usr/lib/termcap -L/usr/lib64/termcap" +%endif + +# You can use a cache for depkgs +# tar xfz depkgs*gz -C ~/ +# cd ~/depkgs +# touch %{depkgs_version} # depkgs version + +if [ -f $HOME/depkgs/%{depkgs_version} ]; then + rm -rf %{depkgs} + ln -s $HOME/depkgs %{depkgs} +fi + +cwd=${PWD} +%if %{sqlite} +cd %{depkgs} +make sqlite3 +cd ${cwd} +%endif + +cd %{depkgs} +make lzo +export LDFLAGS="${LDFLAGS} -L${PWD}/lzo/lib" +export CPPFLAGS="${CPPFLAGS} -I${PWD}/lzo/include" +cd ${cwd} + +# hostname is the build hostname, so use XXX_HOSTNAME_XXX for Address parameter +sed -i s/hostname/basename/ src/console/bconsole.conf.in src/dird/bacula-dir.conf.in src/qt-console/bat.conf.in + +%if %{sqlite} +# patches for the bundled sqlite scripts +sed -i s:.SQLITE_BINDIR.:/opt/bacula/sqlite: src/cats/*_sqlite3_*.in + +# patch the bacula-dir init script to remove sqlite service +%if %{suse} +sed -i 's/network .DB_TYPE./network/' platforms/suse/bacula-dir.in +%endif +%endif + +# 64 bit lib location hacks +# as of 1.39.18 it should not be necessary to enable x86_64 as configure is +# reported to be fixed to properly detect lib locations. +%if %{x86_64} +export LDFLAGS="${LDFLAGS} -L/usr/lib64" +%endif +%if %{mysql} && %{x86_64} +export LDFLAGS="${LDFLAGS} -L/usr/lib64/mysql" +%endif +%if %{python} && %{x86_64} +export LDFLAGS="${LDFLAGS} -L/usr/lib64/python%{pyver}" +%endif + +export BACULA="Bacula" + +# Main Bacula configuration +%configure \ + --prefix=%{_prefix} \ + --sbindir=%{_sbindir} \ + --sysconfdir=%{sysconf_dir} \ + --mandir=%{_mandir} \ + --with-scriptdir=%{script_dir} \ + --with-working-dir=%{working_dir} \ + --with-plugindir=%{plugin_dir} \ + --with-logdir=%{log_dir} \ + --with-pid-dir=%{pid_dir} \ + --with-subsys-dir=%{_subsysdir} \ + --enable-smartalloc \ + --disable-bwx-console \ + --disable-tray-monitor \ + --disable-conio \ + --enable-readline \ +%if %{mysql} + --with-mysql \ +%endif +%if %{sqlite} + --with-sqlite3=${cwd}/%{depkgs}/sqlite3 \ +%endif +%if %{postgresql} + --with-postgresql \ +%endif + --disable-bat \ +%if %{python} + --with-python \ +%endif +%if %{client_only} + --enable-client-only \ +%endif +%if %{rh7} || %{rh8} || %{rh9} + --disable-batch-insert \ +%endif + --with-tcp-wrappers \ + --with-dir-user=%{director_daemon_user} \ + --with-dir-group=%{daemon_group} \ + --with-sd-user=%{storage_daemon_user} \ + --with-sd-group=%{storage_daemon_group} \ + --with-fd-user=%{file_daemon_user} \ + --with-fd-group=%{daemon_group} \ + --with-basename="XXX_HOSTNAME_XXX" \ + --with-hostname="XXX_HOSTNAME_XXX" \ + --with-dir-password="XXX_REPLACE_WITH_DIRECTOR_PASSWORD_XXX" \ + --with-fd-password="XXX_REPLACE_WITH_CLIENT_PASSWORD_XXX" \ + --with-sd-password="XXX_REPLACE_WITH_STORAGE_PASSWORD_XXX" \ + --with-mon-dir-password="XXX_REPLACE_WITH_DIRECTOR_MONITOR_PASSWORD_XXX" \ + --with-mon-fd-password="XXX_REPLACE_WITH_CLIENT_MONITOR_PASSWORD_XXX" \ + --with-mon-sd-password="XXX_REPLACE_WITH_STORAGE_MONITOR_PASSWORD_XXX" \ + --with-openssl + +make -j3 + +%install + +cwd=${PWD} +[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "$RPM_BUILD_ROOT" +mkdir -p $RPM_BUILD_ROOT/etc/init.d +mkdir -p $RPM_BUILD_ROOT/etc/logrotate.d +mkdir -p $RPM_BUILD_ROOT%{logwatch_dir}/conf/logfiles +mkdir -p $RPM_BUILD_ROOT%{logwatch_dir}/conf/services +mkdir -p $RPM_BUILD_ROOT%{logwatch_dir}/scripts/services +mkdir -p $RPM_BUILD_ROOT%{logwatch_dir}/scripts/shared +mkdir -p $RPM_BUILD_ROOT%{script_dir}/updatedb + +mkdir -p $RPM_BUILD_ROOT/etc/pam.d +mkdir -p $RPM_BUILD_ROOT%{_sbindir} + +%if %{sqlite} +mkdir -p $RPM_BUILD_ROOT%{sqlite_bindir} +%endif + +make DESTDIR=$RPM_BUILD_ROOT install + +# Remove docs for programs that are depreciated +rm -f $RPM_BUILD_ROOT%{_mandir}/man1/bacula-bgnome-console.1.%{manpage_ext} +rm -f $RPM_BUILD_ROOT%{_mandir}/man1/bacula-bwxconsole.1.%{manpage_ext} +rm -f $RPM_BUILD_ROOT%{_mandir}/man1/bacula-tray-monitor.1.%{manpage_ext} +rm -f $RPM_BUILD_ROOT%{script_dir}/gconsole +# Storage-ctl packaged in shstore rpm +rm -f $RPM_BUILD_ROOT%{script_dir}/storage-ctl +rm -f $RPM_BUILD_ROOT%{script_dir}/storage-ctl.conf + +# fixme - make installs the mysql scripts for sqlite build +%if %{sqlite} +rm -f $RPM_BUILD_ROOT%{script_dir}/startmysql +rm -f $RPM_BUILD_ROOT%{script_dir}/stopmysql +rm -f $RPM_BUILD_ROOT%{script_dir}/grant_mysql_privileges +%endif + +# fixme - make installs the mysql scripts for postgresql build +%if %{postgresql} +rm -f $RPM_BUILD_ROOT%{script_dir}/startmysql +rm -f $RPM_BUILD_ROOT%{script_dir}/stopmysql +%endif + +# install the init scripts +%if %{suse} +cp -p platforms/suse/bacula-dir $RPM_BUILD_ROOT/etc/init.d/bacula-dir +cp -p platforms/suse/bacula-fd $RPM_BUILD_ROOT/etc/init.d/bacula-fd +cp -p platforms/suse/bacula-sd $RPM_BUILD_ROOT/etc/init.d/bacula-sd +%endif +%if %{mdk} +cp -p platforms/mandrake/bacula-dir $RPM_BUILD_ROOT/etc/init.d/bacula-dir +cp -p platforms/mandrake/bacula-fd $RPM_BUILD_ROOT/etc/init.d/bacula-fd +cp -p platforms/mandrake/bacula-sd $RPM_BUILD_ROOT/etc/init.d/bacula-sd +%endif +%if ! %{suse} && ! %{mdk} +cp -p platforms/redhat/bacula-dir $RPM_BUILD_ROOT/etc/init.d/bacula-dir +cp -p platforms/redhat/bacula-fd $RPM_BUILD_ROOT/etc/init.d/bacula-fd +cp -p platforms/redhat/bacula-sd $RPM_BUILD_ROOT/etc/init.d/bacula-sd +%endif +chmod 0754 $RPM_BUILD_ROOT/etc/init.d/* +%if %{client_only} +rm -f $RPM_BUILD_ROOT/etc/init.d/bacula-dir +rm -f $RPM_BUILD_ROOT/etc/init.d/bacula-sd +%endif + +# install sqlite +%if %{sqlite} +cp -p %{depkgs}/sqlite3/sqlite3 $RPM_BUILD_ROOT%{sqlite_bindir}/sqlite3 +cp -p %{depkgs}/sqlite3/sqlite3.h $RPM_BUILD_ROOT%{sqlite_bindir}/sqlite3.h +cp -p %{depkgs}/sqlite3/libsqlite3.a $RPM_BUILD_ROOT%{sqlite_bindir}/libsqlite3.a +%endif + + +# install the logrotate file +cp -p scripts/logrotate $RPM_BUILD_ROOT/etc/logrotate.d/bacula + +# install the updatedb scripts +cp -p updatedb/* $RPM_BUILD_ROOT%{script_dir}/updatedb/ + +# install specific scripts + +%if ! %{client_only} +# install the sample-query.sql file +cp -p examples/sample-query.sql $RPM_BUILD_ROOT%{script_dir}/sample-query.sql + +# install the logwatch scripts +cp -p scripts/logwatch/bacula $RPM_BUILD_ROOT%{logwatch_dir}/scripts/services/bacula +cp -p scripts/logwatch/applybaculadate $RPM_BUILD_ROOT%{logwatch_dir}/scripts/shared/applybaculadate +cp -p scripts/logwatch/logfile.bacula.conf $RPM_BUILD_ROOT%{logwatch_dir}/conf/logfiles/bacula.conf +cp -p scripts/logwatch/services.bacula.conf $RPM_BUILD_ROOT%{logwatch_dir}/conf/services/bacula.conf +chmod 755 $RPM_BUILD_ROOT%{logwatch_dir}/scripts/services/bacula +chmod 755 $RPM_BUILD_ROOT%{logwatch_dir}/scripts/shared/applybaculadate +chmod 644 $RPM_BUILD_ROOT%{logwatch_dir}/conf/logfiles/bacula.conf +chmod 644 $RPM_BUILD_ROOT%{logwatch_dir}/conf/services/bacula.conf +%endif + +# now clean up permissions that are left broken by the install +chmod o-rwx $RPM_BUILD_ROOT%{working_dir} + +# fix me - building enable-client-only installs files not included in bacula-client package +%if %{client_only} +# Program docs not installed on client +rm -f $RPM_BUILD_ROOT%{_mandir}/man8/bacula-dir.8.%{manpage_ext} +rm -f $RPM_BUILD_ROOT%{_mandir}/man8/bacula-sd.8.%{manpage_ext} +rm -f $RPM_BUILD_ROOT%{_mandir}/man8/bcopy.8.%{manpage_ext} +rm -f $RPM_BUILD_ROOT%{_mandir}/man8/bextract.8.%{manpage_ext} +rm -f $RPM_BUILD_ROOT%{_mandir}/man8/bls.8.%{manpage_ext} +rm -f $RPM_BUILD_ROOT%{_mandir}/man8/bscan.8.%{manpage_ext} +rm -f $RPM_BUILD_ROOT%{_mandir}/man8/btape.8.%{manpage_ext} +rm -f $RPM_BUILD_ROOT%{_mandir}/man8/dbcheck.8.%{manpage_ext} +rm -f $RPM_BUILD_ROOT%{_mandir}/man8/bregex.8.%{manpage_ext} +rm -f $RPM_BUILD_ROOT%{_mandir}/man8/bwild.8.%{manpage_ext} +rm -f $RPM_BUILD_ROOT%{_mandir}/man1/bsmtp.1.%{manpage_ext} + +rm -f $RPM_BUILD_ROOT%{script_dir}/bacula +rm -f $RPM_BUILD_ROOT%{script_dir}/bacula_config +rm -f $RPM_BUILD_ROOT%{script_dir}/bacula-ctl-dir +rm -f $RPM_BUILD_ROOT%{script_dir}/bacula-ctl-sd +rm -f $RPM_BUILD_ROOT%{script_dir}/disk-changer +rm -f $RPM_BUILD_ROOT%{script_dir}/dvd-handler +rm -f $RPM_BUILD_ROOT%{script_dir}/mtx-changer +rm -f $RPM_BUILD_ROOT%{script_dir}/startmysql +rm -f $RPM_BUILD_ROOT%{script_dir}/stopmysql +rm -rf $RPM_BUILD_ROOT%{script_dir}/updatedb +rm -f $RPM_BUILD_ROOT%{script_dir}/bconsole +rm -f $RPM_BUILD_ROOT%{script_dir}/mtx-changer.conf +rm -f $RPM_BUILD_ROOT%{_sbindir}/bacula +%endif + +%clean +[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "$RPM_BUILD_ROOT" +%if 0%{?opensuse_bs} +rm -f $RPM_BUILD_DIR/Release_Notes-%{version}-1.txt +%else +rm -f $RPM_BUILD_DIR/Release_Notes-%{version}-%{release}.txt +%endif + + +%if %{mysql} +# MySQL specific files +%files mysql +%defattr(-, root, root) +%attr(-, root, %{daemon_group}) %{script_dir}/create_mysql_database +%attr(-, root, %{daemon_group}) %{script_dir}/drop_mysql_database +%attr(-, root, %{daemon_group}) %{script_dir}/make_mysql_tables +%attr(-, root, %{daemon_group}) %{script_dir}/drop_mysql_tables +%attr(-, root, %{daemon_group}) %{script_dir}/update_mysql_tables +%attr(-, root, %{daemon_group}) %{script_dir}/grant_mysql_privileges +%{_libdir}/libbaccats* +%{_libdir}/libbacsql* +%endif + +%if %{sqlite} +%files sqlite +%defattr(-,root,root) +%attr(-, root, %{daemon_group}) %{script_dir}/create_sqlite3_database +%attr(-, root, %{daemon_group}) %{script_dir}/drop_sqlite3_database +%attr(-, root, %{daemon_group}) %{script_dir}/grant_sqlite3_privileges +%attr(-, root, %{daemon_group}) %{script_dir}/make_sqlite3_tables +%attr(-, root, %{daemon_group}) %{script_dir}/drop_sqlite3_tables +%attr(-, root, %{daemon_group}) %{script_dir}/update_sqlite3_tables +%{sqlite_bindir}/libsqlite3.a +%{sqlite_bindir}/sqlite3.h +%{sqlite_bindir}/sqlite3 +%{_libdir}/libbaccats* +%{_libdir}/libbacsql* +%endif + + + +%if %{postgresql} +%files postgresql +%defattr(-,root,root) +%attr(755, root, %{daemon_group}) %{script_dir}/create_postgresql_database +%attr(755, root, %{daemon_group}) %{script_dir}/drop_postgresql_database +%attr(755, root, %{daemon_group}) %{script_dir}/make_postgresql_tables +%attr(755, root, %{daemon_group}) %{script_dir}/drop_postgresql_tables +%attr(755, root, %{daemon_group}) %{script_dir}/update_postgresql_tables +%attr(755, root, %{daemon_group}) %{script_dir}/grant_postgresql_privileges +%{_libdir}/libbaccats* +%{_libdir}/libbacsql* +%endif + +# The rest is DB backend independent + +%if ! %{client_only} +%attr(-, root, %{daemon_group}) %dir %{script_dir} +%attr(-, root, %{daemon_group}) %dir %{sysconf_dir} +#%attr(-, %{director_daemon_user}, %{daemon_group}) %dir %{log_dir} +%attr(-, root, %{daemon_group}) %{script_dir}/bacula +%attr(-, root, %{daemon_group}) %{script_dir}/bacula_config +%attr(-, root, %{daemon_group}) %{script_dir}/bconsole +%attr(-, root, %{daemon_group}) %{script_dir}/create_bacula_database +%attr(755, root, %{daemon_group}) %{script_dir}/drop_bacula_database +%attr(755, root, %{daemon_group}) %{script_dir}/grant_bacula_privileges +%attr(755, root, %{daemon_group}) %{script_dir}/make_bacula_tables +%attr(755, root, %{daemon_group}) %{script_dir}/drop_bacula_tables +%attr(755, root, %{daemon_group}) %{script_dir}/update_bacula_tables +%attr(-, root, %{daemon_group}) %{script_dir}/make_catalog_backup +%attr(-, root, %{daemon_group}) %{script_dir}/make_catalog_backup.pl +%attr(-, root, %{daemon_group}) %{script_dir}/delete_catalog_backup +%attr(-, root, %{daemon_group}) %{script_dir}/btraceback.dbx +%attr(-, root, %{daemon_group}) %{script_dir}/btraceback.gdb +%attr(-, root, %{daemon_group}) %{script_dir}/btraceback.mdb +%attr(-, root, %{daemon_group}) %{script_dir}/disk-changer +%attr(-, root, %{daemon_group}) %{script_dir}/bacula-ctl-dir +%attr(-, root, %{daemon_group}) %{script_dir}/bacula-ctl-fd +%attr(-, root, %{daemon_group}) %{script_dir}/bacula-ctl-sd +%attr(-, root, %{daemon_group}) %{plugin_dir}/bpipe-fd.so +%attr(-, root, %{daemon_group}) /etc/init.d/bacula-dir +%attr(-, root, %{daemon_group}) /etc/init.d/bacula-fd +%attr(-, root, %{daemon_group}) %{_sbindir}/dbcheck +%attr(-, root, %{storage_daemon_group}) %{script_dir}/dvd-handler +%attr(-, root, %{storage_daemon_group}) /etc/init.d/bacula-sd +%attr(-, root, %{storage_daemon_group}) %{script_dir}/mtx-changer +%attr(-, root, %{storage_daemon_group}) %config(noreplace) %{script_dir}/mtx-changer.conf + +/etc/logrotate.d/bacula +%{logwatch_dir}/scripts/services/bacula +%{logwatch_dir}/scripts/shared/applybaculadate +%attr(-, root, %{daemon_group}) %config(noreplace) %{sysconf_dir}/bacula-dir.conf +%attr(-, root, %{daemon_group}) %config(noreplace) %{sysconf_dir}/bacula-fd.conf +%attr(-, root, %{storage_daemon_group}) %config(noreplace) %{sysconf_dir}/bacula-sd.conf +%attr(-, root, %{daemon_group}) %config(noreplace) %{sysconf_dir}/bconsole.conf +%attr(-, root, %{daemon_group}) %config(noreplace) %{logwatch_dir}/conf/logfiles/bacula.conf +%attr(-, root, %{daemon_group}) %config(noreplace) %{logwatch_dir}/conf/services/bacula.conf +%attr(-, root, %{daemon_group}) %{script_dir}/sample-query.sql + +%attr(-, %{storage_daemon_user}, %{daemon_group}) %dir %{working_dir} + +%attr(-, root, %{daemon_group}) %{_sbindir}/bacula-dir +%attr(-, root, %{daemon_group}) %{_sbindir}/bacula-sd +%attr(-, root, %{daemon_group}) %{_sbindir}/btraceback +%attr(-, root, %{daemon_group}) %{_sbindir}/bconsole +%attr(-, root, %{daemon_group}) %{_sbindir}/bsmtp +%attr(-, root, %{daemon_group}) %{_sbindir}/bscan +%attr(-, root, %{daemon_group}) %{_sbindir}/btape + +%{_sbindir}/bacula-fd +%{_sbindir}/bacula +%{_sbindir}/bcopy +%{_sbindir}/bextract +%{_sbindir}/bls +%{_sbindir}/bregex +%{_sbindir}/bwild +%{_mandir}/man8/bacula-fd.8.%{manpage_ext} +%{_mandir}/man8/bacula-dir.8.%{manpage_ext} +%{_mandir}/man8/bacula-sd.8.%{manpage_ext} +%{_mandir}/man8/bacula.8.%{manpage_ext} +%{_mandir}/man8/bconsole.8.%{manpage_ext} +%{_mandir}/man8/bcopy.8.%{manpage_ext} +%{_mandir}/man8/bextract.8.%{manpage_ext} +%{_mandir}/man8/bls.8.%{manpage_ext} +%{_mandir}/man8/bscan.8.%{manpage_ext} +%{_mandir}/man8/btape.8.%{manpage_ext} +%{_mandir}/man8/btraceback.8.%{manpage_ext} +%{_mandir}/man8/dbcheck.8.%{manpage_ext} +%{_mandir}/man8/bregex.8.%{manpage_ext} +%{_mandir}/man8/bwild.8.%{manpage_ext} +%{_mandir}/man1/bsmtp.1.%{manpage_ext} +%{_mandir}/man1/bat.1.%{manpage_ext} +%_prefix/share/doc/* + +# opensuse build service changes the release itself +%if 0%{?opensuse_bs} +%doc ../Release_Notes-%{version}-1.txt +%else +%doc ../Release_Notes-%{version}-%{release}.txt +%endif +%endif + +%if %{mysql} +%pre mysql +# test for bacula database older than version 13 +# note: this ASSUMES no password has been set for bacula database +DB_VER=`mysql 2>/dev/null bacula -e 'select * from Version;'|tail -n 1` +%endif + +%if %{sqlite} +%pre sqlite +# are we upgrading from sqlite to sqlite3? +if [ -s %{working_dir}/bacula.db ] && [ -s %{sqlite_bindir}/sqlite ];then + echo "This version of bacula-sqlite involves an upgrade to sqlite3." + echo "Your catalog database file is not compatible with sqlite3, thus" + echo "you will need to dump the data, delete the old file, and re-run" + echo "this rpm upgrade." + echo "" + echo "Backing up your current database..." + echo ".dump" | %{sqlite_bindir}/sqlite %{working_dir}/bacula.db > %{working_dir}/bacula_backup.sql + mv %{working_dir}/bacula.db %{working_dir}/bacula.db.old + echo "Your catalog data has been saved in %{working_dir}/bacula_backup.sql and your" + echo "catalog file has been renamed %{working_dir}/bacula.db.old." + echo "" + echo "Please re-run this rpm package upgrade." + echo "After the upgrade is complete, restore your catalog" + echo "with the following commands:" + echo "%{script_dir}/drop_sqlite3_tables" + echo "cd %{working_dir}" + echo "%{sqlite_bindir}/sqlite3 $* bacula.db < bacula_backup.sql" + echo "chown bacula.bacula bacula.db" + exit 1 +fi +# test for bacula database older than version 12 and sqlite3 +if [ -s %{working_dir}/bacula.db ] && [ -s %{sqlite_bindir}/sqlite3 ];then + DB_VER=`echo "select * from Version;" | %{sqlite_bindir}/sqlite3 2>/dev/null %{working_dir}/bacula.db | tail -n 1` +%endif + +%if %{postgresql} +%pre postgresql +DB_VER=`echo 'SELECT * FROM Version LIMIT 1;' | su - postgres -c 'psql bacula' 2>/dev/null | tail -3 | head -1` +%endif + +%if ! %{client_only} +if [ -n "$DB_VER" ] && [ "$DB_VER" -lt "12" ]; then + echo "This bacula upgrade will update a bacula database from version 12 to 1014." + echo "You appear to be running database version $DB_VER. You must first update" + echo "your database to version 12 and then install this upgrade. The alternative" + echo "is to use %{script_dir}/drop_%{db_backend}_tables to delete all your your current" + echo "catalog information, then do the upgrade. Information on updating a" + echo "database older than version 12 can be found in the release notes." + exit 1 +fi +%endif + +%if %{sqlite} +fi +%endif + +%if ! %{client_only} +# check for and copy %{sysconf_dir}/console.conf to bconsole.conf +if [ -s %{sysconf_dir}/console.conf ];then + cp -p %{sysconf_dir}/console.conf %{sysconf_dir}/bconsole.conf +fi + +# create the daemon users and groups +# first create the groups if they don't exist +HAVE_BACULA=`grep %{daemon_group} %{group_file} 2>/dev/null` +if [ -z "$HAVE_BACULA" ]; then + %{groupadd} -r %{daemon_group} > /dev/null 2>&1 + echo "The group %{daemon_group} has been added to %{group_file}." + echo "See the manual chapter \"Running Bacula\" for details." +fi +HAVE_BACULA=`grep %{storage_daemon_group} %{group_file} 2>/dev/null` +if [ -z "$HAVE_BACULA" ]; then + %{groupadd} -r %{storage_daemon_group} > /dev/null 2>&1 + echo "The group %{storage_daemon_group} has been added to %{group_file}." + echo "See the manual chapter \"Running Bacula\" for details." +fi +# now create the users if they do not exist +# we do not use the -g option allowing the primary group to be set to system default +# this will be a unique group on redhat type systems or the group users on some systems +HAVE_BACULA=`grep %{storage_daemon_user} %{user_file} 2>/dev/null` +if [ -z "$HAVE_BACULA" ]; then + %{useradd} -r -c "Bacula" -d %{working_dir} -g %{storage_daemon_group} -M -s /sbin/nologin %{storage_daemon_user} > /dev/null 2>&1 + echo "The user %{storage_daemon_user} has been added to %{user_file}." + echo "See the manual chapter \"Running Bacula\" for details." +fi +HAVE_BACULA=`grep %{director_daemon_user} %{user_file} 2>/dev/null` +if [ -z "$HAVE_BACULA" ]; then + %{useradd} -r -c "Bacula" -d %{working_dir} -g %{daemon_group} -M -s /sbin/nologin %{director_daemon_user} > /dev/null 2>&1 + echo "The user %{director_daemon_user} has been added to %{user_file}." + echo "See the manual chapter \"Running Bacula\" for details." +fi +HAVE_BACULA=`grep %{file_daemon_user} %{user_file} 2>/dev/null` +if [ -z "$HAVE_BACULA" ]; then + %{useradd} -r -c "Bacula" -d %{working_dir} -g %{daemon_group} -M -s /sbin/nologin %{file_daemon_user} > /dev/null 2>&1 + echo "The user %{file_daemon_user} has been added to %{user_file}." + echo "See the manual chapter \"Running Bacula\" for details." +fi +# now we add the supplementary groups, this is ok to call even if the users already exist +# we only do this if the user is NOT root +IS_ROOT=%{director_daemon_user} +if [ "$IS_ROOT" != "root" ]; then +%{usermod} -G %{daemon_group} %{director_daemon_user} +fi +IS_ROOT=%{storage_daemon_user} +if [ "$IS_ROOT" != "root" ]; then +%{usermod} -G %{daemon_group},%{storage_daemon_group} %{storage_daemon_user} +fi +IS_ROOT=%{file_daemon_user} +if [ "$IS_ROOT" != "root" ]; then +%{usermod} -G %{daemon_group} %{file_daemon_user} +fi +%endif + +%if %{mysql} +%post mysql +%endif +%if %{sqlite} +%post sqlite +%endif +%if %{postgresql} +%post postgresql +%endif +%if ! %{client_only} +# add our links +if [ "$1" -ge 1 ] ; then +%if %{suse} && %{mysql} + /sbin/chkconfig --add mysql +%endif +%if %{suse} && %{postgresql} + /sbin/chkconfig --add postgresql +%endif + /sbin/chkconfig --add bacula-dir + /sbin/chkconfig --add bacula-fd + /sbin/chkconfig --add bacula-sd +fi +%endif + +if [ -d %{sysconf_dir} ]; then + cd %{sysconf_dir} + if [ ! -f .rpm.sed ]; then + (umask 0177 + echo "# This file is used to ensure that all passwords will" > .rpm.sed + echo "# match between configuration files" >> .rpm.sed + ) + for string in XXX_REPLACE_WITH_DIRECTOR_PASSWORD_XXX XXX_REPLACE_WITH_CLIENT_PASSWORD_XXX XXX_REPLACE_WITH_STORAGE_PASSWORD_XXX XXX_REPLACE_WITH_DIRECTOR_MONITOR_PASSWORD_XXX XXX_REPLACE_WITH_CLIENT_MONITOR_PASSWORD_XXX XXX_REPLACE_WITH_STORAGE_MONITOR_PASSWORD_XXX; do + pass=`openssl rand -base64 33` + echo "s@${string}@${pass}@g" >> .rpm.sed + done + fi + host=`hostname -s` + for file in *.conf; do + sed -f .rpm.sed $file > $file.new + sed "s@XXX_HOSTNAME_XXX@${host}@g" $file.new > $file + rm -f $file.new + done +fi + + +%if %{mysql} + +#check, if mysql can be called successfully at all +if mysql 2>/dev/null bacula -e 'select * from Version;' ; then + + # test for an existing database + # note: this ASSUMES no password has been set for bacula database + DB_VER=`mysql 2>/dev/null bacula -e 'select * from Version;'|tail -n 1` + + # grant privileges and create tables if they do not exist + if [ -z "$DB_VER" ]; then + echo "Hmm, it doesn't look like you have an existing database." + echo "Granting privileges for MySQL user bacula..." + %{script_dir}/grant_mysql_privileges + echo "Creating MySQL bacula database..." + %{script_dir}/create_mysql_database + echo "Creating bacula tables..." + %{script_dir}/make_mysql_tables + + elif [ "$DB_VER" -ge "12" -a "$DB_VER" -lt "1015" ]; then + echo "This release requires an upgrade to your bacula database." + echo "Backing up your current database..." + mysqldump -f --opt bacula | bzip2 > %{working_dir}/bacula_backup.sql.bz2 + echo "Upgrading bacula database ..." + %{script_dir}/update_mysql_tables + echo "If bacula works correctly you can remove the backup file %{working_dir}/bacula_backup.sql.bz2" + + fi +fi +%endif + +%if %{sqlite} +# test for an existing database +if [ -s %{working_dir}/bacula.db ]; then + DB_VER=`echo "select * from Version;" | %{sqlite_bindir}/sqlite3 2>/dev/null %{working_dir}/bacula.db | tail -n 1` + # check to see if we need to upgrade a 3.x database + if [ "$DB_VER" -le "13" ] && [ "$DB_VER" -ge "12" ]; then + echo "This release requires an upgrade to your bacula database." + echo "Backing up your current database..." + echo ".dump" | %{sqlite_bindir}/sqlite3 %{working_dir}/bacula.db | bzip2 > %{working_dir}/bacula_backup.sql.bz2 + echo "Upgrading bacula database ..." + %{script_dir}/update_sqlite3_tables + echo "If bacula works correctly you can remove the backup file %{working_dir}/bacula_backup.sql.bz2" + fi +else + # create the database and tables + echo "Hmm, doesn't look like you have an existing database." + echo "Creating SQLite database..." + %{script_dir}/create_sqlite3_database + echo "Creating the SQLite tables..." + %{script_dir}/make_sqlite3_tables + chown %{director_daemon_user}.%{daemon_group} %{working_dir}/bacula.db +fi +%endif + +%if %{postgresql} +# check if psql can be called successfully at all +if echo 'select * from Version;' | su - postgres -c 'psql bacula' 2>/dev/null; then + + # test for an existing database + # note: this ASSUMES no password has been set for bacula database + DB_VER=`echo 'SELECT * FROM Version LIMIT 1;' | su - postgres -c 'psql bacula' 2>/dev/null | tail -3 | head -1` + + # grant privileges and create tables if they do not exist + if [ -z "$DB_VER" ]; then + echo "Hmm, doesn't look like you have an existing database." + echo "Creating PostgreSQL bacula database..." + su - postgres -c %{script_dir}/create_postgresql_database + echo "Creating bacula tables..." + su - postgres -c %{script_dir}/make_postgresql_tables + echo "Granting privileges for PostgreSQL user bacula..." + su - postgres -c %{script_dir}/grant_postgresql_privileges + + elif [ "$DB_VER" -ge "12" -a "$DB_VER" -lt "1015" ]; then + echo "This release requires an upgrade to your bacula database." + echo "Backing up your current database..." + su - postgres -c 'pg_dump bacula' | bzip2 > %{working_dir}/bacula_backup.sql.bz2 + echo "Upgrading bacula database ..." + su - postgres -c %{script_dir}/update_postgresql_tables + echo "If bacula works correctly you can remove the backup file %{working_dir}/bacula_backup.sql.bz2" + echo "Granting privileges for PostgreSQL user bacula..." + su - postgres -c %{script_dir}/grant_postgresql_privileges + + fi +fi +%endif + +%if ! %{client_only} +if [ -d %{sysconf_dir} ]; then + cd %{sysconf_dir} + if [ ! -f .rpm.sed ]; then + (umask 0177 + echo "# This file is used to ensure that all passwords will" > .rpm.sed + echo "# match between configuration files" >> .rpm.sed + ) + for string in XXX_REPLACE_WITH_DIRECTOR_PASSWORD_XXX XXX_REPLACE_WITH_CLIENT_PASSWORD_XXX XXX_REPLACE_WITH_STORAGE_PASSWORD_XXX XXX_REPLACE_WITH_DIRECTOR_MONITOR_PASSWORD_XXX XXX_REPLACE_WITH_CLIENT_MONITOR_PASSWORD_XXX XXX_REPLACE_WITH_STORAGE_MONITOR_PASSWORD_XXX; do + pass=`openssl rand -base64 33` + echo "s@${string}@${pass}@g" >> .rpm.sed + done + fi + host=`hostname -s` + for file in *.conf; do + sed -f .rpm.sed $file > $file.new + sed "s@XXX_HOSTNAME_XXX@${host}@g" $file.new > $file + rm -f $file.new + done +fi +%endif + + +%if %{mysql} +%preun mysql +%endif +%if %{sqlite} +%preun sqlite +%endif +%if %{postgresql} +%preun postgresql +%endif + +%if ! %{client_only} +# delete our links +if [ $1 = 0 ]; then + /sbin/chkconfig --del bacula-dir + /sbin/chkconfig --del bacula-fd + /sbin/chkconfig --del bacula-sd +fi +%endif + +%files client +%defattr(-,root,root) +%attr(-, root, %{daemon_group}) %dir %{script_dir} +%attr(-, root, %{daemon_group}) %dir %{plugin_dir} +#%attr(-, root, %{daemon_group}) %dir %{log_dir} +%attr(-, root, %{daemon_group}) %dir %{sysconf_dir} +%{script_dir}/bacula-ctl-fd +/etc/init.d/bacula-fd + +/etc/logrotate.d/bacula + +%attr(-, root, %{daemon_group}) %config(noreplace) %{sysconf_dir}/bacula-fd.conf +%attr(-, root, %{daemon_group}) %config(noreplace) %{sysconf_dir}/bconsole.conf +%attr(-, root, %{daemon_group}) %dir %{working_dir} + +%{_sbindir}/bacula-fd +%{_sbindir}/btraceback +%attr(-, root, %{daemon_group}) %{script_dir}/btraceback.gdb +%attr(-, root, %{daemon_group}) %{script_dir}/btraceback.dbx +%attr(-, root, %{daemon_group}) %{script_dir}/btraceback.mdb +%attr(-, root, %{daemon_group}) %{plugin_dir}/bpipe-fd.so +%{_sbindir}/bconsole +%{_mandir}/man8/bacula-fd.8.%{manpage_ext} +%{_mandir}/man8/bacula.8.%{manpage_ext} +%{_mandir}/man8/bconsole.8.%{manpage_ext} +%{_mandir}/man8/btraceback.8.%{manpage_ext} +%{_mandir}/man1/bat.1.%{manpage_ext} +%_prefix/share/doc/* + +%pre client +# create the daemon group and user +HAVE_BACULA=`grep %{daemon_group} %{group_file} 2>/dev/null` +if [ -z "$HAVE_BACULA" ]; then + %{groupadd} -r %{daemon_group} > /dev/null 2>&1 + echo "The group %{daemon_group} has been added to %{group_file}." + echo "See the manual chapter \"Running Bacula\" for details." +fi +# we do not use the -g option allowing the primary group to be set to system default +# this will be a unique group on redhat type systems or the group users on some systems +HAVE_BACULA=`grep %{file_daemon_user} %{user_file} 2>/dev/null` +if [ -z "$HAVE_BACULA" ]; then + %{useradd} -r -c "Bacula" -d %{working_dir} -g %{daemon_group} -M -s /sbin/nologin %{file_daemon_user} > /dev/null 2>&1 + echo "The user %{file_daemon_user} has been added to %{user_file}." + echo "See the manual chapter \"Running Bacula\" for details." +fi +# now we add the supplementary group, this is ok to call even if the user already exists +# we only do this if the user is NOT root +IS_ROOT=%{file_daemon_user} +if [ "$IS_ROOT" != "root" ]; then +%{usermod} -G %{daemon_group} %{file_daemon_user} +fi + +%post client +# add our link +if [ "$1" -ge 1 ] ; then + /sbin/chkconfig --add bacula-fd +fi + +if [ -d %{sysconf_dir} ]; then + cd %{sysconf_dir} + if [ ! -f .rpm.sed ]; then + (umask 0177 + echo "# This file is used to ensure that all passwords will" > .rpm.sed + echo "# match between configuration files" >> .rpm.sed + ) + for string in XXX_REPLACE_WITH_DIRECTOR_PASSWORD_XXX XXX_REPLACE_WITH_CLIENT_PASSWORD_XXX XXX_REPLACE_WITH_STORAGE_PASSWORD_XXX XXX_REPLACE_WITH_DIRECTOR_MONITOR_PASSWORD_XXX XXX_REPLACE_WITH_CLIENT_MONITOR_PASSWORD_XXX XXX_REPLACE_WITH_STORAGE_MONITOR_PASSWORD_XXX; do + pass=`openssl rand -base64 33` + echo "s@${string}@${pass}@g" >> .rpm.sed + done + fi + host=`hostname -s` + for file in *.conf; do + sed -f .rpm.sed $file > $file.new + sed "s@XXX_HOSTNAME_XXX@${host}@g" $file.new > $file + rm -f $file.new + done +fi + +%preun client +# delete our link +if [ $1 = 0 ]; then + /sbin/chkconfig --del bacula-fd +fi + +%files libs +%defattr(-,root,root) +%{_libdir}/libbac-* +%{_libdir}/libbac.* +%{_libdir}/libbaccfg* +%{_libdir}/libbacfind* +%{_libdir}/libbacpy* + +%post libs +/sbin/ldconfig +exit 0 + +%postun libs +/sbin/ldconfig +exit 0 + +%if ! %{client_only} +%files updatedb +%defattr(-,root,%{daemon_group}) +%{script_dir}/updatedb/* +#oensuse_bs: directories not owned by any package +#%{script_dir}/updatedb + +%pre updatedb +# create the daemon group +HAVE_BACULA=`grep %{daemon_group} %{group_file} 2>/dev/null` +if [ -z "$HAVE_BACULA" ]; then + %{groupadd} -r %{daemon_group} > /dev/null 2>&1 + echo "The group %{daemon_group} has been added to %{group_file}." + echo "See the manual chapter \"Running Bacula\" for details." +fi + +%post updatedb +echo "The database update scripts were installed to %{script_dir}/updatedb" +%endif + +%changelog diff --git a/bacula/po/POTFILES.in b/bacula/po/POTFILES.in index 95f07f64ba..13bccb80f0 100644 --- a/bacula/po/POTFILES.in +++ b/bacula/po/POTFILES.in @@ -1,561 +1,449 @@ # List of source files containing translatable strings. # To generate this file, type 'make gen-potfiles' -./src/dird/jobq.c -./src/dird/ua_select.c -./src/dird/bsr.c -./src/dird/ua_server.c -./src/dird/verify.c -./src/dird/admin.c -./src/dird/dird.c -./src/dird/ua_acl.c -./src/dird/inc_conf.c -./src/dird/ua_query.c -./src/dird/newvol.c -./src/dird/expand.c -./src/dird/recycle.c -./src/dird/ua_purge.c -./src/dird/vbackup.c -./src/dird/ua_output.c -./src/dird/ua_dotcmds.c -./src/dird/next_vol.c -./src/dird/ua_cmds.c -./src/dird/ua_tree.c -./src/dird/dird_conf.c -./src/dird/getmsg.c -./src/dird/ua_restore.c -./src/dird/fd_cmds.c -./src/dird/ua_label.c -./src/dird/scheduler.c -./src/dird/run_conf.c -./src/dird/ua_update.c -./src/dird/migrate.c -./src/dird/ua_prune.c -./src/dird/autoprune.c -./src/dird/ua_run.c -./src/dird/dir_plugins.c -./src/dird/backup.c -./src/dird/restore.c -./src/dird/ua_status.c -./src/dird/ua_input.c -./src/dird/pythondir.c -./src/dird/job.c -./src/dird/authenticate.c -./src/dird/catreq.c -./src/dird/mountreq.c -./src/dird/msgchan.c -./src/tray-monitor/tray_conf.c -./src/tray-monitor/tray-monitor.c -./src/tray-monitor/authenticate.c -./src/stored/reserve.c -./src/stored/bls.c -./src/stored/dircmd.c -./src/stored/parse_bsr.c -./src/stored/ansi_label.c +./src/plugins/dir/example-plugin-dir.c +./src/plugins/sd/main.c +./src/plugins/sd/example-plugin-sd.c +./src/plugins/fd/example-plugin-fd.c +./src/plugins/fd/test-plugin-fd.c +./src/plugins/fd/bpipe-fd.c +./src/plugins/fd/test-deltaseq-fd.c +./src/console/authenticate.c +./src/console/console_conf.c +./src/console/console.c +./src/console/conio.c +./src/cats/sql_list.c +./src/cats/sql_get.c +./src/cats/sql_find.c +./src/cats/cats_dummy.c +./src/cats/sql.c +./src/cats/sql_update.c +./src/cats/sql_create.c +./src/cats/mysql.c +./src/cats/cats.c +./src/cats/sql_glue.c +./src/cats/postgresql.c +./src/cats/sqlite.c +./src/cats/sql_cmds.c +./src/cats/sql_delete.c +./src/cats/bvfs.c +./src/stored/job.c +./src/stored/match_bsr.c +./src/stored/vbackup.c ./src/stored/append.c -./src/stored/vol_mgr.c +./src/stored/mount.c +./src/stored/scan.c +./src/stored/askdir.c +./src/stored/stored.c +./src/stored/btape.c +./src/stored/record_read.c +./src/stored/spool.c +./src/stored/record.c +./src/stored/bls.c +./src/stored/wait.c +./src/stored/device.c +./src/stored/authenticate.c +./src/stored/block.c ./src/stored/label.c -./src/stored/status.c -./src/stored/read_record.c +./src/stored/acquire.c ./src/stored/bextract.c +./src/stored/bscan.c +./src/stored/stored_conf.c +./src/stored/dircmd.c +./src/stored/dev.c +./src/stored/fd_cmds.c +./src/stored/block_util.c ./src/stored/bcopy.c -./src/stored/dvd.c +./src/stored/tape_dev.c ./src/stored/butil.c -./src/stored/vtape.c -./src/stored/acquire.c -./src/stored/askdir.c -./src/stored/record.c +./src/stored/record_write.c +./src/stored/ansi_label.c +./src/stored/vol_mgr.c +./src/stored/ebcdic.c +./src/stored/file_dev.c +./src/stored/lock.c ./src/stored/read.c ./src/stored/autochanger.c -./src/stored/stored.c -./src/stored/device.c -./src/stored/fd_cmds.c -./src/stored/mount.c -./src/stored/mac.c -./src/stored/pythonsd.c -./src/stored/spool.c -./src/stored/lock.c +./src/stored/os.c +./src/stored/read_records.c +./src/stored/parse_bsr.c +./src/stored/reserve.c +./src/stored/record_util.c +./src/stored/vtape_dev.c +./src/stored/status.c ./src/stored/sd_plugins.c -./src/stored/stored_conf.c -./src/stored/dev.c -./src/stored/bscan.c -./src/stored/scan.c -./src/stored/job.c -./src/stored/ebcdic.c -./src/stored/btape.c -./src/stored/authenticate.c -./src/stored/match_bsr.c -./src/stored/wait.c -./src/stored/block.c -./src/lib/dlist.c -./src/lib/plugins.c -./src/lib/htable.c -./src/lib/workq.c -./src/lib/base64.c -./src/lib/sha1.c -./src/lib/pythonlib.c -./src/lib/watchdog.c -./src/lib/attr.c -./src/lib/smartall.c -./src/lib/rblist.c ./src/lib/sellist.c -./src/lib/rwlock.c -./src/lib/bget_msg.c -./src/lib/bsock.c -./src/lib/message.c -./src/lib/bnet_server.c -./src/lib/tree.c +./src/lib/alist.c +./src/lib/binflate.c +./src/lib/plugins.c +./src/lib/bregex.c ./src/lib/btime.c -./src/lib/bpipe.c -./src/lib/lockmgr.c -./src/lib/crypto.c -./src/lib/cram-md5.c -./src/lib/priv.c +./src/lib/bnet.c +./src/lib/scan.c ./src/lib/openssl.c +./src/lib/var.c ./src/lib/util.c -./src/lib/bregex.c -./src/lib/hmac.c -./src/lib/save/devlock.c ./src/lib/devlock.c +./src/lib/rblist.c +./src/lib/jcr.c +./src/lib/lex.c +./src/lib/base64.c +./src/lib/bpipe.c +./src/lib/save/devlock.c +./src/lib/dlist.c +./src/lib/workq.c +./src/lib/breg.c +./src/lib/fnmatch.c +./src/lib/hmac.c +./src/lib/md5.c +./src/lib/btimers.c +./src/lib/bsys.c +./src/lib/bsock.c +./src/lib/serial.c +./src/lib/parse_conf.c +./src/lib/queue.c ./src/lib/daemon.c +./src/lib/guid_to_name.c +./src/lib/lockmgr.c +./src/lib/bsnprintf.c +./src/lib/message.c +./src/lib/htable.c +./src/lib/edit.c ./src/lib/tls.c -./src/lib/jcr.c +./src/lib/priv.c ./src/lib/res.c -./src/lib/parse_conf.c ./src/lib/mntent_cache.c -./src/lib/queue.c +./src/lib/watchdog.c +./src/lib/ini.c +./src/lib/bget_msg.c +./src/lib/tree.c +./src/lib/sha1.c +./src/lib/address_conf.c +./src/lib/crypto.c +./src/lib/attr.c +./src/lib/signal.c +./src/lib/berrno.c +./src/lib/rwlock.c ./src/lib/crc32.c -./src/lib/alist.c -./src/lib/bsnprintf.c ./src/lib/mem_pool.c -./src/lib/berrno.c -./src/lib/serial.c -./src/lib/bnet.c -./src/lib/md5.c -./src/lib/signal.c -./src/lib/fnmatch.c -./src/lib/guid_to_name.c -./src/lib/ini.c -./src/lib/btimers.c -./src/lib/scan.c -./src/lib/bsys.c +./src/lib/bnet_server.c ./src/lib/runscript.c -./src/lib/lex.c -./src/lib/var.c -./src/lib/address_conf.c -./src/lib/breg.c -./src/lib/binflate.c -./src/lib/edit.c -./src/win32/compat/winapi.c -./src/win32/compat/getopt.c -./src/win32/scripts/bsleep.c -./src/win32/filed/plugins/dbi_node.c -./src/win32/filed/plugins/api.c -./src/win32/filed/plugins/service_node.c -./src/win32/filed/plugins/root_node.c -./src/win32/filed/plugins/exchange-fd.c -./src/win32/filed/plugins/node.c -./src/win32/filed/plugins/bpipe-fd.c -./src/win32/filed/plugins/store_node.c -./src/win32/filed/plugins/storage_group_node.c -./src/win32/filed/plugins/file_node.c -./src/findlib/savecwd.c -./src/findlib/mkpath.c -./src/findlib/attribs.c -./src/findlib/fstype.c -./src/findlib/drivetype.c -./src/findlib/enable_priv.c -./src/findlib/create_file.c +./src/lib/cram-md5.c +./src/lib/smartall.c +./src/dird/ua_acl.c +./src/dird/job.c +./src/dird/vbackup.c +./src/dird/ua_output.c +./src/dird/jobq.c +./src/dird/ua_select.c +./src/dird/run_conf.c +./src/dird/restore.c +./src/dird/admin.c +./src/dird/ua_status.c +./src/dird/next_vol.c +./src/dird/authenticate.c +./src/dird/verify.c +./src/dird/ua_dotcmds.c +./src/dird/expand.c +./src/dird/mac_sql.c +./src/dird/mac.c +./src/dird/autoprune.c +./src/dird/ua_restore.c +./src/dird/bsr.c +./src/dird/fd_cmds.c +./src/dird/scheduler.c +./src/dird/ua_run.c +./src/dird/mountreq.c +./src/dird/ua_label.c +./src/dird/ua_cmds.c +./src/dird/backup.c +./src/dird/ua_tree.c +./src/dird/inc_conf.c +./src/dird/recycle.c +./src/dird/ua_server.c +./src/dird/newvol.c +./src/dird/msgchan.c +./src/dird/xua_output.c +./src/dird/getmsg.c +./src/dird/ua_input.c +./src/dird/dird_conf.c +./src/dird/ua_query.c +./src/dird/dird.c +./src/dird/ua_purge.c +./src/dird/ua_prune.c +./src/dird/ua_update.c +./src/dird/dir_plugins.c +./src/dird/catreq.c +./src/findlib/match.c ./src/findlib/bfile.c +./src/findlib/drivetype.c +./src/findlib/makepath.c +./src/findlib/priv.c +./src/findlib/file_create.c ./src/findlib/find.c -./src/findlib/match.c +./src/findlib/fstype.c +./src/findlib/file_attrs.c ./src/findlib/find_one.c -./src/plugins/sd/main.c -./src/plugins/sd/example-plugin-sd.c -./src/plugins/fd/test-plugin-fd.c -./src/plugins/fd/example-plugin-fd.c -./src/plugins/fd/test-deltaseq-fd.c -./src/plugins/fd/bpipe-fd.c -./src/plugins/dir/example-plugin-dir.c -./src/cats/sql_create.c -./src/cats/myingres.c -./src/cats/sql_get.c -./src/cats/bvfs.c -./src/cats/sql_find.c -./src/cats/sqlite.c -./src/cats/ingres.c -./src/cats/sql.c -./src/cats/sql_cmds.c -./src/cats/postgresql.c -./src/cats/sql_glue.c -./src/cats/sql_update.c -./src/cats/sql_list.c -./src/cats/dbi.c -./src/cats/cats_dummy.c -./src/cats/sql_delete.c -./src/cats/cats.c -./src/cats/mysql.c -./src/wx-console/console_conf.c -./src/wx-console/authenticate.c -./src/console/console.c -./src/console/console_conf.c -./src/console/conio.c -./src/console/authenticate.c -./src/tools/gigaslam.c -./src/tools/testls.c -./src/tools/bvfs_test.c -./src/tools/bbatch.c -./src/tools/ing_test.c -./src/tools/grow.c -./src/tools/fstype.c -./src/tools/bregex.c -./src/tools/drivetype.c -./src/tools/bpluginfo.c -./src/tools/bwild.c -./src/tools/bregtest.c -./src/tools/testfind.c -./src/tools/smtp-orig.c -./src/tools/cats_test.c -./src/tools/bsmtp.c -./src/tools/dbcheck.c -./src/filed/verify.c -./src/filed/accurate.c -./src/filed/status.c -./src/filed/pythonfd.c +./src/filed/job.c ./src/filed/heartbeat.c -./src/filed/xattr.c -./src/filed/fd_plugins.c -./src/filed/filed.c ./src/filed/filed_conf.c -./src/filed/acl.c -./src/filed/verify_vol.c -./src/filed/backup.c +./src/filed/accurate.c +./src/filed/fd_plugins.c ./src/filed/restore.c -./src/filed/job.c ./src/filed/estimate.c +./src/filed/verify_vol.c ./src/filed/authenticate.c -./examples/nagios/check_bacula/check_bacula.c +./src/filed/verify.c +./src/filed/xattr.c +./src/filed/backup.c +./src/filed/acl.c +./src/filed/filed.c +./src/filed/status.c +./src/tools/bpluginfo.c +./src/tools/bregex.c +./src/tools/bbatch.c +./src/tools/drivetype.c +./src/tools/bsmtp.c +./src/tools/dbcheck.c +./src/tools/bregtest.c +./src/tools/bvfs_test.c +./src/tools/timelimit.c +./src/tools/testls.c +./src/tools/bwild.c +./src/tools/gigaslam.c +./src/tools/testfind.c +./src/tools/fstype.c +./src/tools/cats_test.c +./src/tools/ing_test.c +./src/tools/grow.c ./examples/nagios/check_bacula/authenticate.c -./src/dird/jobq.h -./src/dird/protos.h -./src/dird/dird.h -./src/dird/dird_conf.h -./src/dird/ua.h -./src/dird/bsr.h -./src/dird/dir_plugins.h +./examples/nagios/check_bacula/check_bacula.c +./src/plugins/fd/fd_common.h +./src/filetypes.h ./src/fileopts.h -./src/config.h -./src/bc_types.h -./src/tray-monitor/tray-monitor.h -./src/tray-monitor/tray_conf.h -./src/baconfig.h -./src/bacula.h -./src/stored/lock.h +./src/console/conio.h +./src/console/func.h +./src/console/console_conf.h +./src/cats/protos.h +./src/cats/bdb_mysql.h +./src/cats/bdb_postgresql.h +./src/cats/cats.h +./src/cats/bdb_sqlite.h +./src/cats/sql_cmds.h +./src/cats/sql_glue.h +./src/cats/bvfs.h +./src/cats/bdb_priv.h ./src/stored/reserve.h +./src/stored/file_dev.h ./src/stored/protos.h -./src/stored/dev.h -./src/stored/stored.h -./src/stored/vtape.h -./src/stored/bsr.h ./src/stored/block.h -./src/stored/sd_plugins.h +./src/stored/lock.h ./src/stored/stored_conf.h +./src/stored/dev.h +./src/stored/vtape_dev.h ./src/stored/record.h -./src/ch.h -./src/version.h -./src/lib/tree.h -./src/lib/var.h -./src/lib/mutex_list.h -./src/lib/message.h -./src/lib/bmtio.h +./src/stored/stored.h +./src/stored/vol_mgr.h +./src/stored/sd_plugins.h +./src/stored/bsr.h +./src/stored/tape_dev.h +./src/lib/workq.h +./src/lib/crypto.h ./src/lib/protos.h -./src/lib/watchdog.h -./src/lib/queue.h -./src/lib/lex.h -./src/lib/openssl.h +./src/lib/smartall.h +./src/lib/lockmgr.h ./src/lib/status.h -./src/lib/rwlock.h -./src/lib/base64.h -./src/lib/htable.h -./src/lib/dlist.h -./src/lib/waitq.h -./src/lib/bregex.h -./src/lib/attr.h +./src/lib/serial.h +./src/lib/ini.h ./src/lib/guid_to_name.h ./src/lib/fnmatch.h -./src/lib/rblist.h +./src/lib/watchdog.h ./src/lib/save/devlock.h -./src/lib/plugins.h -./src/lib/bits.h -./src/lib/pythonlib.h -./src/lib/breg.h ./src/lib/alist.h -./src/lib/smartall.h -./src/lib/md5.h -./src/lib/lib.h -./src/lib/mem_pool.h -./src/lib/btime.h -./src/lib/workq.h -./src/lib/tcpd.h -./src/lib/tls.h ./src/lib/sha1.h -./src/lib/btimers.h +./src/lib/address_conf.h +./src/lib/waitq.h +./src/lib/lib.h +./src/lib/runscript.h +./src/lib/openssl.h +./src/lib/sellist.h +./src/lib/bregex.h +./src/lib/message.h +./src/lib/rwlock.h +./src/lib/tree.h +./src/lib/queue.h +./src/lib/md5.h +./src/lib/mutex_list.h ./src/lib/bpipe.h -./src/lib/berrno.h -./src/lib/runscript.h -./src/lib/mntent_cache.h -./src/lib/address_conf.h +./src/lib/btime.h +./src/lib/rblist.h +./src/lib/htable.h ./src/lib/devlock.h -./src/lib/serial.h -./src/lib/ini.h +./src/lib/base64.h +./src/lib/plugins.h ./src/lib/bsock.h +./src/lib/mem_pool.h +./src/lib/attr.h +./src/lib/bits.h +./src/lib/berrno.h +./src/lib/mntent_cache.h +./src/lib/lex.h +./src/lib/btimers.h ./src/lib/parse_conf.h -./src/lib/sellist.h -./src/lib/lockmgr.h -./src/lib/crypto.h +./src/lib/tcpd.h +./src/lib/var.h +./src/lib/breg.h +./src/lib/dlist.h +./src/lib/tls.h +./src/lib/bmtio.h +./src/version.h ./src/streams.h -./src/win32/dird/who.h -./src/win32/compat/getopt.h -./src/win32/compat/netinet/tcp.h -./src/win32/compat/netinet/in.h -./src/win32/compat/winhost.h -./src/win32/compat/stdint.h -./src/win32/compat/dlfcn.h -./src/win32/compat/strings.h -./src/win32/compat/sys/time.h -./src/win32/compat/sys/ioctl.h -./src/win32/compat/sys/stat.h -./src/win32/compat/sys/wait.h -./src/win32/compat/sys/mtio.h -./src/win32/compat/sys/file.h -./src/win32/compat/sys/socket.h -./src/win32/compat/mswinver.h -./src/win32/compat/compat.h -./src/win32/compat/arpa/inet.h -./src/win32/compat/pwd.h -./src/win32/compat/winsock.h -./src/win32/compat/mingwconfig.h -./src/win32/compat/dirent.h -./src/win32/compat/alloca.h -./src/win32/compat/grp.h -./src/win32/compat/unistd.h -./src/win32/compat/syslog.h -./src/win32/compat/netdb.h -./src/win32/compat/ms_atl.h -./src/win32/stored/who.h -./src/win32/winapi.h -./src/win32/wx-console/w32api.h -./src/win32/libwin32/protos.h -./src/win32/libwin32/statusDialog.h -./src/win32/libwin32/aboutDialog.h -./src/win32/libwin32/res.h -./src/win32/libwin32/trayMonitor.h -./src/win32/libwin32/win32.h -./src/win32/tools/ScsiDeviceList.h -./src/win32/filed/who.h -./src/win32/filed/plugins/api.h -./src/win32/filed/plugins/node.h -./src/win32/filed/plugins/exchange-fd.h -./src/win32/filed/plugins/comadmin.h -./src/win32/filed/vss.h +./src/dird/protos.h +./src/dird/dir_plugins.h +./src/dird/dird.h +./src/dird/ua.h +./src/dird/dird_conf.h +./src/dird/bsr.h +./src/dird/jobq.h +./src/bacula.h ./src/findlib/bfile.h ./src/findlib/protos.h ./src/findlib/find.h -./src/findlib/savecwd.h -./src/plugins/fd/fd_common.h +./src/bc_types.h +./src/filed/acl.h +./src/filed/protos.h +./src/filed/filed.h +./src/filed/fd_plugins.h +./src/filed/xattr.h +./src/filed/restore.h +./src/filed/filed_conf.h +./src/baconfig.h ./src/host.h -./src/cats/sql_glue.h -./src/cats/sql_cmds.h -./src/cats/protos.h -./src/cats/bdb_mysql.h -./src/cats/bvfs.h -./src/cats/bdb_postgresql.h -./src/cats/bdb_sqlite.h -./src/cats/bdb_ingres.h -./src/cats/bdb_priv.h -./src/cats/myingres.h -./src/cats/bdb_dbi.h -./src/cats/cats.h -./src/wx-console/wxbconfigfileeditor.h -./src/wx-console/wxbmainframe.h -./src/wx-console/wxbutils.h -./src/wx-console/wxbrestorepanel.h -./src/wx-console/console_conf.h -./src/wx-console/wxbhistorytextctrl.h -./src/wx-console/console_thread.h -./src/wx-console/wxbconfigpanel.h -./src/wx-console/wx-console_private.h -./src/wx-console/wxbtableparser.h -./src/wx-console/wxblistctrl.h -./src/wx-console/wxbtreectrl.h -./src/wx-console/csprint.h -./src/console/console_conf.h -./src/console/conio.h -./src/console/func.h -./src/filetypes.h -./src/tools/assert_macro.h -./src/qt-console/help/help.h -./src/qt-console/medialist/mediaview.h -./src/qt-console/medialist/medialist.h -./src/qt-console/status/clientstat.h -./src/qt-console/status/storstat.h -./src/qt-console/status/dirstat.h +./src/jcr.h +./src/config.h +./src/qt-console/relabel/relabel.h +./src/qt-console/fileset/fileset.h +./src/qt-console/testprogs/examp/mainwindow.h +./src/qt-console/testprogs/putz/putz.h +./src/qt-console/job/job.h +./src/qt-console/bcomm/dircomm.h +./src/qt-console/label/label.h +./src/qt-console/mount/mount.h +./src/qt-console/console/console.h +./src/qt-console/run/run.h +./src/qt-console/tray-monitor/tray-monitor.h ./src/qt-console/tray-monitor/tray-ui.h ./src/qt-console/tray-monitor/ui/ui_run.h -./src/qt-console/tray-monitor/tray-monitor.h ./src/qt-console/tray-monitor/tray_conf.h -./src/qt-console/jobs/jobs.h -./src/qt-console/job/job.h -./src/qt-console/util/comboutil.h -./src/qt-console/util/fmtwidgetitem.h +./src/qt-console/storage/content.h +./src/qt-console/storage/storage.h +./src/qt-console/qstd.h +./src/qt-console/jobgraphs/jobplot.h ./src/qt-console/mediainfo/mediainfo.h -./src/qt-console/select/select.h -./src/qt-console/select/textinput.h -./src/qt-console/ui32/ui_run.h +./src/qt-console/clients/clients.h +./src/qt-console/joblist/joblist.h +./src/qt-console/joblog/joblog.h +./src/qt-console/ui32/ui_mount.h ./src/qt-console/ui32/ui_clientstat.h +./src/qt-console/ui32/ui_clients.h +./src/qt-console/ui32/ui_prune.h +./src/qt-console/ui32/ui_textinput.h ./src/qt-console/ui32/ui_joblog.h +./src/qt-console/ui32/ui_fileset.h +./src/qt-console/ui32/ui_relabel.h ./src/qt-console/ui32/ui_storage.h -./src/qt-console/ui32/ui_prerestore.h -./src/qt-console/ui32/ui_mediaview.h -./src/qt-console/ui32/ui_mount.h -./src/qt-console/ui32/ui_runrestore.h -./src/qt-console/ui32/ui_mediainfo.h -./src/qt-console/ui32/ui_job.h -./src/qt-console/ui32/ui_jobs.h -./src/qt-console/ui32/ui_estimate.h ./src/qt-console/ui32/ui_select.h -./src/qt-console/ui32/ui_clients.h ./src/qt-console/ui32/ui_brestore.h -./src/qt-console/ui32/ui_runcmd.h +./src/qt-console/ui32/ui_restore.h +./src/qt-console/ui32/ui_prerestore.h +./src/qt-console/ui32/ui_medialist.h ./src/qt-console/ui32/ui_main.h -./src/qt-console/ui32/ui_textinput.h +./src/qt-console/ui32/ui_mediaedit.h +./src/qt-console/ui32/ui_jobs.h +./src/qt-console/ui32/ui_job.h +./src/qt-console/ui32/ui_help.h +./src/qt-console/ui32/ui_estimate.h +./src/qt-console/ui32/ui_restoretree.h +./src/qt-console/ui32/ui_mediainfo.h +./src/qt-console/ui32/ui_run.h ./src/qt-console/ui32/ui_storstat.h -./src/qt-console/ui32/ui_console.h -./src/qt-console/ui32/ui_medialist.h -./src/qt-console/ui32/ui_label.h -./src/qt-console/ui32/ui_prefs.h -./src/qt-console/ui32/ui_content.h +./src/qt-console/ui32/ui_mediaview.h ./src/qt-console/ui32/ui_joblist.h -./src/qt-console/ui32/ui_prune.h -./src/qt-console/ui32/ui_help.h -./src/qt-console/ui32/ui_restore.h -./src/qt-console/ui32/ui_fileset.h ./src/qt-console/ui32/ui_dirstat.h -./src/qt-console/ui32/ui_restoretree.h -./src/qt-console/ui32/ui_relabel.h -./src/qt-console/ui32/ui_mediaedit.h -./src/qt-console/qstd.h +./src/qt-console/ui32/ui_runcmd.h +./src/qt-console/ui32/ui_content.h +./src/qt-console/ui32/ui_runrestore.h +./src/qt-console/ui32/ui_label.h +./src/qt-console/ui32/ui_console.h +./src/qt-console/ui32/ui_prefs.h +./src/qt-console/medialist/medialist.h +./src/qt-console/medialist/mediaview.h +./src/qt-console/mediaedit/mediaedit.h +./src/qt-console/help/help.h +./src/qt-console/bat.h +./src/qt-console/jobs/jobs.h +./src/qt-console/util/comboutil.h +./src/qt-console/util/fmtwidgetitem.h +./src/qt-console/select/select.h +./src/qt-console/select/textinput.h +./src/qt-console/bat_conf.h ./src/qt-console/win32/qplatformdefs.h -./src/qt-console/joblist/joblist.h -./src/qt-console/label/label.h -./src/qt-console/mainwin.h ./src/qt-console/pages.h -./src/qt-console/bcomm/dircomm.h -./src/qt-console/relabel/relabel.h -./src/qt-console/console/console.h -./src/qt-console/clients/clients.h -./src/qt-console/run/run.h -./src/qt-console/bat_conf.h -./src/qt-console/storage/storage.h -./src/qt-console/storage/content.h -./src/qt-console/joblog/joblog.h -./src/qt-console/bat.h -./src/qt-console/mediaedit/mediaedit.h +./src/qt-console/status/clientstat.h +./src/qt-console/status/storstat.h +./src/qt-console/status/dirstat.h ./src/qt-console/restore/restoretree.h ./src/qt-console/restore/restore.h -./src/qt-console/fileset/fileset.h -./src/qt-console/jobgraphs/jobplot.h -./src/qt-console/mount/mount.h -./src/jcr.h -./src/filed/protos.h -./src/filed/acl.h -./src/filed/filed_conf.h -./src/filed/filed.h -./src/filed/xattr.h -./src/filed/fd_plugins.h -./src/filed/restore.h -./autoconf/confdefs.h -./autoconf/acconfig.h +./src/qt-console/mainwin.h ./examples/nagios/check_bacula/check_bacula.h -./src/win32/dird/service.cpp -./src/win32/dird/main.cpp -./src/win32/compat/compat.cpp -./src/win32/compat/print.cpp -./src/win32/stored/service.cpp -./src/win32/stored/mtops.cpp -./src/win32/stored/postest/postest.cpp -./src/win32/stored/trayMonitor.cpp -./src/win32/stored/main.cpp -./src/win32/libwin32/statusDialog.cpp -./src/win32/libwin32/service.cpp -./src/win32/libwin32/aboutDialog.cpp -./src/win32/libwin32/trayMonitor.cpp -./src/win32/libwin32/main.cpp -./src/win32/tools/scsilist.cpp -./src/win32/tools/ScsiDeviceList.cpp -./src/win32/filed/vss_Vista.cpp -./src/win32/filed/service.cpp -./src/win32/filed/vss.cpp -./src/win32/filed/vss_W2K3.cpp -./src/win32/filed/vss_generic.cpp -./src/win32/filed/trayMonitor.cpp -./src/win32/filed/vss_XP.cpp -./src/win32/filed/main.cpp -./src/wx-console/wxbconfigfileeditor.cpp -./src/wx-console/wxbtableparser.cpp -./src/wx-console/wxbrestorepanel.cpp -./src/wx-console/wxbutils.cpp -./src/wx-console/console_thread.cpp -./src/wx-console/wxbconfigpanel.cpp -./src/wx-console/wxbhistorytextctrl.cpp -./src/wx-console/wxblistctrl.cpp -./src/wx-console/wxbtreectrl.cpp -./src/wx-console/main.cpp -./src/wx-console/wxbmainframe.cpp -./src/qt-console/help/help.cpp -./src/qt-console/medialist/mediaview.cpp -./src/qt-console/medialist/medialist.cpp -./src/qt-console/release/qrc_main.cpp -./src/qt-console/status/clientstat.cpp -./src/qt-console/status/storstat.cpp -./src/qt-console/status/dirstat.cpp -./src/qt-console/tray-monitor/release/qrc_main.cpp -./src/qt-console/tray-monitor/debug/qrc_main.cpp -./src/qt-console/tray-monitor/tray-monitor.cpp -./src/qt-console/tray-monitor/moc/moc_tray-ui.cpp -./src/qt-console/tray-monitor/authenticate.cpp -./src/qt-console/tray-monitor/tray_conf.cpp -./src/qt-console/qstd.cpp -./src/qt-console/jobs/jobs.cpp +./src/qt-console/relabel/relabel.cpp +./src/qt-console/fileset/fileset.cpp +./src/qt-console/testprogs/examp/mainwindow.cpp +./src/qt-console/testprogs/examp/main.cpp +./src/qt-console/testprogs/putz/main.cpp +./src/qt-console/testprogs/putz/putz.cpp ./src/qt-console/job/job.cpp -./src/qt-console/util/fmtwidgetitem.cpp -./src/qt-console/util/comboutil.cpp -./src/qt-console/debug/qrc_main.cpp -./src/qt-console/mediainfo/mediainfo.cpp -./src/qt-console/select/textinput.cpp -./src/qt-console/select/select.cpp -./src/qt-console/joblist/joblist.cpp ./src/qt-console/pages.cpp -./src/qt-console/label/label.cpp -./src/qt-console/bcomm/dircomm_auth.cpp ./src/qt-console/bcomm/dircomm.cpp -./src/qt-console/relabel/relabel.cpp +./src/qt-console/bcomm/dircomm_auth.cpp +./src/qt-console/label/label.cpp +./src/qt-console/mount/mount.cpp ./src/qt-console/console/console.cpp -./src/qt-console/clients/clients.cpp +./src/qt-console/run/run.cpp ./src/qt-console/run/runcmd.cpp ./src/qt-console/run/prune.cpp -./src/qt-console/run/run.cpp ./src/qt-console/run/estimate.cpp -./src/qt-console/mainwin.cpp -./src/qt-console/storage/content.cpp +./src/qt-console/tray-monitor/tray_conf.cpp +./src/qt-console/tray-monitor/tray-monitor.cpp +./src/qt-console/tray-monitor/moc/moc_tray-ui.cpp +./src/qt-console/tray-monitor/release/qrc_main.cpp +./src/qt-console/tray-monitor/authenticate.cpp +./src/qt-console/tray-monitor/debug/qrc_main.cpp ./src/qt-console/storage/storage.cpp -./src/qt-console/bat_conf.cpp +./src/qt-console/storage/content.cpp +./src/qt-console/jobgraphs/jobplot.cpp +./src/qt-console/mainwin.cpp +./src/qt-console/mediainfo/mediainfo.cpp +./src/qt-console/clients/clients.cpp +./src/qt-console/joblist/joblist.cpp ./src/qt-console/joblog/joblog.cpp +./src/qt-console/qstd.cpp +./src/qt-console/medialist/medialist.cpp +./src/qt-console/medialist/mediaview.cpp +./src/qt-console/release/qrc_main.cpp +./src/qt-console/main.cpp ./src/qt-console/mediaedit/mediaedit.cpp -./src/qt-console/restore/brestore.cpp +./src/qt-console/help/help.cpp +./src/qt-console/jobs/jobs.cpp +./src/qt-console/util/comboutil.cpp +./src/qt-console/util/fmtwidgetitem.cpp +./src/qt-console/select/select.cpp +./src/qt-console/select/textinput.cpp +./src/qt-console/bat_conf.cpp +./src/qt-console/status/storstat.cpp +./src/qt-console/status/dirstat.cpp +./src/qt-console/status/clientstat.cpp +./src/qt-console/debug/qrc_main.cpp +./src/qt-console/restore/prerestore.cpp ./src/qt-console/restore/restoretree.cpp +./src/qt-console/restore/brestore.cpp ./src/qt-console/restore/restore.cpp -./src/qt-console/restore/prerestore.cpp -./src/qt-console/fileset/fileset.cpp -./src/qt-console/jobgraphs/jobplot.cpp -./src/qt-console/main.cpp -./src/qt-console/mount/mount.cpp diff --git a/bacula/po/bacula.pot b/bacula/po/bacula.pot index 2166b6edba..f4716b8a24 100644 --- a/bacula/po/bacula.pot +++ b/bacula/po/bacula.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: bacula-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2013-02-19 18:26+0100\n" +"POT-Creation-Date: 2014-03-23 22:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,17983 +17,16878 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: src/dird/jobq.c:74 -#, c-format -msgid "pthread_attr_init: ERR=%s\n" +#: src/console/authenticate.c:117 src/dird/authenticate.c:121 +msgid "" +"Authorization problem: Remote server did not advertise required TLS " +"support.\n" msgstr "" -#: src/dird/jobq.c:83 -#, c-format -msgid "pthread_mutex_init: ERR=%s\n" +#: src/console/authenticate.c:124 src/stored/authenticate.c:154 +#: src/stored/authenticate.c:267 src/stored/authenticate.c:376 +#: src/dird/authenticate.c:128 src/filed/authenticate.c:148 +#: src/filed/authenticate.c:276 +msgid "Authorization problem: Remote server requires TLS.\n" msgstr "" -#: src/dird/jobq.c:89 -#, c-format -msgid "pthread_cond_init: ERR=%s\n" +#: src/console/authenticate.c:133 +msgid "TLS negotiation failed\n" msgstr "" -#: src/dird/jobq.c:131 +#: src/console/authenticate.c:147 +#: src/qt-console/tray-monitor/authenticate.cpp:84 #, c-format -msgid "pthread_cond_broadcast: ERR=%s\n" +msgid "Bad response to Hello command: ERR=%s\n" msgstr "" -#: src/dird/jobq.c:139 -#, c-format -msgid "pthread_cond_wait: ERR=%s\n" +#: src/console/authenticate.c:154 +#: src/qt-console/tray-monitor/authenticate.cpp:91 +msgid "Director rejected Hello command\n" msgstr "" -#: src/dird/jobq.c:180 -#, c-format -msgid "Job %s waiting %d seconds for scheduled start time.\n" +#: src/console/authenticate.c:166 +msgid "" +"Director authorization problem.\n" +"Most likely the passwords do not agree.\n" +"If you are using TLS, there may have been a certificate validation error " +"during the TLS handshake.\n" +"Please see " msgstr "" -#: src/dird/jobq.c:220 src/dird/job.c:113 src/stored/dircmd.c:200 -#: src/stored/stored.c:560 +#: src/console/console_conf.c:128 src/qt-console/bat_conf.cpp:129 #, c-format -msgid "Unable to init job cond variable: ERR=%s\n" +msgid "No record for %d %s\n" msgstr "" -#: src/dird/jobq.c:242 +#: src/console/console_conf.c:137 #, c-format -msgid "pthread_thread_create: ERR=%s\n" +msgid "Console: name=%s rcfile=%s histfile=%s\n" msgstr "" -#: src/dird/jobq.c:352 +#: src/console/console_conf.c:141 src/qt-console/bat_conf.cpp:138 #, c-format -msgid "pthread_cond_signal: ERR=%s\n" +msgid "Director: name=%s address=%s DIRport=%d\n" msgstr "" -#: src/dird/jobq.c:363 +#: src/console/console_conf.c:145 src/console/console_conf.c:221 +#: src/console/console_conf.c:266 src/console/console_conf.c:293 +#: src/stored/stored_conf.c:538 src/stored/stored_conf.c:628 +#: src/stored/stored_conf.c:663 src/filed/filed_conf.c:411 +#: src/filed/filed_conf.c:476 src/filed/filed_conf.c:506 +#: src/qt-console/bat_conf.cpp:149 src/qt-console/bat_conf.cpp:227 +#: src/qt-console/bat_conf.cpp:275 src/qt-console/bat_conf.cpp:305 #, c-format -msgid "pthread_create: ERR=%s\n" +msgid "Unknown resource type %d\n" msgstr "" -#: src/dird/jobq.c:647 +#: src/console/console_conf.c:247 src/dird/dird_conf.c:1425 +#: src/dird/dird_conf.c:1440 src/filed/filed_conf.c:439 +#: src/qt-console/tray-monitor/tray_conf.cpp:276 +#: src/qt-console/bat_conf.cpp:253 #, c-format -msgid "Rescheduled Job %s at %s to re-run in %d seconds (%s).\n" -msgstr "" - -#: src/dird/jobq.c:703 src/dird/jobq.c:708 -msgid "previous Job" +msgid "%s item is required in %s resource, but not found.\n" msgstr "" -#: src/dird/jobq.c:745 +#: src/console/console_conf.c:310 src/dird/dird_conf.c:1664 +#: src/filed/filed_conf.c:524 src/qt-console/tray-monitor/tray_conf.cpp:360 +#: src/qt-console/bat_conf.cpp:322 #, c-format -msgid "" -"Job canceled. Attempt to read and write same device.\n" -" Read storage \"%s\" (From %s) -- Write storage \"%s\" (From %s)\n" +msgid "Attempt to define second %s resource named \"%s\" is not permitted.\n" msgstr "" -#: src/dird/ua_select.c:54 +#: src/console/console.c:114 #, c-format -msgid "The current %s retention period is: %s\n" -msgstr "" - -#: src/dird/ua_select.c:59 -msgid "Continue? (yes/mod/no): " +msgid "" +"\n" +"Version: " msgstr "" -#: src/dird/ua_select.c:62 src/dird/ua_run.c:219 -msgid "mod" +#: src/console/console.c:166 +msgid "input from file" msgstr "" -#: src/dird/ua_select.c:63 -msgid "Enter new retention period: " +#: src/console/console.c:167 +msgid "output to file" msgstr "" -#: src/dird/ua_select.c:67 -msgid "Invalid period.\n" +#: src/console/console.c:168 +msgid "quit" msgstr "" -#: src/dird/ua_select.c:143 -msgid "You have the following choices:\n" +#: src/console/console.c:169 +msgid "output to file and terminal" msgstr "" -#: src/dird/ua_select.c:159 -msgid "The defined Storage resources are:\n" +#: src/console/console.c:170 +msgid "sleep specified time" msgstr "" -#: src/dird/ua_select.c:167 src/dird/ua_dotcmds.c:734 src/dird/ua_cmds.c:995 -#: src/dird/ua_run.c:224 src/wx-console/wxbrestorepanel.cpp:339 -#: src/wx-console/wxbrestorepanel.cpp:355 -#: src/wx-console/wxbrestorepanel.cpp:479 -#: src/wx-console/wxbrestorepanel.cpp:480 -#: src/wx-console/wxbrestorepanel.cpp:490 -#: src/wx-console/wxbrestorepanel.cpp:491 -#: src/wx-console/wxbrestorepanel.cpp:1173 -#: src/wx-console/wxbrestorepanel.cpp:1176 -#: src/wx-console/wxbrestorepanel.cpp:1845 -#: src/wx-console/wxbrestorepanel.cpp:1916 -msgid "Storage" +#: src/console/console.c:171 +msgid "print current time" msgstr "" -#: src/dird/ua_select.c:167 -msgid "Select Storage resource" +#: src/console/console.c:172 +msgid "print Console's version" msgstr "" -#: src/dird/ua_select.c:182 src/dird/ua_restore.c:1296 -msgid "The defined FileSet resources are:\n" +#: src/console/console.c:173 +msgid "echo command string" msgstr "" -#: src/dird/ua_select.c:190 src/dird/ua_restore.c:1300 src/dird/ua_run.c:226 -msgid "FileSet" +#: src/console/console.c:174 +msgid "execute an external command" msgstr "" -#: src/dird/ua_select.c:190 src/dird/ua_restore.c:1300 -msgid "Select FileSet resource" +#: src/console/console.c:175 +msgid "exit = quit" msgstr "" -#: src/dird/ua_select.c:220 src/dird/ua_cmds.c:2029 -msgid "Could not find a Catalog resource\n" +#: src/console/console.c:176 +msgid "zed_keys = use zed keys instead of bash keys" msgstr "" -#: src/dird/ua_select.c:223 -msgid "You must specify a \"use \" command before continuing.\n" +#: src/console/console.c:177 +msgid "help listing" msgstr "" -#: src/dird/ua_select.c:229 -msgid "The defined Catalog resources are:\n" +#: src/console/console.c:179 +msgid "set command separator" msgstr "" -#: src/dird/ua_select.c:237 -msgid "Catalog" +#: src/console/console.c:213 +msgid ": is an invalid command\n" msgstr "" -#: src/dird/ua_select.c:237 -msgid "Select Catalog resource" +#: src/console/console.c:663 +msgid "Illegal separator character.\n" msgstr "" -#: src/dird/ua_select.c:255 src/dird/ua_select.c:281 -msgid "The defined Job resources are:\n" +#: src/console/console.c:696 +msgid "Command logic problem\n" msgstr "" -#: src/dird/ua_select.c:266 src/dird/ua_select.c:289 src/dird/ua_select.c:330 -#: src/dird/ua_select.c:1186 src/dird/dird_conf.c:670 src/dird/ua_prune.c:601 -#: src/dird/ua_run.c:225 -msgid "Job" +#: src/console/console.c:911 +#, c-format +msgid "Can't find %s in Director list\n" msgstr "" -#: src/dird/ua_select.c:266 src/dird/ua_select.c:289 -msgid "Select Job resource" +#: src/console/console.c:919 +msgid "Available Directors:\n" msgstr "" -#: src/dird/ua_select.c:308 +#: src/console/console.c:923 #, c-format -msgid "Error: Restore Job resource \"%s\" does not exist.\n" -msgstr "" - -#: src/dird/ua_select.c:322 -msgid "The defined Restore Job resources are:\n" +msgid "%2d: %s at %s:%d\n" msgstr "" -#: src/dird/ua_select.c:330 -msgid "Select Restore Job" +#: src/console/console.c:927 +msgid "Select Director by entering a number: " msgstr "" -#: src/dird/ua_select.c:347 -msgid "The defined Client resources are:\n" +#: src/console/console.c:934 +#, c-format +msgid "%s is not a number. You must enter a number between 1 and %d\n" msgstr "" -#: src/dird/ua_select.c:355 src/dird/ua_select.c:464 src/dird/ua_dotcmds.c:735 -#: src/dird/ua_cmds.c:996 src/dird/ua_run.c:230 -#: src/wx-console/wxbrestorepanel.cpp:336 -#: src/wx-console/wxbrestorepanel.cpp:354 -#: src/wx-console/wxbrestorepanel.cpp:431 -#: src/wx-console/wxbrestorepanel.cpp:432 -#: src/wx-console/wxbrestorepanel.cpp:442 -#: src/wx-console/wxbrestorepanel.cpp:443 -#: src/wx-console/wxbrestorepanel.cpp:700 -#: src/wx-console/wxbrestorepanel.cpp:1133 -#: src/wx-console/wxbrestorepanel.cpp:1136 -#: src/wx-console/wxbrestorepanel.cpp:1238 -#: src/wx-console/wxbrestorepanel.cpp:1838 -#: src/wx-console/wxbrestorepanel.cpp:1840 -#: src/wx-console/wxbrestorepanel.cpp:1914 -#: src/wx-console/wxbrestorepanel.cpp:1970 -msgid "Client" +#: src/console/console.c:941 +#, c-format +msgid "You must enter a number between 1 and %d\n" msgstr "" -#: src/dird/ua_select.c:355 -msgid "Select Client (File daemon) resource" +#: src/console/console.c:1095 src/stored/stored.c:215 src/dird/dird.c:267 +#: src/filed/filed.c:204 src/qt-console/main.cpp:154 +msgid "Cryptography library initialization failed.\n" msgstr "" -#: src/dird/ua_select.c:382 +#: src/console/console.c:1099 src/stored/stored.c:219 src/dird/dird.c:271 +#: src/dird/dird.c:299 src/dird/dird.c:517 src/dird/dird.c:520 +#: src/filed/filed.c:209 src/qt-console/main.cpp:158 #, c-format -msgid "Error: Client resource %s does not exist.\n" +msgid "Please correct configuration file: %s\n" msgstr "" -#: src/dird/ua_select.c:407 +#: src/console/console.c:1129 #, c-format -msgid "Could not find Client %s: ERR=%s" +msgid "Connecting to Director %s:%d\n" msgstr "" -#: src/dird/ua_select.c:417 src/dird/ua_select.c:471 +#: src/console/console.c:1146 src/qt-console/bcomm/dircomm.cpp:118 #, c-format -msgid "Could not find Client \"%s\": ERR=%s" +msgid "Failed to initialize TLS context for Console \"%s\".\n" msgstr "" -#: src/dird/ua_select.c:446 +#: src/console/console.c:1166 src/qt-console/bcomm/dircomm.cpp:141 #, c-format -msgid "Error obtaining client ids. ERR=%s\n" -msgstr "" - -#: src/dird/ua_select.c:450 -msgid "No clients defined. You must run a job before using this command.\n" +msgid "Failed to initialize TLS context for Director \"%s\".\n" msgstr "" -#: src/dird/ua_select.c:454 -msgid "Defined Clients:\n" +#: src/console/console.c:1198 +msgid "Enter a period to cancel a command.\n" msgstr "" -#: src/dird/ua_select.c:464 -msgid "Select the Client" +#: src/console/console.c:1284 src/console/console.c:1314 +#: src/stored/stored.c:342 src/dird/dird.c:607 src/dird/dird.c:813 +#: src/dird/dird.c:868 src/dird/dird.c:907 src/filed/filed.c:366 +#: src/filed/filed.c:566 src/qt-console/main.cpp:213 +#: src/qt-console/main.cpp:243 +msgid "TLS required but not configured in Bacula.\n" msgstr "" -#: src/dird/ua_select.c:497 src/dird/ua_select.c:521 src/dird/ua_select.c:566 +#: src/console/console.c:1292 src/qt-console/main.cpp:221 #, c-format -msgid "Could not find Pool \"%s\": ERR=%s" +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Director \"%s\" in %s. At least one CA certificate store is required.\n" msgstr "" -#: src/dird/ua_select.c:532 src/dird/ua_output.c:476 src/dird/ua_update.c:436 +#: src/console/console.c:1301 src/qt-console/main.cpp:230 #, c-format -msgid "Error obtaining pool ids. ERR=%s\n" +msgid "" +"No Director resource defined in %s\n" +"Without that I don't how to speak to the Director :-(\n" msgstr "" -#: src/dird/ua_select.c:536 -msgid "No pools defined. Use the \"create\" command to create one.\n" +#: src/console/console.c:1321 src/qt-console/main.cpp:251 +#, c-format +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Console \"%s\" in %s.\n" msgstr "" -#: src/dird/ua_select.c:540 -msgid "Defined Pools:\n" +#: src/console/console.c:1347 +msgid "Too many arguments on input command.\n" msgstr "" -#: src/dird/ua_select.c:542 src/dird/ua_select.c:562 src/dird/ua_update.c:365 -#: src/baconfig.h:88 -msgid "*None*" +#: src/console/console.c:1351 +msgid "First argument to input command must be a filename.\n" msgstr "" -#: src/dird/ua_select.c:553 src/dird/ua_select.c:666 src/dird/ua_update.c:616 -#: src/dird/ua_run.c:238 src/wx-console/wxbrestorepanel.cpp:338 -#: src/wx-console/wxbrestorepanel.cpp:527 -#: src/wx-console/wxbrestorepanel.cpp:537 -#: src/wx-console/wxbrestorepanel.cpp:1834 -msgid "Pool" +#: src/console/console.c:1357 +#, c-format +msgid "Cannot open file %s for input. ERR=%s\n" msgstr "" -#: src/dird/ua_select.c:553 -msgid "Select the Pool" +#: src/console/console.c:1389 +msgid "Too many arguments on output/tee command.\n" msgstr "" -#: src/dird/ua_select.c:591 +#: src/console/console.c:1406 #, c-format -msgid "No access to Pool \"%s\"\n" +msgid "Cannot open file %s for output. ERR=%s\n" msgstr "" -#: src/dird/ua_select.c:623 -msgid "Enter *MediaId or Volume name: " +#: src/console/console.c:1425 +msgid "Too many arguments. Enclose command in double quotes.\n" msgstr "" -#: src/dird/ua_select.c:658 -msgid "The defined Pool resources are:\n" +#: src/console/console.c:1434 +#, c-format +msgid "Cannot popen(\"%s\", \"r\"): ERR=%s\n" msgstr "" -#: src/dird/ua_select.c:666 -msgid "Select Pool resource" +#: src/console/console.c:1446 src/stored/autochanger.c:665 +#, c-format +msgid "Autochanger error: ERR=%s\n" msgstr "" -#: src/dird/ua_select.c:690 src/dird/ua_restore.c:555 +#: src/cats/sql_list.c:46 #, c-format -msgid "Error: Pool resource \"%s\" does not exist.\n" +msgid "Query failed: %s\n" msgstr "" -#: src/dird/ua_select.c:701 -msgid "Enter the JobId to select: " +#: src/cats/sql_list.c:262 +msgid "These JobIds have copies as follows:\n" msgstr "" -#: src/dird/ua_select.c:739 -#, c-format -msgid "Could not find Job \"%s\": ERR=%s" +#: src/cats/sql_list.c:264 +msgid "The catalog contains copies as follows:\n" msgstr "" -#: src/dird/ua_select.c:819 +#: src/cats/sql_get.c:139 #, c-format -msgid "Automatically selected %s: %s\n" +msgid "Error fetching row: %s\n" msgstr "" -#: src/dird/ua_select.c:830 +#: src/cats/sql_get.c:146 #, c-format -msgid "" -"Your request has multiple choices for \"%s\". Selection is not possible in " -"batch mode.\n" +msgid "get_file_record want 1 got rows=%d PathId=%s FilenameId=%s\n" msgstr "" -#: src/dird/ua_select.c:848 +#: src/cats/sql_get.c:154 #, c-format -msgid "Selection list for \"%s\" is empty!\n" +msgid "File record for PathId=%s FilenameId=%s not found.\n" msgstr "" -#: src/dird/ua_select.c:854 -#, c-format -msgid "Automatically selected: %s\n" +#: src/cats/sql_get.c:160 +msgid "File record not found in Catalog.\n" msgstr "" -#: src/dird/ua_select.c:866 -msgid "Selection aborted, nothing done.\n" +#: src/cats/sql_get.c:187 +#, c-format +msgid "More than one Filename!: %s for file: %s\n" msgstr "" -#: src/dird/ua_select.c:871 +#: src/cats/sql_get.c:193 src/cats/sql_get.c:246 src/cats/sql_get.c:623 +#: src/cats/sql_get.c:724 src/cats/sql_get.c:1043 src/cats/sql.c:341 +#: src/cats/sql.c:348 src/cats/sql_create.c:584 src/cats/postgresql.c:153 #, c-format -msgid "Please enter a number between 1 and %d\n" +msgid "error fetching row: %s\n" msgstr "" -#: src/dird/ua_select.c:920 -msgid "Storage name given twice.\n" +#: src/cats/sql_get.c:197 +#, c-format +msgid "Get DB Filename record %s found bad record: %d\n" msgstr "" -#: src/dird/ua_select.c:937 +#: src/cats/sql_get.c:203 #, c-format -msgid "Expecting jobid=nn command, got: %s\n" +msgid "Filename record: %s not found.\n" msgstr "" -#: src/dird/ua_select.c:941 +#: src/cats/sql_get.c:207 #, c-format -msgid "JobId %s is not running.\n" +msgid "Filename record: %s not found in Catalog.\n" msgstr "" -#: src/dird/ua_select.c:951 +#: src/cats/sql_get.c:239 src/cats/sql_create.c:577 #, c-format -msgid "Expecting job=xxx, got: %s.\n" +msgid "More than one Path!: %s for path: %s\n" msgstr "" -#: src/dird/ua_select.c:955 src/dird/ua_select.c:967 +#: src/cats/sql_get.c:250 #, c-format -msgid "Job \"%s\" is not running.\n" +msgid "Get DB path record %s found bad record: %s\n" msgstr "" -#: src/dird/ua_select.c:963 +#: src/cats/sql_get.c:263 #, c-format -msgid "Expecting ujobid=xxx, got: %s.\n" +msgid "Path record: %s not found.\n" msgstr "" -#: src/dird/ua_select.c:983 +#: src/cats/sql_get.c:267 #, c-format -msgid "Storage resource \"%s\": not found\n" +msgid "Path record: %s not found in Catalog.\n" msgstr "" -#: src/dird/ua_select.c:1015 -msgid "Enter autochanger drive[0]: " +#: src/cats/sql_get.c:306 +#, c-format +msgid "No Job found for JobId %s\n" msgstr "" -#: src/dird/ua_select.c:1036 -msgid "Enter autochanger slot: " +#: src/cats/sql_get.c:379 src/cats/sql_get.c:436 +#, c-format +msgid "No volumes found for JobId=%d\n" msgstr "" -#: src/dird/ua_select.c:1066 -msgid "Media Types defined in conf file:\n" +#: src/cats/sql_get.c:385 src/cats/sql_get.c:447 +#, c-format +msgid "Error fetching row %d: ERR=%s\n" msgstr "" -#: src/dird/ua_select.c:1072 -msgid "Media Type" +#: src/cats/sql_get.c:399 +#, c-format +msgid "No Volume for JobId %d found in Catalog.\n" msgstr "" -#: src/dird/ua_select.c:1072 -msgid "Select the Media Type" +#: src/cats/sql_get.c:540 +#, c-format +msgid "Pool id select failed: ERR=%s\n" msgstr "" -#: src/dird/ua_select.c:1111 +#: src/cats/sql_get.c:577 #, c-format -msgid "JobId %s is not running. Use Job name to %s inactive jobs.\n" +msgid "Client id select failed: ERR=%s\n" msgstr "" -#: src/dird/ua_select.c:1120 src/dird/ua_select.c:1130 +#: src/cats/sql_get.c:618 #, c-format -msgid "Warning Job %s is not running. Continuing anyway ...\n" +msgid "More than one Pool!: %s\n" msgstr "" -#: src/dird/ua_select.c:1140 src/dird/ua_cmds.c:692 src/dird/ua_cmds.c:738 -msgid "Unauthorized command from this console.\n" +#: src/cats/sql_get.c:681 +msgid "Pool record not found in Catalog.\n" msgstr "" -#: src/dird/ua_select.c:1165 src/stored/status.c:538 src/filed/status.c:241 -msgid "No Jobs running.\n" +#: src/cats/sql_get.c:719 +#, c-format +msgid "More than one Client!: %s\n" msgstr "" -#: src/dird/ua_select.c:1167 -msgid "None of your jobs are running.\n" +#: src/cats/sql_get.c:736 src/cats/sql_get.c:740 +msgid "Client record not found in Catalog.\n" msgstr "" -#: src/dird/ua_select.c:1172 -msgid "Select Job:\n" +#: src/cats/sql_get.c:767 +#, c-format +msgid "More than one Counter!: %d\n" msgstr "" -#: src/dird/ua_select.c:1181 +#: src/cats/sql_get.c:772 #, c-format -msgid "JobId=%s Job=%s" +msgid "error fetching Counter row: %s\n" msgstr "" -#: src/dird/ua_select.c:1185 +#: src/cats/sql_get.c:792 #, c-format -msgid "Choose Job to %s" +msgid "Counter record: %s not found in Catalog.\n" msgstr "" -#: src/dird/ua_select.c:1192 +#: src/cats/sql_get.c:832 #, c-format -msgid "" -"Cancel: %s\n" -"\n" -"%s" +msgid "Error got %s FileSets but expected only one!\n" msgstr "" -#: src/dird/ua_select.c:1193 -msgid "Confirm cancel?" +#: src/cats/sql_get.c:837 +#, c-format +msgid "FileSet record \"%s\" not found.\n" msgstr "" -#: src/dird/ua_select.c:1199 -msgid "Confirm cancel (yes/no): " +#: src/cats/sql_get.c:847 +msgid "FileSet record not found in Catalog.\n" msgstr "" -#: src/dird/ua_select.c:1208 src/dird/ua_cmds.c:733 src/dird/ua_cmds.c:1100 +#: src/cats/sql_get.c:943 #, c-format -msgid "Job \"%s\" not found.\n" +msgid "Media id select failed: ERR=%s\n" msgstr "" -#: src/dird/bsr.c:173 +#: src/cats/sql_get.c:981 #, c-format -msgid "Unable to get Job record. ERR=%s\n" +msgid "query dbids failed: ERR=%s\n" msgstr "" -#: src/dird/bsr.c:184 +#: src/cats/sql_get.c:1038 #, c-format -msgid "Unable to get Job Volume Parameters. ERR=%s\n" +msgid "More than one Volume!: %s\n" msgstr "" -#: src/dird/bsr.c:232 +#: src/cats/sql_get.c:1094 #, c-format -msgid "Unable to create bootstrap file %s. ERR=%s\n" +msgid "Media record MediaId=%s not found.\n" msgstr "" -#: src/dird/bsr.c:241 -msgid "No files found to read. No bootstrap file written.\n" +#: src/cats/sql_get.c:1097 +#, c-format +msgid "Media record for Volume \"%s\" not found.\n" msgstr "" -#: src/dird/bsr.c:245 -msgid "Error writing bsr file.\n" +#: src/cats/sql_get.c:1104 +#, c-format +msgid "Media record for MediaId=%u not found in Catalog.\n" msgstr "" -#: src/dird/bsr.c:250 +#: src/cats/sql_get.c:1107 #, c-format -msgid "Bootstrap records written to %s\n" +msgid "Media record for Vol=%s not found in Catalog.\n" msgstr "" -#: src/dird/bsr.c:298 -msgid "" -"The job will require the following\n" -" Volume(s) Storage(s) SD Device(s)\n" -"===========================================================================\n" +#: src/cats/sql_get.c:1140 src/cats/sql_create.c:1183 +msgid "ERR=JobIds are empty\n" msgstr "" -#: src/dird/bsr.c:317 -msgid "No Volumes found to restore.\n" +#: src/cats/sql_find.c:86 src/cats/sql_find.c:115 src/cats/sql_find.c:170 +#, c-format +msgid "" +"Query error for start time request: ERR=%s\n" +"CMD=%s\n" msgstr "" -#: src/dird/bsr.c:319 -msgid "" -"\n" -"Volumes marked with \"*\" are online.\n" +#: src/cats/sql_find.c:92 src/cats/sql_find.c:176 +msgid "No prior Full backup Job record found.\n" msgstr "" -#: src/dird/ua_server.c:69 +#: src/cats/sql_find.c:104 #, c-format -msgid "Cannot create UA thread: %s\n" +msgid "Unknown level=%d\n" msgstr "" -#: src/dird/ua_server.c:159 -msgid "You have messages.\n" -msgstr "" - -#: src/dird/verify.c:86 src/dird/verify.c:318 +#: src/cats/sql_find.c:121 #, c-format -msgid "Unimplemented Verify level %d(%c)\n" -msgstr "" - -#: src/dird/verify.c:148 msgid "" -"Unable to find JobId of previous InitCatalog Job.\n" -"Please run a Verify with Level=InitCatalog before\n" -"running the current Job.\n" +"No Job record found: ERR=%s\n" +"CMD=%s\n" msgstr "" -#: src/dird/verify.c:153 -msgid "Unable to find JobId of previous Job for this client.\n" +#: src/cats/sql_find.c:279 +#, c-format +msgid "Unknown Job level=%d\n" msgstr "" -#: src/dird/verify.c:170 +#: src/cats/sql_find.c:289 #, c-format -msgid "Could not get job record for previous Job. ERR=%s" +msgid "No Job found for: %s.\n" msgstr "" -#: src/dird/verify.c:176 +#: src/cats/sql_find.c:300 #, c-format -msgid "Last Job %d did not terminate normally. JobStatus=%c\n" +msgid "No Job found for: %s\n" msgstr "" -#: src/dird/verify.c:180 +#: src/cats/sql_find.c:386 #, c-format -msgid "Verifying against JobId=%d Job=%s\n" +msgid "Request for Volume item %d greater than max %d or less than 1\n" msgstr "" -#: src/dird/verify.c:219 +#: src/cats/sql_find.c:401 #, c-format -msgid "Start Verify JobId=%s Level=%s Job=%s\n" +msgid "No Volume record found for item %d.\n" msgstr "" -#: src/dird/verify.c:305 -msgid "Deprecated feature ... use bootstrap.\n" +#: src/cats/cats_dummy.c:27 +msgid "Please replace this null libbaccats library with a proper one.\n" msgstr "" -#: src/dird/verify.c:372 +#: src/cats/sql.c:185 #, c-format -msgid "Unimplemented verify level %d\n" -msgstr "" - -#: src/dird/verify.c:421 -msgid "Verify OK" +msgid "" +"Potential performance problem:\n" +"max_connections=%d set for %s database \"%s\" should be larger than " +"Director's MaxConcurrentJobs=%d\n" msgstr "" -#: src/dird/verify.c:425 -msgid "*** Verify Error ***" +#: src/cats/sql.c:230 +#, c-format +msgid "" +"query %s failed:\n" +"%s\n" msgstr "" -#: src/dird/verify.c:429 -msgid "Verify warnings" +#: src/cats/sql.c:252 +#, c-format +msgid "" +"insert %s failed:\n" +"%s\n" msgstr "" -#: src/dird/verify.c:432 -msgid "Verify Canceled" +#: src/cats/sql.c:262 +#, c-format +msgid "Insertion problem: affected_rows=%s\n" msgstr "" -#: src/dird/verify.c:435 -msgid "Verify Differences" +#: src/cats/sql.c:283 +#, c-format +msgid "" +"update %s failed:\n" +"%s\n" msgstr "" -#: src/dird/verify.c:440 +#: src/cats/sql.c:293 #, c-format -msgid "Inappropriate term code: %d %c\n" +msgid "Update failed: affected_rows=%s for %s\n" msgstr "" -#: src/dird/verify.c:454 +#: src/cats/sql.c:315 #, c-format msgid "" -"%s %s %s (%s):\n" -" Build OS: %s %s %s\n" -" JobId: %d\n" -" Job: %s\n" -" FileSet: %s\n" -" Verify Level: %s\n" -" Client: %s\n" -" Verify JobId: %d\n" -" Verify Job: %s\n" -" Start time: %s\n" -" End time: %s\n" -" Files Expected: %s\n" -" Files Examined: %s\n" -" Non-fatal FD errors: %d\n" -" FD termination status: %s\n" -" SD termination status: %s\n" -" Termination: %s\n" -"\n" +"delete %s failed:\n" +"%s\n" msgstr "" -#: src/dird/verify.c:489 +#: src/cats/sql.c:409 #, c-format -msgid "" -"%s %s %s (%s):\n" -" Build: %s %s %s\n" -" JobId: %d\n" -" Job: %s\n" -" FileSet: %s\n" -" Verify Level: %s\n" -" Client: %s\n" -" Verify JobId: %d\n" -" Verify Job: %s\n" -" Start time: %s\n" -" End time: %s\n" -" Files Examined: %s\n" -" Non-fatal FD errors: %d\n" -" FD termination status: %s\n" -" Termination: %s\n" -"\n" +msgid "Path length is zero. File=%s\n" msgstr "" -#: src/dird/verify.c:567 +#: src/cats/sql.c:604 +msgid "No results to list.\n" +msgstr "" + +#: src/cats/sql.c:722 +msgid "Could not init database batch connection\n" +msgstr "" + +#: src/cats/sql.c:728 #, c-format -msgid "" -"bird set configuration file to file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -f run in foreground (for debugging)\n" -" -g groupid\n" -" -m print kaboom output (for debugging)\n" -" -r run now\n" -" -s no signals\n" -" -t test - read configuration and exit\n" -" -u userid\n" -" -v verbose user messages\n" -" -? print this message.\n" -"\n" +msgid "Error fetching row for file=%s: ERR=%s\n" msgstr "" -#: src/dird/dird.c:296 src/stored/stored.c:227 src/console/console.c:1109 -#: src/filed/filed.c:218 src/qt-console/main.cpp:165 -msgid "Cryptography library initialization failed.\n" +#: src/cats/sql_create.c:1048 +#, c-format +msgid "Create db Filename record %s failed. ERR=%s\n" msgstr "" -#: src/dird/dird.c:300 src/dird/dird.c:328 src/dird/dird.c:560 -#: src/dird/dird.c:563 src/stored/stored.c:231 src/console/console.c:1113 -#: src/filed/filed.c:223 src/qt-console/main.cpp:169 +#: src/cats/sql_create.c:1068 #, c-format -msgid "Please correct configuration file: %s\n" +msgid "Attempt to put non-attributes into catalog. Stream=%d\n" msgstr "" -#: src/dird/dird.c:546 -msgid "Too many open reload requests. Request ignored.\n" +#: src/cats/sql_create.c:1084 +msgid "Cannot Copy/Migrate job using BaseJob.\n" msgstr "" -#: src/dird/dird.c:561 -msgid "Out of reload table entries. Giving up.\n" +#: src/cats/sql_create.c:1236 +#, c-format +msgid "Create db Object record %s failed. ERR=%s" msgstr "" -#: src/dird/dird.c:564 -msgid "Resetting previous configuration.\n" +#: src/cats/mysql.c:152 src/cats/postgresql.c:198 src/cats/sqlite.c:154 +#, c-format +msgid "Unable to initialize DB lock. ERR=%s\n" msgstr "" -#: src/dird/dird.c:628 +#: src/cats/mysql.c:195 #, c-format msgid "" -"No Director resource defined in %s\n" -"Without that I don't know who I am :-(\n" +"Unable to connect to MySQL server.\n" +"Database=%s User=%s\n" +"MySQL connect failed either server not running or your authorization is " +"incorrect.\n" msgstr "" -#: src/dird/dird.c:636 src/filed/filed.c:350 +#: src/cats/mysql.c:359 src/cats/postgresql.c:442 src/cats/sqlite.c:374 +#: src/dird/fd_cmds.c:836 src/dird/fd_cmds.c:896 #, c-format -msgid "No Messages resource defined in %s\n" +msgid "Attribute create error. %s" msgstr "" -#: src/dird/dird.c:641 +#: src/cats/mysql.c:381 src/cats/cats.c:121 src/cats/postgresql.c:494 +#: src/cats/postgresql.c:541 src/cats/sqlite.c:449 #, c-format -msgid "Only one Director resource permitted in %s\n" +msgid "Query failed: %s: ERR=%s\n" msgstr "" -#: src/dird/dird.c:650 src/dird/dird.c:856 src/dird/dird.c:911 -#: src/dird/dird.c:950 src/stored/stored.c:354 src/console/console.c:1296 -#: src/console/console.c:1326 src/filed/filed.c:357 src/filed/filed.c:516 -#: src/wx-console/console_thread.cpp:118 src/wx-console/console_thread.cpp:144 -#: src/qt-console/main.cpp:224 src/qt-console/main.cpp:254 -msgid "TLS required but not configured in Bacula.\n" +#: src/cats/mysql.c:680 +msgid "A user name for MySQL must be supplied.\n" msgstr "" -#: src/dird/dird.c:658 src/stored/stored.c:410 src/filed/filed.c:526 +#: src/cats/postgresql.c:169 #, c-format -msgid "\"TLS Certificate\" file not defined for Director \"%s\" in %s.\n" +msgid "Encoding error for database \"%s\". Wanted SQL_ASCII, got %s\n" msgstr "" -#: src/dird/dird.c:664 src/stored/stored.c:416 src/filed/filed.c:532 +#: src/cats/postgresql.c:234 #, c-format -msgid "\"TLS Key\" file not defined for Director \"%s\" in %s.\n" +msgid "" +"Unable to connect to PostgreSQL server. Database=%s User=%s\n" +"Possible causes: SQL server not running; password incorrect; max_connections " +"exceeded.\n" msgstr "" -#: src/dird/dird.c:671 src/stored/stored.c:422 src/filed/filed.c:538 -#, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Director \"%s\" in %s. At least one CA certificate store is required when " -"using \"TLS Verify Peer\".\n" +#: src/cats/postgresql.c:338 +msgid "PQescapeStringConn returned non-zero.\n" msgstr "" -#: src/dird/dird.c:690 src/stored/stored.c:441 src/filed/filed.c:557 -#, c-format -msgid "Failed to initialize TLS context for Director \"%s\" in %s.\n" +#: src/cats/postgresql.c:356 +msgid "PQescapeByteaConn returned NULL.\n" msgstr "" -#: src/dird/dird.c:698 -#, c-format -msgid "No Job records defined in %s\n" +#: src/cats/postgresql.c:387 +msgid "PQunescapeByteaConn returned NULL.\n" msgstr "" -#: src/dird/dird.c:756 src/dird/dird.c:769 +#: src/cats/postgresql.c:801 #, c-format -msgid "Hey something is wrong. p=0x%lu\n" +msgid "error fetching currval: %s\n" msgstr "" -#: src/dird/dird.c:830 +#: src/cats/postgresql.c:992 #, c-format -msgid "\"%s\" directive in Job \"%s\" resource is required, but not found.\n" +msgid "error starting batch mode: %s" msgstr "" -#: src/dird/dird.c:837 -msgid "Too many items in Job resource\n" +#: src/cats/postgresql.c:1022 src/cats/postgresql.c:1029 +#, c-format +msgid "error ending batch mode: %s" msgstr "" -#: src/dird/dird.c:841 +#: src/cats/postgresql.c:1079 #, c-format -msgid "No storage specified in Job \"%s\" nor in Pool.\n" +msgid "error copying in batch mode: %s" msgstr "" -#: src/dird/dird.c:865 -#, c-format -msgid "\"TLS Certificate\" file not defined for Console \"%s\" in %s.\n" +#: src/cats/postgresql.c:1101 +msgid "A user name for PostgreSQL must be supplied.\n" msgstr "" -#: src/dird/dird.c:871 +#: src/cats/sqlite.c:169 #, c-format -msgid "\"TLS Key\" file not defined for Console \"%s\" in %s.\n" +msgid "Database %s does not exist, please create it.\n" msgstr "" -#: src/dird/dird.c:878 +#: src/cats/sqlite.c:191 #, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Console \"%s\" in %s. At least one CA certificate store is required when " -"using \"TLS Verify Peer\".\n" +msgid "Unable to open Database=%s. ERR=%s\n" msgstr "" -#: src/dird/dird.c:895 src/dird/dird.c:935 src/filed/filed.c:382 -#, c-format -msgid "Failed to initialize TLS context for File daemon \"%s\" in %s.\n" +#: src/cats/sqlite.c:192 +msgid "unknown" msgstr "" -#: src/dird/dird.c:918 +#: src/cats/sql_delete.c:65 #, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"File daemon \"%s\" in %s.\n" +msgid "No pool record %s exists\n" msgstr "" -#: src/dird/dird.c:959 +#: src/cats/sql_delete.c:70 #, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Storage \"%s\" in %s.\n" +msgid "Expecting one pool record, got %d\n" msgstr "" -#: src/dird/dird.c:975 src/stored/stored.c:394 +#: src/cats/sql_delete.c:76 #, c-format -msgid "Failed to initialize TLS context for Storage \"%s\" in %s.\n" +msgid "Error fetching row %s\n" msgstr "" -#: src/dird/dird.c:1014 src/dird/dird.c:1016 -#, c-format -msgid "Could not open Catalog \"%s\", database \"%s\".\n" +#: src/stored/job.c:190 +msgid "Client socket not open. Could not connect to Client.\n" msgstr "" -#: src/dird/dird.c:1019 src/tools/cats_test.c:377 +#: src/stored/job.c:205 src/stored/job.c:207 #, c-format -msgid "%s" +msgid "Recv request to Client failed. ERR=%s\n" msgstr "" -#: src/dird/dird.c:1098 +#: src/stored/job.c:213 src/stored/job.c:214 #, c-format -msgid "Could not create storage record for %s\n" +msgid "Bad Hello from Client: %s.\n" msgstr "" -#: src/dird/dird.c:1106 -#, c-format -msgid "Could not update storage record for %s\n" +#: src/stored/job.c:228 src/stored/job.c:311 +msgid "Unable to authenticate File daemon\n" msgstr "" -#: src/dird/dird.c:1181 src/dird/migrate.c:1072 src/stored/stored.c:491 +#: src/stored/job.c:282 #, c-format -msgid "Could not compile regex pattern \"%s\" ERR=%s\n" +msgid "FD connect failed: Job name not found: %s\n" msgstr "" -#: src/dird/inc_conf.c:312 +#: src/stored/job.c:291 #, c-format -msgid "Expected a strip path positive integer, got:%s:" +msgid "Hey!!!! JobId %u Job %s already authenticated.\n" msgstr "" -#: src/dird/inc_conf.c:332 -#, c-format -msgid "Expected a FileSet option keyword, got:%s:" +#: src/stored/job.c:441 +msgid "In free_jcr(), but still attached to device!!!!\n" msgstr "" -#: src/dird/inc_conf.c:365 -msgid "Old style Include/Exclude not supported\n" +#: src/stored/vbackup.c:67 +msgid "Read and write devices not properly initialized.\n" msgstr "" -#: src/dird/inc_conf.c:393 src/dird/inc_conf.c:739 src/dird/dird_conf.c:2022 +#: src/stored/vbackup.c:73 #, c-format -msgid "Expecting keyword, got: %s\n" +msgid "No Volume names found for %s.\n" msgstr "" -#: src/dird/inc_conf.c:401 src/dird/inc_conf.c:745 src/dird/dird_conf.c:2028 -#: src/lib/parse_conf.c:976 +#: src/stored/vbackup.c:114 src/stored/vbackup.c:248 src/stored/append.c:261 +#: src/stored/spool.c:262 #, c-format -msgid "expected an equals, got: %s" +msgid "Fatal append error on device %s: ERR=%s\n" msgstr "" -#: src/dird/inc_conf.c:411 src/dird/inc_conf.c:754 src/dird/dird_conf.c:2039 -#, c-format -msgid "Keyword %s not permitted in this resource" +#: src/stored/vbackup.c:116 src/stored/append.c:263 +msgid "Set ok=FALSE after write_block_to_device.\n" msgstr "" -#: src/dird/inc_conf.c:464 +#: src/stored/vbackup.c:139 src/stored/append.c:287 src/stored/read.c:92 #, c-format -msgid "Regex compile error. ERR=%s\n" +msgid "Elapsed time=%02d:%02d:%02d, Transfer rate=%s Bytes/second\n" msgstr "" -#: src/dird/inc_conf.c:485 -#, c-format -msgid "Expected a regex string, got: %s\n" +#: src/stored/append.c:49 +msgid "DCR is NULL!!!\n" msgstr "" -#: src/dird/inc_conf.c:559 -#, c-format -msgid "Expected a wild-card string, got: %s\n" +#: src/stored/append.c:55 +msgid "DEVICE is NULL!!!\n" msgstr "" -#: src/dird/inc_conf.c:582 -#, c-format -msgid "Expected an fstype string, got: %s\n" +#: src/stored/append.c:66 +msgid "Unable to set network buffer size.\n" msgstr "" -#: src/dird/inc_conf.c:593 -msgid "ExcludeDirContaining directive not permitted in Exclude.\n" +#: src/stored/append.c:80 src/stored/append.c:90 src/stored/append.c:103 +#: src/stored/askdir.c:355 src/stored/askdir.c:356 +msgid "NULL Volume name. This shouldn't happen!!!\n" msgstr "" -#: src/dird/inc_conf.c:620 +#: src/stored/append.c:96 src/stored/btape.c:2232 #, c-format -msgid "Expected an drivetype string, got: %s\n" +msgid "Write session label failed. ERR=%s\n" msgstr "" -#: src/dird/inc_conf.c:644 src/dird/inc_conf.c:687 +#: src/stored/append.c:109 #, c-format -msgid "Backslash found. Use forward slashes or quote the string.: %s\n" +msgid "Network send error to FD. ERR=%s\n" msgstr "" -#: src/dird/inc_conf.c:659 src/dird/inc_conf.c:702 +#: src/stored/append.c:148 #, c-format -msgid "Expected a filename, got: %s" -msgstr "" - -#: src/dird/inc_conf.c:676 -msgid "Plugin directive not permitted in Exclude\n" +msgid "Error reading data header from FD. n=%d msglen=%d ERR=%s\n" msgstr "" -#: src/dird/inc_conf.c:719 -msgid "Options section not permitted in Exclude\n" +#: src/stored/append.c:155 +#, c-format +msgid "Malformed data header from FD: %s\n" msgstr "" -#: src/dird/inc_conf.c:724 src/dird/dird_conf.c:2008 +#: src/stored/append.c:174 #, c-format -msgid "Expecting open brace. Got %s" +msgid "FI=%d from FD not positive or last_FI=%d\n" msgstr "" -#: src/dird/inc_conf.c:779 +#: src/stored/append.c:222 #, c-format -msgid "Expected a FileSet keyword, got: %s" +msgid "Network error reading from FD. ERR=%s\n" msgstr "" -#: src/dird/ua_query.c:73 src/findlib/create_file.c:288 -#: src/findlib/create_file.c:391 +#: src/stored/append.c:251 src/stored/btape.c:2351 #, c-format -msgid "Could not open %s: ERR=%s\n" +msgid "Error writing end session label. ERR=%s\n" msgstr "" -#: src/dird/ua_query.c:78 -msgid "Available queries:\n" +#: src/stored/append.c:324 +#, c-format +msgid "Error updating file attributes. ERR=%s\n" msgstr "" -#: src/dird/ua_query.c:85 -msgid "Choose a query" +#: src/stored/mount.c:87 +#, c-format +msgid "Too many errors trying to mount %s device %s.\n" msgstr "" -#: src/dird/ua_query.c:99 -msgid "Could not find query.\n" +#: src/stored/mount.c:95 +#, c-format +msgid "Job %d canceled.\n" msgstr "" -#: src/dird/ua_query.c:117 -msgid "Too many prompts in query, max is 9.\n" +#: src/stored/mount.c:211 +#, c-format +msgid "Open of %s device %s Volume \"%s\" failed: ERR=%s\n" msgstr "" -#: src/dird/ua_query.c:220 +#: src/stored/mount.c:276 #, c-format -msgid "Warning prompt %d missing.\n" +msgid "Volume \"%s\" previously written, moving to end of data.\n" msgstr "" -#: src/dird/ua_query.c:265 -msgid "" -"Entering SQL query mode.\n" -"Terminate each query with a semicolon.\n" -"Terminate query mode with a blank line.\n" +#: src/stored/mount.c:282 +#, c-format +msgid "Unable to position to end of data on %s device %s: ERR=%s\n" msgstr "" -#: src/dird/ua_query.c:268 src/dird/ua_query.c:284 -msgid "Enter SQL query: " +#: src/stored/mount.c:420 src/stored/mount.c:781 +#, c-format +msgid "Volume \"%s\" not on %s device %s.\n" msgstr "" -#: src/dird/ua_query.c:286 -msgid "Add to SQL query: " +#: src/stored/mount.c:453 +#, c-format +msgid "" +"Director wanted Volume \"%s\".\n" +" Current Volume \"%s\" not acceptable because:\n" +" %s" msgstr "" -#: src/dird/ua_query.c:289 -msgid "End query mode.\n" +#: src/stored/mount.c:473 src/stored/label.c:232 src/stored/label.c:383 +#, c-format +msgid "Could not reserve volume %s on %s device %s\n" msgstr "" -#: src/dird/newvol.c:90 +#: src/stored/mount.c:631 #, c-format -msgid "Illegal character in Volume name \"%s\"\n" +msgid "Ready to append to end of Volume \"%s\" part=%d size=%s\n" msgstr "" -#: src/dird/newvol.c:104 +#: src/stored/mount.c:635 #, c-format -msgid "Created new Volume \"%s\" in catalog.\n" +msgid "" +"Bacula cannot write on DVD Volume \"%s\" because: The sizes do not match! " +"Volume=%s Catalog=%s\n" msgstr "" -#: src/dird/newvol.c:131 +#: src/stored/mount.c:649 #, c-format -msgid "SQL failed, but ignored. ERR=%s\n" +msgid "Ready to append to end of Volume \"%s\" at file=%d.\n" msgstr "" -#: src/dird/newvol.c:141 +#: src/stored/mount.c:652 #, c-format -msgid "Wanted to create Volume \"%s\", but it already exists. Trying again.\n" +msgid "" +"For Volume \"%s\":\n" +"The number of files mismatch! Volume=%u Catalog=%u\n" +"Correcting Catalog\n" msgstr "" -#: src/dird/newvol.c:150 -msgid "Too many failures. Giving up creating Volume name.\n" +#: src/stored/mount.c:659 src/stored/mount.c:694 +msgid "Error updating Catalog\n" msgstr "" -#: src/dird/expand.c:255 +#: src/stored/mount.c:664 #, c-format -msgid "Count not update counter %s: ERR=%s\n" +msgid "" +"Bacula cannot write on tape Volume \"%s\" because:\n" +"The number of files mismatch! Volume=%u Catalog=%u\n" msgstr "" -#: src/dird/expand.c:427 +#: src/stored/mount.c:679 #, c-format -msgid "Cannot create var context: ERR=%s\n" +msgid "Ready to append to end of Volume \"%s\" size=%s\n" msgstr "" -#: src/dird/expand.c:432 +#: src/stored/mount.c:684 #, c-format -msgid "Cannot set var callback: ERR=%s\n" +msgid "" +"For Volume \"%s\":\n" +" The sizes do not match! Volume=%s Catalog=%s\n" +" Correcting Catalog\n" msgstr "" -#: src/dird/expand.c:438 +#: src/stored/mount.c:699 #, c-format -msgid "Cannot set var operate: ERR=%s\n" +msgid "" +"Bacula cannot write on disk Volume \"%s\" because: The sizes do not match! " +"Volume=%s Catalog=%s\n" msgstr "" -#: src/dird/expand.c:444 src/dird/expand.c:459 +#: src/stored/mount.c:765 #, c-format -msgid "Cannot unescape string: ERR=%s\n" +msgid "Labeled new Volume \"%s\" on %s device %s.\n" msgstr "" -#: src/dird/expand.c:452 +#: src/stored/mount.c:776 #, c-format -msgid "Cannot expand expression \"%s\": ERR=%s\n" +msgid "%s device %s not configured to autolabel Volumes.\n" msgstr "" -#: src/dird/expand.c:470 +#: src/stored/mount.c:798 #, c-format -msgid "Cannot destroy var context: ERR=%s\n" +msgid "Marking Volume \"%s\" in Error in Catalog.\n" msgstr "" -#: src/dird/recycle.c:69 +#: src/stored/mount.c:815 #, c-format -msgid "Recycled volume \"%s\"\n" -msgstr "" - -#: src/dird/ua_purge.c:90 msgid "" -"\n" -"This command can be DANGEROUS!!!\n" -"\n" -"It purges (deletes) all Files from a Job,\n" -"JobId, Client or Volume; or it purges (deletes)\n" -"all Jobs from a Client or Volume without regard\n" -"to retention periods. Normally you should use the\n" -"PRUNE command, which respects retention periods.\n" +"Autochanger Volume \"%s\" not found in slot %d.\n" +" Setting InChanger to zero in catalog.\n" msgstr "" -#: src/dird/ua_purge.c:157 -msgid "Choose item to purge" +#: src/stored/mount.c:834 +msgid "Hey!!!!! WroteVol non-zero !!!!!\n" msgstr "" -#: src/dird/ua_purge.c:204 +#: src/stored/mount.c:884 #, c-format -msgid "Begin purging files for Client \"%s\"\n" +msgid "" +"Invalid tape position on volume \"%s\" on device %s. Expected %d, got %d\n" msgstr "" -#: src/dird/ua_purge.c:213 src/dird/ua_purge.c:263 +#: src/stored/mount.c:925 #, c-format -msgid "No Files found for client %s to purge from %s catalog.\n" +msgid "Cannot open %s Dev=%s, Vol=%s for reading.\n" +msgstr "" + +#: src/stored/askdir.c:168 +msgid "Network error on bnet_recv in req_vol_info.\n" msgstr "" -#: src/dird/ua_purge.c:216 +#: src/stored/askdir.c:191 #, c-format -msgid "Files for %d Jobs for client \"%s\" purged from %s catalog.\n" +msgid "Error getting Volume info: %s" msgstr "" -#: src/dird/ua_purge.c:254 +#: src/stored/askdir.c:396 #, c-format -msgid "Begin purging jobs from Client \"%s\"\n" +msgid "Didn't get vol info vol=%s: ERR=%s" msgstr "" -#: src/dird/ua_purge.c:266 +#: src/stored/askdir.c:461 #, c-format -msgid "%d Jobs for client %s purged from %s catalog.\n" +msgid "Error creating JobMedia record: ERR=%s\n" msgstr "" -#: src/dird/ua_purge.c:464 +#: src/stored/askdir.c:468 #, c-format -msgid "" -"\n" -"Volume \"%s\" has VolStatus \"%s\" and cannot be purged.\n" -"The VolStatus must be: Append, Full, Used, or Error to be purged.\n" +msgid "Error creating JobMedia record: %s\n" msgstr "" -#: src/dird/ua_purge.c:492 +#: src/stored/askdir.c:556 #, c-format -msgid "%d File%s on Volume \"%s\" purged from catalog.\n" +msgid "Job %s canceled while waiting for mount on Storage Device \"%s\".\n" msgstr "" -#: src/dird/ua_purge.c:541 +#: src/stored/askdir.c:568 #, c-format msgid "" -"There are no more Jobs associated with Volume \"%s\". Marking it purged.\n" +"Job %s is waiting. Cannot find any appendable volumes.\n" +"Please use the \"label\" command to create a new Volume for:\n" +" Storage: %s\n" +" Pool: %s\n" +" Media type: %s\n" msgstr "" -#: src/dird/ua_purge.c:556 src/dird/ua_label.c:774 +#: src/stored/askdir.c:593 src/stored/askdir.c:694 #, c-format -msgid "Connecting to Storage daemon %s at %s:%d ...\n" +msgid "Max time exceeded waiting to mount Storage Device %s for Job %s\n" msgstr "" -#: src/dird/ua_purge.c:559 src/dird/ua_dotcmds.c:625 src/dird/ua_cmds.c:771 -#: src/dird/ua_cmds.c:1577 src/dird/ua_label.c:777 src/dird/job.c:448 -msgid "Failed to connect to Storage daemon.\n" +#: src/stored/askdir.c:603 +msgid "pthread error in mount_next_volume.\n" msgstr "" -#: src/dird/ua_purge.c:623 -msgid "Can't update volume size in the catalog\n" +#: src/stored/askdir.c:636 +msgid "Cannot request another volume: no volume name given.\n" msgstr "" -#: src/dird/ua_purge.c:625 +#: src/stored/askdir.c:642 #, c-format -msgid "The volume \"%s\" has been truncated\n" +msgid "Job %s canceled while waiting for mount on Storage Device %s.\n" msgstr "" -#: src/dird/ua_purge.c:627 +#: src/stored/askdir.c:659 #, c-format -msgid "Unable to truncate volume \"%s\"\n" +msgid "" +"%sPlease mount append Volume \"%s\" or label a new one for:\n" +" Job: %s\n" +" Storage: %s\n" +" Pool: %s\n" +" Media type: %s\n" msgstr "" -#: src/dird/ua_purge.c:713 +#: src/stored/askdir.c:665 #, c-format -msgid "No Volumes found to perform %s action.\n" +msgid "" +"%sPlease mount read Volume \"%s\" for:\n" +" Job: %s\n" +" Storage: %s\n" +" Pool: %s\n" +" Media type: %s\n" msgstr "" -#: src/dird/ua_purge.c:786 -#, c-format -msgid "Unable move recycled Volume in full Pool \"%s\" MaxVols=%d\n" +#: src/stored/askdir.c:672 +msgid "" +"\n" +"\n" +"WARNING: device is full! Please add more disk space then ...\n" +"\n" msgstr "" -#: src/dird/ua_purge.c:800 -#, c-format -msgid "All records pruned from Volume \"%s\"; marking it \"Purged\"\n" +#: src/stored/askdir.c:704 +msgid "pthread error in mount_volume\n" msgstr "" -#: src/dird/ua_purge.c:805 +#: src/stored/stored.c:75 #, c-format -msgid "Cannot purge Volume with VolStatus=%s\n" +msgid "" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: bacula-sd [options] [-c config_file] [config_file]\n" +" -c use as configuration file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -f run in foreground (for debugging)\n" +" -g set groupid to group\n" +" -m print kaboom output (for debugging)\n" +" -p proceed despite I/O errors\n" +" -s no signals (for debugging)\n" +" -t test - read config and exit\n" +" -u userid to \n" +" -v verbose user messages\n" +" -? print this message.\n" +"\n" msgstr "" -#: src/dird/vbackup.c:76 src/dird/migrate.c:114 -msgid "Could not get or create a Pool record.\n" +#: src/stored/stored.c:124 src/stored/btape.c:167 +#, c-format +msgid "Tape block size (%d) not multiple of system size (%d)\n" msgstr "" -#: src/dird/vbackup.c:89 src/dird/migrate.c:227 src/dird/migrate.c:228 -#: src/dird/backup.c:93 src/dird/job.c:185 src/dird/job.c:871 -#: src/dird/job.c:1126 src/dird/job.c:1172 src/dird/job.c:1186 -msgid "Pool resource" +#: src/stored/stored.c:128 src/stored/btape.c:171 +#, c-format +msgid "Tape block size (%d) is not a power of 2\n" msgstr "" -#: src/dird/vbackup.c:116 src/dird/migrate.c:285 -msgid "Job Pool's NextPool resource" +#: src/stored/stored.c:256 +msgid "Volume Session Time is ZERO!\n" msgstr "" -#: src/dird/vbackup.c:147 +#: src/stored/stored.c:265 #, c-format -msgid "Start Virtual Backup JobId %s, Job=%s\n" +msgid "Unable to create thread. ERR=%s\n" msgstr "" -#: src/dird/vbackup.c:151 -msgid "" -"This Job is not an Accurate backup so is not equivalent to a Full backup.\n" +#: src/stored/stored.c:298 src/stored/butil.c:76 +#, c-format +msgid "No Storage resource defined in %s. Cannot continue.\n" msgstr "" -#: src/dird/vbackup.c:158 -msgid "No previous Jobs found.\n" +#: src/stored/stored.c:304 +#, c-format +msgid "Only one Storage resource permitted in %s\n" msgstr "" -#: src/dird/vbackup.c:180 +#: src/stored/stored.c:309 #, c-format -msgid "Error getting Job record for previous Job: ERR=%s" +msgid "No Director resource defined in %s. Cannot continue.\n" msgstr "" -#: src/dird/vbackup.c:186 src/dird/migrate.c:131 -msgid "Could not get or create the FileSet record.\n" +#: src/stored/stored.c:314 +#, c-format +msgid "No Device resource defined in %s. Cannot continue.\n" msgstr "" -#: src/dird/vbackup.c:313 src/dird/backup.c:635 +#: src/stored/stored.c:322 #, c-format -msgid "Error getting Client record for Job report: ERR=%s" +msgid "No Messages resource defined in %s. Cannot continue.\n" msgstr "" -#: src/dird/vbackup.c:319 src/dird/migrate.c:1257 src/dird/backup.c:641 +#: src/stored/stored.c:329 src/stored/bscan.c:256 #, c-format -msgid "Error getting Media record for Volume \"%s\": ERR=%s" +msgid "No Working Directory defined in %s. Cannot continue.\n" msgstr "" -#: src/dird/vbackup.c:329 src/dird/backup.c:651 src/dird/backup.c:660 -#: src/stored/bscan.c:1214 -msgid "Backup OK -- with warnings" +#: src/stored/stored.c:351 +#, c-format +msgid "\"TLS Certificate\" file not defined for Storage \"%s\" in %s.\n" msgstr "" -#: src/dird/vbackup.c:331 src/dird/backup.c:653 src/stored/bscan.c:1211 -msgid "Backup OK" +#: src/stored/stored.c:357 +#, c-format +msgid "\"TLS Key\" file not defined for Storage \"%s\" in %s.\n" msgstr "" -#: src/dird/vbackup.c:336 src/dird/backup.c:664 src/stored/bscan.c:1218 -msgid "*** Backup Error ***" -msgstr "" - -#: src/dird/vbackup.c:346 src/dird/backup.c:674 src/stored/bscan.c:1221 -msgid "Backup Canceled" -msgstr "" - -#: src/dird/vbackup.c:393 +#: src/stored/stored.c:363 #, c-format msgid "" -"%s %s %s (%s):\n" -" Build OS: %s %s %s\n" -" JobId: %d\n" -" Job: %s\n" -" Backup Level: Virtual Full\n" -" Client: \"%s\" %s\n" -" FileSet: \"%s\" %s\n" -" Pool: \"%s\" (From %s)\n" -" Catalog: \"%s\" (From %s)\n" -" Storage: \"%s\" (From %s)\n" -" Scheduled time: %s\n" -" Start time: %s\n" -" End time: %s\n" -" Elapsed time: %s\n" -" Priority: %d\n" -" SD Files Written: %s\n" -" SD Bytes Written: %s (%sB)\n" -" Rate: %.1f KB/s\n" -" Volume name(s): %s\n" -" Volume Session Id: %d\n" -" Volume Session Time: %d\n" -" Last Volume Bytes: %s (%sB)\n" -" SD Errors: %d\n" -" SD termination status: %s\n" -" Termination: %s\n" -"\n" -msgstr "" - -#: src/dird/ua_output.c:69 src/dird/ua_output.c:93 -msgid "ON or OFF keyword missing.\n" -msgstr "" - -#: src/dird/ua_output.c:113 -msgid "Disabled Jobs:\n" -msgstr "" - -#: src/dird/ua_output.c:119 -msgid "No disabled Jobs.\n" -msgstr "" - -#: src/dird/ua_output.c:163 -msgid "disabled" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Storage \"%s\" in %s. At least one CA certificate store is required when " +"using \"TLS Verify Peer\".\n" msgstr "" -#: src/dird/ua_output.c:211 -msgid "Keywords for the show command are:\n" +#: src/stored/stored.c:382 src/dird/dird.c:932 +#, c-format +msgid "Failed to initialize TLS context for Storage \"%s\" in %s.\n" msgstr "" -#: src/dird/ua_output.c:217 +#: src/stored/stored.c:398 src/dird/dird.c:615 src/filed/filed.c:576 #, c-format -msgid "%s resource %s not found.\n" +msgid "\"TLS Certificate\" file not defined for Director \"%s\" in %s.\n" msgstr "" -#: src/dird/ua_output.c:220 +#: src/stored/stored.c:404 src/dird/dird.c:621 src/filed/filed.c:582 #, c-format -msgid "Resource %s not found\n" +msgid "\"TLS Key\" file not defined for Director \"%s\" in %s.\n" msgstr "" -#: src/dird/ua_output.c:290 -msgid "Hey! DB is NULL\n" +#: src/stored/stored.c:410 src/dird/dird.c:628 src/filed/filed.c:588 +#, c-format +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Director \"%s\" in %s. At least one CA certificate store is required when " +"using \"TLS Verify Peer\".\n" msgstr "" -#: src/dird/ua_output.c:447 +#: src/stored/stored.c:429 src/dird/dird.c:647 src/filed/filed.c:607 #, c-format -msgid "Jobid %d used %d Volume(s): %s\n" +msgid "Failed to initialize TLS context for Director \"%s\" in %s.\n" msgstr "" -#: src/dird/ua_output.c:465 -msgid "No Pool specified.\n" +#: src/stored/stored.c:479 src/dird/mac_sql.c:547 src/dird/dird.c:1138 +#, c-format +msgid "Could not compile regex pattern \"%s\" ERR=%s\n" msgstr "" -#: src/dird/ua_output.c:486 +#: src/stored/stored.c:548 src/stored/dircmd.c:204 src/dird/job.c:101 +#: src/dird/jobq.c:208 src/filed/job.c:257 #, c-format -msgid "Pool: %s\n" +msgid "Unable to init job cond variable: ERR=%s\n" msgstr "" -#: src/dird/ua_output.c:502 -msgid "Ignoring invalid value for days. Max is 50.\n" +#: src/stored/stored.c:556 +#, c-format +msgid "Could not initialize %s\n" msgstr "" -#: src/dird/ua_output.c:524 +#: src/stored/stored.c:570 #, c-format -msgid "Unknown list keyword: %s\n" +msgid "Could not open device %s\n" msgstr "" -#: src/dird/ua_output.c:549 +#: src/stored/stored.c:584 #, c-format -msgid "%s is not a job name.\n" +msgid "Could not mount device %s\n" msgstr "" -#: src/dird/ua_output.c:563 +#: src/stored/btape.c:174 #, c-format -msgid "Could not find Pool for Job %s\n" +msgid "" +"\n" +"\n" +"!!!! Warning large disk addressing disabled. boffset_t=%d should be 8 or " +"more !!!!!\n" +"\n" +"\n" msgstr "" -#: src/dird/ua_output.c:576 +#: src/stored/btape.c:181 #, c-format -msgid "Could not find next Volume for Job %s (Pool=%s, Level=%s).\n" +msgid "32 bit printf/scanf problem. i=%d x32=%u y32=%u\n" msgstr "" -#: src/dird/ua_output.c:580 -#, c-format -msgid "" -"The next Volume to be used by Job \"%s\" (Pool=%s, Level=%s) will be %s\n" +#: src/stored/btape.c:190 +msgid "64 bit printf/scanf problem. i=%d x64=%" msgstr "" -#: src/dird/ua_output.c:593 +#: src/stored/btape.c:195 #, c-format -msgid "Could not find next Volume for Job %s.\n" +msgid "Tape block granularity is %d bytes.\n" msgstr "" -#: src/dird/ua_output.c:720 src/dird/job.c:133 src/tools/cats_test.c:375 -#, c-format -msgid "Could not open database \"%s\".\n" +#: src/stored/btape.c:270 +msgid "No archive name specified.\n" msgstr "" -#: src/dird/ua_output.c:733 -#, c-format -msgid "Pool %s not in database. %s" +#: src/stored/btape.c:274 +msgid "Improper number of arguments specified.\n" msgstr "" -#: src/dird/ua_output.c:741 -#, c-format -msgid "Pool %s created in database.\n" +#: src/stored/btape.c:288 +msgid "btape does not work with DVD storage.\n" msgstr "" -#: src/dird/ua_output.c:794 -msgid "You have no messages.\n" +#: src/stored/btape.c:293 +msgid "btape only works with tape storage.\n" msgstr "" -#: src/dird/ua_output.c:874 -msgid "Message too long to display.\n" +#: src/stored/btape.c:377 +#, c-format +msgid "Total Volume bytes=%sB. Total Write rate = %sB/s\n" msgstr "" -#: src/dird/ua_dotcmds.c:155 src/dird/ua_cmds.c:236 +#: src/stored/btape.c:403 #, c-format -msgid "Can't use %s command in a runscript" +msgid "Volume bytes=%sB. Write rate = %sB/s\n" msgstr "" -#: src/dird/ua_dotcmds.c:175 -msgid ": is an invalid command.\n" +#: src/stored/btape.c:467 src/stored/device.c:303 src/stored/bcopy.c:194 +#, c-format +msgid "dev open failed: %s\n" msgstr "" -#: src/dird/ua_dotcmds.c:553 src/dird/ua_restore.c:780 -#: src/dird/ua_restore.c:823 +#: src/stored/btape.c:471 #, c-format -msgid "Unable to get Job record for JobId=%s: ERR=%s\n" +msgid "open device %s: OK\n" msgstr "" -#: src/dird/ua_dotcmds.c:619 src/dird/ua_cmds.c:765 src/dird/ua_cmds.c:1566 -#: src/dird/ua_status.c:352 src/dird/job.c:147 src/dird/job.c:153 -#: src/dird/job.c:1160 src/dird/job.c:1164 -msgid "unknown source" +#: src/stored/btape.c:494 +msgid "Enter Volume Name: " msgstr "" -#: src/dird/ua_dotcmds.c:622 src/dird/ua_cmds.c:768 src/dird/ua_status.c:355 +#: src/stored/btape.c:501 #, c-format -msgid "Connecting to Storage daemon %s at %s:%d\n" +msgid "Device open failed. ERR=%s\n" msgstr "" -#: src/dird/ua_dotcmds.c:628 src/dird/ua_cmds.c:774 src/dird/ua_status.c:366 -msgid "Connected to storage daemon\n" +#: src/stored/btape.c:506 +#, c-format +msgid "Wrote Volume label for volume \"%s\".\n" msgstr "" -#: src/dird/ua_dotcmds.c:648 src/dird/ua_cmds.c:803 src/dird/ua_cmds.c:1208 -#: src/dird/ua_status.c:397 -#, c-format -msgid "Connecting to Client %s at %s:%d\n" +#: src/stored/btape.c:520 +msgid "Volume has no label.\n" msgstr "" -#: src/dird/ua_dotcmds.c:651 src/dird/ua_cmds.c:806 src/dird/ua_cmds.c:1211 -msgid "Failed to connect to Client.\n" +#: src/stored/btape.c:523 +msgid "Volume label read correctly.\n" msgstr "" -#: src/dird/ua_dotcmds.c:694 src/dird/ua_dotcmds.c:788 +#: src/stored/btape.c:526 #, c-format -msgid "Unknown command: %s\n" +msgid "I/O error on device: ERR=%s" msgstr "" -#: src/dird/ua_dotcmds.c:732 src/dird/ua_cmds.c:993 -msgid "Available daemons are: \n" +#: src/stored/btape.c:529 +#, c-format +msgid "Volume type error: ERR=%s\n" msgstr "" -#: src/dird/ua_dotcmds.c:733 src/dird/ua_cmds.c:994 -msgid "Director" +#: src/stored/btape.c:532 +msgid "Volume name error\n" msgstr "" -#: src/dird/ua_dotcmds.c:736 -msgid "Select daemon type to make die" +#: src/stored/btape.c:535 +#, c-format +msgid "Error creating label. ERR=%s" msgstr "" -#: src/dird/ua_dotcmds.c:762 -msgid "The Director will generate a deadlock.\n" +#: src/stored/btape.c:538 +msgid "Volume version error.\n" msgstr "" -#: src/dird/ua_dotcmds.c:766 -msgid "The Director will segment fault.\n" +#: src/stored/btape.c:541 +msgid "Bad Volume label type.\n" msgstr "" -#: src/dird/ua_dotcmds.c:955 -msgid "Access to specified Client or FileSet not allowed.\n" +#: src/stored/btape.c:544 +msgid "Unknown error.\n" msgstr "" -#: src/dird/ua_dotcmds.c:960 src/dird/ua_dotcmds.c:1004 -#: src/dird/ua_restore.c:941 src/dird/ua_restore.c:969 -#: src/dird/ua_restore.c:990 +#: src/stored/btape.c:562 #, c-format -msgid "Query failed: %s. ERR=%s\n" +msgid "Bad status from load. ERR=%s\n" msgstr "" -#: src/dird/ua_dotcmds.c:999 -msgid "query keyword not found.\n" +#: src/stored/btape.c:564 +#, c-format +msgid "Loaded %s\n" msgstr "" -#: src/dird/ua_dotcmds.c:1026 +#: src/stored/btape.c:573 src/stored/btape.c:1136 src/stored/btape.c:1209 +#: src/stored/btape.c:1289 src/stored/btape.c:1560 #, c-format -msgid "List MediaType failed: ERR=%s\n" +msgid "Bad status from rewind. ERR=%s\n" msgstr "" -#: src/dird/ua_dotcmds.c:1040 +#: src/stored/btape.c:576 src/stored/btape.c:1568 #, c-format -msgid "List Media failed: ERR=%s\n" +msgid "Rewound %s\n" msgstr "" -#: src/dird/ua_dotcmds.c:1054 +#: src/stored/btape.c:602 src/stored/btape.c:1572 #, c-format -msgid "List Location failed: ERR=%s\n" +msgid "Bad status from weof. ERR=%s\n" msgstr "" -#: src/dird/next_vol.c:166 +#: src/stored/btape.c:606 #, c-format -msgid "Purging oldest volume \"%s\"\n" +msgid "Wrote 1 EOF to %s\n" msgstr "" -#: src/dird/next_vol.c:172 +#: src/stored/btape.c:609 #, c-format -msgid "Pruning oldest volume \"%s\"\n" +msgid "Wrote %d EOFs to %s\n" msgstr "" -#: src/dird/next_vol.c:191 -msgid "We seem to be looping trying to find the next volume. I give up.\n" +#: src/stored/btape.c:627 +msgid "Moved to end of medium.\n" msgstr "" -#: src/dird/next_vol.c:218 +#: src/stored/btape.c:654 #, c-format -msgid "Max Volume bytes=%s exceeded. Marking Volume \"%s\" as Full.\n" +msgid "Bad status from bsf. ERR=%s\n" msgstr "" -#: src/dird/next_vol.c:226 +#: src/stored/btape.c:656 #, c-format -msgid "Volume used once. Marking Volume \"%s\" as Used.\n" +msgid "Backspaced %d file%s.\n" msgstr "" -#: src/dird/next_vol.c:233 +#: src/stored/btape.c:673 #, c-format -msgid "Max Volume jobs=%s exceeded. Marking Volume \"%s\" as Used.\n" +msgid "Bad status from bsr. ERR=%s\n" msgstr "" -#: src/dird/next_vol.c:243 +#: src/stored/btape.c:675 #, c-format -msgid "Max Volume files=%s exceeded. Marking Volume \"%s\" as Used.\n" +msgid "Backspaced %d record%s.\n" msgstr "" -#: src/dird/next_vol.c:254 +#: src/stored/btape.c:685 src/stored/status.c:361 #, c-format -msgid "" -"Max configured use duration=%s sec. exceeded. Marking Volume \"%s\" as " -"Used.\n" +msgid "Configured device capabilities:\n" msgstr "" -#: src/dird/next_vol.c:267 +#: src/stored/btape.c:703 #, c-format -msgid "Catalog error updating volume \"%s\". ERR=%s" +msgid "Device status:\n" msgstr "" -#: src/dird/next_vol.c:289 -msgid "volume has expired" +#: src/stored/btape.c:717 src/stored/status.c:417 +#, c-format +msgid "Device parameters:\n" msgstr "" -#: src/dird/next_vol.c:307 src/dird/next_vol.c:351 +#: src/stored/btape.c:722 #, c-format -msgid "Recycled current volume \"%s\"\n" +msgid "Status:\n" msgstr "" -#: src/dird/next_vol.c:312 -msgid "and recycling of current volume failed" +#: src/stored/btape.c:737 +msgid "" +"Test writing larger and larger records.\n" +"This is a torture test for records.\n" +"I am going to write\n" +"larger and larger records. It will stop when the record size\n" +"plus the header exceeds the block size (by default about 64K)\n" msgstr "" -#: src/dird/next_vol.c:318 -msgid "but should be Append, Purged or Recycle" +#: src/stored/btape.c:743 +msgid "Do you want to continue? (y/n): " msgstr "" -#: src/dird/next_vol.c:327 -msgid "volume has recycling disabled" +#: src/stored/btape.c:745 src/stored/btape.c:2197 +msgid "Command aborted.\n" msgstr "" -#: src/dird/next_vol.c:354 -msgid "" -"but should be Append, Purged or Recycle (recycling of the current volume " -"failed)" +#: src/stored/btape.c:762 +#, c-format +msgid "Block %d i=%d\n" +msgstr "" + +#: src/stored/btape.c:789 +msgid "Skipping read backwards test because BSR turned off.\n" msgstr "" -#: src/dird/next_vol.c:358 +#: src/stored/btape.c:793 msgid "" -"but should be Append, Purged or Recycle (cannot automatically recycle " -"current volume, as it still contains unpruned data or the Volume Retention " -"time has not expired.)" +"\n" +"=== Write, backup, and re-read test ===\n" +"\n" +"I'm going to write three records and an EOF\n" +"then backup over the EOF and re-read the last record.\n" +"Bacula does this after writing the last block on the\n" +"tape to verify that the block was written correctly.\n" +"\n" +"This is not an *essential* feature ...\n" +"\n" msgstr "" -#: src/dird/next_vol.c:421 -#, c-format -msgid "Unable to get Pool record: ERR=%s" +#: src/stored/btape.c:806 src/stored/btape.c:817 src/stored/btape.c:828 +#: src/stored/btape.c:1146 src/stored/btape.c:1162 src/stored/btape.c:1904 +#: src/stored/btape.c:2821 +msgid "Error writing record to block.\n" msgstr "" -#: src/dird/next_vol.c:428 -#, c-format -msgid "Unable add Scratch Volume, Pool \"%s\" full MaxVols=%d\n" +#: src/stored/btape.c:810 src/stored/btape.c:821 src/stored/btape.c:832 +#: src/stored/btape.c:1150 src/stored/btape.c:1166 src/stored/btape.c:1908 +#: src/stored/btape.c:2825 +msgid "Error writing block to device.\n" msgstr "" -#: src/dird/next_vol.c:448 +#: src/stored/btape.c:813 #, c-format -msgid "Failed to move Scratch Volume. ERR=%s\n" +msgid "Wrote first record of %d bytes.\n" msgstr "" -#: src/dird/next_vol.c:453 +#: src/stored/btape.c:824 #, c-format -msgid "Using Volume \"%s\" from 'Scratch' pool.\n" +msgid "Wrote second record of %d bytes.\n" msgstr "" -#: src/dird/ua_cmds.c:120 -msgid "Add media to a pool" +#: src/stored/btape.c:835 +#, c-format +msgid "Wrote third record of %d bytes.\n" msgstr "" -#: src/dird/ua_cmds.c:121 -msgid "Autodisplay console messages" +#: src/stored/btape.c:842 src/stored/btape.c:847 +#, c-format +msgid "Backspace file failed! ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:122 -msgid "Automount after label" +#: src/stored/btape.c:851 +msgid "Backspaced over EOF OK.\n" msgstr "" -#: src/dird/ua_cmds.c:123 -msgid "Cancel a job" +#: src/stored/btape.c:853 +#, c-format +msgid "Backspace record failed! ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:124 -msgid "Create DB Pool from resource" +#: src/stored/btape.c:856 +msgid "Backspace record OK.\n" msgstr "" -#: src/dird/ua_cmds.c:125 -msgid "Delete volume, pool or job" +#: src/stored/btape.c:859 src/stored/btape.c:865 +#, c-format +msgid "Read block failed! ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:126 -msgid "Disable a job" +#: src/stored/btape.c:870 +msgid "Bad data in record. Test failed!\n" msgstr "" -#: src/dird/ua_cmds.c:127 -msgid "Enable a job" +#: src/stored/btape.c:874 +msgid "" +"\n" +"Block re-read correct. Test succeeded!\n" msgstr "" -#: src/dird/ua_cmds.c:128 -msgid "Performs FileSet estimate, listing gives full listing" +#: src/stored/btape.c:875 +msgid "" +"=== End Write, backup, and re-read test ===\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:131 src/dird/ua_cmds.c:155 -msgid "Terminate Bconsole session" -msgstr "" - -#: src/dird/ua_cmds.c:132 -msgid "Non-interactive gui mode" -msgstr "" - -#: src/dird/ua_cmds.c:133 -msgid "Print help on specific command" +#: src/stored/btape.c:882 +msgid "" +"This is not terribly serious since Bacula only uses\n" +"this function to verify the last block written to the\n" +"tape. Bacula will skip the last block verification\n" +"if you add:\n" +"\n" +"Backward Space Record = No\n" +"\n" +"to your Storage daemon's Device resource definition.\n" msgstr "" -#: src/dird/ua_cmds.c:138 -msgid "Label a tape" +#: src/stored/btape.c:904 +#, c-format +msgid "Begin writing %i files of %sB with raw blocks of %u bytes.\n" msgstr "" -#: src/dird/ua_cmds.c:139 -msgid "List objects from catalog" +#: src/stored/btape.c:925 src/stored/btape.c:2877 +#, c-format +msgid "Write failed at block %u. stat=%d ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:142 -msgid "Full or long list like list command" +#: src/stored/btape.c:959 +#, c-format +msgid "Begin writing %i files of %sB with blocks of %u bytes.\n" msgstr "" -#: src/dird/ua_cmds.c:145 -msgid "Display pending messages" +#: src/stored/btape.c:968 +msgid "" +"\n" +"Error writing record to block.\n" msgstr "" -#: src/dird/ua_cmds.c:146 -msgid "Print current memory usage" +#: src/stored/btape.c:972 +msgid "" +"\n" +"Error writing block to device.\n" msgstr "" -#: src/dird/ua_cmds.c:147 -msgid "Mount storage" +#: src/stored/btape.c:1027 +msgid "The file_size is too big, stop this test with Ctrl-c.\n" msgstr "" -#: src/dird/ua_cmds.c:150 -msgid "Prune expired records from catalog" +#: src/stored/btape.c:1055 +msgid "Test with zero data, should give the maximum throughput.\n" msgstr "" -#: src/dird/ua_cmds.c:153 -msgid "Purge records from catalog" +#: src/stored/btape.c:1067 src/stored/btape.c:1093 +msgid "Test with random data, should give the minimum throughput.\n" msgstr "" -#: src/dird/ua_cmds.c:154 -msgid "Python control commands" +#: src/stored/btape.c:1082 +msgid "Test with zero data and bacula block structure.\n" msgstr "" -#: src/dird/ua_cmds.c:156 -msgid "Query catalog" +#: src/stored/btape.c:1122 +#, c-format +msgid "" +"\n" +"=== Write, rewind, and re-read test ===\n" +"\n" +"I'm going to write %d records and an EOF\n" +"then write %d records and an EOF, then rewind,\n" +"and re-read the data to verify that it is correct.\n" +"\n" +"This is an *essential* feature ...\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:157 -msgid "Restore files" +#: src/stored/btape.c:1154 src/stored/btape.c:1170 +#, c-format +msgid "Wrote %d blocks of %d bytes.\n" msgstr "" -#: src/dird/ua_cmds.c:162 -msgid "Relabel a tape" +#: src/stored/btape.c:1212 src/stored/btape.c:1292 +msgid "Rewind OK.\n" msgstr "" -#: src/dird/ua_cmds.c:165 -msgid "Release storage" +#: src/stored/btape.c:1225 src/stored/btape.c:1344 +msgid "Got EOF on tape.\n" msgstr "" -#: src/dird/ua_cmds.c:166 -msgid "Reload conf file" +#: src/stored/btape.c:1230 +#, c-format +msgid "Read block %d failed! ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:167 -msgid "Run a job" +#: src/stored/btape.c:1236 +#, c-format +msgid "Read record failed. Block %d! ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:171 -msgid "Report status" +#: src/stored/btape.c:1242 src/stored/btape.c:1374 +#, c-format +msgid "Bad data in record. Expected %d, got %d at byte %d. Test failed!\n" msgstr "" -#: src/dird/ua_cmds.c:174 -msgid "Sets debug level" +#: src/stored/btape.c:1249 +#, c-format +msgid "%d blocks re-read correctly.\n" msgstr "" -#: src/dird/ua_cmds.c:177 -msgid "Sets new client address -- if authorized" +#: src/stored/btape.c:1252 src/stored/btape.c:1381 +msgid "" +"=== Test Succeeded. End Write, rewind, and re-read test ===\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:178 -msgid "Show resource records" +#: src/stored/btape.c:1280 +msgid "Block position test\n" msgstr "" -#: src/dird/ua_cmds.c:181 -msgid "Use SQL to query catalog" +#: src/stored/btape.c:1335 +#, c-format +msgid "Reposition to file:block %d:%d\n" msgstr "" -#: src/dird/ua_cmds.c:182 -msgid "Print current time" +#: src/stored/btape.c:1337 +msgid "Reposition error.\n" msgstr "" -#: src/dird/ua_cmds.c:183 -msgid "Turn on/off trace to file" +#: src/stored/btape.c:1350 +#, c-format +msgid "" +"Read block %d failed! file=%d blk=%d. ERR=%s\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:184 -msgid "Unmount storage" +#: src/stored/btape.c:1352 +msgid "" +"This may be because the tape drive block size is not\n" +" set to variable blocking as normally used by Bacula.\n" +" Please see the Tape Testing chapter in the manual and \n" +" look for using mt with defblksize and setoptions\n" +"If your tape drive block size is correct, then perhaps\n" +" your SCSI driver is *really* stupid and does not\n" +" correctly report the file:block after a FSF. In this\n" +" case try setting:\n" +" Fast Forward Space File = no\n" +" in your Device resource.\n" msgstr "" -#: src/dird/ua_cmds.c:187 -msgid "Umount - for old-time Unix guys, see unmount" +#: src/stored/btape.c:1368 +#, c-format +msgid "Read record failed! ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:190 -msgid "Update volume, pool or stats" +#: src/stored/btape.c:1379 +#, c-format +msgid "Block %d re-read correctly.\n" msgstr "" -#: src/dird/ua_cmds.c:196 -msgid "Use catalog xxx" +#: src/stored/btape.c:1400 +msgid "" +"\n" +"\n" +"=== Append files test ===\n" +"\n" +"This test is essential to Bacula.\n" +"\n" +"I'm going to write one record in file 0,\n" +" two records in file 1,\n" +" and three records in file 2\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:197 -msgid "Does variable expansion" +#: src/stored/btape.c:1424 +msgid "Now moving to end of medium.\n" msgstr "" -#: src/dird/ua_cmds.c:198 -msgid "Print Director version" +#: src/stored/btape.c:1426 src/stored/btape.c:1655 +#, c-format +msgid "We should be in file 3. I am at file %d. %s\n" msgstr "" -#: src/dird/ua_cmds.c:199 -msgid "Wait until no jobs are running" +#: src/stored/btape.c:1427 src/stored/btape.c:1445 src/stored/btape.c:1644 +#: src/stored/btape.c:1656 src/stored/btape.c:1669 src/stored/btape.c:1686 +msgid "This is correct!" msgstr "" -#: src/dird/ua_cmds.c:247 -#, c-format -msgid "%s: is an invalid command.\n" +#: src/stored/btape.c:1427 src/stored/btape.c:1445 src/stored/btape.c:1644 +#: src/stored/btape.c:1656 src/stored/btape.c:1669 src/stored/btape.c:1686 +msgid "This is NOT correct!!!!" msgstr "" -#: src/dird/ua_cmds.c:288 +#: src/stored/btape.c:1433 msgid "" -"You probably don't want to be using this command since it\n" -"creates database records without labeling the Volumes.\n" -"You probably want to use the \"label\" command.\n" +"\n" +"Now the important part, I am going to attempt to append to the tape.\n" "\n" msgstr "" -#: src/dird/ua_cmds.c:306 -#, c-format -msgid "Pool already has maximum volumes=%d\n" +#: src/stored/btape.c:1440 +msgid "" +"Done appending, there should be no I/O errors\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:307 -msgid "Enter new maximum (zero for unlimited): " +#: src/stored/btape.c:1441 +msgid "Doing Bacula scan of blocks:\n" msgstr "" -#: src/dird/ua_cmds.c:327 -#, c-format -msgid "Enter number of Volumes to create. 0=>fixed name. Max=%d: " +#: src/stored/btape.c:1443 +msgid "End scanning the tape.\n" msgstr "" -#: src/dird/ua_cmds.c:333 +#: src/stored/btape.c:1444 src/stored/btape.c:1668 #, c-format -msgid "The number must be between 0 and %d\n" -msgstr "" - -#: src/dird/ua_cmds.c:341 -msgid "Enter Volume name: " -msgstr "" - -#: src/dird/ua_cmds.c:345 -msgid "Enter base volume name: " -msgstr "" - -#: src/dird/ua_cmds.c:354 src/dird/ua_label.c:663 -msgid "Volume name too long.\n" +msgid "We should be in file 4. I am at file %d. %s\n" msgstr "" -#: src/dird/ua_cmds.c:358 src/dird/ua_label.c:669 src/lib/edit.c:501 -msgid "Volume name must be at least one character long.\n" +#: src/stored/btape.c:1469 +msgid "" +"\n" +"Autochanger enabled, but no name or no command device specified.\n" msgstr "" -#: src/dird/ua_cmds.c:369 -msgid "Enter the starting number: " +#: src/stored/btape.c:1473 +msgid "" +"\n" +"Ah, I see you have an autochanger configured.\n" +"To test the autochanger you must have a blank tape\n" +" that I can write on in Slot 1.\n" msgstr "" -#: src/dird/ua_cmds.c:374 -msgid "Start number must be greater than zero.\n" +#: src/stored/btape.c:1476 +msgid "" +"\n" +"Do you wish to continue with the Autochanger test? (y/n): " msgstr "" -#: src/dird/ua_cmds.c:385 -msgid "Enter slot (0 for none): " +#: src/stored/btape.c:1483 +msgid "" +"\n" +"\n" +"=== Autochanger test ===\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:389 -msgid "InChanger? yes/no: " +#: src/stored/btape.c:1492 +msgid "3301 Issuing autochanger \"loaded\" command.\n" msgstr "" -#: src/dird/ua_cmds.c:414 +#: src/stored/btape.c:1501 #, c-format -msgid "%d Volumes created in pool %s\n" +msgid "3991 Bad autochanger command: %s\n" msgstr "" -#: src/dird/ua_cmds.c:430 src/dird/ua_cmds.c:1032 -msgid "Turn on or off? " +#: src/stored/btape.c:1502 +#, c-format +msgid "3991 result=\"%s\": ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:544 +#: src/stored/btape.c:1506 #, c-format -msgid "" -"Can't set %s RecyclePool to %s, %s is not in database.\n" -"Try to update it with 'update pool=%s'\n" +msgid "Slot %d loaded. I am going to unload it.\n" msgstr "" -#: src/dird/ua_cmds.c:562 -#, c-format -msgid "" -"Can't set %s ScratchPool to %s, %s is not in database.\n" -"Try to update it with 'update pool=%s'\n" +#: src/stored/btape.c:1508 +msgid "Nothing loaded in the drive. OK.\n" msgstr "" -#: src/dird/ua_cmds.c:631 +#: src/stored/btape.c:1515 #, c-format -msgid "" -"Error: Pool %s already exists.\n" -"Use update to change it.\n" +msgid "3302 Issuing autochanger \"unload %d %d\" command.\n" msgstr "" -#: src/dird/ua_cmds.c:642 +#: src/stored/btape.c:1520 #, c-format -msgid "Pool %s created.\n" +msgid "unload status=%s %d\n" msgstr "" -#: src/dird/ua_cmds.c:672 -msgid "Python interpreter restarted.\n" +#: src/stored/btape.c:1520 src/lib/util.c:177 src/lib/util.c:309 +#: src/dird/ua_status.c:1093 src/lib/status.h:115 +msgid "OK" msgstr "" -#: src/dird/ua_cmds.c:675 src/dird/ua_cmds.c:1337 -msgid "Nothing done.\n" +#: src/stored/btape.c:1520 +msgid "Bad" msgstr "" -#: src/dird/ua_cmds.c:699 src/dird/ua_cmds.c:1083 src/dird/ua_run.c:1588 +#: src/stored/btape.c:1523 #, c-format -msgid "Client \"%s\" not found.\n" +msgid "3992 Bad autochanger command: %s\n" msgstr "" -#: src/dird/ua_cmds.c:708 +#: src/stored/btape.c:1524 #, c-format -msgid "Client \"%s\" address set to %s\n" +msgid "3992 result=\"%s\": ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:742 +#: src/stored/btape.c:1534 #, c-format -msgid "Job \"%s\" %sabled\n" -msgstr "" - -#: src/dird/ua_cmds.c:920 -msgid "Enter new debug level: " +msgid "3303 Issuing autochanger \"load %d %d\" command.\n" msgstr "" -#: src/dird/ua_cmds.c:997 -msgid "All" +#: src/stored/btape.c:1542 +#, c-format +msgid "3303 Autochanger \"load %d %d\" status is OK.\n" msgstr "" -#: src/dird/ua_cmds.c:998 -msgid "Select daemon type to set debug level" +#: src/stored/btape.c:1546 +#, c-format +msgid "3993 Bad autochanger command: %s\n" msgstr "" -#: src/dird/ua_cmds.c:1087 src/dird/ua_cmds.c:1972 +#: src/stored/btape.c:1547 #, c-format -msgid "No authorization for Client \"%s\"\n" +msgid "3993 result=\"%s\": ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:1092 -msgid "Client name missing.\n" +#: src/stored/btape.c:1562 +msgid "" +"\n" +"The test failed, probably because you need to put\n" +"a longer sleep time in the mtx-script in the load) case.\n" +"Adding a 30 second sleep and trying again ...\n" msgstr "" -#: src/dird/ua_cmds.c:1104 src/dird/ua_cmds.c:1171 src/dird/ua_cmds.c:1994 +#: src/stored/btape.c:1575 #, c-format -msgid "No authorization for Job \"%s\"\n" -msgstr "" - -#: src/dird/ua_cmds.c:1109 -msgid "Job name missing.\n" +msgid "Wrote EOF to %s\n" msgstr "" -#: src/dird/ua_cmds.c:1118 +#: src/stored/btape.c:1579 #, c-format -msgid "Fileset \"%s\" not found.\n" +msgid "" +"\n" +"The test worked this time. Please add:\n" +"\n" +" sleep %d\n" +"\n" +"to your mtx-changer script in the load) case.\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:1122 -#, c-format -msgid "No authorization for FileSet \"%s\"\n" +#: src/stored/btape.c:1584 +msgid "" +"\n" +"The test autochanger worked!!\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:1127 -msgid "Fileset name missing.\n" +#: src/stored/btape.c:1595 +msgid "You must correct this error or the Autochanger will not work.\n" msgstr "" -#: src/dird/ua_cmds.c:1138 src/dird/ua_run.c:550 -#, c-format -msgid "Level \"%s\" not valid.\n" -msgstr "" - -#: src/dird/ua_cmds.c:1142 -msgid "Level value missing.\n" -msgstr "" - -#: src/dird/ua_cmds.c:1149 -msgid "Invalid value for accurate. It must be yes or no.\n" -msgstr "" - -#: src/dird/ua_cmds.c:1154 -msgid "Accurate value missing.\n" -msgstr "" - -#: src/dird/ua_cmds.c:1167 -msgid "No job specified.\n" -msgstr "" - -#: src/dird/ua_cmds.c:1227 -msgid "Error sending include list.\n" -msgstr "" - -#: src/dird/ua_cmds.c:1232 -msgid "Error sending exclude list.\n" -msgstr "" - -#: src/dird/ua_cmds.c:1323 -msgid "" -"In general it is not a good idea to delete either a\n" -"Pool or a Volume since they may contain data.\n" -"\n" -msgstr "" - -#: src/dird/ua_cmds.c:1326 -msgid "Choose catalog item to delete" -msgstr "" - -#: src/dird/ua_cmds.c:1376 src/dird/ua_cmds.c:1391 src/dird/ua_cmds.c:1401 -#, c-format -msgid "Illegal JobId %s ignored\n" -msgstr "" - -#: src/dird/ua_cmds.c:1404 -msgid "Enter JobId to delete: " -msgstr "" - -#: src/dird/ua_cmds.c:1440 -#, c-format -msgid "Are you sure you want to delete %d JobIds ? (yes/no): " -msgstr "" - -#: src/dird/ua_cmds.c:1450 -#, c-format -msgid "Illegal JobId range %s - %s should define increasing JobIds, ignored\n" -msgstr "" - -#: src/dird/ua_cmds.c:1454 -#, c-format -msgid "Illegal JobId range %s - %s, ignored\n" -msgstr "" - -#: src/dird/ua_cmds.c:1469 -#, c-format -msgid "Jobid %s and associated records deleted from the catalog.\n" -msgstr "" - -#: src/dird/ua_cmds.c:1484 -#, c-format -msgid "" -"\n" -"This command will delete volume %s\n" -"and all Jobs saved on that volume from the Catalog\n" -msgstr "" - -#: src/dird/ua_cmds.c:1491 -#, c-format -msgid "Are you sure you want to delete Volume \"%s\"? (yes/no): " -msgstr "" - -#: src/dird/ua_cmds.c:1504 -msgid "Can't list jobs on this volume\n" -msgstr "" - -#: src/dird/ua_cmds.c:1529 -#, c-format -msgid "Are you sure you want to delete Pool \"%s\"? (yes/no): " -msgstr "" - -#: src/dird/ua_cmds.c:1644 -#, c-format -msgid "Using Catalog name=%s DB=%s\n" -msgstr "" - -#: src/dird/ua_cmds.c:1712 -msgid "ERR: Can't open db\n" -msgstr "" - -#: src/dird/ua_cmds.c:1759 -msgid "Wait on mount timed out\n" -msgstr "" - -#: src/dird/ua_cmds.c:1769 -msgid "ERR: Job was not found\n" -msgstr "" - -#: src/dird/ua_cmds.c:1845 -msgid "" -" Command Description\n" -" ======= ===========\n" -msgstr "" - -#: src/dird/ua_cmds.c:1849 -#, c-format -msgid "" -" %-13s %s\n" -"\n" -"Arguments:\n" -"\t%s\n" -msgstr "" - -#: src/dird/ua_cmds.c:1854 -#, c-format -msgid " %-13s %s\n" -msgstr "" - -#: src/dird/ua_cmds.c:1858 -#, c-format -msgid "" -"\n" -"Can't find %s command.\n" -"\n" -msgstr "" - -#: src/dird/ua_cmds.c:1860 -msgid "" -"\n" -"When at a prompt, entering a period cancels the command.\n" -"\n" -msgstr "" - -#: src/dird/ua_cmds.c:1896 src/filed/status.c:85 -#, c-format -msgid "%s Version: %s (%s) %s %s %s %s\n" -msgstr "" - -#: src/dird/ua_cmds.c:1955 src/dird/ua_cmds.c:1982 src/dird/ua_cmds.c:2004 -#, c-format -msgid "No authorization for Catalog \"%s\"\n" -msgstr "" - -#: src/dird/ua_cmds.c:2049 -#, c-format -msgid "Could not open catalog database \"%s\".\n" -msgstr "" - -#: src/dird/ua_cmds.c:2059 -#, c-format -msgid "Using Catalog \"%s\"\n" -msgstr "" - -#: src/dird/ua_tree.c:74 -msgid "add dir/file to be restored recursively, wildcards allowed" -msgstr "" - -#: src/dird/ua_tree.c:75 -msgid "change current directory" -msgstr "" - -#: src/dird/ua_tree.c:76 -msgid "count marked files in and below the cd" -msgstr "" - -#: src/dird/ua_tree.c:77 -msgid "delete dir/file to be restored recursively in dir" -msgstr "" - -#: src/dird/ua_tree.c:78 src/dird/ua_tree.c:79 -msgid "long list current directory, wildcards allowed" -msgstr "" - -#: src/dird/ua_tree.c:80 -msgid "leave file selection mode" -msgstr "" - -#: src/dird/ua_tree.c:81 -msgid "estimate restore size" -msgstr "" - -#: src/dird/ua_tree.c:82 -msgid "same as done command" -msgstr "" - -#: src/dird/ua_tree.c:83 -msgid "find files, wildcards allowed" -msgstr "" - -#: src/dird/ua_tree.c:84 src/dird/ua_tree.c:97 src/dird/ua_tree.c:98 -msgid "print help" -msgstr "" - -#: src/dird/ua_tree.c:85 src/dird/ua_tree.c:86 -msgid "list current directory, wildcards allowed" -msgstr "" - -#: src/dird/ua_tree.c:87 -msgid "list subdir in current directory, wildcards allowed" -msgstr "" - -#: src/dird/ua_tree.c:88 -msgid "list the marked files in and below the cd" -msgstr "" - -#: src/dird/ua_tree.c:89 -msgid "list the marked files in" -msgstr "" - -#: src/dird/ua_tree.c:90 -msgid "mark dir/file to be restored recursively, wildcards allowed" -msgstr "" - -#: src/dird/ua_tree.c:91 -msgid "mark directory name to be restored (no files)" -msgstr "" - -#: src/dird/ua_tree.c:92 src/dird/ua_tree.c:93 -msgid "print current working directory" -msgstr "" - -#: src/dird/ua_tree.c:94 -msgid "unmark dir/file to be restored recursively in dir" -msgstr "" - -#: src/dird/ua_tree.c:95 -msgid "unmark directory name only no recursion" -msgstr "" - -#: src/dird/ua_tree.c:96 -msgid "quit and do not do restore" -msgstr "" - -#: src/dird/ua_tree.c:118 -msgid "" -"\n" -"You are now entering file selection mode where you add (mark) and\n" -"remove (unmark) files to be restored. No files are initially added, unless\n" -"you used the \"all\" keyword on the command line.\n" -"Enter \"done\" to leave this mode.\n" -"\n" -msgstr "" - -#: src/dird/ua_tree.c:129 src/dird/ua_tree.c:831 -#, c-format -msgid "cwd is: %s\n" -msgstr "" - -#: src/dird/ua_tree.c:138 src/dird/ua_tree.c:157 -#, c-format -msgid "Invalid command \"%s\". Enter \"done\" to exit.\n" -msgstr "" - -#: src/dird/ua_tree.c:227 -#, c-format -msgid "" -"Something is wrong with the Delta sequence of %s, skiping new parts. Current " -"sequence is %d\n" -msgstr "" - -#: src/dird/ua_tree.c:373 src/dird/ua_tree.c:385 src/dird/ua_tree.c:402 -msgid "No files marked.\n" -msgstr "" - -#: src/dird/ua_tree.c:387 -msgid "1 file marked.\n" -msgstr "" - -#: src/dird/ua_tree.c:389 -#, c-format -msgid "%s files marked.\n" -msgstr "" - -#: src/dird/ua_tree.c:417 -msgid "No directories marked.\n" -msgstr "" - -#: src/dird/ua_tree.c:419 -msgid "1 directory marked.\n" -msgstr "" - -#: src/dird/ua_tree.c:421 -#, c-format -msgid "%s directories marked.\n" -msgstr "" - -#: src/dird/ua_tree.c:442 -#, c-format -msgid "%s total files/dirs. %s marked to be restored.\n" -msgstr "" - -#: src/dird/ua_tree.c:453 -msgid "No file specification given.\n" -msgstr "" - -#: src/dird/ua_tree.c:674 -#, c-format -msgid "Node %s has no children.\n" -msgstr "" - -#: src/dird/ua_tree.c:767 -#, c-format -msgid "%d total files; %d marked to be restored; %s bytes.\n" -msgstr "" - -#: src/dird/ua_tree.c:778 src/stored/btape.c:2949 -#, c-format -msgid "" -" Command Description\n" -" ======= ===========\n" -msgstr "" - -#: src/dird/ua_tree.c:801 -msgid "Too few or too many arguments. Try using double quotes.\n" -msgstr "" - -#: src/dird/ua_tree.c:814 -msgid "Invalid path given.\n" -msgstr "" - -#: src/dird/ua_tree.c:850 src/dird/ua_tree.c:862 -msgid "No files unmarked.\n" -msgstr "" - -#: src/dird/ua_tree.c:864 -msgid "1 file unmarked.\n" -msgstr "" - -#: src/dird/ua_tree.c:867 -#, c-format -msgid "%s files unmarked.\n" -msgstr "" - -#: src/dird/ua_tree.c:878 src/dird/ua_tree.c:895 -msgid "No directories unmarked.\n" -msgstr "" - -#: src/dird/ua_tree.c:897 -msgid "1 directory unmarked.\n" -msgstr "" - -#: src/dird/ua_tree.c:899 -#, c-format -msgid "%d directories unmarked.\n" -msgstr "" - -#: src/dird/dird_conf.c:567 src/tray-monitor/tray_conf.c:168 -#: src/qt-console/tray-monitor/tray_conf.cpp:168 -#, c-format -msgid "No %s resource defined\n" -msgstr "" - -#: src/dird/dird_conf.c:576 -#, c-format -msgid "Director: name=%s MaxJobs=%d FDtimeout=%s SDtimeout=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:581 -#, c-format -msgid " query_file=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:584 src/dird/dird_conf.c:604 src/dird/dird_conf.c:621 -#: src/dird/dird_conf.c:689 src/dird/dird_conf.c:693 src/dird/dird_conf.c:697 -#: src/dird/dird_conf.c:730 src/dird/dird_conf.c:753 src/dird/dird_conf.c:757 -#: src/dird/dird_conf.c:761 src/dird/dird_conf.c:765 src/dird/dird_conf.c:769 -#: src/dird/dird_conf.c:782 src/dird/dird_conf.c:1018 -#: src/dird/dird_conf.c:1025 -msgid " --> " -msgstr "" - -#: src/dird/dird_conf.c:589 -#, c-format -msgid "Console: name=%s SSL=%d\n" -msgstr "" - -#: src/dird/dird_conf.c:594 -#, c-format -msgid "Counter: name=%s min=%d max=%d cur=%d wrapcntr=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:599 -#, c-format -msgid "Counter: name=%s min=%d max=%d\n" -msgstr "" - -#: src/dird/dird_conf.c:613 -#, c-format -msgid "Client: name=%s address=%s FDport=%d MaxJobs=%u\n" -msgstr "" - -#: src/dird/dird_conf.c:616 -#, c-format -msgid " JobRetention=%s FileRetention=%s AutoPrune=%d\n" -msgstr "" - -#: src/dird/dird_conf.c:629 -#, c-format -msgid "" -"Device: name=%s ok=%d num_writers=%d max_writers=%d\n" -" reserved=%d open=%d append=%d read=%d labeled=%d offline=%d autochgr=" -"%d\n" -" poolid=%s volname=%s MediaType=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:643 -#, c-format -msgid "" -"Storage: name=%s address=%s SDport=%d MaxJobs=%u\n" -" DeviceName=%s MediaType=%s StorageId=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:656 -#, c-format -msgid "" -"Catalog: name=%s address=%s DBport=%d db_name=%s\n" -" db_driver=%s db_user=%s MutliDBConn=%d\n" -msgstr "" - -#: src/dird/dird_conf.c:669 -#, c-format -msgid "%s: name=%s JobType=%d level=%s Priority=%d Enabled=%d\n" -msgstr "" - -#: src/dird/dird_conf.c:670 -msgid "JobDefs" -msgstr "" - -#: src/dird/dird_conf.c:674 -#, c-format -msgid "" -" MaxJobs=%u Resched=%d Times=%d Interval=%s Spool=%d WritePartAfterJob=" -"%d\n" -msgstr "" - -#: src/dird/dird_conf.c:680 -#, c-format -msgid " SpoolSize=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:683 -#, c-format -msgid " Accurate=%d\n" -msgstr "" - -#: src/dird/dird_conf.c:686 -#, c-format -msgid " SelectionType=%d\n" -msgstr "" - -#: src/dird/dird_conf.c:701 -#, c-format -msgid " --> Where=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:704 -#, c-format -msgid " --> RegexWhere=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:707 -#, c-format -msgid " --> Bootstrap=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:710 -#, c-format -msgid " --> WriteBootstrap=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:713 -#, c-format -msgid " --> PluginOptions=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:716 -#, c-format -msgid " --> MaxRunTime=%u\n" -msgstr "" - -#: src/dird/dird_conf.c:719 -#, c-format -msgid " --> MaxWaitTime=%u\n" -msgstr "" - -#: src/dird/dird_conf.c:722 -#, c-format -msgid " --> MaxStartDelay=%u\n" -msgstr "" - -#: src/dird/dird_conf.c:725 -#, c-format -msgid " --> MaxRunSchedTime=%u\n" -msgstr "" - -#: src/dird/dird_conf.c:737 -#, c-format -msgid " --> Base %s\n" -msgstr "" - -#: src/dird/dird_conf.c:743 src/lib/runscript.c:297 -msgid " --> RunScript\n" -msgstr "" - -#: src/dird/dird_conf.c:744 src/lib/runscript.c:298 -#, c-format -msgid " --> Command=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:745 src/lib/runscript.c:299 -#, c-format -msgid " --> Target=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:746 src/lib/runscript.c:300 -#, c-format -msgid " --> RunOnSuccess=%u\n" -msgstr "" - -#: src/dird/dird_conf.c:747 src/lib/runscript.c:301 -#, c-format -msgid " --> RunOnFailure=%u\n" -msgstr "" - -#: src/dird/dird_conf.c:748 src/lib/runscript.c:302 -#, c-format -msgid " --> FailJobOnError=%u\n" -msgstr "" - -#: src/dird/dird_conf.c:749 src/lib/runscript.c:303 -#, c-format -msgid " --> RunWhen=%u\n" -msgstr "" - -#: src/dird/dird_conf.c:775 -#, c-format -msgid " --> Run=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:779 -#, c-format -msgid " --> SelectionPattern=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:793 -#, c-format -msgid "FileSet: name=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:887 src/dird/dird_conf.c:966 -#, c-format -msgid "Schedule: name=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:892 -#, c-format -msgid " --> Run Level=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:893 -msgid " hour=" -msgstr "" - -#: src/dird/dird_conf.c:902 -msgid " mday=" -msgstr "" - -#: src/dird/dird_conf.c:911 -msgid " month=" -msgstr "" - -#: src/dird/dird_conf.c:920 -msgid " wday=" -msgstr "" - -#: src/dird/dird_conf.c:929 -msgid " wom=" -msgstr "" - -#: src/dird/dird_conf.c:938 -msgid " woy=" -msgstr "" - -#: src/dird/dird_conf.c:947 -#, c-format -msgid " mins=%d\n" -msgstr "" - -#: src/dird/dird_conf.c:949 src/dird/dird_conf.c:953 src/dird/dird_conf.c:957 -msgid " --> " -msgstr "" - -#: src/dird/dird_conf.c:974 -#, c-format -msgid "Pool: name=%s PoolType=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:976 -#, c-format -msgid " use_cat=%d use_once=%d cat_files=%d\n" -msgstr "" - -#: src/dird/dird_conf.c:979 -#, c-format -msgid " max_vols=%d auto_prune=%d VolRetention=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:982 -#, c-format -msgid " VolUse=%s recycle=%d LabelFormat=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:986 -#, c-format -msgid " CleaningPrefix=%s LabelType=%d\n" -msgstr "" - -#: src/dird/dird_conf.c:988 -#, c-format -msgid " RecyleOldest=%d PurgeOldest=%d ActionOnPurge=%d\n" -msgstr "" - -#: src/dird/dird_conf.c:992 -#, c-format -msgid " MaxVolJobs=%d MaxVolFiles=%d MaxVolBytes=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:996 -#, c-format -msgid " MigTime=%s MigHiBytes=%s MigLoBytes=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:1000 -#, c-format -msgid " JobRetention=%s FileRetention=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:1004 -#, c-format -msgid " NextPool=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:1007 -#, c-format -msgid " RecyclePool=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:1010 -#, c-format -msgid " ScratchPool=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:1013 -#, c-format -msgid " Catalog=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:1033 -#, c-format -msgid "Messages: name=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:1035 -#, c-format -msgid " mailcmd=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:1037 -#, c-format -msgid " opcmd=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:1041 src/tray-monitor/tray_conf.c:199 -#: src/qt-console/tray-monitor/tray_conf.cpp:199 -#, c-format -msgid "Unknown resource type %d in dump_resource.\n" -msgstr "" - -#: src/dird/dird_conf.c:1372 src/tray-monitor/tray_conf.c:257 -#: src/qt-console/tray-monitor/tray_conf.cpp:257 -#, c-format -msgid "Unknown resource type %d in free_resource.\n" -msgstr "" - -#: src/dird/dird_conf.c:1404 src/dird/dird_conf.c:1419 -#: src/tray-monitor/tray_conf.c:288 src/wx-console/console_conf.c:265 -#: src/console/console_conf.c:259 src/filed/filed_conf.c:361 -#: src/qt-console/tray-monitor/tray_conf.cpp:288 -#: src/qt-console/bat_conf.cpp:265 -#, c-format -msgid "%s item is required in %s resource, but not found.\n" -msgstr "" - -#: src/dird/dird_conf.c:1410 src/tray-monitor/tray_conf.c:294 -#: src/lib/parse_conf.c:225 src/qt-console/tray-monitor/tray_conf.cpp:294 -#, c-format -msgid "Too many items in %s resource\n" -msgstr "" - -#: src/dird/dird_conf.c:1450 -#, c-format -msgid "Cannot find Pool resource %s\n" -msgstr "" - -#: src/dird/dird_conf.c:1461 -#, c-format -msgid "Cannot find Console resource %s\n" -msgstr "" - -#: src/dird/dird_conf.c:1467 src/stored/stored_conf.c:611 -#: src/filed/filed_conf.c:381 -#, c-format -msgid "Cannot find Director resource %s\n" -msgstr "" - -#: src/dird/dird_conf.c:1474 src/stored/stored_conf.c:617 -#, c-format -msgid "Cannot find Storage resource %s\n" -msgstr "" - -#: src/dird/dird_conf.c:1483 -#, c-format -msgid "Cannot find Job resource %s\n" -msgstr "" - -#: src/dird/dird_conf.c:1533 -#, c-format -msgid "Cannot find Counter resource %s\n" -msgstr "" - -#: src/dird/dird_conf.c:1541 src/filed/filed_conf.c:387 -#, c-format -msgid "Cannot find Client resource %s\n" -msgstr "" - -#: src/dird/dird_conf.c:1554 -#, c-format -msgid "Cannot find Schedule resource %s\n" -msgstr "" - -#: src/dird/dird_conf.c:1559 src/dird/dird_conf.c:1619 -#: src/tray-monitor/tray_conf.c:314 src/tray-monitor/tray_conf.c:352 -#: src/qt-console/tray-monitor/tray_conf.cpp:314 -#: src/qt-console/tray-monitor/tray_conf.cpp:352 -#, c-format -msgid "Unknown resource type %d in save_resource.\n" -msgstr "" - -#: src/dird/dird_conf.c:1634 -#, c-format -msgid "Name item is required in %s resource, but not found.\n" -msgstr "" - -#: src/dird/dird_conf.c:1642 src/tray-monitor/tray_conf.c:372 -#: src/wx-console/console_conf.c:328 src/console/console_conf.c:322 -#: src/filed/filed_conf.c:446 src/qt-console/tray-monitor/tray_conf.cpp:372 -#: src/qt-console/bat_conf.cpp:334 -#, c-format -msgid "Attempt to define second %s resource named \"%s\" is not permitted.\n" -msgstr "" - -#: src/dird/dird_conf.c:1647 -#, c-format -msgid "Inserting %s res: %s index=%d pass=%d\n" -msgstr "" - -#: src/dird/dird_conf.c:1660 -#, c-format -msgid "Expected one of: %s, got: %s" -msgstr "" - -#: src/dird/dird_conf.c:1732 -#, c-format -msgid "Expected a Migration Job Type keyword, got: %s" -msgstr "" - -#: src/dird/dird_conf.c:1758 -#, c-format -msgid "Expected a Job Type keyword, got: %s" -msgstr "" - -#: src/dird/dird_conf.c:1782 -#, c-format -msgid "Expected a Job Level keyword, got: %s" -msgstr "" - -#: src/dird/dird_conf.c:1802 -#, c-format -msgid "Expected a Restore replacement option, got: %s" -msgstr "" - -#: src/dird/dird_conf.c:1852 src/dird/dird_conf.c:1968 -#: src/lib/parse_conf.c:761 src/lib/parse_conf.c:777 src/lib/ini.c:593 -#, c-format -msgid "Expect %s, got: %s" -msgstr "" - -#: src/dird/dird_conf.c:1874 src/lib/parse_conf.c:478 -#, c-format -msgid "Could not find config Resource %s referenced on line %d : %s\n" -msgstr "" - -#: src/dird/getmsg.c:176 -#, c-format -msgid "bget_dirmsg: unknown bnet signal %d\n" -msgstr "" - -#: src/dird/getmsg.c:194 src/dird/getmsg.c:200 src/dird/getmsg.c:213 -#: src/dird/getmsg.c:247 src/dird/getmsg.c:269 src/dird/getmsg.c:295 -#, c-format -msgid "Malformed message: %s\n" -msgstr "" - -#: src/dird/getmsg.c:367 -#, c-format -msgid "Bad response to %s command: wanted %s, got %s\n" -msgstr "" - -#: src/dird/getmsg.c:372 -#, c-format -msgid "Socket error on %s command: ERR=%s\n" -msgstr "" - -#: src/dird/ua_restore.c:148 -msgid "\"RegexWhere\" specification not authorized.\n" -msgstr "" - -#: src/dird/ua_restore.c:155 -msgid "\"where\" specification not authorized.\n" -msgstr "" - -#: src/dird/ua_restore.c:177 -msgid "" -"No Restore Job Resource found in bacula-dir.conf.\n" -"You must create at least one before running this command.\n" -msgstr "" - -#: src/dird/ua_restore.c:194 -msgid "Restore not done.\n" -msgstr "" - -#: src/dird/ua_restore.c:205 -msgid "Unable to construct a valid BSR. Cannot continue.\n" -msgstr "" - -#: src/dird/ua_restore.c:209 src/dird/ua_restore.c:221 -msgid "No files selected to be restored.\n" -msgstr "" - -#: src/dird/ua_restore.c:215 -msgid "" -"\n" -"1 file selected to be restored.\n" -"\n" -msgstr "" - -#: src/dird/ua_restore.c:217 -#, c-format +#: src/stored/btape.c:1613 msgid "" "\n" -"%s files selected to be restored.\n" "\n" -msgstr "" - -#: src/dird/ua_restore.c:236 -msgid "No Client resource found!\n" -msgstr "" - -#: src/dird/ua_restore.c:333 -msgid "The restore will use the following job(s) as Base\n" -msgstr "" - -#: src/dird/ua_restore.c:354 -#, c-format -msgid "Missing value for keyword: %s\n" -msgstr "" - -#: src/dird/ua_restore.c:434 -msgid "List last 20 Jobs run" -msgstr "" - -#: src/dird/ua_restore.c:435 -msgid "List Jobs where a given File is saved" -msgstr "" - -#: src/dird/ua_restore.c:436 -msgid "Enter list of comma separated JobIds to select" -msgstr "" - -#: src/dird/ua_restore.c:437 -msgid "Enter SQL list command" -msgstr "" - -#: src/dird/ua_restore.c:438 -msgid "Select the most recent backup for a client" -msgstr "" - -#: src/dird/ua_restore.c:439 -msgid "Select backup for a client before a specified time" -msgstr "" - -#: src/dird/ua_restore.c:440 -msgid "Enter a list of files to restore" -msgstr "" - -#: src/dird/ua_restore.c:441 -msgid "Enter a list of files to restore before a specified time" -msgstr "" - -#: src/dird/ua_restore.c:442 -msgid "Find the JobIds of the most recent backup for a client" -msgstr "" - -#: src/dird/ua_restore.c:443 -msgid "Find the JobIds for a backup for a client before a specified time" -msgstr "" - -#: src/dird/ua_restore.c:444 -msgid "Enter a list of directories to restore for found JobIds" -msgstr "" - -#: src/dird/ua_restore.c:445 -msgid "Select full restore to a specified Job date" -msgstr "" - -#: src/dird/ua_restore.c:446 src/dird/ua_status.c:862 src/stored/status.c:611 -#: src/filed/status.c:373 src/wx-console/wxbconfigpanel.cpp:220 -msgid "Cancel" -msgstr "" - -#: src/dird/ua_restore.c:491 -#, c-format -msgid "Unknown keyword: %s\n" -msgstr "" - -#: src/dird/ua_restore.c:520 src/dird/ua_update.c:957 -#, c-format -msgid "Improper date format: %s\n" -msgstr "" - -#: src/dird/ua_restore.c:560 -#, c-format -msgid "Error: Pool resource \"%s\" access not allowed.\n" -msgstr "" - -#: src/dird/ua_restore.c:576 -msgid "" +"=== Forward space files test ===\n" "\n" -"First you select one or more JobIds that contain files\n" -"to be restored. You will be presented several methods\n" -"of specifying the JobIds. Then you will be allowed to\n" -"select which files from those JobIds are to be restored.\n" +"This test is essential to Bacula.\n" "\n" -msgstr "" - -#: src/dird/ua_restore.c:589 -msgid "To select the JobIds, you have the following choices:\n" -msgstr "" - -#: src/dird/ua_restore.c:594 -msgid "Select item: " -msgstr "" - -#: src/dird/ua_restore.c:599 src/dird/ua_restore.c:634 -msgid "SQL query not authorized.\n" -msgstr "" - -#: src/dird/ua_restore.c:612 -msgid "Enter Filename (no path):" -msgstr "" - -#: src/dird/ua_restore.c:627 src/dird/ua_restore.c:735 -msgid "Enter JobId(s), comma separated, to restore: " -msgstr "" - -#: src/dird/ua_restore.c:637 -msgid "Enter SQL list command: " -msgstr "" - -#: src/dird/ua_restore.c:671 src/dird/ua_restore.c:694 -msgid "" -"Enter file names with paths, or < to enter a filename\n" -"containing a list of file names with paths, and terminate\n" -"them with a blank line.\n" -msgstr "" - -#: src/dird/ua_restore.c:675 src/dird/ua_restore.c:698 -msgid "Enter full filename: " -msgstr "" - -#: src/dird/ua_restore.c:733 -#, c-format -msgid "You have already selected the following JobIds: %s\n" -msgstr "" - -#: src/dird/ua_restore.c:751 -msgid "" -"Enter full directory names or start the name\n" -"with a < to indicate it is a filename containing a list\n" -"of directories and terminate them with a blank line.\n" -msgstr "" - -#: src/dird/ua_restore.c:755 -msgid "Enter directory name: " -msgstr "" - -#: src/dird/ua_restore.c:771 -msgid "Enter JobId to get the state to restore: " -msgstr "" - -#: src/dird/ua_restore.c:784 -#, c-format -msgid "Selecting jobs to build the Full state at %s\n" -msgstr "" - -#: src/dird/ua_restore.c:810 -msgid "Invalid JobId in list.\n" -msgstr "" - -#: src/dird/ua_restore.c:829 -#, c-format -msgid "Access to JobId=%s (Job \"%s\") not authorized. Not selected.\n" -msgstr "" - -#: src/dird/ua_restore.c:842 -msgid "No Jobs selected.\n" -msgstr "" - -#: src/dird/ua_restore.c:847 -#, c-format -msgid "You have selected the following JobIds: %s\n" -msgstr "" - -#: src/dird/ua_restore.c:849 -#, c-format -msgid "You have selected the following JobId: %s\n" -msgstr "" - -#: src/dird/ua_restore.c:859 -msgid "" -"The restored files will the most current backup\n" -"BEFORE the date you specify below.\n" +"I'm going to write five files then test forward spacing\n" "\n" msgstr "" -#: src/dird/ua_restore.c:862 -msgid "Enter date as YYYY-MM-DD HH:MM:SS :" -msgstr "" - -#: src/dird/ua_restore.c:868 -msgid "Improper date format.\n" -msgstr "" - -#: src/dird/ua_restore.c:889 -#, c-format -msgid "Cannot open file %s: ERR=%s\n" -msgstr "" - -#: src/dird/ua_restore.c:897 src/dird/ua_restore.c:901 -#, c-format -msgid "Error occurred on line %d of file \"%s\"\n" -msgstr "" - -#: src/dird/ua_restore.c:945 src/dird/ua_restore.c:973 -#, c-format -msgid "No database record found for: %s\n" -msgstr "" - -#: src/dird/ua_restore.c:961 -msgid "No JobId specified cannot continue.\n" +#: src/stored/btape.c:1638 +msgid "Now forward spacing 1 file.\n" msgstr "" -#: src/dird/ua_restore.c:994 +#: src/stored/btape.c:1640 src/stored/btape.c:1652 src/stored/btape.c:1665 +#: src/stored/btape.c:1683 src/stored/btape.c:1859 #, c-format -msgid "No table found: %s\n" -msgstr "" - -#: src/dird/ua_restore.c:1052 -msgid "" -"\n" -"\n" -"For one or more of the JobIds selected, no files were found,\n" -"so file selection is not possible.\n" -"Most likely your retention policy pruned the files.\n" -msgstr "" - -#: src/dird/ua_restore.c:1055 -msgid "" -"\n" -"Do you want to restore all the files? (yes|no): " -msgstr "" - -#: src/dird/ua_restore.c:1058 -msgid "" -"\n" -"Regexp matching files to restore? (empty to abort): " +msgid "Bad status from fsr. ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:1074 +#: src/stored/btape.c:1643 #, c-format -msgid "Regex compile error: %s\n" +msgid "We should be in file 1. I am at file %d. %s\n" msgstr "" -#: src/dird/ua_restore.c:1137 -#, c-format -msgid "" -"\n" -"Building directory tree for JobId(s) %s ... " +#: src/stored/btape.c:1650 +msgid "Now forward spacing 2 files.\n" msgstr "" -#: src/dird/ua_restore.c:1207 -#, c-format -msgid "" -"\n" -"%s files inserted into the tree and marked for extraction.\n" +#: src/stored/btape.c:1663 +msgid "Now forward spacing 4 files.\n" msgstr "" -#: src/dird/ua_restore.c:1210 -#, c-format +#: src/stored/btape.c:1675 msgid "" -"\n" -"%s files inserted into the tree.\n" -msgstr "" - -#: src/dird/ua_restore.c:1285 -#, c-format -msgid "Error getting FileSet \"%s\": ERR=%s\n" -msgstr "" - -#: src/dird/ua_restore.c:1290 -#, c-format -msgid "FileSet argument: %s\n" +"The test worked this time. Please add:\n" +"\n" +" Fast Forward Space File = no\n" +"\n" +"to your Device resource for this drive.\n" msgstr "" -#: src/dird/ua_restore.c:1302 -#, c-format -msgid "No FileSet found for client \"%s\".\n" +#: src/stored/btape.c:1681 +msgid "Now forward spacing 1 more file.\n" msgstr "" -#: src/dird/ua_restore.c:1308 +#: src/stored/btape.c:1685 #, c-format -msgid "Error getting FileSet record: %s\n" +msgid "We should be in file 5. I am at file %d. %s\n" msgstr "" -#: src/dird/ua_restore.c:1309 +#: src/stored/btape.c:1690 msgid "" -"This probably means you modified the FileSet.\n" -"Continuing anyway.\n" +"\n" +"=== End Forward space files test ===\n" +"\n" msgstr "" -#: src/dird/ua_restore.c:1324 -#, c-format -msgid "Pool \"%s\" not found, using any pool.\n" +#: src/stored/btape.c:1694 +msgid "" +"\n" +"The forward space file test failed.\n" msgstr "" -#: src/dird/ua_restore.c:1351 src/dird/ua_restore.c:1367 -#, c-format -msgid "No Full backup before %s found.\n" +#: src/stored/btape.c:1696 +msgid "" +"You have Fast Forward Space File enabled.\n" +"I am turning it off then retrying the test.\n" msgstr "" -#: src/dird/ua_restore.c:1396 -msgid "No jobs found.\n" +#: src/stored/btape.c:1702 +msgid "" +"You must correct this error or Bacula will not work.\n" +"Some systems, e.g. OpenBSD, require you to set\n" +" Use MTIOCGET= no\n" +"in your device resource. Use with caution.\n" msgstr "" -#: src/dird/ua_restore.c:1517 -#, c-format -msgid "Warning default storage overridden by \"%s\" on command line.\n" +#: src/stored/btape.c:1736 +msgid "" +"\n" +"Append test failed. Attempting again.\n" +"Setting \"Hardware End of Medium = no\n" +" and \"Fast Forward Space File = no\n" +"and retrying append test.\n" +"\n" msgstr "" -#: src/dird/ua_restore.c:1534 -#, c-format -msgid "Using Storage \"%s\" from MediaType \"%s\".\n" +#: src/stored/btape.c:1744 +msgid "" +"\n" +"\n" +"It looks like the test worked this time, please add:\n" +"\n" +" Hardware End of Medium = No\n" +"\n" +" Fast Forward Space File = No\n" +"to your Device resource in the Storage conf file.\n" msgstr "" -#: src/dird/ua_restore.c:1537 -#, c-format -msgid "Storage \"%s\" not found, using Storage \"%s\" from MediaType \"%s\".\n" +#: src/stored/btape.c:1751 +msgid "" +"\n" +"\n" +"That appears *NOT* to have corrected the problem.\n" msgstr "" -#: src/dird/ua_restore.c:1546 -#, c-format +#: src/stored/btape.c:1756 msgid "" "\n" -"Unable to find Storage resource for\n" -"MediaType \"%s\", needed by the Jobs you selected.\n" +"\n" +"It looks like the append failed. Attempting again.\n" +"Setting \"BSF at EOM = yes\" and retrying append test.\n" msgstr "" -#: src/dird/fd_cmds.c:95 -msgid "Client: " +#: src/stored/btape.c:1761 +msgid "" +"\n" +"\n" +"It looks like the test worked this time, please add:\n" +"\n" +" Hardware End of Medium = No\n" +" Fast Forward Space File = No\n" +" BSF at EOM = yes\n" +"\n" +"to your Device resource in the Storage conf file.\n" msgstr "" -#: src/dird/fd_cmds.c:137 -#, c-format -msgid "File daemon \"%s\" rejected Job command: %s\n" +#: src/stored/btape.c:1772 +msgid "" +"\n" +"Append test failed.\n" +"\n" +"\n" +"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n" +"Unable to correct the problem. You MUST fix this\n" +"problem before Bacula can use your tape drive correctly\n" +"\n" +"Perhaps running Bacula in fixed block mode will work.\n" +"Do so by setting:\n" +"\n" +"Minimum Block Size = nnn\n" +"Maximum Block Size = nnn\n" +"\n" +"in your Storage daemon's Device definition.\n" +"nnn must match your tape driver's block size, which\n" +"can be determined by reading your tape manufacturers\n" +"information, and the information on your kernel dirver.\n" +"Fixed block sizes, however, are not normally an ideal solution.\n" +"\n" +"Some systems, e.g. OpenBSD, require you to set\n" +" Use MTIOCGET= no\n" +"in your device resource. Use with caution.\n" msgstr "" -#: src/dird/fd_cmds.c:150 -#, c-format -msgid "Error updating Client record. ERR=%s\n" +#: src/stored/btape.c:1794 +msgid "" +"\n" +"The above Bacula scan should have output identical to what follows.\n" +"Please double check it ...\n" +"=== Sample correct output ===\n" +"1 block of 64448 bytes in file 1\n" +"End of File mark.\n" +"2 blocks of 64448 bytes in file 2\n" +"End of File mark.\n" +"3 blocks of 64448 bytes in file 3\n" +"End of File mark.\n" +"1 block of 64448 bytes in file 4\n" +"End of File mark.\n" +"Total files=4, blocks=7, bytes = 451,136\n" +"=== End sample correct output ===\n" +"\n" +"If the above scan output is not identical to the\n" +"sample output, you MUST correct the problem\n" +"or Bacula will not be able to write multiple Jobs to \n" +"the tape.\n" +"\n" msgstr "" -#: src/dird/fd_cmds.c:155 +#: src/stored/btape.c:1837 #, c-format -msgid "FD gave bad response to JobId command: %s\n" -msgstr "" - -#: src/dird/fd_cmds.c:184 src/dird/fd_cmds.c:272 -msgid ", since=" +msgid "Bad status from fsf. ERR=%s\n" msgstr "" -#: src/dird/fd_cmds.c:249 -msgid "No prior or suitable Full backup found in catalog. Doing FULL backup.\n" +#: src/stored/btape.c:1841 +msgid "Forward spaced 1 file.\n" msgstr "" -#: src/dird/fd_cmds.c:250 src/dird/fd_cmds.c:256 src/dird/fd_cmds.c:265 +#: src/stored/btape.c:1844 #, c-format -msgid " (upgraded from %s)" +msgid "Forward spaced %d files.\n" msgstr "" -#: src/dird/fd_cmds.c:255 -msgid "" -"No prior or suitable Differential backup found in catalog. Doing " -"Differential backup.\n" +#: src/stored/btape.c:1863 +msgid "Forward spaced 1 record.\n" msgstr "" -#: src/dird/fd_cmds.c:263 +#: src/stored/btape.c:1866 #, c-format -msgid "Prior failed job found in catalog. Upgrading to %s.\n" +msgid "Forward spaced %d records.\n" msgstr "" -#: src/dird/fd_cmds.c:328 +#: src/stored/btape.c:1911 #, c-format -msgid "Unimplemented backup level %d %c\n" +msgid "Wrote one record of %d bytes.\n" msgstr "" -#: src/dird/fd_cmds.c:401 -msgid "" -"FD compression disabled for this Job because AllowCompress=No in Storage " -"resource.\n" +#: src/stored/btape.c:1913 +msgid "Wrote block to device.\n" msgstr "" -#: src/dird/fd_cmds.c:500 src/filed/job.c:854 -#, c-format -msgid "Cannot run program: %s. ERR=%s\n" +#: src/stored/btape.c:1927 +msgid "Enter length to read: " msgstr "" -#: src/dird/fd_cmds.c:511 src/dird/fd_cmds.c:536 src/dird/fd_cmds.c:550 -msgid ">filed: write error on socket\n" +#: src/stored/btape.c:1932 +msgid "Bad length entered, using default of 1024 bytes.\n" msgstr "" -#: src/dird/fd_cmds.c:517 +#: src/stored/btape.c:1941 #, c-format -msgid "Error running program: %s. ERR=%s\n" +msgid "Read of %d bytes gives stat=%d. ERR=%s\n" msgstr "" -#: src/dird/fd_cmds.c:526 +#: src/stored/btape.c:1964 src/stored/btape.c:2013 #, c-format -msgid "Cannot open included file: %s. ERR=%s\n" +msgid "End of tape\n" msgstr "" -#: src/dird/fd_cmds.c:672 +#: src/stored/btape.c:1969 #, c-format -msgid "Client \"%s\" RunScript failed.\n" +msgid "Starting scan at file %u\n" msgstr "" -#: src/dird/fd_cmds.c:695 +#: src/stored/btape.c:1974 src/stored/tape_dev.c:613 #, c-format -msgid "" -"Client \"%s\" may not be used to restore this job. Please upgrade your " -"client.\n" +msgid "read error on %s. ERR=%s.\n" msgstr "" -#: src/dird/fd_cmds.c:770 -msgid "RestoreObject failed.\n" +#: src/stored/btape.c:1976 +#, c-format +msgid "Bad status from read %d. ERR=%s\n" msgstr "" -#: src/dird/fd_cmds.c:806 +#: src/stored/btape.c:1979 src/stored/btape.c:1993 src/stored/btape.c:2057 +#: src/stored/btape.c:2069 src/stored/btape.c:2082 src/stored/btape.c:2098 #, c-format -msgid "" -" \n" +" -b specify bootstrap file\n" +" -c set configuration file to file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -p proceed inspite of I/O errors\n" +" -s turn off signals\n" +" -v be verbose\n" +" -? print this message.\n" +"\n" msgstr "" -#: src/dird/ua_update.c:229 +#: src/stored/btape.c:3045 #, c-format -msgid "Invalid max. bytes specification: %s\n" +msgid "Mount second Volume on device %s and press return when ready: " msgstr "" -#: src/dird/ua_update.c:237 +#: src/stored/btape.c:3048 src/stored/bls.c:478 src/stored/bextract.c:609 +#: src/stored/bscan.c:1354 src/stored/bcopy.c:365 #, c-format -msgid "New Max bytes is: %s\n" -msgstr "" - -#: src/dird/ua_update.c:248 src/dird/ua_update.c:268 -msgid "Invalid value. It must be yes or no.\n" +msgid "Mount Volume \"%s\" on device %s and press return when ready: " msgstr "" -#: src/dird/ua_update.c:256 +#: src/stored/btape.c:3073 #, c-format -msgid "New Recycle flag is: %s\n" -msgstr "" - -#: src/dird/ua_update.c:257 src/dird/ua_update.c:277 src/dird/ua_update.c:699 -#: src/dird/ua_run.c:180 src/dird/backup.c:788 src/dird/backup.c:789 -#: src/dird/backup.c:790 src/dird/ua_input.c:131 src/stored/parse_bsr.c:863 -#: src/tools/dbcheck.c:1352 -msgid "yes" -msgstr "" - -#: src/dird/ua_update.c:257 src/dird/ua_update.c:277 src/dird/ua_update.c:699 -#: src/dird/ua_run.c:200 src/dird/backup.c:788 src/dird/backup.c:789 -#: src/dird/backup.c:790 src/dird/ua_input.c:135 src/stored/parse_bsr.c:863 -msgid "no" +msgid "Mount blank Volume on device %s and press return when ready: " msgstr "" -#: src/dird/ua_update.c:276 +#: src/stored/btape.c:3093 #, c-format -msgid "New InChanger flag is: %s\n" +msgid "End of Volume \"%s\" %d records.\n" msgstr "" -#: src/dird/ua_update.c:294 +#: src/stored/btape.c:3107 #, c-format -msgid "Invalid slot, it must be between 0 and MaxVols=%d\n" +msgid "Read block=%u, VolBytes=%s rate=%sB/s\n" msgstr "" -#: src/dird/ua_update.c:304 src/dird/ua_update.c:728 +#: src/stored/btape.c:3120 #, c-format -msgid "Error updating media record Slot: ERR=%s" +msgid "Cannot open Dev=%s, Vol=%s\n" msgstr "" -#: src/dird/ua_update.c:306 +#: src/stored/record_read.c:164 src/stored/record.c:658 #, c-format -msgid "New Slot is: %d\n" +msgid "Sanity check failed. maxlen=%d datalen=%d. Block discarded.\n" msgstr "" -#: src/dird/ua_update.c:331 -#, c-format -msgid "New Pool is: %s\n" +#: src/stored/spool.c:71 +msgid "Spooling statistics:\n" msgstr "" -#: src/dird/ua_update.c:374 +#: src/stored/spool.c:74 #, c-format -msgid "New RecyclePool is: %s\n" +msgid "" +"Data spooling: %u active jobs, %s bytes; %u total jobs, %s max bytes/job.\n" msgstr "" -#: src/dird/ua_update.c:394 +#: src/stored/spool.c:82 #, c-format -msgid "Error updating Volume record: ERR=%s" +msgid "Attr spooling: %u active jobs, %s bytes; %u total jobs, %s max bytes.\n" msgstr "" -#: src/dird/ua_update.c:396 -#, c-format -msgid "Volume defaults updated from \"%s\" Pool record.\n" +#: src/stored/spool.c:100 +msgid "Spooling data ...\n" msgstr "" -#: src/dird/ua_update.c:419 src/dird/ua_update.c:451 +#: src/stored/spool.c:126 #, c-format -msgid "Error updating Volume records: ERR=%s" +msgid "Bad return from despool WroteVol=%d\n" msgstr "" -#: src/dird/ua_update.c:421 src/dird/ua_update.c:453 +#: src/stored/spool.c:159 #, c-format -msgid "All Volume defaults updated from \"%s\" Pool record.\n" +msgid "Open data spool file %s failed: ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:443 -#, c-format -msgid "Updating all pools, but skipped PoolId=%d. ERR=%s\n" +#: src/stored/spool.c:187 +msgid "Despooling zero bytes. Your disk is probably FULL!\n" msgstr "" -#: src/dird/ua_update.c:469 +#: src/stored/spool.c:196 #, c-format -msgid "Error updating media record Enabled: ERR=%s" +msgid "Committing spooled data to Volume \"%s\". Despooling %s bytes ...\n" msgstr "" -#: src/dird/ua_update.c:472 +#: src/stored/spool.c:201 #, c-format -msgid "New Enabled is: %d\n" +msgid "Writing spooled data to Volume. Despooling %s bytes ...\n" msgstr "" -#: src/dird/ua_update.c:487 +#: src/stored/spool.c:272 src/stored/acquire.c:517 src/stored/block_util.c:552 +#: src/stored/block_util.c:622 src/stored/block_util.c:652 #, c-format -msgid "Error updating media record ActionOnPurge: ERR=%s" +msgid "Could not create JobMedia record for Volume=\"%s\" Job=%s\n" msgstr "" -#: src/dird/ua_update.c:490 +#: src/stored/spool.c:290 #, c-format -msgid "New ActionOnPurge is: %s\n" -msgstr "" - -#: src/dird/ua_update.c:605 src/dird/ua_run.c:222 -msgid "Parameters to modify:\n" +msgid "" +"Despooling elapsed time = %02d:%02d:%02d, Transfer rate = %s Bytes/second\n" msgstr "" -#: src/dird/ua_update.c:606 -msgid "Volume Status" +#: src/stored/spool.c:299 src/stored/spool.c:500 src/stored/spool.c:546 +#, c-format +msgid "Ftruncate spool file failed: ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:607 -msgid "Volume Retention Period" +#: src/stored/spool.c:358 +#, c-format +msgid "Spool header read error. ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:608 -msgid "Volume Use Duration" +#: src/stored/spool.c:361 +#, c-format +msgid "Spool read error. Wanted %u bytes, got %d\n" msgstr "" -#: src/dird/ua_update.c:609 -msgid "Maximum Volume Jobs" +#: src/stored/spool.c:362 +#, c-format +msgid "Spool header read error. Wanted %u bytes, got %d\n" msgstr "" -#: src/dird/ua_update.c:610 -msgid "Maximum Volume Files" +#: src/stored/spool.c:369 src/stored/spool.c:370 +#, c-format +msgid "Spool block too big. Max %u bytes, got %u\n" msgstr "" -#: src/dird/ua_update.c:611 -msgid "Maximum Volume Bytes" +#: src/stored/spool.c:376 src/stored/spool.c:377 +#, c-format +msgid "Spool data read error. Wanted %u bytes, got %d\n" msgstr "" -#: src/dird/ua_update.c:612 -msgid "Recycle Flag" +#: src/stored/spool.c:431 +#, c-format +msgid "" +"User specified Job spool size reached: JobSpoolSize=%s MaxJobSpoolSize=%s\n" msgstr "" -#: src/dird/ua_update.c:613 -msgid "Slot" +#: src/stored/spool.c:436 +#, c-format +msgid "" +"User specified Device spool size reached: DevSpoolSize=%s MaxDevSpoolSize=" +"%s\n" msgstr "" -#: src/dird/ua_update.c:614 -msgid "InChanger Flag" +#: src/stored/spool.c:443 +msgid "Bad return from despool in write_block.\n" msgstr "" -#: src/dird/ua_update.c:615 -msgid "Volume Files" +#: src/stored/spool.c:451 +msgid "Spooling data again ...\n" msgstr "" -#: src/dird/ua_update.c:617 -msgid "Volume from Pool" +#: src/stored/spool.c:483 +#, c-format +msgid "Error writing header to spool file. ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:618 -msgid "All Volumes from Pool" +#: src/stored/spool.c:488 +#, c-format +msgid "" +"Error writing header to spool file. Disk probably full. Attempting recovery. " +"Wanted to write=%d got=%d\n" msgstr "" -#: src/dird/ua_update.c:619 -msgid "All Volumes from all Pools" +#: src/stored/spool.c:506 src/stored/spool.c:552 +msgid "Fatal despooling error." msgstr "" -#: src/dird/ua_update.c:620 -msgid "Enabled" +#: src/stored/spool.c:514 +msgid "Retrying after header spooling error failed.\n" msgstr "" -#: src/dird/ua_update.c:621 -msgid "RecyclePool" +#: src/stored/spool.c:530 +#, c-format +msgid "Error writing data to spool file. ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:622 -msgid "Action On Purge" +#: src/stored/spool.c:563 +msgid "Retrying after data spooling error failed.\n" msgstr "" -#: src/dird/ua_update.c:623 -msgid "Done" +#: src/stored/spool.c:650 +msgid "Network error on BlastAttributes.\n" msgstr "" -#: src/dird/ua_update.c:624 src/dird/ua_run.c:252 src/dird/ua_run.c:600 -msgid "Select parameter to modify" +#: src/stored/spool.c:674 src/stored/spool.c:682 +#, c-format +msgid "Fseek on attributes file failed: ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:632 +#: src/stored/spool.c:694 #, c-format -msgid "Updating Volume \"%s\"\n" +msgid "Sending spooled attrs to the Director. Despooling %s bytes ...\n" msgstr "" -#: src/dird/ua_update.c:637 +#: src/stored/spool.c:720 #, c-format -msgid "Current Volume status is: %s\n" +msgid "fopen attr spool file %s failed: ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:638 -msgid "Possible Values are:\n" +#: src/stored/record.c:63 src/stored/record_util.c:61 +#, c-format +msgid "unknown: %d" msgstr "" -#: src/dird/ua_update.c:649 -msgid "Choose new Volume Status" +#: src/stored/record.c:380 +msgid "Damaged buffer\n" msgstr "" -#: src/dird/ua_update.c:655 +#: src/stored/bls.c:68 #, c-format -msgid "Current retention period is: %s\n" +msgid "" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: bls [options] \n" +" -b specify a bootstrap file\n" +" -c specify a Storage configuration file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -e exclude list\n" +" -i include list\n" +" -j list jobs\n" +" -k list blocks\n" +" (no j or k option) list saved files\n" +" -L dump label\n" +" -p proceed inspite of errors\n" +" -v be verbose\n" +" -V specify Volume names (separated by |)\n" +" -? print this message\n" +"\n" msgstr "" -#: src/dird/ua_update.c:657 -msgid "Enter Volume Retention period: " +#: src/stored/bls.c:138 src/stored/bextract.c:141 +#, c-format +msgid "Could not open exclude file: %s, ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:664 +#: src/stored/bls.c:153 src/stored/bextract.c:156 #, c-format -msgid "Current use duration is: %s\n" +msgid "Could not open include file: %s, ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:666 -msgid "Enter Volume Use Duration: " +#: src/stored/bls.c:200 +msgid "No archive name specified\n" msgstr "" -#: src/dird/ua_update.c:673 +#: src/stored/bls.c:238 #, c-format -msgid "Current max jobs is: %u\n" +msgid "" +"\n" +"Warning, this Volume is a continuation of Volume %s\n" msgstr "" -#: src/dird/ua_update.c:674 -msgid "Enter new Maximum Jobs: " +#: src/stored/bls.c:281 +#, c-format +msgid "Got EOM at file %u on device %s, Volume \"%s\"\n" msgstr "" -#: src/dird/ua_update.c:681 +#: src/stored/bls.c:292 #, c-format -msgid "Current max files is: %u\n" +msgid "Mounted Volume \"%s\".\n" msgstr "" -#: src/dird/ua_update.c:682 -msgid "Enter new Maximum Files: " +#: src/stored/bls.c:294 +#, c-format +msgid "End of file %u on device %s, Volume \"%s\"\n" msgstr "" -#: src/dird/ua_update.c:689 +#: src/stored/bls.c:318 #, c-format -msgid "Current value is: %s\n" +msgid "" +"File:blk=%u:%u blk_num=%u blen=%u First rec FI=%s SessId=%u SessTim=%u Strm=" +"%s rlen=%d\n" msgstr "" -#: src/dird/ua_update.c:690 -msgid "Enter new Maximum Bytes: " +#: src/stored/bls.c:327 +#, c-format +msgid "Block: %d size=%d\n" msgstr "" -#: src/dird/ua_update.c:698 -#, c-format -msgid "Current recycle flag is: %s\n" +#: src/stored/bls.c:385 src/stored/bextract.c:325 src/stored/bscan.c:674 +msgid "Cannot continue.\n" msgstr "" -#: src/dird/ua_update.c:700 -msgid "Enter new Recycle status: " +#: src/stored/bls.c:387 +msgid "Attrib unpack error!\n" msgstr "" -#: src/dird/ua_update.c:707 +#: src/stored/bls.c:398 #, c-format -msgid "Current Slot is: %d\n" +msgid "FileIndex=%d VolSessionId=%d VolSessionTime=%d Stream=%d DataLen=%d\n" msgstr "" -#: src/dird/ua_update.c:708 -msgid "Enter new Slot: " +#: src/stored/bls.c:424 src/stored/bcopy.c:322 src/stored/read_records.c:387 +msgid "Fresh Volume Label" msgstr "" -#: src/dird/ua_update.c:715 -#, c-format -msgid "Current InChanger flag is: %d\n" +#: src/stored/bls.c:427 src/stored/bcopy.c:325 src/stored/read_records.c:390 +msgid "Volume Label" msgstr "" -#: src/dird/ua_update.c:716 -#, c-format -msgid "Set InChanger flag for Volume \"%s\": yes/no: " +#: src/stored/bls.c:431 src/stored/label.c:1128 src/stored/bcopy.c:329 +msgid "Begin Job Session" msgstr "" -#: src/dird/ua_update.c:730 -#, c-format -msgid "New InChanger flag is: %d\n" +#: src/stored/bls.c:436 src/stored/label.c:1131 src/stored/bcopy.c:333 +msgid "End Job Session" msgstr "" -#: src/dird/ua_update.c:737 -msgid "" -"Warning changing Volume Files can result\n" -"in loss of data on your Volume\n" -"\n" +#: src/stored/bls.c:440 src/stored/bcopy.c:338 +msgid "End of Medium" msgstr "" -#: src/dird/ua_update.c:739 -#, c-format -msgid "Current Volume Files is: %u\n" +#: src/stored/bls.c:443 +msgid "End of Physical Medium" msgstr "" -#: src/dird/ua_update.c:740 -msgid "Enter new number of Files for Volume: " +#: src/stored/bls.c:446 +msgid "Start of object" msgstr "" -#: src/dird/ua_update.c:745 -msgid "Normally, you should only increase Volume Files by one!\n" +#: src/stored/bls.c:449 +msgid "End of object" msgstr "" -#: src/dird/ua_update.c:746 -msgid "Increase Volume Files? (yes/no): " +#: src/stored/bls.c:452 src/stored/label.c:1140 src/stored/bcopy.c:341 +msgid "Unknown" msgstr "" -#: src/dird/ua_update.c:756 +#: src/stored/bls.c:459 src/stored/bcopy.c:347 src/stored/read_records.c:408 #, c-format -msgid "New Volume Files is: %u\n" +msgid "%s Record: VolSessionId=%d VolSessionTime=%d JobId=%d DataLen=%d\n" msgstr "" -#: src/dird/ua_update.c:768 +#: src/stored/wait.c:121 #, c-format -msgid "Current Pool is: %s\n" -msgstr "" - -#: src/dird/ua_update.c:769 -msgid "Enter new Pool name: " +msgid "pthread timedwait error. ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:790 +#: src/stored/wait.c:227 #, c-format -msgid "Current Enabled is: %d\n" +msgid "JobId=%s, Job %s waiting to reserve a device.\n" msgstr "" -#: src/dird/ua_update.c:791 -msgid "Enter new Enabled: " +#: src/stored/wait.c:273 +#, c-format +msgid "JobId=%s, Job %s waiting device %s.\n" msgstr "" -#: src/dird/ua_update.c:810 +#: src/stored/device.c:120 #, c-format -msgid "Current RecyclePool is: %s\n" +msgid "End of medium on Volume \"%s\" Bytes=%s Blocks=%s at %s.\n" msgstr "" -#: src/dird/ua_update.c:812 -msgid "No current RecyclePool\n" +#: src/stored/device.c:146 +#, c-format +msgid "New volume \"%s\" mounted on device %s at %s.\n" msgstr "" -#: src/dird/ua_update.c:822 +#: src/stored/device.c:158 #, c-format -msgid "Current ActionOnPurge is: %s\n" +msgid "write_block_to_device Volume label failed. ERR=%s" msgstr "" -#: src/dird/ua_update.c:824 -msgid "Enter new ActionOnPurge (one of: Truncate, None): " +#: src/stored/device.c:177 +#, c-format +msgid "write_block_to_device overflow block failed. ERR=%s" msgstr "" -#: src/dird/ua_update.c:832 -msgid "Selection terminated.\n" +#: src/stored/device.c:182 +#, c-format +msgid "Catastrophic error. Cannot write overflow block to device %s. ERR=%s" msgstr "" -#: src/dird/ua_update.c:852 +#: src/stored/device.c:332 src/stored/tape_dev.c:160 #, c-format -msgid "Updating %i job(s).\n" +msgid "Unable to open device %s: ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:884 +#: src/stored/device.c:334 #, c-format -msgid "db_update_pool_record returned %d. ERR=%s\n" +msgid "Unable to open archive %s: ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:891 -msgid "Pool DB record updated from resource.\n" +#: src/stored/authenticate.c:65 +#, c-format +msgid "I only authenticate Directors, not %d\n" msgstr "" -#: src/dird/ua_update.c:918 -msgid "Expect JobId keyword, not found.\n" +#: src/stored/authenticate.c:71 +#, c-format +msgid "Bad Hello command from Director at %s. Len=%d.\n" msgstr "" -#: src/dird/ua_update.c:943 -msgid "Neither Client nor StartTime specified.\n" +#: src/stored/authenticate.c:85 src/filed/authenticate.c:76 +#, c-format +msgid "Bad Hello command from Director at %s: %s\n" msgstr "" -#: src/dird/migrate.c:149 src/dird/migrate.c:163 +#: src/stored/authenticate.c:100 #, c-format -msgid "No previous Job found to %s.\n" +msgid "" +"Connection from unknown Director %s at %s rejected.\n" +"Please see " msgstr "" -#: src/dird/migrate.c:155 -msgid "Create bootstrap file failed.\n" +#: src/stored/authenticate.c:137 +msgid "" +"Incorrect password given by Director.\n" +"Please see " msgstr "" -#: src/dird/migrate.c:165 -#, c-format -msgid "Previous Job has no data to %s.\n" +#: src/stored/authenticate.c:145 src/stored/authenticate.c:258 +#: src/stored/authenticate.c:367 src/filed/authenticate.c:139 +#: src/filed/authenticate.c:267 +msgid "" +"Authorization problem: Remote server did not advertize required TLS " +"support.\n" msgstr "" -#: src/dird/migrate.c:182 +#: src/stored/authenticate.c:163 #, c-format -msgid "Job resource not found for \"%s\".\n" +msgid "TLS negotiation failed with DIR at \"%s:%d\"\n" msgstr "" -#: src/dird/migrate.c:186 +#: src/stored/authenticate.c:199 #, c-format -msgid "Previous Job resource not found for \"%s\".\n" -msgstr "" - -#: src/dird/migrate.c:203 -msgid "setup job failed.\n" +msgid "Unable to authenticate Director at %s.\n" msgstr "" -#: src/dird/migrate.c:258 +#: src/stored/authenticate.c:249 src/stored/authenticate.c:289 #, c-format -msgid "Pool for JobId %s not in database. ERR=%s\n" +msgid "" +"Incorrect authorization key from File daemon at %s rejected.\n" +"Please see " msgstr "" -#: src/dird/migrate.c:266 +#: src/stored/authenticate.c:276 #, c-format -msgid "Pool resource \"%s\" not found.\n" +msgid "TLS negotiation failed with FD at \"%s:%d\"\n" msgstr "" -#: src/dird/migrate.c:316 src/dird/migrate.c:898 -#, c-format -msgid "Could not get job record for JobId %s to %s. ERR=%s" +#: src/stored/authenticate.c:358 src/filed/authenticate.c:258 +msgid "" +"Authorization key rejected by Storage daemon.\n" +"Please see " msgstr "" -#: src/dird/migrate.c:327 -#, c-format -msgid "JobId %s already %s probably by another Job. %s stopped.\n" +#: src/stored/authenticate.c:385 src/dird/authenticate.c:400 +#: src/filed/authenticate.c:157 src/filed/authenticate.c:285 +msgid "TLS negotiation failed.\n" msgstr "" -#: src/dird/migrate.c:337 +#: src/stored/block.c:133 #, c-format -msgid "Start %s JobId %s, Job=%s\n" +msgid "Cannot write block. Device at EOM. dev=%s\n" msgstr "" -#: src/dird/migrate.c:712 +#: src/stored/block.c:138 #, c-format -msgid "No %s SQL selection pattern specified.\n" +msgid "Attempt to write on read-only Volume. dev=%s\n" msgstr "" -#: src/dird/migrate.c:719 src/dird/migrate.c:738 src/dird/migrate.c:759 -#: src/dird/migrate.c:795 src/dird/migrate.c:822 src/dird/migrate.c:956 -#: src/dird/migrate.c:989 src/dird/migrate.c:1118 +#: src/stored/block.c:144 #, c-format -msgid "SQL failed. ERR=%s\n" +msgid "Attempt to write on closed device=%s\n" msgstr "" -#: src/dird/migrate.c:742 src/dird/migrate.c:749 src/dird/migrate.c:763 -#: src/dird/migrate.c:826 +#: src/stored/block.c:177 #, c-format -msgid "No Volumes found to %s.\n" +msgid "Unable to write EOF. ERR=%s\n" msgstr "" -#: src/dird/migrate.c:777 src/dird/migrate.c:866 src/dird/migrate.c:886 -msgid "Invalid JobId found.\n" +#: src/stored/block.c:199 src/stored/block.c:235 +msgid "Write block header zeroed.\n" msgstr "" -#: src/dird/migrate.c:837 +#: src/stored/block.c:227 #, c-format -msgid "Unknown %s Selection Type.\n" +msgid "Block checksum changed during write: before=%ud after=%ud\n" msgstr "" -#: src/dird/migrate.c:848 src/dird/migrate.c:869 src/dird/migrate.c:889 +#: src/stored/block.c:254 #, c-format -msgid "No JobIds found to %s.\n" +msgid "Write error at %u:%u on device %s. ERR=%s.\n" msgstr "" -#: src/dird/migrate.c:852 +#: src/stored/block.c:262 #, c-format -msgid "The following %u JobId%s chosen to be %s: %s\n" +msgid "End of Volume \"%s\" at %u:%u on device %s. Write of %u bytes got %d.\n" msgstr "" -#: src/dird/migrate.c:853 -msgid " was" +#: src/stored/block.c:366 +msgid "Job failed or canceled.\n" msgstr "" -#: src/dird/migrate.c:853 -msgid "s were" +#: src/stored/block.c:372 +msgid "Attempt to read past end of tape or file.\n" msgstr "" -#: src/dird/migrate.c:905 +#: src/stored/block.c:380 #, c-format -msgid "%s using JobId=%s Job=%s\n" -msgstr "" - -#: src/dird/migrate.c:939 -msgid "Could not start migration job.\n" +msgid "Attempt to read closed device: fd=%d at file:blk %u:%u on device %s\n" msgstr "" -#: src/dird/migrate.c:941 +#: src/stored/block.c:392 #, c-format -msgid "%s JobId %d started.\n" +msgid "Block buffer size looping problem on device %s\n" msgstr "" -#: src/dird/migrate.c:960 +#: src/stored/block.c:425 src/stored/block.c:439 #, c-format -msgid "No %s found to %s.\n" +msgid "The Volume=%s on device=%s appears to be unlabeled.\n" msgstr "" -#: src/dird/migrate.c:964 +#: src/stored/block.c:428 #, c-format -msgid "SQL error. Expected 1 MediaId got %d\n" +msgid "Read error on fd=%d at file:blk %u:%u on device %s. ERR=%s.\n" msgstr "" -#: src/dird/migrate.c:993 src/dird/migrate.c:1123 +#: src/stored/block.c:442 #, c-format -msgid "No %ss found to %s.\n" -msgstr "" - -#: src/dird/migrate.c:1015 -msgid "Selection Type 'pooluncopiedjobs' only applies to Copy Jobs" +msgid "Read zero bytes Vol=%s at %lld on device %s.\n" msgstr "" -#: src/dird/migrate.c:1024 +#: src/stored/block.c:471 #, c-format -msgid "SQL to get uncopied jobs failed. ERR=%s\n" +msgid "" +"Volume data error at %u:%u! Very short block of %d bytes on device %s " +"discarded.\n" msgstr "" -#: src/dird/migrate.c:1047 +#: src/stored/block.c:498 #, c-format -msgid "No %s %s selection pattern specified.\n" +msgid "Block length %u is greater than buffer %u. Attempting recovery.\n" msgstr "" -#: src/dird/migrate.c:1058 +#: src/stored/block.c:518 #, c-format -msgid "SQL to get %s failed. ERR=%s\n" +msgid "Setting block buffer size to %u bytes.\n" msgstr "" -#: src/dird/migrate.c:1063 +#: src/stored/block.c:533 #, c-format -msgid "Query of Pool \"%s\" returned no Jobs to %s.\n" +msgid "" +"Volume data error at %u:%u! Short block of %d bytes on device %s discarded.\n" msgstr "" -#: src/dird/migrate.c:1101 +#: src/stored/label.c:87 #, c-format -msgid "Regex pattern matched no Jobs to %s.\n" +msgid "Couldn't rewind %s device %s: ERR=%s\n" msgstr "" -#: src/dird/migrate.c:1265 +#: src/stored/label.c:105 src/stored/label.c:198 #, c-format -msgid "%s OK -- with warnings" +msgid "Wrong Volume mounted on %s device %s: Wanted %s have %s\n" msgstr "" -#: src/dird/migrate.c:1267 +#: src/stored/label.c:108 src/stored/label.c:186 #, c-format -msgid "%s OK" +msgid "Too many tries: %s" msgstr "" -#: src/dird/migrate.c:1272 +#: src/stored/label.c:125 #, c-format -msgid "*** %s Error ***" +msgid "" +"Requested Volume \"%s\" on %s device %s is not a Bacula labeled Volume, " +"because: ERR=%s" msgstr "" -#: src/dird/migrate.c:1282 -#, c-format -msgid "%s Canceled" +#: src/stored/label.c:130 +msgid "Could not read Volume label from block.\n" msgstr "" -#: src/dird/migrate.c:1291 +#: src/stored/label.c:133 #, c-format -msgid "Inappropriate %s term code" +msgid "Could not unserialize Volume label: ERR=%s\n" msgstr "" -#: src/dird/migrate.c:1301 +#: src/stored/label.c:138 #, c-format -msgid "%s -- no files to %s" +msgid "Volume Header Id bad: %s\n" msgstr "" -#: src/dird/migrate.c:1316 +#: src/stored/label.c:171 #, c-format -msgid "" -"%s %s %s (%s):\n" -" Build OS: %s %s %s\n" -" Prev Backup JobId: %s\n" -" Prev Backup Job: %s\n" -" New Backup JobId: %s\n" -" Current JobId: %s\n" -" Current Job: %s\n" -" Backup Level: %s%s\n" -" Client: %s\n" -" FileSet: \"%s\" %s\n" -" Read Pool: \"%s\" (From %s)\n" -" Read Storage: \"%s\" (From %s)\n" -" Write Pool: \"%s\" (From %s)\n" -" Write Storage: \"%s\" (From %s)\n" -" Catalog: \"%s\" (From %s)\n" -" Start time: %s\n" -" End time: %s\n" -" Elapsed time: %s\n" -" Priority: %d\n" -" SD Files Written: %s\n" -" SD Bytes Written: %s (%sB)\n" -" Rate: %.1f KB/s\n" -" Volume name(s): %s\n" -" Volume Session Id: %d\n" -" Volume Session Time: %d\n" -" Last Volume Bytes: %s (%sB)\n" -" SD Errors: %d\n" -" SD termination status: %s\n" -" Termination: %s\n" -"\n" +msgid "Volume on %s device %s has wrong Bacula version. Wanted %d got %d\n" msgstr "" -#: src/dird/migrate.c:1427 +#: src/stored/label.c:182 #, c-format -msgid "No Next Pool specification found in Pool \"%s\".\n" +msgid "Volume on %s device %s has bad Bacula label type: %x\n" msgstr "" -#: src/dird/migrate.c:1433 +#: src/stored/label.c:301 #, c-format -msgid "No Storage specification found in Next Pool \"%s\".\n" -msgstr "" - -#: src/dird/migrate.c:1439 -msgid "Storage from Pool's NextPool resource" +msgid "Cannot write Volume label to block for %s device %s\n" msgstr "" -#: src/dird/ua_prune.c:127 -msgid "Choose item to prune" +#: src/stored/label.c:361 src/stored/label.c:486 +#, c-format +msgid "Open %s device %s Volume \"%s\" failed: ERR=%s\n" msgstr "" -#: src/dird/ua_prune.c:175 +#: src/stored/label.c:500 #, c-format -msgid "Cannot prune Volume \"%s\" because it is archived.\n" +msgid "Rewind error on %s device %s: ERR=%s\n" msgstr "" -#: src/dird/ua_prune.c:217 -msgid "Pruned Jobs from JobHisto catalog.\n" +#: src/stored/label.c:508 +#, c-format +msgid "Truncate error on %s device %s: ERR=%s\n" msgstr "" -#: src/dird/ua_prune.c:305 -msgid "Begin pruning Files.\n" +#: src/stored/label.c:515 +#, c-format +msgid "Failed to re-open DVD after truncate on %s device %s: ERR=%s\n" msgstr "" -#: src/dird/ua_prune.c:320 -msgid "No Files found to prune.\n" +#: src/stored/label.c:560 +#, c-format +msgid "Unable to write %s device %s: ERR=%s\n" msgstr "" -#: src/dird/ua_prune.c:343 +#: src/stored/label.c:594 #, c-format -msgid "Pruned Files from %s Jobs for client %s from catalog.\n" +msgid "Recycled volume \"%s\" on %s device %s, all previous data lost.\n" msgstr "" -#: src/dird/ua_prune.c:489 +#: src/stored/label.c:597 #, c-format -msgid "Begin pruning Jobs older than %s.\n" +msgid "Wrote label to prelabeled Volume \"%s\" on %s device %s\n" msgstr "" -#: src/dird/ua_prune.c:600 +#: src/stored/label.c:806 #, c-format -msgid "Pruned %d %s for client %s from catalog.\n" +msgid "Bad Volume session label request=%d\n" msgstr "" -#: src/dird/ua_prune.c:601 -msgid "Jobs" +#: src/stored/label.c:870 +#, c-format +msgid "Expecting Volume Label, got FI=%s Stream=%s len=%d\n" msgstr "" -#: src/dird/ua_prune.c:603 -msgid "No Jobs found to prune.\n" +#: src/stored/label.c:1003 +#, c-format +msgid "Unknown %d" msgstr "" -#: src/dird/autoprune.c:75 +#: src/stored/label.c:1007 +#, c-format msgid "" -"End auto prune.\n" "\n" +"Volume Label:\n" +"Id : %sVerNo : %d\n" +"VolName : %s\n" +"PrevVolName : %s\n" +"VolFile : %d\n" +"LabelType : %s\n" +"LabelSize : %d\n" +"PoolName : %s\n" +"MediaType : %s\n" +"PoolType : %s\n" +"HostName : %s\n" msgstr "" -#: src/dird/ua_run.c:154 -msgid "OK to run? (yes/mod/no): " -msgstr "" - -#: src/dird/ua_run.c:193 -msgid "Job failed.\n" +#: src/stored/label.c:1029 +#, c-format +msgid "Date label written: %s\n" msgstr "" -#: src/dird/ua_run.c:196 +#: src/stored/label.c:1035 #, c-format -msgid "Job queued. JobId=%s\n" +msgid "Date label written: %04d-%02d-%02d at %02d:%02d\n" msgstr "" -#: src/dird/ua_run.c:203 +#: src/stored/label.c:1055 #, c-format msgid "" "\n" -"Bad response: %s. You must answer yes, mod, or no.\n" -"\n" -msgstr "" - -#: src/dird/ua_run.c:207 -msgid "Job not run.\n" +"%s Record:\n" +"JobId : %d\n" +"VerNum : %d\n" +"PoolName : %s\n" +"PoolType : %s\n" +"JobName : %s\n" +"ClientName : %s\n" msgstr "" -#: src/dird/ua_run.c:223 -msgid "Level" +#: src/stored/label.c:1068 +#, c-format +msgid "" +"Job (unique name) : %s\n" +"FileSet : %s\n" +"JobType : %c\n" +"JobLevel : %c\n" msgstr "" -#: src/dird/ua_run.c:228 -msgid "Restore Client" +#: src/stored/label.c:1077 +#, c-format +msgid "" +"JobFiles : %s\n" +"JobBytes : %s\n" +"StartBlock : %s\n" +"EndBlock : %s\n" +"StartFile : %s\n" +"EndFile : %s\n" +"JobErrors : %s\n" +"JobStatus : %c\n" msgstr "" -#: src/dird/ua_run.c:232 src/wx-console/wxbrestorepanel.cpp:356 -#: src/wx-console/wxbrestorepanel.cpp:854 -#: src/wx-console/wxbrestorepanel.cpp:1918 -msgid "When" +#: src/stored/label.c:1098 +#, c-format +msgid "Date written : %s\n" msgstr "" -#: src/dird/ua_run.c:233 src/wx-console/wxbrestorepanel.cpp:357 -#: src/wx-console/wxbrestorepanel.cpp:1128 -#: src/wx-console/wxbrestorepanel.cpp:1921 -msgid "Priority" +#: src/stored/label.c:1103 +#, c-format +msgid "Date written : %04d-%02d-%02d at %02d:%02d\n" msgstr "" -#: src/dird/ua_run.c:240 -msgid "Verify Job" +#: src/stored/label.c:1122 +msgid "Fresh Volume" msgstr "" -#: src/dird/ua_run.c:243 src/wx-console/wxbrestorepanel.cpp:349 -#: src/wx-console/wxbrestorepanel.cpp:1899 -msgid "Bootstrap" +#: src/stored/label.c:1125 +msgid "Volume" msgstr "" -#: src/dird/ua_run.c:244 src/wx-console/wxbrestorepanel.cpp:350 -#: src/wx-console/wxbrestorepanel.cpp:1104 -#: src/wx-console/wxbrestorepanel.cpp:1901 -msgid "Where" +#: src/stored/label.c:1134 src/stored/read_records.c:401 +msgid "End of Media" msgstr "" -#: src/dird/ua_run.c:245 -msgid "File Relocation" +#: src/stored/label.c:1137 +msgid "End of Tape" msgstr "" -#: src/dird/ua_run.c:246 src/wx-console/wxbrestorepanel.cpp:352 -#: src/wx-console/wxbrestorepanel.cpp:1112 -#: src/wx-console/wxbrestorepanel.cpp:1905 -#: src/wx-console/wxbrestorepanel.cpp:1906 -#: src/wx-console/wxbrestorepanel.cpp:1907 -#: src/wx-console/wxbrestorepanel.cpp:1908 -#: src/wx-console/wxbrestorepanel.cpp:1909 -msgid "Replace" +#: src/stored/label.c:1157 src/stored/label.c:1165 src/stored/label.c:1198 +#, c-format +msgid "%s Record: File:blk=%u:%u SessId=%d SessTime=%d JobId=%d DataLen=%d\n" msgstr "" -#: src/dird/ua_run.c:247 -msgid "JobId" +#: src/stored/label.c:1162 +msgid "Bacula \"End of Tape\" label found.\n" msgstr "" -#: src/dird/ua_run.c:250 -msgid "Plugin Options" +#: src/stored/label.c:1177 src/stored/label.c:1186 +#, c-format +msgid "%s Record: File:blk=%u:%u SessId=%d SessTime=%d JobId=%d\n" msgstr "" -#: src/dird/ua_run.c:261 src/dird/ua_run.c:1569 -msgid "user selection" +#: src/stored/label.c:1179 +#, c-format +msgid " Job=%s Date=%s Level=%c Type=%c\n" msgstr "" -#: src/dird/ua_run.c:293 -msgid "" -"Please enter desired start time as YYYY-MM-DD HH:MM:SS (return for now): " +#: src/stored/label.c:1188 +#, c-format +msgid " Date=%s Level=%c Type=%c Files=%s Bytes=%s Errors=%d Status=%c\n" msgstr "" -#: src/dird/ua_run.c:301 src/dird/ua_run.c:477 -msgid "Invalid time, using current time.\n" +#: src/stored/acquire.c:60 +#, c-format +msgid "Acquire read: num_writers=%d not zero. Job %d canceled.\n" msgstr "" -#: src/dird/ua_run.c:308 -msgid "Enter new Priority: " +#: src/stored/acquire.c:69 +#, c-format +msgid "No volumes specified for reading. Job %s canceled.\n" msgstr "" -#: src/dird/ua_run.c:312 -msgid "Priority must be a positive integer.\n" +#: src/stored/acquire.c:78 +#, c-format +msgid "Logic error: no next volume to read. Numvol=%d Curvol=%d\n" msgstr "" -#: src/dird/ua_run.c:333 -msgid "Please enter the Bootstrap file name: " +#: src/stored/acquire.c:85 src/stored/acquire.c:162 src/stored/acquire.c:436 +msgid "generate_plugin_event(bsdEventDeviceOpen) Failed\n" msgstr "" -#: src/dird/ua_run.c:345 +#: src/stored/acquire.c:109 #, c-format -msgid "Warning cannot open %s: ERR=%s\n" -msgstr "" - -#: src/dird/ua_run.c:364 -msgid "Please enter the full path prefix for restore (/ for none): " +msgid "" +"Changing read device. Want Media Type=\"%s\" have=\"%s\"\n" +" %s device=%s\n" msgstr "" -#: src/dird/ua_run.c:386 -msgid "Replace:\n" +#: src/stored/acquire.c:157 +#, c-format +msgid "Media Type change. New read %s device %s chosen.\n" msgstr "" -#: src/dird/ua_run.c:390 -msgid "Select replace option" +#: src/stored/acquire.c:174 +#, c-format +msgid "No suitable device found to read Volume \"%s\"\n" msgstr "" -#: src/dird/ua_run.c:401 -msgid "" -"You must set the bootstrap file to NULL to be able to specify a JobId.\n" +#: src/stored/acquire.c:213 +#, c-format +msgid "Job %s canceled.\n" msgstr "" -#: src/dird/ua_run.c:406 -msgid "Please Plugin Options string: " +#: src/stored/acquire.c:231 +#, c-format +msgid "Read open %s device %s Volume \"%s\" failed: ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:444 src/dird/ua_run.c:453 -msgid "User input" +#: src/stored/acquire.c:324 +#, c-format +msgid "Too many errors trying to mount %s device %s for reading.\n" msgstr "" -#: src/dird/ua_run.c:507 +#: src/stored/acquire.c:332 #, c-format -msgid "Invalid replace option: %s\n" +msgid "Ready to read from volume \"%s\" on %s device %s.\n" msgstr "" -#: src/dird/ua_run.c:589 +#: src/stored/acquire.c:421 #, c-format -msgid "strip_prefix=%s add_prefix=%s add_suffix=%s\n" +msgid "Could not ready %s device %s for append.\n" msgstr "" -#: src/dird/ua_run.c:592 -msgid "This will replace your current Where value\n" +#: src/stored/acquire.c:570 +#, c-format +msgid "Alert: %s" msgstr "" -#: src/dird/ua_run.c:593 -msgid "Strip prefix" +#: src/stored/acquire.c:578 +#, c-format +msgid "3997 Bad alert command: %s: ERR=%s.\n" msgstr "" -#: src/dird/ua_run.c:594 -msgid "Add prefix" +#: src/stored/bextract.c:75 +#, c-format +msgid "" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: bextract \n" +" -b specify a bootstrap file\n" +" -c specify a Storage configuration file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -e exclude list\n" +" -i include list\n" +" -p proceed inspite of I/O errors\n" +" -v verbose\n" +" -V specify Volume names (separated by |)\n" +" -? print this message\n" +"\n" msgstr "" -#: src/dird/ua_run.c:595 -msgid "Add file suffix" +#: src/stored/bextract.c:191 src/stored/bscan.c:239 src/stored/bcopy.c:151 +#: src/tools/bbatch.c:178 src/tools/bvfs_test.c:189 src/tools/cats_test.c:309 +#: src/tools/ing_test.c:173 +msgid "Wrong number of arguments: \n" msgstr "" -#: src/dird/ua_run.c:596 -msgid "Enter a regexp" +#: src/stored/bextract.c:215 +#, c-format +msgid "%d Program Name and/or Program Data Stream records ignored.\n" msgstr "" -#: src/dird/ua_run.c:597 -msgid "Test filename manipulation" +#: src/stored/bextract.c:219 +#, c-format +msgid "%d Win32 data or Win32 gzip data stream records. Ignored.\n" msgstr "" -#: src/dird/ua_run.c:598 -msgid "Use this ?" +#: src/stored/bextract.c:246 +#, c-format +msgid "Cannot stat %s. It must exist. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:603 -msgid "Please enter the path prefix to strip: " +#: src/stored/bextract.c:250 +#, c-format +msgid "%s must be a directory.\n" msgstr "" -#: src/dird/ua_run.c:611 -msgid "Please enter the path prefix to add (/ for none): " +#: src/stored/bextract.c:271 +#, c-format +msgid "%u files restored.\n" msgstr "" -#: src/dird/ua_run.c:622 -msgid "Please enter the file suffix to add: " +#: src/stored/bextract.c:281 src/stored/bextract.c:287 +#, c-format +msgid "Write error on %s: %s\n" msgstr "" -#: src/dird/ua_run.c:629 -msgid "Please enter a valid regexp (!from!to!): " +#: src/stored/bextract.c:318 src/stored/bextract.c:584 +msgid "Logic error output file should be open but is not.\n" msgstr "" -#: src/dird/ua_run.c:642 +#: src/stored/bextract.c:332 src/filed/restore.c:560 #, c-format -msgid "regexwhere=%s\n" +msgid "%s stream not supported on this Client.\n" msgstr "" -#: src/dird/ua_run.c:648 +#: src/stored/bextract.c:342 #, c-format -msgid "strip_prefix=%s add_prefix=%s add_suffix=%s result=%s\n" -msgstr "" - -#: src/dird/ua_run.c:655 -msgid "Cannot use your regexp\n" +msgid "%s was deleted.\n" msgstr "" -#: src/dird/ua_run.c:658 -msgid "Enter a period (.) to stop this test\n" +#: src/stored/bextract.c:390 +#, c-format +msgid "Seek error on %s: %s\n" msgstr "" -#: src/dird/ua_run.c:659 -msgid "Please enter filename to test: " +#: src/stored/bextract.c:426 src/stored/bextract.c:491 +#: src/filed/restore.c:1335 +#, c-format +msgid "Seek to %s error on %s: ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:661 +#: src/stored/bextract.c:445 #, c-format -msgid "%s -> %s\n" +msgid "Uncompression error. ERR=%d\n" msgstr "" -#: src/dird/ua_run.c:705 -msgid "Cannot use your regexp.\n" +#: src/stored/bextract.c:459 src/filed/restore.c:1450 +msgid "GZIP data stream found, but GZIP not configured!\n" msgstr "" -#: src/dird/ua_run.c:718 src/dird/ua_run.c:748 -msgid "Levels:\n" +#: src/stored/bextract.c:514 src/filed/restore.c:1376 +#, c-format +msgid "Compressed header version error. version=0x%x\n" msgstr "" -#: src/dird/ua_run.c:720 src/stored/status.c:665 src/lib/util.c:426 -#: src/lib/util.c:472 src/filed/status.c:519 -msgid "Full" +#: src/stored/bextract.c:519 src/filed/restore.c:1381 +#, c-format +msgid "Compressed header size error. comp_len=%d, msglen=%d\n" msgstr "" -#: src/dird/ua_run.c:721 src/stored/status.c:668 src/lib/util.c:429 -#: src/filed/status.c:522 -msgid "Incremental" +#: src/stored/bextract.c:541 +#, c-format +msgid "LZO uncompression error. ERR=%d\n" msgstr "" -#: src/dird/ua_run.c:722 src/stored/status.c:671 src/lib/util.c:432 -#: src/filed/status.c:525 -msgid "Differential" +#: src/stored/bextract.c:553 src/filed/restore.c:1414 +#, c-format +msgid "Compression algorithm 0x%x found, but not supported!\n" msgstr "" -#: src/dird/ua_run.c:723 src/stored/status.c:674 src/lib/util.c:435 -#: src/filed/status.c:528 -msgid "Since" +#: src/stored/bextract.c:575 +msgid "Got Program Name or Data Stream. Ignored.\n" msgstr "" -#: src/dird/ua_run.c:724 -msgid "VirtualFull" +#: src/stored/bextract.c:589 src/filed/restore.c:316 src/filed/restore.c:1033 +#, c-format +msgid "Unknown stream=%d ignored. This shouldn't happen!\n" msgstr "" -#: src/dird/ua_run.c:725 src/dird/ua_run.c:754 -msgid "Select level" +#: src/stored/bscan.c:108 +#, c-format +msgid "" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: bscan [ options ] \n" +" -b bootstrap specify a bootstrap file\n" +" -c specify configuration file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -m update media info in database\n" +" -D specify the driver database name (default NULL)\n" +" -n specify the database name (default bacula)\n" +" -u specify database user name (default bacula)\n" +" -P specify database password (default none)\n" +" -h specify database host (default NULL)\n" +" -t specify database port (default 0)\n" +" -p proceed inspite of I/O errors\n" +" -r list records\n" +" -s synchronize or store in database\n" +" -S show scan progress periodically\n" +" -v verbose\n" +" -V specify Volume names (separated by |)\n" +" -w specify working directory (default from conf file)\n" +" -? print this message\n" +"\n" msgstr "" -#: src/dird/ua_run.c:749 -msgid "Initialize Catalog" +#: src/stored/bscan.c:264 +#, c-format +msgid "Working Directory: %s not found. Cannot continue.\n" msgstr "" -#: src/dird/ua_run.c:750 src/stored/status.c:677 src/lib/util.c:438 -#: src/filed/status.c:531 -msgid "Verify Catalog" +#: src/stored/bscan.c:268 +#, c-format +msgid "Working Directory: %s is not a directory. Cannot continue.\n" msgstr "" -#: src/dird/ua_run.c:751 src/lib/util.c:444 -msgid "Verify Volume to Catalog" +#: src/stored/bscan.c:282 src/stored/bscan.c:358 +#, c-format +msgid "First Volume Size = %s\n" msgstr "" -#: src/dird/ua_run.c:752 src/lib/util.c:447 -msgid "Verify Disk to Catalog" +#: src/stored/bscan.c:288 src/tools/bbatch.c:189 src/tools/bbatch.c:238 +#: src/tools/bvfs_test.c:203 src/tools/ing_test.c:179 +msgid "Could not init Bacula database\n" msgstr "" -#: src/dird/ua_run.c:753 -msgid "Verify Volume Data (not yet implemented)" +#: src/stored/bscan.c:295 src/tools/bbatch.c:245 src/tools/bvfs_test.c:212 +#: src/tools/ing_test.c:188 +#, c-format +msgid "Using Database: %s, User: %s\n" msgstr "" -#: src/dird/ua_run.c:774 -msgid "Level not appropriate for this Job. Cannot be changed.\n" +#: src/stored/bscan.c:329 +#, c-format +msgid "Create JobMedia for Job %s\n" msgstr "" -#: src/dird/ua_run.c:805 +#: src/stored/bscan.c:339 #, c-format -msgid "" -"Run Admin Job\n" -"JobName: %s\n" -"FileSet: %s\n" -"Client: %s\n" -"Storage: %s\n" -"When: %s\n" -"Priority: %d\n" +msgid "Could not create JobMedia record for Volume=%s Job=%s\n" msgstr "" -#: src/dird/ua_run.c:849 +#: src/stored/bscan.c:406 #, c-format -msgid "" -"Run Backup job\n" -"JobName: %s\n" -"Level: %s\n" -"Client: %s\n" -"FileSet: %s\n" -"Pool: %s (From %s)\n" -"Storage: %s (From %s)\n" -"When: %s\n" -"Priority: %d\n" -"%s%s%s" +msgid "done: %d%%\n" msgstr "" -#: src/dird/ua_run.c:880 +#: src/stored/bscan.c:414 src/stored/bcopy.c:230 #, c-format -msgid "Could not get job record for selected JobId. ERR=%s" +msgid "Record: SessId=%u SessTim=%u FileIndex=%d Stream=%d len=%u\n" msgstr "" -#: src/dird/ua_run.c:919 +#: src/stored/bscan.c:430 +msgid "Volume is prelabeled. This tape cannot be scanned.\n" +msgstr "" + +#: src/stored/bscan.c:442 #, c-format -msgid "" -"Run Verify Job\n" -"JobName: %s\n" -"Level: %s\n" -"Client: %s\n" -"FileSet: %s\n" -"Pool: %s (From %s)\n" -"Storage: %s (From %s)\n" -"Verify Job: %s\n" -"Verify List: %s\n" -"When: %s\n" -"Priority: %d\n" +msgid "Pool record for %s found in DB.\n" msgstr "" -#: src/dird/ua_run.c:948 -msgid "Please enter a JobId for restore: " +#: src/stored/bscan.c:446 +#, c-format +msgid "VOL_LABEL: Pool record not found for Pool: %s\n" msgstr "" -#: src/dird/ua_run.c:988 +#: src/stored/bscan.c:452 #, c-format -msgid "" -"Run Restore job\n" -"JobName: %s\n" -"Bootstrap: %s\n" -"RegexWhere: %s\n" -"Replace: %s\n" -"FileSet: %s\n" -"Backup Client: %s\n" -"Restore Client: %s\n" -"Storage: %s\n" -"When: %s\n" -"Catalog: %s\n" -"Priority: %d\n" -"Plugin Options: %s\n" +msgid "VOL_LABEL: PoolType mismatch. DB=%s Vol=%s\n" msgstr "" -#: src/dird/ua_run.c:1044 +#: src/stored/bscan.c:456 #, c-format -msgid "" -"Run Restore job\n" -"JobName: %s\n" -"Bootstrap: %s\n" -"Where: %s\n" -"Replace: %s\n" -"FileSet: %s\n" -"Backup Client: %s\n" -"Restore Client: %s\n" -"Storage: %s\n" -"When: %s\n" -"Catalog: %s\n" -"Priority: %d\n" -"Plugin Options: %s\n" +msgid "Pool type \"%s\" is OK.\n" msgstr "" -#: src/dird/ua_run.c:1075 +#: src/stored/bscan.c:466 #, c-format -msgid "" -"Run Restore job\n" -"JobName: %s\n" -"Bootstrap: %s\n" +msgid "Media record for %s found in DB.\n" msgstr "" -#: src/dird/ua_run.c:1083 +#: src/stored/bscan.c:473 #, c-format -msgid "RegexWhere: %s\n" +msgid "VOL_LABEL: Media record not found for Volume: %s\n" msgstr "" -#: src/dird/ua_run.c:1086 +#: src/stored/bscan.c:480 #, c-format -msgid "Where: %s\n" +msgid "VOL_LABEL: MediaType mismatch. DB=%s Vol=%s\n" msgstr "" -#: src/dird/ua_run.c:1090 +#: src/stored/bscan.c:484 #, c-format -msgid "" -"Replace: %s\n" -"Client: %s\n" -"Storage: %s\n" -"JobId: %s\n" -"When: %s\n" -"Catalog: %s\n" -"Priority: %d\n" -"Plugin Options: %s\n" +msgid "Media type \"%s\" is OK.\n" msgstr "" -#: src/dird/ua_run.c:1145 -msgid "Run Copy job\n" +#: src/stored/bscan.c:494 +#, c-format +msgid "VOL_LABEL: OK for Volume: %s\n" msgstr "" -#: src/dird/ua_run.c:1147 -msgid "Run Migration job\n" +#: src/stored/bscan.c:501 +#, c-format +msgid "%d \"errors\" ignored before first Start of Session record.\n" msgstr "" -#: src/dird/ua_run.c:1176 +#: src/stored/bscan.c:512 #, c-format -msgid "Unknown Job Type=%d\n" +msgid "SOS_LABEL: Found Job record for JobId: %d\n" msgstr "" -#: src/dird/ua_run.c:1245 +#: src/stored/bscan.c:517 #, c-format -msgid "Value missing for keyword %s\n" +msgid "SOS_LABEL: Job record not found for JobId: %d\n" msgstr "" -#: src/dird/ua_run.c:1252 -msgid "Job name specified twice.\n" +#: src/stored/bscan.c:557 +#, c-format +msgid "SOS_LABEL: VolSessId mismatch for JobId=%u. DB=%d Vol=%d\n" msgstr "" -#: src/dird/ua_run.c:1260 -msgid "JobId specified twice.\n" +#: src/stored/bscan.c:563 +#, c-format +msgid "SOS_LABEL: VolSessTime mismatch for JobId=%u. DB=%d Vol=%d\n" msgstr "" -#: src/dird/ua_run.c:1269 src/dird/ua_run.c:1409 -msgid "Client specified twice.\n" +#: src/stored/bscan.c:569 +#, c-format +msgid "SOS_LABEL: PoolId mismatch for JobId=%u. DB=%d Vol=%d\n" msgstr "" -#: src/dird/ua_run.c:1277 -msgid "FileSet specified twice.\n" +#: src/stored/bscan.c:587 src/stored/bscan.c:1141 +#, c-format +msgid "Could not find SessId=%d SessTime=%d for EOS record.\n" msgstr "" -#: src/dird/ua_run.c:1285 -msgid "Level specified twice.\n" +#: src/stored/bscan.c:633 +#, c-format +msgid "Could not update job record. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:1294 -msgid "Storage specified twice.\n" +#: src/stored/bscan.c:644 +#, c-format +msgid "End of all Volumes. VolFiles=%u VolBlocks=%u VolBytes=%s\n" msgstr "" -#: src/dird/ua_run.c:1302 -msgid "RegexWhere or Where specified twice.\n" +#: src/stored/bscan.c:656 +#, c-format +msgid "Could not find Job for SessId=%d SessTime=%d record.\n" msgstr "" -#: src/dird/ua_run.c:1307 -msgid "No authorization for \"regexwhere\" specification.\n" +#: src/stored/bscan.c:687 +#, c-format +msgid "%s file records. At file:blk=%s:%s bytes=%s\n" msgstr "" -#: src/dird/ua_run.c:1314 -msgid "Where or RegexWhere specified twice.\n" +#: src/stored/bscan.c:752 +#, c-format +msgid "Got MD5 record: %s\n" msgstr "" -#: src/dird/ua_run.c:1319 -msgid "No authoriztion for \"where\" specification.\n" +#: src/stored/bscan.c:760 +#, c-format +msgid "Got SHA1 record: %s\n" msgstr "" -#: src/dird/ua_run.c:1326 -msgid "Bootstrap specified twice.\n" +#: src/stored/bscan.c:768 +#, c-format +msgid "Got SHA256 record: %s\n" msgstr "" -#: src/dird/ua_run.c:1334 -msgid "Replace specified twice.\n" +#: src/stored/bscan.c:776 +#, c-format +msgid "Got SHA512 record: %s\n" msgstr "" -#: src/dird/ua_run.c:1342 -msgid "When specified twice.\n" +#: src/stored/bscan.c:784 src/stored/bscan.c:791 +msgid "Got signed digest record\n" msgstr "" -#: src/dird/ua_run.c:1350 -msgid "Priority specified twice.\n" +#: src/stored/bscan.c:797 +#, c-format +msgid "Got Prog Names Stream: %s\n" msgstr "" -#: src/dird/ua_run.c:1355 -msgid "Priority must be positive nonzero setting it to 10.\n" +#: src/stored/bscan.c:803 +msgid "Got Prog Data Stream record.\n" msgstr "" -#: src/dird/ua_run.c:1365 -msgid "Verify Job specified twice.\n" +#: src/stored/bscan.c:848 +#, c-format +msgid "Unknown stream type!!! stream=%d len=%i\n" msgstr "" -#: src/dird/ua_run.c:1393 -msgid "Migration Job specified twice.\n" +#: src/stored/bscan.c:910 +#, c-format +msgid "Could not create File Attributes record. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:1401 -msgid "Pool specified twice.\n" +#: src/stored/bscan.c:916 +#, c-format +msgid "Created File record: %s\n" msgstr "" -#: src/dird/ua_run.c:1417 -msgid "Restore Client specified twice.\n" +#: src/stored/bscan.c:961 +#, c-format +msgid "Could not create media record. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:1424 -msgid "Plugin Options not yet implemented.\n" +#: src/stored/bscan.c:965 src/stored/bscan.c:986 +#, c-format +msgid "Could not update media record. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:1427 -msgid "Plugin Options specified twice.\n" +#: src/stored/bscan.c:969 +#, c-format +msgid "Created Media record for Volume: %s\n" msgstr "" -#: src/dird/ua_run.c:1432 -msgid "No authoriztion for \"PluginOptions\" specification.\n" +#: src/stored/bscan.c:990 +#, c-format +msgid "Updated Media record at end of Volume: %s\n" msgstr "" -#: src/dird/ua_run.c:1439 -msgid "Spool flag specified twice.\n" +#: src/stored/bscan.c:1007 +#, c-format +msgid "Could not create pool record. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:1446 -msgid "Invalid spooldata flag.\n" +#: src/stored/bscan.c:1011 +#, c-format +msgid "Created Pool record for Pool: %s\n" msgstr "" -#: src/dird/ua_run.c:1455 -msgid "IgnoreDuplicateCheck flag specified twice.\n" +#: src/stored/bscan.c:1030 +#, c-format +msgid "Could not get Client record. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:1462 -msgid "Invalid ignoreduplicatecheck flag.\n" +#: src/stored/bscan.c:1036 src/dird/job.c:1060 +#, c-format +msgid "Could not create Client record. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:1467 -msgid "Accurate flag specified twice.\n" +#: src/stored/bscan.c:1040 +#, c-format +msgid "Created Client record for Client: %s\n" msgstr "" -#: src/dird/ua_run.c:1474 -msgid "Invalid accurate flag.\n" +#: src/stored/bscan.c:1057 +#, c-format +msgid "Fileset \"%s\" already exists.\n" msgstr "" -#: src/dird/ua_run.c:1495 +#: src/stored/bscan.c:1061 #, c-format -msgid "Invalid keyword: %s\n" +msgid "Could not create FileSet record \"%s\". ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:1510 +#: src/stored/bscan.c:1066 #, c-format -msgid "Catalog \"%s\" not found\n" +msgid "Created FileSet record \"%s\"\n" msgstr "" -#: src/dird/ua_run.c:1514 +#: src/stored/bscan.c:1113 #, c-format -msgid "No authorization. Catalog \"%s\".\n" +msgid "Could not create JobId record. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:1525 +#: src/stored/bscan.c:1119 #, c-format -msgid "Job \"%s\" not found\n" +msgid "Could not update job start record. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:1532 -msgid "A job name must be specified.\n" +#: src/stored/bscan.c:1122 +#, c-format +msgid "Created new JobId=%u record for original JobId=%u\n" msgstr "" -#: src/dird/ua_run.c:1538 +#: src/stored/bscan.c:1175 #, c-format -msgid "No authorization. Job \"%s\".\n" +msgid "Could not update JobId=%u record. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:1546 +#: src/stored/bscan.c:1180 #, c-format -msgid "Pool \"%s\" not found.\n" +msgid "Updated Job termination record for JobId=%u Level=%s TermStat=%c\n" msgstr "" -#: src/dird/ua_run.c:1556 -#, c-format -msgid "No authorization. Pool \"%s\".\n" +#: src/stored/bscan.c:1191 src/dird/vbackup.c:386 src/dird/backup.c:774 +msgid "Backup OK" msgstr "" -#: src/dird/ua_run.c:1566 -#, c-format -msgid "Storage \"%s\" not found.\n" +#: src/stored/bscan.c:1194 src/dird/vbackup.c:384 src/dird/backup.c:772 +#: src/dird/backup.c:778 +msgid "Backup OK -- with warnings" msgstr "" -#: src/dird/ua_run.c:1575 src/dird/job.c:1245 -msgid "No storage specified.\n" +#: src/stored/bscan.c:1198 src/dird/vbackup.c:391 src/dird/backup.c:782 +msgid "*** Backup Error ***" msgstr "" -#: src/dird/ua_run.c:1578 +#: src/stored/bscan.c:1201 src/dird/vbackup.c:401 src/dird/backup.c:792 +msgid "Backup Canceled" +msgstr "" + +#: src/stored/bscan.c:1205 #, c-format -msgid "No authorization. Storage \"%s\".\n" +msgid "Job Termination code: %d" msgstr "" -#: src/dird/ua_run.c:1598 src/dird/ua_run.c:1618 +#: src/stored/bscan.c:1210 #, c-format -msgid "No authorization. Client \"%s\".\n" +msgid "" +"%s\n" +"JobId: %d\n" +"Job: %s\n" +"FileSet: %s\n" +"Backup Level: %s\n" +"Client: %s\n" +"Start time: %s\n" +"End time: %s\n" +"Files Written: %s\n" +"Bytes Written: %s\n" +"Volume Session Id: %d\n" +"Volume Session Time: %d\n" +"Last Volume Bytes: %s\n" +"Termination: %s\n" +"\n" msgstr "" -#: src/dird/ua_run.c:1608 +#: src/stored/bscan.c:1268 #, c-format -msgid "Restore Client \"%s\" not found.\n" +msgid "Could not create JobMedia record. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:1627 +#: src/stored/bscan.c:1272 #, c-format -msgid "FileSet \"%s\" not found.\n" +msgid "Created JobMedia record JobId %d, MediaId %d\n" msgstr "" -#: src/dird/ua_run.c:1636 +#: src/stored/bscan.c:1288 #, c-format -msgid "No authorization. FileSet \"%s\".\n" +msgid "Could not find SessId=%d SessTime=%d for MD5/SHA1 record.\n" msgstr "" -#: src/dird/ua_run.c:1644 +#: src/stored/bscan.c:1302 #, c-format -msgid "Verify Job \"%s\" not found.\n" +msgid "Could not add MD5/SHA1 to File record. ERR=%s\n" +msgstr "" + +#: src/stored/bscan.c:1307 +msgid "Updated MD5/SHA1 record\n" msgstr "" -#: src/dird/ua_run.c:1654 +#: src/stored/stored_conf.c:224 #, c-format -msgid "Migration Job \"%s\" not found.\n" +msgid "Expected a Device Type keyword, got: %s" msgstr "" -#: src/dird/dir_plugins.c:181 src/stored/sd_plugins.c:194 -#: src/filed/fd_plugins.c:1130 +#: src/stored/stored_conf.c:238 #, c-format -msgid "Loaded plugin: %s\n" +msgid "" +"Maximum Block Size configured value %u is greater than allowed maximum: %u" msgstr "" -#: src/dird/dir_plugins.c:201 src/stored/sd_plugins.c:214 -#: src/filed/fd_plugins.c:1151 +#: src/stored/stored_conf.c:252 #, c-format -msgid "Plugin magic wrong. Plugin=%s wanted=%s got=%s\n" +msgid "Warning: no \"%s\" resource (%d) defined.\n" msgstr "" -#: src/dird/dir_plugins.c:209 src/stored/sd_plugins.c:222 -#: src/filed/fd_plugins.c:1159 +#: src/stored/stored_conf.c:255 #, c-format -msgid "Plugin version incorrect. Plugin=%s wanted=%d got=%d\n" +msgid "dump_resource type=%d\n" msgstr "" -#: src/dird/dir_plugins.c:218 src/stored/sd_plugins.c:231 -#: src/filed/fd_plugins.c:1167 +#: src/stored/stored_conf.c:371 #, c-format -msgid "Plugin license incompatible. Plugin=%s license=%s\n" +msgid "Warning: unknown resource type %d\n" msgstr "" -#: src/dird/dir_plugins.c:226 src/stored/sd_plugins.c:239 -#: src/filed/fd_plugins.c:1175 +#: src/stored/stored_conf.c:567 #, c-format -msgid "Plugin size incorrect. Plugin=%s wanted=%d got=%d\n" +msgid "\"%s\" item is required in \"%s\" resource, but not found.\n" msgstr "" -#: src/dird/backup.c:96 -msgid "No Storage specification found in Job or Pool.\n" +#: src/stored/stored_conf.c:573 +#, c-format +msgid "Too many items in \"%s\" resource\n" msgstr "" -#: src/dird/backup.c:256 +#: src/stored/stored_conf.c:594 src/dird/dird_conf.c:1488 +#: src/filed/filed_conf.c:459 #, c-format -msgid "Using BaseJobId(s): %s\n" +msgid "Cannot find Director resource %s\n" msgstr "" -#: src/dird/backup.c:266 -msgid "Cannot find previous jobids.\n" +#: src/stored/stored_conf.c:600 src/dird/dird_conf.c:1495 +#, c-format +msgid "Cannot find Storage resource %s\n" msgstr "" -#: src/dird/backup.c:275 -msgid "Sending Accurate information.\n" +#: src/stored/stored_conf.c:607 +#, c-format +msgid "Cannot find AutoChanger resource %s\n" msgstr "" -#: src/dird/backup.c:328 +#: src/stored/stored_conf.c:623 #, c-format -msgid "Start Backup JobId %s, Job=%s\n" +msgid "Unable to init lock: ERR=%s\n" msgstr "" -#: src/dird/backup.c:521 +#: src/stored/stored_conf.c:681 #, c-format -msgid "Unexpected Client Job message: %s\n" +msgid "" +"Attempt to define second \"%s\" resource named \"%s\" is not permitted.\n" msgstr "" -#: src/dird/backup.c:534 +#: src/stored/dircmd.c:157 #, c-format -msgid "Network error with FD during %s: ERR=%s\n" +msgid "Connection request from %s failed.\n" msgstr "" -#: src/dird/backup.c:569 -msgid "No Job status returned from FD.\n" +#: src/stored/dircmd.c:168 +#, c-format +msgid "Invalid connection from %s. Len=%d\n" msgstr "" -#: src/dird/backup.c:657 -msgid "Backup failed -- incomplete" +#: src/stored/dircmd.c:215 src/filed/authenticate.c:196 +msgid "Unable to authenticate Director\n" msgstr "" -#: src/dird/backup.c:730 +#: src/stored/dircmd.c:308 #, c-format -msgid "" -"%s %s %s (%s):\n" -" Build OS: %s %s %s\n" -" JobId: %d\n" -" Job: %s\n" -" Backup Level: %s%s\n" -" Client: \"%s\" %s\n" -" FileSet: \"%s\" %s\n" -" Pool: \"%s\" (From %s)\n" -" Catalog: \"%s\" (From %s)\n" -" Storage: \"%s\" (From %s)\n" -" Scheduled time: %s\n" -" Start time: %s\n" -" End time: %s\n" -" Elapsed time: %s\n" -" Priority: %d\n" -" FD Files Written: %s\n" -" SD Files Written: %s\n" -" FD Bytes Written: %s (%sB)\n" -" SD Bytes Written: %s (%sB)\n" -" Rate: %.1f KB/s\n" -" Software Compression: %s\n" -"%s VSS: %s\n" -" Encryption: %s\n" -" Accurate: %s\n" -" Volume name(s): %s\n" -" Volume Session Id: %d\n" -" Volume Session Time: %d\n" -" Last Volume Bytes: %s (%sB)\n" -" Non-fatal FD errors: %d\n" -" SD Errors: %d\n" -" FD termination status: %s\n" -" SD termination status: %s\n" -" Termination: %s\n" -"\n" +msgid "Bad client command: %s" msgstr "" -#: src/dird/backup.c:832 -#, c-format -msgid "Could not get Job Volume Parameters to update Bootstrap file. ERR=%s\n" +#: src/stored/dircmd.c:318 +msgid "Client daemon" msgstr "" -#: src/dird/backup.c:868 +#: src/stored/dircmd.c:321 #, c-format -msgid "" -"Could not open WriteBootstrap file:\n" -"%s: ERR=%s\n" +msgid "Failed to connect to Client daemon: %s:%d\n" msgstr "" -#: src/dird/restore.c:137 src/dird/msgchan.c:476 +#: src/stored/dircmd.c:358 src/filed/job.c:1855 #, c-format -msgid "Could not open bootstrap file %s: ERR=%s\n" +msgid "Bad storage command: %s" msgstr "" -#: src/dird/restore.c:185 src/dird/restore.c:276 -#, c-format -msgid "Could not get storage resource '%s'.\n" +#: src/stored/dircmd.c:377 src/dird/msgchan.c:121 src/filed/job.c:1880 +#: src/qt-console/tray-monitor/tray-monitor.cpp:363 +msgid "Storage daemon" msgstr "" -#: src/dird/restore.c:314 +#: src/stored/dircmd.c:380 src/filed/job.c:1883 #, c-format -msgid "Could not acquire read storage lock for \"%s\"" +msgid "Failed to connect to Storage daemon: %s:%d\n" msgstr "" -#: src/dird/restore.c:505 -msgid "" -"Cannot restore without a bootstrap file.\n" -"You probably ran a restore job directly. All restore jobs must\n" -"be run using the restore command.\n" +#: src/stored/dircmd.c:397 +msgid "In storage_cmd port==0, no prior Storage connection.\n" msgstr "" -#: src/dird/restore.c:513 +#: src/stored/dircmd.c:445 #, c-format -msgid "Start Restore Job %s\n" +msgid "3991 Bad setdebug command: %s\n" msgstr "" -#: src/dird/restore.c:564 -msgid "Restore OK -- warning file count mismatch" +#: src/stored/dircmd.c:479 +msgid "3903 Error scanning cancel command.\n" msgstr "" -#: src/dird/restore.c:566 -msgid "Restore OK" +#: src/stored/dircmd.c:483 +#, c-format +msgid "3904 Job %s not found.\n" msgstr "" -#: src/dird/restore.c:570 -msgid "Restore OK -- with warnings" +#: src/stored/dircmd.c:511 +#, c-format +msgid "3000 JobId=%ld Job=\"%s\" marked to be %s.\n" msgstr "" -#: src/dird/restore.c:574 -msgid "*** Restore Error ***" +#: src/stored/dircmd.c:590 src/stored/dircmd.c:971 src/stored/dircmd.c:1066 +#: src/stored/dircmd.c:1177 src/stored/dircmd.c:1299 src/stored/dircmd.c:1341 +#, c-format +msgid "3999 Device \"%s\" not found or could not be opened.\n" msgstr "" -#: src/dird/restore.c:584 -msgid "Restore Canceled" +#: src/stored/dircmd.c:595 +#, c-format +msgid "3903 Error scanning label command: %s\n" msgstr "" -#: src/dird/restore.c:611 +#: src/stored/dircmd.c:644 #, c-format -msgid "" -"%s %s %s (%s):\n" -" Build OS: %s %s %s\n" -" JobId: %d\n" -" Job: %s\n" -" Restore Client: %s\n" -" Start time: %s\n" -" End time: %s\n" -" Files Expected: %s\n" -" Files Restored: %s\n" -" Bytes Restored: %s\n" -" Rate: %.1f KB/s\n" -" FD Errors: %d\n" -" FD termination status: %s\n" -" SD termination status: %s\n" -" Termination: %s\n" -"\n" +msgid "3910 Unable to open device \"%s\": ERR=%s\n" msgstr "" -#: src/dird/ua_status.c:174 -msgid "Status available for:\n" +#: src/stored/dircmd.c:661 +#, c-format +msgid "3920 Cannot label Volume because it is already labeled: \"%s\"\n" msgstr "" -#: src/dird/ua_status.c:180 -msgid "Select daemon type for status" +#: src/stored/dircmd.c:668 +msgid "3921 Wrong volume mounted.\n" msgstr "" -#: src/dird/ua_status.c:294 src/stored/status.c:248 +#: src/stored/dircmd.c:672 +msgid "3922 Cannot relabel an ANSI/IBM labeled Volume.\n" +msgstr "" + +#: src/stored/dircmd.c:680 #, c-format -msgid "%s Version: %s (%s) %s %s %s\n" +msgid "3912 Failed to label Volume: ERR=%s\n" msgstr "" -#: src/dird/ua_status.c:297 +#: src/stored/dircmd.c:690 #, c-format -msgid "Daemon started %s. Jobs: run=%d, running=%d mode=%d,%d\n" +msgid "3915 Failed to label Volume: ERR=%s\n" msgstr "" -#: src/dird/ua_status.c:300 src/stored/status.c:258 src/filed/status.c:142 +#: src/stored/dircmd.c:693 #, c-format -msgid " Heap: heap=%s smbytes=%s max_bytes=%s bufs=%s max_bufs=%s\n" +msgid "3914 Failed to label Volume (no media): ERR=%s\n" msgstr "" -#: src/dird/ua_status.c:358 +#: src/stored/dircmd.c:696 #, c-format -msgid "" -"\n" -"Failed to connect to Storage daemon %s.\n" -"====\n" +msgid "3913 Cannot label Volume. Unknown status %d from read_volume_label()\n" msgstr "" -#: src/dird/ua_status.c:400 +#: src/stored/dircmd.c:733 #, c-format -msgid "" -"Failed to connect to Client %s.\n" -"====\n" +msgid "3001 Mounted Volume: %s\n" msgstr "" -#: src/dird/ua_status.c:408 -msgid "Connected to file daemon\n" +#: src/stored/dircmd.c:737 src/stored/dircmd.c:1377 +#, c-format +msgid "" +"3902 Cannot mount Volume on Storage Device \"%s\" because:\n" +"%s" msgstr "" -#: src/dird/ua_status.c:428 +#: src/stored/dircmd.c:768 src/stored/reserve.c:646 +#, c-format msgid "" "\n" -"Scheduled Jobs:\n" +" Device \"%s\" requested by DIR could not be opened or does not exist.\n" msgstr "" -#: src/dird/ua_status.c:429 +#: src/stored/dircmd.c:790 src/stored/reserve.c:642 +#, c-format msgid "" -"Level Type Pri Scheduled Name Volume\n" +"\n" +" Device \"%s\" in changer \"%s\" requested by DIR could not be opened or " +"does not exist.\n" msgstr "" -#: src/dird/ua_status.c:430 -msgid "===================================================================================\n" +#: src/stored/dircmd.c:854 +msgid "Specified slot ignored. " msgstr "" -#: src/dird/ua_status.c:486 +#: src/stored/dircmd.c:871 src/stored/dircmd.c:929 #, c-format -msgid "%-14s\t%-8s\t%3d\t%-18s\t%-18s\t%s\n" +msgid "3901 Unable to open device \"%s\": ERR=%s\n" msgstr "" -#: src/dird/ua_status.c:490 +#: src/stored/dircmd.c:891 src/stored/dircmd.c:920 #, c-format -msgid "%-14s %-8s %3d %-18s %-18s %s\n" +msgid "3001 Device \"%s\" is mounted with Volume \"%s\"\n" msgstr "" -#: src/dird/ua_status.c:544 -msgid "Ignoring invalid value for days. Max is 500.\n" +#: src/stored/dircmd.c:894 src/stored/dircmd.c:923 src/stored/dircmd.c:938 +#, c-format +msgid "" +"3905 Device \"%s\" open but no Bacula volume is mounted.\n" +"If this is not a blank tape, try unmounting and remounting the Volume.\n" msgstr "" -#: src/dird/ua_status.c:587 -msgid "No Scheduled Jobs.\n" +#: src/stored/dircmd.c:904 +#, c-format +msgid "3001 Device \"%s\" is doing acquire.\n" msgstr "" -#: src/dird/ua_status.c:604 src/stored/status.c:450 src/filed/status.c:183 -msgid "" -"\n" -"Running Jobs:\n" +#: src/stored/dircmd.c:909 src/stored/dircmd.c:1037 +#, c-format +msgid "3903 Device \"%s\" is being labeled.\n" msgstr "" -#: src/dird/ua_status.c:612 +#: src/stored/dircmd.c:935 #, c-format -msgid "Console connected at %s\n" +msgid "3001 Device \"%s\" is already mounted with Volume \"%s\"\n" msgstr "" -#: src/dird/ua_status.c:622 -msgid "" -"No Jobs running.\n" -"====\n" +#: src/stored/dircmd.c:947 +#, c-format +msgid "3002 Device \"%s\" is mounted.\n" msgstr "" -#: src/dird/ua_status.c:628 -msgid " JobId Level Name Status\n" +#: src/stored/dircmd.c:949 src/stored/dircmd.c:1006 src/stored/dircmd.c:1025 +#: src/stored/dircmd.c:1057 +#, c-format +msgid "3907 %s" msgstr "" -#: src/dird/ua_status.c:629 src/filed/status.c:342 -msgid "======================================================================\n" +#: src/stored/dircmd.c:952 +#, c-format +msgid "3906 File device \"%s\" is always mounted.\n" msgstr "" -#: src/dird/ua_status.c:638 -msgid "is waiting execution" +#: src/stored/dircmd.c:961 +#, c-format +msgid "3930 Device \"%s\" is being released.\n" msgstr "" -#: src/dird/ua_status.c:641 -msgid "is running" +#: src/stored/dircmd.c:965 +#, c-format +msgid "3905 Unknown wait state %d\n" msgstr "" -#: src/dird/ua_status.c:644 -msgid "is blocked" +#: src/stored/dircmd.c:975 +#, c-format +msgid "3909 Error scanning mount command: %s\n" msgstr "" -#: src/dird/ua_status.c:647 -msgid "has terminated" +#: src/stored/dircmd.c:1003 src/stored/dircmd.c:1059 +#, c-format +msgid "3002 Device \"%s\" unmounted.\n" msgstr "" -#: src/dird/ua_status.c:650 -msgid "has terminated with warnings" +#: src/stored/dircmd.c:1010 +#, c-format +msgid "3901 Device \"%s\" is already unmounted.\n" msgstr "" -#: src/dird/ua_status.c:653 -msgid "has erred" +#: src/stored/dircmd.c:1028 +#, c-format +msgid "3001 Device \"%s\" unmounted.\n" msgstr "" -#: src/dird/ua_status.c:656 -msgid "has errors" +#: src/stored/dircmd.c:1033 +#, c-format +msgid "3902 Device \"%s\" is busy in acquire.\n" msgstr "" -#: src/dird/ua_status.c:659 -msgid "has a fatal error" +#: src/stored/dircmd.c:1071 +#, c-format +msgid "3907 Error scanning unmount command: %s\n" msgstr "" -#: src/dird/ua_status.c:662 -msgid "has verify differences" +#: src/stored/dircmd.c:1099 +msgid "3916 Error scanning action_on_purge command\n" msgstr "" -#: src/dird/ua_status.c:665 -msgid "has been canceled" +#: src/stored/dircmd.c:1142 +#, c-format +msgid "3921 Device \"%s\" already released.\n" msgstr "" -#: src/dird/ua_status.c:670 -msgid "is waiting on Client" +#: src/stored/dircmd.c:1149 +#, c-format +msgid "3922 Device \"%s\" waiting for sysop.\n" msgstr "" -#: src/dird/ua_status.c:672 +#: src/stored/dircmd.c:1155 #, c-format -msgid "is waiting on Client %s" +msgid "3922 Device \"%s\" waiting for mount.\n" msgstr "" -#: src/dird/ua_status.c:680 src/dird/ua_status.c:682 +#: src/stored/dircmd.c:1159 #, c-format -msgid "is waiting on Storage \"%s\"" +msgid "3923 Device \"%s\" is busy in acquire.\n" msgstr "" -#: src/dird/ua_status.c:684 -msgid "is waiting on Storage" +#: src/stored/dircmd.c:1163 +#, c-format +msgid "3914 Device \"%s\" is being labeled.\n" msgstr "" -#: src/dird/ua_status.c:690 -msgid "is waiting on max Storage jobs" +#: src/stored/dircmd.c:1171 +#, c-format +msgid "3022 Device \"%s\" released.\n" msgstr "" -#: src/dird/ua_status.c:693 -msgid "is waiting on max Client jobs" +#: src/stored/dircmd.c:1182 +#, c-format +msgid "3927 Error scanning release command: %s\n" msgstr "" -#: src/dird/ua_status.c:696 -msgid "is waiting on max Job jobs" +#: src/stored/dircmd.c:1211 +#, c-format +msgid "Could not create bootstrap file %s: ERR=%s\n" msgstr "" -#: src/dird/ua_status.c:699 -msgid "is waiting on max total jobs" +#: src/stored/dircmd.c:1224 +msgid "Error parsing bootstrap file.\n" msgstr "" -#: src/dird/ua_status.c:702 -msgid "is waiting for its start time" +#: src/stored/dircmd.c:1286 +#, c-format +msgid "3998 Device \"%s\" is not an autochanger.\n" msgstr "" -#: src/dird/ua_status.c:705 -msgid "is waiting for higher priority jobs to finish" +#: src/stored/dircmd.c:1303 +#, c-format +msgid "3908 Error scanning autochanger drives/list/slots command: %s\n" msgstr "" -#: src/dird/ua_status.c:708 src/dird/ua_status.c:759 src/lib/util.c:241 -msgid "SD committing Data" +#: src/stored/dircmd.c:1345 +#, c-format +msgid "3909 Error scanning readlabel command: %s\n" msgstr "" -#: src/dird/ua_status.c:711 src/dird/ua_status.c:762 src/lib/util.c:244 -msgid "SD despooling Data" +#: src/stored/dircmd.c:1373 +#, c-format +msgid "3001 Volume=%s Slot=%d\n" msgstr "" -#: src/dird/ua_status.c:714 src/dird/ua_status.c:765 src/lib/util.c:247 -msgid "SD despooling Attributes" +#: src/stored/dircmd.c:1405 +#, c-format +msgid "3931 Device \"%s\" is BLOCKED. user unmounted.\n" msgstr "" -#: src/dird/ua_status.c:717 src/dird/ua_status.c:768 src/lib/util.c:250 -msgid "Dir inserting Attributes" +#: src/stored/dircmd.c:1409 +#, c-format +msgid "" +"3932 Device \"%s\" is BLOCKED. user unmounted during wait for media/mount.\n" msgstr "" -#: src/dird/ua_status.c:722 +#: src/stored/dircmd.c:1413 #, c-format -msgid "is in unknown state %c" +msgid "3933 Device \"%s\" is BLOCKED waiting for media.\n" msgstr "" -#: src/dird/ua_status.c:736 -msgid "is waiting for a mount request" +#: src/stored/dircmd.c:1417 +#, c-format +msgid "3934 Device \"%s\" is being initialized.\n" msgstr "" -#: src/dird/ua_status.c:743 -msgid "is waiting for an appendable Volume" +#: src/stored/dircmd.c:1421 +#, c-format +msgid "3935 Device \"%s\" is blocked labeling a Volume.\n" msgstr "" -#: src/dird/ua_status.c:751 -msgid "is waiting for Client to connect to Storage daemon" +#: src/stored/dircmd.c:1425 +#, c-format +msgid "3935 Device \"%s\" is blocked for unknown reason.\n" msgstr "" -#: src/dird/ua_status.c:753 +#: src/stored/dircmd.c:1430 #, c-format -msgid "is waiting for Client %s to connect to Storage %s" +msgid "3936 Device \"%s\" is busy reading.\n" msgstr "" -#: src/dird/ua_status.c:784 +#: src/stored/dircmd.c:1433 #, c-format -msgid "%6d\t%-6s\t%-20s\t%s\t%s\n" +msgid "3937 Device \"%s\" is busy with writers=%d reserved=%d.\n" msgstr "" -#: src/dird/ua_status.c:788 +#: src/stored/dev.c:129 #, c-format -msgid "%6d %-6s %-20s %s\n" +msgid "Unable to stat device %s: ERR=%s\n" msgstr "" -#: src/dird/ua_status.c:792 +#: src/stored/dev.c:147 #, c-format -msgid " %-30s\n" +msgid "" +"%s is an unknown device type. Must be tape or directory\n" +" or have RequiresMount=yes for DVD. st_mode=%x\n" msgstr "" -#: src/dird/ua_status.c:812 -msgid "No Terminated Jobs.\n" +#: src/stored/dev.c:157 +msgid "DVD support is now deprecated.\n" msgstr "" -#: src/dird/ua_status.c:818 src/stored/status.c:572 src/filed/status.c:330 -msgid "" -"\n" -"Terminated Jobs:\n" +#: src/stored/dev.c:160 +msgid "Aligned device not supported. Please use \"DeviceType = File\"\n" msgstr "" -#: src/dird/ua_status.c:819 src/stored/status.c:579 src/filed/status.c:340 -msgid " JobId Level Files Bytes Status Finished Name \n" +#: src/stored/dev.c:256 +#, c-format +msgid "Unable to stat mount point %s: ERR=%s\n" msgstr "" -#: src/dird/ua_status.c:820 -msgid "====================================================================\n" +#: src/stored/dev.c:261 +msgid "" +"Mount and unmount commands must defined for a device which requires mount.\n" msgstr "" -#: src/dird/ua_status.c:852 src/stored/status.c:601 src/lib/util.c:180 -#: src/filed/status.c:363 -msgid "Created" +#: src/stored/dev.c:272 +#, c-format +msgid "Min block size > max on device %s\n" msgstr "" -#: src/dird/ua_status.c:856 src/stored/status.c:605 src/lib/util.c:196 -#: src/lib/util.c:331 src/lib/util.c:478 src/filed/status.c:367 -msgid "Error" +#: src/stored/dev.c:276 +#, c-format +msgid "Block size %u on device %s is too large, using default %u\n" msgstr "" -#: src/dird/ua_status.c:859 src/stored/status.c:608 src/filed/status.c:370 -msgid "Diffs" +#: src/stored/dev.c:281 +#, c-format +msgid "Max block size %u not multiple of device %s block size=%d.\n" msgstr "" -#: src/dird/ua_status.c:865 src/stored/status.c:614 src/stored/btape.c:1523 -#: src/lib/util.c:189 src/lib/util.c:324 src/filed/status.c:376 -#: src/wx-console/wxbconfigpanel.cpp:209 -msgid "OK" +#: src/stored/dev.c:285 +#, c-format +msgid "Max Vol Size < 8 * Max Block Size for device %s\n" msgstr "" -#: src/dird/ua_status.c:868 src/stored/status.c:617 src/lib/util.c:202 -#: src/lib/util.c:327 -msgid "OK -- with warnings" +#: src/stored/dev.c:295 src/stored/dev.c:347 src/lib/openssl.c:110 +#: src/lib/openssl.c:169 +#, c-format +msgid "Unable to init mutex: ERR=%s\n" msgstr "" -#: src/dird/ua_status.c:871 src/stored/status.c:620 src/filed/status.c:379 -msgid "Other" +#: src/stored/dev.c:301 src/stored/dev.c:307 +#, c-format +msgid "Unable to init cond variable: ERR=%s\n" msgstr "" -#: src/dird/ua_status.c:875 src/stored/status.c:632 src/filed/status.c:391 +#: src/stored/dev.c:313 #, c-format -msgid "%6d\t%-6s\t%8s\t%10s\t%-7s\t%-8s\t%s\n" +msgid "Unable to init spool mutex: ERR=%s\n" msgstr "" -#: src/dird/ua_status.c:883 src/stored/status.c:640 src/filed/status.c:399 +#: src/stored/dev.c:319 #, c-format -msgid "%6d %-6s %8s %10s %-7s %-8s %s\n" +msgid "Unable to init acquire mutex: ERR=%s\n" msgstr "" -#: src/dird/ua_status.c:892 -msgid "\n" +#: src/stored/dev.c:325 +#, c-format +msgid "Unable to init read acquire mutex: ERR=%s\n" msgstr "" -#: src/dird/ua_input.c:103 -msgid "Enter slot" +#: src/stored/dev.c:331 +#, c-format +msgid "Unable to init volcat mutex: ERR=%s\n" msgstr "" -#: src/dird/ua_input.c:107 src/dird/ua_input.c:113 +#: src/stored/dev.c:337 #, c-format -msgid "Expected a positive integer, got: %s\n" +msgid "Unable to init dcrs mutex: ERR=%s\n" msgstr "" -#: src/dird/ua_input.c:170 -msgid "Invalid response. You must answer yes or no.\n" +#: src/stored/dev.c:426 +msgid "Illegal mode given to open dev.\n" msgstr "" -#: src/dird/ua_input.c:193 -msgid "Invalid Enabled value, it must be yes, no, archived, 0, 1, or 2\n" +#: src/stored/dev.c:478 +msgid "Bad device call. Device not open\n" msgstr "" -#: src/dird/ua_input.c:220 +#: src/stored/dev.c:490 #, c-format -msgid "Illegal character \"%c\" in a comment.\n" +msgid "Seek error: ERR=%s\n" msgstr "" -#: src/dird/ua_input.c:227 -msgid "Comment too long.\n" +#: src/stored/dev.c:491 src/stored/tape_dev.c:293 src/stored/file_dev.c:73 +#: src/stored/file_dev.c:100 +#, c-format +msgid "lseek error on %s. ERR=%s.\n" msgstr "" -#: src/dird/ua_input.c:233 -msgid "Comment must be at least one character long.\n" +#: src/stored/fd_cmds.c:193 +#, c-format +msgid "Command error with FD, hanging up. ERR=%s\n" msgstr "" -#: src/dird/pythondir.c:121 src/stored/pythonsd.c:101 -#: src/stored/pythonsd.c:166 src/filed/pythonfd.c:94 src/filed/pythonfd.c:148 -#: src/filed/pythonfd.c:212 -msgid "Job pointer not found." +#: src/stored/fd_cmds.c:196 +msgid "Command error with FD, hanging up.\n" msgstr "" -#: src/dird/pythondir.c:153 -msgid "Pool record not found." +#: src/stored/fd_cmds.c:207 +#, c-format +msgid "FD command not found: %s\n" msgstr "" -#: src/dird/pythondir.c:209 src/stored/pythonsd.c:143 src/filed/pythonfd.c:125 -#, c-format -msgid "Attribute %s not found." +#: src/stored/fd_cmds.c:238 +msgid "Attempt to append on non-open session.\n" msgstr "" -#: src/dird/pythondir.c:252 src/dird/pythondir.c:258 src/stored/pythonsd.c:183 -#: src/filed/pythonfd.c:167 -msgid "Read-only attribute" +#: src/stored/fd_cmds.c:250 src/stored/fd_cmds.c:293 +msgid "Attempt to close non-open session.\n" msgstr "" -#: src/dird/pythondir.c:284 -msgid "Priority must be 1-100" +#: src/stored/fd_cmds.c:268 +msgid "Attempt to open already open session.\n" msgstr "" -#: src/dird/pythondir.c:289 -msgid "Job Level can be set only during JobInit" +#: src/stored/fd_cmds.c:322 +msgid "Attempt to read on non-open session.\n" msgstr "" -#: src/dird/pythondir.c:303 -msgid "Bad JobLevel string" +#: src/stored/fd_cmds.c:340 src/stored/fd_cmds.c:349 +msgid "Attempt to open read on non-open session.\n" msgstr "" -#: src/dird/job.c:62 +#: src/stored/fd_cmds.c:412 src/dird/getmsg.c:365 #, c-format -msgid "Could not init job queue: ERR=%s\n" +msgid "Bad response to %s command: wanted %s, got %s\n" msgstr "" -#: src/dird/job.c:94 +#: src/stored/fd_cmds.c:416 src/dird/getmsg.c:370 #, c-format -msgid "Could not add job queue: ERR=%s\n" +msgid "Socket error on %s command: ERR=%s\n" msgstr "" -#: src/dird/job.c:183 src/dird/job.c:433 src/dird/job.c:435 src/dird/job.c:485 -#: src/dird/job.c:487 src/dird/job.c:1129 src/dird/job.c:1170 -#: src/dird/job.c:1179 -msgid "Job resource" +#: src/stored/block_util.c:88 +#, c-format +msgid "" +"Dump block %s %p: size=%d BlkNum=%d\n" +" Hdrcksum=%x cksum=%x\n" msgstr "" -#: src/dird/job.c:230 src/dird/job.c:349 +#: src/stored/block_util.c:103 #, c-format -msgid "Unimplemented job type: %d\n" +msgid " Rec: VId=%u VT=%u FI=%s Strm=%s len=%d reclen=%d\n" msgstr "" -#: src/dird/job.c:272 -msgid "Job canceled because max start delay time exceeded.\n" +#: src/stored/block_util.c:165 +#, c-format +msgid "%d block read errors not printed.\n" msgstr "" -#: src/dird/job.c:277 -msgid "Job canceled because max run sched time exceeded.\n" +#: src/stored/block_util.c:281 src/stored/block_util.c:297 +#: src/stored/block_util.c:307 +#, c-format +msgid "" +"Volume data error at %u:%u! Wanted ID: \"%s\", got \"%s\". Buffer " +"discarded.\n" msgstr "" -#: src/dird/job.c:403 +#: src/stored/block_util.c:322 #, c-format -msgid "JobId %s, Job %s marked to be canceled.\n" +msgid "" +"Volume data error at %u:%u! Block length %u is insane (too large), probably " +"due to a bad archive.\n" msgstr "" -#: src/dird/job.c:413 -msgid "Failed to connect to File daemon.\n" +#: src/stored/block_util.c:349 +#, c-format +msgid "" +"Volume data error at %u:%u!\n" +"Block checksum mismatch in block=%u len=%d: calc=%x blk=%x\n" msgstr "" -#: src/dird/job.c:548 -msgid "Max wait time exceeded. Job canceled.\n" +#: src/stored/block_util.c:435 +#, c-format +msgid "" +"User defined maximum volume size %s will be exceeded on device %s.\n" +" Marking Volume \"%s\" as Full.\n" msgstr "" -#: src/dird/job.c:553 -msgid "Max run time exceeded. Job canceled.\n" +#: src/stored/block_util.c:472 src/stored/block_util.c:478 +#, c-format +msgid "Backspace file at EOT failed. ERR=%s\n" msgstr "" -#: src/dird/job.c:558 -msgid "Max run sched time exceeded. Job canceled.\n" +#: src/stored/block_util.c:485 +#, c-format +msgid "Backspace record at EOT failed. ERR=%s\n" msgstr "" -#: src/dird/job.c:680 +#: src/stored/block_util.c:502 #, c-format -msgid "Pool \"%s\" not in database. ERR=%s" +msgid "Re-read last block at EOT failed. ERR=%s" msgstr "" -#: src/dird/job.c:684 +#: src/stored/block_util.c:512 #, c-format -msgid "Created database record for Pool \"%s\".\n" +msgid "" +"Re-read of last block: block numbers differ by more than one.\n" +"Probable tape misconfiguration and data loss. Read block=%u Want block=%u.\n" msgstr "" -#: src/dird/job.c:766 src/dird/job.c:809 +#: src/stored/block_util.c:517 #, c-format -msgid "JobId %d already running. Duplicate job not allowed.\n" +msgid "" +"Re-read of last block OK, but block numbers differ. Read block=%u Want block=" +"%u.\n" msgstr "" -#: src/dird/job.c:797 +#: src/stored/block_util.c:521 +msgid "Re-read of last block succeeded.\n" +msgstr "" + +#: src/stored/block_util.c:560 #, c-format -msgid "Cancelling duplicate JobId=%d.\n" +msgid "" +"Error writing final EOF to tape. This Volume may not be readable.\n" +"%s" msgstr "" -#: src/dird/job.c:828 src/dird/job.c:1116 -msgid "Run pool override" +#: src/stored/block_util.c:578 +msgid "Error sending Volume info to Director.\n" msgstr "" -#: src/dird/job.c:839 -msgid "Run FullPool override" +#: src/stored/bcopy.c:64 +#, c-format +msgid "" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: bcopy [-d debug_level] \n" +" -b bootstrap specify a bootstrap file\n" +" -c specify a Storage configuration file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -i specify input Volume names (separated by |)\n" +" -o specify output Volume names (separated by |)\n" +" -p proceed inspite of errors\n" +" -v verbose\n" +" -w specify working directory (default /tmp)\n" +" -? print this message\n" +"\n" msgstr "" -#: src/dird/job.c:841 -msgid "Job FullPool override" +#: src/stored/bcopy.c:209 +msgid "Write of last block failed.\n" msgstr "" -#: src/dird/job.c:850 -msgid "Run IncPool override" +#: src/stored/bcopy.c:213 +#, c-format +msgid "%u Jobs copied. %u records copied.\n" msgstr "" -#: src/dird/job.c:852 -msgid "Job IncPool override" +#: src/stored/bcopy.c:246 +msgid "Volume is prelabeled. This volume cannot be copied.\n" msgstr "" -#: src/dird/job.c:861 -msgid "Run DiffPool override" +#: src/stored/bcopy.c:249 +msgid "Volume label not copied.\n" msgstr "" -#: src/dird/job.c:863 -msgid "Job DiffPool override" +#: src/stored/bcopy.c:255 +msgid "Copy skipped. Record does not match BSR filter.\n" msgstr "" -#: src/dird/job.c:893 src/stored/bscan.c:1056 -#, c-format -msgid "Could not create Client record. ERR=%s\n" +#: src/stored/bcopy.c:286 +msgid "EOM label not copied.\n" msgstr "" -#: src/dird/job.c:929 -msgid "FileSet MD5 digest not found.\n" +#: src/stored/bcopy.c:289 +msgid "EOT label not copied.\n" msgstr "" -#: src/dird/job.c:934 +#: src/stored/tape_dev.c:226 #, c-format -msgid "Could not create FileSet \"%s\" record. ERR=%s\n" +msgid "No tape loaded or drive offline on %s.\n" msgstr "" -#: src/dird/job.c:976 +#: src/stored/tape_dev.c:236 #, c-format -msgid "Error updating job record. %s" -msgstr "" - -#: src/dird/job.c:1121 -msgid "Run storage override" -msgstr "" - -#: src/dird/job.c:1189 -msgid "Client resource" +msgid "Rewind error on %s. ERR=%s.\n" msgstr "" -#: src/dird/job.c:1406 +#: src/stored/tape_dev.c:261 #, c-format -msgid "Could not start clone job: \"%s\".\n" +msgid "Bad call to eod. Device %s not open\n" msgstr "" -#: src/dird/job.c:1409 +#: src/stored/tape_dev.c:333 #, c-format -msgid "Clone JobId %d started.\n" +msgid "ioctl MTEOM error on %s. ERR=%s.\n" msgstr "" -#: src/dird/authenticate.c:83 src/dird/authenticate.c:84 -#: src/tray-monitor/authenticate.c:132 -#: src/qt-console/tray-monitor/authenticate.cpp:131 +#: src/stored/tape_dev.c:344 src/stored/os.c:184 #, c-format -msgid "Error sending Hello to Storage daemon. ERR=%s\n" +msgid "ioctl MTIOCGET error on %s. ERR=%s.\n" msgstr "" -#: src/dird/authenticate.c:113 -msgid "Director and Storage daemon passwords or names not the same.\n" +#: src/stored/tape_dev.c:428 +msgid "Bad call to load_dev. Device not open\n" msgstr "" -#: src/dird/authenticate.c:115 +#: src/stored/tape_dev.c:439 src/stored/tape_dev.c:452 #, c-format -msgid "" -"Director unable to authenticate with Storage daemon at \"%s:%d\". Possible " -"causes:\n" -"Passwords or names not the same or\n" -"Maximum Concurrent Jobs exceeded on the SD or\n" -"SD networking messed up (restart daemon).\n" -"Please see " +msgid "ioctl MTLOAD error on %s. ERR=%s.\n" msgstr "" -#: src/dird/authenticate.c:127 src/wx-console/authenticate.c:127 -#: src/console/authenticate.c:122 -msgid "" -"Authorization problem: Remote server did not advertise required TLS " -"support.\n" +#: src/stored/tape_dev.c:483 +#, c-format +msgid "ioctl MTOFFL error on %s. ERR=%s.\n" msgstr "" -#: src/dird/authenticate.c:134 src/stored/authenticate.c:146 -#: src/stored/authenticate.c:257 src/wx-console/authenticate.c:133 -#: src/console/authenticate.c:129 src/filed/authenticate.c:160 -#: src/filed/authenticate.c:279 -msgid "Authorization problem: Remote server requires TLS.\n" +#: src/stored/tape_dev.c:524 +msgid "Bad call to fsf. Device not open\n" msgstr "" -#: src/dird/authenticate.c:143 +#: src/stored/tape_dev.c:535 src/stored/tape_dev.c:662 #, c-format -msgid "TLS negotiation failed with SD at \"%s:%d\"\n" +msgid "Device %s at End of Tape.\n" msgstr "" -#: src/dird/authenticate.c:155 +#: src/stored/tape_dev.c:566 src/stored/tape_dev.c:642 #, c-format -msgid "bdird set configuration file to file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -t test - read configuration and exit\n" -" -? print this message.\n" -"\n" +msgid "Unable to stat device %s. ERR=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:270 -#: src/qt-console/tray-monitor/tray-monitor.cpp:216 +#: src/stored/file_dev.c:235 #, c-format -msgid "" -"Error: %d Monitor resources defined in %s. You must define one and only one " -"Monitor resource.\n" +msgid "Device %s doesn't support ftruncate(). Recreating file %s.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:301 -#: src/qt-console/tray-monitor/tray-monitor.cpp:248 +#: src/stored/file_dev.c:247 #, c-format -msgid "" -"No Client, Storage or Director resource defined in %s\n" -"Without that I don't how to get status from the File, Storage or Director " -"Daemon :-(\n" +msgid "Could not reopen: %s, ERR=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:323 -#: src/qt-console/tray-monitor/tray-monitor.cpp:263 +#: src/stored/lock.c:231 src/stored/lock.c:259 #, c-format -msgid "" -"Invalid refresh interval defined in %s\n" -"This value must be greater or equal to 1 second and less or equal to 10 " -"minutes (read value: %d).\n" -msgstr "" - -#: src/tray-monitor/tray-monitor.c:330 -msgid "Bacula daemon status monitor" -msgstr "" - -#: src/tray-monitor/tray-monitor.c:339 -msgid "Open status window..." +msgid "pthread_cond_wait failure. ERR=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:345 -msgid "Exit" +#: src/stored/lock.c:475 +msgid "unknown blocked code" msgstr "" -#: src/tray-monitor/tray-monitor.c:357 -msgid "Bacula tray monitor" +#: src/stored/read.c:55 +msgid "No Volume names found for restore.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:382 -msgid " (DIR)" +#: src/stored/read.c:132 src/stored/read.c:250 +#, c-format +msgid ">filed: Error Hdr=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:386 -msgid " (FD)" +#: src/stored/read.c:133 src/stored/read.c:166 src/stored/read.c:223 +#: src/stored/read.c:251 src/stored/read.c:266 +#, c-format +msgid "Error sending to File daemon. ERR=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:390 -msgid " (SD)" +#: src/stored/read.c:165 src/stored/read.c:265 +#, c-format +msgid "Error sending to FD. ERR=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:403 -msgid "Unknown status." +#: src/stored/autochanger.c:62 +#, c-format +msgid "No Changer Name given for device %s. Cannot continue.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:477 -msgid "Refresh interval in seconds: " +#: src/stored/autochanger.c:68 +#, c-format +msgid "No Changer Command given for device %s. Cannot continue.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:485 -msgid "Refresh now" +#: src/stored/autochanger.c:137 +#, c-format +msgid "No slot defined in catalog (slot=%d) for Volume \"%s\" on %s.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:489 -msgid "About" +#: src/stored/autochanger.c:139 +msgid "Cartridge change or \"update slots\" may be required.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:493 -msgid "Close" +#: src/stored/autochanger.c:145 +#, c-format +msgid "No \"Changer Device\" for %s. Manual load of Volume may be required.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:513 +#: src/stored/autochanger.c:152 #, c-format -msgid "Disconnecting from Director %s:%d\n" +msgid "No \"Changer Command\" for %s. Manual load of Volume may be requird.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:516 +#: src/stored/autochanger.c:186 #, c-format -msgid "Disconnecting from Client %s:%d\n" +msgid "3304 Issuing autochanger \"load slot %d, drive %d\" command.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:519 +#: src/stored/autochanger.c:194 #, c-format -msgid "Disconnecting from Storage %s:%d\n" +msgid "3305 Autochanger \"load slot %d, drive %d\", status is OK.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:560 src/tray-monitor/tray-monitor.c:571 -msgid "Bacula Tray Monitor" +#: src/stored/autochanger.c:207 +#, c-format +msgid "" +"3992 Bad autochanger \"load slot %d, drive %d\": ERR=%s.\n" +"Results=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:562 src/tray-monitor/tray-monitor.c:573 -msgid "Written by Nicolas Boichat\n" +#: src/stored/autochanger.c:270 +#, c-format +msgid "3301 Issuing autochanger \"loaded? drive %d\" command.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:563 src/tray-monitor/tray-monitor.c:574 -msgid "Version" +#: src/stored/autochanger.c:282 +#, c-format +msgid "3302 Autochanger \"loaded? drive %d\", result is Slot %d.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:656 -#: src/qt-console/tray-monitor/tray-monitor.cpp:331 +#: src/stored/autochanger.c:289 #, c-format -msgid "Error, currentitem is not a Client or a Storage..\n" +msgid "3302 Autochanger \"loaded? drive %d\", result: nothing loaded.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:730 +#: src/stored/autochanger.c:301 #, c-format msgid "" -"Current job: %s\n" -"Last job: %s" +"3991 Bad autochanger \"loaded? drive %d\" command: ERR=%s.\n" +"Results=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:742 +#: src/stored/autochanger.c:321 #, c-format -msgid " (%d errors)" +msgid "Lock failure on autochanger. ERR=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:745 +#: src/stored/autochanger.c:335 #, c-format -msgid " (%d error)" -msgstr "" - -#: src/tray-monitor/tray-monitor.c:783 -msgid "No current job." -msgstr "" - -#: src/tray-monitor/tray-monitor.c:786 -msgid "No last job." +msgid "Unlock failure on autochanger. ERR=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:794 -msgid "Job status: Created" +#: src/stored/autochanger.c:382 src/stored/autochanger.c:548 +#, c-format +msgid "3307 Issuing autochanger \"unload slot %d, drive %d\" command.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:799 -msgid "Job status: Running" +#: src/stored/autochanger.c:395 +#, c-format +msgid "" +"3995 Bad autochanger \"unload slot %d, drive %d\": ERR=%s\n" +"Results=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:803 -msgid "Job status: Blocked" +#: src/stored/autochanger.c:498 +#, c-format +msgid "Volume \"%s\" wanted on %s is in use by device %s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:808 -msgid "Job status: Terminated" +#: src/stored/autochanger.c:565 +#, c-format +msgid "3997 Bad autochanger \"unload slot %d, drive %d\": ERR=%s.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:813 -msgid "Job status: Terminated in error" +#: src/stored/autochanger.c:608 +#, c-format +msgid "3993 Device %s not an autochanger device.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:819 -msgid "Job status: Error" +#: src/stored/autochanger.c:635 +#, c-format +msgid "3306 Issuing autochanger \"%s\" command.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:823 -msgid "Job status: Fatal error" +#: src/stored/autochanger.c:638 +msgid "3996 Open bpipe failed.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:828 -msgid "Job status: Verify differences" +#: src/stored/os.c:125 +#, c-format +msgid "Unable to set eotmodel on device %s: ERR=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:833 -msgid "Job status: Canceled" +#: src/stored/os.c:179 +msgid " Bacula status:" msgstr "" -#: src/tray-monitor/tray-monitor.c:838 -msgid "Job status: Waiting on File daemon" +#: src/stored/os.c:180 src/stored/os.c:263 src/stored/os.c:265 +#, c-format +msgid " file=%d block=%d\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:843 -msgid "Job status: Waiting on the Storage daemon" +#: src/stored/os.c:188 +msgid " Device status:" msgstr "" -#: src/tray-monitor/tray-monitor.c:848 -msgid "Job status: Waiting for new media" +#: src/stored/os.c:364 +#, c-format +msgid "unknown func code %d" msgstr "" -#: src/tray-monitor/tray-monitor.c:853 -msgid "Job status: Waiting for Mount" +#: src/stored/os.c:370 +#, c-format +msgid "I/O function \"%s\" not supported on this device.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:858 -msgid "Job status: Waiting for storage resource" +#: src/stored/read_records.c:77 +#, c-format +msgid "End of Volume at file %u on device %s, Volume \"%s\"\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:863 -msgid "Job status: Waiting for job resource" +#: src/stored/read_records.c:81 +msgid "End of all volumes.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:868 -msgid "Job status: Waiting for Client resource" +#: src/stored/read_records.c:131 +msgid "Did fsr in attemp to skip bad record.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:873 -msgid "Job status: Waiting for maximum jobs" +#: src/stored/read_records.c:370 +#, c-format +msgid "Forward spacing Volume \"%s\" to file:block %u:%u.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:878 -msgid "Job status: Waiting for start time" +#: src/stored/read_records.c:394 +msgid "Begin Session" msgstr "" -#: src/tray-monitor/tray-monitor.c:883 -msgid "Job status: Waiting for higher priority jobs to finish" +#: src/stored/read_records.c:398 +msgid "End Session" msgstr "" -#: src/tray-monitor/tray-monitor.c:888 +#: src/stored/read_records.c:404 #, c-format -msgid "Unknown job status %c." +msgid "Unknown code %d\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:889 +#: src/stored/parse_bsr.c:115 #, c-format -msgid "Job status: Unknown(%c)" +msgid "Cannot open bootstrap file %s: %s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:896 +#: src/stored/parse_bsr.c:219 #, c-format -msgid "Bad scan : '%s' %d\n" +msgid "Device \"%s\" in bsr at inappropriate place.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:936 src/console/console.c:1143 +#: src/stored/parse_bsr.c:282 #, c-format -msgid "Connecting to Director %s:%d\n" +msgid "REGEX '%s' compile error. ERR=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:937 -#: src/qt-console/tray-monitor/tray-monitor.cpp:359 -#: src/qt-console/bcomm/dircomm.cpp:103 -#, c-format -msgid "Connecting to Director %s:%d" +#: src/stored/parse_bsr.c:325 +msgid "JobType not yet implemented\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:938 src/wx-console/console_thread.cpp:428 -#: src/qt-console/tray-monitor/tray-monitor.cpp:361 -#: src/qt-console/bcomm/dircomm.cpp:173 -msgid "Director daemon" +#: src/stored/parse_bsr.c:333 +msgid "JobLevel not yet implemented\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:943 +#: src/stored/parse_bsr.c:378 #, c-format -msgid "Connecting to Client %s:%d\n" +msgid "MediaType %s in bsr at inappropriate place.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:944 -#: src/qt-console/tray-monitor/tray-monitor.cpp:366 +#: src/stored/parse_bsr.c:683 #, c-format -msgid "Connecting to Client %s:%d" +msgid "Slot %d in bsr at inappropriate place.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:945 -#: src/qt-console/tray-monitor/tray-monitor.cpp:368 -msgid "File daemon" +#: src/stored/parse_bsr.c:707 +#, c-format +msgid "VolFile : %u-%u\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:950 +#: src/stored/parse_bsr.c:715 #, c-format -msgid "Connecting to Storage %s:%d\n" +msgid "VolBlock : %u-%u\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:951 -#: src/qt-console/tray-monitor/tray-monitor.cpp:373 +#: src/stored/parse_bsr.c:723 #, c-format -msgid "Connecting to Storage %s:%d" +msgid "VolAddr : %llu-%llu\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:956 src/tray-monitor/tray-monitor.c:994 -#: src/qt-console/tray-monitor/tray-monitor.cpp:379 -#: src/qt-console/tray-monitor/tray-monitor.cpp:409 +#: src/stored/parse_bsr.c:732 #, c-format -msgid "Error, currentitem is not a Client, a Storage or a Director..\n" +msgid "FileIndex : %u\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:962 -msgid "Cannot connect to daemon.\n" +#: src/stored/parse_bsr.c:734 +#, c-format +msgid "FileIndex : %u-%u\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:963 -#: src/qt-console/tray-monitor/tray-monitor.cpp:384 -msgid "Cannot connect to daemon." +#: src/stored/parse_bsr.c:744 +#, c-format +msgid "JobId : %u\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:975 -#: src/qt-console/tray-monitor/tray-monitor.cpp:393 +#: src/stored/parse_bsr.c:746 #, c-format -msgid "Authentication error : %s" +msgid "JobId : %u-%u\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:982 -msgid "Opened connection with Director daemon.\n" +#: src/stored/parse_bsr.c:756 +#, c-format +msgid "SessId : %u\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:983 -#: src/qt-console/tray-monitor/tray-monitor.cpp:400 -msgid "Opened connection with Director daemon." +#: src/stored/parse_bsr.c:758 +#, c-format +msgid "SessId : %u-%u\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:986 -msgid "Opened connection with File daemon.\n" +#: src/stored/parse_bsr.c:767 +#, c-format +msgid "VolumeName : %s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:987 -#: src/qt-console/tray-monitor/tray-monitor.cpp:403 -msgid "Opened connection with File daemon." +#: src/stored/parse_bsr.c:768 +#, c-format +msgid " MediaType : %s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:990 -msgid "Opened connection with Storage daemon.\n" +#: src/stored/parse_bsr.c:769 +#, c-format +msgid " Device : %s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:991 -#: src/qt-console/tray-monitor/tray-monitor.cpp:406 -msgid "Opened connection with Storage daemon." +#: src/stored/parse_bsr.c:770 +#, c-format +msgid " Slot : %d\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:1028 -msgid "<< Error: BNET_SUB_PROMPT signal received. >>\n" +#: src/stored/parse_bsr.c:779 +#, c-format +msgid "Client : %s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:1033 src/wx-console/console_thread.cpp:494 -msgid "<< Heartbeat signal received, answered. >>\n" +#: src/stored/parse_bsr.c:787 +#, c-format +msgid "Job : %s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:1037 +#: src/stored/parse_bsr.c:795 #, c-format -msgid "<< Unexpected signal received : %s >>\n" +msgid "SessTime : %u\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:1042 -msgid "\n" +#: src/stored/parse_bsr.c:806 +msgid "BSR is NULL\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:1046 -#: src/qt-console/tray-monitor/tray-monitor.cpp:457 -msgid "Error : BNET_HARDEOF or BNET_ERROR" +#: src/stored/parse_bsr.c:810 +#, c-format +msgid "Next : 0x%x\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:1052 -msgid "\n" +#: src/stored/parse_bsr.c:811 +#, c-format +msgid "Root bsr : 0x%x\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:1056 -#: src/qt-console/tray-monitor/tray-monitor.cpp:466 -msgid "Error : Connection closed." +#: src/stored/parse_bsr.c:823 +#, c-format +msgid "count : %u\n" msgstr "" -#: src/tray-monitor/authenticate.c:88 -#: src/qt-console/tray-monitor/authenticate.cpp:87 -msgid "" -"Director authorization problem.\n" -"Most likely the passwords do not agree.\n" -"Please see " +#: src/stored/parse_bsr.c:824 +#, c-format +msgid "found : %u\n" msgstr "" -#: src/tray-monitor/authenticate.c:97 src/console/authenticate.c:152 -#: src/qt-console/tray-monitor/authenticate.cpp:96 +#: src/stored/parse_bsr.c:827 #, c-format -msgid "Bad response to Hello command: ERR=%s\n" +msgid "done : %s\n" msgstr "" -#: src/tray-monitor/authenticate.c:104 src/wx-console/authenticate.c:157 -#: src/console/authenticate.c:159 -#: src/qt-console/tray-monitor/authenticate.cpp:103 -msgid "Director rejected Hello command\n" +#: src/stored/parse_bsr.c:827 src/dird/ua_run.c:173 src/dird/backup.c:916 +#: src/dird/backup.c:917 src/dird/backup.c:918 src/dird/ua_input.c:141 +#: src/dird/ua_update.c:245 src/dird/ua_update.c:265 src/dird/ua_update.c:687 +#: src/tools/dbcheck.c:1340 +msgid "yes" msgstr "" -#: src/tray-monitor/authenticate.c:138 -#: src/qt-console/tray-monitor/authenticate.cpp:137 -msgid "" -"Director and Storage daemon passwords or names not the same.\n" -"Please see " +#: src/stored/parse_bsr.c:827 src/dird/ua_run.c:176 src/dird/backup.c:916 +#: src/dird/backup.c:917 src/dird/backup.c:918 src/dird/ua_input.c:145 +#: src/dird/ua_update.c:245 src/dird/ua_update.c:265 src/dird/ua_update.c:687 +msgid "no" msgstr "" -#: src/tray-monitor/authenticate.c:145 -#: src/qt-console/tray-monitor/authenticate.cpp:144 +#: src/stored/parse_bsr.c:828 #, c-format -msgid "bdird\n" -" -b specify a bootstrap file\n" -" -c specify a Storage configuration file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -e exclude list\n" -" -i include list\n" -" -j list jobs\n" -" -k list blocks\n" -" (no j or k option) list saved files\n" -" -L dump label\n" -" -p proceed inspite of errors\n" -" -v be verbose\n" -" -V specify Volume names (separated by |)\n" -" -? print this message\n" -"\n" +"SD Resources:\n" msgstr "" -#: src/stored/bls.c:149 src/stored/bextract.c:146 -#, c-format -msgid "Could not open exclude file: %s, ERR=%s\n" +#: src/stored/status.c:139 +msgid "" +"\n" +"Device status:\n" msgstr "" -#: src/stored/bls.c:164 src/stored/bextract.c:161 +#: src/stored/status.c:143 #, c-format -msgid "Could not open include file: %s, ERR=%s\n" -msgstr "" - -#: src/stored/bls.c:211 -msgid "No archive name specified\n" +msgid "Autochanger \"%s\" with devices:\n" msgstr "" -#: src/stored/bls.c:247 +#: src/stored/status.c:163 #, c-format msgid "" "\n" -"Warning, this Volume is a continuation of Volume %s\n" +"Device %s is %s:\n" +" Volume: %s\n" +" Pool: %s\n" +" Media type: %s\n" msgstr "" -#: src/stored/bls.c:290 -#, c-format -msgid "Got EOM at file %u on device %s, Volume \"%s\"\n" +#: src/stored/status.c:168 +msgid "waiting for" msgstr "" -#: src/stored/bls.c:301 -#, c-format -msgid "Mounted Volume \"%s\".\n" +#: src/stored/status.c:168 +msgid "mounted with" msgstr "" -#: src/stored/bls.c:303 -#, c-format -msgid "End of file %u on device %s, Volume \"%s\"\n" +#: src/stored/status.c:170 +msgid "*unknown*" msgstr "" -#: src/stored/bls.c:327 +#: src/stored/status.c:174 #, c-format msgid "" -"File:blk=%u:%u blk_num=%u blen=%u First rec FI=%s SessId=%u SessTim=%u Strm=" -"%s rlen=%d\n" +"\n" +"Device %s open but no Bacula volume is currently mounted.\n" msgstr "" -#: src/stored/bls.c:336 +#: src/stored/status.c:185 #, c-format -msgid "Block: %d size=%d\n" -msgstr "" - -#: src/stored/bls.c:386 src/stored/bextract.c:328 src/stored/bscan.c:688 -msgid "Cannot continue.\n" -msgstr "" - -#: src/stored/bls.c:388 -msgid "Attrib unpack error!\n" +msgid " Total Bytes=%s Blocks=%s Bytes/block=%s\n" msgstr "" -#: src/stored/bls.c:399 +#: src/stored/status.c:200 #, c-format -msgid "FileIndex=%d VolSessionId=%d VolSessionTime=%d Stream=%d DataLen=%d\n" +msgid " Total Bytes Read=%s Blocks Read=%s Bytes/block=%s\n" msgstr "" -#: src/stored/bls.c:425 src/stored/read_record.c:414 src/stored/bcopy.c:330 -msgid "Fresh Volume Label" +#: src/stored/status.c:206 +#, c-format +msgid " Positioned at File=%s Block=%s\n" msgstr "" -#: src/stored/bls.c:428 src/stored/read_record.c:417 src/stored/bcopy.c:333 -msgid "Volume Label" +#: src/stored/status.c:213 +#, c-format +msgid "" +"\n" +"Device %s is not open.\n" msgstr "" -#: src/stored/bls.c:432 src/stored/label.c:1028 src/stored/bcopy.c:337 -msgid "Begin Job Session" +#: src/stored/status.c:217 +#, c-format +msgid "" +"\n" +"Device \"%s\" is not open or does not exist.\n" msgstr "" -#: src/stored/bls.c:437 src/stored/label.c:1031 src/stored/bcopy.c:341 -msgid "End Job Session" +#: src/stored/status.c:234 src/dird/ua_status.c:294 +#, c-format +msgid "%s Version: %s (%s) %s %s %s\n" msgstr "" -#: src/stored/bls.c:441 src/stored/bcopy.c:346 -msgid "End of Medium" +#: src/stored/status.c:241 +#, c-format +msgid "Daemon started %s. Jobs: run=%d, running=%d.\n" msgstr "" -#: src/stored/bls.c:444 -msgid "End of Physical Medium" +#: src/stored/status.c:244 src/dird/ua_status.c:300 src/filed/status.c:136 +#, c-format +msgid " Heap: heap=%s smbytes=%s max_bytes=%s bufs=%s max_bufs=%s\n" msgstr "" -#: src/stored/bls.c:447 -msgid "Start of object" +#: src/stored/status.c:279 +msgid "" +"No DEVICE structure.\n" +"\n" msgstr "" -#: src/stored/bls.c:450 -msgid "End of object" +#: src/stored/status.c:285 +msgid " Device is BLOCKED. User unmounted.\n" msgstr "" -#: src/stored/bls.c:453 src/stored/label.c:1040 src/stored/bcopy.c:349 -msgid "Unknown" +#: src/stored/status.c:289 +msgid " Device is BLOCKED. User unmounted during wait for media/mount.\n" msgstr "" -#: src/stored/bls.c:460 src/stored/read_record.c:435 src/stored/bcopy.c:355 +#: src/stored/status.c:300 #, c-format -msgid "%s Record: VolSessionId=%d VolSessionTime=%d JobId=%d DataLen=%d\n" +msgid "" +" Device is BLOCKED waiting for mount of volume \"%s\",\n" +" Pool: %s\n" +" Media type: %s\n" msgstr "" -#: src/stored/bls.c:479 src/stored/bextract.c:612 src/stored/bcopy.c:373 -#: src/stored/bscan.c:1374 src/stored/btape.c:3050 +#: src/stored/status.c:309 #, c-format -msgid "Mount Volume \"%s\" on device %s and press return when ready: " +msgid "" +" Device is BLOCKED waiting to create a volume for:\n" +" Pool: %s\n" +" Media type: %s\n" msgstr "" -#: src/stored/dircmd.c:155 -#, c-format -msgid "Connection request from %s failed.\n" +#: src/stored/status.c:321 +msgid " Device is BLOCKED waiting for media.\n" msgstr "" -#: src/stored/dircmd.c:166 -#, c-format -msgid "Invalid connection from %s. Len=%d\n" +#: src/stored/status.c:327 +msgid " Device is being initialized.\n" msgstr "" -#: src/stored/dircmd.c:210 src/filed/authenticate.c:208 -msgid "Unable to authenticate Director\n" +#: src/stored/status.c:331 +msgid " Device is blocked labeling a Volume.\n" msgstr "" -#: src/stored/dircmd.c:299 +#: src/stored/status.c:340 #, c-format -msgid "3991 Bad setdebug command: %s\n" +msgid " Slot %d %s loaded in drive %d.\n" msgstr "" -#: src/stored/dircmd.c:326 -msgid "3903 Error scanning cancel command.\n" +#: src/stored/status.c:344 +#, c-format +msgid " Drive %d is not loaded.\n" msgstr "" -#: src/stored/dircmd.c:330 -#, c-format -msgid "3904 Job %s not found.\n" +#: src/stored/status.c:379 +msgid "Device state:\n" msgstr "" -#: src/stored/dircmd.c:358 +#: src/stored/status.c:395 #, c-format -msgid "3000 JobId=%ld Job=\"%s\" marked to be %s.\n" +msgid " num_writers=%d reserves=%d block=%d\n" msgstr "" -#: src/stored/dircmd.c:437 src/stored/dircmd.c:812 src/stored/dircmd.c:904 -#: src/stored/dircmd.c:1015 src/stored/dircmd.c:1137 src/stored/dircmd.c:1179 -#, c-format -msgid "3999 Device \"%s\" not found or could not be opened.\n" +#: src/stored/status.c:399 +msgid "Attached JobsIds: " msgstr "" -#: src/stored/dircmd.c:442 +#: src/stored/status.c:419 #, c-format -msgid "3903 Error scanning label command: %s\n" +msgid " Archive name: %s Device name: %s\n" msgstr "" -#: src/stored/dircmd.c:492 +#: src/stored/status.c:422 #, c-format -msgid "3910 Unable to open device \"%s\": ERR=%s\n" +msgid " File=%u block=%u\n" msgstr "" -#: src/stored/dircmd.c:509 +#: src/stored/status.c:424 #, c-format -msgid "3920 Cannot label Volume because it is already labeled: \"%s\"\n" +msgid " Min block=%u Max block=%u\n" msgstr "" -#: src/stored/dircmd.c:516 -msgid "3921 Wrong volume mounted.\n" +#: src/stored/status.c:440 src/dird/ua_status.c:818 src/filed/status.c:188 +msgid "" +"\n" +"Running Jobs:\n" msgstr "" -#: src/stored/dircmd.c:520 -msgid "3922 Cannot relabel an ANSI/IBM labeled Volume.\n" +#: src/stored/status.c:445 +#, c-format +msgid "%s Job %s waiting for Client connection.\n" msgstr "" -#: src/stored/dircmd.c:528 +#: src/stored/status.c:461 #, c-format -msgid "3912 Failed to label Volume: ERR=%s\n" +msgid "" +"Reading: %s %s job %s JobId=%d Volume=\"%s\"\n" +" pool=\"%s\" device=%s\n" msgstr "" -#: src/stored/dircmd.c:538 +#: src/stored/status.c:474 #, c-format -msgid "3914 Failed to label Volume (no media): ERR=%s\n" +msgid "" +"Writing: %s %s job %s JobId=%d Volume=\"%s\"\n" +" pool=\"%s\" device=%s\n" msgstr "" -#: src/stored/dircmd.c:541 +#: src/stored/status.c:485 #, c-format -msgid "3913 Cannot label Volume. Unknown status %d from read_volume_label()\n" +msgid " spooling=%d despooling=%d despool_wait=%d\n" msgstr "" -#: src/stored/dircmd.c:578 +#: src/stored/status.c:501 #, c-format -msgid "3001 Mounted Volume: %s\n" +msgid " Files=%s Bytes=%s AveBytes/sec=%s LastBytes/sec=%s\n" msgstr "" -#: src/stored/dircmd.c:582 src/stored/dircmd.c:1215 +#: src/stored/status.c:513 #, c-format -msgid "" -"3902 Cannot mount Volume on Storage Device \"%s\" because:\n" -"%s" +msgid " FDReadSeqNo=%s in_msg=%u out_msg=%d fd=%d\n" msgstr "" -#: src/stored/dircmd.c:696 -msgid "Specified slot ignored. " +#: src/stored/status.c:519 +msgid " FDSocket closed\n" msgstr "" -#: src/stored/dircmd.c:712 src/stored/dircmd.c:770 -#, c-format -msgid "3901 Unable to open device \"%s\": ERR=%s\n" +#: src/stored/status.c:528 src/dird/ua_select.c:1211 src/filed/status.c:278 +msgid "No Jobs running.\n" msgstr "" -#: src/stored/dircmd.c:732 src/stored/dircmd.c:761 -#, c-format -msgid "3001 Device \"%s\" is mounted with Volume \"%s\"\n" +#: src/stored/status.c:540 +msgid "" +"\n" +"Jobs waiting to reserve a drive:\n" msgstr "" -#: src/stored/dircmd.c:735 src/stored/dircmd.c:764 src/stored/dircmd.c:779 +#: src/stored/status.c:604 #, c-format -msgid "" -"3905 Device \"%s\" open but no Bacula volume is mounted.\n" -"If this is not a blank tape, try unmounting and remounting the Volume.\n" +msgid "3900 No arg in .status command: %s\n" msgstr "" -#: src/stored/dircmd.c:745 +#: src/stored/status.c:652 #, c-format -msgid "3001 Device \"%s\" is doing acquire.\n" +msgid "3900 Unknown arg in .status command: %s\n" msgstr "" -#: src/stored/dircmd.c:750 src/stored/dircmd.c:875 -#, c-format -msgid "3903 Device \"%s\" is being labeled.\n" +#: src/stored/status.c:667 +msgid "Bacula Storage: Idle" msgstr "" -#: src/stored/dircmd.c:776 -#, c-format -msgid "3001 Device \"%s\" is already mounted with Volume \"%s\"\n" +#: src/stored/status.c:678 +msgid "Bacula Storage: Running" msgstr "" -#: src/stored/dircmd.c:788 -#, c-format -msgid "3002 Device \"%s\" is mounted.\n" +#: src/stored/status.c:692 +msgid "Bacula Storage: Last Job Canceled" msgstr "" -#: src/stored/dircmd.c:790 src/stored/dircmd.c:847 src/stored/dircmd.c:863 -#: src/stored/dircmd.c:895 -#, c-format -msgid "3907 %s" +#: src/stored/status.c:696 +msgid "Bacula Storage: Last Job Failed" msgstr "" -#: src/stored/dircmd.c:793 -#, c-format -msgid "3906 File device \"%s\" is always mounted.\n" +#: src/stored/status.c:700 +msgid "Bacula Storage: Last Job had Warnings" msgstr "" -#: src/stored/dircmd.c:802 +#: src/stored/sd_plugins.c:220 src/dird/dir_plugins.c:169 +#: src/filed/fd_plugins.c:1125 #, c-format -msgid "3930 Device \"%s\" is being released.\n" +msgid "Loaded plugin: %s\n" msgstr "" -#: src/stored/dircmd.c:806 +#: src/stored/sd_plugins.c:240 src/dird/dir_plugins.c:189 +#: src/filed/fd_plugins.c:1146 #, c-format -msgid "3905 Unknown wait state %d\n" +msgid "Plugin magic wrong. Plugin=%s wanted=%s got=%s\n" msgstr "" -#: src/stored/dircmd.c:816 +#: src/stored/sd_plugins.c:248 src/dird/dir_plugins.c:197 +#: src/filed/fd_plugins.c:1154 #, c-format -msgid "3909 Error scanning mount command: %s\n" +msgid "Plugin version incorrect. Plugin=%s wanted=%d got=%d\n" msgstr "" -#: src/stored/dircmd.c:844 src/stored/dircmd.c:897 +#: src/stored/sd_plugins.c:257 src/dird/dir_plugins.c:206 +#: src/filed/fd_plugins.c:1162 #, c-format -msgid "3002 Device \"%s\" unmounted.\n" +msgid "Plugin license incompatible. Plugin=%s license=%s\n" msgstr "" -#: src/stored/dircmd.c:851 +#: src/stored/sd_plugins.c:265 src/dird/dir_plugins.c:214 +#: src/filed/fd_plugins.c:1170 #, c-format -msgid "3901 Device \"%s\" is already unmounted.\n" +msgid "Plugin size incorrect. Plugin=%s wanted=%d got=%d\n" msgstr "" -#: src/stored/dircmd.c:866 -#, c-format -msgid "3001 Device \"%s\" unmounted.\n" +#: src/lib/sellist.c:57 +msgid "Negative numbers not permitted.\n" msgstr "" -#: src/stored/dircmd.c:871 -#, c-format -msgid "3902 Device \"%s\" is busy in acquire.\n" +#: src/lib/sellist.c:64 src/dird/ua_label.c:98 +msgid "Range end is not integer.\n" msgstr "" -#: src/stored/dircmd.c:909 -#, c-format -msgid "3907 Error scanning unmount command: %s\n" +#: src/lib/sellist.c:69 src/dird/ua_label.c:103 +msgid "Range start is not an integer.\n" msgstr "" -#: src/stored/dircmd.c:937 -msgid "3916 Error scanning action_on_purge command\n" +#: src/lib/sellist.c:75 src/dird/ua_label.c:109 +msgid "Range end not bigger than start.\n" msgstr "" -#: src/stored/dircmd.c:980 -#, c-format -msgid "3921 Device \"%s\" already released.\n" +#: src/lib/sellist.c:83 +msgid "User cancel requested.\n" msgstr "" -#: src/stored/dircmd.c:987 -#, c-format -msgid "3922 Device \"%s\" waiting for sysop.\n" +#: src/lib/sellist.c:93 src/dird/ua_label.c:115 +msgid "Input value is not an integer.\n" msgstr "" -#: src/stored/dircmd.c:993 -#, c-format -msgid "3922 Device \"%s\" waiting for mount.\n" +#: src/lib/sellist.c:105 +msgid "Selection items must be be greater than zero.\n" msgstr "" -#: src/stored/dircmd.c:997 -#, c-format -msgid "3923 Device \"%s\" is busy in acquire.\n" +#: src/lib/sellist.c:109 +msgid "Selection item too large.\n" msgstr "" -#: src/stored/dircmd.c:1001 -#, c-format -msgid "3914 Device \"%s\" is being labeled.\n" +#: src/lib/sellist.c:211 +msgid "No input string given.\n" msgstr "" -#: src/stored/dircmd.c:1009 +#: src/lib/plugins.c:105 #, c-format -msgid "3022 Device \"%s\" released.\n" +msgid "Failed to open Plugin directory %s: ERR=%s\n" msgstr "" -#: src/stored/dircmd.c:1020 +#: src/lib/plugins.c:122 #, c-format -msgid "3927 Error scanning release command: %s\n" +msgid "Failed to find any plugins in %s\n" msgstr "" -#: src/stored/dircmd.c:1049 src/filed/job.c:1535 +#: src/lib/plugins.c:156 #, c-format -msgid "Could not create bootstrap file %s: ERR=%s\n" +msgid "dlopen plugin %s failed: ERR=%s\n" msgstr "" -#: src/stored/dircmd.c:1062 -msgid "Error parsing bootstrap file.\n" +#: src/lib/plugins.c:167 +#, c-format +msgid "Lookup of loadPlugin in plugin %s failed: ERR=%s\n" msgstr "" -#: src/stored/dircmd.c:1124 +#: src/lib/plugins.c:176 #, c-format -msgid "3998 Device \"%s\" is not an autochanger.\n" +msgid "Lookup of unloadPlugin in plugin %s failed: ERR=%s\n" msgstr "" -#: src/stored/dircmd.c:1141 +#: src/lib/bnet.c:127 #, c-format -msgid "3908 Error scanning autochanger drives/list/slots command: %s\n" +msgid "Attr spool write error. wrote=%d wanted=%d bytes. ERR=%s\n" msgstr "" -#: src/stored/dircmd.c:1183 -#, c-format -msgid "3909 Error scanning readlabel command: %s\n" +#: src/lib/bnet.c:212 src/lib/bnet.c:253 +msgid "TLS connection initialization failed.\n" msgstr "" -#: src/stored/dircmd.c:1211 -#, c-format -msgid "3001 Volume=%s Slot=%d\n" +#: src/lib/bnet.c:220 +msgid "TLS Negotiation failed.\n" msgstr "" -#: src/stored/dircmd.c:1243 -#, c-format -msgid "3931 Device \"%s\" is BLOCKED. user unmounted.\n" +#: src/lib/bnet.c:226 src/lib/bnet.c:268 +msgid "" +"TLS certificate verification failed. Peer certificate did not match a " +"required commonName\n" msgstr "" -#: src/stored/dircmd.c:1247 +#: src/lib/bnet.c:277 #, c-format msgid "" -"3932 Device \"%s\" is BLOCKED. user unmounted during wait for media/mount.\n" +"TLS host certificate verification failed. Host name \"%s\" did not match " +"presented certificate\n" msgstr "" -#: src/stored/dircmd.c:1251 -#, c-format -msgid "3933 Device \"%s\" is BLOCKED waiting for media.\n" +#: src/lib/bnet.c:294 +msgid "TLS enabled but not configured.\n" msgstr "" -#: src/stored/dircmd.c:1255 -#, c-format -msgid "3934 Device \"%s\" is being initialized.\n" +#: src/lib/bnet.c:300 +msgid "TLS enable but not configured.\n" msgstr "" -#: src/stored/dircmd.c:1259 -#, c-format -msgid "3935 Device \"%s\" is blocked labeling a Volume.\n" +#: src/lib/bnet.c:397 +msgid "No problem." msgstr "" -#: src/stored/dircmd.c:1263 -#, c-format -msgid "3935 Device \"%s\" is blocked for unknown reason.\n" +#: src/lib/bnet.c:400 +msgid "Authoritative answer for host not found." msgstr "" -#: src/stored/dircmd.c:1268 -#, c-format -msgid "3936 Device \"%s\" is busy reading.\n" +#: src/lib/bnet.c:403 +msgid "Non-authoritative for host not found, or ServerFail." msgstr "" -#: src/stored/dircmd.c:1271 -#, c-format -msgid "3937 Device \"%s\" is busy with writers=%d reserved=%d.\n" +#: src/lib/bnet.c:406 +msgid "Non-recoverable errors, FORMERR, REFUSED, or NOTIMP." msgstr "" -#: src/stored/parse_bsr.c:122 src/stored/parse_bsr.c:126 -#, c-format -msgid "" -"Bootstrap file error: %s\n" -" : Line %d, col %d of file %s\n" -"%s\n" +#: src/lib/bnet.c:409 +msgid "Valid name, no data record of resquested type." msgstr "" -#: src/stored/parse_bsr.c:148 -#, c-format -msgid "Cannot open bootstrap file %s: %s\n" +#: src/lib/bnet.c:412 +msgid "Unknown error." msgstr "" -#: src/stored/parse_bsr.c:279 +#: src/lib/bnet.c:554 #, c-format -msgid "MediaType %s in bsr at inappropriate place.\n" +msgid "Unknown sig %d" msgstr "" -#: src/stored/parse_bsr.c:311 +#: src/lib/openssl.c:131 src/lib/openssl.c:202 #, c-format -msgid "Device \"%s\" in bsr at inappropriate place.\n" +msgid "Unable to destroy mutex: ERR=%s\n" msgstr "" -#: src/stored/parse_bsr.c:484 -#, c-format -msgid "REGEX '%s' compile error. ERR=%s\n" +#: src/lib/var.c:2657 +msgid "everything ok" msgstr "" -#: src/stored/parse_bsr.c:494 -msgid "JobType not yet implemented\n" +#: src/lib/var.c:2658 +msgid "incomplete named character" msgstr "" -#: src/stored/parse_bsr.c:502 -msgid "JobLevel not yet implemented\n" +#: src/lib/var.c:2659 +msgid "incomplete hexadecimal value" msgstr "" -#: src/stored/parse_bsr.c:719 -#, c-format -msgid "Slot %d in bsr at inappropriate place.\n" +#: src/lib/var.c:2660 +msgid "invalid hexadecimal value" msgstr "" -#: src/stored/parse_bsr.c:743 -#, c-format -msgid "VolFile : %u-%u\n" +#: src/lib/var.c:2661 +msgid "octal value too large" msgstr "" -#: src/stored/parse_bsr.c:751 -#, c-format -msgid "VolBlock : %u-%u\n" +#: src/lib/var.c:2662 +msgid "invalid octal value" msgstr "" -#: src/stored/parse_bsr.c:759 -#, c-format -msgid "VolAddr : %llu-%llu\n" +#: src/lib/var.c:2663 +msgid "incomplete octal value" msgstr "" -#: src/stored/parse_bsr.c:768 -#, c-format -msgid "FileIndex : %u\n" +#: src/lib/var.c:2664 +msgid "incomplete grouped hexadecimal value" msgstr "" -#: src/stored/parse_bsr.c:770 -#, c-format -msgid "FileIndex : %u-%u\n" +#: src/lib/var.c:2665 +msgid "incorrect character class specification" msgstr "" -#: src/stored/parse_bsr.c:780 -#, c-format -msgid "JobId : %u\n" +#: src/lib/var.c:2666 +msgid "invalid expansion configuration" msgstr "" -#: src/stored/parse_bsr.c:782 -#, c-format -msgid "JobId : %u-%u\n" +#: src/lib/var.c:2667 +msgid "out of memory" msgstr "" -#: src/stored/parse_bsr.c:792 -#, c-format -msgid "SessId : %u\n" +#: src/lib/var.c:2668 +msgid "incomplete variable specification" msgstr "" -#: src/stored/parse_bsr.c:794 -#, c-format -msgid "SessId : %u-%u\n" +#: src/lib/var.c:2669 +msgid "undefined variable" msgstr "" -#: src/stored/parse_bsr.c:803 -#, c-format -msgid "VolumeName : %s\n" +#: src/lib/var.c:2670 +msgid "input is neither text nor variable" msgstr "" -#: src/stored/parse_bsr.c:804 -#, c-format -msgid " MediaType : %s\n" +#: src/lib/var.c:2671 +msgid "unknown command character in variable" msgstr "" -#: src/stored/parse_bsr.c:805 -#, c-format -msgid " Device : %s\n" +#: src/lib/var.c:2672 +msgid "malformatted search and replace operation" msgstr "" -#: src/stored/parse_bsr.c:806 -#, c-format -msgid " Slot : %d\n" +#: src/lib/var.c:2673 +msgid "unknown flag in search and replace operation" msgstr "" -#: src/stored/parse_bsr.c:815 -#, c-format -msgid "Client : %s\n" +#: src/lib/var.c:2674 +msgid "invalid regex in search and replace operation" msgstr "" -#: src/stored/parse_bsr.c:823 -#, c-format -msgid "Job : %s\n" +#: src/lib/var.c:2675 +msgid "missing parameter in command" msgstr "" -#: src/stored/parse_bsr.c:831 -#, c-format -msgid "SessTime : %u\n" +#: src/lib/var.c:2676 +msgid "empty search string in search and replace operation" +msgstr "" + +#: src/lib/var.c:2677 +msgid "start offset missing in cut operation" msgstr "" -#: src/stored/parse_bsr.c:842 -msgid "BSR is NULL\n" +#: src/lib/var.c:2678 +msgid "offsets in cut operation delimited by unknown character" msgstr "" -#: src/stored/parse_bsr.c:846 -#, c-format -msgid "Next : 0x%x\n" +#: src/lib/var.c:2679 +msgid "range out of bounds in cut operation" msgstr "" -#: src/stored/parse_bsr.c:847 -#, c-format -msgid "Root bsr : 0x%x\n" +#: src/lib/var.c:2680 +msgid "offset out of bounds in cut operation" msgstr "" -#: src/stored/parse_bsr.c:859 -#, c-format -msgid "count : %u\n" +#: src/lib/var.c:2681 +msgid "logic error in cut operation" msgstr "" -#: src/stored/parse_bsr.c:860 -#, c-format -msgid "found : %u\n" +#: src/lib/var.c:2682 +msgid "malformatted transpose operation" msgstr "" -#: src/stored/parse_bsr.c:863 -#, c-format -msgid "done : %s\n" +#: src/lib/var.c:2683 +msgid "source and target class mismatch in transpose operation" msgstr "" -#: src/stored/parse_bsr.c:864 -#, c-format -msgid "positioning : %d\n" +#: src/lib/var.c:2684 +msgid "empty character class in transpose operation" msgstr "" -#: src/stored/parse_bsr.c:865 -#, c-format -msgid "fast_reject : %d\n" +#: src/lib/var.c:2685 +msgid "incorrect character class in transpose operation" msgstr "" -#: src/stored/ansi_label.c:96 -#, c-format -msgid "Read error on device %s in ANSI label. ERR=%s\n" +#: src/lib/var.c:2686 +msgid "malformatted padding operation" msgstr "" -#: src/stored/ansi_label.c:106 -msgid "Insane! End of tape while reading ANSI label.\n" +#: src/lib/var.c:2687 +msgid "width parameter missing in padding operation" msgstr "" -#: src/stored/ansi_label.c:132 -msgid "No VOL1 label while reading ANSI/IBM label.\n" +#: src/lib/var.c:2688 +msgid "fill string missing in padding operation" msgstr "" -#: src/stored/ansi_label.c:155 -#, c-format -msgid "Wanted ANSI Volume \"%s\" got \"%s\"\n" +#: src/lib/var.c:2689 +msgid "unknown quoted pair in search and replace operation" msgstr "" -#: src/stored/ansi_label.c:166 -msgid "No HDR1 label while reading ANSI label.\n" +#: src/lib/var.c:2690 +msgid "sub-matching reference out of range" msgstr "" -#: src/stored/ansi_label.c:172 -#, c-format -msgid "ANSI/IBM Volume \"%s\" does not belong to Bacula.\n" +#: src/lib/var.c:2691 +msgid "invalid argument" msgstr "" -#: src/stored/ansi_label.c:184 -msgid "No HDR2 label while reading ANSI/IBM label.\n" +#: src/lib/var.c:2692 +msgid "incomplete quoted pair" msgstr "" -#: src/stored/ansi_label.c:199 -msgid "Unknown or bad ANSI/IBM label record.\n" +#: src/lib/var.c:2693 +msgid "lookup function does not support variable arrays" msgstr "" -#: src/stored/ansi_label.c:207 -msgid "Too many records in while reading ANSI/IBM label.\n" +#: src/lib/var.c:2694 +msgid "index of array variable contains an invalid character" msgstr "" -#: src/stored/ansi_label.c:307 -#, c-format -msgid "ANSI Volume label name \"%s\" longer than 6 chars.\n" +#: src/lib/var.c:2695 +msgid "index of array variable is incomplete" msgstr "" -#: src/stored/ansi_label.c:333 -#, c-format -msgid "Could not write ANSI VOL1 label. Wanted size=%d got=%d ERR=%s\n" +#: src/lib/var.c:2696 +msgid "bracket expression in array variable's index not closed" msgstr "" -#: src/stored/ansi_label.c:371 src/stored/ansi_label.c:400 -#, c-format -msgid "Could not write ANSI HDR1 label. ERR=%s\n" +#: src/lib/var.c:2697 +msgid "division by zero error in index specification" msgstr "" -#: src/stored/ansi_label.c:376 src/stored/ansi_label.c:407 -msgid "Could not write ANSI HDR1 label.\n" +#: src/lib/var.c:2698 +msgid "unterminated loop construct" msgstr "" -#: src/stored/ansi_label.c:412 -#, c-format -msgid "Error writing EOF to tape. ERR=%s" +#: src/lib/var.c:2699 +msgid "invalid character in loop limits" msgstr "" -#: src/stored/ansi_label.c:417 -msgid "write_ansi_ibm_label called for non-ANSI/IBM type\n" +#: src/lib/var.c:2700 +msgid "malformed operation argument list" msgstr "" -#: src/stored/append.c:68 -msgid "DCR is NULL!!!\n" +#: src/lib/var.c:2701 +msgid "undefined operation" msgstr "" -#: src/stored/append.c:73 -msgid "DEVICE is NULL!!!\n" +#: src/lib/var.c:2702 +msgid "formatting failure" msgstr "" -#: src/stored/append.c:83 -msgid "Unable to set network buffer size.\n" +#: src/lib/var.c:2711 +msgid "unknown error" msgstr "" -#: src/stored/append.c:95 src/stored/append.c:104 src/stored/append.c:116 -#: src/stored/askdir.c:340 src/stored/askdir.c:341 -msgid "NULL Volume name. This shouldn't happen!!!\n" +#: src/lib/util.c:168 src/dird/ua_status.c:1080 src/lib/status.h:102 +msgid "Created" msgstr "" -#: src/stored/append.c:110 src/stored/btape.c:2235 -#, c-format -msgid "Write session label failed. ERR=%s\n" +#: src/lib/util.c:171 +msgid "Running" msgstr "" -#: src/stored/append.c:122 -#, c-format -msgid "Network send error to FD. ERR=%s\n" +#: src/lib/util.c:174 +msgid "Blocked" msgstr "" -#: src/stored/append.c:159 -#, c-format -msgid "Error reading data header from FD. ERR=%s\n" +#: src/lib/util.c:181 src/lib/util.c:316 src/lib/util.c:463 +#: src/dird/ua_status.c:1084 src/lib/status.h:106 +msgid "Error" msgstr "" -#: src/stored/append.c:167 -#, c-format -msgid "Malformed data header from FD: %s\n" +#: src/lib/util.c:184 +msgid "Non-fatal error" msgstr "" -#: src/stored/append.c:187 -#, c-format -msgid "FI=%d from FD not positive or sequential=%d\n" +#: src/lib/util.c:187 src/lib/util.c:312 src/dird/ua_status.c:1096 +#: src/lib/status.h:118 +msgid "OK -- with warnings" msgstr "" -#: src/stored/append.c:235 -#, c-format -msgid "Network error reading from FD. ERR=%s\n" +#: src/lib/util.c:190 src/lib/util.c:322 +msgid "Canceled" msgstr "" -#: src/stored/append.c:265 src/stored/btape.c:2354 -#, c-format -msgid "Error writing end session label. ERR=%s\n" +#: src/lib/util.c:193 +msgid "Verify differences" msgstr "" -#: src/stored/append.c:277 src/stored/mac.c:126 src/stored/mac.c:261 -#: src/stored/spool.c:300 -#, c-format -msgid "Fatal append error on device %s: ERR=%s\n" +#: src/lib/util.c:196 +msgid "Waiting on FD" msgstr "" -#: src/stored/append.c:279 src/stored/mac.c:128 -msgid "Set ok=FALSE after write_block_to_device.\n" +#: src/lib/util.c:199 +msgid "Wait on SD" msgstr "" -#: src/stored/append.c:308 src/stored/mac.c:151 -#, c-format -msgid "Elapsed time=%02d:%02d:%02d, Transfer rate=%s Bytes/second\n" +#: src/lib/util.c:202 +msgid "Wait for new Volume" msgstr "" -#: src/stored/append.c:345 -#, c-format -msgid "Error updating file attributes. ERR=%s\n" +#: src/lib/util.c:205 +msgid "Waiting for mount" msgstr "" -#: src/stored/vol_mgr.c:93 -#, c-format -msgid "Unable to initialize volume list lock. ERR=%s\n" +#: src/lib/util.c:208 +msgid "Waiting for Storage resource" msgstr "" -#: src/stored/label.c:93 -#, c-format -msgid "Couldn't rewind device %s: ERR=%s\n" +#: src/lib/util.c:211 +msgid "Waiting for Job resource" msgstr "" -#: src/stored/label.c:110 src/stored/label.c:202 -#, c-format -msgid "Wrong Volume mounted on device %s: Wanted %s have %s\n" +#: src/lib/util.c:214 +msgid "Waiting for Client resource" msgstr "" -#: src/stored/label.c:113 src/stored/label.c:190 -#, c-format -msgid "Too many tries: %s" +#: src/lib/util.c:217 +msgid "Waiting on Max Jobs" msgstr "" -#: src/stored/label.c:130 -#, c-format -msgid "" -"Requested Volume \"%s\" on %s is not a Bacula labeled Volume, because: ERR=%s" +#: src/lib/util.c:220 +msgid "Waiting for Start Time" msgstr "" -#: src/stored/label.c:135 -msgid "Could not read Volume label from block.\n" +#: src/lib/util.c:223 +msgid "Waiting on Priority" msgstr "" -#: src/stored/label.c:138 -#, c-format -msgid "Could not unserialize Volume label: ERR=%s\n" +#: src/lib/util.c:226 src/dird/ua_status.c:931 src/dird/ua_status.c:982 +msgid "SD committing Data" msgstr "" -#: src/stored/label.c:143 -#, c-format -msgid "Volume Header Id bad: %s\n" +#: src/lib/util.c:229 src/dird/ua_status.c:934 src/dird/ua_status.c:985 +msgid "SD despooling Data" msgstr "" -#: src/stored/label.c:175 -#, c-format -msgid "Volume on %s has wrong Bacula version. Wanted %d got %d\n" +#: src/lib/util.c:232 src/dird/ua_status.c:937 src/dird/ua_status.c:988 +msgid "SD despooling Attributes" msgstr "" -#: src/stored/label.c:186 -#, c-format -msgid "Volume on %s has bad Bacula label type: %x\n" +#: src/lib/util.c:235 src/dird/ua_status.c:940 src/dird/ua_status.c:991 +msgid "Dir inserting Attributes" msgstr "" -#: src/stored/label.c:236 src/stored/label.c:397 src/stored/mount.c:463 +#: src/lib/util.c:242 #, c-format -msgid "Could not reserve volume %s on %s\n" +msgid "Unknown Job termination status=%d" msgstr "" -#: src/stored/label.c:277 -#, c-format -msgid "Cannot write Volume label to block for device %s\n" +#: src/lib/util.c:258 +msgid "Completed successfully" msgstr "" -#: src/stored/label.c:328 src/stored/label.c:426 src/stored/mount.c:218 -#, c-format -msgid "Open device %s Volume \"%s\" failed: ERR=%s\n" +#: src/lib/util.c:261 +msgid "Completed with warnings" msgstr "" -#: src/stored/label.c:451 -#, c-format -msgid "Rewind error on device %s: ERR=%s\n" +#: src/lib/util.c:264 +msgid "Terminated with errors" msgstr "" -#: src/stored/label.c:458 -#, c-format -msgid "Truncate error on device %s: ERR=%s\n" +#: src/lib/util.c:267 +msgid "Fatal error" msgstr "" -#: src/stored/label.c:464 -#, c-format -msgid "Failed to re-open DVD after truncate on device %s: ERR=%s\n" +#: src/lib/util.c:270 +msgid "Created, not yet running" msgstr "" -#: src/stored/label.c:487 -#, c-format -msgid "Unable to write device %s: ERR=%s\n" +#: src/lib/util.c:273 +msgid "Canceled by user" msgstr "" -#: src/stored/label.c:518 -#, c-format -msgid "Recycled volume \"%s\" on device %s, all previous data lost.\n" +#: src/lib/util.c:276 +msgid "Verify found differences" msgstr "" -#: src/stored/label.c:521 -#, c-format -msgid "Wrote label to prelabeled Volume \"%s\" on device %s\n" +#: src/lib/util.c:279 +msgid "Waiting for File daemon" msgstr "" -#: src/stored/label.c:721 -#, c-format -msgid "Bad Volume session label = %d\n" +#: src/lib/util.c:282 +msgid "Waiting for Storage daemon" msgstr "" -#: src/stored/label.c:776 -#, c-format -msgid "Expecting Volume Label, got FI=%s Stream=%s len=%d\n" +#: src/lib/util.c:285 +msgid "Waiting for higher priority jobs" msgstr "" -#: src/stored/label.c:903 -#, c-format -msgid "Unknown %d" +#: src/lib/util.c:288 +msgid "Batch inserting file records" msgstr "" -#: src/stored/label.c:907 -#, c-format -msgid "" -"\n" -"Volume Label:\n" -"Id : %sVerNo : %d\n" -"VolName : %s\n" -"PrevVolName : %s\n" -"VolFile : %d\n" -"LabelType : %s\n" -"LabelSize : %d\n" -"PoolName : %s\n" -"MediaType : %s\n" -"PoolType : %s\n" -"HostName : %s\n" +#: src/lib/util.c:319 +msgid "Fatal Error" msgstr "" -#: src/stored/label.c:929 -#, c-format -msgid "Date label written: %s\n" +#: src/lib/util.c:325 +msgid "Differences" msgstr "" -#: src/stored/label.c:935 -#, c-format -msgid "Date label written: %04d-%02d-%02d at %02d:%02d\n" +#: src/lib/util.c:328 +msgid "Unknown term code" msgstr "" -#: src/stored/label.c:955 -#, c-format -msgid "" -"\n" -"%s Record:\n" -"JobId : %d\n" -"VerNum : %d\n" -"PoolName : %s\n" -"PoolType : %s\n" -"JobName : %s\n" -"ClientName : %s\n" +#: src/lib/util.c:344 src/lib/jcr.c:220 +msgid "Backup" msgstr "" -#: src/stored/label.c:968 -#, c-format -msgid "" -"Job (unique name) : %s\n" -"FileSet : %s\n" -"JobType : %c\n" -"JobLevel : %c\n" +#: src/lib/util.c:347 +msgid "Migrated Job" msgstr "" -#: src/stored/label.c:977 -#, c-format -msgid "" -"JobFiles : %s\n" -"JobBytes : %s\n" -"StartBlock : %s\n" -"EndBlock : %s\n" -"StartFile : %s\n" -"EndFile : %s\n" -"JobErrors : %s\n" -"JobStatus : %c\n" +#: src/lib/util.c:350 +msgid "Verify" msgstr "" -#: src/stored/label.c:998 -#, c-format -msgid "Date written : %s\n" +#: src/lib/util.c:353 +msgid "Restore" msgstr "" -#: src/stored/label.c:1003 -#, c-format -msgid "Date written : %04d-%02d-%02d at %02d:%02d\n" +#: src/lib/util.c:356 +msgid "Console" msgstr "" -#: src/stored/label.c:1022 -msgid "Fresh Volume" +#: src/lib/util.c:359 +msgid "System or Console" msgstr "" -#: src/stored/label.c:1025 -msgid "Volume" +#: src/lib/util.c:362 +msgid "Admin" msgstr "" -#: src/stored/label.c:1034 src/stored/read_record.c:428 -msgid "End of Media" +#: src/lib/util.c:365 src/lib/util.c:455 +msgid "Archive" msgstr "" -#: src/stored/label.c:1037 -msgid "End of Tape" +#: src/lib/util.c:368 +msgid "Job Copy" msgstr "" -#: src/stored/label.c:1057 src/stored/label.c:1065 src/stored/label.c:1098 -#, c-format -msgid "%s Record: File:blk=%u:%u SessId=%d SessTime=%d JobId=%d DataLen=%d\n" +#: src/lib/util.c:371 +msgid "Copy" msgstr "" -#: src/stored/label.c:1062 -msgid "End of physical tape.\n" +#: src/lib/util.c:374 +msgid "Migrate" msgstr "" -#: src/stored/label.c:1077 src/stored/label.c:1086 -#, c-format -msgid "%s Record: File:blk=%u:%u SessId=%d SessTime=%d JobId=%d\n" +#: src/lib/util.c:377 +msgid "Scan" msgstr "" -#: src/stored/label.c:1079 -#, c-format -msgid " Job=%s Date=%s Level=%c Type=%c\n" +#: src/lib/util.c:381 +msgid "Unknown Type" msgstr "" -#: src/stored/label.c:1088 -#, c-format -msgid " Date=%s Level=%c Type=%c Files=%s Bytes=%s Errors=%d Status=%c\n" +#: src/lib/util.c:391 +msgid "Truncate" msgstr "" -#: src/stored/status.c:99 -msgid "Used Volume status:\n" +#: src/lib/util.c:394 src/filed/restore.c:1164 +msgid "None" msgstr "" -#: src/stored/status.c:117 -msgid "" -"\n" -"SD Resources:\n" +#: src/lib/util.c:408 +msgid "Base" msgstr "" -#: src/stored/status.c:153 -msgid "" -"\n" -"Device status:\n" +#: src/lib/util.c:411 src/lib/util.c:457 src/dird/ua_run.c:1147 +msgid "Full" msgstr "" -#: src/stored/status.c:157 -#, c-format -msgid "Autochanger \"%s\" with devices:\n" +#: src/lib/util.c:414 src/dird/ua_run.c:1148 +msgid "Incremental" msgstr "" -#: src/stored/status.c:177 -#, c-format -msgid "" -"\n" -"Device %s is %s:\n" -" Volume: %s\n" -" Pool: %s\n" -" Media type: %s\n" +#: src/lib/util.c:417 src/dird/ua_run.c:1149 +msgid "Differential" msgstr "" -#: src/stored/status.c:182 -msgid "waiting for" +#: src/lib/util.c:420 src/dird/ua_run.c:1150 +msgid "Since" msgstr "" -#: src/stored/status.c:182 -msgid "mounted with" +#: src/lib/util.c:423 src/dird/ua_run.c:1177 +msgid "Verify Catalog" msgstr "" -#: src/stored/status.c:184 -msgid "*unknown*" +#: src/lib/util.c:426 +msgid "Verify Init Catalog" msgstr "" -#: src/stored/status.c:188 -#, c-format -msgid "" -"\n" -"Device %s open but no Bacula volume is currently mounted.\n" +#: src/lib/util.c:429 src/dird/ua_run.c:1178 +msgid "Verify Volume to Catalog" msgstr "" -#: src/stored/status.c:199 -#, c-format -msgid " Total Bytes=%s Blocks=%s Bytes/block=%s\n" +#: src/lib/util.c:432 src/dird/ua_run.c:1179 +msgid "Verify Disk to Catalog" msgstr "" -#: src/stored/status.c:214 -#, c-format -msgid " Total Bytes Read=%s Blocks Read=%s Bytes/block=%s\n" +#: src/lib/util.c:435 +msgid "Verify Data" msgstr "" -#: src/stored/status.c:220 -#, c-format -msgid " Positioned at File=%s Block=%s\n" +#: src/lib/util.c:438 +msgid "Virtual Full" msgstr "" -#: src/stored/status.c:227 -#, c-format -msgid "" -"\n" -"Device %s is not open.\n" +#: src/lib/util.c:444 +msgid "Unknown Job Level" msgstr "" -#: src/stored/status.c:231 -#, c-format -msgid "" -"\n" -"Device \"%s\" is not open or does not exist.\n" +#: src/lib/util.c:454 +msgid "Append" msgstr "" -#: src/stored/status.c:255 -#, c-format -msgid "Daemon started %s. Jobs: run=%d, running=%d.\n" +#: src/lib/util.c:456 +msgid "Disabled" msgstr "" -#: src/stored/status.c:293 -msgid "" -"No DEVICE structure.\n" -"\n" +#: src/lib/util.c:458 +msgid "Used" msgstr "" -#: src/stored/status.c:299 -msgid " Device is BLOCKED. User unmounted.\n" +#: src/lib/util.c:459 +msgid "Cleaning" msgstr "" -#: src/stored/status.c:303 -msgid " Device is BLOCKED. User unmounted during wait for media/mount.\n" +#: src/lib/util.c:460 +msgid "Purged" msgstr "" -#: src/stored/status.c:313 -#, c-format -msgid "" -" Device is BLOCKED waiting for mount of volume \"%s\",\n" -" Pool: %s\n" -" Media type: %s\n" +#: src/lib/util.c:461 +msgid "Recycle" msgstr "" -#: src/stored/status.c:322 -#, c-format -msgid "" -" Device is BLOCKED waiting to create a volume for:\n" -" Pool: %s\n" -" Media type: %s\n" +#: src/lib/util.c:462 +msgid "Read-Only" msgstr "" -#: src/stored/status.c:333 -msgid " Device is BLOCKED waiting for media.\n" +#: src/lib/util.c:474 +msgid "Invalid volume status" msgstr "" -#: src/stored/status.c:339 -msgid " Device is being initialized.\n" +#: src/lib/util.c:736 src/lib/util.c:746 src/lib/util.c:754 src/lib/util.c:761 +#: src/lib/util.c:768 src/lib/util.c:782 src/lib/util.c:792 src/lib/util.c:805 +#: src/lib/util.c:816 src/filed/restore.c:1180 +msgid "*none*" msgstr "" -#: src/stored/status.c:343 -msgid " Device is blocked labeling a Volume.\n" +#: src/lib/util.c:854 +msgid "Working directory not defined. Cannot continue.\n" msgstr "" -#: src/stored/status.c:352 +#: src/lib/util.c:857 #, c-format -msgid " Slot %d %s loaded in drive %d.\n" +msgid "Working Directory: \"%s\" not found. Cannot continue.\n" msgstr "" -#: src/stored/status.c:356 +#: src/lib/util.c:861 #, c-format -msgid " Drive %d is not loaded.\n" +msgid "Working Directory: \"%s\" is not a directory. Cannot continue.\n" msgstr "" -#: src/stored/status.c:371 src/stored/btape.c:688 -#, c-format -msgid "Configured device capabilities:\n" +#: src/lib/devlock.c:318 src/lib/save/devlock.c:337 +msgid "writeunlock called too many times.\n" msgstr "" -#: src/stored/status.c:389 -msgid "Device state:\n" +#: src/lib/devlock.c:323 src/lib/save/devlock.c:342 +msgid "writeunlock by non-owner.\n" msgstr "" -#: src/stored/status.c:405 +#: src/lib/devlock.c:489 src/lib/save/devlock.c:508 src/lib/rwlock.c:425 #, c-format -msgid " num_writers=%d reserves=%d block=%d\n" -msgstr "" - -#: src/stored/status.c:409 -msgid "Attached Jobs: " +msgid "Thread %d found unchanged elements %d times\n" msgstr "" -#: src/stored/status.c:427 src/stored/btape.c:720 +#: src/lib/devlock.c:559 src/lib/save/devlock.c:578 src/lib/rwlock.c:495 #, c-format -msgid "Device parameters:\n" +msgid "%02d: interval %d, writes %d, reads %d\n" msgstr "" -#: src/stored/status.c:429 +#: src/lib/devlock.c:569 src/lib/save/devlock.c:588 src/lib/rwlock.c:505 #, c-format -msgid " Archive name: %s Device name: %s\n" +msgid "data %02d: value %d, %d writes\n" msgstr "" -#: src/stored/status.c:432 +#: src/lib/devlock.c:574 src/lib/save/devlock.c:593 src/lib/rwlock.c:510 #, c-format -msgid " File=%u block=%u\n" +msgid "Total: %d thread writes, %d data writes\n" msgstr "" -#: src/stored/status.c:434 -#, c-format -msgid " Min block=%u Max block=%u\n" +#: src/lib/devlock.c:646 src/lib/save/devlock.c:665 src/lib/rwlock.c:582 +msgid "Try write lock" msgstr "" -#: src/stored/status.c:455 -#, c-format -msgid "%s Job %s waiting for Client connection.\n" +#: src/lib/devlock.c:652 src/lib/save/devlock.c:671 src/lib/rwlock.c:588 +msgid "Try read lock" msgstr "" -#: src/stored/status.c:471 -#, c-format -msgid "" -"Reading: %s %s job %s JobId=%d Volume=\"%s\"\n" -" pool=\"%s\" device=%s\n" +#: src/lib/devlock.c:708 src/lib/save/devlock.c:727 src/lib/rwlock.c:644 +msgid "Create thread" msgstr "" -#: src/stored/status.c:484 -#, c-format -msgid "" -"Writing: %s %s job %s JobId=%d Volume=\"%s\"\n" -" pool=\"%s\" device=%s\n" +#: src/lib/devlock.c:718 src/lib/save/devlock.c:737 src/lib/rwlock.c:654 +msgid "Join thread" msgstr "" -#: src/stored/status.c:495 +#: src/lib/devlock.c:720 src/lib/save/devlock.c:739 src/lib/rwlock.c:656 #, c-format -msgid " spooling=%d despooling=%d despool_wait=%d\n" +msgid "%02d: interval %d, updates %d, r_collisions %d, w_collisions %d\n" msgstr "" -#: src/stored/status.c:511 +#: src/lib/devlock.c:732 src/lib/save/devlock.c:751 src/lib/rwlock.c:668 #, c-format -msgid " Files=%s Bytes=%s AveBytes/sec=%s LastBytes/sec=%s\n" +msgid "data %02d: value %d, %d updates\n" msgstr "" -#: src/stored/status.c:523 -#, c-format -msgid " FDReadSeqNo=%s in_msg=%u out_msg=%d fd=%d\n" +#: src/lib/jcr.c:222 +msgid "Verifying" msgstr "" -#: src/stored/status.c:529 -msgid " FDSocket closed\n" +#: src/lib/jcr.c:224 +msgid "Restoring" msgstr "" -#: src/stored/status.c:550 -msgid "" -"\n" -"Jobs waiting to reserve a drive:\n" +#: src/lib/jcr.c:226 +msgid "Archiving" msgstr "" -#: src/stored/status.c:581 -msgid "===================================================================\n" +#: src/lib/jcr.c:228 +msgid "Copying" msgstr "" -#: src/stored/status.c:663 src/lib/util.c:423 src/filed/status.c:517 -msgid "Base" +#: src/lib/jcr.c:230 +msgid "Migration" msgstr "" -#: src/stored/status.c:680 src/filed/status.c:534 -msgid "Init Catalog" +#: src/lib/jcr.c:232 +msgid "Scanning" msgstr "" -#: src/stored/status.c:683 src/filed/status.c:537 -msgid "Volume to Catalog" +#: src/lib/jcr.c:234 +msgid "Unknown operation" msgstr "" -#: src/stored/status.c:686 src/filed/status.c:540 -msgid "Disk to Catalog" +#: src/lib/jcr.c:243 +msgid "backup" msgstr "" -#: src/stored/status.c:689 src/filed/status.c:543 -msgid "Data" +#: src/lib/jcr.c:245 +msgid "verified" msgstr "" -#: src/stored/status.c:695 src/lib/util.c:459 src/filed/status.c:549 -msgid "Unknown Job Level" +#: src/lib/jcr.c:245 +msgid "verify" msgstr "" -#: src/stored/status.c:763 -#, c-format -msgid "3900 No arg in .status command: %s\n" +#: src/lib/jcr.c:247 +msgid "restored" msgstr "" -#: src/stored/status.c:811 -#, c-format -msgid "3900 Unknown arg in .status command: %s\n" +#: src/lib/jcr.c:247 +msgid "restore" msgstr "" -#: src/stored/status.c:826 -msgid "Bacula Storage: Idle" +#: src/lib/jcr.c:249 +msgid "archived" msgstr "" -#: src/stored/status.c:837 -msgid "Bacula Storage: Running" +#: src/lib/jcr.c:249 +msgid "archive" msgstr "" -#: src/stored/status.c:851 -msgid "Bacula Storage: Last Job Canceled" +#: src/lib/jcr.c:251 +msgid "copied" msgstr "" -#: src/stored/status.c:855 -msgid "Bacula Storage: Last Job Failed" +#: src/lib/jcr.c:251 +msgid "copy" msgstr "" -#: src/stored/status.c:859 -msgid "Bacula Storage: Last Job had Warnings" +#: src/lib/jcr.c:253 +msgid "migrated" msgstr "" -#: src/stored/read_record.c:89 -#, c-format -msgid "End of Volume at file %u on device %s, Volume \"%s\"\n" +#: src/lib/jcr.c:253 +msgid "migrate" msgstr "" -#: src/stored/read_record.c:93 -msgid "End of all volumes.\n" +#: src/lib/jcr.c:255 +msgid "scanned" msgstr "" -#: src/stored/read_record.c:137 -msgid "part" +#: src/lib/jcr.c:255 +msgid "scan" msgstr "" -#: src/stored/read_record.c:140 -msgid "file" +#: src/lib/jcr.c:257 +msgid "unknown action" msgstr "" -#: src/stored/read_record.c:143 +#: src/lib/jcr.c:309 src/lib/lockmgr.c:301 src/lib/lockmgr.c:756 +#: src/lib/lockmgr.c:784 #, c-format -msgid "End of %s %u on device %s, Volume \"%s\"\n" +msgid "pthread key create failed: ERR=%s\n" msgstr "" -#: src/stored/read_record.c:158 -msgid "Did fsr in attemp to skip bad record.\n" +#: src/lib/jcr.c:331 +#, c-format +msgid "pthread_once failed. ERR=%s\n" msgstr "" -#: src/stored/read_record.c:397 +#: src/lib/jcr.c:338 #, c-format -msgid "Forward spacing Volume \"%s\" to file:block %u:%u.\n" +msgid "Could not init msg_queue mutex. ERR=%s\n" msgstr "" -#: src/stored/read_record.c:421 -msgid "Begin Session" +#: src/lib/jcr.c:392 +msgid "NULL jcr.\n" msgstr "" -#: src/stored/read_record.c:425 -msgid "End Session" +#: src/lib/jcr.c:496 +#, c-format +msgid "JCR use_count=%d JobId=%d\n" msgstr "" -#: src/stored/read_record.c:431 +#: src/lib/jcr.c:601 #, c-format -msgid "Unknown code %d\n" +msgid "pthread_setspecific failed: ERR=%s\n" msgstr "" -#: src/stored/bextract.c:80 +#: src/lib/jcr.c:1082 #, c-format msgid "" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: bextract \n" -" -b specify a bootstrap file\n" -" -c specify a Storage configuration file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -e exclude list\n" -" -i include list\n" -" -p proceed inspite of I/O errors\n" -" -v verbose\n" -" -V specify Volume names (separated by |)\n" -" -? print this message\n" -"\n" +"Watchdog sending kill after %d secs to thread stalled reading Storage " +"daemon.\n" msgstr "" -#: src/stored/bextract.c:196 src/stored/bcopy.c:161 src/stored/bscan.c:248 -#: src/tools/bvfs_test.c:201 src/tools/bbatch.c:190 src/tools/ing_test.c:185 -#: src/tools/cats_test.c:321 -msgid "Wrong number of arguments: \n" +#: src/lib/jcr.c:1094 +#, c-format +msgid "" +"Watchdog sending kill after %d secs to thread stalled reading File daemon.\n" msgstr "" -#: src/stored/bextract.c:218 +#: src/lib/jcr.c:1106 #, c-format -msgid "%d Program Name and/or Program Data Stream records ignored.\n" +msgid "" +"Watchdog sending kill after %d secs to thread stalled reading Director.\n" msgstr "" -#: src/stored/bextract.c:222 +#: src/lib/lex.c:77 #, c-format -msgid "%d Win32 data or Win32 gzip data stream records. Ignored.\n" +msgid "Problem probably begins at line %d.\n" msgstr "" -#: src/stored/bextract.c:249 +#: src/lib/lex.c:82 #, c-format -msgid "Cannot stat %s. It must exist. ERR=%s\n" +msgid "" +"Config error: %s\n" +" : line %d, col %d of file %s\n" +"%s\n" +"%s" msgstr "" -#: src/stored/bextract.c:253 +#: src/lib/lex.c:86 #, c-format -msgid "%s must be a directory.\n" +msgid "Config error: %s\n" msgstr "" -#: src/stored/bextract.c:274 -#, c-format -msgid "%u files restored.\n" +#: src/lib/lex.c:115 +msgid "Close of NULL file\n" +msgstr "" + +#: src/lib/lex.c:212 +msgid "" +"get_char: called after EOF. You may have a open double quote without the " +"closing double quote.\n" msgstr "" -#: src/stored/bextract.c:284 src/stored/bextract.c:290 -#: src/filed/restore.c:1480 +#: src/lib/lex.c:254 #, c-format -msgid "Write error on %s: %s\n" +msgid "Config token too long, file: %s, line %d, begins at line %d\n" msgstr "" -#: src/stored/bextract.c:321 src/stored/bextract.c:587 -msgid "Logic error output file should be open but is not.\n" +#: src/lib/lex.c:278 +msgid "none" msgstr "" -#: src/stored/bextract.c:335 src/filed/restore.c:569 -#, c-format -msgid "%s stream not supported on this Client.\n" +#: src/lib/lex.c:279 +msgid "comment" msgstr "" -#: src/stored/bextract.c:345 -#, c-format -msgid "%s was deleted.\n" +#: src/lib/lex.c:280 +msgid "number" msgstr "" -#: src/stored/bextract.c:393 -#, c-format -msgid "Seek error on %s: %s\n" +#: src/lib/lex.c:281 +msgid "ip_addr" msgstr "" -#: src/stored/bextract.c:429 src/stored/bextract.c:494 -#: src/filed/restore.c:1335 -#, c-format -msgid "Seek to %s error on %s: ERR=%s\n" +#: src/lib/lex.c:282 +msgid "identifier" msgstr "" -#: src/stored/bextract.c:448 -#, c-format -msgid "Uncompression error. ERR=%d\n" +#: src/lib/lex.c:283 +msgid "string" msgstr "" -#: src/stored/bextract.c:462 src/filed/restore.c:1450 -msgid "GZIP data stream found, but GZIP not configured!\n" +#: src/lib/lex.c:284 +msgid "quoted_string" msgstr "" -#: src/stored/bextract.c:517 src/filed/restore.c:1376 -#, c-format -msgid "Compressed header version error. version=0x%x\n" +#: src/lib/lex.c:285 +msgid "include" msgstr "" -#: src/stored/bextract.c:522 src/filed/restore.c:1381 -#, c-format -msgid "Compressed header size error. comp_len=%d, msglen=%d\n" +#: src/lib/lex.c:286 +msgid "include_quoted_string" msgstr "" -#: src/stored/bextract.c:544 -#, c-format -msgid "LZO uncompression error. ERR=%d\n" +#: src/lib/lex.c:287 +msgid "UTF-8 Byte Order Mark" +msgstr "" + +#: src/lib/lex.c:288 +msgid "UTF-16le Byte Order Mark" msgstr "" -#: src/stored/bextract.c:556 src/filed/restore.c:1414 +#: src/lib/lex.c:326 src/lib/lex.c:332 src/lib/lex.c:343 src/lib/lex.c:349 #, c-format -msgid "Compression algorithm 0x%x found, but not supported!\n" +msgid "expected a positive integer number, got: %s" msgstr "" -#: src/stored/bextract.c:578 -msgid "Got Program Name or Data Stream. Ignored.\n" +#: src/lib/lex.c:465 +msgid "" +"This config file appears to be in an unsupported Unicode format (UTF-16be). " +"Please resave as UTF-8\n" msgstr "" -#: src/stored/bextract.c:592 src/filed/restore.c:328 src/filed/restore.c:1033 +#: src/lib/lex.c:611 src/lib/lex.c:639 #, c-format -msgid "Unknown stream=%d ignored. This shouldn't happen!\n" +msgid "Cannot open included config file %s: %s\n" msgstr "" -#: src/stored/bcopy.c:74 +#: src/lib/lex.c:698 src/lib/lex.c:755 #, c-format -msgid "" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: bcopy [-d debug_level] \n" -" -b bootstrap specify a bootstrap file\n" -" -c specify a Storage configuration file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -i specify input Volume names (separated by |)\n" -" -o specify output Volume names (separated by |)\n" -" -p proceed inspite of errors\n" -" -v verbose\n" -" -w specify working directory (default /tmp)\n" -" -? print this message\n" -"\n" +msgid "expected an integer or a range, got %s: %s" msgstr "" -#: src/stored/bcopy.c:202 src/stored/device.c:298 src/stored/btape.c:473 +#: src/lib/lex.c:712 src/lib/lex.c:720 src/lib/lex.c:731 src/lib/lex.c:739 #, c-format -msgid "dev open failed: %s\n" +msgid "expected an integer number, got %s: %s" msgstr "" -#: src/stored/bcopy.c:217 -msgid "Write of last block failed.\n" +#: src/lib/lex.c:769 +#, c-format +msgid "expected a name, got %s: %s" msgstr "" -#: src/stored/bcopy.c:221 +#: src/lib/lex.c:773 #, c-format -msgid "%u Jobs copied. %u records copied.\n" +msgid "name %s length %d too long, max is %d\n" msgstr "" -#: src/stored/bcopy.c:238 src/stored/bscan.c:428 +#: src/lib/lex.c:781 #, c-format -msgid "Record: SessId=%u SessTim=%u FileIndex=%d Stream=%d len=%u\n" +msgid "expected a string, got %s: %s" msgstr "" -#: src/stored/bcopy.c:254 -msgid "Volume is prelabeled. This volume cannot be copied.\n" +#: src/lib/bpipe.c:365 src/lib/bpipe.c:448 +msgid "Program killed by Bacula (timeout)\n" msgstr "" -#: src/stored/bcopy.c:257 -msgid "Volume label not copied.\n" +#: src/lib/btimers.c:253 +msgid "stop_btimer called with NULL btimer_id\n" msgstr "" -#: src/stored/bcopy.c:263 -msgid "Copy skipped. Record does not match BSR filter.\n" +#: src/lib/bsys.c:133 +#, c-format +msgid "safe_unlink could not compile regex pattern \"%s\" ERR=%s\n" msgstr "" -#: src/stored/bcopy.c:280 src/stored/bcopy.c:288 src/stored/bcopy.c:316 -#: src/stored/btape.c:2756 +#: src/lib/bsys.c:333 src/lib/bsys.c:350 src/lib/bsys.c:374 src/lib/bsys.c:387 #, c-format -msgid "Cannot fixup device error. %s\n" +msgid "Out of memory: ERR=%s\n" msgstr "" -#: src/stored/bcopy.c:294 -msgid "EOM label not copied.\n" +#: src/lib/bsys.c:429 +msgid "Buffer overflow.\n" msgstr "" -#: src/stored/bcopy.c:297 -msgid "EOT label not copied.\n" +#: src/lib/bsys.c:495 +msgid "Bad errno" msgstr "" -#: src/stored/dvd.c:111 -msgid "No FreeSpace command defined.\n" +#: src/lib/bsys.c:510 +#, c-format +msgid "Memset for %d bytes at %s:%d\n" msgstr "" -#: src/stored/dvd.c:145 +#: src/lib/bsys.c:540 #, c-format -msgid "Cannot run free space command. Results=%s ERR=%s\n" +msgid "Cannot open pid file. %s ERR=%s\n" msgstr "" -#: src/stored/dvd.c:261 +#: src/lib/bsys.c:555 #, c-format -msgid "Error writing part %d to the DVD: ERR=%s\n" +msgid "" +"%s is already running. pid=%d\n" +"Check file %s\n" msgstr "" -#: src/stored/dvd.c:263 +#: src/lib/bsys.c:569 #, c-format -msgid "Error while writing current part to the DVD: %s" +msgid "Could not open pid file. %s ERR=%s\n" msgstr "" -#: src/stored/dvd.c:273 +#: src/lib/bsys.c:680 #, c-format -msgid "Part %d (%lld bytes) written to DVD.\n" +msgid "Could not create state file. %s ERR=%s\n" msgstr "" -#: src/stored/dvd.c:292 +#: src/lib/bsys.c:699 #, c-format -msgid "Remaining free space %s on %s\n" +msgid "Write final hdr error: ERR=%s\n" msgstr "" -#: src/stored/dvd.c:358 +#: src/lib/bsock.c:111 #, c-format -msgid "Next Volume part already exists on DVD. Cannot continue: %s\n" +msgid "" +"Could not connect to %s on %s:%d. ERR=%s\n" +"Retrying ...\n" msgstr "" -#: src/stored/dvd.c:563 +#: src/lib/bsock.c:117 #, c-format -msgid "" -"Error writing. Current part less than total number of parts (%d/%d, device=" -"%s)\n" +msgid "Unable to connect to %s on %s:%d. ERR=%s\n" msgstr "" -#: src/stored/dvd.c:570 +#: src/lib/bsock.c:193 #, c-format -msgid "Unable to write last on %s: ERR=%s\n" +msgid "gethostbyname() for host \"%s\" failed: ERR=%s\n" msgstr "" -#: src/stored/butil.c:59 -msgid "Nohdr," +#: src/lib/bsock.c:225 src/lib/bsock.c:227 +#, c-format +msgid "Socket open error. proto=%d port=%d. ERR=%s\n" msgstr "" -#: src/stored/butil.c:62 -msgid "partial," +#: src/lib/bsock.c:240 src/lib/bsock.c:242 +#, c-format +msgid "Source address bind error. proto=%d. ERR=%s\n" msgstr "" -#: src/stored/butil.c:65 -msgid "empty," +#: src/lib/bsock.c:254 src/lib/bsock.c:293 src/lib/bnet_server.c:212 +#, c-format +msgid "Cannot set SO_KEEPALIVE on socket: %s\n" msgstr "" -#: src/stored/butil.c:68 -msgid "Nomatch," +#: src/lib/bsock.c:262 +#, c-format +msgid "Cannot set TCP_KEEPIDLE on socket: %s\n" msgstr "" -#: src/stored/butil.c:71 -msgid "cont," +#: src/lib/bsock.c:327 +#, c-format +msgid "Could not init bsock mutex. ERR=%s\n" msgstr "" -#: src/stored/butil.c:148 -msgid "Volume name or names is too long. Please use a .bsr file.\n" +#: src/lib/bsock.c:364 +msgid "Socket is closed\n" msgstr "" -#: src/stored/butil.c:168 +#: src/lib/bsock.c:370 #, c-format -msgid "Cannot find device \"%s\" in config file %s.\n" +msgid "Socket has errors=%d on call to %s:%s:%d\n" msgstr "" -#: src/stored/butil.c:175 +#: src/lib/bsock.c:377 #, c-format -msgid "Cannot init device %s\n" +msgid "Socket is terminated=%d on call to %s:%s:%d\n" msgstr "" -#: src/stored/butil.c:195 +#: src/lib/bsock.c:385 #, c-format -msgid "Cannot open %s\n" +msgid "Socket has insane msglen=%d on call to %s:%s:%d\n" msgstr "" -#: src/stored/butil.c:282 +#: src/lib/bsock.c:426 #, c-format -msgid "Could not find device \"%s\" in config file %s.\n" +msgid "Write error sending %d bytes to %s:%s:%d: ERR=%s\n" msgstr "" -#: src/stored/butil.c:287 +#: src/lib/bsock.c:432 #, c-format -msgid "Using device: \"%s\" for reading.\n" +msgid "Wrote %d bytes to %s:%s:%d, but only %d accepted.\n" msgstr "" -#: src/stored/butil.c:290 +#: src/lib/bsock.c:527 src/lib/bsock.c:588 #, c-format -msgid "Using device: \"%s\" for writing.\n" +msgid "Read expected %d got %d from %s:%s:%d\n" msgstr "" -#: src/stored/butil.c:306 -msgid "Unexpected End of Data\n" +#: src/lib/bsock.c:547 +#, c-format +msgid "Packet size=%d too big from \"%s:%s:%d. Terminating connection.\n" msgstr "" -#: src/stored/butil.c:308 -msgid "Unexpected End of Tape\n" +#: src/lib/bsock.c:577 +#, c-format +msgid "Read error from %s:%s:%d: ERR=%s\n" msgstr "" -#: src/stored/butil.c:310 -msgid "Unexpected End of File\n" +#: src/lib/bsock.c:651 +#, c-format +msgid "fread attr spool error. Wanted=%d got=%d bytes. ERR=%s\n" msgstr "" -#: src/stored/butil.c:312 -msgid "Tape Door is Open\n" +#: src/lib/bsock.c:669 +msgid "fread attr spool I/O error.\n" msgstr "" -#: src/stored/butil.c:314 -msgid "Unexpected Tape is Off-line\n" +#: src/lib/bsock.c:730 +msgid "Could not malloc BSOCK data buffer\n" msgstr "" -#: src/stored/acquire.c:74 +#: src/lib/bsock.c:748 src/lib/bsock.c:767 #, c-format -msgid "Acquire read: num_writers=%d not zero. Job %d canceled.\n" +msgid "sockopt error: %s\n" msgstr "" -#: src/stored/acquire.c:83 +#: src/lib/bsock.c:754 src/lib/bsock.c:773 #, c-format -msgid "No volumes specified for reading. Job %s canceled.\n" +msgid "Warning network buffer = %d bytes not max size.\n" msgstr "" -#: src/stored/acquire.c:92 +#: src/lib/bsock.c:793 src/lib/bsock.c:827 #, c-format -msgid "Logic error: no next volume to read. Numvol=%d Curvol=%d\n" +msgid "fcntl F_GETFL error. ERR=%s\n" msgstr "" -#: src/stored/acquire.c:118 +#: src/lib/bsock.c:799 src/lib/bsock.c:833 src/lib/bsock.c:865 #, c-format -msgid "" -"Changing read device. Want Media Type=\"%s\" have=\"%s\"\n" -" device=%s\n" +msgid "fcntl F_SETFL error. ERR=%s\n" msgstr "" -#: src/stored/acquire.c:162 +#: src/lib/bsock.c:1065 src/qt-console/bcomm/dircomm_auth.cpp:107 #, c-format -msgid "Media Type change. New read device %s chosen.\n" +msgid "Director authorization problem at \"%s:%d\"\n" msgstr "" -#: src/stored/acquire.c:174 +#: src/lib/bsock.c:1072 src/qt-console/bcomm/dircomm_auth.cpp:114 #, c-format -msgid "No suitable device found to read Volume \"%s\"\n" +msgid "" +"Authorization problem: Remote server at \"%s:%d\" did not advertise required " +"TLS support.\n" msgstr "" -#: src/stored/acquire.c:213 +#: src/lib/bsock.c:1080 src/qt-console/bcomm/dircomm_auth.cpp:122 #, c-format -msgid "Job %s canceled.\n" +msgid "" +"Authorization problem with Director at \"%s:%d\": Remote server requires " +"TLS.\n" msgstr "" -#: src/stored/acquire.c:231 +#: src/lib/bsock.c:1092 src/qt-console/bcomm/dircomm_auth.cpp:133 #, c-format -msgid "Read open device %s Volume \"%s\" failed: ERR=%s\n" +msgid "TLS negotiation failed with Director at \"%s:%d\"\n" msgstr "" -#: src/stored/acquire.c:321 +#: src/lib/bsock.c:1102 src/qt-console/bcomm/dircomm_auth.cpp:145 #, c-format -msgid "Too many errors trying to mount device %s for reading.\n" +msgid "" +"Bad response to Hello command: ERR=%s\n" +"The Director at \"%s:%d\" is probably not running.\n" msgstr "" -#: src/stored/acquire.c:329 +#: src/lib/bsock.c:1111 src/qt-console/bcomm/dircomm_auth.cpp:154 #, c-format -msgid "Ready to read from volume \"%s\" on device %s.\n" +msgid "Director at \"%s:%d\" rejected Hello command\n" msgstr "" -#: src/stored/acquire.c:381 +#: src/lib/bsock.c:1121 src/qt-console/bcomm/dircomm_auth.cpp:169 #, c-format -msgid "Want to append, but device %s is busy reading.\n" +msgid "" +"Authorization problem with Director at \"%s:%d\"\n" +"Most likely the passwords do not agree.\n" +"If you are using TLS, there may have been a certificate validation error " +"during the TLS handshake.\n" +"Please see " msgstr "" -#: src/stored/acquire.c:414 -#, c-format -msgid "Could not ready device %s for append.\n" +#: src/lib/parse_conf.c:165 +msgid "***UNKNOWN***" msgstr "" -#: src/stored/acquire.c:501 src/stored/spool.c:321 src/stored/block.c:386 -#: src/stored/block.c:769 src/stored/block.c:847 +#: src/lib/parse_conf.c:213 src/dird/dird_conf.c:1431 +#: src/qt-console/tray-monitor/tray_conf.cpp:282 #, c-format -msgid "Could not create JobMedia record for Volume=\"%s\" Job=%s\n" +msgid "Too many items in %s resource\n" msgstr "" -#: src/stored/acquire.c:552 +#: src/lib/parse_conf.c:266 src/lib/parse_conf.c:287 #, c-format -msgid "Alert: %s" +msgid "expected an =, got: %s" msgstr "" -#: src/stored/acquire.c:560 +#: src/lib/parse_conf.c:296 #, c-format -msgid "3997 Bad alert command: %s: ERR=%s.\n" +msgid "Unknown item code: %d\n" msgstr "" -#: src/stored/acquire.c:629 src/stored/dev.c:270 src/stored/dev.c:311 -#: src/lib/openssl.c:122 src/lib/openssl.c:181 +#: src/lib/parse_conf.c:336 #, c-format -msgid "Unable to init mutex: ERR=%s\n" +msgid "message type: %s not found" msgstr "" -#: src/stored/acquire.c:635 +#: src/lib/parse_conf.c:374 #, c-format -msgid "Unable to init r_mutex: ERR=%s\n" +msgid "Attempt to redefine name \"%s\" to \"%s\"." msgstr "" -#: src/stored/askdir.c:179 -msgid "Network error on bnet_recv in req_vol_info.\n" +#: src/lib/parse_conf.c:466 src/dird/dird_conf.c:1896 +#, c-format +msgid "Could not find config Resource %s referenced on line %d : %s\n" msgstr "" -#: src/stored/askdir.c:197 +#: src/lib/parse_conf.c:471 #, c-format -msgid "Error getting Volume info: %s" +msgid "Attempt to redefine resource \"%s\" referenced on line %d : %s\n" msgstr "" -#: src/stored/askdir.c:376 +#: src/lib/parse_conf.c:507 #, c-format -msgid "Didn't get vol info vol=%s: ERR=%s" +msgid "Too many %s directives. Max. is %d. line %d: %s\n" msgstr "" -#: src/stored/askdir.c:432 +#: src/lib/parse_conf.c:518 #, c-format -msgid "Error creating JobMedia record: ERR=%s\n" +msgid "Could not find config Resource \"%s\" referenced on line %d : %s\n" msgstr "" -#: src/stored/askdir.c:439 +#: src/lib/parse_conf.c:581 #, c-format -msgid "Error creating JobMedia record: %s\n" +msgid "Missing config Resource \"%s\" referenced on line %d : %s\n" msgstr "" -#: src/stored/askdir.c:522 +#: src/lib/parse_conf.c:653 #, c-format -msgid "Job %s canceled while waiting for mount on Storage Device \"%s\".\n" +msgid "expected a size number, got: %s" msgstr "" -#: src/stored/askdir.c:533 +#: src/lib/parse_conf.c:658 #, c-format -msgid "" -"Job %s is waiting. Cannot find any appendable volumes.\n" -"Please use the \"label\" command to create a new Volume for:\n" -" Storage: %s\n" -" Pool: %s\n" -" Media type: %s\n" +msgid "expected a speed number, got: %s" msgstr "" -#: src/stored/askdir.c:558 src/stored/askdir.c:658 +#: src/lib/parse_conf.c:669 #, c-format -msgid "Max time exceeded waiting to mount Storage Device %s for Job %s\n" +msgid "expected a %s, got: %s" msgstr "" -#: src/stored/askdir.c:568 -msgid "pthread error in mount_next_volume.\n" +#: src/lib/parse_conf.c:670 +msgid "size" msgstr "" -#: src/stored/askdir.c:601 -msgid "Cannot request another volume: no volume name given.\n" +#: src/lib/parse_conf.c:670 +msgid "speed" msgstr "" -#: src/stored/askdir.c:607 +#: src/lib/parse_conf.c:724 src/lib/parse_conf.c:730 src/dird/run_conf.c:315 #, c-format -msgid "Job %s canceled while waiting for mount on Storage Device %s.\n" +msgid "expected a time period, got: %s" msgstr "" -#: src/stored/askdir.c:624 +#: src/lib/parse_conf.c:749 src/lib/parse_conf.c:765 src/lib/ini.c:590 +#: src/dird/dird_conf.c:1874 src/dird/dird_conf.c:1990 #, c-format -msgid "" -"Please mount append Volume \"%s\" or label a new one for:\n" -" Job: %s\n" -" Storage: %s\n" -" Pool: %s\n" -" Media type: %s\n" +msgid "Expect %s, got: %s" msgstr "" -#: src/stored/askdir.c:630 +#: src/lib/parse_conf.c:791 #, c-format -msgid "" -"Please mount read Volume \"%s\" for:\n" -" Job: %s\n" -" Storage: %s\n" -" Pool: %s\n" -" Media type: %s\n" -msgstr "" - -#: src/stored/askdir.c:668 -msgid "pthread error in mount_volume\n" +msgid "Expected a Tape Label keyword, got: %s" msgstr "" -#: src/stored/record.c:75 +#: src/lib/parse_conf.c:874 #, c-format -msgid "unknown: %d" +msgid "Unable to initialize resource lock. ERR=%s\n" msgstr "" -#: src/stored/record.c:392 -msgid "Damaged buffer\n" +#: src/lib/parse_conf.c:882 +msgid "Config filename too long.\n" msgstr "" -#: src/stored/record.c:670 +#: src/lib/parse_conf.c:905 #, c-format -msgid "Sanity check failed. maxlen=%d datalen=%d. Block discarded.\n" +msgid "Cannot open config file \"%s\": %s\n" msgstr "" -#: src/stored/read.c:65 -msgid "No Volume names found for restore.\n" +#: src/lib/parse_conf.c:922 +msgid "" +"Currently we cannot handle UTF-16 source files. Please convert the conf file " +"to UTF-8\n" msgstr "" -#: src/stored/read.c:120 +#: src/lib/parse_conf.c:926 #, c-format -msgid ">filed: Error Hdr=%s\n" +msgid "Expected a Resource name identifier, got: %s" msgstr "" -#: src/stored/read.c:121 src/stored/read.c:136 +#: src/lib/parse_conf.c:942 #, c-format -msgid "Error sending to File daemon. ERR=%s\n" +msgid "expected resource name, got: %s" msgstr "" -#: src/stored/read.c:135 +#: src/lib/parse_conf.c:953 #, c-format -msgid "Error sending to FD. ERR=%s\n" +msgid "not in resource definition: %s" msgstr "" -#: src/stored/autochanger.c:65 +#: src/lib/parse_conf.c:964 src/dird/inc_conf.c:388 src/dird/inc_conf.c:732 +#: src/dird/dird_conf.c:2050 #, c-format -msgid "No Changer Name given for device %s. Cannot continue.\n" +msgid "expected an equals, got: %s" msgstr "" -#: src/stored/autochanger.c:71 +#: src/lib/parse_conf.c:978 #, c-format -msgid "No Changer Command given for device %s. Cannot continue.\n" +msgid "" +"Keyword \"%s\" not permitted in this resource.\n" +"Perhaps you left the trailing brace off of the previous resource." msgstr "" -#: src/stored/autochanger.c:139 -#, c-format -msgid "No slot defined in catalog (slot=%d) for Volume \"%s\" on %s.\n" +#: src/lib/parse_conf.c:989 +msgid "Name not specified for resource" msgstr "" -#: src/stored/autochanger.c:141 -msgid "Cartridge change or \"update slots\" may be required.\n" +#: src/lib/parse_conf.c:999 +#, c-format +msgid "unexpected token %d %s in resource definition" msgstr "" -#: src/stored/autochanger.c:147 +#: src/lib/parse_conf.c:1005 #, c-format -msgid "No \"Changer Device\" for %s. Manual load of Volume may be required.\n" +msgid "Unknown parser state %d\n" msgstr "" -#: src/stored/autochanger.c:154 +#: src/lib/parse_conf.c:1010 +msgid "End of conf file reached with unclosed resource." +msgstr "" + +#: src/lib/daemon.c:52 #, c-format -msgid "No \"Changer Command\" for %s. Manual load of Volume may be requird.\n" +msgid "Cannot fork to become daemon: ERR=%s\n" msgstr "" -#: src/stored/autochanger.c:185 +#: src/lib/lockmgr.c:53 #, c-format -msgid "3304 Issuing autochanger \"load slot %d, drive %d\" command.\n" +msgid "ASSERT failed at %s:%i: %s\n" msgstr "" -#: src/stored/autochanger.c:193 +#: src/lib/lockmgr.c:58 #, c-format -msgid "3305 Autochanger \"load slot %d, drive %d\", status is OK.\n" +msgid "ASSERT failed at %s:%i: %s \n" msgstr "" -#: src/stored/autochanger.c:206 +#: src/lib/lockmgr.c:64 #, c-format -msgid "" -"3992 Bad autochanger \"load slot %d, drive %d\": ERR=%s.\n" -"Results=%s\n" +msgid "ASSERT failed at %s:%i: %s (%s)\n" msgstr "" -#: src/stored/autochanger.c:268 +#: src/lib/lockmgr.c:95 #, c-format -msgid "3301 Issuing autochanger \"loaded? drive %d\" command.\n" +msgid "Mutex lock failure. ERR=%s\n" msgstr "" -#: src/stored/autochanger.c:280 +#: src/lib/lockmgr.c:105 #, c-format -msgid "3302 Autochanger \"loaded? drive %d\", result is Slot %d.\n" +msgid "Mutex unlock failure. ERR=%s\n" msgstr "" -#: src/stored/autochanger.c:287 +#: src/lib/lockmgr.c:768 #, c-format -msgid "3302 Autochanger \"loaded? drive %d\", result: nothing loaded.\n" +msgid "pthread_create failed: ERR=%s\n" msgstr "" -#: src/stored/autochanger.c:299 +#: src/lib/message.c:417 src/lib/message.c:427 #, c-format -msgid "" -"3991 Bad autochanger \"loaded? drive %d\" command: ERR=%s.\n" -"Results=%s\n" +msgid "Could not open console message file %s: ERR=%s\n" msgstr "" -#: src/stored/autochanger.c:316 +#: src/lib/message.c:432 #, c-format -msgid "Lock failure on autochanger. ERR=%s\n" +msgid "Could not get con mutex: ERR=%s\n" msgstr "" -#: src/stored/autochanger.c:330 -#, c-format -msgid "Unlock failure on autochanger. ERR=%s\n" +#: src/lib/message.c:537 +msgid "Bacula Message" msgstr "" -#: src/stored/autochanger.c:374 src/stored/autochanger.c:523 +#: src/lib/message.c:541 #, c-format -msgid "3307 Issuing autochanger \"unload slot %d, drive %d\" command.\n" +msgid "open mail pipe %s failed: ERR=%s\n" msgstr "" -#: src/stored/autochanger.c:387 -#, c-format -msgid "" -"3995 Bad autochanger \"unload slot %d, drive %d\": ERR=%s\n" -"Results=%s\n" +#: src/lib/message.c:632 +msgid "open mail pipe failed.\n" msgstr "" -#: src/stored/autochanger.c:473 +#: src/lib/message.c:645 #, c-format -msgid "Volume \"%s\" wanted on %s is in use by device %s\n" +msgid "close error: ERR=%s\n" msgstr "" -#: src/stored/autochanger.c:541 +#: src/lib/message.c:656 #, c-format -msgid "3997 Bad autochanger \"unload slot %d, drive %d\": ERR=%s.\n" +msgid "Mail prog: %s" msgstr "" -#: src/stored/autochanger.c:585 +#: src/lib/message.c:665 #, c-format -msgid "3993 Device %s not an autochanger device.\n" +msgid "" +"Mail program terminated in error.\n" +"CMD=%s\n" +"ERR=%s\n" msgstr "" -#: src/stored/autochanger.c:612 +#: src/lib/message.c:770 #, c-format -msgid "3306 Issuing autochanger \"%s\" command.\n" +msgid "fopen %s failed: ERR=%s\n" msgstr "" -#: src/stored/autochanger.c:615 -msgid "3996 Open bpipe failed.\n" +#: src/lib/message.c:892 src/lib/message.c:895 +msgid "Msg delivery error: Unable to store data in database.\n" msgstr "" -#: src/stored/autochanger.c:642 src/console/console.c:1458 +#: src/lib/message.c:947 #, c-format -msgid "Autochanger error: ERR=%s\n" +msgid "" +"Msg delivery error: Operator mail program terminated in error.\n" +"CMD=%s\n" +"ERR=%s\n" msgstr "" -#: src/stored/stored.c:87 +#: src/lib/message.c:968 #, c-format -msgid "" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: bacula-sd [options] [-c config_file] [config_file]\n" -" -c use as configuration file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -f run in foreground (for debugging)\n" -" -g set groupid to group\n" -" -m print kaboom output (for debugging)\n" -" -p proceed despite I/O errors\n" -" -s no signals (for debugging)\n" -" -t test - read config and exit\n" -" -u userid to \n" -" -v verbose user messages\n" -" -? print this message.\n" -"\n" +msgid "Msg delivery error: fopen %s failed: ERR=%s\n" msgstr "" -#: src/stored/stored.c:136 src/stored/btape.c:178 +#: src/lib/message.c:1287 #, c-format -msgid "Tape block size (%d) not multiple of system size (%d)\n" +msgid "%s: ABORTING due to ERROR in %s:%d\n" msgstr "" -#: src/stored/stored.c:140 src/stored/btape.c:182 +#: src/lib/message.c:1291 #, c-format -msgid "Tape block size (%d) is not a power of 2\n" +msgid "%s: ERROR TERMINATION at %s:%d\n" msgstr "" -#: src/stored/stored.c:268 -msgid "Volume Session Time is ZERO!\n" +#: src/lib/message.c:1296 +#, c-format +msgid "%s: Fatal Error because: " msgstr "" -#: src/stored/stored.c:277 +#: src/lib/message.c:1298 #, c-format -msgid "Unable to create thread. ERR=%s\n" +msgid "%s: Fatal Error at %s:%d because:\n" msgstr "" -#: src/stored/stored.c:310 src/stored/bscan.c:262 +#: src/lib/message.c:1302 #, c-format -msgid "No Storage resource defined in %s. Cannot continue.\n" +msgid "%s: ERROR: " msgstr "" -#: src/stored/stored.c:316 +#: src/lib/message.c:1304 #, c-format -msgid "Only one Storage resource permitted in %s\n" +msgid "%s: ERROR in %s:%d " msgstr "" -#: src/stored/stored.c:321 +#: src/lib/message.c:1307 #, c-format -msgid "No Director resource defined in %s. Cannot continue.\n" +msgid "%s: Warning: " msgstr "" -#: src/stored/stored.c:326 +#: src/lib/message.c:1310 #, c-format -msgid "No Device resource defined in %s. Cannot continue.\n" +msgid "%s: Security violation: " msgstr "" -#: src/stored/stored.c:334 +#: src/lib/message.c:1398 #, c-format -msgid "No Messages resource defined in %s. Cannot continue.\n" +msgid "%s ABORTING due to ERROR\n" msgstr "" -#: src/stored/stored.c:341 src/stored/bscan.c:270 +#: src/lib/message.c:1401 #, c-format -msgid "No Working Directory defined in %s. Cannot continue.\n" +msgid "%s ERROR TERMINATION\n" msgstr "" -#: src/stored/stored.c:363 +#: src/lib/message.c:1404 #, c-format -msgid "\"TLS Certificate\" file not defined for Storage \"%s\" in %s.\n" +msgid "%s JobId %u: Fatal error: " msgstr "" -#: src/stored/stored.c:369 +#: src/lib/message.c:1413 #, c-format -msgid "\"TLS Key\" file not defined for Storage \"%s\" in %s.\n" +msgid "%s JobId %u: Error: " msgstr "" -#: src/stored/stored.c:375 +#: src/lib/message.c:1419 #, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Storage \"%s\" in %s. At least one CA certificate store is required when " -"using \"TLS Verify Peer\".\n" +msgid "%s JobId %u: Warning: " msgstr "" -#: src/stored/stored.c:568 +#: src/lib/message.c:1425 #, c-format -msgid "Could not initialize %s\n" +msgid "%s JobId %u: Security violation: " msgstr "" -#: src/stored/stored.c:582 -#, c-format -msgid "Could not open device %s\n" +#: src/lib/message.c:1696 +msgid "Debug lock information" msgstr "" -#: src/stored/stored.c:596 -#, c-format -msgid "Could not mount device %s\n" +#: src/lib/message.c:1697 +msgid "Debug network information" msgstr "" -#: src/stored/device.c:120 -#, c-format -msgid "End of medium on Volume \"%s\" Bytes=%s Blocks=%s at %s.\n" +#: src/lib/message.c:1698 +msgid "Debug plugin information" msgstr "" -#: src/stored/device.c:139 -#, c-format -msgid "New volume \"%s\" mounted on device %s at %s.\n" +#: src/lib/message.c:1699 +msgid "Debug volume information" msgstr "" -#: src/stored/device.c:151 -#, c-format -msgid "write_block_to_device Volume label failed. ERR=%s" +#: src/lib/message.c:1700 +msgid "Debug SQL queries" msgstr "" -#: src/stored/device.c:186 -#, c-format -msgid "write_block_to_device overflow block failed. ERR=%s" +#: src/lib/message.c:1701 +msgid "Debug BVFS queries" msgstr "" -#: src/stored/device.c:191 -#, c-format -msgid "Catastrophic error. Cannot write overflow block to device %s. ERR=%s" +#: src/lib/message.c:1702 +msgid "Debug memory allocation" msgstr "" -#: src/stored/device.c:327 src/stored/dev.c:512 -#, c-format -msgid "Unable to open device %s: ERR=%s\n" +#: src/lib/message.c:1703 +msgid "Debug scheduler information" msgstr "" -#: src/stored/device.c:329 -#, c-format -msgid "Unable to open archive %s: ERR=%s\n" +#: src/lib/message.c:1704 +msgid "Debug protocol information" msgstr "" -#: src/stored/fd_cmds.c:166 -#, c-format -msgid "Command error with FD, hanging up. %s\n" +#: src/lib/message.c:1705 +msgid "Debug all information" msgstr "" -#: src/stored/fd_cmds.c:169 -msgid "Command error with FD, hanging up.\n" +#: src/lib/edit.c:476 +msgid "Empty name not allowed.\n" msgstr "" -#: src/stored/fd_cmds.c:180 +#: src/lib/edit.c:486 #, c-format -msgid "FD command not found: %s\n" +msgid "Illegal character \"%c\" in name.\n" msgstr "" -#: src/stored/fd_cmds.c:206 -msgid "Append data error.\n" +#: src/lib/edit.c:493 +msgid "Name too long.\n" msgstr "" -#: src/stored/fd_cmds.c:211 -msgid "Attempt to append on non-open session.\n" +#: src/lib/edit.c:499 src/dird/ua_label.c:656 src/dird/ua_cmds.c:345 +msgid "Volume name must be at least one character long.\n" msgstr "" -#: src/stored/fd_cmds.c:223 src/stored/fd_cmds.c:266 -msgid "Attempt to close non-open session.\n" +#: src/lib/tls.c:78 +#, c-format +msgid "" +"Error with certificate at depth: %d, issuer = %s, subject = %s, ERR=%d:%s\n" msgstr "" -#: src/stored/fd_cmds.c:241 -msgid "Attempt to open already open session.\n" +#: src/lib/tls.c:115 +msgid "Error initializing SSL context" msgstr "" -#: src/stored/fd_cmds.c:295 -msgid "Attempt to read on non-open session.\n" +#: src/lib/tls.c:136 +msgid "Error loading certificate verification stores" msgstr "" -#: src/stored/fd_cmds.c:313 src/stored/fd_cmds.c:322 -msgid "Attempt to open read on non-open session.\n" +#: src/lib/tls.c:141 +msgid "" +"Either a certificate file or a directory must be specified as a verification " +"store\n" msgstr "" -#: src/stored/mount.c:98 -#, c-format -msgid "Too many errors trying to mount device %s.\n" +#: src/lib/tls.c:152 +msgid "Error loading certificate file" msgstr "" -#: src/stored/mount.c:106 -#, c-format -msgid "Job %d canceled.\n" +#: src/lib/tls.c:160 +msgid "Error loading private key" msgstr "" -#: src/stored/mount.c:282 -#, c-format -msgid "Volume \"%s\" previously written, moving to end of data.\n" +#: src/lib/tls.c:168 +msgid "Unable to open DH parameters file" msgstr "" -#: src/stored/mount.c:288 -#, c-format -msgid "Unable to position to end of data on device %s: ERR=%s\n" +#: src/lib/tls.c:174 +msgid "Unable to load DH parameters from specified file" msgstr "" -#: src/stored/mount.c:411 src/stored/mount.c:737 -#, c-format -msgid "Volume \"%s\" not on device %s.\n" +#: src/lib/tls.c:178 +msgid "Failed to set TLS Diffie-Hellman parameters" msgstr "" -#: src/stored/mount.c:444 -#, c-format -msgid "" -"Director wanted Volume \"%s\".\n" -" Current Volume \"%s\" not acceptable because:\n" -" %s" +#: src/lib/tls.c:188 +msgid "Error setting cipher list, no valid ciphers available\n" msgstr "" -#: src/stored/mount.c:603 -#, c-format -msgid "Ready to append to end of Volume \"%s\" part=%d size=%s\n" +#: src/lib/tls.c:247 +msgid "Peer failed to present a TLS certificate\n" msgstr "" -#: src/stored/mount.c:607 +#: src/lib/tls.c:292 src/lib/tls.c:293 #, c-format -msgid "" -"Bacula cannot write on DVD Volume \"%s\" because: The sizes do not match! " -"Volume=%s Catalog=%s\n" +msgid "Peer %s failed to present a TLS certificate\n" msgstr "" -#: src/stored/mount.c:621 -#, c-format -msgid "Ready to append to end of Volume \"%s\" at file=%d.\n" +#: src/lib/tls.c:408 +msgid "Error creating file descriptor-based BIO" msgstr "" -#: src/stored/mount.c:624 -#, c-format -msgid "" -"For Volume \"%s\":\n" -"The number of files mismatch! Volume=%u Catalog=%u\n" -"Correcting Catalog\n" +#: src/lib/tls.c:419 +msgid "Error creating new SSL object" msgstr "" -#: src/stored/mount.c:631 src/stored/mount.c:659 -msgid "Error updating Catalog\n" +#: src/lib/tls.c:483 src/lib/tls.c:506 +msgid "Connect failure" msgstr "" -#: src/stored/mount.c:636 -#, c-format -msgid "" -"Bacula cannot write on tape Volume \"%s\" because:\n" -"The number of files mismatch! Volume=%u Catalog=%u\n" +#: src/lib/tls.c:586 src/lib/tls.c:590 +msgid "TLS shutdown failure." msgstr "" -#: src/stored/mount.c:647 -#, c-format -msgid "Ready to append to end of Volume \"%s\" size=%s\n" +#: src/lib/tls.c:645 src/lib/tls.c:671 +msgid "TLS read/write failure." msgstr "" -#: src/stored/mount.c:651 +#: src/lib/priv.c:56 #, c-format -msgid "" -"For Volume \"%s\":\n" -"The sizes do not match! Volume=%s Catalog=%s\n" -"Correcting Catalog\n" +msgid "Could not find userid=%s: ERR=%s\n" msgstr "" -#: src/stored/mount.c:664 +#: src/lib/priv.c:62 #, c-format -msgid "" -"Bacula cannot write on disk Volume \"%s\" because: The sizes do not match! " -"Volume=%s Catalog=%s\n" +msgid "Could not find password entry. ERR=%s\n" msgstr "" -#: src/stored/mount.c:727 +#: src/lib/priv.c:75 #, c-format -msgid "Labeled new Volume \"%s\" on device %s.\n" +msgid "Could not find group=%s: ERR=%s\n" msgstr "" -#: src/stored/mount.c:732 +#: src/lib/priv.c:83 #, c-format -msgid "Device %s not configured to autolabel Volumes.\n" +msgid "Could not initgroups for group=%s, userid=%s: ERR=%s\n" msgstr "" -#: src/stored/mount.c:751 +#: src/lib/priv.c:86 #, c-format -msgid "Marking Volume \"%s\" in Error in Catalog.\n" +msgid "Could not initgroups for userid=%s: ERR=%s\n" msgstr "" -#: src/stored/mount.c:768 +#: src/lib/priv.c:93 #, c-format -msgid "" -"Autochanger Volume \"%s\" not found in slot %d.\n" -" Setting InChanger to zero in catalog.\n" -msgstr "" - -#: src/stored/mount.c:787 -msgid "Hey!!!!! WroteVol non-zero !!!!!\n" +msgid "Could not set group=%s: ERR=%s\n" msgstr "" -#: src/stored/mount.c:834 +#: src/lib/priv.c:103 #, c-format -msgid "" -"Invalid tape position on volume \"%s\" on device %s. Expected %d, got %d\n" +msgid "prctl failed: ERR=%s\n" msgstr "" -#: src/stored/mount.c:875 src/stored/btape.c:3122 +#: src/lib/priv.c:107 #, c-format -msgid "Cannot open Dev=%s, Vol=%s\n" +msgid "setreuid failed: ERR=%s\n" msgstr "" -#: src/stored/mac.c:81 -msgid "Read and write devices not properly initialized.\n" +#: src/lib/priv.c:111 +#, c-format +msgid "cap_from_text failed: ERR=%s\n" msgstr "" -#: src/stored/mac.c:87 +#: src/lib/priv.c:115 #, c-format -msgid "No Volume names found for %s.\n" +msgid "cap_set_proc failed: ERR=%s\n" msgstr "" -#: src/stored/pythonsd.c:160 src/filed/pythonfd.c:142 -#, c-format -msgid "Cannot delete attribute %s" +#: src/lib/priv.c:119 +msgid "Keep readall caps not implemented this OS or missing libraries.\n" msgstr "" -#: src/stored/pythonsd.c:193 src/filed/pythonfd.c:160 src/filed/pythonfd.c:176 +#: src/lib/priv.c:123 #, c-format -msgid "Cannot find attribute %s" +msgid "Could not set specified userid: %s\n" msgstr "" -#: src/stored/pythonsd.c:208 -msgid "Error in ParseTuple\n" +#: src/lib/res.c:53 +#, c-format +msgid "rwl_writelock failure at %s:%d: ERR=%s\n" msgstr "" -#: src/stored/pythonsd.c:224 -msgid "Parse tuple error in job_write\n" +#: src/lib/res.c:63 +#, c-format +msgid "rwl_writeunlock failure at %s:%d:. ERR=%s\n" msgstr "" -#: src/stored/pythonsd.c:261 +#: src/lib/watchdog.c:84 #, c-format -msgid "Error in Python method %s\n" +msgid "Unable to initialize watchdog lock. ERR=%s\n" msgstr "" -#: src/stored/spool.c:83 -msgid "Spooling statistics:\n" +#: src/lib/watchdog.c:181 +msgid "BUG! register_watchdog called before start_watchdog\n" msgstr "" -#: src/stored/spool.c:86 +#: src/lib/watchdog.c:184 #, c-format -msgid "" -"Data spooling: %u active jobs, %s bytes; %u total jobs, %s max bytes/job.\n" +msgid "BUG! Watchdog %p has NULL callback\n" msgstr "" -#: src/stored/spool.c:94 +#: src/lib/watchdog.c:187 #, c-format -msgid "Attr spooling: %u active jobs, %s bytes; %u total jobs, %s max bytes.\n" +msgid "BUG! Watchdog %p has zero interval\n" msgstr "" -#: src/stored/spool.c:112 -msgid "Spooling data ...\n" +#: src/lib/watchdog.c:207 +msgid "BUG! unregister_watchdog_unlocked called before start_watchdog\n" msgstr "" -#: src/stored/spool.c:138 +#: src/lib/watchdog.c:327 #, c-format -msgid "Bad return from despool WroteVol=%d\n" +msgid "rwl_writelock failure. ERR=%s\n" msgstr "" -#: src/stored/spool.c:171 +#: src/lib/watchdog.c:342 #, c-format -msgid "Open data spool file %s failed: ERR=%s\n" +msgid "rwl_writeunlock failure. ERR=%s\n" msgstr "" -#: src/stored/spool.c:225 -msgid "Despooling zero bytes. Your disk is probably FULL!\n" +#: src/lib/ini.c:94 src/lib/ini.c:106 +#, c-format +msgid "" +"Config file error: %s\n" +" : Line %d, col %d of file %s\n" +"%s\n" msgstr "" -#: src/stored/spool.c:234 +#: src/lib/ini.c:297 src/lib/ini.c:372 #, c-format -msgid "Committing spooled data to Volume \"%s\". Despooling %s bytes ...\n" +msgid "Cannot open config file %s: %s\n" msgstr "" -#: src/stored/spool.c:239 -#, c-format -msgid "Writing spooled data to Volume. Despooling %s bytes ...\n" +#: src/lib/bget_msg.c:85 +msgid "Status OK\n" msgstr "" -#: src/stored/spool.c:339 +#: src/lib/bget_msg.c:89 #, c-format -msgid "" -"Despooling elapsed time = %02d:%02d:%02d, Transfer rate = %s Bytes/second\n" +msgid "bget_msg: unknown signal %d\n" msgstr "" -#: src/stored/spool.c:348 src/stored/spool.c:549 src/stored/spool.c:595 +#: src/lib/address_conf.c:50 #, c-format -msgid "Ftruncate spool file failed: ERR=%s\n" +msgid "Only ipv4 and ipv6 are supported (%d)\n" msgstr "" -#: src/stored/spool.c:407 +#: src/lib/address_conf.c:54 #, c-format -msgid "Spool header read error. ERR=%s\n" +msgid "Only ipv4 is supported (%d)\n" msgstr "" -#: src/stored/spool.c:410 +#: src/lib/address_conf.c:169 #, c-format -msgid "Spool read error. Wanted %u bytes, got %d\n" +msgid "You tried to assign a ipv6 address to an ipv4(%d)\n" msgstr "" -#: src/stored/spool.c:411 +#: src/lib/address_conf.c:178 #, c-format -msgid "Spool header read error. Wanted %u bytes, got %d\n" +msgid "You tried to assign an ipv4 address to an ipv6(%d)\n" msgstr "" -#: src/stored/spool.c:418 src/stored/spool.c:419 +#: src/lib/address_conf.c:261 #, c-format -msgid "Spool block too big. Max %u bytes, got %u\n" +msgid "Can't add default IPv4 address (%s)\n" +msgstr "" + +#: src/lib/address_conf.c:292 +msgid "" +"Old style addresses cannot be mixed with new style. Try removing Port=nnn." msgstr "" -#: src/stored/spool.c:425 src/stored/spool.c:426 +#: src/lib/address_conf.c:314 #, c-format -msgid "Spool data read error. Wanted %u bytes, got %d\n" +msgid "Cannot resolve service(%s)" msgstr "" -#: src/stored/spool.c:480 +#: src/lib/address_conf.c:324 #, c-format -msgid "" -"User specified Job spool size reached: JobSpoolSize=%s MaxJobSpoolSize=%s\n" +msgid "Cannot resolve hostname(%s) %s" msgstr "" -#: src/stored/spool.c:485 +#: src/lib/address_conf.c:432 src/lib/address_conf.c:465 #, c-format -msgid "" -"User specified Device spool size reached: DevSpoolSize=%s MaxDevSpoolSize=" -"%s\n" -msgstr "" - -#: src/stored/spool.c:492 -msgid "Bad return from despool in write_block.\n" +msgid "Expected a block to begin with { but got: %s" msgstr "" -#: src/stored/spool.c:500 -msgid "Spooling data again ...\n" +#: src/lib/address_conf.c:437 +msgid "Empty addr block is not allowed" msgstr "" -#: src/stored/spool.c:532 +#: src/lib/address_conf.c:441 #, c-format -msgid "Error writing header to spool file. ERR=%s\n" +msgid "Expected a string but got: %s" msgstr "" -#: src/stored/spool.c:537 +#: src/lib/address_conf.c:452 #, c-format -msgid "" -"Error writing header to spool file. Disk probably full. Attempting recovery. " -"Wanted to write=%d got=%d\n" +msgid "Expected a string [ip|ipv4|ipv6] but got: %s" msgstr "" -#: src/stored/spool.c:555 src/stored/spool.c:601 -msgid "Fatal despooling error." +#: src/lib/address_conf.c:456 +#, c-format +msgid "Expected a string [ip|ipv4] but got: %s" msgstr "" -#: src/stored/spool.c:563 -msgid "Retrying after header spooling error failed.\n" +#: src/lib/address_conf.c:461 +#, c-format +msgid "Expected an equal = but got: %s" msgstr "" -#: src/stored/spool.c:579 +#: src/lib/address_conf.c:472 #, c-format -msgid "Error writing data to spool file. ERR=%s\n" +msgid "Expected an identifier [addr|port] but got: %s" msgstr "" -#: src/stored/spool.c:612 -msgid "Retrying after data spooling error failed.\n" +#: src/lib/address_conf.c:477 +msgid "Only one port per address block" msgstr "" -#: src/stored/spool.c:682 -msgid "Network error on BlastAttributes.\n" +#: src/lib/address_conf.c:483 +msgid "Only one addr per address block" msgstr "" -#: src/stored/spool.c:706 src/stored/spool.c:730 +#: src/lib/address_conf.c:487 #, c-format -msgid "Fseek on attributes file failed: ERR=%s\n" +msgid "Expected a identifier [addr|port] but got: %s" msgstr "" -#: src/stored/spool.c:718 +#: src/lib/address_conf.c:491 #, c-format -msgid "Truncate on attributes file failed: ERR=%s\n" +msgid "Expected a equal =, got: %s" msgstr "" -#: src/stored/spool.c:742 +#: src/lib/address_conf.c:499 #, c-format -msgid "Sending spooled attrs to the Director. Despooling %s bytes ...\n" +msgid "Expected a number or a string but got: %s" msgstr "" -#: src/stored/spool.c:768 +#: src/lib/address_conf.c:505 #, c-format -msgid "fopen attr spool file %s failed: ERR=%s\n" +msgid "Expected an IP number or a hostname but got: %s" msgstr "" -#: src/stored/lock.c:405 -#, c-format -msgid "pthread_cond_wait failure. ERR=%s\n" +#: src/lib/address_conf.c:511 +msgid "State machine missmatch" msgstr "" -#: src/stored/lock.c:504 -msgid "unknown blocked code" +#: src/lib/address_conf.c:517 +#, c-format +msgid "Expected a end of block with } but got: %s" msgstr "" -#: src/stored/stored_conf.c:241 +#: src/lib/address_conf.c:523 #, c-format -msgid "Expected a Device Type keyword, got: %s" +msgid "Cannot add hostname(%s) and port(%s) to addrlist (%s)" msgstr "" -#: src/stored/stored_conf.c:255 +#: src/lib/address_conf.c:529 #, c-format -msgid "" -"Maximum Block Size configured value %u is greater than allowed maximum: %u" +msgid "Expected an end of block with } but got: %s" msgstr "" -#: src/stored/stored_conf.c:269 +#: src/lib/address_conf.c:538 #, c-format -msgid "Warning: no \"%s\" resource (%d) defined.\n" +msgid "Expected an IP number or a hostname, got: %s" msgstr "" -#: src/stored/stored_conf.c:272 +#: src/lib/address_conf.c:543 src/lib/address_conf.c:557 #, c-format -msgid "dump_resource type=%d\n" +msgid "Cannot add port (%s) to (%s)" msgstr "" -#: src/stored/stored_conf.c:388 +#: src/lib/address_conf.c:552 #, c-format -msgid "Warning: unknown resource type %d\n" +msgid "Expected a port number or string, got: %s" msgstr "" -#: src/stored/stored_conf.c:555 src/stored/stored_conf.c:645 -#: src/stored/stored_conf.c:680 src/wx-console/console_conf.c:164 -#: src/wx-console/console_conf.c:239 src/wx-console/console_conf.c:284 -#: src/wx-console/console_conf.c:311 src/console/console_conf.c:157 -#: src/console/console_conf.c:233 src/console/console_conf.c:278 -#: src/console/console_conf.c:305 src/filed/filed_conf.c:333 -#: src/filed/filed_conf.c:398 src/filed/filed_conf.c:428 -#: src/qt-console/bat_conf.cpp:161 src/qt-console/bat_conf.cpp:239 -#: src/qt-console/bat_conf.cpp:287 src/qt-console/bat_conf.cpp:317 -#, c-format -msgid "Unknown resource type %d\n" +#: src/lib/crypto.c:430 +msgid "Unable to open certificate file" msgstr "" -#: src/stored/stored_conf.c:584 -#, c-format -msgid "\"%s\" item is required in \"%s\" resource, but not found.\n" +#: src/lib/crypto.c:437 +msgid "Unable to read certificate from file" msgstr "" -#: src/stored/stored_conf.c:590 -#, c-format -msgid "Too many items in \"%s\" resource\n" +#: src/lib/crypto.c:443 +msgid "Unable to extract public key from certificate" msgstr "" -#: src/stored/stored_conf.c:624 -#, c-format -msgid "Cannot find AutoChanger resource %s\n" +#: src/lib/crypto.c:450 +msgid "" +"Provided certificate does not include the required subjectKeyIdentifier " +"extension." msgstr "" -#: src/stored/stored_conf.c:640 +#: src/lib/crypto.c:457 #, c-format -msgid "Unable to init lock: ERR=%s\n" +msgid "Unsupported key type provided: %d\n" msgstr "" -#: src/stored/stored_conf.c:698 -#, c-format -msgid "" -"Attempt to define second \"%s\" resource named \"%s\" is not permitted.\n" +#: src/lib/crypto.c:494 src/lib/crypto.c:542 +msgid "Unable to open private key file" msgstr "" -#: src/stored/dev.c:127 -#, c-format -msgid "Unable to stat device %s: ERR=%s\n" +#: src/lib/crypto.c:524 src/lib/crypto.c:558 +msgid "Unable to read private key from file" msgstr "" -#: src/stored/dev.c:145 +#: src/lib/crypto.c:617 #, c-format -msgid "" -"%s is an unknown device type. Must be tape or directory\n" -" or have RequiresMount=yes for DVD. st_mode=%x\n" +msgid "Unsupported digest type: %d\n" msgstr "" -#: src/stored/dev.c:155 -msgid "DVD support is now deprecated\n" +#: src/lib/crypto.c:631 +msgid "OpenSSL digest initialization failed" msgstr "" -#: src/stored/dev.c:231 -#, c-format -msgid "Unable to stat mount point %s: ERR=%s\n" +#: src/lib/crypto.c:645 +msgid "OpenSSL digest update failed" msgstr "" -#: src/stored/dev.c:236 -msgid "" -"Mount and unmount commands must defined for a device which requires mount.\n" +#: src/lib/crypto.c:663 +msgid "OpenSSL digest finalize failed" msgstr "" -#: src/stored/dev.c:247 -#, c-format -msgid "Min block size > max on device %s\n" +#: src/lib/crypto.c:761 +msgid "OpenSSL digest_new failed" msgstr "" -#: src/stored/dev.c:251 -#, c-format -msgid "Block size %u on device %s is too large, using default %u\n" +#: src/lib/crypto.c:767 +msgid "OpenSSL sign get digest failed" msgstr "" -#: src/stored/dev.c:256 -#, c-format -msgid "Max block size %u not multiple of device %s block size=%d.\n" +#: src/lib/crypto.c:806 src/lib/crypto.c:810 +msgid "OpenSSL digest Verify final failed" msgstr "" -#: src/stored/dev.c:260 -#, c-format -msgid "Max Vol Size < 8 * Max Block Size for device %s\n" +#: src/lib/crypto.c:815 +msgid "No signers found for crypto verify.\n" msgstr "" -#: src/stored/dev.c:276 src/stored/dev.c:282 -#, c-format -msgid "Unable to init cond variable: ERR=%s\n" +#: src/lib/crypto.c:876 +msgid "Signature creation failed" msgstr "" -#: src/stored/dev.c:288 -#, c-format -msgid "Unable to init spool mutex: ERR=%s\n" +#: src/lib/crypto.c:954 +msgid "Signature decoding failed" msgstr "" -#: src/stored/dev.c:294 -#, c-format -msgid "Unable to init acquire mutex: ERR=%s\n" +#: src/lib/crypto.c:1031 +msgid "Unsupported cipher type specified\n" msgstr "" -#: src/stored/dev.c:300 -#, c-format -msgid "Unable to init read acquire mutex: ERR=%s\n" +#: src/lib/crypto.c:1180 +msgid "CryptoData decoding failed" msgstr "" -#: src/stored/dev.c:416 -msgid "Illegal mode given to open dev.\n" +#: src/lib/crypto.c:1224 +msgid "Failure decrypting the session key" msgstr "" -#: src/stored/dev.c:551 +#: src/lib/crypto.c:1275 #, c-format -msgid "Could not open file device %s. No Volume name given.\n" +msgid "Unsupported contentEncryptionAlgorithm: %d\n" msgstr "" -#: src/stored/dev.c:574 -#, c-format -msgid "Could not open: %s, ERR=%s\n" +#: src/lib/crypto.c:1285 src/lib/crypto.c:1291 +msgid "OpenSSL cipher context initialization failed" msgstr "" -#: src/stored/dev.c:639 -#, c-format -msgid "No tape loaded or drive offline on %s.\n" +#: src/lib/crypto.c:1298 +msgid "Encryption session provided an invalid symmetric key" msgstr "" -#: src/stored/dev.c:649 -#, c-format -msgid "Rewind error on %s. ERR=%s.\n" +#: src/lib/crypto.c:1304 +msgid "Encryption session provided an invalid IV" msgstr "" -#: src/stored/dev.c:659 src/stored/dev.c:737 src/stored/dev.c:878 -#: src/stored/dev.c:1469 -#, c-format -msgid "lseek error on %s. ERR=%s.\n" +#: src/lib/crypto.c:1310 +msgid "OpenSSL cipher context key/IV initialization failed" msgstr "" -#: src/stored/dev.c:708 +#: src/lib/crypto.c:1380 #, c-format -msgid "Bad call to eod. Device %s not open\n" +msgid "Unable to init OpenSSL threading: ERR=%s\n" +msgstr "" + +#: src/lib/crypto.c:1393 +msgid "Failed to seed OpenSSL PRNG\n" +msgstr "" + +#: src/lib/crypto.c:1419 +msgid "Failed to save OpenSSL PRNG\n" msgstr "" -#: src/stored/dev.c:775 +#: src/lib/crypto.c:1480 #, c-format -msgid "ioctl MTEOM error on %s. ERR=%s.\n" +msgid "Unsupported digest type=%d specified\n" msgstr "" -#: src/stored/dev.c:785 src/stored/dev.c:919 +#: src/lib/crypto.c:1500 #, c-format -msgid "ioctl MTIOCGET error on %s. ERR=%s.\n" +msgid "SHA1Update() returned an error: %d\n" msgstr "" -#: src/stored/dev.c:865 -msgid "Bad device call. Device not open\n" +#: src/lib/crypto.c:1643 +msgid "No error" msgstr "" -#: src/stored/dev.c:877 -#, c-format -msgid "Seek error: ERR=%s\n" +#: src/lib/crypto.c:1645 +msgid "Signer not found" msgstr "" -#: src/stored/dev.c:914 -msgid " Bacula status:" +#: src/lib/crypto.c:1647 +msgid "Recipient not found" msgstr "" -#: src/stored/dev.c:915 src/stored/dev.c:998 src/stored/dev.c:1000 -#, c-format -msgid " file=%d block=%d\n" +#: src/lib/crypto.c:1649 +msgid "Unsupported digest algorithm" msgstr "" -#: src/stored/dev.c:923 -msgid " Device status:" +#: src/lib/crypto.c:1651 +msgid "Unsupported encryption algorithm" msgstr "" -#: src/stored/dev.c:1022 -msgid "Bad call to load_dev. Device not open\n" +#: src/lib/crypto.c:1653 +msgid "Signature is invalid" msgstr "" -#: src/stored/dev.c:1033 src/stored/dev.c:1046 -#, c-format -msgid "ioctl MTLOAD error on %s. ERR=%s.\n" +#: src/lib/crypto.c:1655 +msgid "Decryption error" msgstr "" -#: src/stored/dev.c:1077 -#, c-format -msgid "ioctl MTOFFL error on %s. ERR=%s.\n" +#: src/lib/crypto.c:1658 +msgid "Internal error" msgstr "" -#: src/stored/dev.c:1118 -msgid "Bad call to fsf. Device not open\n" +#: src/lib/crypto.c:1660 +msgid "Unknown error" msgstr "" -#: src/stored/dev.c:1129 src/stored/dev.c:1256 +#: src/lib/attr.c:69 #, c-format -msgid "Device %s at End of Tape.\n" +msgid "Error scanning attributes: %s\n" msgstr "" -#: src/stored/dev.c:1160 src/stored/dev.c:1236 -#, c-format -msgid "ioctl MTFSF error on %s. ERR=%s.\n" +#: src/lib/signal.c:56 +msgid "Invalid signal number" msgstr "" -#: src/stored/dev.c:1207 src/stored/btape.c:1977 +#: src/lib/signal.c:146 src/lib/signal.c:148 #, c-format -msgid "read error on %s. ERR=%s.\n" +msgid "Bacula interrupted by signal %d: %s\n" msgstr "" -#: src/stored/dev.c:1285 -msgid "Bad call to bsf. Device not open\n" +#: src/lib/signal.c:164 +#, c-format +msgid "Kaboom! %s, %s got signal %d - %s at %s. Attempting traceback.\n" msgstr "" -#: src/stored/dev.c:1291 +#: src/lib/signal.c:166 #, c-format -msgid "Device %s cannot BSF because it is not a tape.\n" +msgid "Kaboom! exepath=%s\n" msgstr "" -#: src/stored/dev.c:1308 +#: src/lib/signal.c:207 #, c-format -msgid "ioctl MTBSF error on %s. ERR=%s.\n" +msgid "Fork error: ERR=%s\n" msgstr "" -#: src/stored/dev.c:1327 -msgid "Bad call to fsr. Device not open\n" +#: src/lib/signal.c:215 +#, c-format +msgid "Calling: %s %s %s %s\n" msgstr "" -#: src/stored/dev.c:1337 +#: src/lib/signal.c:219 #, c-format -msgid "ioctl MTFSR not permitted on %s.\n" +msgid "execv: %s failed: ERR=%s\n" msgstr "" -#: src/stored/dev.c:1365 +#: src/lib/signal.c:241 #, c-format -msgid "ioctl MTFSR %d error on %s. ERR=%s.\n" +msgid "It looks like the traceback worked...\n" msgstr "" -#: src/stored/dev.c:1383 -msgid "Bad call to bsr_dev. Device not open\n" +#: src/lib/signal.c:243 +#, c-format +msgid "The btraceback call returned %d\n" msgstr "" -#: src/stored/dev.c:1393 +#: src/lib/signal.c:303 #, c-format -msgid "ioctl MTBSR not permitted on %s.\n" +msgid "BA_NSIG too small (%d) should be (%d)\n" msgstr "" -#: src/stored/dev.c:1407 -#, c-format -msgid "ioctl MTBSR error on %s. ERR=%s.\n" +#: src/lib/signal.c:309 +msgid "UNKNOWN SIGNAL" msgstr "" -#: src/stored/dev.c:1458 -msgid "Bad call to reposition. Device not open\n" +#: src/lib/signal.c:310 +msgid "Hangup" msgstr "" -#: src/stored/dev.c:1537 -msgid "Bad call to weof_dev. Device not open\n" +#: src/lib/signal.c:311 +msgid "Interrupt" msgstr "" -#: src/stored/dev.c:1547 -msgid "Attempt to WEOF on non-appendable Volume\n" +#: src/lib/signal.c:312 +msgid "Quit" msgstr "" -#: src/stored/dev.c:1565 -#, c-format -msgid "ioctl MTWEOF error on %s. ERR=%s.\n" +#: src/lib/signal.c:313 +msgid "Illegal instruction" msgstr "" -#: src/stored/dev.c:1664 -#, c-format -msgid "unknown func code %d" +#: src/lib/signal.c:314 +msgid "Trace/Breakpoint trap" msgstr "" -#: src/stored/dev.c:1670 -#, c-format -msgid "I/O function \"%s\" not supported on this device.\n" +#: src/lib/signal.c:315 +msgid "Abort" msgstr "" -#: src/stored/dev.c:1844 -#, c-format -msgid "Unable to truncate device %s. ERR=%s\n" +#: src/lib/signal.c:317 +msgid "EMT instruction (Emulation Trap)" msgstr "" -#: src/stored/dev.c:1861 -#, c-format -msgid "Unable to stat device %s. ERR=%s\n" +#: src/lib/signal.c:320 +msgid "IOT trap" msgstr "" -#: src/stored/dev.c:1875 -#, c-format -msgid "Device %s doesn't support ftruncate(). Recreating file %s.\n" +#: src/lib/signal.c:322 +msgid "BUS error" msgstr "" -#: src/stored/dev.c:1887 -#, c-format -msgid "Could not reopen: %s, ERR=%s\n" +#: src/lib/signal.c:323 +msgid "Floating-point exception" msgstr "" -#: src/stored/dev.c:2010 src/stored/dev.c:2081 -#, c-format -msgid "Device %s cannot be %smounted. ERR=%s\n" +#: src/lib/signal.c:324 +msgid "Kill, unblockable" msgstr "" -#: src/stored/dev.c:2481 -#, c-format -msgid "Unable to set eotmodel on device %s: ERR=%s\n" +#: src/lib/signal.c:325 +msgid "User-defined signal 1" msgstr "" -#: src/stored/bscan.c:118 -#, c-format -msgid "" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: bscan [ options ] \n" -" -b bootstrap specify a bootstrap file\n" -" -c specify configuration file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -m update media info in database\n" -" -D specify the driver database name (default NULL)\n" -" -n specify the database name (default bacula)\n" -" -u specify database user name (default bacula)\n" -" -P specify database password (default none)\n" -" -h specify database host (default NULL)\n" -" -t specify database port (default 0)\n" -" -p proceed inspite of I/O errors\n" -" -r list records\n" -" -s synchronize or store in database\n" -" -S show scan progress periodically\n" -" -v verbose\n" -" -V specify Volume names (separated by |)\n" -" -w specify working directory (default from conf file)\n" -" -? print this message\n" -"\n" +#: src/lib/signal.c:326 +msgid "Segmentation violation" +msgstr "" + +#: src/lib/signal.c:327 +msgid "User-defined signal 2" msgstr "" -#: src/stored/bscan.c:278 -#, c-format -msgid "Working Directory: %s not found. Cannot continue.\n" +#: src/lib/signal.c:328 +msgid "Broken pipe" msgstr "" -#: src/stored/bscan.c:282 -#, c-format -msgid "Working Directory: %s is not a directory. Cannot continue.\n" +#: src/lib/signal.c:329 +msgid "Alarm clock" msgstr "" -#: src/stored/bscan.c:296 src/stored/bscan.c:372 -#, c-format -msgid "First Volume Size = %s\n" +#: src/lib/signal.c:330 +msgid "Termination" msgstr "" -#: src/stored/bscan.c:302 src/tools/bvfs_test.c:215 src/tools/bbatch.c:201 -#: src/tools/bbatch.c:250 src/tools/ing_test.c:191 -msgid "Could not init Bacula database\n" +#: src/lib/signal.c:332 +msgid "Stack fault" msgstr "" -#: src/stored/bscan.c:309 src/tools/bvfs_test.c:224 src/tools/bbatch.c:257 -#: src/tools/ing_test.c:200 -#, c-format -msgid "Using Database: %s, User: %s\n" +#: src/lib/signal.c:334 +msgid "Child status has changed" msgstr "" -#: src/stored/bscan.c:343 -#, c-format -msgid "Create JobMedia for Job %s\n" +#: src/lib/signal.c:335 +msgid "Continue" msgstr "" -#: src/stored/bscan.c:353 -#, c-format -msgid "Could not create JobMedia record for Volume=%s Job=%s\n" +#: src/lib/signal.c:336 +msgid "Stop, unblockable" msgstr "" -#: src/stored/bscan.c:420 -#, c-format -msgid "done: %d%%\n" +#: src/lib/signal.c:337 +msgid "Keyboard stop" msgstr "" -#: src/stored/bscan.c:444 -msgid "Volume is prelabeled. This tape cannot be scanned.\n" +#: src/lib/signal.c:338 +msgid "Background read from tty" msgstr "" -#: src/stored/bscan.c:456 -#, c-format -msgid "Pool record for %s found in DB.\n" +#: src/lib/signal.c:339 +msgid "Background write to tty" msgstr "" -#: src/stored/bscan.c:460 -#, c-format -msgid "VOL_LABEL: Pool record not found for Pool: %s\n" +#: src/lib/signal.c:340 +msgid "Urgent condition on socket" msgstr "" -#: src/stored/bscan.c:466 -#, c-format -msgid "VOL_LABEL: PoolType mismatch. DB=%s Vol=%s\n" +#: src/lib/signal.c:341 +msgid "CPU limit exceeded" msgstr "" -#: src/stored/bscan.c:470 -#, c-format -msgid "Pool type \"%s\" is OK.\n" +#: src/lib/signal.c:342 +msgid "File size limit exceeded" msgstr "" -#: src/stored/bscan.c:480 -#, c-format -msgid "Media record for %s found in DB.\n" +#: src/lib/signal.c:343 +msgid "Virtual alarm clock" msgstr "" -#: src/stored/bscan.c:487 -#, c-format -msgid "VOL_LABEL: Media record not found for Volume: %s\n" +#: src/lib/signal.c:344 +msgid "Profiling alarm clock" msgstr "" -#: src/stored/bscan.c:494 -#, c-format -msgid "VOL_LABEL: MediaType mismatch. DB=%s Vol=%s\n" +#: src/lib/signal.c:345 +msgid "Window size change" msgstr "" -#: src/stored/bscan.c:498 -#, c-format -msgid "Media type \"%s\" is OK.\n" +#: src/lib/signal.c:346 +msgid "I/O now possible" msgstr "" -#: src/stored/bscan.c:508 -#, c-format -msgid "VOL_LABEL: OK for Volume: %s\n" +#: src/lib/signal.c:348 +msgid "Power failure restart" msgstr "" -#: src/stored/bscan.c:515 -#, c-format -msgid "%d \"errors\" ignored before first Start of Session record.\n" +#: src/lib/signal.c:351 +msgid "No runnable lwp" msgstr "" -#: src/stored/bscan.c:526 -#, c-format -msgid "SOS_LABEL: Found Job record for JobId: %d\n" +#: src/lib/signal.c:354 +msgid "SIGLWP special signal used by thread library" msgstr "" -#: src/stored/bscan.c:531 -#, c-format -msgid "SOS_LABEL: Job record not found for JobId: %d\n" +#: src/lib/signal.c:357 +msgid "Checkpoint Freeze" msgstr "" -#: src/stored/bscan.c:571 -#, c-format -msgid "SOS_LABEL: VolSessId mismatch for JobId=%u. DB=%d Vol=%d\n" +#: src/lib/signal.c:360 +msgid "Checkpoint Thaw" msgstr "" -#: src/stored/bscan.c:577 -#, c-format -msgid "SOS_LABEL: VolSessTime mismatch for JobId=%u. DB=%d Vol=%d\n" +#: src/lib/signal.c:363 +msgid "Thread Cancellation" msgstr "" -#: src/stored/bscan.c:583 -#, c-format -msgid "SOS_LABEL: PoolId mismatch for JobId=%u. DB=%d Vol=%d\n" +#: src/lib/signal.c:366 +msgid "Resource Lost (e.g. record-lock lost)" msgstr "" -#: src/stored/bscan.c:601 src/stored/bscan.c:1161 -#, c-format -msgid "Could not find SessId=%d SessTime=%d for EOS record.\n" +#: src/lib/berrno.c:51 +msgid "Child exited normally." msgstr "" -#: src/stored/bscan.c:647 -#, c-format -msgid "Could not update job record. ERR=%s\n" +#: src/lib/berrno.c:58 +msgid "Unknown error during program execvp" msgstr "" -#: src/stored/bscan.c:658 +#: src/lib/berrno.c:61 #, c-format -msgid "End of all Volumes. VolFiles=%u VolBlocks=%u VolBytes=%s\n" +msgid "Child exited with code %d" msgstr "" -#: src/stored/bscan.c:670 +#: src/lib/berrno.c:69 #, c-format -msgid "Could not find Job for SessId=%d SessTime=%d record.\n" +msgid "Child died from signal %d: %s" msgstr "" -#: src/stored/bscan.c:701 -#, c-format -msgid "%s file records. At file:blk=%s:%s bytes=%s\n" +#: src/lib/berrno.c:75 +msgid "Invalid errno. No error message possible." msgstr "" -#: src/stored/bscan.c:766 -#, c-format -msgid "Got MD5 record: %s\n" +#: src/lib/rwlock.c:295 +msgid "rwl_writeunlock called too many times.\n" msgstr "" -#: src/stored/bscan.c:774 -#, c-format -msgid "Got SHA1 record: %s\n" +#: src/lib/rwlock.c:300 +msgid "rwl_writeunlock by non-owner.\n" msgstr "" -#: src/stored/bscan.c:782 +#: src/lib/mem_pool.c:101 #, c-format -msgid "Got SHA256 record: %s\n" +msgid "MemPool index %d larger than max %d\n" msgstr "" -#: src/stored/bscan.c:790 +#: src/lib/mem_pool.c:119 src/lib/mem_pool.c:139 src/lib/mem_pool.c:175 +#: src/lib/mem_pool.c:248 src/lib/mem_pool.c:268 src/lib/mem_pool.c:303 +#: src/lib/mem_pool.c:614 #, c-format -msgid "Got SHA512 record: %s\n" +msgid "Out of memory requesting %d bytes\n" msgstr "" -#: src/stored/bscan.c:798 src/stored/bscan.c:805 -msgid "Got signed digest record\n" +#: src/lib/mem_pool.c:156 +msgid "obuf is NULL\n" msgstr "" -#: src/stored/bscan.c:811 +#: src/lib/bnet_server.c:103 #, c-format -msgid "Got Prog Names Stream: %s\n" +msgid "Cannot open stream socket. ERR=%s. Current %s All %s\n" msgstr "" -#: src/stored/bscan.c:817 -msgid "Got Prog Data Stream record.\n" +#: src/lib/bnet_server.c:116 +#, c-format +msgid "Cannot set SO_REUSEADDR on socket: %s\n" msgstr "" -#: src/stored/bscan.c:862 +#: src/lib/bnet_server.c:125 #, c-format -msgid "Unknown stream type!!! stream=%d len=%i\n" +msgid "Cannot bind port %d: ERR=%s: Retrying ...\n" msgstr "" -#: src/stored/bscan.c:930 +#: src/lib/bnet_server.c:133 src/lib/bnet_server.c:141 #, c-format -msgid "Could not create File Attributes record. ERR=%s\n" +msgid "Cannot bind port %d: ERR=%s.\n" msgstr "" -#: src/stored/bscan.c:936 -#, c-format -msgid "Created File record: %s\n" +#: src/lib/bnet_server.c:148 +msgid "No addr/port found to listen on.\n" msgstr "" -#: src/stored/bscan.c:981 +#: src/lib/bnet_server.c:154 #, c-format -msgid "Could not create media record. ERR=%s\n" +msgid "Could not init client queue: ERR=%s\n" msgstr "" -#: src/stored/bscan.c:985 src/stored/bscan.c:1006 +#: src/lib/bnet_server.c:173 #, c-format -msgid "Could not update media record. ERR=%s\n" +msgid "Error in select: %s\n" msgstr "" -#: src/stored/bscan.c:989 +#: src/lib/bnet_server.c:196 #, c-format -msgid "Created Media record for Volume: %s\n" +msgid "Connection from %s:%d refused by hosts.access\n" msgstr "" -#: src/stored/bscan.c:1010 -#, c-format -msgid "Updated Media record at end of Volume: %s\n" +#: src/lib/bnet_server.c:224 +msgid "Could not create client BSOCK.\n" msgstr "" -#: src/stored/bscan.c:1027 +#: src/lib/bnet_server.c:231 #, c-format -msgid "Could not create pool record. ERR=%s\n" +msgid "Could not add job to client queue: ERR=%s\n" msgstr "" -#: src/stored/bscan.c:1031 +#: src/lib/bnet_server.c:248 #, c-format -msgid "Created Pool record for Pool: %s\n" +msgid "Could not destroy client queue: ERR=%s\n" msgstr "" -#: src/stored/bscan.c:1050 +#: src/lib/runscript.c:224 #, c-format -msgid "Could not get Client record. ERR=%s\n" +msgid "%s: run %s \"%s\"\n" msgstr "" -#: src/stored/bscan.c:1060 +#: src/lib/runscript.c:233 #, c-format -msgid "Created Client record for Client: %s\n" +msgid "Runscript: %s could not execute. ERR=%s\n" msgstr "" -#: src/stored/bscan.c:1077 +#: src/lib/runscript.c:242 #, c-format -msgid "Fileset \"%s\" already exists.\n" +msgid "%s: %s\n" msgstr "" -#: src/stored/bscan.c:1081 +#: src/lib/runscript.c:247 #, c-format -msgid "Could not create FileSet record \"%s\". ERR=%s\n" +msgid "Runscript: %s returned non-zero status=%d. ERR=%s\n" msgstr "" -#: src/stored/bscan.c:1086 -#, c-format -msgid "Created FileSet record \"%s\"\n" +#: src/lib/runscript.c:285 src/dird/dird_conf.c:752 +msgid " --> RunScript\n" msgstr "" -#: src/stored/bscan.c:1133 +#: src/lib/runscript.c:286 src/dird/dird_conf.c:753 #, c-format -msgid "Could not create JobId record. ERR=%s\n" +msgid " --> Command=%s\n" msgstr "" -#: src/stored/bscan.c:1139 +#: src/lib/runscript.c:287 src/dird/dird_conf.c:754 #, c-format -msgid "Could not update job start record. ERR=%s\n" +msgid " --> Target=%s\n" msgstr "" -#: src/stored/bscan.c:1142 +#: src/lib/runscript.c:288 src/dird/dird_conf.c:755 #, c-format -msgid "Created new JobId=%u record for original JobId=%u\n" +msgid " --> RunOnSuccess=%u\n" msgstr "" -#: src/stored/bscan.c:1195 +#: src/lib/runscript.c:289 src/dird/dird_conf.c:756 #, c-format -msgid "Could not update JobId=%u record. ERR=%s\n" +msgid " --> RunOnFailure=%u\n" msgstr "" -#: src/stored/bscan.c:1200 +#: src/lib/runscript.c:290 src/dird/dird_conf.c:757 #, c-format -msgid "Updated Job termination record for JobId=%u Level=%s TermStat=%c\n" +msgid " --> FailJobOnError=%u\n" msgstr "" -#: src/stored/bscan.c:1225 +#: src/lib/runscript.c:291 src/dird/dird_conf.c:758 #, c-format -msgid "Job Termination code: %d" +msgid " --> RunWhen=%u\n" msgstr "" -#: src/stored/bscan.c:1230 -#, c-format -msgid "" -"%s\n" -"JobId: %d\n" -"Job: %s\n" -"FileSet: %s\n" -"Backup Level: %s\n" -"Client: %s\n" -"Start time: %s\n" -"End time: %s\n" -"Files Written: %s\n" -"Bytes Written: %s\n" -"Volume Session Id: %d\n" -"Volume Session Time: %d\n" -"Last Volume Bytes: %s\n" -"Termination: %s\n" -"\n" +#: src/lib/cram-md5.c:97 src/lib/cram-md5.c:125 +msgid "1999 Authorization failed.\n" msgstr "" -#: src/stored/bscan.c:1288 -#, c-format -msgid "Could not create JobMedia record. ERR=%s\n" +#: src/lib/smartall.c:133 src/lib/smartall.c:244 src/lib/smartall.c:259 +msgid "Out of memory\n" msgstr "" -#: src/stored/bscan.c:1292 -#, c-format -msgid "Created JobMedia record JobId %d, MediaId %d\n" +#: src/lib/smartall.c:138 +msgid "Too much memory used." msgstr "" -#: src/stored/bscan.c:1308 +#: src/lib/smartall.c:168 #, c-format -msgid "Could not find SessId=%d SessTime=%d for MD5/SHA1 record.\n" +msgid "Attempt to free NULL called from %s:%d\n" msgstr "" -#: src/stored/bscan.c:1322 +#: src/lib/smartall.c:182 #, c-format -msgid "Could not add MD5/SHA1 to File record. ERR=%s\n" +msgid "double free from %s:%d\n" msgstr "" -#: src/stored/bscan.c:1327 -msgid "Updated MD5/SHA1 record\n" +#: src/lib/smartall.c:190 +#, c-format +msgid "qp->qnext->qprev != qp called from %s:%d\n" msgstr "" -#: src/stored/job.c:234 +#: src/lib/smartall.c:194 #, c-format -msgid "FD connect failed: Job name not found: %s\n" +msgid "qp->qprev->qnext != qp called from %s:%d\n" msgstr "" -#: src/stored/job.c:244 +#: src/lib/smartall.c:203 #, c-format -msgid "Hey!!!! JobId %u Job %s already authenticated.\n" +msgid "Overrun buffer: len=%d addr=%p allocated: %s:%d called from %s:%d\n" msgstr "" -#: src/stored/job.c:261 -msgid "Unable to authenticate File daemon\n" +#: src/lib/smartall.c:281 +#, c-format +msgid "sm_realloc size: %d\n" msgstr "" -#: src/stored/job.c:390 -msgid "In free_jcr(), but still attached to device!!!!\n" +#: src/lib/smartall.c:319 +#, c-format +msgid "sm_realloc %d at %p from %s:%d\n" msgstr "" -#: src/stored/btape.c:185 +#: src/lib/smartall.c:379 #, c-format msgid "" "\n" -"\n" -"!!!! Warning large disk addressing disabled. boffset_t=%d should be 8 or " -"more !!!!!\n" -"\n" -"\n" +"Orphaned buffers exist. Dump terminated following\n" +" discovery of bad links in chain of orphaned buffers.\n" +" Buffer address with bad links: %p\n" msgstr "" -#: src/stored/btape.c:192 +#: src/lib/smartall.c:424 #, c-format -msgid "32 bit printf/scanf problem. i=%d x32=%u y32=%u\n" -msgstr "" - -#: src/stored/btape.c:201 -msgid "64 bit printf/scanf problem. i=%d x64=%" +msgid "Damaged buffer found. Called from %s:%d\n" msgstr "" -#: src/stored/btape.c:206 +#: src/lib/smartall.c:457 #, c-format -msgid "Tape block granularity is %d bytes.\n" +msgid "" +"\n" +"Damaged buffers found at %s:%d\n" msgstr "" -#: src/stored/btape.c:279 -msgid "No archive name specified.\n" +#: src/lib/smartall.c:460 +msgid " discovery of bad prev link.\n" msgstr "" -#: src/stored/btape.c:283 -msgid "Improper number of arguments specified.\n" +#: src/lib/smartall.c:463 +msgid " discovery of bad next link.\n" msgstr "" -#: src/stored/btape.c:297 -msgid "btape does not work with DVD storage.\n" +#: src/lib/smartall.c:466 +msgid " discovery of data overrun.\n" msgstr "" -#: src/stored/btape.c:302 -msgid "btape only works with tape storage.\n" +#: src/lib/smartall.c:469 +msgid " NULL pointer.\n" msgstr "" -#: src/stored/btape.c:383 +#: src/lib/smartall.c:475 #, c-format -msgid "Total Volume bytes=%sB. Total Write rate = %sB/s\n" +msgid " Buffer address: %p\n" msgstr "" -#: src/stored/btape.c:409 +#: src/lib/smartall.c:482 #, c-format -msgid "Volume bytes=%sB. Write rate = %sB/s\n" +msgid "Damaged buffer: %6u bytes allocated at line %d of %s %s\n" msgstr "" -#: src/stored/btape.c:477 +#: src/dird/job.c:50 #, c-format -msgid "open device %s: OK\n" -msgstr "" - -#: src/stored/btape.c:500 -msgid "Enter Volume Name: " +msgid "Could not init job queue: ERR=%s\n" msgstr "" -#: src/stored/btape.c:507 +#: src/dird/job.c:82 #, c-format -msgid "Device open failed. ERR=%s\n" +msgid "Could not add job queue: ERR=%s\n" msgstr "" -#: src/stored/btape.c:512 +#: src/dird/job.c:121 src/dird/ua_output.c:714 src/dird/xua_output.c:869 +#: src/tools/cats_test.c:363 #, c-format -msgid "Wrote Volume label for volume \"%s\".\n" +msgid "Could not open database \"%s\".\n" msgstr "" -#: src/stored/btape.c:526 -msgid "Volume has no label.\n" +#: src/dird/job.c:135 src/dird/job.c:139 src/dird/job.c:145 +#: src/dird/ua_status.c:367 src/dird/ua_dotcmds.c:831 src/dird/ua_cmds.c:836 +#: src/dird/ua_cmds.c:1589 +msgid "unknown source" +msgstr "" + +#: src/dird/job.c:175 src/dird/job.c:397 src/dird/job.c:399 src/dird/job.c:599 +#: src/dird/job.c:601 src/dird/job.c:1303 src/dird/job.c:1345 +#: src/dird/job.c:1355 +msgid "Job resource" msgstr "" -#: src/stored/btape.c:529 -msgid "Volume label read correctly.\n" +#: src/dird/job.c:177 src/dird/job.c:1038 src/dird/job.c:1300 +#: src/dird/job.c:1347 src/dird/job.c:1363 src/dird/vbackup.c:77 +#: src/dird/mac.c:208 src/dird/mac.c:209 src/dird/backup.c:91 +msgid "Pool resource" msgstr "" -#: src/stored/btape.c:532 +#: src/dird/job.c:222 src/dird/job.c:339 #, c-format -msgid "I/O error on device: ERR=%s" +msgid "Unimplemented job type: %d\n" msgstr "" -#: src/stored/btape.c:535 -msgid "Volume name error\n" +#: src/dird/job.c:263 +msgid "Job canceled because max start delay time exceeded.\n" msgstr "" -#: src/stored/btape.c:538 -#, c-format -msgid "Error creating label. ERR=%s" +#: src/dird/job.c:268 +msgid "Job canceled because max run sched time exceeded.\n" msgstr "" -#: src/stored/btape.c:541 -msgid "Volume version error.\n" +#: src/dird/job.c:378 +msgid "Failed to connect to File daemon.\n" msgstr "" -#: src/stored/btape.c:544 -msgid "Bad Volume label type.\n" +#: src/dird/job.c:412 +msgid "Failed to select Storage daemon.\n" msgstr "" -#: src/stored/btape.c:547 -msgid "Unknown error.\n" +#: src/dird/job.c:417 src/dird/ua_dotcmds.c:837 src/dird/ua_cmds.c:842 +#: src/dird/ua_cmds.c:1600 src/dird/msgchan.c:69 +msgid "Failed to connect to Storage daemon.\n" msgstr "" -#: src/stored/btape.c:565 -#, c-format -msgid "Bad status from load. ERR=%s\n" +#: src/dird/job.c:512 +msgid "canceled" msgstr "" -#: src/stored/btape.c:567 +#: src/dird/job.c:526 #, c-format -msgid "Loaded %s\n" +msgid "JobId %s, Job %s marked to be %s.\n" msgstr "" -#: src/stored/btape.c:576 src/stored/btape.c:1139 src/stored/btape.c:1212 -#: src/stored/btape.c:1292 src/stored/btape.c:1563 -#, c-format -msgid "Bad status from rewind. ERR=%s\n" +#: src/dird/job.c:661 +msgid "Max wait time exceeded. Job canceled.\n" msgstr "" -#: src/stored/btape.c:579 src/stored/btape.c:1571 -#, c-format -msgid "Rewound %s\n" +#: src/dird/job.c:666 +msgid "Max run time exceeded. Job canceled.\n" msgstr "" -#: src/stored/btape.c:605 src/stored/btape.c:1575 -#, c-format -msgid "Bad status from weof. ERR=%s\n" +#: src/dird/job.c:671 +msgid "Max run sched time exceeded. Job canceled.\n" msgstr "" -#: src/stored/btape.c:609 +#: src/dird/job.c:793 #, c-format -msgid "Wrote 1 EOF to %s\n" +msgid "Pool \"%s\" not in database. ERR=%s" msgstr "" -#: src/stored/btape.c:612 +#: src/dird/job.c:797 #, c-format -msgid "Wrote %d EOFs to %s\n" +msgid "Created database record for Pool \"%s\".\n" msgstr "" -#: src/stored/btape.c:630 -msgid "Moved to end of medium.\n" +#: src/dird/job.c:879 src/dird/job.c:923 +#, c-format +msgid "JobId %d already running. Duplicate job not allowed.\n" msgstr "" -#: src/stored/btape.c:657 +#: src/dird/job.c:911 #, c-format -msgid "Bad status from bsf. ERR=%s\n" +msgid "Cancelling duplicate JobId=%d.\n" msgstr "" -#: src/stored/btape.c:659 -#, c-format -msgid "Backspaced %d file%s.\n" +#: src/dird/job.c:946 src/dird/job.c:947 +msgid "Run NextPool override" msgstr "" -#: src/stored/btape.c:676 -#, c-format -msgid "Bad status from bsr. ERR=%s\n" +#: src/dird/job.c:948 +msgid "Storage from Run NextPool override" msgstr "" -#: src/stored/btape.c:678 -#, c-format -msgid "Backspaced %d record%s.\n" +#: src/dird/job.c:952 src/dird/job.c:953 src/dird/job.c:1357 +msgid "Job's NextPool resource" msgstr "" -#: src/stored/btape.c:706 -#, c-format -msgid "Device status:\n" +#: src/dird/job.c:954 +msgid "Storage from Job's NextPool resource" msgstr "" -#: src/stored/btape.c:725 -#, c-format -msgid "Status:\n" +#: src/dird/job.c:962 src/dird/job.c:963 +msgid "Job Pool's NextPool resource" msgstr "" -#: src/stored/btape.c:740 -msgid "" -"Test writing larger and larger records.\n" -"This is a torture test for records.\n" -"I am going to write\n" -"larger and larger records. It will stop when the record size\n" -"plus the header exceeds the block size (by default about 64K)\n" +#: src/dird/job.c:964 +msgid "Storage from Pool's NextPool resource" msgstr "" -#: src/stored/btape.c:746 -msgid "Do you want to continue? (y/n): " +#: src/dird/job.c:995 +msgid "Run Pool override" msgstr "" -#: src/stored/btape.c:748 src/stored/btape.c:2200 -msgid "Command aborted.\n" +#: src/dird/job.c:1006 +msgid "Run FullPool override" msgstr "" -#: src/stored/btape.c:765 -#, c-format -msgid "Block %d i=%d\n" +#: src/dird/job.c:1008 +msgid "Job FullPool override" msgstr "" -#: src/stored/btape.c:792 -msgid "Skipping read backwards test because BSR turned off.\n" +#: src/dird/job.c:1017 +msgid "Run IncPool override" msgstr "" -#: src/stored/btape.c:796 -msgid "" -"\n" -"=== Write, backup, and re-read test ===\n" -"\n" -"I'm going to write three records and an EOF\n" -"then backup over the EOF and re-read the last record.\n" -"Bacula does this after writing the last block on the\n" -"tape to verify that the block was written correctly.\n" -"\n" -"This is not an *essential* feature ...\n" -"\n" +#: src/dird/job.c:1019 +msgid "Job IncPool override" msgstr "" -#: src/stored/btape.c:809 src/stored/btape.c:820 src/stored/btape.c:831 -#: src/stored/btape.c:1149 src/stored/btape.c:1165 src/stored/btape.c:1907 -#: src/stored/btape.c:2823 -msgid "Error writing record to block.\n" +#: src/dird/job.c:1028 +msgid "Run DiffPool override" msgstr "" -#: src/stored/btape.c:813 src/stored/btape.c:824 src/stored/btape.c:835 -#: src/stored/btape.c:1153 src/stored/btape.c:1169 src/stored/btape.c:1911 -#: src/stored/btape.c:2827 -msgid "Error writing block to device.\n" +#: src/dird/job.c:1030 +msgid "Job DiffPool override" msgstr "" -#: src/stored/btape.c:816 -#, c-format -msgid "Wrote first record of %d bytes.\n" +#: src/dird/job.c:1097 +msgid "FileSet MD5 digest not found.\n" msgstr "" -#: src/stored/btape.c:827 +#: src/dird/job.c:1102 #, c-format -msgid "Wrote second record of %d bytes.\n" +msgid "Could not create FileSet \"%s\" record. ERR=%s\n" msgstr "" -#: src/stored/btape.c:838 +#: src/dird/job.c:1144 #, c-format -msgid "Wrote third record of %d bytes.\n" +msgid "Error updating job record. %s" msgstr "" -#: src/stored/btape.c:845 src/stored/btape.c:850 -#, c-format -msgid "Backspace file failed! ERR=%s\n" +#: src/dird/job.c:1290 +msgid "Run pool override" msgstr "" -#: src/stored/btape.c:854 -msgid "Backspaced over EOF OK.\n" +#: src/dird/job.c:1295 +msgid "Run storage override" msgstr "" -#: src/stored/btape.c:856 -#, c-format -msgid "Backspace record failed! ERR=%s\n" +#: src/dird/job.c:1366 +msgid "Client resource" msgstr "" -#: src/stored/btape.c:859 -msgid "Backspace record OK.\n" +#: src/dird/job.c:1422 src/dird/ua_run.c:392 +msgid "No storage specified.\n" msgstr "" -#: src/stored/btape.c:862 src/stored/btape.c:868 +#: src/dird/job.c:1583 #, c-format -msgid "Read block failed! ERR=%s\n" +msgid "Could not start clone job: \"%s\".\n" msgstr "" -#: src/stored/btape.c:873 -msgid "Bad data in record. Test failed!\n" +#: src/dird/job.c:1586 +#, c-format +msgid "Clone JobId %d started.\n" msgstr "" -#: src/stored/btape.c:877 -msgid "" -"\n" -"Block re-read correct. Test succeeded!\n" +#: src/dird/vbackup.c:64 src/dird/mac.c:97 +msgid "Could not get or create a Pool record.\n" msgstr "" -#: src/stored/btape.c:878 -msgid "" -"=== End Write, backup, and re-read test ===\n" -"\n" +#: src/dird/vbackup.c:121 +#, c-format +msgid "Start Virtual Backup JobId %s, Job=%s\n" msgstr "" -#: src/stored/btape.c:885 +#: src/dird/vbackup.c:125 msgid "" -"This is not terribly serious since Bacula only uses\n" -"this function to verify the last block written to the\n" -"tape. Bacula will skip the last block verification\n" -"if you add:\n" -"\n" -"Backward Space Record = No\n" -"\n" -"to your Storage daemon's Device resource definition.\n" +"This Job is not an Accurate backup so is not equivalent to a Full backup.\n" msgstr "" -#: src/stored/btape.c:907 +#: src/dird/vbackup.c:141 src/dird/ua_dotcmds.c:749 src/dird/ua_restore.c:778 +#: src/dird/ua_restore.c:821 #, c-format -msgid "Begin writing %i files of %sB with raw blocks of %u bytes.\n" +msgid "Unable to get Job record for JobId=%s: ERR=%s\n" msgstr "" -#: src/stored/btape.c:928 src/stored/btape.c:2879 +#: src/dird/vbackup.c:145 src/dird/ua_restore.c:782 #, c-format -msgid "Write failed at block %u. stat=%d ERR=%s\n" +msgid "Selecting jobs to build the Full state at %s\n" msgstr "" -#: src/stored/btape.c:962 -#, c-format -msgid "Begin writing %i files of %sB with blocks of %u bytes.\n" +#: src/dird/vbackup.c:171 +msgid "No valid Jobs found from user selection.\n" msgstr "" -#: src/stored/btape.c:971 -msgid "" -"\n" -"Error writing record to block.\n" +#: src/dird/vbackup.c:175 +#, c-format +msgid "Using user supplied JobIds=%s\n" msgstr "" -#: src/stored/btape.c:975 -msgid "" -"\n" -"Error writing block to device.\n" +#: src/dird/vbackup.c:194 +msgid "No previous Full found in list, using Differential level\n" msgstr "" -#: src/stored/btape.c:1030 -msgid "The file_size is too big, stop this test with Ctrl-c.\n" +#: src/dird/vbackup.c:199 +msgid "No previous Full found in list, using Incremental level\n" msgstr "" -#: src/stored/btape.c:1058 -msgid "Test with zero data, should give the maximum throughput.\n" +#: src/dird/vbackup.c:212 +msgid "No previous Jobs found.\n" msgstr "" -#: src/stored/btape.c:1070 src/stored/btape.c:1096 -msgid "Test with random data, should give the minimum throughput.\n" +#: src/dird/vbackup.c:235 +#, c-format +msgid "Error getting Job record for previous Job: ERR=%s" msgstr "" -#: src/stored/btape.c:1085 -msgid "Test with zero data and bacula block structure.\n" +#: src/dird/vbackup.c:241 src/dird/mac.c:112 +msgid "Could not get or create the FileSet record.\n" msgstr "" -#: src/stored/btape.c:1125 +#: src/dird/vbackup.c:361 src/dird/admin.c:78 src/dird/mac.c:688 +#: src/dird/backup.c:749 #, c-format -msgid "" -"\n" -"=== Write, rewind, and re-read test ===\n" -"\n" -"I'm going to write %d records and an EOF\n" -"then write %d records and an EOF, then rewind,\n" -"and re-read the data to verify that it is correct.\n" -"\n" -"This is an *essential* feature ...\n" -"\n" +msgid "Error getting Job record for Job report: ERR=%s" msgstr "" -#: src/stored/btape.c:1157 src/stored/btape.c:1173 +#: src/dird/vbackup.c:368 src/dird/backup.c:756 #, c-format -msgid "Wrote %d blocks of %d bytes.\n" -msgstr "" - -#: src/stored/btape.c:1215 src/stored/btape.c:1295 -msgid "Rewind OK.\n" +msgid "Error getting Client record for Job report: ERR=%s" msgstr "" -#: src/stored/btape.c:1228 src/stored/btape.c:1347 -msgid "Got EOF on tape.\n" +#: src/dird/vbackup.c:374 src/dird/mac.c:718 src/dird/backup.c:762 +#, c-format +msgid "Error getting Media record for Volume \"%s\": ERR=%s" msgstr "" -#: src/stored/btape.c:1233 +#: src/dird/vbackup.c:411 src/dird/restore.c:614 src/dird/admin.c:98 +#: src/dird/backup.c:802 #, c-format -msgid "Read block %d failed! ERR=%s\n" +msgid "Inappropriate term code: %c\n" msgstr "" -#: src/stored/btape.c:1239 +#: src/dird/vbackup.c:448 #, c-format -msgid "Read record failed. Block %d! ERR=%s\n" +msgid "" +"%s %s %s (%s):\n" +" Build OS: %s %s %s\n" +" JobId: %d\n" +" Job: %s\n" +" Backup Level: Virtual Full\n" +" Client: \"%s\" %s\n" +" FileSet: \"%s\" %s\n" +" Pool: \"%s\" (From %s)\n" +" Catalog: \"%s\" (From %s)\n" +" Storage: \"%s\" (From %s)\n" +" Scheduled time: %s\n" +" Start time: %s\n" +" End time: %s\n" +" Elapsed time: %s\n" +" Priority: %d\n" +" SD Files Written: %s\n" +" SD Bytes Written: %s (%sB)\n" +" Rate: %.1f KB/s\n" +" Volume name(s): %s\n" +" Volume Session Id: %d\n" +" Volume Session Time: %d\n" +" Last Volume Bytes: %s (%sB)\n" +" SD Errors: %d\n" +" SD termination status: %s\n" +" Termination: %s\n" +"\n" msgstr "" -#: src/stored/btape.c:1245 src/stored/btape.c:1377 -#, c-format -msgid "Bad data in record. Expected %d, got %d at byte %d. Test failed!\n" +#: src/dird/ua_output.c:57 src/dird/ua_output.c:81 src/dird/xua_output.c:56 +#: src/dird/xua_output.c:80 +msgid "ON or OFF keyword missing.\n" msgstr "" -#: src/stored/btape.c:1252 -#, c-format -msgid "%d blocks re-read correctly.\n" +#: src/dird/ua_output.c:101 src/dird/xua_output.c:100 +msgid "Disabled Jobs:\n" msgstr "" -#: src/stored/btape.c:1255 src/stored/btape.c:1384 -msgid "" -"=== Test Succeeded. End Write, rewind, and re-read test ===\n" -"\n" +#: src/dird/ua_output.c:107 src/dird/xua_output.c:106 +msgid "No disabled Jobs.\n" msgstr "" -#: src/stored/btape.c:1283 -msgid "Block position test\n" +#: src/dird/ua_output.c:151 +msgid "disabled" msgstr "" -#: src/stored/btape.c:1338 -#, c-format -msgid "Reposition to file:block %d:%d\n" +#: src/dird/ua_output.c:199 src/dird/xua_output.c:204 +msgid "Keywords for the show command are:\n" msgstr "" -#: src/stored/btape.c:1340 -msgid "Reposition error.\n" +#: src/dird/ua_output.c:205 src/dird/xua_output.c:211 +#, c-format +msgid "%s resource %s not found.\n" msgstr "" -#: src/stored/btape.c:1353 +#: src/dird/ua_output.c:208 src/dird/xua_output.c:215 #, c-format -msgid "" -"Read block %d failed! file=%d blk=%d. ERR=%s\n" -"\n" +msgid "Resource %s not found\n" msgstr "" -#: src/stored/btape.c:1355 -msgid "" -"This may be because the tape drive block size is not\n" -" set to variable blocking as normally used by Bacula.\n" -" Please see the Tape Testing chapter in the manual and \n" -" look for using mt with defblksize and setoptions\n" -"If your tape drive block size is correct, then perhaps\n" -" your SCSI driver is *really* stupid and does not\n" -" correctly report the file:block after a FSF. In this\n" -" case try setting:\n" -" Fast Forward Space File = no\n" -" in your Device resource.\n" +#: src/dird/ua_output.c:278 src/dird/xua_output.c:356 +msgid "Hey! DB is NULL\n" msgstr "" -#: src/stored/btape.c:1371 +#: src/dird/ua_output.c:435 src/dird/xua_output.c:590 #, c-format -msgid "Read record failed! ERR=%s\n" +msgid "Jobid %d used %d Volume(s): %s\n" +msgstr "" + +#: src/dird/ua_output.c:454 src/dird/xua_output.c:609 +msgid "No Pool specified.\n" msgstr "" -#: src/stored/btape.c:1382 +#: src/dird/ua_output.c:465 src/dird/ua_select.c:531 src/dird/xua_output.c:620 +#: src/dird/ua_update.c:424 #, c-format -msgid "Block %d re-read correctly.\n" +msgid "Error obtaining pool ids. ERR=%s\n" msgstr "" -#: src/stored/btape.c:1403 -msgid "" -"\n" -"\n" -"=== Append files test ===\n" -"\n" -"This test is essential to Bacula.\n" -"\n" -"I'm going to write one record in file 0,\n" -" two records in file 1,\n" -" and three records in file 2\n" -"\n" +#: src/dird/ua_output.c:475 src/dird/xua_output.c:630 +#, c-format +msgid "Pool: %s\n" msgstr "" -#: src/stored/btape.c:1427 -msgid "Now moving to end of medium.\n" +#: src/dird/ua_output.c:491 src/dird/xua_output.c:646 +msgid "Ignoring invalid value for days. Max is 50.\n" msgstr "" -#: src/stored/btape.c:1429 src/stored/btape.c:1658 +#: src/dird/ua_output.c:513 src/dird/xua_output.c:668 #, c-format -msgid "We should be in file 3. I am at file %d. %s\n" +msgid "Unknown list keyword: %s\n" msgstr "" -#: src/stored/btape.c:1430 src/stored/btape.c:1448 src/stored/btape.c:1647 -#: src/stored/btape.c:1659 src/stored/btape.c:1672 src/stored/btape.c:1689 -msgid "This is correct!" +#: src/dird/ua_output.c:538 src/dird/xua_output.c:693 +#, c-format +msgid "%s is not a job name.\n" msgstr "" -#: src/stored/btape.c:1430 src/stored/btape.c:1448 src/stored/btape.c:1647 -#: src/stored/btape.c:1659 src/stored/btape.c:1672 src/stored/btape.c:1689 -msgid "This is NOT correct!!!!" +#: src/dird/ua_output.c:552 src/dird/xua_output.c:707 +#, c-format +msgid "Could not find Pool for Job %s\n" msgstr "" -#: src/stored/btape.c:1436 -msgid "" -"\n" -"Now the important part, I am going to attempt to append to the tape.\n" -"\n" +#: src/dird/ua_output.c:565 src/dird/xua_output.c:720 +#, c-format +msgid "Could not find next Volume for Job %s (Pool=%s, Level=%s).\n" msgstr "" -#: src/stored/btape.c:1443 +#: src/dird/ua_output.c:569 src/dird/xua_output.c:724 +#, c-format msgid "" -"Done appending, there should be no I/O errors\n" -"\n" +"The next Volume to be used by Job \"%s\" (Pool=%s, Level=%s) will be %s\n" msgstr "" -#: src/stored/btape.c:1444 -msgid "Doing Bacula scan of blocks:\n" +#: src/dird/ua_output.c:582 src/dird/xua_output.c:737 +#, c-format +msgid "Could not find next Volume for Job %s.\n" msgstr "" -#: src/stored/btape.c:1446 -msgid "End scanning the tape.\n" +#: src/dird/ua_output.c:727 src/dird/xua_output.c:882 +#, c-format +msgid "Pool %s not in database. %s" msgstr "" -#: src/stored/btape.c:1447 src/stored/btape.c:1671 +#: src/dird/ua_output.c:735 src/dird/xua_output.c:890 #, c-format -msgid "We should be in file 4. I am at file %d. %s\n" +msgid "Pool %s created in database.\n" msgstr "" -#: src/stored/btape.c:1472 -msgid "" -"\n" -"Autochanger enabled, but no name or no command device specified.\n" +#: src/dird/ua_output.c:788 src/dird/xua_output.c:943 +msgid "You have no messages.\n" msgstr "" -#: src/stored/btape.c:1476 -msgid "" -"\n" -"Ah, I see you have an autochanger configured.\n" -"To test the autochanger you must have a blank tape\n" -" that I can write on in Slot 1.\n" +#: src/dird/ua_output.c:868 src/dird/xua_output.c:1023 +msgid "Message too long to display.\n" msgstr "" -#: src/stored/btape.c:1479 -msgid "" -"\n" -"Do you wish to continue with the Autochanger test? (y/n): " +#: src/dird/jobq.c:62 +#, c-format +msgid "pthread_attr_init: ERR=%s\n" msgstr "" -#: src/stored/btape.c:1486 -msgid "" -"\n" -"\n" -"=== Autochanger test ===\n" -"\n" +#: src/dird/jobq.c:71 +#, c-format +msgid "pthread_mutex_init: ERR=%s\n" msgstr "" -#: src/stored/btape.c:1495 -msgid "3301 Issuing autochanger \"loaded\" command.\n" +#: src/dird/jobq.c:77 +#, c-format +msgid "pthread_cond_init: ERR=%s\n" msgstr "" -#: src/stored/btape.c:1504 +#: src/dird/jobq.c:119 #, c-format -msgid "3991 Bad autochanger command: %s\n" +msgid "pthread_cond_broadcast: ERR=%s\n" msgstr "" -#: src/stored/btape.c:1505 +#: src/dird/jobq.c:127 #, c-format -msgid "3991 result=\"%s\": ERR=%s\n" +msgid "pthread_cond_wait: ERR=%s\n" msgstr "" -#: src/stored/btape.c:1509 +#: src/dird/jobq.c:168 #, c-format -msgid "Slot %d loaded. I am going to unload it.\n" +msgid "Job %s waiting %d seconds for scheduled start time.\n" msgstr "" -#: src/stored/btape.c:1511 -msgid "Nothing loaded in the drive. OK.\n" +#: src/dird/jobq.c:230 +#, c-format +msgid "pthread_thread_create: ERR=%s\n" msgstr "" -#: src/stored/btape.c:1518 +#: src/dird/jobq.c:340 #, c-format -msgid "3302 Issuing autochanger \"unload %d %d\" command.\n" +msgid "pthread_cond_signal: ERR=%s\n" msgstr "" -#: src/stored/btape.c:1523 +#: src/dird/jobq.c:351 #, c-format -msgid "unload status=%s %d\n" +msgid "pthread_create: ERR=%s\n" msgstr "" -#: src/stored/btape.c:1523 -msgid "Bad" +#: src/dird/jobq.c:635 +#, c-format +msgid "Rescheduled Job %s at %s to re-run in %d seconds (%s).\n" msgstr "" -#: src/stored/btape.c:1526 -#, c-format -msgid "3992 Bad autochanger command: %s\n" +#: src/dird/jobq.c:694 src/dird/jobq.c:699 +msgid "previous Job" msgstr "" -#: src/stored/btape.c:1527 +#: src/dird/jobq.c:736 #, c-format -msgid "3992 result=\"%s\": ERR=%s\n" +msgid "" +"Job canceled. Attempt to read and write same device.\n" +" Read storage \"%s\" (From %s) -- Write storage \"%s\" (From %s)\n" msgstr "" -#: src/stored/btape.c:1537 +#: src/dird/ua_select.c:42 #, c-format -msgid "3303 Issuing autochanger \"load %d %d\" command.\n" +msgid "The current %s retention period is: %s\n" msgstr "" -#: src/stored/btape.c:1545 -#, c-format -msgid "3303 Autochanger \"load %d %d\" status is OK.\n" +#: src/dird/ua_select.c:47 +msgid "Continue? (yes/mod/no): " msgstr "" -#: src/stored/btape.c:1549 -#, c-format -msgid "3993 Bad autochanger command: %s\n" +#: src/dird/ua_select.c:50 src/dird/ua_run.c:614 +msgid "mod" msgstr "" -#: src/stored/btape.c:1550 -#, c-format -msgid "3993 result=\"%s\": ERR=%s\n" +#: src/dird/ua_select.c:51 +msgid "Enter new retention period: " msgstr "" -#: src/stored/btape.c:1565 -msgid "" -"\n" -"The test failed, probably because you need to put\n" -"a longer sleep time in the mtx-script in the load) case.\n" -"Adding a 30 second sleep and trying again ...\n" +#: src/dird/ua_select.c:55 +msgid "Invalid period.\n" msgstr "" -#: src/stored/btape.c:1578 -#, c-format -msgid "Wrote EOF to %s\n" +#: src/dird/ua_select.c:131 src/dird/ua_run.c:555 +msgid "You have the following choices:\n" msgstr "" -#: src/stored/btape.c:1582 -#, c-format -msgid "" -"\n" -"The test worked this time. Please add:\n" -"\n" -" sleep %d\n" -"\n" -"to your mtx-changer script in the load) case.\n" -"\n" +#: src/dird/ua_select.c:154 +msgid "The defined Storage resources are:\n" msgstr "" -#: src/stored/btape.c:1587 -msgid "" -"\n" -"The test autochanger worked!!\n" -"\n" +#: src/dird/ua_select.c:166 src/dird/ua_dotcmds.c:944 src/dird/ua_run.c:619 +#: src/dird/ua_cmds.c:1093 +msgid "Storage" msgstr "" -#: src/stored/btape.c:1598 -msgid "You must correct this error or the Autochanger will not work.\n" +#: src/dird/ua_select.c:166 +msgid "Select Storage resource" msgstr "" -#: src/stored/btape.c:1616 -msgid "" -"\n" -"\n" -"=== Forward space files test ===\n" -"\n" -"This test is essential to Bacula.\n" -"\n" -"I'm going to write five files then test forward spacing\n" -"\n" +#: src/dird/ua_select.c:181 src/dird/ua_restore.c:1296 +msgid "The defined FileSet resources are:\n" msgstr "" -#: src/stored/btape.c:1641 -msgid "Now forward spacing 1 file.\n" +#: src/dird/ua_select.c:189 src/dird/ua_restore.c:1300 src/dird/ua_run.c:621 +msgid "FileSet" msgstr "" -#: src/stored/btape.c:1643 src/stored/btape.c:1655 src/stored/btape.c:1668 -#: src/stored/btape.c:1686 src/stored/btape.c:1862 -#, c-format -msgid "Bad status from fsr. ERR=%s\n" +#: src/dird/ua_select.c:189 src/dird/ua_restore.c:1300 +msgid "Select FileSet resource" msgstr "" -#: src/stored/btape.c:1646 -#, c-format -msgid "We should be in file 1. I am at file %d. %s\n" +#: src/dird/ua_select.c:219 src/dird/ua_cmds.c:2062 +msgid "Could not find a Catalog resource\n" msgstr "" -#: src/stored/btape.c:1653 -msgid "Now forward spacing 2 files.\n" +#: src/dird/ua_select.c:222 +msgid "You must specify a \"use \" command before continuing.\n" msgstr "" -#: src/stored/btape.c:1666 -msgid "Now forward spacing 4 files.\n" +#: src/dird/ua_select.c:228 +msgid "The defined Catalog resources are:\n" msgstr "" -#: src/stored/btape.c:1678 -msgid "" -"The test worked this time. Please add:\n" -"\n" -" Fast Forward Space File = no\n" -"\n" -"to your Device resource for this drive.\n" +#: src/dird/ua_select.c:236 +msgid "Catalog" msgstr "" -#: src/stored/btape.c:1684 -msgid "Now forward spacing 1 more file.\n" +#: src/dird/ua_select.c:236 +msgid "Select Catalog resource" msgstr "" -#: src/stored/btape.c:1688 -#, c-format -msgid "We should be in file 5. I am at file %d. %s\n" +#: src/dird/ua_select.c:254 src/dird/ua_select.c:280 +msgid "The defined Job resources are:\n" msgstr "" -#: src/stored/btape.c:1693 -msgid "" -"\n" -"=== End Forward space files test ===\n" -"\n" +#: src/dird/ua_select.c:265 src/dird/ua_select.c:288 src/dird/ua_select.c:329 +#: src/dird/ua_select.c:1341 src/dird/ua_run.c:620 src/dird/dird_conf.c:675 +#: src/dird/ua_prune.c:598 +msgid "Job" msgstr "" -#: src/stored/btape.c:1697 -msgid "" -"\n" -"The forward space file test failed.\n" +#: src/dird/ua_select.c:265 src/dird/ua_select.c:288 +msgid "Select Job resource" msgstr "" -#: src/stored/btape.c:1699 -msgid "" -"You have Fast Forward Space File enabled.\n" -"I am turning it off then retrying the test.\n" +#: src/dird/ua_select.c:307 +#, c-format +msgid "Error: Restore Job resource \"%s\" does not exist.\n" msgstr "" -#: src/stored/btape.c:1705 -msgid "" -"You must correct this error or Bacula will not work.\n" -"Some systems, e.g. OpenBSD, require you to set\n" -" Use MTIOCGET= no\n" -"in your device resource. Use with caution.\n" +#: src/dird/ua_select.c:321 +msgid "The defined Restore Job resources are:\n" msgstr "" -#: src/stored/btape.c:1739 -msgid "" -"\n" -"Append test failed. Attempting again.\n" -"Setting \"Hardware End of Medium = no\n" -" and \"Fast Forward Space File = no\n" -"and retrying append test.\n" -"\n" +#: src/dird/ua_select.c:329 +msgid "Select Restore Job" msgstr "" -#: src/stored/btape.c:1747 -msgid "" -"\n" -"\n" -"It looks like the test worked this time, please add:\n" -"\n" -" Hardware End of Medium = No\n" -"\n" -" Fast Forward Space File = No\n" -"to your Device resource in the Storage conf file.\n" +#: src/dird/ua_select.c:346 +msgid "The defined Client resources are:\n" msgstr "" -#: src/stored/btape.c:1754 -msgid "" -"\n" -"\n" -"That appears *NOT* to have corrected the problem.\n" +#: src/dird/ua_select.c:354 src/dird/ua_select.c:463 src/dird/ua_dotcmds.c:945 +#: src/dird/ua_run.c:625 src/dird/ua_cmds.c:1094 +msgid "Client" msgstr "" -#: src/stored/btape.c:1759 -msgid "" -"\n" -"\n" -"It looks like the append failed. Attempting again.\n" -"Setting \"BSF at EOM = yes\" and retrying append test.\n" +#: src/dird/ua_select.c:354 +msgid "Select Client (File daemon) resource" msgstr "" -#: src/stored/btape.c:1764 -msgid "" -"\n" -"\n" -"It looks like the test worked this time, please add:\n" -"\n" -" Hardware End of Medium = No\n" -" Fast Forward Space File = No\n" -" BSF at EOM = yes\n" -"\n" -"to your Device resource in the Storage conf file.\n" +#: src/dird/ua_select.c:381 +#, c-format +msgid "Error: Client resource %s does not exist.\n" msgstr "" -#: src/stored/btape.c:1775 -msgid "" -"\n" -"Append test failed.\n" -"\n" -"\n" -"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n" -"Unable to correct the problem. You MUST fix this\n" -"problem before Bacula can use your tape drive correctly\n" -"\n" -"Perhaps running Bacula in fixed block mode will work.\n" -"Do so by setting:\n" -"\n" -"Minimum Block Size = nnn\n" -"Maximum Block Size = nnn\n" -"\n" -"in your Storage daemon's Device definition.\n" -"nnn must match your tape driver's block size, which\n" -"can be determined by reading your tape manufacturers\n" -"information, and the information on your kernel dirver.\n" -"Fixed block sizes, however, are not normally an ideal solution.\n" -"\n" -"Some systems, e.g. OpenBSD, require you to set\n" -" Use MTIOCGET= no\n" -"in your device resource. Use with caution.\n" +#: src/dird/ua_select.c:406 +#, c-format +msgid "Could not find Client %s: ERR=%s" msgstr "" -#: src/stored/btape.c:1797 -msgid "" -"\n" -"The above Bacula scan should have output identical to what follows.\n" -"Please double check it ...\n" -"=== Sample correct output ===\n" -"1 block of 64448 bytes in file 1\n" -"End of File mark.\n" -"2 blocks of 64448 bytes in file 2\n" -"End of File mark.\n" -"3 blocks of 64448 bytes in file 3\n" -"End of File mark.\n" -"1 block of 64448 bytes in file 4\n" -"End of File mark.\n" -"Total files=4, blocks=7, bytes = 451,136\n" -"=== End sample correct output ===\n" -"\n" -"If the above scan output is not identical to the\n" -"sample output, you MUST correct the problem\n" -"or Bacula will not be able to write multiple Jobs to \n" -"the tape.\n" -"\n" +#: src/dird/ua_select.c:416 src/dird/ua_select.c:470 +#, c-format +msgid "Could not find Client \"%s\": ERR=%s" msgstr "" -#: src/stored/btape.c:1840 +#: src/dird/ua_select.c:445 #, c-format -msgid "Bad status from fsf. ERR=%s\n" +msgid "Error obtaining client ids. ERR=%s\n" msgstr "" -#: src/stored/btape.c:1844 -msgid "Forward spaced 1 file.\n" +#: src/dird/ua_select.c:449 +msgid "No clients defined. You must run a job before using this command.\n" msgstr "" -#: src/stored/btape.c:1847 -#, c-format -msgid "Forward spaced %d files.\n" +#: src/dird/ua_select.c:453 +msgid "Defined Clients:\n" msgstr "" -#: src/stored/btape.c:1866 -msgid "Forward spaced 1 record.\n" +#: src/dird/ua_select.c:463 +msgid "Select the Client" msgstr "" -#: src/stored/btape.c:1869 +#: src/dird/ua_select.c:496 src/dird/ua_select.c:520 src/dird/ua_select.c:565 #, c-format -msgid "Forward spaced %d records.\n" +msgid "Could not find Pool \"%s\": ERR=%s" +msgstr "" + +#: src/dird/ua_select.c:535 +msgid "No pools defined. Use the \"create\" command to create one.\n" +msgstr "" + +#: src/dird/ua_select.c:539 +msgid "Defined Pools:\n" +msgstr "" + +#: src/dird/ua_select.c:541 src/dird/ua_select.c:561 src/dird/ua_update.c:353 +#: src/baconfig.h:76 +msgid "*None*" +msgstr "" + +#: src/dird/ua_select.c:552 src/dird/ua_select.c:665 src/dird/ua_run.c:633 +#: src/dird/ua_update.c:604 +msgid "Pool" +msgstr "" + +#: src/dird/ua_select.c:552 +msgid "Select the Pool" msgstr "" -#: src/stored/btape.c:1914 +#: src/dird/ua_select.c:590 #, c-format -msgid "Wrote one record of %d bytes.\n" +msgid "No access to Pool \"%s\"\n" msgstr "" -#: src/stored/btape.c:1916 -msgid "Wrote block to device.\n" +#: src/dird/ua_select.c:622 +msgid "Enter *MediaId or Volume name: " msgstr "" -#: src/stored/btape.c:1930 -msgid "Enter length to read: " +#: src/dird/ua_select.c:657 +msgid "The defined Pool resources are:\n" msgstr "" -#: src/stored/btape.c:1935 -msgid "Bad length entered, using default of 1024 bytes.\n" +#: src/dird/ua_select.c:665 +msgid "Select Pool resource" msgstr "" -#: src/stored/btape.c:1944 +#: src/dird/ua_select.c:689 src/dird/ua_restore.c:553 #, c-format -msgid "Read of %d bytes gives stat=%d. ERR=%s\n" +msgid "Error: Pool resource \"%s\" does not exist.\n" +msgstr "" + +#: src/dird/ua_select.c:700 +msgid "Enter the JobId to select: " msgstr "" -#: src/stored/btape.c:1967 src/stored/btape.c:2016 +#: src/dird/ua_select.c:738 #, c-format -msgid "End of tape\n" +msgid "Could not find Job \"%s\": ERR=%s" msgstr "" -#: src/stored/btape.c:1972 +#: src/dird/ua_select.c:829 src/dird/ua_select.c:925 #, c-format -msgid "Starting scan at file %u\n" +msgid "Automatically selected %s: %s\n" msgstr "" -#: src/stored/btape.c:1979 +#: src/dird/ua_select.c:840 src/dird/ua_select.c:936 #, c-format -msgid "Bad status from read %d. ERR=%s\n" +msgid "" +"Your request has multiple choices for \"%s\". Selection is not possible in " +"batch mode.\n" msgstr "" -#: src/stored/btape.c:1982 src/stored/btape.c:1996 src/stored/btape.c:2060 -#: src/stored/btape.c:2072 src/stored/btape.c:2085 src/stored/btape.c:2101 +#: src/dird/ua_select.c:858 src/dird/ua_select.c:918 #, c-format -msgid "1 block of %d bytes in file %d\n" +msgid "Selection list for \"%s\" is empty!\n" msgstr "" -#: src/stored/btape.c:1985 src/stored/btape.c:1999 src/stored/btape.c:2063 -#: src/stored/btape.c:2075 src/stored/btape.c:2088 src/stored/btape.c:2104 +#: src/dird/ua_select.c:864 #, c-format -msgid "%d blocks of %d bytes in file %d\n" +msgid "Automatically selected: %s\n" msgstr "" -#: src/stored/btape.c:2007 src/stored/btape.c:2079 +#: src/dird/ua_select.c:876 +msgid "Selection aborted, nothing done.\n" +msgstr "" + +#: src/dird/ua_select.c:881 src/dird/ua_select.c:969 #, c-format -msgid "End of File mark.\n" +msgid "Please enter a number between 1 and %d\n" +msgstr "" + +#: src/dird/ua_select.c:1020 +msgid "Storage name given twice.\n" msgstr "" -#: src/stored/btape.c:2028 src/stored/btape.c:2132 +#: src/dird/ua_select.c:1037 #, c-format -msgid "Total files=%d, blocks=%d, bytes = %s\n" +msgid "Expecting jobid=nn command, got: %s\n" msgstr "" -#: src/stored/btape.c:2092 +#: src/dird/ua_select.c:1041 #, c-format -msgid "Short block read.\n" +msgid "JobId %s is not running.\n" msgstr "" -#: src/stored/btape.c:2095 +#: src/dird/ua_select.c:1051 #, c-format -msgid "Error reading block. ERR=%s\n" +msgid "Expecting job=xxx, got: %s.\n" msgstr "" -#: src/stored/btape.c:2119 +#: src/dird/ua_select.c:1055 #, c-format -msgid "" -"Block=%u file,blk=%u,%u blen=%u First rec FI=%s SessId=%u SessTim=%u Strm=%s " -"rlen=%d\n" +msgid "Job \"%s\" is not running.\n" msgstr "" -#: src/stored/btape.c:2141 +#: src/dird/ua_select.c:1063 #, c-format -msgid "Device status: %u. ERR=%s\n" +msgid "Expecting ujobid=xxx, got: %s.\n" msgstr "" -#: src/stored/btape.c:2173 +#: src/dird/ua_select.c:1084 #, c-format -msgid "" -"\n" -"This command simulates Bacula writing to a tape.\n" -"It requires either one or two blank tapes, which it\n" -"will label and write.\n" -"\n" -"If you have an autochanger configured, it will use\n" -"the tapes that are in slots 1 and 2, otherwise, you will\n" -"be prompted to insert the tapes when necessary.\n" -"\n" -"It will print a status approximately\n" -"every 322 MB, and write an EOF every %s. If you have\n" -"selected the simple test option, after writing the first tape\n" -"it will rewind it and re-read the last block written.\n" -"\n" -"If you have selected the multiple tape test, when the first tape\n" -"fills, it will ask for a second, and after writing a few more \n" -"blocks, it will stop. Then it will begin re-reading the\n" -"two tapes.\n" -"\n" -"This may take a long time -- hours! ...\n" -"\n" +msgid "Storage resource \"%s\": not found\n" msgstr "" -#: src/stored/btape.c:2191 -msgid "" -"Do you want to run the simplified test (s) with one tape\n" -"or the complete multiple tape (m) test: (s/m) " +#: src/dird/ua_select.c:1116 +msgid "Enter autochanger drive[0]: " msgstr "" -#: src/stored/btape.c:2194 -msgid "Simple test (single tape) selected.\n" +#: src/dird/ua_select.c:1137 +msgid "Enter autochanger slot: " msgstr "" -#: src/stored/btape.c:2197 -msgid "Multiple tape test selected.\n" +#: src/dird/ua_select.c:1167 +msgid "Media Types defined in conf file:\n" msgstr "" -#: src/stored/btape.c:2239 -msgid "Wrote Start of Session label.\n" +#: src/dird/ua_select.c:1173 +msgid "Media Type" msgstr "" -#: src/stored/btape.c:2258 -#, c-format -msgid "%s Begin writing Bacula records to tape ...\n" +#: src/dird/ua_select.c:1173 +msgid "Select the Media Type" msgstr "" -#: src/stored/btape.c:2260 +#: src/dird/ua_select.c:1213 +msgid "None of your jobs are running.\n" +msgstr "" + +#: src/dird/ua_select.c:1251 #, c-format -msgid "%s Begin writing Bacula records to first tape ...\n" +msgid "Unauthorized command from this console for JobId=%d.\n" msgstr "" -#: src/stored/btape.c:2286 -msgid "Flush block failed.\n" +#: src/dird/ua_select.c:1257 +#, c-format +msgid "Warning Job JobId=%d is not running. Continuing anyway...\n" msgstr "" -#: src/stored/btape.c:2300 +#: src/dird/ua_select.c:1280 src/dird/ua_select.c:1350 #, c-format -msgid "Wrote block=%u, file,blk=%u,%u VolBytes=%s rate=%sB/s\n" +msgid "Confirm %s of %d Job%s (yes/no): " msgstr "" -#: src/stored/btape.c:2311 +#: src/dird/ua_select.c:1293 src/dird/ua_select.c:1307 #, c-format -msgid "%s Flush block, write EOF\n" +msgid "Warning Job %s is not running. Continuing anyway ...\n" msgstr "" -#: src/stored/btape.c:2320 -msgid "Wrote 1000 blocks on second tape. Done.\n" +#: src/dird/ua_select.c:1329 +msgid "Select Job(s):\n" msgstr "" -#: src/stored/btape.c:2325 -msgid "Not OK\n" +#: src/dird/ua_select.c:1335 +#, c-format +msgid "JobId=%s Job=%s" msgstr "" -#: src/stored/btape.c:2349 -msgid "Job canceled.\n" +#: src/dird/ua_select.c:1339 +#, c-format +msgid "Choose Job list to %s" msgstr "" -#: src/stored/btape.c:2360 -msgid "Set ok=false after write_block_to_device.\n" +#: src/dird/ua_select.c:1359 src/dird/ua_select.c:1366 src/dird/ua_cmds.c:804 +#: src/dird/ua_cmds.c:1199 +#, c-format +msgid "Job \"%s\" not found.\n" msgstr "" -#: src/stored/btape.c:2364 -msgid "Wrote End of Session label.\n" +#: src/dird/run_conf.c:205 +#, c-format +msgid "Expected an equals, got: %s" msgstr "" -#: src/stored/btape.c:2388 +#: src/dird/run_conf.c:218 src/dird/run_conf.c:230 src/dird/run_conf.c:330 #, c-format -msgid "Wrote state file last_block_num1=%d last_block_num2=%d\n" +msgid "Expect a YES or NO, got: %s" msgstr "" -#: src/stored/btape.c:2392 +#: src/dird/run_conf.c:245 #, c-format -msgid "Could not create state file: %s ERR=%s\n" +msgid "Job level field: %s not found in run record" msgstr "" -#: src/stored/btape.c:2403 +#: src/dird/run_conf.c:265 #, c-format -msgid "" -"\n" -"\n" -"%s Done filling tape at %d:%d. Now beginning re-read of tape ...\n" +msgid "Could not find specified Pool Resource: %s" msgstr "" -#: src/stored/btape.c:2406 +#: src/dird/run_conf.c:293 #, c-format -msgid "" -"\n" -"\n" -"%s Done filling tapes at %d:%d. Now beginning re-read of first tape ...\n" +msgid "Could not find specified Storage Resource: %s" msgstr "" -#: src/stored/btape.c:2412 -msgid "do_unfill failed.\n" +#: src/dird/run_conf.c:305 +#, c-format +msgid "Could not find specified Messages Resource: %s" msgstr "" -#: src/stored/btape.c:2417 +#: src/dird/run_conf.c:334 #, c-format -msgid "%s: Error during test.\n" +msgid "Expected a keyword name, got: %s" msgstr "" -#: src/stored/btape.c:2452 -msgid "" -"\n" -"The state file level has changed. You must redo\n" -"the fill command.\n" +#: src/dird/run_conf.c:373 +msgid "Day number out of range (1-31)" +msgstr "" + +#: src/dird/run_conf.c:390 src/dird/run_conf.c:552 +msgid "Week number out of range (0-53)" msgstr "" -#: src/stored/btape.c:2459 +#: src/dird/run_conf.c:406 #, c-format -msgid "" -"\n" -"Could not find the state file: %s ERR=%s\n" -"You must redo the fill command.\n" +msgid "Job type field: %s in run record not found" msgstr "" -#: src/stored/btape.c:2525 -msgid "Mount first tape. Press enter when ready: " +#: src/dird/run_conf.c:413 +#, c-format +msgid "Unexpected token: %d:%s" msgstr "" -#: src/stored/btape.c:2541 -msgid "Rewinding.\n" +#: src/dird/run_conf.c:457 +msgid "Time must be preceded by keyword AT." msgstr "" -#: src/stored/btape.c:2546 -#, c-format -msgid "Reading the first 10000 records from %u:%u.\n" +#: src/dird/run_conf.c:466 +msgid "Time logic error.\n" +msgstr "" + +#: src/dird/run_conf.c:481 src/dird/run_conf.c:500 +msgid "Bad time specification." +msgstr "" + +#: src/dird/run_conf.c:521 +msgid "Range logic error.\n" +msgstr "" + +#: src/dird/run_conf.c:530 +msgid "Bad day range specification." +msgstr "" + +#: src/dird/run_conf.c:577 +msgid "Invalid month, week or position day range" +msgstr "" + +#: src/dird/run_conf.c:592 +msgid "Invalid month, weekday or position range" +msgstr "" + +#: src/dird/run_conf.c:651 +msgid "Unexpected run state\n" msgstr "" -#: src/stored/btape.c:2550 src/stored/btape.c:2618 +#: src/dird/restore.c:132 src/dird/msgchan.c:508 #, c-format -msgid "Reposition from %u:%u to %u:%u\n" +msgid "Could not open bootstrap file %s: ERR=%s\n" msgstr "" -#: src/stored/btape.c:2553 src/stored/btape.c:2605 src/stored/btape.c:2621 +#: src/dird/restore.c:180 src/dird/restore.c:271 #, c-format -msgid "Reposition error. ERR=%s\n" +msgid "Could not get storage resource '%s'.\n" msgstr "" -#: src/stored/btape.c:2556 +#: src/dird/restore.c:307 #, c-format -msgid "Reading block %u.\n" +msgid "Could not acquire read storage lock for \"%s\"" +msgstr "" + +#: src/dird/restore.c:407 src/dird/verify.c:275 src/dird/backup.c:512 +msgid "The File daemon does not support SDCallsClient.\n" +msgstr "" + +#: src/dird/restore.c:525 +msgid "" +"Cannot restore without a bootstrap file.\n" +"You probably ran a restore job directly. All restore jobs must\n" +"be run using the restore command.\n" msgstr "" -#: src/stored/btape.c:2558 src/stored/btape.c:2610 src/stored/btape.c:2626 +#: src/dird/restore.c:533 #, c-format -msgid "Error reading block: ERR=%s\n" +msgid "Start Restore Job %s\n" msgstr "" -#: src/stored/btape.c:2563 +#: src/dird/restore.c:584 +msgid "Restore OK -- warning file count mismatch" +msgstr "" + +#: src/dird/restore.c:586 +msgid "Restore OK" +msgstr "" + +#: src/dird/restore.c:590 +msgid "Restore OK -- with warnings" +msgstr "" + +#: src/dird/restore.c:594 +msgid "*** Restore Error ***" +msgstr "" + +#: src/dird/restore.c:604 +msgid "Restore Canceled" +msgstr "" + +#: src/dird/restore.c:631 +#, c-format msgid "" +"%s %s %s (%s):\n" +" Build OS: %s %s %s\n" +" JobId: %d\n" +" Job: %s\n" +" Restore Client: %s\n" +" Start time: %s\n" +" End time: %s\n" +" Files Expected: %s\n" +" Files Restored: %s\n" +" Bytes Restored: %s\n" +" Rate: %.1f KB/s\n" +" FD Errors: %d\n" +" FD termination status: %s\n" +" SD termination status: %s\n" +" Termination: %s\n" "\n" -"The last block on the tape matches. Test succeeded.\n" -"\n" msgstr "" -#: src/stored/btape.c:2566 -msgid "" -"\n" -"The last block of the first tape matches.\n" -"\n" +#: src/dird/admin.c:53 +#, c-format +msgid "Start Admin JobId %d, Job=%s\n" +msgstr "" + +#: src/dird/admin.c:86 +msgid "Admin OK" +msgstr "" + +#: src/dird/admin.c:90 +msgid "*** Admin Error ***" msgstr "" -#: src/stored/btape.c:2590 -msgid "Mount second tape. Press enter when ready: " +#: src/dird/admin.c:94 +msgid "Admin Canceled" msgstr "" -#: src/stored/btape.c:2603 -#, c-format -msgid "Reposition from %u:%u to 0:1\n" +#: src/dird/admin.c:106 src/lib/status.h:171 src/lib/status.h:182 +#: src/lib/status.h:196 src/lib/status.h:200 src/lib/status.h:204 +msgid "Bacula " msgstr "" -#: src/stored/btape.c:2608 src/stored/btape.c:2624 -#, c-format -msgid "Reading block %d.\n" +#: src/dird/ua_status.c:170 +msgid "Status available for:\n" msgstr "" -#: src/stored/btape.c:2614 -msgid "" -"\n" -"The first block on the second tape matches.\n" -"\n" +#: src/dird/ua_status.c:177 +msgid "Select daemon type for status" msgstr "" -#: src/stored/btape.c:2630 -msgid "" -"\n" -"The last block on the second tape matches. Test succeeded.\n" -"\n" +#: src/dird/ua_status.c:297 +#, c-format +msgid "Daemon started %s. Jobs: run=%d, running=%d mode=%d,%d\n" msgstr "" -#: src/stored/btape.c:2647 +#: src/dird/ua_status.c:353 #, c-format -msgid "10000 records read now at %d:%d\n" +msgid "No authorization for Storage \"%s\"\n" msgstr "" -#: src/stored/btape.c:2673 src/stored/btape.c:2684 src/stored/btape.c:2729 -msgid "Last block written" +#: src/dird/ua_status.c:363 +msgid "Restricted Client or Job does not permit access to Storage daemons\n" msgstr "" -#: src/stored/btape.c:2675 src/stored/btape.c:2685 -msgid "Block read back" +#: src/dird/ua_status.c:370 src/dird/ua_dotcmds.c:834 src/dird/ua_cmds.c:839 +#, c-format +msgid "Connecting to Storage daemon %s at %s:%d\n" msgstr "" -#: src/stored/btape.c:2676 +#: src/dird/ua_status.c:373 #, c-format msgid "" "\n" -"\n" -"The blocks differ at byte %u\n" +"Failed to connect to Storage daemon %s.\n" +"====\n" msgstr "" -#: src/stored/btape.c:2677 -msgid "" -"\n" -"\n" -"!!!! The last block written and the block\n" -"that was read back differ. The test FAILED !!!!\n" -"This must be corrected before you use Bacula\n" -"to write multi-tape Volumes.!!!!\n" +#: src/dird/ua_status.c:405 src/dird/ua_cmds.c:1186 src/dird/ua_cmds.c:1994 +#, c-format +msgid "No authorization for Client \"%s\"\n" msgstr "" -#: src/stored/btape.c:2713 +#: src/dird/ua_status.c:418 src/dird/ua_dotcmds.c:859 src/dird/ua_cmds.c:662 +#: src/dird/ua_cmds.c:875 src/dird/ua_cmds.c:1307 #, c-format -msgid "Last block at: %u:%u this_dev_block_num=%d\n" +msgid "Connecting to Client %s at %s:%d\n" msgstr "" -#: src/stored/btape.c:2727 +#: src/dird/ua_status.c:421 #, c-format -msgid "Block not written: FileIndex=%u blk_block=%u Size=%u\n" +msgid "" +"Failed to connect to Client %s.\n" +"====\n" msgstr "" -#: src/stored/btape.c:2731 -msgid "Block not written" +#: src/dird/ua_status.c:426 +msgid "Connected to file daemon\n" msgstr "" -#: src/stored/btape.c:2746 -#, c-format -msgid "End of tape %d:%d. Volume Bytes=%s. Write rate = %sB/s\n" +#: src/dird/ua_status.c:445 src/dird/ua_status.c:454 +msgid "" +"\n" +"Scheduled Jobs:\n" msgstr "" -#: src/stored/btape.c:2797 -msgid "Test writing blocks of 64512 bytes to tape.\n" +#: src/dird/ua_status.c:446 +msgid "" +"Level Type Pri Scheduled Job Name Volume\n" msgstr "" -#: src/stored/btape.c:2799 -msgid "How many blocks do you want to write? (1000): " +#: src/dird/ua_status.c:447 +msgid "===================================================================================\n" +msgstr "" + +#: src/dird/ua_status.c:455 +msgid "" +"Level Type Pri Scheduled Job Name Schedule\n" msgstr "" -#: src/stored/btape.c:2816 +#: src/dird/ua_status.c:456 +msgid "=====================================================================================\n" +msgstr "" + +#: src/dird/ua_status.c:513 src/dird/ua_status.c:678 #, c-format -msgid "Begin writing %d Bacula blocks to tape ...\n" +msgid "%-14s\t%-8s\t%3d\t%-18s\t%-18s\t%s\n" msgstr "" -#: src/stored/btape.c:2859 +#: src/dird/ua_status.c:517 src/dird/ua_status.c:682 #, c-format -msgid "Begin writing raw blocks of %u bytes.\n" +msgid "%-14s %-8s %3d %-18s %-18s %s\n" msgstr "" -#: src/stored/btape.c:2890 -msgid "test autochanger" +#: src/dird/ua_status.c:553 src/dird/ua_status.c:748 +msgid "Ignoring invalid value for days. Max is 500.\n" msgstr "" -#: src/stored/btape.c:2891 -msgid "backspace file" +#: src/dird/ua_status.c:564 +msgid "Ignoring invalid value for limit. Max is 2000.\n" msgstr "" -#: src/stored/btape.c:2892 -msgid "backspace record" +#: src/dird/ua_status.c:575 +msgid "Ignoring invalid time.\n" msgstr "" -#: src/stored/btape.c:2893 -msgid "list device capabilities" +#: src/dird/ua_status.c:697 src/dird/ua_status.c:801 +msgid "No Scheduled Jobs.\n" msgstr "" -#: src/stored/btape.c:2894 -msgid "clear tape errors" +#: src/dird/ua_status.c:826 +#, c-format +msgid "Console connected at %s\n" msgstr "" -#: src/stored/btape.c:2895 -msgid "go to end of Bacula data for append" +#: src/dird/ua_status.c:837 +msgid "" +"No Jobs running.\n" +"====\n" msgstr "" -#: src/stored/btape.c:2896 -msgid "go to the physical end of medium" +#: src/dird/ua_status.c:844 +msgid " JobId Type Level Files Bytes Name Status\n" msgstr "" -#: src/stored/btape.c:2897 -msgid "fill tape, write onto second volume" +#: src/dird/ua_status.c:845 +msgid "======================================================================\n" msgstr "" -#: src/stored/btape.c:2898 -msgid "read filled tape" +#: src/dird/ua_status.c:854 +msgid "is waiting execution" msgstr "" -#: src/stored/btape.c:2899 -msgid "forward space a file" +#: src/dird/ua_status.c:857 +msgid "is running" msgstr "" -#: src/stored/btape.c:2900 -msgid "forward space a record" +#: src/dird/ua_status.c:860 +msgid "is blocked" msgstr "" -#: src/stored/btape.c:2901 -msgid "print this command" +#: src/dird/ua_status.c:863 +msgid "has terminated" msgstr "" -#: src/stored/btape.c:2902 -msgid "write a Bacula label to the tape" +#: src/dird/ua_status.c:866 +msgid "has terminated with warnings" msgstr "" -#: src/stored/btape.c:2903 -msgid "load a tape" +#: src/dird/ua_status.c:869 +msgid "has erred" msgstr "" -#: src/stored/btape.c:2904 -msgid "quit btape" +#: src/dird/ua_status.c:872 +msgid "has errors" msgstr "" -#: src/stored/btape.c:2905 -msgid "use write() to fill tape" +#: src/dird/ua_status.c:875 +msgid "has a fatal error" msgstr "" -#: src/stored/btape.c:2906 -msgid "read and print the Bacula tape label" +#: src/dird/ua_status.c:878 +msgid "has verify differences" msgstr "" -#: src/stored/btape.c:2907 -msgid "test record handling functions" +#: src/dird/ua_status.c:881 +msgid "has been canceled" msgstr "" -#: src/stored/btape.c:2908 -msgid "rewind the tape" +#: src/dird/ua_status.c:886 +msgid "is waiting on Client" msgstr "" -#: src/stored/btape.c:2909 -msgid "read() tape block by block to EOT and report" +#: src/dird/ua_status.c:888 +#, c-format +msgid "is waiting on Client %s" msgstr "" -#: src/stored/btape.c:2910 -msgid "Bacula read block by block to EOT and report" +#: src/dird/ua_status.c:896 src/dird/ua_status.c:898 +#, c-format +msgid "is waiting on Storage \"%s\"" msgstr "" -#: src/stored/btape.c:2911 -msgid "" -"[file_size=n(GB)|nb_file=3|skip_zero|skip_random|skip_raw|skip_block] report " -"drive speed" +#: src/dird/ua_status.c:900 +msgid "is waiting on Storage" msgstr "" -#: src/stored/btape.c:2912 -msgid "print tape status" +#: src/dird/ua_status.c:906 +msgid "is waiting on max Storage jobs" msgstr "" -#: src/stored/btape.c:2913 -msgid "General test Bacula tape functions" +#: src/dird/ua_status.c:909 +msgid "is waiting on max Client jobs" msgstr "" -#: src/stored/btape.c:2914 -msgid "write an EOF on the tape" +#: src/dird/ua_status.c:912 +msgid "is waiting on max Job jobs" msgstr "" -#: src/stored/btape.c:2915 -msgid "write a single Bacula block" +#: src/dird/ua_status.c:915 +msgid "is waiting on max total jobs" msgstr "" -#: src/stored/btape.c:2916 -msgid "read a single record" +#: src/dird/ua_status.c:919 +#, c-format +msgid "is waiting for its start time (%s)" msgstr "" -#: src/stored/btape.c:2917 -msgid "read a single Bacula block" +#: src/dird/ua_status.c:925 +msgid "is waiting for higher priority jobs to finish" msgstr "" -#: src/stored/btape.c:2918 -msgid "quick fill command" +#: src/dird/ua_status.c:928 +msgid "is waiting for a Shared Storage device" msgstr "" -#: src/stored/btape.c:2939 +#: src/dird/ua_status.c:945 #, c-format -msgid "\"%s\" is an invalid command\n" +msgid "is in unknown state %c" msgstr "" -#: src/stored/btape.c:2948 -#, c-format -msgid "Interactive commands:\n" +#: src/dird/ua_status.c:959 +msgid "is waiting for a mount request" msgstr "" -#: src/stored/btape.c:2959 -#, c-format -msgid "" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: btape \n" -" -b specify bootstrap file\n" -" -c set configuration file to file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -p proceed inspite of I/O errors\n" -" -s turn off signals\n" -" -v be verbose\n" -" -? print this message.\n" -"\n" +#: src/dird/ua_status.c:966 +msgid "is waiting for an appendable Volume" msgstr "" -#: src/stored/btape.c:3047 -#, c-format -msgid "Mount second Volume on device %s and press return when ready: " +#: src/dird/ua_status.c:974 +msgid "is waiting for Client to connect to Storage daemon" msgstr "" -#: src/stored/btape.c:3075 +#: src/dird/ua_status.c:976 #, c-format -msgid "Mount blank Volume on device %s and press return when ready: " +msgid "is waiting for Client %s to connect to Storage %s" msgstr "" -#: src/stored/btape.c:3095 +#: src/dird/ua_status.c:1007 #, c-format -msgid "End of Volume \"%s\" %d records.\n" +msgid "%6d\t%-6s\t%-20s\t%s\t%s\n" msgstr "" -#: src/stored/btape.c:3109 +#: src/dird/ua_status.c:1015 #, c-format -msgid "Read block=%u, VolBytes=%s rate=%sB/s\n" +msgid "%6d %-4s %-3s %10s %10s %-17s %s\n" msgstr "" -#: src/stored/authenticate.c:61 -#, c-format -msgid "I only authenticate Directors, not %d\n" +#: src/dird/ua_status.c:1040 +msgid "No Terminated Jobs.\n" msgstr "" -#: src/stored/authenticate.c:67 src/filed/authenticate.c:76 -#, c-format -msgid "Bad Hello command from Director at %s. Len=%d.\n" +#: src/dird/ua_status.c:1046 src/lib/status.h:73 +msgid "" +"\n" +"Terminated Jobs:\n" msgstr "" -#: src/stored/authenticate.c:78 src/filed/authenticate.c:88 -#, c-format -msgid "Bad Hello command from Director at %s: %s\n" +#: src/dird/ua_status.c:1047 src/lib/status.h:80 +msgid " JobId Level Files Bytes Status Finished Name \n" msgstr "" -#: src/stored/authenticate.c:92 -#, c-format -msgid "" -"Connection from unknown Director %s at %s rejected.\n" -"Please see " +#: src/dird/ua_status.c:1048 +msgid "====================================================================\n" msgstr "" -#: src/stored/authenticate.c:129 -msgid "" -"Incorrect password given by Director.\n" -"Please see " +#: src/dird/ua_status.c:1087 src/lib/status.h:109 +msgid "Diffs" msgstr "" -#: src/stored/authenticate.c:137 src/stored/authenticate.c:248 -#: src/filed/authenticate.c:151 src/filed/authenticate.c:270 -msgid "" -"Authorization problem: Remote server did not advertize required TLS " -"support.\n" +#: src/dird/ua_status.c:1090 src/dird/ua_restore.c:443 src/lib/status.h:112 +msgid "Cancel" msgstr "" -#: src/stored/authenticate.c:155 -#, c-format -msgid "TLS negotiation failed with DIR at \"%s:%d\"\n" +#: src/dird/ua_status.c:1099 src/lib/status.h:122 +msgid "Other" msgstr "" -#: src/stored/authenticate.c:191 +#: src/dird/ua_status.c:1103 src/lib/status.h:134 #, c-format -msgid "Unable to authenticate Director at %s.\n" +msgid "%6d\t%-6s\t%8s\t%10s\t%-7s\t%-8s\t%s\n" msgstr "" -#: src/stored/authenticate.c:239 src/stored/authenticate.c:279 +#: src/dird/ua_status.c:1111 src/lib/status.h:142 #, c-format -msgid "" -"Incorrect authorization key from File daemon at %s rejected.\n" -"Please see " +msgid "%6d %-6s %8s %10s %-7s %-8s %s\n" msgstr "" -#: src/stored/authenticate.c:266 -#, c-format -msgid "TLS negotiation failed with FD at \"%s:%d\"\n" +#: src/dird/ua_status.c:1121 +msgid "\n" msgstr "" -#: src/stored/wait.c:133 +#: src/dird/next_vol.c:163 #, c-format -msgid "pthread timedwait error. ERR=%s\n" +msgid "Purging oldest volume \"%s\"\n" msgstr "" -#: src/stored/wait.c:239 +#: src/dird/next_vol.c:169 #, c-format -msgid "JobId=%s, Job %s waiting to reserve a device.\n" +msgid "Pruning oldest volume \"%s\"\n" msgstr "" -#: src/stored/block.c:102 -#, c-format -msgid "" -"Dump block %s %x: size=%d BlkNum=%d\n" -" Hdrcksum=%x cksum=%x\n" +#: src/dird/next_vol.c:188 +msgid "We seem to be looping trying to find the next volume. I give up.\n" msgstr "" -#: src/stored/block.c:115 +#: src/dird/next_vol.c:215 #, c-format -msgid " Rec: VId=%u VT=%u FI=%s Strm=%s len=%d p=%x\n" +msgid "Max Volume bytes=%s exceeded. Marking Volume \"%s\" as Full.\n" msgstr "" -#: src/stored/block.c:171 +#: src/dird/next_vol.c:223 #, c-format -msgid "%d block read errors not printed.\n" +msgid "Volume used once. Marking Volume \"%s\" as Used.\n" msgstr "" -#: src/stored/block.c:264 src/stored/block.c:280 src/stored/block.c:290 +#: src/dird/next_vol.c:230 #, c-format -msgid "" -"Volume data error at %u:%u! Wanted ID: \"%s\", got \"%s\". Buffer " -"discarded.\n" +msgid "Max Volume jobs=%s exceeded. Marking Volume \"%s\" as Used.\n" msgstr "" -#: src/stored/block.c:305 +#: src/dird/next_vol.c:240 #, c-format -msgid "" -"Volume data error at %u:%u! Block length %u is insane (too large), probably " -"due to a bad archive.\n" +msgid "Max Volume files=%s exceeded. Marking Volume \"%s\" as Used.\n" msgstr "" -#: src/stored/block.c:331 +#: src/dird/next_vol.c:251 #, c-format msgid "" -"Volume data error at %u:%u!\n" -"Block checksum mismatch in block=%u len=%d: calc=%x blk=%x\n" +"Max configured use duration=%s sec. exceeded. Marking Volume \"%s\" as " +"Used.\n" msgstr "" -#: src/stored/block.c:452 +#: src/dird/next_vol.c:264 #, c-format -msgid "Cannot write block. Device at EOM. dev=%s\n" +msgid "Catalog error updating volume \"%s\". ERR=%s" msgstr "" -#: src/stored/block.c:458 -#, c-format -msgid "Attempt to write on read-only Volume. dev=%s\n" +#: src/dird/next_vol.c:286 +msgid "volume has expired" msgstr "" -#: src/stored/block.c:464 +#: src/dird/next_vol.c:304 src/dird/next_vol.c:348 #, c-format -msgid "Attempt to write on closed device=%s\n" +msgid "Recycled current volume \"%s\"\n" +msgstr "" + +#: src/dird/next_vol.c:309 +msgid "and recycling of current volume failed" msgstr "" -#: src/stored/block.c:513 -#, c-format -msgid "User defined maximum volume capacity %s exceeded on device %s.\n" +#: src/dird/next_vol.c:315 +msgid "but should be Append, Purged or Recycle" msgstr "" -#: src/stored/block.c:528 -#, c-format -msgid "Unable to write EOF. ERR=%s\n" +#: src/dird/next_vol.c:324 +msgid "volume has recycling disabled" msgstr "" -#: src/stored/block.c:554 src/stored/block.c:588 -msgid "Write block header zeroed.\n" +#: src/dird/next_vol.c:351 +msgid "" +"but should be Append, Purged or Recycle (recycling of the current volume " +"failed)" msgstr "" -#: src/stored/block.c:580 -#, c-format -msgid "Block checksum changed during write: before=%ud after=%ud\n" +#: src/dird/next_vol.c:355 +msgid "" +"but should be Append, Purged or Recycle (cannot automatically recycle " +"current volume, as it still contains unpruned data or the Volume Retention " +"time has not expired.)" msgstr "" -#: src/stored/block.c:607 +#: src/dird/next_vol.c:415 #, c-format -msgid "Write error at %u:%u on device %s. ERR=%s.\n" +msgid "Unable to get Pool record: ERR=%s" msgstr "" -#: src/stored/block.c:614 +#: src/dird/next_vol.c:422 #, c-format -msgid "End of Volume \"%s\" at %u:%u on device %s. Write of %u bytes got %d.\n" +msgid "Unable add Scratch Volume, Pool \"%s\" full MaxVols=%d\n" msgstr "" -#: src/stored/block.c:695 src/stored/block.c:701 +#: src/dird/next_vol.c:442 #, c-format -msgid "Backspace file at EOT failed. ERR=%s\n" +msgid "Failed to move Scratch Volume. ERR=%s\n" msgstr "" -#: src/stored/block.c:708 +#: src/dird/next_vol.c:447 #, c-format -msgid "Backspace record at EOT failed. ERR=%s\n" +msgid "Using Volume \"%s\" from 'Scratch' pool.\n" msgstr "" -#: src/stored/block.c:725 +#: src/dird/authenticate.c:77 src/dird/authenticate.c:78 +#: src/qt-console/tray-monitor/authenticate.cpp:119 #, c-format -msgid "Re-read last block at EOT failed. ERR=%s" +msgid "Error sending Hello to Storage daemon. ERR=%s\n" msgstr "" -#: src/stored/block.c:735 -#, c-format -msgid "" -"Re-read of last block: block numbers differ by more than one.\n" -"Probable tape misconfiguration and data loss. Read block=%u Want block=%u.\n" +#: src/dird/authenticate.c:107 +msgid "Director and Storage daemon passwords or names not the same.\n" msgstr "" -#: src/stored/block.c:740 +#: src/dird/authenticate.c:109 #, c-format msgid "" -"Re-read of last block OK, but block numbers differ. Read block=%u Want block=" -"%u.\n" -msgstr "" - -#: src/stored/block.c:744 -msgid "Re-read of last block succeeded.\n" +"Director unable to authenticate with Storage daemon at \"%s:%d\". Possible " +"causes:\n" +"Passwords or names not the same or\n" +"Maximum Concurrent Jobs exceeded on the SD or\n" +"SD networking messed up (restart daemon).\n" +"Please see " msgstr "" -#: src/stored/block.c:777 +#: src/dird/authenticate.c:137 #, c-format -msgid "" -"Error writing final EOF to tape. This Volume may not be readable.\n" -"%s" +msgid "TLS negotiation failed with SD at \"%s:%d\"\n" msgstr "" -#: src/stored/block.c:791 +#: src/dird/authenticate.c:149 #, c-format -msgid "" -"Error writing final part to DVD. This Volume may not be readable.\n" -"%s" +msgid "bdirdqnext->qprev != qp called from %s:%d\n" +msgid " st_mode differ. Cat: %x File: %x\n" msgstr "" -#: src/lib/smartall.c:206 +#: src/dird/verify.c:654 #, c-format -msgid "qp->qprev->qnext != qp called from %s:%d\n" +msgid " st_nlink differ. Cat: %d File: %d\n" msgstr "" -#: src/lib/smartall.c:215 +#: src/dird/verify.c:662 #, c-format -msgid "Overrun buffer: len=%d addr=%p allocated: %s:%d called from %s:%d\n" +msgid " st_uid differ. Cat: %u File: %u\n" msgstr "" -#: src/lib/smartall.c:293 +#: src/dird/verify.c:670 #, c-format -msgid "sm_realloc size: %d\n" +msgid " st_gid differ. Cat: %u File: %u\n" msgstr "" -#: src/lib/smartall.c:331 +#: src/dird/verify.c:678 #, c-format -msgid "sm_realloc %d at %p from %s:%d\n" +msgid " st_size differ. Cat: %s File: %s\n" msgstr "" -#: src/lib/smartall.c:391 -#, c-format -msgid "" -"\n" -"Orphaned buffers exist. Dump terminated following\n" -" discovery of bad links in chain of orphaned buffers.\n" -" Buffer address with bad links: %p\n" +#: src/dird/verify.c:687 +msgid " st_atime differs\n" msgstr "" -#: src/lib/smartall.c:436 -#, c-format -msgid "Damaged buffer found. Called from %s:%d\n" +#: src/dird/verify.c:694 +msgid " st_mtime differs\n" msgstr "" -#: src/lib/smartall.c:469 -#, c-format -msgid "" -"\n" -"Damaged buffers found at %s:%d\n" +#: src/dird/verify.c:701 +msgid " st_ctime differs\n" msgstr "" -#: src/lib/smartall.c:472 -msgid " discovery of bad prev link.\n" +#: src/dird/verify.c:708 +#, c-format +msgid " st_size decrease. Cat: %s File: %s\n" msgstr "" -#: src/lib/smartall.c:475 -msgid " discovery of bad next link.\n" +#: src/dird/verify.c:738 +#, c-format +msgid "MD5/SHA1 index %d not same as attributes %d\n" msgstr "" -#: src/lib/smartall.c:478 -msgid " discovery of data overrun.\n" +#: src/dird/verify.c:746 +#, c-format +msgid " %s differs. File=%s Cat=%s\n" msgstr "" -#: src/lib/smartall.c:481 -msgid " NULL pointer.\n" +#: src/dird/verify.c:757 +#, c-format +msgid "bdirdInChanger):\n" +" Volume(s) Storage(s) SD Device(s)\n" +"===========================================================================\n" msgstr "" -#: src/lib/util.c:205 src/lib/util.c:337 -msgid "Canceled" +#: src/dird/bsr.c:306 +msgid "No Volumes found to restore.\n" msgstr "" -#: src/lib/util.c:208 -msgid "Verify differences" +#: src/dird/bsr.c:308 +msgid "" +"\n" +"Volumes marked with \"*\" are in the Autochanger.\n" msgstr "" -#: src/lib/util.c:211 -msgid "Waiting on FD" +#: src/dird/fd_cmds.c:89 +msgid "Client: " msgstr "" -#: src/lib/util.c:214 -msgid "Wait on SD" +#: src/dird/fd_cmds.c:125 +#, c-format +msgid "File daemon \"%s\" rejected Job command: %s\n" msgstr "" -#: src/lib/util.c:217 -msgid "Wait for new Volume" +#: src/dird/fd_cmds.c:138 +#, c-format +msgid "Error updating Client record. ERR=%s\n" msgstr "" -#: src/lib/util.c:220 -msgid "Waiting for mount" +#: src/dird/fd_cmds.c:143 +#, c-format +msgid "FD gave bad response to JobId command: %s\n" msgstr "" -#: src/lib/util.c:223 -msgid "Waiting for Storage resource" +#: src/dird/fd_cmds.c:172 src/dird/fd_cmds.c:260 +msgid ", since=" msgstr "" -#: src/lib/util.c:226 -msgid "Waiting for Job resource" +#: src/dird/fd_cmds.c:237 +msgid "No prior or suitable Full backup found in catalog. Doing FULL backup.\n" msgstr "" -#: src/lib/util.c:229 -msgid "Waiting for Client resource" +#: src/dird/fd_cmds.c:238 src/dird/fd_cmds.c:244 src/dird/fd_cmds.c:253 +#, c-format +msgid " (upgraded from %s)" msgstr "" -#: src/lib/util.c:232 -msgid "Waiting on Max Jobs" +#: src/dird/fd_cmds.c:243 +msgid "" +"No prior or suitable Differential backup found in catalog. Doing " +"Differential backup.\n" msgstr "" -#: src/lib/util.c:235 -msgid "Waiting for Start Time" +#: src/dird/fd_cmds.c:251 +#, c-format +msgid "Prior failed job found in catalog. Upgrading to %s.\n" msgstr "" -#: src/lib/util.c:238 -msgid "Waiting on Priority" +#: src/dird/fd_cmds.c:329 +#, c-format +msgid "Unimplemented backup level %d %c\n" +msgstr "" + +#: src/dird/fd_cmds.c:402 +msgid "" +"FD compression disabled for this Job because AllowCompress=No in Storage " +"resource.\n" msgstr "" -#: src/lib/util.c:257 +#: src/dird/fd_cmds.c:501 src/filed/job.c:1014 #, c-format -msgid "Unknown Job termination status=%d" +msgid "Cannot run program: %s. ERR=%s\n" msgstr "" -#: src/lib/util.c:273 -msgid "Completed successfully" +#: src/dird/fd_cmds.c:512 src/dird/fd_cmds.c:537 src/dird/fd_cmds.c:551 +msgid ">filed: write error on socket\n" msgstr "" -#: src/lib/util.c:276 -msgid "Completed with warnings" +#: src/dird/fd_cmds.c:518 +#, c-format +msgid "Error running program: %s. ERR=%s\n" msgstr "" -#: src/lib/util.c:279 -msgid "Terminated with errors" +#: src/dird/fd_cmds.c:527 +#, c-format +msgid "Cannot open included file: %s. ERR=%s\n" msgstr "" -#: src/lib/util.c:282 -msgid "Fatal error" +#: src/dird/fd_cmds.c:672 +#, c-format +msgid "Client \"%s\" RunScript failed.\n" msgstr "" -#: src/lib/util.c:285 -msgid "Created, not yet running" +#: src/dird/fd_cmds.c:695 +#, c-format +msgid "" +"Client \"%s\" may not be used to restore this job. Please upgrade your " +"client.\n" msgstr "" -#: src/lib/util.c:288 -msgid "Canceled by user" +#: src/dird/fd_cmds.c:776 +msgid "RestoreObject failed.\n" msgstr "" -#: src/lib/util.c:291 -msgid "Verify found differences" +#: src/dird/fd_cmds.c:816 +#, c-format +msgid "" +" %s\n" msgstr "" -#: src/lib/res.c:65 -#, c-format -msgid "rwl_writelock failure at %s:%d: ERR=%s\n" +#: src/dird/ua_run.c:1132 +msgid "Cannot use your regexp.\n" msgstr "" -#: src/lib/res.c:75 -#, c-format -msgid "rwl_writeunlock failure at %s:%d:. ERR=%s\n" +#: src/dird/ua_run.c:1145 src/dird/ua_run.c:1175 +msgid "Levels:\n" msgstr "" -#: src/lib/parse_conf.c:177 -msgid "***UNKNOWN***" +#: src/dird/ua_run.c:1151 +msgid "VirtualFull" msgstr "" -#: src/lib/parse_conf.c:278 src/lib/parse_conf.c:299 -#, c-format -msgid "expected an =, got: %s" +#: src/dird/ua_run.c:1152 src/dird/ua_run.c:1181 +msgid "Select level" msgstr "" -#: src/lib/parse_conf.c:308 -#, c-format -msgid "Unknown item code: %d\n" +#: src/dird/ua_run.c:1176 +msgid "Initialize Catalog" msgstr "" -#: src/lib/parse_conf.c:348 -#, c-format -msgid "message type: %s not found" +#: src/dird/ua_run.c:1180 +msgid "Verify Volume Data (not yet implemented)" msgstr "" -#: src/lib/parse_conf.c:386 -#, c-format -msgid "Attempt to redefine name \"%s\" to \"%s\"." +#: src/dird/ua_run.c:1201 +msgid "Level not appropriate for this Job. Cannot be changed.\n" msgstr "" -#: src/lib/parse_conf.c:483 +#: src/dird/ua_run.c:1232 #, c-format -msgid "Attempt to redefine resource \"%s\" referenced on line %d : %s\n" +msgid "" +"Run Admin Job\n" +"JobName: %s\n" +"FileSet: %s\n" +"Client: %s\n" +"Storage: %s\n" +"When: %s\n" +"Priority: %d\n" msgstr "" -#: src/lib/parse_conf.c:519 +#: src/dird/ua_run.c:1286 #, c-format -msgid "Too many %s directives. Max. is %d. line %d: %s\n" +msgid "" +"Run Backup job\n" +"JobName: %s\n" +"Level: %s\n" +"Client: %s\n" +"FileSet: %s\n" +"Pool: %s (From %s)\n" +"%sStorage: %s (From %s)\n" +"When: %s\n" +"Priority: %d\n" msgstr "" -#: src/lib/parse_conf.c:530 +#: src/dird/ua_run.c:1315 #, c-format -msgid "Could not find config Resource \"%s\" referenced on line %d : %s\n" +msgid "Could not get job record for selected JobId. ERR=%s" msgstr "" -#: src/lib/parse_conf.c:593 +#: src/dird/ua_run.c:1354 #, c-format -msgid "Missing config Resource \"%s\" referenced on line %d : %s\n" +msgid "" +"Run Verify Job\n" +"JobName: %s\n" +"Level: %s\n" +"Client: %s\n" +"FileSet: %s\n" +"Pool: %s (From %s)\n" +"Storage: %s (From %s)\n" +"Verify Job: %s\n" +"Verify List: %s\n" +"When: %s\n" +"Priority: %d\n" msgstr "" -#: src/lib/parse_conf.c:665 -#, c-format -msgid "expected a size number, got: %s" +#: src/dird/ua_run.c:1383 +msgid "Please enter a JobId for restore: " msgstr "" -#: src/lib/parse_conf.c:670 +#: src/dird/ua_run.c:1421 #, c-format -msgid "expected a speed number, got: %s" +msgid "" +"Run Restore job\n" +"JobName: %s\n" +"Bootstrap: %s\n" +"RegexWhere: %s\n" +"Replace: %s\n" +"FileSet: %s\n" +"Backup Client: %s\n" +"Restore Client: %s\n" +"Storage: %s\n" +"When: %s\n" +"Catalog: %s\n" +"Priority: %d\n" msgstr "" -#: src/lib/parse_conf.c:681 +#: src/dird/ua_run.c:1473 #, c-format -msgid "expected a %s, got: %s" -msgstr "" - -#: src/lib/parse_conf.c:682 -msgid "size" +msgid "" +"Run Restore job\n" +"JobName: %s\n" +"Bootstrap: %s\n" +"Where: %s\n" +"Replace: %s\n" +"FileSet: %s\n" +"Backup Client: %s\n" +"Restore Client: %s\n" +"Storage: %s\n" +"When: %s\n" +"Catalog: %s\n" +"Priority: %d\n" msgstr "" -#: src/lib/parse_conf.c:682 -msgid "speed" +#: src/dird/ua_run.c:1502 +#, c-format +msgid "" +"Run Restore job\n" +"JobName: %s\n" +"Bootstrap: %s\n" msgstr "" -#: src/lib/parse_conf.c:803 +#: src/dird/ua_run.c:1510 #, c-format -msgid "Expected a Tape Label keyword, got: %s" +msgid "RegexWhere: %s\n" msgstr "" -#: src/lib/parse_conf.c:886 +#: src/dird/ua_run.c:1513 #, c-format -msgid "Unable to initialize resource lock. ERR=%s\n" +msgid "Where: %s\n" msgstr "" -#: src/lib/parse_conf.c:894 -msgid "Config filename too long.\n" +#: src/dird/ua_run.c:1517 +#, c-format +msgid "" +"Replace: %s\n" +"Client: %s\n" +"Storage: %s\n" +"JobId: %s\n" +"When: %s\n" +"Catalog: %s\n" +"Priority: %d\n" msgstr "" -#: src/lib/parse_conf.c:917 -#, c-format -msgid "Cannot open config file \"%s\": %s\n" +#: src/dird/ua_run.c:1572 +msgid "Run Copy job\n" msgstr "" -#: src/lib/parse_conf.c:934 -msgid "" -"Currently we cannot handle UTF-16 source files. Please convert the conf file " -"to UTF-8\n" +#: src/dird/ua_run.c:1574 +msgid "Run Migration job\n" msgstr "" -#: src/lib/parse_conf.c:938 +#: src/dird/ua_run.c:1606 #, c-format -msgid "Expected a Resource name identifier, got: %s" +msgid "Unknown Job Type=%d\n" msgstr "" -#: src/lib/parse_conf.c:954 +#: src/dird/ua_run.c:1680 #, c-format -msgid "expected resource name, got: %s" +msgid "Value missing for keyword %s\n" msgstr "" -#: src/lib/parse_conf.c:965 -#, c-format -msgid "not in resource definition: %s" +#: src/dird/ua_run.c:1690 +msgid "JobId specified twice.\n" msgstr "" -#: src/lib/parse_conf.c:990 -#, c-format -msgid "" -"Keyword \"%s\" not permitted in this resource.\n" -"Perhaps you left the trailing brace off of the previous resource." +#: src/dird/ua_run.c:1699 src/dird/ua_run.c:1839 +msgid "Client specified twice.\n" msgstr "" -#: src/lib/parse_conf.c:1001 -msgid "Name not specified for resource" +#: src/dird/ua_run.c:1707 +msgid "FileSet specified twice.\n" msgstr "" -#: src/lib/parse_conf.c:1011 -#, c-format -msgid "unexpected token %d %s in resource definition" +#: src/dird/ua_run.c:1715 +msgid "Level specified twice.\n" msgstr "" -#: src/lib/parse_conf.c:1017 -#, c-format -msgid "Unknown parser state %d\n" +#: src/dird/ua_run.c:1724 +msgid "Storage specified twice.\n" msgstr "" -#: src/lib/parse_conf.c:1022 -msgid "End of conf file reached with unclosed resource." +#: src/dird/ua_run.c:1732 +msgid "RegexWhere or Where specified twice.\n" msgstr "" -#: src/lib/mem_pool.c:112 -#, c-format -msgid "MemPool index %d larger than max %d\n" +#: src/dird/ua_run.c:1737 +msgid "No authorization for \"regexwhere\" specification.\n" msgstr "" -#: src/lib/mem_pool.c:130 src/lib/mem_pool.c:150 src/lib/mem_pool.c:186 -#: src/lib/mem_pool.c:257 src/lib/mem_pool.c:277 src/lib/mem_pool.c:312 -#: src/lib/mem_pool.c:623 -#, c-format -msgid "Out of memory requesting %d bytes\n" +#: src/dird/ua_run.c:1744 +msgid "Where or RegexWhere specified twice.\n" msgstr "" -#: src/lib/mem_pool.c:167 -msgid "obuf is NULL\n" +#: src/dird/ua_run.c:1749 +msgid "No authoriztion for \"where\" specification.\n" msgstr "" -#: src/lib/berrno.c:63 -msgid "Child exited normally." +#: src/dird/ua_run.c:1756 +msgid "Bootstrap specified twice.\n" msgstr "" -#: src/lib/berrno.c:70 -msgid "Unknown error during program execvp" +#: src/dird/ua_run.c:1764 +msgid "Replace specified twice.\n" msgstr "" -#: src/lib/berrno.c:73 -#, c-format -msgid "Child exited with code %d" +#: src/dird/ua_run.c:1772 +msgid "When specified twice.\n" msgstr "" -#: src/lib/berrno.c:81 -#, c-format -msgid "Child died from signal %d: %s" +#: src/dird/ua_run.c:1780 +msgid "Priority specified twice.\n" msgstr "" -#: src/lib/berrno.c:87 -msgid "Invalid errno. No error message possible." +#: src/dird/ua_run.c:1785 +msgid "Priority must be positive nonzero setting it to 10.\n" msgstr "" -#: src/lib/bnet.c:134 -#, c-format -msgid "Attr spool write error. ERR=%s\n" +#: src/dird/ua_run.c:1795 +msgid "Verify Job specified twice.\n" msgstr "" -#: src/lib/bnet.c:279 src/lib/bnet.c:320 -msgid "TLS connection initialization failed.\n" +#: src/dird/ua_run.c:1823 +msgid "Migration Job specified twice.\n" msgstr "" -#: src/lib/bnet.c:287 -msgid "TLS Negotiation failed.\n" +#: src/dird/ua_run.c:1831 +msgid "Pool specified twice.\n" msgstr "" -#: src/lib/bnet.c:293 src/lib/bnet.c:335 -msgid "" -"TLS certificate verification failed. Peer certificate did not match a " -"required commonName\n" +#: src/dird/ua_run.c:1847 +msgid "Restore Client specified twice.\n" msgstr "" -#: src/lib/bnet.c:342 -#, c-format -msgid "" -"TLS host certificate verification failed. Host name \"%s\" did not match " -"presented certificate\n" +#: src/dird/ua_run.c:1854 +msgid "Plugin Options not yet implemented.\n" msgstr "" -#: src/lib/bnet.c:359 -msgid "TLS enabled but not configured.\n" +#: src/dird/ua_run.c:1857 +msgid "Plugin Options specified twice.\n" msgstr "" -#: src/lib/bnet.c:365 -msgid "TLS enable but not configured.\n" +#: src/dird/ua_run.c:1862 +msgid "No authoriztion for \"PluginOptions\" specification.\n" msgstr "" -#: src/lib/bnet.c:481 -msgid "No problem." +#: src/dird/ua_run.c:1869 +msgid "Spool flag specified twice.\n" msgstr "" -#: src/lib/bnet.c:484 -msgid "Authoritative answer for host not found." +#: src/dird/ua_run.c:1876 +msgid "Invalid spooldata flag.\n" msgstr "" -#: src/lib/bnet.c:487 -msgid "Non-authoritative for host not found, or ServerFail." +#: src/dird/ua_run.c:1885 +msgid "IgnoreDuplicateCheck flag specified twice.\n" msgstr "" -#: src/lib/bnet.c:490 -msgid "Non-recoverable errors, FORMERR, REFUSED, or NOTIMP." +#: src/dird/ua_run.c:1892 +msgid "Invalid ignoreduplicatecheck flag.\n" msgstr "" -#: src/lib/bnet.c:493 -msgid "Valid name, no data record of resquested type." +#: src/dird/ua_run.c:1897 +msgid "Accurate flag specified twice.\n" msgstr "" -#: src/lib/bnet.c:496 -msgid "Unknown error." +#: src/dird/ua_run.c:1904 +msgid "Invalid accurate flag.\n" msgstr "" -#: src/lib/bnet.c:755 -#, c-format -msgid "Unknown sig %d" +#: src/dird/ua_run.c:1909 +msgid "Job name specified twice.\n" msgstr "" -#: src/lib/signal.c:67 -msgid "Invalid signal number" +#: src/dird/ua_run.c:1917 +msgid "Media Type specified twice.\n" msgstr "" -#: src/lib/signal.c:152 src/lib/signal.c:154 -#, c-format -msgid "Bacula interrupted by signal %d: %s\n" +#: src/dird/ua_run.c:1925 +msgid "NextPool specified twice.\n" msgstr "" -#: src/lib/signal.c:167 +#: src/dird/ua_run.c:1950 #, c-format -msgid "Kaboom! %s, %s got signal %d - %s. Attempting traceback.\n" +msgid "Invalid keyword: %s\n" msgstr "" -#: src/lib/signal.c:169 +#: src/dird/ua_run.c:1965 #, c-format -msgid "Kaboom! exepath=%s\n" +msgid "Catalog \"%s\" not found\n" msgstr "" -#: src/lib/signal.c:210 +#: src/dird/ua_run.c:1969 #, c-format -msgid "Fork error: ERR=%s\n" +msgid "No authorization. Catalog \"%s\".\n" msgstr "" -#: src/lib/signal.c:218 +#: src/dird/ua_run.c:2003 #, c-format -msgid "Calling: %s %s %s %s\n" +msgid "Verify Job \"%s\" not found.\n" msgstr "" -#: src/lib/signal.c:222 +#: src/dird/ua_run.c:2013 #, c-format -msgid "execv: %s failed: ERR=%s\n" +msgid "Migration Job \"%s\" not found.\n" msgstr "" -#: src/lib/signal.c:244 -#, c-format -msgid "It looks like the traceback worked...\n" +#: src/dird/ua_label.c:92 +msgid "Negative numbers not permitted\n" msgstr "" -#: src/lib/signal.c:246 -#, c-format -msgid "The btraceback call returned %d\n" +#: src/dird/ua_label.c:121 +msgid "Values must be be greater than zero.\n" msgstr "" -#: src/lib/signal.c:306 -#, c-format -msgid "BA_NSIG too small (%d) should be (%d)\n" +#: src/dird/ua_label.c:125 +msgid "Slot too large.\n" msgstr "" -#: src/lib/signal.c:312 -msgid "UNKNOWN SIGNAL" +#: src/dird/ua_label.c:195 src/dird/ua_label.c:518 src/dird/ua_label.c:1198 +msgid "No slots in changer to scan.\n" msgstr "" -#: src/lib/signal.c:313 -msgid "Hangup" +#: src/dird/ua_label.c:207 src/dird/ua_label.c:529 +msgid "No Volumes found to label, or no barcodes.\n" msgstr "" -#: src/lib/signal.c:314 -msgid "Interrupt" +#: src/dird/ua_label.c:217 src/dird/ua_label.c:1219 +#, c-format +msgid "Slot %d greater than max %d ignored.\n" msgstr "" -#: src/lib/signal.c:315 -msgid "Quit" +#: src/dird/ua_label.c:255 +#, c-format +msgid "No VolName for Slot=%d InChanger set to zero.\n" msgstr "" -#: src/lib/signal.c:316 -msgid "Illegal instruction" +#: src/dird/ua_label.c:276 +#, c-format +msgid "Catalog record for Volume \"%s\" updated to reference slot %d.\n" msgstr "" -#: src/lib/signal.c:317 -msgid "Trace/Breakpoint trap" +#: src/dird/ua_label.c:280 +#, c-format +msgid "Catalog record for Volume \"%s\" is up to date.\n" msgstr "" -#: src/lib/signal.c:318 -msgid "Abort" +#: src/dird/ua_label.c:286 +#, c-format +msgid "Volume \"%s\" not found in catalog. Slot=%d InChanger set to zero.\n" msgstr "" -#: src/lib/signal.c:320 -msgid "EMT instruction (Emulation Trap)" +#: src/dird/ua_label.c:383 +#, c-format +msgid "" +"Volume \"%s\" has VolStatus %s. It must be Purged or Recycled before " +"relabeling.\n" msgstr "" -#: src/lib/signal.c:323 -msgid "IOT trap" +#: src/dird/ua_label.c:399 +msgid "Enter new Volume name: " msgstr "" -#: src/lib/signal.c:325 -msgid "BUS error" +#: src/dird/ua_label.c:412 +#, c-format +msgid "Media record for new Volume \"%s\" already exists.\n" msgstr "" -#: src/lib/signal.c:326 -msgid "Floating-point exception" +#: src/dird/ua_label.c:430 +msgid "Enter slot (0 or Enter for none): " msgstr "" -#: src/lib/signal.c:327 -msgid "Kill, unblockable" +#: src/dird/ua_label.c:458 +#, c-format +msgid "Delete of Volume \"%s\" failed. ERR=%s" msgstr "" -#: src/lib/signal.c:328 -msgid "User-defined signal 1" +#: src/dird/ua_label.c:461 +#, c-format +msgid "Old volume \"%s\" deleted from catalog.\n" msgstr "" -#: src/lib/signal.c:329 -msgid "Segmentation violation" +#: src/dird/ua_label.c:472 +#, c-format +msgid "Requesting to mount %s ...\n" msgstr "" -#: src/lib/signal.c:330 -msgid "User-defined signal 2" +#: src/dird/ua_label.c:494 +msgid "Do not forget to mount the drive!!!\n" msgstr "" -#: src/lib/signal.c:331 -msgid "Broken pipe" +#: src/dird/ua_label.c:534 +msgid "" +"The following Volumes will be labeled:\n" +"Slot Volume\n" +"==============\n" msgstr "" -#: src/lib/signal.c:332 -msgid "Alarm clock" +#: src/dird/ua_label.c:543 +msgid "Do you want to label these Volumes? (yes|no): " msgstr "" -#: src/lib/signal.c:333 -msgid "Termination" +#: src/dird/ua_label.c:563 +#, c-format +msgid "Media record for Slot %d Volume \"%s\" already exists.\n" msgstr "" -#: src/lib/signal.c:335 -msgid "Stack fault" +#: src/dird/ua_label.c:569 +#, c-format +msgid "Error setting InChanger: ERR=%s" msgstr "" -#: src/lib/signal.c:337 -msgid "Child status has changed" +#: src/dird/ua_label.c:592 +#, c-format +msgid "Maximum pool Volumes=%d reached.\n" msgstr "" -#: src/lib/signal.c:338 -msgid "Continue" +#: src/dird/ua_label.c:600 +#, c-format +msgid "Catalog record for cleaning tape \"%s\" successfully created.\n" msgstr "" -#: src/lib/signal.c:339 -msgid "Stop, unblockable" +#: src/dird/ua_label.c:607 +#, c-format +msgid "Catalog error on cleaning tape: %s" msgstr "" -#: src/lib/signal.c:340 -msgid "Keyboard stop" +#: src/dird/ua_label.c:643 +#, c-format +msgid "Illegal character \"%c\" in a volume name.\n" msgstr "" -#: src/lib/signal.c:341 -msgid "Background read from tty" +#: src/dird/ua_label.c:650 src/dird/ua_cmds.c:341 +msgid "Volume name too long.\n" msgstr "" -#: src/lib/signal.c:342 -msgid "Background write to tty" +#: src/dird/ua_label.c:690 +#, c-format +msgid "Sending relabel command from \"%s\" to \"%s\" ...\n" msgstr "" -#: src/lib/signal.c:343 -msgid "Urgent condition on socket" +#: src/dird/ua_label.c:697 +#, c-format +msgid "Sending label command for Volume \"%s\" Slot %d ...\n" msgstr "" -#: src/lib/signal.c:344 -msgid "CPU limit exceeded" +#: src/dird/ua_label.c:738 +#, c-format +msgid "Catalog record for Volume \"%s\", Slot %d successfully created.\n" msgstr "" -#: src/lib/signal.c:345 -msgid "File size limit exceeded" +#: src/dird/ua_label.c:751 +#, c-format +msgid "Label command failed for Volume %s.\n" msgstr "" -#: src/lib/signal.c:346 -msgid "Virtual alarm clock" +#: src/dird/ua_label.c:765 +msgid "Could not open SD socket.\n" msgstr "" -#: src/lib/signal.c:347 -msgid "Profiling alarm clock" +#: src/dird/ua_label.c:837 src/dird/ua_label.c:847 +#, c-format +msgid "Invalid Slot number: %s\n" msgstr "" -#: src/lib/signal.c:348 -msgid "Window size change" +#: src/dird/ua_label.c:856 +#, c-format +msgid "Invalid Volume name: %s\n" msgstr "" -#: src/lib/signal.c:349 -msgid "I/O now possible" +#: src/dird/ua_label.c:950 +#, c-format +msgid "Device \"%s\" has %d slots.\n" msgstr "" -#: src/lib/signal.c:351 -msgid "Power failure restart" +#: src/dird/ua_label.c:996 +#, c-format +msgid "Pool \"%s\" resource not found for volume \"%s\"!\n" msgstr "" -#: src/lib/signal.c:354 -msgid "No runnable lwp" +#: src/dird/ua_label.c:1210 +msgid "No Volumes found, or no barcodes.\n" msgstr "" -#: src/lib/signal.c:357 -msgid "SIGLWP special signal used by thread library" +#: src/dird/ua_label.c:1213 +msgid "" +" Slot | Volume Name | Status | Media Type | " +"Pool |\n" msgstr "" -#: src/lib/signal.c:360 -msgid "Checkpoint Freeze" +#: src/dird/ua_label.c:1214 +msgid "" +"------+------------------+-----------+----------------------" +"+--------------------|\n" msgstr "" -#: src/lib/signal.c:363 -msgid "Checkpoint Thaw" +#: src/dird/ua_cmds.c:95 +msgid "Add media to a pool" msgstr "" -#: src/lib/signal.c:366 -msgid "Thread Cancellation" +#: src/dird/ua_cmds.c:96 +msgid "Autodisplay console messages" msgstr "" -#: src/lib/signal.c:369 -msgid "Resource Lost (e.g. record-lock lost)" +#: src/dird/ua_cmds.c:97 +msgid "Automount after label" msgstr "" -#: src/lib/ini.c:106 src/lib/ini.c:118 -#, c-format -msgid "" -"Config file error: %s\n" -" : Line %d, col %d of file %s\n" -"%s\n" +#: src/dird/ua_cmds.c:98 +msgid "Cancel a job" msgstr "" -#: src/lib/ini.c:308 src/lib/ini.c:383 -#, c-format -msgid "Cannot open config file %s: %s\n" +#: src/dird/ua_cmds.c:99 +msgid "Create DB Pool from resource" msgstr "" -#: src/lib/btimers.c:265 -msgid "stop_btimer called with NULL btimer_id\n" +#: src/dird/ua_cmds.c:100 +msgid "Delete volume, pool or job" msgstr "" -#: src/lib/bsys.c:72 -#, c-format -msgid "safe_unlink could not compile regex pattern \"%s\" ERR=%s\n" +#: src/dird/ua_cmds.c:101 +msgid "Disable a job, attributes batch process" msgstr "" -#: src/lib/bsys.c:261 src/lib/bsys.c:278 src/lib/bsys.c:302 src/lib/bsys.c:315 -#, c-format -msgid "Out of memory: ERR=%s\n" +#: src/dird/ua_cmds.c:102 +msgid "Enable a job, attributes batch process" msgstr "" -#: src/lib/bsys.c:357 -msgid "Buffer overflow.\n" +#: src/dird/ua_cmds.c:103 +msgid "Performs FileSet estimate, listing gives full listing" msgstr "" -#: src/lib/bsys.c:423 -msgid "Bad errno" +#: src/dird/ua_cmds.c:106 src/dird/ua_cmds.c:130 +msgid "Terminate Bconsole session" msgstr "" -#: src/lib/bsys.c:438 -#, c-format -msgid "Memset for %d bytes at %s:%d\n" +#: src/dird/ua_cmds.c:107 +msgid "Non-interactive gui mode" msgstr "" -#: src/lib/bsys.c:468 -#, c-format -msgid "Cannot open pid file. %s ERR=%s\n" +#: src/dird/ua_cmds.c:108 +msgid "Print help on specific command" msgstr "" -#: src/lib/bsys.c:483 -#, c-format -msgid "" -"%s is already running. pid=%d\n" -"Check file %s\n" +#: src/dird/ua_cmds.c:113 +msgid "Label a tape" msgstr "" -#: src/lib/bsys.c:497 -#, c-format -msgid "Could not open pid file. %s ERR=%s\n" +#: src/dird/ua_cmds.c:114 +msgid "List objects from catalog" msgstr "" -#: src/lib/bsys.c:608 -#, c-format -msgid "Could not create state file. %s ERR=%s\n" +#: src/dird/ua_cmds.c:118 +msgid "Full or long list like list command" msgstr "" -#: src/lib/bsys.c:627 -#, c-format -msgid "Write final hdr error: ERR=%s\n" +#: src/dird/ua_cmds.c:121 +msgid "Display pending messages" msgstr "" -#: src/lib/runscript.c:236 -#, c-format -msgid "%s: run %s \"%s\"\n" +#: src/dird/ua_cmds.c:122 +msgid "Print current memory usage" msgstr "" -#: src/lib/runscript.c:245 -#, c-format -msgid "Runscript: %s could not execute. ERR=%s\n" +#: src/dird/ua_cmds.c:123 +msgid "Mount storage" msgstr "" -#: src/lib/runscript.c:254 -#, c-format -msgid "%s: %s\n" +#: src/dird/ua_cmds.c:126 +msgid "Prune expired records from catalog" msgstr "" -#: src/lib/runscript.c:259 -#, c-format -msgid "Runscript: %s returned non-zero status=%d. ERR=%s\n" +#: src/dird/ua_cmds.c:129 +msgid "Purge records from catalog" msgstr "" -#: src/lib/lex.c:91 src/wx-console/console_thread.cpp:212 -#, c-format -msgid "Problem probably begins at line %d.\n" +#: src/dird/ua_cmds.c:131 +msgid "Query catalog" msgstr "" -#: src/lib/lex.c:96 src/wx-console/console_thread.cpp:217 -#, c-format -msgid "" -"Config error: %s\n" -" : line %d, col %d of file %s\n" -"%s\n" -"%s" +#: src/dird/ua_cmds.c:132 +msgid "Restore files" msgstr "" -#: src/lib/lex.c:100 -#, c-format -msgid "Config error: %s\n" +#: src/dird/ua_cmds.c:137 +msgid "Relabel a tape" msgstr "" -#: src/lib/lex.c:129 -msgid "Close of NULL file\n" +#: src/dird/ua_cmds.c:140 +msgid "Release storage" msgstr "" -#: src/lib/lex.c:226 -msgid "" -"get_char: called after EOF. You may have a open double quote without the " -"closing double quote.\n" +#: src/dird/ua_cmds.c:141 +msgid "Reload conf file" msgstr "" -#: src/lib/lex.c:268 -#, c-format -msgid "Config token too long, file: %s, line %d, begins at line %d\n" +#: src/dird/ua_cmds.c:142 +msgid "Run a job" msgstr "" -#: src/lib/lex.c:292 -msgid "none" +#: src/dird/ua_cmds.c:147 +msgid "Report status" msgstr "" -#: src/lib/lex.c:293 -msgid "comment" +#: src/dird/ua_cmds.c:150 +msgid "Stop a job" msgstr "" -#: src/lib/lex.c:294 -msgid "number" +#: src/dird/ua_cmds.c:151 +msgid "Sets debug level" msgstr "" -#: src/lib/lex.c:295 -msgid "ip_addr" +#: src/dird/ua_cmds.c:154 +msgid "Sets bandwidth" msgstr "" -#: src/lib/lex.c:296 -msgid "identifier" +#: src/dird/ua_cmds.c:157 +msgid "Sets new client address -- if authorized" msgstr "" -#: src/lib/lex.c:297 -msgid "string" +#: src/dird/ua_cmds.c:158 +msgid "Show resource records" msgstr "" -#: src/lib/lex.c:298 -msgid "quoted_string" +#: src/dird/ua_cmds.c:161 +msgid "Use SQL to query catalog" msgstr "" -#: src/lib/lex.c:299 -msgid "include" +#: src/dird/ua_cmds.c:162 +msgid "Print current time" msgstr "" -#: src/lib/lex.c:300 -msgid "include_quoted_string" +#: src/dird/ua_cmds.c:163 +msgid "Turn on/off trace to file" msgstr "" -#: src/lib/lex.c:301 -msgid "UTF-8 Byte Order Mark" +#: src/dird/ua_cmds.c:164 +msgid "Truncate one or more Volumes" msgstr "" -#: src/lib/lex.c:302 -msgid "UTF-16le Byte Order Mark" +#: src/dird/ua_cmds.c:165 +msgid "Unmount storage" msgstr "" -#: src/lib/lex.c:340 src/lib/lex.c:346 src/lib/lex.c:357 src/lib/lex.c:363 -#, c-format -msgid "expected a positive integer number, got: %s" +#: src/dird/ua_cmds.c:168 +msgid "Umount - for old-time Unix guys, see unmount" msgstr "" -#: src/lib/lex.c:479 -msgid "" -"This config file appears to be in an unsupported Unicode format (UTF-16be). " -"Please resave as UTF-8\n" +#: src/dird/ua_cmds.c:171 +msgid "Update volume, pool or stats" msgstr "" -#: src/lib/lex.c:625 src/lib/lex.c:653 -#, c-format -msgid "Cannot open included config file %s: %s\n" +#: src/dird/ua_cmds.c:178 +msgid "Use catalog xxx" msgstr "" -#: src/lib/lex.c:712 src/lib/lex.c:769 -#, c-format -msgid "expected an integer or a range, got %s: %s" +#: src/dird/ua_cmds.c:179 +msgid "Does variable expansion" msgstr "" -#: src/lib/lex.c:726 src/lib/lex.c:734 src/lib/lex.c:745 src/lib/lex.c:753 -#, c-format -msgid "expected an integer number, got %s: %s" +#: src/dird/ua_cmds.c:180 +msgid "Print Director version" msgstr "" -#: src/lib/lex.c:783 -#, c-format -msgid "expected a name, got %s: %s" +#: src/dird/ua_cmds.c:181 +msgid "Wait until no jobs are running" msgstr "" -#: src/lib/lex.c:787 +#: src/dird/ua_cmds.c:234 #, c-format -msgid "name %s length %d too long, max is %d\n" +msgid "%s: is an invalid command.\n" msgstr "" -#: src/lib/lex.c:795 -#, c-format -msgid "expected a string, got %s: %s" +#: src/dird/ua_cmds.c:275 +msgid "" +"You probably don't want to be using this command since it\n" +"creates database records without labeling the Volumes.\n" +"You probably want to use the \"label\" command.\n" +"\n" msgstr "" -#: src/lib/var.c:2669 -msgid "everything ok" +#: src/dird/ua_cmds.c:293 +#, c-format +msgid "Pool already has maximum volumes=%d\n" msgstr "" -#: src/lib/var.c:2670 -msgid "incomplete named character" +#: src/dird/ua_cmds.c:294 +msgid "Enter new maximum (zero for unlimited): " msgstr "" -#: src/lib/var.c:2671 -msgid "incomplete hexadecimal value" +#: src/dird/ua_cmds.c:314 +#, c-format +msgid "Enter number of Volumes to create. 0=>fixed name. Max=%d: " msgstr "" -#: src/lib/var.c:2672 -msgid "invalid hexadecimal value" +#: src/dird/ua_cmds.c:320 +#, c-format +msgid "The number must be between 0 and %d\n" msgstr "" -#: src/lib/var.c:2673 -msgid "octal value too large" +#: src/dird/ua_cmds.c:328 +msgid "Enter Volume name: " msgstr "" -#: src/lib/var.c:2674 -msgid "invalid octal value" +#: src/dird/ua_cmds.c:332 +msgid "Enter base volume name: " msgstr "" - -#: src/lib/var.c:2675 -msgid "incomplete octal value" + +#: src/dird/ua_cmds.c:356 +msgid "Enter the starting number: " msgstr "" -#: src/lib/var.c:2676 -msgid "incomplete grouped hexadecimal value" +#: src/dird/ua_cmds.c:361 +msgid "Start number must be greater than zero.\n" msgstr "" -#: src/lib/var.c:2677 -msgid "incorrect character class specification" +#: src/dird/ua_cmds.c:372 +msgid "Enter slot (0 for none): " msgstr "" -#: src/lib/var.c:2678 -msgid "invalid expansion configuration" +#: src/dird/ua_cmds.c:376 +msgid "InChanger? yes/no: " msgstr "" -#: src/lib/var.c:2679 -msgid "out of memory" +#: src/dird/ua_cmds.c:404 +#, c-format +msgid "%d Volumes created in pool %s\n" msgstr "" -#: src/lib/var.c:2680 -msgid "incomplete variable specification" +#: src/dird/ua_cmds.c:420 src/dird/ua_cmds.c:1131 +msgid "Turn on or off? " msgstr "" -#: src/lib/var.c:2681 -msgid "undefined variable" +#: src/dird/ua_cmds.c:547 +#, c-format +msgid "" +"Can't set %s RecyclePool to %s, %s is not in database.\n" +"Try to update it with 'update pool=%s'\n" msgstr "" -#: src/lib/var.c:2682 -msgid "input is neither text nor variable" +#: src/dird/ua_cmds.c:565 +#, c-format +msgid "" +"Can't set %s ScratchPool to %s, %s is not in database.\n" +"Try to update it with 'update pool=%s'\n" msgstr "" -#: src/lib/var.c:2683 -msgid "unknown command character in variable" +#: src/dird/ua_cmds.c:632 +#, c-format +msgid "" +"Error: Pool %s already exists.\n" +"Use update to change it.\n" msgstr "" -#: src/lib/var.c:2684 -msgid "malformatted search and replace operation" +#: src/dird/ua_cmds.c:643 +#, c-format +msgid "Pool %s created.\n" msgstr "" -#: src/lib/var.c:2685 -msgid "unknown flag in search and replace operation" +#: src/dird/ua_cmds.c:671 +msgid "Failed to set bandwidth limit to Client.\n" msgstr "" -#: src/lib/var.c:2686 -msgid "invalid regex in search and replace operation" +#: src/dird/ua_cmds.c:674 +#, c-format +msgid "2000 OK Limiting bandwidth to %lldkb/s %s\n" msgstr "" -#: src/lib/var.c:2687 -msgid "missing parameter in command" +#: src/dird/ua_cmds.c:675 +msgid "on running and future jobs" msgstr "" -#: src/lib/var.c:2688 -msgid "empty search string in search and replace operation" +#: src/dird/ua_cmds.c:697 +msgid "Set Bandwidth choice:\n" msgstr "" -#: src/lib/var.c:2689 -msgid "start offset missing in cut operation" +#: src/dird/ua_cmds.c:698 +msgid "Running Job" msgstr "" -#: src/lib/var.c:2690 -msgid "offsets in cut operation delimited by unknown character" +#: src/dird/ua_cmds.c:699 +msgid "Running and future Jobs for a Client" msgstr "" -#: src/lib/var.c:2691 -msgid "range out of bounds in cut operation" +#: src/dird/ua_cmds.c:700 +msgid "Choose where to limit the bandwidth" msgstr "" -#: src/lib/var.c:2692 -msgid "offset out of bounds in cut operation" +#: src/dird/ua_cmds.c:712 +msgid "Enter new bandwidth limit kb/s: " msgstr "" -#: src/lib/var.c:2693 -msgid "logic error in cut operation" +#: src/dird/ua_cmds.c:749 src/dird/ua_cmds.c:809 +msgid "Unauthorized command from this console.\n" msgstr "" -#: src/lib/var.c:2694 -msgid "malformatted transpose operation" +#: src/dird/ua_cmds.c:766 +#, c-format +msgid "Client \"%s\" address set to %s\n" msgstr "" -#: src/lib/var.c:2695 -msgid "source and target class mismatch in transpose operation" +#: src/dird/ua_cmds.c:780 +#, c-format +msgid "Job Attributes Insertion %sabled\n" msgstr "" -#: src/lib/var.c:2696 -msgid "empty character class in transpose operation" +#: src/dird/ua_cmds.c:813 +#, c-format +msgid "Job \"%s\" %sabled\n" msgstr "" -#: src/lib/var.c:2697 -msgid "incorrect character class in transpose operation" +#: src/dird/ua_cmds.c:1005 +msgid "Enter new debug level: " msgstr "" -#: src/lib/var.c:2698 -msgid "malformatted padding operation" +#: src/dird/ua_cmds.c:1018 +#, c-format +msgid "Incorrect tags found on command line %s\n" msgstr "" -#: src/lib/var.c:2699 -msgid "width parameter missing in padding operation" +#: src/dird/ua_cmds.c:1095 +msgid "All" msgstr "" -#: src/lib/var.c:2700 -msgid "fill string missing in padding operation" +#: src/dird/ua_cmds.c:1096 +msgid "Select daemon type to set debug level" msgstr "" -#: src/lib/var.c:2701 -msgid "unknown quoted pair in search and replace operation" +#: src/dird/ua_cmds.c:1191 +msgid "Client name missing.\n" msgstr "" -#: src/lib/var.c:2702 -msgid "sub-matching reference out of range" +#: src/dird/ua_cmds.c:1203 src/dird/ua_cmds.c:1270 src/dird/ua_cmds.c:2016 +#, c-format +msgid "No authorization for Job \"%s\"\n" msgstr "" -#: src/lib/var.c:2703 -msgid "invalid argument" +#: src/dird/ua_cmds.c:1208 +msgid "Job name missing.\n" msgstr "" -#: src/lib/var.c:2704 -msgid "incomplete quoted pair" +#: src/dird/ua_cmds.c:1217 +#, c-format +msgid "Fileset \"%s\" not found.\n" msgstr "" -#: src/lib/var.c:2705 -msgid "lookup function does not support variable arrays" +#: src/dird/ua_cmds.c:1221 +#, c-format +msgid "No authorization for FileSet \"%s\"\n" msgstr "" -#: src/lib/var.c:2706 -msgid "index of array variable contains an invalid character" +#: src/dird/ua_cmds.c:1226 +msgid "Fileset name missing.\n" msgstr "" -#: src/lib/var.c:2707 -msgid "index of array variable is incomplete" +#: src/dird/ua_cmds.c:1241 +msgid "Level value missing.\n" msgstr "" -#: src/lib/var.c:2708 -msgid "bracket expression in array variable's index not closed" +#: src/dird/ua_cmds.c:1248 +msgid "Invalid value for accurate. It must be yes or no.\n" msgstr "" -#: src/lib/var.c:2709 -msgid "division by zero error in index specification" +#: src/dird/ua_cmds.c:1253 +msgid "Accurate value missing.\n" msgstr "" -#: src/lib/var.c:2710 -msgid "unterminated loop construct" +#: src/dird/ua_cmds.c:1266 +msgid "No job specified.\n" msgstr "" -#: src/lib/var.c:2711 -msgid "invalid character in loop limits" +#: src/dird/ua_cmds.c:1326 +msgid "Error sending include list.\n" msgstr "" -#: src/lib/var.c:2712 -msgid "malformed operation argument list" +#: src/dird/ua_cmds.c:1331 +msgid "Error sending exclude list.\n" msgstr "" -#: src/lib/var.c:2713 -msgid "undefined operation" +#: src/dird/ua_cmds.c:1422 +msgid "" +"In general it is not a good idea to delete either a\n" +"Pool or a Volume since they may contain data.\n" +"\n" msgstr "" -#: src/lib/var.c:2714 -msgid "formatting failure" +#: src/dird/ua_cmds.c:1425 +msgid "Choose catalog item to delete" msgstr "" -#: src/lib/var.c:2723 -msgid "unknown error" +#: src/dird/ua_cmds.c:1436 +msgid "Nothing done.\n" msgstr "" -#: src/lib/address_conf.c:62 +#: src/dird/ua_cmds.c:1464 #, c-format -msgid "Only ipv4 and ipv6 are supported (%d)\n" +msgid "Are you sure you want to delete %d JobIds ? (yes/no): " msgstr "" -#: src/lib/address_conf.c:66 -#, c-format -msgid "Only ipv4 is supported (%d)\n" +#: src/dird/ua_cmds.c:1474 +msgid "Enter JobId to delete: " msgstr "" -#: src/lib/address_conf.c:175 +#: src/dird/ua_cmds.c:1492 #, c-format -msgid "It was tried to assign a ipv6 address to a ipv4(%d)\n" +msgid "Jobid %s and associated records deleted from the catalog.\n" msgstr "" -#: src/lib/address_conf.c:184 +#: src/dird/ua_cmds.c:1507 #, c-format -msgid "It was tried to assign a ipv4 address to a ipv6(%d)\n" +msgid "" +"\n" +"This command will delete volume %s\n" +"and all Jobs saved on that volume from the Catalog\n" msgstr "" -#: src/lib/address_conf.c:263 +#: src/dird/ua_cmds.c:1514 #, c-format -msgid "Can't add default address (%s)\n" +msgid "Are you sure you want to delete Volume \"%s\"? (yes/no): " msgstr "" -#: src/lib/address_conf.c:292 -msgid "the old style addresses cannot be mixed with new style" +#: src/dird/ua_cmds.c:1527 +msgid "Can't list jobs on this volume\n" msgstr "" -#: src/lib/address_conf.c:313 +#: src/dird/ua_cmds.c:1552 #, c-format -msgid "can't resolve service(%s)" +msgid "Are you sure you want to delete Pool \"%s\"? (yes/no): " msgstr "" -#: src/lib/address_conf.c:322 +#: src/dird/ua_cmds.c:1666 #, c-format -msgid "can't resolve hostname(%s) %s" +msgid "Using Catalog name=%s DB=%s\n" msgstr "" -#: src/lib/address_conf.c:412 src/lib/address_conf.c:443 -#, c-format -msgid "Expected a block begin { , got: %s" +#: src/dird/ua_cmds.c:1734 +msgid "ERR: Can't open db\n" msgstr "" -#: src/lib/address_conf.c:417 -msgid "Empty addr block is not allowed" +#: src/dird/ua_cmds.c:1781 +msgid "Wait on mount timed out\n" msgstr "" -#: src/lib/address_conf.c:421 -#, c-format -msgid "Expected a string, got: %s" +#: src/dird/ua_cmds.c:1791 +msgid "ERR: Job was not found\n" msgstr "" -#: src/lib/address_conf.c:430 -#, c-format -msgid "Expected a string [ip|ipv4|ipv6], got: %s" +#: src/dird/ua_cmds.c:1867 +msgid "" +" Command Description\n" +" ======= ===========\n" msgstr "" -#: src/lib/address_conf.c:434 +#: src/dird/ua_cmds.c:1871 #, c-format -msgid "Expected a string [ip|ipv4], got: %s" +msgid "" +" %-13s %s\n" +"\n" +"Arguments:\n" +"\t%s\n" msgstr "" -#: src/lib/address_conf.c:439 src/lib/address_conf.c:469 +#: src/dird/ua_cmds.c:1876 #, c-format -msgid "Expected a equal =, got: %s" +msgid " %-13s %s\n" msgstr "" -#: src/lib/address_conf.c:450 src/lib/address_conf.c:465 +#: src/dird/ua_cmds.c:1880 #, c-format -msgid "Expected a identifier [addr|port], got: %s" +msgid "" +"\n" +"Can't find %s command.\n" +"\n" msgstr "" -#: src/lib/address_conf.c:455 -msgid "Only one port per address block" +#: src/dird/ua_cmds.c:1882 +msgid "" +"\n" +"When at a prompt, entering a period cancels the command.\n" +"\n" msgstr "" -#: src/lib/address_conf.c:461 -msgid "Only one addr per address block" +#: src/dird/ua_cmds.c:1918 src/filed/status.c:77 +#, c-format +msgid "%s Version: %s (%s) %s %s %s %s\n" msgstr "" -#: src/lib/address_conf.c:477 +#: src/dird/ua_cmds.c:1977 src/dird/ua_cmds.c:2004 src/dird/ua_cmds.c:2026 #, c-format -msgid "Expected a number or a string, got: %s" +msgid "No authorization for Catalog \"%s\"\n" msgstr "" -#: src/lib/address_conf.c:483 src/lib/address_conf.c:516 +#: src/dird/ua_cmds.c:2083 #, c-format -msgid "Expected an IP number or a hostname, got: %s" +msgid "Could not open catalog database \"%s\".\n" msgstr "" -#: src/lib/address_conf.c:489 -msgid "State machine missmatch" +#: src/dird/ua_cmds.c:2102 +#, c-format +msgid "Using Catalog \"%s\"\n" msgstr "" -#: src/lib/address_conf.c:495 src/lib/address_conf.c:507 -#, c-format -msgid "Expected a end of block }, got: %s" +#: src/dird/backup.c:94 +msgid "No Storage specification found in Job or Pool.\n" msgstr "" -#: src/lib/address_conf.c:501 +#: src/dird/backup.c:254 #, c-format -msgid "Can't add hostname(%s) and port(%s) to addrlist (%s)" +msgid "Using BaseJobId(s): %s\n" msgstr "" -#: src/lib/address_conf.c:521 src/lib/address_conf.c:535 -#, c-format -msgid "can't add port (%s) to (%s)" +#: src/dird/backup.c:264 +msgid "Cannot find previous jobids.\n" msgstr "" -#: src/lib/address_conf.c:530 +#: src/dird/backup.c:278 +msgid "Sending Accurate information to the FD.\n" +msgstr "" + +#: src/dird/backup.c:435 #, c-format -msgid "Expected a port number or string, got: %s" +msgid "Start Backup JobId %s, Job=%s\n" msgstr "" -#: src/lib/edit.c:478 -msgid "Empty name not allowed.\n" +#: src/dird/backup.c:640 +#, c-format +msgid "Unexpected Client Job message: %s\n" msgstr "" -#: src/lib/edit.c:488 +#: src/dird/backup.c:653 #, c-format -msgid "Illegal character \"%c\" in name.\n" +msgid "Network error with FD during %s: ERR=%s\n" msgstr "" -#: src/lib/edit.c:495 -msgid "Name too long.\n" +#: src/dird/backup.c:687 +msgid "No Job status returned from FD.\n" msgstr "" -#: src/findlib/savecwd.c:60 +#: src/dird/backup.c:847 #, c-format -msgid "Cannot open current directory: ERR=%s\n" +msgid " Base files/Used files: %lld/%lld (%.2f%%)\n" msgstr "" -#: src/findlib/savecwd.c:71 +#: src/dird/backup.c:858 #, c-format -msgid "Cannot get current directory: ERR=%s\n" +msgid "" +"%s %s %s (%s):\n" +" Build OS: %s %s %s\n" +" JobId: %d\n" +" Job: %s\n" +" Backup Level: %s%s\n" +" Client: \"%s\" %s\n" +" FileSet: \"%s\" %s\n" +" Pool: \"%s\" (From %s)\n" +" Catalog: \"%s\" (From %s)\n" +" Storage: \"%s\" (From %s)\n" +" Scheduled time: %s\n" +" Start time: %s\n" +" End time: %s\n" +" Elapsed time: %s\n" +" Priority: %d\n" +" FD Files Written: %s\n" +" SD Files Written: %s\n" +" FD Bytes Written: %s (%sB)\n" +" SD Bytes Written: %s (%sB)\n" +" Rate: %.1f KB/s\n" +" Software Compression: %s\n" +"%s VSS: %s\n" +" Encryption: %s\n" +" Accurate: %s\n" +" Volume name(s): %s\n" +" Volume Session Id: %d\n" +" Volume Session Time: %d\n" +" Last Volume Bytes: %s\n" +" Non-fatal FD errors: %d\n" +" SD Errors: %d\n" +" FD termination status: %s\n" +" SD termination status: %s\n" +" Termination: %s\n" +"\n" msgstr "" -#: src/findlib/savecwd.c:95 src/findlib/savecwd.c:106 +#: src/dird/backup.c:959 #, c-format -msgid "Cannot reset current directory: ERR=%s\n" +msgid "Could not get Job Volume Parameters to update Bootstrap file. ERR=%s\n" msgstr "" -#: src/findlib/mkpath.c:137 +#: src/dird/backup.c:995 #, c-format -msgid "Cannot create directory %s: ERR=%s\n" +msgid "" +"Could not open WriteBootstrap file:\n" +"%s: ERR=%s\n" msgstr "" -#: src/findlib/mkpath.c:141 src/findlib/mkpath.c:202 -#, c-format -msgid "%s exists but is not a directory.\n" +#: src/dird/ua_tree.c:62 +msgid "add dir/file to be restored recursively, wildcards allowed" msgstr "" -#: src/findlib/mkpath.c:164 -#, c-format -msgid "Cannot change owner and/or group of %s: ERR=%s\n" +#: src/dird/ua_tree.c:63 +msgid "change current directory" msgstr "" -#: src/findlib/mkpath.c:169 -#, c-format -msgid "Cannot change permissions of %s: ERR=%s\n" +#: src/dird/ua_tree.c:64 +msgid "count marked files in and below the cd" msgstr "" -#: src/findlib/mkpath.c:239 -#, c-format -msgid "%c: is not a valid drive.\n" +#: src/dird/ua_tree.c:65 +msgid "delete dir/file to be restored recursively in dir" msgstr "" -#: src/findlib/mkpath.c:283 -msgid "Too many subdirectories. Some permissions not reset.\n" +#: src/dird/ua_tree.c:66 src/dird/ua_tree.c:67 +msgid "long list current directory, wildcards allowed" msgstr "" -#: src/findlib/attribs.c:483 -#, c-format -msgid "File size of restored file %s not correct. Original %s, restored %s.\n" +#: src/dird/ua_tree.c:68 +msgid "leave file selection mode" +msgstr "" + +#: src/dird/ua_tree.c:69 +msgid "estimate restore size" +msgstr "" + +#: src/dird/ua_tree.c:70 +msgid "same as done command" +msgstr "" + +#: src/dird/ua_tree.c:71 +msgid "find files, wildcards allowed" msgstr "" -#: src/findlib/attribs.c:509 src/findlib/attribs.c:516 -#, c-format -msgid "Unable to set file owner %s: ERR=%s\n" +#: src/dird/ua_tree.c:72 src/dird/ua_tree.c:85 src/dird/ua_tree.c:86 +msgid "print help" msgstr "" -#: src/findlib/attribs.c:522 -#, c-format -msgid "Unable to set file modes %s: ERR=%s\n" +#: src/dird/ua_tree.c:73 src/dird/ua_tree.c:74 +msgid "list current directory, wildcards allowed" msgstr "" -#: src/findlib/attribs.c:532 -#, c-format -msgid "Unable to set file times %s: ERR=%s\n" +#: src/dird/ua_tree.c:75 +msgid "list subdir in current directory, wildcards allowed" msgstr "" -#: src/findlib/attribs.c:546 -#, c-format -msgid "Unable to set file flags %s: ERR=%s\n" +#: src/dird/ua_tree.c:76 +msgid "list the marked files in and below the cd" msgstr "" -#: src/findlib/attribs.c:799 -#, c-format -msgid "Error in %s file %s: ERR=%s\n" +#: src/dird/ua_tree.c:77 +msgid "list the marked files in" msgstr "" -#: src/findlib/attribs.c:816 -#, c-format -msgid "Error in %s: ERR=%s\n" +#: src/dird/ua_tree.c:78 +msgid "mark dir/file to be restored recursively, wildcards allowed" msgstr "" -#: src/findlib/enable_priv.c:92 -msgid "AdjustTokenPrivileges set " +#: src/dird/ua_tree.c:79 +msgid "mark directory name to be restored (no files)" msgstr "" -#: src/findlib/create_file.c:124 -#, c-format -msgid "File skipped. Not newer: %s\n" +#: src/dird/ua_tree.c:80 src/dird/ua_tree.c:81 +msgid "print current working directory" msgstr "" -#: src/findlib/create_file.c:131 -#, c-format -msgid "File skipped. Not older: %s\n" +#: src/dird/ua_tree.c:82 +msgid "unmark dir/file to be restored recursively in dir" msgstr "" -#: src/findlib/create_file.c:141 -#, c-format -msgid "File skipped. Already exists: %s\n" +#: src/dird/ua_tree.c:83 +msgid "unmark directory name only no recursion" msgstr "" -#: src/findlib/create_file.c:167 -#, c-format -msgid "File %s already exists and could not be replaced. ERR=%s.\n" +#: src/dird/ua_tree.c:84 +msgid "quit and do not do restore" msgstr "" -#: src/findlib/create_file.c:218 src/findlib/create_file.c:282 -#: src/findlib/create_file.c:378 -#, c-format -msgid "bpkt already open fid=%d\n" +#: src/dird/ua_tree.c:106 +msgid "" +"\n" +"You are now entering file selection mode where you add (mark) and\n" +"remove (unmark) files to be restored. No files are initially added, unless\n" +"you used the \"all\" keyword on the command line.\n" +"Enter \"done\" to leave this mode.\n" +"\n" msgstr "" -#: src/findlib/create_file.c:226 src/filed/fd_plugins.c:1009 +#: src/dird/ua_tree.c:117 src/dird/ua_tree.c:847 #, c-format -msgid "Could not create %s: ERR=%s\n" +msgid "cwd is: %s\n" msgstr "" -#: src/findlib/create_file.c:241 +#: src/dird/ua_tree.c:126 src/dird/ua_tree.c:145 #, c-format -msgid "Cannot make fifo %s: ERR=%s\n" +msgid "Invalid command \"%s\". Enter \"done\" to exit.\n" msgstr "" -#: src/findlib/create_file.c:259 +#: src/dird/ua_tree.c:217 #, c-format -msgid "Cannot make node %s: ERR=%s\n" +msgid "" +"Something is wrong with the Delta sequence of %s, skiping new parts. Current " +"sequence is %d\n" msgstr "" -#: src/findlib/create_file.c:304 -#, c-format -msgid "Could not symlink %s -> %s: ERR=%s\n" +#: src/dird/ua_tree.c:389 src/dird/ua_tree.c:401 src/dird/ua_tree.c:418 +msgid "No files marked.\n" msgstr "" -#: src/findlib/create_file.c:329 src/findlib/create_file.c:342 -#, c-format -msgid "Could not restore file flags for file %s: ERR=%s\n" +#: src/dird/ua_tree.c:403 +msgid "1 file marked.\n" msgstr "" -#: src/findlib/create_file.c:333 src/findlib/create_file.c:350 +#: src/dird/ua_tree.c:405 #, c-format -msgid "Could not hard link %s -> %s: ERR=%s\n" +msgid "%s files marked.\n" msgstr "" -#: src/findlib/create_file.c:346 -#, c-format -msgid "Could not reset file flags for file %s: ERR=%s\n" +#: src/dird/ua_tree.c:433 +msgid "No directories marked.\n" msgstr "" -#: src/findlib/create_file.c:401 -#, c-format -msgid "Original file %s have been deleted: type=%d\n" +#: src/dird/ua_tree.c:435 +msgid "1 directory marked.\n" msgstr "" -#: src/findlib/create_file.c:413 +#: src/dird/ua_tree.c:437 #, c-format -msgid "Original file %s not saved: type=%d\n" +msgid "%s directories marked.\n" msgstr "" -#: src/findlib/create_file.c:416 +#: src/dird/ua_tree.c:458 #, c-format -msgid "Unknown file type %d; not restored: %s\n" +msgid "%s total files/dirs. %s marked to be restored.\n" msgstr "" -#: src/findlib/create_file.c:460 -#, c-format -msgid "Zero length filename: %s\n" +#: src/dird/ua_tree.c:469 +msgid "No file specification given.\n" msgstr "" -#: src/findlib/bfile.c:97 -msgid "Unix attributes" +#: src/dird/ua_tree.c:690 +#, c-format +msgid "Node %s has no children.\n" msgstr "" -#: src/findlib/bfile.c:99 -msgid "File data" +#: src/dird/ua_tree.c:783 +#, c-format +msgid "%d total files; %d marked to be restored; %s bytes.\n" msgstr "" -#: src/findlib/bfile.c:101 -msgid "MD5 digest" +#: src/dird/ua_tree.c:817 +msgid "Too few or too many arguments. Try using double quotes.\n" msgstr "" -#: src/findlib/bfile.c:103 -msgid "GZIP data" +#: src/dird/ua_tree.c:830 +msgid "Invalid path given.\n" msgstr "" -#: src/findlib/bfile.c:105 -msgid "Compressed data" +#: src/dird/ua_tree.c:866 src/dird/ua_tree.c:878 +msgid "No files unmarked.\n" msgstr "" -#: src/findlib/bfile.c:107 -msgid "Extended attributes" +#: src/dird/ua_tree.c:880 +msgid "1 file unmarked.\n" msgstr "" -#: src/findlib/bfile.c:109 -msgid "Sparse data" +#: src/dird/ua_tree.c:883 +#, c-format +msgid "%s files unmarked.\n" msgstr "" -#: src/findlib/bfile.c:111 -msgid "GZIP sparse data" +#: src/dird/ua_tree.c:894 src/dird/ua_tree.c:911 +msgid "No directories unmarked.\n" msgstr "" -#: src/findlib/bfile.c:113 -msgid "Compressed sparse data" +#: src/dird/ua_tree.c:913 +msgid "1 directory unmarked.\n" msgstr "" -#: src/findlib/bfile.c:115 -msgid "Program names" +#: src/dird/ua_tree.c:915 +#, c-format +msgid "%d directories unmarked.\n" msgstr "" -#: src/findlib/bfile.c:117 -msgid "Program data" +#: src/dird/inc_conf.c:299 +#, c-format +msgid "Expected a strip path positive integer, got:%s:" msgstr "" -#: src/findlib/bfile.c:119 -msgid "SHA1 digest" +#: src/dird/inc_conf.c:319 +#, c-format +msgid "Expected a FileSet option keyword, got:%s:" msgstr "" -#: src/findlib/bfile.c:121 -msgid "Win32 data" +#: src/dird/inc_conf.c:352 +msgid "Old style Include/Exclude not supported\n" msgstr "" -#: src/findlib/bfile.c:123 -msgid "Win32 GZIP data" +#: src/dird/inc_conf.c:380 src/dird/inc_conf.c:726 src/dird/dird_conf.c:2044 +#, c-format +msgid "Expecting keyword, got: %s\n" msgstr "" -#: src/findlib/bfile.c:125 -msgid "Win32 compressed data" +#: src/dird/inc_conf.c:398 src/dird/inc_conf.c:741 src/dird/dird_conf.c:2061 +#, c-format +msgid "Keyword %s not permitted in this resource" msgstr "" -#: src/findlib/bfile.c:127 -msgid "MacOS Fork data" +#: src/dird/inc_conf.c:451 +#, c-format +msgid "Regex compile error. ERR=%s\n" msgstr "" -#: src/findlib/bfile.c:129 -msgid "HFS+ attribs" +#: src/dird/inc_conf.c:472 +#, c-format +msgid "Expected a regex string, got: %s\n" msgstr "" -#: src/findlib/bfile.c:131 -msgid "Standard Unix ACL attribs" +#: src/dird/inc_conf.c:546 +#, c-format +msgid "Expected a wild-card string, got: %s\n" msgstr "" -#: src/findlib/bfile.c:133 -msgid "Default Unix ACL attribs" +#: src/dird/inc_conf.c:569 +#, c-format +msgid "Expected an fstype string, got: %s\n" msgstr "" -#: src/findlib/bfile.c:135 -msgid "SHA256 digest" +#: src/dird/inc_conf.c:580 +msgid "ExcludeDirContaining directive not permitted in Exclude.\n" msgstr "" -#: src/findlib/bfile.c:137 -msgid "SHA512 digest" +#: src/dird/inc_conf.c:607 +#, c-format +msgid "Expected an drivetype string, got: %s\n" msgstr "" -#: src/findlib/bfile.c:139 -msgid "Signed digest" +#: src/dird/inc_conf.c:631 src/dird/inc_conf.c:674 +#, c-format +msgid "Backslash found. Use forward slashes or quote the string.: %s\n" msgstr "" -#: src/findlib/bfile.c:141 -msgid "Encrypted File data" +#: src/dird/inc_conf.c:646 src/dird/inc_conf.c:689 +#, c-format +msgid "Expected a filename, got: %s" msgstr "" -#: src/findlib/bfile.c:143 -msgid "Encrypted Win32 data" +#: src/dird/inc_conf.c:663 +msgid "Plugin directive not permitted in Exclude\n" msgstr "" -#: src/findlib/bfile.c:145 -msgid "Encrypted session data" +#: src/dird/inc_conf.c:706 +msgid "Options section not permitted in Exclude\n" msgstr "" -#: src/findlib/bfile.c:147 -msgid "Encrypted GZIP data" +#: src/dird/inc_conf.c:711 src/dird/dird_conf.c:2030 +#, c-format +msgid "Expecting open brace. Got %s" msgstr "" -#: src/findlib/bfile.c:149 -msgid "Encrypted compressed data" +#: src/dird/inc_conf.c:766 +#, c-format +msgid "Expected a FileSet keyword, got: %s" msgstr "" -#: src/findlib/bfile.c:151 -msgid "Encrypted Win32 GZIP data" +#: src/dird/recycle.c:57 +#, c-format +msgid "Recycled volume \"%s\"\n" msgstr "" -#: src/findlib/bfile.c:153 -msgid "Encrypted Win32 Compressed data" +#: src/dird/ua_server.c:56 +#, c-format +msgid "Cannot create UA thread: %s\n" msgstr "" -#: src/findlib/bfile.c:155 -msgid "Encrypted MacOS fork data" +#: src/dird/ua_server.c:146 +msgid "You have messages.\n" msgstr "" -#: src/findlib/bfile.c:157 -msgid "AIX Specific ACL attribs" +#: src/dird/newvol.c:77 +#, c-format +msgid "Illegal character in Volume name \"%s\"\n" msgstr "" -#: src/findlib/bfile.c:159 -msgid "Darwin Specific ACL attribs" +#: src/dird/newvol.c:90 +#, c-format +msgid "Created new Volume=\"%s\", Pool=\"%s\", MediaType=\"%s\" in catalog.\n" msgstr "" -#: src/findlib/bfile.c:161 -msgid "FreeBSD Specific Default ACL attribs" +#: src/dird/newvol.c:119 +#, c-format +msgid "SQL failed, but ignored. ERR=%s\n" msgstr "" -#: src/findlib/bfile.c:163 -msgid "FreeBSD Specific Access ACL attribs" +#: src/dird/newvol.c:129 +#, c-format +msgid "Wanted to create Volume \"%s\", but it already exists. Trying again.\n" msgstr "" -#: src/findlib/bfile.c:165 -msgid "HPUX Specific ACL attribs" +#: src/dird/newvol.c:138 +msgid "Too many failures. Giving up creating Volume name.\n" msgstr "" -#: src/findlib/bfile.c:167 -msgid "Irix Specific Default ACL attribs" +#: src/dird/msgchan.c:66 +#, c-format +msgid "Connecting to Storage daemon %s at %s:%d ...\n" msgstr "" -#: src/findlib/bfile.c:169 -msgid "Irix Specific Access ACL attribs" +#: src/dird/msgchan.c:230 +#, c-format +msgid "Storage daemon rejected Job command: %s\n" msgstr "" -#: src/findlib/bfile.c:171 -msgid "Linux Specific Default ACL attribs" +#: src/dird/msgchan.c:238 +#, c-format +msgid " " msgstr "" -#: src/findlib/find.c:237 +#: src/dird/dird_conf.c:584 #, c-format -msgid "Plugin: \"%s\" not found.\n" +msgid "Console: name=%s SSL=%d\n" msgstr "" -#: src/findlib/match.c:210 src/tools/testfind.c:654 src/filed/job.c:1460 +#: src/dird/dird_conf.c:589 #, c-format -msgid "Unknown include/exclude option: %c\n" +msgid "Counter: name=%s min=%d max=%d cur=%d wrapcntr=%s\n" msgstr "" -#: src/findlib/find_one.c:227 +#: src/dird/dird_conf.c:594 #, c-format -msgid " NODUMP flag set - will not process %s\n" +msgid "Counter: name=%s min=%d max=%d\n" msgstr "" -#: src/findlib/find_one.c:248 +#: src/dird/dird_conf.c:608 #, c-format -msgid "Cannot stat file %s: ERR=%s\n" +msgid "Client: name=%s address=%s FDport=%d MaxJobs=%u\n" msgstr "" -#: src/findlib/find_one.c:253 +#: src/dird/dird_conf.c:611 #, c-format -msgid "%s mtime changed during backup.\n" +msgid " JobRetention=%s FileRetention=%s AutoPrune=%d\n" msgstr "" -#: src/findlib/find_one.c:260 +#: src/dird/dird_conf.c:619 src/dird/dird_conf.c:691 #, c-format -msgid "%s ctime changed during backup.\n" +msgid " MaximumBandwidth=%lld\n" msgstr "" -#: src/findlib/find_one.c:268 src/findlib/find_one.c:276 +#: src/dird/dird_conf.c:631 #, c-format -msgid "%s size changed during backup.\n" +msgid "" +"Device: name=%s ok=%d num_writers=%d max_writers=%d\n" +" reserved=%d open=%d append=%d read=%d labeled=%d offline=%d autochgr=" +"%d\n" +" poolid=%s volname=%s MediaType=%s\n" msgstr "" -#: src/findlib/find_one.c:403 +#: src/dird/dird_conf.c:645 #, c-format -msgid "Top level directory \"%s\" has unlisted fstype \"%s\"\n" +msgid "" +"Storage: name=%s address=%s SDport=%d MaxJobs=%u\n" +" DeviceName=%s MediaType=%s StorageId=%s\n" msgstr "" -#: src/findlib/find_one.c:418 +#: src/dird/dird_conf.c:661 #, c-format -msgid "Top level directory \"%s\" has an unlisted drive type \"%s\"\n" +msgid "" +"Catalog: name=%s address=%s DBport=%d db_name=%s\n" +" db_driver=%s db_user=%s MutliDBConn=%d\n" msgstr "" -#: src/cats/sql_create.c:101 +#: src/dird/dird_conf.c:674 #, c-format -msgid "Create DB Job record %s failed. ERR=%s\n" +msgid "%s: name=%s JobType=%d level=%s Priority=%d Enabled=%d\n" msgstr "" -#: src/cats/sql_create.c:145 -#, c-format -msgid "Create JobMedia record %s failed: ERR=%s\n" +#: src/dird/dird_conf.c:675 +msgid "JobDefs" msgstr "" -#: src/cats/sql_create.c:154 +#: src/dird/dird_conf.c:679 #, c-format -msgid "Update Media record %s failed: ERR=%s\n" +msgid "" +" MaxJobs=%u Resched=%d Times=%d Interval=%s Spool=%d WritePartAfterJob=" +"%d\n" msgstr "" -#: src/cats/sql_create.c:189 +#: src/dird/dird_conf.c:685 #, c-format -msgid "pool record %s already exists\n" +msgid " SpoolSize=%s\n" msgstr "" -#: src/cats/sql_create.c:221 +#: src/dird/dird_conf.c:688 #, c-format -msgid "Create db Pool record %s failed: ERR=%s\n" +msgid " Accurate=%d\n" msgstr "" -#: src/cats/sql_create.c:254 +#: src/dird/dird_conf.c:695 #, c-format -msgid "Device record %s already exists\n" +msgid " SelectionType=%d\n" msgstr "" -#: src/cats/sql_create.c:271 +#: src/dird/dird_conf.c:710 #, c-format -msgid "Create db Device record %s failed: ERR=%s\n" +msgid " --> Where=%s\n" msgstr "" -#: src/cats/sql_create.c:306 +#: src/dird/dird_conf.c:713 #, c-format -msgid "More than one Storage record!: %d\n" +msgid " --> RegexWhere=%s\n" msgstr "" -#: src/cats/sql_create.c:311 +#: src/dird/dird_conf.c:716 #, c-format -msgid "error fetching Storage row: %s\n" +msgid " --> Bootstrap=%s\n" msgstr "" -#: src/cats/sql_create.c:332 +#: src/dird/dird_conf.c:719 #, c-format -msgid "Create DB Storage record %s failed. ERR=%s\n" +msgid " --> WriteBootstrap=%s\n" msgstr "" -#: src/cats/sql_create.c:366 +#: src/dird/dird_conf.c:722 #, c-format -msgid "mediatype record %s already exists\n" +msgid " --> PluginOptions=%s\n" msgstr "" -#: src/cats/sql_create.c:383 +#: src/dird/dird_conf.c:725 #, c-format -msgid "Create db mediatype record %s failed: ERR=%s\n" +msgid " --> MaxRunTime=%u\n" msgstr "" -#: src/cats/sql_create.c:424 +#: src/dird/dird_conf.c:728 #, c-format -msgid "Volume \"%s\" already exists.\n" +msgid " --> MaxWaitTime=%u\n" msgstr "" -#: src/cats/sql_create.c:470 +#: src/dird/dird_conf.c:731 #, c-format -msgid "Create DB Media record %s failed. ERR=%s\n" +msgid " --> MaxStartDelay=%u\n" msgstr "" -#: src/cats/sql_create.c:521 +#: src/dird/dird_conf.c:734 #, c-format -msgid "More than one Client!: %d\n" +msgid " --> MaxRunSchedTime=%u\n" msgstr "" -#: src/cats/sql_create.c:526 +#: src/dird/dird_conf.c:746 #, c-format -msgid "error fetching Client row: %s\n" +msgid " --> Base %s\n" msgstr "" -#: src/cats/sql_create.c:554 +#: src/dird/dird_conf.c:784 #, c-format -msgid "Create DB Client record %s failed. ERR=%s\n" +msgid " --> Run=%s\n" msgstr "" -#: src/cats/sql_create.c:589 src/cats/sql_get.c:251 +#: src/dird/dird_conf.c:788 #, c-format -msgid "More than one Path!: %s for path: %s\n" +msgid " --> SelectionPattern=%s\n" msgstr "" -#: src/cats/sql_create.c:596 src/cats/sql_get.c:205 src/cats/sql_get.c:258 -#: src/cats/sql_get.c:640 src/cats/sql_get.c:722 src/cats/sql_get.c:1039 -#: src/cats/sql.c:340 src/cats/sql.c:347 src/cats/postgresql.c:165 +#: src/dird/dird_conf.c:802 #, c-format -msgid "error fetching row: %s\n" +msgid "FileSet: name=%s\n" msgstr "" -#: src/cats/sql_create.c:621 +#: src/dird/dird_conf.c:896 src/dird/dird_conf.c:981 #, c-format -msgid "Create db Path record %s failed. ERR=%s\n" +msgid "Schedule: name=%s\n" msgstr "" -#: src/cats/sql_create.c:666 +#: src/dird/dird_conf.c:901 #, c-format -msgid "Create DB Counters record %s failed. ERR=%s\n" +msgid " --> Run Level=%s\n" msgstr "" -#: src/cats/sql_create.c:704 +#: src/dird/dird_conf.c:903 #, c-format -msgid "More than one FileSet!: %d\n" +msgid " MaxRunSchedTime=%u\n" msgstr "" -#: src/cats/sql_create.c:709 +#: src/dird/dird_conf.c:906 #, c-format -msgid "error fetching FileSet row: ERR=%s\n" +msgid " Priority=%u\n" msgstr "" -#: src/cats/sql_create.c:740 -#, c-format -msgid "Create DB FileSet record %s failed. ERR=%s\n" +#: src/dird/dird_conf.c:908 +msgid " hour=" msgstr "" -#: src/cats/sql_create.c:989 -#, c-format -msgid "Create db File record %s failed. ERR=%s" +#: src/dird/dird_conf.c:917 +msgid " mday=" msgstr "" -#: src/cats/sql_create.c:1015 -#, c-format -msgid "More than one Filename! %s for file: %s\n" +#: src/dird/dird_conf.c:926 +msgid " month=" msgstr "" -#: src/cats/sql_create.c:1021 -#, c-format -msgid "Error fetching row for file=%s: ERR=%s\n" +#: src/dird/dird_conf.c:935 +msgid " wday=" msgstr "" -#: src/cats/sql_create.c:1038 -#, c-format -msgid "Create db Filename record %s failed. ERR=%s\n" +#: src/dird/dird_conf.c:944 +msgid " wom=" msgstr "" -#: src/cats/sql_create.c:1058 -#, c-format -msgid "Attempt to put non-attributes into catalog. Stream=%d\n" +#: src/dird/dird_conf.c:953 +msgid " woy=" msgstr "" -#: src/cats/sql_create.c:1074 -msgid "Cannot Copy/Migrate job using BaseJob.\n" +#: src/dird/dird_conf.c:962 +#, c-format +msgid " mins=%d\n" msgstr "" -#: src/cats/sql_create.c:1166 src/cats/sql_get.c:1136 -msgid "ERR=JobIds are empty\n" +#: src/dird/dird_conf.c:964 src/dird/dird_conf.c:968 src/dird/dird_conf.c:972 +msgid " --> " msgstr "" -#: src/cats/sql_create.c:1219 +#: src/dird/dird_conf.c:989 #, c-format -msgid "Create db Object record %s failed. ERR=%s" +msgid "Pool: name=%s PoolType=%s\n" msgstr "" -#: src/cats/sql_get.c:151 +#: src/dird/dird_conf.c:991 #, c-format -msgid "Error fetching row: %s\n" +msgid " use_cat=%d use_once=%d cat_files=%d\n" msgstr "" -#: src/cats/sql_get.c:158 +#: src/dird/dird_conf.c:994 #, c-format -msgid "get_file_record want 1 got rows=%d PathId=%s FilenameId=%s\n" +msgid " max_vols=%d auto_prune=%d VolRetention=%s\n" msgstr "" -#: src/cats/sql_get.c:166 +#: src/dird/dird_conf.c:997 #, c-format -msgid "File record for PathId=%s FilenameId=%s not found.\n" +msgid " VolUse=%s recycle=%d LabelFormat=%s\n" msgstr "" -#: src/cats/sql_get.c:172 -msgid "File record not found in Catalog.\n" +#: src/dird/dird_conf.c:1001 +#, c-format +msgid " CleaningPrefix=%s LabelType=%d\n" msgstr "" -#: src/cats/sql_get.c:199 +#: src/dird/dird_conf.c:1003 #, c-format -msgid "More than one Filename!: %s for file: %s\n" +msgid " RecyleOldest=%d PurgeOldest=%d ActionOnPurge=%d\n" msgstr "" -#: src/cats/sql_get.c:209 +#: src/dird/dird_conf.c:1007 #, c-format -msgid "Get DB Filename record %s found bad record: %d\n" +msgid " MaxVolJobs=%d MaxVolFiles=%d MaxVolBytes=%s\n" msgstr "" -#: src/cats/sql_get.c:215 +#: src/dird/dird_conf.c:1011 #, c-format -msgid "Filename record: %s not found.\n" +msgid " MigTime=%s MigHiBytes=%s MigLoBytes=%s\n" msgstr "" -#: src/cats/sql_get.c:219 +#: src/dird/dird_conf.c:1015 #, c-format -msgid "Filename record: %s not found in Catalog.\n" +msgid " JobRetention=%s FileRetention=%s\n" msgstr "" -#: src/cats/sql_get.c:262 +#: src/dird/dird_conf.c:1019 #, c-format -msgid "Get DB path record %s found bad record: %s\n" +msgid " NextPool=%s\n" msgstr "" -#: src/cats/sql_get.c:275 +#: src/dird/dird_conf.c:1022 #, c-format -msgid "Path record: %s not found.\n" +msgid " RecyclePool=%s\n" msgstr "" -#: src/cats/sql_get.c:279 +#: src/dird/dird_conf.c:1025 #, c-format -msgid "Path record: %s not found in Catalog.\n" +msgid " ScratchPool=%s\n" msgstr "" -#: src/cats/sql_get.c:318 +#: src/dird/dird_conf.c:1028 #, c-format -msgid "No Job found for JobId %s\n" +msgid " Catalog=%s\n" msgstr "" -#: src/cats/sql_get.c:391 src/cats/sql_get.c:448 +#: src/dird/dird_conf.c:1048 #, c-format -msgid "No volumes found for JobId=%d\n" +msgid "Messages: name=%s\n" msgstr "" -#: src/cats/sql_get.c:397 src/cats/sql_get.c:459 +#: src/dird/dird_conf.c:1050 #, c-format -msgid "Error fetching row %d: ERR=%s\n" +msgid " mailcmd=%s\n" msgstr "" -#: src/cats/sql_get.c:411 +#: src/dird/dird_conf.c:1052 #, c-format -msgid "No Volume for JobId %d found in Catalog.\n" +msgid " opcmd=%s\n" msgstr "" -#: src/cats/sql_get.c:552 +#: src/dird/dird_conf.c:1056 src/qt-console/tray-monitor/tray_conf.cpp:187 #, c-format -msgid "Pool id select failed: ERR=%s\n" +msgid "Unknown resource type %d in dump_resource.\n" msgstr "" -#: src/cats/sql_get.c:589 +#: src/dird/dird_conf.c:1393 src/qt-console/tray-monitor/tray_conf.cpp:245 #, c-format -msgid "Client id select failed: ERR=%s\n" +msgid "Unknown resource type %d in free_resource.\n" msgstr "" -#: src/cats/sql_get.c:635 +#: src/dird/dird_conf.c:1471 #, c-format -msgid "More than one Pool!: %s\n" +msgid "Cannot find Pool resource %s\n" msgstr "" -#: src/cats/sql_get.c:679 -msgid "Pool record not found in Catalog.\n" +#: src/dird/dird_conf.c:1482 +#, c-format +msgid "Cannot find Console resource %s\n" msgstr "" -#: src/cats/sql_get.c:717 +#: src/dird/dird_conf.c:1504 #, c-format -msgid "More than one Client!: %s\n" +msgid "Cannot find Job resource %s\n" msgstr "" -#: src/cats/sql_get.c:734 src/cats/sql_get.c:738 -msgid "Client record not found in Catalog.\n" +#: src/dird/dird_conf.c:1555 +#, c-format +msgid "Cannot find Counter resource %s\n" msgstr "" -#: src/cats/sql_get.c:765 +#: src/dird/dird_conf.c:1563 src/filed/filed_conf.c:465 #, c-format -msgid "More than one Counter!: %d\n" +msgid "Cannot find Client resource %s\n" msgstr "" -#: src/cats/sql_get.c:770 +#: src/dird/dird_conf.c:1576 #, c-format -msgid "error fetching Counter row: %s\n" +msgid "Cannot find Schedule resource %s\n" msgstr "" -#: src/cats/sql_get.c:790 +#: src/dird/dird_conf.c:1581 src/dird/dird_conf.c:1641 +#: src/qt-console/tray-monitor/tray_conf.cpp:302 +#: src/qt-console/tray-monitor/tray_conf.cpp:340 #, c-format -msgid "Counter record: %s not found in Catalog.\n" +msgid "Unknown resource type %d in save_resource.\n" msgstr "" -#: src/cats/sql_get.c:830 +#: src/dird/dird_conf.c:1656 #, c-format -msgid "Error got %s FileSets but expected only one!\n" +msgid "Name item is required in %s resource, but not found.\n" msgstr "" -#: src/cats/sql_get.c:835 +#: src/dird/dird_conf.c:1669 #, c-format -msgid "FileSet record \"%s\" not found.\n" +msgid "Inserting %s res: %s index=%d pass=%d\n" msgstr "" -#: src/cats/sql_get.c:845 -msgid "FileSet record not found in Catalog.\n" +#: src/dird/dird_conf.c:1682 +#, c-format +msgid "Expected one of: %s, got: %s" msgstr "" -#: src/cats/sql_get.c:941 +#: src/dird/dird_conf.c:1754 #, c-format -msgid "Media id select failed: ERR=%s\n" +msgid "Expected a Migration Job Type keyword, got: %s" msgstr "" -#: src/cats/sql_get.c:979 +#: src/dird/dird_conf.c:1780 #, c-format -msgid "query dbids failed: ERR=%s\n" +msgid "Expected a Job Type keyword, got: %s" msgstr "" -#: src/cats/sql_get.c:1034 +#: src/dird/dird_conf.c:1804 #, c-format -msgid "More than one Volume!: %s\n" +msgid "Expected a Job Level keyword, got: %s" msgstr "" -#: src/cats/sql_get.c:1090 +#: src/dird/dird_conf.c:1824 #, c-format -msgid "Media record MediaId=%s not found.\n" +msgid "Expected a Restore replacement option, got: %s" msgstr "" -#: src/cats/sql_get.c:1093 +#: src/dird/ua_query.c:61 src/findlib/file_create.c:265 +#: src/findlib/file_create.c:353 #, c-format -msgid "Media record for Volume \"%s\" not found.\n" +msgid "Could not open %s: ERR=%s\n" +msgstr "" + +#: src/dird/ua_query.c:66 +msgid "Available queries:\n" +msgstr "" + +#: src/dird/ua_query.c:73 +msgid "Choose a query" msgstr "" -#: src/cats/sql_get.c:1100 +#: src/dird/ua_query.c:87 +msgid "Could not find query.\n" +msgstr "" + +#: src/dird/ua_query.c:105 +msgid "Too many prompts in query, max is 9.\n" +msgstr "" + +#: src/dird/ua_query.c:208 #, c-format -msgid "Media record for MediaId=%u not found in Catalog.\n" +msgid "Warning prompt %d missing.\n" msgstr "" -#: src/cats/sql_get.c:1103 +#: src/dird/ua_query.c:253 +msgid "" +"Entering SQL query mode.\n" +"Terminate each query with a semicolon.\n" +"Terminate query mode with a blank line.\n" +msgstr "" + +#: src/dird/ua_query.c:256 src/dird/ua_query.c:272 +msgid "Enter SQL query: " +msgstr "" + +#: src/dird/ua_query.c:274 +msgid "Add to SQL query: " +msgstr "" + +#: src/dird/ua_query.c:277 +msgid "End query mode.\n" +msgstr "" + +#: src/dird/dird.c:124 #, c-format -msgid "Media record for Vol=%s not found in Catalog.\n" +msgid "" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: bacula-dir [-f -s] [-c config_file] [-d debug_level] [config_file]\n" +" -c set configuration file to file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -f run in foreground (for debugging)\n" +" -g groupid\n" +" -m print kaboom output (for debugging)\n" +" -r run now\n" +" -s no signals\n" +" -t test - read configuration and exit\n" +" -u userid\n" +" -v verbose user messages\n" +" -? print this message.\n" +"\n" msgstr "" -#: src/cats/sql_find.c:98 src/cats/sql_find.c:127 src/cats/sql_find.c:182 -#, c-format -msgid "" -"Query error for start time request: ERR=%s\n" -"CMD=%s\n" +#: src/dird/dird.c:503 +msgid "Too many open reload requests. Request ignored.\n" msgstr "" -#: src/cats/sql_find.c:104 src/cats/sql_find.c:188 -msgid "No prior Full backup Job record found.\n" +#: src/dird/dird.c:518 +msgid "Out of reload table entries. Giving up.\n" msgstr "" -#: src/cats/sql_find.c:116 -#, c-format -msgid "Unknown level=%d\n" +#: src/dird/dird.c:521 +msgid "Resetting previous configuration.\n" msgstr "" -#: src/cats/sql_find.c:133 +#: src/dird/dird.c:585 #, c-format msgid "" -"No Job record found: ERR=%s\n" -"CMD=%s\n" +"No Director resource defined in %s\n" +"Without that I don't know who I am :-(\n" msgstr "" -#: src/cats/sql_find.c:291 +#: src/dird/dird.c:593 src/filed/filed.c:328 #, c-format -msgid "Unknown Job level=%d\n" +msgid "No Messages resource defined in %s\n" msgstr "" -#: src/cats/sql_find.c:301 +#: src/dird/dird.c:598 #, c-format -msgid "No Job found for: %s.\n" +msgid "Only one Director resource permitted in %s\n" msgstr "" -#: src/cats/sql_find.c:312 +#: src/dird/dird.c:655 #, c-format -msgid "No Job found for: %s\n" +msgid "No Job records defined in %s\n" msgstr "" -#: src/cats/sql_find.c:393 +#: src/dird/dird.c:713 src/dird/dird.c:726 #, c-format -msgid "Request for Volume item %d greater than max %d or less than 1\n" +msgid "Hey something is wrong. p=0x%lu\n" msgstr "" -#: src/cats/sql_find.c:408 +#: src/dird/dird.c:787 #, c-format -msgid "No Volume record found for item %d.\n" +msgid "\"%s\" directive in Job \"%s\" resource is required, but not found.\n" msgstr "" -#: src/cats/sqlite.c:166 src/cats/ingres.c:255 src/cats/postgresql.c:210 -#: src/cats/dbi.c:228 src/cats/mysql.c:164 -#, c-format -msgid "Unable to initialize DB lock. ERR=%s\n" +#: src/dird/dird.c:794 +msgid "Too many items in Job resource\n" msgstr "" -#: src/cats/sqlite.c:181 +#: src/dird/dird.c:798 #, c-format -msgid "Database %s does not exist, please create it.\n" +msgid "No storage specified in Job \"%s\" nor in Pool.\n" msgstr "" -#: src/cats/sqlite.c:203 +#: src/dird/dird.c:822 #, c-format -msgid "Unable to open Database=%s. ERR=%s\n" -msgstr "" - -#: src/cats/sqlite.c:204 -msgid "unknown" +msgid "\"TLS Certificate\" file not defined for Console \"%s\" in %s.\n" msgstr "" -#: src/cats/sqlite.c:462 src/cats/ingres.c:496 src/cats/postgresql.c:506 -#: src/cats/postgresql.c:553 src/cats/dbi.c:631 src/cats/cats.c:149 -#: src/cats/mysql.c:393 +#: src/dird/dird.c:828 #, c-format -msgid "Query failed: %s: ERR=%s\n" +msgid "\"TLS Key\" file not defined for Console \"%s\" in %s.\n" msgstr "" -#: src/cats/ingres.c:87 -msgid "Failed to allocate space for query filter.\n" +#: src/dird/dird.c:835 +#, c-format +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Console \"%s\" in %s. At least one CA certificate store is required when " +"using \"TLS Verify Peer\".\n" msgstr "" -#: src/cats/ingres.c:108 -msgid "Failed to allocate space for query filters.\n" +#: src/dird/dird.c:852 src/dird/dird.c:892 src/filed/filed.c:391 +#, c-format +msgid "Failed to initialize TLS context for File daemon \"%s\" in %s.\n" msgstr "" -#: src/cats/ingres.c:267 +#: src/dird/dird.c:875 #, c-format msgid "" -"Unable to connect to Ingres server.\n" -"Database=%s User=%s\n" -"It is probably not running or your password is incorrect.\n" -msgstr "" - -#: src/cats/ingres.c:1087 -msgid "A user name for Ingres must be supplied.\n" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"File daemon \"%s\" in %s.\n" msgstr "" -#: src/cats/sql.c:184 +#: src/dird/dird.c:916 #, c-format msgid "" -"Potential performance problem:\n" -"max_connections=%d set for %s database \"%s\" should be larger than " -"Director's MaxConcurrentJobs=%d\n" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Storage \"%s\" in %s.\n" msgstr "" -#: src/cats/sql.c:229 +#: src/dird/dird.c:971 src/dird/dird.c:973 #, c-format -msgid "" -"query %s failed:\n" -"%s\n" +msgid "Could not open Catalog \"%s\", database \"%s\".\n" msgstr "" -#: src/cats/sql.c:251 +#: src/dird/dird.c:976 src/tools/cats_test.c:365 #, c-format -msgid "" -"insert %s failed:\n" -"%s\n" +msgid "%s" msgstr "" -#: src/cats/sql.c:261 +#: src/dird/dird.c:1055 #, c-format -msgid "Insertion problem: affected_rows=%s\n" +msgid "Could not create storage record for %s\n" msgstr "" -#: src/cats/sql.c:282 +#: src/dird/dird.c:1063 #, c-format +msgid "Could not update storage record for %s\n" +msgstr "" + +#: src/dird/ua_purge.c:84 msgid "" -"update %s failed:\n" -"%s\n" +"\n" +"This command can be DANGEROUS!!!\n" +"\n" +"It purges (deletes) all Files from a Job,\n" +"JobId, Client or Volume; or it purges (deletes)\n" +"all Jobs from a Client or Volume without regard\n" +"to retention periods. Normally you should use the\n" +"PRUNE command, which respects retention periods.\n" +msgstr "" + +#: src/dird/ua_purge.c:152 +msgid "Choose item to purge" msgstr "" -#: src/cats/sql.c:292 +#: src/dird/ua_purge.c:199 #, c-format -msgid "Update failed: affected_rows=%s for %s\n" +msgid "Begin purging files for Client \"%s\"\n" msgstr "" -#: src/cats/sql.c:314 +#: src/dird/ua_purge.c:208 src/dird/ua_purge.c:258 #, c-format -msgid "" -"delete %s failed:\n" -"%s\n" +msgid "No Files found for client %s to purge from %s catalog.\n" msgstr "" -#: src/cats/sql.c:408 +#: src/dird/ua_purge.c:211 #, c-format -msgid "Path length is zero. File=%s\n" +msgid "Files for %d Jobs for client \"%s\" purged from %s catalog.\n" msgstr "" -#: src/cats/sql.c:603 -msgid "No results to list.\n" +#: src/dird/ua_purge.c:249 +#, c-format +msgid "Begin purging jobs from Client \"%s\"\n" msgstr "" -#: src/cats/sql.c:721 -msgid "Could not init database batch connection\n" +#: src/dird/ua_purge.c:261 +#, c-format +msgid "%d Jobs for client %s purged from %s catalog.\n" msgstr "" -#: src/cats/sql.c:727 +#: src/dird/ua_purge.c:459 #, c-format -msgid "Could not open database \"%s\": ERR=%s\n" +msgid "" +"\n" +"Volume \"%s\" has VolStatus \"%s\" and cannot be purged.\n" +"The VolStatus must be: Append, Full, Used, or Error to be purged.\n" msgstr "" -#: src/cats/postgresql.c:181 +#: src/dird/ua_purge.c:487 #, c-format -msgid "Encoding error for database \"%s\". Wanted SQL_ASCII, got %s\n" +msgid "%d File%s on Volume \"%s\" purged from catalog.\n" msgstr "" -#: src/cats/postgresql.c:246 +#: src/dird/ua_purge.c:537 #, c-format msgid "" -"Unable to connect to PostgreSQL server. Database=%s User=%s\n" -"Possible causes: SQL server not running; password incorrect; max_connections " -"exceeded.\n" +"There are no more Jobs associated with Volume \"%s\". Marking it purged.\n" msgstr "" -#: src/cats/postgresql.c:350 -msgid "PQescapeStringConn returned non-zero.\n" +#: src/dird/ua_purge.c:606 +msgid "Can't update volume size in the catalog\n" msgstr "" -#: src/cats/postgresql.c:368 -msgid "PQescapeByteaConn returned NULL.\n" +#: src/dird/ua_purge.c:608 +#, c-format +msgid "The volume \"%s\" has been truncated\n" msgstr "" -#: src/cats/postgresql.c:399 -msgid "PQunescapeByteaConn returned NULL.\n" +#: src/dird/ua_purge.c:610 +#, c-format +msgid "Unable to truncate volume \"%s\"\n" msgstr "" -#: src/cats/postgresql.c:813 +#: src/dird/ua_purge.c:703 #, c-format -msgid "error fetching currval: %s\n" +msgid "No Volumes found to perform %s action.\n" msgstr "" -#: src/cats/postgresql.c:1004 src/cats/dbi.c:1277 +#: src/dird/ua_purge.c:771 #, c-format -msgid "error starting batch mode: %s" +msgid "Unable move recycled Volume in full Pool \"%s\" MaxVols=%d\n" msgstr "" -#: src/cats/postgresql.c:1034 src/cats/postgresql.c:1041 +#: src/dird/ua_purge.c:785 #, c-format -msgid "error ending batch mode: %s" +msgid "All records pruned from Volume \"%s\"; marking it \"Purged\"\n" msgstr "" -#: src/cats/postgresql.c:1088 +#: src/dird/ua_purge.c:790 #, c-format -msgid "error copying in batch mode: %s" +msgid "Cannot purge Volume with VolStatus=%s\n" msgstr "" -#: src/cats/postgresql.c:1110 -msgid "A user name for PostgreSQL must be supplied.\n" +#: src/dird/ua_prune.c:116 +msgid "Choose item to prune" msgstr "" -#: src/cats/sql_list.c:59 +#: src/dird/ua_prune.c:172 #, c-format -msgid "Query failed: %s\n" +msgid "Cannot prune Volume \"%s\" because it is archived.\n" msgstr "" -#: src/cats/sql_list.c:275 -msgid "These JobIds have copies as follows:\n" +#: src/dird/ua_prune.c:214 +msgid "Pruned Jobs from JobHisto catalog.\n" msgstr "" -#: src/cats/sql_list.c:277 -msgid "The catalog contains copies as follows:\n" +#: src/dird/ua_prune.c:302 +msgid "Begin pruning Files.\n" msgstr "" -#: src/cats/dbi.c:117 -#, c-format -msgid "Unknown database type: %s\n" +#: src/dird/ua_prune.c:317 +msgid "No Files found to prune.\n" msgstr "" -#: src/cats/dbi.c:242 +#: src/dird/ua_prune.c:340 #, c-format -msgid "" -"Unable to locate the DBD drivers to DBI interface in: \n" -"db_driverdir=%s. It is probaly not found any drivers\n" +msgid "Pruned Files from %s Jobs for client %s from catalog.\n" msgstr "" -#: src/cats/dbi.c:299 +#: src/dird/ua_prune.c:486 #, c-format -msgid "" -"Unable to connect to DBI interface. Type=%s Database=%s User=%s\n" -"Possible causes: SQL server not running; password incorrect; max_connections " -"exceeded.\n" +msgid "Begin pruning Jobs older than %s.\n" msgstr "" -#: src/cats/dbi.c:1439 +#: src/dird/ua_prune.c:597 #, c-format -msgid "error inserting batch mode: %s" +msgid "Pruned %d %s for client %s from catalog.\n" msgstr "" -#: src/cats/dbi.c:1456 -msgid "Driver type not specified in Catalog resource.\n" +#: src/dird/ua_prune.c:598 +msgid "Jobs" msgstr "" -#: src/cats/dbi.c:1460 -msgid "Invalid driver type, must be \"dbi:\"\n" +#: src/dird/ua_prune.c:600 +msgid "No Jobs found to prune.\n" msgstr "" -#: src/cats/dbi.c:1464 -msgid "A user name for DBI must be supplied.\n" +#: src/dird/ua_prune.c:661 +msgid "Expecting limit argument as integer\n" msgstr "" -#: src/cats/cats_dummy.c:39 -msgid "Please replace this dummy libbaccats library with a proper one.\n" +#: src/dird/ua_prune.c:675 +#, c-format +msgid "Volume \"%s\"" msgstr "" -#: src/cats/sql_delete.c:80 -#, c-format -msgid "No pool record %s exists\n" +#: src/dird/ua_update.c:85 +msgid "Update choice:\n" msgstr "" -#: src/cats/sql_delete.c:85 -#, c-format -msgid "Expecting one pool record, got %d\n" +#: src/dird/ua_update.c:86 +msgid "Volume parameters" msgstr "" -#: src/cats/sql_delete.c:91 -#, c-format -msgid "Error fetching row %s\n" +#: src/dird/ua_update.c:87 +msgid "Pool from resource" msgstr "" -#: src/cats/mysql.c:207 -#, c-format -msgid "" -"Unable to connect to MySQL server.\n" -"Database=%s User=%s\n" -"MySQL connect failed either server not running or your authorization is " -"incorrect.\n" +#: src/dird/ua_update.c:88 +msgid "Slots from autochanger" msgstr "" -#: src/cats/mysql.c:692 -msgid "A user name for MySQL must be supplied.\n" +#: src/dird/ua_update.c:89 +msgid "Long term statistics" msgstr "" -#: src/wx-console/console_conf.c:147 src/console/console_conf.c:140 -#: src/qt-console/bat_conf.cpp:141 -#, c-format -msgid "No record for %d %s\n" +#: src/dird/ua_update.c:90 +msgid "item" msgstr "" -#: src/wx-console/console_conf.c:156 src/console/console_conf.c:149 -#, c-format -msgid "Console: name=%s rcfile=%s histfile=%s\n" +#: src/dird/ua_update.c:90 +msgid "Choose catalog item to update" msgstr "" -#: src/wx-console/console_conf.c:160 src/console/console_conf.c:153 -#: src/qt-console/bat_conf.cpp:150 +#: src/dird/ua_update.c:133 #, c-format -msgid "Director: name=%s address=%s DIRport=%d\n" +msgid "Invalid VolStatus specified: %s\n" msgstr "" -#: src/wx-console/authenticate.c:142 src/console/authenticate.c:138 -msgid "TLS negotiation failed\n" +#: src/dird/ua_update.c:142 +#, c-format +msgid "New Volume status is: %s\n" msgstr "" -#: src/wx-console/authenticate.c:150 -msgid "Bad response to Hello command: ERR=" +#: src/dird/ua_update.c:152 +#, c-format +msgid "Invalid retention period specified: %s\n" msgstr "" -#: src/wx-console/authenticate.c:167 src/console/authenticate.c:169 -msgid "" -"Director authorization problem.\n" -"Most likely the passwords do not agree.\n" -"If you are using TLS, there may have been a certificate validation error " -"during the TLS handshake.\n" -"Please see " +#: src/dird/ua_update.c:160 +#, c-format +msgid "New retention period is: %s\n" msgstr "" -#: src/console/console.c:126 +#: src/dird/ua_update.c:171 #, c-format -msgid "" -"\n" -"Version: " +msgid "Invalid use duration specified: %s\n" msgstr "" -#: src/console/console.c:178 -msgid "input from file" +#: src/dird/ua_update.c:179 +#, c-format +msgid "New use duration is: %s\n" msgstr "" -#: src/console/console.c:179 -msgid "output to file" +#: src/dird/ua_update.c:193 +#, c-format +msgid "New max jobs is: %s\n" msgstr "" -#: src/console/console.c:180 -msgid "quit" +#: src/dird/ua_update.c:206 +#, c-format +msgid "New max files is: %s\n" msgstr "" -#: src/console/console.c:181 -msgid "output to file and terminal" +#: src/dird/ua_update.c:217 +#, c-format +msgid "Invalid max. bytes specification: %s\n" msgstr "" -#: src/console/console.c:182 -msgid "sleep specified time" +#: src/dird/ua_update.c:225 +#, c-format +msgid "New Max bytes is: %s\n" msgstr "" -#: src/console/console.c:183 -msgid "print current time" +#: src/dird/ua_update.c:236 src/dird/ua_update.c:256 +msgid "Invalid value. It must be yes or no.\n" msgstr "" -#: src/console/console.c:184 -msgid "print Console's version" +#: src/dird/ua_update.c:244 +#, c-format +msgid "New Recycle flag is: %s\n" msgstr "" -#: src/console/console.c:185 -msgid "echo command string" +#: src/dird/ua_update.c:264 +#, c-format +msgid "New InChanger flag is: %s\n" msgstr "" -#: src/console/console.c:186 -msgid "execute an external command" +#: src/dird/ua_update.c:282 +#, c-format +msgid "Invalid slot, it must be between 0 and MaxVols=%d\n" msgstr "" -#: src/console/console.c:187 -msgid "exit = quit" +#: src/dird/ua_update.c:292 src/dird/ua_update.c:716 +#, c-format +msgid "Error updating media record Slot: ERR=%s" msgstr "" -#: src/console/console.c:188 -msgid "zed_keys = use zed keys instead of bash keys" +#: src/dird/ua_update.c:294 +#, c-format +msgid "New Slot is: %d\n" msgstr "" -#: src/console/console.c:189 -msgid "help listing" +#: src/dird/ua_update.c:319 +#, c-format +msgid "New Pool is: %s\n" msgstr "" -#: src/console/console.c:191 -msgid "set command separator" +#: src/dird/ua_update.c:362 +#, c-format +msgid "New RecyclePool is: %s\n" msgstr "" -#: src/console/console.c:225 -msgid ": is an invalid command\n" +#: src/dird/ua_update.c:382 +#, c-format +msgid "Error updating Volume record: ERR=%s" msgstr "" -#: src/console/console.c:675 -msgid "Illegal separator character.\n" +#: src/dird/ua_update.c:384 +#, c-format +msgid "Volume defaults updated from \"%s\" Pool record.\n" msgstr "" -#: src/console/console.c:708 -msgid "Command logic problem\n" +#: src/dird/ua_update.c:407 src/dird/ua_update.c:439 +#, c-format +msgid "Error updating Volume records: ERR=%s" msgstr "" -#: src/console/console.c:925 +#: src/dird/ua_update.c:409 src/dird/ua_update.c:441 #, c-format -msgid "Can't find %s in Director list\n" +msgid "All Volume defaults updated from \"%s\" Pool record.\n" msgstr "" -#: src/console/console.c:933 -msgid "Available Directors:\n" +#: src/dird/ua_update.c:431 +#, c-format +msgid "Updating all pools, but skipped PoolId=%d. ERR=%s\n" msgstr "" -#: src/console/console.c:937 +#: src/dird/ua_update.c:457 #, c-format -msgid "%2d: %s at %s:%d\n" +msgid "Error updating media record Enabled: ERR=%s" msgstr "" -#: src/console/console.c:941 -msgid "Select Director by entering a number: " +#: src/dird/ua_update.c:460 +#, c-format +msgid "New Enabled is: %d\n" msgstr "" -#: src/console/console.c:948 +#: src/dird/ua_update.c:475 #, c-format -msgid "%s is not a number. You must enter a number between 1 and %d\n" +msgid "Error updating media record ActionOnPurge: ERR=%s" msgstr "" -#: src/console/console.c:955 +#: src/dird/ua_update.c:478 #, c-format -msgid "You must enter a number between 1 and %d\n" +msgid "New ActionOnPurge is: %s\n" msgstr "" -#: src/console/console.c:1160 src/wx-console/console_thread.cpp:399 -#: src/qt-console/bcomm/dircomm.cpp:131 -#, c-format -msgid "Failed to initialize TLS context for Console \"%s\".\n" +#: src/dird/ua_update.c:594 +msgid "Volume Status" +msgstr "" + +#: src/dird/ua_update.c:595 +msgid "Volume Retention Period" msgstr "" -#: src/console/console.c:1180 src/wx-console/console_thread.cpp:420 -#: src/qt-console/bcomm/dircomm.cpp:154 -#, c-format -msgid "Failed to initialize TLS context for Director \"%s\".\n" +#: src/dird/ua_update.c:596 +msgid "Volume Use Duration" msgstr "" -#: src/console/console.c:1210 -msgid "Enter a period to cancel a command.\n" +#: src/dird/ua_update.c:597 +msgid "Maximum Volume Jobs" msgstr "" -#: src/console/console.c:1304 src/qt-console/main.cpp:232 -#, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Director \"%s\" in %s. At least one CA certificate store is required.\n" +#: src/dird/ua_update.c:598 +msgid "Maximum Volume Files" msgstr "" -#: src/console/console.c:1313 src/qt-console/main.cpp:241 -#, c-format -msgid "" -"No Director resource defined in %s\n" -"Without that I don't how to speak to the Director :-(\n" +#: src/dird/ua_update.c:599 +msgid "Maximum Volume Bytes" msgstr "" -#: src/console/console.c:1333 src/qt-console/main.cpp:262 -#, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Console \"%s\" in %s.\n" +#: src/dird/ua_update.c:600 +msgid "Recycle Flag" msgstr "" -#: src/console/console.c:1359 -msgid "Too many arguments on input command.\n" +#: src/dird/ua_update.c:601 +msgid "Slot" msgstr "" -#: src/console/console.c:1363 -msgid "First argument to input command must be a filename.\n" +#: src/dird/ua_update.c:602 +msgid "InChanger Flag" msgstr "" -#: src/console/console.c:1369 -#, c-format -msgid "Cannot open file %s for input. ERR=%s\n" +#: src/dird/ua_update.c:603 +msgid "Volume Files" msgstr "" -#: src/console/console.c:1401 -msgid "Too many arguments on output/tee command.\n" +#: src/dird/ua_update.c:605 +msgid "Volume from Pool" msgstr "" -#: src/console/console.c:1418 -#, c-format -msgid "Cannot open file %s for output. ERR=%s\n" +#: src/dird/ua_update.c:606 +msgid "All Volumes from Pool" msgstr "" -#: src/console/console.c:1437 -msgid "Too many arguments. Enclose command in double quotes.\n" +#: src/dird/ua_update.c:607 +msgid "All Volumes from all Pools" msgstr "" -#: src/console/console.c:1446 -#, c-format -msgid "Cannot popen(\"%s\", \"r\"): ERR=%s\n" +#: src/dird/ua_update.c:608 +msgid "Enabled" msgstr "" -#: src/tools/testls.c:59 -#, c-format -msgid "" -"\n" -"Usage: testls [-d debug_level] [-] [pattern1 ...]\n" -" -a print extended attributes (Win32 debug)\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -e specify file of exclude patterns\n" -" -i specify file of include patterns\n" -" -q quiet, don't print filenames (debug)\n" -" - read pattern(s) from stdin\n" -" -? print this message.\n" -"\n" -"Patterns are file inclusion -- normally directories.\n" -"Debug level >= 1 prints each file found.\n" -"Debug level >= 10 prints path/file for catalog.\n" -"Errors always printed.\n" -"Files/paths truncated is number with len > 255.\n" -"Truncation is only in catalog.\n" -"\n" +#: src/dird/ua_update.c:609 +msgid "RecyclePool" msgstr "" -#: src/tools/testls.c:155 -#, c-format -msgid "Could not open include file: %s\n" +#: src/dird/ua_update.c:610 +msgid "Action On Purge" msgstr "" -#: src/tools/testls.c:168 -#, c-format -msgid "Could not open exclude file: %s\n" +#: src/dird/ua_update.c:611 +msgid "Done" msgstr "" -#: src/tools/testls.c:182 +#: src/dird/ua_update.c:620 #, c-format -msgid "Files seen = %d\n" +msgid "Updating Volume \"%s\"\n" msgstr "" -#: src/tools/testls.c:215 src/tools/testfind.c:322 +#: src/dird/ua_update.c:625 #, c-format -msgid "Err: Could not access %s: %s\n" +msgid "Current Volume status is: %s\n" msgstr "" -#: src/tools/testls.c:218 src/tools/testfind.c:325 -#, c-format -msgid "Err: Could not follow ff->link %s: %s\n" +#: src/dird/ua_update.c:626 +msgid "Possible Values are:\n" msgstr "" -#: src/tools/testls.c:221 src/tools/testfind.c:328 -#, c-format -msgid "Err: Could not stat %s: %s\n" +#: src/dird/ua_update.c:637 +msgid "Choose new Volume Status" msgstr "" -#: src/tools/testls.c:224 src/tools/testfind.c:331 +#: src/dird/ua_update.c:643 #, c-format -msgid "Skip: File not saved. No change. %s\n" +msgid "Current retention period is: %s\n" msgstr "" -#: src/tools/testls.c:227 src/tools/testfind.c:334 -#, c-format -msgid "Err: Attempt to backup archive. Not saved. %s\n" +#: src/dird/ua_update.c:645 +msgid "Enter Volume Retention period: " msgstr "" -#: src/tools/testls.c:230 +#: src/dird/ua_update.c:652 #, c-format -msgid "Recursion turned off. Directory not entered. %s\n" +msgid "Current use duration is: %s\n" msgstr "" -#: src/tools/testls.c:233 -#, c-format -msgid "Skip: File system change prohibited. Directory not entered. %s\n" +#: src/dird/ua_update.c:654 +msgid "Enter Volume Use Duration: " msgstr "" -#: src/tools/testls.c:236 src/tools/testfind.c:337 +#: src/dird/ua_update.c:661 #, c-format -msgid "Err: Could not open directory %s: %s\n" +msgid "Current max jobs is: %u\n" msgstr "" -#: src/tools/testls.c:239 src/tools/testfind.c:340 -#, c-format -msgid "Err: Unknown file ff->type %d: %s\n" +#: src/dird/ua_update.c:662 +msgid "Enter new Maximum Jobs: " msgstr "" -#: src/tools/bvfs_test.c:56 src/tools/ing_test.c:57 +#: src/dird/ua_update.c:669 #, c-format -msgid "" -"\n" -"Version: %s (%s)\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -n specify the database name (default bacula)\n" -" -u specify database user name (default bacula)\n" -" -P specify database host (default NULL)\n" -" -w specify working directory\n" -" -j specify jobids\n" -" -p specify path\n" -" -f specify file\n" -" -l maximum tuple to fetch\n" -" -T truncate cache table before starting\n" -" -v verbose\n" -" -? print this message\n" -"\n" +msgid "Current max files is: %u\n" msgstr "" -#: src/tools/bbatch.c:79 -#, c-format -msgid "" -"\n" -"Version: %s (%s)\n" -"Example : bbatch -w /path/to/workdir -h localhost -f dat1 -f dat -f datx\n" -" will start 3 thread and load dat1, dat and datx in your catalog\n" -"See bbatch.c to generate datafile\n" -"\n" -"Usage: bbatch [ options ] -w working/dir -f datafile\n" -" -b with batch mode\n" -" -B without batch mode\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -n specify the database name (default bacula)\n" -" -u specify database user name (default bacula)\n" -" -P specify database host (default NULL)\n" -" -w specify working directory\n" -" -r call restore code with given jobids\n" -" -v verbose\n" -" -f specify data file\n" -" -? print this message\n" -"\n" +#: src/dird/ua_update.c:670 +msgid "Enter new Maximum Files: " msgstr "" -#: src/tools/bbatch.c:211 +#: src/dird/ua_update.c:677 #, c-format -msgid "Computing file list for jobid=%s files=%lld secs=%d\n" +msgid "Current value is: %s\n" msgstr "" -#: src/tools/bbatch.c:315 -#, c-format -msgid "Error opening datafile %s\n" +#: src/dird/ua_update.c:678 +msgid "Enter new Maximum Bytes: " msgstr "" -#: src/tools/bbatch.c:325 -msgid "Error while inserting file\n" +#: src/dird/ua_update.c:686 +#, c-format +msgid "Current recycle flag is: %s\n" msgstr "" -#: src/tools/ing_test.c:231 src/tools/ing_test.c:264 src/tools/ing_test.c:302 -msgid "Stmt went wrong\n" +#: src/dird/ua_update.c:688 +msgid "Enter new Recycle status: " msgstr "" -#: src/tools/ing_test.c:320 -msgid "CREATE-Stmt went wrong\n" +#: src/dird/ua_update.c:695 +#, c-format +msgid "Current Slot is: %d\n" msgstr "" -#: src/tools/ing_test.c:325 -msgid "DROP-Stmt went wrong\n" +#: src/dird/ua_update.c:696 +msgid "Enter new Slot: " msgstr "" -#: src/tools/fstype.c:48 +#: src/dird/ua_update.c:703 #, c-format -msgid "" -"\n" -"Usage: fstype [-v] path ...\n" -"\n" -" Print the file system type a given file/directory is on.\n" -" The following options are supported:\n" -"\n" -" -v print both path and file system type.\n" -" -? print this message.\n" -"\n" +msgid "Current InChanger flag is: %d\n" msgstr "" -#: src/tools/fstype.c:102 src/tools/drivetype.c:78 +#: src/dird/ua_update.c:704 #, c-format -msgid "%s: unknown\n" +msgid "Set InChanger flag for Volume \"%s\": yes/no: " msgstr "" -#: src/tools/bregex.c:153 src/tools/bwild.c:122 src/tools/bregtest.c:137 +#: src/dird/ua_update.c:718 #, c-format -msgid "Could not open data file: %s\n" +msgid "New InChanger flag is: %d\n" msgstr "" -#: src/tools/drivetype.c:47 -#, c-format +#: src/dird/ua_update.c:725 msgid "" -"\n" -"Usage: drivetype [-v] path ...\n" -"\n" -" Print the drive type a given file/directory is on.\n" -" The following options are supported:\n" -"\n" -" -l print local fixed hard drive\n" -" -a display information on all drives\n" -" -v print both path and file system type.\n" -" -? print this message.\n" +"Warning changing Volume Files can result\n" +"in loss of data on your Volume\n" "\n" msgstr "" -#: src/tools/testfind.c:70 +#: src/dird/ua_update.c:727 #, c-format -msgid "" -"\n" -"Usage: testfind [-d debug_level] [-] [pattern1 ...]\n" -" -a print extended attributes (Win32 debug)\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -c specify config file containing FileSet resources\n" -" -f specify which FileSet to use\n" -" -? print this message.\n" -"\n" -"Patterns are used for file inclusion -- normally directories.\n" -"Debug level >= 1 prints each file found.\n" -"Debug level >= 10 prints path/file for catalog.\n" -"Errors are always printed.\n" -"Files/paths truncated is the number of files/paths with len > 255.\n" -"Truncation is only in the catalog.\n" -"\n" +msgid "Current Volume Files is: %u\n" msgstr "" -#: src/tools/testfind.c:235 -#, c-format -msgid "" -"\n" -"Total files : %d\n" -"Max file length: %d\n" -"Max path length: %d\n" -"Files truncated: %d\n" -"Paths truncated: %d\n" -"Hard links : %d\n" +#: src/dird/ua_update.c:728 +msgid "Enter new number of Files for Volume: " msgstr "" -#: src/tools/testfind.c:278 -#, c-format -msgid "Reg: %s\n" +#: src/dird/ua_update.c:733 +msgid "Normally, you should only increase Volume Files by one!\n" msgstr "" -#: src/tools/testfind.c:300 -msgid "\t[will not descend: recursion turned off]" +#: src/dird/ua_update.c:734 +msgid "Increase Volume Files? (yes/no): " msgstr "" -#: src/tools/testfind.c:302 -msgid "\t[will not descend: file system change not allowed]" +#: src/dird/ua_update.c:744 +#, c-format +msgid "New Volume Files is: %u\n" msgstr "" -#: src/tools/testfind.c:304 -msgid "\t[will not descend: disallowed file system]" +#: src/dird/ua_update.c:756 +#, c-format +msgid "Current Pool is: %s\n" msgstr "" -#: src/tools/testfind.c:306 -msgid "\t[will not descend: disallowed drive type]" +#: src/dird/ua_update.c:757 +msgid "Enter new Pool name: " msgstr "" -#: src/tools/testfind.c:390 +#: src/dird/ua_update.c:778 #, c-format -msgid "===== Filename truncated to 255 chars: %s\n" +msgid "Current Enabled is: %d\n" msgstr "" -#: src/tools/testfind.c:407 -#, c-format -msgid "========== Path name truncated to 255 chars: %s\n" +#: src/dird/ua_update.c:779 +msgid "Enter new Enabled: " msgstr "" -#: src/tools/testfind.c:416 +#: src/dird/ua_update.c:789 #, c-format -msgid "========== Path length is zero. File=%s\n" +msgid "Current RecyclePool is: %s\n" msgstr "" -#: src/tools/testfind.c:419 -#, c-format -msgid "Path: %s\n" +#: src/dird/ua_update.c:791 +msgid "No current RecyclePool\n" msgstr "" -#: src/tools/cats_test.c:60 +#: src/dird/ua_update.c:801 #, c-format -msgid "" -"\n" -"Version: %s (%s)\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -n specify the database name (default bacula)\n" -" -u specify database user name (default bacula)\n" -" -P specify database host (default NULL)\n" -" -w specify working directory\n" -" -p specify path\n" -" -f specify file\n" -" -l maximum tuple to fetch\n" -" -q print only errors\n" -" -v verbose\n" -" -? print this message\n" -"\n" +msgid "Current ActionOnPurge is: %s\n" msgstr "" -#: src/tools/cats_test.c:376 -#, c-format -msgid "Could not open, database \"%s\".\n" +#: src/dird/ua_update.c:803 +msgid "Enter new ActionOnPurge (one of: Truncate, None): " msgstr "" -#: src/tools/bsmtp.c:151 -#, c-format -msgid "Fatal malformed reply from %s: %s\n" +#: src/dird/ua_update.c:811 +msgid "Selection terminated.\n" msgstr "" -#: src/tools/bsmtp.c:159 +#: src/dird/ua_update.c:831 #, c-format -msgid "Fatal fgets error: ERR=%s\n" +msgid "Updating %i job(s).\n" msgstr "" -#: src/tools/bsmtp.c:192 +#: src/dird/ua_update.c:863 #, c-format -msgid "" -"\n" -"Usage: %s [-f from] [-h mailhost] [-s subject] [-c copy] [recipient ...]\n" -" -4 forces bsmtp to use IPv4 addresses only.\n" -" -6 forces bsmtp to use IPv6 addresses only.\n" -" -8 set charset to UTF-8\n" -" -a use any ip protocol for address resolution\n" -" -c set the Cc: field\n" -" -d set debug level to \n" -" -dt print a timestamp in debug output\n" -" -f set the From: field\n" -" -h use mailhost:port as the SMTP server\n" -" -s set the Subject: field\n" -" -r set the Reply-To: field\n" -" -l set the maximum number of lines to send (default: " -"unlimited)\n" -" -? print this message.\n" -"\n" +msgid "db_update_pool_record returned %d. ERR=%s\n" msgstr "" -#: src/tools/bsmtp.c:379 -msgid "Fatal error: no recipient given.\n" +#: src/dird/ua_update.c:870 +msgid "Pool DB record updated from resource.\n" msgstr "" -#: src/tools/bsmtp.c:407 -#, c-format -msgid "Fatal gethostname error: ERR=%s\n" +#: src/dird/ua_update.c:897 +msgid "Expect JobId keyword, not found.\n" msgstr "" -#: src/tools/bsmtp.c:418 +#: src/dird/ua_update.c:922 +msgid "Neither Client nor StartTime specified.\n" +msgstr "" + +#: src/dird/catreq.c:121 src/dird/catreq.c:364 #, c-format -msgid "Fatal getaddrinfo for myself failed \"%s\": ERR=%s\n" +msgid "1990 Invalid Catalog Request: %s" msgstr "" -#: src/tools/bsmtp.c:426 +#: src/dird/catreq.c:122 #, c-format -msgid "Fatal gethostbyname for myself failed \"%s\": ERR=%s\n" +msgid "Invalid Catalog request; DB not open: %s" msgstr "" -#: src/tools/bsmtp.c:486 src/tools/bsmtp.c:521 +#: src/dird/catreq.c:143 #, c-format -msgid "Error unknown mail host \"%s\": ERR=%s\n" +msgid "Pool \"%s\" not found for SD find media request.\n" msgstr "" -#: src/tools/bsmtp.c:489 src/tools/bsmtp.c:524 -msgid "Retrying connection using \"localhost\".\n" +#: src/dird/catreq.c:152 +msgid "1901 No Media.\n" msgstr "" -#: src/tools/bsmtp.c:514 -#, c-format -msgid "Failed to connect to mailhost %s\n" +#: src/dird/catreq.c:184 +msgid "not in Pool" msgstr "" -#: src/tools/bsmtp.c:532 -#, c-format -msgid "Fatal error: Unknown address family for smtp host: %d\n" +#: src/dird/catreq.c:186 +msgid "not correct MediaType" msgstr "" -#: src/tools/bsmtp.c:541 src/tools/bsmtp.c:546 -#, c-format -msgid "Fatal socket error: ERR=%s\n" +#: src/dird/catreq.c:196 +msgid "is not Enabled" msgstr "" -#: src/tools/bsmtp.c:551 +#: src/dird/catreq.c:205 #, c-format -msgid "Fatal connect error to %s: ERR=%s\n" +msgid "1998 Volume \"%s\" catalog status is %s, %s.\n" msgstr "" -#: src/tools/bsmtp.c:560 +#: src/dird/catreq.c:210 #, c-format -msgid "Fatal _open_osfhandle error: ERR=%s\n" +msgid "1997 Volume \"%s\" not in catalog.\n" msgstr "" -#: src/tools/bsmtp.c:567 src/tools/bsmtp.c:571 src/tools/bsmtp.c:580 -#: src/tools/bsmtp.c:584 +#: src/dird/catreq.c:236 #, c-format -msgid "Fatal fdopen error: ERR=%s\n" +msgid "Unable to get Media record for Volume %s: ERR=%s\n" msgstr "" -#: src/tools/bsmtp.c:576 +#: src/dird/catreq.c:238 #, c-format -msgid "Fatal dup error: ERR=%s\n" +msgid "1991 Catalog Request for vol=%s failed: %s" msgstr "" -#: src/tools/dbcheck.c:195 -msgid "" -"Warning skipping the additional parameters for working directory/dbname/user/" -"password/host.\n" +#: src/dird/catreq.c:265 +#, c-format +msgid "Attempt to set Volume Files from %u to %u for Volume \"%s\". Ignored.\n" msgstr "" -#: src/tools/dbcheck.c:212 +#: src/dird/catreq.c:321 #, c-format -msgid "Error can not find the Catalog name[%s] in the given config file [%s]\n" +msgid "Catalog error updating Media record. %s" msgstr "" -#: src/tools/dbcheck.c:214 -#, c-format -msgid "Error there is no Catalog section in the given config file [%s]\n" +#: src/dird/catreq.c:323 +msgid "1993 Update Media error\n" msgstr "" -#: src/tools/dbcheck.c:223 -msgid "Error no Director resource defined.\n" +#: src/dird/catreq.c:350 +#, c-format +msgid "Catalog error creating JobMedia record. %s" msgstr "" -#: src/tools/dbcheck.c:247 -msgid "Wrong number of arguments.\n" +#: src/dird/catreq.c:352 +msgid "1992 Create JobMedia error\n" msgstr "" -#: src/tools/dbcheck.c:252 -msgid "Working directory not supplied.\n" +#: src/dird/catreq.c:365 +#, c-format +msgid "Invalid Catalog request: %s" msgstr "" -#: src/tools/dbcheck.c:288 -msgid "Database port must be a numeric value.\n" +#: src/dird/catreq.c:452 +#, c-format +msgid "Attribute create error: ERR=%s" msgstr "" -#: src/tools/dbcheck.c:291 -msgid "Database port must be a int value.\n" +#: src/dird/catreq.c:549 +#, c-format +msgid "Restore object create error. %s" msgstr "" -#: src/tools/dbcheck.c:365 +#: src/dird/catreq.c:556 #, c-format -msgid "Hello, this is the database check/correct program.\n" +msgid "%s not same File=%d as attributes=%d\n" msgstr "" -#: src/tools/dbcheck.c:367 +#: src/dird/catreq.c:583 #, c-format -msgid "Modify database is on." +msgid "Catalog error updating file digest. Unsupported digest stream type: %d" msgstr "" -#: src/tools/dbcheck.c:369 +#: src/dird/catreq.c:598 #, c-format -msgid "Modify database is off." +msgid "attribute create error. %s" msgstr "" -#: src/tools/dbcheck.c:371 src/tools/dbcheck.c:432 +#: src/dird/catreq.c:604 #, c-format -msgid " Verbose is on.\n" +msgid "Catalog error updating file digest. %s" msgstr "" -#: src/tools/dbcheck.c:373 src/tools/dbcheck.c:434 +#: src/dird/catreq.c:627 #, c-format -msgid " Verbose is off.\n" +msgid "1994 Invalid Catalog Update: %s" msgstr "" -#: src/tools/dbcheck.c:375 +#: src/dird/catreq.c:628 #, c-format -msgid "Please select the function you want to perform.\n" +msgid "Invalid Catalog Update; DB not open: %s" msgstr "" -#: src/tools/dbcheck.c:379 +#: src/dird/catreq.c:684 src/dird/catreq.c:699 #, c-format -msgid "" -"\n" -" 1) Toggle modify database flag\n" -" 2) Toggle verbose flag\n" -" 3) Repair bad Filename records\n" -" 4) Repair bad Path records\n" -" 5) Eliminate duplicate Filename records\n" -" 6) Eliminate duplicate Path records\n" -" 7) Eliminate orphaned Jobmedia records\n" -" 8) Eliminate orphaned File records\n" -" 9) Eliminate orphaned Path records\n" -" 10) Eliminate orphaned Filename records\n" -" 11) Eliminate orphaned FileSet records\n" -" 12) Eliminate orphaned Client records\n" -" 13) Eliminate orphaned Job records\n" -" 14) Eliminate all Admin records\n" -" 15) Eliminate all Restore records\n" -" 16) All (3-15)\n" -" 17) Quit\n" +msgid "fread attr spool error. ERR=%s\n" msgstr "" -#: src/tools/dbcheck.c:398 +#: src/findlib/match.c:198 src/filed/job.c:1615 src/tools/testfind.c:642 #, c-format -msgid "" -"\n" -" 1) Toggle modify database flag\n" -" 2) Toggle verbose flag\n" -" 3) Check for bad Filename records\n" -" 4) Check for bad Path records\n" -" 5) Check for duplicate Filename records\n" -" 6) Check for duplicate Path records\n" -" 7) Check for orphaned Jobmedia records\n" -" 8) Check for orphaned File records\n" -" 9) Check for orphaned Path records\n" -" 10) Check for orphaned Filename records\n" -" 11) Check for orphaned FileSet records\n" -" 12) Check for orphaned Client records\n" -" 13) Check for orphaned Job records\n" -" 14) Check for all Admin records\n" -" 15) Check for all Restore records\n" -" 16) All (3-15)\n" -" 17) Quit\n" +msgid "Unknown include/exclude option: %c\n" msgstr "" -#: src/tools/dbcheck.c:418 -msgid "Select function number: " +#: src/findlib/bfile.c:85 +msgid "Unix attributes" msgstr "" -#: src/tools/dbcheck.c:425 -#, c-format -msgid "Database will be modified.\n" +#: src/findlib/bfile.c:87 +msgid "File data" msgstr "" -#: src/tools/dbcheck.c:427 -#, c-format -msgid "Database will NOT be modified.\n" +#: src/findlib/bfile.c:89 +msgid "MD5 digest" msgstr "" -#: src/tools/dbcheck.c:518 -#, c-format -msgid "JobId=%s Name=\"%s\" StartTime=%s\n" +#: src/findlib/bfile.c:91 +msgid "GZIP data" msgstr "" -#: src/tools/dbcheck.c:525 -#, c-format -msgid "Orphaned JobMediaId=%s JobId=%s Volume=\"%s\"\n" +#: src/findlib/bfile.c:93 +msgid "Compressed data" msgstr "" -#: src/tools/dbcheck.c:532 -#, c-format -msgid "Orphaned FileId=%s JobId=%s Volume=\"%s\"\n" +#: src/findlib/bfile.c:95 +msgid "Extended attributes" msgstr "" -#: src/tools/dbcheck.c:539 -#, c-format -msgid "Orphaned FileSetId=%s FileSet=\"%s\" MD5=%s\n" +#: src/findlib/bfile.c:97 +msgid "Sparse data" msgstr "" -#: src/tools/dbcheck.c:546 -#, c-format -msgid "Orphaned ClientId=%s Name=\"%s\"\n" +#: src/findlib/bfile.c:99 +msgid "GZIP sparse data" msgstr "" -#: src/tools/dbcheck.c:599 -#, c-format -msgid "Deleting: %s\n" +#: src/findlib/bfile.c:101 +msgid "Compressed sparse data" msgstr "" -#: src/tools/dbcheck.c:671 -#, c-format -msgid "Checking for duplicate Filename entries.\n" +#: src/findlib/bfile.c:103 +msgid "Program names" msgstr "" -#: src/tools/dbcheck.c:682 -#, c-format -msgid "Found %d duplicate Filename records.\n" +#: src/findlib/bfile.c:105 +msgid "Program data" msgstr "" -#: src/tools/dbcheck.c:683 -msgid "Print the list? (yes/no): " +#: src/findlib/bfile.c:107 +msgid "SHA1 digest" msgstr "" -#: src/tools/dbcheck.c:706 src/tools/dbcheck.c:771 -#, c-format -msgid "Found %d for: %s\n" +#: src/findlib/bfile.c:109 +msgid "Win32 data" msgstr "" -#: src/tools/dbcheck.c:736 -#, c-format -msgid "Checking for duplicate Path entries.\n" +#: src/findlib/bfile.c:111 +msgid "Win32 GZIP data" msgstr "" -#: src/tools/dbcheck.c:747 -#, c-format -msgid "Found %d duplicate Path records.\n" +#: src/findlib/bfile.c:113 +msgid "Win32 compressed data" msgstr "" -#: src/tools/dbcheck.c:748 src/tools/dbcheck.c:810 src/tools/dbcheck.c:856 -#: src/tools/dbcheck.c:924 src/tools/dbcheck.c:982 src/tools/dbcheck.c:1025 -#: src/tools/dbcheck.c:1067 src/tools/dbcheck.c:1109 src/tools/dbcheck.c:1146 -#: src/tools/dbcheck.c:1179 src/tools/dbcheck.c:1213 src/tools/dbcheck.c:1280 -msgid "Print them? (yes/no): " +#: src/findlib/bfile.c:115 +msgid "MacOS Fork data" msgstr "" -#: src/tools/dbcheck.c:801 -#, c-format -msgid "Checking for orphaned JobMedia entries.\n" +#: src/findlib/bfile.c:117 +msgid "HFS+ attribs" msgstr "" -#: src/tools/dbcheck.c:809 -#, c-format -msgid "Found %d orphaned JobMedia records.\n" +#: src/findlib/bfile.c:119 +msgid "Standard Unix ACL attribs" msgstr "" -#: src/tools/dbcheck.c:827 -#, c-format -msgid "Deleting %d orphaned JobMedia records.\n" +#: src/findlib/bfile.c:121 +msgid "Default Unix ACL attribs" msgstr "" -#: src/tools/dbcheck.c:844 -#, c-format -msgid "Checking for orphaned File entries. This may take some time!\n" +#: src/findlib/bfile.c:123 +msgid "SHA256 digest" msgstr "" -#: src/tools/dbcheck.c:855 -#, c-format -msgid "Found %d orphaned File records.\n" +#: src/findlib/bfile.c:125 +msgid "SHA512 digest" msgstr "" -#: src/tools/dbcheck.c:872 -#, c-format -msgid "Deleting %d orphaned File records.\n" +#: src/findlib/bfile.c:127 +msgid "Signed digest" msgstr "" -#: src/tools/dbcheck.c:891 -#, c-format -msgid "Pruning orphaned Path entries isn't possible when using BVFS.\n" +#: src/findlib/bfile.c:129 +msgid "Encrypted File data" msgstr "" -#: src/tools/dbcheck.c:900 src/tools/dbcheck.c:958 -msgid "Create temporary index? (yes/no): " +#: src/findlib/bfile.c:131 +msgid "Encrypted Win32 data" msgstr "" -#: src/tools/dbcheck.c:912 -#, c-format -msgid "Checking for orphaned Path entries. This may take some time!\n" +#: src/findlib/bfile.c:133 +msgid "Encrypted session data" msgstr "" -#: src/tools/dbcheck.c:923 -#, c-format -msgid "Found %d orphaned Path records.\n" +#: src/findlib/bfile.c:135 +msgid "Encrypted GZIP data" msgstr "" -#: src/tools/dbcheck.c:936 -#, c-format -msgid "Deleting %d orphaned Path records.\n" +#: src/findlib/bfile.c:137 +msgid "Encrypted compressed data" msgstr "" -#: src/tools/dbcheck.c:970 -#, c-format -msgid "Checking for orphaned Filename entries. This may take some time!\n" +#: src/findlib/bfile.c:139 +msgid "Encrypted Win32 GZIP data" msgstr "" -#: src/tools/dbcheck.c:981 -#, c-format -msgid "Found %d orphaned Filename records.\n" +#: src/findlib/bfile.c:141 +msgid "Encrypted Win32 Compressed data" +msgstr "" + +#: src/findlib/bfile.c:143 +msgid "Encrypted MacOS fork data" +msgstr "" + +#: src/findlib/bfile.c:145 +msgid "Plugin Name" +msgstr "" + +#: src/findlib/bfile.c:147 +msgid "Plugin Data" +msgstr "" + +#: src/findlib/bfile.c:149 +msgid "Restore Object" msgstr "" -#: src/tools/dbcheck.c:994 -#, c-format -msgid "Deleting %d orphaned Filename records.\n" +#: src/findlib/bfile.c:151 +msgid "AIX Specific ACL attribs" msgstr "" -#: src/tools/dbcheck.c:1014 -#, c-format -msgid "Checking for orphaned FileSet entries. This takes some time!\n" +#: src/findlib/bfile.c:153 +msgid "Darwin Specific ACL attribs" msgstr "" -#: src/tools/dbcheck.c:1024 -#, c-format -msgid "Found %d orphaned FileSet records.\n" +#: src/findlib/bfile.c:155 +msgid "FreeBSD Specific Default ACL attribs" msgstr "" -#: src/tools/dbcheck.c:1039 -#, c-format -msgid "Deleting %d orphaned FileSet records.\n" +#: src/findlib/bfile.c:157 +msgid "FreeBSD Specific Access ACL attribs" msgstr "" -#: src/tools/dbcheck.c:1048 -#, c-format -msgid "Checking for orphaned Client entries.\n" +#: src/findlib/bfile.c:159 +msgid "HPUX Specific ACL attribs" msgstr "" -#: src/tools/dbcheck.c:1066 -#, c-format -msgid "Found %d orphaned Client records.\n" +#: src/findlib/bfile.c:161 +msgid "Irix Specific Default ACL attribs" msgstr "" -#: src/tools/dbcheck.c:1081 -#, c-format -msgid "Deleting %d orphaned Client records.\n" +#: src/findlib/bfile.c:163 +msgid "Irix Specific Access ACL attribs" msgstr "" -#: src/tools/dbcheck.c:1090 -#, c-format -msgid "Checking for orphaned Job entries.\n" +#: src/findlib/bfile.c:165 +msgid "Linux Specific Default ACL attribs" msgstr "" -#: src/tools/dbcheck.c:1108 -#, c-format -msgid "Found %d orphaned Job records.\n" +#: src/findlib/bfile.c:167 +msgid "Linux Specific Access ACL attribs" msgstr "" -#: src/tools/dbcheck.c:1123 -#, c-format -msgid "Deleting %d orphaned Job records.\n" +#: src/findlib/bfile.c:169 +msgid "TRU64 Specific Default ACL attribs" msgstr "" -#: src/tools/dbcheck.c:1125 -#, c-format -msgid "Deleting JobMedia records of orphaned Job records.\n" +#: src/findlib/bfile.c:171 +msgid "TRU64 Specific Access ACL attribs" msgstr "" -#: src/tools/dbcheck.c:1127 -#, c-format -msgid "Deleting Log records of orphaned Job records.\n" +#: src/findlib/bfile.c:173 +msgid "Solaris Specific POSIX ACL attribs" msgstr "" -#: src/tools/dbcheck.c:1136 -#, c-format -msgid "Checking for Admin Job entries.\n" +#: src/findlib/bfile.c:175 +msgid "Solaris Specific NFSv4/ZFS ACL attribs" msgstr "" -#: src/tools/dbcheck.c:1145 -#, c-format -msgid "Found %d Admin Job records.\n" +#: src/findlib/bfile.c:177 +msgid "AFS Specific ACL attribs" msgstr "" -#: src/tools/dbcheck.c:1160 -#, c-format -msgid "Deleting %d Admin Job records.\n" +#: src/findlib/bfile.c:179 +msgid "AIX Specific POSIX ACL attribs" msgstr "" -#: src/tools/dbcheck.c:1169 -#, c-format -msgid "Checking for Restore Job entries.\n" +#: src/findlib/bfile.c:181 +msgid "AIX Specific NFSv4 ACL attribs" msgstr "" -#: src/tools/dbcheck.c:1178 -#, c-format -msgid "Found %d Restore Job records.\n" +#: src/findlib/bfile.c:183 +msgid "FreeBSD Specific NFSv4/ZFS ACL attribs" msgstr "" -#: src/tools/dbcheck.c:1193 -#, c-format -msgid "Deleting %d Restore Job records.\n" +#: src/findlib/bfile.c:185 +msgid "GNU Hurd Specific Default ACL attribs" msgstr "" -#: src/tools/dbcheck.c:1203 -#, c-format -msgid "Checking for Filenames with a trailing slash\n" +#: src/findlib/bfile.c:187 +msgid "GNU Hurd Specific Access ACL attribs" msgstr "" -#: src/tools/dbcheck.c:1212 -#, c-format -msgid "Found %d bad Filename records.\n" +#: src/findlib/bfile.c:189 +msgid "GNU Hurd Specific Extended attribs" msgstr "" -#: src/tools/dbcheck.c:1230 src/tools/dbcheck.c:1296 -#, c-format -msgid "Reparing %d bad Filename records.\n" +#: src/findlib/bfile.c:191 +msgid "IRIX Specific Extended attribs" msgstr "" -#: src/tools/dbcheck.c:1270 -#, c-format -msgid "Checking for Paths without a trailing slash\n" +#: src/findlib/bfile.c:193 +msgid "TRU64 Specific Extended attribs" msgstr "" -#: src/tools/dbcheck.c:1279 -#, c-format -msgid "Found %d bad Path records.\n" +#: src/findlib/bfile.c:195 +msgid "AIX Specific Extended attribs" msgstr "" -#: src/tools/dbcheck.c:1442 -#, c-format -msgid "" -"Ok. Index over the %s column already exists and dbcheck will work faster.\n" +#: src/findlib/bfile.c:197 +msgid "OpenBSD Specific Extended attribs" msgstr "" -#: src/tools/dbcheck.c:1445 -#, c-format -msgid "" -"Note. Index over the %s column not found, that can greatly slow down " -"dbcheck.\n" +#: src/findlib/bfile.c:199 +msgid "Solaris Specific Extensible attribs or System Extended attribs" msgstr "" -#: src/tools/dbcheck.c:1460 -#, c-format -msgid "Create temporary index... This may take some time!\n" +#: src/findlib/bfile.c:201 +msgid "Solaris Specific Extended attribs" msgstr "" -#: src/tools/dbcheck.c:1468 -#, c-format -msgid "Temporary index created.\n" +#: src/findlib/bfile.c:203 +msgid "Darwin Specific Extended attribs" msgstr "" -#: src/tools/dbcheck.c:1483 -#, c-format -msgid "Drop temporary index.\n" +#: src/findlib/bfile.c:205 +msgid "FreeBSD Specific Extended attribs" msgstr "" -#: src/tools/dbcheck.c:1493 -#, c-format -msgid "Temporary index %s deleted.\n" +#: src/findlib/bfile.c:207 +msgid "Linux Specific Extended attribs" msgstr "" -#: src/filed/verify.c:57 -#, c-format -msgid "Cannot malloc %d network read buffer\n" +#: src/findlib/bfile.c:209 +msgid "NetBSD Specific Extended attribs" msgstr "" -#: src/filed/verify.c:127 +#: src/findlib/makepath.c:141 #, c-format -msgid " Could not access %s: ERR=%s\n" +msgid "Cannot create directory %s: ERR=%s\n" msgstr "" -#: src/filed/verify.c:134 +#: src/findlib/makepath.c:145 src/findlib/makepath.c:219 #, c-format -msgid " Could not follow link %s: ERR=%s\n" +msgid "%s exists but is not a directory.\n" msgstr "" -#: src/filed/verify.c:141 +#: src/findlib/makepath.c:155 #, c-format -msgid " Could not stat %s: ERR=%s\n" +msgid "Security problem!! We created directory %s, but it is a link.\n" msgstr "" -#: src/filed/verify.c:147 src/filed/backup.c:450 +#: src/findlib/makepath.c:181 #, c-format -msgid " Unchanged file skipped: %s\n" +msgid "Cannot change owner and/or group of %s: ERR=%s\n" msgstr "" -#: src/filed/verify.c:150 +#: src/findlib/makepath.c:186 #, c-format -msgid " Archive file skipped: %s\n" +msgid "Cannot change permissions of %s: ERR=%s\n" msgstr "" -#: src/filed/verify.c:153 +#: src/findlib/makepath.c:256 #, c-format -msgid " Recursion turned off. Directory skipped: %s\n" +msgid "%c: is not a valid drive.\n" msgstr "" -#: src/filed/verify.c:157 -#, c-format -msgid " File system change prohibited. Directory skipped: %s\n" +#: src/findlib/makepath.c:300 +msgid "Too many subdirectories. Some permissions not reset.\n" msgstr "" -#: src/filed/verify.c:165 +#: src/findlib/file_create.c:102 #, c-format -msgid " Could not open directory %s: ERR=%s\n" +msgid "File skipped. Not newer: %s\n" msgstr "" -#: src/filed/verify.c:170 +#: src/findlib/file_create.c:109 #, c-format -msgid " Unknown file type %d: %s\n" +msgid "File skipped. Not older: %s\n" msgstr "" -#: src/filed/verify.c:214 src/filed/verify_vol.c:206 +#: src/findlib/file_create.c:119 #, c-format -msgid "Network error in send to Director: ERR=%s\n" +msgid "File skipped. Already exists: %s\n" msgstr "" -#: src/filed/verify.c:247 src/filed/accurate.c:429 src/filed/backup.c:506 +#: src/findlib/file_create.c:145 #, c-format -msgid "%s digest initialization failed\n" +msgid "File %s already exists and could not be replaced. ERR=%s.\n" msgstr "" -#: src/filed/verify.c:309 +#: src/findlib/file_create.c:196 src/findlib/file_create.c:259 +#: src/findlib/file_create.c:348 #, c-format -msgid " Cannot open %s: ERR=%s.\n" +msgid "bpkt already open fid=%d\n" msgstr "" -#: src/filed/verify.c:323 +#: src/findlib/file_create.c:204 src/filed/fd_plugins.c:1004 #, c-format -msgid " Cannot open resource fork for %s: ERR=%s.\n" +msgid "Could not create %s: ERR=%s\n" msgstr "" -#: src/filed/verify.c:386 +#: src/findlib/file_create.c:218 #, c-format -msgid "Error reading file %s: ERR=%s\n" +msgid "Cannot make fifo %s: ERR=%s\n" msgstr "" -#: src/filed/accurate.c:201 +#: src/findlib/file_create.c:236 #, c-format -msgid "Space saved with Base jobs: %lld MB\n" +msgid "Cannot make node %s: ERR=%s\n" msgstr "" -#: src/filed/accurate.c:400 +#: src/findlib/file_create.c:281 #, c-format -msgid "Cannot verify checksum for %s\n" -msgstr "" - -#: src/filed/accurate.c:508 -msgid "2991 Bad accurate command\n" +msgid "Could not symlink %s -> %s: ERR=%s\n" msgstr "" -#: src/filed/status.c:89 +#: src/findlib/file_create.c:304 src/findlib/file_create.c:317 #, c-format -msgid "Daemon started %s. Jobs: run=%d running=%d.\n" +msgid "Could not restore file flags for file %s: ERR=%s\n" msgstr "" -#: src/filed/status.c:149 +#: src/findlib/file_create.c:308 src/findlib/file_create.c:325 #, c-format -msgid " Sizeof: boffset_t=%d size_t=%d debug=%d trace=%d " +msgid "Could not hard link %s -> %s: ERR=%s\n" msgstr "" -#: src/filed/status.c:194 +#: src/findlib/file_create.c:321 #, c-format -msgid "Director connected at: %s\n" +msgid "Could not reset file flags for file %s: ERR=%s\n" msgstr "" -#: src/filed/status.c:196 +#: src/findlib/file_create.c:363 #, c-format -msgid "JobId %d Job %s is running.\n" +msgid "Original file %s have been deleted: type=%d\n" msgstr "" -#: src/filed/status.c:199 +#: src/findlib/file_create.c:375 #, c-format -msgid " %s%s %s Job started: %s\n" +msgid "Original file %s not saved: type=%d\n" msgstr "" -#: src/filed/status.c:212 +#: src/findlib/file_create.c:378 #, c-format -msgid " Files=%s Bytes=%s Bytes/sec=%s Errors=%d\n" +msgid "Unknown file type %d; not restored: %s\n" msgstr "" -#: src/filed/status.c:218 +#: src/findlib/file_create.c:413 #, c-format -msgid " Files Examined=%s\n" +msgid "Zero length filename: %s\n" msgstr "" -#: src/filed/status.c:223 +#: src/findlib/find.c:186 #, c-format -msgid " Processing file: %s\n" +msgid "Plugin: \"%s\" not found.\n" msgstr "" -#: src/filed/status.c:234 -msgid " SDSocket closed.\n" +#: src/findlib/file_attrs.c:96 src/findlib/file_attrs.c:138 +#, c-format +msgid "Unable to set file modes %s: ERR=%s\n" msgstr "" -#: src/filed/status.c:244 src/filed/status.c:335 src/filed/status.c:409 -msgid "====\n" +#: src/findlib/file_attrs.c:106 src/findlib/file_attrs.c:132 +#: src/findlib/file_attrs.c:589 +#, c-format +msgid "Unable to set file owner %s: ERR=%s\n" msgstr "" -#: src/filed/status.c:306 -msgid " SDSocket=closed\n" +#: src/findlib/file_attrs.c:125 src/findlib/file_attrs.c:150 +#, c-format +msgid "Unable to set file times %s: ERR=%s\n" msgstr "" -#: src/filed/status.c:463 src/filed/status.c:496 +#: src/findlib/file_attrs.c:566 #, c-format -msgid "Bad .status command: %s\n" +msgid "File size of restored file %s not correct. Original %s, restored %s.\n" msgstr "" -#: src/filed/status.c:464 -msgid "2900 Bad .status command, missing argument.\n" +#: src/findlib/file_attrs.c:609 +#, c-format +msgid "Unable to set file flags %s: ERR=%s\n" msgstr "" -#: src/filed/status.c:497 -msgid "2900 Bad .status command, wrong argument.\n" +#: src/findlib/find_one.c:215 +#, c-format +msgid " NODUMP flag set - will not process %s\n" msgstr "" -#: src/filed/status.c:565 -msgid "Bacula Client: Idle" +#: src/findlib/find_one.c:236 +#, c-format +msgid "Cannot stat file %s: ERR=%s\n" msgstr "" -#: src/filed/status.c:576 -msgid "Bacula Client: Running" +#: src/findlib/find_one.c:241 +#, c-format +msgid "%s mtime changed during backup.\n" msgstr "" -#: src/filed/status.c:590 -msgid "Bacula Client: Last Job Canceled" +#: src/findlib/find_one.c:248 +#, c-format +msgid "%s ctime changed during backup.\n" msgstr "" -#: src/filed/status.c:594 -msgid "Bacula Client: Last Job Failed" +#: src/findlib/find_one.c:255 +#, c-format +msgid "%s size of %lld changed during backup to %lld.n" msgstr "" -#: src/filed/status.c:598 -msgid "Bacula Client: Last Job had Warnings" +#: src/findlib/find_one.c:383 +#, c-format +msgid "Top level directory \"%s\" has unlisted fstype \"%s\"\n" msgstr "" -#: src/filed/xattr.c:97 src/filed/xattr.c:112 src/filed/xattr.c:120 -#: src/filed/fd_plugins.c:789 src/filed/fd_plugins.c:805 src/filed/acl.c:108 -#: src/filed/acl.c:123 src/filed/acl.c:131 src/filed/backup.c:999 -#: src/filed/backup.c:1199 src/filed/backup.c:1236 src/filed/backup.c:1249 -#: src/filed/backup.c:1325 src/filed/backup.c:1424 +#: src/findlib/find_one.c:398 #, c-format -msgid "Network send error to SD. ERR=%s\n" +msgid "Top level directory \"%s\" has an unlisted drive type \"%s\"\n" msgstr "" -#: src/filed/xattr.c:245 +#: src/filed/job.c:294 #, c-format -msgid "Illegal xattr stream, no XATTR_MAGIC on file \"%s\"\n" +msgid "Command: \"%s\" is disabled.\n" msgstr "" -#: src/filed/xattr.c:259 -#, c-format -msgid "Illegal xattr stream, xattr name length <= 0 on file \"%s\"\n" +#: src/filed/job.c:440 +msgid "SD connect failed: Bad Hello command\n" msgstr "" -#: src/filed/xattr.c:381 src/filed/xattr.c:417 +#: src/filed/job.c:448 #, c-format -msgid "llistea error on file \"%s\": ERR=%s\n" +msgid "SD connect failed: Job name not found: %s\n" msgstr "" -#: src/filed/xattr.c:467 src/filed/xattr.c:520 +#: src/filed/job.c:501 #, c-format -msgid "lgetea error on file \"%s\": ERR=%s\n" +msgid "Bad command from %s. Len=%d.\n" msgstr "" -#: src/filed/xattr.c:556 src/filed/xattr.c:877 src/filed/xattr.c:1352 -#: src/filed/xattr.c:1820 src/filed/xattr.c:2176 src/filed/xattr.c:2968 -#, c-format -msgid "Xattr stream on file \"%s\" exceeds maximum size of %d bytes\n" +#: src/filed/job.c:555 +msgid "2902 Error scanning cancel command.\n" msgstr "" -#: src/filed/xattr.c:576 src/filed/xattr.c:903 src/filed/xattr.c:1372 -#: src/filed/xattr.c:1850 src/filed/xattr.c:2193 +#: src/filed/job.c:559 src/filed/job.c:598 #, c-format -msgid "Failed to serialize extended attributes on file \"%s\"\n" +msgid "2901 Job %s not found.\n" msgstr "" -#: src/filed/xattr.c:643 +#: src/filed/job.c:569 #, c-format -msgid "lsetea error on file \"%s\": ERR=%s\n" +msgid "2001 Job \"%s\" marked to be %s.\n" msgstr "" -#: src/filed/xattr.c:731 src/filed/xattr.c:769 src/filed/xattr.c:832 -#: src/filed/xattr.c:844 +#: src/filed/job.c:592 #, c-format -msgid "attr_list error on file \"%s\": ERR=%s\n" +msgid "2991 Bad setbandwidth command: %s\n" msgstr "" -#: src/filed/xattr.c:968 +#: src/filed/job.c:645 #, c-format -msgid "Received illegal xattr named %s on file \"%s\"\n" +msgid "2991 Bad setdebug command: %s\n" msgstr "" -#: src/filed/xattr.c:1001 src/filed/xattr.c:1011 +#: src/filed/job.c:678 #, c-format -msgid "attr_set error on file \"%s\": ERR=%s\n" +msgid "Bad estimate command: %s" msgstr "" -#: src/filed/xattr.c:1161 src/filed/xattr.c:1196 -#, c-format -msgid "llistxattr error on file \"%s\": ERR=%s\n" +#: src/filed/job.c:679 +msgid "2992 Bad estimate command.\n" msgstr "" -#: src/filed/xattr.c:1264 src/filed/xattr.c:1316 +#: src/filed/job.c:702 #, c-format -msgid "lgetxattr error on file \"%s\": ERR=%s\n" +msgid "Bad Job Command: %s" msgstr "" -#: src/filed/xattr.c:1435 +#: src/filed/job.c:737 #, c-format -msgid "lsetxattr error on file \"%s\": ERR=%s\n" +msgid "Bad RunBeforeJob command: %s\n" msgstr "" -#: src/filed/xattr.c:1593 src/filed/xattr.c:1628 -#, c-format -msgid "extattr_list_link error on file \"%s\": ERR=%s\n" +#: src/filed/job.c:738 src/filed/job.c:757 +msgid "2905 Bad RunBeforeJob command.\n" msgstr "" -#: src/filed/xattr.c:1648 -#, c-format -msgid "Failed to convert %d into namespace on file \"%s\"\n" +#: src/filed/job.c:768 +msgid "2905 Bad RunBeforeNow command.\n" msgstr "" -#: src/filed/xattr.c:1728 src/filed/xattr.c:1783 +#: src/filed/job.c:787 #, c-format -msgid "extattr_get_link error on file \"%s\": ERR=%s\n" +msgid "Bad RunAfter command: %s\n" msgstr "" -#: src/filed/xattr.c:1907 -#, c-format -msgid "Failed to split %s into namespace and name part on file \"%s\"\n" +#: src/filed/job.c:788 +msgid "2905 Bad RunAfterJob command.\n" msgstr "" -#: src/filed/xattr.c:1920 +#: src/filed/job.c:824 #, c-format -msgid "Failed to convert %s into namespace on file \"%s\"\n" +msgid "Bad RunScript command: %s\n" msgstr "" -#: src/filed/xattr.c:1941 -#, c-format -msgid "extattr_set_link error on file \"%s\": ERR=%s\n" +#: src/filed/job.c:825 +msgid "2905 Bad RunScript command.\n" msgstr "" -#: src/filed/xattr.c:2044 src/filed/xattr.c:2069 +#: src/filed/job.c:880 #, c-format -msgid "getproplist error on file \"%s\": ERR=%s\n" +msgid "Bad RestoreObject command: %s\n" msgstr "" -#: src/filed/xattr.c:2262 -#, c-format -msgid "Unable create proper proplist to restore xattrs on file \"%s\"\n" +#: src/filed/job.c:945 +msgid "2909 Bad RestoreObject command.\n" msgstr "" -#: src/filed/xattr.c:2291 +#: src/filed/job.c:984 #, c-format -msgid "setproplist error on file \"%s\": ERR=%s\n" +msgid "Plugin Directory not defined. Cannot use plugin: \"%s\"\n" msgstr "" -#: src/filed/xattr.c:2609 src/filed/xattr.c:2662 +#: src/filed/job.c:1026 #, c-format -msgid "Unable to get acl on xattr %s on file \"%s\": ERR=%s\n" +msgid "Error running program: %s. stat=%d: ERR=%s\n" msgstr "" -#: src/filed/xattr.c:2679 +#: src/filed/job.c:1037 #, c-format -msgid "Unable to get acl text on xattr %s on file \"%s\": ERR=%s\n" +msgid "Cannot open FileSet input file: %s. ERR=%s\n" msgstr "" -#: src/filed/xattr.c:2753 +#: src/filed/job.c:1191 #, c-format -msgid "Unable to get status on xattr %s on file \"%s\": ERR=%s\n" +msgid "REGEX %s compile error. ERR=%s\n" msgstr "" -#: src/filed/xattr.c:2886 +#: src/filed/job.c:1342 #, c-format -msgid "Unable to open xattr %s on \"%s\": ERR=%s\n" +msgid "Invalid FileSet command: %s\n" msgstr "" -#: src/filed/xattr.c:2909 +#: src/filed/job.c:1749 #, c-format -msgid "Unable to read symlin %s on \"%s\": ERR=%s\n" +msgid "" +"DIR and FD clocks differ by %lld seconds, FD automatically compensating.\n" msgstr "" -#: src/filed/xattr.c:2984 +#: src/filed/job.c:1758 #, c-format -msgid "Unable to read content of xattr %s on file \"%s\"\n" +msgid "Unknown backup level: %s\n" msgstr "" -#: src/filed/xattr.c:3024 +#: src/filed/job.c:1771 #, c-format -msgid "Unable to chdir to xattr space of file \"%s\": ERR=%s\n" +msgid "Bad level command: %s\n" msgstr "" -#: src/filed/xattr.c:3081 src/filed/xattr.c:3330 +#: src/filed/job.c:1793 #, c-format -msgid "Unable to open file \"%s\": ERR=%s\n" +msgid "Bad session command: %s" msgstr "" -#: src/filed/xattr.c:3109 src/filed/xattr.c:3391 -#, c-format -msgid "Unable to open xattr space %s on file \"%s\": ERR=%s\n" +#: src/filed/job.c:1922 +msgid "Failed connect from Storage daemon. SD bsock=NULL.\n" msgstr "" -#: src/filed/xattr.c:3125 src/filed/xattr.c:3355 -#, c-format -msgid "Unable to chdir to xattr space on file \"%s\": ERR=%s\n" +#: src/filed/job.c:1967 +msgid "ACL support not configured for your machine.\n" msgstr "" -#: src/filed/xattr.c:3146 -#, c-format -msgid "Unable to list the xattr space on file \"%s\": ERR=%s\n" +#: src/filed/job.c:1971 +msgid "XATTR support not configured for your machine.\n" msgstr "" -#: src/filed/xattr.c:3238 -#, c-format -msgid "Unable to convert acl from text on file \"%s\"\n" +#: src/filed/job.c:1980 +msgid "Cannot contact Storage daemon\n" msgstr "" -#: src/filed/xattr.c:3248 src/filed/xattr.c:3271 +#: src/filed/job.c:1999 #, c-format -msgid "Unable to restore acl of xattr %s on file \"%s\": ERR=%s\n" +msgid "Bad response to append open: %s\n" msgstr "" -#: src/filed/xattr.c:3344 -#, c-format -msgid "Unable to open xattr space on file \"%s\": ERR=%s\n" +#: src/filed/job.c:2004 +msgid "Bad response from stored to open command\n" msgstr "" -#: src/filed/xattr.c:3374 src/filed/xattr.c:3536 -#, c-format -msgid "Unable to open xattr %s on file \"%s\": ERR=%s\n" +#: src/filed/job.c:2069 +msgid "Append Close with SD failed.\n" msgstr "" -#: src/filed/xattr.c:3408 +#: src/filed/job.c:2073 #, c-format -msgid "Unable to chdir to xattr space %s on file \"%s\": ERR=%s\n" +msgid "Bad status %d %c returned from Storage Daemon.\n" msgstr "" -#: src/filed/xattr.c:3448 +#: src/filed/job.c:2095 #, c-format -msgid "Unable to mkfifo xattr %s on file \"%s\": ERR=%s\n" +msgid "2994 Bad verify command: %s\n" msgstr "" -#: src/filed/xattr.c:3466 +#: src/filed/job.c:2110 src/filed/job.c:2151 #, c-format -msgid "Unable to mknod xattr %s on file \"%s\": ERR=%s\n" +msgid "2994 Bad verify level: %s\n" msgstr "" -#: src/filed/xattr.c:3484 +#: src/filed/job.c:2222 #, c-format -msgid "Unable to mkdir xattr %s on file \"%s\": ERR=%s\n" +msgid "Bad replace command. CMD=%s\n" msgstr "" -#: src/filed/xattr.c:3504 +#: src/filed/job.c:2248 #, c-format -msgid "Unable to link xattr %s to %s on file \"%s\": ERR=%s\n" +msgid "Bad where regexp. where=%s\n" msgstr "" -#: src/filed/xattr.c:3557 -#, c-format -msgid "" -"Unable to restore data of xattr %s on file \"%s\": Not all data available in " -"xattr stream\n" +#: src/filed/job.c:2344 +msgid "Improper calling sequence.\n" msgstr "" -#: src/filed/xattr.c:3570 +#: src/filed/job.c:2364 #, c-format -msgid "Unable to restore data of xattr %s on file \"%s\": ERR=%s\n" +msgid "Bad response to SD read open: %s\n" msgstr "" -#: src/filed/xattr.c:3593 -#, c-format -msgid "Unable to symlink xattr %s to %s on file \"%s\": ERR=%s\n" +#: src/filed/job.c:2369 +msgid "Bad response from stored to read open command\n" msgstr "" -#: src/filed/xattr.c:3629 +#: src/filed/job.c:2431 #, c-format -msgid "Unable to restore owner of xattr %s on file \"%s\": ERR=%s\n" +msgid "Comm error with SD. bad response to %s. ERR=%s\n" msgstr "" -#: src/filed/xattr.c:3657 +#: src/filed/job.c:2434 #, c-format -msgid "Unable to restore filetimes of xattr %s on file \"%s\": ERR=%s\n" +msgid "Bad response from SD to %s command. Wanted %s, got %s\n" msgstr "" -#: src/filed/xattr.c:3673 +#: src/filed/filed_conf.c:196 src/filed/filed_conf.c:220 #, c-format -msgid "Illegal xattr stream, failed to parse xattr stream on file \"%s\"\n" +msgid "Expected a Cipher Type keyword, got: %s" msgstr "" -#: src/filed/xattr.c:3734 +#: src/filed/accurate.c:189 #, c-format -msgid "Failed to restore extensible attributes on file \"%s\"\n" +msgid "Space saved with Base jobs: %lld MB\n" msgstr "" -#: src/filed/xattr.c:3747 +#: src/filed/accurate.c:388 #, c-format -msgid "Failed to restore extended attributes on file \"%s\"\n" +msgid "Cannot verify checksum for %s\n" msgstr "" -#: src/filed/xattr.c:3841 src/filed/acl.c:2265 +#: src/filed/accurate.c:417 src/filed/verify.c:235 src/filed/backup.c:505 #, c-format -msgid "Unable to stat file \"%s\": ERR=%s\n" +msgid "%s digest initialization failed\n" msgstr "" -#: src/filed/xattr.c:3891 -#, c-format -msgid "" -"Can't restore Extended Attributes of %s - incompatible xattr stream " -"encountered - %d\n" +#: src/filed/accurate.c:496 +msgid "2991 Bad accurate command\n" msgstr "" -#: src/filed/fd_plugins.c:550 src/filed/fd_plugins.c:694 +#: src/filed/fd_plugins.c:545 src/filed/fd_plugins.c:689 #, c-format msgid "Command plugin \"%s\": no type in startBackupFile packet.\n" msgstr "" -#: src/filed/fd_plugins.c:563 +#: src/filed/fd_plugins.c:558 #, c-format msgid "Command plugin \"%s\": no object_name in startBackupFile packet.\n" msgstr "" -#: src/filed/fd_plugins.c:576 src/filed/fd_plugins.c:701 +#: src/filed/fd_plugins.c:571 src/filed/fd_plugins.c:696 #, c-format msgid "Command plugin \"%s\": no fname in startBackupFile packet.\n" msgstr "" -#: src/filed/fd_plugins.c:775 +#: src/filed/fd_plugins.c:770 msgid "Plugin save packet not found.\n" msgstr "" -#: src/filed/fd_plugins.c:910 +#: src/filed/fd_plugins.c:784 src/filed/fd_plugins.c:800 src/filed/xattr.c:85 +#: src/filed/xattr.c:100 src/filed/xattr.c:108 src/filed/backup.c:1000 +#: src/filed/backup.c:1199 src/filed/backup.c:1236 src/filed/backup.c:1249 +#: src/filed/backup.c:1324 src/filed/backup.c:1423 src/filed/acl.c:96 +#: src/filed/acl.c:111 src/filed/acl.c:119 +#, c-format +msgid "Network send error to SD. ERR=%s\n" +msgstr "" + +#: src/filed/fd_plugins.c:905 #, c-format msgid "Plugin=%s not found.\n" msgstr "" -#: src/filed/fd_plugins.c:977 +#: src/filed/fd_plugins.c:972 #, c-format msgid "Plugin createFile call failed. Stat=%d file=%s\n" msgstr "" -#: src/filed/fd_plugins.c:982 +#: src/filed/fd_plugins.c:977 #, c-format msgid "Plugin createFile call failed. Returned CF_ERROR file=%s\n" msgstr "" -#: src/filed/fd_plugins.c:1859 +#: src/filed/fd_plugins.c:1863 msgid "Command plugin: no fname in baculaCheckChanges packet.\n" msgstr "" -#: src/filed/filed.c:76 +#: src/filed/restore.c:102 #, c-format -msgid "" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: bacula-fd [-f -s] [-c config_file] [-d debug_level]\n" -" -c use as configuration file\n" -" -d set debug level to \n" -" -dt print a timestamp in debug output\n" -" -f run in foreground (for debugging)\n" -" -g groupid\n" -" -k keep readall capabilities\n" -" -m print kaboom output (for debugging)\n" -" -s no signals (for debugging)\n" -" -t test configuration file and exit\n" -" -u userid\n" -" -v verbose user messages\n" -" -? print this message.\n" -"\n" +msgid "Size of data or stream of %s not correct. Original %s, restored %s.\n" msgstr "" -#: src/filed/filed.c:199 -msgid "-k option has no meaning without -u option.\n" +#: src/filed/restore.c:122 +#, c-format +msgid "Invalid length of Finder Info (got %d, not 32)\n" msgstr "" -#: src/filed/filed.c:337 +#: src/filed/restore.c:127 #, c-format -msgid "" -"No File daemon resource defined in %s\n" -"Without that I don't know who I am :-(\n" +msgid "Could not set Finder Info on %s\n" msgstr "" -#: src/filed/filed.c:342 -#, c-format -msgid "Only one Client resource permitted in %s\n" +#: src/filed/restore.c:406 +msgid "LZO init failed\n" msgstr "" -#: src/filed/filed.c:366 +#: src/filed/restore.c:474 src/filed/verify_vol.c:85 #, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"File daemon in %s.\n" +msgid "Record header scan error: %s\n" msgstr "" -#: src/filed/filed.c:390 -msgid "PKI encryption/signing enabled but not compiled into Bacula.\n" +#: src/filed/restore.c:486 src/filed/verify_vol.c:94 +#, c-format +msgid "Data record error. ERR=%s\n" msgstr "" -#: src/filed/filed.c:401 +#: src/filed/restore.c:490 src/filed/verify_vol.c:98 #, c-format +msgid "Actual data size %d not same as header %d\n" +msgstr "" + +#: src/filed/restore.c:651 +msgid "Unexpected cryptographic session data stream.\n" +msgstr "" + +#: src/filed/restore.c:661 msgid "" -"\"PKI Key Pair\" must be defined for File daemon \"%s\" in %s if either " -"\"PKI Sign\" or \"PKI Encrypt\" are enabled.\n" +"No private decryption keys have been defined to decrypt encrypted backup " +"data.\n" msgstr "" -#: src/filed/filed.c:413 src/filed/filed.c:444 src/filed/filed.c:485 -msgid "Failed to allocate a new keypair object.\n" +#: src/filed/restore.c:672 +msgid "Could not create digest.\n" msgstr "" -#: src/filed/filed.c:417 -#, c-format -msgid "Failed to load public certificate for File daemon \"%s\" in %s.\n" +#: src/filed/restore.c:690 +msgid "Missing private key required to decrypt encrypted backup data.\n" msgstr "" -#: src/filed/filed.c:423 -#, c-format -msgid "Failed to load private key for File daemon \"%s\" in %s.\n" +#: src/filed/restore.c:693 +msgid "Decrypt of the session key failed.\n" msgstr "" -#: src/filed/filed.c:453 -#, c-format -msgid "Failed to load private key from file %s for File daemon \"%s\" in %s.\n" +#: src/filed/restore.c:696 +msgid "Signer not found. Decryption failed.\n" +msgstr "" + +#: src/filed/restore.c:699 +msgid "Unsupported digest algorithm. Decrypt failed.\n" +msgstr "" + +#: src/filed/restore.c:702 +msgid "Unsupported encryption algorithm. Decrypt failed.\n" msgstr "" -#: src/filed/filed.c:460 +#: src/filed/restore.c:706 #, c-format msgid "" -"Failed to load trusted signer certificate from file %s for File daemon \"%s" -"\" in %s.\n" +"An error=%d occurred while decoding encrypted session data stream: ERR=%s\n" msgstr "" -#: src/filed/filed.c:491 +#: src/filed/restore.c:774 src/filed/restore.c:828 #, c-format -msgid "" -"Failed to load master key certificate from file %s for File daemon \"%s\" in " -"%s.\n" +msgid "Missing encryption session data stream for %s\n" msgstr "" -#: src/filed/filed.c:507 +#: src/filed/restore.c:782 src/filed/restore.c:835 #, c-format -msgid "No Director resource defined in %s\n" +msgid "Failed to initialize decryption context for %s\n" msgstr "" -#: src/filed/acl.c:229 src/filed/acl.c:254 +#: src/filed/restore.c:847 #, c-format -msgid "aclx_get error on file \"%s\": ERR=%s\n" +msgid "Cannot open resource fork for %s.\n" +msgstr "" + +#: src/filed/restore.c:992 +msgid "Unexpected cryptographic signature data stream.\n" msgstr "" -#: src/filed/acl.c:280 +#: src/filed/restore.c:1000 #, c-format -msgid "Unknown acl type encountered on file \"%s\": %ld\n" +msgid "Failed to decode message signature for %s\n" msgstr "" -#: src/filed/acl.c:304 src/filed/acl.c:313 +#: src/filed/restore.c:1064 #, c-format -msgid "Failed to convert acl into text on file \"%s\"\n" +msgid "Encountered %ld acl errors while doing restore\n" msgstr "" -#: src/filed/acl.c:386 +#: src/filed/restore.c:1068 #, c-format -msgid "" -"Trying to restore POSIX acl on file \"%s\" on filesystem without AIXC acl " -"support\n" +msgid "Encountered %ld xattr errors while doing restore\n" msgstr "" -#: src/filed/acl.c:394 +#: src/filed/restore.c:1072 #, c-format msgid "" -"Trying to restore NFSv4 acl on file \"%s\" on filesystem without NFS4 acl " -"support\n" +"%d non-supported data streams and %d non-supported attrib streams ignored.\n" msgstr "" -#: src/filed/acl.c:442 src/filed/acl.c:452 +#: src/filed/restore.c:1076 #, c-format -msgid "aclx_scanStr error on file \"%s\": ERR=%s\n" +msgid "%d non-supported resource fork streams ignored.\n" msgstr "" -#: src/filed/acl.c:478 +#: src/filed/restore.c:1079 #, c-format -msgid "aclx_put error on file \"%s\": ERR=%s\n" +msgid "%d non-supported Finder Info streams ignored.\n" msgstr "" -#: src/filed/acl.c:823 +#: src/filed/restore.c:1082 #, c-format -msgid "acl_to_text error on file \"%s\": ERR=%s\n" +msgid "%d non-supported acl streams ignored.\n" msgstr "" -#: src/filed/acl.c:853 +#: src/filed/restore.c:1085 #, c-format -msgid "acl_get_file error on file \"%s\": ERR=%s\n" +msgid "%d non-supported crypto streams ignored.\n" msgstr "" -#: src/filed/acl.c:906 +#: src/filed/restore.c:1088 #, c-format -msgid "" -"acl_delete_def_file error on file \"%s\": filesystem doesn't support ACLs\n" +msgid "%d non-supported xattr streams ignored.\n" msgstr "" -#: src/filed/acl.c:912 -#, c-format -msgid "acl_delete_def_file error on file \"%s\": ERR=%s\n" +#: src/filed/restore.c:1168 +msgid "Zlib errno" msgstr "" -#: src/filed/acl.c:923 -#, c-format -msgid "acl_from_text error on file \"%s\": ERR=%s\n" +#: src/filed/restore.c:1170 +msgid "Zlib stream error" msgstr "" -#: src/filed/acl.c:939 -#, c-format -msgid "acl_valid error on file \"%s\": ERR=%s\n" +#: src/filed/restore.c:1172 +msgid "Zlib data error" msgstr "" -#: src/filed/acl.c:971 -#, c-format -msgid "acl_set_file error on file \"%s\": filesystem doesn't support ACLs\n" +#: src/filed/restore.c:1174 +msgid "Zlib memory error" msgstr "" -#: src/filed/acl.c:980 -#, c-format -msgid "acl_set_file error on file \"%s\": ERR=%s\n" +#: src/filed/restore.c:1176 +msgid "Zlib buffer error" msgstr "" -#: src/filed/acl.c:1087 src/filed/acl.c:1116 src/filed/acl.c:1230 -#: src/filed/acl.c:1738 src/filed/acl.c:1845 -#, c-format -msgid "pathconf error on file \"%s\": ERR=%s\n" +#: src/filed/restore.c:1178 +msgid "Zlib version error" msgstr "" -#: src/filed/acl.c:1246 +#: src/filed/restore.c:1218 #, c-format -msgid "" -"Trying to restore acl on file \"%s\" on filesystem without %s acl support\n" +msgid "Missing cryptographic signature for %s\n" msgstr "" -#: src/filed/acl.c:1531 +#: src/filed/restore.c:1251 src/filed/restore.c:1280 #, c-format -msgid "getacl error on file \"%s\": ERR=%s\n" +msgid "Signature validation failed for file %s: ERR=%s\n" msgstr "" -#: src/filed/acl.c:1566 +#: src/filed/restore.c:1268 #, c-format -msgid "acltostr error on file \"%s\": ERR=%s\n" +msgid "Digest one file failed for file: %s\n" msgstr "" -#: src/filed/acl.c:1588 src/filed/acl.c:1598 +#: src/filed/restore.c:1307 #, c-format -msgid "strtoacl error on file \"%s\": ERR=%s\n" +msgid "Signature validation failed for %s: %s\n" msgstr "" -#: src/filed/acl.c:1627 +#: src/filed/restore.c:1404 #, c-format -msgid "setacl error on file \"%s\": filesystem doesn't support ACLs\n" +msgid "LZO uncompression error on file %s. ERR=%d\n" msgstr "" -#: src/filed/acl.c:1635 +#: src/filed/restore.c:1441 #, c-format -msgid "setacl error on file \"%s\": ERR=%s\n" +msgid "Uncompression error on file %s. ERR=%s\n" msgstr "" -#: src/filed/acl.c:1760 +#: src/filed/restore.c:1476 #, c-format -msgid "acl_get error on file \"%s\": ERR=%s\n" +msgid "Write error in Win32 Block Decomposition on %s: %s\n" msgstr "" -#: src/filed/acl.c:1834 +#: src/filed/restore.c:1501 #, c-format -msgid "" -"Trying to restore acl on file \"%s\" on filesystem without acl support\n" +msgid "Wrong write size error at %lld block=%d wanted=%d wrote=%d\n" msgstr "" -#: src/filed/acl.c:1863 +#: src/filed/restore.c:1505 #, c-format msgid "" -"Trying to restore POSIX acl on file \"%s\" on filesystem without aclent acl " -"support\n" +"Write write error at %lld block=%d write_len=%d lerror=%d on %s: ERR=%s\n" msgstr "" -#: src/filed/acl.c:1874 -#, c-format -msgid "" -"Trying to restore NFSv4 acl on file \"%s\" on filesystem without ace acl " -"support\n" +#: src/filed/restore.c:1565 +msgid "Decryption error\n" msgstr "" -#: src/filed/acl.c:1890 -#, c-format -msgid "acl_fromtext error on file \"%s\": ERR=%s\n" +#: src/filed/restore.c:1658 +msgid "Logic error: output file should be open\n" msgstr "" -#: src/filed/acl.c:1904 src/filed/acl.c:1912 -#, c-format -msgid "wrong encoding of acl type in acl stream on file \"%s\"\n" +#: src/filed/restore.c:1696 +msgid "Logic error: output file should not be open\n" msgstr "" -#: src/filed/acl.c:1937 +#: src/filed/restore.c:1730 #, c-format -msgid "acl_set error on file \"%s\": ERR=%s\n" +msgid "Decryption error. buf_len=%d decrypt_len=%d on file %s\n" +msgstr "" + +#: src/filed/restore.c:1851 +msgid "Open File Manager paused\n" +msgstr "" + +#: src/filed/restore.c:1855 +msgid "FAILED to pause Open File Manager\n" msgstr "" -#: src/filed/acl.c:2023 +#: src/filed/restore.c:1863 #, c-format -msgid "acltotext error on file \"%s\": ERR=%s\n" +msgid "Running as '%s'. Privmask=%#08x\n" +msgstr "" + +#: src/filed/restore.c:1865 +msgid "Failed to retrieve current UserName\n" +msgstr "" + +#: src/filed/verify_vol.c:51 +msgid "Storage command not issued before Verify.\n" msgstr "" -#: src/filed/acl.c:2046 +#: src/filed/verify_vol.c:131 #, c-format -msgid "aclfromtext error on file \"%s\": ERR=%s\n" +msgid "Error scanning record header: %s\n" msgstr "" -#: src/filed/acl.c:2066 +#: src/filed/verify_vol.c:194 src/filed/verify.c:202 #, c-format -msgid "acl(SETACL) error on file \"%s\": ERR=%s\n" +msgid "Network error in send to Director: ERR=%s\n" msgstr "" -#: src/filed/acl.c:2132 +#: src/filed/authenticate.c:63 #, c-format -msgid "pioctl VIOCGETAL error on file \"%s\": ERR=%s\n" +msgid "I only authenticate directors, not %d\n" msgstr "" -#: src/filed/acl.c:2160 +#: src/filed/authenticate.c:88 #, c-format -msgid "pioctl VIOCSETAL error on file \"%s\": ERR=%s\n" +msgid "Connection from unknown Director %s at %s rejected.\n" msgstr "" -#: src/filed/acl.c:2363 +#: src/filed/authenticate.c:132 #, c-format -msgid "Can't restore ACLs of %s - incompatible acl stream encountered - %d\n" +msgid "Incorrect password given by Director at %s.\n" msgstr "" -#: src/filed/verify_vol.c:63 -msgid "Storage command not issued before Verify.\n" +#: src/filed/verify.c:45 +#, c-format +msgid "Cannot malloc %d network read buffer\n" msgstr "" -#: src/filed/verify_vol.c:97 src/filed/restore.c:486 +#: src/filed/verify.c:115 #, c-format -msgid "Record header scan error: %s\n" +msgid " Could not access %s: ERR=%s\n" msgstr "" -#: src/filed/verify_vol.c:106 src/filed/restore.c:498 +#: src/filed/verify.c:122 #, c-format -msgid "Data record error. ERR=%s\n" +msgid " Could not follow link %s: ERR=%s\n" msgstr "" -#: src/filed/verify_vol.c:110 src/filed/restore.c:502 +#: src/filed/verify.c:129 #, c-format -msgid "Actual data size %d not same as header %d\n" +msgid " Could not stat %s: ERR=%s\n" msgstr "" -#: src/filed/verify_vol.c:143 +#: src/filed/verify.c:135 src/filed/backup.c:449 #, c-format -msgid "Error scanning record header: %s\n" +msgid " Unchanged file skipped: %s\n" msgstr "" -#: src/filed/backup.c:102 -msgid "Cannot set buffer size FD->SD.\n" +#: src/filed/verify.c:138 +#, c-format +msgid " Archive file skipped: %s\n" msgstr "" -#: src/filed/backup.c:194 +#: src/filed/verify.c:141 #, c-format -msgid "Encountered %ld acl errors while doing backup\n" +msgid " Recursion turned off. Directory skipped: %s\n" msgstr "" -#: src/filed/backup.c:198 +#: src/filed/verify.c:145 #, c-format -msgid "Encountered %ld xattr errors while doing backup\n" +msgid " File system change prohibited. Directory skipped: %s\n" msgstr "" -#: src/filed/backup.c:267 src/filed/backup.c:276 -msgid "An error occurred while encrypting the stream.\n" +#: src/filed/verify.c:153 +#, c-format +msgid " Could not open directory %s: ERR=%s\n" msgstr "" -#: src/filed/backup.c:387 +#: src/filed/verify.c:158 #, c-format -msgid " Recursion turned off. Will not descend from %s into %s\n" +msgid " Unknown file type %d: %s\n" msgstr "" -#: src/filed/backup.c:394 +#: src/filed/verify.c:297 #, c-format -msgid " %s is a different filesystem. Will not descend from %s into it.\n" +msgid " Cannot open %s: ERR=%s.\n" msgstr "" -#: src/filed/backup.c:400 +#: src/filed/verify.c:311 #, c-format -msgid " Disallowed filesystem. Will not descend from %s into %s\n" +msgid " Cannot open resource fork for %s: ERR=%s.\n" msgstr "" -#: src/filed/backup.c:405 +#: src/filed/verify.c:374 #, c-format -msgid " Disallowed drive type. Will not descend into %s\n" +msgid "Error reading file %s: ERR=%s\n" msgstr "" -#: src/filed/backup.c:416 +#: src/filed/xattr.c:233 #, c-format -msgid " Socket file skipped: %s\n" +msgid "Illegal xattr stream, no XATTR_MAGIC on file \"%s\"\n" msgstr "" -#: src/filed/backup.c:429 +#: src/filed/xattr.c:247 #, c-format -msgid " Could not access \"%s\": ERR=%s\n" +msgid "Illegal xattr stream, xattr name length <= 0 on file \"%s\"\n" msgstr "" -#: src/filed/backup.c:436 +#: src/filed/xattr.c:369 src/filed/xattr.c:405 #, c-format -msgid " Could not follow link \"%s\": ERR=%s\n" +msgid "llistea error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/backup.c:443 +#: src/filed/xattr.c:455 src/filed/xattr.c:509 #, c-format -msgid " Could not stat \"%s\": ERR=%s\n" +msgid "lgetea error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/backup.c:453 +#: src/filed/xattr.c:545 src/filed/xattr.c:867 src/filed/xattr.c:1342 +#: src/filed/xattr.c:1810 src/filed/xattr.c:2167 src/filed/xattr.c:2959 #, c-format -msgid " Archive file not saved: %s\n" +msgid "Xattr stream on file \"%s\" exceeds maximum size of %d bytes\n" msgstr "" -#: src/filed/backup.c:457 +#: src/filed/xattr.c:565 src/filed/xattr.c:893 src/filed/xattr.c:1362 +#: src/filed/xattr.c:1840 src/filed/xattr.c:2184 #, c-format -msgid " Could not open directory \"%s\": ERR=%s\n" +msgid "Failed to serialize extended attributes on file \"%s\"\n" msgstr "" -#: src/filed/backup.c:466 +#: src/filed/xattr.c:632 #, c-format -msgid " Unknown file type %d; not saved: %s\n" +msgid "lsetea error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/backup.c:522 +#: src/filed/xattr.c:720 src/filed/xattr.c:758 src/filed/xattr.c:822 +#: src/filed/xattr.c:834 #, c-format -msgid "%s signature digest initialization failed\n" +msgid "attr_list error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/backup.c:630 +#: src/filed/xattr.c:958 #, c-format -msgid " Cannot open \"%s\": ERR=%s.\n" +msgid "Received illegal xattr named %s on file \"%s\"\n" msgstr "" -#: src/filed/backup.c:667 +#: src/filed/xattr.c:991 src/filed/xattr.c:1001 #, c-format -msgid " Cannot open resource fork for \"%s\": ERR=%s.\n" +msgid "attr_set error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/backup.c:763 -msgid "Failed to allocate memory for crypto signature.\n" +#: src/filed/xattr.c:1151 src/filed/xattr.c:1186 +#, c-format +msgid "llistxattr error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/backup.c:768 src/filed/backup.c:774 src/filed/backup.c:789 -msgid "An error occurred while signing the stream.\n" +#: src/filed/xattr.c:1254 src/filed/xattr.c:1306 +#, c-format +msgid "lgetxattr error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/backup.c:813 -msgid "An error occurred finalizing signing the stream.\n" +#: src/filed/xattr.c:1425 +#, c-format +msgid "lsetxattr error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/backup.c:931 +#: src/filed/xattr.c:1583 src/filed/xattr.c:1618 #, c-format -msgid "Compression deflateParams error: %d\n" +msgid "extattr_list_link error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/backup.c:968 -msgid "Encrypting sparse or offset data not supported.\n" +#: src/filed/xattr.c:1638 +#, c-format +msgid "Failed to convert %d into namespace on file \"%s\"\n" msgstr "" -#: src/filed/backup.c:975 -msgid "Failed to initialize encryption context.\n" +#: src/filed/xattr.c:1718 src/filed/xattr.c:1773 +#, c-format +msgid "extattr_get_link error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/backup.c:1085 +#: src/filed/xattr.c:1897 #, c-format -msgid "Compression deflate error: %d\n" +msgid "Failed to split %s into namespace and name part on file \"%s\"\n" msgstr "" -#: src/filed/backup.c:1092 +#: src/filed/xattr.c:1910 #, c-format -msgid "Compression deflateReset error: %d\n" +msgid "Failed to convert %s into namespace on file \"%s\"\n" msgstr "" -#: src/filed/backup.c:1126 +#: src/filed/xattr.c:1931 #, c-format -msgid "Compression LZO error: %d\n" +msgid "extattr_set_link error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/backup.c:1171 src/filed/backup.c:1187 -msgid "Encryption error\n" +#: src/filed/xattr.c:2034 src/filed/xattr.c:2059 +#, c-format +msgid "getproplist error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/backup.c:1213 +#: src/filed/xattr.c:2253 #, c-format -msgid "Read error on file %s. ERR=%s\n" +msgid "Unable create proper proplist to restore xattrs on file \"%s\"\n" msgstr "" -#: src/filed/backup.c:1216 +#: src/filed/xattr.c:2282 #, c-format -msgid "Too many errors. JobErrors=%d.\n" +msgid "setproplist error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/backup.c:1226 -msgid "Encryption padding error\n" +#: src/filed/xattr.c:2600 src/filed/xattr.c:2653 +#, c-format +msgid "Unable to get acl on xattr %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/backup.c:1290 -msgid "Invalid file flags, no supported data stream type.\n" +#: src/filed/xattr.c:2670 +#, c-format +msgid "Unable to get acl text on xattr %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/backup.c:1549 +#: src/filed/xattr.c:2744 #, c-format -msgid "VSS Writer (BackupComplete): %s\n" +msgid "Unable to get status on xattr %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:114 +#: src/filed/xattr.c:2877 #, c-format -msgid "Size of data or stream of %s not correct. Original %s, restored %s.\n" +msgid "Unable to open xattr %s on \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:134 +#: src/filed/xattr.c:2900 #, c-format -msgid "Invalid length of Finder Info (got %d, not 32)\n" +msgid "Unable to read symlin %s on \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:139 +#: src/filed/xattr.c:2975 #, c-format -msgid "Could not set Finder Info on %s\n" +msgid "Unable to read content of xattr %s on file \"%s\"\n" msgstr "" -#: src/filed/restore.c:418 -msgid "LZO init failed\n" +#: src/filed/xattr.c:3015 +#, c-format +msgid "Unable to chdir to xattr space of file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:660 -msgid "Unexpected cryptographic session data stream.\n" +#: src/filed/xattr.c:3072 src/filed/xattr.c:3321 +#, c-format +msgid "Unable to open file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:670 -msgid "" -"No private decryption keys have been defined to decrypt encrypted backup " -"data.\n" +#: src/filed/xattr.c:3100 src/filed/xattr.c:3382 +#, c-format +msgid "Unable to open xattr space %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:681 -msgid "Could not create digest.\n" +#: src/filed/xattr.c:3116 src/filed/xattr.c:3346 +#, c-format +msgid "Unable to chdir to xattr space on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:699 -msgid "Missing private key required to decrypt encrypted backup data.\n" +#: src/filed/xattr.c:3137 +#, c-format +msgid "Unable to list the xattr space on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:702 -msgid "Decrypt of the session key failed.\n" +#: src/filed/xattr.c:3229 +#, c-format +msgid "Unable to convert acl from text on file \"%s\"\n" msgstr "" -#: src/filed/restore.c:708 +#: src/filed/xattr.c:3239 src/filed/xattr.c:3262 #, c-format -msgid "An error occurred while decoding encrypted session data stream: %s\n" +msgid "Unable to restore acl of xattr %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:775 src/filed/restore.c:828 +#: src/filed/xattr.c:3335 #, c-format -msgid "Missing encryption session data stream for %s\n" +msgid "Unable to open xattr space on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:783 src/filed/restore.c:835 +#: src/filed/xattr.c:3365 src/filed/xattr.c:3527 #, c-format -msgid "Failed to initialize decryption context for %s\n" +msgid "Unable to open xattr %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:847 +#: src/filed/xattr.c:3399 #, c-format -msgid "Cannot open resource fork for %s.\n" +msgid "Unable to chdir to xattr space %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:992 -msgid "Unexpected cryptographic signature data stream.\n" +#: src/filed/xattr.c:3439 +#, c-format +msgid "Unable to mkfifo xattr %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:1000 +#: src/filed/xattr.c:3457 #, c-format -msgid "Failed to decode message signature for %s\n" +msgid "Unable to mknod xattr %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:1064 +#: src/filed/xattr.c:3475 #, c-format -msgid "Encountered %ld acl errors while doing restore\n" +msgid "Unable to mkdir xattr %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:1068 +#: src/filed/xattr.c:3495 #, c-format -msgid "Encountered %ld xattr errors while doing restore\n" +msgid "Unable to link xattr %s to %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:1072 +#: src/filed/xattr.c:3548 #, c-format msgid "" -"%d non-supported data streams and %d non-supported attrib streams ignored.\n" +"Unable to restore data of xattr %s on file \"%s\": Not all data available in " +"xattr stream\n" msgstr "" -#: src/filed/restore.c:1076 +#: src/filed/xattr.c:3561 #, c-format -msgid "%d non-supported resource fork streams ignored.\n" +msgid "Unable to restore data of xattr %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:1079 +#: src/filed/xattr.c:3584 #, c-format -msgid "%d non-supported Finder Info streams ignored.\n" +msgid "Unable to symlink xattr %s to %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:1082 +#: src/filed/xattr.c:3620 #, c-format -msgid "%d non-supported acl streams ignored.\n" +msgid "Unable to restore owner of xattr %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:1085 +#: src/filed/xattr.c:3648 #, c-format -msgid "%d non-supported crypto streams ignored.\n" +msgid "Unable to restore filetimes of xattr %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:1088 +#: src/filed/xattr.c:3664 #, c-format -msgid "%d non-supported xattr streams ignored.\n" -msgstr "" - -#: src/filed/restore.c:1168 -msgid "Zlib errno" +msgid "Illegal xattr stream, failed to parse xattr stream on file \"%s\"\n" msgstr "" -#: src/filed/restore.c:1170 -msgid "Zlib stream error" +#: src/filed/xattr.c:3725 +#, c-format +msgid "Failed to restore extensible attributes on file \"%s\"\n" msgstr "" -#: src/filed/restore.c:1172 -msgid "Zlib data error" +#: src/filed/xattr.c:3738 +#, c-format +msgid "Failed to restore extended attributes on file \"%s\"\n" msgstr "" -#: src/filed/restore.c:1174 -msgid "Zlib memory error" +#: src/filed/xattr.c:3832 src/filed/acl.c:2253 +#, c-format +msgid "Unable to stat file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:1176 -msgid "Zlib buffer error" +#: src/filed/xattr.c:3882 +#, c-format +msgid "" +"Can't restore Extended Attributes of %s - incompatible xattr stream " +"encountered - %d\n" msgstr "" -#: src/filed/restore.c:1178 -msgid "Zlib version error" +#: src/filed/backup.c:90 +msgid "Cannot set buffer size FD->SD.\n" msgstr "" -#: src/filed/restore.c:1218 +#: src/filed/backup.c:182 #, c-format -msgid "Missing cryptographic signature for %s\n" +msgid "Encountered %ld acl errors while doing backup\n" msgstr "" -#: src/filed/restore.c:1251 src/filed/restore.c:1280 +#: src/filed/backup.c:186 #, c-format -msgid "Signature validation failed for file %s: ERR=%s\n" +msgid "Encountered %ld xattr errors while doing backup\n" msgstr "" -#: src/filed/restore.c:1268 -#, c-format -msgid "Digest one file failed for file: %s\n" +#: src/filed/backup.c:253 +msgid "Unsupported cipher on this system.\n" msgstr "" -#: src/filed/restore.c:1307 -#, c-format -msgid "Signature validation failed for %s: %s\n" +#: src/filed/backup.c:259 src/filed/backup.c:268 +msgid "An error occurred while encrypting the stream.\n" msgstr "" -#: src/filed/restore.c:1404 +#: src/filed/backup.c:386 #, c-format -msgid "LZO uncompression error on file %s. ERR=%d\n" +msgid " Recursion turned off. Will not descend from %s into %s\n" msgstr "" -#: src/filed/restore.c:1441 +#: src/filed/backup.c:393 #, c-format -msgid "Uncompression error on file %s. ERR=%s\n" +msgid " %s is a different filesystem. Will not descend from %s into it.\n" msgstr "" -#: src/filed/restore.c:1474 +#: src/filed/backup.c:399 #, c-format -msgid "Write error in Win32 Block Decomposition on %s: %s\n" +msgid " Disallowed filesystem. Will not descend from %s into %s\n" msgstr "" -#: src/filed/restore.c:1533 -msgid "Decryption error\n" +#: src/filed/backup.c:404 +#, c-format +msgid " Disallowed drive type. Will not descend into %s\n" msgstr "" -#: src/filed/restore.c:1626 -msgid "Logic error: output file should be open\n" +#: src/filed/backup.c:415 +#, c-format +msgid " Socket file skipped: %s\n" msgstr "" -#: src/filed/restore.c:1664 -msgid "Logic error: output file should not be open\n" +#: src/filed/backup.c:428 +#, c-format +msgid " Could not access \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:1698 +#: src/filed/backup.c:435 #, c-format -msgid "Decryption error. buf_len=%d decrypt_len=%d on file %s\n" +msgid " Could not follow link \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:1819 -msgid "Open File Manager paused\n" +#: src/filed/backup.c:442 +#, c-format +msgid " Could not stat \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:1823 -msgid "FAILED to pause Open File Manager\n" +#: src/filed/backup.c:452 +#, c-format +msgid " Archive file not saved: %s\n" msgstr "" -#: src/filed/restore.c:1831 +#: src/filed/backup.c:456 #, c-format -msgid "Running as '%s'. Privmask=%#08x\n" +msgid " Could not open directory \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:1833 -msgid "Failed to retrieve current UserName\n" +#: src/filed/backup.c:465 +#, c-format +msgid " Unknown file type %d; not saved: %s\n" msgstr "" -#: src/filed/job.c:456 +#: src/filed/backup.c:521 #, c-format -msgid "2901 Job %s not found.\n" +msgid "%s signature digest initialization failed\n" msgstr "" -#: src/filed/job.c:466 +#: src/filed/backup.c:629 #, c-format -msgid "2001 Job %s marked to be canceled.\n" +msgid " Cannot open \"%s\": ERR=%s.\n" msgstr "" -#: src/filed/job.c:469 -msgid "2902 Error scanning cancel command.\n" +#: src/filed/backup.c:666 +#, c-format +msgid " Cannot open resource fork for \"%s\": ERR=%s.\n" msgstr "" -#: src/filed/job.c:492 -#, c-format -msgid "2991 Bad setdebug command: %s\n" +#: src/filed/backup.c:762 +msgid "Failed to allocate memory for crypto signature.\n" msgstr "" -#: src/filed/job.c:515 -#, c-format -msgid "Bad estimate command: %s" +#: src/filed/backup.c:767 +msgid "An error occurred while adding signer the stream.\n" msgstr "" -#: src/filed/job.c:516 -msgid "2992 Bad estimate command.\n" +#: src/filed/backup.c:773 src/filed/backup.c:788 +msgid "An error occurred while signing the stream.\n" msgstr "" -#: src/filed/job.c:539 -#, c-format -msgid "Bad Job Command: %s" +#: src/filed/backup.c:812 +msgid "An error occurred finalizing signing the stream.\n" msgstr "" -#: src/filed/job.c:578 +#: src/filed/backup.c:931 #, c-format -msgid "Bad RunBeforeJob command: %s\n" +msgid "Compression deflateParams error: %d\n" msgstr "" -#: src/filed/job.c:579 src/filed/job.c:598 -msgid "2905 Bad RunBeforeJob command.\n" +#: src/filed/backup.c:968 +msgid "Encrypting sparse or offset data not supported.\n" msgstr "" -#: src/filed/job.c:609 -msgid "2905 Bad RunBeforeNow command.\n" +#: src/filed/backup.c:975 +msgid "Failed to initialize encryption context.\n" msgstr "" -#: src/filed/job.c:628 +#: src/filed/backup.c:1086 #, c-format -msgid "Bad RunAfter command: %s\n" +msgid "Compression deflate error: %d\n" msgstr "" -#: src/filed/job.c:629 -msgid "2905 Bad RunAfterJob command.\n" +#: src/filed/backup.c:1093 +#, c-format +msgid "Compression deflateReset error: %d\n" msgstr "" -#: src/filed/job.c:665 +#: src/filed/backup.c:1126 #, c-format -msgid "Bad RunScript command: %s\n" +msgid "Compression LZO error: %d\n" msgstr "" -#: src/filed/job.c:666 -msgid "2905 Bad RunScript command.\n" +#: src/filed/backup.c:1171 src/filed/backup.c:1187 +msgid "Encryption error\n" msgstr "" -#: src/filed/job.c:720 +#: src/filed/backup.c:1213 #, c-format -msgid "Bad RestoreObject command: %s\n" +msgid "Read error on file %s. ERR=%s\n" msgstr "" -#: src/filed/job.c:785 -msgid "2909 Bad RestoreObject command.\n" +#: src/filed/backup.c:1216 +#, c-format +msgid "Too many errors. JobErrors=%d.\n" msgstr "" -#: src/filed/job.c:824 -#, c-format -msgid "Plugin Directory not defined. Cannot use plugin: \"%s\"\n" +#: src/filed/backup.c:1226 +msgid "Encryption padding error\n" msgstr "" -#: src/filed/job.c:866 -#, c-format -msgid "Error running program: %s. stat=%d: ERR=%s\n" +#: src/filed/backup.c:1290 +msgid "Invalid file flags, no supported data stream type.\n" msgstr "" -#: src/filed/job.c:877 +#: src/filed/backup.c:1548 #, c-format -msgid "Cannot open FileSet input file: %s. ERR=%s\n" +msgid "VSS Writer (BackupComplete): %s\n" msgstr "" -#: src/filed/job.c:1031 +#: src/filed/acl.c:217 src/filed/acl.c:242 #, c-format -msgid "REGEX %s compile error. ERR=%s\n" +msgid "aclx_get error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/job.c:1182 +#: src/filed/acl.c:268 #, c-format -msgid "Invalid FileSet command: %s\n" +msgid "Unknown acl type encountered on file \"%s\": %ld\n" msgstr "" -#: src/filed/job.c:1655 +#: src/filed/acl.c:292 src/filed/acl.c:301 #, c-format -msgid "" -"DIR and FD clocks differ by %lld seconds, FD automatically compensating.\n" +msgid "Failed to convert acl into text on file \"%s\"\n" msgstr "" -#: src/filed/job.c:1664 +#: src/filed/acl.c:374 #, c-format -msgid "Unknown backup level: %s\n" +msgid "" +"Trying to restore POSIX acl on file \"%s\" on filesystem without AIXC acl " +"support\n" msgstr "" -#: src/filed/job.c:1677 +#: src/filed/acl.c:382 #, c-format -msgid "Bad level command: %s\n" +msgid "" +"Trying to restore NFSv4 acl on file \"%s\" on filesystem without NFS4 acl " +"support\n" msgstr "" -#: src/filed/job.c:1699 +#: src/filed/acl.c:430 src/filed/acl.c:440 #, c-format -msgid "Bad session command: %s" +msgid "aclx_scanStr error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/job.c:1760 +#: src/filed/acl.c:466 #, c-format -msgid "Bad storage command: %s" +msgid "aclx_put error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/job.c:1781 +#: src/filed/acl.c:811 #, c-format -msgid "Failed to connect to Storage daemon: %s:%d\n" +msgid "acl_to_text error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/job.c:1793 -msgid "Failed to authenticate Storage daemon.\n" +#: src/filed/acl.c:841 +#, c-format +msgid "acl_get_file error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/job.c:1840 -msgid "ACL support not configured for your machine.\n" +#: src/filed/acl.c:894 +#, c-format +msgid "" +"acl_delete_def_file error on file \"%s\": filesystem doesn't support ACLs\n" msgstr "" -#: src/filed/job.c:1844 -msgid "XATTR support not configured for your machine.\n" +#: src/filed/acl.c:900 +#, c-format +msgid "acl_delete_def_file error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/job.c:1853 -msgid "Cannot contact Storage daemon\n" +#: src/filed/acl.c:911 +#, c-format +msgid "acl_from_text error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/job.c:1872 +#: src/filed/acl.c:927 #, c-format -msgid "Bad response to append open: %s\n" +msgid "acl_valid error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/job.c:1877 -msgid "Bad response from stored to open command\n" +#: src/filed/acl.c:959 +#, c-format +msgid "acl_set_file error on file \"%s\": filesystem doesn't support ACLs\n" msgstr "" -#: src/filed/job.c:1909 +#: src/filed/acl.c:968 #, c-format -msgid "Generate VSS snapshots. Driver=\"%s\", Drive(s)=\"%s\"\n" +msgid "acl_set_file error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/job.c:1912 +#: src/filed/acl.c:1075 src/filed/acl.c:1104 src/filed/acl.c:1218 +#: src/filed/acl.c:1726 src/filed/acl.c:1833 #, c-format -msgid "CreateSGenerate VSS snapshots failed. ERR=%s\n" +msgid "pathconf error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/job.c:1919 +#: src/filed/acl.c:1234 #, c-format -msgid "Generate VSS snapshot of drive \"%c:\\\" failed.\n" +msgid "" +"Trying to restore acl on file \"%s\" on filesystem without %s acl support\n" msgstr "" -#: src/filed/job.c:1925 +#: src/filed/acl.c:1519 #, c-format -msgid "VSS Writer (PrepareForBackup): %s\n" +msgid "getacl error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/job.c:1930 -msgid "No drive letters found for generating VSS snapshots.\n" +#: src/filed/acl.c:1554 +#, c-format +msgid "acltostr error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/job.c:1934 +#: src/filed/acl.c:1576 src/filed/acl.c:1586 #, c-format -msgid "VSS was not initialized properly. ERR=%s\n" +msgid "strtoacl error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/job.c:1985 -msgid "Append Close with SD failed.\n" +#: src/filed/acl.c:1615 +#, c-format +msgid "setacl error on file \"%s\": filesystem doesn't support ACLs\n" msgstr "" -#: src/filed/job.c:1989 +#: src/filed/acl.c:1623 #, c-format -msgid "Bad status %d returned from Storage Daemon.\n" +msgid "setacl error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/job.c:2019 +#: src/filed/acl.c:1748 #, c-format -msgid "2994 Bad verify command: %s\n" +msgid "acl_get error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/job.c:2034 src/filed/job.c:2075 +#: src/filed/acl.c:1822 #, c-format -msgid "2994 Bad verify level: %s\n" +msgid "" +"Trying to restore acl on file \"%s\" on filesystem without acl support\n" msgstr "" -#: src/filed/job.c:2146 +#: src/filed/acl.c:1851 #, c-format -msgid "Bad replace command. CMD=%s\n" +msgid "" +"Trying to restore POSIX acl on file \"%s\" on filesystem without aclent acl " +"support\n" msgstr "" -#: src/filed/job.c:2169 +#: src/filed/acl.c:1862 #, c-format -msgid "Bad where regexp. where=%s\n" +msgid "" +"Trying to restore NFSv4 acl on file \"%s\" on filesystem without ace acl " +"support\n" msgstr "" -#: src/filed/job.c:2207 +#: src/filed/acl.c:1878 #, c-format -msgid "VSS was not initialized properly. VSS support is disabled. ERR=%s\n" +msgid "acl_fromtext error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/job.c:2252 +#: src/filed/acl.c:1892 src/filed/acl.c:1900 #, c-format -msgid "VSS Writer (RestoreComplete): %s\n" +msgid "wrong encoding of acl type in acl stream on file \"%s\"\n" msgstr "" -#: src/filed/job.c:2302 -msgid "Improper calling sequence.\n" +#: src/filed/acl.c:1925 +#, c-format +msgid "acl_set error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/job.c:2322 +#: src/filed/acl.c:2011 #, c-format -msgid "Bad response to SD read open: %s\n" +msgid "acltotext error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/job.c:2327 -msgid "Bad response from stored to read open command\n" +#: src/filed/acl.c:2034 +#, c-format +msgid "aclfromtext error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/job.c:2391 +#: src/filed/acl.c:2054 #, c-format -msgid "Comm error with SD. bad response to %s. ERR=%s\n" +msgid "acl(SETACL) error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/job.c:2394 +#: src/filed/acl.c:2120 #, c-format -msgid "Bad response to %s command. Wanted %s, got %s\n" +msgid "pioctl VIOCGETAL error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/authenticate.c:68 +#: src/filed/acl.c:2148 #, c-format -msgid "I only authenticate directors, not %d\n" +msgid "pioctl VIOCSETAL error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/authenticate.c:100 +#: src/filed/acl.c:2351 #, c-format -msgid "Connection from unknown Director %s at %s rejected.\n" +msgid "Can't restore ACLs of %s - incompatible acl stream encountered - %d\n" msgstr "" -#: src/filed/authenticate.c:144 +#: src/filed/filed.c:52 #, c-format -msgid "Incorrect password given by Director at %s.\n" +msgid "" +"\n" +"%sVersion: %s (%s)\n" +"\n" +"Usage: bacula-fd [-f -s] [-c config_file] [-d debug_level]\n" +" -c use as configuration file\n" +" -d [,] set debug level to , debug tags to \n" +" -dt print a timestamp in debug output\n" +" -f run in foreground (for debugging)\n" +" -g groupid\n" +" -k keep readall capabilities\n" +" -m print kaboom output (for debugging)\n" +" -s no signals (for debugging)\n" +" -t test configuration file and exit\n" +" -T set trace on\n" +" -u userid\n" +" -v verbose user messages\n" +" -? print this message.\n" +"\n" msgstr "" -#: src/filed/authenticate.c:263 -msgid "" -"Authorization key rejected by Storage daemon.\n" -"Please see " +#: src/filed/filed.c:185 +msgid "-k option has no meaning without -u option.\n" msgstr "" -#: examples/nagios/check_bacula/check_bacula.c:59 +#: src/filed/filed.c:315 #, c-format msgid "" -"Copyright (C) 2005 Christian Masopust\n" -"Written by Christian Masopust (2005)\n" -"\n" -"Version: " +"No File daemon resource defined in %s\n" +"Without that I don't know who I am :-(\n" msgstr "" -#: src/baconfig.h:72 src/baconfig.h:73 src/baconfig.h:78 src/baconfig.h:79 +#: src/filed/filed.c:320 #, c-format -msgid "Failed ASSERT: %s\n" +msgid "Only one Client resource permitted in %s\n" msgstr "" -#: src/win32/compat/compat.cpp:2721 -msgid "" -"\n" -"\n" -"Bacula ERROR: " +#: src/filed/filed.c:348 src/filed/filed.c:547 +#, c-format +msgid "Disable Command \"%s\" not found.\n" msgstr "" -#: src/win32/libwin32/service.cpp:107 -msgid "RegisterServiceCtlHandler failed" +#: src/filed/filed.c:375 +#, c-format +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"File daemon in %s.\n" msgstr "" -#: src/win32/libwin32/service.cpp:108 -msgid "Failure contacting the Service Handler" +#: src/filed/filed.c:399 +msgid "PKI encryption/signing enabled but not compiled into Bacula.\n" msgstr "" -#: src/win32/libwin32/service.cpp:119 -msgid "Service start report failed" +#: src/filed/filed.c:410 +#, c-format +msgid "" +"\"PKI Key Pair\" must be defined for File daemon \"%s\" in %s if either " +"\"PKI Sign\" or \"PKI Encrypt\" are enabled.\n" msgstr "" -#: src/win32/libwin32/service.cpp:172 -msgid "StartServiceCtrlDispatcher failed." +#: src/filed/filed.c:422 src/filed/filed.c:453 src/filed/filed.c:503 +msgid "Failed to allocate a new keypair object.\n" msgstr "" -#: src/win32/libwin32/service.cpp:179 -msgid "KERNEL32.DLL not found: Bacula service not started" +#: src/filed/filed.c:426 +#, c-format +msgid "Failed to load public certificate for File daemon \"%s\" in %s.\n" msgstr "" -#: src/win32/libwin32/service.cpp:189 -msgid "Registry service not found: Bacula service not started" +#: src/filed/filed.c:432 +#, c-format +msgid "Failed to load private key for File daemon \"%s\" in %s.\n" msgstr "" -#: src/win32/libwin32/service.cpp:191 -msgid "Registry service entry point not found" +#: src/filed/filed.c:462 +#, c-format +msgid "Failed to load private key from file %s for File daemon \"%s\" in %s.\n" msgstr "" -#: src/win32/libwin32/service.cpp:212 -msgid "Report Service failure" +#: src/filed/filed.c:469 +#, c-format +msgid "" +"Failed to load trusted signer certificate from file %s for File daemon \"%s" +"\" in %s.\n" msgstr "" -#: src/win32/libwin32/service.cpp:243 -msgid "Unable to install the service" +#: src/filed/filed.c:509 +#, c-format +msgid "" +"Failed to load master key certificate from file %s for File daemon \"%s\" in " +"%s.\n" msgstr "" -#: src/win32/libwin32/service.cpp:251 -msgid "Service command length too long" +#: src/filed/filed.c:525 +#, c-format +msgid "No Director resource defined in %s\n" msgstr "" -#: src/win32/libwin32/service.cpp:252 -msgid "Service command length too long. Service not registered." +#: src/filed/status.c:82 +#, c-format +msgid "Daemon started %s. Jobs: run=%d running=%d.\n" msgstr "" -#: src/win32/libwin32/service.cpp:265 +#: src/filed/status.c:143 +#, c-format msgid "" -"The Service Control Manager could not be contacted - the service was not " -"installed" +" Sizes: boffset_t=%d size_t=%d debug=%s trace=%d mode=%d,%d bwlimit=%skB/s\n" msgstr "" -#: src/win32/libwin32/service.cpp:288 src/win32/libwin32/service.cpp:317 -#: src/win32/libwin32/service.cpp:365 src/win32/libwin32/service.cpp:373 -#: src/win32/libwin32/service.cpp:377 -msgid "The Bacula service: " +#: src/filed/status.c:199 +#, c-format +msgid "Director connected at: %s\n" msgstr "" -#: src/win32/libwin32/service.cpp:295 -msgid "" -"Provides file backup and restore services. Bacula -- the network backup " -"solution." +#: src/filed/status.c:201 +#, c-format +msgid "JobId %d Job %s is running.\n" msgstr "" -#: src/win32/libwin32/service.cpp:306 -msgid "Cannot write System Registry for " +#: src/filed/status.c:204 +#, c-format +msgid " %s%s %s Job started: %s\n" msgstr "" -#: src/win32/libwin32/service.cpp:307 +#: src/filed/status.c:232 +#, c-format msgid "" -"The System Registry could not be updated - the Bacula service was not " -"installed" +" Files=%s Bytes=%s AveBytes/sec=%s LastBytes/sec=%s Errors=%d\n" +" Bwlimit=%s\n" msgstr "" -#: src/win32/libwin32/service.cpp:316 -msgid "Cannot add Bacula key to System Registry" +#: src/filed/status.c:242 +#, c-format +msgid " Files: Restored=%s Expected=%s Completed=%d%%\n" +msgstr "" + +#: src/filed/status.c:247 +#, c-format +msgid " Files: Examined=%s Backed up=%s\n" msgstr "" -#: src/win32/libwin32/service.cpp:327 -msgid "The " +#: src/filed/status.c:260 +#, c-format +msgid " Processing file: %s\n" msgstr "" -#: src/win32/libwin32/service.cpp:385 -msgid "An existing Bacula service: " +#: src/filed/status.c:271 +msgid " SDSocket closed.\n" msgstr "" -#: src/win32/libwin32/service.cpp:394 -msgid "" -"The service Manager could not be contacted - the Bacula service was not " -"removed" +#: src/filed/status.c:281 +msgid "====\n" msgstr "" -#: src/win32/libwin32/service.cpp:407 -msgid "" -"Could not find registry entry.\n" -"Service probably not registerd - the Bacula service was not removed" +#: src/filed/status.c:343 +msgid " SDSocket=closed\n" msgstr "" -#: src/win32/libwin32/service.cpp:414 -msgid "Could not delete Registry key for " +#: src/filed/status.c:393 src/filed/status.c:427 +#, c-format +msgid "Bad .status command: %s\n" msgstr "" -#: src/win32/libwin32/service.cpp:425 -msgid "Bacula could not be contacted, probably not running" +#: src/filed/status.c:394 +msgid "2900 Bad .status command, missing argument.\n" msgstr "" -#: src/win32/libwin32/service.cpp:433 -msgid "The Bacula service has been removed" +#: src/filed/status.c:428 +msgid "2900 Bad .status command, wrong argument.\n" msgstr "" -#: src/win32/libwin32/service.cpp:474 -msgid "SetServiceStatus failed" +#: src/tools/bregex.c:141 src/tools/bregtest.c:125 src/tools/bwild.c:110 +#, c-format +msgid "Could not open data file: %s\n" msgstr "" -#: src/win32/libwin32/service.cpp:500 +#: src/tools/bbatch.c:67 #, c-format msgid "" "\n" +"Version: %s (%s)\n" +"Example : bbatch -w /path/to/workdir -h localhost -f dat1 -f dat -f datx\n" +" will start 3 thread and load dat1, dat and datx in your catalog\n" +"See bbatch.c to generate datafile\n" +"\n" +"Usage: bbatch [ options ] -w working/dir -f datafile\n" +" -b with batch mode\n" +" -B without batch mode\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -n specify the database name (default bacula)\n" +" -u specify database user name (default bacula)\n" +" -P specify database host (default NULL)\n" +" -w specify working directory\n" +" -r call restore code with given jobids\n" +" -v verbose\n" +" -f specify data file\n" +" -? print this message\n" "\n" -"%s error: %ld at %s:%d" msgstr "" -#: src/win32/libwin32/service.cpp:576 +#: src/tools/bbatch.c:199 #, c-format -msgid "Locked by: %s, duration: %ld seconds\n" +msgid "Computing file list for jobid=%s files=%lld secs=%d\n" msgstr "" -#: src/win32/libwin32/service.cpp:580 +#: src/tools/bbatch.c:303 #, c-format -msgid "No longer locked\n" +msgid "Error opening datafile %s\n" +msgstr "" + +#: src/tools/bbatch.c:313 +msgid "Error while inserting file\n" msgstr "" -#: src/win32/libwin32/service.cpp:584 -msgid "Could not lock database" +#: src/tools/drivetype.c:35 +#, c-format +msgid "" +"\n" +"Usage: drivetype [-v] path ...\n" +"\n" +" Print the drive type a given file/directory is on.\n" +" The following options are supported:\n" +"\n" +" -l print local fixed hard drive\n" +" -a display information on all drives\n" +" -v print both path and file system type.\n" +" -? print this message.\n" +"\n" msgstr "" -#: src/win32/libwin32/main.cpp:245 -msgid "Bad Command Line Option" +#: src/tools/drivetype.c:66 src/tools/fstype.c:90 +#, c-format +msgid "%s: unknown\n" msgstr "" -#: src/wx-console/wxbconfigfileeditor.cpp:65 -msgid "Config file editor" +#: src/tools/bsmtp.c:139 +#, c-format +msgid "Fatal malformed reply from %s: %s\n" msgstr "" -#: src/wx-console/wxbconfigfileeditor.cpp:75 -msgid "# Bacula bwx-console Configuration File\n" +#: src/tools/bsmtp.c:147 +#, c-format +msgid "Fatal fgets error: ERR=%s\n" msgstr "" -#: src/wx-console/wxbconfigfileeditor.cpp:111 -msgid "Save and close" +#: src/tools/bsmtp.c:180 +#, c-format +msgid "" +"\n" +"Usage: %s [-f from] [-h mailhost] [-s subject] [-c copy] [recipient ...]\n" +" -4 forces bsmtp to use IPv4 addresses only.\n" +" -6 forces bsmtp to use IPv6 addresses only.\n" +" -8 set charset to UTF-8\n" +" -a use any ip protocol for address resolution\n" +" -c set the Cc: field\n" +" -d set debug level to \n" +" -dt print a timestamp in debug output\n" +" -f set the From: field\n" +" -h use mailhost:port as the SMTP server\n" +" -s set the Subject: field\n" +" -r set the Reply-To: field\n" +" -l set the maximum number of lines to send (default: " +"unlimited)\n" +" -? print this message.\n" +"\n" msgstr "" -#: src/wx-console/wxbconfigfileeditor.cpp:112 -msgid "Close without saving" +#: src/tools/bsmtp.c:367 +msgid "Fatal error: no recipient given.\n" msgstr "" -#: src/wx-console/wxbconfigfileeditor.cpp:139 +#: src/tools/bsmtp.c:395 #, c-format -msgid "Unable to write to %s\n" -msgstr "" - -#: src/wx-console/wxbconfigfileeditor.cpp:140 -msgid "Error while saving" -msgstr "" - -#: src/wx-console/wxbrestorepanel.cpp:234 -#: src/wx-console/wxbrestorepanel.cpp:1947 -#: src/wx-console/wxbrestorepanel.cpp:1976 -msgid "Enter restore mode" -msgstr "" - -#: src/wx-console/wxbrestorepanel.cpp:237 -msgid "Cancel restore" -msgstr "" - -#: src/wx-console/wxbrestorepanel.cpp:263 -#: src/wx-console/wxbrestorepanel.cpp:317 -msgid "Add" +msgid "Fatal gethostname error: ERR=%s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:265 -#: src/wx-console/wxbrestorepanel.cpp:319 -msgid "Remove" +#: src/tools/bsmtp.c:406 +#, c-format +msgid "Fatal getaddrinfo for myself failed \"%s\": ERR=%s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:267 -#: src/wx-console/wxbrestorepanel.cpp:321 -msgid "Refresh" +#: src/tools/bsmtp.c:414 +#, c-format +msgid "Fatal gethostbyname for myself failed \"%s\": ERR=%s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:286 -msgid "M" +#: src/tools/bsmtp.c:474 src/tools/bsmtp.c:509 +#, c-format +msgid "Error unknown mail host \"%s\": ERR=%s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:290 -msgid "Filename" +#: src/tools/bsmtp.c:477 src/tools/bsmtp.c:512 +msgid "Retrying connection using \"localhost\".\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:294 -msgid "Size" +#: src/tools/bsmtp.c:502 +#, c-format +msgid "Failed to connect to mailhost %s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:298 -msgid "Date" +#: src/tools/bsmtp.c:520 +#, c-format +msgid "Fatal error: Unknown address family for smtp host: %d\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:302 -msgid "Perm." +#: src/tools/bsmtp.c:529 src/tools/bsmtp.c:534 +#, c-format +msgid "Fatal socket error: ERR=%s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:306 -msgid "User" +#: src/tools/bsmtp.c:539 +#, c-format +msgid "Fatal connect error to %s: ERR=%s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:310 -msgid "Group" +#: src/tools/bsmtp.c:548 +#, c-format +msgid "Fatal _open_osfhandle error: ERR=%s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:335 -#: src/wx-console/wxbrestorepanel.cpp:348 -#: src/wx-console/wxbrestorepanel.cpp:503 -#: src/wx-console/wxbrestorepanel.cpp:513 -#: src/wx-console/wxbrestorepanel.cpp:516 -#: src/wx-console/wxbrestorepanel.cpp:1811 -#: src/wx-console/wxbrestorepanel.cpp:1897 -msgid "Job Name" +#: src/tools/bsmtp.c:555 src/tools/bsmtp.c:559 src/tools/bsmtp.c:568 +#: src/tools/bsmtp.c:572 +#, c-format +msgid "Fatal fdopen error: ERR=%s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:337 -#: src/wx-console/wxbrestorepanel.cpp:353 -#: src/wx-console/wxbrestorepanel.cpp:455 -#: src/wx-console/wxbrestorepanel.cpp:456 -#: src/wx-console/wxbrestorepanel.cpp:466 -#: src/wx-console/wxbrestorepanel.cpp:467 -#: src/wx-console/wxbrestorepanel.cpp:1153 -#: src/wx-console/wxbrestorepanel.cpp:1156 -#: src/wx-console/wxbrestorepanel.cpp:1239 -#: src/wx-console/wxbrestorepanel.cpp:1849 -#: src/wx-console/wxbrestorepanel.cpp:1851 -#: src/wx-console/wxbrestorepanel.cpp:1912 -msgid "Fileset" +#: src/tools/bsmtp.c:564 +#, c-format +msgid "Fatal dup error: ERR=%s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:340 -#: src/wx-console/wxbrestorepanel.cpp:1233 -#: src/wx-console/wxbrestorepanel.cpp:1249 -#: src/wx-console/wxbrestorepanel.cpp:1251 -#: src/wx-console/wxbrestorepanel.cpp:1259 -#: src/wx-console/wxbrestorepanel.cpp:1261 -#: src/wx-console/wxbrestorepanel.cpp:1280 -#: src/wx-console/wxbrestorepanel.cpp:1287 -#: src/wx-console/wxbrestorepanel.cpp:1839 -#: src/wx-console/wxbrestorepanel.cpp:1850 -#: src/wx-console/wxbrestorepanel.cpp:1971 -msgid "Before" +#: src/tools/dbcheck.c:183 +msgid "" +"Warning skipping the additional parameters for working directory/dbname/user/" +"password/host.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:342 -msgid "Please configure parameters concerning files to restore :" +#: src/tools/dbcheck.c:200 +#, c-format +msgid "Error can not find the Catalog name[%s] in the given config file [%s]\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:351 -#: src/wx-console/wxbrestorepanel.cpp:1905 -msgid "always" +#: src/tools/dbcheck.c:202 +#, c-format +msgid "Error there is no Catalog section in the given config file [%s]\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:351 -msgid "if newer" +#: src/tools/dbcheck.c:211 +msgid "Error no Director resource defined.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:351 -msgid "if older" +#: src/tools/dbcheck.c:235 +msgid "Wrong number of arguments.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:351 -#: src/wx-console/wxbrestorepanel.cpp:1908 -msgid "never" +#: src/tools/dbcheck.c:240 +msgid "Working directory not supplied.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:359 -msgid "Please configure parameters concerning files restoration :" +#: src/tools/dbcheck.c:276 +msgid "Database port must be a numeric value.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:427 -msgid "Getting parameters list." +#: src/tools/dbcheck.c:279 +msgid "Database port must be a int value.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:435 -msgid "Error : no clients returned by the director." +#: src/tools/dbcheck.c:353 +#, c-format +msgid "Hello, this is the database check/correct program.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:459 -msgid "Error : no filesets returned by the director." +#: src/tools/dbcheck.c:355 +#, c-format +msgid "Modify database is on." msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:483 -msgid "Error : no storage returned by the director." +#: src/tools/dbcheck.c:357 +#, c-format +msgid "Modify database is off." msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:506 -#: src/wx-console/wxbrestorepanel.cpp:530 -msgid "Error : no jobs returned by the director." +#: src/tools/dbcheck.c:359 src/tools/dbcheck.c:420 +#, c-format +msgid " Verbose is on.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:516 -msgid "RestoreFiles" +#: src/tools/dbcheck.c:361 src/tools/dbcheck.c:422 +#, c-format +msgid " Verbose is off.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:551 -msgid "Please configure your restore parameters." +#: src/tools/dbcheck.c:363 +#, c-format +msgid "Please select the function you want to perform.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:556 -msgid "Please select a client." +#: src/tools/dbcheck.c:367 +#, c-format +msgid "" +"\n" +" 1) Toggle modify database flag\n" +" 2) Toggle verbose flag\n" +" 3) Repair bad Filename records\n" +" 4) Repair bad Path records\n" +" 5) Eliminate duplicate Filename records\n" +" 6) Eliminate duplicate Path records\n" +" 7) Eliminate orphaned Jobmedia records\n" +" 8) Eliminate orphaned File records\n" +" 9) Eliminate orphaned Path records\n" +" 10) Eliminate orphaned Filename records\n" +" 11) Eliminate orphaned FileSet records\n" +" 12) Eliminate orphaned Client records\n" +" 13) Eliminate orphaned Job records\n" +" 14) Eliminate all Admin records\n" +" 15) Eliminate all Restore records\n" +" 16) All (3-15)\n" +" 17) Quit\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:560 -msgid "Please select a restore date." +#: src/tools/dbcheck.c:386 +#, c-format +msgid "" +"\n" +" 1) Toggle modify database flag\n" +" 2) Toggle verbose flag\n" +" 3) Check for bad Filename records\n" +" 4) Check for bad Path records\n" +" 5) Check for duplicate Filename records\n" +" 6) Check for duplicate Path records\n" +" 7) Check for orphaned Jobmedia records\n" +" 8) Check for orphaned File records\n" +" 9) Check for orphaned Path records\n" +" 10) Check for orphaned Filename records\n" +" 11) Check for orphaned FileSet records\n" +" 12) Check for orphaned Client records\n" +" 13) Check for orphaned Job records\n" +" 14) Check for all Admin records\n" +" 15) Check for all Restore records\n" +" 16) All (3-15)\n" +" 17) Quit\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:565 -msgid "Building restore tree..." +#: src/tools/dbcheck.c:406 +msgid "Select function number: " msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:613 -msgid "Error while starting restore: " +#: src/tools/dbcheck.c:413 +#, c-format +msgid "Database will be modified.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:705 -msgid "" -"Right click on a file or on a directory, or double-click on its mark to add " -"it to the restore list." +#: src/tools/dbcheck.c:415 +#, c-format +msgid "Database will NOT be modified.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:720 src/wx-console/wxbmainframe.cpp:685 -msgid "Unexpected question has been received.\n" +#: src/tools/dbcheck.c:506 +#, c-format +msgid "JobId=%s Name=\"%s\" StartTime=%s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:742 -#: src/wx-console/wxbrestorepanel.cpp:764 -msgid "bwx-console: unexpected restore question." +#: src/tools/dbcheck.c:513 +#, c-format +msgid "Orphaned JobMediaId=%s JobId=%s Volume=\"%s\"\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:775 -msgid " files selected to be restored." +#: src/tools/dbcheck.c:520 +#, c-format +msgid "Orphaned FileId=%s JobId=%s Volume=\"%s\"\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:780 -msgid " file selected to be restored." +#: src/tools/dbcheck.c:527 +#, c-format +msgid "Orphaned FileSetId=%s FileSet=\"%s\" MD5=%s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:787 +#: src/tools/dbcheck.c:534 #, c-format -msgid "Please configure your restore (%ld files selected to be restored)..." +msgid "Orphaned ClientId=%s Name=\"%s\"\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:797 -msgid "Restore failed : no file selected.\n" +#: src/tools/dbcheck.c:587 +#, c-format +msgid "Deleting: %s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:798 -msgid "Restore failed : no file selected." +#: src/tools/dbcheck.c:659 +#, c-format +msgid "Checking for duplicate Filename entries.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:808 -msgid "Restoring, please wait..." +#: src/tools/dbcheck.c:670 +#, c-format +msgid "Found %d duplicate Filename records.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:821 -msgid "Job queued. JobId=" +#: src/tools/dbcheck.c:671 +msgid "Print the list? (yes/no): " msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:823 -msgid "Restore queued, jobid=" +#: src/tools/dbcheck.c:694 src/tools/dbcheck.c:759 +#, c-format +msgid "Found %d for: %s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:827 -msgid "Job failed." +#: src/tools/dbcheck.c:724 +#, c-format +msgid "Checking for duplicate Path entries.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:828 -msgid "Restore failed, please look at messages.\n" +#: src/tools/dbcheck.c:735 +#, c-format +msgid "Found %d duplicate Path records.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:829 -msgid "Restore failed, please look at messages in console." +#: src/tools/dbcheck.c:736 src/tools/dbcheck.c:798 src/tools/dbcheck.c:844 +#: src/tools/dbcheck.c:912 src/tools/dbcheck.c:970 src/tools/dbcheck.c:1013 +#: src/tools/dbcheck.c:1055 src/tools/dbcheck.c:1097 src/tools/dbcheck.c:1134 +#: src/tools/dbcheck.c:1167 src/tools/dbcheck.c:1201 src/tools/dbcheck.c:1268 +msgid "Print them? (yes/no): " msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:835 -#: src/wx-console/wxbrestorepanel.cpp:836 -msgid "Failed to retrieve jobid.\n" +#: src/tools/dbcheck.c:789 +#, c-format +msgid "Checking for orphaned JobMedia entries.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:862 -msgid "" -"Restore is scheduled to run. bwx-console will not wait for its completion.\n" +#: src/tools/dbcheck.c:797 +#, c-format +msgid "Found %d orphaned JobMedia records.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:863 -msgid "" -"Restore is scheduled to run. bwx-console will not wait for its completion." +#: src/tools/dbcheck.c:815 +#, c-format +msgid "Deleting %d orphaned JobMedia records.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:889 -msgid "Restore job created, but not yet running." +#: src/tools/dbcheck.c:832 +#, c-format +msgid "Checking for orphaned File entries. This may take some time!\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:894 +#: src/tools/dbcheck.c:843 #, c-format -msgid "Restore job running, please wait (%ld of %ld files restored)..." +msgid "Found %d orphaned File records.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:898 -msgid "Restore job terminated successfully." +#: src/tools/dbcheck.c:860 +#, c-format +msgid "Deleting %d orphaned File records.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:899 -msgid "Restore job terminated successfully.\n" +#: src/tools/dbcheck.c:879 +#, c-format +msgid "Pruning orphaned Path entries isn't possible when using BVFS.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:904 -msgid "Restore job terminated in error, see messages in console." +#: src/tools/dbcheck.c:888 src/tools/dbcheck.c:946 +msgid "Create temporary index? (yes/no): " msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:905 -msgid "Restore job terminated in error, see messages.\n" +#: src/tools/dbcheck.c:900 +#, c-format +msgid "Checking for orphaned Path entries. This may take some time!\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:910 -msgid "Restore job reported a non-fatal error." +#: src/tools/dbcheck.c:911 +#, c-format +msgid "Found %d orphaned Path records.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:914 -msgid "Restore job reported a fatal error." +#: src/tools/dbcheck.c:924 +#, c-format +msgid "Deleting %d orphaned Path records.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:919 -msgid "Restore job cancelled by user." +#: src/tools/dbcheck.c:958 +#, c-format +msgid "Checking for orphaned Filename entries. This may take some time!\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:920 -msgid "Restore job cancelled by user.\n" +#: src/tools/dbcheck.c:969 +#, c-format +msgid "Found %d orphaned Filename records.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:925 -msgid "Restore job is waiting on File daemon." +#: src/tools/dbcheck.c:982 +#, c-format +msgid "Deleting %d orphaned Filename records.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:929 -msgid "Restore job is waiting for new media." +#: src/tools/dbcheck.c:1002 +#, c-format +msgid "Checking for orphaned FileSet entries. This takes some time!\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:933 -msgid "Restore job is waiting for storage resource." +#: src/tools/dbcheck.c:1012 +#, c-format +msgid "Found %d orphaned FileSet records.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:937 -msgid "Restore job is waiting for job resource." +#: src/tools/dbcheck.c:1027 +#, c-format +msgid "Deleting %d orphaned FileSet records.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:941 -msgid "Restore job is waiting for Client resource." +#: src/tools/dbcheck.c:1036 +#, c-format +msgid "Checking for orphaned Client entries.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:945 -msgid "Restore job is waiting for maximum jobs." +#: src/tools/dbcheck.c:1054 +#, c-format +msgid "Found %d orphaned Client records.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:949 -msgid "Restore job is waiting for start time." +#: src/tools/dbcheck.c:1069 +#, c-format +msgid "Deleting %d orphaned Client records.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:953 -msgid "Restore job is waiting for higher priority jobs to finish." +#: src/tools/dbcheck.c:1078 +#, c-format +msgid "Checking for orphaned Job entries.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1002 -msgid "" -"The restore job has not been started within one minute, bwx-console will not " -"wait for its completion anymore.\n" +#: src/tools/dbcheck.c:1096 +#, c-format +msgid "Found %d orphaned Job records.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1003 -msgid "" -"The restore job has not been started within one minute, bwx-console will not " -"wait for its completion anymore." +#: src/tools/dbcheck.c:1111 +#, c-format +msgid "Deleting %d orphaned Job records.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1013 -msgid "Restore done successfully.\n" +#: src/tools/dbcheck.c:1113 +#, c-format +msgid "Deleting JobMedia records of orphaned Job records.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1014 -msgid "Restore done successfully." +#: src/tools/dbcheck.c:1115 +#, c-format +msgid "Deleting Log records of orphaned Job records.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1086 -msgid "Applying restore configuration changes..." +#: src/tools/dbcheck.c:1124 +#, c-format +msgid "Checking for Admin Job entries.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1138 -msgid "Failed to find the selected client." +#: src/tools/dbcheck.c:1133 +#, c-format +msgid "Found %d Admin Job records.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1158 -msgid "Failed to find the selected fileset." +#: src/tools/dbcheck.c:1148 +#, c-format +msgid "Deleting %d Admin Job records.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1178 -msgid "Failed to find the selected storage." +#: src/tools/dbcheck.c:1157 +#, c-format +msgid "Checking for Restore Job entries.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1199 -#: src/wx-console/wxbrestorepanel.cpp:1886 -msgid "Run Restore job" +#: src/tools/dbcheck.c:1166 +#, c-format +msgid "Found %d Restore Job records.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1216 -msgid "Restore configuration changes were applied." +#: src/tools/dbcheck.c:1181 +#, c-format +msgid "Deleting %d Restore Job records.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1225 -msgid "Restore cancelled.\n" +#: src/tools/dbcheck.c:1191 +#, c-format +msgid "Checking for Filenames with a trailing slash\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1226 -msgid "Restore cancelled." +#: src/tools/dbcheck.c:1200 +#, c-format +msgid "Found %d bad Filename records.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1248 -msgid "No results to list." +#: src/tools/dbcheck.c:1218 src/tools/dbcheck.c:1284 +#, c-format +msgid "Reparing %d bad Filename records.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1250 -msgid "No backup found for this client." +#: src/tools/dbcheck.c:1258 +#, c-format +msgid "Checking for Paths without a trailing slash\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1257 -msgid "ERROR" +#: src/tools/dbcheck.c:1267 +#, c-format +msgid "Found %d bad Path records.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1258 -msgid "Query failed" +#: src/tools/dbcheck.c:1430 +#, c-format +msgid "" +"Ok. Index over the %s column already exists and dbcheck will work faster.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1260 -msgid "Cannot get previous backups list, see console." +#: src/tools/dbcheck.c:1433 +#, c-format +msgid "" +"Note. Index over the %s column not found, that can greatly slow down " +"dbcheck.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1896 -msgid "JobName:" +#: src/tools/dbcheck.c:1448 +#, c-format +msgid "Create temporary index... This may take some time!\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1898 -msgid "Bootstrap:" +#: src/tools/dbcheck.c:1456 +#, c-format +msgid "Temporary index created.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1900 -msgid "Where:" +#: src/tools/dbcheck.c:1471 +#, c-format +msgid "Drop temporary index.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1903 -msgid "Replace:" +#: src/tools/dbcheck.c:1481 +#, c-format +msgid "Temporary index %s deleted.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1906 -msgid "ifnewer" +#: src/tools/bvfs_test.c:44 src/tools/ing_test.c:45 +#, c-format +msgid "" +"\n" +"Version: %s (%s)\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -n specify the database name (default bacula)\n" +" -u specify database user name (default bacula)\n" +" -P specify database host (default NULL)\n" +" -w specify working directory\n" +" -j specify jobids\n" +" -p specify path\n" +" -f specify file\n" +" -l maximum tuple to fetch\n" +" -T truncate cache table before starting\n" +" -v verbose\n" +" -? print this message\n" +"\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1907 -msgid "ifolder" +#: src/tools/testls.c:47 +#, c-format +msgid "" +"\n" +"Usage: testls [-d debug_level] [-] [pattern1 ...]\n" +" -a print extended attributes (Win32 debug)\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -e specify file of exclude patterns\n" +" -i specify file of include patterns\n" +" -q quiet, don't print filenames (debug)\n" +" - read pattern(s) from stdin\n" +" -? print this message.\n" +"\n" +"Patterns are file inclusion -- normally directories.\n" +"Debug level >= 1 prints each file found.\n" +"Debug level >= 10 prints path/file for catalog.\n" +"Errors always printed.\n" +"Files/paths truncated is number with len > 255.\n" +"Truncation is only in catalog.\n" +"\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1911 -msgid "FileSet:" +#: src/tools/testls.c:143 +#, c-format +msgid "Could not open include file: %s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1913 -msgid "Client:" +#: src/tools/testls.c:156 +#, c-format +msgid "Could not open exclude file: %s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1915 -msgid "Storage:" +#: src/tools/testls.c:170 +#, c-format +msgid "Files seen = %d\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1917 -msgid "When:" +#: src/tools/testls.c:203 src/tools/testfind.c:310 +#, c-format +msgid "Err: Could not access %s: %s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1920 -msgid "Priority:" +#: src/tools/testls.c:206 src/tools/testfind.c:313 +#, c-format +msgid "Err: Could not follow ff->link %s: %s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:2028 -msgid "Restoring..." +#: src/tools/testls.c:209 src/tools/testfind.c:316 +#, c-format +msgid "Err: Could not stat %s: %s\n" msgstr "" -#: src/wx-console/console_thread.cpp:125 +#: src/tools/testls.c:212 src/tools/testfind.c:319 #, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Director \"%s\" in config file.\n" -"At least one CA certificate store is required.\n" +msgid "Skip: File not saved. No change. %s\n" msgstr "" -#: src/wx-console/console_thread.cpp:132 -msgid "" -"No Director resource defined in config file.\n" -"Without that I don't how to speak to the Director :-(\n" +#: src/tools/testls.c:215 src/tools/testfind.c:322 +#, c-format +msgid "Err: Attempt to backup archive. Not saved. %s\n" msgstr "" -#: src/wx-console/console_thread.cpp:151 +#: src/tools/testls.c:218 #, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Console \"%s\" in config file.\n" +msgid "Recursion turned off. Directory not entered. %s\n" msgstr "" -#: src/wx-console/console_thread.cpp:173 -msgid "Error while initializing windows sockets...\n" +#: src/tools/testls.c:221 +#, c-format +msgid "Skip: File system change prohibited. Directory not entered. %s\n" msgstr "" -#: src/wx-console/console_thread.cpp:189 -msgid "Error while cleaning up windows sockets...\n" +#: src/tools/testls.c:224 src/tools/testfind.c:325 +#, c-format +msgid "Err: Could not open directory %s: %s\n" msgstr "" -#: src/wx-console/console_thread.cpp:228 -msgid "Error while initializing library." +#: src/tools/testls.c:227 src/tools/testfind.c:328 +#, c-format +msgid "Err: Unknown file ff->type %d: %s\n" msgstr "" -#: src/wx-console/console_thread.cpp:256 -msgid "Cryptographic library initialization failed.\n" +#: src/tools/testfind.c:58 +#, c-format +msgid "" +"\n" +"Usage: testfind [-d debug_level] [-] [pattern1 ...]\n" +" -a print extended attributes (Win32 debug)\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -c specify config file containing FileSet resources\n" +" -f specify which FileSet to use\n" +" -? print this message.\n" +"\n" +"Patterns are used for file inclusion -- normally directories.\n" +"Debug level >= 1 prints each file found.\n" +"Debug level >= 10 prints path/file for catalog.\n" +"Errors are always printed.\n" +"Files/paths truncated is the number of files/paths with len > 255.\n" +"Truncation is only in the catalog.\n" +"\n" msgstr "" -#: src/wx-console/console_thread.cpp:260 -msgid "Please correct configuration file.\n" +#: src/tools/testfind.c:223 +#, c-format +msgid "" +"\n" +"Total files : %d\n" +"Max file length: %d\n" +"Max path length: %d\n" +"Files truncated: %d\n" +"Paths truncated: %d\n" +"Hard links : %d\n" msgstr "" -#: src/wx-console/console_thread.cpp:302 -msgid "Error : Library not initialized\n" +#: src/tools/testfind.c:266 +#, c-format +msgid "Reg: %s\n" msgstr "" -#: src/wx-console/console_thread.cpp:313 -msgid "Error : No configuration file loaded\n" +#: src/tools/testfind.c:288 +msgid "\t[will not descend: recursion turned off]" msgstr "" -#: src/wx-console/console_thread.cpp:323 -msgid "Connecting...\n" +#: src/tools/testfind.c:290 +msgid "\t[will not descend: file system change not allowed]" msgstr "" -#: src/wx-console/console_thread.cpp:339 -msgid "Error : No director defined in config file.\n" +#: src/tools/testfind.c:292 +msgid "\t[will not descend: disallowed file system]" msgstr "" -#: src/wx-console/console_thread.cpp:351 -msgid "Multiple directors found in your config file.\n" +#: src/tools/testfind.c:294 +msgid "\t[will not descend: disallowed drive type]" msgstr "" -#: src/wx-console/console_thread.cpp:360 +#: src/tools/testfind.c:378 #, c-format -msgid "Please choose a director (1-%d): " +msgid "===== Filename truncated to 255 chars: %s\n" msgstr "" -#: src/wx-console/console_thread.cpp:389 +#: src/tools/testfind.c:395 #, c-format -msgid "Passphrase for Console \"%s\" TLS private key: " +msgid "========== Path name truncated to 255 chars: %s\n" msgstr "" -#: src/wx-console/console_thread.cpp:410 +#: src/tools/testfind.c:404 #, c-format -msgid "Passphrase for Director \"%s\" TLS private key: " +msgid "========== Path length is zero. File=%s\n" msgstr "" -#: src/wx-console/console_thread.cpp:432 -msgid "Failed to connect to the director\n" +#: src/tools/testfind.c:407 +#, c-format +msgid "Path: %s\n" msgstr "" -#: src/wx-console/console_thread.cpp:442 -msgid "Connected\n" +#: src/tools/fstype.c:36 +#, c-format +msgid "" +"\n" +"Usage: fstype [-v] path ...\n" +"\n" +" Print the file system type a given file/directory is on.\n" +" The following options are supported:\n" +"\n" +" -v print both path and file system type.\n" +" -? print this message.\n" +"\n" msgstr "" -#: src/wx-console/console_thread.cpp:499 -msgid "<< Unexpected signal received : " +#: src/tools/cats_test.c:48 +#, c-format +msgid "" +"\n" +"Version: %s (%s)\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -n specify the database name (default bacula)\n" +" -u specify database user name (default bacula)\n" +" -P specify database host (default NULL)\n" +" -w specify working directory\n" +" -p specify path\n" +" -f specify file\n" +" -l maximum tuple to fetch\n" +" -q print only errors\n" +" -v verbose\n" +" -? print this message\n" +"\n" msgstr "" -#: src/wx-console/console_thread.cpp:519 -msgid "Connection terminated\n" +#: src/tools/cats_test.c:364 +#, c-format +msgid "Could not open, database \"%s\".\n" msgstr "" -#: src/wx-console/wxbconfigpanel.cpp:213 -msgid "Apply" +#: src/tools/ing_test.c:219 src/tools/ing_test.c:252 src/tools/ing_test.c:290 +msgid "Stmt went wrong\n" msgstr "" -#: src/wx-console/wxbhistorytextctrl.cpp:82 -#: src/wx-console/wxbhistorytextctrl.cpp:153 -#: src/wx-console/wxbmainframe.cpp:291 -msgid "Type your command below:" +#: src/tools/ing_test.c:308 +msgid "CREATE-Stmt went wrong\n" msgstr "" -#: src/wx-console/wxbhistorytextctrl.cpp:117 -msgid "Unknown command." +#: src/tools/ing_test.c:313 +msgid "DROP-Stmt went wrong\n" msgstr "" -#: src/wx-console/wxbhistorytextctrl.cpp:126 -msgid "Possible completions: " +#: examples/nagios/check_bacula/check_bacula.c:59 +#, c-format +msgid "" +"Copyright (C) 2005 Christian Masopust\n" +"Written by Christian Masopust (2005)\n" +"\n" +"Version: " msgstr "" -#: src/wx-console/main.cpp:119 -msgid "Bacula bwx-console" +#: src/lib/status.h:82 +msgid "===================================================================\n" msgstr "" -#: src/wx-console/main.cpp:124 src/wx-console/wxbmainframe.cpp:267 +#: src/baconfig.h:60 src/baconfig.h:61 src/baconfig.h:66 src/baconfig.h:67 #, c-format -msgid "Welcome to bacula bwx-console %s (%s)!\n" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:246 -msgid "&About...\tF1" +msgid "Failed ASSERT: %s\n" msgstr "" -#: src/wx-console/wxbmainframe.cpp:246 -msgid "Show about dialog" +#: src/qt-console/bcomm/dircomm.cpp:79 +#, c-format +msgid "Already connected\"%s\".\n" msgstr "" -#: src/wx-console/wxbmainframe.cpp:248 src/wx-console/wxbmainframe.cpp:619 -msgid "Connect" +#: src/qt-console/bcomm/dircomm.cpp:90 +#: src/qt-console/tray-monitor/tray-monitor.cpp:347 +#, c-format +msgid "Connecting to Director %s:%d" msgstr "" -#: src/wx-console/wxbmainframe.cpp:248 src/wx-console/wxbmainframe.cpp:620 -msgid "Connect to the director" +#: src/qt-console/bcomm/dircomm.cpp:92 +#, c-format +msgid "" +"Connecting to Director %s:%d\n" +"\n" msgstr "" -#: src/wx-console/wxbmainframe.cpp:249 -msgid "Disconnect" +#: src/qt-console/bcomm/dircomm.cpp:163 +#: src/qt-console/tray-monitor/tray-monitor.cpp:349 +msgid "Director daemon" msgstr "" -#: src/wx-console/wxbmainframe.cpp:249 -msgid "Disconnect of the director" +#: src/qt-console/bcomm/dircomm.cpp:201 +msgid "Initializing ..." msgstr "" -#: src/wx-console/wxbmainframe.cpp:251 -msgid "Change of configuration file" +#: src/qt-console/bcomm/dircomm.cpp:217 src/qt-console/console/console.cpp:130 +msgid "Connected" msgstr "" -#: src/wx-console/wxbmainframe.cpp:251 -msgid "Change your default configuration file" +#: src/qt-console/bcomm/dircomm.cpp:341 +msgid "Command completed ..." msgstr "" -#: src/wx-console/wxbmainframe.cpp:252 -msgid "Edit your configuration file" +#: src/qt-console/bcomm/dircomm.cpp:348 src/qt-console/console/console.cpp:367 +msgid "Processing command ..." msgstr "" -#: src/wx-console/wxbmainframe.cpp:254 -msgid "E&xit\tAlt-X" +#: src/qt-console/bcomm/dircomm.cpp:355 +msgid "At main prompt waiting for input ..." msgstr "" -#: src/wx-console/wxbmainframe.cpp:254 -msgid "Quit this program" +#: src/qt-console/bcomm/dircomm.cpp:362 src/qt-console/bcomm/dircomm.cpp:375 +msgid "At prompt waiting for input ..." msgstr "" -#: src/wx-console/wxbmainframe.cpp:258 -msgid "&File" +#: src/qt-console/bcomm/dircomm.cpp:383 +msgid "Command failed." msgstr "" -#: src/wx-console/wxbmainframe.cpp:259 -msgid "&Help" +#: src/qt-console/bcomm/dircomm.cpp:455 +msgid "Director disconnected." msgstr "" -#: src/wx-console/wxbmainframe.cpp:283 -msgid "" -"Warning : Unicode is disabled because you are using wxWidgets for GTK+ 1.2.\n" +#: src/qt-console/tray-monitor/tray_conf.cpp:165 +#, c-format +msgid "Monitor: name=%s FDtimeout=%s SDtimeout=%s\n" msgstr "" -#: src/wx-console/wxbmainframe.cpp:287 -msgid "" -"Warning : There is a problem with wxWidgets for GTK+ 2.0 without Unicode " -"support when handling non-ASCII filenames: Every non-ASCII character in such " -"filenames will be replaced by an interrogation mark.\n" -"If this behaviour disturbs you, please build bwx-console against a Unicode " -"version of wxWidgets for GTK+ 2.0.\n" -"---\n" +#: src/qt-console/tray-monitor/tray_conf.cpp:171 +#, c-format +msgid "Director: name=%s address=%s FDport=%d\n" msgstr "" -#: src/wx-console/wxbmainframe.cpp:298 -msgid "Send" +#: src/qt-console/tray-monitor/tray_conf.cpp:175 +#, c-format +msgid "Client: name=%s address=%s FDport=%d\n" msgstr "" -#: src/wx-console/wxbmainframe.cpp:375 src/wx-console/wxbmainframe.cpp:387 -msgid "Error while parsing command line arguments, using defaults.\n" +#: src/qt-console/tray-monitor/tray_conf.cpp:179 +#, c-format +msgid "Storage: name=%s address=%s SDport=%d\n" msgstr "" -#: src/wx-console/wxbmainframe.cpp:376 src/wx-console/wxbmainframe.cpp:388 -msgid "Usage: bwx-console [-c configfile] [-w tmp]\n" +#: src/qt-console/tray-monitor/tray_conf.cpp:183 +#: src/qt-console/bat_conf.cpp:145 +#, c-format +msgid "ConsoleFont: name=%s font face=%s\n" msgstr "" -#: src/wx-console/wxbmainframe.cpp:417 +#: src/qt-console/tray-monitor/tray-monitor.cpp:55 #, c-format msgid "" -"It seems that it is the first time you run bwx-console.\n" -"This file (%s) has been choosen as default configuration file.\n" -"Do you want to edit it? (if you click No you will have to select another " -"file)" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:419 -msgid "First run" +"\n" +"Version: %s (%s) %s %s %s\n" +"\n" +"Usage: tray-monitor [-c config_file] [-d debug_level]\n" +" -c set configuration file to file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -t test - read configuration and exit\n" +" -? print this message.\n" +"\n" msgstr "" -#: src/wx-console/wxbmainframe.cpp:436 +#: src/qt-console/tray-monitor/tray-monitor.cpp:204 #, c-format msgid "" -"Unable to read %s\n" -"Error: %s\n" -"Do you want to choose another one? (Press no to edit this file)" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:438 -msgid "Unable to read configuration file" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:450 -msgid "Please choose a configuration file to use" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:463 -msgid "This configuration file has been successfully read, use it as default?" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:464 -msgid "Configuration file read successfully" +"Error: %d Monitor resources defined in %s. You must define one and only one " +"Monitor resource.\n" msgstr "" -#: src/wx-console/wxbmainframe.cpp:474 +#: src/qt-console/tray-monitor/tray-monitor.cpp:236 #, c-format -msgid "Using this configuration file: %s\n" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:479 -msgid "Connecting to the director..." -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:494 -msgid "Failed to unregister a data parser !" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:502 -msgid "Quitting.\n" +msgid "" +"No Client, Storage or Director resource defined in %s\n" +"Without that I don't how to get status from the File, Storage or Director " +"Daemon :-(\n" msgstr "" -#: src/wx-console/wxbmainframe.cpp:517 +#: src/qt-console/tray-monitor/tray-monitor.cpp:251 +#, c-format msgid "" -"Welcome to Bacula bwx-console.\n" -"Written by Nicolas Boichat \n" -"Copyright (C), 2005-2007 Free Software Foundation Europe, e.V.\n" +"Invalid refresh interval defined in %s\n" +"This value must be greater or equal to 1 second and less or equal to 10 " +"minutes (read value: %d).\n" msgstr "" -#: src/wx-console/wxbmainframe.cpp:521 -msgid "About Bacula bwx-console" +#: src/qt-console/tray-monitor/tray-monitor.cpp:319 +#, c-format +msgid "Error, currentitem is not a Client or a Storage..\n" msgstr "" -#: src/wx-console/wxbmainframe.cpp:527 -msgid "Please choose your default configuration file" +#: src/qt-console/tray-monitor/tray-monitor.cpp:354 +#, c-format +msgid "Connecting to Client %s:%d" msgstr "" -#: src/wx-console/wxbmainframe.cpp:531 -msgid "Use this configuration file as default?" +#: src/qt-console/tray-monitor/tray-monitor.cpp:356 +msgid "File daemon" msgstr "" -#: src/wx-console/wxbmainframe.cpp:532 -msgid "Configuration file" +#: src/qt-console/tray-monitor/tray-monitor.cpp:361 +#, c-format +msgid "Connecting to Storage %s:%d" msgstr "" -#: src/wx-console/wxbmainframe.cpp:603 -msgid "Console thread terminated." +#: src/qt-console/tray-monitor/tray-monitor.cpp:367 +#: src/qt-console/tray-monitor/tray-monitor.cpp:397 +#, c-format +msgid "Error, currentitem is not a Client, a Storage or a Director..\n" msgstr "" -#: src/wx-console/wxbmainframe.cpp:611 -msgid "Connection to the director lost. Quit program?" +#: src/qt-console/tray-monitor/tray-monitor.cpp:372 +msgid "Cannot connect to daemon." msgstr "" -#: src/wx-console/wxbmainframe.cpp:612 -msgid "Connection lost" +#: src/qt-console/tray-monitor/tray-monitor.cpp:381 +#, c-format +msgid "Authentication error : %s" msgstr "" -#: src/wx-console/wxbmainframe.cpp:628 -msgid "Connected to the director." +#: src/qt-console/tray-monitor/tray-monitor.cpp:388 +msgid "Opened connection with Director daemon." msgstr "" -#: src/wx-console/wxbmainframe.cpp:651 -msgid "Reconnect" +#: src/qt-console/tray-monitor/tray-monitor.cpp:391 +msgid "Opened connection with File daemon." msgstr "" -#: src/wx-console/wxbmainframe.cpp:652 -msgid "Reconnect to the director" +#: src/qt-console/tray-monitor/tray-monitor.cpp:394 +msgid "Opened connection with Storage daemon." msgstr "" -#: src/wx-console/wxbmainframe.cpp:666 -msgid "Disconnected of the director." +#: src/qt-console/tray-monitor/tray-monitor.cpp:445 +msgid "Error : BNET_HARDEOF or BNET_ERROR" msgstr "" -#: src/wx-console/wxbmainframe.cpp:708 src/wx-console/wxbmainframe.cpp:725 -msgid "bwx-console: unexpected director's question." +#: src/qt-console/tray-monitor/tray-monitor.cpp:454 +msgid "Error : Connection closed." msgstr "" -#: src/qt-console/tray-monitor/tray-monitor.cpp:67 -#, c-format +#: src/qt-console/tray-monitor/authenticate.cpp:75 msgid "" -"\n" -"Version: %s (%s) %s %s %s\n" -"\n" -"Usage: tray-monitor [-c config_file] [-d debug_level]\n" -" -c set configuration file to file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -t test - read configuration and exit\n" -" -? print this message.\n" -"\n" -msgstr "" - -#: src/qt-console/bcomm/dircomm.cpp:92 -#, c-format -msgid "Already connected\"%s\".\n" +"Director authorization problem.\n" +"Most likely the passwords do not agree.\n" +"Please see " msgstr "" -#: src/qt-console/bcomm/dircomm.cpp:105 -#, c-format +#: src/qt-console/tray-monitor/authenticate.cpp:125 msgid "" -"Connecting to Director %s:%d\n" -"\n" -msgstr "" - -#: src/qt-console/bcomm/dircomm.cpp:208 -msgid "Initializing ..." -msgstr "" - -#: src/qt-console/bcomm/dircomm.cpp:224 src/qt-console/console/console.cpp:142 -msgid "Connected" -msgstr "" - -#: src/qt-console/bcomm/dircomm.cpp:348 -msgid "Command completed ..." -msgstr "" - -#: src/qt-console/bcomm/dircomm.cpp:355 src/qt-console/console/console.cpp:379 -msgid "Processing command ..." -msgstr "" - -#: src/qt-console/bcomm/dircomm.cpp:362 -msgid "At main prompt waiting for input ..." -msgstr "" - -#: src/qt-console/bcomm/dircomm.cpp:369 src/qt-console/bcomm/dircomm.cpp:382 -msgid "At prompt waiting for input ..." +"Director and Storage daemon passwords or names not the same.\n" +"Please see " msgstr "" -#: src/qt-console/bcomm/dircomm.cpp:390 -msgid "Command failed." +#: src/qt-console/tray-monitor/authenticate.cpp:132 +#, c-format +msgid "bdird, 2005. -# Philipp Storz , 2007. msgid "" msgstr "" "Project-Id-Version: de\n" "Report-Msgid-Bugs-To: bacula-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2013-02-19 18:26+0100\n" -"PO-Revision-Date: 2007-06-25 20:38+0200\n" -"Last-Translator: Philipp Storz \n" -"Language-Team: \n" -"Language: \n" +"POT-Creation-Date: 2014-03-23 22:51+0100\n" +"PO-Revision-Date: 2005-04-15 14:11+01200\n" +"Last-Translator: Kern Sibbald \n" +"Language-Team: German bacula-devel\n" +"Language: German\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-1\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: KBabel 1.11.4\n" - -#: src/dird/jobq.c:74 -#, c-format -msgid "pthread_attr_init: ERR=%s\n" -msgstr "pthread_attr_init: ERR=%s\n" -#: src/dird/jobq.c:83 -#, c-format -msgid "pthread_mutex_init: ERR=%s\n" -msgstr "pthread_mutex_init: ERR=%s\n" +#: src/console/authenticate.c:117 src/dird/authenticate.c:121 +msgid "" +"Authorization problem: Remote server did not advertise required TLS " +"support.\n" +msgstr "" +"Authorisationsproblem: Entfernter Server hat benötigte TLS Unterstützung " +"nicht angeboten.\n" -#: src/dird/jobq.c:89 -#, c-format -msgid "pthread_cond_init: ERR=%s\n" -msgstr "pthread_cond_init: ERR=%s\n" +#: src/console/authenticate.c:124 src/stored/authenticate.c:154 +#: src/stored/authenticate.c:267 src/stored/authenticate.c:376 +#: src/dird/authenticate.c:128 src/filed/authenticate.c:148 +#: src/filed/authenticate.c:276 +msgid "Authorization problem: Remote server requires TLS.\n" +msgstr "Authorisationsproblem: Enfernter Server erfordert TLS.\n" -#: src/dird/jobq.c:131 -#, c-format -msgid "pthread_cond_broadcast: ERR=%s\n" -msgstr "pthread_cond_broadcast: ERR=%s\n" +#: src/console/authenticate.c:133 +msgid "TLS negotiation failed\n" +msgstr "" -#: src/dird/jobq.c:139 +#: src/console/authenticate.c:147 +#: src/qt-console/tray-monitor/authenticate.cpp:84 #, c-format -msgid "pthread_cond_wait: ERR=%s\n" -msgstr "pthread_cond_wait: ERR=%s\n" +msgid "Bad response to Hello command: ERR=%s\n" +msgstr "" -#: src/dird/jobq.c:180 -#, c-format -msgid "Job %s waiting %d seconds for scheduled start time.\n" -msgstr "Job %s wartet %d Sekunden auf die geplante Startzeit.\n" +#: src/console/authenticate.c:154 +#: src/qt-console/tray-monitor/authenticate.cpp:91 +msgid "Director rejected Hello command\n" +msgstr "" -#: src/dird/jobq.c:220 src/dird/job.c:113 src/stored/dircmd.c:200 -#: src/stored/stored.c:560 -#, c-format -msgid "Unable to init job cond variable: ERR=%s\n" -msgstr "konnte job cond Variable nicht initialisieren: ERR=%s\n" +#: src/console/authenticate.c:166 +#, fuzzy +msgid "" +"Director authorization problem.\n" +"Most likely the passwords do not agree.\n" +"If you are using TLS, there may have been a certificate validation error " +"during the TLS handshake.\n" +"Please see " +msgstr "" +"Kann mit File daemon on \"%s:%d\" nicht authentisieren. Mögliche Ursachen:\n" +"Passworte oder Namen nicht gleich oder\n" +"Maximum Concurrent Jobs überschritten auf dem FD oder\n" +"FD Netzwerk durcheinander (Daemon neustarten).\n" +"Für Hilfe bitte unter http://www.bacula.org/rel-manual/faq." +"html#AuthorizationErrors nachsehen.\n" -#: src/dird/jobq.c:242 +#: src/console/console_conf.c:128 src/qt-console/bat_conf.cpp:129 #, c-format -msgid "pthread_thread_create: ERR=%s\n" -msgstr "pthread_thread_create: ERR=%s\n" +msgid "No record for %d %s\n" +msgstr "" -#: src/dird/jobq.c:352 +#: src/console/console_conf.c:137 #, c-format -msgid "pthread_cond_signal: ERR=%s\n" -msgstr "pthread_cond_signal: ERR=%s\n" +msgid "Console: name=%s rcfile=%s histfile=%s\n" +msgstr "" -#: src/dird/jobq.c:363 +#: src/console/console_conf.c:141 src/qt-console/bat_conf.cpp:138 #, c-format -msgid "pthread_create: ERR=%s\n" -msgstr "pthread_create: ERR=%s\n" +msgid "Director: name=%s address=%s DIRport=%d\n" +msgstr "" -#: src/dird/jobq.c:647 +#: src/console/console_conf.c:145 src/console/console_conf.c:221 +#: src/console/console_conf.c:266 src/console/console_conf.c:293 +#: src/stored/stored_conf.c:538 src/stored/stored_conf.c:628 +#: src/stored/stored_conf.c:663 src/filed/filed_conf.c:411 +#: src/filed/filed_conf.c:476 src/filed/filed_conf.c:506 +#: src/qt-console/bat_conf.cpp:149 src/qt-console/bat_conf.cpp:227 +#: src/qt-console/bat_conf.cpp:275 src/qt-console/bat_conf.cpp:305 #, c-format -msgid "Rescheduled Job %s at %s to re-run in %d seconds (%s).\n" +msgid "Unknown resource type %d\n" msgstr "" -" Job %s für %s erneut geplant um in %d seconds nachgestartet zu werden " -"(%s).\n" - -#: src/dird/jobq.c:703 src/dird/jobq.c:708 -msgid "previous Job" -msgstr "vorheriger Job" -#: src/dird/jobq.c:745 +#: src/console/console_conf.c:247 src/dird/dird_conf.c:1425 +#: src/dird/dird_conf.c:1440 src/filed/filed_conf.c:439 +#: src/qt-console/tray-monitor/tray_conf.cpp:276 +#: src/qt-console/bat_conf.cpp:253 #, c-format -msgid "" -"Job canceled. Attempt to read and write same device.\n" -" Read storage \"%s\" (From %s) -- Write storage \"%s\" (From %s)\n" -msgstr "" -"Job abgebrochen. Versuch auf das selbe Gerät zu lesen und zu schreiben.\n" -" lese storage \"%s\" (Von %s) -- schreib storage \"%s\" (Von %s)\n" +msgid "%s item is required in %s resource, but not found.\n" +msgstr "%s item wird in %s resource benötigt, wurde aber nicht gefunden.\n" -#: src/dird/ua_select.c:54 +#: src/console/console_conf.c:310 src/dird/dird_conf.c:1664 +#: src/filed/filed_conf.c:524 src/qt-console/tray-monitor/tray_conf.cpp:360 +#: src/qt-console/bat_conf.cpp:322 #, c-format -msgid "The current %s retention period is: %s\n" +msgid "Attempt to define second %s resource named \"%s\" is not permitted.\n" msgstr "" +"Der Versuch der Definition einer zweiten %s resource mit dem Namen \"%s\" " +"ist nicht erlaubt.\n" -#: src/dird/ua_select.c:59 -msgid "Continue? (yes/mod/no): " +#: src/console/console.c:114 +#, c-format +msgid "" +"\n" +"Version: " msgstr "" -#: src/dird/ua_select.c:62 src/dird/ua_run.c:219 -msgid "mod" +#: src/console/console.c:166 +msgid "input from file" msgstr "" -#: src/dird/ua_select.c:63 -msgid "Enter new retention period: " +#: src/console/console.c:167 +msgid "output to file" msgstr "" -#: src/dird/ua_select.c:67 -msgid "Invalid period.\n" +#: src/console/console.c:168 +msgid "quit" msgstr "" -#: src/dird/ua_select.c:143 -msgid "You have the following choices:\n" +#: src/console/console.c:169 +msgid "output to file and terminal" msgstr "" -#: src/dird/ua_select.c:159 -msgid "The defined Storage resources are:\n" +#: src/console/console.c:170 +msgid "sleep specified time" msgstr "" -#: src/dird/ua_select.c:167 src/dird/ua_dotcmds.c:734 src/dird/ua_cmds.c:995 -#: src/dird/ua_run.c:224 src/wx-console/wxbrestorepanel.cpp:339 -#: src/wx-console/wxbrestorepanel.cpp:355 -#: src/wx-console/wxbrestorepanel.cpp:479 -#: src/wx-console/wxbrestorepanel.cpp:480 -#: src/wx-console/wxbrestorepanel.cpp:490 -#: src/wx-console/wxbrestorepanel.cpp:491 -#: src/wx-console/wxbrestorepanel.cpp:1173 -#: src/wx-console/wxbrestorepanel.cpp:1176 -#: src/wx-console/wxbrestorepanel.cpp:1845 -#: src/wx-console/wxbrestorepanel.cpp:1916 -msgid "Storage" +#: src/console/console.c:171 +msgid "print current time" msgstr "" -#: src/dird/ua_select.c:167 -msgid "Select Storage resource" +#: src/console/console.c:172 +msgid "print Console's version" msgstr "" -#: src/dird/ua_select.c:182 src/dird/ua_restore.c:1296 -msgid "The defined FileSet resources are:\n" +#: src/console/console.c:173 +msgid "echo command string" msgstr "" -#: src/dird/ua_select.c:190 src/dird/ua_restore.c:1300 src/dird/ua_run.c:226 -msgid "FileSet" +#: src/console/console.c:174 +msgid "execute an external command" msgstr "" -#: src/dird/ua_select.c:190 src/dird/ua_restore.c:1300 -msgid "Select FileSet resource" +#: src/console/console.c:175 +msgid "exit = quit" msgstr "" -#: src/dird/ua_select.c:220 src/dird/ua_cmds.c:2029 -msgid "Could not find a Catalog resource\n" +#: src/console/console.c:176 +msgid "zed_keys = use zed keys instead of bash keys" msgstr "" -#: src/dird/ua_select.c:223 -msgid "You must specify a \"use \" command before continuing.\n" +#: src/console/console.c:177 +msgid "help listing" msgstr "" -#: src/dird/ua_select.c:229 -msgid "The defined Catalog resources are:\n" +#: src/console/console.c:179 +msgid "set command separator" msgstr "" -#: src/dird/ua_select.c:237 -msgid "Catalog" +#: src/console/console.c:213 +msgid ": is an invalid command\n" msgstr "" -#: src/dird/ua_select.c:237 -msgid "Select Catalog resource" +#: src/console/console.c:663 +msgid "Illegal separator character.\n" msgstr "" -#: src/dird/ua_select.c:255 src/dird/ua_select.c:281 -msgid "The defined Job resources are:\n" +#: src/console/console.c:696 +msgid "Command logic problem\n" msgstr "" -#: src/dird/ua_select.c:266 src/dird/ua_select.c:289 src/dird/ua_select.c:330 -#: src/dird/ua_select.c:1186 src/dird/dird_conf.c:670 src/dird/ua_prune.c:601 -#: src/dird/ua_run.c:225 -msgid "Job" -msgstr "Job" +#: src/console/console.c:911 +#, fuzzy, c-format +msgid "Can't find %s in Director list\n" +msgstr "Kann Director resource %s nicht finden\n" -#: src/dird/ua_select.c:266 src/dird/ua_select.c:289 -msgid "Select Job resource" +#: src/console/console.c:919 +msgid "Available Directors:\n" msgstr "" -#: src/dird/ua_select.c:308 +#: src/console/console.c:923 #, c-format -msgid "Error: Restore Job resource \"%s\" does not exist.\n" -msgstr "" - -#: src/dird/ua_select.c:322 -msgid "The defined Restore Job resources are:\n" +msgid "%2d: %s at %s:%d\n" msgstr "" -#: src/dird/ua_select.c:330 -msgid "Select Restore Job" +#: src/console/console.c:927 +msgid "Select Director by entering a number: " msgstr "" -#: src/dird/ua_select.c:347 -msgid "The defined Client resources are:\n" +#: src/console/console.c:934 +#, c-format +msgid "%s is not a number. You must enter a number between 1 and %d\n" msgstr "" -#: src/dird/ua_select.c:355 src/dird/ua_select.c:464 src/dird/ua_dotcmds.c:735 -#: src/dird/ua_cmds.c:996 src/dird/ua_run.c:230 -#: src/wx-console/wxbrestorepanel.cpp:336 -#: src/wx-console/wxbrestorepanel.cpp:354 -#: src/wx-console/wxbrestorepanel.cpp:431 -#: src/wx-console/wxbrestorepanel.cpp:432 -#: src/wx-console/wxbrestorepanel.cpp:442 -#: src/wx-console/wxbrestorepanel.cpp:443 -#: src/wx-console/wxbrestorepanel.cpp:700 -#: src/wx-console/wxbrestorepanel.cpp:1133 -#: src/wx-console/wxbrestorepanel.cpp:1136 -#: src/wx-console/wxbrestorepanel.cpp:1238 -#: src/wx-console/wxbrestorepanel.cpp:1838 -#: src/wx-console/wxbrestorepanel.cpp:1840 -#: src/wx-console/wxbrestorepanel.cpp:1914 -#: src/wx-console/wxbrestorepanel.cpp:1970 -msgid "Client" +#: src/console/console.c:941 +#, c-format +msgid "You must enter a number between 1 and %d\n" msgstr "" -#: src/dird/ua_select.c:355 -msgid "Select Client (File daemon) resource" -msgstr "" +#: src/console/console.c:1095 src/stored/stored.c:215 src/dird/dird.c:267 +#: src/filed/filed.c:204 src/qt-console/main.cpp:154 +msgid "Cryptography library initialization failed.\n" +msgstr "Initialisierung der Verschlüsselungsbibliothek fehlgeschlagen.\n" -#: src/dird/ua_select.c:382 +#: src/console/console.c:1099 src/stored/stored.c:219 src/dird/dird.c:271 +#: src/dird/dird.c:299 src/dird/dird.c:517 src/dird/dird.c:520 +#: src/filed/filed.c:209 src/qt-console/main.cpp:158 #, c-format -msgid "Error: Client resource %s does not exist.\n" -msgstr "" +msgid "Please correct configuration file: %s\n" +msgstr "Bitte die Konfigurationsdatei korrigieren: %s\n" -#: src/dird/ua_select.c:407 +#: src/console/console.c:1129 #, c-format -msgid "Could not find Client %s: ERR=%s" +msgid "Connecting to Director %s:%d\n" msgstr "" -#: src/dird/ua_select.c:417 src/dird/ua_select.c:471 +#: src/console/console.c:1146 src/qt-console/bcomm/dircomm.cpp:118 #, c-format -msgid "Could not find Client \"%s\": ERR=%s" +msgid "Failed to initialize TLS context for Console \"%s\".\n" msgstr "" -#: src/dird/ua_select.c:446 +#: src/console/console.c:1166 src/qt-console/bcomm/dircomm.cpp:141 #, c-format -msgid "Error obtaining client ids. ERR=%s\n" -msgstr "" - -#: src/dird/ua_select.c:450 -msgid "No clients defined. You must run a job before using this command.\n" +msgid "Failed to initialize TLS context for Director \"%s\".\n" msgstr "" -#: src/dird/ua_select.c:454 -msgid "Defined Clients:\n" +#: src/console/console.c:1198 +msgid "Enter a period to cancel a command.\n" msgstr "" -#: src/dird/ua_select.c:464 -msgid "Select the Client" -msgstr "" +#: src/console/console.c:1284 src/console/console.c:1314 +#: src/stored/stored.c:342 src/dird/dird.c:607 src/dird/dird.c:813 +#: src/dird/dird.c:868 src/dird/dird.c:907 src/filed/filed.c:366 +#: src/filed/filed.c:566 src/qt-console/main.cpp:213 +#: src/qt-console/main.cpp:243 +msgid "TLS required but not configured in Bacula.\n" +msgstr "TLS benötigt aber nicht konfiguriert in Bacula.\n" -#: src/dird/ua_select.c:497 src/dird/ua_select.c:521 src/dird/ua_select.c:566 +#: src/console/console.c:1292 src/qt-console/main.cpp:221 #, c-format -msgid "Could not find Pool \"%s\": ERR=%s" +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Director \"%s\" in %s. At least one CA certificate store is required.\n" msgstr "" -#: src/dird/ua_select.c:532 src/dird/ua_output.c:476 src/dird/ua_update.c:436 +#: src/console/console.c:1301 src/qt-console/main.cpp:230 #, c-format -msgid "Error obtaining pool ids. ERR=%s\n" +msgid "" +"No Director resource defined in %s\n" +"Without that I don't how to speak to the Director :-(\n" msgstr "" -#: src/dird/ua_select.c:536 -msgid "No pools defined. Use the \"create\" command to create one.\n" +#: src/console/console.c:1321 src/qt-console/main.cpp:251 +#, c-format +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Console \"%s\" in %s.\n" msgstr "" -#: src/dird/ua_select.c:540 -msgid "Defined Pools:\n" +#: src/console/console.c:1347 +msgid "Too many arguments on input command.\n" msgstr "" -#: src/dird/ua_select.c:542 src/dird/ua_select.c:562 src/dird/ua_update.c:365 -#: src/baconfig.h:88 -msgid "*None*" +#: src/console/console.c:1351 +msgid "First argument to input command must be a filename.\n" msgstr "" -#: src/dird/ua_select.c:553 src/dird/ua_select.c:666 src/dird/ua_update.c:616 -#: src/dird/ua_run.c:238 src/wx-console/wxbrestorepanel.cpp:338 -#: src/wx-console/wxbrestorepanel.cpp:527 -#: src/wx-console/wxbrestorepanel.cpp:537 -#: src/wx-console/wxbrestorepanel.cpp:1834 -msgid "Pool" +#: src/console/console.c:1357 +#, c-format +msgid "Cannot open file %s for input. ERR=%s\n" msgstr "" -#: src/dird/ua_select.c:553 -msgid "Select the Pool" +#: src/console/console.c:1389 +msgid "Too many arguments on output/tee command.\n" msgstr "" -#: src/dird/ua_select.c:591 +#: src/console/console.c:1406 #, c-format -msgid "No access to Pool \"%s\"\n" +msgid "Cannot open file %s for output. ERR=%s\n" msgstr "" -#: src/dird/ua_select.c:623 -msgid "Enter *MediaId or Volume name: " +#: src/console/console.c:1425 +msgid "Too many arguments. Enclose command in double quotes.\n" msgstr "" -#: src/dird/ua_select.c:658 -msgid "The defined Pool resources are:\n" -msgstr "" +#: src/console/console.c:1434 +#, fuzzy, c-format +msgid "Cannot popen(\"%s\", \"r\"): ERR=%s\n" +msgstr "Kann Ausdruck\"%s\"nicht auflösen: ERR=%s\n" -#: src/dird/ua_select.c:666 -msgid "Select Pool resource" +#: src/console/console.c:1446 src/stored/autochanger.c:665 +#, c-format +msgid "Autochanger error: ERR=%s\n" msgstr "" -#: src/dird/ua_select.c:690 src/dird/ua_restore.c:555 +#: src/cats/sql_list.c:46 #, c-format -msgid "Error: Pool resource \"%s\" does not exist.\n" -msgstr "" +msgid "Query failed: %s\n" +msgstr "Abfrage fehlgeschlagen: %s\n" -#: src/dird/ua_select.c:701 -msgid "Enter the JobId to select: " +#: src/cats/sql_list.c:262 +msgid "These JobIds have copies as follows:\n" msgstr "" -#: src/dird/ua_select.c:739 -#, c-format -msgid "Could not find Job \"%s\": ERR=%s" +#: src/cats/sql_list.c:264 +msgid "The catalog contains copies as follows:\n" msgstr "" -#: src/dird/ua_select.c:819 +#: src/cats/sql_get.c:139 #, c-format -msgid "Automatically selected %s: %s\n" -msgstr "" +msgid "Error fetching row: %s\n" +msgstr "Fehler beim holen der Zeile: %s\n" + +#: src/cats/sql_get.c:146 +#, fuzzy, c-format +msgid "get_file_record want 1 got rows=%d PathId=%s FilenameId=%s\n" +msgstr "get_file_record erwartet 1 erhalten rows=%d\n" -#: src/dird/ua_select.c:830 +#: src/cats/sql_get.c:154 #, c-format -msgid "" -"Your request has multiple choices for \"%s\". Selection is not possible in " -"batch mode.\n" -msgstr "" +msgid "File record for PathId=%s FilenameId=%s not found.\n" +msgstr "File Eintrag für PathId=%s FilenameId=%s nicht gefunden.\n" -#: src/dird/ua_select.c:848 +#: src/cats/sql_get.c:160 +msgid "File record not found in Catalog.\n" +msgstr "File Eintrag nicht im Catalog gefunden.\n" + +#: src/cats/sql_get.c:187 #, c-format -msgid "Selection list for \"%s\" is empty!\n" -msgstr "" +msgid "More than one Filename!: %s for file: %s\n" +msgstr "Mehr als einen Dateinamen gefunden! : %s für Datei: %s\n" -#: src/dird/ua_select.c:854 +#: src/cats/sql_get.c:193 src/cats/sql_get.c:246 src/cats/sql_get.c:623 +#: src/cats/sql_get.c:724 src/cats/sql_get.c:1043 src/cats/sql.c:341 +#: src/cats/sql.c:348 src/cats/sql_create.c:584 src/cats/postgresql.c:153 #, c-format -msgid "Automatically selected: %s\n" -msgstr "" +msgid "error fetching row: %s\n" +msgstr "Fehler beim holen von Zeile: %s\n" -#: src/dird/ua_select.c:866 -msgid "Selection aborted, nothing done.\n" -msgstr "" +#: src/cats/sql_get.c:197 +#, fuzzy, c-format +msgid "Get DB Filename record %s found bad record: %d\n" +msgstr "Get DB Filename record %s hat fehlerhaften Eintrag gefunden: %d\n" -#: src/dird/ua_select.c:871 +#: src/cats/sql_get.c:203 #, c-format -msgid "Please enter a number between 1 and %d\n" -msgstr "" - -#: src/dird/ua_select.c:920 -msgid "Storage name given twice.\n" -msgstr "" +msgid "Filename record: %s not found.\n" +msgstr "Filename record: %s nicht gefunden.\n" -#: src/dird/ua_select.c:937 +#: src/cats/sql_get.c:207 #, c-format -msgid "Expecting jobid=nn command, got: %s\n" -msgstr "" +msgid "Filename record: %s not found in Catalog.\n" +msgstr "Filename record: %s nicht in Catalog gefunden.\n" -#: src/dird/ua_select.c:941 +#: src/cats/sql_get.c:239 src/cats/sql_create.c:577 #, c-format -msgid "JobId %s is not running.\n" -msgstr "" +msgid "More than one Path!: %s for path: %s\n" +msgstr "Mehr als ein Pfad!: %s für Pfad: %s\n" -#: src/dird/ua_select.c:951 +#: src/cats/sql_get.c:250 #, c-format -msgid "Expecting job=xxx, got: %s.\n" -msgstr "" +msgid "Get DB path record %s found bad record: %s\n" +msgstr "Get DB path record %s fehlerhaften Eintrag gefunden: %s\n" -#: src/dird/ua_select.c:955 src/dird/ua_select.c:967 +#: src/cats/sql_get.c:263 #, c-format -msgid "Job \"%s\" is not running.\n" -msgstr "" +msgid "Path record: %s not found.\n" +msgstr "Path record: %s nicht gefunden.\n" -#: src/dird/ua_select.c:963 +#: src/cats/sql_get.c:267 #, c-format -msgid "Expecting ujobid=xxx, got: %s.\n" -msgstr "" +msgid "Path record: %s not found in Catalog.\n" +msgstr "Path record: %s nicht in Catalog gefunden.\n" -#: src/dird/ua_select.c:983 +#: src/cats/sql_get.c:306 #, c-format -msgid "Storage resource \"%s\": not found\n" -msgstr "" +msgid "No Job found for JobId %s\n" +msgstr "Kein Job für JobId %s gefunden\n" -#: src/dird/ua_select.c:1015 -msgid "Enter autochanger drive[0]: " -msgstr "" +#: src/cats/sql_get.c:379 src/cats/sql_get.c:436 +#, c-format +msgid "No volumes found for JobId=%d\n" +msgstr "Keine volumes für JobId=%d gefunden\n" -#: src/dird/ua_select.c:1036 -msgid "Enter autochanger slot: " -msgstr "" +#: src/cats/sql_get.c:385 src/cats/sql_get.c:447 +#, c-format +msgid "Error fetching row %d: ERR=%s\n" +msgstr "Fehler beim Holen von Zeile %d: ERR=%s\n" -#: src/dird/ua_select.c:1066 -msgid "Media Types defined in conf file:\n" -msgstr "" +#: src/cats/sql_get.c:399 +#, c-format +msgid "No Volume for JobId %d found in Catalog.\n" +msgstr "Kein Volume für JobId %d in Catalog gefunden.\n" -#: src/dird/ua_select.c:1072 -msgid "Media Type" -msgstr "" +#: src/cats/sql_get.c:540 +#, c-format +msgid "Pool id select failed: ERR=%s\n" +msgstr "Pool id select fehlgeschlagen: ERR=%s\n" -#: src/dird/ua_select.c:1072 -msgid "Select the Media Type" -msgstr "" +#: src/cats/sql_get.c:577 +#, c-format +msgid "Client id select failed: ERR=%s\n" +msgstr "Client id select fehlgeschlagen: ERR=%s\n" -#: src/dird/ua_select.c:1111 +#: src/cats/sql_get.c:618 #, c-format -msgid "JobId %s is not running. Use Job name to %s inactive jobs.\n" -msgstr "" +msgid "More than one Pool!: %s\n" +msgstr "Mehr als ein Pool!: %s\n" + +#: src/cats/sql_get.c:681 +msgid "Pool record not found in Catalog.\n" +msgstr "Pool Eintrag in Catalog nicht gefunden.\n" -#: src/dird/ua_select.c:1120 src/dird/ua_select.c:1130 +#: src/cats/sql_get.c:719 #, c-format -msgid "Warning Job %s is not running. Continuing anyway ...\n" -msgstr "" +msgid "More than one Client!: %s\n" +msgstr "Mehr als ein Client!: %s\n" -#: src/dird/ua_select.c:1140 src/dird/ua_cmds.c:692 src/dird/ua_cmds.c:738 -msgid "Unauthorized command from this console.\n" -msgstr "" +#: src/cats/sql_get.c:736 src/cats/sql_get.c:740 +msgid "Client record not found in Catalog.\n" +msgstr "Client Eintrag nicht in Catalog gefunden\n" -#: src/dird/ua_select.c:1165 src/stored/status.c:538 src/filed/status.c:241 -msgid "No Jobs running.\n" -msgstr "" +#: src/cats/sql_get.c:767 +#, c-format +msgid "More than one Counter!: %d\n" +msgstr "Mehr als ein Counter!: %d\n" -#: src/dird/ua_select.c:1167 -msgid "None of your jobs are running.\n" -msgstr "" +#: src/cats/sql_get.c:772 +#, c-format +msgid "error fetching Counter row: %s\n" +msgstr "Fehler beim Holen der Counter Zeile: %s\n" -#: src/dird/ua_select.c:1172 -msgid "Select Job:\n" -msgstr "" +#: src/cats/sql_get.c:792 +#, c-format +msgid "Counter record: %s not found in Catalog.\n" +msgstr "Counter Eintrag: %s in Catalog nicht gefunden.\n" -#: src/dird/ua_select.c:1181 +#: src/cats/sql_get.c:832 #, c-format -msgid "JobId=%s Job=%s" -msgstr "" +msgid "Error got %s FileSets but expected only one!\n" +msgstr "Fehler erhalten %s FileSets aber nur einen erwartet!\n" -#: src/dird/ua_select.c:1185 +#: src/cats/sql_get.c:837 #, c-format -msgid "Choose Job to %s" -msgstr "" +msgid "FileSet record \"%s\" not found.\n" +msgstr "FileSet Eintrag \"%s\" nicht gefunden\n" -#: src/dird/ua_select.c:1192 +#: src/cats/sql_get.c:847 +msgid "FileSet record not found in Catalog.\n" +msgstr "FileSet Eintrag in Catalog nicht gefunden.\n" + +#: src/cats/sql_get.c:943 #, c-format -msgid "" -"Cancel: %s\n" -"\n" -"%s" -msgstr "" +msgid "Media id select failed: ERR=%s\n" +msgstr "Media id select fehlgeschlagen: ERR=%s\n" -#: src/dird/ua_select.c:1193 -msgid "Confirm cancel?" -msgstr "" +#: src/cats/sql_get.c:981 +#, fuzzy, c-format +msgid "query dbids failed: ERR=%s\n" +msgstr "Abfrage gescheitert: %s: ERR=%s\n" -#: src/dird/ua_select.c:1199 -msgid "Confirm cancel (yes/no): " -msgstr "" +#: src/cats/sql_get.c:1038 +#, c-format +msgid "More than one Volume!: %s\n" +msgstr "Mehr als ein Volume!: %s\n" -#: src/dird/ua_select.c:1208 src/dird/ua_cmds.c:733 src/dird/ua_cmds.c:1100 +#: src/cats/sql_get.c:1094 #, c-format -msgid "Job \"%s\" not found.\n" -msgstr "" +msgid "Media record MediaId=%s not found.\n" +msgstr "Media Eintrag MediaId=%s nicht gefunden.\n" -#: src/dird/bsr.c:173 +#: src/cats/sql_get.c:1097 #, c-format -msgid "Unable to get Job record. ERR=%s\n" -msgstr "Konnte Job Eintrag nicht holen. ERR=%s\n" +msgid "Media record for Volume \"%s\" not found.\n" +msgstr "Media Eintrag für Volume \"%s\" nicht gefunden.\n" -#: src/dird/bsr.c:184 +#: src/cats/sql_get.c:1104 #, c-format -msgid "Unable to get Job Volume Parameters. ERR=%s\n" -msgstr "Konnte Job Volume Parameter nicht holen. ERR=%s\n" +msgid "Media record for MediaId=%u not found in Catalog.\n" +msgstr "Media Eintrag für MediaId=%u in Catalog nicht gefunden.\n" -#: src/dird/bsr.c:232 +#: src/cats/sql_get.c:1107 #, c-format -msgid "Unable to create bootstrap file %s. ERR=%s\n" -msgstr "Konnte bootstrap Datei %s nicht erzeugen. ERR=%s\n" +msgid "Media record for Vol=%s not found in Catalog.\n" +msgstr "Media Eintrag für Vol=%s in Catalog nicht gefunden.\n" -#: src/dird/bsr.c:241 -#, fuzzy -msgid "No files found to read. No bootstrap file written.\n" +#: src/cats/sql_get.c:1140 src/cats/sql_create.c:1183 +msgid "ERR=JobIds are empty\n" msgstr "" -"Keine Dateien für Wiederherstellung/Migration gefunden. Keine Bootstrap " -"Datei geschrieben.\n" - -#: src/dird/bsr.c:245 -msgid "Error writing bsr file.\n" -msgstr "Fehler beim schreiben der bsr Datei.\n" -#: src/dird/bsr.c:250 +#: src/cats/sql_find.c:86 src/cats/sql_find.c:115 src/cats/sql_find.c:170 #, c-format -msgid "Bootstrap records written to %s\n" -msgstr "Bootstrap Einträge geschrieben nach %s\n" - -#: src/dird/bsr.c:298 msgid "" -"The job will require the following\n" -" Volume(s) Storage(s) SD Device(s)\n" -"===========================================================================\n" +"Query error for start time request: ERR=%s\n" +"CMD=%s\n" msgstr "" -"Der Job wird folgendes benötigen:\n" -" Volume(s) Storage(s) SD Device(s)\n" -"===========================================================================\n" +"Fehler bei Abfrage von Startzeit: ERR=%s\n" +"CMD=%s\n" -#: src/dird/bsr.c:317 -msgid "No Volumes found to restore.\n" -msgstr "Keine Volumes zum Wiederherstellen gefunden.\n" +#: src/cats/sql_find.c:92 src/cats/sql_find.c:176 +msgid "No prior Full backup Job record found.\n" +msgstr "Keinen vorherigen \"Full backup\" Job Eintrag gefunden.\n" + +#: src/cats/sql_find.c:104 +#, c-format +msgid "Unknown level=%d\n" +msgstr "Unbekannter level=%d\n" -#: src/dird/bsr.c:319 +#: src/cats/sql_find.c:121 +#, c-format msgid "" -"\n" -"Volumes marked with \"*\" are online.\n" +"No Job record found: ERR=%s\n" +"CMD=%s\n" msgstr "" +"Kein \"Job\" Eintrag gefunden: ERR=%s\n" +"CMD=%s\n" -#: src/dird/ua_server.c:69 +#: src/cats/sql_find.c:279 #, c-format -msgid "Cannot create UA thread: %s\n" +msgid "Unknown Job level=%d\n" +msgstr "Unbekannter Job level=%d\n" + +#: src/cats/sql_find.c:289 +#, c-format +msgid "No Job found for: %s.\n" +msgstr "Kein Job gefunden für: %s.\n" + +#: src/cats/sql_find.c:300 +#, c-format +msgid "No Job found for: %s\n" +msgstr "Keinen Job gefunden für: %s\n" + +#: src/cats/sql_find.c:386 +#, c-format +msgid "Request for Volume item %d greater than max %d or less than 1\n" msgstr "" +"Anforderung von \"Volume item\" %d größer als Max %d oder weniger als 1\n" -#: src/dird/ua_server.c:159 -msgid "You have messages.\n" +#: src/cats/sql_find.c:401 +#, fuzzy, c-format +msgid "No Volume record found for item %d.\n" +msgstr "Kein Volume Eintrag gefunden für item %d.\n" + +#: src/cats/cats_dummy.c:27 +msgid "Please replace this null libbaccats library with a proper one.\n" msgstr "" -#: src/dird/verify.c:86 src/dird/verify.c:318 +#: src/cats/sql.c:185 #, c-format -msgid "Unimplemented Verify level %d(%c)\n" +msgid "" +"Potential performance problem:\n" +"max_connections=%d set for %s database \"%s\" should be larger than " +"Director's MaxConcurrentJobs=%d\n" msgstr "" -#: src/dird/verify.c:148 +#: src/cats/sql.c:230 +#, c-format msgid "" -"Unable to find JobId of previous InitCatalog Job.\n" -"Please run a Verify with Level=InitCatalog before\n" -"running the current Job.\n" +"query %s failed:\n" +"%s\n" msgstr "" +"Abfrage %s gescheitert:\n" +"%s\n" -#: src/dird/verify.c:153 -msgid "Unable to find JobId of previous Job for this client.\n" +#: src/cats/sql.c:252 +#, c-format +msgid "" +"insert %s failed:\n" +"%s\n" msgstr "" +"einfügen %s gescheitert:\n" +"%s\n" -#: src/dird/verify.c:170 +#: src/cats/sql.c:262 #, c-format -msgid "Could not get job record for previous Job. ERR=%s" -msgstr "" +msgid "Insertion problem: affected_rows=%s\n" +msgstr "Problem beim Einfügen: affected_rows=%s\n" -#: src/dird/verify.c:176 +#: src/cats/sql.c:283 #, c-format -msgid "Last Job %d did not terminate normally. JobStatus=%c\n" +msgid "" +"update %s failed:\n" +"%s\n" msgstr "" +"Aktualisierung %s gescheitert:\n" +"%s\n" + +#: src/cats/sql.c:293 +#, fuzzy, c-format +msgid "Update failed: affected_rows=%s for %s\n" +msgstr "Aktualisierungsproblem: affected_rows=%s\n" -#: src/dird/verify.c:180 +#: src/cats/sql.c:315 #, c-format -msgid "Verifying against JobId=%d Job=%s\n" +msgid "" +"delete %s failed:\n" +"%s\n" msgstr "" +"löschen von %s fehlgeschlagen:\n" +"%s\n" -#: src/dird/verify.c:219 +#: src/cats/sql.c:409 #, c-format -msgid "Start Verify JobId=%s Level=%s Job=%s\n" -msgstr "" +msgid "Path length is zero. File=%s\n" +msgstr "Pfadlänge ist null. Datei=%s\n" -#: src/dird/verify.c:305 -msgid "Deprecated feature ... use bootstrap.\n" -msgstr "" +#: src/cats/sql.c:604 +msgid "No results to list.\n" +msgstr "Keine Ergebnisse zu \"list\" Kommando.\n" -#: src/dird/verify.c:372 +#: src/cats/sql.c:722 +#, fuzzy +msgid "Could not init database batch connection\n" +msgstr "Konnte Datenbank \"%s\" nicht öffen.\n" + +#: src/cats/sql.c:728 +#, fuzzy, c-format +msgid "Could not open database \"%s\": ERR=%s\n" +msgstr "Konnte Datenbank \"%s\" nicht öffen.\n" + +#: src/cats/sql_create.c:89 #, c-format -msgid "Unimplemented verify level %d\n" -msgstr "" +msgid "Create DB Job record %s failed. ERR=%s\n" +msgstr "Erzeugung von DB Job Eintrag %s fehlgeschlagen. ERR=%s\n" -#: src/dird/verify.c:421 -msgid "Verify OK" -msgstr "" +#: src/cats/sql_create.c:133 +#, c-format +msgid "Create JobMedia record %s failed: ERR=%s\n" +msgstr "Erzeugung von JobMedia Eintrag %s fehlgeschlagen: ERR=%s\n" -#: src/dird/verify.c:425 -msgid "*** Verify Error ***" -msgstr "" +#: src/cats/sql_create.c:142 +#, c-format +msgid "Update Media record %s failed: ERR=%s\n" +msgstr "Aktualisierung von Media Eintrag %s fehlgeschlagen: ERR=%s\n" -#: src/dird/verify.c:429 -msgid "Verify warnings" -msgstr "" +#: src/cats/sql_create.c:177 +#, c-format +msgid "pool record %s already exists\n" +msgstr "pool Eintrag %s bereits vorhanden\n" -#: src/dird/verify.c:432 -msgid "Verify Canceled" -msgstr "" +#: src/cats/sql_create.c:209 +#, c-format +msgid "Create db Pool record %s failed: ERR=%s\n" +msgstr "Erzeugung von db Pool Eintrag %s fehlgeschlagen: ERR=%s\n" -#: src/dird/verify.c:435 -msgid "Verify Differences" -msgstr "" +#: src/cats/sql_create.c:242 +#, c-format +msgid "Device record %s already exists\n" +msgstr "Device Eintrag %s bereits vorhanden\n" -#: src/dird/verify.c:440 +#: src/cats/sql_create.c:259 #, c-format -msgid "Inappropriate term code: %d %c\n" -msgstr "" +msgid "Create db Device record %s failed: ERR=%s\n" +msgstr "Erzeugung von db Device Eintrag %s fehlgeschlagen: ERR=%s\n" -#: src/dird/verify.c:454 -#, fuzzy, c-format -msgid "" -"%s %s %s (%s):\n" -" Build OS: %s %s %s\n" -" JobId: %d\n" -" Job: %s\n" -" FileSet: %s\n" -" Verify Level: %s\n" -" Client: %s\n" -" Verify JobId: %d\n" -" Verify Job: %s\n" -" Start time: %s\n" -" End time: %s\n" -" Files Expected: %s\n" -" Files Examined: %s\n" -" Non-fatal FD errors: %d\n" -" FD termination status: %s\n" -" SD termination status: %s\n" -" Termination: %s\n" -"\n" -msgstr "" -"%s %s (%s): %s\n" -" JobId: %d\n" -" Job: %s\n" -" Client: %s\n" -" Start time: %s\n" -" End time: %s\n" -" Dateien erwartet: %s\n" -" Dateien. wiederhergestellt: %s\n" -" Bytes wiederhergestellt: %s\n" -" Geschwindigkeit: %.1f KB/s\n" -" FD Fehler: %d\n" -" FD Beendigungsstatus: %s\n" -" SD Beendigungsstatus: %s\n" -" Beendigungsstatus: %s\n" -"\n" - -#: src/dird/verify.c:489 -#, fuzzy, c-format -msgid "" -"%s %s %s (%s):\n" -" Build: %s %s %s\n" -" JobId: %d\n" -" Job: %s\n" -" FileSet: %s\n" -" Verify Level: %s\n" -" Client: %s\n" -" Verify JobId: %d\n" -" Verify Job: %s\n" -" Start time: %s\n" -" End time: %s\n" -" Files Examined: %s\n" -" Non-fatal FD errors: %d\n" -" FD termination status: %s\n" -" Termination: %s\n" -"\n" -msgstr "" -"%s %s (%s): %s\n" -" JobId: %d\n" -" Job: %s\n" -" Client: %s\n" -" Start time: %s\n" -" End time: %s\n" -" Dateien erwartet: %s\n" -" Dateien. wiederhergestellt: %s\n" -" Bytes wiederhergestellt: %s\n" -" Geschwindigkeit: %.1f KB/s\n" -" FD Fehler: %d\n" -" FD Beendigungsstatus: %s\n" -" SD Beendigungsstatus: %s\n" -" Beendigungsstatus: %s\n" -"\n" - -#: src/dird/verify.c:567 -#, c-format -msgid "" -"bird set configuration file to file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -f run in foreground (for debugging)\n" -" -g groupid\n" -" -m print kaboom output (for debugging)\n" -" -r run now\n" -" -s no signals\n" -" -t test - read configuration and exit\n" -" -u userid\n" -" -v verbose user messages\n" -" -? print this message.\n" -"\n" -msgstr "" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: dird [-f -s] [-c config_file] [-d debug_level] [config_file]\n" -" -c setze Konfigurationsdatei auf Datei\n" -" -dnn setze debug level auf nn\n" -" -f starte im Vordergrund (für debugging Zwecke)\n" -" -g groupid\n" -" -r starte jetzt\n" -" -s no signals\n" -" -t test - Konfiguration Lesen und beenden\n" -" -u userid\n" -" -v ausführliche Benutzer Meldungen\n" -" -? diese Meldung ausgeben.\n" -"\n" - -#: src/dird/dird.c:296 src/stored/stored.c:227 src/console/console.c:1109 -#: src/filed/filed.c:218 src/qt-console/main.cpp:165 -msgid "Cryptography library initialization failed.\n" -msgstr "Initialisierung der Verschlüsselungsbibliothek fehlgeschlagen.\n" - -#: src/dird/dird.c:300 src/dird/dird.c:328 src/dird/dird.c:560 -#: src/dird/dird.c:563 src/stored/stored.c:231 src/console/console.c:1113 -#: src/filed/filed.c:223 src/qt-console/main.cpp:169 -#, c-format -msgid "Please correct configuration file: %s\n" -msgstr "Bitte die Konfigurationsdatei korrigieren: %s\n" - -#: src/dird/dird.c:546 -msgid "Too many open reload requests. Request ignored.\n" -msgstr "zu viele offene reload Anforderungen, Anforderung ignoriert.\n" - -#: src/dird/dird.c:561 -msgid "Out of reload table entries. Giving up.\n" -msgstr "Keine reload table Einträge übrig. Gebe auf.\n" - -#: src/dird/dird.c:564 -msgid "Resetting previous configuration.\n" -msgstr "Vorherige Konfiguration zurückgesetzt.\n" - -#: src/dird/dird.c:628 -#, c-format -msgid "" -"No Director resource defined in %s\n" -"Without that I don't know who I am :-(\n" -msgstr "" -"Keine Director resource definiert in %s\n" -"Ohne dies weiss ich nicht wer ich bin :-(\n" - -#: src/dird/dird.c:636 src/filed/filed.c:350 -#, c-format -msgid "No Messages resource defined in %s\n" -msgstr "Keine Messages resource definiert in %s\n" - -#: src/dird/dird.c:641 -#, c-format -msgid "Only one Director resource permitted in %s\n" -msgstr "Nur eine Director resource erlaubt in %s\n" - -#: src/dird/dird.c:650 src/dird/dird.c:856 src/dird/dird.c:911 -#: src/dird/dird.c:950 src/stored/stored.c:354 src/console/console.c:1296 -#: src/console/console.c:1326 src/filed/filed.c:357 src/filed/filed.c:516 -#: src/wx-console/console_thread.cpp:118 src/wx-console/console_thread.cpp:144 -#: src/qt-console/main.cpp:224 src/qt-console/main.cpp:254 -msgid "TLS required but not configured in Bacula.\n" -msgstr "TLS benötigt aber nicht konfiguriert in Bacula.\n" - -#: src/dird/dird.c:658 src/stored/stored.c:410 src/filed/filed.c:526 -#, c-format -msgid "\"TLS Certificate\" file not defined for Director \"%s\" in %s.\n" -msgstr "\"TLS Certificate\" Datei nicht für Director definiert \"%s\" in %s.\n" - -#: src/dird/dird.c:664 src/stored/stored.c:416 src/filed/filed.c:532 -#, c-format -msgid "\"TLS Key\" file not defined for Director \"%s\" in %s.\n" -msgstr "\"TLS Key\" Datei nicht für Director definiert \"%s\" in %s.\n" - -#: src/dird/dird.c:671 src/stored/stored.c:422 src/filed/filed.c:538 -#, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Director \"%s\" in %s. At least one CA certificate store is required when " -"using \"TLS Verify Peer\".\n" -msgstr "" -"Weder \"TLS CA Certificate\" noch \"TLS CA Certificate Dir\" sind für " -"Director \"%s\" in %s definert. Mindestens ein CA certificate store wird " -"benötigt wenn \"TLS Verify Peer\" eingesetzt wird.\n" - -#: src/dird/dird.c:690 src/stored/stored.c:441 src/filed/filed.c:557 -#, c-format -msgid "Failed to initialize TLS context for Director \"%s\" in %s.\n" -msgstr "Konnte TLS context für Director nicht initialisieren \"%s\" in %s.\n" - -#: src/dird/dird.c:698 -#, c-format -msgid "No Job records defined in %s\n" -msgstr "Keine Job records definiert in %s\n" - -#: src/dird/dird.c:756 src/dird/dird.c:769 -#, c-format -msgid "Hey something is wrong. p=0x%lu\n" -msgstr "Hey etwas läuft schief. p=0x%lu\n" - -#: src/dird/dird.c:830 -#, c-format -msgid "\"%s\" directive in Job \"%s\" resource is required, but not found.\n" -msgstr "" -"\"%s\" Directive in Job \"%s\" resource wird benötigt, wurde aber nicht " -"gefunden.\n" - -#: src/dird/dird.c:837 -msgid "Too many items in Job resource\n" -msgstr "zu viele items in Job resource\n" - -#: src/dird/dird.c:841 -#, c-format -msgid "No storage specified in Job \"%s\" nor in Pool.\n" -msgstr "Weder storage noch Pool in Job \"%s\" definiert.\n" - -#: src/dird/dird.c:865 -#, c-format -msgid "\"TLS Certificate\" file not defined for Console \"%s\" in %s.\n" -msgstr "\"TLS Certificate\" Datei nicht definiert für Console \"%s\" in %s.\n" - -#: src/dird/dird.c:871 -#, c-format -msgid "\"TLS Key\" file not defined for Console \"%s\" in %s.\n" -msgstr "\"TLS Key\" Datei nicht definiert für Console \"%s\" in %s.\n" - -#: src/dird/dird.c:878 -#, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Console \"%s\" in %s. At least one CA certificate store is required when " -"using \"TLS Verify Peer\".\n" -msgstr "" -"Weder \"TLS CA Certificate\" noch \"TLS CA Certificate Dir\" sind definiert " -"fürConsole \"%s\" in %s. Mindestens ein CA certificate store wird benötigt " -"beiEinsatz von \"TLS Verify Peer\".\n" - -#: src/dird/dird.c:895 src/dird/dird.c:935 src/filed/filed.c:382 -#, c-format -msgid "Failed to initialize TLS context for File daemon \"%s\" in %s.\n" -msgstr "" -"Konnte TLS context für File daemon \"%s\" in %s nicht initialisieren.\n" - -#: src/dird/dird.c:918 -#, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"File daemon \"%s\" in %s.\n" -msgstr "" -"Weder \"TLS CA Certificate\" noch \"TLS CA Certificate Dir\" sind definiert " -"für File daemon \"%s\" in %s.\n" - -#: src/dird/dird.c:959 -#, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Storage \"%s\" in %s.\n" -msgstr "" -"Weder \"TLS CA Certificate\" noch \"TLS CA Certificate Dir\" sind definiert " -"fürStorage \"%s\" in %s.\n" - -#: src/dird/dird.c:975 src/stored/stored.c:394 -#, c-format -msgid "Failed to initialize TLS context for Storage \"%s\" in %s.\n" -msgstr "Konnte TLS context für Storage \"%s\" in %s nicht initialisieren.\n" - -#: src/dird/dird.c:1014 src/dird/dird.c:1016 -#, c-format -msgid "Could not open Catalog \"%s\", database \"%s\".\n" -msgstr "Konnte Catalog \"%s\", database \"%s\" nicht öffnen.\n" - -#: src/dird/dird.c:1019 src/tools/cats_test.c:377 -#, c-format -msgid "%s" -msgstr "" - -#: src/dird/dird.c:1098 -#, fuzzy, c-format -msgid "Could not create storage record for %s\n" -msgstr "Kann Storage resource %s nicht finden\n" - -#: src/dird/dird.c:1106 -#, fuzzy, c-format -msgid "Could not update storage record for %s\n" -msgstr "Kann Storage resource %s nicht finden\n" - -#: src/dird/dird.c:1181 src/dird/migrate.c:1072 src/stored/stored.c:491 -#, c-format -msgid "Could not compile regex pattern \"%s\" ERR=%s\n" -msgstr "Konnte regex pattern \"%s\" nicht kompilieren ERR=%s\n" - -#: src/dird/inc_conf.c:312 -#, fuzzy, c-format -msgid "Expected a strip path positive integer, got:%s:" -msgstr "fstype Ausdruck erwartet, erhalten: %s\n" - -#: src/dird/inc_conf.c:332 -#, c-format -msgid "Expected a FileSet option keyword, got:%s:" -msgstr "FileSet option Schlüsselwort erwartet, erhalten:%s:" - -#: src/dird/inc_conf.c:365 -msgid "Old style Include/Exclude not supported\n" -msgstr "veraltete Include/Exclude Anweisung nicht unterstützt\n" - -#: src/dird/inc_conf.c:393 src/dird/inc_conf.c:739 src/dird/dird_conf.c:2022 -#, c-format -msgid "Expecting keyword, got: %s\n" -msgstr "Schlüsselwort erwartet, erhalten:%s\n" - -#: src/dird/inc_conf.c:401 src/dird/inc_conf.c:745 src/dird/dird_conf.c:2028 -#: src/lib/parse_conf.c:976 -#, c-format -msgid "expected an equals, got: %s" -msgstr "Erwartete ein \"ist gleich\", erhalten: %s" - -#: src/dird/inc_conf.c:411 src/dird/inc_conf.c:754 src/dird/dird_conf.c:2039 -#, c-format -msgid "Keyword %s not permitted in this resource" -msgstr "Schlüsselwort %s ist in dieser Ressource nicht erlaubt." - -#: src/dird/inc_conf.c:464 -#, c-format -msgid "Regex compile error. ERR=%s\n" -msgstr "Regex Übersetzungsfehler. ERR=%s\n" - -#: src/dird/inc_conf.c:485 -#, c-format -msgid "Expected a regex string, got: %s\n" -msgstr "regulären Ausdruck erwartet, erhalten: %s\n" - -#: src/dird/inc_conf.c:559 -#, c-format -msgid "Expected a wild-card string, got: %s\n" -msgstr "wild-card Ausdruck erwartet, erhalten: %s\n" - -#: src/dird/inc_conf.c:582 -#, c-format -msgid "Expected an fstype string, got: %s\n" -msgstr "fstype Ausdruck erwartet, erhalten: %s\n" - -#: src/dird/inc_conf.c:593 -msgid "ExcludeDirContaining directive not permitted in Exclude.\n" -msgstr "" - -#: src/dird/inc_conf.c:620 -#, c-format -msgid "Expected an drivetype string, got: %s\n" -msgstr "drivetype Ausdruck erwartet, erhalten: %s\n" - -#: src/dird/inc_conf.c:644 src/dird/inc_conf.c:687 -#, fuzzy, c-format -msgid "Backslash found. Use forward slashes or quote the string.: %s\n" -msgstr "" -"Backslash gefunden. Benutze forward slashes oder setze den String in " -"Anführungszeichen.: %s\n" - -#: src/dird/inc_conf.c:659 src/dird/inc_conf.c:702 -#, c-format -msgid "Expected a filename, got: %s" -msgstr "Dateiname erwartet, erhalten: %s" - -#: src/dird/inc_conf.c:676 -msgid "Plugin directive not permitted in Exclude\n" -msgstr "" - -#: src/dird/inc_conf.c:719 -msgid "Options section not permitted in Exclude\n" -msgstr "" - -#: src/dird/inc_conf.c:724 src/dird/dird_conf.c:2008 -#, c-format -msgid "Expecting open brace. Got %s" -msgstr "Geschweifte Klammer auf erwartet, erhalten: %s" - -#: src/dird/inc_conf.c:779 -#, c-format -msgid "Expected a FileSet keyword, got: %s" -msgstr "FileSet Schlüsselwort erwartet,erhalten: %s" - -#: src/dird/ua_query.c:73 src/findlib/create_file.c:288 -#: src/findlib/create_file.c:391 -#, c-format -msgid "Could not open %s: ERR=%s\n" -msgstr "" - -#: src/dird/ua_query.c:78 -msgid "Available queries:\n" -msgstr "" - -#: src/dird/ua_query.c:85 -msgid "Choose a query" -msgstr "" - -#: src/dird/ua_query.c:99 -msgid "Could not find query.\n" -msgstr "" - -#: src/dird/ua_query.c:117 -msgid "Too many prompts in query, max is 9.\n" -msgstr "" - -#: src/dird/ua_query.c:220 -#, c-format -msgid "Warning prompt %d missing.\n" -msgstr "" - -#: src/dird/ua_query.c:265 -msgid "" -"Entering SQL query mode.\n" -"Terminate each query with a semicolon.\n" -"Terminate query mode with a blank line.\n" -msgstr "" - -#: src/dird/ua_query.c:268 src/dird/ua_query.c:284 -msgid "Enter SQL query: " -msgstr "" - -#: src/dird/ua_query.c:286 -msgid "Add to SQL query: " -msgstr "" - -#: src/dird/ua_query.c:289 -msgid "End query mode.\n" -msgstr "" - -#: src/dird/newvol.c:90 -#, c-format -msgid "Illegal character in Volume name \"%s\"\n" -msgstr "Illegales Zeichen in \"Volume name\" \"%s\"\n" - -#: src/dird/newvol.c:104 -#, c-format -msgid "Created new Volume \"%s\" in catalog.\n" -msgstr "Neues Volume \"%s\" in catalog erzeugt.\n" - -#: src/dird/newvol.c:131 -#, fuzzy, c-format -msgid "SQL failed, but ignored. ERR=%s\n" -msgstr "SQL fehlgeschlagen ERR=%s\n" - -#: src/dird/newvol.c:141 -#, c-format -msgid "Wanted to create Volume \"%s\", but it already exists. Trying again.\n" -msgstr "" -"Wollte Volume \"%s\"erzeugen, aber , but it already exists. Trying again.\n" - -#: src/dird/newvol.c:150 -msgid "Too many failures. Giving up creating Volume name.\n" -msgstr "Zu viele Fehler. Gebe Versuch einen Volumennamen zu erzeugen auf.\n" - -#: src/dird/expand.c:255 -#, c-format -msgid "Count not update counter %s: ERR=%s\n" -msgstr "Konnte counter %s: nicht aktualisieren: ERR=%s\n" - -#: src/dird/expand.c:427 -#, c-format -msgid "Cannot create var context: ERR=%s\n" -msgstr "Kann var context nicht erzeugen: ERR=%s\n" - -#: src/dird/expand.c:432 -#, c-format -msgid "Cannot set var callback: ERR=%s\n" -msgstr "kann Variable callback nicht setzen: ERR=%s\n" - -#: src/dird/expand.c:438 -#, c-format -msgid "Cannot set var operate: ERR=%s\n" -msgstr "kann Variable operate nicht setzen: ERR=%s\n" - -#: src/dird/expand.c:444 src/dird/expand.c:459 -#, c-format -msgid "Cannot unescape string: ERR=%s\n" -msgstr "Cannot unescape string: ERR=%s\n" - -#: src/dird/expand.c:452 -#, c-format -msgid "Cannot expand expression \"%s\": ERR=%s\n" -msgstr "Kann Ausdruck\"%s\"nicht auflösen: ERR=%s\n" - -#: src/dird/expand.c:470 -#, fuzzy, c-format -msgid "Cannot destroy var context: ERR=%s\n" -msgstr "kann Variable context nicht zerstören: ERR=%s\n" - -#: src/dird/recycle.c:69 -#, c-format -msgid "Recycled volume \"%s\"\n" -msgstr "" - -#: src/dird/ua_purge.c:90 -msgid "" -"\n" -"This command can be DANGEROUS!!!\n" -"\n" -"It purges (deletes) all Files from a Job,\n" -"JobId, Client or Volume; or it purges (deletes)\n" -"all Jobs from a Client or Volume without regard\n" -"to retention periods. Normally you should use the\n" -"PRUNE command, which respects retention periods.\n" -msgstr "" - -#: src/dird/ua_purge.c:157 -msgid "Choose item to purge" -msgstr "" - -#: src/dird/ua_purge.c:204 -#, c-format -msgid "Begin purging files for Client \"%s\"\n" -msgstr "" - -#: src/dird/ua_purge.c:213 src/dird/ua_purge.c:263 -#, c-format -msgid "No Files found for client %s to purge from %s catalog.\n" -msgstr "" - -#: src/dird/ua_purge.c:216 -#, c-format -msgid "Files for %d Jobs for client \"%s\" purged from %s catalog.\n" -msgstr "" - -#: src/dird/ua_purge.c:254 -#, c-format -msgid "Begin purging jobs from Client \"%s\"\n" -msgstr "" - -#: src/dird/ua_purge.c:266 -#, c-format -msgid "%d Jobs for client %s purged from %s catalog.\n" -msgstr "" - -#: src/dird/ua_purge.c:464 -#, c-format -msgid "" -"\n" -"Volume \"%s\" has VolStatus \"%s\" and cannot be purged.\n" -"The VolStatus must be: Append, Full, Used, or Error to be purged.\n" -msgstr "" - -#: src/dird/ua_purge.c:492 -#, c-format -msgid "%d File%s on Volume \"%s\" purged from catalog.\n" -msgstr "" - -#: src/dird/ua_purge.c:541 -#, c-format -msgid "" -"There are no more Jobs associated with Volume \"%s\". Marking it purged.\n" -msgstr "" - -#: src/dird/ua_purge.c:556 src/dird/ua_label.c:774 -#, c-format -msgid "Connecting to Storage daemon %s at %s:%d ...\n" -msgstr "" - -#: src/dird/ua_purge.c:559 src/dird/ua_dotcmds.c:625 src/dird/ua_cmds.c:771 -#: src/dird/ua_cmds.c:1577 src/dird/ua_label.c:777 src/dird/job.c:448 -msgid "Failed to connect to Storage daemon.\n" -msgstr "Verbindung zu Storage daemon fehlgeschlagen.\n" - -#: src/dird/ua_purge.c:623 -#, fuzzy -msgid "Can't update volume size in the catalog\n" -msgstr "Neues Volume \"%s\" in catalog erzeugt.\n" - -#: src/dird/ua_purge.c:625 -#, c-format -msgid "The volume \"%s\" has been truncated\n" -msgstr "" - -#: src/dird/ua_purge.c:627 -#, fuzzy, c-format -msgid "Unable to truncate volume \"%s\"\n" -msgstr "Kann Konsole \"%s\" an %s:%s:%d nicht authentisieren.\n" - -#: src/dird/ua_purge.c:713 -#, fuzzy, c-format -msgid "No Volumes found to perform %s action.\n" -msgstr "Keine Volumes zum Wiederherstellen gefunden.\n" - -#: src/dird/ua_purge.c:786 -#, c-format -msgid "Unable move recycled Volume in full Pool \"%s\" MaxVols=%d\n" -msgstr "" - -#: src/dird/ua_purge.c:800 -#, c-format -msgid "All records pruned from Volume \"%s\"; marking it \"Purged\"\n" -msgstr "" - -#: src/dird/ua_purge.c:805 -#, c-format -msgid "Cannot purge Volume with VolStatus=%s\n" -msgstr "" - -#: src/dird/vbackup.c:76 src/dird/migrate.c:114 -msgid "Could not get or create a Pool record.\n" -msgstr "Konnte keinen Pool Eintrag holen oder erzeugen.\n" - -#: src/dird/vbackup.c:89 src/dird/migrate.c:227 src/dird/migrate.c:228 -#: src/dird/backup.c:93 src/dird/job.c:185 src/dird/job.c:871 -#: src/dird/job.c:1126 src/dird/job.c:1172 src/dird/job.c:1186 -msgid "Pool resource" -msgstr "Pool Ressource" - -#: src/dird/vbackup.c:116 src/dird/migrate.c:285 -msgid "Job Pool's NextPool resource" -msgstr "\"NextPool\" Ressource des Job Pools" - -#: src/dird/vbackup.c:147 -#, fuzzy, c-format -msgid "Start Virtual Backup JobId %s, Job=%s\n" -msgstr "Start Sicherung JobId %s, Job=%s\n" - -#: src/dird/vbackup.c:151 -msgid "" -"This Job is not an Accurate backup so is not equivalent to a Full backup.\n" -msgstr "" - -#: src/dird/vbackup.c:158 -#, fuzzy -msgid "No previous Jobs found.\n" -msgstr "Keinen vorherigen Job zum migrieren gefunden.\n" - -#: src/dird/vbackup.c:180 -#, fuzzy, c-format -msgid "Error getting Job record for previous Job: ERR=%s" -msgstr "Fehler beim Holen des job Eintrags für den job Bericht: %s" - -#: src/dird/vbackup.c:186 src/dird/migrate.c:131 -msgid "Could not get or create the FileSet record.\n" -msgstr "Konnte FileSet Eintrag weder holen noch erzeugen.\n" - -#: src/dird/vbackup.c:313 src/dird/backup.c:635 -#, fuzzy, c-format -msgid "Error getting Client record for Job report: ERR=%s" -msgstr "Fehler beim holen des Datensatzes für Volume \"%s\": ERR=%s" - -#: src/dird/vbackup.c:319 src/dird/migrate.c:1257 src/dird/backup.c:641 -#, c-format -msgid "Error getting Media record for Volume \"%s\": ERR=%s" -msgstr "Fehler beim holen des Datensatzes für Volume \"%s\": ERR=%s" - -#: src/dird/vbackup.c:329 src/dird/backup.c:651 src/dird/backup.c:660 -#: src/stored/bscan.c:1214 -msgid "Backup OK -- with warnings" -msgstr "Sicherung OK -- mit Warnungen" - -#: src/dird/vbackup.c:331 src/dird/backup.c:653 src/stored/bscan.c:1211 -msgid "Backup OK" -msgstr "Sicherung OK" - -#: src/dird/vbackup.c:336 src/dird/backup.c:664 src/stored/bscan.c:1218 -msgid "*** Backup Error ***" -msgstr "*** Sicherungsfehler ***" - -#: src/dird/vbackup.c:346 src/dird/backup.c:674 src/stored/bscan.c:1221 -msgid "Backup Canceled" -msgstr "Sicherung Abgebrochen" - -#: src/dird/vbackup.c:393 -#, fuzzy, c-format -msgid "" -"%s %s %s (%s):\n" -" Build OS: %s %s %s\n" -" JobId: %d\n" -" Job: %s\n" -" Backup Level: Virtual Full\n" -" Client: \"%s\" %s\n" -" FileSet: \"%s\" %s\n" -" Pool: \"%s\" (From %s)\n" -" Catalog: \"%s\" (From %s)\n" -" Storage: \"%s\" (From %s)\n" -" Scheduled time: %s\n" -" Start time: %s\n" -" End time: %s\n" -" Elapsed time: %s\n" -" Priority: %d\n" -" SD Files Written: %s\n" -" SD Bytes Written: %s (%sB)\n" -" Rate: %.1f KB/s\n" -" Volume name(s): %s\n" -" Volume Session Id: %d\n" -" Volume Session Time: %d\n" -" Last Volume Bytes: %s (%sB)\n" -" SD Errors: %d\n" -" SD termination status: %s\n" -" Termination: %s\n" -"\n" -msgstr "" -"%s %s (%s): %s\n" -" vorheriges Backup JobId:%s\n" -" neues Backup JobId: %s\n" -" Migration JobId: %s\n" -" Migration Job: %s\n" -" Backup Level: %s%s\n" -" Client: %s\n" -" FileSet: \"%s\" %s\n" -" Lese Pool: \"%s\" (Von %s)\n" -" Lese Storage: \"%s\" (Von %s)\n" -" Schreib Pool: \"%s\" (Von %s)\n" -" Schreib Storage: \"%s\" (Von %s)\n" -" Start Zeit: %s\n" -" End Zeit: %s\n" -" Verstichene Zeit: %s\n" -" Priorität: %d\n" -" SD Dateien geschrieben: %s\n" -" SD Bytes geschrieben: %s (%sB)\n" -" Geschwindigkeit: %.1f KB/s\n" -" Volume name(s): %s\n" -" Volume Session Id: %d\n" -" Volume Session Time: %d\n" -" Last Volume Bytes: %s (%sB)\n" -" SD Fehler: %d\n" -" SD Beendigungsstatus : %s\n" -" Beendigungsstatus: %s\n" -"\n" - -#: src/dird/ua_output.c:69 src/dird/ua_output.c:93 -msgid "ON or OFF keyword missing.\n" -msgstr "" - -#: src/dird/ua_output.c:113 -#, fuzzy -msgid "Disabled Jobs:\n" -msgstr "ist nicht aktiviert" - -#: src/dird/ua_output.c:119 -msgid "No disabled Jobs.\n" -msgstr "" - -#: src/dird/ua_output.c:163 -#, fuzzy -msgid "disabled" -msgstr "ist nicht aktiviert" - -#: src/dird/ua_output.c:211 -msgid "Keywords for the show command are:\n" -msgstr "" - -#: src/dird/ua_output.c:217 -#, c-format -msgid "%s resource %s not found.\n" -msgstr "" - -#: src/dird/ua_output.c:220 -#, c-format -msgid "Resource %s not found\n" -msgstr "" - -#: src/dird/ua_output.c:290 -msgid "Hey! DB is NULL\n" -msgstr "" - -#: src/dird/ua_output.c:447 -#, c-format -msgid "Jobid %d used %d Volume(s): %s\n" -msgstr "" - -#: src/dird/ua_output.c:465 -msgid "No Pool specified.\n" -msgstr "" - -#: src/dird/ua_output.c:486 +#: src/cats/sql_create.c:294 #, c-format -msgid "Pool: %s\n" -msgstr "" - -#: src/dird/ua_output.c:502 -msgid "Ignoring invalid value for days. Max is 50.\n" -msgstr "" +msgid "More than one Storage record!: %d\n" +msgstr "Mehr als ein Storage Eintrag!: %d\n" -#: src/dird/ua_output.c:524 +#: src/cats/sql_create.c:299 #, c-format -msgid "Unknown list keyword: %s\n" -msgstr "" +msgid "error fetching Storage row: %s\n" +msgstr "Fehler beim holen der Storage Zeile: %s\n" -#: src/dird/ua_output.c:549 +#: src/cats/sql_create.c:320 #, c-format -msgid "%s is not a job name.\n" -msgstr "" - -#: src/dird/ua_output.c:563 -#, fuzzy, c-format -msgid "Could not find Pool for Job %s\n" -msgstr "Konnte Datenbank \"%s\" nicht öffen.\n" +msgid "Create DB Storage record %s failed. ERR=%s\n" +msgstr "Erzeugung des DB Storage Eintrags %s fehlgeschlagen. ERR=%s\n" -#: src/dird/ua_output.c:576 +#: src/cats/sql_create.c:354 #, c-format -msgid "Could not find next Volume for Job %s (Pool=%s, Level=%s).\n" -msgstr "" +msgid "mediatype record %s already exists\n" +msgstr "Medientyp Eintrag %s bereits vorhanden\n" -#: src/dird/ua_output.c:580 +#: src/cats/sql_create.c:371 #, c-format -msgid "" -"The next Volume to be used by Job \"%s\" (Pool=%s, Level=%s) will be %s\n" -msgstr "" +msgid "Create db mediatype record %s failed: ERR=%s\n" +msgstr "Erzeuge db Medientyp Eintrag %s fehlgeschlagen: ERR=%s\n" -#: src/dird/ua_output.c:593 +#: src/cats/sql_create.c:412 #, c-format -msgid "Could not find next Volume for Job %s.\n" -msgstr "" +msgid "Volume \"%s\" already exists.\n" +msgstr "Volume \"%s\" bereits vorhanden.\n" -#: src/dird/ua_output.c:720 src/dird/job.c:133 src/tools/cats_test.c:375 +#: src/cats/sql_create.c:458 #, c-format -msgid "Could not open database \"%s\".\n" -msgstr "Konnte Datenbank \"%s\" nicht öffen.\n" +msgid "Create DB Media record %s failed. ERR=%s\n" +msgstr "Erzeugung DB Media Eintrag %s fehlgeschlagen. ERR=%s\n" -#: src/dird/ua_output.c:733 +#: src/cats/sql_create.c:509 #, c-format -msgid "Pool %s not in database. %s" -msgstr "Pool %s nicht in der Datenbank. %s" +msgid "More than one Client!: %d\n" +msgstr "Mehr als ein Client!: %d\n" -#: src/dird/ua_output.c:741 +#: src/cats/sql_create.c:514 #, c-format -msgid "Pool %s created in database.\n" -msgstr "Pool %s in der Datenbank angelegt.\n" - -#: src/dird/ua_output.c:794 -msgid "You have no messages.\n" -msgstr "" - -#: src/dird/ua_output.c:874 -msgid "Message too long to display.\n" -msgstr "" +msgid "error fetching Client row: %s\n" +msgstr "Fehler beim holen der Client Zeile: %s\n" -#: src/dird/ua_dotcmds.c:155 src/dird/ua_cmds.c:236 +#: src/cats/sql_create.c:542 #, c-format -msgid "Can't use %s command in a runscript" -msgstr "" - -#: src/dird/ua_dotcmds.c:175 -msgid ": is an invalid command.\n" -msgstr "" +msgid "Create DB Client record %s failed. ERR=%s\n" +msgstr "Erzeugung des DB Client Eintrags %s fehlgeschlagen. ERR=%s\n" -#: src/dird/ua_dotcmds.c:553 src/dird/ua_restore.c:780 -#: src/dird/ua_restore.c:823 +#: src/cats/sql_create.c:611 #, c-format -msgid "Unable to get Job record for JobId=%s: ERR=%s\n" -msgstr "" - -#: src/dird/ua_dotcmds.c:619 src/dird/ua_cmds.c:765 src/dird/ua_cmds.c:1566 -#: src/dird/ua_status.c:352 src/dird/job.c:147 src/dird/job.c:153 -#: src/dird/job.c:1160 src/dird/job.c:1164 -msgid "unknown source" -msgstr "unbekannte Quelle" +msgid "Create db Path record %s failed. ERR=%s\n" +msgstr "Erzeugung des db Path Eintrags %s fehlgeschlagen. ERR=%s\n" -#: src/dird/ua_dotcmds.c:622 src/dird/ua_cmds.c:768 src/dird/ua_status.c:355 +#: src/cats/sql_create.c:656 #, c-format -msgid "Connecting to Storage daemon %s at %s:%d\n" -msgstr "" - -#: src/dird/ua_dotcmds.c:628 src/dird/ua_cmds.c:774 src/dird/ua_status.c:366 -msgid "Connected to storage daemon\n" -msgstr "" +msgid "Create DB Counters record %s failed. ERR=%s\n" +msgstr "Erzeugung des DB Counters Eintrag %s fehlgeschlagen. ERR=%s\n" -#: src/dird/ua_dotcmds.c:648 src/dird/ua_cmds.c:803 src/dird/ua_cmds.c:1208 -#: src/dird/ua_status.c:397 +#: src/cats/sql_create.c:694 #, c-format -msgid "Connecting to Client %s at %s:%d\n" -msgstr "" - -#: src/dird/ua_dotcmds.c:651 src/dird/ua_cmds.c:806 src/dird/ua_cmds.c:1211 -msgid "Failed to connect to Client.\n" -msgstr "" - -#: src/dird/ua_dotcmds.c:694 src/dird/ua_dotcmds.c:788 -#, fuzzy, c-format -msgid "Unknown command: %s\n" -msgstr "unbekannt" - -#: src/dird/ua_dotcmds.c:732 src/dird/ua_cmds.c:993 -msgid "Available daemons are: \n" -msgstr "" - -#: src/dird/ua_dotcmds.c:733 src/dird/ua_cmds.c:994 -msgid "Director" -msgstr "" - -#: src/dird/ua_dotcmds.c:736 -msgid "Select daemon type to make die" -msgstr "" - -#: src/dird/ua_dotcmds.c:762 -msgid "The Director will generate a deadlock.\n" -msgstr "" - -#: src/dird/ua_dotcmds.c:766 -msgid "The Director will segment fault.\n" -msgstr "" - -#: src/dird/ua_dotcmds.c:955 -msgid "Access to specified Client or FileSet not allowed.\n" -msgstr "" +msgid "More than one FileSet!: %d\n" +msgstr "Mehr als ein FileSet!: %d\n" -#: src/dird/ua_dotcmds.c:960 src/dird/ua_dotcmds.c:1004 -#: src/dird/ua_restore.c:941 src/dird/ua_restore.c:969 -#: src/dird/ua_restore.c:990 +#: src/cats/sql_create.c:699 #, c-format -msgid "Query failed: %s. ERR=%s\n" -msgstr "" +msgid "error fetching FileSet row: ERR=%s\n" +msgstr "Fehler beim holen der FileSet Zeile: ERR=%s\n" -#: src/dird/ua_dotcmds.c:999 -#, fuzzy -msgid "query keyword not found.\n" -msgstr "Path record: %s nicht gefunden.\n" +#: src/cats/sql_create.c:730 +#, c-format +msgid "Create DB FileSet record %s failed. ERR=%s\n" +msgstr "Erzeugung des DB FileSet Eintrags %s fehlgeschlagen. ERR=%s\n" -#: src/dird/ua_dotcmds.c:1026 -#, fuzzy, c-format -msgid "List MediaType failed: ERR=%s\n" -msgstr "Media id select fehlgeschlagen: ERR=%s\n" +#: src/cats/sql_create.c:999 +#, c-format +msgid "Create db File record %s failed. ERR=%s" +msgstr "Erzeugung des db File Eintrags %s fehlgeschlagen. ERR=%s" -#: src/dird/ua_dotcmds.c:1040 -#, fuzzy, c-format -msgid "List Media failed: ERR=%s\n" -msgstr "Media id select fehlgeschlagen: ERR=%s\n" +#: src/cats/sql_create.c:1025 +#, c-format +msgid "More than one Filename! %s for file: %s\n" +msgstr "Mehr als ein Dateiname! %s für Datei: %s\n" -#: src/dird/ua_dotcmds.c:1054 -#, fuzzy, c-format -msgid "List Location failed: ERR=%s\n" -msgstr "Client id select fehlgeschlagen: ERR=%s\n" +#: src/cats/sql_create.c:1031 +#, c-format +msgid "Error fetching row for file=%s: ERR=%s\n" +msgstr "Fehler beim Holen der Zeile für Datei=%s: ERR=%s\n" -#: src/dird/next_vol.c:166 +#: src/cats/sql_create.c:1048 #, c-format -msgid "Purging oldest volume \"%s\"\n" -msgstr "" +msgid "Create db Filename record %s failed. ERR=%s\n" +msgstr "Erzeugung des db Filename Eintrags %s fehlgeschlagen. ERR=%s\n" -#: src/dird/next_vol.c:172 +#: src/cats/sql_create.c:1068 #, c-format -msgid "Pruning oldest volume \"%s\"\n" -msgstr "" +msgid "Attempt to put non-attributes into catalog. Stream=%d\n" +msgstr "Versuche \"non-attributes\" in catalog einzufügen. Stream=%d\n" -#: src/dird/next_vol.c:191 -msgid "We seem to be looping trying to find the next volume. I give up.\n" +#: src/cats/sql_create.c:1084 +msgid "Cannot Copy/Migrate job using BaseJob.\n" msgstr "" -#: src/dird/next_vol.c:218 +#: src/cats/sql_create.c:1236 #, fuzzy, c-format -msgid "Max Volume bytes=%s exceeded. Marking Volume \"%s\" as Full.\n" -msgstr "\"Max Volume bytes\"erreicht. Markiere Volume \"%s\" als Voll.\n" +msgid "Create db Object record %s failed. ERR=%s" +msgstr "Erzeugung des db File Eintrags %s fehlgeschlagen. ERR=%s" -#: src/dird/next_vol.c:226 +#: src/cats/mysql.c:152 src/cats/postgresql.c:198 src/cats/sqlite.c:154 #, c-format -msgid "Volume used once. Marking Volume \"%s\" as Used.\n" -msgstr "Volume erstmalig benutzt. Markiere Volume \"%s\" als Used.\n" - -#: src/dird/next_vol.c:233 -#, fuzzy, c-format -msgid "Max Volume jobs=%s exceeded. Marking Volume \"%s\" as Used.\n" -msgstr "\"Max Volume bytes\"erreicht. Markiere Volume \"%s\" als Voll.\n" - -#: src/dird/next_vol.c:243 -#, fuzzy, c-format -msgid "Max Volume files=%s exceeded. Marking Volume \"%s\" as Used.\n" -msgstr "\"Max Volume bytes\"erreicht. Markiere Volume \"%s\" als Voll.\n" +msgid "Unable to initialize DB lock. ERR=%s\n" +msgstr "Kann DB lock nicht initialisieren. ERR=%s\n" -#: src/dird/next_vol.c:254 +#: src/cats/mysql.c:195 #, fuzzy, c-format msgid "" -"Max configured use duration=%s sec. exceeded. Marking Volume \"%s\" as " -"Used.\n" -msgstr "Volume erstmalig benutzt. Markiere Volume \"%s\" als Used.\n" +"Unable to connect to MySQL server.\n" +"Database=%s User=%s\n" +"MySQL connect failed either server not running or your authorization is " +"incorrect.\n" +msgstr "" +"Kann Verbindung zu MySQL Server nicht aufbauen. \n" +"Datenbank=%s Benutzer=%s\n" +"Der Datenbankserver läuft möglicherweise nicht oder das Passwort ist nicht " +"korrekt.\n" -#: src/dird/next_vol.c:267 +#: src/cats/mysql.c:359 src/cats/postgresql.c:442 src/cats/sqlite.c:374 +#: src/dird/fd_cmds.c:836 src/dird/fd_cmds.c:896 #, c-format -msgid "Catalog error updating volume \"%s\". ERR=%s" -msgstr "Catalog Fehler beim Aktualisieren von volume \"%s\". ERR=%s" - -#: src/dird/next_vol.c:289 -msgid "volume has expired" -msgstr "volume ist abgelaufen" +msgid "Attribute create error. %s" +msgstr "Attribute create error. %s" -#: src/dird/next_vol.c:307 src/dird/next_vol.c:351 +#: src/cats/mysql.c:381 src/cats/cats.c:121 src/cats/postgresql.c:494 +#: src/cats/postgresql.c:541 src/cats/sqlite.c:449 #, c-format -msgid "Recycled current volume \"%s\"\n" -msgstr "Recycled current volume \"%s\"\n" - -#: src/dird/next_vol.c:312 -msgid "and recycling of current volume failed" -msgstr "und das Wiederverwenden des aktuellen volumes ist fehlgeschlagen " - -#: src/dird/next_vol.c:318 -msgid "but should be Append, Purged or Recycle" -msgstr "aber sollte Append, Purged oder Recycle sein" +msgid "Query failed: %s: ERR=%s\n" +msgstr "Abfrage gescheitert: %s: ERR=%s\n" -#: src/dird/next_vol.c:327 -#, fuzzy -msgid "volume has recycling disabled" -msgstr "volume ist abgelaufen" +#: src/cats/mysql.c:680 +msgid "A user name for MySQL must be supplied.\n" +msgstr "Ein Benutzername für MySQL muss angegeben werden.\n" -#: src/dird/next_vol.c:354 -msgid "" -"but should be Append, Purged or Recycle (recycling of the current volume " -"failed)" +#: src/cats/postgresql.c:169 +#, c-format +msgid "Encoding error for database \"%s\". Wanted SQL_ASCII, got %s\n" msgstr "" -"aber sollte Append, Purged oder Recycle (das Recycling des des aktuellen " -"Volumens ist fehlgeschlagen)" -#: src/dird/next_vol.c:358 +#: src/cats/postgresql.c:234 +#, fuzzy, c-format msgid "" -"but should be Append, Purged or Recycle (cannot automatically recycle " -"current volume, as it still contains unpruned data or the Volume Retention " -"time has not expired.)" +"Unable to connect to PostgreSQL server. Database=%s User=%s\n" +"Possible causes: SQL server not running; password incorrect; max_connections " +"exceeded.\n" msgstr "" +"Kann Verbindung zu PostgreSQL Server nicht aufbauen.\n" +"Datenbank=%s Benutzer=%s\n" +"Der Datenbankserver läuft möglicherweise nicht oder das Passwort ist nicht " +"korrekt.\n" -#: src/dird/next_vol.c:421 -#, c-format -msgid "Unable to get Pool record: ERR=%s" +#: src/cats/postgresql.c:338 +msgid "PQescapeStringConn returned non-zero.\n" msgstr "" -#: src/dird/next_vol.c:428 -#, c-format -msgid "Unable add Scratch Volume, Pool \"%s\" full MaxVols=%d\n" +#: src/cats/postgresql.c:356 +msgid "PQescapeByteaConn returned NULL.\n" msgstr "" -#: src/dird/next_vol.c:448 -#, c-format -msgid "Failed to move Scratch Volume. ERR=%s\n" +#: src/cats/postgresql.c:387 +msgid "PQunescapeByteaConn returned NULL.\n" msgstr "" -#: src/dird/next_vol.c:453 +#: src/cats/postgresql.c:801 #, c-format -msgid "Using Volume \"%s\" from 'Scratch' pool.\n" -msgstr "" +msgid "error fetching currval: %s\n" +msgstr "Fehler beim Holen des aktuellen Wertes: %s\n" -#: src/dird/ua_cmds.c:120 -msgid "Add media to a pool" -msgstr "" +#: src/cats/postgresql.c:992 +#, fuzzy, c-format +msgid "error starting batch mode: %s" +msgstr "Fehler beim holen von Zeile: %s\n" -#: src/dird/ua_cmds.c:121 -msgid "Autodisplay console messages" -msgstr "" +#: src/cats/postgresql.c:1022 src/cats/postgresql.c:1029 +#, fuzzy, c-format +msgid "error ending batch mode: %s" +msgstr "Fehler beim holen von Zeile: %s\n" -#: src/dird/ua_cmds.c:122 -msgid "Automount after label" -msgstr "" +#: src/cats/postgresql.c:1079 +#, fuzzy, c-format +msgid "error copying in batch mode: %s" +msgstr "Fehler beim holen von Zeile: %s\n" -#: src/dird/ua_cmds.c:123 -msgid "Cancel a job" -msgstr "" +#: src/cats/postgresql.c:1101 +msgid "A user name for PostgreSQL must be supplied.\n" +msgstr "Ein Benutzername für PostgreSQL muss angegeben werden.\n" -#: src/dird/ua_cmds.c:124 -#, fuzzy -msgid "Create DB Pool from resource" -msgstr "Pool Ressource" +#: src/cats/sqlite.c:169 +#, c-format +msgid "Database %s does not exist, please create it.\n" +msgstr "Datenbank %s existiert nicht, bitte erzeugen.\n" -#: src/dird/ua_cmds.c:125 -msgid "Delete volume, pool or job" -msgstr "" +#: src/cats/sqlite.c:191 +#, c-format +msgid "Unable to open Database=%s. ERR=%s\n" +msgstr "Kann Datenbank=%s.nicht öffen. ERR=%s\n" -#: src/dird/ua_cmds.c:126 -#, fuzzy -msgid "Disable a job" -msgstr "ist nicht aktiviert" +#: src/cats/sqlite.c:192 +msgid "unknown" +msgstr "unbekannt" -#: src/dird/ua_cmds.c:127 -msgid "Enable a job" -msgstr "" +#: src/cats/sql_delete.c:65 +#, c-format +msgid "No pool record %s exists\n" +msgstr "Kein pool Eintrag %s vorhanden\n" -#: src/dird/ua_cmds.c:128 -msgid "Performs FileSet estimate, listing gives full listing" -msgstr "" +#: src/cats/sql_delete.c:70 +#, c-format +msgid "Expecting one pool record, got %d\n" +msgstr "Erwartete einen \"pool\" Eintrag, erhielt %d\n" -#: src/dird/ua_cmds.c:131 src/dird/ua_cmds.c:155 -msgid "Terminate Bconsole session" -msgstr "" +#: src/cats/sql_delete.c:76 +#, c-format +msgid "Error fetching row %s\n" +msgstr "Fehler beim Holen der Zeile %s\n" -#: src/dird/ua_cmds.c:132 -msgid "Non-interactive gui mode" +#: src/stored/job.c:190 +msgid "Client socket not open. Could not connect to Client.\n" msgstr "" -#: src/dird/ua_cmds.c:133 -msgid "Print help on specific command" -msgstr "" +#: src/stored/job.c:205 src/stored/job.c:207 +#, fuzzy, c-format +msgid "Recv request to Client failed. ERR=%s\n" +msgstr "Wiederherstellung läuft..." -#: src/dird/ua_cmds.c:138 -msgid "Label a tape" +#: src/stored/job.c:213 src/stored/job.c:214 +#, c-format +msgid "Bad Hello from Client: %s.\n" msgstr "" -#: src/dird/ua_cmds.c:139 -msgid "List objects from catalog" +#: src/stored/job.c:228 src/stored/job.c:311 +msgid "Unable to authenticate File daemon\n" msgstr "" -#: src/dird/ua_cmds.c:142 -msgid "Full or long list like list command" -msgstr "" +#: src/stored/job.c:282 +#, fuzzy, c-format +msgid "FD connect failed: Job name not found: %s\n" +msgstr "Job nicht gefunden: %s\n" -#: src/dird/ua_cmds.c:145 -msgid "Display pending messages" +#: src/stored/job.c:291 +#, c-format +msgid "Hey!!!! JobId %u Job %s already authenticated.\n" msgstr "" -#: src/dird/ua_cmds.c:146 -msgid "Print current memory usage" +#: src/stored/job.c:441 +msgid "In free_jcr(), but still attached to device!!!!\n" msgstr "" -#: src/dird/ua_cmds.c:147 -#, fuzzy -msgid "Mount storage" -msgstr "Run storage override" - -#: src/dird/ua_cmds.c:150 -msgid "Prune expired records from catalog" +#: src/stored/vbackup.c:67 +msgid "Read and write devices not properly initialized.\n" msgstr "" -#: src/dird/ua_cmds.c:153 -#, fuzzy -msgid "Purge records from catalog" -msgstr "File Eintrag nicht im Catalog gefunden.\n" - -#: src/dird/ua_cmds.c:154 -msgid "Python control commands" +#: src/stored/vbackup.c:73 +#, c-format +msgid "No Volume names found for %s.\n" msgstr "" -#: src/dird/ua_cmds.c:156 -msgid "Query catalog" +#: src/stored/vbackup.c:114 src/stored/vbackup.c:248 src/stored/append.c:261 +#: src/stored/spool.c:262 +#, c-format +msgid "Fatal append error on device %s: ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:157 -#, fuzzy -msgid "Restore files" -msgstr "Wiederherstellung läuft..." - -#: src/dird/ua_cmds.c:162 -msgid "Relabel a tape" +#: src/stored/vbackup.c:116 src/stored/append.c:263 +msgid "Set ok=FALSE after write_block_to_device.\n" msgstr "" -#: src/dird/ua_cmds.c:165 -msgid "Release storage" +#: src/stored/vbackup.c:139 src/stored/append.c:287 src/stored/read.c:92 +#, c-format +msgid "Elapsed time=%02d:%02d:%02d, Transfer rate=%s Bytes/second\n" msgstr "" -#: src/dird/ua_cmds.c:166 -msgid "Reload conf file" +#: src/stored/append.c:49 +msgid "DCR is NULL!!!\n" msgstr "" -#: src/dird/ua_cmds.c:167 -#, fuzzy -msgid "Run a job" -msgstr "Konnte Migrationsjob nicht starten.\n" - -#: src/dird/ua_cmds.c:171 -msgid "Report status" +#: src/stored/append.c:55 +msgid "DEVICE is NULL!!!\n" msgstr "" -#: src/dird/ua_cmds.c:174 -msgid "Sets debug level" +#: src/stored/append.c:66 +msgid "Unable to set network buffer size.\n" msgstr "" -#: src/dird/ua_cmds.c:177 -msgid "Sets new client address -- if authorized" +#: src/stored/append.c:80 src/stored/append.c:90 src/stored/append.c:103 +#: src/stored/askdir.c:355 src/stored/askdir.c:356 +msgid "NULL Volume name. This shouldn't happen!!!\n" msgstr "" -#: src/dird/ua_cmds.c:178 -#, fuzzy -msgid "Show resource records" -msgstr "Job Ressource" - -#: src/dird/ua_cmds.c:181 -msgid "Use SQL to query catalog" +#: src/stored/append.c:96 src/stored/btape.c:2232 +#, c-format +msgid "Write session label failed. ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:182 -msgid "Print current time" +#: src/stored/append.c:109 +#, c-format +msgid "Network send error to FD. ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:183 -msgid "Turn on/off trace to file" -msgstr "" +#: src/stored/append.c:148 +#, fuzzy, c-format +msgid "Error reading data header from FD. n=%d msglen=%d ERR=%s\n" +msgstr "Fehler beim Lesen der catalog DB Steuerdatei. ERR=%s\n" -#: src/dird/ua_cmds.c:184 -msgid "Unmount storage" +#: src/stored/append.c:155 +#, c-format +msgid "Malformed data header from FD: %s\n" msgstr "" -#: src/dird/ua_cmds.c:187 -msgid "Umount - for old-time Unix guys, see unmount" +#: src/stored/append.c:174 +#, c-format +msgid "FI=%d from FD not positive or last_FI=%d\n" msgstr "" -#: src/dird/ua_cmds.c:190 -msgid "Update volume, pool or stats" -msgstr "" +#: src/stored/append.c:222 +#, fuzzy, c-format +msgid "Network error reading from FD. ERR=%s\n" +msgstr "Netzwerkfehler mit FD bei %s: ERR=%s\n" + +#: src/stored/append.c:251 src/stored/btape.c:2351 +#, fuzzy, c-format +msgid "Error writing end session label. ERR=%s\n" +msgstr "Fehler beim Aktualisieren der DB Media Datei. ERR=%s\n" -#: src/dird/ua_cmds.c:196 -msgid "Use catalog xxx" +#: src/stored/append.c:324 +#, c-format +msgid "Error updating file attributes. ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:197 -msgid "Does variable expansion" +#: src/stored/mount.c:87 +#, c-format +msgid "Too many errors trying to mount %s device %s.\n" msgstr "" -#: src/dird/ua_cmds.c:198 -msgid "Print Director version" +#: src/stored/mount.c:95 +#, c-format +msgid "Job %d canceled.\n" msgstr "" -#: src/dird/ua_cmds.c:199 -msgid "Wait until no jobs are running" -msgstr "" +#: src/stored/mount.c:211 +#, fuzzy, c-format +msgid "Open of %s device %s Volume \"%s\" failed: ERR=%s\n" +msgstr "Erzeugung von db Device Eintrag %s fehlgeschlagen: ERR=%s\n" -#: src/dird/ua_cmds.c:247 +#: src/stored/mount.c:276 #, c-format -msgid "%s: is an invalid command.\n" +msgid "Volume \"%s\" previously written, moving to end of data.\n" msgstr "" -#: src/dird/ua_cmds.c:288 +#: src/stored/mount.c:282 +#, fuzzy, c-format +msgid "Unable to position to end of data on %s device %s: ERR=%s\n" +msgstr "Konnte bootstrap Datei %s nicht erzeugen. ERR=%s\n" + +#: src/stored/mount.c:420 src/stored/mount.c:781 +#, fuzzy, c-format +msgid "Volume \"%s\" not on %s device %s.\n" +msgstr "1997 Volume \"%s\" Nicht in Catalog.\n" + +#: src/stored/mount.c:453 +#, c-format msgid "" -"You probably don't want to be using this command since it\n" -"creates database records without labeling the Volumes.\n" -"You probably want to use the \"label\" command.\n" -"\n" +"Director wanted Volume \"%s\".\n" +" Current Volume \"%s\" not acceptable because:\n" +" %s" msgstr "" -#: src/dird/ua_cmds.c:306 +#: src/stored/mount.c:473 src/stored/label.c:232 src/stored/label.c:383 +#, fuzzy, c-format +msgid "Could not reserve volume %s on %s device %s\n" +msgstr "Konnte FileSet \"%s\" Eintrag nicht erzeugen. ERR=%s\n" + +#: src/stored/mount.c:631 #, c-format -msgid "Pool already has maximum volumes=%d\n" +msgid "Ready to append to end of Volume \"%s\" part=%d size=%s\n" msgstr "" -#: src/dird/ua_cmds.c:307 -msgid "Enter new maximum (zero for unlimited): " +#: src/stored/mount.c:635 +#, c-format +msgid "" +"Bacula cannot write on DVD Volume \"%s\" because: The sizes do not match! " +"Volume=%s Catalog=%s\n" msgstr "" -#: src/dird/ua_cmds.c:327 +#: src/stored/mount.c:649 #, c-format -msgid "Enter number of Volumes to create. 0=>fixed name. Max=%d: " +msgid "Ready to append to end of Volume \"%s\" at file=%d.\n" msgstr "" -#: src/dird/ua_cmds.c:333 +#: src/stored/mount.c:652 #, c-format -msgid "The number must be between 0 and %d\n" +msgid "" +"For Volume \"%s\":\n" +"The number of files mismatch! Volume=%u Catalog=%u\n" +"Correcting Catalog\n" msgstr "" -#: src/dird/ua_cmds.c:341 -msgid "Enter Volume name: " -msgstr "" +#: src/stored/mount.c:659 src/stored/mount.c:694 +#, fuzzy +msgid "Error updating Catalog\n" +msgstr "Fehler beim holen von Zeile: %s\n" -#: src/dird/ua_cmds.c:345 -msgid "Enter base volume name: " +#: src/stored/mount.c:664 +#, c-format +msgid "" +"Bacula cannot write on tape Volume \"%s\" because:\n" +"The number of files mismatch! Volume=%u Catalog=%u\n" msgstr "" -#: src/dird/ua_cmds.c:354 src/dird/ua_label.c:663 -msgid "Volume name too long.\n" +#: src/stored/mount.c:679 +#, c-format +msgid "Ready to append to end of Volume \"%s\" size=%s\n" msgstr "" -#: src/dird/ua_cmds.c:358 src/dird/ua_label.c:669 src/lib/edit.c:501 -msgid "Volume name must be at least one character long.\n" +#: src/stored/mount.c:684 +#, c-format +msgid "" +"For Volume \"%s\":\n" +" The sizes do not match! Volume=%s Catalog=%s\n" +" Correcting Catalog\n" msgstr "" -#: src/dird/ua_cmds.c:369 -msgid "Enter the starting number: " +#: src/stored/mount.c:699 +#, c-format +msgid "" +"Bacula cannot write on disk Volume \"%s\" because: The sizes do not match! " +"Volume=%s Catalog=%s\n" msgstr "" -#: src/dird/ua_cmds.c:374 -msgid "Start number must be greater than zero.\n" -msgstr "" +#: src/stored/mount.c:765 +#, fuzzy, c-format +msgid "Labeled new Volume \"%s\" on %s device %s.\n" +msgstr "Neues Volume \"%s\" in catalog erzeugt.\n" -#: src/dird/ua_cmds.c:385 -msgid "Enter slot (0 for none): " -msgstr "" +#: src/stored/mount.c:776 +#, fuzzy, c-format +msgid "%s device %s not configured to autolabel Volumes.\n" +msgstr "TLS benötigt aber nicht konfiguriert in Bacula.\n" -#: src/dird/ua_cmds.c:389 -msgid "InChanger? yes/no: " +#: src/stored/mount.c:798 +#, c-format +msgid "Marking Volume \"%s\" in Error in Catalog.\n" msgstr "" -#: src/dird/ua_cmds.c:414 +#: src/stored/mount.c:815 #, c-format -msgid "%d Volumes created in pool %s\n" +msgid "" +"Autochanger Volume \"%s\" not found in slot %d.\n" +" Setting InChanger to zero in catalog.\n" msgstr "" -#: src/dird/ua_cmds.c:430 src/dird/ua_cmds.c:1032 -msgid "Turn on or off? " +#: src/stored/mount.c:834 +msgid "Hey!!!!! WroteVol non-zero !!!!!\n" msgstr "" -#: src/dird/ua_cmds.c:544 +#: src/stored/mount.c:884 #, c-format msgid "" -"Can't set %s RecyclePool to %s, %s is not in database.\n" -"Try to update it with 'update pool=%s'\n" +"Invalid tape position on volume \"%s\" on device %s. Expected %d, got %d\n" msgstr "" -#: src/dird/ua_cmds.c:562 +#: src/stored/mount.c:925 #, c-format -msgid "" -"Can't set %s ScratchPool to %s, %s is not in database.\n" -"Try to update it with 'update pool=%s'\n" +msgid "Cannot open %s Dev=%s, Vol=%s for reading.\n" msgstr "" -#: src/dird/ua_cmds.c:631 -#, c-format -msgid "" -"Error: Pool %s already exists.\n" -"Use update to change it.\n" +#: src/stored/askdir.c:168 +msgid "Network error on bnet_recv in req_vol_info.\n" msgstr "" -#: src/dird/ua_cmds.c:642 +#: src/stored/askdir.c:191 #, c-format -msgid "Pool %s created.\n" +msgid "Error getting Volume info: %s" msgstr "" -#: src/dird/ua_cmds.c:672 -msgid "Python interpreter restarted.\n" +#: src/stored/askdir.c:396 +#, c-format +msgid "Didn't get vol info vol=%s: ERR=%s" msgstr "" -#: src/dird/ua_cmds.c:675 src/dird/ua_cmds.c:1337 -msgid "Nothing done.\n" +#: src/stored/askdir.c:461 +#, c-format +msgid "Error creating JobMedia record: ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:699 src/dird/ua_cmds.c:1083 src/dird/ua_run.c:1588 +#: src/stored/askdir.c:468 #, c-format -msgid "Client \"%s\" not found.\n" +msgid "Error creating JobMedia record: %s\n" msgstr "" -#: src/dird/ua_cmds.c:708 +#: src/stored/askdir.c:556 #, c-format -msgid "Client \"%s\" address set to %s\n" +msgid "Job %s canceled while waiting for mount on Storage Device \"%s\".\n" msgstr "" -#: src/dird/ua_cmds.c:742 +#: src/stored/askdir.c:568 #, c-format -msgid "Job \"%s\" %sabled\n" +msgid "" +"Job %s is waiting. Cannot find any appendable volumes.\n" +"Please use the \"label\" command to create a new Volume for:\n" +" Storage: %s\n" +" Pool: %s\n" +" Media type: %s\n" msgstr "" -#: src/dird/ua_cmds.c:920 -msgid "Enter new debug level: " +#: src/stored/askdir.c:593 src/stored/askdir.c:694 +#, c-format +msgid "Max time exceeded waiting to mount Storage Device %s for Job %s\n" msgstr "" -#: src/dird/ua_cmds.c:997 -msgid "All" +#: src/stored/askdir.c:603 +msgid "pthread error in mount_next_volume.\n" msgstr "" -#: src/dird/ua_cmds.c:998 -msgid "Select daemon type to set debug level" +#: src/stored/askdir.c:636 +msgid "Cannot request another volume: no volume name given.\n" msgstr "" -#: src/dird/ua_cmds.c:1087 src/dird/ua_cmds.c:1972 +#: src/stored/askdir.c:642 #, c-format -msgid "No authorization for Client \"%s\"\n" +msgid "Job %s canceled while waiting for mount on Storage Device %s.\n" msgstr "" -#: src/dird/ua_cmds.c:1092 -msgid "Client name missing.\n" +#: src/stored/askdir.c:659 +#, c-format +msgid "" +"%sPlease mount append Volume \"%s\" or label a new one for:\n" +" Job: %s\n" +" Storage: %s\n" +" Pool: %s\n" +" Media type: %s\n" msgstr "" -#: src/dird/ua_cmds.c:1104 src/dird/ua_cmds.c:1171 src/dird/ua_cmds.c:1994 +#: src/stored/askdir.c:665 #, c-format -msgid "No authorization for Job \"%s\"\n" +msgid "" +"%sPlease mount read Volume \"%s\" for:\n" +" Job: %s\n" +" Storage: %s\n" +" Pool: %s\n" +" Media type: %s\n" msgstr "" -#: src/dird/ua_cmds.c:1109 -msgid "Job name missing.\n" +#: src/stored/askdir.c:672 +msgid "" +"\n" +"\n" +"WARNING: device is full! Please add more disk space then ...\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:1118 -#, fuzzy, c-format -msgid "Fileset \"%s\" not found.\n" -msgstr "FileSet Eintrag \"%s\" nicht gefunden\n" - -#: src/dird/ua_cmds.c:1122 -#, c-format -msgid "No authorization for FileSet \"%s\"\n" +#: src/stored/askdir.c:704 +msgid "pthread error in mount_volume\n" msgstr "" -#: src/dird/ua_cmds.c:1127 -#, fuzzy -msgid "Fileset name missing.\n" -msgstr "FileSet: name=%s\n" - -#: src/dird/ua_cmds.c:1138 src/dird/ua_run.c:550 +#: src/stored/stored.c:75 #, fuzzy, c-format -msgid "Level \"%s\" not valid.\n" -msgstr "Pool Ressource \"%s\" nicht gefunden.\n" - -#: src/dird/ua_cmds.c:1142 -msgid "Level value missing.\n" +msgid "" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: bacula-sd [options] [-c config_file] [config_file]\n" +" -c use as configuration file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -f run in foreground (for debugging)\n" +" -g set groupid to group\n" +" -m print kaboom output (for debugging)\n" +" -p proceed despite I/O errors\n" +" -s no signals (for debugging)\n" +" -t test - read config and exit\n" +" -u userid to \n" +" -v verbose user messages\n" +" -? print this message.\n" +"\n" msgstr "" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: bacula-fd [-f -s] [-c config_datei] [-d debug_level]\n" +" -c benutze als Konfigurationsdatei\n" +" -dnn setze debug level auf nn\n" +" -f starte in Vordergrund (für debugging)\n" +" -g groupid\n" +" -s no signals (für debugging)\n" +" -t Konfigurationsdatei testen und beenden\n" +" -u userid\n" +" -v Ausführliche Benutzermeldungen\n" +" -? diese Meldung ausgeben.\n" +"\n" -#: src/dird/ua_cmds.c:1149 -msgid "Invalid value for accurate. It must be yes or no.\n" +#: src/stored/stored.c:124 src/stored/btape.c:167 +#, c-format +msgid "Tape block size (%d) not multiple of system size (%d)\n" msgstr "" -#: src/dird/ua_cmds.c:1154 -#, fuzzy -msgid "Accurate value missing.\n" -msgstr "FileSet: name=%s\n" - -#: src/dird/ua_cmds.c:1167 -msgid "No job specified.\n" +#: src/stored/stored.c:128 src/stored/btape.c:171 +#, c-format +msgid "Tape block size (%d) is not a power of 2\n" msgstr "" -#: src/dird/ua_cmds.c:1227 -msgid "Error sending include list.\n" +#: src/stored/stored.c:256 +msgid "Volume Session Time is ZERO!\n" msgstr "" -#: src/dird/ua_cmds.c:1232 -msgid "Error sending exclude list.\n" +#: src/stored/stored.c:265 +#, c-format +msgid "Unable to create thread. ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:1323 -msgid "" -"In general it is not a good idea to delete either a\n" -"Pool or a Volume since they may contain data.\n" -"\n" +#: src/stored/stored.c:298 src/stored/butil.c:76 +#, c-format +msgid "No Storage resource defined in %s. Cannot continue.\n" msgstr "" -#: src/dird/ua_cmds.c:1326 -msgid "Choose catalog item to delete" +#: src/stored/stored.c:304 +#, c-format +msgid "Only one Storage resource permitted in %s\n" msgstr "" -#: src/dird/ua_cmds.c:1376 src/dird/ua_cmds.c:1391 src/dird/ua_cmds.c:1401 -#, fuzzy, c-format -msgid "Illegal JobId %s ignored\n" -msgstr "Clone JobId %d gestartet.\n" +#: src/stored/stored.c:309 +#, c-format +msgid "No Director resource defined in %s. Cannot continue.\n" +msgstr "" -#: src/dird/ua_cmds.c:1404 -msgid "Enter JobId to delete: " +#: src/stored/stored.c:314 +#, c-format +msgid "No Device resource defined in %s. Cannot continue.\n" msgstr "" -#: src/dird/ua_cmds.c:1440 +#: src/stored/stored.c:322 #, c-format -msgid "Are you sure you want to delete %d JobIds ? (yes/no): " +msgid "No Messages resource defined in %s. Cannot continue.\n" msgstr "" -#: src/dird/ua_cmds.c:1450 +#: src/stored/stored.c:329 src/stored/bscan.c:256 #, c-format -msgid "Illegal JobId range %s - %s should define increasing JobIds, ignored\n" +msgid "No Working Directory defined in %s. Cannot continue.\n" msgstr "" -#: src/dird/ua_cmds.c:1454 +#: src/stored/stored.c:351 #, c-format -msgid "Illegal JobId range %s - %s, ignored\n" +msgid "\"TLS Certificate\" file not defined for Storage \"%s\" in %s.\n" msgstr "" -#: src/dird/ua_cmds.c:1469 +#: src/stored/stored.c:357 #, c-format -msgid "Jobid %s and associated records deleted from the catalog.\n" +msgid "\"TLS Key\" file not defined for Storage \"%s\" in %s.\n" msgstr "" -#: src/dird/ua_cmds.c:1484 +#: src/stored/stored.c:363 #, c-format msgid "" -"\n" -"This command will delete volume %s\n" -"and all Jobs saved on that volume from the Catalog\n" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Storage \"%s\" in %s. At least one CA certificate store is required when " +"using \"TLS Verify Peer\".\n" msgstr "" -#: src/dird/ua_cmds.c:1491 +#: src/stored/stored.c:382 src/dird/dird.c:932 #, c-format -msgid "Are you sure you want to delete Volume \"%s\"? (yes/no): " -msgstr "" +msgid "Failed to initialize TLS context for Storage \"%s\" in %s.\n" +msgstr "Konnte TLS context für Storage \"%s\" in %s nicht initialisieren.\n" -#: src/dird/ua_cmds.c:1504 -msgid "Can't list jobs on this volume\n" -msgstr "" +#: src/stored/stored.c:398 src/dird/dird.c:615 src/filed/filed.c:576 +#, c-format +msgid "\"TLS Certificate\" file not defined for Director \"%s\" in %s.\n" +msgstr "\"TLS Certificate\" Datei nicht für Director definiert \"%s\" in %s.\n" -#: src/dird/ua_cmds.c:1529 +#: src/stored/stored.c:404 src/dird/dird.c:621 src/filed/filed.c:582 #, c-format -msgid "Are you sure you want to delete Pool \"%s\"? (yes/no): " +msgid "\"TLS Key\" file not defined for Director \"%s\" in %s.\n" +msgstr "\"TLS Key\" Datei nicht für Director definiert \"%s\" in %s.\n" + +#: src/stored/stored.c:410 src/dird/dird.c:628 src/filed/filed.c:588 +#, c-format +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Director \"%s\" in %s. At least one CA certificate store is required when " +"using \"TLS Verify Peer\".\n" msgstr "" +"Weder \"TLS CA Certificate\" noch \"TLS CA Certificate Dir\" sind für " +"Director \"%s\" in %s definert. Mindestens ein CA certificate store wird " +"benötigt wenn \"TLS Verify Peer\" eingesetzt wird.\n" -#: src/dird/ua_cmds.c:1644 +#: src/stored/stored.c:429 src/dird/dird.c:647 src/filed/filed.c:607 #, c-format -msgid "Using Catalog name=%s DB=%s\n" -msgstr "" +msgid "Failed to initialize TLS context for Director \"%s\" in %s.\n" +msgstr "Konnte TLS context für Director nicht initialisieren \"%s\" in %s.\n" -#: src/dird/ua_cmds.c:1712 -msgid "ERR: Can't open db\n" -msgstr "" +#: src/stored/stored.c:479 src/dird/mac_sql.c:547 src/dird/dird.c:1138 +#, c-format +msgid "Could not compile regex pattern \"%s\" ERR=%s\n" +msgstr "Konnte regex pattern \"%s\" nicht kompilieren ERR=%s\n" -#: src/dird/ua_cmds.c:1759 -msgid "Wait on mount timed out\n" -msgstr "" +#: src/stored/stored.c:548 src/stored/dircmd.c:204 src/dird/job.c:101 +#: src/dird/jobq.c:208 src/filed/job.c:257 +#, c-format +msgid "Unable to init job cond variable: ERR=%s\n" +msgstr "konnte job cond Variable nicht initialisieren: ERR=%s\n" -#: src/dird/ua_cmds.c:1769 -msgid "ERR: Job was not found\n" +#: src/stored/stored.c:556 +#, c-format +msgid "Could not initialize %s\n" msgstr "" -#: src/dird/ua_cmds.c:1845 -msgid "" -" Command Description\n" -" ======= ===========\n" +#: src/stored/stored.c:570 +#, c-format +msgid "Could not open device %s\n" msgstr "" -#: src/dird/ua_cmds.c:1849 +#: src/stored/stored.c:584 #, c-format -msgid "" -" %-13s %s\n" -"\n" -"Arguments:\n" -"\t%s\n" +msgid "Could not mount device %s\n" msgstr "" -#: src/dird/ua_cmds.c:1854 -#, fuzzy, c-format -msgid " %-13s %s\n" -msgstr " --> Run=%s\n" - -#: src/dird/ua_cmds.c:1858 +#: src/stored/btape.c:174 #, c-format msgid "" "\n" -"Can't find %s command.\n" "\n" -msgstr "" - -#: src/dird/ua_cmds.c:1860 -msgid "" +"!!!! Warning large disk addressing disabled. boffset_t=%d should be 8 or " +"more !!!!!\n" "\n" -"When at a prompt, entering a period cancels the command.\n" "\n" msgstr "" -#: src/dird/ua_cmds.c:1896 src/filed/status.c:85 -#, c-format -msgid "%s Version: %s (%s) %s %s %s %s\n" -msgstr "" - -#: src/dird/ua_cmds.c:1955 src/dird/ua_cmds.c:1982 src/dird/ua_cmds.c:2004 +#: src/stored/btape.c:181 #, c-format -msgid "No authorization for Catalog \"%s\"\n" +msgid "32 bit printf/scanf problem. i=%d x32=%u y32=%u\n" msgstr "" -#: src/dird/ua_cmds.c:2049 -#, c-format -msgid "Could not open catalog database \"%s\".\n" +#: src/stored/btape.c:190 +msgid "64 bit printf/scanf problem. i=%d x64=%" msgstr "" -#: src/dird/ua_cmds.c:2059 +#: src/stored/btape.c:195 #, c-format -msgid "Using Catalog \"%s\"\n" +msgid "Tape block granularity is %d bytes.\n" msgstr "" -#: src/dird/ua_tree.c:74 -msgid "add dir/file to be restored recursively, wildcards allowed" +#: src/stored/btape.c:270 +msgid "No archive name specified.\n" msgstr "" -#: src/dird/ua_tree.c:75 -msgid "change current directory" +#: src/stored/btape.c:274 +msgid "Improper number of arguments specified.\n" msgstr "" -#: src/dird/ua_tree.c:76 -msgid "count marked files in and below the cd" +#: src/stored/btape.c:288 +msgid "btape does not work with DVD storage.\n" msgstr "" -#: src/dird/ua_tree.c:77 -msgid "delete dir/file to be restored recursively in dir" +#: src/stored/btape.c:293 +msgid "btape only works with tape storage.\n" msgstr "" -#: src/dird/ua_tree.c:78 src/dird/ua_tree.c:79 -msgid "long list current directory, wildcards allowed" +#: src/stored/btape.c:377 +#, c-format +msgid "Total Volume bytes=%sB. Total Write rate = %sB/s\n" msgstr "" -#: src/dird/ua_tree.c:80 -msgid "leave file selection mode" +#: src/stored/btape.c:403 +#, c-format +msgid "Volume bytes=%sB. Write rate = %sB/s\n" msgstr "" -#: src/dird/ua_tree.c:81 -msgid "estimate restore size" +#: src/stored/btape.c:467 src/stored/device.c:303 src/stored/bcopy.c:194 +#, c-format +msgid "dev open failed: %s\n" msgstr "" -#: src/dird/ua_tree.c:82 -msgid "same as done command" +#: src/stored/btape.c:471 +#, c-format +msgid "open device %s: OK\n" msgstr "" -#: src/dird/ua_tree.c:83 -msgid "find files, wildcards allowed" +#: src/stored/btape.c:494 +msgid "Enter Volume Name: " msgstr "" -#: src/dird/ua_tree.c:84 src/dird/ua_tree.c:97 src/dird/ua_tree.c:98 -msgid "print help" +#: src/stored/btape.c:501 +#, c-format +msgid "Device open failed. ERR=%s\n" msgstr "" -#: src/dird/ua_tree.c:85 src/dird/ua_tree.c:86 -msgid "list current directory, wildcards allowed" +#: src/stored/btape.c:506 +#, c-format +msgid "Wrote Volume label for volume \"%s\".\n" msgstr "" -#: src/dird/ua_tree.c:87 -msgid "list subdir in current directory, wildcards allowed" +#: src/stored/btape.c:520 +msgid "Volume has no label.\n" msgstr "" -#: src/dird/ua_tree.c:88 -msgid "list the marked files in and below the cd" +#: src/stored/btape.c:523 +msgid "Volume label read correctly.\n" msgstr "" -#: src/dird/ua_tree.c:89 -msgid "list the marked files in" +#: src/stored/btape.c:526 +#, c-format +msgid "I/O error on device: ERR=%s" msgstr "" -#: src/dird/ua_tree.c:90 -msgid "mark dir/file to be restored recursively, wildcards allowed" -msgstr "" +#: src/stored/btape.c:529 +#, fuzzy, c-format +msgid "Volume type error: ERR=%s\n" +msgstr "Attribute create error. %s" -#: src/dird/ua_tree.c:91 -msgid "mark directory name to be restored (no files)" +#: src/stored/btape.c:532 +msgid "Volume name error\n" msgstr "" -#: src/dird/ua_tree.c:92 src/dird/ua_tree.c:93 -msgid "print current working directory" +#: src/stored/btape.c:535 +#, c-format +msgid "Error creating label. ERR=%s" msgstr "" -#: src/dird/ua_tree.c:94 -msgid "unmark dir/file to be restored recursively in dir" +#: src/stored/btape.c:538 +msgid "Volume version error.\n" msgstr "" -#: src/dird/ua_tree.c:95 -msgid "unmark directory name only no recursion" +#: src/stored/btape.c:541 +msgid "Bad Volume label type.\n" msgstr "" -#: src/dird/ua_tree.c:96 -msgid "quit and do not do restore" +#: src/stored/btape.c:544 +msgid "Unknown error.\n" msgstr "" -#: src/dird/ua_tree.c:118 -msgid "" -"\n" -"You are now entering file selection mode where you add (mark) and\n" -"remove (unmark) files to be restored. No files are initially added, unless\n" -"you used the \"all\" keyword on the command line.\n" -"Enter \"done\" to leave this mode.\n" -"\n" +#: src/stored/btape.c:562 +#, c-format +msgid "Bad status from load. ERR=%s\n" msgstr "" -#: src/dird/ua_tree.c:129 src/dird/ua_tree.c:831 +#: src/stored/btape.c:564 #, c-format -msgid "cwd is: %s\n" +msgid "Loaded %s\n" msgstr "" -#: src/dird/ua_tree.c:138 src/dird/ua_tree.c:157 +#: src/stored/btape.c:573 src/stored/btape.c:1136 src/stored/btape.c:1209 +#: src/stored/btape.c:1289 src/stored/btape.c:1560 #, c-format -msgid "Invalid command \"%s\". Enter \"done\" to exit.\n" +msgid "Bad status from rewind. ERR=%s\n" msgstr "" -#: src/dird/ua_tree.c:227 +#: src/stored/btape.c:576 src/stored/btape.c:1568 #, c-format -msgid "" -"Something is wrong with the Delta sequence of %s, skiping new parts. Current " -"sequence is %d\n" +msgid "Rewound %s\n" msgstr "" -#: src/dird/ua_tree.c:373 src/dird/ua_tree.c:385 src/dird/ua_tree.c:402 -msgid "No files marked.\n" +#: src/stored/btape.c:602 src/stored/btape.c:1572 +#, c-format +msgid "Bad status from weof. ERR=%s\n" msgstr "" -#: src/dird/ua_tree.c:387 -msgid "1 file marked.\n" +#: src/stored/btape.c:606 +#, c-format +msgid "Wrote 1 EOF to %s\n" msgstr "" -#: src/dird/ua_tree.c:389 +#: src/stored/btape.c:609 #, c-format -msgid "%s files marked.\n" +msgid "Wrote %d EOFs to %s\n" msgstr "" -#: src/dird/ua_tree.c:417 -msgid "No directories marked.\n" +#: src/stored/btape.c:627 +msgid "Moved to end of medium.\n" msgstr "" -#: src/dird/ua_tree.c:419 -msgid "1 directory marked.\n" +#: src/stored/btape.c:654 +#, c-format +msgid "Bad status from bsf. ERR=%s\n" msgstr "" -#: src/dird/ua_tree.c:421 +#: src/stored/btape.c:656 #, c-format -msgid "%s directories marked.\n" +msgid "Backspaced %d file%s.\n" msgstr "" -#: src/dird/ua_tree.c:442 +#: src/stored/btape.c:673 #, c-format -msgid "%s total files/dirs. %s marked to be restored.\n" +msgid "Bad status from bsr. ERR=%s\n" msgstr "" -#: src/dird/ua_tree.c:453 -msgid "No file specification given.\n" +#: src/stored/btape.c:675 +#, c-format +msgid "Backspaced %d record%s.\n" msgstr "" -#: src/dird/ua_tree.c:674 +#: src/stored/btape.c:685 src/stored/status.c:361 #, c-format -msgid "Node %s has no children.\n" +msgid "Configured device capabilities:\n" msgstr "" -#: src/dird/ua_tree.c:767 +#: src/stored/btape.c:703 #, c-format -msgid "%d total files; %d marked to be restored; %s bytes.\n" +msgid "Device status:\n" msgstr "" -#: src/dird/ua_tree.c:778 src/stored/btape.c:2949 +#: src/stored/btape.c:717 src/stored/status.c:417 #, c-format -msgid "" -" Command Description\n" -" ======= ===========\n" +msgid "Device parameters:\n" msgstr "" -#: src/dird/ua_tree.c:801 -msgid "Too few or too many arguments. Try using double quotes.\n" +#: src/stored/btape.c:722 +#, c-format +msgid "Status:\n" msgstr "" -#: src/dird/ua_tree.c:814 -msgid "Invalid path given.\n" +#: src/stored/btape.c:737 +msgid "" +"Test writing larger and larger records.\n" +"This is a torture test for records.\n" +"I am going to write\n" +"larger and larger records. It will stop when the record size\n" +"plus the header exceeds the block size (by default about 64K)\n" msgstr "" -#: src/dird/ua_tree.c:850 src/dird/ua_tree.c:862 -msgid "No files unmarked.\n" +#: src/stored/btape.c:743 +msgid "Do you want to continue? (y/n): " msgstr "" -#: src/dird/ua_tree.c:864 -msgid "1 file unmarked.\n" +#: src/stored/btape.c:745 src/stored/btape.c:2197 +msgid "Command aborted.\n" msgstr "" -#: src/dird/ua_tree.c:867 +#: src/stored/btape.c:762 #, c-format -msgid "%s files unmarked.\n" +msgid "Block %d i=%d\n" msgstr "" -#: src/dird/ua_tree.c:878 src/dird/ua_tree.c:895 -msgid "No directories unmarked.\n" +#: src/stored/btape.c:789 +msgid "Skipping read backwards test because BSR turned off.\n" msgstr "" -#: src/dird/ua_tree.c:897 -msgid "1 directory unmarked.\n" +#: src/stored/btape.c:793 +msgid "" +"\n" +"=== Write, backup, and re-read test ===\n" +"\n" +"I'm going to write three records and an EOF\n" +"then backup over the EOF and re-read the last record.\n" +"Bacula does this after writing the last block on the\n" +"tape to verify that the block was written correctly.\n" +"\n" +"This is not an *essential* feature ...\n" +"\n" msgstr "" -#: src/dird/ua_tree.c:899 -#, c-format -msgid "%d directories unmarked.\n" +#: src/stored/btape.c:806 src/stored/btape.c:817 src/stored/btape.c:828 +#: src/stored/btape.c:1146 src/stored/btape.c:1162 src/stored/btape.c:1904 +#: src/stored/btape.c:2821 +msgid "Error writing record to block.\n" msgstr "" -#: src/dird/dird_conf.c:567 src/tray-monitor/tray_conf.c:168 -#: src/qt-console/tray-monitor/tray_conf.cpp:168 -#, c-format -msgid "No %s resource defined\n" -msgstr "Keine %s resource definiert\n" - -#: src/dird/dird_conf.c:576 -#, c-format -msgid "Director: name=%s MaxJobs=%d FDtimeout=%s SDtimeout=%s\n" -msgstr "Director: name=%s MaxJobs=%d FDtimeout=%s SDtimeout=%s\n" - -#: src/dird/dird_conf.c:581 -#, c-format -msgid " query_file=%s\n" -msgstr " query_file=%s\n" - -#: src/dird/dird_conf.c:584 src/dird/dird_conf.c:604 src/dird/dird_conf.c:621 -#: src/dird/dird_conf.c:689 src/dird/dird_conf.c:693 src/dird/dird_conf.c:697 -#: src/dird/dird_conf.c:730 src/dird/dird_conf.c:753 src/dird/dird_conf.c:757 -#: src/dird/dird_conf.c:761 src/dird/dird_conf.c:765 src/dird/dird_conf.c:769 -#: src/dird/dird_conf.c:782 src/dird/dird_conf.c:1018 -#: src/dird/dird_conf.c:1025 -msgid " --> " -msgstr " --> " - -#: src/dird/dird_conf.c:589 -#, c-format -msgid "Console: name=%s SSL=%d\n" -msgstr "Console: name=%s SSL=%d\n" +#: src/stored/btape.c:810 src/stored/btape.c:821 src/stored/btape.c:832 +#: src/stored/btape.c:1150 src/stored/btape.c:1166 src/stored/btape.c:1908 +#: src/stored/btape.c:2825 +msgid "Error writing block to device.\n" +msgstr "" -#: src/dird/dird_conf.c:594 +#: src/stored/btape.c:813 #, c-format -msgid "Counter: name=%s min=%d max=%d cur=%d wrapcntr=%s\n" -msgstr "Counter: name=%s min=%d max=%d cur=%d wrapcntr=%s\n" +msgid "Wrote first record of %d bytes.\n" +msgstr "" -#: src/dird/dird_conf.c:599 +#: src/stored/btape.c:824 #, c-format -msgid "Counter: name=%s min=%d max=%d\n" -msgstr "Counter: name=%s min=%d max=%d\n" +msgid "Wrote second record of %d bytes.\n" +msgstr "" -#: src/dird/dird_conf.c:613 +#: src/stored/btape.c:835 #, c-format -msgid "Client: name=%s address=%s FDport=%d MaxJobs=%u\n" -msgstr "Client: name=%s address=%s FDport=%d MaxJobs=%u\n" +msgid "Wrote third record of %d bytes.\n" +msgstr "" -#: src/dird/dird_conf.c:616 +#: src/stored/btape.c:842 src/stored/btape.c:847 #, c-format -msgid " JobRetention=%s FileRetention=%s AutoPrune=%d\n" -msgstr " JobRetention=%s FileRetention=%s AutoPrune=%d\n" +msgid "Backspace file failed! ERR=%s\n" +msgstr "" -#: src/dird/dird_conf.c:629 -#, c-format -msgid "" -"Device: name=%s ok=%d num_writers=%d max_writers=%d\n" -" reserved=%d open=%d append=%d read=%d labeled=%d offline=%d autochgr=" -"%d\n" -" poolid=%s volname=%s MediaType=%s\n" +#: src/stored/btape.c:851 +msgid "Backspaced over EOF OK.\n" msgstr "" -"Device: name=%s ok=%d num_writers=%d max_writers=%d\n" -" reserved=%d open=%d append=%d read=%d labeled=%d offline=%d autochgr=" -"%d\n" -" poolid=%s volname=%s MediaType=%s\n" -#: src/dird/dird_conf.c:643 +#: src/stored/btape.c:853 #, c-format -msgid "" -"Storage: name=%s address=%s SDport=%d MaxJobs=%u\n" -" DeviceName=%s MediaType=%s StorageId=%s\n" +msgid "Backspace record failed! ERR=%s\n" msgstr "" -"Storage: name=%s address=%s SDport=%d MaxJobs=%u\n" -" DeviceName=%s MediaType=%s StorageId=%s\n" - -#: src/dird/dird_conf.c:656 -#, fuzzy, c-format -msgid "" -"Catalog: name=%s address=%s DBport=%d db_name=%s\n" -" db_driver=%s db_user=%s MutliDBConn=%d\n" + +#: src/stored/btape.c:856 +msgid "Backspace record OK.\n" msgstr "" -"Catalog: name=%s address=%s DBport=%d db_name=%s\n" -" db_user=%s MutliDBConn=%d\n" -#: src/dird/dird_conf.c:669 +#: src/stored/btape.c:859 src/stored/btape.c:865 #, c-format -msgid "%s: name=%s JobType=%d level=%s Priority=%d Enabled=%d\n" -msgstr "%s: name=%s JobType=%d level=%s Priority=%d Enabled=%d\n" +msgid "Read block failed! ERR=%s\n" +msgstr "" -#: src/dird/dird_conf.c:670 -msgid "JobDefs" -msgstr "JobDefs" +#: src/stored/btape.c:870 +msgid "Bad data in record. Test failed!\n" +msgstr "" -#: src/dird/dird_conf.c:674 -#, c-format +#: src/stored/btape.c:874 msgid "" -" MaxJobs=%u Resched=%d Times=%d Interval=%s Spool=%d WritePartAfterJob=" -"%d\n" +"\n" +"Block re-read correct. Test succeeded!\n" msgstr "" -" MaxJobs=%u Resched=%d Times=%d Interval=%s Spool=%d WritePartAfterJob=" -"%d\n" - -#: src/dird/dird_conf.c:680 -#, fuzzy, c-format -msgid " SpoolSize=%s\n" -msgstr " opcmd=%s\n" -#: src/dird/dird_conf.c:683 -#, fuzzy, c-format -msgid " Accurate=%d\n" -msgstr " SelectionType=%d\n" +#: src/stored/btape.c:875 +msgid "" +"=== End Write, backup, and re-read test ===\n" +"\n" +msgstr "" -#: src/dird/dird_conf.c:686 -#, c-format -msgid " SelectionType=%d\n" -msgstr " SelectionType=%d\n" +#: src/stored/btape.c:882 +msgid "" +"This is not terribly serious since Bacula only uses\n" +"this function to verify the last block written to the\n" +"tape. Bacula will skip the last block verification\n" +"if you add:\n" +"\n" +"Backward Space Record = No\n" +"\n" +"to your Storage daemon's Device resource definition.\n" +msgstr "" -#: src/dird/dird_conf.c:701 +#: src/stored/btape.c:904 #, c-format -msgid " --> Where=%s\n" -msgstr " --> Where=%s\n" - -#: src/dird/dird_conf.c:704 -#, fuzzy, c-format -msgid " --> RegexWhere=%s\n" -msgstr " --> Where=%s\n" +msgid "Begin writing %i files of %sB with raw blocks of %u bytes.\n" +msgstr "" -#: src/dird/dird_conf.c:707 +#: src/stored/btape.c:925 src/stored/btape.c:2877 #, c-format -msgid " --> Bootstrap=%s\n" -msgstr " --> Bootstrap=%s\n" +msgid "Write failed at block %u. stat=%d ERR=%s\n" +msgstr "" -#: src/dird/dird_conf.c:710 +#: src/stored/btape.c:959 #, c-format -msgid " --> WriteBootstrap=%s\n" -msgstr " --> WriteBootstrap=%s\n" - -#: src/dird/dird_conf.c:713 -#, fuzzy, c-format -msgid " --> PluginOptions=%s\n" -msgstr " --> Run=%s\n" - -#: src/dird/dird_conf.c:716 -#, fuzzy, c-format -msgid " --> MaxRunTime=%u\n" -msgstr " --> RunWhen=%u\n" - -#: src/dird/dird_conf.c:719 -#, fuzzy, c-format -msgid " --> MaxWaitTime=%u\n" -msgstr " --> RunWhen=%u\n" +msgid "Begin writing %i files of %sB with blocks of %u bytes.\n" +msgstr "" -#: src/dird/dird_conf.c:722 -#, fuzzy, c-format -msgid " --> MaxStartDelay=%u\n" -msgstr " --> Target=%s\n" +#: src/stored/btape.c:968 +#, fuzzy +msgid "" +"\n" +"Error writing record to block.\n" +msgstr "Fehler beim schreiben der bsr Datei.\n" -#: src/dird/dird_conf.c:725 -#, fuzzy, c-format -msgid " --> MaxRunSchedTime=%u\n" -msgstr " --> RunWhen=%u\n" +#: src/stored/btape.c:972 +#, fuzzy +msgid "" +"\n" +"Error writing block to device.\n" +msgstr "Fehler beim schreiben der bsr Datei.\n" -#: src/dird/dird_conf.c:737 -#, fuzzy, c-format -msgid " --> Base %s\n" -msgstr " --> Target=%s\n" +#: src/stored/btape.c:1027 +msgid "The file_size is too big, stop this test with Ctrl-c.\n" +msgstr "" -#: src/dird/dird_conf.c:743 src/lib/runscript.c:297 -msgid " --> RunScript\n" -msgstr " --> RunScript\n" +#: src/stored/btape.c:1055 +msgid "Test with zero data, should give the maximum throughput.\n" +msgstr "" -#: src/dird/dird_conf.c:744 src/lib/runscript.c:298 -#, c-format -msgid " --> Command=%s\n" -msgstr " --> Command=%s\n" +#: src/stored/btape.c:1067 src/stored/btape.c:1093 +msgid "Test with random data, should give the minimum throughput.\n" +msgstr "" -#: src/dird/dird_conf.c:745 src/lib/runscript.c:299 -#, c-format -msgid " --> Target=%s\n" -msgstr " --> Target=%s\n" +#: src/stored/btape.c:1082 +msgid "Test with zero data and bacula block structure.\n" +msgstr "" -#: src/dird/dird_conf.c:746 src/lib/runscript.c:300 +#: src/stored/btape.c:1122 #, c-format -msgid " --> RunOnSuccess=%u\n" -msgstr " --> RunOnSuccess=%u\n" +msgid "" +"\n" +"=== Write, rewind, and re-read test ===\n" +"\n" +"I'm going to write %d records and an EOF\n" +"then write %d records and an EOF, then rewind,\n" +"and re-read the data to verify that it is correct.\n" +"\n" +"This is an *essential* feature ...\n" +"\n" +msgstr "" -#: src/dird/dird_conf.c:747 src/lib/runscript.c:301 +#: src/stored/btape.c:1154 src/stored/btape.c:1170 #, c-format -msgid " --> RunOnFailure=%u\n" -msgstr " --> RunOnFailure=%u\n" +msgid "Wrote %d blocks of %d bytes.\n" +msgstr "" -#: src/dird/dird_conf.c:748 src/lib/runscript.c:302 -#, fuzzy, c-format -msgid " --> FailJobOnError=%u\n" -msgstr " --> AbortJobOnError=%u\n" +#: src/stored/btape.c:1212 src/stored/btape.c:1292 +msgid "Rewind OK.\n" +msgstr "" -#: src/dird/dird_conf.c:749 src/lib/runscript.c:303 -#, c-format -msgid " --> RunWhen=%u\n" -msgstr " --> RunWhen=%u\n" +#: src/stored/btape.c:1225 src/stored/btape.c:1344 +msgid "Got EOF on tape.\n" +msgstr "" -#: src/dird/dird_conf.c:775 +#: src/stored/btape.c:1230 #, c-format -msgid " --> Run=%s\n" -msgstr " --> Run=%s\n" +msgid "Read block %d failed! ERR=%s\n" +msgstr "" -#: src/dird/dird_conf.c:779 +#: src/stored/btape.c:1236 #, c-format -msgid " --> SelectionPattern=%s\n" -msgstr " --> SelectionPattern=%s\n" +msgid "Read record failed. Block %d! ERR=%s\n" +msgstr "" -#: src/dird/dird_conf.c:793 +#: src/stored/btape.c:1242 src/stored/btape.c:1374 #, c-format -msgid "FileSet: name=%s\n" -msgstr "FileSet: name=%s\n" +msgid "Bad data in record. Expected %d, got %d at byte %d. Test failed!\n" +msgstr "" -#: src/dird/dird_conf.c:887 src/dird/dird_conf.c:966 +#: src/stored/btape.c:1249 #, c-format -msgid "Schedule: name=%s\n" -msgstr "Schedule: name=%s\n" +msgid "%d blocks re-read correctly.\n" +msgstr "" -#: src/dird/dird_conf.c:892 -#, c-format -msgid " --> Run Level=%s\n" -msgstr " --> Run Level=%s\n" +#: src/stored/btape.c:1252 src/stored/btape.c:1381 +msgid "" +"=== Test Succeeded. End Write, rewind, and re-read test ===\n" +"\n" +msgstr "" -#: src/dird/dird_conf.c:893 -msgid " hour=" -msgstr " hour=" +#: src/stored/btape.c:1280 +msgid "Block position test\n" +msgstr "" -#: src/dird/dird_conf.c:902 -msgid " mday=" -msgstr " mday=" +#: src/stored/btape.c:1335 +#, c-format +msgid "Reposition to file:block %d:%d\n" +msgstr "" -#: src/dird/dird_conf.c:911 -msgid " month=" -msgstr " month=" +#: src/stored/btape.c:1337 +msgid "Reposition error.\n" +msgstr "" -#: src/dird/dird_conf.c:920 -msgid " wday=" -msgstr " wday=" +#: src/stored/btape.c:1350 +#, c-format +msgid "" +"Read block %d failed! file=%d blk=%d. ERR=%s\n" +"\n" +msgstr "" -#: src/dird/dird_conf.c:929 -msgid " wom=" -msgstr " wom=" +#: src/stored/btape.c:1352 +msgid "" +"This may be because the tape drive block size is not\n" +" set to variable blocking as normally used by Bacula.\n" +" Please see the Tape Testing chapter in the manual and \n" +" look for using mt with defblksize and setoptions\n" +"If your tape drive block size is correct, then perhaps\n" +" your SCSI driver is *really* stupid and does not\n" +" correctly report the file:block after a FSF. In this\n" +" case try setting:\n" +" Fast Forward Space File = no\n" +" in your Device resource.\n" +msgstr "" -#: src/dird/dird_conf.c:938 -msgid " woy=" -msgstr " woy=" +#: src/stored/btape.c:1368 +#, c-format +msgid "Read record failed! ERR=%s\n" +msgstr "" -#: src/dird/dird_conf.c:947 +#: src/stored/btape.c:1379 #, c-format -msgid " mins=%d\n" -msgstr " mins=%d\n" +msgid "Block %d re-read correctly.\n" +msgstr "" -#: src/dird/dird_conf.c:949 src/dird/dird_conf.c:953 src/dird/dird_conf.c:957 -msgid " --> " -msgstr " --> " +#: src/stored/btape.c:1400 +msgid "" +"\n" +"\n" +"=== Append files test ===\n" +"\n" +"This test is essential to Bacula.\n" +"\n" +"I'm going to write one record in file 0,\n" +" two records in file 1,\n" +" and three records in file 2\n" +"\n" +msgstr "" -#: src/dird/dird_conf.c:974 -#, c-format -msgid "Pool: name=%s PoolType=%s\n" -msgstr "Pool: name=%s PoolType=%s\n" +#: src/stored/btape.c:1424 +msgid "Now moving to end of medium.\n" +msgstr "" -#: src/dird/dird_conf.c:976 +#: src/stored/btape.c:1426 src/stored/btape.c:1655 #, c-format -msgid " use_cat=%d use_once=%d cat_files=%d\n" -msgstr " use_cat=%d use_once=%d cat_files=%d\n" +msgid "We should be in file 3. I am at file %d. %s\n" +msgstr "" -#: src/dird/dird_conf.c:979 -#, c-format -msgid " max_vols=%d auto_prune=%d VolRetention=%s\n" -msgstr " max_vols=%d auto_prune=%d VolRetention=%s\n" +#: src/stored/btape.c:1427 src/stored/btape.c:1445 src/stored/btape.c:1644 +#: src/stored/btape.c:1656 src/stored/btape.c:1669 src/stored/btape.c:1686 +msgid "This is correct!" +msgstr "" -#: src/dird/dird_conf.c:982 -#, c-format -msgid " VolUse=%s recycle=%d LabelFormat=%s\n" -msgstr " VolUse=%s recycle=%d LabelFormat=%s\n" +#: src/stored/btape.c:1427 src/stored/btape.c:1445 src/stored/btape.c:1644 +#: src/stored/btape.c:1656 src/stored/btape.c:1669 src/stored/btape.c:1686 +msgid "This is NOT correct!!!!" +msgstr "" -#: src/dird/dird_conf.c:986 -#, c-format -msgid " CleaningPrefix=%s LabelType=%d\n" -msgstr " CleaningPrefix=%s LabelType=%d\n" +#: src/stored/btape.c:1433 +msgid "" +"\n" +"Now the important part, I am going to attempt to append to the tape.\n" +"\n" +msgstr "" -#: src/dird/dird_conf.c:988 -#, fuzzy, c-format -msgid " RecyleOldest=%d PurgeOldest=%d ActionOnPurge=%d\n" -msgstr " RecyleOldest=%d PurgeOldest=%d MaxVolJobs=%d MaxVolFiles=%d\n" +#: src/stored/btape.c:1440 +msgid "" +"Done appending, there should be no I/O errors\n" +"\n" +msgstr "" + +#: src/stored/btape.c:1441 +msgid "Doing Bacula scan of blocks:\n" +msgstr "" -#: src/dird/dird_conf.c:992 -#, fuzzy, c-format -msgid " MaxVolJobs=%d MaxVolFiles=%d MaxVolBytes=%s\n" -msgstr " max_vols=%d auto_prune=%d VolRetention=%s\n" +#: src/stored/btape.c:1443 +msgid "End scanning the tape.\n" +msgstr "" -#: src/dird/dird_conf.c:996 +#: src/stored/btape.c:1444 src/stored/btape.c:1668 #, c-format -msgid " MigTime=%s MigHiBytes=%s MigLoBytes=%s\n" -msgstr " MigTime=%s MigHiBytes=%s MigLoBytes=%s\n" +msgid "We should be in file 4. I am at file %d. %s\n" +msgstr "" -#: src/dird/dird_conf.c:1000 -#, fuzzy, c-format -msgid " JobRetention=%s FileRetention=%s\n" -msgstr " JobRetention=%s FileRetention=%s AutoPrune=%d\n" +#: src/stored/btape.c:1469 +msgid "" +"\n" +"Autochanger enabled, but no name or no command device specified.\n" +msgstr "" -#: src/dird/dird_conf.c:1004 -#, fuzzy, c-format -msgid " NextPool=%s\n" -msgstr " opcmd=%s\n" +#: src/stored/btape.c:1473 +msgid "" +"\n" +"Ah, I see you have an autochanger configured.\n" +"To test the autochanger you must have a blank tape\n" +" that I can write on in Slot 1.\n" +msgstr "" -#: src/dird/dird_conf.c:1007 -#, fuzzy, c-format -msgid " RecyclePool=%s\n" -msgstr " opcmd=%s\n" +#: src/stored/btape.c:1476 +msgid "" +"\n" +"Do you wish to continue with the Autochanger test? (y/n): " +msgstr "" -#: src/dird/dird_conf.c:1010 -#, fuzzy, c-format -msgid " ScratchPool=%s\n" -msgstr " opcmd=%s\n" +#: src/stored/btape.c:1483 +msgid "" +"\n" +"\n" +"=== Autochanger test ===\n" +"\n" +msgstr "" -#: src/dird/dird_conf.c:1013 -#, fuzzy, c-format -msgid " Catalog=%s\n" -msgstr " mailcmd=%s\n" +#: src/stored/btape.c:1492 +msgid "3301 Issuing autochanger \"loaded\" command.\n" +msgstr "" -#: src/dird/dird_conf.c:1033 +#: src/stored/btape.c:1501 #, c-format -msgid "Messages: name=%s\n" -msgstr "Messages: name=%s\n" +msgid "3991 Bad autochanger command: %s\n" +msgstr "" -#: src/dird/dird_conf.c:1035 +#: src/stored/btape.c:1502 #, c-format -msgid " mailcmd=%s\n" -msgstr " mailcmd=%s\n" +msgid "3991 result=\"%s\": ERR=%s\n" +msgstr "" -#: src/dird/dird_conf.c:1037 +#: src/stored/btape.c:1506 #, c-format -msgid " opcmd=%s\n" -msgstr " opcmd=%s\n" +msgid "Slot %d loaded. I am going to unload it.\n" +msgstr "" -#: src/dird/dird_conf.c:1041 src/tray-monitor/tray_conf.c:199 -#: src/qt-console/tray-monitor/tray_conf.cpp:199 -#, c-format -msgid "Unknown resource type %d in dump_resource.\n" -msgstr "Unbekannter resource type %d in dump_resource.\n" +#: src/stored/btape.c:1508 +msgid "Nothing loaded in the drive. OK.\n" +msgstr "" -#: src/dird/dird_conf.c:1372 src/tray-monitor/tray_conf.c:257 -#: src/qt-console/tray-monitor/tray_conf.cpp:257 +#: src/stored/btape.c:1515 #, c-format -msgid "Unknown resource type %d in free_resource.\n" -msgstr "Unbekannter resource type %d in free_resource.\n" +msgid "3302 Issuing autochanger \"unload %d %d\" command.\n" +msgstr "" -#: src/dird/dird_conf.c:1404 src/dird/dird_conf.c:1419 -#: src/tray-monitor/tray_conf.c:288 src/wx-console/console_conf.c:265 -#: src/console/console_conf.c:259 src/filed/filed_conf.c:361 -#: src/qt-console/tray-monitor/tray_conf.cpp:288 -#: src/qt-console/bat_conf.cpp:265 +#: src/stored/btape.c:1520 #, c-format -msgid "%s item is required in %s resource, but not found.\n" -msgstr "%s item wird in %s resource benötigt, wurde aber nicht gefunden.\n" +msgid "unload status=%s %d\n" +msgstr "" -#: src/dird/dird_conf.c:1410 src/tray-monitor/tray_conf.c:294 -#: src/lib/parse_conf.c:225 src/qt-console/tray-monitor/tray_conf.cpp:294 -#, c-format -msgid "Too many items in %s resource\n" -msgstr "zu viele items in %s resource\n" +#: src/stored/btape.c:1520 src/lib/util.c:177 src/lib/util.c:309 +#: src/dird/ua_status.c:1093 src/lib/status.h:115 +msgid "OK" +msgstr "" -#: src/dird/dird_conf.c:1450 -#, c-format -msgid "Cannot find Pool resource %s\n" -msgstr "Kann Pool resource %s nicht finden\n" +#: src/stored/btape.c:1520 +msgid "Bad" +msgstr "" -#: src/dird/dird_conf.c:1461 +#: src/stored/btape.c:1523 #, c-format -msgid "Cannot find Console resource %s\n" -msgstr "Kann Console resource %s nicht finden\n" +msgid "3992 Bad autochanger command: %s\n" +msgstr "" -#: src/dird/dird_conf.c:1467 src/stored/stored_conf.c:611 -#: src/filed/filed_conf.c:381 +#: src/stored/btape.c:1524 #, c-format -msgid "Cannot find Director resource %s\n" -msgstr "Kann Director resource %s nicht finden\n" +msgid "3992 result=\"%s\": ERR=%s\n" +msgstr "" -#: src/dird/dird_conf.c:1474 src/stored/stored_conf.c:617 +#: src/stored/btape.c:1534 #, c-format -msgid "Cannot find Storage resource %s\n" -msgstr "Kann Storage resource %s nicht finden\n" +msgid "3303 Issuing autochanger \"load %d %d\" command.\n" +msgstr "" -#: src/dird/dird_conf.c:1483 +#: src/stored/btape.c:1542 #, c-format -msgid "Cannot find Job resource %s\n" -msgstr "Kann Job resource %s nicht finden\n" +msgid "3303 Autochanger \"load %d %d\" status is OK.\n" +msgstr "" -#: src/dird/dird_conf.c:1533 +#: src/stored/btape.c:1546 #, c-format -msgid "Cannot find Counter resource %s\n" -msgstr "Kann Counter resource %s nicht finden\n" +msgid "3993 Bad autochanger command: %s\n" +msgstr "" -#: src/dird/dird_conf.c:1541 src/filed/filed_conf.c:387 +#: src/stored/btape.c:1547 #, c-format -msgid "Cannot find Client resource %s\n" -msgstr "Kann Client resource %s nicht finden\n" +msgid "3993 result=\"%s\": ERR=%s\n" +msgstr "" -#: src/dird/dird_conf.c:1554 -#, c-format -msgid "Cannot find Schedule resource %s\n" -msgstr "Kann Schedule resource %s nicht finden\n" +#: src/stored/btape.c:1562 +msgid "" +"\n" +"The test failed, probably because you need to put\n" +"a longer sleep time in the mtx-script in the load) case.\n" +"Adding a 30 second sleep and trying again ...\n" +msgstr "" -#: src/dird/dird_conf.c:1559 src/dird/dird_conf.c:1619 -#: src/tray-monitor/tray_conf.c:314 src/tray-monitor/tray_conf.c:352 -#: src/qt-console/tray-monitor/tray_conf.cpp:314 -#: src/qt-console/tray-monitor/tray_conf.cpp:352 +#: src/stored/btape.c:1575 #, c-format -msgid "Unknown resource type %d in save_resource.\n" -msgstr "Unbekannter resource type %d in save_resource.\n" +msgid "Wrote EOF to %s\n" +msgstr "" -#: src/dird/dird_conf.c:1634 +#: src/stored/btape.c:1579 #, c-format -msgid "Name item is required in %s resource, but not found.\n" -msgstr "Name item wird benötigt in %s resource, wurde aber nicht gefunden.\n" +msgid "" +"\n" +"The test worked this time. Please add:\n" +"\n" +" sleep %d\n" +"\n" +"to your mtx-changer script in the load) case.\n" +"\n" +msgstr "" -#: src/dird/dird_conf.c:1642 src/tray-monitor/tray_conf.c:372 -#: src/wx-console/console_conf.c:328 src/console/console_conf.c:322 -#: src/filed/filed_conf.c:446 src/qt-console/tray-monitor/tray_conf.cpp:372 -#: src/qt-console/bat_conf.cpp:334 -#, c-format -msgid "Attempt to define second %s resource named \"%s\" is not permitted.\n" +#: src/stored/btape.c:1584 +msgid "" +"\n" +"The test autochanger worked!!\n" +"\n" msgstr "" -"Der Versuch der Definition einer zweiten %s resource mit dem Namen \"%s\" " -"ist nicht erlaubt.\n" -#: src/dird/dird_conf.c:1647 -#, c-format -msgid "Inserting %s res: %s index=%d pass=%d\n" -msgstr "Inserting %s res: %s index=%d pass=%d\n" +#: src/stored/btape.c:1595 +msgid "You must correct this error or the Autochanger will not work.\n" +msgstr "" -#: src/dird/dird_conf.c:1660 -#, fuzzy, c-format -msgid "Expected one of: %s, got: %s" -msgstr "Erwartet: %s, erhalten: %s" +#: src/stored/btape.c:1613 +msgid "" +"\n" +"\n" +"=== Forward space files test ===\n" +"\n" +"This test is essential to Bacula.\n" +"\n" +"I'm going to write five files then test forward spacing\n" +"\n" +msgstr "" -#: src/dird/dird_conf.c:1732 -#, c-format -msgid "Expected a Migration Job Type keyword, got: %s" -msgstr " Migration Job Type Schlüsselwort erwartet, erhalten: %s" +#: src/stored/btape.c:1638 +msgid "Now forward spacing 1 file.\n" +msgstr "" -#: src/dird/dird_conf.c:1758 +#: src/stored/btape.c:1640 src/stored/btape.c:1652 src/stored/btape.c:1665 +#: src/stored/btape.c:1683 src/stored/btape.c:1859 #, c-format -msgid "Expected a Job Type keyword, got: %s" -msgstr "Job Type Schlüsselwort erwartet, erhalten: %s" +msgid "Bad status from fsr. ERR=%s\n" +msgstr "" -#: src/dird/dird_conf.c:1782 +#: src/stored/btape.c:1643 #, c-format -msgid "Expected a Job Level keyword, got: %s" -msgstr "Job Level Schlüsselwort erwartet, erhalten: %s" +msgid "We should be in file 1. I am at file %d. %s\n" +msgstr "" -#: src/dird/dird_conf.c:1802 -#, c-format -msgid "Expected a Restore replacement option, got: %s" -msgstr "Restore replacement Option erwartet, erhalten: %s" +#: src/stored/btape.c:1650 +msgid "Now forward spacing 2 files.\n" +msgstr "" -#: src/dird/dird_conf.c:1852 src/dird/dird_conf.c:1968 -#: src/lib/parse_conf.c:761 src/lib/parse_conf.c:777 src/lib/ini.c:593 -#, c-format -msgid "Expect %s, got: %s" -msgstr "Erwartet: %s, erhalten: %s" +#: src/stored/btape.c:1663 +msgid "Now forward spacing 4 files.\n" +msgstr "" -#: src/dird/dird_conf.c:1874 src/lib/parse_conf.c:478 -#, c-format -msgid "Could not find config Resource %s referenced on line %d : %s\n" +#: src/stored/btape.c:1675 +msgid "" +"The test worked this time. Please add:\n" +"\n" +" Fast Forward Space File = no\n" +"\n" +"to your Device resource for this drive.\n" msgstr "" -"Konnte config Resource %s , referenziert in Zeile %d : %s nicht finden\n" -#: src/dird/getmsg.c:176 -#, c-format -msgid "bget_dirmsg: unknown bnet signal %d\n" -msgstr "bget_dirmsg: unbekanntes bnet Signal %d\n" +#: src/stored/btape.c:1681 +msgid "Now forward spacing 1 more file.\n" +msgstr "" -#: src/dird/getmsg.c:194 src/dird/getmsg.c:200 src/dird/getmsg.c:213 -#: src/dird/getmsg.c:247 src/dird/getmsg.c:269 src/dird/getmsg.c:295 +#: src/stored/btape.c:1685 #, c-format -msgid "Malformed message: %s\n" -msgstr "Nicht wohlgeformte Nachricht: %s\n" +msgid "We should be in file 5. I am at file %d. %s\n" +msgstr "" -#: src/dird/getmsg.c:367 -#, c-format -msgid "Bad response to %s command: wanted %s, got %s\n" -msgstr "Schlechte Antwort auf %s Kommando: erwartet %s, erhalten %s\n" +#: src/stored/btape.c:1690 +msgid "" +"\n" +"=== End Forward space files test ===\n" +"\n" +msgstr "" -#: src/dird/getmsg.c:372 -#, c-format -msgid "Socket error on %s command: ERR=%s\n" -msgstr "Socket Fehler auf %s Kommando: ERR=%s\n" +#: src/stored/btape.c:1694 +msgid "" +"\n" +"The forward space file test failed.\n" +msgstr "" -#: src/dird/ua_restore.c:148 -msgid "\"RegexWhere\" specification not authorized.\n" +#: src/stored/btape.c:1696 +msgid "" +"You have Fast Forward Space File enabled.\n" +"I am turning it off then retrying the test.\n" msgstr "" -#: src/dird/ua_restore.c:155 -msgid "\"where\" specification not authorized.\n" +#: src/stored/btape.c:1702 +msgid "" +"You must correct this error or Bacula will not work.\n" +"Some systems, e.g. OpenBSD, require you to set\n" +" Use MTIOCGET= no\n" +"in your device resource. Use with caution.\n" msgstr "" -#: src/dird/ua_restore.c:177 +#: src/stored/btape.c:1736 msgid "" -"No Restore Job Resource found in bacula-dir.conf.\n" -"You must create at least one before running this command.\n" +"\n" +"Append test failed. Attempting again.\n" +"Setting \"Hardware End of Medium = no\n" +" and \"Fast Forward Space File = no\n" +"and retrying append test.\n" +"\n" msgstr "" -#: src/dird/ua_restore.c:194 -msgid "Restore not done.\n" +#: src/stored/btape.c:1744 +msgid "" +"\n" +"\n" +"It looks like the test worked this time, please add:\n" +"\n" +" Hardware End of Medium = No\n" +"\n" +" Fast Forward Space File = No\n" +"to your Device resource in the Storage conf file.\n" msgstr "" -#: src/dird/ua_restore.c:205 -msgid "Unable to construct a valid BSR. Cannot continue.\n" +#: src/stored/btape.c:1751 +msgid "" +"\n" +"\n" +"That appears *NOT* to have corrected the problem.\n" msgstr "" -#: src/dird/ua_restore.c:209 src/dird/ua_restore.c:221 -msgid "No files selected to be restored.\n" +#: src/stored/btape.c:1756 +msgid "" +"\n" +"\n" +"It looks like the append failed. Attempting again.\n" +"Setting \"BSF at EOM = yes\" and retrying append test.\n" msgstr "" -#: src/dird/ua_restore.c:215 +#: src/stored/btape.c:1761 msgid "" "\n" -"1 file selected to be restored.\n" "\n" +"It looks like the test worked this time, please add:\n" +"\n" +" Hardware End of Medium = No\n" +" Fast Forward Space File = No\n" +" BSF at EOM = yes\n" +"\n" +"to your Device resource in the Storage conf file.\n" msgstr "" -#: src/dird/ua_restore.c:217 -#, c-format +#: src/stored/btape.c:1772 msgid "" "\n" -"%s files selected to be restored.\n" +"Append test failed.\n" "\n" +"\n" +"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n" +"Unable to correct the problem. You MUST fix this\n" +"problem before Bacula can use your tape drive correctly\n" +"\n" +"Perhaps running Bacula in fixed block mode will work.\n" +"Do so by setting:\n" +"\n" +"Minimum Block Size = nnn\n" +"Maximum Block Size = nnn\n" +"\n" +"in your Storage daemon's Device definition.\n" +"nnn must match your tape driver's block size, which\n" +"can be determined by reading your tape manufacturers\n" +"information, and the information on your kernel dirver.\n" +"Fixed block sizes, however, are not normally an ideal solution.\n" +"\n" +"Some systems, e.g. OpenBSD, require you to set\n" +" Use MTIOCGET= no\n" +"in your device resource. Use with caution.\n" msgstr "" -#: src/dird/ua_restore.c:236 -msgid "No Client resource found!\n" -msgstr "" - -#: src/dird/ua_restore.c:333 -msgid "The restore will use the following job(s) as Base\n" +#: src/stored/btape.c:1794 +msgid "" +"\n" +"The above Bacula scan should have output identical to what follows.\n" +"Please double check it ...\n" +"=== Sample correct output ===\n" +"1 block of 64448 bytes in file 1\n" +"End of File mark.\n" +"2 blocks of 64448 bytes in file 2\n" +"End of File mark.\n" +"3 blocks of 64448 bytes in file 3\n" +"End of File mark.\n" +"1 block of 64448 bytes in file 4\n" +"End of File mark.\n" +"Total files=4, blocks=7, bytes = 451,136\n" +"=== End sample correct output ===\n" +"\n" +"If the above scan output is not identical to the\n" +"sample output, you MUST correct the problem\n" +"or Bacula will not be able to write multiple Jobs to \n" +"the tape.\n" +"\n" msgstr "" -#: src/dird/ua_restore.c:354 +#: src/stored/btape.c:1837 #, c-format -msgid "Missing value for keyword: %s\n" -msgstr "" - -#: src/dird/ua_restore.c:434 -msgid "List last 20 Jobs run" -msgstr "" - -#: src/dird/ua_restore.c:435 -msgid "List Jobs where a given File is saved" -msgstr "" - -#: src/dird/ua_restore.c:436 -msgid "Enter list of comma separated JobIds to select" -msgstr "" - -#: src/dird/ua_restore.c:437 -msgid "Enter SQL list command" +msgid "Bad status from fsf. ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:438 -msgid "Select the most recent backup for a client" +#: src/stored/btape.c:1841 +msgid "Forward spaced 1 file.\n" msgstr "" -#: src/dird/ua_restore.c:439 -msgid "Select backup for a client before a specified time" +#: src/stored/btape.c:1844 +#, c-format +msgid "Forward spaced %d files.\n" msgstr "" -#: src/dird/ua_restore.c:440 -msgid "Enter a list of files to restore" +#: src/stored/btape.c:1863 +msgid "Forward spaced 1 record.\n" msgstr "" -#: src/dird/ua_restore.c:441 -msgid "Enter a list of files to restore before a specified time" +#: src/stored/btape.c:1866 +#, c-format +msgid "Forward spaced %d records.\n" msgstr "" -#: src/dird/ua_restore.c:442 -msgid "Find the JobIds of the most recent backup for a client" +#: src/stored/btape.c:1911 +#, c-format +msgid "Wrote one record of %d bytes.\n" msgstr "" -#: src/dird/ua_restore.c:443 -msgid "Find the JobIds for a backup for a client before a specified time" +#: src/stored/btape.c:1913 +msgid "Wrote block to device.\n" msgstr "" -#: src/dird/ua_restore.c:444 -msgid "Enter a list of directories to restore for found JobIds" +#: src/stored/btape.c:1927 +msgid "Enter length to read: " msgstr "" -#: src/dird/ua_restore.c:445 -msgid "Select full restore to a specified Job date" +#: src/stored/btape.c:1932 +msgid "Bad length entered, using default of 1024 bytes.\n" msgstr "" -#: src/dird/ua_restore.c:446 src/dird/ua_status.c:862 src/stored/status.c:611 -#: src/filed/status.c:373 src/wx-console/wxbconfigpanel.cpp:220 -msgid "Cancel" +#: src/stored/btape.c:1941 +#, c-format +msgid "Read of %d bytes gives stat=%d. ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:491 +#: src/stored/btape.c:1964 src/stored/btape.c:2013 #, c-format -msgid "Unknown keyword: %s\n" +msgid "End of tape\n" msgstr "" -#: src/dird/ua_restore.c:520 src/dird/ua_update.c:957 +#: src/stored/btape.c:1969 #, c-format -msgid "Improper date format: %s\n" +msgid "Starting scan at file %u\n" msgstr "" -#: src/dird/ua_restore.c:560 +#: src/stored/btape.c:1974 src/stored/tape_dev.c:613 #, c-format -msgid "Error: Pool resource \"%s\" access not allowed.\n" +msgid "read error on %s. ERR=%s.\n" msgstr "" -#: src/dird/ua_restore.c:576 -msgid "" -"\n" -"First you select one or more JobIds that contain files\n" -"to be restored. You will be presented several methods\n" -"of specifying the JobIds. Then you will be allowed to\n" -"select which files from those JobIds are to be restored.\n" -"\n" +#: src/stored/btape.c:1976 +#, c-format +msgid "Bad status from read %d. ERR=%s\n" msgstr "" -"\n" -"Zuerst wählen Sie eine oder mehrere JobIds die Dateien enthalten\n" -"die wiederhergestellt werden sollen. Es werden mehrere Methoden\n" -"zur ermittlung der JobIds angezeigt. Dann können Sie auswählen, \n" -"welche Dateien von diesen JobIds wiederhergestellt werden sollen.\n" -"\n" -#: src/dird/ua_restore.c:589 -msgid "To select the JobIds, you have the following choices:\n" +#: src/stored/btape.c:1979 src/stored/btape.c:1993 src/stored/btape.c:2057 +#: src/stored/btape.c:2069 src/stored/btape.c:2082 src/stored/btape.c:2098 +#, c-format +msgid "1 block of %d bytes in file %d\n" msgstr "" -#: src/dird/ua_restore.c:594 -msgid "Select item: " +#: src/stored/btape.c:1982 src/stored/btape.c:1996 src/stored/btape.c:2060 +#: src/stored/btape.c:2072 src/stored/btape.c:2085 src/stored/btape.c:2101 +#, c-format +msgid "%d blocks of %d bytes in file %d\n" msgstr "" -#: src/dird/ua_restore.c:599 src/dird/ua_restore.c:634 -msgid "SQL query not authorized.\n" +#: src/stored/btape.c:2004 src/stored/btape.c:2076 +#, c-format +msgid "End of File mark.\n" msgstr "" -#: src/dird/ua_restore.c:612 -msgid "Enter Filename (no path):" +#: src/stored/btape.c:2025 src/stored/btape.c:2129 +#, c-format +msgid "Total files=%d, blocks=%d, bytes = %s\n" msgstr "" -#: src/dird/ua_restore.c:627 src/dird/ua_restore.c:735 -msgid "Enter JobId(s), comma separated, to restore: " +#: src/stored/btape.c:2089 +#, c-format +msgid "Short block read.\n" msgstr "" -#: src/dird/ua_restore.c:637 -msgid "Enter SQL list command: " +#: src/stored/btape.c:2092 +#, c-format +msgid "Error reading block. ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:671 src/dird/ua_restore.c:694 +#: src/stored/btape.c:2116 +#, c-format msgid "" -"Enter file names with paths, or < to enter a filename\n" -"containing a list of file names with paths, and terminate\n" -"them with a blank line.\n" -msgstr "" - -#: src/dird/ua_restore.c:675 src/dird/ua_restore.c:698 -msgid "Enter full filename: " +"Block=%u file,blk=%u,%u blen=%u First rec FI=%s SessId=%u SessTim=%u Strm=%s " +"rlen=%d\n" msgstr "" -#: src/dird/ua_restore.c:733 +#: src/stored/btape.c:2138 #, c-format -msgid "You have already selected the following JobIds: %s\n" +msgid "Device status: %u. ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:751 +#: src/stored/btape.c:2170 +#, c-format msgid "" -"Enter full directory names or start the name\n" -"with a < to indicate it is a filename containing a list\n" -"of directories and terminate them with a blank line.\n" -msgstr "" - -#: src/dird/ua_restore.c:755 -msgid "Enter directory name: " -msgstr "" - -#: src/dird/ua_restore.c:771 -msgid "Enter JobId to get the state to restore: " +"\n" +"This command simulates Bacula writing to a tape.\n" +"It requires either one or two blank tapes, which it\n" +"will label and write.\n" +"\n" +"If you have an autochanger configured, it will use\n" +"the tapes that are in slots 1 and 2, otherwise, you will\n" +"be prompted to insert the tapes when necessary.\n" +"\n" +"It will print a status approximately\n" +"every 322 MB, and write an EOF every %s. If you have\n" +"selected the simple test option, after writing the first tape\n" +"it will rewind it and re-read the last block written.\n" +"\n" +"If you have selected the multiple tape test, when the first tape\n" +"fills, it will ask for a second, and after writing a few more \n" +"blocks, it will stop. Then it will begin re-reading the\n" +"two tapes.\n" +"\n" +"This may take a long time -- hours! ...\n" +"\n" msgstr "" -#: src/dird/ua_restore.c:784 -#, c-format -msgid "Selecting jobs to build the Full state at %s\n" +#: src/stored/btape.c:2188 +msgid "" +"Do you want to run the simplified test (s) with one tape\n" +"or the complete multiple tape (m) test: (s/m) " msgstr "" -#: src/dird/ua_restore.c:810 -msgid "Invalid JobId in list.\n" +#: src/stored/btape.c:2191 +msgid "Simple test (single tape) selected.\n" msgstr "" -#: src/dird/ua_restore.c:829 -#, c-format -msgid "Access to JobId=%s (Job \"%s\") not authorized. Not selected.\n" +#: src/stored/btape.c:2194 +msgid "Multiple tape test selected.\n" msgstr "" -#: src/dird/ua_restore.c:842 -msgid "No Jobs selected.\n" +#: src/stored/btape.c:2236 +msgid "Wrote Start of Session label.\n" msgstr "" -#: src/dird/ua_restore.c:847 +#: src/stored/btape.c:2255 #, c-format -msgid "You have selected the following JobIds: %s\n" +msgid "%s Begin writing Bacula records to tape ...\n" msgstr "" -#: src/dird/ua_restore.c:849 +#: src/stored/btape.c:2257 #, c-format -msgid "You have selected the following JobId: %s\n" -msgstr "" - -#: src/dird/ua_restore.c:859 -msgid "" -"The restored files will the most current backup\n" -"BEFORE the date you specify below.\n" -"\n" -msgstr "" - -#: src/dird/ua_restore.c:862 -msgid "Enter date as YYYY-MM-DD HH:MM:SS :" -msgstr "" - -#: src/dird/ua_restore.c:868 -msgid "Improper date format.\n" +msgid "%s Begin writing Bacula records to first tape ...\n" msgstr "" -#: src/dird/ua_restore.c:889 -#, c-format -msgid "Cannot open file %s: ERR=%s\n" -msgstr "" +#: src/stored/btape.c:2283 +#, fuzzy +msgid "Flush block failed.\n" +msgstr "Job Einrichtung Fehlgeschlagen.\n" -#: src/dird/ua_restore.c:897 src/dird/ua_restore.c:901 +#: src/stored/btape.c:2297 #, c-format -msgid "Error occurred on line %d of file \"%s\"\n" +msgid "Wrote block=%u, file,blk=%u,%u VolBytes=%s rate=%sB/s\n" msgstr "" -#: src/dird/ua_restore.c:945 src/dird/ua_restore.c:973 +#: src/stored/btape.c:2308 #, c-format -msgid "No database record found for: %s\n" +msgid "%s Flush block, write EOF\n" msgstr "" -#: src/dird/ua_restore.c:961 -msgid "No JobId specified cannot continue.\n" +#: src/stored/btape.c:2317 +msgid "Wrote 1000 blocks on second tape. Done.\n" msgstr "" -#: src/dird/ua_restore.c:994 -#, c-format -msgid "No table found: %s\n" +#: src/stored/btape.c:2322 +msgid "Not OK\n" msgstr "" -#: src/dird/ua_restore.c:1052 -msgid "" -"\n" -"\n" -"For one or more of the JobIds selected, no files were found,\n" -"so file selection is not possible.\n" -"Most likely your retention policy pruned the files.\n" -msgstr "" +#: src/stored/btape.c:2346 +#, fuzzy +msgid "Job canceled.\n" +msgstr "%s Abgebrochen" -#: src/dird/ua_restore.c:1055 -msgid "" -"\n" -"Do you want to restore all the files? (yes|no): " +#: src/stored/btape.c:2357 +msgid "Set ok=false after write_block_to_device.\n" msgstr "" -#: src/dird/ua_restore.c:1058 -msgid "" -"\n" -"Regexp matching files to restore? (empty to abort): " +#: src/stored/btape.c:2361 +msgid "Wrote End of Session label.\n" msgstr "" -#: src/dird/ua_restore.c:1074 -#, fuzzy, c-format -msgid "Regex compile error: %s\n" -msgstr "Regex Übersetzungsfehler. ERR=%s\n" +#: src/stored/btape.c:2385 +#, c-format +msgid "Wrote state file last_block_num1=%d last_block_num2=%d\n" +msgstr "" -#: src/dird/ua_restore.c:1137 +#: src/stored/btape.c:2389 #, c-format -msgid "" -"\n" -"Building directory tree for JobId(s) %s ... " +msgid "Could not create state file: %s ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:1207 +#: src/stored/btape.c:2400 #, c-format msgid "" "\n" -"%s files inserted into the tree and marked for extraction.\n" +"\n" +"%s Done filling tape at %d:%d. Now beginning re-read of tape ...\n" msgstr "" -#: src/dird/ua_restore.c:1210 +#: src/stored/btape.c:2403 #, c-format msgid "" "\n" -"%s files inserted into the tree.\n" +"\n" +"%s Done filling tapes at %d:%d. Now beginning re-read of first tape ...\n" msgstr "" -#: src/dird/ua_restore.c:1285 -#, c-format -msgid "Error getting FileSet \"%s\": ERR=%s\n" +#: src/stored/btape.c:2409 +msgid "do_unfill failed.\n" msgstr "" -#: src/dird/ua_restore.c:1290 -#, fuzzy, c-format -msgid "FileSet argument: %s\n" -msgstr "FileSet: name=%s\n" - -#: src/dird/ua_restore.c:1302 +#: src/stored/btape.c:2414 #, c-format -msgid "No FileSet found for client \"%s\".\n" +msgid "%s: Error during test.\n" msgstr "" -#: src/dird/ua_restore.c:1308 -#, c-format -msgid "Error getting FileSet record: %s\n" +#: src/stored/btape.c:2449 +msgid "" +"\n" +"The state file level has changed. You must redo\n" +"the fill command.\n" msgstr "" -#: src/dird/ua_restore.c:1309 +#: src/stored/btape.c:2456 +#, c-format msgid "" -"This probably means you modified the FileSet.\n" -"Continuing anyway.\n" +"\n" +"Could not find the state file: %s ERR=%s\n" +"You must redo the fill command.\n" msgstr "" -#: src/dird/ua_restore.c:1324 -#, c-format -msgid "Pool \"%s\" not found, using any pool.\n" +#: src/stored/btape.c:2522 +msgid "Mount first tape. Press enter when ready: " msgstr "" -#: src/dird/ua_restore.c:1351 src/dird/ua_restore.c:1367 -#, c-format -msgid "No Full backup before %s found.\n" +#: src/stored/btape.c:2538 +msgid "Rewinding.\n" msgstr "" -#: src/dird/ua_restore.c:1396 -msgid "No jobs found.\n" +#: src/stored/btape.c:2543 +#, c-format +msgid "Reading the first 10000 records from %u:%u.\n" msgstr "" -#: src/dird/ua_restore.c:1517 +#: src/stored/btape.c:2547 src/stored/btape.c:2615 #, c-format -msgid "Warning default storage overridden by \"%s\" on command line.\n" +msgid "Reposition from %u:%u to %u:%u\n" msgstr "" -#: src/dird/ua_restore.c:1534 +#: src/stored/btape.c:2550 src/stored/btape.c:2602 src/stored/btape.c:2618 #, c-format -msgid "Using Storage \"%s\" from MediaType \"%s\".\n" +msgid "Reposition error. ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:1537 +#: src/stored/btape.c:2553 #, c-format -msgid "Storage \"%s\" not found, using Storage \"%s\" from MediaType \"%s\".\n" +msgid "Reading block %u.\n" msgstr "" -#: src/dird/ua_restore.c:1546 +#: src/stored/btape.c:2555 src/stored/btape.c:2607 src/stored/btape.c:2623 #, c-format +msgid "Error reading block: ERR=%s\n" +msgstr "" + +#: src/stored/btape.c:2560 msgid "" "\n" -"Unable to find Storage resource for\n" -"MediaType \"%s\", needed by the Jobs you selected.\n" +"The last block on the tape matches. Test succeeded.\n" +"\n" msgstr "" -#: src/dird/fd_cmds.c:95 -msgid "Client: " +#: src/stored/btape.c:2563 +msgid "" +"\n" +"The last block of the first tape matches.\n" +"\n" msgstr "" -#: src/dird/fd_cmds.c:137 -#, c-format -msgid "File daemon \"%s\" rejected Job command: %s\n" -msgstr "File daemon \"%s\" hat Job Kommando abgewiesen: %s\n" +#: src/stored/btape.c:2587 +msgid "Mount second tape. Press enter when ready: " +msgstr "" -#: src/dird/fd_cmds.c:150 +#: src/stored/btape.c:2600 #, c-format -msgid "Error updating Client record. ERR=%s\n" -msgstr "Fehler beim Aktualisieren des Client Eintrags. ERR=%s\n" +msgid "Reposition from %u:%u to 0:1\n" +msgstr "" -#: src/dird/fd_cmds.c:155 +#: src/stored/btape.c:2605 src/stored/btape.c:2621 #, c-format -msgid "FD gave bad response to JobId command: %s\n" -msgstr "FD hat fehlerhafte Antwort auf JobId Kommando zurückgegeben: %s\n" +msgid "Reading block %d.\n" +msgstr "" -#: src/dird/fd_cmds.c:184 src/dird/fd_cmds.c:272 -msgid ", since=" -msgstr ", seit=" +#: src/stored/btape.c:2611 +msgid "" +"\n" +"The first block on the second tape matches.\n" +"\n" +msgstr "" -#: src/dird/fd_cmds.c:249 -msgid "No prior or suitable Full backup found in catalog. Doing FULL backup.\n" +#: src/stored/btape.c:2627 +msgid "" +"\n" +"The last block on the second tape matches. Test succeeded.\n" +"\n" msgstr "" -"Kein vorheriges oder passendes Full backup in catalog gefunden. Führe FULL " -"backup durch.\n" -#: src/dird/fd_cmds.c:250 src/dird/fd_cmds.c:256 src/dird/fd_cmds.c:265 +#: src/stored/btape.c:2645 #, c-format -msgid " (upgraded from %s)" -msgstr " (erweitert von %s)" +msgid "10000 records read now at %d:%d\n" +msgstr "" -#: src/dird/fd_cmds.c:255 -#, fuzzy -msgid "" -"No prior or suitable Differential backup found in catalog. Doing " -"Differential backup.\n" +#: src/stored/btape.c:2671 src/stored/btape.c:2682 src/stored/btape.c:2727 +msgid "Last block written" msgstr "" -"Kein vorheriges oder passendes Full backup in catalog gefunden. Führe FULL " -"backup durch.\n" -#: src/dird/fd_cmds.c:263 -#, c-format -msgid "Prior failed job found in catalog. Upgrading to %s.\n" +#: src/stored/btape.c:2673 src/stored/btape.c:2683 +msgid "Block read back" msgstr "" -"Vorheriger fehlgeschlagener job in catalog gefunden. Erweitere auf %s.\n" -#: src/dird/fd_cmds.c:328 +#: src/stored/btape.c:2674 #, c-format -msgid "Unimplemented backup level %d %c\n" -msgstr "Nicht implementierter backup level %d %c\n" +msgid "" +"\n" +"\n" +"The blocks differ at byte %u\n" +msgstr "" -#: src/dird/fd_cmds.c:401 +#: src/stored/btape.c:2675 msgid "" -"FD compression disabled for this Job because AllowCompress=No in Storage " -"resource.\n" +"\n" +"\n" +"!!!! The last block written and the block\n" +"that was read back differ. The test FAILED !!!!\n" +"This must be corrected before you use Bacula\n" +"to write multi-tape Volumes.!!!!\n" msgstr "" -#: src/dird/fd_cmds.c:500 src/filed/job.c:854 +#: src/stored/btape.c:2711 #, c-format -msgid "Cannot run program: %s. ERR=%s\n" -msgstr "Kann Programm: %s nicht starten. ERR=%s\n" - -#: src/dird/fd_cmds.c:511 src/dird/fd_cmds.c:536 src/dird/fd_cmds.c:550 -msgid ">filed: write error on socket\n" -msgstr ">filed: Schreibfehler auf socket\n" +msgid "Last block at: %u:%u this_dev_block_num=%d\n" +msgstr "" -#: src/dird/fd_cmds.c:517 +#: src/stored/btape.c:2725 #, c-format -msgid "Error running program: %s. ERR=%s\n" -msgstr "Fehler beim Start des Programms: %s. ERR=%s\n" +msgid "Block not written: FileIndex=%u blk_block=%u Size=%u\n" +msgstr "" -#: src/dird/fd_cmds.c:526 -#, c-format -msgid "Cannot open included file: %s. ERR=%s\n" -msgstr "Kann inkludierte Datei nicht öffnen: %s. ERR=%s\n" +#: src/stored/btape.c:2729 +msgid "Block not written" +msgstr "" -#: src/dird/fd_cmds.c:672 -#, fuzzy, c-format -msgid "Client \"%s\" RunScript failed.\n" -msgstr "Pool Ressource \"%s\" nicht gefunden.\n" +#: src/stored/btape.c:2744 +#, c-format +msgid "End of tape %d:%d. Volume Bytes=%s. Write rate = %sB/s\n" +msgstr "" -#: src/dird/fd_cmds.c:695 +#: src/stored/btape.c:2754 src/stored/bcopy.c:272 src/stored/bcopy.c:280 +#: src/stored/bcopy.c:308 #, c-format -msgid "" -"Client \"%s\" may not be used to restore this job. Please upgrade your " -"client.\n" +msgid "Cannot fixup device error. %s\n" msgstr "" -#: src/dird/fd_cmds.c:770 -#, fuzzy -msgid "RestoreObject failed.\n" -msgstr "Wiederherstellung läuft..." +#: src/stored/btape.c:2795 +msgid "Test writing blocks of 64512 bytes to tape.\n" +msgstr "" -#: src/dird/fd_cmds.c:806 -#, c-format -msgid "" -" \n" +" -b specify bootstrap file\n" +" -c set configuration file to file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -p proceed inspite of I/O errors\n" +" -s turn off signals\n" +" -v be verbose\n" +" -? print this message.\n" +"\n" msgstr "" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: dird [-f -s] [-c config_file] [-d debug_level] [config_file]\n" +" -c setze Konfigurationsdatei auf Datei\n" +" -dnn setze debug level auf nn\n" +" -f starte im Vordergrund (für debugging Zwecke)\n" +" -g groupid\n" +" -r starte jetzt\n" +" -s no signals\n" +" -t test - Konfiguration Lesen und beenden\n" +" -u userid\n" +" -v ausführliche Benutzer Meldungen\n" +" -? diese Meldung ausgeben.\n" +"\n" -#: src/dird/ua_label.c:710 +#: src/stored/btape.c:3045 #, c-format -msgid "Sending label command for Volume \"%s\" Slot %d ...\n" +msgid "Mount second Volume on device %s and press return when ready: " msgstr "" -#: src/dird/ua_label.c:751 +#: src/stored/btape.c:3048 src/stored/bls.c:478 src/stored/bextract.c:609 +#: src/stored/bscan.c:1354 src/stored/bcopy.c:365 #, c-format -msgid "Catalog record for Volume \"%s\", Slot %d successfully created.\n" +msgid "Mount Volume \"%s\" on device %s and press return when ready: " msgstr "" -#: src/dird/ua_label.c:764 +#: src/stored/btape.c:3073 #, c-format -msgid "Label command failed for Volume %s.\n" -msgstr "" - -#: src/dird/ua_label.c:802 -msgid "Could not open SD socket.\n" +msgid "Mount blank Volume on device %s and press return when ready: " msgstr "" -#: src/dird/ua_label.c:874 src/dird/ua_label.c:884 +#: src/stored/btape.c:3093 #, c-format -msgid "Invalid Slot number: %s\n" +msgid "End of Volume \"%s\" %d records.\n" msgstr "" -#: src/dird/ua_label.c:893 +#: src/stored/btape.c:3107 #, c-format -msgid "Invalid Volume name: %s\n" +msgid "Read block=%u, VolBytes=%s rate=%sB/s\n" msgstr "" -#: src/dird/ua_label.c:987 +#: src/stored/btape.c:3120 #, c-format -msgid "Device \"%s\" has %d slots.\n" +msgid "Cannot open Dev=%s, Vol=%s\n" msgstr "" -#: src/dird/ua_label.c:1033 +#: src/stored/record_read.c:164 src/stored/record.c:658 #, c-format -msgid "Pool \"%s\" resource not found for volume \"%s\"!\n" +msgid "Sanity check failed. maxlen=%d datalen=%d. Block discarded.\n" msgstr "" -#: src/dird/ua_label.c:1247 -#, fuzzy -msgid "No Volumes found, or no barcodes.\n" -msgstr "Keine Volumes zum Wiederherstellen gefunden.\n" - -#: src/dird/ua_label.c:1250 -msgid "" -" Slot | Volume Name | Status | Media Type | " -"Pool |\n" +#: src/stored/spool.c:71 +msgid "Spooling statistics:\n" msgstr "" -#: src/dird/ua_label.c:1251 +#: src/stored/spool.c:74 +#, c-format msgid "" -"------+------------------+-----------+----------------------" -"+--------------------|\n" +"Data spooling: %u active jobs, %s bytes; %u total jobs, %s max bytes/job.\n" msgstr "" -#: src/dird/scheduler.c:112 +#: src/stored/spool.c:82 #, c-format -msgid "Job %s not found\n" +msgid "Attr spooling: %u active jobs, %s bytes; %u total jobs, %s max bytes.\n" msgstr "" -#: src/dird/scheduler.c:136 -msgid "Walk queue" +#: src/stored/spool.c:100 +msgid "Spooling data ...\n" msgstr "" -#: src/dird/scheduler.c:146 -msgid "Dequeued job" +#: src/stored/spool.c:126 +#, c-format +msgid "Bad return from despool WroteVol=%d\n" msgstr "" -#: src/dird/scheduler.c:149 -msgid "Scheduler logic error\n" +#: src/stored/spool.c:159 +#, c-format +msgid "Open data spool file %s failed: ERR=%s\n" msgstr "" -#: src/dird/scheduler.c:190 -msgid "Run job" +#: src/stored/spool.c:187 +msgid "Despooling zero bytes. Your disk is probably FULL!\n" msgstr "" -#: src/dird/scheduler.c:223 -msgid "run override" +#: src/stored/spool.c:196 +#, c-format +msgid "Committing spooled data to Volume \"%s\". Despooling %s bytes ...\n" msgstr "" -#: src/dird/scheduler.c:413 -msgid "Inserted job" +#: src/stored/spool.c:201 +#, c-format +msgid "Writing spooled data to Volume. Despooling %s bytes ...\n" msgstr "" -#: src/dird/scheduler.c:421 -msgid "Appended job" +#: src/stored/spool.c:272 src/stored/acquire.c:517 src/stored/block_util.c:552 +#: src/stored/block_util.c:622 src/stored/block_util.c:652 +#, c-format +msgid "Could not create JobMedia record for Volume=\"%s\" Job=%s\n" msgstr "" -#: src/dird/scheduler.c:425 -msgid "Run queue" +#: src/stored/spool.c:290 +#, c-format +msgid "" +"Despooling elapsed time = %02d:%02d:%02d, Transfer rate = %s Bytes/second\n" msgstr "" -#: src/dird/run_conf.c:208 +#: src/stored/spool.c:299 src/stored/spool.c:500 src/stored/spool.c:546 #, c-format -msgid "Expected an equals, got: %s" +msgid "Ftruncate spool file failed: ERR=%s\n" msgstr "" -#: src/dird/run_conf.c:221 src/dird/run_conf.c:233 src/dird/run_conf.c:327 +#: src/stored/spool.c:358 #, c-format -msgid "Expect a YES or NO, got: %s" +msgid "Spool header read error. ERR=%s\n" msgstr "" -#: src/dird/run_conf.c:247 +#: src/stored/spool.c:361 #, c-format -msgid "Job level field: %s not found in run record" +msgid "Spool read error. Wanted %u bytes, got %d\n" msgstr "" -#: src/dird/run_conf.c:265 +#: src/stored/spool.c:362 #, c-format -msgid "Could not find specified Pool Resource: %s" +msgid "Spool header read error. Wanted %u bytes, got %d\n" msgstr "" -#: src/dird/run_conf.c:290 +#: src/stored/spool.c:369 src/stored/spool.c:370 #, c-format -msgid "Could not find specified Storage Resource: %s" +msgid "Spool block too big. Max %u bytes, got %u\n" msgstr "" -#: src/dird/run_conf.c:302 +#: src/stored/spool.c:376 src/stored/spool.c:377 #, c-format -msgid "Could not find specified Messages Resource: %s" +msgid "Spool data read error. Wanted %u bytes, got %d\n" msgstr "" -#: src/dird/run_conf.c:312 src/lib/parse_conf.c:736 src/lib/parse_conf.c:742 +#: src/stored/spool.c:431 #, c-format -msgid "expected a time period, got: %s" +msgid "" +"User specified Job spool size reached: JobSpoolSize=%s MaxJobSpoolSize=%s\n" msgstr "" -#: src/dird/run_conf.c:331 +#: src/stored/spool.c:436 #, c-format -msgid "Expected a keyword name, got: %s" +msgid "" +"User specified Device spool size reached: DevSpoolSize=%s MaxDevSpoolSize=" +"%s\n" msgstr "" -#: src/dird/run_conf.c:370 -msgid "Day number out of range (1-31)" +#: src/stored/spool.c:443 +msgid "Bad return from despool in write_block.\n" msgstr "" -#: src/dird/run_conf.c:387 src/dird/run_conf.c:542 -msgid "Week number out of range (0-53)" +#: src/stored/spool.c:451 +msgid "Spooling data again ...\n" msgstr "" -#: src/dird/run_conf.c:403 +#: src/stored/spool.c:483 #, c-format -msgid "Job type field: %s in run record not found" +msgid "Error writing header to spool file. ERR=%s\n" msgstr "" -#: src/dird/run_conf.c:410 +#: src/stored/spool.c:488 #, c-format -msgid "Unexpected token: %d:%s" +msgid "" +"Error writing header to spool file. Disk probably full. Attempting recovery. " +"Wanted to write=%d got=%d\n" msgstr "" -#: src/dird/run_conf.c:454 -msgid "Time must be preceded by keyword AT." +#: src/stored/spool.c:506 src/stored/spool.c:552 +msgid "Fatal despooling error." msgstr "" -#: src/dird/run_conf.c:463 -msgid "Time logic error.\n" +#: src/stored/spool.c:514 +msgid "Retrying after header spooling error failed.\n" msgstr "" -#: src/dird/run_conf.c:478 src/dird/run_conf.c:497 -msgid "Bad time specification." +#: src/stored/spool.c:530 +#, c-format +msgid "Error writing data to spool file. ERR=%s\n" msgstr "" -#: src/dird/run_conf.c:511 -msgid "Range logic error.\n" +#: src/stored/spool.c:563 +msgid "Retrying after data spooling error failed.\n" msgstr "" -#: src/dird/run_conf.c:520 -msgid "Bad day range specification." -msgstr "" +#: src/stored/spool.c:650 +#, fuzzy +msgid "Network error on BlastAttributes.\n" +msgstr "\n" +" -b specify a bootstrap file\n" +" -c specify a Storage configuration file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -e exclude list\n" +" -i include list\n" +" -j list jobs\n" +" -k list blocks\n" +" (no j or k option) list saved files\n" +" -L dump label\n" +" -p proceed inspite of errors\n" +" -v be verbose\n" +" -V specify Volume names (separated by |)\n" +" -? print this message\n" +"\n" msgstr "" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: dird [-f -s] [-c config_file] [-d debug_level] [config_file]\n" +" -c setze Konfigurationsdatei auf Datei\n" +" -dnn setze debug level auf nn\n" +" -f starte im Vordergrund (für debugging Zwecke)\n" +" -g groupid\n" +" -r starte jetzt\n" +" -s no signals\n" +" -t test - Konfiguration Lesen und beenden\n" +" -u userid\n" +" -v ausführliche Benutzer Meldungen\n" +" -? diese Meldung ausgeben.\n" +"\n" -#: src/dird/ua_update.c:100 -msgid "Slots from autochanger" +#: src/stored/bls.c:138 src/stored/bextract.c:141 +#, c-format +msgid "Could not open exclude file: %s, ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:101 -msgid "Long term statistics" +#: src/stored/bls.c:153 src/stored/bextract.c:156 +#, c-format +msgid "Could not open include file: %s, ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:102 -msgid "item" +#: src/stored/bls.c:200 +msgid "No archive name specified\n" msgstr "" -#: src/dird/ua_update.c:102 -msgid "Choose catalog item to update" +#: src/stored/bls.c:238 +#, c-format +msgid "" +"\n" +"Warning, this Volume is a continuation of Volume %s\n" msgstr "" -#: src/dird/ua_update.c:145 +#: src/stored/bls.c:281 #, c-format -msgid "Invalid VolStatus specified: %s\n" +msgid "Got EOM at file %u on device %s, Volume \"%s\"\n" msgstr "" -#: src/dird/ua_update.c:154 +#: src/stored/bls.c:292 #, c-format -msgid "New Volume status is: %s\n" +msgid "Mounted Volume \"%s\".\n" msgstr "" -#: src/dird/ua_update.c:164 +#: src/stored/bls.c:294 #, c-format -msgid "Invalid retention period specified: %s\n" +msgid "End of file %u on device %s, Volume \"%s\"\n" msgstr "" -#: src/dird/ua_update.c:172 +#: src/stored/bls.c:318 #, c-format -msgid "New retention period is: %s\n" +msgid "" +"File:blk=%u:%u blk_num=%u blen=%u First rec FI=%s SessId=%u SessTim=%u Strm=" +"%s rlen=%d\n" msgstr "" -#: src/dird/ua_update.c:183 +#: src/stored/bls.c:327 #, c-format -msgid "Invalid use duration specified: %s\n" +msgid "Block: %d size=%d\n" msgstr "" -#: src/dird/ua_update.c:191 +#: src/stored/bls.c:385 src/stored/bextract.c:325 src/stored/bscan.c:674 +msgid "Cannot continue.\n" +msgstr "" + +#: src/stored/bls.c:387 +msgid "Attrib unpack error!\n" +msgstr "" + +#: src/stored/bls.c:398 #, c-format -msgid "New use duration is: %s\n" +msgid "FileIndex=%d VolSessionId=%d VolSessionTime=%d Stream=%d DataLen=%d\n" msgstr "" -#: src/dird/ua_update.c:205 -#, c-format -msgid "New max jobs is: %s\n" +#: src/stored/bls.c:424 src/stored/bcopy.c:322 src/stored/read_records.c:387 +msgid "Fresh Volume Label" msgstr "" -#: src/dird/ua_update.c:218 -#, c-format -msgid "New max files is: %s\n" +#: src/stored/bls.c:427 src/stored/bcopy.c:325 src/stored/read_records.c:390 +msgid "Volume Label" msgstr "" -#: src/dird/ua_update.c:229 -#, c-format -msgid "Invalid max. bytes specification: %s\n" +#: src/stored/bls.c:431 src/stored/label.c:1128 src/stored/bcopy.c:329 +msgid "Begin Job Session" msgstr "" -#: src/dird/ua_update.c:237 -#, c-format -msgid "New Max bytes is: %s\n" +#: src/stored/bls.c:436 src/stored/label.c:1131 src/stored/bcopy.c:333 +msgid "End Job Session" msgstr "" -#: src/dird/ua_update.c:248 src/dird/ua_update.c:268 -msgid "Invalid value. It must be yes or no.\n" +#: src/stored/bls.c:440 src/stored/bcopy.c:338 +msgid "End of Medium" msgstr "" -#: src/dird/ua_update.c:256 -#, c-format -msgid "New Recycle flag is: %s\n" +#: src/stored/bls.c:443 +msgid "End of Physical Medium" msgstr "" -#: src/dird/ua_update.c:257 src/dird/ua_update.c:277 src/dird/ua_update.c:699 -#: src/dird/ua_run.c:180 src/dird/backup.c:788 src/dird/backup.c:789 -#: src/dird/backup.c:790 src/dird/ua_input.c:131 src/stored/parse_bsr.c:863 -#: src/tools/dbcheck.c:1352 -msgid "yes" +#: src/stored/bls.c:446 +msgid "Start of object" msgstr "" -#: src/dird/ua_update.c:257 src/dird/ua_update.c:277 src/dird/ua_update.c:699 -#: src/dird/ua_run.c:200 src/dird/backup.c:788 src/dird/backup.c:789 -#: src/dird/backup.c:790 src/dird/ua_input.c:135 src/stored/parse_bsr.c:863 -msgid "no" +#: src/stored/bls.c:449 +msgid "End of object" msgstr "" -#: src/dird/ua_update.c:276 -#, c-format -msgid "New InChanger flag is: %s\n" +#: src/stored/bls.c:452 src/stored/label.c:1140 src/stored/bcopy.c:341 +msgid "Unknown" msgstr "" -#: src/dird/ua_update.c:294 +#: src/stored/bls.c:459 src/stored/bcopy.c:347 src/stored/read_records.c:408 #, c-format -msgid "Invalid slot, it must be between 0 and MaxVols=%d\n" +msgid "%s Record: VolSessionId=%d VolSessionTime=%d JobId=%d DataLen=%d\n" msgstr "" -#: src/dird/ua_update.c:304 src/dird/ua_update.c:728 +#: src/stored/wait.c:121 #, c-format -msgid "Error updating media record Slot: ERR=%s" +msgid "pthread timedwait error. ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:306 +#: src/stored/wait.c:227 +#, fuzzy, c-format +msgid "JobId=%s, Job %s waiting to reserve a device.\n" +msgstr "JobId %s, Job %s zum Abbruch markiert.\n" + +#: src/stored/wait.c:273 +#, fuzzy, c-format +msgid "JobId=%s, Job %s waiting device %s.\n" +msgstr "JobId %s, Job %s zum Abbruch markiert.\n" + +#: src/stored/device.c:120 #, c-format -msgid "New Slot is: %d\n" +msgid "End of medium on Volume \"%s\" Bytes=%s Blocks=%s at %s.\n" msgstr "" -#: src/dird/ua_update.c:331 +#: src/stored/device.c:146 #, c-format -msgid "New Pool is: %s\n" +msgid "New volume \"%s\" mounted on device %s at %s.\n" msgstr "" -#: src/dird/ua_update.c:374 +#: src/stored/device.c:158 #, c-format -msgid "New RecyclePool is: %s\n" +msgid "write_block_to_device Volume label failed. ERR=%s" msgstr "" -#: src/dird/ua_update.c:394 +#: src/stored/device.c:177 #, c-format -msgid "Error updating Volume record: ERR=%s" +msgid "write_block_to_device overflow block failed. ERR=%s" msgstr "" -#: src/dird/ua_update.c:396 +#: src/stored/device.c:182 #, c-format -msgid "Volume defaults updated from \"%s\" Pool record.\n" +msgid "Catastrophic error. Cannot write overflow block to device %s. ERR=%s" msgstr "" -#: src/dird/ua_update.c:419 src/dird/ua_update.c:451 +#: src/stored/device.c:332 src/stored/tape_dev.c:160 #, c-format -msgid "Error updating Volume records: ERR=%s" +msgid "Unable to open device %s: ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:421 src/dird/ua_update.c:453 +#: src/stored/device.c:334 #, c-format -msgid "All Volume defaults updated from \"%s\" Pool record.\n" +msgid "Unable to open archive %s: ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:443 +#: src/stored/authenticate.c:65 #, c-format -msgid "Updating all pools, but skipped PoolId=%d. ERR=%s\n" +msgid "I only authenticate Directors, not %d\n" msgstr "" -#: src/dird/ua_update.c:469 +#: src/stored/authenticate.c:71 #, c-format -msgid "Error updating media record Enabled: ERR=%s" +msgid "Bad Hello command from Director at %s. Len=%d.\n" msgstr "" -#: src/dird/ua_update.c:472 +#: src/stored/authenticate.c:85 src/filed/authenticate.c:76 #, c-format -msgid "New Enabled is: %d\n" +msgid "Bad Hello command from Director at %s: %s\n" msgstr "" -#: src/dird/ua_update.c:487 +#: src/stored/authenticate.c:100 #, fuzzy, c-format -msgid "Error updating media record ActionOnPurge: ERR=%s" -msgstr "Fehler beim Aktualisieren des Client Eintrags. ERR=%s\n" +msgid "" +"Connection from unknown Director %s at %s rejected.\n" +"Please see " +msgstr "unbekannt" -#: src/dird/ua_update.c:490 -#, c-format -msgid "New ActionOnPurge is: %s\n" +#: src/stored/authenticate.c:137 +msgid "" +"Incorrect password given by Director.\n" +"Please see " msgstr "" -#: src/dird/ua_update.c:605 src/dird/ua_run.c:222 -msgid "Parameters to modify:\n" +#: src/stored/authenticate.c:145 src/stored/authenticate.c:258 +#: src/stored/authenticate.c:367 src/filed/authenticate.c:139 +#: src/filed/authenticate.c:267 +msgid "" +"Authorization problem: Remote server did not advertize required TLS " +"support.\n" msgstr "" -#: src/dird/ua_update.c:606 -msgid "Volume Status" -msgstr "" +#: src/stored/authenticate.c:163 +#, fuzzy, c-format +msgid "TLS negotiation failed with DIR at \"%s:%d\"\n" +msgstr "TLS Aushandlung fehlgeschlagen mit SD an \"%s:%d\"\n" -#: src/dird/ua_update.c:607 -msgid "Volume Retention Period" +#: src/stored/authenticate.c:199 +#, c-format +msgid "Unable to authenticate Director at %s.\n" msgstr "" -#: src/dird/ua_update.c:608 -msgid "Volume Use Duration" +#: src/stored/authenticate.c:249 src/stored/authenticate.c:289 +#, c-format +msgid "" +"Incorrect authorization key from File daemon at %s rejected.\n" +"Please see " msgstr "" -#: src/dird/ua_update.c:609 -msgid "Maximum Volume Jobs" -msgstr "" +#: src/stored/authenticate.c:276 +#, fuzzy, c-format +msgid "TLS negotiation failed with FD at \"%s:%d\"\n" +msgstr "TLS Aushandlung fehlgeschlagen mit FD an \"%s:%d\".\n" -#: src/dird/ua_update.c:610 -msgid "Maximum Volume Files" +#: src/stored/authenticate.c:358 src/filed/authenticate.c:258 +msgid "" +"Authorization key rejected by Storage daemon.\n" +"Please see " msgstr "" -#: src/dird/ua_update.c:611 -msgid "Maximum Volume Bytes" -msgstr "" +#: src/stored/authenticate.c:385 src/dird/authenticate.c:400 +#: src/filed/authenticate.c:157 src/filed/authenticate.c:285 +msgid "TLS negotiation failed.\n" +msgstr "TLS Aushandlung gescheitert.\n" -#: src/dird/ua_update.c:612 -msgid "Recycle Flag" +#: src/stored/block.c:133 +#, c-format +msgid "Cannot write block. Device at EOM. dev=%s\n" msgstr "" -#: src/dird/ua_update.c:613 -msgid "Slot" +#: src/stored/block.c:138 +#, c-format +msgid "Attempt to write on read-only Volume. dev=%s\n" msgstr "" -#: src/dird/ua_update.c:614 -msgid "InChanger Flag" +#: src/stored/block.c:144 +#, c-format +msgid "Attempt to write on closed device=%s\n" msgstr "" -#: src/dird/ua_update.c:615 -msgid "Volume Files" +#: src/stored/block.c:177 +#, c-format +msgid "Unable to write EOF. ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:617 -msgid "Volume from Pool" +#: src/stored/block.c:199 src/stored/block.c:235 +msgid "Write block header zeroed.\n" msgstr "" -#: src/dird/ua_update.c:618 -msgid "All Volumes from Pool" +#: src/stored/block.c:227 +#, c-format +msgid "Block checksum changed during write: before=%ud after=%ud\n" msgstr "" -#: src/dird/ua_update.c:619 -msgid "All Volumes from all Pools" +#: src/stored/block.c:254 +#, c-format +msgid "Write error at %u:%u on device %s. ERR=%s.\n" msgstr "" -#: src/dird/ua_update.c:620 -msgid "Enabled" +#: src/stored/block.c:262 +#, c-format +msgid "End of Volume \"%s\" at %u:%u on device %s. Write of %u bytes got %d.\n" msgstr "" -#: src/dird/ua_update.c:621 -msgid "RecyclePool" +#: src/stored/block.c:366 +#, fuzzy +msgid "Job failed or canceled.\n" +msgstr "JobId %s, Job %s zum Abbruch markiert.\n" + +#: src/stored/block.c:372 +msgid "Attempt to read past end of tape or file.\n" msgstr "" -#: src/dird/ua_update.c:622 -msgid "Action On Purge" +#: src/stored/block.c:380 +#, c-format +msgid "Attempt to read closed device: fd=%d at file:blk %u:%u on device %s\n" msgstr "" -#: src/dird/ua_update.c:623 -msgid "Done" +#: src/stored/block.c:392 +#, c-format +msgid "Block buffer size looping problem on device %s\n" msgstr "" -#: src/dird/ua_update.c:624 src/dird/ua_run.c:252 src/dird/ua_run.c:600 -msgid "Select parameter to modify" +#: src/stored/block.c:425 src/stored/block.c:439 +#, c-format +msgid "The Volume=%s on device=%s appears to be unlabeled.\n" msgstr "" -#: src/dird/ua_update.c:632 +#: src/stored/block.c:428 #, c-format -msgid "Updating Volume \"%s\"\n" +msgid "Read error on fd=%d at file:blk %u:%u on device %s. ERR=%s.\n" msgstr "" -#: src/dird/ua_update.c:637 +#: src/stored/block.c:442 #, c-format -msgid "Current Volume status is: %s\n" +msgid "Read zero bytes Vol=%s at %lld on device %s.\n" msgstr "" -#: src/dird/ua_update.c:638 -msgid "Possible Values are:\n" +#: src/stored/block.c:471 +#, c-format +msgid "" +"Volume data error at %u:%u! Very short block of %d bytes on device %s " +"discarded.\n" msgstr "" -#: src/dird/ua_update.c:649 -msgid "Choose new Volume Status" +#: src/stored/block.c:498 +#, c-format +msgid "Block length %u is greater than buffer %u. Attempting recovery.\n" msgstr "" -#: src/dird/ua_update.c:655 +#: src/stored/block.c:518 #, c-format -msgid "Current retention period is: %s\n" +msgid "Setting block buffer size to %u bytes.\n" msgstr "" -#: src/dird/ua_update.c:657 -msgid "Enter Volume Retention period: " +#: src/stored/block.c:533 +#, c-format +msgid "" +"Volume data error at %u:%u! Short block of %d bytes on device %s discarded.\n" msgstr "" -#: src/dird/ua_update.c:664 +#: src/stored/label.c:87 +#, fuzzy, c-format +msgid "Couldn't rewind %s device %s: ERR=%s\n" +msgstr "Kann bootstrap Datei nicht öffnen: %s: ERR=%s\n" + +#: src/stored/label.c:105 src/stored/label.c:198 #, c-format -msgid "Current use duration is: %s\n" +msgid "Wrong Volume mounted on %s device %s: Wanted %s have %s\n" msgstr "" -#: src/dird/ua_update.c:666 -msgid "Enter Volume Use Duration: " +#: src/stored/label.c:108 src/stored/label.c:186 +#, c-format +msgid "Too many tries: %s" msgstr "" -#: src/dird/ua_update.c:673 +#: src/stored/label.c:125 #, c-format -msgid "Current max jobs is: %u\n" +msgid "" +"Requested Volume \"%s\" on %s device %s is not a Bacula labeled Volume, " +"because: ERR=%s" msgstr "" -#: src/dird/ua_update.c:674 -msgid "Enter new Maximum Jobs: " +#: src/stored/label.c:130 +msgid "Could not read Volume label from block.\n" msgstr "" -#: src/dird/ua_update.c:681 +#: src/stored/label.c:133 #, c-format -msgid "Current max files is: %u\n" +msgid "Could not unserialize Volume label: ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:682 -msgid "Enter new Maximum Files: " +#: src/stored/label.c:138 +#, c-format +msgid "Volume Header Id bad: %s\n" msgstr "" -#: src/dird/ua_update.c:689 +#: src/stored/label.c:171 #, c-format -msgid "Current value is: %s\n" +msgid "Volume on %s device %s has wrong Bacula version. Wanted %d got %d\n" msgstr "" -#: src/dird/ua_update.c:690 -msgid "Enter new Maximum Bytes: " +#: src/stored/label.c:182 +#, c-format +msgid "Volume on %s device %s has bad Bacula label type: %x\n" msgstr "" -#: src/dird/ua_update.c:698 +#: src/stored/label.c:301 #, c-format -msgid "Current recycle flag is: %s\n" +msgid "Cannot write Volume label to block for %s device %s\n" msgstr "" -#: src/dird/ua_update.c:700 -msgid "Enter new Recycle status: " -msgstr "" +#: src/stored/label.c:361 src/stored/label.c:486 +#, fuzzy, c-format +msgid "Open %s device %s Volume \"%s\" failed: ERR=%s\n" +msgstr "Erzeugung von db Device Eintrag %s fehlgeschlagen: ERR=%s\n" + +#: src/stored/label.c:500 +#, fuzzy, c-format +msgid "Rewind error on %s device %s: ERR=%s\n" +msgstr "Socket Fehler auf %s Kommando: ERR=%s\n" + +#: src/stored/label.c:508 +#, fuzzy, c-format +msgid "Truncate error on %s device %s: ERR=%s\n" +msgstr "Socket Fehler auf %s Kommando: ERR=%s\n" -#: src/dird/ua_update.c:707 +#: src/stored/label.c:515 +#, fuzzy, c-format +msgid "Failed to re-open DVD after truncate on %s device %s: ERR=%s\n" +msgstr "Kann Catalog DB Steuerdatei nicht öffnen %s: ERR=%s\n" + +#: src/stored/label.c:560 +#, fuzzy, c-format +msgid "Unable to write %s device %s: ERR=%s\n" +msgstr "Konnte bootstrap Datei %s nicht erzeugen. ERR=%s\n" + +#: src/stored/label.c:594 #, c-format -msgid "Current Slot is: %d\n" +msgid "Recycled volume \"%s\" on %s device %s, all previous data lost.\n" msgstr "" -#: src/dird/ua_update.c:708 -msgid "Enter new Slot: " +#: src/stored/label.c:597 +#, c-format +msgid "Wrote label to prelabeled Volume \"%s\" on %s device %s\n" msgstr "" -#: src/dird/ua_update.c:715 +#: src/stored/label.c:806 #, c-format -msgid "Current InChanger flag is: %d\n" +msgid "Bad Volume session label request=%d\n" msgstr "" -#: src/dird/ua_update.c:716 +#: src/stored/label.c:870 #, c-format -msgid "Set InChanger flag for Volume \"%s\": yes/no: " +msgid "Expecting Volume Label, got FI=%s Stream=%s len=%d\n" msgstr "" -#: src/dird/ua_update.c:730 +#: src/stored/label.c:1003 #, c-format -msgid "New InChanger flag is: %d\n" +msgid "Unknown %d" msgstr "" -#: src/dird/ua_update.c:737 +#: src/stored/label.c:1007 +#, c-format msgid "" -"Warning changing Volume Files can result\n" -"in loss of data on your Volume\n" "\n" +"Volume Label:\n" +"Id : %sVerNo : %d\n" +"VolName : %s\n" +"PrevVolName : %s\n" +"VolFile : %d\n" +"LabelType : %s\n" +"LabelSize : %d\n" +"PoolName : %s\n" +"MediaType : %s\n" +"PoolType : %s\n" +"HostName : %s\n" msgstr "" -#: src/dird/ua_update.c:739 +#: src/stored/label.c:1029 #, c-format -msgid "Current Volume Files is: %u\n" +msgid "Date label written: %s\n" msgstr "" -#: src/dird/ua_update.c:740 -msgid "Enter new number of Files for Volume: " +#: src/stored/label.c:1035 +#, c-format +msgid "Date label written: %04d-%02d-%02d at %02d:%02d\n" msgstr "" -#: src/dird/ua_update.c:745 -msgid "Normally, you should only increase Volume Files by one!\n" +#: src/stored/label.c:1055 +#, c-format +msgid "" +"\n" +"%s Record:\n" +"JobId : %d\n" +"VerNum : %d\n" +"PoolName : %s\n" +"PoolType : %s\n" +"JobName : %s\n" +"ClientName : %s\n" msgstr "" -#: src/dird/ua_update.c:746 -msgid "Increase Volume Files? (yes/no): " +#: src/stored/label.c:1068 +#, c-format +msgid "" +"Job (unique name) : %s\n" +"FileSet : %s\n" +"JobType : %c\n" +"JobLevel : %c\n" +msgstr "" + +#: src/stored/label.c:1077 +#, c-format +msgid "" +"JobFiles : %s\n" +"JobBytes : %s\n" +"StartBlock : %s\n" +"EndBlock : %s\n" +"StartFile : %s\n" +"EndFile : %s\n" +"JobErrors : %s\n" +"JobStatus : %c\n" msgstr "" -#: src/dird/ua_update.c:756 +#: src/stored/label.c:1098 #, c-format -msgid "New Volume Files is: %u\n" +msgid "Date written : %s\n" msgstr "" -#: src/dird/ua_update.c:768 +#: src/stored/label.c:1103 #, c-format -msgid "Current Pool is: %s\n" -msgstr "" - -#: src/dird/ua_update.c:769 -msgid "Enter new Pool name: " +msgid "Date written : %04d-%02d-%02d at %02d:%02d\n" msgstr "" -#: src/dird/ua_update.c:790 -#, c-format -msgid "Current Enabled is: %d\n" +#: src/stored/label.c:1122 +msgid "Fresh Volume" msgstr "" -#: src/dird/ua_update.c:791 -msgid "Enter new Enabled: " +#: src/stored/label.c:1125 +msgid "Volume" msgstr "" -#: src/dird/ua_update.c:810 -#, c-format -msgid "Current RecyclePool is: %s\n" +#: src/stored/label.c:1134 src/stored/read_records.c:401 +msgid "End of Media" msgstr "" -#: src/dird/ua_update.c:812 -msgid "No current RecyclePool\n" +#: src/stored/label.c:1137 +msgid "End of Tape" msgstr "" -#: src/dird/ua_update.c:822 +#: src/stored/label.c:1157 src/stored/label.c:1165 src/stored/label.c:1198 #, c-format -msgid "Current ActionOnPurge is: %s\n" +msgid "%s Record: File:blk=%u:%u SessId=%d SessTime=%d JobId=%d DataLen=%d\n" msgstr "" -#: src/dird/ua_update.c:824 -msgid "Enter new ActionOnPurge (one of: Truncate, None): " +#: src/stored/label.c:1162 +msgid "Bacula \"End of Tape\" label found.\n" msgstr "" -#: src/dird/ua_update.c:832 -msgid "Selection terminated.\n" +#: src/stored/label.c:1177 src/stored/label.c:1186 +#, c-format +msgid "%s Record: File:blk=%u:%u SessId=%d SessTime=%d JobId=%d\n" msgstr "" -#: src/dird/ua_update.c:852 +#: src/stored/label.c:1179 #, c-format -msgid "Updating %i job(s).\n" +msgid " Job=%s Date=%s Level=%c Type=%c\n" msgstr "" -#: src/dird/ua_update.c:884 +#: src/stored/label.c:1188 #, c-format -msgid "db_update_pool_record returned %d. ERR=%s\n" +msgid " Date=%s Level=%c Type=%c Files=%s Bytes=%s Errors=%d Status=%c\n" msgstr "" -#: src/dird/ua_update.c:891 -msgid "Pool DB record updated from resource.\n" +#: src/stored/acquire.c:60 +#, c-format +msgid "Acquire read: num_writers=%d not zero. Job %d canceled.\n" msgstr "" -#: src/dird/ua_update.c:918 -#, fuzzy -msgid "Expect JobId keyword, not found.\n" -msgstr "Job Type Schlüsselwort erwartet, erhalten: %s" - -#: src/dird/ua_update.c:943 -#, fuzzy -msgid "Neither Client nor StartTime specified.\n" -msgstr "Kein storage angegeben.\n" - -#: src/dird/migrate.c:149 src/dird/migrate.c:163 -#, fuzzy, c-format -msgid "No previous Job found to %s.\n" -msgstr "Keinen vorherigen Job zum migrieren gefunden.\n" - -#: src/dird/migrate.c:155 -#, fuzzy -msgid "Create bootstrap file failed.\n" -msgstr "Konnte bootstrap Datei %s nicht erzeugen. ERR=%s\n" - -#: src/dird/migrate.c:165 +#: src/stored/acquire.c:69 #, fuzzy, c-format -msgid "Previous Job has no data to %s.\n" -msgstr "Vorheriger Job hat keine Daten zu migrieren.\n" - -#: src/dird/migrate.c:182 -#, c-format -msgid "Job resource not found for \"%s\".\n" -msgstr "Job Ressource für \"%s\"nicht gefunden.\n" +msgid "No volumes specified for reading. Job %s canceled.\n" +msgstr "Weder storage noch Pool in Job \"%s\" definiert.\n" -#: src/dird/migrate.c:186 +#: src/stored/acquire.c:78 #, c-format -msgid "Previous Job resource not found for \"%s\".\n" -msgstr "Vorherige Job Ressource für \"%s\"nicht gefunden.\n" - -#: src/dird/migrate.c:203 -msgid "setup job failed.\n" -msgstr "Job Einrichtung Fehlgeschlagen.\n" +msgid "Logic error: no next volume to read. Numvol=%d Curvol=%d\n" +msgstr "" -#: src/dird/migrate.c:258 -#, c-format -msgid "Pool for JobId %s not in database. ERR=%s\n" -msgstr "Pool für JobId %s ist nicht in der Datenbank. ERR=%s\n" +#: src/stored/acquire.c:85 src/stored/acquire.c:162 src/stored/acquire.c:436 +msgid "generate_plugin_event(bsdEventDeviceOpen) Failed\n" +msgstr "" -#: src/dird/migrate.c:266 +#: src/stored/acquire.c:109 #, c-format -msgid "Pool resource \"%s\" not found.\n" -msgstr "Pool Ressource \"%s\" nicht gefunden.\n" - -#: src/dird/migrate.c:316 src/dird/migrate.c:898 -#, fuzzy, c-format -msgid "Could not get job record for JobId %s to %s. ERR=%s" -msgstr "Konnte job record für JobId %s zum migrieren nicht holen. ERR=%s" +msgid "" +"Changing read device. Want Media Type=\"%s\" have=\"%s\"\n" +" %s device=%s\n" +msgstr "" -#: src/dird/migrate.c:327 +#: src/stored/acquire.c:157 #, c-format -msgid "JobId %s already %s probably by another Job. %s stopped.\n" +msgid "Media Type change. New read %s device %s chosen.\n" msgstr "" -#: src/dird/migrate.c:337 -#, fuzzy, c-format -msgid "Start %s JobId %s, Job=%s\n" -msgstr "Start Sicherung JobId %s, Job=%s\n" - -#: src/dird/migrate.c:712 -#, fuzzy, c-format -msgid "No %s SQL selection pattern specified.\n" -msgstr "Kein \"Migration SQL selection pattern\" spezifiziert.\n" - -#: src/dird/migrate.c:719 src/dird/migrate.c:738 src/dird/migrate.c:759 -#: src/dird/migrate.c:795 src/dird/migrate.c:822 src/dird/migrate.c:956 -#: src/dird/migrate.c:989 src/dird/migrate.c:1118 +#: src/stored/acquire.c:174 #, c-format -msgid "SQL failed. ERR=%s\n" -msgstr "SQL fehlgeschlagen ERR=%s\n" - -#: src/dird/migrate.c:742 src/dird/migrate.c:749 src/dird/migrate.c:763 -#: src/dird/migrate.c:826 -#, fuzzy, c-format -msgid "No Volumes found to %s.\n" -msgstr "Keine Volumes zum Wiederherstellen gefunden.\n" - -#: src/dird/migrate.c:777 src/dird/migrate.c:866 src/dird/migrate.c:886 -msgid "Invalid JobId found.\n" -msgstr "Ungültige JobId gefunden.\n" - -#: src/dird/migrate.c:837 -#, fuzzy, c-format -msgid "Unknown %s Selection Type.\n" -msgstr "Unbekannter \"Migration Selection Type\".\n" - -#: src/dird/migrate.c:848 src/dird/migrate.c:869 src/dird/migrate.c:889 -#, fuzzy, c-format -msgid "No JobIds found to %s.\n" -msgstr "Kein Job gefunden für: %s.\n" - -#: src/dird/migrate.c:852 -#, fuzzy, c-format -msgid "The following %u JobId%s chosen to be %s: %s\n" -msgstr "Die folgende %u JobId%s wird migriert werden: %s\n" - -#: src/dird/migrate.c:853 -msgid " was" +msgid "No suitable device found to read Volume \"%s\"\n" msgstr "" -#: src/dird/migrate.c:853 -msgid "s were" +#: src/stored/acquire.c:213 +#, c-format +msgid "Job %s canceled.\n" msgstr "" -#: src/dird/migrate.c:905 -#, fuzzy, c-format -msgid "%s using JobId=%s Job=%s\n" -msgstr "Migration benutzt JobId=%s Job=%s\n" - -#: src/dird/migrate.c:939 -msgid "Could not start migration job.\n" -msgstr "Konnte Migrationsjob nicht starten.\n" - -#: src/dird/migrate.c:941 -#, fuzzy, c-format -msgid "%s JobId %d started.\n" -msgstr "Clone JobId %d gestartet.\n" - -#: src/dird/migrate.c:960 +#: src/stored/acquire.c:231 #, fuzzy, c-format -msgid "No %s found to %s.\n" -msgstr "Keine %ss zum Migrieren gefunden.\n" +msgid "Read open %s device %s Volume \"%s\" failed: ERR=%s\n" +msgstr "Erzeugung von db Device Eintrag %s fehlgeschlagen: ERR=%s\n" -#: src/dird/migrate.c:964 +#: src/stored/acquire.c:324 #, c-format -msgid "SQL error. Expected 1 MediaId got %d\n" -msgstr "SQL Fehler. Erwartet 1 MediaId erhalten: %d\n" - -#: src/dird/migrate.c:993 src/dird/migrate.c:1123 -#, fuzzy, c-format -msgid "No %ss found to %s.\n" -msgstr "Keine %ss zum Migrieren gefunden.\n" - -#: src/dird/migrate.c:1015 -msgid "Selection Type 'pooluncopiedjobs' only applies to Copy Jobs" +msgid "Too many errors trying to mount %s device %s for reading.\n" msgstr "" -#: src/dird/migrate.c:1024 -#, fuzzy, c-format -msgid "SQL to get uncopied jobs failed. ERR=%s\n" -msgstr "SQL um %s zu holen fehlgeschlagen. ERR=%s\n" - -#: src/dird/migrate.c:1047 -#, fuzzy, c-format -msgid "No %s %s selection pattern specified.\n" -msgstr "Kein Migration %s selection pattern spezifiziert.\n" - -#: src/dird/migrate.c:1058 +#: src/stored/acquire.c:332 #, c-format -msgid "SQL to get %s failed. ERR=%s\n" -msgstr "SQL um %s zu holen fehlgeschlagen. ERR=%s\n" - -#: src/dird/migrate.c:1063 -#, fuzzy, c-format -msgid "Query of Pool \"%s\" returned no Jobs to %s.\n" -msgstr "Abfrage nach Pool \"%s\" ergab keine Jobs für die Migration.\n" +msgid "Ready to read from volume \"%s\" on %s device %s.\n" +msgstr "" -#: src/dird/migrate.c:1101 +#: src/stored/acquire.c:421 #, fuzzy, c-format -msgid "Regex pattern matched no Jobs to %s.\n" -msgstr "Regex pattern hat auf keine Jobs für die Migration zugetroffen.\n" - -#: src/dird/migrate.c:1265 -#, c-format -msgid "%s OK -- with warnings" -msgstr "%s OK -- mit Warnungen" - -#: src/dird/migrate.c:1267 -#, c-format -msgid "%s OK" -msgstr "%s OK" - -#: src/dird/migrate.c:1272 -#, c-format -msgid "*** %s Error ***" -msgstr "*** %s Fehler ***" +msgid "Could not ready %s device %s for append.\n" +msgstr "Konnte FileSet \"%s\" Eintrag nicht erzeugen. ERR=%s\n" -#: src/dird/migrate.c:1282 +#: src/stored/acquire.c:570 #, c-format -msgid "%s Canceled" -msgstr "%s Abgebrochen" +msgid "Alert: %s" +msgstr "" -#: src/dird/migrate.c:1291 +#: src/stored/acquire.c:578 #, c-format -msgid "Inappropriate %s term code" -msgstr "Unzutreffender %s Beendigungskode" - -#: src/dird/migrate.c:1301 -#, fuzzy, c-format -msgid "%s -- no files to %s" -msgstr "%s -- keine Dateien zur Migration." +msgid "3997 Bad alert command: %s: ERR=%s.\n" +msgstr "" -#: src/dird/migrate.c:1316 +#: src/stored/bextract.c:75 #, fuzzy, c-format msgid "" -"%s %s %s (%s):\n" -" Build OS: %s %s %s\n" -" Prev Backup JobId: %s\n" -" Prev Backup Job: %s\n" -" New Backup JobId: %s\n" -" Current JobId: %s\n" -" Current Job: %s\n" -" Backup Level: %s%s\n" -" Client: %s\n" -" FileSet: \"%s\" %s\n" -" Read Pool: \"%s\" (From %s)\n" -" Read Storage: \"%s\" (From %s)\n" -" Write Pool: \"%s\" (From %s)\n" -" Write Storage: \"%s\" (From %s)\n" -" Catalog: \"%s\" (From %s)\n" -" Start time: %s\n" -" End time: %s\n" -" Elapsed time: %s\n" -" Priority: %d\n" -" SD Files Written: %s\n" -" SD Bytes Written: %s (%sB)\n" -" Rate: %.1f KB/s\n" -" Volume name(s): %s\n" -" Volume Session Id: %d\n" -" Volume Session Time: %d\n" -" Last Volume Bytes: %s (%sB)\n" -" SD Errors: %d\n" -" SD termination status: %s\n" -" Termination: %s\n" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: bextract \n" +" -b specify a bootstrap file\n" +" -c specify a Storage configuration file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -e exclude list\n" +" -i include list\n" +" -p proceed inspite of I/O errors\n" +" -v verbose\n" +" -V specify Volume names (separated by |)\n" +" -? print this message\n" "\n" msgstr "" -"%s %s (%s): %s\n" -" vorheriges Backup JobId:%s\n" -" neues Backup JobId: %s\n" -" Migration JobId: %s\n" -" Migration Job: %s\n" -" Backup Level: %s%s\n" -" Client: %s\n" -" FileSet: \"%s\" %s\n" -" Lese Pool: \"%s\" (Von %s)\n" -" Lese Storage: \"%s\" (Von %s)\n" -" Schreib Pool: \"%s\" (Von %s)\n" -" Schreib Storage: \"%s\" (Von %s)\n" -" Start Zeit: %s\n" -" End Zeit: %s\n" -" Verstichene Zeit: %s\n" -" Priorität: %d\n" -" SD Dateien geschrieben: %s\n" -" SD Bytes geschrieben: %s (%sB)\n" -" Geschwindigkeit: %.1f KB/s\n" -" Volume name(s): %s\n" -" Volume Session Id: %d\n" -" Volume Session Time: %d\n" -" Last Volume Bytes: %s (%sB)\n" -" SD Fehler: %d\n" -" SD Beendigungsstatus : %s\n" -" Beendigungsstatus: %s\n" "\n" +"Version: %s (%s)\n" +"\n" +"Usage: bacula-fd [-f -s] [-c config_datei] [-d debug_level]\n" +" -c benutze als Konfigurationsdatei\n" +" -dnn setze debug level auf nn\n" +" -f starte in Vordergrund (für debugging)\n" +" -g groupid\n" +" -s no signals (für debugging)\n" +" -t Konfigurationsdatei testen und beenden\n" +" -u userid\n" +" -v Ausführliche Benutzermeldungen\n" +" -? diese Meldung ausgeben.\n" +"\n" + +#: src/stored/bextract.c:191 src/stored/bscan.c:239 src/stored/bcopy.c:151 +#: src/tools/bbatch.c:178 src/tools/bvfs_test.c:189 src/tools/cats_test.c:309 +#: src/tools/ing_test.c:173 +msgid "Wrong number of arguments: \n" +msgstr "" -#: src/dird/migrate.c:1427 +#: src/stored/bextract.c:215 #, c-format -msgid "No Next Pool specification found in Pool \"%s\".\n" -msgstr "Keine \"Next Pool\" Spezifikation in Pool \"%s\" gefunden.\n" +msgid "%d Program Name and/or Program Data Stream records ignored.\n" +msgstr "" -#: src/dird/migrate.c:1433 +#: src/stored/bextract.c:219 #, c-format -msgid "No Storage specification found in Next Pool \"%s\".\n" -msgstr "Keine \"Storage\" Spezifikation in \"Next Pool\" \"%s\" gefunden.\n" +msgid "%d Win32 data or Win32 gzip data stream records. Ignored.\n" +msgstr "" -#: src/dird/migrate.c:1439 -msgid "Storage from Pool's NextPool resource" -msgstr "Storage aus der \"NextPool\" Ressource des Pools." +#: src/stored/bextract.c:246 +#, c-format +msgid "Cannot stat %s. It must exist. ERR=%s\n" +msgstr "" -#: src/dird/ua_prune.c:127 -msgid "Choose item to prune" +#: src/stored/bextract.c:250 +#, c-format +msgid "%s must be a directory.\n" msgstr "" -#: src/dird/ua_prune.c:175 +#: src/stored/bextract.c:271 #, c-format -msgid "Cannot prune Volume \"%s\" because it is archived.\n" +msgid "%u files restored.\n" msgstr "" -#: src/dird/ua_prune.c:217 -msgid "Pruned Jobs from JobHisto catalog.\n" +#: src/stored/bextract.c:281 src/stored/bextract.c:287 +#, c-format +msgid "Write error on %s: %s\n" msgstr "" -#: src/dird/ua_prune.c:305 -#, fuzzy -msgid "Begin pruning Files.\n" -msgstr "Beginn automatische Säuberung von Dateien.\n" +#: src/stored/bextract.c:318 src/stored/bextract.c:584 +msgid "Logic error output file should be open but is not.\n" +msgstr "" -#: src/dird/ua_prune.c:320 -msgid "No Files found to prune.\n" +#: src/stored/bextract.c:332 src/filed/restore.c:560 +#, c-format +msgid "%s stream not supported on this Client.\n" msgstr "" -#: src/dird/ua_prune.c:343 +#: src/stored/bextract.c:342 #, c-format -msgid "Pruned Files from %s Jobs for client %s from catalog.\n" +msgid "%s was deleted.\n" msgstr "" -#: src/dird/ua_prune.c:489 -#, fuzzy, c-format -msgid "Begin pruning Jobs older than %s.\n" -msgstr "Beginn automatische Säuberung von Aufträgen.\n" +#: src/stored/bextract.c:390 +#, c-format +msgid "Seek error on %s: %s\n" +msgstr "" -#: src/dird/ua_prune.c:600 +#: src/stored/bextract.c:426 src/stored/bextract.c:491 +#: src/filed/restore.c:1335 #, c-format -msgid "Pruned %d %s for client %s from catalog.\n" +msgid "Seek to %s error on %s: ERR=%s\n" msgstr "" -#: src/dird/ua_prune.c:601 -msgid "Jobs" +#: src/stored/bextract.c:445 +#, c-format +msgid "Uncompression error. ERR=%d\n" msgstr "" -#: src/dird/ua_prune.c:603 -msgid "No Jobs found to prune.\n" +#: src/stored/bextract.c:459 src/filed/restore.c:1450 +msgid "GZIP data stream found, but GZIP not configured!\n" msgstr "" -#: src/dird/autoprune.c:75 -msgid "" -"End auto prune.\n" -"\n" +#: src/stored/bextract.c:514 src/filed/restore.c:1376 +#, c-format +msgid "Compressed header version error. version=0x%x\n" msgstr "" -"Ende automatische Säuberung.\n" -"\n" -#: src/dird/ua_run.c:154 -msgid "OK to run? (yes/mod/no): " +#: src/stored/bextract.c:519 src/filed/restore.c:1381 +#, c-format +msgid "Compressed header size error. comp_len=%d, msglen=%d\n" msgstr "" -#: src/dird/ua_run.c:193 -msgid "Job failed.\n" +#: src/stored/bextract.c:541 +#, fuzzy, c-format +msgid "LZO uncompression error. ERR=%d\n" +msgstr "Regex Übersetzungsfehler. ERR=%s\n" + +#: src/stored/bextract.c:553 src/filed/restore.c:1414 +#, c-format +msgid "Compression algorithm 0x%x found, but not supported!\n" +msgstr "" + +#: src/stored/bextract.c:575 +msgid "Got Program Name or Data Stream. Ignored.\n" msgstr "" -#: src/dird/ua_run.c:196 +#: src/stored/bextract.c:589 src/filed/restore.c:316 src/filed/restore.c:1033 #, c-format -msgid "Job queued. JobId=%s\n" +msgid "Unknown stream=%d ignored. This shouldn't happen!\n" msgstr "" -#: src/dird/ua_run.c:203 +#: src/stored/bscan.c:108 #, c-format msgid "" "\n" -"Bad response: %s. You must answer yes, mod, or no.\n" +"Version: %s (%s)\n" +"\n" +"Usage: bscan [ options ] \n" +" -b bootstrap specify a bootstrap file\n" +" -c specify configuration file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -m update media info in database\n" +" -D specify the driver database name (default NULL)\n" +" -n specify the database name (default bacula)\n" +" -u specify database user name (default bacula)\n" +" -P specify database password (default none)\n" +" -h specify database host (default NULL)\n" +" -t specify database port (default 0)\n" +" -p proceed inspite of I/O errors\n" +" -r list records\n" +" -s synchronize or store in database\n" +" -S show scan progress periodically\n" +" -v verbose\n" +" -V specify Volume names (separated by |)\n" +" -w specify working directory (default from conf file)\n" +" -? print this message\n" "\n" msgstr "" -#: src/dird/ua_run.c:207 -msgid "Job not run.\n" +#: src/stored/bscan.c:264 +#, c-format +msgid "Working Directory: %s not found. Cannot continue.\n" msgstr "" -#: src/dird/ua_run.c:223 -msgid "Level" +#: src/stored/bscan.c:268 +#, c-format +msgid "Working Directory: %s is not a directory. Cannot continue.\n" msgstr "" -#: src/dird/ua_run.c:228 -#, fuzzy -msgid "Restore Client" -msgstr "Wiederherstellung läuft..." +#: src/stored/bscan.c:282 src/stored/bscan.c:358 +#, c-format +msgid "First Volume Size = %s\n" +msgstr "" -#: src/dird/ua_run.c:232 src/wx-console/wxbrestorepanel.cpp:356 -#: src/wx-console/wxbrestorepanel.cpp:854 -#: src/wx-console/wxbrestorepanel.cpp:1918 -msgid "When" +#: src/stored/bscan.c:288 src/tools/bbatch.c:189 src/tools/bbatch.c:238 +#: src/tools/bvfs_test.c:203 src/tools/ing_test.c:179 +msgid "Could not init Bacula database\n" msgstr "" -#: src/dird/ua_run.c:233 src/wx-console/wxbrestorepanel.cpp:357 -#: src/wx-console/wxbrestorepanel.cpp:1128 -#: src/wx-console/wxbrestorepanel.cpp:1921 -msgid "Priority" +#: src/stored/bscan.c:295 src/tools/bbatch.c:245 src/tools/bvfs_test.c:212 +#: src/tools/ing_test.c:188 +#, c-format +msgid "Using Database: %s, User: %s\n" msgstr "" -#: src/dird/ua_run.c:240 -msgid "Verify Job" +#: src/stored/bscan.c:329 +#, c-format +msgid "Create JobMedia for Job %s\n" msgstr "" -#: src/dird/ua_run.c:243 src/wx-console/wxbrestorepanel.cpp:349 -#: src/wx-console/wxbrestorepanel.cpp:1899 -msgid "Bootstrap" +#: src/stored/bscan.c:339 +#, c-format +msgid "Could not create JobMedia record for Volume=%s Job=%s\n" msgstr "" -#: src/dird/ua_run.c:244 src/wx-console/wxbrestorepanel.cpp:350 -#: src/wx-console/wxbrestorepanel.cpp:1104 -#: src/wx-console/wxbrestorepanel.cpp:1901 -msgid "Where" +#: src/stored/bscan.c:406 +#, c-format +msgid "done: %d%%\n" msgstr "" -#: src/dird/ua_run.c:245 -#, fuzzy -msgid "File Relocation" -msgstr "File daemon" +#: src/stored/bscan.c:414 src/stored/bcopy.c:230 +#, c-format +msgid "Record: SessId=%u SessTim=%u FileIndex=%d Stream=%d len=%u\n" +msgstr "" -#: src/dird/ua_run.c:246 src/wx-console/wxbrestorepanel.cpp:352 -#: src/wx-console/wxbrestorepanel.cpp:1112 -#: src/wx-console/wxbrestorepanel.cpp:1905 -#: src/wx-console/wxbrestorepanel.cpp:1906 -#: src/wx-console/wxbrestorepanel.cpp:1907 -#: src/wx-console/wxbrestorepanel.cpp:1908 -#: src/wx-console/wxbrestorepanel.cpp:1909 -msgid "Replace" +#: src/stored/bscan.c:430 +msgid "Volume is prelabeled. This tape cannot be scanned.\n" msgstr "" -#: src/dird/ua_run.c:247 -msgid "JobId" +#: src/stored/bscan.c:442 +#, c-format +msgid "Pool record for %s found in DB.\n" msgstr "" -#: src/dird/ua_run.c:250 -msgid "Plugin Options" +#: src/stored/bscan.c:446 +#, c-format +msgid "VOL_LABEL: Pool record not found for Pool: %s\n" msgstr "" -#: src/dird/ua_run.c:261 src/dird/ua_run.c:1569 -msgid "user selection" +#: src/stored/bscan.c:452 +#, c-format +msgid "VOL_LABEL: PoolType mismatch. DB=%s Vol=%s\n" msgstr "" -#: src/dird/ua_run.c:293 -msgid "" -"Please enter desired start time as YYYY-MM-DD HH:MM:SS (return for now): " +#: src/stored/bscan.c:456 +#, c-format +msgid "Pool type \"%s\" is OK.\n" msgstr "" -#: src/dird/ua_run.c:301 src/dird/ua_run.c:477 -msgid "Invalid time, using current time.\n" +#: src/stored/bscan.c:466 +#, c-format +msgid "Media record for %s found in DB.\n" msgstr "" -#: src/dird/ua_run.c:308 -msgid "Enter new Priority: " +#: src/stored/bscan.c:473 +#, c-format +msgid "VOL_LABEL: Media record not found for Volume: %s\n" msgstr "" -#: src/dird/ua_run.c:312 -msgid "Priority must be a positive integer.\n" +#: src/stored/bscan.c:480 +#, c-format +msgid "VOL_LABEL: MediaType mismatch. DB=%s Vol=%s\n" msgstr "" -#: src/dird/ua_run.c:333 -msgid "Please enter the Bootstrap file name: " +#: src/stored/bscan.c:484 +#, c-format +msgid "Media type \"%s\" is OK.\n" msgstr "" -#: src/dird/ua_run.c:345 +#: src/stored/bscan.c:494 #, c-format -msgid "Warning cannot open %s: ERR=%s\n" +msgid "VOL_LABEL: OK for Volume: %s\n" msgstr "" -#: src/dird/ua_run.c:364 -msgid "Please enter the full path prefix for restore (/ for none): " +#: src/stored/bscan.c:501 +#, c-format +msgid "%d \"errors\" ignored before first Start of Session record.\n" msgstr "" -#: src/dird/ua_run.c:386 -msgid "Replace:\n" +#: src/stored/bscan.c:512 +#, c-format +msgid "SOS_LABEL: Found Job record for JobId: %d\n" msgstr "" -#: src/dird/ua_run.c:390 -msgid "Select replace option" +#: src/stored/bscan.c:517 +#, c-format +msgid "SOS_LABEL: Job record not found for JobId: %d\n" msgstr "" -#: src/dird/ua_run.c:401 -msgid "" -"You must set the bootstrap file to NULL to be able to specify a JobId.\n" +#: src/stored/bscan.c:557 +#, c-format +msgid "SOS_LABEL: VolSessId mismatch for JobId=%u. DB=%d Vol=%d\n" msgstr "" -#: src/dird/ua_run.c:406 -msgid "Please Plugin Options string: " +#: src/stored/bscan.c:563 +#, c-format +msgid "SOS_LABEL: VolSessTime mismatch for JobId=%u. DB=%d Vol=%d\n" msgstr "" -#: src/dird/ua_run.c:444 src/dird/ua_run.c:453 -msgid "User input" +#: src/stored/bscan.c:569 +#, c-format +msgid "SOS_LABEL: PoolId mismatch for JobId=%u. DB=%d Vol=%d\n" msgstr "" -#: src/dird/ua_run.c:507 +#: src/stored/bscan.c:587 src/stored/bscan.c:1141 #, c-format -msgid "Invalid replace option: %s\n" +msgid "Could not find SessId=%d SessTime=%d for EOS record.\n" msgstr "" -#: src/dird/ua_run.c:589 +#: src/stored/bscan.c:633 #, c-format -msgid "strip_prefix=%s add_prefix=%s add_suffix=%s\n" +msgid "Could not update job record. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:592 -msgid "This will replace your current Where value\n" +#: src/stored/bscan.c:644 +#, c-format +msgid "End of all Volumes. VolFiles=%u VolBlocks=%u VolBytes=%s\n" msgstr "" -#: src/dird/ua_run.c:593 -msgid "Strip prefix" +#: src/stored/bscan.c:656 +#, c-format +msgid "Could not find Job for SessId=%d SessTime=%d record.\n" msgstr "" -#: src/dird/ua_run.c:594 -msgid "Add prefix" +#: src/stored/bscan.c:687 +#, c-format +msgid "%s file records. At file:blk=%s:%s bytes=%s\n" msgstr "" -#: src/dird/ua_run.c:595 -msgid "Add file suffix" +#: src/stored/bscan.c:752 +#, c-format +msgid "Got MD5 record: %s\n" msgstr "" -#: src/dird/ua_run.c:596 -msgid "Enter a regexp" +#: src/stored/bscan.c:760 +#, c-format +msgid "Got SHA1 record: %s\n" msgstr "" -#: src/dird/ua_run.c:597 -msgid "Test filename manipulation" +#: src/stored/bscan.c:768 +#, c-format +msgid "Got SHA256 record: %s\n" msgstr "" -#: src/dird/ua_run.c:598 -msgid "Use this ?" +#: src/stored/bscan.c:776 +#, c-format +msgid "Got SHA512 record: %s\n" +msgstr "" + +#: src/stored/bscan.c:784 src/stored/bscan.c:791 +msgid "Got signed digest record\n" +msgstr "" + +#: src/stored/bscan.c:797 +#, c-format +msgid "Got Prog Names Stream: %s\n" +msgstr "" + +#: src/stored/bscan.c:803 +msgid "Got Prog Data Stream record.\n" +msgstr "" + +#: src/stored/bscan.c:848 +#, c-format +msgid "Unknown stream type!!! stream=%d len=%i\n" +msgstr "" + +#: src/stored/bscan.c:910 +#, c-format +msgid "Could not create File Attributes record. ERR=%s\n" +msgstr "" + +#: src/stored/bscan.c:916 +#, c-format +msgid "Created File record: %s\n" +msgstr "" + +#: src/stored/bscan.c:961 +#, c-format +msgid "Could not create media record. ERR=%s\n" +msgstr "" + +#: src/stored/bscan.c:965 src/stored/bscan.c:986 +#, c-format +msgid "Could not update media record. ERR=%s\n" +msgstr "" + +#: src/stored/bscan.c:969 +#, c-format +msgid "Created Media record for Volume: %s\n" +msgstr "" + +#: src/stored/bscan.c:990 +#, c-format +msgid "Updated Media record at end of Volume: %s\n" +msgstr "" + +#: src/stored/bscan.c:1007 +#, c-format +msgid "Could not create pool record. ERR=%s\n" +msgstr "" + +#: src/stored/bscan.c:1011 +#, c-format +msgid "Created Pool record for Pool: %s\n" msgstr "" -#: src/dird/ua_run.c:603 -msgid "Please enter the path prefix to strip: " -msgstr "" +#: src/stored/bscan.c:1030 +#, fuzzy, c-format +msgid "Could not get Client record. ERR=%s\n" +msgstr "Konnte Client Eintrag nicht anlegen. ERR=%s\n" -#: src/dird/ua_run.c:611 -msgid "Please enter the path prefix to add (/ for none): " -msgstr "" +#: src/stored/bscan.c:1036 src/dird/job.c:1060 +#, c-format +msgid "Could not create Client record. ERR=%s\n" +msgstr "Konnte Client Eintrag nicht anlegen. ERR=%s\n" -#: src/dird/ua_run.c:622 -msgid "Please enter the file suffix to add: " +#: src/stored/bscan.c:1040 +#, c-format +msgid "Created Client record for Client: %s\n" msgstr "" -#: src/dird/ua_run.c:629 -msgid "Please enter a valid regexp (!from!to!): " +#: src/stored/bscan.c:1057 +#, c-format +msgid "Fileset \"%s\" already exists.\n" msgstr "" -#: src/dird/ua_run.c:642 +#: src/stored/bscan.c:1061 #, c-format -msgid "regexwhere=%s\n" +msgid "Could not create FileSet record \"%s\". ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:648 +#: src/stored/bscan.c:1066 #, c-format -msgid "strip_prefix=%s add_prefix=%s add_suffix=%s result=%s\n" +msgid "Created FileSet record \"%s\"\n" msgstr "" -#: src/dird/ua_run.c:655 -msgid "Cannot use your regexp\n" +#: src/stored/bscan.c:1113 +#, c-format +msgid "Could not create JobId record. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:658 -msgid "Enter a period (.) to stop this test\n" +#: src/stored/bscan.c:1119 +#, c-format +msgid "Could not update job start record. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:659 -msgid "Please enter filename to test: " +#: src/stored/bscan.c:1122 +#, c-format +msgid "Created new JobId=%u record for original JobId=%u\n" msgstr "" -#: src/dird/ua_run.c:661 -#, fuzzy, c-format -msgid "%s -> %s\n" -msgstr " --> Run=%s\n" - -#: src/dird/ua_run.c:705 -msgid "Cannot use your regexp.\n" +#: src/stored/bscan.c:1175 +#, c-format +msgid "Could not update JobId=%u record. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:718 src/dird/ua_run.c:748 -msgid "Levels:\n" +#: src/stored/bscan.c:1180 +#, c-format +msgid "Updated Job termination record for JobId=%u Level=%s TermStat=%c\n" msgstr "" -#: src/dird/ua_run.c:720 src/stored/status.c:665 src/lib/util.c:426 -#: src/lib/util.c:472 src/filed/status.c:519 -msgid "Full" -msgstr "" +#: src/stored/bscan.c:1191 src/dird/vbackup.c:386 src/dird/backup.c:774 +msgid "Backup OK" +msgstr "Sicherung OK" -#: src/dird/ua_run.c:721 src/stored/status.c:668 src/lib/util.c:429 -#: src/filed/status.c:522 -msgid "Incremental" -msgstr "" +#: src/stored/bscan.c:1194 src/dird/vbackup.c:384 src/dird/backup.c:772 +#: src/dird/backup.c:778 +msgid "Backup OK -- with warnings" +msgstr "Sicherung OK -- mit Warnungen" -#: src/dird/ua_run.c:722 src/stored/status.c:671 src/lib/util.c:432 -#: src/filed/status.c:525 -msgid "Differential" -msgstr "" +#: src/stored/bscan.c:1198 src/dird/vbackup.c:391 src/dird/backup.c:782 +msgid "*** Backup Error ***" +msgstr "*** Sicherungsfehler ***" -#: src/dird/ua_run.c:723 src/stored/status.c:674 src/lib/util.c:435 -#: src/filed/status.c:528 -msgid "Since" -msgstr "" +#: src/stored/bscan.c:1201 src/dird/vbackup.c:401 src/dird/backup.c:792 +msgid "Backup Canceled" +msgstr "Sicherung Abgebrochen" -#: src/dird/ua_run.c:724 -msgid "VirtualFull" +#: src/stored/bscan.c:1205 +#, c-format +msgid "Job Termination code: %d" msgstr "" -#: src/dird/ua_run.c:725 src/dird/ua_run.c:754 -msgid "Select level" +#: src/stored/bscan.c:1210 +#, c-format +msgid "" +"%s\n" +"JobId: %d\n" +"Job: %s\n" +"FileSet: %s\n" +"Backup Level: %s\n" +"Client: %s\n" +"Start time: %s\n" +"End time: %s\n" +"Files Written: %s\n" +"Bytes Written: %s\n" +"Volume Session Id: %d\n" +"Volume Session Time: %d\n" +"Last Volume Bytes: %s\n" +"Termination: %s\n" +"\n" msgstr "" -#: src/dird/ua_run.c:749 -msgid "Initialize Catalog" +#: src/stored/bscan.c:1268 +#, c-format +msgid "Could not create JobMedia record. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:750 src/stored/status.c:677 src/lib/util.c:438 -#: src/filed/status.c:531 -msgid "Verify Catalog" +#: src/stored/bscan.c:1272 +#, c-format +msgid "Created JobMedia record JobId %d, MediaId %d\n" msgstr "" -#: src/dird/ua_run.c:751 src/lib/util.c:444 -msgid "Verify Volume to Catalog" +#: src/stored/bscan.c:1288 +#, c-format +msgid "Could not find SessId=%d SessTime=%d for MD5/SHA1 record.\n" msgstr "" -#: src/dird/ua_run.c:752 src/lib/util.c:447 -msgid "Verify Disk to Catalog" +#: src/stored/bscan.c:1302 +#, c-format +msgid "Could not add MD5/SHA1 to File record. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:753 -msgid "Verify Volume Data (not yet implemented)" +#: src/stored/bscan.c:1307 +msgid "Updated MD5/SHA1 record\n" msgstr "" -#: src/dird/ua_run.c:774 -msgid "Level not appropriate for this Job. Cannot be changed.\n" +#: src/stored/stored_conf.c:224 +#, c-format +msgid "Expected a Device Type keyword, got: %s" msgstr "" -#: src/dird/ua_run.c:805 +#: src/stored/stored_conf.c:238 #, c-format msgid "" -"Run Admin Job\n" -"JobName: %s\n" -"FileSet: %s\n" -"Client: %s\n" -"Storage: %s\n" -"When: %s\n" -"Priority: %d\n" +"Maximum Block Size configured value %u is greater than allowed maximum: %u" msgstr "" -#: src/dird/ua_run.c:849 +#: src/stored/stored_conf.c:252 #, c-format -msgid "" -"Run Backup job\n" -"JobName: %s\n" -"Level: %s\n" -"Client: %s\n" -"FileSet: %s\n" -"Pool: %s (From %s)\n" -"Storage: %s (From %s)\n" -"When: %s\n" -"Priority: %d\n" -"%s%s%s" +msgid "Warning: no \"%s\" resource (%d) defined.\n" msgstr "" -#: src/dird/ua_run.c:880 +#: src/stored/stored_conf.c:255 +#, c-format +msgid "dump_resource type=%d\n" +msgstr "" + +#: src/stored/stored_conf.c:371 #, fuzzy, c-format -msgid "Could not get job record for selected JobId. ERR=%s" -msgstr "Konnte job record für JobId %s zum migrieren nicht holen. ERR=%s" +msgid "Warning: unknown resource type %d\n" +msgstr "unbekannt" -#: src/dird/ua_run.c:919 +#: src/stored/stored_conf.c:567 #, c-format -msgid "" -"Run Verify Job\n" -"JobName: %s\n" -"Level: %s\n" -"Client: %s\n" -"FileSet: %s\n" -"Pool: %s (From %s)\n" -"Storage: %s (From %s)\n" -"Verify Job: %s\n" -"Verify List: %s\n" -"When: %s\n" -"Priority: %d\n" +msgid "\"%s\" item is required in \"%s\" resource, but not found.\n" msgstr "" -#: src/dird/ua_run.c:948 -msgid "Please enter a JobId for restore: " +#: src/stored/stored_conf.c:573 +#, c-format +msgid "Too many items in \"%s\" resource\n" msgstr "" -#: src/dird/ua_run.c:988 +#: src/stored/stored_conf.c:594 src/dird/dird_conf.c:1488 +#: src/filed/filed_conf.c:459 #, c-format -msgid "" -"Run Restore job\n" -"JobName: %s\n" -"Bootstrap: %s\n" -"RegexWhere: %s\n" -"Replace: %s\n" -"FileSet: %s\n" -"Backup Client: %s\n" -"Restore Client: %s\n" -"Storage: %s\n" -"When: %s\n" -"Catalog: %s\n" -"Priority: %d\n" -"Plugin Options: %s\n" -msgstr "" +msgid "Cannot find Director resource %s\n" +msgstr "Kann Director resource %s nicht finden\n" -#: src/dird/ua_run.c:1044 +#: src/stored/stored_conf.c:600 src/dird/dird_conf.c:1495 #, c-format -msgid "" -"Run Restore job\n" -"JobName: %s\n" -"Bootstrap: %s\n" -"Where: %s\n" -"Replace: %s\n" -"FileSet: %s\n" -"Backup Client: %s\n" -"Restore Client: %s\n" -"Storage: %s\n" -"When: %s\n" -"Catalog: %s\n" -"Priority: %d\n" -"Plugin Options: %s\n" +msgid "Cannot find Storage resource %s\n" +msgstr "Kann Storage resource %s nicht finden\n" + +#: src/stored/stored_conf.c:607 +#, c-format +msgid "Cannot find AutoChanger resource %s\n" msgstr "" -#: src/dird/ua_run.c:1075 +#: src/stored/stored_conf.c:623 +#, fuzzy, c-format +msgid "Unable to init lock: ERR=%s\n" +msgstr "Kann DB lock nicht initialisieren. ERR=%s\n" + +#: src/stored/stored_conf.c:681 #, c-format msgid "" -"Run Restore job\n" -"JobName: %s\n" -"Bootstrap: %s\n" +"Attempt to define second \"%s\" resource named \"%s\" is not permitted.\n" msgstr "" -#: src/dird/ua_run.c:1083 +#: src/stored/dircmd.c:157 #, c-format -msgid "RegexWhere: %s\n" +msgid "Connection request from %s failed.\n" msgstr "" -#: src/dird/ua_run.c:1086 -#, fuzzy, c-format -msgid "Where: %s\n" -msgstr " opcmd=%s\n" - -#: src/dird/ua_run.c:1090 +#: src/stored/dircmd.c:168 #, c-format -msgid "" -"Replace: %s\n" -"Client: %s\n" -"Storage: %s\n" -"JobId: %s\n" -"When: %s\n" -"Catalog: %s\n" -"Priority: %d\n" -"Plugin Options: %s\n" +msgid "Invalid connection from %s. Len=%d\n" msgstr "" -#: src/dird/ua_run.c:1145 -msgid "Run Copy job\n" +#: src/stored/dircmd.c:215 src/filed/authenticate.c:196 +msgid "Unable to authenticate Director\n" msgstr "" -#: src/dird/ua_run.c:1147 +#: src/stored/dircmd.c:308 +#, fuzzy, c-format +msgid "Bad client command: %s" +msgstr "Storage daemon hat \"Job command\": %s abgelehnt\n" + +#: src/stored/dircmd.c:318 #, fuzzy -msgid "Run Migration job\n" -msgstr "Konnte Migrationsjob nicht starten.\n" +msgid "Client daemon" +msgstr "File daemon" -#: src/dird/ua_run.c:1176 +#: src/stored/dircmd.c:321 +#, fuzzy, c-format +msgid "Failed to connect to Client daemon: %s:%d\n" +msgstr "Verbindung zu File daemon fehlgeschlagen.\n" + +#: src/stored/dircmd.c:358 src/filed/job.c:1855 #, c-format -msgid "Unknown Job Type=%d\n" +msgid "Bad storage command: %s" msgstr "" -#: src/dird/ua_run.c:1245 +#: src/stored/dircmd.c:377 src/dird/msgchan.c:121 src/filed/job.c:1880 +#: src/qt-console/tray-monitor/tray-monitor.cpp:363 +msgid "Storage daemon" +msgstr "Storage daemon" + +#: src/stored/dircmd.c:380 src/filed/job.c:1883 #, c-format -msgid "Value missing for keyword %s\n" +msgid "Failed to connect to Storage daemon: %s:%d\n" msgstr "" -#: src/dird/ua_run.c:1252 -msgid "Job name specified twice.\n" +#: src/stored/dircmd.c:397 +msgid "In storage_cmd port==0, no prior Storage connection.\n" msgstr "" -#: src/dird/ua_run.c:1260 -msgid "JobId specified twice.\n" +#: src/stored/dircmd.c:445 +#, c-format +msgid "3991 Bad setdebug command: %s\n" msgstr "" -#: src/dird/ua_run.c:1269 src/dird/ua_run.c:1409 -msgid "Client specified twice.\n" +#: src/stored/dircmd.c:479 +msgid "3903 Error scanning cancel command.\n" msgstr "" -#: src/dird/ua_run.c:1277 -msgid "FileSet specified twice.\n" +#: src/stored/dircmd.c:483 +#, c-format +msgid "3904 Job %s not found.\n" msgstr "" -#: src/dird/ua_run.c:1285 -msgid "Level specified twice.\n" -msgstr "" +#: src/stored/dircmd.c:511 +#, fuzzy, c-format +msgid "3000 JobId=%ld Job=\"%s\" marked to be %s.\n" +msgstr "JobId %s, Job %s zum Abbruch markiert.\n" -#: src/dird/ua_run.c:1294 -msgid "Storage specified twice.\n" +#: src/stored/dircmd.c:590 src/stored/dircmd.c:971 src/stored/dircmd.c:1066 +#: src/stored/dircmd.c:1177 src/stored/dircmd.c:1299 src/stored/dircmd.c:1341 +#, c-format +msgid "3999 Device \"%s\" not found or could not be opened.\n" msgstr "" -#: src/dird/ua_run.c:1302 -msgid "RegexWhere or Where specified twice.\n" +#: src/stored/dircmd.c:595 +#, c-format +msgid "3903 Error scanning label command: %s\n" msgstr "" -#: src/dird/ua_run.c:1307 -msgid "No authorization for \"regexwhere\" specification.\n" -msgstr "" +#: src/stored/dircmd.c:644 +#, fuzzy, c-format +msgid "3910 Unable to open device \"%s\": ERR=%s\n" +msgstr "Kann Datenbank=%s.nicht öffen. ERR=%s\n" -#: src/dird/ua_run.c:1314 -msgid "Where or RegexWhere specified twice.\n" +#: src/stored/dircmd.c:661 +#, c-format +msgid "3920 Cannot label Volume because it is already labeled: \"%s\"\n" msgstr "" -#: src/dird/ua_run.c:1319 -msgid "No authoriztion for \"where\" specification.\n" +#: src/stored/dircmd.c:668 +msgid "3921 Wrong volume mounted.\n" msgstr "" -#: src/dird/ua_run.c:1326 -msgid "Bootstrap specified twice.\n" +#: src/stored/dircmd.c:672 +msgid "3922 Cannot relabel an ANSI/IBM labeled Volume.\n" msgstr "" -#: src/dird/ua_run.c:1334 -msgid "Replace specified twice.\n" +#: src/stored/dircmd.c:680 +#, c-format +msgid "3912 Failed to label Volume: ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:1342 -msgid "When specified twice.\n" +#: src/stored/dircmd.c:690 +#, fuzzy, c-format +msgid "3915 Failed to label Volume: ERR=%s\n" +msgstr "Konnte Job Eintrag nicht holen. ERR=%s\n" + +#: src/stored/dircmd.c:693 +#, c-format +msgid "3914 Failed to label Volume (no media): ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:1350 -msgid "Priority specified twice.\n" +#: src/stored/dircmd.c:696 +#, c-format +msgid "3913 Cannot label Volume. Unknown status %d from read_volume_label()\n" msgstr "" -#: src/dird/ua_run.c:1355 -msgid "Priority must be positive nonzero setting it to 10.\n" +#: src/stored/dircmd.c:733 +#, c-format +msgid "3001 Mounted Volume: %s\n" msgstr "" -#: src/dird/ua_run.c:1365 -msgid "Verify Job specified twice.\n" +#: src/stored/dircmd.c:737 src/stored/dircmd.c:1377 +#, c-format +msgid "" +"3902 Cannot mount Volume on Storage Device \"%s\" because:\n" +"%s" msgstr "" -#: src/dird/ua_run.c:1393 -msgid "Migration Job specified twice.\n" +#: src/stored/dircmd.c:768 src/stored/reserve.c:646 +#, c-format +msgid "" +"\n" +" Device \"%s\" requested by DIR could not be opened or does not exist.\n" msgstr "" -#: src/dird/ua_run.c:1401 -msgid "Pool specified twice.\n" +#: src/stored/dircmd.c:790 src/stored/reserve.c:642 +#, c-format +msgid "" +"\n" +" Device \"%s\" in changer \"%s\" requested by DIR could not be opened or " +"does not exist.\n" msgstr "" -#: src/dird/ua_run.c:1417 -#, fuzzy -msgid "Restore Client specified twice.\n" -msgstr "Kein storage angegeben.\n" - -#: src/dird/ua_run.c:1424 +#: src/stored/dircmd.c:854 #, fuzzy -msgid "Plugin Options not yet implemented.\n" -msgstr "Kein storage angegeben.\n" +msgid "Specified slot ignored. " +msgstr "SQL fehlgeschlagen ERR=%s\n" -#: src/dird/ua_run.c:1427 -#, fuzzy -msgid "Plugin Options specified twice.\n" -msgstr "Kein storage angegeben.\n" +#: src/stored/dircmd.c:871 src/stored/dircmd.c:929 +#, fuzzy, c-format +msgid "3901 Unable to open device \"%s\": ERR=%s\n" +msgstr "Kann Datenbank=%s.nicht öffen. ERR=%s\n" -#: src/dird/ua_run.c:1432 -msgid "No authoriztion for \"PluginOptions\" specification.\n" +#: src/stored/dircmd.c:891 src/stored/dircmd.c:920 +#, c-format +msgid "3001 Device \"%s\" is mounted with Volume \"%s\"\n" msgstr "" -#: src/dird/ua_run.c:1439 -#, fuzzy -msgid "Spool flag specified twice.\n" -msgstr "Kein storage angegeben.\n" - -#: src/dird/ua_run.c:1446 -#, fuzzy -msgid "Invalid spooldata flag.\n" -msgstr "Ungültige JobId gefunden.\n" - -#: src/dird/ua_run.c:1455 -#, fuzzy -msgid "IgnoreDuplicateCheck flag specified twice.\n" -msgstr "Kein storage angegeben.\n" - -#: src/dird/ua_run.c:1462 -#, fuzzy -msgid "Invalid ignoreduplicatecheck flag.\n" -msgstr "Ungültige JobId gefunden.\n" - -#: src/dird/ua_run.c:1467 -#, fuzzy -msgid "Accurate flag specified twice.\n" -msgstr "Kein storage angegeben.\n" - -#: src/dird/ua_run.c:1474 -#, fuzzy -msgid "Invalid accurate flag.\n" -msgstr "Ungültige JobId gefunden.\n" +#: src/stored/dircmd.c:894 src/stored/dircmd.c:923 src/stored/dircmd.c:938 +#, c-format +msgid "" +"3905 Device \"%s\" open but no Bacula volume is mounted.\n" +"If this is not a blank tape, try unmounting and remounting the Volume.\n" +msgstr "" -#: src/dird/ua_run.c:1495 +#: src/stored/dircmd.c:904 #, c-format -msgid "Invalid keyword: %s\n" +msgid "3001 Device \"%s\" is doing acquire.\n" msgstr "" -#: src/dird/ua_run.c:1510 +#: src/stored/dircmd.c:909 src/stored/dircmd.c:1037 #, c-format -msgid "Catalog \"%s\" not found\n" +msgid "3903 Device \"%s\" is being labeled.\n" msgstr "" -#: src/dird/ua_run.c:1514 +#: src/stored/dircmd.c:935 #, c-format -msgid "No authorization. Catalog \"%s\".\n" +msgid "3001 Device \"%s\" is already mounted with Volume \"%s\"\n" msgstr "" -#: src/dird/ua_run.c:1525 +#: src/stored/dircmd.c:947 #, c-format -msgid "Job \"%s\" not found\n" +msgid "3002 Device \"%s\" is mounted.\n" msgstr "" -#: src/dird/ua_run.c:1532 -msgid "A job name must be specified.\n" +#: src/stored/dircmd.c:949 src/stored/dircmd.c:1006 src/stored/dircmd.c:1025 +#: src/stored/dircmd.c:1057 +#, c-format +msgid "3907 %s" msgstr "" -#: src/dird/ua_run.c:1538 +#: src/stored/dircmd.c:952 #, c-format -msgid "No authorization. Job \"%s\".\n" +msgid "3906 File device \"%s\" is always mounted.\n" msgstr "" -#: src/dird/ua_run.c:1546 +#: src/stored/dircmd.c:961 +#, fuzzy, c-format +msgid "3930 Device \"%s\" is being released.\n" +msgstr "unbekannt" + +#: src/stored/dircmd.c:965 +#, fuzzy, c-format +msgid "3905 Unknown wait state %d\n" +msgstr "unbekannt" + +#: src/stored/dircmd.c:975 #, c-format -msgid "Pool \"%s\" not found.\n" +msgid "3909 Error scanning mount command: %s\n" msgstr "" -#: src/dird/ua_run.c:1556 +#: src/stored/dircmd.c:1003 src/stored/dircmd.c:1059 +#, fuzzy, c-format +msgid "3002 Device \"%s\" unmounted.\n" +msgstr "Pool Ressource \"%s\" nicht gefunden.\n" + +#: src/stored/dircmd.c:1010 +#, fuzzy, c-format +msgid "3901 Device \"%s\" is already unmounted.\n" +msgstr "unbekannt" + +#: src/stored/dircmd.c:1028 +#, fuzzy, c-format +msgid "3001 Device \"%s\" unmounted.\n" +msgstr "Pool Ressource \"%s\" nicht gefunden.\n" + +#: src/stored/dircmd.c:1033 #, c-format -msgid "No authorization. Pool \"%s\".\n" +msgid "3902 Device \"%s\" is busy in acquire.\n" msgstr "" -#: src/dird/ua_run.c:1566 +#: src/stored/dircmd.c:1071 #, c-format -msgid "Storage \"%s\" not found.\n" +msgid "3907 Error scanning unmount command: %s\n" msgstr "" -#: src/dird/ua_run.c:1575 src/dird/job.c:1245 -msgid "No storage specified.\n" -msgstr "Kein storage angegeben.\n" +#: src/stored/dircmd.c:1099 +msgid "3916 Error scanning action_on_purge command\n" +msgstr "" -#: src/dird/ua_run.c:1578 +#: src/stored/dircmd.c:1142 +#, fuzzy, c-format +msgid "3921 Device \"%s\" already released.\n" +msgstr "Device Eintrag %s bereits vorhanden\n" + +#: src/stored/dircmd.c:1149 #, c-format -msgid "No authorization. Storage \"%s\".\n" +msgid "3922 Device \"%s\" waiting for sysop.\n" msgstr "" -#: src/dird/ua_run.c:1598 src/dird/ua_run.c:1618 +#: src/stored/dircmd.c:1155 #, c-format -msgid "No authorization. Client \"%s\".\n" +msgid "3922 Device \"%s\" waiting for mount.\n" msgstr "" -#: src/dird/ua_run.c:1608 +#: src/stored/dircmd.c:1159 #, fuzzy, c-format -msgid "Restore Client \"%s\" not found.\n" -msgstr "Pool Ressource \"%s\" nicht gefunden.\n" +msgid "3923 Device \"%s\" is busy in acquire.\n" +msgstr "unbekannt" -#: src/dird/ua_run.c:1627 +#: src/stored/dircmd.c:1163 #, c-format -msgid "FileSet \"%s\" not found.\n" +msgid "3914 Device \"%s\" is being labeled.\n" msgstr "" -#: src/dird/ua_run.c:1636 +#: src/stored/dircmd.c:1171 #, c-format -msgid "No authorization. FileSet \"%s\".\n" +msgid "3022 Device \"%s\" released.\n" msgstr "" -#: src/dird/ua_run.c:1644 +#: src/stored/dircmd.c:1182 #, c-format -msgid "Verify Job \"%s\" not found.\n" +msgid "3927 Error scanning release command: %s\n" msgstr "" -#: src/dird/ua_run.c:1654 +#: src/stored/dircmd.c:1211 #, c-format -msgid "Migration Job \"%s\" not found.\n" +msgid "Could not create bootstrap file %s: ERR=%s\n" +msgstr "" + +#: src/stored/dircmd.c:1224 +msgid "Error parsing bootstrap file.\n" msgstr "" -#: src/dird/dir_plugins.c:181 src/stored/sd_plugins.c:194 -#: src/filed/fd_plugins.c:1130 +#: src/stored/dircmd.c:1286 +#, fuzzy, c-format +msgid "3998 Device \"%s\" is not an autochanger.\n" +msgstr "unbekannt" + +#: src/stored/dircmd.c:1303 #, c-format -msgid "Loaded plugin: %s\n" +msgid "3908 Error scanning autochanger drives/list/slots command: %s\n" msgstr "" -#: src/dird/dir_plugins.c:201 src/stored/sd_plugins.c:214 -#: src/filed/fd_plugins.c:1151 +#: src/stored/dircmd.c:1345 #, c-format -msgid "Plugin magic wrong. Plugin=%s wanted=%s got=%s\n" +msgid "3909 Error scanning readlabel command: %s\n" msgstr "" -#: src/dird/dir_plugins.c:209 src/stored/sd_plugins.c:222 -#: src/filed/fd_plugins.c:1159 +#: src/stored/dircmd.c:1373 #, c-format -msgid "Plugin version incorrect. Plugin=%s wanted=%d got=%d\n" +msgid "3001 Volume=%s Slot=%d\n" msgstr "" -#: src/dird/dir_plugins.c:218 src/stored/sd_plugins.c:231 -#: src/filed/fd_plugins.c:1167 +#: src/stored/dircmd.c:1405 #, c-format -msgid "Plugin license incompatible. Plugin=%s license=%s\n" +msgid "3931 Device \"%s\" is BLOCKED. user unmounted.\n" msgstr "" -#: src/dird/dir_plugins.c:226 src/stored/sd_plugins.c:239 -#: src/filed/fd_plugins.c:1175 +#: src/stored/dircmd.c:1409 #, c-format -msgid "Plugin size incorrect. Plugin=%s wanted=%d got=%d\n" +msgid "" +"3932 Device \"%s\" is BLOCKED. user unmounted during wait for media/mount.\n" msgstr "" -#: src/dird/backup.c:96 -msgid "No Storage specification found in Job or Pool.\n" -msgstr "Keine Storage Spezifikation in Job oder Pool gefunden.\n" +#: src/stored/dircmd.c:1413 +#, c-format +msgid "3933 Device \"%s\" is BLOCKED waiting for media.\n" +msgstr "" -#: src/dird/backup.c:256 -#, fuzzy, c-format -msgid "Using BaseJobId(s): %s\n" -msgstr "Migration benutzt JobId=%s Job=%s\n" +#: src/stored/dircmd.c:1417 +#, c-format +msgid "3934 Device \"%s\" is being initialized.\n" +msgstr "" -#: src/dird/backup.c:266 -#, fuzzy -msgid "Cannot find previous jobids.\n" -msgstr "Kann Job resource %s nicht finden\n" +#: src/stored/dircmd.c:1421 +#, fuzzy, c-format +msgid "3935 Device \"%s\" is blocked labeling a Volume.\n" +msgstr "unbekannt" -#: src/dird/backup.c:275 -msgid "Sending Accurate information.\n" -msgstr "" +#: src/stored/dircmd.c:1425 +#, fuzzy, c-format +msgid "3935 Device \"%s\" is blocked for unknown reason.\n" +msgstr "unbekannt" -#: src/dird/backup.c:328 -#, c-format -msgid "Start Backup JobId %s, Job=%s\n" -msgstr "Start Sicherung JobId %s, Job=%s\n" +#: src/stored/dircmd.c:1430 +#, fuzzy, c-format +msgid "3936 Device \"%s\" is busy reading.\n" +msgstr "unbekannt" -#: src/dird/backup.c:521 +#: src/stored/dircmd.c:1433 #, c-format -msgid "Unexpected Client Job message: %s\n" -msgstr "Unerwartete Client Job Nachricht: %s\n" +msgid "3937 Device \"%s\" is busy with writers=%d reserved=%d.\n" +msgstr "" -#: src/dird/backup.c:534 +#: src/stored/dev.c:129 #, c-format -msgid "Network error with FD during %s: ERR=%s\n" -msgstr "Netzwerkfehler mit FD bei %s: ERR=%s\n" - -#: src/dird/backup.c:569 -msgid "No Job status returned from FD.\n" -msgstr "FD hat keinen Jobstatus zurückgegeben.\n" - -#: src/dird/backup.c:657 -msgid "Backup failed -- incomplete" +msgid "Unable to stat device %s: ERR=%s\n" msgstr "" -#: src/dird/backup.c:730 +#: src/stored/dev.c:147 #, fuzzy, c-format -msgid "" -"%s %s %s (%s):\n" -" Build OS: %s %s %s\n" -" JobId: %d\n" -" Job: %s\n" -" Backup Level: %s%s\n" -" Client: \"%s\" %s\n" -" FileSet: \"%s\" %s\n" -" Pool: \"%s\" (From %s)\n" -" Catalog: \"%s\" (From %s)\n" -" Storage: \"%s\" (From %s)\n" -" Scheduled time: %s\n" -" Start time: %s\n" -" End time: %s\n" -" Elapsed time: %s\n" -" Priority: %d\n" -" FD Files Written: %s\n" -" SD Files Written: %s\n" -" FD Bytes Written: %s (%sB)\n" -" SD Bytes Written: %s (%sB)\n" -" Rate: %.1f KB/s\n" -" Software Compression: %s\n" -"%s VSS: %s\n" -" Encryption: %s\n" -" Accurate: %s\n" -" Volume name(s): %s\n" -" Volume Session Id: %d\n" -" Volume Session Time: %d\n" -" Last Volume Bytes: %s (%sB)\n" -" Non-fatal FD errors: %d\n" -" SD Errors: %d\n" -" FD termination status: %s\n" -" SD termination status: %s\n" -" Termination: %s\n" -"\n" -msgstr "" -"%s %s (%s): %s\n" -" JobId: %d\n" -" Job: %s\n" -" Backup Level: %s%s\n" -" Client: \"%s\" %s\n" -" FileSet: \"%s\" %s\n" -" Pool: \"%s\" (From %s)\n" -" Storage: \"%s\" (From %s)\n" -" Geplante Zeit: %s\n" -" Startzeit: %s\n" -" Endzeit: %s\n" -" Verstrichene Zeit: %s\n" -" Priorität: %d\n" -" FD Dateien geschrieben: %s\n" -" SD Dateien geschrieben: %s\n" -" FD Bytes geschrieben: %s (%sB)\n" -" SD Bytes geschrieben: %s (%sB)\n" -" Geschwindigkeit: %.1f KB/s\n" -" Software Kompression: %s\n" -" VSS: %s\n" -" Verschlüsselung: %s\n" -" Volume Name(n): %s\n" -" Volume Session Id: %d\n" -" Volume Session Zeit: %d\n" -" Letztes Volumen Bytes: %s (%sB)\n" -" Nicht-fatale FD Fehler %d\n" -" SD Fehler: %d\n" -" FD Beendigungsstatus: %s\n" -" SD Beendigungsstatus: %s\n" -" Beendigungsstatus: %s\n" -"\n" +msgid "" +"%s is an unknown device type. Must be tape or directory\n" +" or have RequiresMount=yes for DVD. st_mode=%x\n" +msgstr "unbekannt\n" -#: src/dird/backup.c:832 -#, c-format -msgid "Could not get Job Volume Parameters to update Bootstrap file. ERR=%s\n" +#: src/stored/dev.c:157 +msgid "DVD support is now deprecated.\n" msgstr "" -"Konnte Job Volume Parameter nicht holen um die Bootstrap Datei zu " -"aktualisieren. ERR=%s\n" -#: src/dird/backup.c:868 +#: src/stored/dev.c:160 +msgid "Aligned device not supported. Please use \"DeviceType = File\"\n" +msgstr "" + +#: src/stored/dev.c:256 #, c-format +msgid "Unable to stat mount point %s: ERR=%s\n" +msgstr "" + +#: src/stored/dev.c:261 msgid "" -"Could not open WriteBootstrap file:\n" -"%s: ERR=%s\n" +"Mount and unmount commands must defined for a device which requires mount.\n" msgstr "" -"Konnte WriteBootstrap nicht öffnen. Datei:\n" -"%s: ERR=%s\n" -#: src/dird/restore.c:137 src/dird/msgchan.c:476 +#: src/stored/dev.c:272 #, c-format -msgid "Could not open bootstrap file %s: ERR=%s\n" -msgstr "Kann bootstrap Datei nicht öffnen: %s: ERR=%s\n" +msgid "Min block size > max on device %s\n" +msgstr "" + +#: src/stored/dev.c:276 +#, c-format +msgid "Block size %u on device %s is too large, using default %u\n" +msgstr "" + +#: src/stored/dev.c:281 +#, c-format +msgid "Max block size %u not multiple of device %s block size=%d.\n" +msgstr "" + +#: src/stored/dev.c:285 +#, c-format +msgid "Max Vol Size < 8 * Max Block Size for device %s\n" +msgstr "" + +#: src/stored/dev.c:295 src/stored/dev.c:347 src/lib/openssl.c:110 +#: src/lib/openssl.c:169 +#, c-format +msgid "Unable to init mutex: ERR=%s\n" +msgstr "" + +#: src/stored/dev.c:301 src/stored/dev.c:307 +#, c-format +msgid "Unable to init cond variable: ERR=%s\n" +msgstr "" -#: src/dird/restore.c:185 src/dird/restore.c:276 +#: src/stored/dev.c:313 #, fuzzy, c-format -msgid "Could not get storage resource '%s'.\n" -msgstr "Kann Storage resource %s nicht finden\n" +msgid "Unable to init spool mutex: ERR=%s\n" +msgstr "Kann DB lock nicht initialisieren. ERR=%s\n" -#: src/dird/restore.c:314 +#: src/stored/dev.c:319 #, fuzzy, c-format -msgid "Could not acquire read storage lock for \"%s\"" -msgstr "Kann Storage resource %s nicht finden\n" +msgid "Unable to init acquire mutex: ERR=%s\n" +msgstr "Kann DB lock nicht initialisieren. ERR=%s\n" -#: src/dird/restore.c:505 -msgid "" -"Cannot restore without a bootstrap file.\n" -"You probably ran a restore job directly. All restore jobs must\n" -"be run using the restore command.\n" +#: src/stored/dev.c:325 +#, fuzzy, c-format +msgid "Unable to init read acquire mutex: ERR=%s\n" +msgstr "Kann DB lock nicht initialisieren. ERR=%s\n" + +#: src/stored/dev.c:331 +#, fuzzy, c-format +msgid "Unable to init volcat mutex: ERR=%s\n" +msgstr "Kann DB lock nicht initialisieren. ERR=%s\n" + +#: src/stored/dev.c:337 +#, fuzzy, c-format +msgid "Unable to init dcrs mutex: ERR=%s\n" +msgstr "Kann DB lock nicht initialisieren. ERR=%s\n" + +#: src/stored/dev.c:426 +msgid "Illegal mode given to open dev.\n" +msgstr "" + +#: src/stored/dev.c:478 +msgid "Bad device call. Device not open\n" msgstr "" -#: src/dird/restore.c:513 +#: src/stored/dev.c:490 #, c-format -msgid "Start Restore Job %s\n" +msgid "Seek error: ERR=%s\n" msgstr "" -#: src/dird/restore.c:564 -msgid "Restore OK -- warning file count mismatch" +#: src/stored/dev.c:491 src/stored/tape_dev.c:293 src/stored/file_dev.c:73 +#: src/stored/file_dev.c:100 +#, c-format +msgid "lseek error on %s. ERR=%s.\n" msgstr "" -#: src/dird/restore.c:566 -msgid "Restore OK" +#: src/stored/fd_cmds.c:193 +#, fuzzy, c-format +msgid "Command error with FD, hanging up. ERR=%s\n" +msgstr "Netzwerkfehler mit FD bei %s: ERR=%s\n" + +#: src/stored/fd_cmds.c:196 +msgid "Command error with FD, hanging up.\n" msgstr "" -#: src/dird/restore.c:570 -#, fuzzy -msgid "Restore OK -- with warnings" -msgstr "%s OK -- mit Warnungen" +#: src/stored/fd_cmds.c:207 +#, fuzzy, c-format +msgid "FD command not found: %s\n" +msgstr "Job nicht gefunden: %s\n" -#: src/dird/restore.c:574 -msgid "*** Restore Error ***" +#: src/stored/fd_cmds.c:238 +msgid "Attempt to append on non-open session.\n" msgstr "" -#: src/dird/restore.c:584 -msgid "Restore Canceled" +#: src/stored/fd_cmds.c:250 src/stored/fd_cmds.c:293 +msgid "Attempt to close non-open session.\n" msgstr "" -#: src/dird/restore.c:611 -#, fuzzy, c-format -msgid "" -"%s %s %s (%s):\n" -" Build OS: %s %s %s\n" -" JobId: %d\n" -" Job: %s\n" -" Restore Client: %s\n" -" Start time: %s\n" -" End time: %s\n" -" Files Expected: %s\n" -" Files Restored: %s\n" -" Bytes Restored: %s\n" -" Rate: %.1f KB/s\n" -" FD Errors: %d\n" -" FD termination status: %s\n" -" SD termination status: %s\n" -" Termination: %s\n" -"\n" +#: src/stored/fd_cmds.c:268 +msgid "Attempt to open already open session.\n" msgstr "" -"%s %s (%s): %s\n" -" Build OS: %s %s %s\n" -" JobId: %d\n" -" Job: %s\n" -" Client: %s\n" -" Start time: %s\n" -" End time: %s\n" -" Dateien erwartet: %s\n" -" Dateien. wiederhergestellt: %s\n" -" Bytes wiederhergestellt: %s\n" -" Geschwindigkeit: %.1f KB/s\n" -" FD Fehler: %d\n" -" FD Beendigungsstatus: %s\n" -" SD Beendigungsstatus: %s\n" -" Beendigungsstatus: %s\n" -"\n" -#: src/dird/ua_status.c:174 -msgid "Status available for:\n" +#: src/stored/fd_cmds.c:322 +msgid "Attempt to read on non-open session.\n" msgstr "" -#: src/dird/ua_status.c:180 -msgid "Select daemon type for status" +#: src/stored/fd_cmds.c:340 src/stored/fd_cmds.c:349 +msgid "Attempt to open read on non-open session.\n" msgstr "" -#: src/dird/ua_status.c:294 src/stored/status.c:248 +#: src/stored/fd_cmds.c:412 src/dird/getmsg.c:365 #, c-format -msgid "%s Version: %s (%s) %s %s %s\n" +msgid "Bad response to %s command: wanted %s, got %s\n" +msgstr "Schlechte Antwort auf %s Kommando: erwartet %s, erhalten %s\n" + +#: src/stored/fd_cmds.c:416 src/dird/getmsg.c:370 +#, c-format +msgid "Socket error on %s command: ERR=%s\n" +msgstr "Socket Fehler auf %s Kommando: ERR=%s\n" + +#: src/stored/block_util.c:88 +#, c-format +msgid "" +"Dump block %s %p: size=%d BlkNum=%d\n" +" Hdrcksum=%x cksum=%x\n" msgstr "" -#: src/dird/ua_status.c:297 +#: src/stored/block_util.c:103 #, c-format -msgid "Daemon started %s. Jobs: run=%d, running=%d mode=%d,%d\n" +msgid " Rec: VId=%u VT=%u FI=%s Strm=%s len=%d reclen=%d\n" msgstr "" -#: src/dird/ua_status.c:300 src/stored/status.c:258 src/filed/status.c:142 +#: src/stored/block_util.c:165 #, c-format -msgid " Heap: heap=%s smbytes=%s max_bytes=%s bufs=%s max_bufs=%s\n" +msgid "%d block read errors not printed.\n" msgstr "" -#: src/dird/ua_status.c:358 +#: src/stored/block_util.c:281 src/stored/block_util.c:297 +#: src/stored/block_util.c:307 #, c-format msgid "" -"\n" -"Failed to connect to Storage daemon %s.\n" -"====\n" +"Volume data error at %u:%u! Wanted ID: \"%s\", got \"%s\". Buffer " +"discarded.\n" msgstr "" -#: src/dird/ua_status.c:400 +#: src/stored/block_util.c:322 #, c-format msgid "" -"Failed to connect to Client %s.\n" -"====\n" +"Volume data error at %u:%u! Block length %u is insane (too large), probably " +"due to a bad archive.\n" msgstr "" -#: src/dird/ua_status.c:408 -msgid "Connected to file daemon\n" +#: src/stored/block_util.c:349 +#, c-format +msgid "" +"Volume data error at %u:%u!\n" +"Block checksum mismatch in block=%u len=%d: calc=%x blk=%x\n" msgstr "" -#: src/dird/ua_status.c:428 +#: src/stored/block_util.c:435 +#, fuzzy, c-format msgid "" -"\n" -"Scheduled Jobs:\n" +"User defined maximum volume size %s will be exceeded on device %s.\n" +" Marking Volume \"%s\" as Full.\n" +msgstr "\"Max Volume bytes\"erreicht. Markiere Volume \"%s\" als Voll.\n" + +#: src/stored/block_util.c:472 src/stored/block_util.c:478 +#, c-format +msgid "Backspace file at EOT failed. ERR=%s\n" msgstr "" -#: src/dird/ua_status.c:429 -msgid "" -"Level Type Pri Scheduled Name Volume\n" +#: src/stored/block_util.c:485 +#, c-format +msgid "Backspace record at EOT failed. ERR=%s\n" msgstr "" -#: src/dird/ua_status.c:430 -msgid "===================================================================================\n" +#: src/stored/block_util.c:502 +#, c-format +msgid "Re-read last block at EOT failed. ERR=%s" msgstr "" -#: src/dird/ua_status.c:486 +#: src/stored/block_util.c:512 #, c-format -msgid "%-14s\t%-8s\t%3d\t%-18s\t%-18s\t%s\n" +msgid "" +"Re-read of last block: block numbers differ by more than one.\n" +"Probable tape misconfiguration and data loss. Read block=%u Want block=%u.\n" msgstr "" -#: src/dird/ua_status.c:490 +#: src/stored/block_util.c:517 #, c-format -msgid "%-14s %-8s %3d %-18s %-18s %s\n" +msgid "" +"Re-read of last block OK, but block numbers differ. Read block=%u Want block=" +"%u.\n" msgstr "" -#: src/dird/ua_status.c:544 -msgid "Ignoring invalid value for days. Max is 500.\n" +#: src/stored/block_util.c:521 +msgid "Re-read of last block succeeded.\n" msgstr "" -#: src/dird/ua_status.c:587 -msgid "No Scheduled Jobs.\n" +#: src/stored/block_util.c:560 +#, c-format +msgid "" +"Error writing final EOF to tape. This Volume may not be readable.\n" +"%s" msgstr "" -#: src/dird/ua_status.c:604 src/stored/status.c:450 src/filed/status.c:183 +#: src/stored/block_util.c:578 +#, fuzzy +msgid "Error sending Volume info to Director.\n" +msgstr "Keine Volumes zum Wiederherstellen gefunden.\n" + +#: src/stored/bcopy.c:64 +#, fuzzy, c-format msgid "" "\n" -"Running Jobs:\n" +"Version: %s (%s)\n" +"\n" +"Usage: bcopy [-d debug_level] \n" +" -b bootstrap specify a bootstrap file\n" +" -c specify a Storage configuration file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -i specify input Volume names (separated by |)\n" +" -o specify output Volume names (separated by |)\n" +" -p proceed inspite of errors\n" +" -v verbose\n" +" -w specify working directory (default /tmp)\n" +" -? print this message\n" +"\n" msgstr "" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: dird [-f -s] [-c config_file] [-d debug_level] [config_file]\n" +" -c setze Konfigurationsdatei auf Datei\n" +" -dnn setze debug level auf nn\n" +" -f starte im Vordergrund (für debugging Zwecke)\n" +" -g groupid\n" +" -r starte jetzt\n" +" -s no signals\n" +" -t test - Konfiguration Lesen und beenden\n" +" -u userid\n" +" -v ausführliche Benutzer Meldungen\n" +" -? diese Meldung ausgeben.\n" +"\n" -#: src/dird/ua_status.c:612 -#, c-format -msgid "Console connected at %s\n" +#: src/stored/bcopy.c:209 +msgid "Write of last block failed.\n" msgstr "" -#: src/dird/ua_status.c:622 -msgid "" -"No Jobs running.\n" -"====\n" +#: src/stored/bcopy.c:213 +#, c-format +msgid "%u Jobs copied. %u records copied.\n" msgstr "" -#: src/dird/ua_status.c:628 -msgid " JobId Level Name Status\n" +#: src/stored/bcopy.c:246 +msgid "Volume is prelabeled. This volume cannot be copied.\n" msgstr "" -#: src/dird/ua_status.c:629 src/filed/status.c:342 -msgid "======================================================================\n" +#: src/stored/bcopy.c:249 +msgid "Volume label not copied.\n" msgstr "" -#: src/dird/ua_status.c:638 -msgid "is waiting execution" +#: src/stored/bcopy.c:255 +msgid "Copy skipped. Record does not match BSR filter.\n" msgstr "" -#: src/dird/ua_status.c:641 -msgid "is running" +#: src/stored/bcopy.c:286 +msgid "EOM label not copied.\n" msgstr "" -#: src/dird/ua_status.c:644 -msgid "is blocked" +#: src/stored/bcopy.c:289 +msgid "EOT label not copied.\n" msgstr "" -#: src/dird/ua_status.c:647 -msgid "has terminated" +#: src/stored/tape_dev.c:226 +#, c-format +msgid "No tape loaded or drive offline on %s.\n" msgstr "" -#: src/dird/ua_status.c:650 -#, fuzzy -msgid "has terminated with warnings" -msgstr "%s OK -- mit Warnungen" - -#: src/dird/ua_status.c:653 -msgid "has erred" +#: src/stored/tape_dev.c:236 +#, c-format +msgid "Rewind error on %s. ERR=%s.\n" msgstr "" -#: src/dird/ua_status.c:656 -msgid "has errors" +#: src/stored/tape_dev.c:261 +#, c-format +msgid "Bad call to eod. Device %s not open\n" msgstr "" -#: src/dird/ua_status.c:659 -msgid "has a fatal error" +#: src/stored/tape_dev.c:333 +#, c-format +msgid "ioctl MTEOM error on %s. ERR=%s.\n" msgstr "" -#: src/dird/ua_status.c:662 -msgid "has verify differences" +#: src/stored/tape_dev.c:344 src/stored/os.c:184 +#, c-format +msgid "ioctl MTIOCGET error on %s. ERR=%s.\n" msgstr "" -#: src/dird/ua_status.c:665 -msgid "has been canceled" +#: src/stored/tape_dev.c:428 +msgid "Bad call to load_dev. Device not open\n" msgstr "" -#: src/dird/ua_status.c:670 -msgid "is waiting on Client" +#: src/stored/tape_dev.c:439 src/stored/tape_dev.c:452 +#, c-format +msgid "ioctl MTLOAD error on %s. ERR=%s.\n" msgstr "" -#: src/dird/ua_status.c:672 +#: src/stored/tape_dev.c:483 #, c-format -msgid "is waiting on Client %s" +msgid "ioctl MTOFFL error on %s. ERR=%s.\n" msgstr "" -#: src/dird/ua_status.c:680 src/dird/ua_status.c:682 -#, fuzzy, c-format -msgid "is waiting on Storage \"%s\"" -msgstr "Storage daemon" - -#: src/dird/ua_status.c:684 -msgid "is waiting on Storage" +#: src/stored/tape_dev.c:524 +msgid "Bad call to fsf. Device not open\n" msgstr "" -#: src/dird/ua_status.c:690 -msgid "is waiting on max Storage jobs" +#: src/stored/tape_dev.c:535 src/stored/tape_dev.c:662 +#, c-format +msgid "Device %s at End of Tape.\n" msgstr "" -#: src/dird/ua_status.c:693 -msgid "is waiting on max Client jobs" +#: src/stored/tape_dev.c:566 src/stored/tape_dev.c:642 +#, c-format +msgid "ioctl MTFSF error on %s. ERR=%s.\n" msgstr "" -#: src/dird/ua_status.c:696 -msgid "is waiting on max Job jobs" +#: src/stored/tape_dev.c:691 +msgid "Bad call to bsf. Device not open\n" msgstr "" -#: src/dird/ua_status.c:699 -msgid "is waiting on max total jobs" +#: src/stored/tape_dev.c:697 +#, c-format +msgid "Device %s cannot BSF because it is not a tape.\n" msgstr "" -#: src/dird/ua_status.c:702 -msgid "is waiting for its start time" +#: src/stored/tape_dev.c:714 +#, c-format +msgid "ioctl MTBSF error on %s. ERR=%s.\n" msgstr "" -#: src/dird/ua_status.c:705 -msgid "is waiting for higher priority jobs to finish" +#: src/stored/tape_dev.c:733 +msgid "Bad call to fsr. Device not open\n" msgstr "" -#: src/dird/ua_status.c:708 src/dird/ua_status.c:759 src/lib/util.c:241 -msgid "SD committing Data" +#: src/stored/tape_dev.c:743 +#, c-format +msgid "ioctl MTFSR not permitted on %s.\n" msgstr "" -#: src/dird/ua_status.c:711 src/dird/ua_status.c:762 src/lib/util.c:244 -msgid "SD despooling Data" +#: src/stored/tape_dev.c:771 +#, c-format +msgid "ioctl MTFSR %d error on %s. ERR=%s.\n" msgstr "" -#: src/dird/ua_status.c:714 src/dird/ua_status.c:765 src/lib/util.c:247 -msgid "SD despooling Attributes" +#: src/stored/tape_dev.c:789 +msgid "Bad call to bsr_dev. Device not open\n" msgstr "" -#: src/dird/ua_status.c:717 src/dird/ua_status.c:768 src/lib/util.c:250 -msgid "Dir inserting Attributes" +#: src/stored/tape_dev.c:799 +#, c-format +msgid "ioctl MTBSR not permitted on %s.\n" msgstr "" -#: src/dird/ua_status.c:722 -#, fuzzy, c-format -msgid "is in unknown state %c" -msgstr "unbekannt" - -#: src/dird/ua_status.c:736 -msgid "is waiting for a mount request" +#: src/stored/tape_dev.c:813 +#, c-format +msgid "ioctl MTBSR error on %s. ERR=%s.\n" msgstr "" -#: src/dird/ua_status.c:743 -msgid "is waiting for an appendable Volume" +#: src/stored/tape_dev.c:850 src/stored/file_dev.c:90 +msgid "Bad call to reposition. Device not open\n" msgstr "" -#: src/dird/ua_status.c:751 -#, fuzzy -msgid "is waiting for Client to connect to Storage daemon" -msgstr "Verbindung zu Storage daemon fehlgeschlagen.\n" - -#: src/dird/ua_status.c:753 -#, c-format -msgid "is waiting for Client %s to connect to Storage %s" +#: src/stored/tape_dev.c:912 +msgid "Bad call to weof_dev. Device not open\n" msgstr "" -#: src/dird/ua_status.c:784 -#, c-format -msgid "%6d\t%-6s\t%-20s\t%s\t%s\n" +#: src/stored/tape_dev.c:922 +msgid "Attempt to WEOF on non-appendable Volume\n" msgstr "" -#: src/dird/ua_status.c:788 +#: src/stored/tape_dev.c:940 #, c-format -msgid "%6d %-6s %-20s %s\n" +msgid "ioctl MTWEOF error on %s. ERR=%s.\n" msgstr "" -#: src/dird/ua_status.c:792 +#: src/stored/tape_dev.c:986 src/stored/file_dev.c:318 #, c-format -msgid " %-30s\n" +msgid "Device %s cannot be %smounted. ERR=%s\n" msgstr "" -#: src/dird/ua_status.c:812 -msgid "No Terminated Jobs.\n" +#: src/stored/butil.c:46 +msgid "Nohdr," msgstr "" -#: src/dird/ua_status.c:818 src/stored/status.c:572 src/filed/status.c:330 -msgid "" -"\n" -"Terminated Jobs:\n" +#: src/stored/butil.c:49 +msgid "partial," msgstr "" -#: src/dird/ua_status.c:819 src/stored/status.c:579 src/filed/status.c:340 -msgid " JobId Level Files Bytes Status Finished Name \n" +#: src/stored/butil.c:52 +msgid "empty," msgstr "" -#: src/dird/ua_status.c:820 -msgid "====================================================================\n" +#: src/stored/butil.c:55 +msgid "Nomatch," msgstr "" -#: src/dird/ua_status.c:852 src/stored/status.c:601 src/lib/util.c:180 -#: src/filed/status.c:363 -msgid "Created" +#: src/stored/butil.c:58 +msgid "cont," msgstr "" -#: src/dird/ua_status.c:856 src/stored/status.c:605 src/lib/util.c:196 -#: src/lib/util.c:331 src/lib/util.c:478 src/filed/status.c:367 -msgid "Error" +#: src/stored/butil.c:148 +msgid "Volume name or names is too long. Please use a .bsr file.\n" msgstr "" -#: src/dird/ua_status.c:859 src/stored/status.c:608 src/filed/status.c:370 -msgid "Diffs" +#: src/stored/butil.c:168 +#, c-format +msgid "Cannot find device \"%s\" in config file %s.\n" msgstr "" -#: src/dird/ua_status.c:865 src/stored/status.c:614 src/stored/btape.c:1523 -#: src/lib/util.c:189 src/lib/util.c:324 src/filed/status.c:376 -#: src/wx-console/wxbconfigpanel.cpp:209 -msgid "OK" +#: src/stored/butil.c:175 +#, c-format +msgid "Cannot init device %s\n" msgstr "" -#: src/dird/ua_status.c:868 src/stored/status.c:617 src/lib/util.c:202 -#: src/lib/util.c:327 -#, fuzzy -msgid "OK -- with warnings" -msgstr "%s OK -- mit Warnungen" - -#: src/dird/ua_status.c:871 src/stored/status.c:620 src/filed/status.c:379 -msgid "Other" +#: src/stored/butil.c:195 +#, c-format +msgid "Cannot open %s\n" msgstr "" -#: src/dird/ua_status.c:875 src/stored/status.c:632 src/filed/status.c:391 +#: src/stored/butil.c:282 #, c-format -msgid "%6d\t%-6s\t%8s\t%10s\t%-7s\t%-8s\t%s\n" +msgid "Could not find device \"%s\" in config file %s.\n" msgstr "" -#: src/dird/ua_status.c:883 src/stored/status.c:640 src/filed/status.c:399 +#: src/stored/butil.c:287 #, c-format -msgid "%6d %-6s %8s %10s %-7s %-8s %s\n" +msgid "Using device: \"%s\" for writing.\n" msgstr "" -#: src/dird/ua_status.c:892 -msgid "\n" +#: src/stored/butil.c:289 +#, c-format +msgid "Using device: \"%s\" for reading.\n" msgstr "" -#: src/dird/ua_input.c:103 -msgid "Enter slot" +#: src/stored/butil.c:305 +msgid "Unexpected End of Data\n" msgstr "" -#: src/dird/ua_input.c:107 src/dird/ua_input.c:113 -#, c-format -msgid "Expected a positive integer, got: %s\n" +#: src/stored/butil.c:307 +msgid "Unexpected End of Tape\n" msgstr "" -#: src/dird/ua_input.c:170 -msgid "Invalid response. You must answer yes or no.\n" +#: src/stored/butil.c:309 +msgid "Unexpected End of File\n" msgstr "" -#: src/dird/ua_input.c:193 -msgid "Invalid Enabled value, it must be yes, no, archived, 0, 1, or 2\n" +#: src/stored/butil.c:311 +msgid "Tape Door is Open\n" msgstr "" -#: src/dird/ua_input.c:220 -#, fuzzy, c-format -msgid "Illegal character \"%c\" in a comment.\n" -msgstr "Illegales Zeichen in \"Volume name\" \"%s\"\n" - -#: src/dird/ua_input.c:227 -#, fuzzy -msgid "Comment too long.\n" -msgstr "Job nicht gefunden: %s\n" +#: src/stored/butil.c:313 +msgid "Unexpected Tape is Off-line\n" +msgstr "" -#: src/dird/ua_input.c:233 -msgid "Comment must be at least one character long.\n" +#: src/stored/ansi_label.c:81 +#, c-format +msgid "Read error on device %s in ANSI label. ERR=%s\n" msgstr "" -#: src/dird/pythondir.c:121 src/stored/pythonsd.c:101 -#: src/stored/pythonsd.c:166 src/filed/pythonfd.c:94 src/filed/pythonfd.c:148 -#: src/filed/pythonfd.c:212 -msgid "Job pointer not found." +#: src/stored/ansi_label.c:91 +msgid "Insane! End of tape while reading ANSI label.\n" msgstr "" -#: src/dird/pythondir.c:153 -msgid "Pool record not found." +#: src/stored/ansi_label.c:117 +msgid "No VOL1 label while reading ANSI/IBM label.\n" msgstr "" -#: src/dird/pythondir.c:209 src/stored/pythonsd.c:143 src/filed/pythonfd.c:125 +#: src/stored/ansi_label.c:140 #, c-format -msgid "Attribute %s not found." +msgid "Wanted ANSI Volume \"%s\" got \"%s\"\n" +msgstr "" + +#: src/stored/ansi_label.c:151 +msgid "No HDR1 label while reading ANSI label.\n" msgstr "" -#: src/dird/pythondir.c:252 src/dird/pythondir.c:258 src/stored/pythonsd.c:183 -#: src/filed/pythonfd.c:167 -msgid "Read-only attribute" +#: src/stored/ansi_label.c:157 +#, c-format +msgid "ANSI/IBM Volume \"%s\" does not belong to Bacula.\n" msgstr "" -#: src/dird/pythondir.c:284 -msgid "Priority must be 1-100" +#: src/stored/ansi_label.c:169 +msgid "No HDR2 label while reading ANSI/IBM label.\n" msgstr "" -#: src/dird/pythondir.c:289 -msgid "Job Level can be set only during JobInit" +#: src/stored/ansi_label.c:184 +msgid "Unknown or bad ANSI/IBM label record.\n" msgstr "" -#: src/dird/pythondir.c:303 -msgid "Bad JobLevel string" +#: src/stored/ansi_label.c:192 +msgid "Too many records in while reading ANSI/IBM label.\n" msgstr "" -#: src/dird/job.c:62 +#: src/stored/ansi_label.c:292 #, c-format -msgid "Could not init job queue: ERR=%s\n" -msgstr "Konnte job queue nicht initialiseren: ERR=%s\n" +msgid "ANSI Volume label name \"%s\" longer than 6 chars.\n" +msgstr "" -#: src/dird/job.c:94 +#: src/stored/ansi_label.c:318 #, c-format -msgid "Could not add job queue: ERR=%s\n" -msgstr "Konnte job queue nicht hinzufügen: ERR=%s\n" - -#: src/dird/job.c:183 src/dird/job.c:433 src/dird/job.c:435 src/dird/job.c:485 -#: src/dird/job.c:487 src/dird/job.c:1129 src/dird/job.c:1170 -#: src/dird/job.c:1179 -msgid "Job resource" -msgstr "Job Ressource" +msgid "Could not write ANSI VOL1 label. Wanted size=%d got=%d ERR=%s\n" +msgstr "" -#: src/dird/job.c:230 src/dird/job.c:349 +#: src/stored/ansi_label.c:356 src/stored/ansi_label.c:385 #, c-format -msgid "Unimplemented job type: %d\n" -msgstr "nicht implementierter job Typ: %d\n" - -#: src/dird/job.c:272 -msgid "Job canceled because max start delay time exceeded.\n" -msgstr "Job abgebrochen, da \"max start delay time\" überschritten wurde.\n" +msgid "Could not write ANSI HDR1 label. ERR=%s\n" +msgstr "" -#: src/dird/job.c:277 -#, fuzzy -msgid "Job canceled because max run sched time exceeded.\n" -msgstr "Job abgebrochen, da \"max start delay time\" überschritten wurde.\n" +#: src/stored/ansi_label.c:361 src/stored/ansi_label.c:392 +msgid "Could not write ANSI HDR1 label.\n" +msgstr "" -#: src/dird/job.c:403 +#: src/stored/ansi_label.c:397 #, c-format -msgid "JobId %s, Job %s marked to be canceled.\n" -msgstr "JobId %s, Job %s zum Abbruch markiert.\n" - -#: src/dird/job.c:413 -msgid "Failed to connect to File daemon.\n" -msgstr "Verbindung zu File daemon fehlgeschlagen.\n" - -#: src/dird/job.c:548 -msgid "Max wait time exceeded. Job canceled.\n" -msgstr "\"Max wait time\" überschritten. Job abgebrochen.\n" +msgid "Error writing EOF to tape. ERR=%s" +msgstr "" -#: src/dird/job.c:553 -msgid "Max run time exceeded. Job canceled.\n" -msgstr "\"Max run time\" überschritten, Job abgebrochen.\n" +#: src/stored/ansi_label.c:402 +msgid "write_ansi_ibm_label called for non-ANSI/IBM type\n" +msgstr "" -#: src/dird/job.c:558 -#, fuzzy -msgid "Max run sched time exceeded. Job canceled.\n" -msgstr "\"Max run time\" überschritten, Job abgebrochen.\n" +#: src/stored/vol_mgr.c:80 +#, fuzzy, c-format +msgid "Unable to initialize volume list lock. ERR=%s\n" +msgstr "Kann DB lock nicht initialisieren. ERR=%s\n" -#: src/dird/job.c:680 +#: src/stored/vol_mgr.c:370 #, fuzzy, c-format -msgid "Pool \"%s\" not in database. ERR=%s" -msgstr "Pool %s nicht in der Datenbank. %s" +msgid "Could not reserve volume \"%s\", because job canceled.\n" +msgstr "Konnte FileSet \"%s\" Eintrag nicht erzeugen. ERR=%s\n" -#: src/dird/job.c:684 +#: src/stored/vol_mgr.c:381 #, fuzzy, c-format -msgid "Created database record for Pool \"%s\".\n" -msgstr "Erzeuge db Medientyp Eintrag %s fehlgeschlagen: ERR=%s\n" +msgid "Could not reserve volume \"%s\" for append, because it will be read.\n" +msgstr "Konnte FileSet \"%s\" Eintrag nicht erzeugen. ERR=%s\n" -#: src/dird/job.c:766 src/dird/job.c:809 +#: src/stored/vol_mgr.c:414 #, c-format -msgid "JobId %d already running. Duplicate job not allowed.\n" +msgid "Cannot free Volume \"%s\", because it is reserved by someone else.\n" msgstr "" -#: src/dird/job.c:797 +#: src/stored/vol_mgr.c:512 #, c-format -msgid "Cancelling duplicate JobId=%d.\n" -msgstr "" - -#: src/dird/job.c:828 src/dird/job.c:1116 -#, fuzzy -msgid "Run pool override" -msgstr "von \"Run pool\" überschrieben" - -#: src/dird/job.c:839 -#, fuzzy -msgid "Run FullPool override" -msgstr "von \"Run FullPool\" überschrieben" - -#: src/dird/job.c:841 -msgid "Job FullPool override" +msgid "Volume %s is busy swapping from %s to %s\n" msgstr "" -#: src/dird/job.c:850 -msgid "Run IncPool override" -msgstr "" +#: src/stored/vol_mgr.c:515 +#, fuzzy, c-format +msgid "Volume %s is busy swapping.\n" +msgstr "unbekannt" -#: src/dird/job.c:852 -msgid "Job IncPool override" -msgstr "" +#: src/stored/vol_mgr.c:519 +#, fuzzy, c-format +msgid "%s device %s is busy.\n" +msgstr "unbekannt" -#: src/dird/job.c:861 -msgid "Run DiffPool override" +#: src/stored/file_dev.c:148 +#, c-format +msgid "Could not open file device %s. No Volume name given.\n" msgstr "" -#: src/dird/job.c:863 -msgid "Job DiffPool override" -msgstr "" +#: src/stored/file_dev.c:171 +#, fuzzy, c-format +msgid "Could not open(%s,%s,0640): ERR=%s\n" +msgstr "Kann bootstrap Datei nicht öffnen: %s: ERR=%s\n" -#: src/dird/job.c:893 src/stored/bscan.c:1056 +#: src/stored/file_dev.c:204 #, c-format -msgid "Could not create Client record. ERR=%s\n" -msgstr "Konnte Client Eintrag nicht anlegen. ERR=%s\n" +msgid "Unable to truncate device %s. ERR=%s\n" +msgstr "" -#: src/dird/job.c:929 -msgid "FileSet MD5 digest not found.\n" -msgstr "FileSet MD5 Prüfsumme nicht gefunden.\n" +#: src/stored/file_dev.c:221 +#, fuzzy, c-format +msgid "Unable to stat device %s. ERR=%s\n" +msgstr "Konnte bootstrap Datei %s nicht erzeugen. ERR=%s\n" -#: src/dird/job.c:934 +#: src/stored/file_dev.c:235 #, c-format -msgid "Could not create FileSet \"%s\" record. ERR=%s\n" -msgstr "Konnte FileSet \"%s\" Eintrag nicht erzeugen. ERR=%s\n" +msgid "Device %s doesn't support ftruncate(). Recreating file %s.\n" +msgstr "" -#: src/dird/job.c:976 -#, c-format -msgid "Error updating job record. %s" -msgstr "Fehler beim Aktualisieren des job Eintrags. %s" +#: src/stored/file_dev.c:247 +#, fuzzy, c-format +msgid "Could not reopen: %s, ERR=%s\n" +msgstr "Kann bootstrap Datei nicht öffnen: %s: ERR=%s\n" -#: src/dird/job.c:1121 -#, fuzzy -msgid "Run storage override" -msgstr "Run storage override" +#: src/stored/lock.c:231 src/stored/lock.c:259 +#, fuzzy, c-format +msgid "pthread_cond_wait failure. ERR=%s\n" +msgstr "pthread_cond_wait: ERR=%s\n" -#: src/dird/job.c:1189 +#: src/stored/lock.c:475 #, fuzzy -msgid "Client resource" -msgstr "Pool Ressource" - -#: src/dird/job.c:1406 -#, fuzzy, c-format -msgid "Could not start clone job: \"%s\".\n" -msgstr "Konnte clone job nicht starten.\n" +msgid "unknown blocked code" +msgstr "unbekannt" -#: src/dird/job.c:1409 -#, c-format -msgid "Clone JobId %d started.\n" -msgstr "Clone JobId %d gestartet.\n" +#: src/stored/read.c:55 +msgid "No Volume names found for restore.\n" +msgstr "" -#: src/dird/authenticate.c:83 src/dird/authenticate.c:84 -#: src/tray-monitor/authenticate.c:132 -#: src/qt-console/tray-monitor/authenticate.cpp:131 +#: src/stored/read.c:132 src/stored/read.c:250 #, c-format -msgid "Error sending Hello to Storage daemon. ERR=%s\n" -msgstr "Fehler beim senden von \"Hello\" an Storage daemon. ERR=%s\n" - -#: src/dird/authenticate.c:113 -msgid "Director and Storage daemon passwords or names not the same.\n" -msgstr "Director und Storage daemon Passworte or Namen nicht gleich.\n" +msgid ">filed: Error Hdr=%s\n" +msgstr "" -#: src/dird/authenticate.c:115 -#, fuzzy, c-format -msgid "" -"Director unable to authenticate with Storage daemon at \"%s:%d\". Possible " -"causes:\n" -"Passwords or names not the same or\n" -"Maximum Concurrent Jobs exceeded on the SD or\n" -"SD networking messed up (restart daemon).\n" -"Please see " +#: src/stored/read.c:133 src/stored/read.c:166 src/stored/read.c:223 +#: src/stored/read.c:251 src/stored/read.c:266 +#, c-format +msgid "Error sending to File daemon. ERR=%s\n" msgstr "" -"Director kann sich nicht an Storage daemon an \"%s:%d\" authentisieren. " -"Mögliche Ursachen:\n" -"Passworte oder Namen nicht gleich oder\n" -"Maximum Concurrent Jobs überschritten am SD oder\n" -"SD Netzwerk durcheinander (daemon neustarten).\n" -"Für Hilfe bitte unter http://www.bacula.org/rel-manual/faq." -"html#AuthorizationErrors nachsehen.\n" -#: src/dird/authenticate.c:127 src/wx-console/authenticate.c:127 -#: src/console/authenticate.c:122 -msgid "" -"Authorization problem: Remote server did not advertise required TLS " -"support.\n" +#: src/stored/read.c:165 src/stored/read.c:265 +#, c-format +msgid "Error sending to FD. ERR=%s\n" msgstr "" -"Authorisationsproblem: Entfernter Server hat benötigte TLS Unterstützung " -"nicht angeboten.\n" -#: src/dird/authenticate.c:134 src/stored/authenticate.c:146 -#: src/stored/authenticate.c:257 src/wx-console/authenticate.c:133 -#: src/console/authenticate.c:129 src/filed/authenticate.c:160 -#: src/filed/authenticate.c:279 -msgid "Authorization problem: Remote server requires TLS.\n" -msgstr "Authorisationsproblem: Enfernter Server erfordert TLS.\n" +#: src/stored/autochanger.c:62 +#, c-format +msgid "No Changer Name given for device %s. Cannot continue.\n" +msgstr "" -#: src/dird/authenticate.c:143 -#, fuzzy, c-format -msgid "TLS negotiation failed with SD at \"%s:%d\"\n" -msgstr "TLS Aushandlung fehlgeschlagen mit SD an \"%s:%d\"\n" +#: src/stored/autochanger.c:68 +#, c-format +msgid "No Changer Command given for device %s. Cannot continue.\n" +msgstr "" -#: src/dird/authenticate.c:155 +#: src/stored/autochanger.c:137 #, c-format -msgid "bdird set configuration file to file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -t test - read configuration and exit\n" -" -? print this message.\n" -"\n" +#: src/stored/parse_bsr.c:827 src/dird/ua_run.c:173 src/dird/backup.c:916 +#: src/dird/backup.c:917 src/dird/backup.c:918 src/dird/ua_input.c:141 +#: src/dird/ua_update.c:245 src/dird/ua_update.c:265 src/dird/ua_update.c:687 +#: src/tools/dbcheck.c:1340 +msgid "yes" +msgstr "" + +#: src/stored/parse_bsr.c:827 src/dird/ua_run.c:176 src/dird/backup.c:916 +#: src/dird/backup.c:917 src/dird/backup.c:918 src/dird/ua_input.c:145 +#: src/dird/ua_update.c:245 src/dird/ua_update.c:265 src/dird/ua_update.c:687 +msgid "no" msgstr "" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: dird [-f -s] [-c config_file] [-d debug_level] [config_file]\n" -" -c setze Konfigurationsdatei auf Datei\n" -" -dnn setze debug level auf nn\n" -" -f starte im Vordergrund (für debugging Zwecke)\n" -" -g groupid\n" -" -r starte jetzt\n" -" -s no signals\n" -" -t test - Konfiguration Lesen und beenden\n" -" -u userid\n" -" -v ausführliche Benutzer Meldungen\n" -" -? diese Meldung ausgeben.\n" -"\n" -#: src/tray-monitor/tray-monitor.c:270 -#: src/qt-console/tray-monitor/tray-monitor.cpp:216 +#: src/stored/parse_bsr.c:828 #, c-format -msgid "" -"Error: %d Monitor resources defined in %s. You must define one and only one " -"Monitor resource.\n" +msgid "positioning : %d\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:301 -#: src/qt-console/tray-monitor/tray-monitor.cpp:248 -#, fuzzy, c-format -msgid "" -"No Client, Storage or Director resource defined in %s\n" -"Without that I don't how to get status from the File, Storage or Director " -"Daemon :-(\n" +#: src/stored/parse_bsr.c:829 +#, c-format +msgid "fast_reject : %d\n" msgstr "" -"Keine Director resource definiert in %s\n" -"Ohne dies weiss ich nicht wer ich bin :-(\n" -#: src/tray-monitor/tray-monitor.c:323 -#: src/qt-console/tray-monitor/tray-monitor.cpp:263 +#: src/stored/parse_bsr.c:1053 src/stored/parse_bsr.c:1057 #, c-format msgid "" -"Invalid refresh interval defined in %s\n" -"This value must be greater or equal to 1 second and less or equal to 10 " -"minutes (read value: %d).\n" +"Bootstrap file error: %s\n" +" : Line %d, col %d of file %s\n" +"%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:330 -msgid "Bacula daemon status monitor" +#: src/stored/reserve.c:64 +#, c-format +msgid "Unable to initialize reservation lock. ERR=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:339 -msgid "Open status window..." +#: src/stored/reserve.c:144 +#, c-format +msgid "Hey! num_writers=%d!!!!\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:345 -msgid "Exit" +#: src/stored/reserve.c:259 +msgid "3939 Could not get dcr\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:357 -msgid "Bacula tray monitor" +#: src/stored/reserve.c:368 +#, fuzzy, c-format +msgid "Device reservation failed for JobId=%d: %s\n" +msgstr "Mehr als ein Dateiname! %s für Datei: %s\n" + +#: src/stored/reserve.c:377 +#, c-format +msgid "Failed command: %s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:382 -msgid " (DIR)" +#: src/stored/reserve.c:662 +#, c-format +msgid "3926 Could not get dcr for device: %s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:386 -msgid " (FD)" +#: src/stored/reserve.c:802 +#, fuzzy, c-format +msgid "3603 JobId=%u %s device %s is busy reading.\n" +msgstr "unbekannt" + +#: src/stored/reserve.c:811 +#, c-format +msgid "3604 JobId=%u %s device %s is BLOCKED due to user unmount.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:390 -msgid " (SD)" +#: src/stored/reserve.c:859 +#, c-format +msgid "3601 JobId=%u %s device %s is BLOCKED due to user unmount.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:403 -msgid "Unknown status." +#: src/stored/reserve.c:867 +#, c-format +msgid "" +"3602 JobId=%u %s device %s is busy (already reading/writing). read=%d, " +"writers=%d reserved=%d\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:477 -msgid "Refresh interval in seconds: " +#: src/stored/reserve.c:906 +#, c-format +msgid "3609 JobId=%u Max concurrent jobs=%d exceeded on %s device %s.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:485 -msgid "Refresh now" +#: src/stored/reserve.c:920 +#, c-format +msgid "3611 JobId=%u Volume max jobs=%d exceeded on %s device %s.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:489 -msgid "About" +#: src/stored/reserve.c:945 +#, c-format +msgid "" +"3608 JobId=%u wants Pool=\"%s\" but have Pool=\"%s\" nreserve=%d on %s " +"device %s.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:493 -msgid "Close" +#: src/stored/reserve.c:997 +#, c-format +msgid "3605 JobId=%u wants free drive but %s device %s is busy.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:513 +#: src/stored/reserve.c:1006 #, c-format -msgid "Disconnecting from Director %s:%d\n" +msgid "3606 JobId=%u prefers mounted drives, but %s device %s has no Volume.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:516 +#: src/stored/reserve.c:1028 #, c-format -msgid "Disconnecting from Client %s:%d\n" +msgid "3607 JobId=%u wants Vol=\"%s\" drive has Vol=\"%s\" on %s device %s.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:519 +#: src/stored/reserve.c:1083 #, c-format -msgid "Disconnecting from Storage %s:%d\n" +msgid "Logic error!!!! JobId=%u Should not get here.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:560 src/tray-monitor/tray-monitor.c:571 -msgid "Bacula Tray Monitor" +#: src/stored/reserve.c:1084 +#, c-format +msgid "3910 JobId=%u Logic error!!!! %s device %s Should not get here.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:562 src/tray-monitor/tray-monitor.c:573 -msgid "Written by Nicolas Boichat\n" +#: src/stored/reserve.c:1087 +msgid "Logic error!!!! Should not get here.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:563 src/tray-monitor/tray-monitor.c:574 -msgid "Version" +#: src/stored/reserve.c:1090 +#, fuzzy, c-format +msgid "3911 JobId=%u failed reserve %s device %s.\n" +msgstr "JobId %s, Job %s zum Abbruch markiert.\n" + +#: src/stored/status.c:85 +msgid "Used Volume status:\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:656 -#: src/qt-console/tray-monitor/tray-monitor.cpp:331 -#, c-format -msgid "Error, currentitem is not a Client or a Storage..\n" +#: src/stored/status.c:103 +msgid "" +"\n" +"SD Resources:\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:730 -#, c-format +#: src/stored/status.c:139 msgid "" -"Current job: %s\n" -"Last job: %s" +"\n" +"Device status:\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:742 +#: src/stored/status.c:143 #, c-format -msgid " (%d errors)" +msgid "Autochanger \"%s\" with devices:\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:745 +#: src/stored/status.c:163 #, c-format -msgid " (%d error)" +msgid "" +"\n" +"Device %s is %s:\n" +" Volume: %s\n" +" Pool: %s\n" +" Media type: %s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:783 -msgid "No current job." +#: src/stored/status.c:168 +msgid "waiting for" msgstr "" -#: src/tray-monitor/tray-monitor.c:786 -msgid "No last job." +#: src/stored/status.c:168 +msgid "mounted with" msgstr "" -#: src/tray-monitor/tray-monitor.c:794 -msgid "Job status: Created" -msgstr "" +#: src/stored/status.c:170 +#, fuzzy +msgid "*unknown*" +msgstr "unbekannt" -#: src/tray-monitor/tray-monitor.c:799 -msgid "Job status: Running" +#: src/stored/status.c:174 +#, c-format +msgid "" +"\n" +"Device %s open but no Bacula volume is currently mounted.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:803 -msgid "Job status: Blocked" +#: src/stored/status.c:185 +#, c-format +msgid " Total Bytes=%s Blocks=%s Bytes/block=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:808 -msgid "Job status: Terminated" +#: src/stored/status.c:200 +#, c-format +msgid " Total Bytes Read=%s Blocks Read=%s Bytes/block=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:813 -msgid "Job status: Terminated in error" +#: src/stored/status.c:206 +#, c-format +msgid " Positioned at File=%s Block=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:819 -msgid "Job status: Error" +#: src/stored/status.c:213 +#, fuzzy, c-format +msgid "" +"\n" +"Device %s is not open.\n" +msgstr "unbekannt" + +#: src/stored/status.c:217 +#, fuzzy, c-format +msgid "" +"\n" +"Device \"%s\" is not open or does not exist.\n" +msgstr "unbekannt" + +#: src/stored/status.c:234 src/dird/ua_status.c:294 +#, c-format +msgid "%s Version: %s (%s) %s %s %s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:823 -msgid "Job status: Fatal error" +#: src/stored/status.c:241 +#, c-format +msgid "Daemon started %s. Jobs: run=%d, running=%d.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:828 -msgid "Job status: Verify differences" +#: src/stored/status.c:244 src/dird/ua_status.c:300 src/filed/status.c:136 +#, c-format +msgid " Heap: heap=%s smbytes=%s max_bytes=%s bufs=%s max_bufs=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:833 -msgid "Job status: Canceled" +#: src/stored/status.c:279 +msgid "" +"No DEVICE structure.\n" +"\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:838 -msgid "Job status: Waiting on File daemon" +#: src/stored/status.c:285 +msgid " Device is BLOCKED. User unmounted.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:843 -msgid "Job status: Waiting on the Storage daemon" +#: src/stored/status.c:289 +msgid " Device is BLOCKED. User unmounted during wait for media/mount.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:848 -msgid "Job status: Waiting for new media" +#: src/stored/status.c:300 +#, c-format +msgid "" +" Device is BLOCKED waiting for mount of volume \"%s\",\n" +" Pool: %s\n" +" Media type: %s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:853 -msgid "Job status: Waiting for Mount" +#: src/stored/status.c:309 +#, c-format +msgid "" +" Device is BLOCKED waiting to create a volume for:\n" +" Pool: %s\n" +" Media type: %s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:858 -msgid "Job status: Waiting for storage resource" +#: src/stored/status.c:321 +msgid " Device is BLOCKED waiting for media.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:863 -msgid "Job status: Waiting for job resource" +#: src/stored/status.c:327 +msgid " Device is being initialized.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:868 -msgid "Job status: Waiting for Client resource" +#: src/stored/status.c:331 +msgid " Device is blocked labeling a Volume.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:873 -msgid "Job status: Waiting for maximum jobs" +#: src/stored/status.c:340 +#, c-format +msgid " Slot %d %s loaded in drive %d.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:878 -msgid "Job status: Waiting for start time" +#: src/stored/status.c:344 +#, c-format +msgid " Drive %d is not loaded.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:883 -msgid "Job status: Waiting for higher priority jobs to finish" +#: src/stored/status.c:379 +msgid "Device state:\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:888 +#: src/stored/status.c:395 #, c-format -msgid "Unknown job status %c." +msgid " num_writers=%d reserves=%d block=%d\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:889 +#: src/stored/status.c:399 +#, fuzzy +msgid "Attached JobsIds: " +msgstr "ist nicht aktiviert" + +#: src/stored/status.c:419 #, c-format -msgid "Job status: Unknown(%c)" +msgid " Archive name: %s Device name: %s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:896 +#: src/stored/status.c:422 #, c-format -msgid "Bad scan : '%s' %d\n" +msgid " File=%u block=%u\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:936 src/console/console.c:1143 +#: src/stored/status.c:424 #, c-format -msgid "Connecting to Director %s:%d\n" +msgid " Min block=%u Max block=%u\n" +msgstr "" + +#: src/stored/status.c:440 src/dird/ua_status.c:818 src/filed/status.c:188 +msgid "" +"\n" +"Running Jobs:\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:937 -#: src/qt-console/tray-monitor/tray-monitor.cpp:359 -#: src/qt-console/bcomm/dircomm.cpp:103 +#: src/stored/status.c:445 #, c-format -msgid "Connecting to Director %s:%d" +msgid "%s Job %s waiting for Client connection.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:938 src/wx-console/console_thread.cpp:428 -#: src/qt-console/tray-monitor/tray-monitor.cpp:361 -#: src/qt-console/bcomm/dircomm.cpp:173 -msgid "Director daemon" +#: src/stored/status.c:461 +#, c-format +msgid "" +"Reading: %s %s job %s JobId=%d Volume=\"%s\"\n" +" pool=\"%s\" device=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:943 +#: src/stored/status.c:474 #, c-format -msgid "Connecting to Client %s:%d\n" +msgid "" +"Writing: %s %s job %s JobId=%d Volume=\"%s\"\n" +" pool=\"%s\" device=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:944 -#: src/qt-console/tray-monitor/tray-monitor.cpp:366 +#: src/stored/status.c:485 #, c-format -msgid "Connecting to Client %s:%d" +msgid " spooling=%d despooling=%d despool_wait=%d\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:945 -#: src/qt-console/tray-monitor/tray-monitor.cpp:368 -msgid "File daemon" -msgstr "File daemon" - -#: src/tray-monitor/tray-monitor.c:950 -#, c-format -msgid "Connecting to Storage %s:%d\n" -msgstr "" +#: src/stored/status.c:501 +#, fuzzy, c-format +msgid " Files=%s Bytes=%s AveBytes/sec=%s LastBytes/sec=%s\n" +msgstr " MigTime=%s MigHiBytes=%s MigLoBytes=%s\n" -#: src/tray-monitor/tray-monitor.c:951 -#: src/qt-console/tray-monitor/tray-monitor.cpp:373 +#: src/stored/status.c:513 #, c-format -msgid "Connecting to Storage %s:%d" +msgid " FDReadSeqNo=%s in_msg=%u out_msg=%d fd=%d\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:956 src/tray-monitor/tray-monitor.c:994 -#: src/qt-console/tray-monitor/tray-monitor.cpp:379 -#: src/qt-console/tray-monitor/tray-monitor.cpp:409 -#, c-format -msgid "Error, currentitem is not a Client, a Storage or a Director..\n" +#: src/stored/status.c:519 +msgid " FDSocket closed\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:962 -msgid "Cannot connect to daemon.\n" +#: src/stored/status.c:528 src/dird/ua_select.c:1211 src/filed/status.c:278 +msgid "No Jobs running.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:963 -#: src/qt-console/tray-monitor/tray-monitor.cpp:384 -msgid "Cannot connect to daemon." +#: src/stored/status.c:540 +msgid "" +"\n" +"Jobs waiting to reserve a drive:\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:975 -#: src/qt-console/tray-monitor/tray-monitor.cpp:393 +#: src/stored/status.c:604 #, c-format -msgid "Authentication error : %s" +msgid "3900 No arg in .status command: %s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:982 -msgid "Opened connection with Director daemon.\n" -msgstr "" +#: src/stored/status.c:652 +#, fuzzy, c-format +msgid "3900 Unknown arg in .status command: %s\n" +msgstr "unbekannt" -#: src/tray-monitor/tray-monitor.c:983 -#: src/qt-console/tray-monitor/tray-monitor.cpp:400 -msgid "Opened connection with Director daemon." +#: src/stored/status.c:667 +msgid "Bacula Storage: Idle" msgstr "" -#: src/tray-monitor/tray-monitor.c:986 -msgid "Opened connection with File daemon.\n" +#: src/stored/status.c:678 +msgid "Bacula Storage: Running" msgstr "" -#: src/tray-monitor/tray-monitor.c:987 -#: src/qt-console/tray-monitor/tray-monitor.cpp:403 -msgid "Opened connection with File daemon." +#: src/stored/status.c:692 +msgid "Bacula Storage: Last Job Canceled" msgstr "" -#: src/tray-monitor/tray-monitor.c:990 -msgid "Opened connection with Storage daemon.\n" +#: src/stored/status.c:696 +msgid "Bacula Storage: Last Job Failed" msgstr "" -#: src/tray-monitor/tray-monitor.c:991 -#: src/qt-console/tray-monitor/tray-monitor.cpp:406 -msgid "Opened connection with Storage daemon." +#: src/stored/status.c:700 +msgid "Bacula Storage: Last Job had Warnings" msgstr "" -#: src/tray-monitor/tray-monitor.c:1028 -msgid "<< Error: BNET_SUB_PROMPT signal received. >>\n" +#: src/stored/sd_plugins.c:220 src/dird/dir_plugins.c:169 +#: src/filed/fd_plugins.c:1125 +#, c-format +msgid "Loaded plugin: %s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:1033 src/wx-console/console_thread.cpp:494 -msgid "<< Heartbeat signal received, answered. >>\n" +#: src/stored/sd_plugins.c:240 src/dird/dir_plugins.c:189 +#: src/filed/fd_plugins.c:1146 +#, c-format +msgid "Plugin magic wrong. Plugin=%s wanted=%s got=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:1037 +#: src/stored/sd_plugins.c:248 src/dird/dir_plugins.c:197 +#: src/filed/fd_plugins.c:1154 #, c-format -msgid "<< Unexpected signal received : %s >>\n" +msgid "Plugin version incorrect. Plugin=%s wanted=%d got=%d\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:1042 -msgid "\n" +#: src/stored/sd_plugins.c:257 src/dird/dir_plugins.c:206 +#: src/filed/fd_plugins.c:1162 +#, c-format +msgid "Plugin license incompatible. Plugin=%s license=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:1046 -#: src/qt-console/tray-monitor/tray-monitor.cpp:457 -msgid "Error : BNET_HARDEOF or BNET_ERROR" +#: src/stored/sd_plugins.c:265 src/dird/dir_plugins.c:214 +#: src/filed/fd_plugins.c:1170 +#, c-format +msgid "Plugin size incorrect. Plugin=%s wanted=%d got=%d\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:1052 -msgid "\n" +#: src/lib/sellist.c:57 +msgid "Negative numbers not permitted.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:1056 -#: src/qt-console/tray-monitor/tray-monitor.cpp:466 -msgid "Error : Connection closed." +#: src/lib/sellist.c:64 src/dird/ua_label.c:98 +msgid "Range end is not integer.\n" msgstr "" -#: src/tray-monitor/authenticate.c:88 -#: src/qt-console/tray-monitor/authenticate.cpp:87 -msgid "" -"Director authorization problem.\n" -"Most likely the passwords do not agree.\n" -"Please see " +#: src/lib/sellist.c:69 src/dird/ua_label.c:103 +msgid "Range start is not an integer.\n" msgstr "" -#: src/tray-monitor/authenticate.c:97 src/console/authenticate.c:152 -#: src/qt-console/tray-monitor/authenticate.cpp:96 -#, c-format -msgid "Bad response to Hello command: ERR=%s\n" +#: src/lib/sellist.c:75 src/dird/ua_label.c:109 +msgid "Range end not bigger than start.\n" msgstr "" -#: src/tray-monitor/authenticate.c:104 src/wx-console/authenticate.c:157 -#: src/console/authenticate.c:159 -#: src/qt-console/tray-monitor/authenticate.cpp:103 -msgid "Director rejected Hello command\n" +#: src/lib/sellist.c:83 +#, fuzzy +msgid "User cancel requested.\n" +msgstr "%s Abgebrochen" + +#: src/lib/sellist.c:93 src/dird/ua_label.c:115 +msgid "Input value is not an integer.\n" msgstr "" -#: src/tray-monitor/authenticate.c:138 -#: src/qt-console/tray-monitor/authenticate.cpp:137 -#, fuzzy -msgid "" -"Director and Storage daemon passwords or names not the same.\n" -"Please see " -msgstr "Director und Storage daemon Passworte or Namen nicht gleich.\n" +#: src/lib/sellist.c:105 +msgid "Selection items must be be greater than zero.\n" +msgstr "" -#: src/tray-monitor/authenticate.c:145 -#: src/qt-console/tray-monitor/authenticate.cpp:144 -#, c-format -msgid "bdird\n" -" -b specify a bootstrap file\n" -" -c specify a Storage configuration file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -e exclude list\n" -" -i include list\n" -" -j list jobs\n" -" -k list blocks\n" -" (no j or k option) list saved files\n" -" -L dump label\n" -" -p proceed inspite of errors\n" -" -v be verbose\n" -" -V specify Volume names (separated by |)\n" -" -? print this message\n" -"\n" +#: src/lib/var.c:2661 +msgid "octal value too large" msgstr "" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: dird [-f -s] [-c config_file] [-d debug_level] [config_file]\n" -" -c setze Konfigurationsdatei auf Datei\n" -" -dnn setze debug level auf nn\n" -" -f starte im Vordergrund (für debugging Zwecke)\n" -" -g groupid\n" -" -r starte jetzt\n" -" -s no signals\n" -" -t test - Konfiguration Lesen und beenden\n" -" -u userid\n" -" -v ausführliche Benutzer Meldungen\n" -" -? diese Meldung ausgeben.\n" -"\n" -#: src/stored/bls.c:149 src/stored/bextract.c:146 -#, c-format -msgid "Could not open exclude file: %s, ERR=%s\n" +#: src/lib/var.c:2662 +msgid "invalid octal value" msgstr "" -#: src/stored/bls.c:164 src/stored/bextract.c:161 -#, c-format -msgid "Could not open include file: %s, ERR=%s\n" +#: src/lib/var.c:2663 +msgid "incomplete octal value" msgstr "" -#: src/stored/bls.c:211 -msgid "No archive name specified\n" +#: src/lib/var.c:2664 +msgid "incomplete grouped hexadecimal value" msgstr "" -#: src/stored/bls.c:247 -#, c-format -msgid "" -"\n" -"Warning, this Volume is a continuation of Volume %s\n" +#: src/lib/var.c:2665 +msgid "incorrect character class specification" msgstr "" -#: src/stored/bls.c:290 -#, c-format -msgid "Got EOM at file %u on device %s, Volume \"%s\"\n" +#: src/lib/var.c:2666 +msgid "invalid expansion configuration" msgstr "" -#: src/stored/bls.c:301 -#, c-format -msgid "Mounted Volume \"%s\".\n" +#: src/lib/var.c:2667 +msgid "out of memory" msgstr "" -#: src/stored/bls.c:303 -#, c-format -msgid "End of file %u on device %s, Volume \"%s\"\n" +#: src/lib/var.c:2668 +msgid "incomplete variable specification" msgstr "" -#: src/stored/bls.c:327 -#, c-format -msgid "" -"File:blk=%u:%u blk_num=%u blen=%u First rec FI=%s SessId=%u SessTim=%u Strm=" -"%s rlen=%d\n" +#: src/lib/var.c:2669 +msgid "undefined variable" msgstr "" -#: src/stored/bls.c:336 -#, c-format -msgid "Block: %d size=%d\n" +#: src/lib/var.c:2670 +msgid "input is neither text nor variable" msgstr "" -#: src/stored/bls.c:386 src/stored/bextract.c:328 src/stored/bscan.c:688 -msgid "Cannot continue.\n" -msgstr "" +#: src/lib/var.c:2671 +#, fuzzy +msgid "unknown command character in variable" +msgstr "unbekannt" -#: src/stored/bls.c:388 -msgid "Attrib unpack error!\n" +#: src/lib/var.c:2672 +msgid "malformatted search and replace operation" msgstr "" -#: src/stored/bls.c:399 -#, c-format -msgid "FileIndex=%d VolSessionId=%d VolSessionTime=%d Stream=%d DataLen=%d\n" +#: src/lib/var.c:2673 +#, fuzzy +msgid "unknown flag in search and replace operation" +msgstr "unbekannt" + +#: src/lib/var.c:2674 +msgid "invalid regex in search and replace operation" msgstr "" -#: src/stored/bls.c:425 src/stored/read_record.c:414 src/stored/bcopy.c:330 -msgid "Fresh Volume Label" +#: src/lib/var.c:2675 +msgid "missing parameter in command" msgstr "" -#: src/stored/bls.c:428 src/stored/read_record.c:417 src/stored/bcopy.c:333 -msgid "Volume Label" +#: src/lib/var.c:2676 +msgid "empty search string in search and replace operation" msgstr "" -#: src/stored/bls.c:432 src/stored/label.c:1028 src/stored/bcopy.c:337 -msgid "Begin Job Session" +#: src/lib/var.c:2677 +msgid "start offset missing in cut operation" msgstr "" -#: src/stored/bls.c:437 src/stored/label.c:1031 src/stored/bcopy.c:341 -msgid "End Job Session" +#: src/lib/var.c:2678 +#, fuzzy +msgid "offsets in cut operation delimited by unknown character" +msgstr "unbekannt" + +#: src/lib/var.c:2679 +msgid "range out of bounds in cut operation" msgstr "" -#: src/stored/bls.c:441 src/stored/bcopy.c:346 -msgid "End of Medium" +#: src/lib/var.c:2680 +msgid "offset out of bounds in cut operation" msgstr "" -#: src/stored/bls.c:444 -msgid "End of Physical Medium" +#: src/lib/var.c:2681 +msgid "logic error in cut operation" msgstr "" -#: src/stored/bls.c:447 -msgid "Start of object" +#: src/lib/var.c:2682 +msgid "malformatted transpose operation" msgstr "" -#: src/stored/bls.c:450 -msgid "End of object" +#: src/lib/var.c:2683 +msgid "source and target class mismatch in transpose operation" msgstr "" -#: src/stored/bls.c:453 src/stored/label.c:1040 src/stored/bcopy.c:349 -msgid "Unknown" +#: src/lib/var.c:2684 +msgid "empty character class in transpose operation" msgstr "" -#: src/stored/bls.c:460 src/stored/read_record.c:435 src/stored/bcopy.c:355 -#, c-format -msgid "%s Record: VolSessionId=%d VolSessionTime=%d JobId=%d DataLen=%d\n" +#: src/lib/var.c:2685 +msgid "incorrect character class in transpose operation" msgstr "" -#: src/stored/bls.c:479 src/stored/bextract.c:612 src/stored/bcopy.c:373 -#: src/stored/bscan.c:1374 src/stored/btape.c:3050 -#, c-format -msgid "Mount Volume \"%s\" on device %s and press return when ready: " +#: src/lib/var.c:2686 +msgid "malformatted padding operation" msgstr "" -#: src/stored/dircmd.c:155 -#, c-format -msgid "Connection request from %s failed.\n" +#: src/lib/var.c:2687 +msgid "width parameter missing in padding operation" msgstr "" -#: src/stored/dircmd.c:166 -#, c-format -msgid "Invalid connection from %s. Len=%d\n" +#: src/lib/var.c:2688 +msgid "fill string missing in padding operation" msgstr "" -#: src/stored/dircmd.c:210 src/filed/authenticate.c:208 -msgid "Unable to authenticate Director\n" -msgstr "" +#: src/lib/var.c:2689 +#, fuzzy +msgid "unknown quoted pair in search and replace operation" +msgstr "unbekannt" -#: src/stored/dircmd.c:299 -#, c-format -msgid "3991 Bad setdebug command: %s\n" +#: src/lib/var.c:2690 +msgid "sub-matching reference out of range" msgstr "" -#: src/stored/dircmd.c:326 -msgid "3903 Error scanning cancel command.\n" +#: src/lib/var.c:2691 +msgid "invalid argument" msgstr "" -#: src/stored/dircmd.c:330 -#, c-format -msgid "3904 Job %s not found.\n" +#: src/lib/var.c:2692 +msgid "incomplete quoted pair" msgstr "" -#: src/stored/dircmd.c:358 -#, fuzzy, c-format -msgid "3000 JobId=%ld Job=\"%s\" marked to be %s.\n" -msgstr "JobId %s, Job %s zum Abbruch markiert.\n" - -#: src/stored/dircmd.c:437 src/stored/dircmd.c:812 src/stored/dircmd.c:904 -#: src/stored/dircmd.c:1015 src/stored/dircmd.c:1137 src/stored/dircmd.c:1179 -#, c-format -msgid "3999 Device \"%s\" not found or could not be opened.\n" +#: src/lib/var.c:2693 +msgid "lookup function does not support variable arrays" msgstr "" -#: src/stored/dircmd.c:442 -#, c-format -msgid "3903 Error scanning label command: %s\n" +#: src/lib/var.c:2694 +msgid "index of array variable contains an invalid character" msgstr "" -#: src/stored/dircmd.c:492 -#, fuzzy, c-format -msgid "3910 Unable to open device \"%s\": ERR=%s\n" -msgstr "Kann Datenbank=%s.nicht öffen. ERR=%s\n" - -#: src/stored/dircmd.c:509 -#, c-format -msgid "3920 Cannot label Volume because it is already labeled: \"%s\"\n" +#: src/lib/var.c:2695 +msgid "index of array variable is incomplete" msgstr "" -#: src/stored/dircmd.c:516 -msgid "3921 Wrong volume mounted.\n" +#: src/lib/var.c:2696 +msgid "bracket expression in array variable's index not closed" msgstr "" -#: src/stored/dircmd.c:520 -msgid "3922 Cannot relabel an ANSI/IBM labeled Volume.\n" +#: src/lib/var.c:2697 +msgid "division by zero error in index specification" msgstr "" -#: src/stored/dircmd.c:528 -#, c-format -msgid "3912 Failed to label Volume: ERR=%s\n" +#: src/lib/var.c:2698 +msgid "unterminated loop construct" msgstr "" -#: src/stored/dircmd.c:538 -#, c-format -msgid "3914 Failed to label Volume (no media): ERR=%s\n" +#: src/lib/var.c:2699 +msgid "invalid character in loop limits" msgstr "" -#: src/stored/dircmd.c:541 -#, c-format -msgid "3913 Cannot label Volume. Unknown status %d from read_volume_label()\n" +#: src/lib/var.c:2700 +msgid "malformed operation argument list" msgstr "" -#: src/stored/dircmd.c:578 -#, c-format -msgid "3001 Mounted Volume: %s\n" +#: src/lib/var.c:2701 +msgid "undefined operation" msgstr "" -#: src/stored/dircmd.c:582 src/stored/dircmd.c:1215 -#, c-format -msgid "" -"3902 Cannot mount Volume on Storage Device \"%s\" because:\n" -"%s" +#: src/lib/var.c:2702 +msgid "formatting failure" msgstr "" -#: src/stored/dircmd.c:696 +#: src/lib/var.c:2711 #, fuzzy -msgid "Specified slot ignored. " -msgstr "SQL fehlgeschlagen ERR=%s\n" - -#: src/stored/dircmd.c:712 src/stored/dircmd.c:770 -#, fuzzy, c-format -msgid "3901 Unable to open device \"%s\": ERR=%s\n" -msgstr "Kann Datenbank=%s.nicht öffen. ERR=%s\n" +msgid "unknown error" +msgstr "unbekannt" -#: src/stored/dircmd.c:732 src/stored/dircmd.c:761 -#, c-format -msgid "3001 Device \"%s\" is mounted with Volume \"%s\"\n" +#: src/lib/util.c:168 src/dird/ua_status.c:1080 src/lib/status.h:102 +msgid "Created" msgstr "" -#: src/stored/dircmd.c:735 src/stored/dircmd.c:764 src/stored/dircmd.c:779 -#, c-format -msgid "" -"3905 Device \"%s\" open but no Bacula volume is mounted.\n" -"If this is not a blank tape, try unmounting and remounting the Volume.\n" +#: src/lib/util.c:171 +msgid "Running" msgstr "" -#: src/stored/dircmd.c:745 -#, c-format -msgid "3001 Device \"%s\" is doing acquire.\n" +#: src/lib/util.c:174 +msgid "Blocked" msgstr "" -#: src/stored/dircmd.c:750 src/stored/dircmd.c:875 -#, c-format -msgid "3903 Device \"%s\" is being labeled.\n" +#: src/lib/util.c:181 src/lib/util.c:316 src/lib/util.c:463 +#: src/dird/ua_status.c:1084 src/lib/status.h:106 +msgid "Error" msgstr "" -#: src/stored/dircmd.c:776 -#, c-format -msgid "3001 Device \"%s\" is already mounted with Volume \"%s\"\n" +#: src/lib/util.c:184 +msgid "Non-fatal error" msgstr "" -#: src/stored/dircmd.c:788 -#, c-format -msgid "3002 Device \"%s\" is mounted.\n" -msgstr "" +#: src/lib/util.c:187 src/lib/util.c:312 src/dird/ua_status.c:1096 +#: src/lib/status.h:118 +#, fuzzy +msgid "OK -- with warnings" +msgstr "%s OK -- mit Warnungen" -#: src/stored/dircmd.c:790 src/stored/dircmd.c:847 src/stored/dircmd.c:863 -#: src/stored/dircmd.c:895 -#, c-format -msgid "3907 %s" +#: src/lib/util.c:190 src/lib/util.c:322 +msgid "Canceled" msgstr "" -#: src/stored/dircmd.c:793 -#, c-format -msgid "3906 File device \"%s\" is always mounted.\n" +#: src/lib/util.c:193 +msgid "Verify differences" msgstr "" -#: src/stored/dircmd.c:802 -#, fuzzy, c-format -msgid "3930 Device \"%s\" is being released.\n" -msgstr "unbekannt" - -#: src/stored/dircmd.c:806 -#, fuzzy, c-format -msgid "3905 Unknown wait state %d\n" -msgstr "unbekannt" - -#: src/stored/dircmd.c:816 -#, c-format -msgid "3909 Error scanning mount command: %s\n" +#: src/lib/util.c:196 +msgid "Waiting on FD" msgstr "" -#: src/stored/dircmd.c:844 src/stored/dircmd.c:897 -#, fuzzy, c-format -msgid "3002 Device \"%s\" unmounted.\n" -msgstr "Pool Ressource \"%s\" nicht gefunden.\n" - -#: src/stored/dircmd.c:851 -#, fuzzy, c-format -msgid "3901 Device \"%s\" is already unmounted.\n" -msgstr "unbekannt" - -#: src/stored/dircmd.c:866 -#, fuzzy, c-format -msgid "3001 Device \"%s\" unmounted.\n" -msgstr "Pool Ressource \"%s\" nicht gefunden.\n" - -#: src/stored/dircmd.c:871 -#, c-format -msgid "3902 Device \"%s\" is busy in acquire.\n" +#: src/lib/util.c:199 +msgid "Wait on SD" msgstr "" -#: src/stored/dircmd.c:909 -#, c-format -msgid "3907 Error scanning unmount command: %s\n" +#: src/lib/util.c:202 +msgid "Wait for new Volume" msgstr "" -#: src/stored/dircmd.c:937 -msgid "3916 Error scanning action_on_purge command\n" +#: src/lib/util.c:205 +msgid "Waiting for mount" msgstr "" -#: src/stored/dircmd.c:980 -#, fuzzy, c-format -msgid "3921 Device \"%s\" already released.\n" -msgstr "Device Eintrag %s bereits vorhanden\n" - -#: src/stored/dircmd.c:987 -#, c-format -msgid "3922 Device \"%s\" waiting for sysop.\n" +#: src/lib/util.c:208 +msgid "Waiting for Storage resource" msgstr "" -#: src/stored/dircmd.c:993 -#, c-format -msgid "3922 Device \"%s\" waiting for mount.\n" +#: src/lib/util.c:211 +msgid "Waiting for Job resource" msgstr "" -#: src/stored/dircmd.c:997 -#, fuzzy, c-format -msgid "3923 Device \"%s\" is busy in acquire.\n" -msgstr "unbekannt" - -#: src/stored/dircmd.c:1001 -#, c-format -msgid "3914 Device \"%s\" is being labeled.\n" +#: src/lib/util.c:214 +msgid "Waiting for Client resource" msgstr "" -#: src/stored/dircmd.c:1009 -#, c-format -msgid "3022 Device \"%s\" released.\n" +#: src/lib/util.c:217 +msgid "Waiting on Max Jobs" msgstr "" -#: src/stored/dircmd.c:1020 -#, c-format -msgid "3927 Error scanning release command: %s\n" +#: src/lib/util.c:220 +msgid "Waiting for Start Time" msgstr "" -#: src/stored/dircmd.c:1049 src/filed/job.c:1535 -#, c-format -msgid "Could not create bootstrap file %s: ERR=%s\n" +#: src/lib/util.c:223 +msgid "Waiting on Priority" msgstr "" -#: src/stored/dircmd.c:1062 -msgid "Error parsing bootstrap file.\n" +#: src/lib/util.c:226 src/dird/ua_status.c:931 src/dird/ua_status.c:982 +msgid "SD committing Data" msgstr "" -#: src/stored/dircmd.c:1124 -#, fuzzy, c-format -msgid "3998 Device \"%s\" is not an autochanger.\n" -msgstr "unbekannt" - -#: src/stored/dircmd.c:1141 -#, c-format -msgid "3908 Error scanning autochanger drives/list/slots command: %s\n" +#: src/lib/util.c:229 src/dird/ua_status.c:934 src/dird/ua_status.c:985 +msgid "SD despooling Data" msgstr "" -#: src/stored/dircmd.c:1183 -#, c-format -msgid "3909 Error scanning readlabel command: %s\n" +#: src/lib/util.c:232 src/dird/ua_status.c:937 src/dird/ua_status.c:988 +msgid "SD despooling Attributes" msgstr "" -#: src/stored/dircmd.c:1211 -#, c-format -msgid "3001 Volume=%s Slot=%d\n" +#: src/lib/util.c:235 src/dird/ua_status.c:940 src/dird/ua_status.c:991 +msgid "Dir inserting Attributes" msgstr "" -#: src/stored/dircmd.c:1243 +#: src/lib/util.c:242 #, c-format -msgid "3931 Device \"%s\" is BLOCKED. user unmounted.\n" +msgid "Unknown Job termination status=%d" msgstr "" -#: src/stored/dircmd.c:1247 -#, c-format -msgid "" -"3932 Device \"%s\" is BLOCKED. user unmounted during wait for media/mount.\n" +#: src/lib/util.c:258 +msgid "Completed successfully" msgstr "" -#: src/stored/dircmd.c:1251 -#, c-format -msgid "3933 Device \"%s\" is BLOCKED waiting for media.\n" -msgstr "" +#: src/lib/util.c:261 +#, fuzzy +msgid "Completed with warnings" +msgstr "%s OK -- mit Warnungen" -#: src/stored/dircmd.c:1255 -#, c-format -msgid "3934 Device \"%s\" is being initialized.\n" +#: src/lib/util.c:264 +msgid "Terminated with errors" msgstr "" -#: src/stored/dircmd.c:1259 -#, fuzzy, c-format -msgid "3935 Device \"%s\" is blocked labeling a Volume.\n" -msgstr "unbekannt" - -#: src/stored/dircmd.c:1263 -#, fuzzy, c-format -msgid "3935 Device \"%s\" is blocked for unknown reason.\n" +#: src/lib/util.c:267 +#, fuzzy +msgid "Fatal error" msgstr "unbekannt" -#: src/stored/dircmd.c:1268 -#, fuzzy, c-format -msgid "3936 Device \"%s\" is busy reading.\n" -msgstr "unbekannt" +#: src/lib/util.c:270 +msgid "Created, not yet running" +msgstr "" -#: src/stored/dircmd.c:1271 -#, c-format -msgid "3937 Device \"%s\" is busy with writers=%d reserved=%d.\n" +#: src/lib/util.c:273 +msgid "Canceled by user" msgstr "" -#: src/stored/parse_bsr.c:122 src/stored/parse_bsr.c:126 -#, c-format -msgid "" -"Bootstrap file error: %s\n" -" : Line %d, col %d of file %s\n" -"%s\n" +#: src/lib/util.c:276 +msgid "Verify found differences" msgstr "" -#: src/stored/parse_bsr.c:148 -#, c-format -msgid "Cannot open bootstrap file %s: %s\n" +#: src/lib/util.c:279 +#, fuzzy +msgid "Waiting for File daemon" +msgstr "File daemon" + +#: src/lib/util.c:282 +#, fuzzy +msgid "Waiting for Storage daemon" +msgstr "Storage daemon" + +#: src/lib/util.c:285 +msgid "Waiting for higher priority jobs" msgstr "" -#: src/stored/parse_bsr.c:279 -#, c-format -msgid "MediaType %s in bsr at inappropriate place.\n" +#: src/lib/util.c:288 +msgid "Batch inserting file records" msgstr "" -#: src/stored/parse_bsr.c:311 -#, c-format -msgid "Device \"%s\" in bsr at inappropriate place.\n" +#: src/lib/util.c:319 +msgid "Fatal Error" msgstr "" -#: src/stored/parse_bsr.c:484 -#, fuzzy, c-format -msgid "REGEX '%s' compile error. ERR=%s\n" -msgstr "Regex Übersetzungsfehler. ERR=%s\n" +#: src/lib/util.c:325 +msgid "Differences" +msgstr "" -#: src/stored/parse_bsr.c:494 -msgid "JobType not yet implemented\n" +#: src/lib/util.c:328 +msgid "Unknown term code" msgstr "" -#: src/stored/parse_bsr.c:502 -msgid "JobLevel not yet implemented\n" +#: src/lib/util.c:344 src/lib/jcr.c:220 +msgid "Backup" msgstr "" -#: src/stored/parse_bsr.c:719 -#, c-format -msgid "Slot %d in bsr at inappropriate place.\n" +#: src/lib/util.c:347 +#, fuzzy +msgid "Migrated Job" +msgstr "Konnte Migrationsjob nicht starten.\n" + +#: src/lib/util.c:350 +msgid "Verify" msgstr "" -#: src/stored/parse_bsr.c:743 -#, c-format -msgid "VolFile : %u-%u\n" +#: src/lib/util.c:353 +msgid "Restore" msgstr "" -#: src/stored/parse_bsr.c:751 -#, c-format -msgid "VolBlock : %u-%u\n" +#: src/lib/util.c:356 +msgid "Console" msgstr "" -#: src/stored/parse_bsr.c:759 -#, c-format -msgid "VolAddr : %llu-%llu\n" +#: src/lib/util.c:359 +msgid "System or Console" msgstr "" -#: src/stored/parse_bsr.c:768 -#, c-format -msgid "FileIndex : %u\n" +#: src/lib/util.c:362 +msgid "Admin" msgstr "" -#: src/stored/parse_bsr.c:770 -#, c-format -msgid "FileIndex : %u-%u\n" +#: src/lib/util.c:365 src/lib/util.c:455 +msgid "Archive" msgstr "" -#: src/stored/parse_bsr.c:780 -#, c-format -msgid "JobId : %u\n" +#: src/lib/util.c:368 +msgid "Job Copy" msgstr "" -#: src/stored/parse_bsr.c:782 -#, c-format -msgid "JobId : %u-%u\n" +#: src/lib/util.c:371 +msgid "Copy" msgstr "" -#: src/stored/parse_bsr.c:792 -#, c-format -msgid "SessId : %u\n" +#: src/lib/util.c:374 +msgid "Migrate" msgstr "" -#: src/stored/parse_bsr.c:794 -#, c-format -msgid "SessId : %u-%u\n" +#: src/lib/util.c:377 +msgid "Scan" msgstr "" -#: src/stored/parse_bsr.c:803 -#, c-format -msgid "VolumeName : %s\n" +#: src/lib/util.c:381 +msgid "Unknown Type" msgstr "" -#: src/stored/parse_bsr.c:804 -#, c-format -msgid " MediaType : %s\n" +#: src/lib/util.c:391 +msgid "Truncate" msgstr "" -#: src/stored/parse_bsr.c:805 -#, c-format -msgid " Device : %s\n" +#: src/lib/util.c:394 src/filed/restore.c:1164 +msgid "None" msgstr "" -#: src/stored/parse_bsr.c:806 -#, c-format -msgid " Slot : %d\n" +#: src/lib/util.c:408 +msgid "Base" msgstr "" -#: src/stored/parse_bsr.c:815 -#, c-format -msgid "Client : %s\n" +#: src/lib/util.c:411 src/lib/util.c:457 src/dird/ua_run.c:1147 +msgid "Full" msgstr "" -#: src/stored/parse_bsr.c:823 -#, c-format -msgid "Job : %s\n" +#: src/lib/util.c:414 src/dird/ua_run.c:1148 +msgid "Incremental" msgstr "" -#: src/stored/parse_bsr.c:831 -#, c-format -msgid "SessTime : %u\n" +#: src/lib/util.c:417 src/dird/ua_run.c:1149 +msgid "Differential" msgstr "" -#: src/stored/parse_bsr.c:842 -msgid "BSR is NULL\n" +#: src/lib/util.c:420 src/dird/ua_run.c:1150 +msgid "Since" msgstr "" -#: src/stored/parse_bsr.c:846 -#, c-format -msgid "Next : 0x%x\n" +#: src/lib/util.c:423 src/dird/ua_run.c:1177 +msgid "Verify Catalog" msgstr "" -#: src/stored/parse_bsr.c:847 -#, c-format -msgid "Root bsr : 0x%x\n" +#: src/lib/util.c:426 +msgid "Verify Init Catalog" msgstr "" -#: src/stored/parse_bsr.c:859 -#, c-format -msgid "count : %u\n" +#: src/lib/util.c:429 src/dird/ua_run.c:1178 +msgid "Verify Volume to Catalog" msgstr "" -#: src/stored/parse_bsr.c:860 -#, c-format -msgid "found : %u\n" +#: src/lib/util.c:432 src/dird/ua_run.c:1179 +msgid "Verify Disk to Catalog" msgstr "" -#: src/stored/parse_bsr.c:863 -#, c-format -msgid "done : %s\n" +#: src/lib/util.c:435 +msgid "Verify Data" msgstr "" -#: src/stored/parse_bsr.c:864 -#, c-format -msgid "positioning : %d\n" +#: src/lib/util.c:438 +msgid "Virtual Full" msgstr "" -#: src/stored/parse_bsr.c:865 -#, c-format -msgid "fast_reject : %d\n" +#: src/lib/util.c:444 +msgid "Unknown Job Level" msgstr "" -#: src/stored/ansi_label.c:96 -#, c-format -msgid "Read error on device %s in ANSI label. ERR=%s\n" +#: src/lib/util.c:454 +msgid "Append" msgstr "" -#: src/stored/ansi_label.c:106 -msgid "Insane! End of tape while reading ANSI label.\n" +#: src/lib/util.c:456 +#, fuzzy +msgid "Disabled" +msgstr "ist nicht aktiviert" + +#: src/lib/util.c:458 +msgid "Used" msgstr "" -#: src/stored/ansi_label.c:132 -msgid "No VOL1 label while reading ANSI/IBM label.\n" +#: src/lib/util.c:459 +msgid "Cleaning" msgstr "" -#: src/stored/ansi_label.c:155 -#, c-format -msgid "Wanted ANSI Volume \"%s\" got \"%s\"\n" +#: src/lib/util.c:460 +msgid "Purged" msgstr "" -#: src/stored/ansi_label.c:166 -msgid "No HDR1 label while reading ANSI label.\n" +#: src/lib/util.c:461 +msgid "Recycle" msgstr "" -#: src/stored/ansi_label.c:172 -#, c-format -msgid "ANSI/IBM Volume \"%s\" does not belong to Bacula.\n" +#: src/lib/util.c:462 +msgid "Read-Only" msgstr "" -#: src/stored/ansi_label.c:184 -msgid "No HDR2 label while reading ANSI/IBM label.\n" +#: src/lib/util.c:474 +msgid "Invalid volume status" msgstr "" -#: src/stored/ansi_label.c:199 -msgid "Unknown or bad ANSI/IBM label record.\n" +#: src/lib/util.c:736 src/lib/util.c:746 src/lib/util.c:754 src/lib/util.c:761 +#: src/lib/util.c:768 src/lib/util.c:782 src/lib/util.c:792 src/lib/util.c:805 +#: src/lib/util.c:816 src/filed/restore.c:1180 +msgid "*none*" msgstr "" -#: src/stored/ansi_label.c:207 -msgid "Too many records in while reading ANSI/IBM label.\n" +#: src/lib/util.c:854 +msgid "Working directory not defined. Cannot continue.\n" msgstr "" -#: src/stored/ansi_label.c:307 +#: src/lib/util.c:857 #, c-format -msgid "ANSI Volume label name \"%s\" longer than 6 chars.\n" +msgid "Working Directory: \"%s\" not found. Cannot continue.\n" msgstr "" -#: src/stored/ansi_label.c:333 +#: src/lib/util.c:861 #, c-format -msgid "Could not write ANSI VOL1 label. Wanted size=%d got=%d ERR=%s\n" +msgid "Working Directory: \"%s\" is not a directory. Cannot continue.\n" msgstr "" -#: src/stored/ansi_label.c:371 src/stored/ansi_label.c:400 -#, c-format -msgid "Could not write ANSI HDR1 label. ERR=%s\n" +#: src/lib/devlock.c:318 src/lib/save/devlock.c:337 +msgid "writeunlock called too many times.\n" msgstr "" -#: src/stored/ansi_label.c:376 src/stored/ansi_label.c:407 -msgid "Could not write ANSI HDR1 label.\n" +#: src/lib/devlock.c:323 src/lib/save/devlock.c:342 +msgid "writeunlock by non-owner.\n" msgstr "" -#: src/stored/ansi_label.c:412 +#: src/lib/devlock.c:489 src/lib/save/devlock.c:508 src/lib/rwlock.c:425 #, c-format -msgid "Error writing EOF to tape. ERR=%s" +msgid "Thread %d found unchanged elements %d times\n" msgstr "" -#: src/stored/ansi_label.c:417 -msgid "write_ansi_ibm_label called for non-ANSI/IBM type\n" +#: src/lib/devlock.c:559 src/lib/save/devlock.c:578 src/lib/rwlock.c:495 +#, c-format +msgid "%02d: interval %d, writes %d, reads %d\n" msgstr "" -#: src/stored/append.c:68 -msgid "DCR is NULL!!!\n" +#: src/lib/devlock.c:569 src/lib/save/devlock.c:588 src/lib/rwlock.c:505 +#, c-format +msgid "data %02d: value %d, %d writes\n" msgstr "" -#: src/stored/append.c:73 -msgid "DEVICE is NULL!!!\n" +#: src/lib/devlock.c:574 src/lib/save/devlock.c:593 src/lib/rwlock.c:510 +#, c-format +msgid "Total: %d thread writes, %d data writes\n" msgstr "" -#: src/stored/append.c:83 -msgid "Unable to set network buffer size.\n" +#: src/lib/devlock.c:646 src/lib/save/devlock.c:665 src/lib/rwlock.c:582 +msgid "Try write lock" msgstr "" -#: src/stored/append.c:95 src/stored/append.c:104 src/stored/append.c:116 -#: src/stored/askdir.c:340 src/stored/askdir.c:341 -msgid "NULL Volume name. This shouldn't happen!!!\n" +#: src/lib/devlock.c:652 src/lib/save/devlock.c:671 src/lib/rwlock.c:588 +msgid "Try read lock" msgstr "" -#: src/stored/append.c:110 src/stored/btape.c:2235 -#, c-format -msgid "Write session label failed. ERR=%s\n" +#: src/lib/devlock.c:708 src/lib/save/devlock.c:727 src/lib/rwlock.c:644 +msgid "Create thread" msgstr "" -#: src/stored/append.c:122 -#, c-format -msgid "Network send error to FD. ERR=%s\n" +#: src/lib/devlock.c:718 src/lib/save/devlock.c:737 src/lib/rwlock.c:654 +msgid "Join thread" msgstr "" -#: src/stored/append.c:159 +#: src/lib/devlock.c:720 src/lib/save/devlock.c:739 src/lib/rwlock.c:656 #, c-format -msgid "Error reading data header from FD. ERR=%s\n" +msgid "%02d: interval %d, updates %d, r_collisions %d, w_collisions %d\n" msgstr "" -#: src/stored/append.c:167 +#: src/lib/devlock.c:732 src/lib/save/devlock.c:751 src/lib/rwlock.c:668 #, c-format -msgid "Malformed data header from FD: %s\n" +msgid "data %02d: value %d, %d updates\n" msgstr "" -#: src/stored/append.c:187 -#, c-format -msgid "FI=%d from FD not positive or sequential=%d\n" +#: src/lib/jcr.c:222 +msgid "Verifying" msgstr "" -#: src/stored/append.c:235 -#, fuzzy, c-format -msgid "Network error reading from FD. ERR=%s\n" -msgstr "Netzwerkfehler mit FD bei %s: ERR=%s\n" - -#: src/stored/append.c:265 src/stored/btape.c:2354 -#, fuzzy, c-format -msgid "Error writing end session label. ERR=%s\n" -msgstr "Fehler beim Aktualisieren der DB Media Datei. ERR=%s\n" +#: src/lib/jcr.c:224 +#, fuzzy +msgid "Restoring" +msgstr "Wiederherstellung läuft..." -#: src/stored/append.c:277 src/stored/mac.c:126 src/stored/mac.c:261 -#: src/stored/spool.c:300 -#, c-format -msgid "Fatal append error on device %s: ERR=%s\n" +#: src/lib/jcr.c:226 +msgid "Archiving" msgstr "" -#: src/stored/append.c:279 src/stored/mac.c:128 -msgid "Set ok=FALSE after write_block_to_device.\n" +#: src/lib/jcr.c:228 +msgid "Copying" msgstr "" -#: src/stored/append.c:308 src/stored/mac.c:151 -#, c-format -msgid "Elapsed time=%02d:%02d:%02d, Transfer rate=%s Bytes/second\n" +#: src/lib/jcr.c:230 +msgid "Migration" msgstr "" -#: src/stored/append.c:345 -#, c-format -msgid "Error updating file attributes. ERR=%s\n" +#: src/lib/jcr.c:232 +msgid "Scanning" msgstr "" -#: src/stored/vol_mgr.c:93 -#, fuzzy, c-format -msgid "Unable to initialize volume list lock. ERR=%s\n" -msgstr "Kann DB lock nicht initialisieren. ERR=%s\n" +#: src/lib/jcr.c:234 +#, fuzzy +msgid "Unknown operation" +msgstr "unbekannt" -#: src/stored/label.c:93 -#, c-format -msgid "Couldn't rewind device %s: ERR=%s\n" -msgstr "" +#: src/lib/jcr.c:243 +#, fuzzy +msgid "backup" +msgstr "Sicherung OK" -#: src/stored/label.c:110 src/stored/label.c:202 -#, c-format -msgid "Wrong Volume mounted on device %s: Wanted %s have %s\n" +#: src/lib/jcr.c:245 +msgid "verified" msgstr "" -#: src/stored/label.c:113 src/stored/label.c:190 -#, c-format -msgid "Too many tries: %s" +#: src/lib/jcr.c:245 +msgid "verify" msgstr "" -#: src/stored/label.c:130 -#, c-format -msgid "" -"Requested Volume \"%s\" on %s is not a Bacula labeled Volume, because: ERR=%s" -msgstr "" +#: src/lib/jcr.c:247 +#, fuzzy +msgid "restored" +msgstr "Job Ressource" -#: src/stored/label.c:135 -msgid "Could not read Volume label from block.\n" -msgstr "" +#: src/lib/jcr.c:247 +#, fuzzy +msgid "restore" +msgstr "Job Ressource" -#: src/stored/label.c:138 -#, c-format -msgid "Could not unserialize Volume label: ERR=%s\n" +#: src/lib/jcr.c:249 +msgid "archived" msgstr "" -#: src/stored/label.c:143 -#, c-format -msgid "Volume Header Id bad: %s\n" +#: src/lib/jcr.c:249 +msgid "archive" msgstr "" -#: src/stored/label.c:175 -#, c-format -msgid "Volume on %s has wrong Bacula version. Wanted %d got %d\n" +#: src/lib/jcr.c:251 +msgid "copied" msgstr "" -#: src/stored/label.c:186 -#, c-format -msgid "Volume on %s has bad Bacula label type: %x\n" +#: src/lib/jcr.c:251 +msgid "copy" msgstr "" -#: src/stored/label.c:236 src/stored/label.c:397 src/stored/mount.c:463 -#, fuzzy, c-format -msgid "Could not reserve volume %s on %s\n" -msgstr "Konnte FileSet \"%s\" Eintrag nicht erzeugen. ERR=%s\n" - -#: src/stored/label.c:277 -#, c-format -msgid "Cannot write Volume label to block for device %s\n" +#: src/lib/jcr.c:253 +msgid "migrated" msgstr "" -#: src/stored/label.c:328 src/stored/label.c:426 src/stored/mount.c:218 -#, fuzzy, c-format -msgid "Open device %s Volume \"%s\" failed: ERR=%s\n" -msgstr "Erzeugung von db Device Eintrag %s fehlgeschlagen: ERR=%s\n" - -#: src/stored/label.c:451 -#, c-format -msgid "Rewind error on device %s: ERR=%s\n" +#: src/lib/jcr.c:253 +msgid "migrate" msgstr "" -#: src/stored/label.c:458 -#, c-format -msgid "Truncate error on device %s: ERR=%s\n" +#: src/lib/jcr.c:255 +msgid "scanned" msgstr "" -#: src/stored/label.c:464 -#, c-format -msgid "Failed to re-open DVD after truncate on device %s: ERR=%s\n" +#: src/lib/jcr.c:255 +msgid "scan" msgstr "" -#: src/stored/label.c:487 -#, c-format -msgid "Unable to write device %s: ERR=%s\n" -msgstr "" +#: src/lib/jcr.c:257 +#, fuzzy +msgid "unknown action" +msgstr "unbekannt" + +#: src/lib/jcr.c:309 src/lib/lockmgr.c:301 src/lib/lockmgr.c:756 +#: src/lib/lockmgr.c:784 +#, fuzzy, c-format +msgid "pthread key create failed: ERR=%s\n" +msgstr "pthread_create: ERR=%s\n" + +#: src/lib/jcr.c:331 +#, fuzzy, c-format +msgid "pthread_once failed. ERR=%s\n" +msgstr "pthread_cond_wait: ERR=%s\n" + +#: src/lib/jcr.c:338 +#, fuzzy, c-format +msgid "Could not init msg_queue mutex. ERR=%s\n" +msgstr "Konnte job queue nicht initialiseren: ERR=%s\n" -#: src/stored/label.c:518 -#, c-format -msgid "Recycled volume \"%s\" on device %s, all previous data lost.\n" +#: src/lib/jcr.c:392 +msgid "NULL jcr.\n" msgstr "" -#: src/stored/label.c:521 +#: src/lib/jcr.c:496 #, c-format -msgid "Wrote label to prelabeled Volume \"%s\" on device %s\n" +msgid "JCR use_count=%d JobId=%d\n" msgstr "" -#: src/stored/label.c:721 -#, c-format -msgid "Bad Volume session label = %d\n" -msgstr "" +#: src/lib/jcr.c:601 +#, fuzzy, c-format +msgid "pthread_setspecific failed: ERR=%s\n" +msgstr "Media id select fehlgeschlagen: ERR=%s\n" -#: src/stored/label.c:776 +#: src/lib/jcr.c:1082 #, c-format -msgid "Expecting Volume Label, got FI=%s Stream=%s len=%d\n" +msgid "" +"Watchdog sending kill after %d secs to thread stalled reading Storage " +"daemon.\n" msgstr "" -#: src/stored/label.c:903 +#: src/lib/jcr.c:1094 #, c-format -msgid "Unknown %d" +msgid "" +"Watchdog sending kill after %d secs to thread stalled reading File daemon.\n" msgstr "" -#: src/stored/label.c:907 +#: src/lib/jcr.c:1106 #, c-format msgid "" -"\n" -"Volume Label:\n" -"Id : %sVerNo : %d\n" -"VolName : %s\n" -"PrevVolName : %s\n" -"VolFile : %d\n" -"LabelType : %s\n" -"LabelSize : %d\n" -"PoolName : %s\n" -"MediaType : %s\n" -"PoolType : %s\n" -"HostName : %s\n" +"Watchdog sending kill after %d secs to thread stalled reading Director.\n" msgstr "" -#: src/stored/label.c:929 +#: src/lib/lex.c:77 #, c-format -msgid "Date label written: %s\n" +msgid "Problem probably begins at line %d.\n" msgstr "" -#: src/stored/label.c:935 +#: src/lib/lex.c:82 #, c-format -msgid "Date label written: %04d-%02d-%02d at %02d:%02d\n" +msgid "" +"Config error: %s\n" +" : line %d, col %d of file %s\n" +"%s\n" +"%s" msgstr "" -#: src/stored/label.c:955 +#: src/lib/lex.c:86 #, c-format -msgid "" -"\n" -"%s Record:\n" -"JobId : %d\n" -"VerNum : %d\n" -"PoolName : %s\n" -"PoolType : %s\n" -"JobName : %s\n" -"ClientName : %s\n" +msgid "Config error: %s\n" msgstr "" -#: src/stored/label.c:968 -#, c-format -msgid "" -"Job (unique name) : %s\n" -"FileSet : %s\n" -"JobType : %c\n" -"JobLevel : %c\n" +#: src/lib/lex.c:115 +msgid "Close of NULL file\n" msgstr "" -#: src/stored/label.c:977 -#, c-format +#: src/lib/lex.c:212 msgid "" -"JobFiles : %s\n" -"JobBytes : %s\n" -"StartBlock : %s\n" -"EndBlock : %s\n" -"StartFile : %s\n" -"EndFile : %s\n" -"JobErrors : %s\n" -"JobStatus : %c\n" +"get_char: called after EOF. You may have a open double quote without the " +"closing double quote.\n" msgstr "" -#: src/stored/label.c:998 +#: src/lib/lex.c:254 #, c-format -msgid "Date written : %s\n" +msgid "Config token too long, file: %s, line %d, begins at line %d\n" msgstr "" -#: src/stored/label.c:1003 -#, c-format -msgid "Date written : %04d-%02d-%02d at %02d:%02d\n" +#: src/lib/lex.c:278 +msgid "none" msgstr "" -#: src/stored/label.c:1022 -msgid "Fresh Volume" +#: src/lib/lex.c:279 +msgid "comment" msgstr "" -#: src/stored/label.c:1025 -msgid "Volume" +#: src/lib/lex.c:280 +msgid "number" msgstr "" -#: src/stored/label.c:1034 src/stored/read_record.c:428 -msgid "End of Media" +#: src/lib/lex.c:281 +msgid "ip_addr" msgstr "" -#: src/stored/label.c:1037 -msgid "End of Tape" +#: src/lib/lex.c:282 +msgid "identifier" msgstr "" -#: src/stored/label.c:1057 src/stored/label.c:1065 src/stored/label.c:1098 -#, c-format -msgid "%s Record: File:blk=%u:%u SessId=%d SessTime=%d JobId=%d DataLen=%d\n" +#: src/lib/lex.c:283 +msgid "string" msgstr "" -#: src/stored/label.c:1062 -msgid "End of physical tape.\n" +#: src/lib/lex.c:284 +msgid "quoted_string" msgstr "" -#: src/stored/label.c:1077 src/stored/label.c:1086 -#, c-format -msgid "%s Record: File:blk=%u:%u SessId=%d SessTime=%d JobId=%d\n" +#: src/lib/lex.c:285 +msgid "include" msgstr "" -#: src/stored/label.c:1079 -#, c-format -msgid " Job=%s Date=%s Level=%c Type=%c\n" +#: src/lib/lex.c:286 +msgid "include_quoted_string" msgstr "" -#: src/stored/label.c:1088 -#, c-format -msgid " Date=%s Level=%c Type=%c Files=%s Bytes=%s Errors=%d Status=%c\n" +#: src/lib/lex.c:287 +msgid "UTF-8 Byte Order Mark" msgstr "" -#: src/stored/status.c:99 -msgid "Used Volume status:\n" +#: src/lib/lex.c:288 +msgid "UTF-16le Byte Order Mark" msgstr "" -#: src/stored/status.c:117 -msgid "" -"\n" -"SD Resources:\n" +#: src/lib/lex.c:326 src/lib/lex.c:332 src/lib/lex.c:343 src/lib/lex.c:349 +#, c-format +msgid "expected a positive integer number, got: %s" msgstr "" -#: src/stored/status.c:153 +#: src/lib/lex.c:465 msgid "" -"\n" -"Device status:\n" +"This config file appears to be in an unsupported Unicode format (UTF-16be). " +"Please resave as UTF-8\n" msgstr "" -#: src/stored/status.c:157 +#: src/lib/lex.c:611 src/lib/lex.c:639 #, c-format -msgid "Autochanger \"%s\" with devices:\n" +msgid "Cannot open included config file %s: %s\n" msgstr "" -#: src/stored/status.c:177 +#: src/lib/lex.c:698 src/lib/lex.c:755 #, c-format -msgid "" -"\n" -"Device %s is %s:\n" -" Volume: %s\n" -" Pool: %s\n" -" Media type: %s\n" -msgstr "" - -#: src/stored/status.c:182 -msgid "waiting for" +msgid "expected an integer or a range, got %s: %s" msgstr "" -#: src/stored/status.c:182 -msgid "mounted with" +#: src/lib/lex.c:712 src/lib/lex.c:720 src/lib/lex.c:731 src/lib/lex.c:739 +#, c-format +msgid "expected an integer number, got %s: %s" msgstr "" -#: src/stored/status.c:184 -#, fuzzy -msgid "*unknown*" -msgstr "unbekannt" - -#: src/stored/status.c:188 +#: src/lib/lex.c:769 #, c-format -msgid "" -"\n" -"Device %s open but no Bacula volume is currently mounted.\n" +msgid "expected a name, got %s: %s" msgstr "" -#: src/stored/status.c:199 +#: src/lib/lex.c:773 #, c-format -msgid " Total Bytes=%s Blocks=%s Bytes/block=%s\n" +msgid "name %s length %d too long, max is %d\n" msgstr "" -#: src/stored/status.c:214 +#: src/lib/lex.c:781 #, c-format -msgid " Total Bytes Read=%s Blocks Read=%s Bytes/block=%s\n" +msgid "expected a string, got %s: %s" msgstr "" -#: src/stored/status.c:220 -#, c-format -msgid " Positioned at File=%s Block=%s\n" +#: src/lib/bpipe.c:365 src/lib/bpipe.c:448 +msgid "Program killed by Bacula (timeout)\n" msgstr "" -#: src/stored/status.c:227 -#, fuzzy, c-format -msgid "" -"\n" -"Device %s is not open.\n" -msgstr "unbekannt" +#: src/lib/btimers.c:253 +msgid "stop_btimer called with NULL btimer_id\n" +msgstr "" -#: src/stored/status.c:231 +#: src/lib/bsys.c:133 #, fuzzy, c-format -msgid "" -"\n" -"Device \"%s\" is not open or does not exist.\n" -msgstr "unbekannt" +msgid "safe_unlink could not compile regex pattern \"%s\" ERR=%s\n" +msgstr "Konnte regex pattern \"%s\" nicht kompilieren ERR=%s\n" -#: src/stored/status.c:255 +#: src/lib/bsys.c:333 src/lib/bsys.c:350 src/lib/bsys.c:374 src/lib/bsys.c:387 #, c-format -msgid "Daemon started %s. Jobs: run=%d, running=%d.\n" +msgid "Out of memory: ERR=%s\n" msgstr "" -#: src/stored/status.c:293 -msgid "" -"No DEVICE structure.\n" -"\n" +#: src/lib/bsys.c:429 +msgid "Buffer overflow.\n" msgstr "" -#: src/stored/status.c:299 -msgid " Device is BLOCKED. User unmounted.\n" +#: src/lib/bsys.c:495 +msgid "Bad errno" msgstr "" -#: src/stored/status.c:303 -msgid " Device is BLOCKED. User unmounted during wait for media/mount.\n" +#: src/lib/bsys.c:510 +#, c-format +msgid "Memset for %d bytes at %s:%d\n" msgstr "" -#: src/stored/status.c:313 +#: src/lib/bsys.c:540 #, c-format -msgid "" -" Device is BLOCKED waiting for mount of volume \"%s\",\n" -" Pool: %s\n" -" Media type: %s\n" +msgid "Cannot open pid file. %s ERR=%s\n" msgstr "" -#: src/stored/status.c:322 +#: src/lib/bsys.c:555 #, c-format msgid "" -" Device is BLOCKED waiting to create a volume for:\n" -" Pool: %s\n" -" Media type: %s\n" -msgstr "" - -#: src/stored/status.c:333 -msgid " Device is BLOCKED waiting for media.\n" -msgstr "" - -#: src/stored/status.c:339 -msgid " Device is being initialized.\n" -msgstr "" - -#: src/stored/status.c:343 -msgid " Device is blocked labeling a Volume.\n" +"%s is already running. pid=%d\n" +"Check file %s\n" msgstr "" -#: src/stored/status.c:352 +#: src/lib/bsys.c:569 #, c-format -msgid " Slot %d %s loaded in drive %d.\n" +msgid "Could not open pid file. %s ERR=%s\n" msgstr "" -#: src/stored/status.c:356 +#: src/lib/bsys.c:680 #, c-format -msgid " Drive %d is not loaded.\n" +msgid "Could not create state file. %s ERR=%s\n" msgstr "" -#: src/stored/status.c:371 src/stored/btape.c:688 +#: src/lib/bsys.c:699 #, c-format -msgid "Configured device capabilities:\n" +msgid "Write final hdr error: ERR=%s\n" msgstr "" -#: src/stored/status.c:389 -msgid "Device state:\n" -msgstr "" +#: src/lib/bsock.c:111 +#, fuzzy, c-format +msgid "" +"Could not connect to %s on %s:%d. ERR=%s\n" +"Retrying ...\n" +msgstr "Konnte FileSet \"%s\" Eintrag nicht erzeugen. ERR=%s\n" -#: src/stored/status.c:405 -#, c-format -msgid " num_writers=%d reserves=%d block=%d\n" -msgstr "" +#: src/lib/bsock.c:117 +#, fuzzy, c-format +msgid "Unable to connect to %s on %s:%d. ERR=%s\n" +msgstr "Konnte Job Eintrag nicht holen. ERR=%s\n" -#: src/stored/status.c:409 -#, fuzzy -msgid "Attached Jobs: " -msgstr "ist nicht aktiviert" +#: src/lib/bsock.c:193 +#, fuzzy, c-format +msgid "gethostbyname() for host \"%s\" failed: ERR=%s\n" +msgstr "Erzeugung des db Filename Eintrags %s fehlgeschlagen. ERR=%s\n" -#: src/stored/status.c:427 src/stored/btape.c:720 -#, c-format -msgid "Device parameters:\n" -msgstr "" +#: src/lib/bsock.c:225 src/lib/bsock.c:227 +#, fuzzy, c-format +msgid "Socket open error. proto=%d port=%d. ERR=%s\n" +msgstr "Socket Fehler auf %s Kommando: ERR=%s\n" -#: src/stored/status.c:429 -#, c-format -msgid " Archive name: %s Device name: %s\n" -msgstr "" +#: src/lib/bsock.c:240 src/lib/bsock.c:242 +#, fuzzy, c-format +msgid "Source address bind error. proto=%d. ERR=%s\n" +msgstr "Socket Fehler auf %s Kommando: ERR=%s\n" -#: src/stored/status.c:432 +#: src/lib/bsock.c:254 src/lib/bsock.c:293 src/lib/bnet_server.c:212 #, c-format -msgid " File=%u block=%u\n" +msgid "Cannot set SO_KEEPALIVE on socket: %s\n" msgstr "" -#: src/stored/status.c:434 +#: src/lib/bsock.c:262 #, c-format -msgid " Min block=%u Max block=%u\n" +msgid "Cannot set TCP_KEEPIDLE on socket: %s\n" msgstr "" -#: src/stored/status.c:455 -#, c-format -msgid "%s Job %s waiting for Client connection.\n" -msgstr "" +#: src/lib/bsock.c:327 +#, fuzzy, c-format +msgid "Could not init bsock mutex. ERR=%s\n" +msgstr "Konnte job queue nicht initialiseren: ERR=%s\n" -#: src/stored/status.c:471 -#, c-format -msgid "" -"Reading: %s %s job %s JobId=%d Volume=\"%s\"\n" -" pool=\"%s\" device=%s\n" +#: src/lib/bsock.c:364 +msgid "Socket is closed\n" msgstr "" -#: src/stored/status.c:484 +#: src/lib/bsock.c:370 #, c-format -msgid "" -"Writing: %s %s job %s JobId=%d Volume=\"%s\"\n" -" pool=\"%s\" device=%s\n" +msgid "Socket has errors=%d on call to %s:%s:%d\n" msgstr "" -#: src/stored/status.c:495 +#: src/lib/bsock.c:377 #, c-format -msgid " spooling=%d despooling=%d despool_wait=%d\n" +msgid "Socket is terminated=%d on call to %s:%s:%d\n" msgstr "" -#: src/stored/status.c:511 -#, fuzzy, c-format -msgid " Files=%s Bytes=%s AveBytes/sec=%s LastBytes/sec=%s\n" -msgstr " MigTime=%s MigHiBytes=%s MigLoBytes=%s\n" - -#: src/stored/status.c:523 +#: src/lib/bsock.c:385 #, c-format -msgid " FDReadSeqNo=%s in_msg=%u out_msg=%d fd=%d\n" -msgstr "" - -#: src/stored/status.c:529 -msgid " FDSocket closed\n" +msgid "Socket has insane msglen=%d on call to %s:%s:%d\n" msgstr "" -#: src/stored/status.c:550 -msgid "" -"\n" -"Jobs waiting to reserve a drive:\n" +#: src/lib/bsock.c:426 +#, fuzzy, c-format +msgid "Write error sending %d bytes to %s:%s:%d: ERR=%s\n" msgstr "" +"Fehler beim senden des Kommandos Hello an File daemon auf \"%s:%d\". ERR=%s\n" -#: src/stored/status.c:581 -msgid "===================================================================\n" +#: src/lib/bsock.c:432 +#, c-format +msgid "Wrote %d bytes to %s:%s:%d, but only %d accepted.\n" msgstr "" -#: src/stored/status.c:663 src/lib/util.c:423 src/filed/status.c:517 -msgid "Base" +#: src/lib/bsock.c:527 src/lib/bsock.c:588 +#, c-format +msgid "Read expected %d got %d from %s:%s:%d\n" msgstr "" -#: src/stored/status.c:680 src/filed/status.c:534 -msgid "Init Catalog" +#: src/lib/bsock.c:547 +#, c-format +msgid "Packet size=%d too big from \"%s:%s:%d. Terminating connection.\n" msgstr "" -#: src/stored/status.c:683 src/filed/status.c:537 -msgid "Volume to Catalog" -msgstr "" +#: src/lib/bsock.c:577 +#, fuzzy, c-format +msgid "Read error from %s:%s:%d: ERR=%s\n" +msgstr "Socket Fehler auf %s Kommando: ERR=%s\n" -#: src/stored/status.c:686 src/filed/status.c:540 -msgid "Disk to Catalog" -msgstr "" +#: src/lib/bsock.c:651 +#, fuzzy, c-format +msgid "fread attr spool error. Wanted=%d got=%d bytes. ERR=%s\n" +msgstr "Regex Übersetzungsfehler. ERR=%s\n" + +#: src/lib/bsock.c:669 +#, fuzzy +msgid "fread attr spool I/O error.\n" +msgstr "Regex Übersetzungsfehler. ERR=%s\n" -#: src/stored/status.c:689 src/filed/status.c:543 -msgid "Data" +#: src/lib/bsock.c:730 +msgid "Could not malloc BSOCK data buffer\n" msgstr "" -#: src/stored/status.c:695 src/lib/util.c:459 src/filed/status.c:549 -msgid "Unknown Job Level" +#: src/lib/bsock.c:748 src/lib/bsock.c:767 +#, c-format +msgid "sockopt error: %s\n" msgstr "" -#: src/stored/status.c:763 +#: src/lib/bsock.c:754 src/lib/bsock.c:773 #, c-format -msgid "3900 No arg in .status command: %s\n" +msgid "Warning network buffer = %d bytes not max size.\n" msgstr "" -#: src/stored/status.c:811 +#: src/lib/bsock.c:793 src/lib/bsock.c:827 #, fuzzy, c-format -msgid "3900 Unknown arg in .status command: %s\n" -msgstr "unbekannt" +msgid "fcntl F_GETFL error. ERR=%s\n" +msgstr "Regex Übersetzungsfehler. ERR=%s\n" -#: src/stored/status.c:826 -msgid "Bacula Storage: Idle" -msgstr "" +#: src/lib/bsock.c:799 src/lib/bsock.c:833 src/lib/bsock.c:865 +#, fuzzy, c-format +msgid "fcntl F_SETFL error. ERR=%s\n" +msgstr "Regex Übersetzungsfehler. ERR=%s\n" -#: src/stored/status.c:837 -msgid "Bacula Storage: Running" +#: src/lib/bsock.c:1065 src/qt-console/bcomm/dircomm_auth.cpp:107 +#, fuzzy, c-format +msgid "Director authorization problem at \"%s:%d\"\n" +msgstr "Authorisationsproblem: FD an \"%s:%d\" erfordert TLS.\n" + +#: src/lib/bsock.c:1072 src/qt-console/bcomm/dircomm_auth.cpp:114 +#, fuzzy, c-format +msgid "" +"Authorization problem: Remote server at \"%s:%d\" did not advertise required " +"TLS support.\n" msgstr "" +"Authorisationsproblem: Entfernter Server hat benötigte TLS Unterstützung " +"nicht angeboten.\n" -#: src/stored/status.c:851 -msgid "Bacula Storage: Last Job Canceled" +#: src/lib/bsock.c:1080 src/qt-console/bcomm/dircomm_auth.cpp:122 +#, fuzzy, c-format +msgid "" +"Authorization problem with Director at \"%s:%d\": Remote server requires " +"TLS.\n" +msgstr "Authorisationsproblem: Enfernter Server erfordert TLS.\n" + +#: src/lib/bsock.c:1092 src/qt-console/bcomm/dircomm_auth.cpp:133 +#, fuzzy, c-format +msgid "TLS negotiation failed with Director at \"%s:%d\"\n" +msgstr "TLS Aushandlung fehlgeschlagen mit SD an \"%s:%d\"\n" + +#: src/lib/bsock.c:1102 src/qt-console/bcomm/dircomm_auth.cpp:145 +#, c-format +msgid "" +"Bad response to Hello command: ERR=%s\n" +"The Director at \"%s:%d\" is probably not running.\n" msgstr "" -#: src/stored/status.c:855 -msgid "Bacula Storage: Last Job Failed" +#: src/lib/bsock.c:1111 src/qt-console/bcomm/dircomm_auth.cpp:154 +#, fuzzy, c-format +msgid "Director at \"%s:%d\" rejected Hello command\n" +msgstr "File daemon auf \"%s:%d\" hat Hello Kommando abgelehnt\n" + +#: src/lib/bsock.c:1121 src/qt-console/bcomm/dircomm_auth.cpp:169 +#, fuzzy, c-format +msgid "" +"Authorization problem with Director at \"%s:%d\"\n" +"Most likely the passwords do not agree.\n" +"If you are using TLS, there may have been a certificate validation error " +"during the TLS handshake.\n" +"Please see " msgstr "" +"Kann mit File daemon on \"%s:%d\" nicht authentisieren. Mögliche Ursachen:\n" +"Passworte oder Namen nicht gleich oder\n" +"Maximum Concurrent Jobs überschritten auf dem FD oder\n" +"FD Netzwerk durcheinander (Daemon neustarten).\n" +"Für Hilfe bitte unter http://www.bacula.org/rel-manual/faq." +"html#AuthorizationErrors nachsehen.\n" -#: src/stored/status.c:859 -msgid "Bacula Storage: Last Job had Warnings" +#: src/lib/parse_conf.c:165 +msgid "***UNKNOWN***" msgstr "" -#: src/stored/read_record.c:89 +#: src/lib/parse_conf.c:213 src/dird/dird_conf.c:1431 +#: src/qt-console/tray-monitor/tray_conf.cpp:282 #, c-format -msgid "End of Volume at file %u on device %s, Volume \"%s\"\n" +msgid "Too many items in %s resource\n" +msgstr "zu viele items in %s resource\n" + +#: src/lib/parse_conf.c:266 src/lib/parse_conf.c:287 +#, c-format +msgid "expected an =, got: %s" msgstr "" -#: src/stored/read_record.c:93 -msgid "End of all volumes.\n" +#: src/lib/parse_conf.c:296 +#, c-format +msgid "Unknown item code: %d\n" msgstr "" -#: src/stored/read_record.c:137 -msgid "part" +#: src/lib/parse_conf.c:336 +#, c-format +msgid "message type: %s not found" msgstr "" -#: src/stored/read_record.c:140 -msgid "file" +#: src/lib/parse_conf.c:374 +#, c-format +msgid "Attempt to redefine name \"%s\" to \"%s\"." msgstr "" -#: src/stored/read_record.c:143 +#: src/lib/parse_conf.c:466 src/dird/dird_conf.c:1896 #, c-format -msgid "End of %s %u on device %s, Volume \"%s\"\n" +msgid "Could not find config Resource %s referenced on line %d : %s\n" msgstr "" +"Konnte config Resource %s , referenziert in Zeile %d : %s nicht finden\n" -#: src/stored/read_record.c:158 -msgid "Did fsr in attemp to skip bad record.\n" +#: src/lib/parse_conf.c:471 +#, c-format +msgid "Attempt to redefine resource \"%s\" referenced on line %d : %s\n" msgstr "" -#: src/stored/read_record.c:397 +#: src/lib/parse_conf.c:507 #, c-format -msgid "Forward spacing Volume \"%s\" to file:block %u:%u.\n" +msgid "Too many %s directives. Max. is %d. line %d: %s\n" msgstr "" -#: src/stored/read_record.c:421 -msgid "Begin Session" +#: src/lib/parse_conf.c:518 +#, c-format +msgid "Could not find config Resource \"%s\" referenced on line %d : %s\n" msgstr "" -#: src/stored/read_record.c:425 -msgid "End Session" +#: src/lib/parse_conf.c:581 +#, c-format +msgid "Missing config Resource \"%s\" referenced on line %d : %s\n" msgstr "" -#: src/stored/read_record.c:431 +#: src/lib/parse_conf.c:653 #, c-format -msgid "Unknown code %d\n" +msgid "expected a size number, got: %s" msgstr "" -#: src/stored/bextract.c:80 +#: src/lib/parse_conf.c:658 #, fuzzy, c-format -msgid "" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: bextract \n" -" -b specify a bootstrap file\n" -" -c specify a Storage configuration file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -e exclude list\n" -" -i include list\n" -" -p proceed inspite of I/O errors\n" -" -v verbose\n" -" -V specify Volume names (separated by |)\n" -" -? print this message\n" -"\n" +msgid "expected a speed number, got: %s" +msgstr "Dateiname erwartet, erhalten: %s" + +#: src/lib/parse_conf.c:669 +#, fuzzy, c-format +msgid "expected a %s, got: %s" +msgstr "Erwartete ein \"ist gleich\", erhalten: %s" + +#: src/lib/parse_conf.c:670 +msgid "size" msgstr "" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: bacula-fd [-f -s] [-c config_datei] [-d debug_level]\n" -" -c benutze als Konfigurationsdatei\n" -" -dnn setze debug level auf nn\n" -" -f starte in Vordergrund (für debugging)\n" -" -g groupid\n" -" -s no signals (für debugging)\n" -" -t Konfigurationsdatei testen und beenden\n" -" -u userid\n" -" -v Ausführliche Benutzermeldungen\n" -" -? diese Meldung ausgeben.\n" -"\n" -#: src/stored/bextract.c:196 src/stored/bcopy.c:161 src/stored/bscan.c:248 -#: src/tools/bvfs_test.c:201 src/tools/bbatch.c:190 src/tools/ing_test.c:185 -#: src/tools/cats_test.c:321 -msgid "Wrong number of arguments: \n" +#: src/lib/parse_conf.c:670 +msgid "speed" msgstr "" -#: src/stored/bextract.c:218 +#: src/lib/parse_conf.c:724 src/lib/parse_conf.c:730 src/dird/run_conf.c:315 #, c-format -msgid "%d Program Name and/or Program Data Stream records ignored.\n" +msgid "expected a time period, got: %s" msgstr "" -#: src/stored/bextract.c:222 +#: src/lib/parse_conf.c:749 src/lib/parse_conf.c:765 src/lib/ini.c:590 +#: src/dird/dird_conf.c:1874 src/dird/dird_conf.c:1990 #, c-format -msgid "%d Win32 data or Win32 gzip data stream records. Ignored.\n" -msgstr "" +msgid "Expect %s, got: %s" +msgstr "Erwartet: %s, erhalten: %s" -#: src/stored/bextract.c:249 +#: src/lib/parse_conf.c:791 #, c-format -msgid "Cannot stat %s. It must exist. ERR=%s\n" +msgid "Expected a Tape Label keyword, got: %s" msgstr "" -#: src/stored/bextract.c:253 +#: src/lib/parse_conf.c:874 #, c-format -msgid "%s must be a directory.\n" +msgid "Unable to initialize resource lock. ERR=%s\n" msgstr "" -#: src/stored/bextract.c:274 -#, c-format -msgid "%u files restored.\n" +#: src/lib/parse_conf.c:882 +msgid "Config filename too long.\n" msgstr "" -#: src/stored/bextract.c:284 src/stored/bextract.c:290 -#: src/filed/restore.c:1480 +#: src/lib/parse_conf.c:905 #, c-format -msgid "Write error on %s: %s\n" +msgid "Cannot open config file \"%s\": %s\n" msgstr "" -#: src/stored/bextract.c:321 src/stored/bextract.c:587 -msgid "Logic error output file should be open but is not.\n" +#: src/lib/parse_conf.c:922 +msgid "" +"Currently we cannot handle UTF-16 source files. Please convert the conf file " +"to UTF-8\n" msgstr "" -#: src/stored/bextract.c:335 src/filed/restore.c:569 +#: src/lib/parse_conf.c:926 #, c-format -msgid "%s stream not supported on this Client.\n" +msgid "Expected a Resource name identifier, got: %s" msgstr "" -#: src/stored/bextract.c:345 +#: src/lib/parse_conf.c:942 #, c-format -msgid "%s was deleted.\n" +msgid "expected resource name, got: %s" msgstr "" -#: src/stored/bextract.c:393 +#: src/lib/parse_conf.c:953 #, c-format -msgid "Seek error on %s: %s\n" +msgid "not in resource definition: %s" msgstr "" -#: src/stored/bextract.c:429 src/stored/bextract.c:494 -#: src/filed/restore.c:1335 +#: src/lib/parse_conf.c:964 src/dird/inc_conf.c:388 src/dird/inc_conf.c:732 +#: src/dird/dird_conf.c:2050 #, c-format -msgid "Seek to %s error on %s: ERR=%s\n" -msgstr "" +msgid "expected an equals, got: %s" +msgstr "Erwartete ein \"ist gleich\", erhalten: %s" -#: src/stored/bextract.c:448 +#: src/lib/parse_conf.c:978 #, c-format -msgid "Uncompression error. ERR=%d\n" +msgid "" +"Keyword \"%s\" not permitted in this resource.\n" +"Perhaps you left the trailing brace off of the previous resource." msgstr "" -#: src/stored/bextract.c:462 src/filed/restore.c:1450 -msgid "GZIP data stream found, but GZIP not configured!\n" +#: src/lib/parse_conf.c:989 +msgid "Name not specified for resource" msgstr "" -#: src/stored/bextract.c:517 src/filed/restore.c:1376 +#: src/lib/parse_conf.c:999 #, c-format -msgid "Compressed header version error. version=0x%x\n" +msgid "unexpected token %d %s in resource definition" msgstr "" -#: src/stored/bextract.c:522 src/filed/restore.c:1381 +#: src/lib/parse_conf.c:1005 #, c-format -msgid "Compressed header size error. comp_len=%d, msglen=%d\n" +msgid "Unknown parser state %d\n" msgstr "" -#: src/stored/bextract.c:544 +#: src/lib/parse_conf.c:1010 +msgid "End of conf file reached with unclosed resource." +msgstr "" + +#: src/lib/daemon.c:52 #, fuzzy, c-format -msgid "LZO uncompression error. ERR=%d\n" -msgstr "Regex Übersetzungsfehler. ERR=%s\n" +msgid "Cannot fork to become daemon: ERR=%s\n" +msgstr "Kann var context nicht erzeugen: ERR=%s\n" -#: src/stored/bextract.c:556 src/filed/restore.c:1414 +#: src/lib/lockmgr.c:53 #, c-format -msgid "Compression algorithm 0x%x found, but not supported!\n" +msgid "ASSERT failed at %s:%i: %s\n" msgstr "" -#: src/stored/bextract.c:578 -msgid "Got Program Name or Data Stream. Ignored.\n" +#: src/lib/lockmgr.c:58 +#, c-format +msgid "ASSERT failed at %s:%i: %s \n" msgstr "" -#: src/stored/bextract.c:592 src/filed/restore.c:328 src/filed/restore.c:1033 +#: src/lib/lockmgr.c:64 #, c-format -msgid "Unknown stream=%d ignored. This shouldn't happen!\n" +msgid "ASSERT failed at %s:%i: %s (%s)\n" msgstr "" -#: src/stored/bcopy.c:74 +#: src/lib/lockmgr.c:95 #, fuzzy, c-format -msgid "" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: bcopy [-d debug_level] \n" -" -b bootstrap specify a bootstrap file\n" -" -c specify a Storage configuration file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -i specify input Volume names (separated by |)\n" -" -o specify output Volume names (separated by |)\n" -" -p proceed inspite of errors\n" -" -v verbose\n" -" -w specify working directory (default /tmp)\n" -" -? print this message\n" -"\n" +msgid "Mutex lock failure. ERR=%s\n" +msgstr "pthread_cond_wait: ERR=%s\n" + +#: src/lib/lockmgr.c:105 +#, fuzzy, c-format +msgid "Mutex unlock failure. ERR=%s\n" +msgstr "pthread_cond_wait: ERR=%s\n" + +#: src/lib/lockmgr.c:768 +#, fuzzy, c-format +msgid "pthread_create failed: ERR=%s\n" +msgstr "pthread_create: ERR=%s\n" + +#: src/lib/message.c:417 src/lib/message.c:427 +#, c-format +msgid "Could not open console message file %s: ERR=%s\n" +msgstr "" + +#: src/lib/message.c:432 +#, c-format +msgid "Could not get con mutex: ERR=%s\n" +msgstr "" + +#: src/lib/message.c:537 +msgid "Bacula Message" +msgstr "" + +#: src/lib/message.c:541 +#, c-format +msgid "open mail pipe %s failed: ERR=%s\n" msgstr "" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: dird [-f -s] [-c config_file] [-d debug_level] [config_file]\n" -" -c setze Konfigurationsdatei auf Datei\n" -" -dnn setze debug level auf nn\n" -" -f starte im Vordergrund (für debugging Zwecke)\n" -" -g groupid\n" -" -r starte jetzt\n" -" -s no signals\n" -" -t test - Konfiguration Lesen und beenden\n" -" -u userid\n" -" -v ausführliche Benutzer Meldungen\n" -" -? diese Meldung ausgeben.\n" -"\n" -#: src/stored/bcopy.c:202 src/stored/device.c:298 src/stored/btape.c:473 +#: src/lib/message.c:632 +msgid "open mail pipe failed.\n" +msgstr "" + +#: src/lib/message.c:645 #, c-format -msgid "dev open failed: %s\n" +msgid "close error: ERR=%s\n" msgstr "" -#: src/stored/bcopy.c:217 -msgid "Write of last block failed.\n" +#: src/lib/message.c:656 +#, c-format +msgid "Mail prog: %s" msgstr "" -#: src/stored/bcopy.c:221 +#: src/lib/message.c:665 #, c-format -msgid "%u Jobs copied. %u records copied.\n" +msgid "" +"Mail program terminated in error.\n" +"CMD=%s\n" +"ERR=%s\n" msgstr "" -#: src/stored/bcopy.c:238 src/stored/bscan.c:428 +#: src/lib/message.c:770 #, c-format -msgid "Record: SessId=%u SessTim=%u FileIndex=%d Stream=%d len=%u\n" +msgid "fopen %s failed: ERR=%s\n" msgstr "" -#: src/stored/bcopy.c:254 -msgid "Volume is prelabeled. This volume cannot be copied.\n" +#: src/lib/message.c:892 src/lib/message.c:895 +msgid "Msg delivery error: Unable to store data in database.\n" msgstr "" -#: src/stored/bcopy.c:257 -msgid "Volume label not copied.\n" +#: src/lib/message.c:947 +#, c-format +msgid "" +"Msg delivery error: Operator mail program terminated in error.\n" +"CMD=%s\n" +"ERR=%s\n" msgstr "" -#: src/stored/bcopy.c:263 -msgid "Copy skipped. Record does not match BSR filter.\n" +#: src/lib/message.c:968 +#, fuzzy, c-format +msgid "Msg delivery error: fopen %s failed: ERR=%s\n" +msgstr "Catalog Fehler beim Aktualisieren von volume \"%s\". ERR=%s" + +#: src/lib/message.c:1287 +#, c-format +msgid "%s: ABORTING due to ERROR in %s:%d\n" msgstr "" -#: src/stored/bcopy.c:280 src/stored/bcopy.c:288 src/stored/bcopy.c:316 -#: src/stored/btape.c:2756 +#: src/lib/message.c:1291 #, c-format -msgid "Cannot fixup device error. %s\n" +msgid "%s: ERROR TERMINATION at %s:%d\n" msgstr "" -#: src/stored/bcopy.c:294 -msgid "EOM label not copied.\n" +#: src/lib/message.c:1296 +#, c-format +msgid "%s: Fatal Error because: " msgstr "" -#: src/stored/bcopy.c:297 -msgid "EOT label not copied.\n" +#: src/lib/message.c:1298 +#, c-format +msgid "%s: Fatal Error at %s:%d because:\n" msgstr "" -#: src/stored/dvd.c:111 -msgid "No FreeSpace command defined.\n" +#: src/lib/message.c:1302 +#, c-format +msgid "%s: ERROR: " msgstr "" -#: src/stored/dvd.c:145 +#: src/lib/message.c:1304 #, c-format -msgid "Cannot run free space command. Results=%s ERR=%s\n" +msgid "%s: ERROR in %s:%d " msgstr "" -#: src/stored/dvd.c:261 +#: src/lib/message.c:1307 #, c-format -msgid "Error writing part %d to the DVD: ERR=%s\n" +msgid "%s: Warning: " msgstr "" -#: src/stored/dvd.c:263 +#: src/lib/message.c:1310 #, c-format -msgid "Error while writing current part to the DVD: %s" +msgid "%s: Security violation: " msgstr "" -#: src/stored/dvd.c:273 +#: src/lib/message.c:1398 #, c-format -msgid "Part %d (%lld bytes) written to DVD.\n" +msgid "%s ABORTING due to ERROR\n" msgstr "" -#: src/stored/dvd.c:292 +#: src/lib/message.c:1401 #, c-format -msgid "Remaining free space %s on %s\n" +msgid "%s ERROR TERMINATION\n" msgstr "" -#: src/stored/dvd.c:358 +#: src/lib/message.c:1404 #, c-format -msgid "Next Volume part already exists on DVD. Cannot continue: %s\n" +msgid "%s JobId %u: Fatal error: " msgstr "" -#: src/stored/dvd.c:563 +#: src/lib/message.c:1413 #, c-format -msgid "" -"Error writing. Current part less than total number of parts (%d/%d, device=" -"%s)\n" +msgid "%s JobId %u: Error: " msgstr "" -#: src/stored/dvd.c:570 +#: src/lib/message.c:1419 #, c-format -msgid "Unable to write last on %s: ERR=%s\n" +msgid "%s JobId %u: Warning: " msgstr "" -#: src/stored/butil.c:59 -msgid "Nohdr," +#: src/lib/message.c:1425 +#, c-format +msgid "%s JobId %u: Security violation: " msgstr "" -#: src/stored/butil.c:62 -msgid "partial," +#: src/lib/message.c:1696 +msgid "Debug lock information" msgstr "" -#: src/stored/butil.c:65 -msgid "empty," +#: src/lib/message.c:1697 +msgid "Debug network information" msgstr "" -#: src/stored/butil.c:68 -msgid "Nomatch," +#: src/lib/message.c:1698 +msgid "Debug plugin information" msgstr "" -#: src/stored/butil.c:71 -msgid "cont," +#: src/lib/message.c:1699 +msgid "Debug volume information" msgstr "" -#: src/stored/butil.c:148 -msgid "Volume name or names is too long. Please use a .bsr file.\n" +#: src/lib/message.c:1700 +msgid "Debug SQL queries" msgstr "" -#: src/stored/butil.c:168 -#, c-format -msgid "Cannot find device \"%s\" in config file %s.\n" +#: src/lib/message.c:1701 +msgid "Debug BVFS queries" msgstr "" -#: src/stored/butil.c:175 -#, c-format -msgid "Cannot init device %s\n" +#: src/lib/message.c:1702 +msgid "Debug memory allocation" msgstr "" -#: src/stored/butil.c:195 -#, c-format -msgid "Cannot open %s\n" +#: src/lib/message.c:1703 +msgid "Debug scheduler information" msgstr "" -#: src/stored/butil.c:282 -#, c-format -msgid "Could not find device \"%s\" in config file %s.\n" +#: src/lib/message.c:1704 +msgid "Debug protocol information" msgstr "" -#: src/stored/butil.c:287 +#: src/lib/message.c:1705 +msgid "Debug all information" +msgstr "" + +#: src/lib/edit.c:476 +msgid "Empty name not allowed.\n" +msgstr "" + +#: src/lib/edit.c:486 #, c-format -msgid "Using device: \"%s\" for reading.\n" +msgid "Illegal character \"%c\" in name.\n" +msgstr "" + +#: src/lib/edit.c:493 +msgid "Name too long.\n" +msgstr "" + +#: src/lib/edit.c:499 src/dird/ua_label.c:656 src/dird/ua_cmds.c:345 +msgid "Volume name must be at least one character long.\n" msgstr "" -#: src/stored/butil.c:290 +#: src/lib/tls.c:78 #, c-format -msgid "Using device: \"%s\" for writing.\n" +msgid "" +"Error with certificate at depth: %d, issuer = %s, subject = %s, ERR=%d:%s\n" msgstr "" -#: src/stored/butil.c:306 -msgid "Unexpected End of Data\n" +#: src/lib/tls.c:115 +msgid "Error initializing SSL context" msgstr "" -#: src/stored/butil.c:308 -msgid "Unexpected End of Tape\n" +#: src/lib/tls.c:136 +msgid "Error loading certificate verification stores" msgstr "" -#: src/stored/butil.c:310 -msgid "Unexpected End of File\n" +#: src/lib/tls.c:141 +msgid "" +"Either a certificate file or a directory must be specified as a verification " +"store\n" msgstr "" -#: src/stored/butil.c:312 -msgid "Tape Door is Open\n" +#: src/lib/tls.c:152 +msgid "Error loading certificate file" msgstr "" -#: src/stored/butil.c:314 -msgid "Unexpected Tape is Off-line\n" +#: src/lib/tls.c:160 +msgid "Error loading private key" msgstr "" -#: src/stored/acquire.c:74 -#, c-format -msgid "Acquire read: num_writers=%d not zero. Job %d canceled.\n" +#: src/lib/tls.c:168 +msgid "Unable to open DH parameters file" msgstr "" -#: src/stored/acquire.c:83 -#, fuzzy, c-format -msgid "No volumes specified for reading. Job %s canceled.\n" -msgstr "Weder storage noch Pool in Job \"%s\" definiert.\n" +#: src/lib/tls.c:174 +msgid "Unable to load DH parameters from specified file" +msgstr "" -#: src/stored/acquire.c:92 -#, c-format -msgid "Logic error: no next volume to read. Numvol=%d Curvol=%d\n" +#: src/lib/tls.c:178 +msgid "Failed to set TLS Diffie-Hellman parameters" msgstr "" -#: src/stored/acquire.c:118 -#, c-format -msgid "" -"Changing read device. Want Media Type=\"%s\" have=\"%s\"\n" -" device=%s\n" +#: src/lib/tls.c:188 +msgid "Error setting cipher list, no valid ciphers available\n" msgstr "" -#: src/stored/acquire.c:162 -#, c-format -msgid "Media Type change. New read device %s chosen.\n" +#: src/lib/tls.c:247 +msgid "Peer failed to present a TLS certificate\n" msgstr "" -#: src/stored/acquire.c:174 +#: src/lib/tls.c:292 src/lib/tls.c:293 #, c-format -msgid "No suitable device found to read Volume \"%s\"\n" +msgid "Peer %s failed to present a TLS certificate\n" msgstr "" -#: src/stored/acquire.c:213 -#, c-format -msgid "Job %s canceled.\n" +#: src/lib/tls.c:408 +msgid "Error creating file descriptor-based BIO" msgstr "" -#: src/stored/acquire.c:231 -#, c-format -msgid "Read open device %s Volume \"%s\" failed: ERR=%s\n" +#: src/lib/tls.c:419 +msgid "Error creating new SSL object" msgstr "" -#: src/stored/acquire.c:321 -#, c-format -msgid "Too many errors trying to mount device %s for reading.\n" +#: src/lib/tls.c:483 src/lib/tls.c:506 +msgid "Connect failure" msgstr "" -#: src/stored/acquire.c:329 -#, c-format -msgid "Ready to read from volume \"%s\" on device %s.\n" +#: src/lib/tls.c:586 src/lib/tls.c:590 +msgid "TLS shutdown failure." +msgstr "" + +#: src/lib/tls.c:645 src/lib/tls.c:671 +msgid "TLS read/write failure." msgstr "" -#: src/stored/acquire.c:381 +#: src/lib/priv.c:56 #, c-format -msgid "Want to append, but device %s is busy reading.\n" +msgid "Could not find userid=%s: ERR=%s\n" msgstr "" -#: src/stored/acquire.c:414 +#: src/lib/priv.c:62 #, c-format -msgid "Could not ready device %s for append.\n" +msgid "Could not find password entry. ERR=%s\n" msgstr "" -#: src/stored/acquire.c:501 src/stored/spool.c:321 src/stored/block.c:386 -#: src/stored/block.c:769 src/stored/block.c:847 +#: src/lib/priv.c:75 #, c-format -msgid "Could not create JobMedia record for Volume=\"%s\" Job=%s\n" +msgid "Could not find group=%s: ERR=%s\n" msgstr "" -#: src/stored/acquire.c:552 +#: src/lib/priv.c:83 #, c-format -msgid "Alert: %s" +msgid "Could not initgroups for group=%s, userid=%s: ERR=%s\n" msgstr "" -#: src/stored/acquire.c:560 +#: src/lib/priv.c:86 #, c-format -msgid "3997 Bad alert command: %s: ERR=%s.\n" +msgid "Could not initgroups for userid=%s: ERR=%s\n" msgstr "" -#: src/stored/acquire.c:629 src/stored/dev.c:270 src/stored/dev.c:311 -#: src/lib/openssl.c:122 src/lib/openssl.c:181 +#: src/lib/priv.c:93 #, c-format -msgid "Unable to init mutex: ERR=%s\n" +msgid "Could not set group=%s: ERR=%s\n" msgstr "" -#: src/stored/acquire.c:635 +#: src/lib/priv.c:103 #, fuzzy, c-format -msgid "Unable to init r_mutex: ERR=%s\n" -msgstr "Kann DB lock nicht initialisieren. ERR=%s\n" +msgid "prctl failed: ERR=%s\n" +msgstr "pthread_create: ERR=%s\n" -#: src/stored/askdir.c:179 -msgid "Network error on bnet_recv in req_vol_info.\n" -msgstr "" +#: src/lib/priv.c:107 +#, fuzzy, c-format +msgid "setreuid failed: ERR=%s\n" +msgstr "Abfrage gescheitert: %s: ERR=%s\n" -#: src/stored/askdir.c:197 -#, c-format -msgid "Error getting Volume info: %s" +#: src/lib/priv.c:111 +#, fuzzy, c-format +msgid "cap_from_text failed: ERR=%s\n" +msgstr "pthread_create: ERR=%s\n" + +#: src/lib/priv.c:115 +#, fuzzy, c-format +msgid "cap_set_proc failed: ERR=%s\n" +msgstr "Media id select fehlgeschlagen: ERR=%s\n" + +#: src/lib/priv.c:119 +msgid "Keep readall caps not implemented this OS or missing libraries.\n" msgstr "" -#: src/stored/askdir.c:376 +#: src/lib/priv.c:123 #, c-format -msgid "Didn't get vol info vol=%s: ERR=%s" +msgid "Could not set specified userid: %s\n" msgstr "" -#: src/stored/askdir.c:432 +#: src/lib/res.c:53 #, c-format -msgid "Error creating JobMedia record: ERR=%s\n" +msgid "rwl_writelock failure at %s:%d: ERR=%s\n" msgstr "" -#: src/stored/askdir.c:439 +#: src/lib/res.c:63 #, c-format -msgid "Error creating JobMedia record: %s\n" +msgid "rwl_writeunlock failure at %s:%d:. ERR=%s\n" msgstr "" -#: src/stored/askdir.c:522 +#: src/lib/watchdog.c:84 #, c-format -msgid "Job %s canceled while waiting for mount on Storage Device \"%s\".\n" +msgid "Unable to initialize watchdog lock. ERR=%s\n" msgstr "" -#: src/stored/askdir.c:533 -#, c-format -msgid "" -"Job %s is waiting. Cannot find any appendable volumes.\n" -"Please use the \"label\" command to create a new Volume for:\n" -" Storage: %s\n" -" Pool: %s\n" -" Media type: %s\n" +#: src/lib/watchdog.c:181 +msgid "BUG! register_watchdog called before start_watchdog\n" msgstr "" -#: src/stored/askdir.c:558 src/stored/askdir.c:658 +#: src/lib/watchdog.c:184 #, c-format -msgid "Max time exceeded waiting to mount Storage Device %s for Job %s\n" +msgid "BUG! Watchdog %p has NULL callback\n" msgstr "" -#: src/stored/askdir.c:568 -msgid "pthread error in mount_next_volume.\n" +#: src/lib/watchdog.c:187 +#, c-format +msgid "BUG! Watchdog %p has zero interval\n" msgstr "" -#: src/stored/askdir.c:601 -msgid "Cannot request another volume: no volume name given.\n" +#: src/lib/watchdog.c:207 +msgid "BUG! unregister_watchdog_unlocked called before start_watchdog\n" msgstr "" -#: src/stored/askdir.c:607 +#: src/lib/watchdog.c:327 #, c-format -msgid "Job %s canceled while waiting for mount on Storage Device %s.\n" +msgid "rwl_writelock failure. ERR=%s\n" msgstr "" -#: src/stored/askdir.c:624 +#: src/lib/watchdog.c:342 #, c-format -msgid "" -"Please mount append Volume \"%s\" or label a new one for:\n" -" Job: %s\n" -" Storage: %s\n" -" Pool: %s\n" -" Media type: %s\n" +msgid "rwl_writeunlock failure. ERR=%s\n" msgstr "" -#: src/stored/askdir.c:630 +#: src/lib/ini.c:94 src/lib/ini.c:106 #, c-format msgid "" -"Please mount read Volume \"%s\" for:\n" -" Job: %s\n" -" Storage: %s\n" -" Pool: %s\n" -" Media type: %s\n" +"Config file error: %s\n" +" : Line %d, col %d of file %s\n" +"%s\n" msgstr "" -#: src/stored/askdir.c:668 -msgid "pthread error in mount_volume\n" +#: src/lib/ini.c:297 src/lib/ini.c:372 +#, fuzzy, c-format +msgid "Cannot open config file %s: %s\n" +msgstr "Kann inkludierte Datei nicht öffnen: %s. ERR=%s\n" + +#: src/lib/bget_msg.c:85 +msgid "Status OK\n" msgstr "" -#: src/stored/record.c:75 +#: src/lib/bget_msg.c:89 #, fuzzy, c-format -msgid "unknown: %d" +msgid "bget_msg: unknown signal %d\n" msgstr "unbekannt" -#: src/stored/record.c:392 -msgid "Damaged buffer\n" -msgstr "" - -#: src/stored/record.c:670 +#: src/lib/address_conf.c:50 #, c-format -msgid "Sanity check failed. maxlen=%d datalen=%d. Block discarded.\n" -msgstr "" - -#: src/stored/read.c:65 -msgid "No Volume names found for restore.\n" +msgid "Only ipv4 and ipv6 are supported (%d)\n" msgstr "" -#: src/stored/read.c:120 +#: src/lib/address_conf.c:54 #, c-format -msgid ">filed: Error Hdr=%s\n" +msgid "Only ipv4 is supported (%d)\n" msgstr "" -#: src/stored/read.c:121 src/stored/read.c:136 +#: src/lib/address_conf.c:169 #, c-format -msgid "Error sending to File daemon. ERR=%s\n" +msgid "You tried to assign a ipv6 address to an ipv4(%d)\n" msgstr "" -#: src/stored/read.c:135 +#: src/lib/address_conf.c:178 #, c-format -msgid "Error sending to FD. ERR=%s\n" +msgid "You tried to assign an ipv4 address to an ipv6(%d)\n" msgstr "" -#: src/stored/autochanger.c:65 +#: src/lib/address_conf.c:261 #, c-format -msgid "No Changer Name given for device %s. Cannot continue.\n" +msgid "Can't add default IPv4 address (%s)\n" msgstr "" -#: src/stored/autochanger.c:71 -#, c-format -msgid "No Changer Command given for device %s. Cannot continue.\n" +#: src/lib/address_conf.c:292 +msgid "" +"Old style addresses cannot be mixed with new style. Try removing Port=nnn." msgstr "" -#: src/stored/autochanger.c:139 +#: src/lib/address_conf.c:314 +#, fuzzy, c-format +msgid "Cannot resolve service(%s)" +msgstr "Kann Console resource %s nicht finden\n" + +#: src/lib/address_conf.c:324 #, c-format -msgid "No slot defined in catalog (slot=%d) for Volume \"%s\" on %s.\n" +msgid "Cannot resolve hostname(%s) %s" msgstr "" -#: src/stored/autochanger.c:141 -msgid "Cartridge change or \"update slots\" may be required.\n" -msgstr "" +#: src/lib/address_conf.c:432 src/lib/address_conf.c:465 +#, fuzzy, c-format +msgid "Expected a block to begin with { but got: %s" +msgstr "wild-card Ausdruck erwartet, erhalten: %s\n" -#: src/stored/autochanger.c:147 -#, c-format -msgid "No \"Changer Device\" for %s. Manual load of Volume may be required.\n" +#: src/lib/address_conf.c:437 +msgid "Empty addr block is not allowed" msgstr "" -#: src/stored/autochanger.c:154 -#, c-format -msgid "No \"Changer Command\" for %s. Manual load of Volume may be requird.\n" -msgstr "" +#: src/lib/address_conf.c:441 +#, fuzzy, c-format +msgid "Expected a string but got: %s" +msgstr "regulären Ausdruck erwartet, erhalten: %s\n" -#: src/stored/autochanger.c:185 -#, c-format -msgid "3304 Issuing autochanger \"load slot %d, drive %d\" command.\n" -msgstr "" +#: src/lib/address_conf.c:452 +#, fuzzy, c-format +msgid "Expected a string [ip|ipv4|ipv6] but got: %s" +msgstr "regulären Ausdruck erwartet, erhalten: %s\n" -#: src/stored/autochanger.c:193 -#, c-format -msgid "3305 Autochanger \"load slot %d, drive %d\", status is OK.\n" -msgstr "" +#: src/lib/address_conf.c:456 +#, fuzzy, c-format +msgid "Expected a string [ip|ipv4] but got: %s" +msgstr "regulären Ausdruck erwartet, erhalten: %s\n" -#: src/stored/autochanger.c:206 -#, c-format -msgid "" -"3992 Bad autochanger \"load slot %d, drive %d\": ERR=%s.\n" -"Results=%s\n" -msgstr "" +#: src/lib/address_conf.c:461 +#, fuzzy, c-format +msgid "Expected an equal = but got: %s" +msgstr "Erwartete ein \"ist gleich\", erhalten: %s" -#: src/stored/autochanger.c:268 -#, c-format -msgid "3301 Issuing autochanger \"loaded? drive %d\" command.\n" -msgstr "" +#: src/lib/address_conf.c:472 +#, fuzzy, c-format +msgid "Expected an identifier [addr|port] but got: %s" +msgstr "Dateiname erwartet, erhalten: %s" -#: src/stored/autochanger.c:280 -#, c-format -msgid "3302 Autochanger \"loaded? drive %d\", result is Slot %d.\n" +#: src/lib/address_conf.c:477 +msgid "Only one port per address block" msgstr "" -#: src/stored/autochanger.c:287 -#, c-format -msgid "3302 Autochanger \"loaded? drive %d\", result: nothing loaded.\n" +#: src/lib/address_conf.c:483 +msgid "Only one addr per address block" msgstr "" -#: src/stored/autochanger.c:299 +#: src/lib/address_conf.c:487 +#, fuzzy, c-format +msgid "Expected a identifier [addr|port] but got: %s" +msgstr "Dateiname erwartet, erhalten: %s" + +#: src/lib/address_conf.c:491 #, c-format -msgid "" -"3991 Bad autochanger \"loaded? drive %d\" command: ERR=%s.\n" -"Results=%s\n" +msgid "Expected a equal =, got: %s" msgstr "" -#: src/stored/autochanger.c:316 +#: src/lib/address_conf.c:499 #, fuzzy, c-format -msgid "Lock failure on autochanger. ERR=%s\n" -msgstr "pthread_cond_wait: ERR=%s\n" +msgid "Expected a number or a string but got: %s" +msgstr "regulären Ausdruck erwartet, erhalten: %s\n" -#: src/stored/autochanger.c:330 +#: src/lib/address_conf.c:505 #, fuzzy, c-format -msgid "Unlock failure on autochanger. ERR=%s\n" -msgstr "pthread_cond_wait: ERR=%s\n" +msgid "Expected an IP number or a hostname but got: %s" +msgstr "Dateiname erwartet, erhalten: %s" -#: src/stored/autochanger.c:374 src/stored/autochanger.c:523 -#, c-format -msgid "3307 Issuing autochanger \"unload slot %d, drive %d\" command.\n" +#: src/lib/address_conf.c:511 +msgid "State machine missmatch" msgstr "" -#: src/stored/autochanger.c:387 +#: src/lib/address_conf.c:517 +#, fuzzy, c-format +msgid "Expected a end of block with } but got: %s" +msgstr "Erwartet: %s, erhalten: %s" + +#: src/lib/address_conf.c:523 #, c-format -msgid "" -"3995 Bad autochanger \"unload slot %d, drive %d\": ERR=%s\n" -"Results=%s\n" +msgid "Cannot add hostname(%s) and port(%s) to addrlist (%s)" msgstr "" -#: src/stored/autochanger.c:473 +#: src/lib/address_conf.c:529 +#, fuzzy, c-format +msgid "Expected an end of block with } but got: %s" +msgstr "Erwartet: %s, erhalten: %s" + +#: src/lib/address_conf.c:538 #, c-format -msgid "Volume \"%s\" wanted on %s is in use by device %s\n" +msgid "Expected an IP number or a hostname, got: %s" msgstr "" -#: src/stored/autochanger.c:541 +#: src/lib/address_conf.c:543 src/lib/address_conf.c:557 #, c-format -msgid "3997 Bad autochanger \"unload slot %d, drive %d\": ERR=%s.\n" +msgid "Cannot add port (%s) to (%s)" msgstr "" -#: src/stored/autochanger.c:585 +#: src/lib/address_conf.c:552 #, c-format -msgid "3993 Device %s not an autochanger device.\n" +msgid "Expected a port number or string, got: %s" msgstr "" -#: src/stored/autochanger.c:612 -#, c-format -msgid "3306 Issuing autochanger \"%s\" command.\n" +#: src/lib/crypto.c:430 +msgid "Unable to open certificate file" msgstr "" -#: src/stored/autochanger.c:615 -msgid "3996 Open bpipe failed.\n" +#: src/lib/crypto.c:437 +msgid "Unable to read certificate from file" msgstr "" -#: src/stored/autochanger.c:642 src/console/console.c:1458 -#, c-format -msgid "Autochanger error: ERR=%s\n" +#: src/lib/crypto.c:443 +msgid "Unable to extract public key from certificate" msgstr "" -#: src/stored/stored.c:87 -#, fuzzy, c-format +#: src/lib/crypto.c:450 msgid "" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: bacula-sd [options] [-c config_file] [config_file]\n" -" -c use as configuration file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -f run in foreground (for debugging)\n" -" -g set groupid to group\n" -" -m print kaboom output (for debugging)\n" -" -p proceed despite I/O errors\n" -" -s no signals (for debugging)\n" -" -t test - read config and exit\n" -" -u userid to \n" -" -v verbose user messages\n" -" -? print this message.\n" -"\n" +"Provided certificate does not include the required subjectKeyIdentifier " +"extension." msgstr "" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: bacula-fd [-f -s] [-c config_datei] [-d debug_level]\n" -" -c benutze als Konfigurationsdatei\n" -" -dnn setze debug level auf nn\n" -" -f starte in Vordergrund (für debugging)\n" -" -g groupid\n" -" -s no signals (für debugging)\n" -" -t Konfigurationsdatei testen und beenden\n" -" -u userid\n" -" -v Ausführliche Benutzermeldungen\n" -" -? diese Meldung ausgeben.\n" -"\n" -#: src/stored/stored.c:136 src/stored/btape.c:178 +#: src/lib/crypto.c:457 #, c-format -msgid "Tape block size (%d) not multiple of system size (%d)\n" +msgid "Unsupported key type provided: %d\n" msgstr "" -#: src/stored/stored.c:140 src/stored/btape.c:182 -#, c-format -msgid "Tape block size (%d) is not a power of 2\n" +#: src/lib/crypto.c:494 src/lib/crypto.c:542 +msgid "Unable to open private key file" msgstr "" -#: src/stored/stored.c:268 -msgid "Volume Session Time is ZERO!\n" +#: src/lib/crypto.c:524 src/lib/crypto.c:558 +msgid "Unable to read private key from file" msgstr "" -#: src/stored/stored.c:277 +#: src/lib/crypto.c:617 #, c-format -msgid "Unable to create thread. ERR=%s\n" +msgid "Unsupported digest type: %d\n" msgstr "" -#: src/stored/stored.c:310 src/stored/bscan.c:262 -#, c-format -msgid "No Storage resource defined in %s. Cannot continue.\n" +#: src/lib/crypto.c:631 +msgid "OpenSSL digest initialization failed" msgstr "" -#: src/stored/stored.c:316 -#, c-format -msgid "Only one Storage resource permitted in %s\n" +#: src/lib/crypto.c:645 +msgid "OpenSSL digest update failed" msgstr "" -#: src/stored/stored.c:321 -#, c-format -msgid "No Director resource defined in %s. Cannot continue.\n" +#: src/lib/crypto.c:663 +msgid "OpenSSL digest finalize failed" msgstr "" -#: src/stored/stored.c:326 -#, c-format -msgid "No Device resource defined in %s. Cannot continue.\n" +#: src/lib/crypto.c:761 +msgid "OpenSSL digest_new failed" msgstr "" -#: src/stored/stored.c:334 -#, c-format -msgid "No Messages resource defined in %s. Cannot continue.\n" +#: src/lib/crypto.c:767 +msgid "OpenSSL sign get digest failed" msgstr "" -#: src/stored/stored.c:341 src/stored/bscan.c:270 -#, c-format -msgid "No Working Directory defined in %s. Cannot continue.\n" +#: src/lib/crypto.c:806 src/lib/crypto.c:810 +msgid "OpenSSL digest Verify final failed" msgstr "" -#: src/stored/stored.c:363 -#, c-format -msgid "\"TLS Certificate\" file not defined for Storage \"%s\" in %s.\n" -msgstr "" +#: src/lib/crypto.c:815 +#, fuzzy +msgid "No signers found for crypto verify.\n" +msgstr "Keine %ss zum Migrieren gefunden.\n" -#: src/stored/stored.c:369 -#, c-format -msgid "\"TLS Key\" file not defined for Storage \"%s\" in %s.\n" +#: src/lib/crypto.c:876 +msgid "Signature creation failed" msgstr "" -#: src/stored/stored.c:375 -#, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Storage \"%s\" in %s. At least one CA certificate store is required when " -"using \"TLS Verify Peer\".\n" +#: src/lib/crypto.c:954 +msgid "Signature decoding failed" msgstr "" -#: src/stored/stored.c:568 -#, c-format -msgid "Could not initialize %s\n" +#: src/lib/crypto.c:1031 +msgid "Unsupported cipher type specified\n" msgstr "" -#: src/stored/stored.c:582 -#, c-format -msgid "Could not open device %s\n" +#: src/lib/crypto.c:1180 +msgid "CryptoData decoding failed" msgstr "" -#: src/stored/stored.c:596 -#, c-format -msgid "Could not mount device %s\n" +#: src/lib/crypto.c:1224 +msgid "Failure decrypting the session key" msgstr "" -#: src/stored/device.c:120 +#: src/lib/crypto.c:1275 #, c-format -msgid "End of medium on Volume \"%s\" Bytes=%s Blocks=%s at %s.\n" +msgid "Unsupported contentEncryptionAlgorithm: %d\n" msgstr "" -#: src/stored/device.c:139 -#, c-format -msgid "New volume \"%s\" mounted on device %s at %s.\n" +#: src/lib/crypto.c:1285 src/lib/crypto.c:1291 +msgid "OpenSSL cipher context initialization failed" msgstr "" -#: src/stored/device.c:151 -#, c-format -msgid "write_block_to_device Volume label failed. ERR=%s" +#: src/lib/crypto.c:1298 +msgid "Encryption session provided an invalid symmetric key" msgstr "" -#: src/stored/device.c:186 -#, c-format -msgid "write_block_to_device overflow block failed. ERR=%s" +#: src/lib/crypto.c:1304 +msgid "Encryption session provided an invalid IV" msgstr "" -#: src/stored/device.c:191 -#, c-format -msgid "Catastrophic error. Cannot write overflow block to device %s. ERR=%s" +#: src/lib/crypto.c:1310 +msgid "OpenSSL cipher context key/IV initialization failed" msgstr "" -#: src/stored/device.c:327 src/stored/dev.c:512 +#: src/lib/crypto.c:1380 #, c-format -msgid "Unable to open device %s: ERR=%s\n" +msgid "Unable to init OpenSSL threading: ERR=%s\n" msgstr "" -#: src/stored/device.c:329 -#, c-format -msgid "Unable to open archive %s: ERR=%s\n" +#: src/lib/crypto.c:1393 +msgid "Failed to seed OpenSSL PRNG\n" msgstr "" -#: src/stored/fd_cmds.c:166 -#, fuzzy, c-format -msgid "Command error with FD, hanging up. %s\n" -msgstr "Netzwerkfehler mit FD bei %s: ERR=%s\n" +#: src/lib/crypto.c:1419 +msgid "Failed to save OpenSSL PRNG\n" +msgstr "" -#: src/stored/fd_cmds.c:169 -msgid "Command error with FD, hanging up.\n" +#: src/lib/crypto.c:1480 +#, c-format +msgid "Unsupported digest type=%d specified\n" msgstr "" -#: src/stored/fd_cmds.c:180 -#, fuzzy, c-format -msgid "FD command not found: %s\n" -msgstr "Job nicht gefunden: %s\n" +#: src/lib/crypto.c:1500 +#, c-format +msgid "SHA1Update() returned an error: %d\n" +msgstr "" -#: src/stored/fd_cmds.c:206 +#: src/lib/crypto.c:1643 #, fuzzy -msgid "Append data error.\n" +msgid "No error" msgstr "unbekannt" -#: src/stored/fd_cmds.c:211 -msgid "Attempt to append on non-open session.\n" +#: src/lib/crypto.c:1645 +#, fuzzy +msgid "Signer not found" +msgstr "FileSet MD5 Prüfsumme nicht gefunden.\n" + +#: src/lib/crypto.c:1647 +msgid "Recipient not found" msgstr "" -#: src/stored/fd_cmds.c:223 src/stored/fd_cmds.c:266 -msgid "Attempt to close non-open session.\n" +#: src/lib/crypto.c:1649 +msgid "Unsupported digest algorithm" msgstr "" -#: src/stored/fd_cmds.c:241 -msgid "Attempt to open already open session.\n" +#: src/lib/crypto.c:1651 +msgid "Unsupported encryption algorithm" msgstr "" -#: src/stored/fd_cmds.c:295 -msgid "Attempt to read on non-open session.\n" +#: src/lib/crypto.c:1653 +msgid "Signature is invalid" msgstr "" -#: src/stored/fd_cmds.c:313 src/stored/fd_cmds.c:322 -msgid "Attempt to open read on non-open session.\n" +#: src/lib/crypto.c:1655 +msgid "Decryption error" msgstr "" -#: src/stored/mount.c:98 -#, c-format -msgid "Too many errors trying to mount device %s.\n" +#: src/lib/crypto.c:1658 +msgid "Internal error" msgstr "" -#: src/stored/mount.c:106 +#: src/lib/crypto.c:1660 +#, fuzzy +msgid "Unknown error" +msgstr "unbekannt" + +#: src/lib/attr.c:69 #, c-format -msgid "Job %d canceled.\n" +msgid "Error scanning attributes: %s\n" msgstr "" -#: src/stored/mount.c:282 -#, c-format -msgid "Volume \"%s\" previously written, moving to end of data.\n" +#: src/lib/signal.c:56 +msgid "Invalid signal number" msgstr "" -#: src/stored/mount.c:288 +#: src/lib/signal.c:146 src/lib/signal.c:148 #, c-format -msgid "Unable to position to end of data on device %s: ERR=%s\n" +msgid "Bacula interrupted by signal %d: %s\n" msgstr "" -#: src/stored/mount.c:411 src/stored/mount.c:737 +#: src/lib/signal.c:164 #, c-format -msgid "Volume \"%s\" not on device %s.\n" +msgid "Kaboom! %s, %s got signal %d - %s at %s. Attempting traceback.\n" msgstr "" -#: src/stored/mount.c:444 +#: src/lib/signal.c:166 #, c-format -msgid "" -"Director wanted Volume \"%s\".\n" -" Current Volume \"%s\" not acceptable because:\n" -" %s" +msgid "Kaboom! exepath=%s\n" msgstr "" -#: src/stored/mount.c:603 +#: src/lib/signal.c:207 #, c-format -msgid "Ready to append to end of Volume \"%s\" part=%d size=%s\n" +msgid "Fork error: ERR=%s\n" msgstr "" -#: src/stored/mount.c:607 +#: src/lib/signal.c:215 #, c-format -msgid "" -"Bacula cannot write on DVD Volume \"%s\" because: The sizes do not match! " -"Volume=%s Catalog=%s\n" +msgid "Calling: %s %s %s %s\n" msgstr "" -#: src/stored/mount.c:621 +#: src/lib/signal.c:219 #, c-format -msgid "Ready to append to end of Volume \"%s\" at file=%d.\n" +msgid "execv: %s failed: ERR=%s\n" msgstr "" -#: src/stored/mount.c:624 +#: src/lib/signal.c:241 #, c-format -msgid "" -"For Volume \"%s\":\n" -"The number of files mismatch! Volume=%u Catalog=%u\n" -"Correcting Catalog\n" +msgid "It looks like the traceback worked...\n" msgstr "" -#: src/stored/mount.c:631 src/stored/mount.c:659 -#, fuzzy -msgid "Error updating Catalog\n" -msgstr "Fehler beim holen von Zeile: %s\n" - -#: src/stored/mount.c:636 +#: src/lib/signal.c:243 #, c-format -msgid "" -"Bacula cannot write on tape Volume \"%s\" because:\n" -"The number of files mismatch! Volume=%u Catalog=%u\n" +msgid "The btraceback call returned %d\n" msgstr "" -#: src/stored/mount.c:647 +#: src/lib/signal.c:303 #, c-format -msgid "Ready to append to end of Volume \"%s\" size=%s\n" +msgid "BA_NSIG too small (%d) should be (%d)\n" msgstr "" -#: src/stored/mount.c:651 -#, c-format -msgid "" -"For Volume \"%s\":\n" -"The sizes do not match! Volume=%s Catalog=%s\n" -"Correcting Catalog\n" +#: src/lib/signal.c:309 +msgid "UNKNOWN SIGNAL" msgstr "" -#: src/stored/mount.c:664 -#, c-format -msgid "" -"Bacula cannot write on disk Volume \"%s\" because: The sizes do not match! " -"Volume=%s Catalog=%s\n" +#: src/lib/signal.c:310 +msgid "Hangup" msgstr "" -#: src/stored/mount.c:727 -#, c-format -msgid "Labeled new Volume \"%s\" on device %s.\n" +#: src/lib/signal.c:311 +msgid "Interrupt" msgstr "" -#: src/stored/mount.c:732 -#, fuzzy, c-format -msgid "Device %s not configured to autolabel Volumes.\n" -msgstr "TLS benötigt aber nicht konfiguriert in Bacula.\n" +#: src/lib/signal.c:312 +msgid "Quit" +msgstr "" + +#: src/lib/signal.c:313 +msgid "Illegal instruction" +msgstr "" -#: src/stored/mount.c:751 -#, c-format -msgid "Marking Volume \"%s\" in Error in Catalog.\n" +#: src/lib/signal.c:314 +msgid "Trace/Breakpoint trap" msgstr "" -#: src/stored/mount.c:768 -#, c-format -msgid "" -"Autochanger Volume \"%s\" not found in slot %d.\n" -" Setting InChanger to zero in catalog.\n" +#: src/lib/signal.c:315 +msgid "Abort" msgstr "" -#: src/stored/mount.c:787 -msgid "Hey!!!!! WroteVol non-zero !!!!!\n" +#: src/lib/signal.c:317 +msgid "EMT instruction (Emulation Trap)" msgstr "" -#: src/stored/mount.c:834 -#, c-format -msgid "" -"Invalid tape position on volume \"%s\" on device %s. Expected %d, got %d\n" +#: src/lib/signal.c:320 +msgid "IOT trap" msgstr "" -#: src/stored/mount.c:875 src/stored/btape.c:3122 -#, c-format -msgid "Cannot open Dev=%s, Vol=%s\n" +#: src/lib/signal.c:322 +msgid "BUS error" msgstr "" -#: src/stored/mac.c:81 -msgid "Read and write devices not properly initialized.\n" +#: src/lib/signal.c:323 +msgid "Floating-point exception" msgstr "" -#: src/stored/mac.c:87 -#, c-format -msgid "No Volume names found for %s.\n" +#: src/lib/signal.c:324 +msgid "Kill, unblockable" msgstr "" -#: src/stored/pythonsd.c:160 src/filed/pythonfd.c:142 -#, c-format -msgid "Cannot delete attribute %s" +#: src/lib/signal.c:325 +msgid "User-defined signal 1" msgstr "" -#: src/stored/pythonsd.c:193 src/filed/pythonfd.c:160 src/filed/pythonfd.c:176 -#, c-format -msgid "Cannot find attribute %s" +#: src/lib/signal.c:326 +msgid "Segmentation violation" msgstr "" -#: src/stored/pythonsd.c:208 -msgid "Error in ParseTuple\n" +#: src/lib/signal.c:327 +msgid "User-defined signal 2" msgstr "" -#: src/stored/pythonsd.c:224 -msgid "Parse tuple error in job_write\n" +#: src/lib/signal.c:328 +msgid "Broken pipe" msgstr "" -#: src/stored/pythonsd.c:261 -#, c-format -msgid "Error in Python method %s\n" +#: src/lib/signal.c:329 +msgid "Alarm clock" msgstr "" -#: src/stored/spool.c:83 -msgid "Spooling statistics:\n" +#: src/lib/signal.c:330 +msgid "Termination" msgstr "" -#: src/stored/spool.c:86 -#, c-format -msgid "" -"Data spooling: %u active jobs, %s bytes; %u total jobs, %s max bytes/job.\n" +#: src/lib/signal.c:332 +msgid "Stack fault" msgstr "" -#: src/stored/spool.c:94 -#, c-format -msgid "Attr spooling: %u active jobs, %s bytes; %u total jobs, %s max bytes.\n" +#: src/lib/signal.c:334 +msgid "Child status has changed" msgstr "" -#: src/stored/spool.c:112 -msgid "Spooling data ...\n" +#: src/lib/signal.c:335 +msgid "Continue" msgstr "" -#: src/stored/spool.c:138 -#, c-format -msgid "Bad return from despool WroteVol=%d\n" +#: src/lib/signal.c:336 +msgid "Stop, unblockable" msgstr "" -#: src/stored/spool.c:171 -#, c-format -msgid "Open data spool file %s failed: ERR=%s\n" +#: src/lib/signal.c:337 +msgid "Keyboard stop" msgstr "" -#: src/stored/spool.c:225 -msgid "Despooling zero bytes. Your disk is probably FULL!\n" +#: src/lib/signal.c:338 +msgid "Background read from tty" msgstr "" -#: src/stored/spool.c:234 -#, c-format -msgid "Committing spooled data to Volume \"%s\". Despooling %s bytes ...\n" +#: src/lib/signal.c:339 +msgid "Background write to tty" msgstr "" -#: src/stored/spool.c:239 -#, c-format -msgid "Writing spooled data to Volume. Despooling %s bytes ...\n" +#: src/lib/signal.c:340 +msgid "Urgent condition on socket" msgstr "" -#: src/stored/spool.c:339 -#, c-format -msgid "" -"Despooling elapsed time = %02d:%02d:%02d, Transfer rate = %s Bytes/second\n" +#: src/lib/signal.c:341 +msgid "CPU limit exceeded" msgstr "" -#: src/stored/spool.c:348 src/stored/spool.c:549 src/stored/spool.c:595 -#, c-format -msgid "Ftruncate spool file failed: ERR=%s\n" +#: src/lib/signal.c:342 +msgid "File size limit exceeded" msgstr "" -#: src/stored/spool.c:407 -#, c-format -msgid "Spool header read error. ERR=%s\n" +#: src/lib/signal.c:343 +msgid "Virtual alarm clock" msgstr "" -#: src/stored/spool.c:410 -#, c-format -msgid "Spool read error. Wanted %u bytes, got %d\n" +#: src/lib/signal.c:344 +msgid "Profiling alarm clock" msgstr "" -#: src/stored/spool.c:411 -#, c-format -msgid "Spool header read error. Wanted %u bytes, got %d\n" +#: src/lib/signal.c:345 +msgid "Window size change" msgstr "" -#: src/stored/spool.c:418 src/stored/spool.c:419 -#, c-format -msgid "Spool block too big. Max %u bytes, got %u\n" +#: src/lib/signal.c:346 +msgid "I/O now possible" msgstr "" -#: src/stored/spool.c:425 src/stored/spool.c:426 -#, c-format -msgid "Spool data read error. Wanted %u bytes, got %d\n" +#: src/lib/signal.c:348 +msgid "Power failure restart" msgstr "" -#: src/stored/spool.c:480 -#, c-format -msgid "" -"User specified Job spool size reached: JobSpoolSize=%s MaxJobSpoolSize=%s\n" +#: src/lib/signal.c:351 +msgid "No runnable lwp" msgstr "" -#: src/stored/spool.c:485 -#, c-format -msgid "" -"User specified Device spool size reached: DevSpoolSize=%s MaxDevSpoolSize=" -"%s\n" +#: src/lib/signal.c:354 +msgid "SIGLWP special signal used by thread library" msgstr "" -#: src/stored/spool.c:492 -msgid "Bad return from despool in write_block.\n" +#: src/lib/signal.c:357 +msgid "Checkpoint Freeze" msgstr "" -#: src/stored/spool.c:500 -msgid "Spooling data again ...\n" +#: src/lib/signal.c:360 +msgid "Checkpoint Thaw" msgstr "" -#: src/stored/spool.c:532 -#, c-format -msgid "Error writing header to spool file. ERR=%s\n" +#: src/lib/signal.c:363 +msgid "Thread Cancellation" msgstr "" -#: src/stored/spool.c:537 -#, c-format -msgid "" -"Error writing header to spool file. Disk probably full. Attempting recovery. " -"Wanted to write=%d got=%d\n" +#: src/lib/signal.c:366 +msgid "Resource Lost (e.g. record-lock lost)" msgstr "" -#: src/stored/spool.c:555 src/stored/spool.c:601 -msgid "Fatal despooling error." +#: src/lib/berrno.c:51 +msgid "Child exited normally." msgstr "" -#: src/stored/spool.c:563 -msgid "Retrying after header spooling error failed.\n" +#: src/lib/berrno.c:58 +msgid "Unknown error during program execvp" msgstr "" -#: src/stored/spool.c:579 +#: src/lib/berrno.c:61 #, c-format -msgid "Error writing data to spool file. ERR=%s\n" +msgid "Child exited with code %d" msgstr "" -#: src/stored/spool.c:612 -msgid "Retrying after data spooling error failed.\n" +#: src/lib/berrno.c:69 +#, c-format +msgid "Child died from signal %d: %s" msgstr "" -#: src/stored/spool.c:682 -#, fuzzy -msgid "Network error on BlastAttributes.\n" -msgstr " max on device %s\n" +msgid "Runscript: %s returned non-zero status=%d. ERR=%s\n" msgstr "" -#: src/stored/dev.c:251 +#: src/lib/runscript.c:285 src/dird/dird_conf.c:752 +msgid " --> RunScript\n" +msgstr " --> RunScript\n" + +#: src/lib/runscript.c:286 src/dird/dird_conf.c:753 #, c-format -msgid "Block size %u on device %s is too large, using default %u\n" -msgstr "" +msgid " --> Command=%s\n" +msgstr " --> Command=%s\n" -#: src/stored/dev.c:256 +#: src/lib/runscript.c:287 src/dird/dird_conf.c:754 #, c-format -msgid "Max block size %u not multiple of device %s block size=%d.\n" -msgstr "" +msgid " --> Target=%s\n" +msgstr " --> Target=%s\n" -#: src/stored/dev.c:260 +#: src/lib/runscript.c:288 src/dird/dird_conf.c:755 #, c-format -msgid "Max Vol Size < 8 * Max Block Size for device %s\n" -msgstr "" +msgid " --> RunOnSuccess=%u\n" +msgstr " --> RunOnSuccess=%u\n" -#: src/stored/dev.c:276 src/stored/dev.c:282 +#: src/lib/runscript.c:289 src/dird/dird_conf.c:756 #, c-format -msgid "Unable to init cond variable: ERR=%s\n" -msgstr "" +msgid " --> RunOnFailure=%u\n" +msgstr " --> RunOnFailure=%u\n" -#: src/stored/dev.c:288 +#: src/lib/runscript.c:290 src/dird/dird_conf.c:757 #, fuzzy, c-format -msgid "Unable to init spool mutex: ERR=%s\n" -msgstr "Kann DB lock nicht initialisieren. ERR=%s\n" +msgid " --> FailJobOnError=%u\n" +msgstr " --> AbortJobOnError=%u\n" -#: src/stored/dev.c:294 -#, fuzzy, c-format -msgid "Unable to init acquire mutex: ERR=%s\n" -msgstr "Kann DB lock nicht initialisieren. ERR=%s\n" +#: src/lib/runscript.c:291 src/dird/dird_conf.c:758 +#, c-format +msgid " --> RunWhen=%u\n" +msgstr " --> RunWhen=%u\n" -#: src/stored/dev.c:300 -#, fuzzy, c-format -msgid "Unable to init read acquire mutex: ERR=%s\n" -msgstr "Kann DB lock nicht initialisieren. ERR=%s\n" +#: src/lib/cram-md5.c:97 src/lib/cram-md5.c:125 +msgid "1999 Authorization failed.\n" +msgstr "" -#: src/stored/dev.c:416 -msgid "Illegal mode given to open dev.\n" +#: src/lib/smartall.c:133 src/lib/smartall.c:244 src/lib/smartall.c:259 +msgid "Out of memory\n" +msgstr "" + +#: src/lib/smartall.c:138 +msgid "Too much memory used." msgstr "" -#: src/stored/dev.c:551 +#: src/lib/smartall.c:168 #, c-format -msgid "Could not open file device %s. No Volume name given.\n" +msgid "Attempt to free NULL called from %s:%d\n" msgstr "" -#: src/stored/dev.c:574 +#: src/lib/smartall.c:182 #, c-format -msgid "Could not open: %s, ERR=%s\n" +msgid "double free from %s:%d\n" msgstr "" -#: src/stored/dev.c:639 +#: src/lib/smartall.c:190 #, c-format -msgid "No tape loaded or drive offline on %s.\n" +msgid "qp->qnext->qprev != qp called from %s:%d\n" msgstr "" -#: src/stored/dev.c:649 +#: src/lib/smartall.c:194 #, c-format -msgid "Rewind error on %s. ERR=%s.\n" +msgid "qp->qprev->qnext != qp called from %s:%d\n" msgstr "" -#: src/stored/dev.c:659 src/stored/dev.c:737 src/stored/dev.c:878 -#: src/stored/dev.c:1469 +#: src/lib/smartall.c:203 #, c-format -msgid "lseek error on %s. ERR=%s.\n" +msgid "Overrun buffer: len=%d addr=%p allocated: %s:%d called from %s:%d\n" msgstr "" -#: src/stored/dev.c:708 +#: src/lib/smartall.c:281 #, c-format -msgid "Bad call to eod. Device %s not open\n" +msgid "sm_realloc size: %d\n" msgstr "" -#: src/stored/dev.c:775 +#: src/lib/smartall.c:319 #, c-format -msgid "ioctl MTEOM error on %s. ERR=%s.\n" +msgid "sm_realloc %d at %p from %s:%d\n" msgstr "" -#: src/stored/dev.c:785 src/stored/dev.c:919 +#: src/lib/smartall.c:379 #, c-format -msgid "ioctl MTIOCGET error on %s. ERR=%s.\n" +msgid "" +"\n" +"Orphaned buffers exist. Dump terminated following\n" +" discovery of bad links in chain of orphaned buffers.\n" +" Buffer address with bad links: %p\n" msgstr "" -#: src/stored/dev.c:865 -msgid "Bad device call. Device not open\n" +#: src/lib/smartall.c:424 +#, c-format +msgid "Damaged buffer found. Called from %s:%d\n" msgstr "" -#: src/stored/dev.c:877 +#: src/lib/smartall.c:457 #, c-format -msgid "Seek error: ERR=%s\n" +msgid "" +"\n" +"Damaged buffers found at %s:%d\n" msgstr "" -#: src/stored/dev.c:914 -msgid " Bacula status:" +#: src/lib/smartall.c:460 +msgid " discovery of bad prev link.\n" msgstr "" -#: src/stored/dev.c:915 src/stored/dev.c:998 src/stored/dev.c:1000 -#, c-format -msgid " file=%d block=%d\n" +#: src/lib/smartall.c:463 +msgid " discovery of bad next link.\n" msgstr "" -#: src/stored/dev.c:923 -msgid " Device status:" +#: src/lib/smartall.c:466 +msgid " discovery of data overrun.\n" msgstr "" -#: src/stored/dev.c:1022 -msgid "Bad call to load_dev. Device not open\n" +#: src/lib/smartall.c:469 +msgid " NULL pointer.\n" msgstr "" -#: src/stored/dev.c:1033 src/stored/dev.c:1046 +#: src/lib/smartall.c:475 #, c-format -msgid "ioctl MTLOAD error on %s. ERR=%s.\n" +msgid " Buffer address: %p\n" msgstr "" -#: src/stored/dev.c:1077 +#: src/lib/smartall.c:482 #, c-format -msgid "ioctl MTOFFL error on %s. ERR=%s.\n" -msgstr "" - -#: src/stored/dev.c:1118 -msgid "Bad call to fsf. Device not open\n" +msgid "Damaged buffer: %6u bytes allocated at line %d of %s %s\n" msgstr "" -#: src/stored/dev.c:1129 src/stored/dev.c:1256 +#: src/dird/job.c:50 #, c-format -msgid "Device %s at End of Tape.\n" -msgstr "" +msgid "Could not init job queue: ERR=%s\n" +msgstr "Konnte job queue nicht initialiseren: ERR=%s\n" -#: src/stored/dev.c:1160 src/stored/dev.c:1236 +#: src/dird/job.c:82 #, c-format -msgid "ioctl MTFSF error on %s. ERR=%s.\n" -msgstr "" +msgid "Could not add job queue: ERR=%s\n" +msgstr "Konnte job queue nicht hinzufügen: ERR=%s\n" -#: src/stored/dev.c:1207 src/stored/btape.c:1977 +#: src/dird/job.c:121 src/dird/ua_output.c:714 src/dird/xua_output.c:869 +#: src/tools/cats_test.c:363 #, c-format -msgid "read error on %s. ERR=%s.\n" -msgstr "" +msgid "Could not open database \"%s\".\n" +msgstr "Konnte Datenbank \"%s\" nicht öffen.\n" -#: src/stored/dev.c:1285 -msgid "Bad call to bsf. Device not open\n" -msgstr "" +#: src/dird/job.c:135 src/dird/job.c:139 src/dird/job.c:145 +#: src/dird/ua_status.c:367 src/dird/ua_dotcmds.c:831 src/dird/ua_cmds.c:836 +#: src/dird/ua_cmds.c:1589 +msgid "unknown source" +msgstr "unbekannte Quelle" -#: src/stored/dev.c:1291 -#, c-format -msgid "Device %s cannot BSF because it is not a tape.\n" -msgstr "" +#: src/dird/job.c:175 src/dird/job.c:397 src/dird/job.c:399 src/dird/job.c:599 +#: src/dird/job.c:601 src/dird/job.c:1303 src/dird/job.c:1345 +#: src/dird/job.c:1355 +msgid "Job resource" +msgstr "Job Ressource" -#: src/stored/dev.c:1308 +#: src/dird/job.c:177 src/dird/job.c:1038 src/dird/job.c:1300 +#: src/dird/job.c:1347 src/dird/job.c:1363 src/dird/vbackup.c:77 +#: src/dird/mac.c:208 src/dird/mac.c:209 src/dird/backup.c:91 +msgid "Pool resource" +msgstr "Pool Ressource" + +#: src/dird/job.c:222 src/dird/job.c:339 #, c-format -msgid "ioctl MTBSF error on %s. ERR=%s.\n" -msgstr "" +msgid "Unimplemented job type: %d\n" +msgstr "nicht implementierter job Typ: %d\n" -#: src/stored/dev.c:1327 -msgid "Bad call to fsr. Device not open\n" -msgstr "" +#: src/dird/job.c:263 +msgid "Job canceled because max start delay time exceeded.\n" +msgstr "Job abgebrochen, da \"max start delay time\" überschritten wurde.\n" -#: src/stored/dev.c:1337 -#, c-format -msgid "ioctl MTFSR not permitted on %s.\n" -msgstr "" +#: src/dird/job.c:268 +#, fuzzy +msgid "Job canceled because max run sched time exceeded.\n" +msgstr "Job abgebrochen, da \"max start delay time\" überschritten wurde.\n" -#: src/stored/dev.c:1365 -#, c-format -msgid "ioctl MTFSR %d error on %s. ERR=%s.\n" -msgstr "" +#: src/dird/job.c:378 +msgid "Failed to connect to File daemon.\n" +msgstr "Verbindung zu File daemon fehlgeschlagen.\n" -#: src/stored/dev.c:1383 -msgid "Bad call to bsr_dev. Device not open\n" -msgstr "" +#: src/dird/job.c:412 +#, fuzzy +msgid "Failed to select Storage daemon.\n" +msgstr "Verbindung zu Storage daemon fehlgeschlagen.\n" -#: src/stored/dev.c:1393 -#, c-format -msgid "ioctl MTBSR not permitted on %s.\n" -msgstr "" +#: src/dird/job.c:417 src/dird/ua_dotcmds.c:837 src/dird/ua_cmds.c:842 +#: src/dird/ua_cmds.c:1600 src/dird/msgchan.c:69 +msgid "Failed to connect to Storage daemon.\n" +msgstr "Verbindung zu Storage daemon fehlgeschlagen.\n" -#: src/stored/dev.c:1407 -#, c-format -msgid "ioctl MTBSR error on %s. ERR=%s.\n" -msgstr "" +#: src/dird/job.c:512 +#, fuzzy +msgid "canceled" +msgstr "%s Abgebrochen" -#: src/stored/dev.c:1458 -msgid "Bad call to reposition. Device not open\n" -msgstr "" +#: src/dird/job.c:526 +#, fuzzy, c-format +msgid "JobId %s, Job %s marked to be %s.\n" +msgstr "JobId %s, Job %s zum Abbruch markiert.\n" -#: src/stored/dev.c:1537 -msgid "Bad call to weof_dev. Device not open\n" -msgstr "" +#: src/dird/job.c:661 +msgid "Max wait time exceeded. Job canceled.\n" +msgstr "\"Max wait time\" überschritten. Job abgebrochen.\n" -#: src/stored/dev.c:1547 -msgid "Attempt to WEOF on non-appendable Volume\n" -msgstr "" +#: src/dird/job.c:666 +msgid "Max run time exceeded. Job canceled.\n" +msgstr "\"Max run time\" überschritten, Job abgebrochen.\n" -#: src/stored/dev.c:1565 -#, c-format -msgid "ioctl MTWEOF error on %s. ERR=%s.\n" -msgstr "" +#: src/dird/job.c:671 +#, fuzzy +msgid "Max run sched time exceeded. Job canceled.\n" +msgstr "\"Max run time\" überschritten, Job abgebrochen.\n" -#: src/stored/dev.c:1664 +#: src/dird/job.c:793 #, fuzzy, c-format -msgid "unknown func code %d" -msgstr "unbekannt" +msgid "Pool \"%s\" not in database. ERR=%s" +msgstr "Pool %s nicht in der Datenbank. %s" + +#: src/dird/job.c:797 +#, fuzzy, c-format +msgid "Created database record for Pool \"%s\".\n" +msgstr "Erzeuge db Medientyp Eintrag %s fehlgeschlagen: ERR=%s\n" -#: src/stored/dev.c:1670 +#: src/dird/job.c:879 src/dird/job.c:923 #, c-format -msgid "I/O function \"%s\" not supported on this device.\n" +msgid "JobId %d already running. Duplicate job not allowed.\n" msgstr "" -#: src/stored/dev.c:1844 +#: src/dird/job.c:911 #, c-format -msgid "Unable to truncate device %s. ERR=%s\n" +msgid "Cancelling duplicate JobId=%d.\n" msgstr "" -#: src/stored/dev.c:1861 -#, fuzzy, c-format -msgid "Unable to stat device %s. ERR=%s\n" -msgstr "Konnte bootstrap Datei %s nicht erzeugen. ERR=%s\n" +#: src/dird/job.c:946 src/dird/job.c:947 +#, fuzzy +msgid "Run NextPool override" +msgstr "von \"Run pool\" überschrieben" -#: src/stored/dev.c:1875 -#, c-format -msgid "Device %s doesn't support ftruncate(). Recreating file %s.\n" -msgstr "" +#: src/dird/job.c:948 +#, fuzzy +msgid "Storage from Run NextPool override" +msgstr "Storage aus der \"NextPool\" Ressource des Pools." -#: src/stored/dev.c:1887 -#, fuzzy, c-format -msgid "Could not reopen: %s, ERR=%s\n" -msgstr "Kann bootstrap Datei nicht öffnen: %s: ERR=%s\n" +#: src/dird/job.c:952 src/dird/job.c:953 src/dird/job.c:1357 +#, fuzzy +msgid "Job's NextPool resource" +msgstr "\"NextPool\" Ressource des Job Pools" -#: src/stored/dev.c:2010 src/stored/dev.c:2081 -#, c-format -msgid "Device %s cannot be %smounted. ERR=%s\n" -msgstr "" +#: src/dird/job.c:954 +#, fuzzy +msgid "Storage from Job's NextPool resource" +msgstr "Storage aus der \"NextPool\" Ressource des Pools." -#: src/stored/dev.c:2481 -#, c-format -msgid "Unable to set eotmodel on device %s: ERR=%s\n" -msgstr "" +#: src/dird/job.c:962 src/dird/job.c:963 +msgid "Job Pool's NextPool resource" +msgstr "\"NextPool\" Ressource des Job Pools" -#: src/stored/bscan.c:118 -#, c-format -msgid "" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: bscan [ options ] \n" -" -b bootstrap specify a bootstrap file\n" -" -c specify configuration file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -m update media info in database\n" -" -D specify the driver database name (default NULL)\n" -" -n specify the database name (default bacula)\n" -" -u specify database user name (default bacula)\n" -" -P specify database password (default none)\n" -" -h specify database host (default NULL)\n" -" -t specify database port (default 0)\n" -" -p proceed inspite of I/O errors\n" -" -r list records\n" -" -s synchronize or store in database\n" -" -S show scan progress periodically\n" -" -v verbose\n" -" -V specify Volume names (separated by |)\n" -" -w specify working directory (default from conf file)\n" -" -? print this message\n" -"\n" -msgstr "" +#: src/dird/job.c:964 +msgid "Storage from Pool's NextPool resource" +msgstr "Storage aus der \"NextPool\" Ressource des Pools." -#: src/stored/bscan.c:278 -#, c-format -msgid "Working Directory: %s not found. Cannot continue.\n" -msgstr "" +#: src/dird/job.c:995 +#, fuzzy +msgid "Run Pool override" +msgstr "von \"Run pool\" überschrieben" -#: src/stored/bscan.c:282 -#, c-format -msgid "Working Directory: %s is not a directory. Cannot continue.\n" +#: src/dird/job.c:1006 +#, fuzzy +msgid "Run FullPool override" +msgstr "von \"Run FullPool\" überschrieben" + +#: src/dird/job.c:1008 +msgid "Job FullPool override" msgstr "" -#: src/stored/bscan.c:296 src/stored/bscan.c:372 -#, c-format -msgid "First Volume Size = %s\n" +#: src/dird/job.c:1017 +msgid "Run IncPool override" msgstr "" -#: src/stored/bscan.c:302 src/tools/bvfs_test.c:215 src/tools/bbatch.c:201 -#: src/tools/bbatch.c:250 src/tools/ing_test.c:191 -msgid "Could not init Bacula database\n" +#: src/dird/job.c:1019 +msgid "Job IncPool override" msgstr "" -#: src/stored/bscan.c:309 src/tools/bvfs_test.c:224 src/tools/bbatch.c:257 -#: src/tools/ing_test.c:200 -#, c-format -msgid "Using Database: %s, User: %s\n" +#: src/dird/job.c:1028 +msgid "Run DiffPool override" msgstr "" -#: src/stored/bscan.c:343 -#, c-format -msgid "Create JobMedia for Job %s\n" +#: src/dird/job.c:1030 +msgid "Job DiffPool override" msgstr "" -#: src/stored/bscan.c:353 +#: src/dird/job.c:1097 +msgid "FileSet MD5 digest not found.\n" +msgstr "FileSet MD5 Prüfsumme nicht gefunden.\n" + +#: src/dird/job.c:1102 #, c-format -msgid "Could not create JobMedia record for Volume=%s Job=%s\n" -msgstr "" +msgid "Could not create FileSet \"%s\" record. ERR=%s\n" +msgstr "Konnte FileSet \"%s\" Eintrag nicht erzeugen. ERR=%s\n" -#: src/stored/bscan.c:420 +#: src/dird/job.c:1144 #, c-format -msgid "done: %d%%\n" -msgstr "" +msgid "Error updating job record. %s" +msgstr "Fehler beim Aktualisieren des job Eintrags. %s" -#: src/stored/bscan.c:444 -msgid "Volume is prelabeled. This tape cannot be scanned.\n" -msgstr "" +#: src/dird/job.c:1290 +#, fuzzy +msgid "Run pool override" +msgstr "von \"Run pool\" überschrieben" -#: src/stored/bscan.c:456 -#, c-format -msgid "Pool record for %s found in DB.\n" -msgstr "" +#: src/dird/job.c:1295 +#, fuzzy +msgid "Run storage override" +msgstr "Run storage override" -#: src/stored/bscan.c:460 -#, c-format -msgid "VOL_LABEL: Pool record not found for Pool: %s\n" -msgstr "" +#: src/dird/job.c:1366 +#, fuzzy +msgid "Client resource" +msgstr "Pool Ressource" -#: src/stored/bscan.c:466 +#: src/dird/job.c:1422 src/dird/ua_run.c:392 +msgid "No storage specified.\n" +msgstr "Kein storage angegeben.\n" + +#: src/dird/job.c:1583 +#, fuzzy, c-format +msgid "Could not start clone job: \"%s\".\n" +msgstr "Konnte clone job nicht starten.\n" + +#: src/dird/job.c:1586 #, c-format -msgid "VOL_LABEL: PoolType mismatch. DB=%s Vol=%s\n" -msgstr "" +msgid "Clone JobId %d started.\n" +msgstr "Clone JobId %d gestartet.\n" + +#: src/dird/vbackup.c:64 src/dird/mac.c:97 +msgid "Could not get or create a Pool record.\n" +msgstr "Konnte keinen Pool Eintrag holen oder erzeugen.\n" + +#: src/dird/vbackup.c:121 +#, fuzzy, c-format +msgid "Start Virtual Backup JobId %s, Job=%s\n" +msgstr "Start Sicherung JobId %s, Job=%s\n" -#: src/stored/bscan.c:470 -#, c-format -msgid "Pool type \"%s\" is OK.\n" +#: src/dird/vbackup.c:125 +msgid "" +"This Job is not an Accurate backup so is not equivalent to a Full backup.\n" msgstr "" -#: src/stored/bscan.c:480 +#: src/dird/vbackup.c:141 src/dird/ua_dotcmds.c:749 src/dird/ua_restore.c:778 +#: src/dird/ua_restore.c:821 #, c-format -msgid "Media record for %s found in DB.\n" +msgid "Unable to get Job record for JobId=%s: ERR=%s\n" msgstr "" -#: src/stored/bscan.c:487 +#: src/dird/vbackup.c:145 src/dird/ua_restore.c:782 #, c-format -msgid "VOL_LABEL: Media record not found for Volume: %s\n" +msgid "Selecting jobs to build the Full state at %s\n" msgstr "" -#: src/stored/bscan.c:494 -#, c-format -msgid "VOL_LABEL: MediaType mismatch. DB=%s Vol=%s\n" -msgstr "" +#: src/dird/vbackup.c:171 +#, fuzzy +msgid "No valid Jobs found from user selection.\n" +msgstr "Kein Job gefunden für: %s.\n" -#: src/stored/bscan.c:498 -#, c-format -msgid "Media type \"%s\" is OK.\n" -msgstr "" +#: src/dird/vbackup.c:175 +#, fuzzy, c-format +msgid "Using user supplied JobIds=%s\n" +msgstr "Migration benutzt JobId=%s Job=%s\n" -#: src/stored/bscan.c:508 -#, c-format -msgid "VOL_LABEL: OK for Volume: %s\n" +#: src/dird/vbackup.c:194 +msgid "No previous Full found in list, using Differential level\n" msgstr "" -#: src/stored/bscan.c:515 -#, c-format -msgid "%d \"errors\" ignored before first Start of Session record.\n" +#: src/dird/vbackup.c:199 +msgid "No previous Full found in list, using Incremental level\n" msgstr "" -#: src/stored/bscan.c:526 -#, c-format -msgid "SOS_LABEL: Found Job record for JobId: %d\n" -msgstr "" +#: src/dird/vbackup.c:212 +#, fuzzy +msgid "No previous Jobs found.\n" +msgstr "Keinen vorherigen Job zum migrieren gefunden.\n" -#: src/stored/bscan.c:531 -#, c-format -msgid "SOS_LABEL: Job record not found for JobId: %d\n" -msgstr "" +#: src/dird/vbackup.c:235 +#, fuzzy, c-format +msgid "Error getting Job record for previous Job: ERR=%s" +msgstr "Fehler beim Holen des job Eintrags für den job Bericht: %s" -#: src/stored/bscan.c:571 -#, c-format -msgid "SOS_LABEL: VolSessId mismatch for JobId=%u. DB=%d Vol=%d\n" -msgstr "" +#: src/dird/vbackup.c:241 src/dird/mac.c:112 +msgid "Could not get or create the FileSet record.\n" +msgstr "Konnte FileSet Eintrag weder holen noch erzeugen.\n" -#: src/stored/bscan.c:577 -#, c-format -msgid "SOS_LABEL: VolSessTime mismatch for JobId=%u. DB=%d Vol=%d\n" -msgstr "" +#: src/dird/vbackup.c:361 src/dird/admin.c:78 src/dird/mac.c:688 +#: src/dird/backup.c:749 +#, fuzzy, c-format +msgid "Error getting Job record for Job report: ERR=%s" +msgstr "Fehler beim Holen des job Eintrags für den job Bericht: %s" -#: src/stored/bscan.c:583 -#, c-format -msgid "SOS_LABEL: PoolId mismatch for JobId=%u. DB=%d Vol=%d\n" -msgstr "" +#: src/dird/vbackup.c:368 src/dird/backup.c:756 +#, fuzzy, c-format +msgid "Error getting Client record for Job report: ERR=%s" +msgstr "Fehler beim holen des Datensatzes für Volume \"%s\": ERR=%s" -#: src/stored/bscan.c:601 src/stored/bscan.c:1161 +#: src/dird/vbackup.c:374 src/dird/mac.c:718 src/dird/backup.c:762 #, c-format -msgid "Could not find SessId=%d SessTime=%d for EOS record.\n" -msgstr "" +msgid "Error getting Media record for Volume \"%s\": ERR=%s" +msgstr "Fehler beim holen des Datensatzes für Volume \"%s\": ERR=%s" -#: src/stored/bscan.c:647 +#: src/dird/vbackup.c:411 src/dird/restore.c:614 src/dird/admin.c:98 +#: src/dird/backup.c:802 #, c-format -msgid "Could not update job record. ERR=%s\n" -msgstr "" +msgid "Inappropriate term code: %c\n" +msgstr "Unangebrachter Beendigungskode: %c\n" -#: src/stored/bscan.c:658 -#, c-format -msgid "End of all Volumes. VolFiles=%u VolBlocks=%u VolBytes=%s\n" +#: src/dird/vbackup.c:448 +#, fuzzy, c-format +msgid "" +"%s %s %s (%s):\n" +" Build OS: %s %s %s\n" +" JobId: %d\n" +" Job: %s\n" +" Backup Level: Virtual Full\n" +" Client: \"%s\" %s\n" +" FileSet: \"%s\" %s\n" +" Pool: \"%s\" (From %s)\n" +" Catalog: \"%s\" (From %s)\n" +" Storage: \"%s\" (From %s)\n" +" Scheduled time: %s\n" +" Start time: %s\n" +" End time: %s\n" +" Elapsed time: %s\n" +" Priority: %d\n" +" SD Files Written: %s\n" +" SD Bytes Written: %s (%sB)\n" +" Rate: %.1f KB/s\n" +" Volume name(s): %s\n" +" Volume Session Id: %d\n" +" Volume Session Time: %d\n" +" Last Volume Bytes: %s (%sB)\n" +" SD Errors: %d\n" +" SD termination status: %s\n" +" Termination: %s\n" +"\n" msgstr "" +"%s %s (%s): %s\n" +" vorheriges Backup JobId:%s\n" +" neues Backup JobId: %s\n" +" Migration JobId: %s\n" +" Migration Job: %s\n" +" Backup Level: %s%s\n" +" Client: %s\n" +" FileSet: \"%s\" %s\n" +" Lese Pool: \"%s\" (Von %s)\n" +" Lese Storage: \"%s\" (Von %s)\n" +" Schreib Pool: \"%s\" (Von %s)\n" +" Schreib Storage: \"%s\" (Von %s)\n" +" Start Zeit: %s\n" +" End Zeit: %s\n" +" Verstichene Zeit: %s\n" +" Priorität: %d\n" +" SD Dateien geschrieben: %s\n" +" SD Bytes geschrieben: %s (%sB)\n" +" Geschwindigkeit: %.1f KB/s\n" +" Volume name(s): %s\n" +" Volume Session Id: %d\n" +" Volume Session Time: %d\n" +" Last Volume Bytes: %s (%sB)\n" +" SD Fehler: %d\n" +" SD Beendigungsstatus : %s\n" +" Beendigungsstatus: %s\n" +"\n" -#: src/stored/bscan.c:670 -#, c-format -msgid "Could not find Job for SessId=%d SessTime=%d record.\n" +#: src/dird/ua_output.c:57 src/dird/ua_output.c:81 src/dird/xua_output.c:56 +#: src/dird/xua_output.c:80 +msgid "ON or OFF keyword missing.\n" msgstr "" -#: src/stored/bscan.c:701 -#, c-format -msgid "%s file records. At file:blk=%s:%s bytes=%s\n" -msgstr "" +#: src/dird/ua_output.c:101 src/dird/xua_output.c:100 +#, fuzzy +msgid "Disabled Jobs:\n" +msgstr "ist nicht aktiviert" -#: src/stored/bscan.c:766 -#, c-format -msgid "Got MD5 record: %s\n" +#: src/dird/ua_output.c:107 src/dird/xua_output.c:106 +msgid "No disabled Jobs.\n" msgstr "" -#: src/stored/bscan.c:774 -#, c-format -msgid "Got SHA1 record: %s\n" +#: src/dird/ua_output.c:151 +#, fuzzy +msgid "disabled" +msgstr "ist nicht aktiviert" + +#: src/dird/ua_output.c:199 src/dird/xua_output.c:204 +msgid "Keywords for the show command are:\n" msgstr "" -#: src/stored/bscan.c:782 +#: src/dird/ua_output.c:205 src/dird/xua_output.c:211 #, c-format -msgid "Got SHA256 record: %s\n" +msgid "%s resource %s not found.\n" msgstr "" -#: src/stored/bscan.c:790 +#: src/dird/ua_output.c:208 src/dird/xua_output.c:215 #, c-format -msgid "Got SHA512 record: %s\n" +msgid "Resource %s not found\n" msgstr "" -#: src/stored/bscan.c:798 src/stored/bscan.c:805 -msgid "Got signed digest record\n" +#: src/dird/ua_output.c:278 src/dird/xua_output.c:356 +msgid "Hey! DB is NULL\n" msgstr "" -#: src/stored/bscan.c:811 +#: src/dird/ua_output.c:435 src/dird/xua_output.c:590 #, c-format -msgid "Got Prog Names Stream: %s\n" +msgid "Jobid %d used %d Volume(s): %s\n" msgstr "" -#: src/stored/bscan.c:817 -msgid "Got Prog Data Stream record.\n" +#: src/dird/ua_output.c:454 src/dird/xua_output.c:609 +msgid "No Pool specified.\n" msgstr "" -#: src/stored/bscan.c:862 +#: src/dird/ua_output.c:465 src/dird/ua_select.c:531 src/dird/xua_output.c:620 +#: src/dird/ua_update.c:424 #, c-format -msgid "Unknown stream type!!! stream=%d len=%i\n" +msgid "Error obtaining pool ids. ERR=%s\n" msgstr "" -#: src/stored/bscan.c:930 +#: src/dird/ua_output.c:475 src/dird/xua_output.c:630 #, c-format -msgid "Could not create File Attributes record. ERR=%s\n" +msgid "Pool: %s\n" msgstr "" -#: src/stored/bscan.c:936 -#, c-format -msgid "Created File record: %s\n" +#: src/dird/ua_output.c:491 src/dird/xua_output.c:646 +msgid "Ignoring invalid value for days. Max is 50.\n" msgstr "" -#: src/stored/bscan.c:981 +#: src/dird/ua_output.c:513 src/dird/xua_output.c:668 #, c-format -msgid "Could not create media record. ERR=%s\n" +msgid "Unknown list keyword: %s\n" msgstr "" -#: src/stored/bscan.c:985 src/stored/bscan.c:1006 +#: src/dird/ua_output.c:538 src/dird/xua_output.c:693 #, c-format -msgid "Could not update media record. ERR=%s\n" +msgid "%s is not a job name.\n" msgstr "" -#: src/stored/bscan.c:989 +#: src/dird/ua_output.c:552 src/dird/xua_output.c:707 +#, fuzzy, c-format +msgid "Could not find Pool for Job %s\n" +msgstr "Konnte Datenbank \"%s\" nicht öffen.\n" + +#: src/dird/ua_output.c:565 src/dird/xua_output.c:720 #, c-format -msgid "Created Media record for Volume: %s\n" +msgid "Could not find next Volume for Job %s (Pool=%s, Level=%s).\n" msgstr "" -#: src/stored/bscan.c:1010 +#: src/dird/ua_output.c:569 src/dird/xua_output.c:724 #, c-format -msgid "Updated Media record at end of Volume: %s\n" +msgid "" +"The next Volume to be used by Job \"%s\" (Pool=%s, Level=%s) will be %s\n" msgstr "" -#: src/stored/bscan.c:1027 +#: src/dird/ua_output.c:582 src/dird/xua_output.c:737 #, c-format -msgid "Could not create pool record. ERR=%s\n" +msgid "Could not find next Volume for Job %s.\n" msgstr "" -#: src/stored/bscan.c:1031 +#: src/dird/ua_output.c:727 src/dird/xua_output.c:882 #, c-format -msgid "Created Pool record for Pool: %s\n" +msgid "Pool %s not in database. %s" +msgstr "Pool %s nicht in der Datenbank. %s" + +#: src/dird/ua_output.c:735 src/dird/xua_output.c:890 +#, c-format +msgid "Pool %s created in database.\n" +msgstr "Pool %s in der Datenbank angelegt.\n" + +#: src/dird/ua_output.c:788 src/dird/xua_output.c:943 +msgid "You have no messages.\n" msgstr "" -#: src/stored/bscan.c:1050 -#, fuzzy, c-format -msgid "Could not get Client record. ERR=%s\n" -msgstr "Konnte Client Eintrag nicht anlegen. ERR=%s\n" +#: src/dird/ua_output.c:868 src/dird/xua_output.c:1023 +msgid "Message too long to display.\n" +msgstr "" -#: src/stored/bscan.c:1060 +#: src/dird/jobq.c:62 #, c-format -msgid "Created Client record for Client: %s\n" -msgstr "" +msgid "pthread_attr_init: ERR=%s\n" +msgstr "pthread_attr_init: ERR=%s\n" -#: src/stored/bscan.c:1077 +#: src/dird/jobq.c:71 #, c-format -msgid "Fileset \"%s\" already exists.\n" -msgstr "" +msgid "pthread_mutex_init: ERR=%s\n" +msgstr "pthread_mutex_init: ERR=%s\n" -#: src/stored/bscan.c:1081 +#: src/dird/jobq.c:77 #, c-format -msgid "Could not create FileSet record \"%s\". ERR=%s\n" -msgstr "" +msgid "pthread_cond_init: ERR=%s\n" +msgstr "pthread_cond_init: ERR=%s\n" -#: src/stored/bscan.c:1086 +#: src/dird/jobq.c:119 #, c-format -msgid "Created FileSet record \"%s\"\n" -msgstr "" +msgid "pthread_cond_broadcast: ERR=%s\n" +msgstr "pthread_cond_broadcast: ERR=%s\n" -#: src/stored/bscan.c:1133 +#: src/dird/jobq.c:127 #, c-format -msgid "Could not create JobId record. ERR=%s\n" -msgstr "" +msgid "pthread_cond_wait: ERR=%s\n" +msgstr "pthread_cond_wait: ERR=%s\n" -#: src/stored/bscan.c:1139 +#: src/dird/jobq.c:168 #, c-format -msgid "Could not update job start record. ERR=%s\n" -msgstr "" +msgid "Job %s waiting %d seconds for scheduled start time.\n" +msgstr "Job %s wartet %d Sekunden auf die geplante Startzeit.\n" -#: src/stored/bscan.c:1142 +#: src/dird/jobq.c:230 #, c-format -msgid "Created new JobId=%u record for original JobId=%u\n" -msgstr "" +msgid "pthread_thread_create: ERR=%s\n" +msgstr "pthread_thread_create: ERR=%s\n" -#: src/stored/bscan.c:1195 +#: src/dird/jobq.c:340 #, c-format -msgid "Could not update JobId=%u record. ERR=%s\n" -msgstr "" +msgid "pthread_cond_signal: ERR=%s\n" +msgstr "pthread_cond_signal: ERR=%s\n" -#: src/stored/bscan.c:1200 +#: src/dird/jobq.c:351 #, c-format -msgid "Updated Job termination record for JobId=%u Level=%s TermStat=%c\n" -msgstr "" +msgid "pthread_create: ERR=%s\n" +msgstr "pthread_create: ERR=%s\n" -#: src/stored/bscan.c:1225 +#: src/dird/jobq.c:635 #, c-format -msgid "Job Termination code: %d" +msgid "Rescheduled Job %s at %s to re-run in %d seconds (%s).\n" msgstr "" +" Job %s für %s erneut geplant um in %d seconds nachgestartet zu werden " +"(%s).\n" + +#: src/dird/jobq.c:694 src/dird/jobq.c:699 +msgid "previous Job" +msgstr "vorheriger Job" -#: src/stored/bscan.c:1230 +#: src/dird/jobq.c:736 #, c-format msgid "" -"%s\n" -"JobId: %d\n" -"Job: %s\n" -"FileSet: %s\n" -"Backup Level: %s\n" -"Client: %s\n" -"Start time: %s\n" -"End time: %s\n" -"Files Written: %s\n" -"Bytes Written: %s\n" -"Volume Session Id: %d\n" -"Volume Session Time: %d\n" -"Last Volume Bytes: %s\n" -"Termination: %s\n" -"\n" +"Job canceled. Attempt to read and write same device.\n" +" Read storage \"%s\" (From %s) -- Write storage \"%s\" (From %s)\n" msgstr "" +"Job abgebrochen. Versuch auf das selbe Gerät zu lesen und zu schreiben.\n" +" lese storage \"%s\" (Von %s) -- schreib storage \"%s\" (Von %s)\n" -#: src/stored/bscan.c:1288 +#: src/dird/ua_select.c:42 #, c-format -msgid "Could not create JobMedia record. ERR=%s\n" +msgid "The current %s retention period is: %s\n" msgstr "" -#: src/stored/bscan.c:1292 -#, c-format -msgid "Created JobMedia record JobId %d, MediaId %d\n" +#: src/dird/ua_select.c:47 +msgid "Continue? (yes/mod/no): " msgstr "" -#: src/stored/bscan.c:1308 -#, c-format -msgid "Could not find SessId=%d SessTime=%d for MD5/SHA1 record.\n" +#: src/dird/ua_select.c:50 src/dird/ua_run.c:614 +msgid "mod" +msgstr "" + +#: src/dird/ua_select.c:51 +msgid "Enter new retention period: " msgstr "" -#: src/stored/bscan.c:1322 -#, c-format -msgid "Could not add MD5/SHA1 to File record. ERR=%s\n" +#: src/dird/ua_select.c:55 +msgid "Invalid period.\n" msgstr "" -#: src/stored/bscan.c:1327 -msgid "Updated MD5/SHA1 record\n" +#: src/dird/ua_select.c:131 src/dird/ua_run.c:555 +msgid "You have the following choices:\n" msgstr "" -#: src/stored/job.c:234 -#, fuzzy, c-format -msgid "FD connect failed: Job name not found: %s\n" -msgstr "Job nicht gefunden: %s\n" +#: src/dird/ua_select.c:154 +msgid "The defined Storage resources are:\n" +msgstr "" -#: src/stored/job.c:244 -#, c-format -msgid "Hey!!!! JobId %u Job %s already authenticated.\n" +#: src/dird/ua_select.c:166 src/dird/ua_dotcmds.c:944 src/dird/ua_run.c:619 +#: src/dird/ua_cmds.c:1093 +msgid "Storage" msgstr "" -#: src/stored/job.c:261 -msgid "Unable to authenticate File daemon\n" +#: src/dird/ua_select.c:166 +msgid "Select Storage resource" msgstr "" -#: src/stored/job.c:390 -msgid "In free_jcr(), but still attached to device!!!!\n" +#: src/dird/ua_select.c:181 src/dird/ua_restore.c:1296 +msgid "The defined FileSet resources are:\n" msgstr "" -#: src/stored/btape.c:185 -#, c-format -msgid "" -"\n" -"\n" -"!!!! Warning large disk addressing disabled. boffset_t=%d should be 8 or " -"more !!!!!\n" -"\n" -"\n" +#: src/dird/ua_select.c:189 src/dird/ua_restore.c:1300 src/dird/ua_run.c:621 +msgid "FileSet" msgstr "" -#: src/stored/btape.c:192 -#, c-format -msgid "32 bit printf/scanf problem. i=%d x32=%u y32=%u\n" +#: src/dird/ua_select.c:189 src/dird/ua_restore.c:1300 +msgid "Select FileSet resource" msgstr "" -#: src/stored/btape.c:201 -msgid "64 bit printf/scanf problem. i=%d x64=%" +#: src/dird/ua_select.c:219 src/dird/ua_cmds.c:2062 +msgid "Could not find a Catalog resource\n" msgstr "" -#: src/stored/btape.c:206 -#, c-format -msgid "Tape block granularity is %d bytes.\n" +#: src/dird/ua_select.c:222 +msgid "You must specify a \"use \" command before continuing.\n" msgstr "" -#: src/stored/btape.c:279 -msgid "No archive name specified.\n" +#: src/dird/ua_select.c:228 +msgid "The defined Catalog resources are:\n" msgstr "" -#: src/stored/btape.c:283 -msgid "Improper number of arguments specified.\n" +#: src/dird/ua_select.c:236 +msgid "Catalog" msgstr "" -#: src/stored/btape.c:297 -msgid "btape does not work with DVD storage.\n" +#: src/dird/ua_select.c:236 +msgid "Select Catalog resource" msgstr "" -#: src/stored/btape.c:302 -msgid "btape only works with tape storage.\n" +#: src/dird/ua_select.c:254 src/dird/ua_select.c:280 +msgid "The defined Job resources are:\n" msgstr "" -#: src/stored/btape.c:383 -#, c-format -msgid "Total Volume bytes=%sB. Total Write rate = %sB/s\n" +#: src/dird/ua_select.c:265 src/dird/ua_select.c:288 src/dird/ua_select.c:329 +#: src/dird/ua_select.c:1341 src/dird/ua_run.c:620 src/dird/dird_conf.c:675 +#: src/dird/ua_prune.c:598 +msgid "Job" +msgstr "Job" + +#: src/dird/ua_select.c:265 src/dird/ua_select.c:288 +msgid "Select Job resource" msgstr "" -#: src/stored/btape.c:409 +#: src/dird/ua_select.c:307 #, c-format -msgid "Volume bytes=%sB. Write rate = %sB/s\n" +msgid "Error: Restore Job resource \"%s\" does not exist.\n" msgstr "" -#: src/stored/btape.c:477 -#, c-format -msgid "open device %s: OK\n" +#: src/dird/ua_select.c:321 +msgid "The defined Restore Job resources are:\n" msgstr "" -#: src/stored/btape.c:500 -msgid "Enter Volume Name: " +#: src/dird/ua_select.c:329 +msgid "Select Restore Job" msgstr "" -#: src/stored/btape.c:507 -#, c-format -msgid "Device open failed. ERR=%s\n" +#: src/dird/ua_select.c:346 +msgid "The defined Client resources are:\n" msgstr "" -#: src/stored/btape.c:512 -#, c-format -msgid "Wrote Volume label for volume \"%s\".\n" +#: src/dird/ua_select.c:354 src/dird/ua_select.c:463 src/dird/ua_dotcmds.c:945 +#: src/dird/ua_run.c:625 src/dird/ua_cmds.c:1094 +msgid "Client" msgstr "" -#: src/stored/btape.c:526 -msgid "Volume has no label.\n" +#: src/dird/ua_select.c:354 +msgid "Select Client (File daemon) resource" msgstr "" -#: src/stored/btape.c:529 -msgid "Volume label read correctly.\n" +#: src/dird/ua_select.c:381 +#, c-format +msgid "Error: Client resource %s does not exist.\n" msgstr "" -#: src/stored/btape.c:532 +#: src/dird/ua_select.c:406 #, c-format -msgid "I/O error on device: ERR=%s" +msgid "Could not find Client %s: ERR=%s" msgstr "" -#: src/stored/btape.c:535 -msgid "Volume name error\n" +#: src/dird/ua_select.c:416 src/dird/ua_select.c:470 +#, c-format +msgid "Could not find Client \"%s\": ERR=%s" msgstr "" -#: src/stored/btape.c:538 +#: src/dird/ua_select.c:445 #, c-format -msgid "Error creating label. ERR=%s" +msgid "Error obtaining client ids. ERR=%s\n" msgstr "" -#: src/stored/btape.c:541 -msgid "Volume version error.\n" +#: src/dird/ua_select.c:449 +msgid "No clients defined. You must run a job before using this command.\n" msgstr "" -#: src/stored/btape.c:544 -msgid "Bad Volume label type.\n" +#: src/dird/ua_select.c:453 +msgid "Defined Clients:\n" msgstr "" -#: src/stored/btape.c:547 -msgid "Unknown error.\n" +#: src/dird/ua_select.c:463 +msgid "Select the Client" msgstr "" -#: src/stored/btape.c:565 +#: src/dird/ua_select.c:496 src/dird/ua_select.c:520 src/dird/ua_select.c:565 #, c-format -msgid "Bad status from load. ERR=%s\n" +msgid "Could not find Pool \"%s\": ERR=%s" msgstr "" -#: src/stored/btape.c:567 -#, c-format -msgid "Loaded %s\n" +#: src/dird/ua_select.c:535 +msgid "No pools defined. Use the \"create\" command to create one.\n" msgstr "" -#: src/stored/btape.c:576 src/stored/btape.c:1139 src/stored/btape.c:1212 -#: src/stored/btape.c:1292 src/stored/btape.c:1563 -#, c-format -msgid "Bad status from rewind. ERR=%s\n" +#: src/dird/ua_select.c:539 +msgid "Defined Pools:\n" msgstr "" -#: src/stored/btape.c:579 src/stored/btape.c:1571 -#, c-format -msgid "Rewound %s\n" +#: src/dird/ua_select.c:541 src/dird/ua_select.c:561 src/dird/ua_update.c:353 +#: src/baconfig.h:76 +msgid "*None*" msgstr "" -#: src/stored/btape.c:605 src/stored/btape.c:1575 -#, c-format -msgid "Bad status from weof. ERR=%s\n" +#: src/dird/ua_select.c:552 src/dird/ua_select.c:665 src/dird/ua_run.c:633 +#: src/dird/ua_update.c:604 +msgid "Pool" msgstr "" -#: src/stored/btape.c:609 -#, c-format -msgid "Wrote 1 EOF to %s\n" +#: src/dird/ua_select.c:552 +msgid "Select the Pool" msgstr "" -#: src/stored/btape.c:612 +#: src/dird/ua_select.c:590 #, c-format -msgid "Wrote %d EOFs to %s\n" +msgid "No access to Pool \"%s\"\n" msgstr "" -#: src/stored/btape.c:630 -msgid "Moved to end of medium.\n" +#: src/dird/ua_select.c:622 +msgid "Enter *MediaId or Volume name: " msgstr "" -#: src/stored/btape.c:657 -#, c-format -msgid "Bad status from bsf. ERR=%s\n" +#: src/dird/ua_select.c:657 +msgid "The defined Pool resources are:\n" msgstr "" -#: src/stored/btape.c:659 -#, c-format -msgid "Backspaced %d file%s.\n" +#: src/dird/ua_select.c:665 +msgid "Select Pool resource" msgstr "" -#: src/stored/btape.c:676 +#: src/dird/ua_select.c:689 src/dird/ua_restore.c:553 #, c-format -msgid "Bad status from bsr. ERR=%s\n" +msgid "Error: Pool resource \"%s\" does not exist.\n" msgstr "" -#: src/stored/btape.c:678 -#, c-format -msgid "Backspaced %d record%s.\n" +#: src/dird/ua_select.c:700 +msgid "Enter the JobId to select: " msgstr "" -#: src/stored/btape.c:706 +#: src/dird/ua_select.c:738 #, c-format -msgid "Device status:\n" +msgid "Could not find Job \"%s\": ERR=%s" msgstr "" -#: src/stored/btape.c:725 +#: src/dird/ua_select.c:829 src/dird/ua_select.c:925 #, c-format -msgid "Status:\n" +msgid "Automatically selected %s: %s\n" msgstr "" -#: src/stored/btape.c:740 +#: src/dird/ua_select.c:840 src/dird/ua_select.c:936 +#, c-format msgid "" -"Test writing larger and larger records.\n" -"This is a torture test for records.\n" -"I am going to write\n" -"larger and larger records. It will stop when the record size\n" -"plus the header exceeds the block size (by default about 64K)\n" -msgstr "" - -#: src/stored/btape.c:746 -msgid "Do you want to continue? (y/n): " +"Your request has multiple choices for \"%s\". Selection is not possible in " +"batch mode.\n" msgstr "" -#: src/stored/btape.c:748 src/stored/btape.c:2200 -msgid "Command aborted.\n" +#: src/dird/ua_select.c:858 src/dird/ua_select.c:918 +#, c-format +msgid "Selection list for \"%s\" is empty!\n" msgstr "" -#: src/stored/btape.c:765 +#: src/dird/ua_select.c:864 #, c-format -msgid "Block %d i=%d\n" +msgid "Automatically selected: %s\n" msgstr "" -#: src/stored/btape.c:792 -msgid "Skipping read backwards test because BSR turned off.\n" +#: src/dird/ua_select.c:876 +msgid "Selection aborted, nothing done.\n" msgstr "" -#: src/stored/btape.c:796 -msgid "" -"\n" -"=== Write, backup, and re-read test ===\n" -"\n" -"I'm going to write three records and an EOF\n" -"then backup over the EOF and re-read the last record.\n" -"Bacula does this after writing the last block on the\n" -"tape to verify that the block was written correctly.\n" -"\n" -"This is not an *essential* feature ...\n" -"\n" +#: src/dird/ua_select.c:881 src/dird/ua_select.c:969 +#, c-format +msgid "Please enter a number between 1 and %d\n" msgstr "" -#: src/stored/btape.c:809 src/stored/btape.c:820 src/stored/btape.c:831 -#: src/stored/btape.c:1149 src/stored/btape.c:1165 src/stored/btape.c:1907 -#: src/stored/btape.c:2823 -msgid "Error writing record to block.\n" +#: src/dird/ua_select.c:1020 +msgid "Storage name given twice.\n" msgstr "" -#: src/stored/btape.c:813 src/stored/btape.c:824 src/stored/btape.c:835 -#: src/stored/btape.c:1153 src/stored/btape.c:1169 src/stored/btape.c:1911 -#: src/stored/btape.c:2827 -msgid "Error writing block to device.\n" +#: src/dird/ua_select.c:1037 +#, c-format +msgid "Expecting jobid=nn command, got: %s\n" msgstr "" -#: src/stored/btape.c:816 +#: src/dird/ua_select.c:1041 #, c-format -msgid "Wrote first record of %d bytes.\n" +msgid "JobId %s is not running.\n" msgstr "" -#: src/stored/btape.c:827 +#: src/dird/ua_select.c:1051 #, c-format -msgid "Wrote second record of %d bytes.\n" +msgid "Expecting job=xxx, got: %s.\n" msgstr "" -#: src/stored/btape.c:838 +#: src/dird/ua_select.c:1055 #, c-format -msgid "Wrote third record of %d bytes.\n" +msgid "Job \"%s\" is not running.\n" msgstr "" -#: src/stored/btape.c:845 src/stored/btape.c:850 +#: src/dird/ua_select.c:1063 #, c-format -msgid "Backspace file failed! ERR=%s\n" +msgid "Expecting ujobid=xxx, got: %s.\n" msgstr "" -#: src/stored/btape.c:854 -msgid "Backspaced over EOF OK.\n" +#: src/dird/ua_select.c:1084 +#, c-format +msgid "Storage resource \"%s\": not found\n" msgstr "" -#: src/stored/btape.c:856 -#, c-format -msgid "Backspace record failed! ERR=%s\n" +#: src/dird/ua_select.c:1116 +msgid "Enter autochanger drive[0]: " msgstr "" -#: src/stored/btape.c:859 -msgid "Backspace record OK.\n" +#: src/dird/ua_select.c:1137 +msgid "Enter autochanger slot: " msgstr "" -#: src/stored/btape.c:862 src/stored/btape.c:868 -#, c-format -msgid "Read block failed! ERR=%s\n" +#: src/dird/ua_select.c:1167 +msgid "Media Types defined in conf file:\n" msgstr "" -#: src/stored/btape.c:873 -msgid "Bad data in record. Test failed!\n" +#: src/dird/ua_select.c:1173 +msgid "Media Type" msgstr "" -#: src/stored/btape.c:877 -msgid "" -"\n" -"Block re-read correct. Test succeeded!\n" +#: src/dird/ua_select.c:1173 +msgid "Select the Media Type" msgstr "" -#: src/stored/btape.c:878 -msgid "" -"=== End Write, backup, and re-read test ===\n" -"\n" +#: src/dird/ua_select.c:1213 +msgid "None of your jobs are running.\n" msgstr "" -#: src/stored/btape.c:885 -msgid "" -"This is not terribly serious since Bacula only uses\n" -"this function to verify the last block written to the\n" -"tape. Bacula will skip the last block verification\n" -"if you add:\n" -"\n" -"Backward Space Record = No\n" -"\n" -"to your Storage daemon's Device resource definition.\n" +#: src/dird/ua_select.c:1251 +#, c-format +msgid "Unauthorized command from this console for JobId=%d.\n" msgstr "" -#: src/stored/btape.c:907 +#: src/dird/ua_select.c:1257 #, c-format -msgid "Begin writing %i files of %sB with raw blocks of %u bytes.\n" +msgid "Warning Job JobId=%d is not running. Continuing anyway...\n" msgstr "" -#: src/stored/btape.c:928 src/stored/btape.c:2879 +#: src/dird/ua_select.c:1280 src/dird/ua_select.c:1350 #, c-format -msgid "Write failed at block %u. stat=%d ERR=%s\n" +msgid "Confirm %s of %d Job%s (yes/no): " msgstr "" -#: src/stored/btape.c:962 +#: src/dird/ua_select.c:1293 src/dird/ua_select.c:1307 #, c-format -msgid "Begin writing %i files of %sB with blocks of %u bytes.\n" +msgid "Warning Job %s is not running. Continuing anyway ...\n" msgstr "" -#: src/stored/btape.c:971 +#: src/dird/ua_select.c:1329 #, fuzzy -msgid "" -"\n" -"Error writing record to block.\n" -msgstr "Fehler beim schreiben der bsr Datei.\n" +msgid "Select Job(s):\n" +msgstr "ist nicht aktiviert" -#: src/stored/btape.c:975 -#, fuzzy -msgid "" -"\n" -"Error writing block to device.\n" -msgstr "Fehler beim schreiben der bsr Datei.\n" +#: src/dird/ua_select.c:1335 +#, c-format +msgid "JobId=%s Job=%s" +msgstr "" -#: src/stored/btape.c:1030 -msgid "The file_size is too big, stop this test with Ctrl-c.\n" +#: src/dird/ua_select.c:1339 +#, c-format +msgid "Choose Job list to %s" msgstr "" -#: src/stored/btape.c:1058 -msgid "Test with zero data, should give the maximum throughput.\n" +#: src/dird/ua_select.c:1359 src/dird/ua_select.c:1366 src/dird/ua_cmds.c:804 +#: src/dird/ua_cmds.c:1199 +#, c-format +msgid "Job \"%s\" not found.\n" msgstr "" -#: src/stored/btape.c:1070 src/stored/btape.c:1096 -msgid "Test with random data, should give the minimum throughput.\n" +#: src/dird/run_conf.c:205 +#, c-format +msgid "Expected an equals, got: %s" msgstr "" -#: src/stored/btape.c:1085 -msgid "Test with zero data and bacula block structure.\n" +#: src/dird/run_conf.c:218 src/dird/run_conf.c:230 src/dird/run_conf.c:330 +#, c-format +msgid "Expect a YES or NO, got: %s" msgstr "" -#: src/stored/btape.c:1125 +#: src/dird/run_conf.c:245 #, c-format -msgid "" -"\n" -"=== Write, rewind, and re-read test ===\n" -"\n" -"I'm going to write %d records and an EOF\n" -"then write %d records and an EOF, then rewind,\n" -"and re-read the data to verify that it is correct.\n" -"\n" -"This is an *essential* feature ...\n" -"\n" +msgid "Job level field: %s not found in run record" msgstr "" -#: src/stored/btape.c:1157 src/stored/btape.c:1173 +#: src/dird/run_conf.c:265 #, c-format -msgid "Wrote %d blocks of %d bytes.\n" +msgid "Could not find specified Pool Resource: %s" msgstr "" -#: src/stored/btape.c:1215 src/stored/btape.c:1295 -msgid "Rewind OK.\n" +#: src/dird/run_conf.c:293 +#, c-format +msgid "Could not find specified Storage Resource: %s" msgstr "" -#: src/stored/btape.c:1228 src/stored/btape.c:1347 -msgid "Got EOF on tape.\n" +#: src/dird/run_conf.c:305 +#, c-format +msgid "Could not find specified Messages Resource: %s" +msgstr "" + +#: src/dird/run_conf.c:334 +#, c-format +msgid "Expected a keyword name, got: %s" +msgstr "" + +#: src/dird/run_conf.c:373 +msgid "Day number out of range (1-31)" msgstr "" -#: src/stored/btape.c:1233 -#, c-format -msgid "Read block %d failed! ERR=%s\n" +#: src/dird/run_conf.c:390 src/dird/run_conf.c:552 +msgid "Week number out of range (0-53)" msgstr "" -#: src/stored/btape.c:1239 +#: src/dird/run_conf.c:406 #, c-format -msgid "Read record failed. Block %d! ERR=%s\n" +msgid "Job type field: %s in run record not found" msgstr "" -#: src/stored/btape.c:1245 src/stored/btape.c:1377 +#: src/dird/run_conf.c:413 #, c-format -msgid "Bad data in record. Expected %d, got %d at byte %d. Test failed!\n" +msgid "Unexpected token: %d:%s" msgstr "" -#: src/stored/btape.c:1252 -#, c-format -msgid "%d blocks re-read correctly.\n" +#: src/dird/run_conf.c:457 +msgid "Time must be preceded by keyword AT." msgstr "" -#: src/stored/btape.c:1255 src/stored/btape.c:1384 -msgid "" -"=== Test Succeeded. End Write, rewind, and re-read test ===\n" -"\n" +#: src/dird/run_conf.c:466 +msgid "Time logic error.\n" msgstr "" -#: src/stored/btape.c:1283 -msgid "Block position test\n" +#: src/dird/run_conf.c:481 src/dird/run_conf.c:500 +msgid "Bad time specification." msgstr "" -#: src/stored/btape.c:1338 -#, c-format -msgid "Reposition to file:block %d:%d\n" +#: src/dird/run_conf.c:521 +msgid "Range logic error.\n" msgstr "" -#: src/stored/btape.c:1340 -msgid "Reposition error.\n" +#: src/dird/run_conf.c:530 +msgid "Bad day range specification." msgstr "" -#: src/stored/btape.c:1353 -#, c-format -msgid "" -"Read block %d failed! file=%d blk=%d. ERR=%s\n" -"\n" +#: src/dird/run_conf.c:577 +msgid "Invalid month, week or position day range" msgstr "" -#: src/stored/btape.c:1355 -msgid "" -"This may be because the tape drive block size is not\n" -" set to variable blocking as normally used by Bacula.\n" -" Please see the Tape Testing chapter in the manual and \n" -" look for using mt with defblksize and setoptions\n" -"If your tape drive block size is correct, then perhaps\n" -" your SCSI driver is *really* stupid and does not\n" -" correctly report the file:block after a FSF. In this\n" -" case try setting:\n" -" Fast Forward Space File = no\n" -" in your Device resource.\n" +#: src/dird/run_conf.c:592 +msgid "Invalid month, weekday or position range" msgstr "" -#: src/stored/btape.c:1371 -#, c-format -msgid "Read record failed! ERR=%s\n" +#: src/dird/run_conf.c:651 +msgid "Unexpected run state\n" msgstr "" -#: src/stored/btape.c:1382 +#: src/dird/restore.c:132 src/dird/msgchan.c:508 #, c-format -msgid "Block %d re-read correctly.\n" +msgid "Could not open bootstrap file %s: ERR=%s\n" +msgstr "Kann bootstrap Datei nicht öffnen: %s: ERR=%s\n" + +#: src/dird/restore.c:180 src/dird/restore.c:271 +#, fuzzy, c-format +msgid "Could not get storage resource '%s'.\n" +msgstr "Kann Storage resource %s nicht finden\n" + +#: src/dird/restore.c:307 +#, fuzzy, c-format +msgid "Could not acquire read storage lock for \"%s\"" +msgstr "Kann Storage resource %s nicht finden\n" + +#: src/dird/restore.c:407 src/dird/verify.c:275 src/dird/backup.c:512 +msgid "The File daemon does not support SDCallsClient.\n" msgstr "" -#: src/stored/btape.c:1403 +#: src/dird/restore.c:525 msgid "" -"\n" -"\n" -"=== Append files test ===\n" -"\n" -"This test is essential to Bacula.\n" -"\n" -"I'm going to write one record in file 0,\n" -" two records in file 1,\n" -" and three records in file 2\n" -"\n" +"Cannot restore without a bootstrap file.\n" +"You probably ran a restore job directly. All restore jobs must\n" +"be run using the restore command.\n" msgstr "" -#: src/stored/btape.c:1427 -msgid "Now moving to end of medium.\n" +#: src/dird/restore.c:533 +#, c-format +msgid "Start Restore Job %s\n" msgstr "" -#: src/stored/btape.c:1429 src/stored/btape.c:1658 -#, c-format -msgid "We should be in file 3. I am at file %d. %s\n" +#: src/dird/restore.c:584 +msgid "Restore OK -- warning file count mismatch" msgstr "" -#: src/stored/btape.c:1430 src/stored/btape.c:1448 src/stored/btape.c:1647 -#: src/stored/btape.c:1659 src/stored/btape.c:1672 src/stored/btape.c:1689 -msgid "This is correct!" +#: src/dird/restore.c:586 +msgid "Restore OK" msgstr "" -#: src/stored/btape.c:1430 src/stored/btape.c:1448 src/stored/btape.c:1647 -#: src/stored/btape.c:1659 src/stored/btape.c:1672 src/stored/btape.c:1689 -msgid "This is NOT correct!!!!" +#: src/dird/restore.c:590 +#, fuzzy +msgid "Restore OK -- with warnings" +msgstr "%s OK -- mit Warnungen" + +#: src/dird/restore.c:594 +msgid "*** Restore Error ***" msgstr "" -#: src/stored/btape.c:1436 -msgid "" -"\n" -"Now the important part, I am going to attempt to append to the tape.\n" -"\n" +#: src/dird/restore.c:604 +msgid "Restore Canceled" msgstr "" -#: src/stored/btape.c:1443 +#: src/dird/restore.c:631 +#, fuzzy, c-format msgid "" -"Done appending, there should be no I/O errors\n" +"%s %s %s (%s):\n" +" Build OS: %s %s %s\n" +" JobId: %d\n" +" Job: %s\n" +" Restore Client: %s\n" +" Start time: %s\n" +" End time: %s\n" +" Files Expected: %s\n" +" Files Restored: %s\n" +" Bytes Restored: %s\n" +" Rate: %.1f KB/s\n" +" FD Errors: %d\n" +" FD termination status: %s\n" +" SD termination status: %s\n" +" Termination: %s\n" "\n" msgstr "" +"%s %s (%s): %s\n" +" Build OS: %s %s %s\n" +" JobId: %d\n" +" Job: %s\n" +" Client: %s\n" +" Start time: %s\n" +" End time: %s\n" +" Dateien erwartet: %s\n" +" Dateien. wiederhergestellt: %s\n" +" Bytes wiederhergestellt: %s\n" +" Geschwindigkeit: %.1f KB/s\n" +" FD Fehler: %d\n" +" FD Beendigungsstatus: %s\n" +" SD Beendigungsstatus: %s\n" +" Beendigungsstatus: %s\n" +"\n" -#: src/stored/btape.c:1444 -msgid "Doing Bacula scan of blocks:\n" +#: src/dird/admin.c:53 +#, c-format +msgid "Start Admin JobId %d, Job=%s\n" +msgstr "Starte Admin JobId %d, Job=%s\n" + +#: src/dird/admin.c:86 +msgid "Admin OK" +msgstr "Admin OK" + +#: src/dird/admin.c:90 +msgid "*** Admin Error ***" +msgstr "*** Admin Fehler ***" + +#: src/dird/admin.c:94 +msgid "Admin Canceled" +msgstr "Admin abgebrochen" + +#: src/dird/admin.c:106 src/lib/status.h:171 src/lib/status.h:182 +#: src/lib/status.h:196 src/lib/status.h:200 src/lib/status.h:204 +msgid "Bacula " +msgstr "Bacula " + +#: src/dird/ua_status.c:170 +msgid "Status available for:\n" msgstr "" -#: src/stored/btape.c:1446 -msgid "End scanning the tape.\n" +#: src/dird/ua_status.c:177 +msgid "Select daemon type for status" msgstr "" -#: src/stored/btape.c:1447 src/stored/btape.c:1671 +#: src/dird/ua_status.c:297 #, c-format -msgid "We should be in file 4. I am at file %d. %s\n" +msgid "Daemon started %s. Jobs: run=%d, running=%d mode=%d,%d\n" msgstr "" -#: src/stored/btape.c:1472 -msgid "" -"\n" -"Autochanger enabled, but no name or no command device specified.\n" -msgstr "" +#: src/dird/ua_status.c:353 +#, fuzzy, c-format +msgid "No authorization for Storage \"%s\"\n" +msgstr "Storage daemon" -#: src/stored/btape.c:1476 -msgid "" -"\n" -"Ah, I see you have an autochanger configured.\n" -"To test the autochanger you must have a blank tape\n" -" that I can write on in Slot 1.\n" +#: src/dird/ua_status.c:363 +msgid "Restricted Client or Job does not permit access to Storage daemons\n" msgstr "" -#: src/stored/btape.c:1479 -msgid "" -"\n" -"Do you wish to continue with the Autochanger test? (y/n): " +#: src/dird/ua_status.c:370 src/dird/ua_dotcmds.c:834 src/dird/ua_cmds.c:839 +#, c-format +msgid "Connecting to Storage daemon %s at %s:%d\n" msgstr "" -#: src/stored/btape.c:1486 +#: src/dird/ua_status.c:373 +#, c-format msgid "" "\n" -"\n" -"=== Autochanger test ===\n" -"\n" +"Failed to connect to Storage daemon %s.\n" +"====\n" msgstr "" -#: src/stored/btape.c:1495 -msgid "3301 Issuing autochanger \"loaded\" command.\n" +#: src/dird/ua_status.c:405 src/dird/ua_cmds.c:1186 src/dird/ua_cmds.c:1994 +#, c-format +msgid "No authorization for Client \"%s\"\n" msgstr "" -#: src/stored/btape.c:1504 +#: src/dird/ua_status.c:418 src/dird/ua_dotcmds.c:859 src/dird/ua_cmds.c:662 +#: src/dird/ua_cmds.c:875 src/dird/ua_cmds.c:1307 #, c-format -msgid "3991 Bad autochanger command: %s\n" +msgid "Connecting to Client %s at %s:%d\n" msgstr "" -#: src/stored/btape.c:1505 +#: src/dird/ua_status.c:421 #, c-format -msgid "3991 result=\"%s\": ERR=%s\n" +msgid "" +"Failed to connect to Client %s.\n" +"====\n" msgstr "" -#: src/stored/btape.c:1509 -#, c-format -msgid "Slot %d loaded. I am going to unload it.\n" +#: src/dird/ua_status.c:426 +msgid "Connected to file daemon\n" msgstr "" -#: src/stored/btape.c:1511 -msgid "Nothing loaded in the drive. OK.\n" +#: src/dird/ua_status.c:445 src/dird/ua_status.c:454 +msgid "" +"\n" +"Scheduled Jobs:\n" msgstr "" -#: src/stored/btape.c:1518 -#, c-format -msgid "3302 Issuing autochanger \"unload %d %d\" command.\n" +#: src/dird/ua_status.c:446 +msgid "" +"Level Type Pri Scheduled Job Name Volume\n" msgstr "" -#: src/stored/btape.c:1523 -#, c-format -msgid "unload status=%s %d\n" +#: src/dird/ua_status.c:447 +msgid "===================================================================================\n" msgstr "" -#: src/stored/btape.c:1523 -msgid "Bad" +#: src/dird/ua_status.c:455 +msgid "" +"Level Type Pri Scheduled Job Name Schedule\n" msgstr "" -#: src/stored/btape.c:1526 -#, c-format -msgid "3992 Bad autochanger command: %s\n" +#: src/dird/ua_status.c:456 +msgid "=====================================================================================\n" msgstr "" -#: src/stored/btape.c:1527 +#: src/dird/ua_status.c:513 src/dird/ua_status.c:678 #, c-format -msgid "3992 result=\"%s\": ERR=%s\n" +msgid "%-14s\t%-8s\t%3d\t%-18s\t%-18s\t%s\n" msgstr "" -#: src/stored/btape.c:1537 +#: src/dird/ua_status.c:517 src/dird/ua_status.c:682 #, c-format -msgid "3303 Issuing autochanger \"load %d %d\" command.\n" +msgid "%-14s %-8s %3d %-18s %-18s %s\n" msgstr "" -#: src/stored/btape.c:1545 -#, c-format -msgid "3303 Autochanger \"load %d %d\" status is OK.\n" +#: src/dird/ua_status.c:553 src/dird/ua_status.c:748 +msgid "Ignoring invalid value for days. Max is 500.\n" msgstr "" -#: src/stored/btape.c:1549 -#, c-format -msgid "3993 Bad autochanger command: %s\n" +#: src/dird/ua_status.c:564 +msgid "Ignoring invalid value for limit. Max is 2000.\n" msgstr "" -#: src/stored/btape.c:1550 -#, c-format -msgid "3993 result=\"%s\": ERR=%s\n" +#: src/dird/ua_status.c:575 +msgid "Ignoring invalid time.\n" msgstr "" -#: src/stored/btape.c:1565 -msgid "" -"\n" -"The test failed, probably because you need to put\n" -"a longer sleep time in the mtx-script in the load) case.\n" -"Adding a 30 second sleep and trying again ...\n" +#: src/dird/ua_status.c:697 src/dird/ua_status.c:801 +msgid "No Scheduled Jobs.\n" msgstr "" -#: src/stored/btape.c:1578 +#: src/dird/ua_status.c:826 #, c-format -msgid "Wrote EOF to %s\n" +msgid "Console connected at %s\n" msgstr "" -#: src/stored/btape.c:1582 -#, c-format +#: src/dird/ua_status.c:837 msgid "" -"\n" -"The test worked this time. Please add:\n" -"\n" -" sleep %d\n" -"\n" -"to your mtx-changer script in the load) case.\n" -"\n" +"No Jobs running.\n" +"====\n" msgstr "" -#: src/stored/btape.c:1587 -msgid "" -"\n" -"The test autochanger worked!!\n" -"\n" +#: src/dird/ua_status.c:844 +msgid " JobId Type Level Files Bytes Name Status\n" msgstr "" -#: src/stored/btape.c:1598 -msgid "You must correct this error or the Autochanger will not work.\n" +#: src/dird/ua_status.c:845 +msgid "======================================================================\n" msgstr "" -#: src/stored/btape.c:1616 -msgid "" -"\n" -"\n" -"=== Forward space files test ===\n" -"\n" -"This test is essential to Bacula.\n" -"\n" -"I'm going to write five files then test forward spacing\n" -"\n" +#: src/dird/ua_status.c:854 +msgid "is waiting execution" msgstr "" -#: src/stored/btape.c:1641 -msgid "Now forward spacing 1 file.\n" +#: src/dird/ua_status.c:857 +msgid "is running" msgstr "" -#: src/stored/btape.c:1643 src/stored/btape.c:1655 src/stored/btape.c:1668 -#: src/stored/btape.c:1686 src/stored/btape.c:1862 -#, c-format -msgid "Bad status from fsr. ERR=%s\n" +#: src/dird/ua_status.c:860 +msgid "is blocked" msgstr "" -#: src/stored/btape.c:1646 -#, c-format -msgid "We should be in file 1. I am at file %d. %s\n" +#: src/dird/ua_status.c:863 +msgid "has terminated" +msgstr "" + +#: src/dird/ua_status.c:866 +#, fuzzy +msgid "has terminated with warnings" +msgstr "%s OK -- mit Warnungen" + +#: src/dird/ua_status.c:869 +msgid "has erred" +msgstr "" + +#: src/dird/ua_status.c:872 +msgid "has errors" msgstr "" -#: src/stored/btape.c:1653 -msgid "Now forward spacing 2 files.\n" +#: src/dird/ua_status.c:875 +msgid "has a fatal error" msgstr "" -#: src/stored/btape.c:1666 -msgid "Now forward spacing 4 files.\n" +#: src/dird/ua_status.c:878 +msgid "has verify differences" msgstr "" -#: src/stored/btape.c:1678 -msgid "" -"The test worked this time. Please add:\n" -"\n" -" Fast Forward Space File = no\n" -"\n" -"to your Device resource for this drive.\n" +#: src/dird/ua_status.c:881 +msgid "has been canceled" msgstr "" -#: src/stored/btape.c:1684 -msgid "Now forward spacing 1 more file.\n" +#: src/dird/ua_status.c:886 +msgid "is waiting on Client" msgstr "" -#: src/stored/btape.c:1688 +#: src/dird/ua_status.c:888 #, c-format -msgid "We should be in file 5. I am at file %d. %s\n" +msgid "is waiting on Client %s" msgstr "" -#: src/stored/btape.c:1693 -msgid "" -"\n" -"=== End Forward space files test ===\n" -"\n" -msgstr "" +#: src/dird/ua_status.c:896 src/dird/ua_status.c:898 +#, fuzzy, c-format +msgid "is waiting on Storage \"%s\"" +msgstr "Storage daemon" -#: src/stored/btape.c:1697 -msgid "" -"\n" -"The forward space file test failed.\n" +#: src/dird/ua_status.c:900 +msgid "is waiting on Storage" msgstr "" -#: src/stored/btape.c:1699 -msgid "" -"You have Fast Forward Space File enabled.\n" -"I am turning it off then retrying the test.\n" +#: src/dird/ua_status.c:906 +msgid "is waiting on max Storage jobs" msgstr "" -#: src/stored/btape.c:1705 -msgid "" -"You must correct this error or Bacula will not work.\n" -"Some systems, e.g. OpenBSD, require you to set\n" -" Use MTIOCGET= no\n" -"in your device resource. Use with caution.\n" +#: src/dird/ua_status.c:909 +msgid "is waiting on max Client jobs" msgstr "" -#: src/stored/btape.c:1739 -msgid "" -"\n" -"Append test failed. Attempting again.\n" -"Setting \"Hardware End of Medium = no\n" -" and \"Fast Forward Space File = no\n" -"and retrying append test.\n" -"\n" +#: src/dird/ua_status.c:912 +msgid "is waiting on max Job jobs" msgstr "" -#: src/stored/btape.c:1747 -msgid "" -"\n" -"\n" -"It looks like the test worked this time, please add:\n" -"\n" -" Hardware End of Medium = No\n" -"\n" -" Fast Forward Space File = No\n" -"to your Device resource in the Storage conf file.\n" +#: src/dird/ua_status.c:915 +msgid "is waiting on max total jobs" msgstr "" -#: src/stored/btape.c:1754 -msgid "" -"\n" -"\n" -"That appears *NOT* to have corrected the problem.\n" -msgstr "" +#: src/dird/ua_status.c:919 +#, fuzzy, c-format +msgid "is waiting for its start time (%s)" +msgstr "Job %s wartet %d Sekunden auf die geplante Startzeit.\n" -#: src/stored/btape.c:1759 -msgid "" -"\n" -"\n" -"It looks like the append failed. Attempting again.\n" -"Setting \"BSF at EOM = yes\" and retrying append test.\n" +#: src/dird/ua_status.c:925 +msgid "is waiting for higher priority jobs to finish" msgstr "" -#: src/stored/btape.c:1764 -msgid "" -"\n" -"\n" -"It looks like the test worked this time, please add:\n" -"\n" -" Hardware End of Medium = No\n" -" Fast Forward Space File = No\n" -" BSF at EOM = yes\n" -"\n" -"to your Device resource in the Storage conf file.\n" -msgstr "" +#: src/dird/ua_status.c:928 +#, fuzzy +msgid "is waiting for a Shared Storage device" +msgstr "Storage daemon" -#: src/stored/btape.c:1775 -msgid "" -"\n" -"Append test failed.\n" -"\n" -"\n" -"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n" -"Unable to correct the problem. You MUST fix this\n" -"problem before Bacula can use your tape drive correctly\n" -"\n" -"Perhaps running Bacula in fixed block mode will work.\n" -"Do so by setting:\n" -"\n" -"Minimum Block Size = nnn\n" -"Maximum Block Size = nnn\n" -"\n" -"in your Storage daemon's Device definition.\n" -"nnn must match your tape driver's block size, which\n" -"can be determined by reading your tape manufacturers\n" -"information, and the information on your kernel dirver.\n" -"Fixed block sizes, however, are not normally an ideal solution.\n" -"\n" -"Some systems, e.g. OpenBSD, require you to set\n" -" Use MTIOCGET= no\n" -"in your device resource. Use with caution.\n" -msgstr "" +#: src/dird/ua_status.c:945 +#, fuzzy, c-format +msgid "is in unknown state %c" +msgstr "unbekannt" -#: src/stored/btape.c:1797 -msgid "" -"\n" -"The above Bacula scan should have output identical to what follows.\n" -"Please double check it ...\n" -"=== Sample correct output ===\n" -"1 block of 64448 bytes in file 1\n" -"End of File mark.\n" -"2 blocks of 64448 bytes in file 2\n" -"End of File mark.\n" -"3 blocks of 64448 bytes in file 3\n" -"End of File mark.\n" -"1 block of 64448 bytes in file 4\n" -"End of File mark.\n" -"Total files=4, blocks=7, bytes = 451,136\n" -"=== End sample correct output ===\n" -"\n" -"If the above scan output is not identical to the\n" -"sample output, you MUST correct the problem\n" -"or Bacula will not be able to write multiple Jobs to \n" -"the tape.\n" -"\n" +#: src/dird/ua_status.c:959 +msgid "is waiting for a mount request" msgstr "" -#: src/stored/btape.c:1840 -#, c-format -msgid "Bad status from fsf. ERR=%s\n" +#: src/dird/ua_status.c:966 +msgid "is waiting for an appendable Volume" msgstr "" -#: src/stored/btape.c:1844 -msgid "Forward spaced 1 file.\n" -msgstr "" +#: src/dird/ua_status.c:974 +#, fuzzy +msgid "is waiting for Client to connect to Storage daemon" +msgstr "Verbindung zu Storage daemon fehlgeschlagen.\n" -#: src/stored/btape.c:1847 +#: src/dird/ua_status.c:976 #, c-format -msgid "Forward spaced %d files.\n" -msgstr "" - -#: src/stored/btape.c:1866 -msgid "Forward spaced 1 record.\n" +msgid "is waiting for Client %s to connect to Storage %s" msgstr "" -#: src/stored/btape.c:1869 +#: src/dird/ua_status.c:1007 #, c-format -msgid "Forward spaced %d records.\n" +msgid "%6d\t%-6s\t%-20s\t%s\t%s\n" msgstr "" -#: src/stored/btape.c:1914 +#: src/dird/ua_status.c:1015 #, c-format -msgid "Wrote one record of %d bytes.\n" +msgid "%6d %-4s %-3s %10s %10s %-17s %s\n" msgstr "" -#: src/stored/btape.c:1916 -msgid "Wrote block to device.\n" +#: src/dird/ua_status.c:1040 +msgid "No Terminated Jobs.\n" msgstr "" -#: src/stored/btape.c:1930 -msgid "Enter length to read: " +#: src/dird/ua_status.c:1046 src/lib/status.h:73 +msgid "" +"\n" +"Terminated Jobs:\n" msgstr "" -#: src/stored/btape.c:1935 -msgid "Bad length entered, using default of 1024 bytes.\n" +#: src/dird/ua_status.c:1047 src/lib/status.h:80 +msgid " JobId Level Files Bytes Status Finished Name \n" msgstr "" -#: src/stored/btape.c:1944 -#, c-format -msgid "Read of %d bytes gives stat=%d. ERR=%s\n" +#: src/dird/ua_status.c:1048 +msgid "====================================================================\n" msgstr "" -#: src/stored/btape.c:1967 src/stored/btape.c:2016 -#, c-format -msgid "End of tape\n" +#: src/dird/ua_status.c:1087 src/lib/status.h:109 +msgid "Diffs" msgstr "" -#: src/stored/btape.c:1972 -#, c-format -msgid "Starting scan at file %u\n" +#: src/dird/ua_status.c:1090 src/dird/ua_restore.c:443 src/lib/status.h:112 +msgid "Cancel" msgstr "" -#: src/stored/btape.c:1979 -#, c-format -msgid "Bad status from read %d. ERR=%s\n" +#: src/dird/ua_status.c:1099 src/lib/status.h:122 +msgid "Other" msgstr "" -#: src/stored/btape.c:1982 src/stored/btape.c:1996 src/stored/btape.c:2060 -#: src/stored/btape.c:2072 src/stored/btape.c:2085 src/stored/btape.c:2101 +#: src/dird/ua_status.c:1103 src/lib/status.h:134 #, c-format -msgid "1 block of %d bytes in file %d\n" +msgid "%6d\t%-6s\t%8s\t%10s\t%-7s\t%-8s\t%s\n" msgstr "" -#: src/stored/btape.c:1985 src/stored/btape.c:1999 src/stored/btape.c:2063 -#: src/stored/btape.c:2075 src/stored/btape.c:2088 src/stored/btape.c:2104 +#: src/dird/ua_status.c:1111 src/lib/status.h:142 #, c-format -msgid "%d blocks of %d bytes in file %d\n" +msgid "%6d %-6s %8s %10s %-7s %-8s %s\n" msgstr "" -#: src/stored/btape.c:2007 src/stored/btape.c:2079 -#, c-format -msgid "End of File mark.\n" +#: src/dird/ua_status.c:1121 +msgid "\n" msgstr "" -#: src/stored/btape.c:2028 src/stored/btape.c:2132 +#: src/dird/next_vol.c:163 #, c-format -msgid "Total files=%d, blocks=%d, bytes = %s\n" +msgid "Purging oldest volume \"%s\"\n" msgstr "" -#: src/stored/btape.c:2092 +#: src/dird/next_vol.c:169 #, c-format -msgid "Short block read.\n" +msgid "Pruning oldest volume \"%s\"\n" msgstr "" -#: src/stored/btape.c:2095 -#, c-format -msgid "Error reading block. ERR=%s\n" +#: src/dird/next_vol.c:188 +msgid "We seem to be looping trying to find the next volume. I give up.\n" msgstr "" -#: src/stored/btape.c:2119 +#: src/dird/next_vol.c:215 +#, fuzzy, c-format +msgid "Max Volume bytes=%s exceeded. Marking Volume \"%s\" as Full.\n" +msgstr "\"Max Volume bytes\"erreicht. Markiere Volume \"%s\" als Voll.\n" + +#: src/dird/next_vol.c:223 #, c-format +msgid "Volume used once. Marking Volume \"%s\" as Used.\n" +msgstr "Volume erstmalig benutzt. Markiere Volume \"%s\" als Used.\n" + +#: src/dird/next_vol.c:230 +#, fuzzy, c-format +msgid "Max Volume jobs=%s exceeded. Marking Volume \"%s\" as Used.\n" +msgstr "\"Max Volume bytes\"erreicht. Markiere Volume \"%s\" als Voll.\n" + +#: src/dird/next_vol.c:240 +#, fuzzy, c-format +msgid "Max Volume files=%s exceeded. Marking Volume \"%s\" as Used.\n" +msgstr "\"Max Volume bytes\"erreicht. Markiere Volume \"%s\" als Voll.\n" + +#: src/dird/next_vol.c:251 +#, fuzzy, c-format msgid "" -"Block=%u file,blk=%u,%u blen=%u First rec FI=%s SessId=%u SessTim=%u Strm=%s " -"rlen=%d\n" -msgstr "" +"Max configured use duration=%s sec. exceeded. Marking Volume \"%s\" as " +"Used.\n" +msgstr "Volume erstmalig benutzt. Markiere Volume \"%s\" als Used.\n" -#: src/stored/btape.c:2141 +#: src/dird/next_vol.c:264 #, c-format -msgid "Device status: %u. ERR=%s\n" -msgstr "" +msgid "Catalog error updating volume \"%s\". ERR=%s" +msgstr "Catalog Fehler beim Aktualisieren von volume \"%s\". ERR=%s" + +#: src/dird/next_vol.c:286 +msgid "volume has expired" +msgstr "volume ist abgelaufen" -#: src/stored/btape.c:2173 +#: src/dird/next_vol.c:304 src/dird/next_vol.c:348 #, c-format +msgid "Recycled current volume \"%s\"\n" +msgstr "Recycled current volume \"%s\"\n" + +#: src/dird/next_vol.c:309 +msgid "and recycling of current volume failed" +msgstr "und das Wiederverwenden des aktuellen volumes ist fehlgeschlagen " + +#: src/dird/next_vol.c:315 +msgid "but should be Append, Purged or Recycle" +msgstr "aber sollte Append, Purged oder Recycle sein" + +#: src/dird/next_vol.c:324 +#, fuzzy +msgid "volume has recycling disabled" +msgstr "volume ist abgelaufen" + +#: src/dird/next_vol.c:351 msgid "" -"\n" -"This command simulates Bacula writing to a tape.\n" -"It requires either one or two blank tapes, which it\n" -"will label and write.\n" -"\n" -"If you have an autochanger configured, it will use\n" -"the tapes that are in slots 1 and 2, otherwise, you will\n" -"be prompted to insert the tapes when necessary.\n" -"\n" -"It will print a status approximately\n" -"every 322 MB, and write an EOF every %s. If you have\n" -"selected the simple test option, after writing the first tape\n" -"it will rewind it and re-read the last block written.\n" -"\n" -"If you have selected the multiple tape test, when the first tape\n" -"fills, it will ask for a second, and after writing a few more \n" -"blocks, it will stop. Then it will begin re-reading the\n" -"two tapes.\n" -"\n" -"This may take a long time -- hours! ...\n" -"\n" +"but should be Append, Purged or Recycle (recycling of the current volume " +"failed)" msgstr "" +"aber sollte Append, Purged oder Recycle (das Recycling des des aktuellen " +"Volumens ist fehlgeschlagen)" -#: src/stored/btape.c:2191 +#: src/dird/next_vol.c:355 msgid "" -"Do you want to run the simplified test (s) with one tape\n" -"or the complete multiple tape (m) test: (s/m) " +"but should be Append, Purged or Recycle (cannot automatically recycle " +"current volume, as it still contains unpruned data or the Volume Retention " +"time has not expired.)" msgstr "" -#: src/stored/btape.c:2194 -msgid "Simple test (single tape) selected.\n" +#: src/dird/next_vol.c:415 +#, c-format +msgid "Unable to get Pool record: ERR=%s" msgstr "" -#: src/stored/btape.c:2197 -msgid "Multiple tape test selected.\n" +#: src/dird/next_vol.c:422 +#, c-format +msgid "Unable add Scratch Volume, Pool \"%s\" full MaxVols=%d\n" msgstr "" -#: src/stored/btape.c:2239 -msgid "Wrote Start of Session label.\n" +#: src/dird/next_vol.c:442 +#, c-format +msgid "Failed to move Scratch Volume. ERR=%s\n" msgstr "" -#: src/stored/btape.c:2258 +#: src/dird/next_vol.c:447 #, c-format -msgid "%s Begin writing Bacula records to tape ...\n" +msgid "Using Volume \"%s\" from 'Scratch' pool.\n" msgstr "" -#: src/stored/btape.c:2260 +#: src/dird/authenticate.c:77 src/dird/authenticate.c:78 +#: src/qt-console/tray-monitor/authenticate.cpp:119 #, c-format -msgid "%s Begin writing Bacula records to first tape ...\n" -msgstr "" +msgid "Error sending Hello to Storage daemon. ERR=%s\n" +msgstr "Fehler beim senden von \"Hello\" an Storage daemon. ERR=%s\n" -#: src/stored/btape.c:2286 -#, fuzzy -msgid "Flush block failed.\n" -msgstr "Job Einrichtung Fehlgeschlagen.\n" +#: src/dird/authenticate.c:107 +msgid "Director and Storage daemon passwords or names not the same.\n" +msgstr "Director und Storage daemon Passworte or Namen nicht gleich.\n" -#: src/stored/btape.c:2300 -#, c-format -msgid "Wrote block=%u, file,blk=%u,%u VolBytes=%s rate=%sB/s\n" +#: src/dird/authenticate.c:109 +#, fuzzy, c-format +msgid "" +"Director unable to authenticate with Storage daemon at \"%s:%d\". Possible " +"causes:\n" +"Passwords or names not the same or\n" +"Maximum Concurrent Jobs exceeded on the SD or\n" +"SD networking messed up (restart daemon).\n" +"Please see " msgstr "" +"Director kann sich nicht an Storage daemon an \"%s:%d\" authentisieren. " +"Mögliche Ursachen:\n" +"Passworte oder Namen nicht gleich oder\n" +"Maximum Concurrent Jobs überschritten am SD oder\n" +"SD Netzwerk durcheinander (daemon neustarten).\n" +"Für Hilfe bitte unter http://www.bacula.org/rel-manual/faq." +"html#AuthorizationErrors nachsehen.\n" + +#: src/dird/authenticate.c:137 +#, fuzzy, c-format +msgid "TLS negotiation failed with SD at \"%s:%d\"\n" +msgstr "TLS Aushandlung fehlgeschlagen mit SD an \"%s:%d\"\n" -#: src/stored/btape.c:2311 +#: src/dird/authenticate.c:149 #, c-format -msgid "%s Flush block, write EOF\n" +msgid "bdird \n" -" -b specify bootstrap file\n" -" -c set configuration file to file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -p proceed inspite of I/O errors\n" -" -s turn off signals\n" -" -v be verbose\n" -" -? print this message.\n" -"\n" -msgstr "" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: dird [-f -s] [-c config_file] [-d debug_level] [config_file]\n" -" -c setze Konfigurationsdatei auf Datei\n" -" -dnn setze debug level auf nn\n" -" -f starte im Vordergrund (für debugging Zwecke)\n" -" -g groupid\n" -" -r starte jetzt\n" -" -s no signals\n" -" -t test - Konfiguration Lesen und beenden\n" -" -u userid\n" -" -v ausführliche Benutzer Meldungen\n" -" -? diese Meldung ausgeben.\n" -"\n" - -#: src/stored/btape.c:3047 -#, c-format -msgid "Mount second Volume on device %s and press return when ready: " -msgstr "" +msgid "Cannot destroy var context: ERR=%s\n" +msgstr "kann Variable context nicht zerstören: ERR=%s\n" -#: src/stored/btape.c:3075 -#, c-format -msgid "Mount blank Volume on device %s and press return when ready: " -msgstr "" +#: src/dird/mac_sql.c:235 +#, fuzzy, c-format +msgid "No %s SQL selection pattern specified.\n" +msgstr "Kein \"Migration SQL selection pattern\" spezifiziert.\n" -#: src/stored/btape.c:3095 +#: src/dird/mac_sql.c:242 src/dird/mac_sql.c:261 src/dird/mac_sql.c:282 +#: src/dird/mac_sql.c:318 src/dird/mac_sql.c:345 src/dird/mac_sql.c:464 +#: src/dird/mac_sql.c:593 src/dird/mac_sql.c:621 #, c-format -msgid "End of Volume \"%s\" %d records.\n" -msgstr "" +msgid "SQL failed. ERR=%s\n" +msgstr "SQL fehlgeschlagen ERR=%s\n" -#: src/stored/btape.c:3109 -#, c-format -msgid "Read block=%u, VolBytes=%s rate=%sB/s\n" -msgstr "" +#: src/dird/mac_sql.c:265 src/dird/mac_sql.c:272 src/dird/mac_sql.c:286 +#: src/dird/mac_sql.c:349 +#, fuzzy, c-format +msgid "No Volumes found to %s.\n" +msgstr "Keine Volumes zum Wiederherstellen gefunden.\n" -#: src/stored/authenticate.c:61 -#, c-format -msgid "I only authenticate Directors, not %d\n" -msgstr "" +#: src/dird/mac_sql.c:300 src/dird/mac_sql.c:389 src/dird/mac_sql.c:409 +msgid "Invalid JobId found.\n" +msgstr "Ungültige JobId gefunden.\n" -#: src/stored/authenticate.c:67 src/filed/authenticate.c:76 -#, c-format -msgid "Bad Hello command from Director at %s. Len=%d.\n" -msgstr "" +#: src/dird/mac_sql.c:360 +#, fuzzy, c-format +msgid "Unknown %s Selection Type.\n" +msgstr "Unbekannter \"Migration Selection Type\".\n" -#: src/stored/authenticate.c:78 src/filed/authenticate.c:88 -#, c-format -msgid "Bad Hello command from Director at %s: %s\n" -msgstr "" +#: src/dird/mac_sql.c:371 src/dird/mac_sql.c:392 src/dird/mac_sql.c:412 +#, fuzzy, c-format +msgid "No JobIds found to %s.\n" +msgstr "Kein Job gefunden für: %s.\n" -#: src/stored/authenticate.c:92 +#: src/dird/mac_sql.c:375 #, fuzzy, c-format -msgid "" -"Connection from unknown Director %s at %s rejected.\n" -"Please see " -msgstr "unbekannt" +msgid "The following %u JobId%s chosen to be %s: %s\n" +msgstr "Die folgende %u JobId%s wird migriert werden: %s\n" -#: src/stored/authenticate.c:129 -msgid "" -"Incorrect password given by Director.\n" -"Please see " +#: src/dird/mac_sql.c:376 +msgid " was" msgstr "" -#: src/stored/authenticate.c:137 src/stored/authenticate.c:248 -#: src/filed/authenticate.c:151 src/filed/authenticate.c:270 -msgid "" -"Authorization problem: Remote server did not advertize required TLS " -"support.\n" +#: src/dird/mac_sql.c:376 +msgid "s were" msgstr "" -#: src/stored/authenticate.c:155 +#: src/dird/mac_sql.c:421 src/dird/mac.c:322 #, fuzzy, c-format -msgid "TLS negotiation failed with DIR at \"%s:%d\"\n" -msgstr "TLS Aushandlung fehlgeschlagen mit SD an \"%s:%d\"\n" - -#: src/stored/authenticate.c:191 -#, c-format -msgid "Unable to authenticate Director at %s.\n" -msgstr "" +msgid "Could not get job record for JobId %s to %s. ERR=%s" +msgstr "Konnte job record für JobId %s zum migrieren nicht holen. ERR=%s" -#: src/stored/authenticate.c:239 src/stored/authenticate.c:279 -#, c-format -msgid "" -"Incorrect authorization key from File daemon at %s rejected.\n" -"Please see " -msgstr "" +#: src/dird/mac_sql.c:428 +#, fuzzy, c-format +msgid "%s using JobId=%s Job=%s\n" +msgstr "Migration benutzt JobId=%s Job=%s\n" -#: src/stored/authenticate.c:266 +#: src/dird/mac_sql.c:468 src/dird/mac_sql.c:598 #, fuzzy, c-format -msgid "TLS negotiation failed with FD at \"%s:%d\"\n" -msgstr "TLS Aushandlung fehlgeschlagen mit FD an \"%s:%d\".\n" +msgid "No %ss found to %s.\n" +msgstr "Keine %ss zum Migrieren gefunden.\n" -#: src/stored/wait.c:133 -#, c-format -msgid "pthread timedwait error. ERR=%s\n" +#: src/dird/mac_sql.c:490 +msgid "Selection Type 'pooluncopiedjobs' only applies to Copy Jobs" msgstr "" -#: src/stored/wait.c:239 +#: src/dird/mac_sql.c:499 #, fuzzy, c-format -msgid "JobId=%s, Job %s waiting to reserve a device.\n" -msgstr "JobId %s, Job %s zum Abbruch markiert.\n" +msgid "SQL to get uncopied jobs failed. ERR=%s\n" +msgstr "SQL um %s zu holen fehlgeschlagen. ERR=%s\n" -#: src/stored/block.c:102 -#, c-format -msgid "" -"Dump block %s %x: size=%d BlkNum=%d\n" -" Hdrcksum=%x cksum=%x\n" -msgstr "" +#: src/dird/mac_sql.c:522 +#, fuzzy, c-format +msgid "No %s %s selection pattern specified.\n" +msgstr "Kein Migration %s selection pattern spezifiziert.\n" -#: src/stored/block.c:115 +#: src/dird/mac_sql.c:533 #, c-format -msgid " Rec: VId=%u VT=%u FI=%s Strm=%s len=%d p=%x\n" -msgstr "" +msgid "SQL to get %s failed. ERR=%s\n" +msgstr "SQL um %s zu holen fehlgeschlagen. ERR=%s\n" -#: src/stored/block.c:171 -#, c-format -msgid "%d block read errors not printed.\n" -msgstr "" +#: src/dird/mac_sql.c:538 +#, fuzzy, c-format +msgid "Query of Pool \"%s\" returned no Jobs to %s.\n" +msgstr "Abfrage nach Pool \"%s\" ergab keine Jobs für die Migration.\n" -#: src/stored/block.c:264 src/stored/block.c:280 src/stored/block.c:290 -#, c-format -msgid "" -"Volume data error at %u:%u! Wanted ID: \"%s\", got \"%s\". Buffer " -"discarded.\n" -msgstr "" +#: src/dird/mac_sql.c:576 +#, fuzzy, c-format +msgid "Regex pattern matched no Jobs to %s.\n" +msgstr "Regex pattern hat auf keine Jobs für die Migration zugetroffen.\n" -#: src/stored/block.c:305 -#, c-format -msgid "" -"Volume data error at %u:%u! Block length %u is insane (too large), probably " -"due to a bad archive.\n" -msgstr "" +#: src/dird/mac_sql.c:625 +#, fuzzy, c-format +msgid "No %s found to %s.\n" +msgstr "Keine %ss zum Migrieren gefunden.\n" -#: src/stored/block.c:331 +#: src/dird/mac_sql.c:629 #, c-format -msgid "" -"Volume data error at %u:%u!\n" -"Block checksum mismatch in block=%u len=%d: calc=%x blk=%x\n" -msgstr "" +msgid "SQL error. Expected 1 MediaId got %d\n" +msgstr "SQL Fehler. Erwartet 1 MediaId erhalten: %d\n" -#: src/stored/block.c:452 -#, c-format -msgid "Cannot write block. Device at EOM. dev=%s\n" -msgstr "" +#: src/dird/mac.c:130 src/dird/mac.c:144 +#, fuzzy, c-format +msgid "No previous Job found to %s.\n" +msgstr "Keinen vorherigen Job zum migrieren gefunden.\n" -#: src/stored/block.c:458 -#, c-format -msgid "Attempt to write on read-only Volume. dev=%s\n" -msgstr "" +#: src/dird/mac.c:136 +#, fuzzy +msgid "Create bootstrap file failed.\n" +msgstr "Konnte bootstrap Datei %s nicht erzeugen. ERR=%s\n" -#: src/stored/block.c:464 -#, c-format -msgid "Attempt to write on closed device=%s\n" -msgstr "" +#: src/dird/mac.c:146 +#, fuzzy, c-format +msgid "Previous Job has no data to %s.\n" +msgstr "Vorheriger Job hat keine Daten zu migrieren.\n" -#: src/stored/block.c:513 +#: src/dird/mac.c:163 #, c-format -msgid "User defined maximum volume capacity %s exceeded on device %s.\n" -msgstr "" +msgid "Job resource not found for \"%s\".\n" +msgstr "Job Ressource für \"%s\"nicht gefunden.\n" -#: src/stored/block.c:528 +#: src/dird/mac.c:167 #, c-format -msgid "Unable to write EOF. ERR=%s\n" -msgstr "" +msgid "Previous Job resource not found for \"%s\".\n" +msgstr "Vorherige Job Ressource für \"%s\"nicht gefunden.\n" -#: src/stored/block.c:554 src/stored/block.c:588 -msgid "Write block header zeroed.\n" -msgstr "" +#: src/dird/mac.c:183 +msgid "setup job failed.\n" +msgstr "Job Einrichtung Fehlgeschlagen.\n" -#: src/stored/block.c:580 +#: src/dird/mac.c:239 #, c-format -msgid "Block checksum changed during write: before=%ud after=%ud\n" -msgstr "" +msgid "Pool for JobId %s not in database. ERR=%s\n" +msgstr "Pool für JobId %s ist nicht in der Datenbank. ERR=%s\n" -#: src/stored/block.c:607 +#: src/dird/mac.c:247 #, c-format -msgid "Write error at %u:%u on device %s. ERR=%s.\n" -msgstr "" +msgid "Pool resource \"%s\" not found.\n" +msgstr "Pool Ressource \"%s\" nicht gefunden.\n" -#: src/stored/block.c:614 +#: src/dird/mac.c:333 #, c-format -msgid "End of Volume \"%s\" at %u:%u on device %s. Write of %u bytes got %d.\n" +msgid "JobId %s already %s probably by another Job. %s stopped.\n" msgstr "" -#: src/stored/block.c:695 src/stored/block.c:701 -#, c-format -msgid "Backspace file at EOT failed. ERR=%s\n" -msgstr "" +#: src/dird/mac.c:343 +#, fuzzy, c-format +msgid "Start %s JobId %s, Job=%s\n" +msgstr "Start Sicherung JobId %s, Job=%s\n" -#: src/stored/block.c:708 -#, c-format -msgid "Backspace record at EOT failed. ERR=%s\n" +#: src/dird/mac.c:485 +msgid "The Storage daemon does not support SDCallsClient.\n" msgstr "" -#: src/stored/block.c:725 -#, c-format -msgid "Re-read last block at EOT failed. ERR=%s" -msgstr "" +#: src/dird/mac.c:590 +#, fuzzy +msgid "Could not start migration/copy job.\n" +msgstr "Konnte Migrationsjob nicht starten.\n" + +#: src/dird/mac.c:592 +#, fuzzy, c-format +msgid "%s JobId %d started.\n" +msgstr "Clone JobId %d gestartet.\n" -#: src/stored/block.c:735 +#: src/dird/mac.c:726 #, c-format -msgid "" -"Re-read of last block: block numbers differ by more than one.\n" -"Probable tape misconfiguration and data loss. Read block=%u Want block=%u.\n" -msgstr "" +msgid "%s OK -- with warnings" +msgstr "%s OK -- mit Warnungen" -#: src/stored/block.c:740 +#: src/dird/mac.c:728 #, c-format -msgid "" -"Re-read of last block OK, but block numbers differ. Read block=%u Want block=" -"%u.\n" -msgstr "" +msgid "%s OK" +msgstr "%s OK" -#: src/stored/block.c:744 -msgid "Re-read of last block succeeded.\n" -msgstr "" +#: src/dird/mac.c:733 +#, c-format +msgid "*** %s Error ***" +msgstr "*** %s Fehler ***" -#: src/stored/block.c:777 +#: src/dird/mac.c:749 #, c-format -msgid "" -"Error writing final EOF to tape. This Volume may not be readable.\n" -"%s" -msgstr "" +msgid "%s Canceled" +msgstr "%s Abgebrochen" -#: src/stored/block.c:791 +#: src/dird/mac.c:764 #, c-format -msgid "" -"Error writing final part to DVD. This Volume may not be readable.\n" -"%s" -msgstr "" +msgid "Inappropriate %s term code" +msgstr "Unzutreffender %s Beendigungskode" -#: src/stored/block.c:801 -#, fuzzy -msgid "Error sending Volume info to Director.\n" -msgstr "Keine Volumes zum Wiederherstellen gefunden.\n" +#: src/dird/mac.c:774 +#, fuzzy, c-format +msgid "%s -- no files to %s" +msgstr "%s -- keine Dateien zur Migration." -#: src/stored/block.c:896 -#, c-format +#: src/dird/mac.c:790 src/dird/backup.c:853 +#, fuzzy, c-format +msgid "%s (%sB)" +msgstr "%s -- keine Dateien zur Migration." + +#: src/dird/mac.c:794 +#, fuzzy, c-format msgid "" -"Error while writing, current part number is less than the total number of " -"parts (%d/%d, device=%s)\n" +"%s %s %s (%s):\n" +" Build OS: %s %s %s\n" +" Prev Backup JobId: %s\n" +" Prev Backup Job: %s\n" +" New Backup JobId: %s\n" +" Current JobId: %s\n" +" Current Job: %s\n" +" Backup Level: %s%s\n" +" Client: %s\n" +" FileSet: \"%s\" %s\n" +" Read Pool: \"%s\" (From %s)\n" +" Read Storage: \"%s\" (From %s)\n" +" Write Pool: \"%s\" (From %s)\n" +" Write Storage: \"%s\" (From %s)\n" +" Catalog: \"%s\" (From %s)\n" +" Start time: %s\n" +" End time: %s\n" +" Elapsed time: %s\n" +" Priority: %d\n" +" SD Files Written: %s\n" +" SD Bytes Written: %s (%sB)\n" +" Rate: %.1f KB/s\n" +" Volume name(s): %s\n" +" Volume Session Id: %d\n" +" Volume Session Time: %d\n" +" Last Volume Bytes: %s\n" +" SD Errors: %d\n" +" SD termination status: %s\n" +" Termination: %s\n" +"\n" msgstr "" +"%s %s (%s): %s\n" +" vorheriges Backup JobId:%s\n" +" neues Backup JobId: %s\n" +" Migration JobId: %s\n" +" Migration Job: %s\n" +" Backup Level: %s%s\n" +" Client: %s\n" +" FileSet: \"%s\" %s\n" +" Lese Pool: \"%s\" (Von %s)\n" +" Lese Storage: \"%s\" (Von %s)\n" +" Schreib Pool: \"%s\" (Von %s)\n" +" Schreib Storage: \"%s\" (Von %s)\n" +" Start Zeit: %s\n" +" End Zeit: %s\n" +" Verstichene Zeit: %s\n" +" Priorität: %d\n" +" SD Dateien geschrieben: %s\n" +" SD Bytes geschrieben: %s (%sB)\n" +" Geschwindigkeit: %.1f KB/s\n" +" Volume name(s): %s\n" +" Volume Session Id: %d\n" +" Volume Session Time: %d\n" +" Last Volume Bytes: %s (%sB)\n" +" SD Fehler: %d\n" +" SD Beendigungsstatus : %s\n" +" Beendigungsstatus: %s\n" +"\n" -#: src/stored/block.c:904 +#: src/dird/mac.c:869 src/dird/mac.c:872 #, c-format -msgid "Unable to open device next part %s: ERR=%s\n" -msgstr "" +msgid "No Next Pool specification found in Pool \"%s\".\n" +msgstr "Keine \"Next Pool\" Spezifikation in Pool \"%s\" gefunden.\n" -#: src/stored/block.c:924 +#: src/dird/mac.c:879 #, c-format -msgid "" -"End of Volume \"%s\" at %u:%u on device %s (part_size=%s, free_space=%s, " -"free_space_errno=%d, errmsg=%s).\n" -msgstr "" +msgid "No Storage specification found in Next Pool \"%s\".\n" +msgstr "Keine \"Storage\" Spezifikation in \"Next Pool\" \"%s\" gefunden.\n" -#: src/stored/block.c:937 -#, c-format +#: src/dird/autoprune.c:64 msgid "" -"End of Volume \"%s\" at %u:%u on device %s (part_size=%s, free_space=%s, " -"free_space_errno=%d).\n" +"End auto prune.\n" +"\n" msgstr "" +"Ende automatische Säuberung.\n" +"\n" -#: src/stored/block.c:980 -#, fuzzy -msgid "Job failed or canceled.\n" -msgstr "JobId %s, Job %s zum Abbruch markiert.\n" - -#: src/stored/block.c:986 -msgid "Attempt to read past end of tape or file.\n" +#: src/dird/ua_restore.c:138 +msgid "\"RegexWhere\" specification not authorized.\n" msgstr "" -#: src/stored/block.c:995 -#, c-format -msgid "Attempt to read closed device: fd=%d at file:blk %u:%u on device %s\n" +#: src/dird/ua_restore.c:145 +msgid "\"where\" specification not authorized.\n" msgstr "" -#: src/stored/block.c:1005 -#, c-format -msgid "Block buffer size looping problem on device %s\n" +#: src/dird/ua_restore.c:163 +msgid "" +"No Restore Job Resource found in bacula-dir.conf.\n" +"You must create at least one before running this command.\n" msgstr "" -#: src/stored/block.c:1017 -#, c-format -msgid "Unable to open device part=%d %s: ERR=%s\n" +#: src/dird/ua_restore.c:180 +msgid "Restore not done.\n" msgstr "" -#: src/stored/block.c:1044 -#, c-format -msgid "Read error on fd=%d at file:blk %u:%u on device %s. ERR=%s.\n" +#: src/dird/ua_restore.c:191 +msgid "Unable to construct a valid BSR. Cannot continue.\n" msgstr "" -#: src/stored/block.c:1057 -#, c-format -msgid "Read zero bytes at %u:%u on device %s.\n" +#: src/dird/ua_restore.c:195 src/dird/ua_restore.c:207 +msgid "No files selected to be restored.\n" msgstr "" -#: src/stored/block.c:1081 -#, c-format +#: src/dird/ua_restore.c:201 msgid "" -"Volume data error at %u:%u! Very short block of %d bytes on device %s " -"discarded.\n" -msgstr "" - -#: src/stored/block.c:1107 -#, c-format -msgid "Block length %u is greater than buffer %u. Attempting recovery.\n" -msgstr "" - -#: src/stored/block.c:1127 -#, c-format -msgid "Setting block buffer size to %u bytes.\n" +"\n" +"1 file selected to be restored.\n" +"\n" msgstr "" -#: src/stored/block.c:1142 +#: src/dird/ua_restore.c:203 #, c-format msgid "" -"Volume data error at %u:%u! Short block of %d bytes on device %s discarded.\n" +"\n" +"%s files selected to be restored.\n" +"\n" msgstr "" -#: src/lib/plugins.c:117 -#, fuzzy, c-format -msgid "Failed to open Plugin directory %s: ERR=%s\n" -msgstr "Kann Catalog DB Steuerdatei nicht öffnen %s: ERR=%s\n" - -#: src/lib/plugins.c:134 -#, c-format -msgid "Failed to find any plugins in %s\n" +#: src/dird/ua_restore.c:222 +msgid "No Client resource found!\n" msgstr "" -#: src/lib/plugins.c:168 -#, fuzzy, c-format -msgid "dlopen plugin %s failed: ERR=%s\n" -msgstr "Client id select fehlgeschlagen: ERR=%s\n" - -#: src/lib/plugins.c:179 -#, c-format -msgid "Lookup of loadPlugin in plugin %s failed: ERR=%s\n" +#: src/dird/ua_restore.c:330 +msgid "The restore will use the following job(s) as Base\n" msgstr "" -#: src/lib/plugins.c:188 +#: src/dird/ua_restore.c:351 #, c-format -msgid "Lookup of unloadPlugin in plugin %s failed: ERR=%s\n" -msgstr "" - -#: src/lib/pythonlib.c:116 -msgid "Could not initialize Python\n" +msgid "Missing value for keyword: %s\n" msgstr "" -#: src/lib/pythonlib.c:121 -#, c-format -msgid "Could not Run Python string %s\n" +#: src/dird/ua_restore.c:431 +msgid "List last 20 Jobs run" msgstr "" -#: src/lib/pythonlib.c:133 -msgid "Could not initialize Python Job type.\n" +#: src/dird/ua_restore.c:432 +msgid "List Jobs where a given File is saved" msgstr "" -#: src/lib/pythonlib.c:138 -#, c-format -msgid "Could not import Python script %s/%s. Python disabled.\n" +#: src/dird/ua_restore.c:433 +msgid "Enter list of comma separated JobIds to select" msgstr "" -#: src/lib/pythonlib.c:240 -msgid "Could not create Python Job Object.\n" +#: src/dird/ua_restore.c:434 +msgid "Enter SQL list command" msgstr "" -#: src/lib/pythonlib.c:253 src/lib/pythonlib.c:277 -#, c-format -msgid "Python function \"%s\" not found.\n" +#: src/dird/ua_restore.c:435 +msgid "Select the most recent backup for a client" msgstr "" -#: src/lib/pythonlib.c:292 -#, c-format -msgid "Unknown Python daemon event %s\n" +#: src/dird/ua_restore.c:436 +msgid "Select backup for a client before a specified time" msgstr "" -#: src/lib/pythonlib.c:317 -#, c-format -msgid "Unable to initialize the Python lock. ERR=%s\n" +#: src/dird/ua_restore.c:437 +msgid "Enter a list of files to restore" msgstr "" -#: src/lib/watchdog.c:96 -#, c-format -msgid "Unable to initialize watchdog lock. ERR=%s\n" +#: src/dird/ua_restore.c:438 +msgid "Enter a list of files to restore before a specified time" msgstr "" -#: src/lib/watchdog.c:193 -msgid "BUG! register_watchdog called before start_watchdog\n" +#: src/dird/ua_restore.c:439 +msgid "Find the JobIds of the most recent backup for a client" msgstr "" -#: src/lib/watchdog.c:196 -#, c-format -msgid "BUG! Watchdog %p has NULL callback\n" +#: src/dird/ua_restore.c:440 +msgid "Find the JobIds for a backup for a client before a specified time" msgstr "" -#: src/lib/watchdog.c:199 -#, c-format -msgid "BUG! Watchdog %p has zero interval\n" +#: src/dird/ua_restore.c:441 +msgid "Enter a list of directories to restore for found JobIds" msgstr "" -#: src/lib/watchdog.c:219 -msgid "BUG! unregister_watchdog_unlocked called before start_watchdog\n" +#: src/dird/ua_restore.c:442 +msgid "Select full restore to a specified Job date" msgstr "" -#: src/lib/watchdog.c:339 +#: src/dird/ua_restore.c:489 #, c-format -msgid "rwl_writelock failure. ERR=%s\n" +msgid "Unknown keyword: %s\n" msgstr "" -#: src/lib/watchdog.c:354 +#: src/dird/ua_restore.c:518 src/dird/ua_update.c:936 #, c-format -msgid "rwl_writeunlock failure. ERR=%s\n" +msgid "Improper date format: %s\n" msgstr "" -#: src/lib/attr.c:81 +#: src/dird/ua_restore.c:558 #, c-format -msgid "Error scanning attributes: %s\n" -msgstr "" - -#: src/lib/smartall.c:145 src/lib/smartall.c:256 src/lib/smartall.c:271 -msgid "Out of memory\n" -msgstr "" - -#: src/lib/smartall.c:150 -msgid "Too much memory used." +msgid "Error: Pool resource \"%s\" access not allowed.\n" msgstr "" -#: src/lib/smartall.c:180 -#, c-format -msgid "Attempt to free NULL called from %s:%d\n" +#: src/dird/ua_restore.c:574 +msgid "" +"\n" +"First you select one or more JobIds that contain files\n" +"to be restored. You will be presented several methods\n" +"of specifying the JobIds. Then you will be allowed to\n" +"select which files from those JobIds are to be restored.\n" +"\n" msgstr "" +"\n" +"Zuerst wählen Sie eine oder mehrere JobIds die Dateien enthalten\n" +"die wiederhergestellt werden sollen. Es werden mehrere Methoden\n" +"zur ermittlung der JobIds angezeigt. Dann können Sie auswählen, \n" +"welche Dateien von diesen JobIds wiederhergestellt werden sollen.\n" +"\n" -#: src/lib/smartall.c:194 -#, c-format -msgid "double free from %s:%d\n" +#: src/dird/ua_restore.c:587 +msgid "To select the JobIds, you have the following choices:\n" msgstr "" -#: src/lib/smartall.c:202 -#, c-format -msgid "qp->qnext->qprev != qp called from %s:%d\n" +#: src/dird/ua_restore.c:592 +msgid "Select item: " msgstr "" -#: src/lib/smartall.c:206 -#, c-format -msgid "qp->qprev->qnext != qp called from %s:%d\n" +#: src/dird/ua_restore.c:597 src/dird/ua_restore.c:632 +msgid "SQL query not authorized.\n" msgstr "" -#: src/lib/smartall.c:215 -#, c-format -msgid "Overrun buffer: len=%d addr=%p allocated: %s:%d called from %s:%d\n" +#: src/dird/ua_restore.c:610 +msgid "Enter Filename (no path):" msgstr "" -#: src/lib/smartall.c:293 -#, c-format -msgid "sm_realloc size: %d\n" +#: src/dird/ua_restore.c:625 src/dird/ua_restore.c:733 +msgid "Enter JobId(s), comma separated, to restore: " msgstr "" -#: src/lib/smartall.c:331 -#, c-format -msgid "sm_realloc %d at %p from %s:%d\n" +#: src/dird/ua_restore.c:635 +msgid "Enter SQL list command: " msgstr "" -#: src/lib/smartall.c:391 -#, c-format +#: src/dird/ua_restore.c:669 src/dird/ua_restore.c:692 msgid "" -"\n" -"Orphaned buffers exist. Dump terminated following\n" -" discovery of bad links in chain of orphaned buffers.\n" -" Buffer address with bad links: %p\n" +"Enter file names with paths, or < to enter a filename\n" +"containing a list of file names with paths, and terminate\n" +"them with a blank line.\n" msgstr "" -#: src/lib/smartall.c:436 -#, c-format -msgid "Damaged buffer found. Called from %s:%d\n" +#: src/dird/ua_restore.c:673 src/dird/ua_restore.c:696 +msgid "Enter full filename: " msgstr "" -#: src/lib/smartall.c:469 +#: src/dird/ua_restore.c:731 #, c-format -msgid "" -"\n" -"Damaged buffers found at %s:%d\n" -msgstr "" - -#: src/lib/smartall.c:472 -msgid " discovery of bad prev link.\n" +msgid "You have already selected the following JobIds: %s\n" msgstr "" -#: src/lib/smartall.c:475 -msgid " discovery of bad next link.\n" +#: src/dird/ua_restore.c:749 +msgid "" +"Enter full directory names or start the name\n" +"with a < to indicate it is a filename containing a list\n" +"of directories and terminate them with a blank line.\n" msgstr "" -#: src/lib/smartall.c:478 -msgid " discovery of data overrun.\n" +#: src/dird/ua_restore.c:753 +msgid "Enter directory name: " msgstr "" -#: src/lib/smartall.c:481 -msgid " NULL pointer.\n" +#: src/dird/ua_restore.c:769 +msgid "Enter JobId to get the state to restore: " msgstr "" -#: src/lib/smartall.c:487 -#, c-format -msgid " Buffer address: %p\n" +#: src/dird/ua_restore.c:808 +msgid "Invalid JobId in list.\n" msgstr "" -#: src/lib/smartall.c:494 +#: src/dird/ua_restore.c:827 #, c-format -msgid "Damaged buffer: %6u bytes allocated at line %d of %s %s\n" -msgstr "" - -#: src/lib/sellist.c:69 -msgid "Negative numbers not permitted.\n" +msgid "Access to JobId=%s (Job \"%s\") not authorized. Not selected.\n" msgstr "" -#: src/lib/sellist.c:106 -msgid "Selection items must be be greater than zero.\n" +#: src/dird/ua_restore.c:840 +msgid "No Jobs selected.\n" msgstr "" -#: src/lib/sellist.c:110 -msgid "Selection item too large.\n" +#: src/dird/ua_restore.c:845 +#, c-format +msgid "You have selected the following JobIds: %s\n" msgstr "" -#: src/lib/sellist.c:167 -msgid "No input string given.\n" +#: src/dird/ua_restore.c:847 +#, c-format +msgid "You have selected the following JobId: %s\n" msgstr "" -#: src/lib/rwlock.c:307 -msgid "rwl_writeunlock called too many times.\n" +#: src/dird/ua_restore.c:857 +msgid "" +"The restored files will the most current backup\n" +"BEFORE the date you specify below.\n" +"\n" msgstr "" -#: src/lib/rwlock.c:312 -msgid "rwl_writeunlock by non-owner.\n" +#: src/dird/ua_restore.c:860 +msgid "Enter date as YYYY-MM-DD HH:MM:SS :" msgstr "" -#: src/lib/rwlock.c:437 src/lib/save/devlock.c:501 src/lib/devlock.c:501 -#, c-format -msgid "Thread %d found unchanged elements %d times\n" +#: src/dird/ua_restore.c:866 +msgid "Improper date format.\n" msgstr "" -#: src/lib/rwlock.c:507 src/lib/save/devlock.c:571 src/lib/devlock.c:571 +#: src/dird/ua_restore.c:887 #, c-format -msgid "%02d: interval %d, writes %d, reads %d\n" +msgid "Cannot open file %s: ERR=%s\n" msgstr "" -#: src/lib/rwlock.c:517 src/lib/save/devlock.c:581 src/lib/devlock.c:581 +#: src/dird/ua_restore.c:895 src/dird/ua_restore.c:899 #, c-format -msgid "data %02d: value %d, %d writes\n" +msgid "Error occurred on line %d of file \"%s\"\n" msgstr "" -#: src/lib/rwlock.c:522 src/lib/save/devlock.c:586 src/lib/devlock.c:586 +#: src/dird/ua_restore.c:943 src/dird/ua_restore.c:971 #, c-format -msgid "Total: %d thread writes, %d data writes\n" -msgstr "" - -#: src/lib/rwlock.c:594 src/lib/save/devlock.c:658 src/lib/devlock.c:658 -msgid "Try write lock" -msgstr "" - -#: src/lib/rwlock.c:600 src/lib/save/devlock.c:664 src/lib/devlock.c:664 -msgid "Try read lock" -msgstr "" - -#: src/lib/rwlock.c:656 src/lib/save/devlock.c:720 src/lib/devlock.c:720 -msgid "Create thread" -msgstr "" - -#: src/lib/rwlock.c:666 src/lib/save/devlock.c:730 src/lib/devlock.c:730 -msgid "Join thread" +msgid "No database record found for: %s\n" msgstr "" -#: src/lib/rwlock.c:668 src/lib/save/devlock.c:732 src/lib/devlock.c:732 -#, c-format -msgid "%02d: interval %d, updates %d, r_collisions %d, w_collisions %d\n" +#: src/dird/ua_restore.c:959 +msgid "No JobId specified cannot continue.\n" msgstr "" -#: src/lib/rwlock.c:680 src/lib/save/devlock.c:744 src/lib/devlock.c:744 +#: src/dird/ua_restore.c:992 #, c-format -msgid "data %02d: value %d, %d updates\n" +msgid "No table found: %s\n" msgstr "" -#: src/lib/bget_msg.c:97 -msgid "Status OK\n" +#: src/dird/ua_restore.c:1050 +msgid "" +"\n" +"\n" +"For one or more of the JobIds selected, no files were found,\n" +"so file selection is not possible.\n" +"Most likely your retention policy pruned the files.\n" msgstr "" -#: src/lib/bget_msg.c:101 -#, fuzzy, c-format -msgid "bget_msg: unknown signal %d\n" -msgstr "unbekannt" - -#: src/lib/bsock.c:131 -#, fuzzy, c-format +#: src/dird/ua_restore.c:1053 msgid "" -"Could not connect to %s on %s:%d. ERR=%s\n" -"Retrying ...\n" -msgstr "Konnte FileSet \"%s\" Eintrag nicht erzeugen. ERR=%s\n" - -#: src/lib/bsock.c:137 -#, fuzzy, c-format -msgid "Unable to connect to %s on %s:%d. ERR=%s\n" -msgstr "Konnte Job Eintrag nicht holen. ERR=%s\n" - -#: src/lib/bsock.c:207 -#, fuzzy, c-format -msgid "bnet_host2ipaddrs() for host \"%s\" failed: ERR=%s\n" -msgstr "Erzeugung des db Filename Eintrags %s fehlgeschlagen. ERR=%s\n" +"\n" +"Do you want to restore all the files? (yes|no): " +msgstr "" -#: src/lib/bsock.c:260 -#, fuzzy, c-format -msgid "Socket open error. proto=%d port=%d. ERR=%s\n" -msgstr "Socket Fehler auf %s Kommando: ERR=%s\n" +#: src/dird/ua_restore.c:1056 +msgid "" +"\n" +"Regexp matching files to restore? (empty to abort): " +msgstr "" -#: src/lib/bsock.c:273 +#: src/dird/ua_restore.c:1072 #, fuzzy, c-format -msgid "Source address bind error. proto=%d. ERR=%s\n" -msgstr "Socket Fehler auf %s Kommando: ERR=%s\n" +msgid "Regex compile error: %s\n" +msgstr "Regex Übersetzungsfehler. ERR=%s\n" -#: src/lib/bsock.c:284 src/lib/bsock.c:320 src/lib/bnet_server.c:218 +#: src/dird/ua_restore.c:1137 #, c-format -msgid "Cannot set SO_KEEPALIVE on socket: %s\n" +msgid "" +"\n" +"Building directory tree for JobId(s) %s ... " msgstr "" -#: src/lib/bsock.c:292 +#: src/dird/ua_restore.c:1207 #, c-format -msgid "Cannot set TCP_KEEPIDLE on socket: %s\n" +msgid "" +"\n" +"%s files inserted into the tree and marked for extraction.\n" msgstr "" -#: src/lib/bsock.c:339 -#, fuzzy, c-format -msgid "Could not init bsock mutex. ERR=%s\n" -msgstr "Konnte job queue nicht initialiseren: ERR=%s\n" +#: src/dird/ua_restore.c:1210 +#, c-format +msgid "" +"\n" +"%s files inserted into the tree.\n" +msgstr "" -#: src/lib/bsock.c:374 +#: src/dird/ua_restore.c:1285 #, c-format -msgid "Socket has errors=%d on call to %s:%s:%d\n" +msgid "Error getting FileSet \"%s\": ERR=%s\n" msgstr "" -#: src/lib/bsock.c:381 +#: src/dird/ua_restore.c:1290 +#, fuzzy, c-format +msgid "FileSet argument: %s\n" +msgstr "FileSet: name=%s\n" + +#: src/dird/ua_restore.c:1302 #, c-format -msgid "Socket is terminated=%d on call to %s:%s:%d\n" +msgid "No FileSet found for client \"%s\".\n" msgstr "" -#: src/lib/bsock.c:389 +#: src/dird/ua_restore.c:1308 #, c-format -msgid "Socket has insane msglen=%d on call to %s:%s:%d\n" +msgid "Error getting FileSet record: %s\n" msgstr "" -#: src/lib/bsock.c:427 -#, fuzzy, c-format -msgid "Write error sending %d bytes to %s:%s:%d: ERR=%s\n" +#: src/dird/ua_restore.c:1309 +msgid "" +"This probably means you modified the FileSet.\n" +"Continuing anyway.\n" msgstr "" -"Fehler beim senden des Kommandos Hello an File daemon auf \"%s:%d\". ERR=%s\n" -#: src/lib/bsock.c:433 +#: src/dird/ua_restore.c:1324 #, c-format -msgid "Wrote %d bytes to %s:%s:%d, but only %d accepted.\n" +msgid "Pool \"%s\" not found, using any pool.\n" msgstr "" -#: src/lib/bsock.c:522 src/lib/bsock.c:583 +#: src/dird/ua_restore.c:1351 src/dird/ua_restore.c:1367 #, c-format -msgid "Read expected %d got %d from %s:%s:%d\n" +msgid "No Full backup before %s found.\n" msgstr "" -#: src/lib/bsock.c:542 -#, c-format -msgid "Packet size too big from \"%s:%s:%d. Terminating connection.\n" +#: src/dird/ua_restore.c:1396 +msgid "No jobs found.\n" msgstr "" -#: src/lib/bsock.c:572 -#, fuzzy, c-format -msgid "Read error from %s:%s:%d: ERR=%s\n" -msgstr "Socket Fehler auf %s Kommando: ERR=%s\n" +#: src/dird/ua_restore.c:1531 +#, c-format +msgid "" +"\n" +"Warning Storage is overridden by \"%s\" on the command line.\n" +msgstr "" -#: src/lib/bsock.c:663 -#, fuzzy -msgid "fread attr spool I/O error.\n" -msgstr "Regex Übersetzungsfehler. ERR=%s\n" +#: src/dird/ua_restore.c:1536 +#, c-format +msgid "" +"This may not work because of two different MediaTypes:\n" +" Storage MediaType=\"%s\"\n" +" Volume MediaType=\"%s\".\n" +"\n" +msgstr "" -#: src/lib/bsock.c:724 -msgid "Could not malloc BSOCK data buffer\n" +#: src/dird/ua_restore.c:1555 +#, c-format +msgid "Using Storage \"%s\" from MediaType \"%s\".\n" msgstr "" -#: src/lib/bsock.c:742 src/lib/bsock.c:761 +#: src/dird/ua_restore.c:1558 #, c-format -msgid "sockopt error: %s\n" +msgid "Storage \"%s\" not found, using Storage \"%s\" from MediaType \"%s\".\n" msgstr "" -#: src/lib/bsock.c:748 src/lib/bsock.c:767 +#: src/dird/ua_restore.c:1567 #, c-format -msgid "Warning network buffer = %d bytes not max size.\n" +msgid "" +"\n" +"Unable to find Storage resource for\n" +"MediaType \"%s\", needed by the Jobs you selected.\n" msgstr "" -#: src/lib/bsock.c:787 src/lib/bsock.c:821 -#, fuzzy, c-format -msgid "fcntl F_GETFL error. ERR=%s\n" -msgstr "Regex Übersetzungsfehler. ERR=%s\n" +#: src/dird/bsr.c:161 +#, c-format +msgid "Unable to get Job record. ERR=%s\n" +msgstr "Konnte Job Eintrag nicht holen. ERR=%s\n" -#: src/lib/bsock.c:793 src/lib/bsock.c:827 src/lib/bsock.c:859 -#, fuzzy, c-format -msgid "fcntl F_SETFL error. ERR=%s\n" -msgstr "Regex Übersetzungsfehler. ERR=%s\n" +#: src/dird/bsr.c:172 +#, c-format +msgid "Unable to get Job Volume Parameters. ERR=%s\n" +msgstr "Konnte Job Volume Parameter nicht holen. ERR=%s\n" -#: src/lib/bsock.c:1032 src/qt-console/bcomm/dircomm_auth.cpp:112 -#, fuzzy, c-format -msgid "Director authorization problem at \"%s:%d\"\n" -msgstr "Authorisationsproblem: FD an \"%s:%d\" erfordert TLS.\n" +#: src/dird/bsr.c:220 +#, c-format +msgid "Unable to create bootstrap file %s. ERR=%s\n" +msgstr "Konnte bootstrap Datei %s nicht erzeugen. ERR=%s\n" -#: src/lib/bsock.c:1039 src/qt-console/bcomm/dircomm_auth.cpp:119 -#, fuzzy, c-format -msgid "" -"Authorization problem: Remote server at \"%s:%d\" did not advertise required " -"TLS support.\n" +#: src/dird/bsr.c:229 +#, fuzzy +msgid "No files found to read. No bootstrap file written.\n" msgstr "" -"Authorisationsproblem: Entfernter Server hat benötigte TLS Unterstützung " -"nicht angeboten.\n" - -#: src/lib/bsock.c:1047 src/qt-console/bcomm/dircomm_auth.cpp:127 -#, fuzzy, c-format -msgid "" -"Authorization problem with Director at \"%s:%d\": Remote server requires " -"TLS.\n" -msgstr "Authorisationsproblem: Enfernter Server erfordert TLS.\n" +"Keine Dateien für Wiederherstellung/Migration gefunden. Keine Bootstrap " +"Datei geschrieben.\n" -#: src/lib/bsock.c:1059 src/qt-console/bcomm/dircomm_auth.cpp:138 -#, fuzzy, c-format -msgid "TLS negotiation failed with Director at \"%s:%d\"\n" -msgstr "TLS Aushandlung fehlgeschlagen mit SD an \"%s:%d\"\n" +#: src/dird/bsr.c:233 +msgid "Error writing bsr file.\n" +msgstr "Fehler beim schreiben der bsr Datei.\n" -#: src/lib/bsock.c:1069 src/qt-console/bcomm/dircomm_auth.cpp:150 +#: src/dird/bsr.c:238 #, c-format +msgid "Bootstrap records written to %s\n" +msgstr "Bootstrap Einträge geschrieben nach %s\n" + +#: src/dird/bsr.c:286 +#, fuzzy msgid "" -"Bad response to Hello command: ERR=%s\n" -"The Director at \"%s:%d\" is probably not running.\n" +"The Job will require the following (*=>InChanger):\n" +" Volume(s) Storage(s) SD Device(s)\n" +"===========================================================================\n" msgstr "" +"Der Job wird folgendes benötigen:\n" +" Volume(s) Storage(s) SD Device(s)\n" +"===========================================================================\n" -#: src/lib/bsock.c:1078 src/qt-console/bcomm/dircomm_auth.cpp:159 -#, fuzzy, c-format -msgid "Director at \"%s:%d\" rejected Hello command\n" -msgstr "File daemon auf \"%s:%d\" hat Hello Kommando abgelehnt\n" +#: src/dird/bsr.c:306 +msgid "No Volumes found to restore.\n" +msgstr "Keine Volumes zum Wiederherstellen gefunden.\n" -#: src/lib/bsock.c:1088 src/qt-console/bcomm/dircomm_auth.cpp:171 -#, fuzzy, c-format +#: src/dird/bsr.c:308 msgid "" -"Authorization problem with Director at \"%s:%d\"\n" -"Most likely the passwords do not agree.\n" -"If you are using TLS, there may have been a certificate validation error " -"during the TLS handshake.\n" -"Please see " +"\n" +"Volumes marked with \"*\" are in the Autochanger.\n" msgstr "" -"Kann mit File daemon on \"%s:%d\" nicht authentisieren. Mögliche Ursachen:\n" -"Passworte oder Namen nicht gleich oder\n" -"Maximum Concurrent Jobs überschritten auf dem FD oder\n" -"FD Netzwerk durcheinander (Daemon neustarten).\n" -"Für Hilfe bitte unter http://www.bacula.org/rel-manual/faq." -"html#AuthorizationErrors nachsehen.\n" -#: src/lib/message.c:362 src/lib/message.c:372 -#, c-format -msgid "Could not open console message file %s: ERR=%s\n" +#: src/dird/fd_cmds.c:89 +msgid "Client: " msgstr "" -#: src/lib/message.c:377 +#: src/dird/fd_cmds.c:125 #, c-format -msgid "Could not get con mutex: ERR=%s\n" -msgstr "" +msgid "File daemon \"%s\" rejected Job command: %s\n" +msgstr "File daemon \"%s\" hat Job Kommando abgewiesen: %s\n" -#: src/lib/message.c:482 -msgid "Bacula Message" -msgstr "" +#: src/dird/fd_cmds.c:138 +#, c-format +msgid "Error updating Client record. ERR=%s\n" +msgstr "Fehler beim Aktualisieren des Client Eintrags. ERR=%s\n" -#: src/lib/message.c:486 +#: src/dird/fd_cmds.c:143 #, c-format -msgid "open mail pipe %s failed: ERR=%s\n" -msgstr "" +msgid "FD gave bad response to JobId command: %s\n" +msgstr "FD hat fehlerhafte Antwort auf JobId Kommando zurückgegeben: %s\n" -#: src/lib/message.c:577 -msgid "open mail pipe failed.\n" -msgstr "" +#: src/dird/fd_cmds.c:172 src/dird/fd_cmds.c:260 +msgid ", since=" +msgstr ", seit=" -#: src/lib/message.c:590 -#, c-format -msgid "close error: ERR=%s\n" +#: src/dird/fd_cmds.c:237 +msgid "No prior or suitable Full backup found in catalog. Doing FULL backup.\n" msgstr "" +"Kein vorheriges oder passendes Full backup in catalog gefunden. Führe FULL " +"backup durch.\n" -#: src/lib/message.c:601 +#: src/dird/fd_cmds.c:238 src/dird/fd_cmds.c:244 src/dird/fd_cmds.c:253 #, c-format -msgid "Mail prog: %s" -msgstr "" +msgid " (upgraded from %s)" +msgstr " (erweitert von %s)" -#: src/lib/message.c:610 -#, c-format +#: src/dird/fd_cmds.c:243 +#, fuzzy msgid "" -"Mail program terminated in error.\n" -"CMD=%s\n" -"ERR=%s\n" +"No prior or suitable Differential backup found in catalog. Doing " +"Differential backup.\n" msgstr "" +"Kein vorheriges oder passendes Full backup in catalog gefunden. Führe FULL " +"backup durch.\n" -#: src/lib/message.c:713 +#: src/dird/fd_cmds.c:251 #, c-format -msgid "fopen %s failed: ERR=%s\n" -msgstr "" - -#: src/lib/message.c:835 src/lib/message.c:838 -msgid "Msg delivery error: Unable to store data in database.\n" +msgid "Prior failed job found in catalog. Upgrading to %s.\n" msgstr "" +"Vorheriger fehlgeschlagener job in catalog gefunden. Erweitere auf %s.\n" -#: src/lib/message.c:890 +#: src/dird/fd_cmds.c:329 #, c-format +msgid "Unimplemented backup level %d %c\n" +msgstr "Nicht implementierter backup level %d %c\n" + +#: src/dird/fd_cmds.c:402 msgid "" -"Msg delivery error: Operator mail program terminated in error.\n" -"CMD=%s\n" -"ERR=%s\n" +"FD compression disabled for this Job because AllowCompress=No in Storage " +"resource.\n" msgstr "" -#: src/lib/message.c:911 -#, fuzzy, c-format -msgid "Msg delivery error: fopen %s failed: ERR=%s\n" -msgstr "Catalog Fehler beim Aktualisieren von volume \"%s\". ERR=%s" - -#: src/lib/message.c:1230 +#: src/dird/fd_cmds.c:501 src/filed/job.c:1014 #, c-format -msgid "%s: ABORTING due to ERROR in %s:%d\n" -msgstr "" +msgid "Cannot run program: %s. ERR=%s\n" +msgstr "Kann Programm: %s nicht starten. ERR=%s\n" -#: src/lib/message.c:1234 -#, c-format -msgid "%s: ERROR TERMINATION at %s:%d\n" -msgstr "" +#: src/dird/fd_cmds.c:512 src/dird/fd_cmds.c:537 src/dird/fd_cmds.c:551 +msgid ">filed: write error on socket\n" +msgstr ">filed: Schreibfehler auf socket\n" -#: src/lib/message.c:1239 +#: src/dird/fd_cmds.c:518 #, c-format -msgid "%s: Fatal Error because: " -msgstr "" +msgid "Error running program: %s. ERR=%s\n" +msgstr "Fehler beim Start des Programms: %s. ERR=%s\n" -#: src/lib/message.c:1241 +#: src/dird/fd_cmds.c:527 #, c-format -msgid "%s: Fatal Error at %s:%d because:\n" -msgstr "" +msgid "Cannot open included file: %s. ERR=%s\n" +msgstr "Kann inkludierte Datei nicht öffnen: %s. ERR=%s\n" -#: src/lib/message.c:1245 -#, c-format -msgid "%s: ERROR: " -msgstr "" +#: src/dird/fd_cmds.c:672 +#, fuzzy, c-format +msgid "Client \"%s\" RunScript failed.\n" +msgstr "Pool Ressource \"%s\" nicht gefunden.\n" -#: src/lib/message.c:1247 +#: src/dird/fd_cmds.c:695 #, c-format -msgid "%s: ERROR in %s:%d " +msgid "" +"Client \"%s\" may not be used to restore this job. Please upgrade your " +"client.\n" msgstr "" -#: src/lib/message.c:1250 +#: src/dird/fd_cmds.c:776 +#, fuzzy +msgid "RestoreObject failed.\n" +msgstr "Wiederherstellung läuft..." + +#: src/dird/fd_cmds.c:816 #, c-format -msgid "%s: Warning: " +msgid "" +" %s\n" +msgstr " --> Run=%s\n" -#: src/lib/util.c:285 -msgid "Created, not yet running" +#: src/dird/ua_run.c:1132 +msgid "Cannot use your regexp.\n" msgstr "" -#: src/lib/util.c:288 -msgid "Canceled by user" +#: src/dird/ua_run.c:1145 src/dird/ua_run.c:1175 +msgid "Levels:\n" msgstr "" -#: src/lib/util.c:291 -msgid "Verify found differences" +#: src/dird/ua_run.c:1151 +msgid "VirtualFull" msgstr "" -#: src/lib/util.c:294 -#, fuzzy -msgid "Waiting for File daemon" -msgstr "File daemon" - -#: src/lib/util.c:297 -#, fuzzy -msgid "Waiting for Storage daemon" -msgstr "Storage daemon" - -#: src/lib/util.c:300 -msgid "Waiting for higher priority jobs" +#: src/dird/ua_run.c:1152 src/dird/ua_run.c:1181 +msgid "Select level" msgstr "" -#: src/lib/util.c:303 -msgid "Batch inserting file records" +#: src/dird/ua_run.c:1176 +msgid "Initialize Catalog" msgstr "" -#: src/lib/util.c:334 -msgid "Fatal Error" +#: src/dird/ua_run.c:1180 +msgid "Verify Volume Data (not yet implemented)" msgstr "" -#: src/lib/util.c:340 -msgid "Differences" +#: src/dird/ua_run.c:1201 +msgid "Level not appropriate for this Job. Cannot be changed.\n" msgstr "" -#: src/lib/util.c:343 -msgid "Unknown term code" +#: src/dird/ua_run.c:1232 +#, c-format +msgid "" +"Run Admin Job\n" +"JobName: %s\n" +"FileSet: %s\n" +"Client: %s\n" +"Storage: %s\n" +"When: %s\n" +"Priority: %d\n" msgstr "" -#: src/lib/util.c:359 src/lib/jcr.c:232 -msgid "Backup" +#: src/dird/ua_run.c:1286 +#, c-format +msgid "" +"Run Backup job\n" +"JobName: %s\n" +"Level: %s\n" +"Client: %s\n" +"FileSet: %s\n" +"Pool: %s (From %s)\n" +"%sStorage: %s (From %s)\n" +"When: %s\n" +"Priority: %d\n" msgstr "" -#: src/lib/util.c:362 -#, fuzzy -msgid "Migrated Job" -msgstr "Konnte Migrationsjob nicht starten.\n" +#: src/dird/ua_run.c:1315 +#, fuzzy, c-format +msgid "Could not get job record for selected JobId. ERR=%s" +msgstr "Konnte job record für JobId %s zum migrieren nicht holen. ERR=%s" -#: src/lib/util.c:365 -msgid "Verify" +#: src/dird/ua_run.c:1354 +#, c-format +msgid "" +"Run Verify Job\n" +"JobName: %s\n" +"Level: %s\n" +"Client: %s\n" +"FileSet: %s\n" +"Pool: %s (From %s)\n" +"Storage: %s (From %s)\n" +"Verify Job: %s\n" +"Verify List: %s\n" +"When: %s\n" +"Priority: %d\n" msgstr "" -#: src/lib/util.c:368 src/wx-console/wxbrestorepanel.cpp:404 -#: src/wx-console/wxbrestorepanel.cpp:2000 -msgid "Restore" +#: src/dird/ua_run.c:1383 +msgid "Please enter a JobId for restore: " msgstr "" -#: src/lib/util.c:371 src/wx-console/wxbmainframe.cpp:276 -msgid "Console" +#: src/dird/ua_run.c:1421 +#, c-format +msgid "" +"Run Restore job\n" +"JobName: %s\n" +"Bootstrap: %s\n" +"RegexWhere: %s\n" +"Replace: %s\n" +"FileSet: %s\n" +"Backup Client: %s\n" +"Restore Client: %s\n" +"Storage: %s\n" +"When: %s\n" +"Catalog: %s\n" +"Priority: %d\n" msgstr "" -#: src/lib/util.c:374 -msgid "System or Console" +#: src/dird/ua_run.c:1473 +#, c-format +msgid "" +"Run Restore job\n" +"JobName: %s\n" +"Bootstrap: %s\n" +"Where: %s\n" +"Replace: %s\n" +"FileSet: %s\n" +"Backup Client: %s\n" +"Restore Client: %s\n" +"Storage: %s\n" +"When: %s\n" +"Catalog: %s\n" +"Priority: %d\n" msgstr "" -#: src/lib/util.c:377 -msgid "Admin" +#: src/dird/ua_run.c:1502 +#, c-format +msgid "" +"Run Restore job\n" +"JobName: %s\n" +"Bootstrap: %s\n" msgstr "" -#: src/lib/util.c:380 src/lib/util.c:470 -msgid "Archive" +#: src/dird/ua_run.c:1510 +#, c-format +msgid "RegexWhere: %s\n" msgstr "" -#: src/lib/util.c:383 -msgid "Job Copy" -msgstr "" +#: src/dird/ua_run.c:1513 +#, fuzzy, c-format +msgid "Where: %s\n" +msgstr " opcmd=%s\n" -#: src/lib/util.c:386 -msgid "Copy" +#: src/dird/ua_run.c:1517 +#, c-format +msgid "" +"Replace: %s\n" +"Client: %s\n" +"Storage: %s\n" +"JobId: %s\n" +"When: %s\n" +"Catalog: %s\n" +"Priority: %d\n" msgstr "" -#: src/lib/util.c:389 -msgid "Migrate" +#: src/dird/ua_run.c:1572 +msgid "Run Copy job\n" msgstr "" -#: src/lib/util.c:392 -msgid "Scan" -msgstr "" +#: src/dird/ua_run.c:1574 +#, fuzzy +msgid "Run Migration job\n" +msgstr "Konnte Migrationsjob nicht starten.\n" -#: src/lib/util.c:396 -msgid "Unknown Type" +#: src/dird/ua_run.c:1606 +#, c-format +msgid "Unknown Job Type=%d\n" msgstr "" -#: src/lib/util.c:406 -msgid "Truncate" +#: src/dird/ua_run.c:1680 +#, c-format +msgid "Value missing for keyword %s\n" msgstr "" -#: src/lib/util.c:409 src/filed/restore.c:1164 -msgid "None" +#: src/dird/ua_run.c:1690 +msgid "JobId specified twice.\n" msgstr "" -#: src/lib/util.c:441 -msgid "Verify Init Catalog" +#: src/dird/ua_run.c:1699 src/dird/ua_run.c:1839 +msgid "Client specified twice.\n" msgstr "" -#: src/lib/util.c:450 -msgid "Verify Data" +#: src/dird/ua_run.c:1707 +msgid "FileSet specified twice.\n" msgstr "" -#: src/lib/util.c:453 -msgid "Virtual Full" +#: src/dird/ua_run.c:1715 +msgid "Level specified twice.\n" msgstr "" -#: src/lib/util.c:469 -msgid "Append" +#: src/dird/ua_run.c:1724 +msgid "Storage specified twice.\n" msgstr "" -#: src/lib/util.c:471 -#, fuzzy -msgid "Disabled" -msgstr "ist nicht aktiviert" - -#: src/lib/util.c:473 -msgid "Used" +#: src/dird/ua_run.c:1732 +msgid "RegexWhere or Where specified twice.\n" msgstr "" -#: src/lib/util.c:474 -msgid "Cleaning" +#: src/dird/ua_run.c:1737 +msgid "No authorization for \"regexwhere\" specification.\n" msgstr "" -#: src/lib/util.c:475 -msgid "Purged" +#: src/dird/ua_run.c:1744 +msgid "Where or RegexWhere specified twice.\n" msgstr "" -#: src/lib/util.c:476 -msgid "Recycle" +#: src/dird/ua_run.c:1749 +msgid "No authoriztion for \"where\" specification.\n" msgstr "" -#: src/lib/util.c:477 -msgid "Read-Only" +#: src/dird/ua_run.c:1756 +msgid "Bootstrap specified twice.\n" msgstr "" -#: src/lib/util.c:489 -msgid "Invalid volume status" +#: src/dird/ua_run.c:1764 +msgid "Replace specified twice.\n" msgstr "" -#: src/lib/util.c:753 src/lib/util.c:763 src/lib/util.c:771 src/lib/util.c:778 -#: src/lib/util.c:785 src/lib/util.c:799 src/lib/util.c:809 src/lib/util.c:822 -#: src/lib/util.c:833 src/filed/restore.c:1180 -msgid "*none*" +#: src/dird/ua_run.c:1772 +msgid "When specified twice.\n" msgstr "" -#: src/lib/util.c:867 -msgid "Working directory not defined. Cannot continue.\n" +#: src/dird/ua_run.c:1780 +msgid "Priority specified twice.\n" msgstr "" -#: src/lib/util.c:870 -#, c-format -msgid "Working Directory: \"%s\" not found. Cannot continue.\n" +#: src/dird/ua_run.c:1785 +msgid "Priority must be positive nonzero setting it to 10.\n" msgstr "" -#: src/lib/util.c:874 -#, c-format -msgid "Working Directory: \"%s\" is not a directory. Cannot continue.\n" +#: src/dird/ua_run.c:1795 +msgid "Verify Job specified twice.\n" msgstr "" -#: src/lib/save/devlock.c:330 src/lib/devlock.c:330 -msgid "writeunlock called too many times.\n" +#: src/dird/ua_run.c:1823 +msgid "Migration Job specified twice.\n" msgstr "" -#: src/lib/save/devlock.c:335 src/lib/devlock.c:335 -msgid "writeunlock by non-owner.\n" +#: src/dird/ua_run.c:1831 +msgid "Pool specified twice.\n" msgstr "" -#: src/lib/daemon.c:65 -#, fuzzy, c-format -msgid "Cannot fork to become daemon: ERR=%s\n" -msgstr "Kann var context nicht erzeugen: ERR=%s\n" +#: src/dird/ua_run.c:1847 +#, fuzzy +msgid "Restore Client specified twice.\n" +msgstr "Kein storage angegeben.\n" -#: src/lib/tls.c:90 -#, c-format -msgid "" -"Error with certificate at depth: %d, issuer = %s, subject = %s, ERR=%d:%s\n" -msgstr "" +#: src/dird/ua_run.c:1854 +#, fuzzy +msgid "Plugin Options not yet implemented.\n" +msgstr "Kein storage angegeben.\n" -#: src/lib/tls.c:127 -msgid "Error initializing SSL context" -msgstr "" +#: src/dird/ua_run.c:1857 +#, fuzzy +msgid "Plugin Options specified twice.\n" +msgstr "Kein storage angegeben.\n" -#: src/lib/tls.c:148 -msgid "Error loading certificate verification stores" +#: src/dird/ua_run.c:1862 +msgid "No authoriztion for \"PluginOptions\" specification.\n" msgstr "" -#: src/lib/tls.c:153 -msgid "" -"Either a certificate file or a directory must be specified as a verification " -"store\n" -msgstr "" +#: src/dird/ua_run.c:1869 +#, fuzzy +msgid "Spool flag specified twice.\n" +msgstr "Kein storage angegeben.\n" + +#: src/dird/ua_run.c:1876 +#, fuzzy +msgid "Invalid spooldata flag.\n" +msgstr "Ungültige JobId gefunden.\n" + +#: src/dird/ua_run.c:1885 +#, fuzzy +msgid "IgnoreDuplicateCheck flag specified twice.\n" +msgstr "Kein storage angegeben.\n" + +#: src/dird/ua_run.c:1892 +#, fuzzy +msgid "Invalid ignoreduplicatecheck flag.\n" +msgstr "Ungültige JobId gefunden.\n" + +#: src/dird/ua_run.c:1897 +#, fuzzy +msgid "Accurate flag specified twice.\n" +msgstr "Kein storage angegeben.\n" -#: src/lib/tls.c:164 -msgid "Error loading certificate file" -msgstr "" +#: src/dird/ua_run.c:1904 +#, fuzzy +msgid "Invalid accurate flag.\n" +msgstr "Ungültige JobId gefunden.\n" -#: src/lib/tls.c:172 -msgid "Error loading private key" +#: src/dird/ua_run.c:1909 +msgid "Job name specified twice.\n" msgstr "" -#: src/lib/tls.c:180 -msgid "Unable to open DH parameters file" -msgstr "" +#: src/dird/ua_run.c:1917 +#, fuzzy +msgid "Media Type specified twice.\n" +msgstr "Kein storage angegeben.\n" -#: src/lib/tls.c:186 -msgid "Unable to load DH parameters from specified file" -msgstr "" +#: src/dird/ua_run.c:1925 +#, fuzzy +msgid "NextPool specified twice.\n" +msgstr "Kein storage angegeben.\n" -#: src/lib/tls.c:190 -msgid "Failed to set TLS Diffie-Hellman parameters" +#: src/dird/ua_run.c:1950 +#, c-format +msgid "Invalid keyword: %s\n" msgstr "" -#: src/lib/tls.c:200 -msgid "Error setting cipher list, no valid ciphers available\n" +#: src/dird/ua_run.c:1965 +#, c-format +msgid "Catalog \"%s\" not found\n" msgstr "" -#: src/lib/tls.c:259 -msgid "Peer failed to present a TLS certificate\n" +#: src/dird/ua_run.c:1969 +#, c-format +msgid "No authorization. Catalog \"%s\".\n" msgstr "" -#: src/lib/tls.c:304 +#: src/dird/ua_run.c:2003 #, c-format -msgid "Peer %s failed to present a TLS certificate\n" +msgid "Verify Job \"%s\" not found.\n" msgstr "" -#: src/lib/tls.c:416 -msgid "Error creating file descriptor-based BIO" +#: src/dird/ua_run.c:2013 +#, c-format +msgid "Migration Job \"%s\" not found.\n" msgstr "" -#: src/lib/tls.c:427 -msgid "Error creating new SSL object" +#: src/dird/ua_label.c:92 +msgid "Negative numbers not permitted\n" msgstr "" -#: src/lib/tls.c:491 src/lib/tls.c:514 -msgid "Connect failure" +#: src/dird/ua_label.c:121 +msgid "Values must be be greater than zero.\n" msgstr "" -#: src/lib/tls.c:594 src/lib/tls.c:598 -msgid "TLS shutdown failure." +#: src/dird/ua_label.c:125 +msgid "Slot too large.\n" msgstr "" -#: src/lib/tls.c:653 src/lib/tls.c:679 -msgid "TLS read/write failure." +#: src/dird/ua_label.c:195 src/dird/ua_label.c:518 src/dird/ua_label.c:1198 +msgid "No slots in changer to scan.\n" msgstr "" -#: src/lib/jcr.c:234 -msgid "Verifying" +#: src/dird/ua_label.c:207 src/dird/ua_label.c:529 +msgid "No Volumes found to label, or no barcodes.\n" msgstr "" -#: src/lib/jcr.c:236 -#, fuzzy -msgid "Restoring" -msgstr "Wiederherstellung läuft..." - -#: src/lib/jcr.c:238 -msgid "Archiving" +#: src/dird/ua_label.c:217 src/dird/ua_label.c:1219 +#, c-format +msgid "Slot %d greater than max %d ignored.\n" msgstr "" -#: src/lib/jcr.c:240 -msgid "Copying" +#: src/dird/ua_label.c:255 +#, c-format +msgid "No VolName for Slot=%d InChanger set to zero.\n" msgstr "" -#: src/lib/jcr.c:242 -msgid "Migration" +#: src/dird/ua_label.c:276 +#, c-format +msgid "Catalog record for Volume \"%s\" updated to reference slot %d.\n" msgstr "" -#: src/lib/jcr.c:244 -msgid "Scanning" +#: src/dird/ua_label.c:280 +#, c-format +msgid "Catalog record for Volume \"%s\" is up to date.\n" msgstr "" -#: src/lib/jcr.c:246 -#, fuzzy -msgid "Unknown operation" -msgstr "unbekannt" - -#: src/lib/jcr.c:255 -#, fuzzy -msgid "backup" -msgstr "Sicherung OK" - -#: src/lib/jcr.c:257 -msgid "verified" +#: src/dird/ua_label.c:286 +#, c-format +msgid "Volume \"%s\" not found in catalog. Slot=%d InChanger set to zero.\n" msgstr "" -#: src/lib/jcr.c:257 -msgid "verify" +#: src/dird/ua_label.c:383 +#, c-format +msgid "" +"Volume \"%s\" has VolStatus %s. It must be Purged or Recycled before " +"relabeling.\n" msgstr "" -#: src/lib/jcr.c:259 -#, fuzzy -msgid "restored" -msgstr "Job Ressource" - -#: src/lib/jcr.c:259 -#, fuzzy -msgid "restore" -msgstr "Job Ressource" - -#: src/lib/jcr.c:261 -msgid "archived" +#: src/dird/ua_label.c:399 +msgid "Enter new Volume name: " msgstr "" -#: src/lib/jcr.c:261 -msgid "archive" +#: src/dird/ua_label.c:412 +#, c-format +msgid "Media record for new Volume \"%s\" already exists.\n" msgstr "" -#: src/lib/jcr.c:263 -msgid "copied" +#: src/dird/ua_label.c:430 +msgid "Enter slot (0 or Enter for none): " msgstr "" -#: src/lib/jcr.c:263 -msgid "copy" +#: src/dird/ua_label.c:458 +#, c-format +msgid "Delete of Volume \"%s\" failed. ERR=%s" msgstr "" -#: src/lib/jcr.c:265 -msgid "migrated" +#: src/dird/ua_label.c:461 +#, c-format +msgid "Old volume \"%s\" deleted from catalog.\n" msgstr "" -#: src/lib/jcr.c:265 -msgid "migrate" +#: src/dird/ua_label.c:472 +#, c-format +msgid "Requesting to mount %s ...\n" msgstr "" -#: src/lib/jcr.c:267 -msgid "scanned" +#: src/dird/ua_label.c:494 +msgid "Do not forget to mount the drive!!!\n" msgstr "" -#: src/lib/jcr.c:267 -msgid "scan" +#: src/dird/ua_label.c:534 +msgid "" +"The following Volumes will be labeled:\n" +"Slot Volume\n" +"==============\n" msgstr "" -#: src/lib/jcr.c:269 -#, fuzzy -msgid "unknown action" -msgstr "unbekannt" - -#: src/lib/jcr.c:343 -#, fuzzy, c-format -msgid "pthread_once failed. ERR=%s\n" -msgstr "pthread_cond_wait: ERR=%s\n" - -#: src/lib/jcr.c:350 -#, fuzzy, c-format -msgid "Could not init msg_queue mutex. ERR=%s\n" -msgstr "Konnte job queue nicht initialiseren: ERR=%s\n" - -#: src/lib/jcr.c:403 -msgid "NULL jcr.\n" +#: src/dird/ua_label.c:543 +msgid "Do you want to label these Volumes? (yes|no): " msgstr "" -#: src/lib/jcr.c:509 +#: src/dird/ua_label.c:563 #, c-format -msgid "JCR use_count=%d JobId=%d\n" +msgid "Media record for Slot %d Volume \"%s\" already exists.\n" msgstr "" -#: src/lib/jcr.c:619 -#, fuzzy, c-format -msgid "pthread_setspecific failed: ERR=%s\n" -msgstr "Media id select fehlgeschlagen: ERR=%s\n" - -#: src/lib/jcr.c:1103 +#: src/dird/ua_label.c:569 #, c-format -msgid "" -"Watchdog sending kill after %d secs to thread stalled reading Storage " -"daemon.\n" +msgid "Error setting InChanger: ERR=%s" msgstr "" -#: src/lib/jcr.c:1115 +#: src/dird/ua_label.c:592 #, c-format -msgid "" -"Watchdog sending kill after %d secs to thread stalled reading File daemon.\n" +msgid "Maximum pool Volumes=%d reached.\n" msgstr "" -#: src/lib/jcr.c:1127 +#: src/dird/ua_label.c:600 #, c-format -msgid "" -"Watchdog sending kill after %d secs to thread stalled reading Director.\n" +msgid "Catalog record for cleaning tape \"%s\" successfully created.\n" msgstr "" -#: src/lib/res.c:65 +#: src/dird/ua_label.c:607 #, c-format -msgid "rwl_writelock failure at %s:%d: ERR=%s\n" +msgid "Catalog error on cleaning tape: %s" msgstr "" -#: src/lib/res.c:75 +#: src/dird/ua_label.c:643 #, c-format -msgid "rwl_writeunlock failure at %s:%d:. ERR=%s\n" +msgid "Illegal character \"%c\" in a volume name.\n" msgstr "" -#: src/lib/parse_conf.c:177 -msgid "***UNKNOWN***" +#: src/dird/ua_label.c:650 src/dird/ua_cmds.c:341 +msgid "Volume name too long.\n" msgstr "" -#: src/lib/parse_conf.c:278 src/lib/parse_conf.c:299 +#: src/dird/ua_label.c:690 #, c-format -msgid "expected an =, got: %s" +msgid "Sending relabel command from \"%s\" to \"%s\" ...\n" msgstr "" -#: src/lib/parse_conf.c:308 +#: src/dird/ua_label.c:697 #, c-format -msgid "Unknown item code: %d\n" +msgid "Sending label command for Volume \"%s\" Slot %d ...\n" msgstr "" -#: src/lib/parse_conf.c:348 +#: src/dird/ua_label.c:738 #, c-format -msgid "message type: %s not found" +msgid "Catalog record for Volume \"%s\", Slot %d successfully created.\n" msgstr "" -#: src/lib/parse_conf.c:386 +#: src/dird/ua_label.c:751 #, c-format -msgid "Attempt to redefine name \"%s\" to \"%s\"." +msgid "Label command failed for Volume %s.\n" msgstr "" -#: src/lib/parse_conf.c:483 -#, c-format -msgid "Attempt to redefine resource \"%s\" referenced on line %d : %s\n" +#: src/dird/ua_label.c:765 +msgid "Could not open SD socket.\n" msgstr "" -#: src/lib/parse_conf.c:519 +#: src/dird/ua_label.c:837 src/dird/ua_label.c:847 #, c-format -msgid "Too many %s directives. Max. is %d. line %d: %s\n" +msgid "Invalid Slot number: %s\n" msgstr "" -#: src/lib/parse_conf.c:530 +#: src/dird/ua_label.c:856 #, c-format -msgid "Could not find config Resource \"%s\" referenced on line %d : %s\n" +msgid "Invalid Volume name: %s\n" msgstr "" -#: src/lib/parse_conf.c:593 +#: src/dird/ua_label.c:950 #, c-format -msgid "Missing config Resource \"%s\" referenced on line %d : %s\n" +msgid "Device \"%s\" has %d slots.\n" msgstr "" -#: src/lib/parse_conf.c:665 +#: src/dird/ua_label.c:996 #, c-format -msgid "expected a size number, got: %s" +msgid "Pool \"%s\" resource not found for volume \"%s\"!\n" msgstr "" -#: src/lib/parse_conf.c:670 -#, fuzzy, c-format -msgid "expected a speed number, got: %s" -msgstr "Dateiname erwartet, erhalten: %s" +#: src/dird/ua_label.c:1210 +#, fuzzy +msgid "No Volumes found, or no barcodes.\n" +msgstr "Keine Volumes zum Wiederherstellen gefunden.\n" -#: src/lib/parse_conf.c:681 -#, fuzzy, c-format -msgid "expected a %s, got: %s" -msgstr "Erwartete ein \"ist gleich\", erhalten: %s" +#: src/dird/ua_label.c:1213 +msgid "" +" Slot | Volume Name | Status | Media Type | " +"Pool |\n" +msgstr "" -#: src/lib/parse_conf.c:682 -msgid "size" +#: src/dird/ua_label.c:1214 +msgid "" +"------+------------------+-----------+----------------------" +"+--------------------|\n" msgstr "" -#: src/lib/parse_conf.c:682 -msgid "speed" +#: src/dird/ua_cmds.c:95 +msgid "Add media to a pool" msgstr "" -#: src/lib/parse_conf.c:803 -#, c-format -msgid "Expected a Tape Label keyword, got: %s" +#: src/dird/ua_cmds.c:96 +msgid "Autodisplay console messages" msgstr "" -#: src/lib/parse_conf.c:886 -#, c-format -msgid "Unable to initialize resource lock. ERR=%s\n" +#: src/dird/ua_cmds.c:97 +msgid "Automount after label" msgstr "" -#: src/lib/parse_conf.c:894 -msgid "Config filename too long.\n" +#: src/dird/ua_cmds.c:98 +msgid "Cancel a job" msgstr "" -#: src/lib/parse_conf.c:917 -#, c-format -msgid "Cannot open config file \"%s\": %s\n" +#: src/dird/ua_cmds.c:99 +#, fuzzy +msgid "Create DB Pool from resource" +msgstr "Pool Ressource" + +#: src/dird/ua_cmds.c:100 +msgid "Delete volume, pool or job" msgstr "" -#: src/lib/parse_conf.c:934 -msgid "" -"Currently we cannot handle UTF-16 source files. Please convert the conf file " -"to UTF-8\n" +#: src/dird/ua_cmds.c:101 +msgid "Disable a job, attributes batch process" msgstr "" -#: src/lib/parse_conf.c:938 -#, c-format -msgid "Expected a Resource name identifier, got: %s" +#: src/dird/ua_cmds.c:102 +msgid "Enable a job, attributes batch process" msgstr "" -#: src/lib/parse_conf.c:954 -#, c-format -msgid "expected resource name, got: %s" +#: src/dird/ua_cmds.c:103 +msgid "Performs FileSet estimate, listing gives full listing" msgstr "" -#: src/lib/parse_conf.c:965 -#, c-format -msgid "not in resource definition: %s" +#: src/dird/ua_cmds.c:106 src/dird/ua_cmds.c:130 +msgid "Terminate Bconsole session" msgstr "" -#: src/lib/parse_conf.c:990 -#, c-format -msgid "" -"Keyword \"%s\" not permitted in this resource.\n" -"Perhaps you left the trailing brace off of the previous resource." +#: src/dird/ua_cmds.c:107 +msgid "Non-interactive gui mode" msgstr "" -#: src/lib/parse_conf.c:1001 -msgid "Name not specified for resource" +#: src/dird/ua_cmds.c:108 +msgid "Print help on specific command" msgstr "" -#: src/lib/parse_conf.c:1011 -#, c-format -msgid "unexpected token %d %s in resource definition" +#: src/dird/ua_cmds.c:113 +msgid "Label a tape" msgstr "" -#: src/lib/parse_conf.c:1017 -#, c-format -msgid "Unknown parser state %d\n" +#: src/dird/ua_cmds.c:114 +msgid "List objects from catalog" msgstr "" -#: src/lib/parse_conf.c:1022 -msgid "End of conf file reached with unclosed resource." +#: src/dird/ua_cmds.c:118 +msgid "Full or long list like list command" msgstr "" -#: src/lib/mem_pool.c:112 -#, c-format -msgid "MemPool index %d larger than max %d\n" +#: src/dird/ua_cmds.c:121 +msgid "Display pending messages" msgstr "" -#: src/lib/mem_pool.c:130 src/lib/mem_pool.c:150 src/lib/mem_pool.c:186 -#: src/lib/mem_pool.c:257 src/lib/mem_pool.c:277 src/lib/mem_pool.c:312 -#: src/lib/mem_pool.c:623 -#, c-format -msgid "Out of memory requesting %d bytes\n" +#: src/dird/ua_cmds.c:122 +msgid "Print current memory usage" msgstr "" -#: src/lib/mem_pool.c:167 -msgid "obuf is NULL\n" +#: src/dird/ua_cmds.c:123 +#, fuzzy +msgid "Mount storage" +msgstr "Run storage override" + +#: src/dird/ua_cmds.c:126 +msgid "Prune expired records from catalog" +msgstr "" + +#: src/dird/ua_cmds.c:129 +#, fuzzy +msgid "Purge records from catalog" +msgstr "File Eintrag nicht im Catalog gefunden.\n" + +#: src/dird/ua_cmds.c:131 +msgid "Query catalog" msgstr "" -#: src/lib/berrno.c:63 -msgid "Child exited normally." -msgstr "" +#: src/dird/ua_cmds.c:132 +#, fuzzy +msgid "Restore files" +msgstr "Wiederherstellung läuft..." -#: src/lib/berrno.c:70 -msgid "Unknown error during program execvp" +#: src/dird/ua_cmds.c:137 +msgid "Relabel a tape" msgstr "" -#: src/lib/berrno.c:73 -#, c-format -msgid "Child exited with code %d" +#: src/dird/ua_cmds.c:140 +msgid "Release storage" msgstr "" -#: src/lib/berrno.c:81 -#, c-format -msgid "Child died from signal %d: %s" +#: src/dird/ua_cmds.c:141 +msgid "Reload conf file" msgstr "" -#: src/lib/berrno.c:87 -msgid "Invalid errno. No error message possible." -msgstr "" +#: src/dird/ua_cmds.c:142 +#, fuzzy +msgid "Run a job" +msgstr "Konnte Migrationsjob nicht starten.\n" -#: src/lib/bnet.c:134 -#, c-format -msgid "Attr spool write error. ERR=%s\n" +#: src/dird/ua_cmds.c:147 +msgid "Report status" msgstr "" -#: src/lib/bnet.c:279 src/lib/bnet.c:320 -msgid "TLS connection initialization failed.\n" -msgstr "" +#: src/dird/ua_cmds.c:150 +#, fuzzy +msgid "Stop a job" +msgstr "Konnte Migrationsjob nicht starten.\n" -#: src/lib/bnet.c:287 -msgid "TLS Negotiation failed.\n" +#: src/dird/ua_cmds.c:151 +msgid "Sets debug level" msgstr "" -#: src/lib/bnet.c:293 src/lib/bnet.c:335 -msgid "" -"TLS certificate verification failed. Peer certificate did not match a " -"required commonName\n" +#: src/dird/ua_cmds.c:154 +msgid "Sets bandwidth" msgstr "" -#: src/lib/bnet.c:342 -#, c-format -msgid "" -"TLS host certificate verification failed. Host name \"%s\" did not match " -"presented certificate\n" +#: src/dird/ua_cmds.c:157 +msgid "Sets new client address -- if authorized" msgstr "" -#: src/lib/bnet.c:359 -msgid "TLS enabled but not configured.\n" -msgstr "" +#: src/dird/ua_cmds.c:158 +#, fuzzy +msgid "Show resource records" +msgstr "Job Ressource" -#: src/lib/bnet.c:365 -msgid "TLS enable but not configured.\n" +#: src/dird/ua_cmds.c:161 +msgid "Use SQL to query catalog" msgstr "" -#: src/lib/bnet.c:481 -msgid "No problem." +#: src/dird/ua_cmds.c:162 +msgid "Print current time" msgstr "" -#: src/lib/bnet.c:484 -msgid "Authoritative answer for host not found." +#: src/dird/ua_cmds.c:163 +msgid "Turn on/off trace to file" msgstr "" -#: src/lib/bnet.c:487 -msgid "Non-authoritative for host not found, or ServerFail." +#: src/dird/ua_cmds.c:164 +msgid "Truncate one or more Volumes" msgstr "" -#: src/lib/bnet.c:490 -msgid "Non-recoverable errors, FORMERR, REFUSED, or NOTIMP." +#: src/dird/ua_cmds.c:165 +msgid "Unmount storage" msgstr "" -#: src/lib/bnet.c:493 -msgid "Valid name, no data record of resquested type." +#: src/dird/ua_cmds.c:168 +msgid "Umount - for old-time Unix guys, see unmount" msgstr "" -#: src/lib/bnet.c:496 -msgid "Unknown error." +#: src/dird/ua_cmds.c:171 +msgid "Update volume, pool or stats" msgstr "" -#: src/lib/bnet.c:755 -#, c-format -msgid "Unknown sig %d" +#: src/dird/ua_cmds.c:178 +msgid "Use catalog xxx" msgstr "" -#: src/lib/signal.c:67 -msgid "Invalid signal number" +#: src/dird/ua_cmds.c:179 +msgid "Does variable expansion" msgstr "" -#: src/lib/signal.c:152 src/lib/signal.c:154 -#, c-format -msgid "Bacula interrupted by signal %d: %s\n" +#: src/dird/ua_cmds.c:180 +msgid "Print Director version" msgstr "" -#: src/lib/signal.c:167 -#, c-format -msgid "Kaboom! %s, %s got signal %d - %s. Attempting traceback.\n" +#: src/dird/ua_cmds.c:181 +msgid "Wait until no jobs are running" msgstr "" -#: src/lib/signal.c:169 +#: src/dird/ua_cmds.c:234 #, c-format -msgid "Kaboom! exepath=%s\n" +msgid "%s: is an invalid command.\n" msgstr "" -#: src/lib/signal.c:210 -#, c-format -msgid "Fork error: ERR=%s\n" +#: src/dird/ua_cmds.c:275 +msgid "" +"You probably don't want to be using this command since it\n" +"creates database records without labeling the Volumes.\n" +"You probably want to use the \"label\" command.\n" +"\n" msgstr "" -#: src/lib/signal.c:218 +#: src/dird/ua_cmds.c:293 #, c-format -msgid "Calling: %s %s %s %s\n" +msgid "Pool already has maximum volumes=%d\n" msgstr "" -#: src/lib/signal.c:222 -#, c-format -msgid "execv: %s failed: ERR=%s\n" +#: src/dird/ua_cmds.c:294 +msgid "Enter new maximum (zero for unlimited): " msgstr "" -#: src/lib/signal.c:244 +#: src/dird/ua_cmds.c:314 #, c-format -msgid "It looks like the traceback worked...\n" +msgid "Enter number of Volumes to create. 0=>fixed name. Max=%d: " msgstr "" -#: src/lib/signal.c:246 +#: src/dird/ua_cmds.c:320 #, c-format -msgid "The btraceback call returned %d\n" +msgid "The number must be between 0 and %d\n" msgstr "" -#: src/lib/signal.c:306 -#, c-format -msgid "BA_NSIG too small (%d) should be (%d)\n" +#: src/dird/ua_cmds.c:328 +msgid "Enter Volume name: " msgstr "" -#: src/lib/signal.c:312 -msgid "UNKNOWN SIGNAL" +#: src/dird/ua_cmds.c:332 +msgid "Enter base volume name: " msgstr "" -#: src/lib/signal.c:313 -msgid "Hangup" +#: src/dird/ua_cmds.c:356 +msgid "Enter the starting number: " msgstr "" -#: src/lib/signal.c:314 -msgid "Interrupt" +#: src/dird/ua_cmds.c:361 +msgid "Start number must be greater than zero.\n" msgstr "" -#: src/lib/signal.c:315 -msgid "Quit" +#: src/dird/ua_cmds.c:372 +msgid "Enter slot (0 for none): " msgstr "" -#: src/lib/signal.c:316 -msgid "Illegal instruction" +#: src/dird/ua_cmds.c:376 +msgid "InChanger? yes/no: " msgstr "" -#: src/lib/signal.c:317 -msgid "Trace/Breakpoint trap" +#: src/dird/ua_cmds.c:404 +#, c-format +msgid "%d Volumes created in pool %s\n" msgstr "" -#: src/lib/signal.c:318 -msgid "Abort" +#: src/dird/ua_cmds.c:420 src/dird/ua_cmds.c:1131 +msgid "Turn on or off? " msgstr "" -#: src/lib/signal.c:320 -msgid "EMT instruction (Emulation Trap)" +#: src/dird/ua_cmds.c:547 +#, c-format +msgid "" +"Can't set %s RecyclePool to %s, %s is not in database.\n" +"Try to update it with 'update pool=%s'\n" msgstr "" -#: src/lib/signal.c:323 -msgid "IOT trap" +#: src/dird/ua_cmds.c:565 +#, c-format +msgid "" +"Can't set %s ScratchPool to %s, %s is not in database.\n" +"Try to update it with 'update pool=%s'\n" msgstr "" -#: src/lib/signal.c:325 -msgid "BUS error" +#: src/dird/ua_cmds.c:632 +#, c-format +msgid "" +"Error: Pool %s already exists.\n" +"Use update to change it.\n" msgstr "" -#: src/lib/signal.c:326 -msgid "Floating-point exception" +#: src/dird/ua_cmds.c:643 +#, c-format +msgid "Pool %s created.\n" msgstr "" -#: src/lib/signal.c:327 -msgid "Kill, unblockable" +#: src/dird/ua_cmds.c:671 +msgid "Failed to set bandwidth limit to Client.\n" msgstr "" -#: src/lib/signal.c:328 -msgid "User-defined signal 1" +#: src/dird/ua_cmds.c:674 +#, c-format +msgid "2000 OK Limiting bandwidth to %lldkb/s %s\n" msgstr "" -#: src/lib/signal.c:329 -msgid "Segmentation violation" +#: src/dird/ua_cmds.c:675 +msgid "on running and future jobs" msgstr "" -#: src/lib/signal.c:330 -msgid "User-defined signal 2" +#: src/dird/ua_cmds.c:697 +msgid "Set Bandwidth choice:\n" msgstr "" -#: src/lib/signal.c:331 -msgid "Broken pipe" +#: src/dird/ua_cmds.c:698 +msgid "Running Job" msgstr "" -#: src/lib/signal.c:332 -msgid "Alarm clock" +#: src/dird/ua_cmds.c:699 +msgid "Running and future Jobs for a Client" msgstr "" -#: src/lib/signal.c:333 -msgid "Termination" +#: src/dird/ua_cmds.c:700 +msgid "Choose where to limit the bandwidth" msgstr "" -#: src/lib/signal.c:335 -msgid "Stack fault" +#: src/dird/ua_cmds.c:712 +msgid "Enter new bandwidth limit kb/s: " msgstr "" -#: src/lib/signal.c:337 -msgid "Child status has changed" +#: src/dird/ua_cmds.c:749 src/dird/ua_cmds.c:809 +msgid "Unauthorized command from this console.\n" msgstr "" -#: src/lib/signal.c:338 -msgid "Continue" +#: src/dird/ua_cmds.c:766 +#, c-format +msgid "Client \"%s\" address set to %s\n" msgstr "" -#: src/lib/signal.c:339 -msgid "Stop, unblockable" +#: src/dird/ua_cmds.c:780 +#, c-format +msgid "Job Attributes Insertion %sabled\n" msgstr "" -#: src/lib/signal.c:340 -msgid "Keyboard stop" +#: src/dird/ua_cmds.c:813 +#, c-format +msgid "Job \"%s\" %sabled\n" msgstr "" -#: src/lib/signal.c:341 -msgid "Background read from tty" +#: src/dird/ua_cmds.c:1005 +msgid "Enter new debug level: " msgstr "" -#: src/lib/signal.c:342 -msgid "Background write to tty" +#: src/dird/ua_cmds.c:1018 +#, c-format +msgid "Incorrect tags found on command line %s\n" msgstr "" -#: src/lib/signal.c:343 -msgid "Urgent condition on socket" +#: src/dird/ua_cmds.c:1095 +msgid "All" msgstr "" -#: src/lib/signal.c:344 -msgid "CPU limit exceeded" +#: src/dird/ua_cmds.c:1096 +msgid "Select daemon type to set debug level" msgstr "" -#: src/lib/signal.c:345 -msgid "File size limit exceeded" +#: src/dird/ua_cmds.c:1191 +msgid "Client name missing.\n" msgstr "" -#: src/lib/signal.c:346 -msgid "Virtual alarm clock" +#: src/dird/ua_cmds.c:1203 src/dird/ua_cmds.c:1270 src/dird/ua_cmds.c:2016 +#, c-format +msgid "No authorization for Job \"%s\"\n" msgstr "" -#: src/lib/signal.c:347 -msgid "Profiling alarm clock" +#: src/dird/ua_cmds.c:1208 +msgid "Job name missing.\n" msgstr "" -#: src/lib/signal.c:348 -msgid "Window size change" -msgstr "" +#: src/dird/ua_cmds.c:1217 +#, fuzzy, c-format +msgid "Fileset \"%s\" not found.\n" +msgstr "FileSet Eintrag \"%s\" nicht gefunden\n" -#: src/lib/signal.c:349 -msgid "I/O now possible" +#: src/dird/ua_cmds.c:1221 +#, c-format +msgid "No authorization for FileSet \"%s\"\n" msgstr "" -#: src/lib/signal.c:351 -msgid "Power failure restart" -msgstr "" +#: src/dird/ua_cmds.c:1226 +#, fuzzy +msgid "Fileset name missing.\n" +msgstr "FileSet: name=%s\n" -#: src/lib/signal.c:354 -msgid "No runnable lwp" +#: src/dird/ua_cmds.c:1241 +msgid "Level value missing.\n" msgstr "" -#: src/lib/signal.c:357 -msgid "SIGLWP special signal used by thread library" +#: src/dird/ua_cmds.c:1248 +msgid "Invalid value for accurate. It must be yes or no.\n" msgstr "" -#: src/lib/signal.c:360 -msgid "Checkpoint Freeze" -msgstr "" +#: src/dird/ua_cmds.c:1253 +#, fuzzy +msgid "Accurate value missing.\n" +msgstr "FileSet: name=%s\n" -#: src/lib/signal.c:363 -msgid "Checkpoint Thaw" +#: src/dird/ua_cmds.c:1266 +msgid "No job specified.\n" msgstr "" -#: src/lib/signal.c:366 -msgid "Thread Cancellation" +#: src/dird/ua_cmds.c:1326 +msgid "Error sending include list.\n" msgstr "" -#: src/lib/signal.c:369 -msgid "Resource Lost (e.g. record-lock lost)" +#: src/dird/ua_cmds.c:1331 +msgid "Error sending exclude list.\n" msgstr "" -#: src/lib/ini.c:106 src/lib/ini.c:118 -#, c-format +#: src/dird/ua_cmds.c:1422 msgid "" -"Config file error: %s\n" -" : Line %d, col %d of file %s\n" -"%s\n" -msgstr "" - -#: src/lib/ini.c:308 src/lib/ini.c:383 -#, fuzzy, c-format -msgid "Cannot open config file %s: %s\n" -msgstr "Kann inkludierte Datei nicht öffnen: %s. ERR=%s\n" - -#: src/lib/btimers.c:265 -msgid "stop_btimer called with NULL btimer_id\n" -msgstr "" - -#: src/lib/bsys.c:72 -#, fuzzy, c-format -msgid "safe_unlink could not compile regex pattern \"%s\" ERR=%s\n" -msgstr "Konnte regex pattern \"%s\" nicht kompilieren ERR=%s\n" - -#: src/lib/bsys.c:261 src/lib/bsys.c:278 src/lib/bsys.c:302 src/lib/bsys.c:315 -#, c-format -msgid "Out of memory: ERR=%s\n" +"In general it is not a good idea to delete either a\n" +"Pool or a Volume since they may contain data.\n" +"\n" msgstr "" -#: src/lib/bsys.c:357 -msgid "Buffer overflow.\n" +#: src/dird/ua_cmds.c:1425 +msgid "Choose catalog item to delete" msgstr "" -#: src/lib/bsys.c:423 -msgid "Bad errno" +#: src/dird/ua_cmds.c:1436 +msgid "Nothing done.\n" msgstr "" -#: src/lib/bsys.c:438 +#: src/dird/ua_cmds.c:1464 #, c-format -msgid "Memset for %d bytes at %s:%d\n" +msgid "Are you sure you want to delete %d JobIds ? (yes/no): " msgstr "" -#: src/lib/bsys.c:468 -#, c-format -msgid "Cannot open pid file. %s ERR=%s\n" +#: src/dird/ua_cmds.c:1474 +msgid "Enter JobId to delete: " msgstr "" -#: src/lib/bsys.c:483 +#: src/dird/ua_cmds.c:1492 #, c-format -msgid "" -"%s is already running. pid=%d\n" -"Check file %s\n" +msgid "Jobid %s and associated records deleted from the catalog.\n" msgstr "" -#: src/lib/bsys.c:497 +#: src/dird/ua_cmds.c:1507 #, c-format -msgid "Could not open pid file. %s ERR=%s\n" +msgid "" +"\n" +"This command will delete volume %s\n" +"and all Jobs saved on that volume from the Catalog\n" msgstr "" -#: src/lib/bsys.c:608 +#: src/dird/ua_cmds.c:1514 #, c-format -msgid "Could not create state file. %s ERR=%s\n" +msgid "Are you sure you want to delete Volume \"%s\"? (yes/no): " msgstr "" -#: src/lib/bsys.c:627 -#, c-format -msgid "Write final hdr error: ERR=%s\n" +#: src/dird/ua_cmds.c:1527 +msgid "Can't list jobs on this volume\n" msgstr "" -#: src/lib/runscript.c:236 +#: src/dird/ua_cmds.c:1552 #, c-format -msgid "%s: run %s \"%s\"\n" +msgid "Are you sure you want to delete Pool \"%s\"? (yes/no): " msgstr "" -#: src/lib/runscript.c:245 +#: src/dird/ua_cmds.c:1666 #, c-format -msgid "Runscript: %s could not execute. ERR=%s\n" +msgid "Using Catalog name=%s DB=%s\n" msgstr "" -#: src/lib/runscript.c:254 -#, c-format -msgid "%s: %s\n" +#: src/dird/ua_cmds.c:1734 +msgid "ERR: Can't open db\n" msgstr "" -#: src/lib/runscript.c:259 -#, c-format -msgid "Runscript: %s returned non-zero status=%d. ERR=%s\n" +#: src/dird/ua_cmds.c:1781 +msgid "Wait on mount timed out\n" msgstr "" -#: src/lib/lex.c:91 src/wx-console/console_thread.cpp:212 -#, c-format -msgid "Problem probably begins at line %d.\n" +#: src/dird/ua_cmds.c:1791 +msgid "ERR: Job was not found\n" msgstr "" -#: src/lib/lex.c:96 src/wx-console/console_thread.cpp:217 -#, c-format +#: src/dird/ua_cmds.c:1867 msgid "" -"Config error: %s\n" -" : line %d, col %d of file %s\n" -"%s\n" -"%s" +" Command Description\n" +" ======= ===========\n" msgstr "" -#: src/lib/lex.c:100 +#: src/dird/ua_cmds.c:1871 #, c-format -msgid "Config error: %s\n" +msgid "" +" %-13s %s\n" +"\n" +"Arguments:\n" +"\t%s\n" msgstr "" -#: src/lib/lex.c:129 -msgid "Close of NULL file\n" +#: src/dird/ua_cmds.c:1876 +#, fuzzy, c-format +msgid " %-13s %s\n" +msgstr " --> Run=%s\n" + +#: src/dird/ua_cmds.c:1880 +#, c-format +msgid "" +"\n" +"Can't find %s command.\n" +"\n" msgstr "" -#: src/lib/lex.c:226 +#: src/dird/ua_cmds.c:1882 msgid "" -"get_char: called after EOF. You may have a open double quote without the " -"closing double quote.\n" +"\n" +"When at a prompt, entering a period cancels the command.\n" +"\n" msgstr "" -#: src/lib/lex.c:268 +#: src/dird/ua_cmds.c:1918 src/filed/status.c:77 #, c-format -msgid "Config token too long, file: %s, line %d, begins at line %d\n" +msgid "%s Version: %s (%s) %s %s %s %s\n" msgstr "" -#: src/lib/lex.c:292 -msgid "none" +#: src/dird/ua_cmds.c:1977 src/dird/ua_cmds.c:2004 src/dird/ua_cmds.c:2026 +#, c-format +msgid "No authorization for Catalog \"%s\"\n" msgstr "" -#: src/lib/lex.c:293 -msgid "comment" +#: src/dird/ua_cmds.c:2083 +#, c-format +msgid "Could not open catalog database \"%s\".\n" msgstr "" -#: src/lib/lex.c:294 -msgid "number" +#: src/dird/ua_cmds.c:2102 +#, c-format +msgid "Using Catalog \"%s\"\n" msgstr "" -#: src/lib/lex.c:295 -msgid "ip_addr" -msgstr "" +#: src/dird/backup.c:94 +msgid "No Storage specification found in Job or Pool.\n" +msgstr "Keine Storage Spezifikation in Job oder Pool gefunden.\n" -#: src/lib/lex.c:296 -msgid "identifier" -msgstr "" +#: src/dird/backup.c:254 +#, fuzzy, c-format +msgid "Using BaseJobId(s): %s\n" +msgstr "Migration benutzt JobId=%s Job=%s\n" -#: src/lib/lex.c:297 -msgid "string" -msgstr "" +#: src/dird/backup.c:264 +#, fuzzy +msgid "Cannot find previous jobids.\n" +msgstr "Kann Job resource %s nicht finden\n" -#: src/lib/lex.c:298 -msgid "quoted_string" +#: src/dird/backup.c:278 +msgid "Sending Accurate information to the FD.\n" msgstr "" -#: src/lib/lex.c:299 -msgid "include" -msgstr "" +#: src/dird/backup.c:435 +#, c-format +msgid "Start Backup JobId %s, Job=%s\n" +msgstr "Start Sicherung JobId %s, Job=%s\n" -#: src/lib/lex.c:300 -msgid "include_quoted_string" -msgstr "" +#: src/dird/backup.c:640 +#, c-format +msgid "Unexpected Client Job message: %s\n" +msgstr "Unerwartete Client Job Nachricht: %s\n" -#: src/lib/lex.c:301 -msgid "UTF-8 Byte Order Mark" -msgstr "" +#: src/dird/backup.c:653 +#, c-format +msgid "Network error with FD during %s: ERR=%s\n" +msgstr "Netzwerkfehler mit FD bei %s: ERR=%s\n" -#: src/lib/lex.c:302 -msgid "UTF-16le Byte Order Mark" -msgstr "" +#: src/dird/backup.c:687 +msgid "No Job status returned from FD.\n" +msgstr "FD hat keinen Jobstatus zurückgegeben.\n" -#: src/lib/lex.c:340 src/lib/lex.c:346 src/lib/lex.c:357 src/lib/lex.c:363 +#: src/dird/backup.c:847 #, c-format -msgid "expected a positive integer number, got: %s" +msgid " Base files/Used files: %lld/%lld (%.2f%%)\n" msgstr "" -#: src/lib/lex.c:479 +#: src/dird/backup.c:858 +#, fuzzy, c-format msgid "" -"This config file appears to be in an unsupported Unicode format (UTF-16be). " -"Please resave as UTF-8\n" +"%s %s %s (%s):\n" +" Build OS: %s %s %s\n" +" JobId: %d\n" +" Job: %s\n" +" Backup Level: %s%s\n" +" Client: \"%s\" %s\n" +" FileSet: \"%s\" %s\n" +" Pool: \"%s\" (From %s)\n" +" Catalog: \"%s\" (From %s)\n" +" Storage: \"%s\" (From %s)\n" +" Scheduled time: %s\n" +" Start time: %s\n" +" End time: %s\n" +" Elapsed time: %s\n" +" Priority: %d\n" +" FD Files Written: %s\n" +" SD Files Written: %s\n" +" FD Bytes Written: %s (%sB)\n" +" SD Bytes Written: %s (%sB)\n" +" Rate: %.1f KB/s\n" +" Software Compression: %s\n" +"%s VSS: %s\n" +" Encryption: %s\n" +" Accurate: %s\n" +" Volume name(s): %s\n" +" Volume Session Id: %d\n" +" Volume Session Time: %d\n" +" Last Volume Bytes: %s\n" +" Non-fatal FD errors: %d\n" +" SD Errors: %d\n" +" FD termination status: %s\n" +" SD termination status: %s\n" +" Termination: %s\n" +"\n" msgstr "" +"%s %s (%s): %s\n" +" JobId: %d\n" +" Job: %s\n" +" Backup Level: %s%s\n" +" Client: \"%s\" %s\n" +" FileSet: \"%s\" %s\n" +" Pool: \"%s\" (From %s)\n" +" Storage: \"%s\" (From %s)\n" +" Geplante Zeit: %s\n" +" Startzeit: %s\n" +" Endzeit: %s\n" +" Verstrichene Zeit: %s\n" +" Priorität: %d\n" +" FD Dateien geschrieben: %s\n" +" SD Dateien geschrieben: %s\n" +" FD Bytes geschrieben: %s (%sB)\n" +" SD Bytes geschrieben: %s (%sB)\n" +" Geschwindigkeit: %.1f KB/s\n" +" Software Kompression: %s\n" +" VSS: %s\n" +" Verschlüsselung: %s\n" +" Volume Name(n): %s\n" +" Volume Session Id: %d\n" +" Volume Session Zeit: %d\n" +" Letztes Volumen Bytes: %s (%sB)\n" +" Nicht-fatale FD Fehler %d\n" +" SD Fehler: %d\n" +" FD Beendigungsstatus: %s\n" +" SD Beendigungsstatus: %s\n" +" Beendigungsstatus: %s\n" +"\n" -#: src/lib/lex.c:625 src/lib/lex.c:653 +#: src/dird/backup.c:959 #, c-format -msgid "Cannot open included config file %s: %s\n" +msgid "Could not get Job Volume Parameters to update Bootstrap file. ERR=%s\n" msgstr "" +"Konnte Job Volume Parameter nicht holen um die Bootstrap Datei zu " +"aktualisieren. ERR=%s\n" -#: src/lib/lex.c:712 src/lib/lex.c:769 +#: src/dird/backup.c:995 #, c-format -msgid "expected an integer or a range, got %s: %s" +msgid "" +"Could not open WriteBootstrap file:\n" +"%s: ERR=%s\n" msgstr "" +"Konnte WriteBootstrap nicht öffnen. Datei:\n" +"%s: ERR=%s\n" -#: src/lib/lex.c:726 src/lib/lex.c:734 src/lib/lex.c:745 src/lib/lex.c:753 -#, c-format -msgid "expected an integer number, got %s: %s" +#: src/dird/ua_tree.c:62 +msgid "add dir/file to be restored recursively, wildcards allowed" msgstr "" -#: src/lib/lex.c:783 -#, c-format -msgid "expected a name, got %s: %s" +#: src/dird/ua_tree.c:63 +msgid "change current directory" msgstr "" -#: src/lib/lex.c:787 -#, c-format -msgid "name %s length %d too long, max is %d\n" +#: src/dird/ua_tree.c:64 +msgid "count marked files in and below the cd" msgstr "" -#: src/lib/lex.c:795 -#, c-format -msgid "expected a string, got %s: %s" +#: src/dird/ua_tree.c:65 +msgid "delete dir/file to be restored recursively in dir" msgstr "" -#: src/lib/var.c:2669 -msgid "everything ok" +#: src/dird/ua_tree.c:66 src/dird/ua_tree.c:67 +msgid "long list current directory, wildcards allowed" msgstr "" -#: src/lib/var.c:2670 -msgid "incomplete named character" +#: src/dird/ua_tree.c:68 +msgid "leave file selection mode" msgstr "" -#: src/lib/var.c:2671 -msgid "incomplete hexadecimal value" +#: src/dird/ua_tree.c:69 +msgid "estimate restore size" msgstr "" -#: src/lib/var.c:2672 -msgid "invalid hexadecimal value" +#: src/dird/ua_tree.c:70 +msgid "same as done command" msgstr "" -#: src/lib/var.c:2673 -msgid "octal value too large" +#: src/dird/ua_tree.c:71 +msgid "find files, wildcards allowed" msgstr "" -#: src/lib/var.c:2674 -msgid "invalid octal value" +#: src/dird/ua_tree.c:72 src/dird/ua_tree.c:85 src/dird/ua_tree.c:86 +msgid "print help" msgstr "" -#: src/lib/var.c:2675 -msgid "incomplete octal value" +#: src/dird/ua_tree.c:73 src/dird/ua_tree.c:74 +msgid "list current directory, wildcards allowed" msgstr "" -#: src/lib/var.c:2676 -msgid "incomplete grouped hexadecimal value" +#: src/dird/ua_tree.c:75 +msgid "list subdir in current directory, wildcards allowed" msgstr "" -#: src/lib/var.c:2677 -msgid "incorrect character class specification" +#: src/dird/ua_tree.c:76 +msgid "list the marked files in and below the cd" msgstr "" -#: src/lib/var.c:2678 -msgid "invalid expansion configuration" +#: src/dird/ua_tree.c:77 +msgid "list the marked files in" msgstr "" -#: src/lib/var.c:2679 -msgid "out of memory" +#: src/dird/ua_tree.c:78 +msgid "mark dir/file to be restored recursively, wildcards allowed" msgstr "" -#: src/lib/var.c:2680 -msgid "incomplete variable specification" +#: src/dird/ua_tree.c:79 +msgid "mark directory name to be restored (no files)" msgstr "" -#: src/lib/var.c:2681 -msgid "undefined variable" +#: src/dird/ua_tree.c:80 src/dird/ua_tree.c:81 +msgid "print current working directory" msgstr "" -#: src/lib/var.c:2682 -msgid "input is neither text nor variable" +#: src/dird/ua_tree.c:82 +msgid "unmark dir/file to be restored recursively in dir" msgstr "" -#: src/lib/var.c:2683 -#, fuzzy -msgid "unknown command character in variable" -msgstr "unbekannt" - -#: src/lib/var.c:2684 -msgid "malformatted search and replace operation" +#: src/dird/ua_tree.c:83 +msgid "unmark directory name only no recursion" msgstr "" -#: src/lib/var.c:2685 -#, fuzzy -msgid "unknown flag in search and replace operation" -msgstr "unbekannt" +#: src/dird/ua_tree.c:84 +msgid "quit and do not do restore" +msgstr "" -#: src/lib/var.c:2686 -msgid "invalid regex in search and replace operation" +#: src/dird/ua_tree.c:106 +msgid "" +"\n" +"You are now entering file selection mode where you add (mark) and\n" +"remove (unmark) files to be restored. No files are initially added, unless\n" +"you used the \"all\" keyword on the command line.\n" +"Enter \"done\" to leave this mode.\n" +"\n" msgstr "" -#: src/lib/var.c:2687 -msgid "missing parameter in command" +#: src/dird/ua_tree.c:117 src/dird/ua_tree.c:847 +#, c-format +msgid "cwd is: %s\n" msgstr "" -#: src/lib/var.c:2688 -msgid "empty search string in search and replace operation" +#: src/dird/ua_tree.c:126 src/dird/ua_tree.c:145 +#, c-format +msgid "Invalid command \"%s\". Enter \"done\" to exit.\n" msgstr "" -#: src/lib/var.c:2689 -msgid "start offset missing in cut operation" +#: src/dird/ua_tree.c:217 +#, c-format +msgid "" +"Something is wrong with the Delta sequence of %s, skiping new parts. Current " +"sequence is %d\n" msgstr "" -#: src/lib/var.c:2690 -#, fuzzy -msgid "offsets in cut operation delimited by unknown character" -msgstr "unbekannt" +#: src/dird/ua_tree.c:389 src/dird/ua_tree.c:401 src/dird/ua_tree.c:418 +msgid "No files marked.\n" +msgstr "" -#: src/lib/var.c:2691 -msgid "range out of bounds in cut operation" +#: src/dird/ua_tree.c:403 +msgid "1 file marked.\n" msgstr "" -#: src/lib/var.c:2692 -msgid "offset out of bounds in cut operation" +#: src/dird/ua_tree.c:405 +#, c-format +msgid "%s files marked.\n" msgstr "" -#: src/lib/var.c:2693 -msgid "logic error in cut operation" +#: src/dird/ua_tree.c:433 +msgid "No directories marked.\n" msgstr "" -#: src/lib/var.c:2694 -msgid "malformatted transpose operation" +#: src/dird/ua_tree.c:435 +msgid "1 directory marked.\n" msgstr "" -#: src/lib/var.c:2695 -msgid "source and target class mismatch in transpose operation" +#: src/dird/ua_tree.c:437 +#, c-format +msgid "%s directories marked.\n" msgstr "" -#: src/lib/var.c:2696 -msgid "empty character class in transpose operation" +#: src/dird/ua_tree.c:458 +#, c-format +msgid "%s total files/dirs. %s marked to be restored.\n" msgstr "" -#: src/lib/var.c:2697 -msgid "incorrect character class in transpose operation" +#: src/dird/ua_tree.c:469 +msgid "No file specification given.\n" msgstr "" -#: src/lib/var.c:2698 -msgid "malformatted padding operation" +#: src/dird/ua_tree.c:690 +#, c-format +msgid "Node %s has no children.\n" msgstr "" -#: src/lib/var.c:2699 -msgid "width parameter missing in padding operation" +#: src/dird/ua_tree.c:783 +#, c-format +msgid "%d total files; %d marked to be restored; %s bytes.\n" msgstr "" -#: src/lib/var.c:2700 -msgid "fill string missing in padding operation" +#: src/dird/ua_tree.c:817 +msgid "Too few or too many arguments. Try using double quotes.\n" msgstr "" -#: src/lib/var.c:2701 -#, fuzzy -msgid "unknown quoted pair in search and replace operation" -msgstr "unbekannt" +#: src/dird/ua_tree.c:830 +msgid "Invalid path given.\n" +msgstr "" -#: src/lib/var.c:2702 -msgid "sub-matching reference out of range" +#: src/dird/ua_tree.c:866 src/dird/ua_tree.c:878 +msgid "No files unmarked.\n" msgstr "" -#: src/lib/var.c:2703 -msgid "invalid argument" +#: src/dird/ua_tree.c:880 +msgid "1 file unmarked.\n" msgstr "" -#: src/lib/var.c:2704 -msgid "incomplete quoted pair" +#: src/dird/ua_tree.c:883 +#, c-format +msgid "%s files unmarked.\n" msgstr "" -#: src/lib/var.c:2705 -msgid "lookup function does not support variable arrays" +#: src/dird/ua_tree.c:894 src/dird/ua_tree.c:911 +msgid "No directories unmarked.\n" msgstr "" -#: src/lib/var.c:2706 -msgid "index of array variable contains an invalid character" +#: src/dird/ua_tree.c:913 +msgid "1 directory unmarked.\n" msgstr "" -#: src/lib/var.c:2707 -msgid "index of array variable is incomplete" +#: src/dird/ua_tree.c:915 +#, c-format +msgid "%d directories unmarked.\n" msgstr "" -#: src/lib/var.c:2708 -msgid "bracket expression in array variable's index not closed" +#: src/dird/inc_conf.c:299 +#, fuzzy, c-format +msgid "Expected a strip path positive integer, got:%s:" +msgstr "fstype Ausdruck erwartet, erhalten: %s\n" + +#: src/dird/inc_conf.c:319 +#, c-format +msgid "Expected a FileSet option keyword, got:%s:" +msgstr "FileSet option Schlüsselwort erwartet, erhalten:%s:" + +#: src/dird/inc_conf.c:352 +msgid "Old style Include/Exclude not supported\n" +msgstr "veraltete Include/Exclude Anweisung nicht unterstützt\n" + +#: src/dird/inc_conf.c:380 src/dird/inc_conf.c:726 src/dird/dird_conf.c:2044 +#, c-format +msgid "Expecting keyword, got: %s\n" +msgstr "Schlüsselwort erwartet, erhalten:%s\n" + +#: src/dird/inc_conf.c:398 src/dird/inc_conf.c:741 src/dird/dird_conf.c:2061 +#, c-format +msgid "Keyword %s not permitted in this resource" +msgstr "Schlüsselwort %s ist in dieser Ressource nicht erlaubt." + +#: src/dird/inc_conf.c:451 +#, c-format +msgid "Regex compile error. ERR=%s\n" +msgstr "Regex Übersetzungsfehler. ERR=%s\n" + +#: src/dird/inc_conf.c:472 +#, c-format +msgid "Expected a regex string, got: %s\n" +msgstr "regulären Ausdruck erwartet, erhalten: %s\n" + +#: src/dird/inc_conf.c:546 +#, c-format +msgid "Expected a wild-card string, got: %s\n" +msgstr "wild-card Ausdruck erwartet, erhalten: %s\n" + +#: src/dird/inc_conf.c:569 +#, c-format +msgid "Expected an fstype string, got: %s\n" +msgstr "fstype Ausdruck erwartet, erhalten: %s\n" + +#: src/dird/inc_conf.c:580 +msgid "ExcludeDirContaining directive not permitted in Exclude.\n" msgstr "" -#: src/lib/var.c:2709 -msgid "division by zero error in index specification" +#: src/dird/inc_conf.c:607 +#, c-format +msgid "Expected an drivetype string, got: %s\n" +msgstr "drivetype Ausdruck erwartet, erhalten: %s\n" + +#: src/dird/inc_conf.c:631 src/dird/inc_conf.c:674 +#, fuzzy, c-format +msgid "Backslash found. Use forward slashes or quote the string.: %s\n" msgstr "" +"Backslash gefunden. Benutze forward slashes oder setze den String in " +"Anführungszeichen.: %s\n" -#: src/lib/var.c:2710 -msgid "unterminated loop construct" +#: src/dird/inc_conf.c:646 src/dird/inc_conf.c:689 +#, c-format +msgid "Expected a filename, got: %s" +msgstr "Dateiname erwartet, erhalten: %s" + +#: src/dird/inc_conf.c:663 +msgid "Plugin directive not permitted in Exclude\n" msgstr "" -#: src/lib/var.c:2711 -msgid "invalid character in loop limits" +#: src/dird/inc_conf.c:706 +msgid "Options section not permitted in Exclude\n" msgstr "" -#: src/lib/var.c:2712 -msgid "malformed operation argument list" +#: src/dird/inc_conf.c:711 src/dird/dird_conf.c:2030 +#, c-format +msgid "Expecting open brace. Got %s" +msgstr "Geschweifte Klammer auf erwartet, erhalten: %s" + +#: src/dird/inc_conf.c:766 +#, c-format +msgid "Expected a FileSet keyword, got: %s" +msgstr "FileSet Schlüsselwort erwartet,erhalten: %s" + +#: src/dird/recycle.c:57 +#, c-format +msgid "Recycled volume \"%s\"\n" msgstr "" -#: src/lib/var.c:2713 -msgid "undefined operation" +#: src/dird/ua_server.c:56 +#, c-format +msgid "Cannot create UA thread: %s\n" msgstr "" -#: src/lib/var.c:2714 -msgid "formatting failure" +#: src/dird/ua_server.c:146 +msgid "You have messages.\n" msgstr "" -#: src/lib/var.c:2723 -#, fuzzy -msgid "unknown error" -msgstr "unbekannt" +#: src/dird/newvol.c:77 +#, c-format +msgid "Illegal character in Volume name \"%s\"\n" +msgstr "Illegales Zeichen in \"Volume name\" \"%s\"\n" + +#: src/dird/newvol.c:90 +#, fuzzy, c-format +msgid "Created new Volume=\"%s\", Pool=\"%s\", MediaType=\"%s\" in catalog.\n" +msgstr "Neues Volume \"%s\" in catalog erzeugt.\n" + +#: src/dird/newvol.c:119 +#, fuzzy, c-format +msgid "SQL failed, but ignored. ERR=%s\n" +msgstr "SQL fehlgeschlagen ERR=%s\n" -#: src/lib/address_conf.c:62 +#: src/dird/newvol.c:129 #, c-format -msgid "Only ipv4 and ipv6 are supported (%d)\n" +msgid "Wanted to create Volume \"%s\", but it already exists. Trying again.\n" msgstr "" +"Wollte Volume \"%s\"erzeugen, aber , but it already exists. Trying again.\n" + +#: src/dird/newvol.c:138 +msgid "Too many failures. Giving up creating Volume name.\n" +msgstr "Zu viele Fehler. Gebe Versuch einen Volumennamen zu erzeugen auf.\n" -#: src/lib/address_conf.c:66 +#: src/dird/msgchan.c:66 #, c-format -msgid "Only ipv4 is supported (%d)\n" +msgid "Connecting to Storage daemon %s at %s:%d ...\n" msgstr "" -#: src/lib/address_conf.c:175 +#: src/dird/msgchan.c:230 +#, c-format +msgid "Storage daemon rejected Job command: %s\n" +msgstr "Storage daemon hat \"Job command\": %s abgelehnt\n" + +#: src/dird/msgchan.c:238 +#, c-format +msgid " " +msgstr " --> " -#: src/lib/address_conf.c:461 -msgid "Only one addr per address block" -msgstr "" +#: src/dird/dird_conf.c:584 +#, c-format +msgid "Console: name=%s SSL=%d\n" +msgstr "Console: name=%s SSL=%d\n" -#: src/lib/address_conf.c:477 +#: src/dird/dird_conf.c:589 #, c-format -msgid "Expected a number or a string, got: %s" -msgstr "" +msgid "Counter: name=%s min=%d max=%d cur=%d wrapcntr=%s\n" +msgstr "Counter: name=%s min=%d max=%d cur=%d wrapcntr=%s\n" -#: src/lib/address_conf.c:483 src/lib/address_conf.c:516 +#: src/dird/dird_conf.c:594 #, c-format -msgid "Expected an IP number or a hostname, got: %s" -msgstr "" +msgid "Counter: name=%s min=%d max=%d\n" +msgstr "Counter: name=%s min=%d max=%d\n" -#: src/lib/address_conf.c:489 -msgid "State machine missmatch" -msgstr "" +#: src/dird/dird_conf.c:608 +#, c-format +msgid "Client: name=%s address=%s FDport=%d MaxJobs=%u\n" +msgstr "Client: name=%s address=%s FDport=%d MaxJobs=%u\n" -#: src/lib/address_conf.c:495 src/lib/address_conf.c:507 +#: src/dird/dird_conf.c:611 #, c-format -msgid "Expected a end of block }, got: %s" -msgstr "" +msgid " JobRetention=%s FileRetention=%s AutoPrune=%d\n" +msgstr " JobRetention=%s FileRetention=%s AutoPrune=%d\n" -#: src/lib/address_conf.c:501 +#: src/dird/dird_conf.c:619 src/dird/dird_conf.c:691 #, c-format -msgid "Can't add hostname(%s) and port(%s) to addrlist (%s)" +msgid " MaximumBandwidth=%lld\n" msgstr "" -#: src/lib/address_conf.c:521 src/lib/address_conf.c:535 +#: src/dird/dird_conf.c:631 #, c-format -msgid "can't add port (%s) to (%s)" +msgid "" +"Device: name=%s ok=%d num_writers=%d max_writers=%d\n" +" reserved=%d open=%d append=%d read=%d labeled=%d offline=%d autochgr=" +"%d\n" +" poolid=%s volname=%s MediaType=%s\n" msgstr "" +"Device: name=%s ok=%d num_writers=%d max_writers=%d\n" +" reserved=%d open=%d append=%d read=%d labeled=%d offline=%d autochgr=" +"%d\n" +" poolid=%s volname=%s MediaType=%s\n" -#: src/lib/address_conf.c:530 +#: src/dird/dird_conf.c:645 #, c-format -msgid "Expected a port number or string, got: %s" +msgid "" +"Storage: name=%s address=%s SDport=%d MaxJobs=%u\n" +" DeviceName=%s MediaType=%s StorageId=%s\n" msgstr "" +"Storage: name=%s address=%s SDport=%d MaxJobs=%u\n" +" DeviceName=%s MediaType=%s StorageId=%s\n" -#: src/lib/edit.c:478 -msgid "Empty name not allowed.\n" +#: src/dird/dird_conf.c:661 +#, fuzzy, c-format +msgid "" +"Catalog: name=%s address=%s DBport=%d db_name=%s\n" +" db_driver=%s db_user=%s MutliDBConn=%d\n" msgstr "" +"Catalog: name=%s address=%s DBport=%d db_name=%s\n" +" db_user=%s MutliDBConn=%d\n" -#: src/lib/edit.c:488 +#: src/dird/dird_conf.c:674 #, c-format -msgid "Illegal character \"%c\" in name.\n" -msgstr "" +msgid "%s: name=%s JobType=%d level=%s Priority=%d Enabled=%d\n" +msgstr "%s: name=%s JobType=%d level=%s Priority=%d Enabled=%d\n" -#: src/lib/edit.c:495 -msgid "Name too long.\n" -msgstr "" +#: src/dird/dird_conf.c:675 +msgid "JobDefs" +msgstr "JobDefs" -#: src/findlib/savecwd.c:60 -#, fuzzy, c-format -msgid "Cannot open current directory: ERR=%s\n" -msgstr "Kann inkludierte Datei nicht öffnen: %s. ERR=%s\n" +#: src/dird/dird_conf.c:679 +#, c-format +msgid "" +" MaxJobs=%u Resched=%d Times=%d Interval=%s Spool=%d WritePartAfterJob=" +"%d\n" +msgstr "" +" MaxJobs=%u Resched=%d Times=%d Interval=%s Spool=%d WritePartAfterJob=" +"%d\n" -#: src/findlib/savecwd.c:71 +#: src/dird/dird_conf.c:685 #, fuzzy, c-format -msgid "Cannot get current directory: ERR=%s\n" -msgstr "kann Variable operate nicht setzen: ERR=%s\n" +msgid " SpoolSize=%s\n" +msgstr " opcmd=%s\n" -#: src/findlib/savecwd.c:95 src/findlib/savecwd.c:106 +#: src/dird/dird_conf.c:688 #, fuzzy, c-format -msgid "Cannot reset current directory: ERR=%s\n" -msgstr "kann Variable operate nicht setzen: ERR=%s\n" +msgid " Accurate=%d\n" +msgstr " SelectionType=%d\n" -#: src/findlib/mkpath.c:137 +#: src/dird/dird_conf.c:695 #, c-format -msgid "Cannot create directory %s: ERR=%s\n" -msgstr "" +msgid " SelectionType=%d\n" +msgstr " SelectionType=%d\n" -#: src/findlib/mkpath.c:141 src/findlib/mkpath.c:202 +#: src/dird/dird_conf.c:710 #, c-format -msgid "%s exists but is not a directory.\n" -msgstr "" +msgid " --> Where=%s\n" +msgstr " --> Where=%s\n" -#: src/findlib/mkpath.c:164 -#, c-format -msgid "Cannot change owner and/or group of %s: ERR=%s\n" -msgstr "" +#: src/dird/dird_conf.c:713 +#, fuzzy, c-format +msgid " --> RegexWhere=%s\n" +msgstr " --> Where=%s\n" -#: src/findlib/mkpath.c:169 +#: src/dird/dird_conf.c:716 #, c-format -msgid "Cannot change permissions of %s: ERR=%s\n" -msgstr "" +msgid " --> Bootstrap=%s\n" +msgstr " --> Bootstrap=%s\n" -#: src/findlib/mkpath.c:239 +#: src/dird/dird_conf.c:719 #, c-format -msgid "%c: is not a valid drive.\n" -msgstr "" +msgid " --> WriteBootstrap=%s\n" +msgstr " --> WriteBootstrap=%s\n" -#: src/findlib/mkpath.c:283 -msgid "Too many subdirectories. Some permissions not reset.\n" -msgstr "" +#: src/dird/dird_conf.c:722 +#, fuzzy, c-format +msgid " --> PluginOptions=%s\n" +msgstr " --> Run=%s\n" -#: src/findlib/attribs.c:483 -#, c-format -msgid "File size of restored file %s not correct. Original %s, restored %s.\n" -msgstr "" +#: src/dird/dird_conf.c:725 +#, fuzzy, c-format +msgid " --> MaxRunTime=%u\n" +msgstr " --> RunWhen=%u\n" -#: src/findlib/attribs.c:509 src/findlib/attribs.c:516 -#, c-format -msgid "Unable to set file owner %s: ERR=%s\n" -msgstr "" +#: src/dird/dird_conf.c:728 +#, fuzzy, c-format +msgid " --> MaxWaitTime=%u\n" +msgstr " --> RunWhen=%u\n" + +#: src/dird/dird_conf.c:731 +#, fuzzy, c-format +msgid " --> MaxStartDelay=%u\n" +msgstr " --> Target=%s\n" + +#: src/dird/dird_conf.c:734 +#, fuzzy, c-format +msgid " --> MaxRunSchedTime=%u\n" +msgstr " --> RunWhen=%u\n" -#: src/findlib/attribs.c:522 +#: src/dird/dird_conf.c:746 +#, fuzzy, c-format +msgid " --> Base %s\n" +msgstr " --> Target=%s\n" + +#: src/dird/dird_conf.c:784 #, c-format -msgid "Unable to set file modes %s: ERR=%s\n" -msgstr "" +msgid " --> Run=%s\n" +msgstr " --> Run=%s\n" -#: src/findlib/attribs.c:532 +#: src/dird/dird_conf.c:788 #, c-format -msgid "Unable to set file times %s: ERR=%s\n" -msgstr "" +msgid " --> SelectionPattern=%s\n" +msgstr " --> SelectionPattern=%s\n" -#: src/findlib/attribs.c:546 +#: src/dird/dird_conf.c:802 #, c-format -msgid "Unable to set file flags %s: ERR=%s\n" -msgstr "" +msgid "FileSet: name=%s\n" +msgstr "FileSet: name=%s\n" -#: src/findlib/attribs.c:799 +#: src/dird/dird_conf.c:896 src/dird/dird_conf.c:981 #, c-format -msgid "Error in %s file %s: ERR=%s\n" -msgstr "" +msgid "Schedule: name=%s\n" +msgstr "Schedule: name=%s\n" -#: src/findlib/attribs.c:816 +#: src/dird/dird_conf.c:901 #, c-format -msgid "Error in %s: ERR=%s\n" -msgstr "" +msgid " --> Run Level=%s\n" +msgstr " --> Run Level=%s\n" -#: src/findlib/enable_priv.c:92 -msgid "AdjustTokenPrivileges set " -msgstr "" +#: src/dird/dird_conf.c:903 +#, fuzzy, c-format +msgid " MaxRunSchedTime=%u\n" +msgstr " --> RunWhen=%u\n" -#: src/findlib/create_file.c:124 -#, c-format -msgid "File skipped. Not newer: %s\n" -msgstr "" +#: src/dird/dird_conf.c:906 +#, fuzzy, c-format +msgid " Priority=%u\n" +msgstr " woy=" -#: src/findlib/create_file.c:131 -#, c-format -msgid "File skipped. Not older: %s\n" -msgstr "" +#: src/dird/dird_conf.c:908 +msgid " hour=" +msgstr " hour=" -#: src/findlib/create_file.c:141 -#, c-format -msgid "File skipped. Already exists: %s\n" -msgstr "" +#: src/dird/dird_conf.c:917 +msgid " mday=" +msgstr " mday=" -#: src/findlib/create_file.c:167 -#, c-format -msgid "File %s already exists and could not be replaced. ERR=%s.\n" -msgstr "" +#: src/dird/dird_conf.c:926 +msgid " month=" +msgstr " month=" -#: src/findlib/create_file.c:218 src/findlib/create_file.c:282 -#: src/findlib/create_file.c:378 -#, c-format -msgid "bpkt already open fid=%d\n" -msgstr "" +#: src/dird/dird_conf.c:935 +msgid " wday=" +msgstr " wday=" -#: src/findlib/create_file.c:226 src/filed/fd_plugins.c:1009 -#, c-format -msgid "Could not create %s: ERR=%s\n" -msgstr "" +#: src/dird/dird_conf.c:944 +msgid " wom=" +msgstr " wom=" -#: src/findlib/create_file.c:241 -#, c-format -msgid "Cannot make fifo %s: ERR=%s\n" -msgstr "" +#: src/dird/dird_conf.c:953 +msgid " woy=" +msgstr " woy=" -#: src/findlib/create_file.c:259 +#: src/dird/dird_conf.c:962 #, c-format -msgid "Cannot make node %s: ERR=%s\n" -msgstr "" +msgid " mins=%d\n" +msgstr " mins=%d\n" -#: src/findlib/create_file.c:304 -#, c-format -msgid "Could not symlink %s -> %s: ERR=%s\n" -msgstr "" +#: src/dird/dird_conf.c:964 src/dird/dird_conf.c:968 src/dird/dird_conf.c:972 +msgid " --> " +msgstr " --> " -#: src/findlib/create_file.c:329 src/findlib/create_file.c:342 +#: src/dird/dird_conf.c:989 #, c-format -msgid "Could not restore file flags for file %s: ERR=%s\n" -msgstr "" +msgid "Pool: name=%s PoolType=%s\n" +msgstr "Pool: name=%s PoolType=%s\n" -#: src/findlib/create_file.c:333 src/findlib/create_file.c:350 +#: src/dird/dird_conf.c:991 #, c-format -msgid "Could not hard link %s -> %s: ERR=%s\n" -msgstr "" +msgid " use_cat=%d use_once=%d cat_files=%d\n" +msgstr " use_cat=%d use_once=%d cat_files=%d\n" -#: src/findlib/create_file.c:346 +#: src/dird/dird_conf.c:994 #, c-format -msgid "Could not reset file flags for file %s: ERR=%s\n" -msgstr "" +msgid " max_vols=%d auto_prune=%d VolRetention=%s\n" +msgstr " max_vols=%d auto_prune=%d VolRetention=%s\n" -#: src/findlib/create_file.c:401 +#: src/dird/dird_conf.c:997 #, c-format -msgid "Original file %s have been deleted: type=%d\n" -msgstr "" +msgid " VolUse=%s recycle=%d LabelFormat=%s\n" +msgstr " VolUse=%s recycle=%d LabelFormat=%s\n" -#: src/findlib/create_file.c:413 +#: src/dird/dird_conf.c:1001 #, c-format -msgid "Original file %s not saved: type=%d\n" -msgstr "" +msgid " CleaningPrefix=%s LabelType=%d\n" +msgstr " CleaningPrefix=%s LabelType=%d\n" -#: src/findlib/create_file.c:416 -#, c-format -msgid "Unknown file type %d; not restored: %s\n" -msgstr "" +#: src/dird/dird_conf.c:1003 +#, fuzzy, c-format +msgid " RecyleOldest=%d PurgeOldest=%d ActionOnPurge=%d\n" +msgstr " RecyleOldest=%d PurgeOldest=%d MaxVolJobs=%d MaxVolFiles=%d\n" -#: src/findlib/create_file.c:460 -#, c-format -msgid "Zero length filename: %s\n" -msgstr "" +#: src/dird/dird_conf.c:1007 +#, fuzzy, c-format +msgid " MaxVolJobs=%d MaxVolFiles=%d MaxVolBytes=%s\n" +msgstr " max_vols=%d auto_prune=%d VolRetention=%s\n" -#: src/findlib/bfile.c:97 -msgid "Unix attributes" -msgstr "" +#: src/dird/dird_conf.c:1011 +#, c-format +msgid " MigTime=%s MigHiBytes=%s MigLoBytes=%s\n" +msgstr " MigTime=%s MigHiBytes=%s MigLoBytes=%s\n" -#: src/findlib/bfile.c:99 -msgid "File data" -msgstr "" +#: src/dird/dird_conf.c:1015 +#, fuzzy, c-format +msgid " JobRetention=%s FileRetention=%s\n" +msgstr " JobRetention=%s FileRetention=%s AutoPrune=%d\n" -#: src/findlib/bfile.c:101 -msgid "MD5 digest" -msgstr "" +#: src/dird/dird_conf.c:1019 +#, fuzzy, c-format +msgid " NextPool=%s\n" +msgstr " opcmd=%s\n" -#: src/findlib/bfile.c:103 -msgid "GZIP data" -msgstr "" +#: src/dird/dird_conf.c:1022 +#, fuzzy, c-format +msgid " RecyclePool=%s\n" +msgstr " opcmd=%s\n" -#: src/findlib/bfile.c:105 -msgid "Compressed data" -msgstr "" +#: src/dird/dird_conf.c:1025 +#, fuzzy, c-format +msgid " ScratchPool=%s\n" +msgstr " opcmd=%s\n" -#: src/findlib/bfile.c:107 -msgid "Extended attributes" -msgstr "" +#: src/dird/dird_conf.c:1028 +#, fuzzy, c-format +msgid " Catalog=%s\n" +msgstr " mailcmd=%s\n" -#: src/findlib/bfile.c:109 -msgid "Sparse data" -msgstr "" +#: src/dird/dird_conf.c:1048 +#, c-format +msgid "Messages: name=%s\n" +msgstr "Messages: name=%s\n" -#: src/findlib/bfile.c:111 -msgid "GZIP sparse data" -msgstr "" +#: src/dird/dird_conf.c:1050 +#, c-format +msgid " mailcmd=%s\n" +msgstr " mailcmd=%s\n" -#: src/findlib/bfile.c:113 -msgid "Compressed sparse data" -msgstr "" +#: src/dird/dird_conf.c:1052 +#, c-format +msgid " opcmd=%s\n" +msgstr " opcmd=%s\n" -#: src/findlib/bfile.c:115 -msgid "Program names" -msgstr "" +#: src/dird/dird_conf.c:1056 src/qt-console/tray-monitor/tray_conf.cpp:187 +#, c-format +msgid "Unknown resource type %d in dump_resource.\n" +msgstr "Unbekannter resource type %d in dump_resource.\n" -#: src/findlib/bfile.c:117 -msgid "Program data" -msgstr "" +#: src/dird/dird_conf.c:1393 src/qt-console/tray-monitor/tray_conf.cpp:245 +#, c-format +msgid "Unknown resource type %d in free_resource.\n" +msgstr "Unbekannter resource type %d in free_resource.\n" -#: src/findlib/bfile.c:119 -msgid "SHA1 digest" -msgstr "" +#: src/dird/dird_conf.c:1471 +#, c-format +msgid "Cannot find Pool resource %s\n" +msgstr "Kann Pool resource %s nicht finden\n" -#: src/findlib/bfile.c:121 -msgid "Win32 data" -msgstr "" +#: src/dird/dird_conf.c:1482 +#, c-format +msgid "Cannot find Console resource %s\n" +msgstr "Kann Console resource %s nicht finden\n" -#: src/findlib/bfile.c:123 -msgid "Win32 GZIP data" -msgstr "" +#: src/dird/dird_conf.c:1504 +#, c-format +msgid "Cannot find Job resource %s\n" +msgstr "Kann Job resource %s nicht finden\n" -#: src/findlib/bfile.c:125 -msgid "Win32 compressed data" -msgstr "" +#: src/dird/dird_conf.c:1555 +#, c-format +msgid "Cannot find Counter resource %s\n" +msgstr "Kann Counter resource %s nicht finden\n" -#: src/findlib/bfile.c:127 -msgid "MacOS Fork data" -msgstr "" +#: src/dird/dird_conf.c:1563 src/filed/filed_conf.c:465 +#, c-format +msgid "Cannot find Client resource %s\n" +msgstr "Kann Client resource %s nicht finden\n" -#: src/findlib/bfile.c:129 -msgid "HFS+ attribs" -msgstr "" +#: src/dird/dird_conf.c:1576 +#, c-format +msgid "Cannot find Schedule resource %s\n" +msgstr "Kann Schedule resource %s nicht finden\n" -#: src/findlib/bfile.c:131 -msgid "Standard Unix ACL attribs" -msgstr "" +#: src/dird/dird_conf.c:1581 src/dird/dird_conf.c:1641 +#: src/qt-console/tray-monitor/tray_conf.cpp:302 +#: src/qt-console/tray-monitor/tray_conf.cpp:340 +#, c-format +msgid "Unknown resource type %d in save_resource.\n" +msgstr "Unbekannter resource type %d in save_resource.\n" -#: src/findlib/bfile.c:133 -msgid "Default Unix ACL attribs" -msgstr "" +#: src/dird/dird_conf.c:1656 +#, c-format +msgid "Name item is required in %s resource, but not found.\n" +msgstr "Name item wird benötigt in %s resource, wurde aber nicht gefunden.\n" -#: src/findlib/bfile.c:135 -msgid "SHA256 digest" -msgstr "" +#: src/dird/dird_conf.c:1669 +#, c-format +msgid "Inserting %s res: %s index=%d pass=%d\n" +msgstr "Inserting %s res: %s index=%d pass=%d\n" -#: src/findlib/bfile.c:137 -msgid "SHA512 digest" -msgstr "" +#: src/dird/dird_conf.c:1682 +#, fuzzy, c-format +msgid "Expected one of: %s, got: %s" +msgstr "Erwartet: %s, erhalten: %s" -#: src/findlib/bfile.c:139 -msgid "Signed digest" -msgstr "" +#: src/dird/dird_conf.c:1754 +#, c-format +msgid "Expected a Migration Job Type keyword, got: %s" +msgstr " Migration Job Type Schlüsselwort erwartet, erhalten: %s" -#: src/findlib/bfile.c:141 -msgid "Encrypted File data" -msgstr "" +#: src/dird/dird_conf.c:1780 +#, c-format +msgid "Expected a Job Type keyword, got: %s" +msgstr "Job Type Schlüsselwort erwartet, erhalten: %s" -#: src/findlib/bfile.c:143 -msgid "Encrypted Win32 data" -msgstr "" +#: src/dird/dird_conf.c:1804 +#, c-format +msgid "Expected a Job Level keyword, got: %s" +msgstr "Job Level Schlüsselwort erwartet, erhalten: %s" -#: src/findlib/bfile.c:145 -msgid "Encrypted session data" -msgstr "" +#: src/dird/dird_conf.c:1824 +#, c-format +msgid "Expected a Restore replacement option, got: %s" +msgstr "Restore replacement Option erwartet, erhalten: %s" -#: src/findlib/bfile.c:147 -msgid "Encrypted GZIP data" +#: src/dird/ua_query.c:61 src/findlib/file_create.c:265 +#: src/findlib/file_create.c:353 +#, c-format +msgid "Could not open %s: ERR=%s\n" msgstr "" -#: src/findlib/bfile.c:149 -msgid "Encrypted compressed data" +#: src/dird/ua_query.c:66 +msgid "Available queries:\n" msgstr "" -#: src/findlib/bfile.c:151 -msgid "Encrypted Win32 GZIP data" +#: src/dird/ua_query.c:73 +msgid "Choose a query" msgstr "" -#: src/findlib/bfile.c:153 -msgid "Encrypted Win32 Compressed data" +#: src/dird/ua_query.c:87 +msgid "Could not find query.\n" msgstr "" -#: src/findlib/bfile.c:155 -msgid "Encrypted MacOS fork data" +#: src/dird/ua_query.c:105 +msgid "Too many prompts in query, max is 9.\n" msgstr "" -#: src/findlib/bfile.c:157 -msgid "AIX Specific ACL attribs" +#: src/dird/ua_query.c:208 +#, c-format +msgid "Warning prompt %d missing.\n" msgstr "" -#: src/findlib/bfile.c:159 -msgid "Darwin Specific ACL attribs" +#: src/dird/ua_query.c:253 +msgid "" +"Entering SQL query mode.\n" +"Terminate each query with a semicolon.\n" +"Terminate query mode with a blank line.\n" msgstr "" -#: src/findlib/bfile.c:161 -msgid "FreeBSD Specific Default ACL attribs" +#: src/dird/ua_query.c:256 src/dird/ua_query.c:272 +msgid "Enter SQL query: " msgstr "" -#: src/findlib/bfile.c:163 -msgid "FreeBSD Specific Access ACL attribs" +#: src/dird/ua_query.c:274 +msgid "Add to SQL query: " msgstr "" -#: src/findlib/bfile.c:165 -msgid "HPUX Specific ACL attribs" +#: src/dird/ua_query.c:277 +msgid "End query mode.\n" msgstr "" -#: src/findlib/bfile.c:167 -msgid "Irix Specific Default ACL attribs" +#: src/dird/dird.c:124 +#, fuzzy, c-format +msgid "" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: bacula-dir [-f -s] [-c config_file] [-d debug_level] [config_file]\n" +" -c set configuration file to file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -f run in foreground (for debugging)\n" +" -g groupid\n" +" -m print kaboom output (for debugging)\n" +" -r run now\n" +" -s no signals\n" +" -t test - read configuration and exit\n" +" -u userid\n" +" -v verbose user messages\n" +" -? print this message.\n" +"\n" msgstr "" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: dird [-f -s] [-c config_file] [-d debug_level] [config_file]\n" +" -c setze Konfigurationsdatei auf Datei\n" +" -dnn setze debug level auf nn\n" +" -f starte im Vordergrund (für debugging Zwecke)\n" +" -g groupid\n" +" -r starte jetzt\n" +" -s no signals\n" +" -t test - Konfiguration Lesen und beenden\n" +" -u userid\n" +" -v ausführliche Benutzer Meldungen\n" +" -? diese Meldung ausgeben.\n" +"\n" -#: src/findlib/bfile.c:169 -msgid "Irix Specific Access ACL attribs" -msgstr "" +#: src/dird/dird.c:503 +msgid "Too many open reload requests. Request ignored.\n" +msgstr "zu viele offene reload Anforderungen, Anforderung ignoriert.\n" -#: src/findlib/bfile.c:171 -msgid "Linux Specific Default ACL attribs" -msgstr "" +#: src/dird/dird.c:518 +msgid "Out of reload table entries. Giving up.\n" +msgstr "Keine reload table Einträge übrig. Gebe auf.\n" -#: src/findlib/bfile.c:173 -msgid "Linux Specific Access ACL attribs" -msgstr "" +#: src/dird/dird.c:521 +msgid "Resetting previous configuration.\n" +msgstr "Vorherige Konfiguration zurückgesetzt.\n" -#: src/findlib/bfile.c:175 -msgid "TRU64 Specific Default ACL attribs" +#: src/dird/dird.c:585 +#, c-format +msgid "" +"No Director resource defined in %s\n" +"Without that I don't know who I am :-(\n" msgstr "" +"Keine Director resource definiert in %s\n" +"Ohne dies weiss ich nicht wer ich bin :-(\n" -#: src/findlib/bfile.c:177 -msgid "TRU64 Specific Access ACL attribs" -msgstr "" +#: src/dird/dird.c:593 src/filed/filed.c:328 +#, c-format +msgid "No Messages resource defined in %s\n" +msgstr "Keine Messages resource definiert in %s\n" -#: src/findlib/bfile.c:179 -msgid "Solaris Specific POSIX ACL attribs" -msgstr "" +#: src/dird/dird.c:598 +#, c-format +msgid "Only one Director resource permitted in %s\n" +msgstr "Nur eine Director resource erlaubt in %s\n" -#: src/findlib/bfile.c:181 -msgid "Solaris Specific NFSv4/ZFS ACL attribs" -msgstr "" +#: src/dird/dird.c:655 +#, c-format +msgid "No Job records defined in %s\n" +msgstr "Keine Job records definiert in %s\n" -#: src/findlib/bfile.c:183 -msgid "AFS Specific ACL attribs" -msgstr "" +#: src/dird/dird.c:713 src/dird/dird.c:726 +#, c-format +msgid "Hey something is wrong. p=0x%lu\n" +msgstr "Hey etwas läuft schief. p=0x%lu\n" -#: src/findlib/bfile.c:185 -msgid "AIX Specific POSIX ACL attribs" +#: src/dird/dird.c:787 +#, c-format +msgid "\"%s\" directive in Job \"%s\" resource is required, but not found.\n" msgstr "" +"\"%s\" Directive in Job \"%s\" resource wird benötigt, wurde aber nicht " +"gefunden.\n" -#: src/findlib/bfile.c:187 -msgid "AIX Specific NFSv4 ACL attribs" -msgstr "" +#: src/dird/dird.c:794 +msgid "Too many items in Job resource\n" +msgstr "zu viele items in Job resource\n" -#: src/findlib/bfile.c:189 -msgid "FreeBSD Specific NFSv4/ZFS ACL attribs" -msgstr "" +#: src/dird/dird.c:798 +#, c-format +msgid "No storage specified in Job \"%s\" nor in Pool.\n" +msgstr "Weder storage noch Pool in Job \"%s\" definiert.\n" -#: src/findlib/bfile.c:191 -msgid "GNU Hurd Specific Default ACL attribs" -msgstr "" +#: src/dird/dird.c:822 +#, c-format +msgid "\"TLS Certificate\" file not defined for Console \"%s\" in %s.\n" +msgstr "\"TLS Certificate\" Datei nicht definiert für Console \"%s\" in %s.\n" -#: src/findlib/bfile.c:193 -msgid "GNU Hurd Specific Access ACL attribs" -msgstr "" +#: src/dird/dird.c:828 +#, c-format +msgid "\"TLS Key\" file not defined for Console \"%s\" in %s.\n" +msgstr "\"TLS Key\" Datei nicht definiert für Console \"%s\" in %s.\n" -#: src/findlib/bfile.c:195 -msgid "GNU Hurd Specific Extended attribs" +#: src/dird/dird.c:835 +#, c-format +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Console \"%s\" in %s. At least one CA certificate store is required when " +"using \"TLS Verify Peer\".\n" msgstr "" +"Weder \"TLS CA Certificate\" noch \"TLS CA Certificate Dir\" sind definiert " +"fürConsole \"%s\" in %s. Mindestens ein CA certificate store wird benötigt " +"beiEinsatz von \"TLS Verify Peer\".\n" -#: src/findlib/bfile.c:197 -msgid "IRIX Specific Extended attribs" +#: src/dird/dird.c:852 src/dird/dird.c:892 src/filed/filed.c:391 +#, c-format +msgid "Failed to initialize TLS context for File daemon \"%s\" in %s.\n" msgstr "" +"Konnte TLS context für File daemon \"%s\" in %s nicht initialisieren.\n" -#: src/findlib/bfile.c:199 -msgid "TRU64 Specific Extended attribs" +#: src/dird/dird.c:875 +#, c-format +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"File daemon \"%s\" in %s.\n" msgstr "" +"Weder \"TLS CA Certificate\" noch \"TLS CA Certificate Dir\" sind definiert " +"für File daemon \"%s\" in %s.\n" -#: src/findlib/bfile.c:201 -msgid "AIX Specific Extended attribs" +#: src/dird/dird.c:916 +#, c-format +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Storage \"%s\" in %s.\n" msgstr "" +"Weder \"TLS CA Certificate\" noch \"TLS CA Certificate Dir\" sind definiert " +"fürStorage \"%s\" in %s.\n" -#: src/findlib/bfile.c:203 -msgid "OpenBSD Specific Extended attribs" -msgstr "" +#: src/dird/dird.c:971 src/dird/dird.c:973 +#, c-format +msgid "Could not open Catalog \"%s\", database \"%s\".\n" +msgstr "Konnte Catalog \"%s\", database \"%s\" nicht öffnen.\n" -#: src/findlib/bfile.c:205 -msgid "Solaris Specific Extensible attribs or System Extended attribs" +#: src/dird/dird.c:976 src/tools/cats_test.c:365 +#, c-format +msgid "%s" msgstr "" -#: src/findlib/bfile.c:207 -msgid "Solaris Specific Extended attribs" -msgstr "" +#: src/dird/dird.c:1055 +#, fuzzy, c-format +msgid "Could not create storage record for %s\n" +msgstr "Kann Storage resource %s nicht finden\n" -#: src/findlib/bfile.c:209 -msgid "Darwin Specific Extended attribs" -msgstr "" +#: src/dird/dird.c:1063 +#, fuzzy, c-format +msgid "Could not update storage record for %s\n" +msgstr "Kann Storage resource %s nicht finden\n" -#: src/findlib/bfile.c:211 -msgid "FreeBSD Specific Extended attribs" +#: src/dird/ua_purge.c:84 +msgid "" +"\n" +"This command can be DANGEROUS!!!\n" +"\n" +"It purges (deletes) all Files from a Job,\n" +"JobId, Client or Volume; or it purges (deletes)\n" +"all Jobs from a Client or Volume without regard\n" +"to retention periods. Normally you should use the\n" +"PRUNE command, which respects retention periods.\n" msgstr "" -#: src/findlib/bfile.c:213 -msgid "Linux Specific Extended attribs" +#: src/dird/ua_purge.c:152 +msgid "Choose item to purge" msgstr "" -#: src/findlib/bfile.c:215 -msgid "NetBSD Specific Extended attribs" +#: src/dird/ua_purge.c:199 +#, c-format +msgid "Begin purging files for Client \"%s\"\n" msgstr "" -#: src/findlib/find.c:237 -#, fuzzy, c-format -msgid "Plugin: \"%s\" not found.\n" -msgstr "Pool Ressource \"%s\" nicht gefunden.\n" - -#: src/findlib/match.c:210 src/tools/testfind.c:654 src/filed/job.c:1460 +#: src/dird/ua_purge.c:208 src/dird/ua_purge.c:258 #, c-format -msgid "Unknown include/exclude option: %c\n" +msgid "No Files found for client %s to purge from %s catalog.\n" msgstr "" -#: src/findlib/find_one.c:227 +#: src/dird/ua_purge.c:211 #, c-format -msgid " NODUMP flag set - will not process %s\n" +msgid "Files for %d Jobs for client \"%s\" purged from %s catalog.\n" msgstr "" -#: src/findlib/find_one.c:248 -#, fuzzy, c-format -msgid "Cannot stat file %s: ERR=%s\n" -msgstr "Kann bootstrap Datei nicht öffnen: %s: ERR=%s\n" - -#: src/findlib/find_one.c:253 +#: src/dird/ua_purge.c:249 #, c-format -msgid "%s mtime changed during backup.\n" +msgid "Begin purging jobs from Client \"%s\"\n" msgstr "" -#: src/findlib/find_one.c:260 +#: src/dird/ua_purge.c:261 #, c-format -msgid "%s ctime changed during backup.\n" +msgid "%d Jobs for client %s purged from %s catalog.\n" msgstr "" -#: src/findlib/find_one.c:268 src/findlib/find_one.c:276 +#: src/dird/ua_purge.c:459 #, c-format -msgid "%s size changed during backup.\n" +msgid "" +"\n" +"Volume \"%s\" has VolStatus \"%s\" and cannot be purged.\n" +"The VolStatus must be: Append, Full, Used, or Error to be purged.\n" msgstr "" -#: src/findlib/find_one.c:403 +#: src/dird/ua_purge.c:487 #, c-format -msgid "Top level directory \"%s\" has unlisted fstype \"%s\"\n" +msgid "%d File%s on Volume \"%s\" purged from catalog.\n" msgstr "" -#: src/findlib/find_one.c:418 +#: src/dird/ua_purge.c:537 #, c-format -msgid "Top level directory \"%s\" has an unlisted drive type \"%s\"\n" +msgid "" +"There are no more Jobs associated with Volume \"%s\". Marking it purged.\n" msgstr "" -#: src/cats/sql_create.c:101 -#, c-format -msgid "Create DB Job record %s failed. ERR=%s\n" -msgstr "Erzeugung von DB Job Eintrag %s fehlgeschlagen. ERR=%s\n" +#: src/dird/ua_purge.c:606 +#, fuzzy +msgid "Can't update volume size in the catalog\n" +msgstr "Neues Volume \"%s\" in catalog erzeugt.\n" -#: src/cats/sql_create.c:145 +#: src/dird/ua_purge.c:608 #, c-format -msgid "Create JobMedia record %s failed: ERR=%s\n" -msgstr "Erzeugung von JobMedia Eintrag %s fehlgeschlagen: ERR=%s\n" +msgid "The volume \"%s\" has been truncated\n" +msgstr "" -#: src/cats/sql_create.c:154 -#, c-format -msgid "Update Media record %s failed: ERR=%s\n" -msgstr "Aktualisierung von Media Eintrag %s fehlgeschlagen: ERR=%s\n" +#: src/dird/ua_purge.c:610 +#, fuzzy, c-format +msgid "Unable to truncate volume \"%s\"\n" +msgstr "Kann Konsole \"%s\" an %s:%s:%d nicht authentisieren.\n" -#: src/cats/sql_create.c:189 -#, c-format -msgid "pool record %s already exists\n" -msgstr "pool Eintrag %s bereits vorhanden\n" +#: src/dird/ua_purge.c:703 +#, fuzzy, c-format +msgid "No Volumes found to perform %s action.\n" +msgstr "Keine Volumes zum Wiederherstellen gefunden.\n" -#: src/cats/sql_create.c:221 +#: src/dird/ua_purge.c:771 #, c-format -msgid "Create db Pool record %s failed: ERR=%s\n" -msgstr "Erzeugung von db Pool Eintrag %s fehlgeschlagen: ERR=%s\n" +msgid "Unable move recycled Volume in full Pool \"%s\" MaxVols=%d\n" +msgstr "" -#: src/cats/sql_create.c:254 +#: src/dird/ua_purge.c:785 #, c-format -msgid "Device record %s already exists\n" -msgstr "Device Eintrag %s bereits vorhanden\n" +msgid "All records pruned from Volume \"%s\"; marking it \"Purged\"\n" +msgstr "" -#: src/cats/sql_create.c:271 +#: src/dird/ua_purge.c:790 #, c-format -msgid "Create db Device record %s failed: ERR=%s\n" -msgstr "Erzeugung von db Device Eintrag %s fehlgeschlagen: ERR=%s\n" +msgid "Cannot purge Volume with VolStatus=%s\n" +msgstr "" -#: src/cats/sql_create.c:306 -#, c-format -msgid "More than one Storage record!: %d\n" -msgstr "Mehr als ein Storage Eintrag!: %d\n" +#: src/dird/ua_prune.c:116 +msgid "Choose item to prune" +msgstr "" -#: src/cats/sql_create.c:311 +#: src/dird/ua_prune.c:172 #, c-format -msgid "error fetching Storage row: %s\n" -msgstr "Fehler beim holen der Storage Zeile: %s\n" +msgid "Cannot prune Volume \"%s\" because it is archived.\n" +msgstr "" -#: src/cats/sql_create.c:332 -#, c-format -msgid "Create DB Storage record %s failed. ERR=%s\n" -msgstr "Erzeugung des DB Storage Eintrags %s fehlgeschlagen. ERR=%s\n" +#: src/dird/ua_prune.c:214 +msgid "Pruned Jobs from JobHisto catalog.\n" +msgstr "" -#: src/cats/sql_create.c:366 -#, c-format -msgid "mediatype record %s already exists\n" -msgstr "Medientyp Eintrag %s bereits vorhanden\n" +#: src/dird/ua_prune.c:302 +#, fuzzy +msgid "Begin pruning Files.\n" +msgstr "Beginn automatische Säuberung von Dateien.\n" -#: src/cats/sql_create.c:383 -#, c-format -msgid "Create db mediatype record %s failed: ERR=%s\n" -msgstr "Erzeuge db Medientyp Eintrag %s fehlgeschlagen: ERR=%s\n" +#: src/dird/ua_prune.c:317 +msgid "No Files found to prune.\n" +msgstr "" -#: src/cats/sql_create.c:424 +#: src/dird/ua_prune.c:340 #, c-format -msgid "Volume \"%s\" already exists.\n" -msgstr "Volume \"%s\" bereits vorhanden.\n" +msgid "Pruned Files from %s Jobs for client %s from catalog.\n" +msgstr "" -#: src/cats/sql_create.c:470 -#, c-format -msgid "Create DB Media record %s failed. ERR=%s\n" -msgstr "Erzeugung DB Media Eintrag %s fehlgeschlagen. ERR=%s\n" +#: src/dird/ua_prune.c:486 +#, fuzzy, c-format +msgid "Begin pruning Jobs older than %s.\n" +msgstr "Beginn automatische Säuberung von Aufträgen.\n" -#: src/cats/sql_create.c:521 +#: src/dird/ua_prune.c:597 #, c-format -msgid "More than one Client!: %d\n" -msgstr "Mehr als ein Client!: %d\n" +msgid "Pruned %d %s for client %s from catalog.\n" +msgstr "" -#: src/cats/sql_create.c:526 -#, c-format -msgid "error fetching Client row: %s\n" -msgstr "Fehler beim holen der Client Zeile: %s\n" +#: src/dird/ua_prune.c:598 +msgid "Jobs" +msgstr "" -#: src/cats/sql_create.c:554 -#, c-format -msgid "Create DB Client record %s failed. ERR=%s\n" -msgstr "Erzeugung des DB Client Eintrags %s fehlgeschlagen. ERR=%s\n" +#: src/dird/ua_prune.c:600 +msgid "No Jobs found to prune.\n" +msgstr "" -#: src/cats/sql_create.c:589 src/cats/sql_get.c:251 -#, c-format -msgid "More than one Path!: %s for path: %s\n" -msgstr "Mehr als ein Pfad!: %s für Pfad: %s\n" +#: src/dird/ua_prune.c:661 +msgid "Expecting limit argument as integer\n" +msgstr "" -#: src/cats/sql_create.c:596 src/cats/sql_get.c:205 src/cats/sql_get.c:258 -#: src/cats/sql_get.c:640 src/cats/sql_get.c:722 src/cats/sql_get.c:1039 -#: src/cats/sql.c:340 src/cats/sql.c:347 src/cats/postgresql.c:165 +#: src/dird/ua_prune.c:675 #, c-format -msgid "error fetching row: %s\n" -msgstr "Fehler beim holen von Zeile: %s\n" +msgid "Volume \"%s\"" +msgstr "" -#: src/cats/sql_create.c:621 -#, c-format -msgid "Create db Path record %s failed. ERR=%s\n" -msgstr "Erzeugung des db Path Eintrags %s fehlgeschlagen. ERR=%s\n" +#: src/dird/ua_update.c:85 +msgid "Update choice:\n" +msgstr "" -#: src/cats/sql_create.c:666 -#, c-format -msgid "Create DB Counters record %s failed. ERR=%s\n" -msgstr "Erzeugung des DB Counters Eintrag %s fehlgeschlagen. ERR=%s\n" +#: src/dird/ua_update.c:86 +msgid "Volume parameters" +msgstr "" -#: src/cats/sql_create.c:704 -#, c-format -msgid "More than one FileSet!: %d\n" -msgstr "Mehr als ein FileSet!: %d\n" +#: src/dird/ua_update.c:87 +msgid "Pool from resource" +msgstr "" -#: src/cats/sql_create.c:709 -#, c-format -msgid "error fetching FileSet row: ERR=%s\n" -msgstr "Fehler beim holen der FileSet Zeile: ERR=%s\n" +#: src/dird/ua_update.c:88 +msgid "Slots from autochanger" +msgstr "" -#: src/cats/sql_create.c:740 -#, c-format -msgid "Create DB FileSet record %s failed. ERR=%s\n" -msgstr "Erzeugung des DB FileSet Eintrags %s fehlgeschlagen. ERR=%s\n" +#: src/dird/ua_update.c:89 +msgid "Long term statistics" +msgstr "" -#: src/cats/sql_create.c:989 -#, c-format -msgid "Create db File record %s failed. ERR=%s" -msgstr "Erzeugung des db File Eintrags %s fehlgeschlagen. ERR=%s" +#: src/dird/ua_update.c:90 +msgid "item" +msgstr "" + +#: src/dird/ua_update.c:90 +msgid "Choose catalog item to update" +msgstr "" -#: src/cats/sql_create.c:1015 +#: src/dird/ua_update.c:133 #, c-format -msgid "More than one Filename! %s for file: %s\n" -msgstr "Mehr als ein Dateiname! %s für Datei: %s\n" +msgid "Invalid VolStatus specified: %s\n" +msgstr "" -#: src/cats/sql_create.c:1021 +#: src/dird/ua_update.c:142 #, c-format -msgid "Error fetching row for file=%s: ERR=%s\n" -msgstr "Fehler beim Holen der Zeile für Datei=%s: ERR=%s\n" +msgid "New Volume status is: %s\n" +msgstr "" -#: src/cats/sql_create.c:1038 +#: src/dird/ua_update.c:152 #, c-format -msgid "Create db Filename record %s failed. ERR=%s\n" -msgstr "Erzeugung des db Filename Eintrags %s fehlgeschlagen. ERR=%s\n" +msgid "Invalid retention period specified: %s\n" +msgstr "" -#: src/cats/sql_create.c:1058 +#: src/dird/ua_update.c:160 #, c-format -msgid "Attempt to put non-attributes into catalog. Stream=%d\n" -msgstr "Versuche \"non-attributes\" in catalog einzufügen. Stream=%d\n" +msgid "New retention period is: %s\n" +msgstr "" -#: src/cats/sql_create.c:1074 -msgid "Cannot Copy/Migrate job using BaseJob.\n" +#: src/dird/ua_update.c:171 +#, c-format +msgid "Invalid use duration specified: %s\n" msgstr "" -#: src/cats/sql_create.c:1166 src/cats/sql_get.c:1136 -msgid "ERR=JobIds are empty\n" +#: src/dird/ua_update.c:179 +#, c-format +msgid "New use duration is: %s\n" msgstr "" -#: src/cats/sql_create.c:1219 -#, fuzzy, c-format -msgid "Create db Object record %s failed. ERR=%s" -msgstr "Erzeugung des db File Eintrags %s fehlgeschlagen. ERR=%s" +#: src/dird/ua_update.c:193 +#, c-format +msgid "New max jobs is: %s\n" +msgstr "" -#: src/cats/sql_get.c:151 +#: src/dird/ua_update.c:206 #, c-format -msgid "Error fetching row: %s\n" -msgstr "Fehler beim holen der Zeile: %s\n" +msgid "New max files is: %s\n" +msgstr "" -#: src/cats/sql_get.c:158 -#, fuzzy, c-format -msgid "get_file_record want 1 got rows=%d PathId=%s FilenameId=%s\n" -msgstr "get_file_record erwartet 1 erhalten rows=%d\n" +#: src/dird/ua_update.c:217 +#, c-format +msgid "Invalid max. bytes specification: %s\n" +msgstr "" -#: src/cats/sql_get.c:166 +#: src/dird/ua_update.c:225 #, c-format -msgid "File record for PathId=%s FilenameId=%s not found.\n" -msgstr "File Eintrag für PathId=%s FilenameId=%s nicht gefunden.\n" +msgid "New Max bytes is: %s\n" +msgstr "" -#: src/cats/sql_get.c:172 -msgid "File record not found in Catalog.\n" -msgstr "File Eintrag nicht im Catalog gefunden.\n" +#: src/dird/ua_update.c:236 src/dird/ua_update.c:256 +msgid "Invalid value. It must be yes or no.\n" +msgstr "" -#: src/cats/sql_get.c:199 +#: src/dird/ua_update.c:244 #, c-format -msgid "More than one Filename!: %s for file: %s\n" -msgstr "Mehr als einen Dateinamen gefunden! : %s für Datei: %s\n" +msgid "New Recycle flag is: %s\n" +msgstr "" -#: src/cats/sql_get.c:209 -#, fuzzy, c-format -msgid "Get DB Filename record %s found bad record: %d\n" -msgstr "Get DB Filename record %s hat fehlerhaften Eintrag gefunden: %d\n" +#: src/dird/ua_update.c:264 +#, c-format +msgid "New InChanger flag is: %s\n" +msgstr "" -#: src/cats/sql_get.c:215 +#: src/dird/ua_update.c:282 #, c-format -msgid "Filename record: %s not found.\n" -msgstr "Filename record: %s nicht gefunden.\n" +msgid "Invalid slot, it must be between 0 and MaxVols=%d\n" +msgstr "" -#: src/cats/sql_get.c:219 +#: src/dird/ua_update.c:292 src/dird/ua_update.c:716 #, c-format -msgid "Filename record: %s not found in Catalog.\n" -msgstr "Filename record: %s nicht in Catalog gefunden.\n" +msgid "Error updating media record Slot: ERR=%s" +msgstr "" -#: src/cats/sql_get.c:262 +#: src/dird/ua_update.c:294 #, c-format -msgid "Get DB path record %s found bad record: %s\n" -msgstr "Get DB path record %s fehlerhaften Eintrag gefunden: %s\n" +msgid "New Slot is: %d\n" +msgstr "" -#: src/cats/sql_get.c:275 +#: src/dird/ua_update.c:319 #, c-format -msgid "Path record: %s not found.\n" -msgstr "Path record: %s nicht gefunden.\n" +msgid "New Pool is: %s\n" +msgstr "" -#: src/cats/sql_get.c:279 +#: src/dird/ua_update.c:362 #, c-format -msgid "Path record: %s not found in Catalog.\n" -msgstr "Path record: %s nicht in Catalog gefunden.\n" +msgid "New RecyclePool is: %s\n" +msgstr "" -#: src/cats/sql_get.c:318 +#: src/dird/ua_update.c:382 #, c-format -msgid "No Job found for JobId %s\n" -msgstr "Kein Job für JobId %s gefunden\n" +msgid "Error updating Volume record: ERR=%s" +msgstr "" -#: src/cats/sql_get.c:391 src/cats/sql_get.c:448 +#: src/dird/ua_update.c:384 #, c-format -msgid "No volumes found for JobId=%d\n" -msgstr "Keine volumes für JobId=%d gefunden\n" +msgid "Volume defaults updated from \"%s\" Pool record.\n" +msgstr "" -#: src/cats/sql_get.c:397 src/cats/sql_get.c:459 +#: src/dird/ua_update.c:407 src/dird/ua_update.c:439 #, c-format -msgid "Error fetching row %d: ERR=%s\n" -msgstr "Fehler beim Holen von Zeile %d: ERR=%s\n" +msgid "Error updating Volume records: ERR=%s" +msgstr "" -#: src/cats/sql_get.c:411 +#: src/dird/ua_update.c:409 src/dird/ua_update.c:441 #, c-format -msgid "No Volume for JobId %d found in Catalog.\n" -msgstr "Kein Volume für JobId %d in Catalog gefunden.\n" +msgid "All Volume defaults updated from \"%s\" Pool record.\n" +msgstr "" -#: src/cats/sql_get.c:552 +#: src/dird/ua_update.c:431 #, c-format -msgid "Pool id select failed: ERR=%s\n" -msgstr "Pool id select fehlgeschlagen: ERR=%s\n" +msgid "Updating all pools, but skipped PoolId=%d. ERR=%s\n" +msgstr "" -#: src/cats/sql_get.c:589 +#: src/dird/ua_update.c:457 #, c-format -msgid "Client id select failed: ERR=%s\n" -msgstr "Client id select fehlgeschlagen: ERR=%s\n" +msgid "Error updating media record Enabled: ERR=%s" +msgstr "" -#: src/cats/sql_get.c:635 +#: src/dird/ua_update.c:460 #, c-format -msgid "More than one Pool!: %s\n" -msgstr "Mehr als ein Pool!: %s\n" +msgid "New Enabled is: %d\n" +msgstr "" -#: src/cats/sql_get.c:679 -msgid "Pool record not found in Catalog.\n" -msgstr "Pool Eintrag in Catalog nicht gefunden.\n" +#: src/dird/ua_update.c:475 +#, fuzzy, c-format +msgid "Error updating media record ActionOnPurge: ERR=%s" +msgstr "Fehler beim Aktualisieren des Client Eintrags. ERR=%s\n" -#: src/cats/sql_get.c:717 +#: src/dird/ua_update.c:478 #, c-format -msgid "More than one Client!: %s\n" -msgstr "Mehr als ein Client!: %s\n" +msgid "New ActionOnPurge is: %s\n" +msgstr "" -#: src/cats/sql_get.c:734 src/cats/sql_get.c:738 -msgid "Client record not found in Catalog.\n" -msgstr "Client Eintrag nicht in Catalog gefunden\n" +#: src/dird/ua_update.c:594 +msgid "Volume Status" +msgstr "" -#: src/cats/sql_get.c:765 -#, c-format -msgid "More than one Counter!: %d\n" -msgstr "Mehr als ein Counter!: %d\n" +#: src/dird/ua_update.c:595 +msgid "Volume Retention Period" +msgstr "" -#: src/cats/sql_get.c:770 -#, c-format -msgid "error fetching Counter row: %s\n" -msgstr "Fehler beim Holen der Counter Zeile: %s\n" +#: src/dird/ua_update.c:596 +msgid "Volume Use Duration" +msgstr "" -#: src/cats/sql_get.c:790 -#, c-format -msgid "Counter record: %s not found in Catalog.\n" -msgstr "Counter Eintrag: %s in Catalog nicht gefunden.\n" +#: src/dird/ua_update.c:597 +msgid "Maximum Volume Jobs" +msgstr "" -#: src/cats/sql_get.c:830 -#, c-format -msgid "Error got %s FileSets but expected only one!\n" -msgstr "Fehler erhalten %s FileSets aber nur einen erwartet!\n" +#: src/dird/ua_update.c:598 +msgid "Maximum Volume Files" +msgstr "" -#: src/cats/sql_get.c:835 -#, c-format -msgid "FileSet record \"%s\" not found.\n" -msgstr "FileSet Eintrag \"%s\" nicht gefunden\n" +#: src/dird/ua_update.c:599 +msgid "Maximum Volume Bytes" +msgstr "" -#: src/cats/sql_get.c:845 -msgid "FileSet record not found in Catalog.\n" -msgstr "FileSet Eintrag in Catalog nicht gefunden.\n" +#: src/dird/ua_update.c:600 +msgid "Recycle Flag" +msgstr "" -#: src/cats/sql_get.c:941 -#, c-format -msgid "Media id select failed: ERR=%s\n" -msgstr "Media id select fehlgeschlagen: ERR=%s\n" +#: src/dird/ua_update.c:601 +msgid "Slot" +msgstr "" -#: src/cats/sql_get.c:979 -#, fuzzy, c-format -msgid "query dbids failed: ERR=%s\n" -msgstr "Abfrage gescheitert: %s: ERR=%s\n" +#: src/dird/ua_update.c:602 +msgid "InChanger Flag" +msgstr "" -#: src/cats/sql_get.c:1034 -#, c-format -msgid "More than one Volume!: %s\n" -msgstr "Mehr als ein Volume!: %s\n" +#: src/dird/ua_update.c:603 +msgid "Volume Files" +msgstr "" -#: src/cats/sql_get.c:1090 -#, c-format -msgid "Media record MediaId=%s not found.\n" -msgstr "Media Eintrag MediaId=%s nicht gefunden.\n" +#: src/dird/ua_update.c:605 +msgid "Volume from Pool" +msgstr "" -#: src/cats/sql_get.c:1093 -#, c-format -msgid "Media record for Volume \"%s\" not found.\n" -msgstr "Media Eintrag für Volume \"%s\" nicht gefunden.\n" +#: src/dird/ua_update.c:606 +msgid "All Volumes from Pool" +msgstr "" + +#: src/dird/ua_update.c:607 +msgid "All Volumes from all Pools" +msgstr "" + +#: src/dird/ua_update.c:608 +msgid "Enabled" +msgstr "" + +#: src/dird/ua_update.c:609 +msgid "RecyclePool" +msgstr "" + +#: src/dird/ua_update.c:610 +msgid "Action On Purge" +msgstr "" + +#: src/dird/ua_update.c:611 +msgid "Done" +msgstr "" -#: src/cats/sql_get.c:1100 +#: src/dird/ua_update.c:620 #, c-format -msgid "Media record for MediaId=%u not found in Catalog.\n" -msgstr "Media Eintrag für MediaId=%u in Catalog nicht gefunden.\n" +msgid "Updating Volume \"%s\"\n" +msgstr "" -#: src/cats/sql_get.c:1103 +#: src/dird/ua_update.c:625 #, c-format -msgid "Media record for Vol=%s not found in Catalog.\n" -msgstr "Media Eintrag für Vol=%s in Catalog nicht gefunden.\n" +msgid "Current Volume status is: %s\n" +msgstr "" + +#: src/dird/ua_update.c:626 +msgid "Possible Values are:\n" +msgstr "" + +#: src/dird/ua_update.c:637 +msgid "Choose new Volume Status" +msgstr "" -#: src/cats/sql_find.c:98 src/cats/sql_find.c:127 src/cats/sql_find.c:182 +#: src/dird/ua_update.c:643 #, c-format -msgid "" -"Query error for start time request: ERR=%s\n" -"CMD=%s\n" +msgid "Current retention period is: %s\n" msgstr "" -"Fehler bei Abfrage von Startzeit: ERR=%s\n" -"CMD=%s\n" -#: src/cats/sql_find.c:104 src/cats/sql_find.c:188 -msgid "No prior Full backup Job record found.\n" -msgstr "Keinen vorherigen \"Full backup\" Job Eintrag gefunden.\n" +#: src/dird/ua_update.c:645 +msgid "Enter Volume Retention period: " +msgstr "" -#: src/cats/sql_find.c:116 +#: src/dird/ua_update.c:652 #, c-format -msgid "Unknown level=%d\n" -msgstr "Unbekannter level=%d\n" +msgid "Current use duration is: %s\n" +msgstr "" + +#: src/dird/ua_update.c:654 +msgid "Enter Volume Use Duration: " +msgstr "" -#: src/cats/sql_find.c:133 +#: src/dird/ua_update.c:661 #, c-format -msgid "" -"No Job record found: ERR=%s\n" -"CMD=%s\n" +msgid "Current max jobs is: %u\n" +msgstr "" + +#: src/dird/ua_update.c:662 +msgid "Enter new Maximum Jobs: " msgstr "" -"Kein \"Job\" Eintrag gefunden: ERR=%s\n" -"CMD=%s\n" -#: src/cats/sql_find.c:291 +#: src/dird/ua_update.c:669 #, c-format -msgid "Unknown Job level=%d\n" -msgstr "Unbekannter Job level=%d\n" +msgid "Current max files is: %u\n" +msgstr "" + +#: src/dird/ua_update.c:670 +msgid "Enter new Maximum Files: " +msgstr "" -#: src/cats/sql_find.c:301 +#: src/dird/ua_update.c:677 #, c-format -msgid "No Job found for: %s.\n" -msgstr "Kein Job gefunden für: %s.\n" +msgid "Current value is: %s\n" +msgstr "" -#: src/cats/sql_find.c:312 +#: src/dird/ua_update.c:678 +msgid "Enter new Maximum Bytes: " +msgstr "" + +#: src/dird/ua_update.c:686 #, c-format -msgid "No Job found for: %s\n" -msgstr "Keinen Job gefunden für: %s\n" +msgid "Current recycle flag is: %s\n" +msgstr "" + +#: src/dird/ua_update.c:688 +msgid "Enter new Recycle status: " +msgstr "" -#: src/cats/sql_find.c:393 +#: src/dird/ua_update.c:695 #, c-format -msgid "Request for Volume item %d greater than max %d or less than 1\n" +msgid "Current Slot is: %d\n" msgstr "" -"Anforderung von \"Volume item\" %d größer als Max %d oder weniger als 1\n" -#: src/cats/sql_find.c:408 -#, fuzzy, c-format -msgid "No Volume record found for item %d.\n" -msgstr "Kein Volume Eintrag gefunden für item %d.\n" +#: src/dird/ua_update.c:696 +msgid "Enter new Slot: " +msgstr "" -#: src/cats/sqlite.c:166 src/cats/ingres.c:255 src/cats/postgresql.c:210 -#: src/cats/dbi.c:228 src/cats/mysql.c:164 +#: src/dird/ua_update.c:703 #, c-format -msgid "Unable to initialize DB lock. ERR=%s\n" -msgstr "Kann DB lock nicht initialisieren. ERR=%s\n" +msgid "Current InChanger flag is: %d\n" +msgstr "" -#: src/cats/sqlite.c:181 +#: src/dird/ua_update.c:704 #, c-format -msgid "Database %s does not exist, please create it.\n" -msgstr "Datenbank %s existiert nicht, bitte erzeugen.\n" +msgid "Set InChanger flag for Volume \"%s\": yes/no: " +msgstr "" -#: src/cats/sqlite.c:203 +#: src/dird/ua_update.c:718 #, c-format -msgid "Unable to open Database=%s. ERR=%s\n" -msgstr "Kann Datenbank=%s.nicht öffen. ERR=%s\n" +msgid "New InChanger flag is: %d\n" +msgstr "" -#: src/cats/sqlite.c:204 -msgid "unknown" -msgstr "unbekannt" +#: src/dird/ua_update.c:725 +msgid "" +"Warning changing Volume Files can result\n" +"in loss of data on your Volume\n" +"\n" +msgstr "" -#: src/cats/sqlite.c:462 src/cats/ingres.c:496 src/cats/postgresql.c:506 -#: src/cats/postgresql.c:553 src/cats/dbi.c:631 src/cats/cats.c:149 -#: src/cats/mysql.c:393 +#: src/dird/ua_update.c:727 #, c-format -msgid "Query failed: %s: ERR=%s\n" -msgstr "Abfrage gescheitert: %s: ERR=%s\n" +msgid "Current Volume Files is: %u\n" +msgstr "" + +#: src/dird/ua_update.c:728 +msgid "Enter new number of Files for Volume: " +msgstr "" -#: src/cats/ingres.c:87 -msgid "Failed to allocate space for query filter.\n" +#: src/dird/ua_update.c:733 +msgid "Normally, you should only increase Volume Files by one!\n" +msgstr "" + +#: src/dird/ua_update.c:734 +msgid "Increase Volume Files? (yes/no): " msgstr "" -#: src/cats/ingres.c:108 -msgid "Failed to allocate space for query filters.\n" +#: src/dird/ua_update.c:744 +#, c-format +msgid "New Volume Files is: %u\n" msgstr "" -#: src/cats/ingres.c:267 -#, fuzzy, c-format -msgid "" -"Unable to connect to Ingres server.\n" -"Database=%s User=%s\n" -"It is probably not running or your password is incorrect.\n" +#: src/dird/ua_update.c:756 +#, c-format +msgid "Current Pool is: %s\n" msgstr "" -"Kann Verbindung zu MySQL Server nicht aufbauen. \n" -"Datenbank=%s Benutzer=%s\n" -"Der Datenbankserver läuft möglicherweise nicht oder das Passwort ist nicht " -"korrekt.\n" -#: src/cats/ingres.c:1087 -#, fuzzy -msgid "A user name for Ingres must be supplied.\n" -msgstr "Ein Benutzername für MySQL muss angegeben werden.\n" +#: src/dird/ua_update.c:757 +msgid "Enter new Pool name: " +msgstr "" -#: src/cats/sql.c:184 +#: src/dird/ua_update.c:778 #, c-format -msgid "" -"Potential performance problem:\n" -"max_connections=%d set for %s database \"%s\" should be larger than " -"Director's MaxConcurrentJobs=%d\n" +msgid "Current Enabled is: %d\n" msgstr "" -#: src/cats/sql.c:229 -#, c-format -msgid "" -"query %s failed:\n" -"%s\n" +#: src/dird/ua_update.c:779 +msgid "Enter new Enabled: " msgstr "" -"Abfrage %s gescheitert:\n" -"%s\n" -#: src/cats/sql.c:251 +#: src/dird/ua_update.c:789 #, c-format -msgid "" -"insert %s failed:\n" -"%s\n" +msgid "Current RecyclePool is: %s\n" msgstr "" -"einfügen %s gescheitert:\n" -"%s\n" -#: src/cats/sql.c:261 -#, c-format -msgid "Insertion problem: affected_rows=%s\n" -msgstr "Problem beim Einfügen: affected_rows=%s\n" +#: src/dird/ua_update.c:791 +msgid "No current RecyclePool\n" +msgstr "" -#: src/cats/sql.c:282 +#: src/dird/ua_update.c:801 #, c-format -msgid "" -"update %s failed:\n" -"%s\n" +msgid "Current ActionOnPurge is: %s\n" msgstr "" -"Aktualisierung %s gescheitert:\n" -"%s\n" -#: src/cats/sql.c:292 -#, fuzzy, c-format -msgid "Update failed: affected_rows=%s for %s\n" -msgstr "Aktualisierungsproblem: affected_rows=%s\n" +#: src/dird/ua_update.c:803 +msgid "Enter new ActionOnPurge (one of: Truncate, None): " +msgstr "" + +#: src/dird/ua_update.c:811 +msgid "Selection terminated.\n" +msgstr "" -#: src/cats/sql.c:314 +#: src/dird/ua_update.c:831 #, c-format -msgid "" -"delete %s failed:\n" -"%s\n" +msgid "Updating %i job(s).\n" msgstr "" -"löschen von %s fehlgeschlagen:\n" -"%s\n" -#: src/cats/sql.c:408 +#: src/dird/ua_update.c:863 #, c-format -msgid "Path length is zero. File=%s\n" -msgstr "Pfadlänge ist null. Datei=%s\n" +msgid "db_update_pool_record returned %d. ERR=%s\n" +msgstr "" -#: src/cats/sql.c:603 -msgid "No results to list.\n" -msgstr "Keine Ergebnisse zu \"list\" Kommando.\n" +#: src/dird/ua_update.c:870 +msgid "Pool DB record updated from resource.\n" +msgstr "" -#: src/cats/sql.c:721 +#: src/dird/ua_update.c:897 #, fuzzy -msgid "Could not init database batch connection\n" -msgstr "Konnte Datenbank \"%s\" nicht öffen.\n" +msgid "Expect JobId keyword, not found.\n" +msgstr "Job Type Schlüsselwort erwartet, erhalten: %s" -#: src/cats/sql.c:727 -#, fuzzy, c-format -msgid "Could not open database \"%s\": ERR=%s\n" -msgstr "Konnte Datenbank \"%s\" nicht öffen.\n" +#: src/dird/ua_update.c:922 +#, fuzzy +msgid "Neither Client nor StartTime specified.\n" +msgstr "Kein storage angegeben.\n" -#: src/cats/postgresql.c:181 +#: src/dird/catreq.c:121 src/dird/catreq.c:364 #, c-format -msgid "Encoding error for database \"%s\". Wanted SQL_ASCII, got %s\n" -msgstr "" +msgid "1990 Invalid Catalog Request: %s" +msgstr "1990 Ungültige Catalog Anfrage: %s" -#: src/cats/postgresql.c:246 -#, fuzzy, c-format -msgid "" -"Unable to connect to PostgreSQL server. Database=%s User=%s\n" -"Possible causes: SQL server not running; password incorrect; max_connections " -"exceeded.\n" -msgstr "" -"Kann Verbindung zu PostgreSQL Server nicht aufbauen.\n" -"Datenbank=%s Benutzer=%s\n" -"Der Datenbankserver läuft möglicherweise nicht oder das Passwort ist nicht " -"korrekt.\n" +#: src/dird/catreq.c:122 +#, c-format +msgid "Invalid Catalog request; DB not open: %s" +msgstr "Ungültige Catalog Anfrage; DB nicht offen: %s" -#: src/cats/postgresql.c:350 -msgid "PQescapeStringConn returned non-zero.\n" +#: src/dird/catreq.c:143 +#, c-format +msgid "Pool \"%s\" not found for SD find media request.\n" msgstr "" -#: src/cats/postgresql.c:368 -msgid "PQescapeByteaConn returned NULL.\n" -msgstr "" +#: src/dird/catreq.c:152 +msgid "1901 No Media.\n" +msgstr "1901 Keine Medien.\n" -#: src/cats/postgresql.c:399 -msgid "PQunescapeByteaConn returned NULL.\n" -msgstr "" +#: src/dird/catreq.c:184 +msgid "not in Pool" +msgstr "nicht in Pool" -#: src/cats/postgresql.c:813 -#, c-format -msgid "error fetching currval: %s\n" -msgstr "Fehler beim Holen des aktuellen Wertes: %s\n" +#: src/dird/catreq.c:186 +msgid "not correct MediaType" +msgstr "nicht korrekter Medientyp" -#: src/cats/postgresql.c:1004 src/cats/dbi.c:1277 -#, fuzzy, c-format -msgid "error starting batch mode: %s" -msgstr "Fehler beim holen von Zeile: %s\n" +#: src/dird/catreq.c:196 +msgid "is not Enabled" +msgstr "ist nicht aktiviert" -#: src/cats/postgresql.c:1034 src/cats/postgresql.c:1041 +#: src/dird/catreq.c:205 #, fuzzy, c-format -msgid "error ending batch mode: %s" -msgstr "Fehler beim holen von Zeile: %s\n" +msgid "1998 Volume \"%s\" catalog status is %s, %s.\n" +msgstr "1998 Volume \"%s\" status ist %s, %s.\n" -#: src/cats/postgresql.c:1088 -#, fuzzy, c-format -msgid "error copying in batch mode: %s" -msgstr "Fehler beim holen von Zeile: %s\n" +#: src/dird/catreq.c:210 +#, c-format +msgid "1997 Volume \"%s\" not in catalog.\n" +msgstr "1997 Volume \"%s\" Nicht in Catalog.\n" -#: src/cats/postgresql.c:1110 -msgid "A user name for PostgreSQL must be supplied.\n" -msgstr "Ein Benutzername für PostgreSQL muss angegeben werden.\n" +#: src/dird/catreq.c:236 +#, c-format +msgid "Unable to get Media record for Volume %s: ERR=%s\n" +msgstr "Konnte Media record für Volume %s nicht holen: ERR=%s\n" -#: src/cats/sql_list.c:59 +#: src/dird/catreq.c:238 #, c-format -msgid "Query failed: %s\n" -msgstr "Abfrage fehlgeschlagen: %s\n" +msgid "1991 Catalog Request for vol=%s failed: %s" +msgstr "1991 Catalog Anfrage für vol=%s fehlgeschlagen: %s" -#: src/cats/sql_list.c:275 -msgid "These JobIds have copies as follows:\n" +#: src/dird/catreq.c:265 +#, fuzzy, c-format +msgid "Attempt to set Volume Files from %u to %u for Volume \"%s\". Ignored.\n" msgstr "" +"Volume Files bei %u werden auf %u für Volumen \"%s\" gesetzt. Dies ist nicht " +"Korrekt.\n" -#: src/cats/sql_list.c:277 -msgid "The catalog contains copies as follows:\n" -msgstr "" +#: src/dird/catreq.c:321 +#, c-format +msgid "Catalog error updating Media record. %s" +msgstr "Catalog Fehler beim Aktualisieren des Media Eintrags. %s" -#: src/cats/dbi.c:117 +#: src/dird/catreq.c:323 +msgid "1993 Update Media error\n" +msgstr "1993 Update Media Fehler\n" + +#: src/dird/catreq.c:350 #, c-format -msgid "Unknown database type: %s\n" -msgstr "" +msgid "Catalog error creating JobMedia record. %s" +msgstr "Catalog Fehler beim Erzeugen des JobMedia Eintrags. %s" + +#: src/dird/catreq.c:352 +#, fuzzy +msgid "1992 Create JobMedia error\n" +msgstr "1991 Update JobMedia Fehler\n" -#: src/cats/dbi.c:242 +#: src/dird/catreq.c:365 #, c-format -msgid "" -"Unable to locate the DBD drivers to DBI interface in: \n" -"db_driverdir=%s. It is probaly not found any drivers\n" -msgstr "" +msgid "Invalid Catalog request: %s" +msgstr "Ungültige Catalog Anfrage: %s" -#: src/cats/dbi.c:299 +#: src/dird/catreq.c:452 #, fuzzy, c-format -msgid "" -"Unable to connect to DBI interface. Type=%s Database=%s User=%s\n" -"Possible causes: SQL server not running; password incorrect; max_connections " -"exceeded.\n" -msgstr "" -"Kann Verbindung zu PostgreSQL Server nicht aufbauen.\n" -"Datenbank=%s Benutzer=%s\n" -"Der Datenbankserver läuft möglicherweise nicht oder das Passwort ist nicht " -"korrekt.\n" +msgid "Attribute create error: ERR=%s" +msgstr "Attribute create error. %s" -#: src/cats/dbi.c:1439 +#: src/dird/catreq.c:549 #, fuzzy, c-format -msgid "error inserting batch mode: %s" -msgstr "Fehler beim holen von Zeile: %s\n" +msgid "Restore object create error. %s" +msgstr "Attribute create error. %s" -#: src/cats/dbi.c:1456 -#, fuzzy -msgid "Driver type not specified in Catalog resource.\n" -msgstr "Schlüsselwort %s ist in dieser Ressource nicht erlaubt." +#: src/dird/catreq.c:556 +#, fuzzy, c-format +msgid "%s not same File=%d as attributes=%d\n" +msgstr "Erhielt %s aber nicht die gleiche Datei wie Attribute\n" -#: src/cats/dbi.c:1460 -msgid "Invalid driver type, must be \"dbi:\"\n" +#: src/dird/catreq.c:583 +#, c-format +msgid "Catalog error updating file digest. Unsupported digest stream type: %d" msgstr "" +"Catalog Fehler beim Aktualisieren des file digest. Nicht unterstützter " +"digest stream typ: %d" -#: src/cats/dbi.c:1464 -#, fuzzy -msgid "A user name for DBI must be supplied.\n" -msgstr "Ein Benutzername für MySQL muss angegeben werden.\n" - -#: src/cats/cats_dummy.c:39 -msgid "Please replace this dummy libbaccats library with a proper one.\n" -msgstr "" +#: src/dird/catreq.c:598 +#, fuzzy, c-format +msgid "attribute create error. %s" +msgstr "Attribute create error. %s" -#: src/cats/sql_delete.c:80 +#: src/dird/catreq.c:604 #, c-format -msgid "No pool record %s exists\n" -msgstr "Kein pool Eintrag %s vorhanden\n" +msgid "Catalog error updating file digest. %s" +msgstr "Catalog Fehler beim Aktualisieren des file digest. %s" -#: src/cats/sql_delete.c:85 -#, c-format -msgid "Expecting one pool record, got %d\n" -msgstr "Erwartete einen \"pool\" Eintrag, erhielt %d\n" +#: src/dird/catreq.c:627 +#, fuzzy, c-format +msgid "1994 Invalid Catalog Update: %s" +msgstr "1991 Ungültige Catalog Aktualisierung: %s" -#: src/cats/sql_delete.c:91 +#: src/dird/catreq.c:628 #, c-format -msgid "Error fetching row %s\n" -msgstr "Fehler beim Holen der Zeile %s\n" +msgid "Invalid Catalog Update; DB not open: %s" +msgstr "Ungültige Catalog Aktualisierung; DB nicht geöffnet: %s" -#: src/cats/mysql.c:207 +#: src/dird/catreq.c:684 src/dird/catreq.c:699 #, fuzzy, c-format -msgid "" -"Unable to connect to MySQL server.\n" -"Database=%s User=%s\n" -"MySQL connect failed either server not running or your authorization is " -"incorrect.\n" +msgid "fread attr spool error. ERR=%s\n" +msgstr "Regex Übersetzungsfehler. ERR=%s\n" + +#: src/findlib/match.c:198 src/filed/job.c:1615 src/tools/testfind.c:642 +#, c-format +msgid "Unknown include/exclude option: %c\n" msgstr "" -"Kann Verbindung zu MySQL Server nicht aufbauen. \n" -"Datenbank=%s Benutzer=%s\n" -"Der Datenbankserver läuft möglicherweise nicht oder das Passwort ist nicht " -"korrekt.\n" -#: src/cats/mysql.c:692 -msgid "A user name for MySQL must be supplied.\n" -msgstr "Ein Benutzername für MySQL muss angegeben werden.\n" +#: src/findlib/bfile.c:85 +msgid "Unix attributes" +msgstr "" -#: src/wx-console/console_conf.c:147 src/console/console_conf.c:140 -#: src/qt-console/bat_conf.cpp:141 -#, c-format -msgid "No record for %d %s\n" +#: src/findlib/bfile.c:87 +msgid "File data" msgstr "" -#: src/wx-console/console_conf.c:156 src/console/console_conf.c:149 -#, c-format -msgid "Console: name=%s rcfile=%s histfile=%s\n" +#: src/findlib/bfile.c:89 +msgid "MD5 digest" msgstr "" -#: src/wx-console/console_conf.c:160 src/console/console_conf.c:153 -#: src/qt-console/bat_conf.cpp:150 -#, c-format -msgid "Director: name=%s address=%s DIRport=%d\n" +#: src/findlib/bfile.c:91 +msgid "GZIP data" msgstr "" -#: src/wx-console/authenticate.c:142 src/console/authenticate.c:138 -msgid "TLS negotiation failed\n" +#: src/findlib/bfile.c:93 +msgid "Compressed data" msgstr "" -#: src/wx-console/authenticate.c:150 -msgid "Bad response to Hello command: ERR=" +#: src/findlib/bfile.c:95 +msgid "Extended attributes" msgstr "" -#: src/wx-console/authenticate.c:167 src/console/authenticate.c:169 -#, fuzzy -msgid "" -"Director authorization problem.\n" -"Most likely the passwords do not agree.\n" -"If you are using TLS, there may have been a certificate validation error " -"during the TLS handshake.\n" -"Please see " +#: src/findlib/bfile.c:97 +msgid "Sparse data" +msgstr "" + +#: src/findlib/bfile.c:99 +msgid "GZIP sparse data" +msgstr "" + +#: src/findlib/bfile.c:101 +msgid "Compressed sparse data" +msgstr "" + +#: src/findlib/bfile.c:103 +msgid "Program names" msgstr "" -"Kann mit File daemon on \"%s:%d\" nicht authentisieren. Mögliche Ursachen:\n" -"Passworte oder Namen nicht gleich oder\n" -"Maximum Concurrent Jobs überschritten auf dem FD oder\n" -"FD Netzwerk durcheinander (Daemon neustarten).\n" -"Für Hilfe bitte unter http://www.bacula.org/rel-manual/faq." -"html#AuthorizationErrors nachsehen.\n" -#: src/console/console.c:126 -#, c-format -msgid "" -"\n" -"Version: " +#: src/findlib/bfile.c:105 +msgid "Program data" msgstr "" -#: src/console/console.c:178 -msgid "input from file" +#: src/findlib/bfile.c:107 +msgid "SHA1 digest" msgstr "" -#: src/console/console.c:179 -msgid "output to file" +#: src/findlib/bfile.c:109 +msgid "Win32 data" msgstr "" -#: src/console/console.c:180 -msgid "quit" +#: src/findlib/bfile.c:111 +msgid "Win32 GZIP data" msgstr "" -#: src/console/console.c:181 -msgid "output to file and terminal" +#: src/findlib/bfile.c:113 +msgid "Win32 compressed data" msgstr "" -#: src/console/console.c:182 -msgid "sleep specified time" +#: src/findlib/bfile.c:115 +msgid "MacOS Fork data" msgstr "" -#: src/console/console.c:183 -msgid "print current time" +#: src/findlib/bfile.c:117 +msgid "HFS+ attribs" msgstr "" -#: src/console/console.c:184 -msgid "print Console's version" +#: src/findlib/bfile.c:119 +msgid "Standard Unix ACL attribs" msgstr "" -#: src/console/console.c:185 -msgid "echo command string" +#: src/findlib/bfile.c:121 +msgid "Default Unix ACL attribs" msgstr "" -#: src/console/console.c:186 -msgid "execute an external command" +#: src/findlib/bfile.c:123 +msgid "SHA256 digest" msgstr "" -#: src/console/console.c:187 -msgid "exit = quit" +#: src/findlib/bfile.c:125 +msgid "SHA512 digest" msgstr "" -#: src/console/console.c:188 -msgid "zed_keys = use zed keys instead of bash keys" +#: src/findlib/bfile.c:127 +msgid "Signed digest" msgstr "" -#: src/console/console.c:189 -msgid "help listing" +#: src/findlib/bfile.c:129 +msgid "Encrypted File data" msgstr "" -#: src/console/console.c:191 -msgid "set command separator" +#: src/findlib/bfile.c:131 +msgid "Encrypted Win32 data" msgstr "" -#: src/console/console.c:225 -msgid ": is an invalid command\n" +#: src/findlib/bfile.c:133 +msgid "Encrypted session data" msgstr "" -#: src/console/console.c:675 -msgid "Illegal separator character.\n" +#: src/findlib/bfile.c:135 +msgid "Encrypted GZIP data" msgstr "" -#: src/console/console.c:708 -msgid "Command logic problem\n" +#: src/findlib/bfile.c:137 +msgid "Encrypted compressed data" msgstr "" -#: src/console/console.c:925 -#, fuzzy, c-format -msgid "Can't find %s in Director list\n" -msgstr "Kann Director resource %s nicht finden\n" +#: src/findlib/bfile.c:139 +msgid "Encrypted Win32 GZIP data" +msgstr "" -#: src/console/console.c:933 -msgid "Available Directors:\n" +#: src/findlib/bfile.c:141 +msgid "Encrypted Win32 Compressed data" msgstr "" -#: src/console/console.c:937 -#, c-format -msgid "%2d: %s at %s:%d\n" +#: src/findlib/bfile.c:143 +msgid "Encrypted MacOS fork data" msgstr "" -#: src/console/console.c:941 -msgid "Select Director by entering a number: " +#: src/findlib/bfile.c:145 +msgid "Plugin Name" msgstr "" -#: src/console/console.c:948 -#, c-format -msgid "%s is not a number. You must enter a number between 1 and %d\n" +#: src/findlib/bfile.c:147 +msgid "Plugin Data" msgstr "" -#: src/console/console.c:955 -#, c-format -msgid "You must enter a number between 1 and %d\n" +#: src/findlib/bfile.c:149 +#, fuzzy +msgid "Restore Object" +msgstr "Wiederherstellung läuft..." + +#: src/findlib/bfile.c:151 +msgid "AIX Specific ACL attribs" msgstr "" -#: src/console/console.c:1160 src/wx-console/console_thread.cpp:399 -#: src/qt-console/bcomm/dircomm.cpp:131 -#, c-format -msgid "Failed to initialize TLS context for Console \"%s\".\n" +#: src/findlib/bfile.c:153 +msgid "Darwin Specific ACL attribs" msgstr "" -#: src/console/console.c:1180 src/wx-console/console_thread.cpp:420 -#: src/qt-console/bcomm/dircomm.cpp:154 -#, c-format -msgid "Failed to initialize TLS context for Director \"%s\".\n" +#: src/findlib/bfile.c:155 +msgid "FreeBSD Specific Default ACL attribs" msgstr "" -#: src/console/console.c:1210 -msgid "Enter a period to cancel a command.\n" +#: src/findlib/bfile.c:157 +msgid "FreeBSD Specific Access ACL attribs" msgstr "" -#: src/console/console.c:1304 src/qt-console/main.cpp:232 -#, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Director \"%s\" in %s. At least one CA certificate store is required.\n" +#: src/findlib/bfile.c:159 +msgid "HPUX Specific ACL attribs" msgstr "" -#: src/console/console.c:1313 src/qt-console/main.cpp:241 -#, c-format -msgid "" -"No Director resource defined in %s\n" -"Without that I don't how to speak to the Director :-(\n" +#: src/findlib/bfile.c:161 +msgid "Irix Specific Default ACL attribs" msgstr "" -#: src/console/console.c:1333 src/qt-console/main.cpp:262 -#, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Console \"%s\" in %s.\n" +#: src/findlib/bfile.c:163 +msgid "Irix Specific Access ACL attribs" msgstr "" -#: src/console/console.c:1359 -msgid "Too many arguments on input command.\n" +#: src/findlib/bfile.c:165 +msgid "Linux Specific Default ACL attribs" msgstr "" -#: src/console/console.c:1363 -msgid "First argument to input command must be a filename.\n" +#: src/findlib/bfile.c:167 +msgid "Linux Specific Access ACL attribs" msgstr "" -#: src/console/console.c:1369 -#, c-format -msgid "Cannot open file %s for input. ERR=%s\n" +#: src/findlib/bfile.c:169 +msgid "TRU64 Specific Default ACL attribs" msgstr "" -#: src/console/console.c:1401 -msgid "Too many arguments on output/tee command.\n" +#: src/findlib/bfile.c:171 +msgid "TRU64 Specific Access ACL attribs" msgstr "" -#: src/console/console.c:1418 -#, c-format -msgid "Cannot open file %s for output. ERR=%s\n" +#: src/findlib/bfile.c:173 +msgid "Solaris Specific POSIX ACL attribs" msgstr "" -#: src/console/console.c:1437 -msgid "Too many arguments. Enclose command in double quotes.\n" +#: src/findlib/bfile.c:175 +msgid "Solaris Specific NFSv4/ZFS ACL attribs" msgstr "" -#: src/console/console.c:1446 -#, fuzzy, c-format -msgid "Cannot popen(\"%s\", \"r\"): ERR=%s\n" -msgstr "Kann Ausdruck\"%s\"nicht auflösen: ERR=%s\n" +#: src/findlib/bfile.c:177 +msgid "AFS Specific ACL attribs" +msgstr "" -#: src/tools/testls.c:59 -#, c-format -msgid "" -"\n" -"Usage: testls [-d debug_level] [-] [pattern1 ...]\n" -" -a print extended attributes (Win32 debug)\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -e specify file of exclude patterns\n" -" -i specify file of include patterns\n" -" -q quiet, don't print filenames (debug)\n" -" - read pattern(s) from stdin\n" -" -? print this message.\n" -"\n" -"Patterns are file inclusion -- normally directories.\n" -"Debug level >= 1 prints each file found.\n" -"Debug level >= 10 prints path/file for catalog.\n" -"Errors always printed.\n" -"Files/paths truncated is number with len > 255.\n" -"Truncation is only in catalog.\n" -"\n" +#: src/findlib/bfile.c:179 +msgid "AIX Specific POSIX ACL attribs" msgstr "" -#: src/tools/testls.c:155 -#, c-format -msgid "Could not open include file: %s\n" +#: src/findlib/bfile.c:181 +msgid "AIX Specific NFSv4 ACL attribs" msgstr "" -#: src/tools/testls.c:168 -#, c-format -msgid "Could not open exclude file: %s\n" +#: src/findlib/bfile.c:183 +msgid "FreeBSD Specific NFSv4/ZFS ACL attribs" msgstr "" -#: src/tools/testls.c:182 -#, c-format -msgid "Files seen = %d\n" +#: src/findlib/bfile.c:185 +msgid "GNU Hurd Specific Default ACL attribs" msgstr "" -#: src/tools/testls.c:215 src/tools/testfind.c:322 -#, c-format -msgid "Err: Could not access %s: %s\n" +#: src/findlib/bfile.c:187 +msgid "GNU Hurd Specific Access ACL attribs" msgstr "" -#: src/tools/testls.c:218 src/tools/testfind.c:325 -#, c-format -msgid "Err: Could not follow ff->link %s: %s\n" +#: src/findlib/bfile.c:189 +msgid "GNU Hurd Specific Extended attribs" msgstr "" -#: src/tools/testls.c:221 src/tools/testfind.c:328 -#, c-format -msgid "Err: Could not stat %s: %s\n" +#: src/findlib/bfile.c:191 +msgid "IRIX Specific Extended attribs" msgstr "" -#: src/tools/testls.c:224 src/tools/testfind.c:331 -#, c-format -msgid "Skip: File not saved. No change. %s\n" +#: src/findlib/bfile.c:193 +msgid "TRU64 Specific Extended attribs" msgstr "" -#: src/tools/testls.c:227 src/tools/testfind.c:334 -#, c-format -msgid "Err: Attempt to backup archive. Not saved. %s\n" +#: src/findlib/bfile.c:195 +msgid "AIX Specific Extended attribs" msgstr "" -#: src/tools/testls.c:230 -#, c-format -msgid "Recursion turned off. Directory not entered. %s\n" +#: src/findlib/bfile.c:197 +msgid "OpenBSD Specific Extended attribs" msgstr "" -#: src/tools/testls.c:233 -#, c-format -msgid "Skip: File system change prohibited. Directory not entered. %s\n" +#: src/findlib/bfile.c:199 +msgid "Solaris Specific Extensible attribs or System Extended attribs" msgstr "" -#: src/tools/testls.c:236 src/tools/testfind.c:337 -#, c-format -msgid "Err: Could not open directory %s: %s\n" +#: src/findlib/bfile.c:201 +msgid "Solaris Specific Extended attribs" msgstr "" -#: src/tools/testls.c:239 src/tools/testfind.c:340 -#, c-format -msgid "Err: Unknown file ff->type %d: %s\n" +#: src/findlib/bfile.c:203 +msgid "Darwin Specific Extended attribs" msgstr "" -#: src/tools/bvfs_test.c:56 src/tools/ing_test.c:57 -#, c-format -msgid "" -"\n" -"Version: %s (%s)\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -n specify the database name (default bacula)\n" -" -u specify database user name (default bacula)\n" -" -P specify database host (default NULL)\n" -" -w specify working directory\n" -" -j specify jobids\n" -" -p specify path\n" -" -f specify file\n" -" -l maximum tuple to fetch\n" -" -T truncate cache table before starting\n" -" -v verbose\n" -" -? print this message\n" -"\n" +#: src/findlib/bfile.c:205 +msgid "FreeBSD Specific Extended attribs" msgstr "" -#: src/tools/bbatch.c:79 -#, c-format -msgid "" -"\n" -"Version: %s (%s)\n" -"Example : bbatch -w /path/to/workdir -h localhost -f dat1 -f dat -f datx\n" -" will start 3 thread and load dat1, dat and datx in your catalog\n" -"See bbatch.c to generate datafile\n" -"\n" -"Usage: bbatch [ options ] -w working/dir -f datafile\n" -" -b with batch mode\n" -" -B without batch mode\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -n specify the database name (default bacula)\n" -" -u specify database user name (default bacula)\n" -" -P specify database host (default NULL)\n" -" -w specify working directory\n" -" -r call restore code with given jobids\n" -" -v verbose\n" -" -f specify data file\n" -" -? print this message\n" -"\n" +#: src/findlib/bfile.c:207 +msgid "Linux Specific Extended attribs" msgstr "" -#: src/tools/bbatch.c:211 +#: src/findlib/bfile.c:209 +msgid "NetBSD Specific Extended attribs" +msgstr "" + +#: src/findlib/makepath.c:141 #, c-format -msgid "Computing file list for jobid=%s files=%lld secs=%d\n" +msgid "Cannot create directory %s: ERR=%s\n" msgstr "" -#: src/tools/bbatch.c:315 -#, fuzzy, c-format -msgid "Error opening datafile %s\n" -msgstr "Fehler beim holen von Zeile: %s\n" +#: src/findlib/makepath.c:145 src/findlib/makepath.c:219 +#, c-format +msgid "%s exists but is not a directory.\n" +msgstr "" -#: src/tools/bbatch.c:325 -#, fuzzy -msgid "Error while inserting file\n" -msgstr "Fehler beim schreiben der bsr Datei.\n" +#: src/findlib/makepath.c:155 +#, c-format +msgid "Security problem!! We created directory %s, but it is a link.\n" +msgstr "" -#: src/tools/ing_test.c:231 src/tools/ing_test.c:264 src/tools/ing_test.c:302 -msgid "Stmt went wrong\n" +#: src/findlib/makepath.c:181 +#, c-format +msgid "Cannot change owner and/or group of %s: ERR=%s\n" msgstr "" -#: src/tools/ing_test.c:320 -msgid "CREATE-Stmt went wrong\n" +#: src/findlib/makepath.c:186 +#, c-format +msgid "Cannot change permissions of %s: ERR=%s\n" msgstr "" -#: src/tools/ing_test.c:325 -msgid "DROP-Stmt went wrong\n" +#: src/findlib/makepath.c:256 +#, c-format +msgid "%c: is not a valid drive.\n" +msgstr "" + +#: src/findlib/makepath.c:300 +msgid "Too many subdirectories. Some permissions not reset.\n" msgstr "" -#: src/tools/fstype.c:48 +#: src/findlib/file_create.c:102 #, c-format -msgid "" -"\n" -"Usage: fstype [-v] path ...\n" -"\n" -" Print the file system type a given file/directory is on.\n" -" The following options are supported:\n" -"\n" -" -v print both path and file system type.\n" -" -? print this message.\n" -"\n" +msgid "File skipped. Not newer: %s\n" msgstr "" -#: src/tools/fstype.c:102 src/tools/drivetype.c:78 -#, fuzzy, c-format -msgid "%s: unknown\n" -msgstr "unbekannt" +#: src/findlib/file_create.c:109 +#, c-format +msgid "File skipped. Not older: %s\n" +msgstr "" -#: src/tools/bregex.c:153 src/tools/bwild.c:122 src/tools/bregtest.c:137 +#: src/findlib/file_create.c:119 #, c-format -msgid "Could not open data file: %s\n" +msgid "File skipped. Already exists: %s\n" msgstr "" -#: src/tools/drivetype.c:47 +#: src/findlib/file_create.c:145 #, c-format -msgid "" -"\n" -"Usage: drivetype [-v] path ...\n" -"\n" -" Print the drive type a given file/directory is on.\n" -" The following options are supported:\n" -"\n" -" -l print local fixed hard drive\n" -" -a display information on all drives\n" -" -v print both path and file system type.\n" -" -? print this message.\n" -"\n" +msgid "File %s already exists and could not be replaced. ERR=%s.\n" msgstr "" -#: src/tools/testfind.c:70 +#: src/findlib/file_create.c:196 src/findlib/file_create.c:259 +#: src/findlib/file_create.c:348 #, c-format -msgid "" -"\n" -"Usage: testfind [-d debug_level] [-] [pattern1 ...]\n" -" -a print extended attributes (Win32 debug)\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -c specify config file containing FileSet resources\n" -" -f specify which FileSet to use\n" -" -? print this message.\n" -"\n" -"Patterns are used for file inclusion -- normally directories.\n" -"Debug level >= 1 prints each file found.\n" -"Debug level >= 10 prints path/file for catalog.\n" -"Errors are always printed.\n" -"Files/paths truncated is the number of files/paths with len > 255.\n" -"Truncation is only in the catalog.\n" -"\n" +msgid "bpkt already open fid=%d\n" msgstr "" -#: src/tools/testfind.c:235 +#: src/findlib/file_create.c:204 src/filed/fd_plugins.c:1004 #, c-format -msgid "" -"\n" -"Total files : %d\n" -"Max file length: %d\n" -"Max path length: %d\n" -"Files truncated: %d\n" -"Paths truncated: %d\n" -"Hard links : %d\n" +msgid "Could not create %s: ERR=%s\n" msgstr "" -#: src/tools/testfind.c:278 +#: src/findlib/file_create.c:218 #, c-format -msgid "Reg: %s\n" +msgid "Cannot make fifo %s: ERR=%s\n" msgstr "" -#: src/tools/testfind.c:300 -msgid "\t[will not descend: recursion turned off]" +#: src/findlib/file_create.c:236 +#, c-format +msgid "Cannot make node %s: ERR=%s\n" msgstr "" -#: src/tools/testfind.c:302 -msgid "\t[will not descend: file system change not allowed]" +#: src/findlib/file_create.c:281 +#, c-format +msgid "Could not symlink %s -> %s: ERR=%s\n" msgstr "" -#: src/tools/testfind.c:304 -msgid "\t[will not descend: disallowed file system]" +#: src/findlib/file_create.c:304 src/findlib/file_create.c:317 +#, c-format +msgid "Could not restore file flags for file %s: ERR=%s\n" msgstr "" -#: src/tools/testfind.c:306 -msgid "\t[will not descend: disallowed drive type]" +#: src/findlib/file_create.c:308 src/findlib/file_create.c:325 +#, c-format +msgid "Could not hard link %s -> %s: ERR=%s\n" msgstr "" -#: src/tools/testfind.c:390 +#: src/findlib/file_create.c:321 #, c-format -msgid "===== Filename truncated to 255 chars: %s\n" +msgid "Could not reset file flags for file %s: ERR=%s\n" msgstr "" -#: src/tools/testfind.c:407 +#: src/findlib/file_create.c:363 #, c-format -msgid "========== Path name truncated to 255 chars: %s\n" +msgid "Original file %s have been deleted: type=%d\n" msgstr "" -#: src/tools/testfind.c:416 +#: src/findlib/file_create.c:375 #, c-format -msgid "========== Path length is zero. File=%s\n" +msgid "Original file %s not saved: type=%d\n" msgstr "" -#: src/tools/testfind.c:419 +#: src/findlib/file_create.c:378 #, c-format -msgid "Path: %s\n" +msgid "Unknown file type %d; not restored: %s\n" msgstr "" -#: src/tools/cats_test.c:60 +#: src/findlib/file_create.c:413 #, c-format -msgid "" -"\n" -"Version: %s (%s)\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -n specify the database name (default bacula)\n" -" -u specify database user name (default bacula)\n" -" -P specify database host (default NULL)\n" -" -w specify working directory\n" -" -p specify path\n" -" -f specify file\n" -" -l maximum tuple to fetch\n" -" -q print only errors\n" -" -v verbose\n" -" -? print this message\n" -"\n" +msgid "Zero length filename: %s\n" msgstr "" -#: src/tools/cats_test.c:376 +#: src/findlib/find.c:186 #, fuzzy, c-format -msgid "Could not open, database \"%s\".\n" -msgstr "Konnte Datenbank \"%s\" nicht öffen.\n" +msgid "Plugin: \"%s\" not found.\n" +msgstr "Pool Ressource \"%s\" nicht gefunden.\n" -#: src/tools/bsmtp.c:151 +#: src/findlib/file_attrs.c:96 src/findlib/file_attrs.c:138 #, c-format -msgid "Fatal malformed reply from %s: %s\n" +msgid "Unable to set file modes %s: ERR=%s\n" msgstr "" -#: src/tools/bsmtp.c:159 +#: src/findlib/file_attrs.c:106 src/findlib/file_attrs.c:132 +#: src/findlib/file_attrs.c:589 #, c-format -msgid "Fatal fgets error: ERR=%s\n" +msgid "Unable to set file owner %s: ERR=%s\n" msgstr "" -#: src/tools/bsmtp.c:192 -#, fuzzy, c-format -msgid "" -"\n" -"Usage: %s [-f from] [-h mailhost] [-s subject] [-c copy] [recipient ...]\n" -" -4 forces bsmtp to use IPv4 addresses only.\n" -" -6 forces bsmtp to use IPv6 addresses only.\n" -" -8 set charset to UTF-8\n" -" -a use any ip protocol for address resolution\n" -" -c set the Cc: field\n" -" -d set debug level to \n" -" -dt print a timestamp in debug output\n" -" -f set the From: field\n" -" -h use mailhost:port as the SMTP server\n" -" -s set the Subject: field\n" -" -r set the Reply-To: field\n" -" -l set the maximum number of lines to send (default: " -"unlimited)\n" -" -? print this message.\n" -"\n" +#: src/findlib/file_attrs.c:125 src/findlib/file_attrs.c:150 +#, c-format +msgid "Unable to set file times %s: ERR=%s\n" msgstr "" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: dird [-f -s] [-c config_file] [-d debug_level] [config_file]\n" -" -c setze Konfigurationsdatei auf Datei\n" -" -dnn setze debug level auf nn\n" -" -f starte im Vordergrund (für debugging Zwecke)\n" -" -g groupid\n" -" -r starte jetzt\n" -" -s no signals\n" -" -t test - Konfiguration Lesen und beenden\n" -" -u userid\n" -" -v ausführliche Benutzer Meldungen\n" -" -? diese Meldung ausgeben.\n" -"\n" -#: src/tools/bsmtp.c:379 -msgid "Fatal error: no recipient given.\n" +#: src/findlib/file_attrs.c:566 +#, c-format +msgid "File size of restored file %s not correct. Original %s, restored %s.\n" msgstr "" -#: src/tools/bsmtp.c:407 +#: src/findlib/file_attrs.c:609 #, c-format -msgid "Fatal gethostname error: ERR=%s\n" +msgid "Unable to set file flags %s: ERR=%s\n" msgstr "" -#: src/tools/bsmtp.c:418 -#, fuzzy, c-format -msgid "Fatal getaddrinfo for myself failed \"%s\": ERR=%s\n" -msgstr "Catalog Fehler beim Aktualisieren von volume \"%s\". ERR=%s" - -#: src/tools/bsmtp.c:426 +#: src/findlib/find_one.c:215 #, c-format -msgid "Fatal gethostbyname for myself failed \"%s\": ERR=%s\n" +msgid " NODUMP flag set - will not process %s\n" msgstr "" -#: src/tools/bsmtp.c:486 src/tools/bsmtp.c:521 +#: src/findlib/find_one.c:236 #, fuzzy, c-format -msgid "Error unknown mail host \"%s\": ERR=%s\n" -msgstr "unbekannt" +msgid "Cannot stat file %s: ERR=%s\n" +msgstr "Kann bootstrap Datei nicht öffnen: %s: ERR=%s\n" -#: src/tools/bsmtp.c:489 src/tools/bsmtp.c:524 -msgid "Retrying connection using \"localhost\".\n" +#: src/findlib/find_one.c:241 +#, c-format +msgid "%s mtime changed during backup.\n" msgstr "" -#: src/tools/bsmtp.c:514 -#, fuzzy, c-format -msgid "Failed to connect to mailhost %s\n" -msgstr "Verbindung zu File daemon fehlgeschlagen.\n" +#: src/findlib/find_one.c:248 +#, c-format +msgid "%s ctime changed during backup.\n" +msgstr "" -#: src/tools/bsmtp.c:532 +#: src/findlib/find_one.c:255 #, c-format -msgid "Fatal error: Unknown address family for smtp host: %d\n" +msgid "%s size of %lld changed during backup to %lld.n" msgstr "" -#: src/tools/bsmtp.c:541 src/tools/bsmtp.c:546 +#: src/findlib/find_one.c:383 #, c-format -msgid "Fatal socket error: ERR=%s\n" +msgid "Top level directory \"%s\" has unlisted fstype \"%s\"\n" msgstr "" -#: src/tools/bsmtp.c:551 +#: src/findlib/find_one.c:398 #, c-format -msgid "Fatal connect error to %s: ERR=%s\n" +msgid "Top level directory \"%s\" has an unlisted drive type \"%s\"\n" msgstr "" -#: src/tools/bsmtp.c:560 +#: src/filed/job.c:294 #, c-format -msgid "Fatal _open_osfhandle error: ERR=%s\n" +msgid "Command: \"%s\" is disabled.\n" msgstr "" -#: src/tools/bsmtp.c:567 src/tools/bsmtp.c:571 src/tools/bsmtp.c:580 -#: src/tools/bsmtp.c:584 +#: src/filed/job.c:440 +#, fuzzy +msgid "SD connect failed: Bad Hello command\n" +msgstr "Job nicht gefunden: %s\n" + +#: src/filed/job.c:448 +#, fuzzy, c-format +msgid "SD connect failed: Job name not found: %s\n" +msgstr "Job nicht gefunden: %s\n" + +#: src/filed/job.c:501 #, c-format -msgid "Fatal fdopen error: ERR=%s\n" +msgid "Bad command from %s. Len=%d.\n" +msgstr "" + +#: src/filed/job.c:555 +msgid "2902 Error scanning cancel command.\n" msgstr "" -#: src/tools/bsmtp.c:576 +#: src/filed/job.c:559 src/filed/job.c:598 #, c-format -msgid "Fatal dup error: ERR=%s\n" +msgid "2901 Job %s not found.\n" msgstr "" -#: src/tools/dbcheck.c:195 -msgid "" -"Warning skipping the additional parameters for working directory/dbname/user/" -"password/host.\n" +#: src/filed/job.c:569 +#, fuzzy, c-format +msgid "2001 Job \"%s\" marked to be %s.\n" +msgstr "JobId %s, Job %s zum Abbruch markiert.\n" + +#: src/filed/job.c:592 +#, fuzzy, c-format +msgid "2991 Bad setbandwidth command: %s\n" +msgstr "Storage daemon hat \"Job command\": %s abgelehnt\n" + +#: src/filed/job.c:645 +#, c-format +msgid "2991 Bad setdebug command: %s\n" msgstr "" -#: src/tools/dbcheck.c:212 +#: src/filed/job.c:678 #, c-format -msgid "Error can not find the Catalog name[%s] in the given config file [%s]\n" +msgid "Bad estimate command: %s" +msgstr "" + +#: src/filed/job.c:679 +msgid "2992 Bad estimate command.\n" msgstr "" -#: src/tools/dbcheck.c:214 +#: src/filed/job.c:702 #, c-format -msgid "Error there is no Catalog section in the given config file [%s]\n" +msgid "Bad Job Command: %s" msgstr "" -#: src/tools/dbcheck.c:223 -msgid "Error no Director resource defined.\n" +#: src/filed/job.c:737 +#, c-format +msgid "Bad RunBeforeJob command: %s\n" msgstr "" -#: src/tools/dbcheck.c:247 -msgid "Wrong number of arguments.\n" +#: src/filed/job.c:738 src/filed/job.c:757 +msgid "2905 Bad RunBeforeJob command.\n" msgstr "" -#: src/tools/dbcheck.c:252 -msgid "Working directory not supplied.\n" +#: src/filed/job.c:768 +msgid "2905 Bad RunBeforeNow command.\n" msgstr "" -#: src/tools/dbcheck.c:288 -msgid "Database port must be a numeric value.\n" +#: src/filed/job.c:787 +#, c-format +msgid "Bad RunAfter command: %s\n" msgstr "" -#: src/tools/dbcheck.c:291 -msgid "Database port must be a int value.\n" +#: src/filed/job.c:788 +msgid "2905 Bad RunAfterJob command.\n" msgstr "" -#: src/tools/dbcheck.c:365 +#: src/filed/job.c:824 #, c-format -msgid "Hello, this is the database check/correct program.\n" +msgid "Bad RunScript command: %s\n" +msgstr "" + +#: src/filed/job.c:825 +msgid "2905 Bad RunScript command.\n" msgstr "" -#: src/tools/dbcheck.c:367 -#, c-format -msgid "Modify database is on." +#: src/filed/job.c:880 +#, fuzzy, c-format +msgid "Bad RestoreObject command: %s\n" +msgstr "Storage daemon hat \"Job command\": %s abgelehnt\n" + +#: src/filed/job.c:945 +msgid "2909 Bad RestoreObject command.\n" msgstr "" -#: src/tools/dbcheck.c:369 +#: src/filed/job.c:984 #, c-format -msgid "Modify database is off." +msgid "Plugin Directory not defined. Cannot use plugin: \"%s\"\n" msgstr "" -#: src/tools/dbcheck.c:371 src/tools/dbcheck.c:432 +#: src/filed/job.c:1026 #, c-format -msgid " Verbose is on.\n" +msgid "Error running program: %s. stat=%d: ERR=%s\n" msgstr "" -#: src/tools/dbcheck.c:373 src/tools/dbcheck.c:434 +#: src/filed/job.c:1037 #, c-format -msgid " Verbose is off.\n" +msgid "Cannot open FileSet input file: %s. ERR=%s\n" msgstr "" -#: src/tools/dbcheck.c:375 +#: src/filed/job.c:1191 #, c-format -msgid "Please select the function you want to perform.\n" +msgid "REGEX %s compile error. ERR=%s\n" msgstr "" -#: src/tools/dbcheck.c:379 +#: src/filed/job.c:1342 #, c-format -msgid "" -"\n" -" 1) Toggle modify database flag\n" -" 2) Toggle verbose flag\n" -" 3) Repair bad Filename records\n" -" 4) Repair bad Path records\n" -" 5) Eliminate duplicate Filename records\n" -" 6) Eliminate duplicate Path records\n" -" 7) Eliminate orphaned Jobmedia records\n" -" 8) Eliminate orphaned File records\n" -" 9) Eliminate orphaned Path records\n" -" 10) Eliminate orphaned Filename records\n" -" 11) Eliminate orphaned FileSet records\n" -" 12) Eliminate orphaned Client records\n" -" 13) Eliminate orphaned Job records\n" -" 14) Eliminate all Admin records\n" -" 15) Eliminate all Restore records\n" -" 16) All (3-15)\n" -" 17) Quit\n" +msgid "Invalid FileSet command: %s\n" msgstr "" -#: src/tools/dbcheck.c:398 +#: src/filed/job.c:1749 #, c-format msgid "" -"\n" -" 1) Toggle modify database flag\n" -" 2) Toggle verbose flag\n" -" 3) Check for bad Filename records\n" -" 4) Check for bad Path records\n" -" 5) Check for duplicate Filename records\n" -" 6) Check for duplicate Path records\n" -" 7) Check for orphaned Jobmedia records\n" -" 8) Check for orphaned File records\n" -" 9) Check for orphaned Path records\n" -" 10) Check for orphaned Filename records\n" -" 11) Check for orphaned FileSet records\n" -" 12) Check for orphaned Client records\n" -" 13) Check for orphaned Job records\n" -" 14) Check for all Admin records\n" -" 15) Check for all Restore records\n" -" 16) All (3-15)\n" -" 17) Quit\n" -msgstr "" - -#: src/tools/dbcheck.c:418 -msgid "Select function number: " +"DIR and FD clocks differ by %lld seconds, FD automatically compensating.\n" msgstr "" -#: src/tools/dbcheck.c:425 +#: src/filed/job.c:1758 #, c-format -msgid "Database will be modified.\n" +msgid "Unknown backup level: %s\n" msgstr "" -#: src/tools/dbcheck.c:427 +#: src/filed/job.c:1771 #, c-format -msgid "Database will NOT be modified.\n" +msgid "Bad level command: %s\n" msgstr "" -#: src/tools/dbcheck.c:518 +#: src/filed/job.c:1793 #, c-format -msgid "JobId=%s Name=\"%s\" StartTime=%s\n" +msgid "Bad session command: %s" msgstr "" -#: src/tools/dbcheck.c:525 -#, c-format -msgid "Orphaned JobMediaId=%s JobId=%s Volume=\"%s\"\n" -msgstr "" +#: src/filed/job.c:1922 +#, fuzzy +msgid "Failed connect from Storage daemon. SD bsock=NULL.\n" +msgstr "Verbindung zu Storage daemon fehlgeschlagen.\n" -#: src/tools/dbcheck.c:532 -#, c-format -msgid "Orphaned FileId=%s JobId=%s Volume=\"%s\"\n" +#: src/filed/job.c:1967 +msgid "ACL support not configured for your machine.\n" msgstr "" -#: src/tools/dbcheck.c:539 -#, c-format -msgid "Orphaned FileSetId=%s FileSet=\"%s\" MD5=%s\n" +#: src/filed/job.c:1971 +msgid "XATTR support not configured for your machine.\n" msgstr "" -#: src/tools/dbcheck.c:546 -#, c-format -msgid "Orphaned ClientId=%s Name=\"%s\"\n" +#: src/filed/job.c:1980 +msgid "Cannot contact Storage daemon\n" msgstr "" -#: src/tools/dbcheck.c:599 +#: src/filed/job.c:1999 #, c-format -msgid "Deleting: %s\n" +msgid "Bad response to append open: %s\n" msgstr "" -#: src/tools/dbcheck.c:671 -#, c-format -msgid "Checking for duplicate Filename entries.\n" +#: src/filed/job.c:2004 +msgid "Bad response from stored to open command\n" msgstr "" -#: src/tools/dbcheck.c:682 -#, c-format -msgid "Found %d duplicate Filename records.\n" +#: src/filed/job.c:2069 +msgid "Append Close with SD failed.\n" msgstr "" -#: src/tools/dbcheck.c:683 -msgid "Print the list? (yes/no): " -msgstr "" +#: src/filed/job.c:2073 +#, fuzzy, c-format +msgid "Bad status %d %c returned from Storage Daemon.\n" +msgstr "FD hat keinen Jobstatus zurückgegeben.\n" -#: src/tools/dbcheck.c:706 src/tools/dbcheck.c:771 +#: src/filed/job.c:2095 #, c-format -msgid "Found %d for: %s\n" +msgid "2994 Bad verify command: %s\n" msgstr "" -#: src/tools/dbcheck.c:736 +#: src/filed/job.c:2110 src/filed/job.c:2151 #, c-format -msgid "Checking for duplicate Path entries.\n" +msgid "2994 Bad verify level: %s\n" msgstr "" -#: src/tools/dbcheck.c:747 +#: src/filed/job.c:2222 #, c-format -msgid "Found %d duplicate Path records.\n" -msgstr "" - -#: src/tools/dbcheck.c:748 src/tools/dbcheck.c:810 src/tools/dbcheck.c:856 -#: src/tools/dbcheck.c:924 src/tools/dbcheck.c:982 src/tools/dbcheck.c:1025 -#: src/tools/dbcheck.c:1067 src/tools/dbcheck.c:1109 src/tools/dbcheck.c:1146 -#: src/tools/dbcheck.c:1179 src/tools/dbcheck.c:1213 src/tools/dbcheck.c:1280 -msgid "Print them? (yes/no): " +msgid "Bad replace command. CMD=%s\n" msgstr "" -#: src/tools/dbcheck.c:801 +#: src/filed/job.c:2248 #, c-format -msgid "Checking for orphaned JobMedia entries.\n" +msgid "Bad where regexp. where=%s\n" msgstr "" -#: src/tools/dbcheck.c:809 -#, c-format -msgid "Found %d orphaned JobMedia records.\n" +#: src/filed/job.c:2344 +msgid "Improper calling sequence.\n" msgstr "" -#: src/tools/dbcheck.c:827 +#: src/filed/job.c:2364 #, c-format -msgid "Deleting %d orphaned JobMedia records.\n" +msgid "Bad response to SD read open: %s\n" msgstr "" -#: src/tools/dbcheck.c:844 -#, c-format -msgid "Checking for orphaned File entries. This may take some time!\n" +#: src/filed/job.c:2369 +msgid "Bad response from stored to read open command\n" msgstr "" -#: src/tools/dbcheck.c:855 +#: src/filed/job.c:2431 #, c-format -msgid "Found %d orphaned File records.\n" +msgid "Comm error with SD. bad response to %s. ERR=%s\n" msgstr "" -#: src/tools/dbcheck.c:872 +#: src/filed/job.c:2434 +#, fuzzy, c-format +msgid "Bad response from SD to %s command. Wanted %s, got %s\n" +msgstr "Schlechte Antwort auf %s Kommando: erwartet %s, erhalten %s\n" + +#: src/filed/filed_conf.c:196 src/filed/filed_conf.c:220 +#, fuzzy, c-format +msgid "Expected a Cipher Type keyword, got: %s" +msgstr "Job Type Schlüsselwort erwartet, erhalten: %s" + +#: src/filed/accurate.c:189 #, c-format -msgid "Deleting %d orphaned File records.\n" +msgid "Space saved with Base jobs: %lld MB\n" msgstr "" -#: src/tools/dbcheck.c:891 +#: src/filed/accurate.c:388 +#, fuzzy, c-format +msgid "Cannot verify checksum for %s\n" +msgstr "Kann Schedule resource %s nicht finden\n" + +#: src/filed/accurate.c:417 src/filed/verify.c:235 src/filed/backup.c:505 #, c-format -msgid "Pruning orphaned Path entries isn't possible when using BVFS.\n" +msgid "%s digest initialization failed\n" msgstr "" -#: src/tools/dbcheck.c:900 src/tools/dbcheck.c:958 -msgid "Create temporary index? (yes/no): " +#: src/filed/accurate.c:496 +msgid "2991 Bad accurate command\n" msgstr "" -#: src/tools/dbcheck.c:912 +#: src/filed/fd_plugins.c:545 src/filed/fd_plugins.c:689 #, c-format -msgid "Checking for orphaned Path entries. This may take some time!\n" +msgid "Command plugin \"%s\": no type in startBackupFile packet.\n" msgstr "" -#: src/tools/dbcheck.c:923 +#: src/filed/fd_plugins.c:558 #, c-format -msgid "Found %d orphaned Path records.\n" +msgid "Command plugin \"%s\": no object_name in startBackupFile packet.\n" msgstr "" -#: src/tools/dbcheck.c:936 +#: src/filed/fd_plugins.c:571 src/filed/fd_plugins.c:696 #, c-format -msgid "Deleting %d orphaned Path records.\n" +msgid "Command plugin \"%s\": no fname in startBackupFile packet.\n" msgstr "" -#: src/tools/dbcheck.c:970 +#: src/filed/fd_plugins.c:770 +#, fuzzy +msgid "Plugin save packet not found.\n" +msgstr "Path record: %s nicht gefunden.\n" + +#: src/filed/fd_plugins.c:784 src/filed/fd_plugins.c:800 src/filed/xattr.c:85 +#: src/filed/xattr.c:100 src/filed/xattr.c:108 src/filed/backup.c:1000 +#: src/filed/backup.c:1199 src/filed/backup.c:1236 src/filed/backup.c:1249 +#: src/filed/backup.c:1324 src/filed/backup.c:1423 src/filed/acl.c:96 +#: src/filed/acl.c:111 src/filed/acl.c:119 #, c-format -msgid "Checking for orphaned Filename entries. This may take some time!\n" +msgid "Network send error to SD. ERR=%s\n" msgstr "" -#: src/tools/dbcheck.c:981 +#: src/filed/fd_plugins.c:905 +#, fuzzy, c-format +msgid "Plugin=%s not found.\n" +msgstr "Pool Ressource \"%s\" nicht gefunden.\n" + +#: src/filed/fd_plugins.c:972 #, c-format -msgid "Found %d orphaned Filename records.\n" +msgid "Plugin createFile call failed. Stat=%d file=%s\n" msgstr "" -#: src/tools/dbcheck.c:994 +#: src/filed/fd_plugins.c:977 #, c-format -msgid "Deleting %d orphaned Filename records.\n" +msgid "Plugin createFile call failed. Returned CF_ERROR file=%s\n" msgstr "" -#: src/tools/dbcheck.c:1014 -#, c-format -msgid "Checking for orphaned FileSet entries. This takes some time!\n" +#: src/filed/fd_plugins.c:1863 +msgid "Command plugin: no fname in baculaCheckChanges packet.\n" msgstr "" -#: src/tools/dbcheck.c:1024 +#: src/filed/restore.c:102 #, c-format -msgid "Found %d orphaned FileSet records.\n" +msgid "Size of data or stream of %s not correct. Original %s, restored %s.\n" msgstr "" -#: src/tools/dbcheck.c:1039 +#: src/filed/restore.c:122 #, c-format -msgid "Deleting %d orphaned FileSet records.\n" +msgid "Invalid length of Finder Info (got %d, not 32)\n" msgstr "" -#: src/tools/dbcheck.c:1048 +#: src/filed/restore.c:127 +#, fuzzy, c-format +msgid "Could not set Finder Info on %s\n" +msgstr "Konnte Datenbank \"%s\" nicht öffen.\n" + +#: src/filed/restore.c:406 +#, fuzzy +msgid "LZO init failed\n" +msgstr "TLS Aushandlung gescheitert.\n" + +#: src/filed/restore.c:474 src/filed/verify_vol.c:85 #, c-format -msgid "Checking for orphaned Client entries.\n" +msgid "Record header scan error: %s\n" msgstr "" -#: src/tools/dbcheck.c:1066 +#: src/filed/restore.c:486 src/filed/verify_vol.c:94 #, c-format -msgid "Found %d orphaned Client records.\n" +msgid "Data record error. ERR=%s\n" msgstr "" -#: src/tools/dbcheck.c:1081 +#: src/filed/restore.c:490 src/filed/verify_vol.c:98 #, c-format -msgid "Deleting %d orphaned Client records.\n" +msgid "Actual data size %d not same as header %d\n" msgstr "" -#: src/tools/dbcheck.c:1090 -#, c-format -msgid "Checking for orphaned Job entries.\n" +#: src/filed/restore.c:651 +msgid "Unexpected cryptographic session data stream.\n" msgstr "" -#: src/tools/dbcheck.c:1108 -#, c-format -msgid "Found %d orphaned Job records.\n" +#: src/filed/restore.c:661 +msgid "" +"No private decryption keys have been defined to decrypt encrypted backup " +"data.\n" msgstr "" -#: src/tools/dbcheck.c:1123 -#, c-format -msgid "Deleting %d orphaned Job records.\n" +#: src/filed/restore.c:672 +#, fuzzy +msgid "Could not create digest.\n" +msgstr "Konnte Client Eintrag nicht anlegen. ERR=%s\n" + +#: src/filed/restore.c:690 +msgid "Missing private key required to decrypt encrypted backup data.\n" msgstr "" -#: src/tools/dbcheck.c:1125 -#, c-format -msgid "Deleting JobMedia records of orphaned Job records.\n" +#: src/filed/restore.c:693 +msgid "Decrypt of the session key failed.\n" msgstr "" -#: src/tools/dbcheck.c:1127 -#, c-format -msgid "Deleting Log records of orphaned Job records.\n" +#: src/filed/restore.c:696 +#, fuzzy +msgid "Signer not found. Decryption failed.\n" +msgstr "FileSet MD5 Prüfsumme nicht gefunden.\n" + +#: src/filed/restore.c:699 +msgid "Unsupported digest algorithm. Decrypt failed.\n" msgstr "" -#: src/tools/dbcheck.c:1136 -#, c-format -msgid "Checking for Admin Job entries.\n" +#: src/filed/restore.c:702 +msgid "Unsupported encryption algorithm. Decrypt failed.\n" msgstr "" -#: src/tools/dbcheck.c:1145 +#: src/filed/restore.c:706 #, c-format -msgid "Found %d Admin Job records.\n" +msgid "" +"An error=%d occurred while decoding encrypted session data stream: ERR=%s\n" msgstr "" -#: src/tools/dbcheck.c:1160 +#: src/filed/restore.c:774 src/filed/restore.c:828 #, c-format -msgid "Deleting %d Admin Job records.\n" +msgid "Missing encryption session data stream for %s\n" msgstr "" -#: src/tools/dbcheck.c:1169 +#: src/filed/restore.c:782 src/filed/restore.c:835 #, c-format -msgid "Checking for Restore Job entries.\n" +msgid "Failed to initialize decryption context for %s\n" msgstr "" -#: src/tools/dbcheck.c:1178 -#, c-format -msgid "Found %d Restore Job records.\n" +#: src/filed/restore.c:847 +#, fuzzy, c-format +msgid "Cannot open resource fork for %s.\n" +msgstr "Kann Ausdruck\"%s\"nicht auflösen: ERR=%s\n" + +#: src/filed/restore.c:992 +msgid "Unexpected cryptographic signature data stream.\n" msgstr "" -#: src/tools/dbcheck.c:1193 +#: src/filed/restore.c:1000 #, c-format -msgid "Deleting %d Restore Job records.\n" +msgid "Failed to decode message signature for %s\n" msgstr "" -#: src/tools/dbcheck.c:1203 +#: src/filed/restore.c:1064 #, c-format -msgid "Checking for Filenames with a trailing slash\n" +msgid "Encountered %ld acl errors while doing restore\n" msgstr "" -#: src/tools/dbcheck.c:1212 +#: src/filed/restore.c:1068 #, c-format -msgid "Found %d bad Filename records.\n" +msgid "Encountered %ld xattr errors while doing restore\n" msgstr "" -#: src/tools/dbcheck.c:1230 src/tools/dbcheck.c:1296 +#: src/filed/restore.c:1072 #, c-format -msgid "Reparing %d bad Filename records.\n" +msgid "" +"%d non-supported data streams and %d non-supported attrib streams ignored.\n" msgstr "" -#: src/tools/dbcheck.c:1270 +#: src/filed/restore.c:1076 #, c-format -msgid "Checking for Paths without a trailing slash\n" +msgid "%d non-supported resource fork streams ignored.\n" msgstr "" -#: src/tools/dbcheck.c:1279 +#: src/filed/restore.c:1079 #, c-format -msgid "Found %d bad Path records.\n" +msgid "%d non-supported Finder Info streams ignored.\n" msgstr "" -#: src/tools/dbcheck.c:1442 +#: src/filed/restore.c:1082 #, c-format -msgid "" -"Ok. Index over the %s column already exists and dbcheck will work faster.\n" +msgid "%d non-supported acl streams ignored.\n" msgstr "" -#: src/tools/dbcheck.c:1445 +#: src/filed/restore.c:1085 #, c-format -msgid "" -"Note. Index over the %s column not found, that can greatly slow down " -"dbcheck.\n" +msgid "%d non-supported crypto streams ignored.\n" msgstr "" -#: src/tools/dbcheck.c:1460 +#: src/filed/restore.c:1088 #, c-format -msgid "Create temporary index... This may take some time!\n" +msgid "%d non-supported xattr streams ignored.\n" msgstr "" -#: src/tools/dbcheck.c:1468 -#, c-format -msgid "Temporary index created.\n" +#: src/filed/restore.c:1168 +msgid "Zlib errno" msgstr "" -#: src/tools/dbcheck.c:1483 -#, c-format -msgid "Drop temporary index.\n" +#: src/filed/restore.c:1170 +msgid "Zlib stream error" msgstr "" -#: src/tools/dbcheck.c:1493 -#, c-format -msgid "Temporary index %s deleted.\n" +#: src/filed/restore.c:1172 +msgid "Zlib data error" msgstr "" -#: src/filed/verify.c:57 -#, c-format -msgid "Cannot malloc %d network read buffer\n" +#: src/filed/restore.c:1174 +msgid "Zlib memory error" msgstr "" -#: src/filed/verify.c:127 -#, c-format -msgid " Could not access %s: ERR=%s\n" +#: src/filed/restore.c:1176 +msgid "Zlib buffer error" msgstr "" -#: src/filed/verify.c:134 -#, c-format -msgid " Could not follow link %s: ERR=%s\n" +#: src/filed/restore.c:1178 +msgid "Zlib version error" msgstr "" -#: src/filed/verify.c:141 +#: src/filed/restore.c:1218 #, c-format -msgid " Could not stat %s: ERR=%s\n" +msgid "Missing cryptographic signature for %s\n" msgstr "" -#: src/filed/verify.c:147 src/filed/backup.c:450 +#: src/filed/restore.c:1251 src/filed/restore.c:1280 +#, fuzzy, c-format +msgid "Signature validation failed for file %s: ERR=%s\n" +msgstr "Konnte bootstrap Datei %s nicht erzeugen. ERR=%s\n" + +#: src/filed/restore.c:1268 +#, fuzzy, c-format +msgid "Digest one file failed for file: %s\n" +msgstr "Mehr als ein Dateiname! %s für Datei: %s\n" + +#: src/filed/restore.c:1307 #, c-format -msgid " Unchanged file skipped: %s\n" +msgid "Signature validation failed for %s: %s\n" msgstr "" -#: src/filed/verify.c:150 +#: src/filed/restore.c:1404 +#, fuzzy, c-format +msgid "LZO uncompression error on file %s. ERR=%d\n" +msgstr "Catalog Fehler beim Aktualisieren von volume \"%s\". ERR=%s" + +#: src/filed/restore.c:1441 #, c-format -msgid " Archive file skipped: %s\n" +msgid "Uncompression error on file %s. ERR=%s\n" msgstr "" -#: src/filed/verify.c:153 +#: src/filed/restore.c:1476 #, c-format -msgid " Recursion turned off. Directory skipped: %s\n" +msgid "Write error in Win32 Block Decomposition on %s: %s\n" msgstr "" -#: src/filed/verify.c:157 +#: src/filed/restore.c:1501 #, c-format -msgid " File system change prohibited. Directory skipped: %s\n" +msgid "Wrong write size error at %lld block=%d wanted=%d wrote=%d\n" msgstr "" -#: src/filed/verify.c:165 +#: src/filed/restore.c:1505 #, c-format -msgid " Could not open directory %s: ERR=%s\n" +msgid "" +"Write write error at %lld block=%d write_len=%d lerror=%d on %s: ERR=%s\n" msgstr "" -#: src/filed/verify.c:170 -#, c-format -msgid " Unknown file type %d: %s\n" +#: src/filed/restore.c:1565 +msgid "Decryption error\n" msgstr "" -#: src/filed/verify.c:214 src/filed/verify_vol.c:206 -#, c-format -msgid "Network error in send to Director: ERR=%s\n" +#: src/filed/restore.c:1658 +msgid "Logic error: output file should be open\n" msgstr "" -#: src/filed/verify.c:247 src/filed/accurate.c:429 src/filed/backup.c:506 -#, c-format -msgid "%s digest initialization failed\n" +#: src/filed/restore.c:1696 +msgid "Logic error: output file should not be open\n" msgstr "" -#: src/filed/verify.c:309 +#: src/filed/restore.c:1730 #, c-format -msgid " Cannot open %s: ERR=%s.\n" +msgid "Decryption error. buf_len=%d decrypt_len=%d on file %s\n" msgstr "" -#: src/filed/verify.c:323 -#, c-format -msgid " Cannot open resource fork for %s: ERR=%s.\n" +#: src/filed/restore.c:1851 +msgid "Open File Manager paused\n" msgstr "" -#: src/filed/verify.c:386 -#, c-format -msgid "Error reading file %s: ERR=%s\n" +#: src/filed/restore.c:1855 +msgid "FAILED to pause Open File Manager\n" msgstr "" -#: src/filed/accurate.c:201 +#: src/filed/restore.c:1863 #, c-format -msgid "Space saved with Base jobs: %lld MB\n" +msgid "Running as '%s'. Privmask=%#08x\n" msgstr "" -#: src/filed/accurate.c:400 -#, fuzzy, c-format -msgid "Cannot verify checksum for %s\n" -msgstr "Kann Schedule resource %s nicht finden\n" - -#: src/filed/accurate.c:508 -msgid "2991 Bad accurate command\n" +#: src/filed/restore.c:1865 +msgid "Failed to retrieve current UserName\n" msgstr "" -#: src/filed/status.c:89 -#, c-format -msgid "Daemon started %s. Jobs: run=%d running=%d.\n" +#: src/filed/verify_vol.c:51 +msgid "Storage command not issued before Verify.\n" msgstr "" -#: src/filed/status.c:149 +#: src/filed/verify_vol.c:131 #, c-format -msgid " Sizeof: boffset_t=%d size_t=%d debug=%d trace=%d " +msgid "Error scanning record header: %s\n" msgstr "" -#: src/filed/status.c:194 +#: src/filed/verify_vol.c:194 src/filed/verify.c:202 #, c-format -msgid "Director connected at: %s\n" +msgid "Network error in send to Director: ERR=%s\n" msgstr "" -#: src/filed/status.c:196 +#: src/filed/authenticate.c:63 #, c-format -msgid "JobId %d Job %s is running.\n" +msgid "I only authenticate directors, not %d\n" msgstr "" -#: src/filed/status.c:199 -#, fuzzy, c-format -msgid " %s%s %s Job started: %s\n" -msgstr "Clone JobId %d gestartet.\n" - -#: src/filed/status.c:212 +#: src/filed/authenticate.c:88 #, fuzzy, c-format -msgid " Files=%s Bytes=%s Bytes/sec=%s Errors=%d\n" -msgstr " MigTime=%s MigHiBytes=%s MigLoBytes=%s\n" +msgid "Connection from unknown Director %s at %s rejected.\n" +msgstr "unbekannt" -#: src/filed/status.c:218 -#, fuzzy, c-format -msgid " Files Examined=%s\n" -msgstr "FileSet: name=%s\n" +#: src/filed/authenticate.c:132 +#, c-format +msgid "Incorrect password given by Director at %s.\n" +msgstr "" -#: src/filed/status.c:223 +#: src/filed/verify.c:45 #, c-format -msgid " Processing file: %s\n" +msgid "Cannot malloc %d network read buffer\n" msgstr "" -#: src/filed/status.c:234 -msgid " SDSocket closed.\n" +#: src/filed/verify.c:115 +#, c-format +msgid " Could not access %s: ERR=%s\n" msgstr "" -#: src/filed/status.c:244 src/filed/status.c:335 src/filed/status.c:409 -msgid "====\n" +#: src/filed/verify.c:122 +#, c-format +msgid " Could not follow link %s: ERR=%s\n" msgstr "" -#: src/filed/status.c:306 -msgid " SDSocket=closed\n" +#: src/filed/verify.c:129 +#, c-format +msgid " Could not stat %s: ERR=%s\n" msgstr "" -#: src/filed/status.c:463 src/filed/status.c:496 +#: src/filed/verify.c:135 src/filed/backup.c:449 #, c-format -msgid "Bad .status command: %s\n" +msgid " Unchanged file skipped: %s\n" msgstr "" -#: src/filed/status.c:464 -msgid "2900 Bad .status command, missing argument.\n" +#: src/filed/verify.c:138 +#, c-format +msgid " Archive file skipped: %s\n" msgstr "" -#: src/filed/status.c:497 -msgid "2900 Bad .status command, wrong argument.\n" +#: src/filed/verify.c:141 +#, c-format +msgid " Recursion turned off. Directory skipped: %s\n" msgstr "" -#: src/filed/status.c:565 -msgid "Bacula Client: Idle" +#: src/filed/verify.c:145 +#, c-format +msgid " File system change prohibited. Directory skipped: %s\n" msgstr "" -#: src/filed/status.c:576 -msgid "Bacula Client: Running" +#: src/filed/verify.c:153 +#, c-format +msgid " Could not open directory %s: ERR=%s\n" msgstr "" -#: src/filed/status.c:590 -msgid "Bacula Client: Last Job Canceled" +#: src/filed/verify.c:158 +#, c-format +msgid " Unknown file type %d: %s\n" msgstr "" -#: src/filed/status.c:594 -msgid "Bacula Client: Last Job Failed" +#: src/filed/verify.c:297 +#, c-format +msgid " Cannot open %s: ERR=%s.\n" msgstr "" -#: src/filed/status.c:598 -msgid "Bacula Client: Last Job had Warnings" +#: src/filed/verify.c:311 +#, c-format +msgid " Cannot open resource fork for %s: ERR=%s.\n" msgstr "" -#: src/filed/xattr.c:97 src/filed/xattr.c:112 src/filed/xattr.c:120 -#: src/filed/fd_plugins.c:789 src/filed/fd_plugins.c:805 src/filed/acl.c:108 -#: src/filed/acl.c:123 src/filed/acl.c:131 src/filed/backup.c:999 -#: src/filed/backup.c:1199 src/filed/backup.c:1236 src/filed/backup.c:1249 -#: src/filed/backup.c:1325 src/filed/backup.c:1424 +#: src/filed/verify.c:374 #, c-format -msgid "Network send error to SD. ERR=%s\n" +msgid "Error reading file %s: ERR=%s\n" msgstr "" -#: src/filed/xattr.c:245 +#: src/filed/xattr.c:233 #, c-format msgid "Illegal xattr stream, no XATTR_MAGIC on file \"%s\"\n" msgstr "" -#: src/filed/xattr.c:259 +#: src/filed/xattr.c:247 #, c-format msgid "Illegal xattr stream, xattr name length <= 0 on file \"%s\"\n" msgstr "" -#: src/filed/xattr.c:381 src/filed/xattr.c:417 +#: src/filed/xattr.c:369 src/filed/xattr.c:405 #, fuzzy, c-format msgid "llistea error on file \"%s\": ERR=%s\n" msgstr "Socket Fehler auf %s Kommando: ERR=%s\n" -#: src/filed/xattr.c:467 src/filed/xattr.c:520 +#: src/filed/xattr.c:455 src/filed/xattr.c:509 #, fuzzy, c-format msgid "lgetea error on file \"%s\": ERR=%s\n" msgstr "Catalog Fehler beim Aktualisieren von volume \"%s\". ERR=%s" -#: src/filed/xattr.c:556 src/filed/xattr.c:877 src/filed/xattr.c:1352 -#: src/filed/xattr.c:1820 src/filed/xattr.c:2176 src/filed/xattr.c:2968 +#: src/filed/xattr.c:545 src/filed/xattr.c:867 src/filed/xattr.c:1342 +#: src/filed/xattr.c:1810 src/filed/xattr.c:2167 src/filed/xattr.c:2959 #, c-format msgid "Xattr stream on file \"%s\" exceeds maximum size of %d bytes\n" msgstr "" -#: src/filed/xattr.c:576 src/filed/xattr.c:903 src/filed/xattr.c:1372 -#: src/filed/xattr.c:1850 src/filed/xattr.c:2193 +#: src/filed/xattr.c:565 src/filed/xattr.c:893 src/filed/xattr.c:1362 +#: src/filed/xattr.c:1840 src/filed/xattr.c:2184 #, c-format msgid "Failed to serialize extended attributes on file \"%s\"\n" msgstr "" -#: src/filed/xattr.c:643 +#: src/filed/xattr.c:632 #, fuzzy, c-format msgid "lsetea error on file \"%s\": ERR=%s\n" msgstr "Socket Fehler auf %s Kommando: ERR=%s\n" -#: src/filed/xattr.c:731 src/filed/xattr.c:769 src/filed/xattr.c:832 -#: src/filed/xattr.c:844 +#: src/filed/xattr.c:720 src/filed/xattr.c:758 src/filed/xattr.c:822 +#: src/filed/xattr.c:834 #, fuzzy, c-format msgid "attr_list error on file \"%s\": ERR=%s\n" msgstr "Catalog Fehler beim Aktualisieren von volume \"%s\". ERR=%s" -#: src/filed/xattr.c:968 +#: src/filed/xattr.c:958 #, fuzzy, c-format msgid "Received illegal xattr named %s on file \"%s\"\n" msgstr "Kann Catalog DB Steuerdatei nicht öffnen %s: ERR=%s\n" -#: src/filed/xattr.c:1001 src/filed/xattr.c:1011 +#: src/filed/xattr.c:991 src/filed/xattr.c:1001 #, fuzzy, c-format msgid "attr_set error on file \"%s\": ERR=%s\n" msgstr "Socket Fehler auf %s Kommando: ERR=%s\n" -#: src/filed/xattr.c:1161 src/filed/xattr.c:1196 +#: src/filed/xattr.c:1151 src/filed/xattr.c:1186 #, fuzzy, c-format msgid "llistxattr error on file \"%s\": ERR=%s\n" msgstr "Socket Fehler auf %s Kommando: ERR=%s\n" -#: src/filed/xattr.c:1264 src/filed/xattr.c:1316 +#: src/filed/xattr.c:1254 src/filed/xattr.c:1306 #, fuzzy, c-format msgid "lgetxattr error on file \"%s\": ERR=%s\n" msgstr "Catalog Fehler beim Aktualisieren von volume \"%s\". ERR=%s" -#: src/filed/xattr.c:1435 +#: src/filed/xattr.c:1425 #, fuzzy, c-format msgid "lsetxattr error on file \"%s\": ERR=%s\n" msgstr "Socket Fehler auf %s Kommando: ERR=%s\n" -#: src/filed/xattr.c:1593 src/filed/xattr.c:1628 +#: src/filed/xattr.c:1583 src/filed/xattr.c:1618 #, fuzzy, c-format msgid "extattr_list_link error on file \"%s\": ERR=%s\n" msgstr "Catalog Fehler beim Aktualisieren von volume \"%s\". ERR=%s" -#: src/filed/xattr.c:1648 +#: src/filed/xattr.c:1638 #, fuzzy, c-format msgid "Failed to convert %d into namespace on file \"%s\"\n" msgstr "Konnte bootstrap Datei %s nicht erzeugen. ERR=%s\n" -#: src/filed/xattr.c:1728 src/filed/xattr.c:1783 +#: src/filed/xattr.c:1718 src/filed/xattr.c:1773 #, fuzzy, c-format msgid "extattr_get_link error on file \"%s\": ERR=%s\n" msgstr "Catalog Fehler beim Aktualisieren von volume \"%s\". ERR=%s" -#: src/filed/xattr.c:1907 +#: src/filed/xattr.c:1897 #, fuzzy, c-format msgid "Failed to split %s into namespace and name part on file \"%s\"\n" msgstr "SD.\n" msgstr "" -#: src/filed/fd_plugins.c:563 +#: src/filed/backup.c:182 #, c-format -msgid "Command plugin \"%s\": no object_name in startBackupFile packet.\n" +msgid "Encountered %ld acl errors while doing backup\n" msgstr "" -#: src/filed/fd_plugins.c:576 src/filed/fd_plugins.c:701 +#: src/filed/backup.c:186 #, c-format -msgid "Command plugin \"%s\": no fname in startBackupFile packet.\n" +msgid "Encountered %ld xattr errors while doing backup\n" msgstr "" -#: src/filed/fd_plugins.c:775 -#, fuzzy -msgid "Plugin save packet not found.\n" -msgstr "Path record: %s nicht gefunden.\n" +#: src/filed/backup.c:253 +msgid "Unsupported cipher on this system.\n" +msgstr "" -#: src/filed/fd_plugins.c:910 -#, fuzzy, c-format -msgid "Plugin=%s not found.\n" -msgstr "Pool Ressource \"%s\" nicht gefunden.\n" +#: src/filed/backup.c:259 src/filed/backup.c:268 +msgid "An error occurred while encrypting the stream.\n" +msgstr "" -#: src/filed/fd_plugins.c:977 +#: src/filed/backup.c:386 #, c-format -msgid "Plugin createFile call failed. Stat=%d file=%s\n" +msgid " Recursion turned off. Will not descend from %s into %s\n" msgstr "" -#: src/filed/fd_plugins.c:982 +#: src/filed/backup.c:393 #, c-format -msgid "Plugin createFile call failed. Returned CF_ERROR file=%s\n" +msgid " %s is a different filesystem. Will not descend from %s into it.\n" msgstr "" -#: src/filed/fd_plugins.c:1859 -msgid "Command plugin: no fname in baculaCheckChanges packet.\n" +#: src/filed/backup.c:399 +#, c-format +msgid " Disallowed filesystem. Will not descend from %s into %s\n" msgstr "" -#: src/filed/filed.c:76 -#, fuzzy, c-format -msgid "" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: bacula-fd [-f -s] [-c config_file] [-d debug_level]\n" -" -c use as configuration file\n" -" -d set debug level to \n" -" -dt print a timestamp in debug output\n" -" -f run in foreground (for debugging)\n" -" -g groupid\n" -" -k keep readall capabilities\n" -" -m print kaboom output (for debugging)\n" -" -s no signals (for debugging)\n" -" -t test configuration file and exit\n" -" -u userid\n" -" -v verbose user messages\n" -" -? print this message.\n" -"\n" +#: src/filed/backup.c:404 +#, c-format +msgid " Disallowed drive type. Will not descend into %s\n" msgstr "" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: bacula-fd [-f -s] [-c config_datei] [-d debug_level]\n" -" -c benutze als Konfigurationsdatei\n" -" -dnn setze debug level auf nn\n" -" -f starte in Vordergrund (für debugging)\n" -" -g groupid\n" -" -s no signals (für debugging)\n" -" -t Konfigurationsdatei testen und beenden\n" -" -u userid\n" -" -v Ausführliche Benutzermeldungen\n" -" -? diese Meldung ausgeben.\n" -"\n" -#: src/filed/filed.c:199 -msgid "-k option has no meaning without -u option.\n" +#: src/filed/backup.c:415 +#, c-format +msgid " Socket file skipped: %s\n" msgstr "" -#: src/filed/filed.c:337 +#: src/filed/backup.c:428 +#, fuzzy, c-format +msgid " Could not access \"%s\": ERR=%s\n" +msgstr "Konnte counter %s: nicht aktualisieren: ERR=%s\n" + +#: src/filed/backup.c:435 +#, fuzzy, c-format +msgid " Could not follow link \"%s\": ERR=%s\n" +msgstr "Konnte regex pattern \"%s\" nicht kompilieren ERR=%s\n" + +#: src/filed/backup.c:442 +#, fuzzy, c-format +msgid " Could not stat \"%s\": ERR=%s\n" +msgstr "Kann bootstrap Datei nicht öffnen: %s: ERR=%s\n" + +#: src/filed/backup.c:452 #, c-format -msgid "" -"No File daemon resource defined in %s\n" -"Without that I don't know who I am :-(\n" +msgid " Archive file not saved: %s\n" msgstr "" -#: src/filed/filed.c:342 +#: src/filed/backup.c:456 +#, fuzzy, c-format +msgid " Could not open directory \"%s\": ERR=%s\n" +msgstr "Konnte regex pattern \"%s\" nicht kompilieren ERR=%s\n" + +#: src/filed/backup.c:465 #, c-format -msgid "Only one Client resource permitted in %s\n" +msgid " Unknown file type %d; not saved: %s\n" msgstr "" -#: src/filed/filed.c:366 +#: src/filed/backup.c:521 #, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"File daemon in %s.\n" +msgid "%s signature digest initialization failed\n" msgstr "" -#: src/filed/filed.c:390 -msgid "PKI encryption/signing enabled but not compiled into Bacula.\n" +#: src/filed/backup.c:629 +#, fuzzy, c-format +msgid " Cannot open \"%s\": ERR=%s.\n" +msgstr "Kann Ausdruck\"%s\"nicht auflösen: ERR=%s\n" + +#: src/filed/backup.c:666 +#, fuzzy, c-format +msgid " Cannot open resource fork for \"%s\": ERR=%s.\n" +msgstr "Kann Ausdruck\"%s\"nicht auflösen: ERR=%s\n" + +#: src/filed/backup.c:762 +msgid "Failed to allocate memory for crypto signature.\n" +msgstr "" + +#: src/filed/backup.c:767 +#, fuzzy +msgid "An error occurred while adding signer the stream.\n" +msgstr "Fehler beim schreiben der bsr Datei.\n" + +#: src/filed/backup.c:773 src/filed/backup.c:788 +msgid "An error occurred while signing the stream.\n" +msgstr "" + +#: src/filed/backup.c:812 +msgid "An error occurred finalizing signing the stream.\n" msgstr "" -#: src/filed/filed.c:401 +#: src/filed/backup.c:931 #, c-format -msgid "" -"\"PKI Key Pair\" must be defined for File daemon \"%s\" in %s if either " -"\"PKI Sign\" or \"PKI Encrypt\" are enabled.\n" +msgid "Compression deflateParams error: %d\n" msgstr "" -#: src/filed/filed.c:413 src/filed/filed.c:444 src/filed/filed.c:485 -msgid "Failed to allocate a new keypair object.\n" +#: src/filed/backup.c:968 +msgid "Encrypting sparse or offset data not supported.\n" msgstr "" -#: src/filed/filed.c:417 +#: src/filed/backup.c:975 +msgid "Failed to initialize encryption context.\n" +msgstr "" + +#: src/filed/backup.c:1086 #, c-format -msgid "Failed to load public certificate for File daemon \"%s\" in %s.\n" +msgid "Compression deflate error: %d\n" msgstr "" -#: src/filed/filed.c:423 +#: src/filed/backup.c:1093 #, c-format -msgid "Failed to load private key for File daemon \"%s\" in %s.\n" +msgid "Compression deflateReset error: %d\n" msgstr "" -#: src/filed/filed.c:453 +#: src/filed/backup.c:1126 #, c-format -msgid "Failed to load private key from file %s for File daemon \"%s\" in %s.\n" +msgid "Compression LZO error: %d\n" +msgstr "" + +#: src/filed/backup.c:1171 src/filed/backup.c:1187 +msgid "Encryption error\n" +msgstr "" + +#: src/filed/backup.c:1213 +#, c-format +msgid "Read error on file %s. ERR=%s\n" msgstr "" -#: src/filed/filed.c:460 -#, c-format -msgid "" -"Failed to load trusted signer certificate from file %s for File daemon \"%s" -"\" in %s.\n" +#: src/filed/backup.c:1216 +#, fuzzy, c-format +msgid "Too many errors. JobErrors=%d.\n" +msgstr "zu viele items in Job resource\n" + +#: src/filed/backup.c:1226 +msgid "Encryption padding error\n" msgstr "" -#: src/filed/filed.c:491 -#, c-format -msgid "" -"Failed to load master key certificate from file %s for File daemon \"%s\" in " -"%s.\n" +#: src/filed/backup.c:1290 +msgid "Invalid file flags, no supported data stream type.\n" msgstr "" -#: src/filed/filed.c:507 +#: src/filed/backup.c:1548 #, c-format -msgid "No Director resource defined in %s\n" +msgid "VSS Writer (BackupComplete): %s\n" msgstr "" -#: src/filed/acl.c:229 src/filed/acl.c:254 +#: src/filed/acl.c:217 src/filed/acl.c:242 #, fuzzy, c-format msgid "aclx_get error on file \"%s\": ERR=%s\n" msgstr "Socket Fehler auf %s Kommando: ERR=%s\n" -#: src/filed/acl.c:280 +#: src/filed/acl.c:268 #, fuzzy, c-format msgid "Unknown acl type encountered on file \"%s\": %ld\n" msgstr "Kann Catalog DB Steuerdatei nicht öffnen %s: ERR=%s\n" -#: src/filed/acl.c:304 src/filed/acl.c:313 +#: src/filed/acl.c:292 src/filed/acl.c:301 #, fuzzy, c-format msgid "Failed to convert acl into text on file \"%s\"\n" msgstr "Konnte bootstrap Datei %s nicht erzeugen. ERR=%s\n" -#: src/filed/acl.c:386 +#: src/filed/acl.c:374 #, c-format msgid "" "Trying to restore POSIX acl on file \"%s\" on filesystem without AIXC acl " "support\n" msgstr "" -#: src/filed/acl.c:394 +#: src/filed/acl.c:382 #, c-format msgid "" "Trying to restore NFSv4 acl on file \"%s\" on filesystem without NFS4 acl " "support\n" msgstr "" -#: src/filed/acl.c:442 src/filed/acl.c:452 +#: src/filed/acl.c:430 src/filed/acl.c:440 #, fuzzy, c-format msgid "aclx_scanStr error on file \"%s\": ERR=%s\n" msgstr "Socket Fehler auf %s Kommando: ERR=%s\n" -#: src/filed/acl.c:478 +#: src/filed/acl.c:466 #, fuzzy, c-format msgid "aclx_put error on file \"%s\": ERR=%s\n" msgstr "Socket Fehler auf %s Kommando: ERR=%s\n" -#: src/filed/acl.c:823 +#: src/filed/acl.c:811 #, c-format msgid "acl_to_text error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/acl.c:853 +#: src/filed/acl.c:841 #, fuzzy, c-format msgid "acl_get_file error on file \"%s\": ERR=%s\n" msgstr "Socket Fehler auf %s Kommando: ERR=%s\n" -#: src/filed/acl.c:906 +#: src/filed/acl.c:894 #, fuzzy, c-format msgid "" "acl_delete_def_file error on file \"%s\": filesystem doesn't support ACLs\n" msgstr "Socket Fehler auf %s Kommando: ERR=%s\n" -#: src/filed/acl.c:912 +#: src/filed/acl.c:900 #, c-format msgid "acl_delete_def_file error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/acl.c:923 +#: src/filed/acl.c:911 #, c-format msgid "acl_from_text error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/acl.c:939 +#: src/filed/acl.c:927 #, fuzzy, c-format msgid "acl_valid error on file \"%s\": ERR=%s\n" msgstr "Socket Fehler auf %s Kommando: ERR=%s\n" -#: src/filed/acl.c:971 +#: src/filed/acl.c:959 #, fuzzy, c-format msgid "acl_set_file error on file \"%s\": filesystem doesn't support ACLs\n" msgstr "Socket Fehler auf %s Kommando: ERR=%s\n" -#: src/filed/acl.c:980 +#: src/filed/acl.c:968 #, c-format msgid "acl_set_file error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/acl.c:1087 src/filed/acl.c:1116 src/filed/acl.c:1230 -#: src/filed/acl.c:1738 src/filed/acl.c:1845 +#: src/filed/acl.c:1075 src/filed/acl.c:1104 src/filed/acl.c:1218 +#: src/filed/acl.c:1726 src/filed/acl.c:1833 #, fuzzy, c-format msgid "pathconf error on file \"%s\": ERR=%s\n" msgstr "Catalog Fehler beim Aktualisieren von volume \"%s\". ERR=%s" -#: src/filed/acl.c:1246 +#: src/filed/acl.c:1234 #, c-format msgid "" "Trying to restore acl on file \"%s\" on filesystem without %s acl support\n" msgstr "" -#: src/filed/acl.c:1531 +#: src/filed/acl.c:1519 #, fuzzy, c-format msgid "getacl error on file \"%s\": ERR=%s\n" msgstr "Catalog Fehler beim Aktualisieren von volume \"%s\". ERR=%s" -#: src/filed/acl.c:1566 +#: src/filed/acl.c:1554 #, c-format msgid "acltostr error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/acl.c:1588 src/filed/acl.c:1598 +#: src/filed/acl.c:1576 src/filed/acl.c:1586 #, c-format msgid "strtoacl error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/acl.c:1627 +#: src/filed/acl.c:1615 #, fuzzy, c-format msgid "setacl error on file \"%s\": filesystem doesn't support ACLs\n" msgstr "Catalog Fehler beim Aktualisieren von volume \"%s\". ERR=%s" -#: src/filed/acl.c:1635 +#: src/filed/acl.c:1623 #, c-format msgid "setacl error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/acl.c:1760 +#: src/filed/acl.c:1748 #, fuzzy, c-format msgid "acl_get error on file \"%s\": ERR=%s\n" msgstr "Socket Fehler auf %s Kommando: ERR=%s\n" -#: src/filed/acl.c:1834 +#: src/filed/acl.c:1822 #, c-format msgid "" "Trying to restore acl on file \"%s\" on filesystem without acl support\n" msgstr "" -#: src/filed/acl.c:1863 +#: src/filed/acl.c:1851 #, fuzzy, c-format msgid "" "Trying to restore POSIX acl on file \"%s\" on filesystem without aclent acl " "support\n" msgstr "Catalog Fehler beim Aktualisieren von volume \"%s\". ERR=%s" -#: src/filed/acl.c:1874 +#: src/filed/acl.c:1862 #, c-format msgid "" "Trying to restore NFSv4 acl on file \"%s\" on filesystem without ace acl " "support\n" msgstr "" -#: src/filed/acl.c:1890 +#: src/filed/acl.c:1878 #, fuzzy, c-format msgid "acl_fromtext error on file \"%s\": ERR=%s\n" msgstr "Socket Fehler auf %s Kommando: ERR=%s\n" -#: src/filed/acl.c:1904 src/filed/acl.c:1912 +#: src/filed/acl.c:1892 src/filed/acl.c:1900 #, c-format msgid "wrong encoding of acl type in acl stream on file \"%s\"\n" msgstr "" -#: src/filed/acl.c:1937 +#: src/filed/acl.c:1925 #, fuzzy, c-format msgid "acl_set error on file \"%s\": ERR=%s\n" msgstr "Socket Fehler auf %s Kommando: ERR=%s\n" -#: src/filed/acl.c:2023 +#: src/filed/acl.c:2011 #, c-format msgid "acltotext error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/acl.c:2046 +#: src/filed/acl.c:2034 #, c-format msgid "aclfromtext error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/acl.c:2066 +#: src/filed/acl.c:2054 #, c-format msgid "acl(SETACL) error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/acl.c:2132 +#: src/filed/acl.c:2120 #, fuzzy, c-format msgid "pioctl VIOCGETAL error on file \"%s\": ERR=%s\n" msgstr "Catalog Fehler beim Aktualisieren von volume \"%s\". ERR=%s" -#: src/filed/acl.c:2160 +#: src/filed/acl.c:2148 #, fuzzy, c-format msgid "pioctl VIOCSETAL error on file \"%s\": ERR=%s\n" msgstr "Catalog Fehler beim Aktualisieren von volume \"%s\". ERR=%s" -#: src/filed/acl.c:2363 +#: src/filed/acl.c:2351 #, c-format msgid "Can't restore ACLs of %s - incompatible acl stream encountered - %d\n" msgstr "" -#: src/filed/verify_vol.c:63 -msgid "Storage command not issued before Verify.\n" +#: src/filed/filed.c:52 +#, fuzzy, c-format +msgid "" +"\n" +"%sVersion: %s (%s)\n" +"\n" +"Usage: bacula-fd [-f -s] [-c config_file] [-d debug_level]\n" +" -c use as configuration file\n" +" -d [,] set debug level to , debug tags to \n" +" -dt print a timestamp in debug output\n" +" -f run in foreground (for debugging)\n" +" -g groupid\n" +" -k keep readall capabilities\n" +" -m print kaboom output (for debugging)\n" +" -s no signals (for debugging)\n" +" -t test configuration file and exit\n" +" -T set trace on\n" +" -u userid\n" +" -v verbose user messages\n" +" -? print this message.\n" +"\n" msgstr "" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: bacula-fd [-f -s] [-c config_datei] [-d debug_level]\n" +" -c benutze als Konfigurationsdatei\n" +" -dnn setze debug level auf nn\n" +" -f starte in Vordergrund (für debugging)\n" +" -g groupid\n" +" -s no signals (für debugging)\n" +" -t Konfigurationsdatei testen und beenden\n" +" -u userid\n" +" -v Ausführliche Benutzermeldungen\n" +" -? diese Meldung ausgeben.\n" +"\n" -#: src/filed/verify_vol.c:97 src/filed/restore.c:486 -#, c-format -msgid "Record header scan error: %s\n" +#: src/filed/filed.c:185 +msgid "-k option has no meaning without -u option.\n" msgstr "" -#: src/filed/verify_vol.c:106 src/filed/restore.c:498 +#: src/filed/filed.c:315 #, c-format -msgid "Data record error. ERR=%s\n" +msgid "" +"No File daemon resource defined in %s\n" +"Without that I don't know who I am :-(\n" msgstr "" -#: src/filed/verify_vol.c:110 src/filed/restore.c:502 +#: src/filed/filed.c:320 #, c-format -msgid "Actual data size %d not same as header %d\n" +msgid "Only one Client resource permitted in %s\n" msgstr "" -#: src/filed/verify_vol.c:143 +#: src/filed/filed.c:348 src/filed/filed.c:547 +#, fuzzy, c-format +msgid "Disable Command \"%s\" not found.\n" +msgstr "FileSet Eintrag \"%s\" nicht gefunden\n" + +#: src/filed/filed.c:375 #, c-format -msgid "Error scanning record header: %s\n" +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"File daemon in %s.\n" msgstr "" -#: src/filed/backup.c:102 -msgid "Cannot set buffer size FD->SD.\n" +#: src/filed/filed.c:399 +msgid "PKI encryption/signing enabled but not compiled into Bacula.\n" msgstr "" -#: src/filed/backup.c:194 +#: src/filed/filed.c:410 #, c-format -msgid "Encountered %ld acl errors while doing backup\n" +msgid "" +"\"PKI Key Pair\" must be defined for File daemon \"%s\" in %s if either " +"\"PKI Sign\" or \"PKI Encrypt\" are enabled.\n" msgstr "" -#: src/filed/backup.c:198 -#, c-format -msgid "Encountered %ld xattr errors while doing backup\n" +#: src/filed/filed.c:422 src/filed/filed.c:453 src/filed/filed.c:503 +msgid "Failed to allocate a new keypair object.\n" msgstr "" -#: src/filed/backup.c:267 src/filed/backup.c:276 -msgid "An error occurred while encrypting the stream.\n" +#: src/filed/filed.c:426 +#, c-format +msgid "Failed to load public certificate for File daemon \"%s\" in %s.\n" msgstr "" -#: src/filed/backup.c:387 +#: src/filed/filed.c:432 #, c-format -msgid " Recursion turned off. Will not descend from %s into %s\n" +msgid "Failed to load private key for File daemon \"%s\" in %s.\n" msgstr "" -#: src/filed/backup.c:394 +#: src/filed/filed.c:462 #, c-format -msgid " %s is a different filesystem. Will not descend from %s into it.\n" +msgid "Failed to load private key from file %s for File daemon \"%s\" in %s.\n" msgstr "" -#: src/filed/backup.c:400 +#: src/filed/filed.c:469 #, c-format -msgid " Disallowed filesystem. Will not descend from %s into %s\n" +msgid "" +"Failed to load trusted signer certificate from file %s for File daemon \"%s" +"\" in %s.\n" msgstr "" -#: src/filed/backup.c:405 +#: src/filed/filed.c:509 #, c-format -msgid " Disallowed drive type. Will not descend into %s\n" +msgid "" +"Failed to load master key certificate from file %s for File daemon \"%s\" in " +"%s.\n" msgstr "" -#: src/filed/backup.c:416 +#: src/filed/filed.c:525 #, c-format -msgid " Socket file skipped: %s\n" +msgid "No Director resource defined in %s\n" msgstr "" -#: src/filed/backup.c:429 -#, fuzzy, c-format -msgid " Could not access \"%s\": ERR=%s\n" -msgstr "Konnte counter %s: nicht aktualisieren: ERR=%s\n" - -#: src/filed/backup.c:436 -#, fuzzy, c-format -msgid " Could not follow link \"%s\": ERR=%s\n" -msgstr "Konnte regex pattern \"%s\" nicht kompilieren ERR=%s\n" - -#: src/filed/backup.c:443 -#, fuzzy, c-format -msgid " Could not stat \"%s\": ERR=%s\n" -msgstr "Kann bootstrap Datei nicht öffnen: %s: ERR=%s\n" - -#: src/filed/backup.c:453 +#: src/filed/status.c:82 #, c-format -msgid " Archive file not saved: %s\n" +msgid "Daemon started %s. Jobs: run=%d running=%d.\n" msgstr "" -#: src/filed/backup.c:457 -#, fuzzy, c-format -msgid " Could not open directory \"%s\": ERR=%s\n" -msgstr "Konnte regex pattern \"%s\" nicht kompilieren ERR=%s\n" +#: src/filed/status.c:143 +#, c-format +msgid "" +" Sizes: boffset_t=%d size_t=%d debug=%s trace=%d mode=%d,%d bwlimit=%skB/s\n" +msgstr "" -#: src/filed/backup.c:466 +#: src/filed/status.c:199 #, c-format -msgid " Unknown file type %d; not saved: %s\n" +msgid "Director connected at: %s\n" msgstr "" -#: src/filed/backup.c:522 +#: src/filed/status.c:201 #, c-format -msgid "%s signature digest initialization failed\n" +msgid "JobId %d Job %s is running.\n" msgstr "" -#: src/filed/backup.c:630 +#: src/filed/status.c:204 #, fuzzy, c-format -msgid " Cannot open \"%s\": ERR=%s.\n" -msgstr "Kann Ausdruck\"%s\"nicht auflösen: ERR=%s\n" +msgid " %s%s %s Job started: %s\n" +msgstr "Clone JobId %d gestartet.\n" -#: src/filed/backup.c:667 +#: src/filed/status.c:232 #, fuzzy, c-format -msgid " Cannot open resource fork for \"%s\": ERR=%s.\n" -msgstr "Kann Ausdruck\"%s\"nicht auflösen: ERR=%s\n" - -#: src/filed/backup.c:763 -msgid "Failed to allocate memory for crypto signature.\n" -msgstr "" - -#: src/filed/backup.c:768 src/filed/backup.c:774 src/filed/backup.c:789 -msgid "An error occurred while signing the stream.\n" -msgstr "" - -#: src/filed/backup.c:813 -msgid "An error occurred finalizing signing the stream.\n" -msgstr "" +msgid "" +" Files=%s Bytes=%s AveBytes/sec=%s LastBytes/sec=%s Errors=%d\n" +" Bwlimit=%s\n" +msgstr " MigTime=%s MigHiBytes=%s MigLoBytes=%s\n" -#: src/filed/backup.c:931 +#: src/filed/status.c:242 #, c-format -msgid "Compression deflateParams error: %d\n" -msgstr "" - -#: src/filed/backup.c:968 -msgid "Encrypting sparse or offset data not supported.\n" +msgid " Files: Restored=%s Expected=%s Completed=%d%%\n" msgstr "" -#: src/filed/backup.c:975 -msgid "Failed to initialize encryption context.\n" -msgstr "" +#: src/filed/status.c:247 +#, fuzzy, c-format +msgid " Files: Examined=%s Backed up=%s\n" +msgstr "FileSet: name=%s\n" -#: src/filed/backup.c:1085 +#: src/filed/status.c:260 #, c-format -msgid "Compression deflate error: %d\n" +msgid " Processing file: %s\n" msgstr "" -#: src/filed/backup.c:1092 -#, c-format -msgid "Compression deflateReset error: %d\n" +#: src/filed/status.c:271 +msgid " SDSocket closed.\n" msgstr "" -#: src/filed/backup.c:1126 -#, c-format -msgid "Compression LZO error: %d\n" +#: src/filed/status.c:281 +msgid "====\n" msgstr "" -#: src/filed/backup.c:1171 src/filed/backup.c:1187 -msgid "Encryption error\n" +#: src/filed/status.c:343 +msgid " SDSocket=closed\n" msgstr "" -#: src/filed/backup.c:1213 +#: src/filed/status.c:393 src/filed/status.c:427 #, c-format -msgid "Read error on file %s. ERR=%s\n" +msgid "Bad .status command: %s\n" msgstr "" -#: src/filed/backup.c:1216 -#, fuzzy, c-format -msgid "Too many errors. JobErrors=%d.\n" -msgstr "zu viele items in Job resource\n" - -#: src/filed/backup.c:1226 -msgid "Encryption padding error\n" +#: src/filed/status.c:394 +msgid "2900 Bad .status command, missing argument.\n" msgstr "" -#: src/filed/backup.c:1290 -msgid "Invalid file flags, no supported data stream type.\n" +#: src/filed/status.c:428 +msgid "2900 Bad .status command, wrong argument.\n" msgstr "" -#: src/filed/backup.c:1549 +#: src/tools/bregex.c:141 src/tools/bregtest.c:125 src/tools/bwild.c:110 #, c-format -msgid "VSS Writer (BackupComplete): %s\n" +msgid "Could not open data file: %s\n" msgstr "" -#: src/filed/restore.c:114 +#: src/tools/bbatch.c:67 #, c-format -msgid "Size of data or stream of %s not correct. Original %s, restored %s.\n" +msgid "" +"\n" +"Version: %s (%s)\n" +"Example : bbatch -w /path/to/workdir -h localhost -f dat1 -f dat -f datx\n" +" will start 3 thread and load dat1, dat and datx in your catalog\n" +"See bbatch.c to generate datafile\n" +"\n" +"Usage: bbatch [ options ] -w working/dir -f datafile\n" +" -b with batch mode\n" +" -B without batch mode\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -n specify the database name (default bacula)\n" +" -u specify database user name (default bacula)\n" +" -P specify database host (default NULL)\n" +" -w specify working directory\n" +" -r call restore code with given jobids\n" +" -v verbose\n" +" -f specify data file\n" +" -? print this message\n" +"\n" msgstr "" -#: src/filed/restore.c:134 +#: src/tools/bbatch.c:199 #, c-format -msgid "Invalid length of Finder Info (got %d, not 32)\n" +msgid "Computing file list for jobid=%s files=%lld secs=%d\n" msgstr "" -#: src/filed/restore.c:139 +#: src/tools/bbatch.c:303 #, fuzzy, c-format -msgid "Could not set Finder Info on %s\n" -msgstr "Konnte Datenbank \"%s\" nicht öffen.\n" +msgid "Error opening datafile %s\n" +msgstr "Fehler beim holen von Zeile: %s\n" -#: src/filed/restore.c:418 +#: src/tools/bbatch.c:313 #, fuzzy -msgid "LZO init failed\n" -msgstr "TLS Aushandlung gescheitert.\n" +msgid "Error while inserting file\n" +msgstr "Fehler beim schreiben der bsr Datei.\n" -#: src/filed/restore.c:660 -msgid "Unexpected cryptographic session data stream.\n" +#: src/tools/drivetype.c:35 +#, c-format +msgid "" +"\n" +"Usage: drivetype [-v] path ...\n" +"\n" +" Print the drive type a given file/directory is on.\n" +" The following options are supported:\n" +"\n" +" -l print local fixed hard drive\n" +" -a display information on all drives\n" +" -v print both path and file system type.\n" +" -? print this message.\n" +"\n" msgstr "" -#: src/filed/restore.c:670 -msgid "" -"No private decryption keys have been defined to decrypt encrypted backup " -"data.\n" +#: src/tools/drivetype.c:66 src/tools/fstype.c:90 +#, fuzzy, c-format +msgid "%s: unknown\n" +msgstr "unbekannt" + +#: src/tools/bsmtp.c:139 +#, c-format +msgid "Fatal malformed reply from %s: %s\n" msgstr "" -#: src/filed/restore.c:681 -#, fuzzy -msgid "Could not create digest.\n" -msgstr "Konnte Client Eintrag nicht anlegen. ERR=%s\n" +#: src/tools/bsmtp.c:147 +#, c-format +msgid "Fatal fgets error: ERR=%s\n" +msgstr "" -#: src/filed/restore.c:699 -msgid "Missing private key required to decrypt encrypted backup data.\n" +#: src/tools/bsmtp.c:180 +#, fuzzy, c-format +msgid "" +"\n" +"Usage: %s [-f from] [-h mailhost] [-s subject] [-c copy] [recipient ...]\n" +" -4 forces bsmtp to use IPv4 addresses only.\n" +" -6 forces bsmtp to use IPv6 addresses only.\n" +" -8 set charset to UTF-8\n" +" -a use any ip protocol for address resolution\n" +" -c set the Cc: field\n" +" -d set debug level to \n" +" -dt print a timestamp in debug output\n" +" -f set the From: field\n" +" -h use mailhost:port as the SMTP server\n" +" -s set the Subject: field\n" +" -r set the Reply-To: field\n" +" -l set the maximum number of lines to send (default: " +"unlimited)\n" +" -? print this message.\n" +"\n" msgstr "" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: dird [-f -s] [-c config_file] [-d debug_level] [config_file]\n" +" -c setze Konfigurationsdatei auf Datei\n" +" -dnn setze debug level auf nn\n" +" -f starte im Vordergrund (für debugging Zwecke)\n" +" -g groupid\n" +" -r starte jetzt\n" +" -s no signals\n" +" -t test - Konfiguration Lesen und beenden\n" +" -u userid\n" +" -v ausführliche Benutzer Meldungen\n" +" -? diese Meldung ausgeben.\n" +"\n" -#: src/filed/restore.c:702 -msgid "Decrypt of the session key failed.\n" +#: src/tools/bsmtp.c:367 +msgid "Fatal error: no recipient given.\n" msgstr "" -#: src/filed/restore.c:708 +#: src/tools/bsmtp.c:395 #, c-format -msgid "An error occurred while decoding encrypted session data stream: %s\n" +msgid "Fatal gethostname error: ERR=%s\n" msgstr "" -#: src/filed/restore.c:775 src/filed/restore.c:828 -#, c-format -msgid "Missing encryption session data stream for %s\n" -msgstr "" +#: src/tools/bsmtp.c:406 +#, fuzzy, c-format +msgid "Fatal getaddrinfo for myself failed \"%s\": ERR=%s\n" +msgstr "Catalog Fehler beim Aktualisieren von volume \"%s\". ERR=%s" -#: src/filed/restore.c:783 src/filed/restore.c:835 +#: src/tools/bsmtp.c:414 #, c-format -msgid "Failed to initialize decryption context for %s\n" +msgid "Fatal gethostbyname for myself failed \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:847 +#: src/tools/bsmtp.c:474 src/tools/bsmtp.c:509 #, fuzzy, c-format -msgid "Cannot open resource fork for %s.\n" -msgstr "Kann Ausdruck\"%s\"nicht auflösen: ERR=%s\n" +msgid "Error unknown mail host \"%s\": ERR=%s\n" +msgstr "unbekannt" -#: src/filed/restore.c:992 -msgid "Unexpected cryptographic signature data stream.\n" +#: src/tools/bsmtp.c:477 src/tools/bsmtp.c:512 +msgid "Retrying connection using \"localhost\".\n" msgstr "" -#: src/filed/restore.c:1000 -#, c-format -msgid "Failed to decode message signature for %s\n" -msgstr "" +#: src/tools/bsmtp.c:502 +#, fuzzy, c-format +msgid "Failed to connect to mailhost %s\n" +msgstr "Verbindung zu File daemon fehlgeschlagen.\n" -#: src/filed/restore.c:1064 +#: src/tools/bsmtp.c:520 #, c-format -msgid "Encountered %ld acl errors while doing restore\n" +msgid "Fatal error: Unknown address family for smtp host: %d\n" msgstr "" -#: src/filed/restore.c:1068 +#: src/tools/bsmtp.c:529 src/tools/bsmtp.c:534 #, c-format -msgid "Encountered %ld xattr errors while doing restore\n" +msgid "Fatal socket error: ERR=%s\n" msgstr "" -#: src/filed/restore.c:1072 +#: src/tools/bsmtp.c:539 #, c-format -msgid "" -"%d non-supported data streams and %d non-supported attrib streams ignored.\n" +msgid "Fatal connect error to %s: ERR=%s\n" msgstr "" -#: src/filed/restore.c:1076 +#: src/tools/bsmtp.c:548 #, c-format -msgid "%d non-supported resource fork streams ignored.\n" +msgid "Fatal _open_osfhandle error: ERR=%s\n" msgstr "" -#: src/filed/restore.c:1079 +#: src/tools/bsmtp.c:555 src/tools/bsmtp.c:559 src/tools/bsmtp.c:568 +#: src/tools/bsmtp.c:572 #, c-format -msgid "%d non-supported Finder Info streams ignored.\n" +msgid "Fatal fdopen error: ERR=%s\n" msgstr "" -#: src/filed/restore.c:1082 +#: src/tools/bsmtp.c:564 #, c-format -msgid "%d non-supported acl streams ignored.\n" +msgid "Fatal dup error: ERR=%s\n" msgstr "" -#: src/filed/restore.c:1085 -#, c-format -msgid "%d non-supported crypto streams ignored.\n" +#: src/tools/dbcheck.c:183 +msgid "" +"Warning skipping the additional parameters for working directory/dbname/user/" +"password/host.\n" msgstr "" -#: src/filed/restore.c:1088 +#: src/tools/dbcheck.c:200 #, c-format -msgid "%d non-supported xattr streams ignored.\n" +msgid "Error can not find the Catalog name[%s] in the given config file [%s]\n" msgstr "" -#: src/filed/restore.c:1168 -msgid "Zlib errno" +#: src/tools/dbcheck.c:202 +#, c-format +msgid "Error there is no Catalog section in the given config file [%s]\n" msgstr "" -#: src/filed/restore.c:1170 -msgid "Zlib stream error" +#: src/tools/dbcheck.c:211 +msgid "Error no Director resource defined.\n" msgstr "" -#: src/filed/restore.c:1172 -msgid "Zlib data error" +#: src/tools/dbcheck.c:235 +msgid "Wrong number of arguments.\n" msgstr "" -#: src/filed/restore.c:1174 -msgid "Zlib memory error" +#: src/tools/dbcheck.c:240 +msgid "Working directory not supplied.\n" msgstr "" -#: src/filed/restore.c:1176 -msgid "Zlib buffer error" +#: src/tools/dbcheck.c:276 +msgid "Database port must be a numeric value.\n" msgstr "" -#: src/filed/restore.c:1178 -msgid "Zlib version error" +#: src/tools/dbcheck.c:279 +msgid "Database port must be a int value.\n" msgstr "" -#: src/filed/restore.c:1218 +#: src/tools/dbcheck.c:353 #, c-format -msgid "Missing cryptographic signature for %s\n" +msgid "Hello, this is the database check/correct program.\n" msgstr "" -#: src/filed/restore.c:1251 src/filed/restore.c:1280 -#, fuzzy, c-format -msgid "Signature validation failed for file %s: ERR=%s\n" -msgstr "Konnte bootstrap Datei %s nicht erzeugen. ERR=%s\n" - -#: src/filed/restore.c:1268 -#, fuzzy, c-format -msgid "Digest one file failed for file: %s\n" -msgstr "Mehr als ein Dateiname! %s für Datei: %s\n" - -#: src/filed/restore.c:1307 +#: src/tools/dbcheck.c:355 #, c-format -msgid "Signature validation failed for %s: %s\n" +msgid "Modify database is on." msgstr "" -#: src/filed/restore.c:1404 -#, fuzzy, c-format -msgid "LZO uncompression error on file %s. ERR=%d\n" -msgstr "Catalog Fehler beim Aktualisieren von volume \"%s\". ERR=%s" - -#: src/filed/restore.c:1441 +#: src/tools/dbcheck.c:357 #, c-format -msgid "Uncompression error on file %s. ERR=%s\n" +msgid "Modify database is off." msgstr "" -#: src/filed/restore.c:1474 +#: src/tools/dbcheck.c:359 src/tools/dbcheck.c:420 #, c-format -msgid "Write error in Win32 Block Decomposition on %s: %s\n" -msgstr "" - -#: src/filed/restore.c:1533 -msgid "Decryption error\n" -msgstr "" - -#: src/filed/restore.c:1626 -msgid "Logic error: output file should be open\n" -msgstr "" - -#: src/filed/restore.c:1664 -msgid "Logic error: output file should not be open\n" +msgid " Verbose is on.\n" msgstr "" -#: src/filed/restore.c:1698 +#: src/tools/dbcheck.c:361 src/tools/dbcheck.c:422 #, c-format -msgid "Decryption error. buf_len=%d decrypt_len=%d on file %s\n" -msgstr "" - -#: src/filed/restore.c:1819 -msgid "Open File Manager paused\n" -msgstr "" - -#: src/filed/restore.c:1823 -msgid "FAILED to pause Open File Manager\n" +msgid " Verbose is off.\n" msgstr "" -#: src/filed/restore.c:1831 +#: src/tools/dbcheck.c:363 #, c-format -msgid "Running as '%s'. Privmask=%#08x\n" -msgstr "" - -#: src/filed/restore.c:1833 -msgid "Failed to retrieve current UserName\n" +msgid "Please select the function you want to perform.\n" msgstr "" -#: src/filed/job.c:456 +#: src/tools/dbcheck.c:367 #, c-format -msgid "2901 Job %s not found.\n" +msgid "" +"\n" +" 1) Toggle modify database flag\n" +" 2) Toggle verbose flag\n" +" 3) Repair bad Filename records\n" +" 4) Repair bad Path records\n" +" 5) Eliminate duplicate Filename records\n" +" 6) Eliminate duplicate Path records\n" +" 7) Eliminate orphaned Jobmedia records\n" +" 8) Eliminate orphaned File records\n" +" 9) Eliminate orphaned Path records\n" +" 10) Eliminate orphaned Filename records\n" +" 11) Eliminate orphaned FileSet records\n" +" 12) Eliminate orphaned Client records\n" +" 13) Eliminate orphaned Job records\n" +" 14) Eliminate all Admin records\n" +" 15) Eliminate all Restore records\n" +" 16) All (3-15)\n" +" 17) Quit\n" msgstr "" -#: src/filed/job.c:466 +#: src/tools/dbcheck.c:386 #, c-format -msgid "2001 Job %s marked to be canceled.\n" +msgid "" +"\n" +" 1) Toggle modify database flag\n" +" 2) Toggle verbose flag\n" +" 3) Check for bad Filename records\n" +" 4) Check for bad Path records\n" +" 5) Check for duplicate Filename records\n" +" 6) Check for duplicate Path records\n" +" 7) Check for orphaned Jobmedia records\n" +" 8) Check for orphaned File records\n" +" 9) Check for orphaned Path records\n" +" 10) Check for orphaned Filename records\n" +" 11) Check for orphaned FileSet records\n" +" 12) Check for orphaned Client records\n" +" 13) Check for orphaned Job records\n" +" 14) Check for all Admin records\n" +" 15) Check for all Restore records\n" +" 16) All (3-15)\n" +" 17) Quit\n" msgstr "" -#: src/filed/job.c:469 -msgid "2902 Error scanning cancel command.\n" +#: src/tools/dbcheck.c:406 +msgid "Select function number: " msgstr "" -#: src/filed/job.c:492 +#: src/tools/dbcheck.c:413 #, c-format -msgid "2991 Bad setdebug command: %s\n" +msgid "Database will be modified.\n" msgstr "" -#: src/filed/job.c:515 +#: src/tools/dbcheck.c:415 #, c-format -msgid "Bad estimate command: %s" -msgstr "" - -#: src/filed/job.c:516 -msgid "2992 Bad estimate command.\n" +msgid "Database will NOT be modified.\n" msgstr "" -#: src/filed/job.c:539 +#: src/tools/dbcheck.c:506 #, c-format -msgid "Bad Job Command: %s" +msgid "JobId=%s Name=\"%s\" StartTime=%s\n" msgstr "" -#: src/filed/job.c:578 +#: src/tools/dbcheck.c:513 #, c-format -msgid "Bad RunBeforeJob command: %s\n" -msgstr "" - -#: src/filed/job.c:579 src/filed/job.c:598 -msgid "2905 Bad RunBeforeJob command.\n" -msgstr "" - -#: src/filed/job.c:609 -msgid "2905 Bad RunBeforeNow command.\n" +msgid "Orphaned JobMediaId=%s JobId=%s Volume=\"%s\"\n" msgstr "" -#: src/filed/job.c:628 +#: src/tools/dbcheck.c:520 #, c-format -msgid "Bad RunAfter command: %s\n" -msgstr "" - -#: src/filed/job.c:629 -msgid "2905 Bad RunAfterJob command.\n" +msgid "Orphaned FileId=%s JobId=%s Volume=\"%s\"\n" msgstr "" -#: src/filed/job.c:665 +#: src/tools/dbcheck.c:527 #, c-format -msgid "Bad RunScript command: %s\n" -msgstr "" - -#: src/filed/job.c:666 -msgid "2905 Bad RunScript command.\n" -msgstr "" - -#: src/filed/job.c:720 -#, fuzzy, c-format -msgid "Bad RestoreObject command: %s\n" -msgstr "Storage daemon hat \"Job command\": %s abgelehnt\n" - -#: src/filed/job.c:785 -msgid "2909 Bad RestoreObject command.\n" +msgid "Orphaned FileSetId=%s FileSet=\"%s\" MD5=%s\n" msgstr "" -#: src/filed/job.c:824 +#: src/tools/dbcheck.c:534 #, c-format -msgid "Plugin Directory not defined. Cannot use plugin: \"%s\"\n" +msgid "Orphaned ClientId=%s Name=\"%s\"\n" msgstr "" -#: src/filed/job.c:866 +#: src/tools/dbcheck.c:587 #, c-format -msgid "Error running program: %s. stat=%d: ERR=%s\n" +msgid "Deleting: %s\n" msgstr "" -#: src/filed/job.c:877 +#: src/tools/dbcheck.c:659 #, c-format -msgid "Cannot open FileSet input file: %s. ERR=%s\n" +msgid "Checking for duplicate Filename entries.\n" msgstr "" -#: src/filed/job.c:1031 +#: src/tools/dbcheck.c:670 #, c-format -msgid "REGEX %s compile error. ERR=%s\n" +msgid "Found %d duplicate Filename records.\n" msgstr "" -#: src/filed/job.c:1182 -#, c-format -msgid "Invalid FileSet command: %s\n" +#: src/tools/dbcheck.c:671 +msgid "Print the list? (yes/no): " msgstr "" -#: src/filed/job.c:1655 +#: src/tools/dbcheck.c:694 src/tools/dbcheck.c:759 #, c-format -msgid "" -"DIR and FD clocks differ by %lld seconds, FD automatically compensating.\n" +msgid "Found %d for: %s\n" msgstr "" -#: src/filed/job.c:1664 +#: src/tools/dbcheck.c:724 #, c-format -msgid "Unknown backup level: %s\n" +msgid "Checking for duplicate Path entries.\n" msgstr "" -#: src/filed/job.c:1677 +#: src/tools/dbcheck.c:735 #, c-format -msgid "Bad level command: %s\n" +msgid "Found %d duplicate Path records.\n" msgstr "" -#: src/filed/job.c:1699 -#, c-format -msgid "Bad session command: %s" +#: src/tools/dbcheck.c:736 src/tools/dbcheck.c:798 src/tools/dbcheck.c:844 +#: src/tools/dbcheck.c:912 src/tools/dbcheck.c:970 src/tools/dbcheck.c:1013 +#: src/tools/dbcheck.c:1055 src/tools/dbcheck.c:1097 src/tools/dbcheck.c:1134 +#: src/tools/dbcheck.c:1167 src/tools/dbcheck.c:1201 src/tools/dbcheck.c:1268 +msgid "Print them? (yes/no): " msgstr "" -#: src/filed/job.c:1760 +#: src/tools/dbcheck.c:789 #, c-format -msgid "Bad storage command: %s" +msgid "Checking for orphaned JobMedia entries.\n" msgstr "" -#: src/filed/job.c:1781 +#: src/tools/dbcheck.c:797 #, c-format -msgid "Failed to connect to Storage daemon: %s:%d\n" -msgstr "" - -#: src/filed/job.c:1793 -msgid "Failed to authenticate Storage daemon.\n" -msgstr "" - -#: src/filed/job.c:1840 -msgid "ACL support not configured for your machine.\n" -msgstr "" - -#: src/filed/job.c:1844 -msgid "XATTR support not configured for your machine.\n" -msgstr "" - -#: src/filed/job.c:1853 -msgid "Cannot contact Storage daemon\n" +msgid "Found %d orphaned JobMedia records.\n" msgstr "" -#: src/filed/job.c:1872 +#: src/tools/dbcheck.c:815 #, c-format -msgid "Bad response to append open: %s\n" +msgid "Deleting %d orphaned JobMedia records.\n" msgstr "" -#: src/filed/job.c:1877 -msgid "Bad response from stored to open command\n" +#: src/tools/dbcheck.c:832 +#, c-format +msgid "Checking for orphaned File entries. This may take some time!\n" msgstr "" -#: src/filed/job.c:1909 +#: src/tools/dbcheck.c:843 #, c-format -msgid "Generate VSS snapshots. Driver=\"%s\", Drive(s)=\"%s\"\n" +msgid "Found %d orphaned File records.\n" msgstr "" -#: src/filed/job.c:1912 -#, fuzzy, c-format -msgid "CreateSGenerate VSS snapshots failed. ERR=%s\n" -msgstr "Erzeugung des db Path Eintrags %s fehlgeschlagen. ERR=%s\n" - -#: src/filed/job.c:1919 +#: src/tools/dbcheck.c:860 #, c-format -msgid "Generate VSS snapshot of drive \"%c:\\\" failed.\n" +msgid "Deleting %d orphaned File records.\n" msgstr "" -#: src/filed/job.c:1925 +#: src/tools/dbcheck.c:879 #, c-format -msgid "VSS Writer (PrepareForBackup): %s\n" +msgid "Pruning orphaned Path entries isn't possible when using BVFS.\n" msgstr "" -#: src/filed/job.c:1930 -msgid "No drive letters found for generating VSS snapshots.\n" +#: src/tools/dbcheck.c:888 src/tools/dbcheck.c:946 +msgid "Create temporary index? (yes/no): " msgstr "" -#: src/filed/job.c:1934 -#, fuzzy, c-format -msgid "VSS was not initialized properly. ERR=%s\n" -msgstr "Kann DB lock nicht initialisieren. ERR=%s\n" - -#: src/filed/job.c:1985 -msgid "Append Close with SD failed.\n" +#: src/tools/dbcheck.c:900 +#, c-format +msgid "Checking for orphaned Path entries. This may take some time!\n" msgstr "" -#: src/filed/job.c:1989 +#: src/tools/dbcheck.c:911 #, c-format -msgid "Bad status %d returned from Storage Daemon.\n" +msgid "Found %d orphaned Path records.\n" msgstr "" -#: src/filed/job.c:2019 +#: src/tools/dbcheck.c:924 #, c-format -msgid "2994 Bad verify command: %s\n" +msgid "Deleting %d orphaned Path records.\n" msgstr "" -#: src/filed/job.c:2034 src/filed/job.c:2075 +#: src/tools/dbcheck.c:958 #, c-format -msgid "2994 Bad verify level: %s\n" +msgid "Checking for orphaned Filename entries. This may take some time!\n" msgstr "" -#: src/filed/job.c:2146 +#: src/tools/dbcheck.c:969 #, c-format -msgid "Bad replace command. CMD=%s\n" +msgid "Found %d orphaned Filename records.\n" msgstr "" -#: src/filed/job.c:2169 +#: src/tools/dbcheck.c:982 #, c-format -msgid "Bad where regexp. where=%s\n" +msgid "Deleting %d orphaned Filename records.\n" msgstr "" -#: src/filed/job.c:2207 +#: src/tools/dbcheck.c:1002 #, c-format -msgid "VSS was not initialized properly. VSS support is disabled. ERR=%s\n" +msgid "Checking for orphaned FileSet entries. This takes some time!\n" msgstr "" -#: src/filed/job.c:2252 +#: src/tools/dbcheck.c:1012 #, c-format -msgid "VSS Writer (RestoreComplete): %s\n" +msgid "Found %d orphaned FileSet records.\n" msgstr "" -#: src/filed/job.c:2302 -msgid "Improper calling sequence.\n" +#: src/tools/dbcheck.c:1027 +#, c-format +msgid "Deleting %d orphaned FileSet records.\n" msgstr "" -#: src/filed/job.c:2322 +#: src/tools/dbcheck.c:1036 #, c-format -msgid "Bad response to SD read open: %s\n" +msgid "Checking for orphaned Client entries.\n" msgstr "" -#: src/filed/job.c:2327 -msgid "Bad response from stored to read open command\n" +#: src/tools/dbcheck.c:1054 +#, c-format +msgid "Found %d orphaned Client records.\n" msgstr "" -#: src/filed/job.c:2391 +#: src/tools/dbcheck.c:1069 #, c-format -msgid "Comm error with SD. bad response to %s. ERR=%s\n" +msgid "Deleting %d orphaned Client records.\n" msgstr "" -#: src/filed/job.c:2394 +#: src/tools/dbcheck.c:1078 #, c-format -msgid "Bad response to %s command. Wanted %s, got %s\n" +msgid "Checking for orphaned Job entries.\n" msgstr "" -#: src/filed/authenticate.c:68 +#: src/tools/dbcheck.c:1096 #, c-format -msgid "I only authenticate directors, not %d\n" +msgid "Found %d orphaned Job records.\n" msgstr "" -#: src/filed/authenticate.c:100 -#, fuzzy, c-format -msgid "Connection from unknown Director %s at %s rejected.\n" -msgstr "unbekannt" - -#: src/filed/authenticate.c:144 +#: src/tools/dbcheck.c:1111 #, c-format -msgid "Incorrect password given by Director at %s.\n" +msgid "Deleting %d orphaned Job records.\n" msgstr "" -#: src/filed/authenticate.c:263 -msgid "" -"Authorization key rejected by Storage daemon.\n" -"Please see " +#: src/tools/dbcheck.c:1113 +#, c-format +msgid "Deleting JobMedia records of orphaned Job records.\n" msgstr "" -#: examples/nagios/check_bacula/check_bacula.c:59 +#: src/tools/dbcheck.c:1115 #, c-format -msgid "" -"Copyright (C) 2005 Christian Masopust\n" -"Written by Christian Masopust (2005)\n" -"\n" -"Version: " +msgid "Deleting Log records of orphaned Job records.\n" msgstr "" -#: src/baconfig.h:72 src/baconfig.h:73 src/baconfig.h:78 src/baconfig.h:79 +#: src/tools/dbcheck.c:1124 #, c-format -msgid "Failed ASSERT: %s\n" +msgid "Checking for Admin Job entries.\n" msgstr "" -#: src/win32/compat/compat.cpp:2721 -#, fuzzy -msgid "" -"\n" -"\n" -"Bacula ERROR: " -msgstr "Bacula " - -#: src/win32/libwin32/service.cpp:107 -msgid "RegisterServiceCtlHandler failed" +#: src/tools/dbcheck.c:1133 +#, c-format +msgid "Found %d Admin Job records.\n" msgstr "" -#: src/win32/libwin32/service.cpp:108 -msgid "Failure contacting the Service Handler" +#: src/tools/dbcheck.c:1148 +#, c-format +msgid "Deleting %d Admin Job records.\n" msgstr "" -#: src/win32/libwin32/service.cpp:119 -msgid "Service start report failed" +#: src/tools/dbcheck.c:1157 +#, c-format +msgid "Checking for Restore Job entries.\n" msgstr "" -#: src/win32/libwin32/service.cpp:172 -msgid "StartServiceCtrlDispatcher failed." +#: src/tools/dbcheck.c:1166 +#, c-format +msgid "Found %d Restore Job records.\n" msgstr "" -#: src/win32/libwin32/service.cpp:179 -msgid "KERNEL32.DLL not found: Bacula service not started" +#: src/tools/dbcheck.c:1181 +#, c-format +msgid "Deleting %d Restore Job records.\n" msgstr "" -#: src/win32/libwin32/service.cpp:189 -msgid "Registry service not found: Bacula service not started" +#: src/tools/dbcheck.c:1191 +#, c-format +msgid "Checking for Filenames with a trailing slash\n" msgstr "" -#: src/win32/libwin32/service.cpp:191 -#, fuzzy -msgid "Registry service entry point not found" -msgstr "Pool Ressource \"%s\" nicht gefunden.\n" - -#: src/win32/libwin32/service.cpp:212 -msgid "Report Service failure" +#: src/tools/dbcheck.c:1200 +#, c-format +msgid "Found %d bad Filename records.\n" msgstr "" -#: src/win32/libwin32/service.cpp:243 -msgid "Unable to install the service" +#: src/tools/dbcheck.c:1218 src/tools/dbcheck.c:1284 +#, c-format +msgid "Reparing %d bad Filename records.\n" msgstr "" -#: src/win32/libwin32/service.cpp:251 -msgid "Service command length too long" +#: src/tools/dbcheck.c:1258 +#, c-format +msgid "Checking for Paths without a trailing slash\n" msgstr "" -#: src/win32/libwin32/service.cpp:252 -msgid "Service command length too long. Service not registered." +#: src/tools/dbcheck.c:1267 +#, c-format +msgid "Found %d bad Path records.\n" msgstr "" -#: src/win32/libwin32/service.cpp:265 +#: src/tools/dbcheck.c:1430 +#, c-format msgid "" -"The Service Control Manager could not be contacted - the service was not " -"installed" -msgstr "" - -#: src/win32/libwin32/service.cpp:288 src/win32/libwin32/service.cpp:317 -#: src/win32/libwin32/service.cpp:365 src/win32/libwin32/service.cpp:373 -#: src/win32/libwin32/service.cpp:377 -msgid "The Bacula service: " +"Ok. Index over the %s column already exists and dbcheck will work faster.\n" msgstr "" -#: src/win32/libwin32/service.cpp:295 +#: src/tools/dbcheck.c:1433 +#, c-format msgid "" -"Provides file backup and restore services. Bacula -- the network backup " -"solution." -msgstr "" - -#: src/win32/libwin32/service.cpp:306 -msgid "Cannot write System Registry for " +"Note. Index over the %s column not found, that can greatly slow down " +"dbcheck.\n" msgstr "" -#: src/win32/libwin32/service.cpp:307 -msgid "" -"The System Registry could not be updated - the Bacula service was not " -"installed" +#: src/tools/dbcheck.c:1448 +#, c-format +msgid "Create temporary index... This may take some time!\n" msgstr "" -#: src/win32/libwin32/service.cpp:316 -msgid "Cannot add Bacula key to System Registry" +#: src/tools/dbcheck.c:1456 +#, c-format +msgid "Temporary index created.\n" msgstr "" -#: src/win32/libwin32/service.cpp:327 -msgid "The " +#: src/tools/dbcheck.c:1471 +#, c-format +msgid "Drop temporary index.\n" msgstr "" -#: src/win32/libwin32/service.cpp:385 -msgid "An existing Bacula service: " +#: src/tools/dbcheck.c:1481 +#, c-format +msgid "Temporary index %s deleted.\n" msgstr "" -#: src/win32/libwin32/service.cpp:394 +#: src/tools/bvfs_test.c:44 src/tools/ing_test.c:45 +#, c-format msgid "" -"The service Manager could not be contacted - the Bacula service was not " -"removed" +"\n" +"Version: %s (%s)\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -n specify the database name (default bacula)\n" +" -u specify database user name (default bacula)\n" +" -P specify database host (default NULL)\n" +" -w specify working directory\n" +" -j specify jobids\n" +" -p specify path\n" +" -f specify file\n" +" -l maximum tuple to fetch\n" +" -T truncate cache table before starting\n" +" -v verbose\n" +" -? print this message\n" +"\n" msgstr "" -#: src/win32/libwin32/service.cpp:407 +#: src/tools/testls.c:47 +#, c-format msgid "" -"Could not find registry entry.\n" -"Service probably not registerd - the Bacula service was not removed" +"\n" +"Usage: testls [-d debug_level] [-] [pattern1 ...]\n" +" -a print extended attributes (Win32 debug)\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -e specify file of exclude patterns\n" +" -i specify file of include patterns\n" +" -q quiet, don't print filenames (debug)\n" +" - read pattern(s) from stdin\n" +" -? print this message.\n" +"\n" +"Patterns are file inclusion -- normally directories.\n" +"Debug level >= 1 prints each file found.\n" +"Debug level >= 10 prints path/file for catalog.\n" +"Errors always printed.\n" +"Files/paths truncated is number with len > 255.\n" +"Truncation is only in catalog.\n" +"\n" msgstr "" -#: src/win32/libwin32/service.cpp:414 -msgid "Could not delete Registry key for " +#: src/tools/testls.c:143 +#, c-format +msgid "Could not open include file: %s\n" msgstr "" -#: src/win32/libwin32/service.cpp:425 -msgid "Bacula could not be contacted, probably not running" +#: src/tools/testls.c:156 +#, c-format +msgid "Could not open exclude file: %s\n" msgstr "" -#: src/win32/libwin32/service.cpp:433 -msgid "The Bacula service has been removed" +#: src/tools/testls.c:170 +#, c-format +msgid "Files seen = %d\n" msgstr "" -#: src/win32/libwin32/service.cpp:474 -msgid "SetServiceStatus failed" +#: src/tools/testls.c:203 src/tools/testfind.c:310 +#, c-format +msgid "Err: Could not access %s: %s\n" msgstr "" -#: src/win32/libwin32/service.cpp:500 +#: src/tools/testls.c:206 src/tools/testfind.c:313 #, c-format -msgid "" -"\n" -"\n" -"%s error: %ld at %s:%d" +msgid "Err: Could not follow ff->link %s: %s\n" msgstr "" -#: src/win32/libwin32/service.cpp:576 +#: src/tools/testls.c:209 src/tools/testfind.c:316 #, c-format -msgid "Locked by: %s, duration: %ld seconds\n" +msgid "Err: Could not stat %s: %s\n" msgstr "" -#: src/win32/libwin32/service.cpp:580 +#: src/tools/testls.c:212 src/tools/testfind.c:319 #, c-format -msgid "No longer locked\n" +msgid "Skip: File not saved. No change. %s\n" msgstr "" -#: src/win32/libwin32/service.cpp:584 -msgid "Could not lock database" +#: src/tools/testls.c:215 src/tools/testfind.c:322 +#, c-format +msgid "Err: Attempt to backup archive. Not saved. %s\n" msgstr "" -#: src/win32/libwin32/main.cpp:245 -msgid "Bad Command Line Option" +#: src/tools/testls.c:218 +#, c-format +msgid "Recursion turned off. Directory not entered. %s\n" msgstr "" -#: src/wx-console/wxbconfigfileeditor.cpp:65 -msgid "Config file editor" +#: src/tools/testls.c:221 +#, c-format +msgid "Skip: File system change prohibited. Directory not entered. %s\n" msgstr "" -#: src/wx-console/wxbconfigfileeditor.cpp:75 -#, fuzzy -msgid "# Bacula bwx-console Configuration File\n" -msgstr "Bitte die Konfigurationsdatei korrigieren: %s\n" - -#: src/wx-console/wxbconfigfileeditor.cpp:111 -msgid "Save and close" +#: src/tools/testls.c:224 src/tools/testfind.c:325 +#, c-format +msgid "Err: Could not open directory %s: %s\n" msgstr "" -#: src/wx-console/wxbconfigfileeditor.cpp:112 -#, fuzzy -msgid "Close without saving" -msgstr "%s OK -- mit Warnungen" - -#: src/wx-console/wxbconfigfileeditor.cpp:139 -#, fuzzy, c-format -msgid "Unable to write to %s\n" -msgstr "Kann DB lock nicht initialisieren. ERR=%s\n" - -#: src/wx-console/wxbconfigfileeditor.cpp:140 -#, fuzzy -msgid "Error while saving" -msgstr "Fehler beim schreiben der bsr Datei.\n" - -#: src/wx-console/wxbrestorepanel.cpp:234 -#: src/wx-console/wxbrestorepanel.cpp:1947 -#: src/wx-console/wxbrestorepanel.cpp:1976 -#, fuzzy -msgid "Enter restore mode" -msgstr "Job Ressource" - -#: src/wx-console/wxbrestorepanel.cpp:237 -#, fuzzy -msgid "Cancel restore" -msgstr "Job Ressource" +#: src/tools/testls.c:227 src/tools/testfind.c:328 +#, c-format +msgid "Err: Unknown file ff->type %d: %s\n" +msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:263 -#: src/wx-console/wxbrestorepanel.cpp:317 -msgid "Add" +#: src/tools/testfind.c:58 +#, c-format +msgid "" +"\n" +"Usage: testfind [-d debug_level] [-] [pattern1 ...]\n" +" -a print extended attributes (Win32 debug)\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -c specify config file containing FileSet resources\n" +" -f specify which FileSet to use\n" +" -? print this message.\n" +"\n" +"Patterns are used for file inclusion -- normally directories.\n" +"Debug level >= 1 prints each file found.\n" +"Debug level >= 10 prints path/file for catalog.\n" +"Errors are always printed.\n" +"Files/paths truncated is the number of files/paths with len > 255.\n" +"Truncation is only in the catalog.\n" +"\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:265 -#: src/wx-console/wxbrestorepanel.cpp:319 -msgid "Remove" +#: src/tools/testfind.c:223 +#, c-format +msgid "" +"\n" +"Total files : %d\n" +"Max file length: %d\n" +"Max path length: %d\n" +"Files truncated: %d\n" +"Paths truncated: %d\n" +"Hard links : %d\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:267 -#: src/wx-console/wxbrestorepanel.cpp:321 -msgid "Refresh" +#: src/tools/testfind.c:266 +#, c-format +msgid "Reg: %s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:286 -msgid "M" +#: src/tools/testfind.c:288 +msgid "\t[will not descend: recursion turned off]" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:290 -#, fuzzy -msgid "Filename" -msgstr "FileSet: name=%s\n" +#: src/tools/testfind.c:290 +msgid "\t[will not descend: file system change not allowed]" +msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:294 -msgid "Size" +#: src/tools/testfind.c:292 +msgid "\t[will not descend: disallowed file system]" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:298 -msgid "Date" +#: src/tools/testfind.c:294 +msgid "\t[will not descend: disallowed drive type]" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:302 -msgid "Perm." +#: src/tools/testfind.c:378 +#, c-format +msgid "===== Filename truncated to 255 chars: %s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:306 -msgid "User" +#: src/tools/testfind.c:395 +#, c-format +msgid "========== Path name truncated to 255 chars: %s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:310 -msgid "Group" +#: src/tools/testfind.c:404 +#, c-format +msgid "========== Path length is zero. File=%s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:335 -#: src/wx-console/wxbrestorepanel.cpp:348 -#: src/wx-console/wxbrestorepanel.cpp:503 -#: src/wx-console/wxbrestorepanel.cpp:513 -#: src/wx-console/wxbrestorepanel.cpp:516 -#: src/wx-console/wxbrestorepanel.cpp:1811 -#: src/wx-console/wxbrestorepanel.cpp:1897 -msgid "Job Name" +#: src/tools/testfind.c:407 +#, c-format +msgid "Path: %s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:337 -#: src/wx-console/wxbrestorepanel.cpp:353 -#: src/wx-console/wxbrestorepanel.cpp:455 -#: src/wx-console/wxbrestorepanel.cpp:456 -#: src/wx-console/wxbrestorepanel.cpp:466 -#: src/wx-console/wxbrestorepanel.cpp:467 -#: src/wx-console/wxbrestorepanel.cpp:1153 -#: src/wx-console/wxbrestorepanel.cpp:1156 -#: src/wx-console/wxbrestorepanel.cpp:1239 -#: src/wx-console/wxbrestorepanel.cpp:1849 -#: src/wx-console/wxbrestorepanel.cpp:1851 -#: src/wx-console/wxbrestorepanel.cpp:1912 -msgid "Fileset" +#: src/tools/fstype.c:36 +#, c-format +msgid "" +"\n" +"Usage: fstype [-v] path ...\n" +"\n" +" Print the file system type a given file/directory is on.\n" +" The following options are supported:\n" +"\n" +" -v print both path and file system type.\n" +" -? print this message.\n" +"\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:340 -#: src/wx-console/wxbrestorepanel.cpp:1233 -#: src/wx-console/wxbrestorepanel.cpp:1249 -#: src/wx-console/wxbrestorepanel.cpp:1251 -#: src/wx-console/wxbrestorepanel.cpp:1259 -#: src/wx-console/wxbrestorepanel.cpp:1261 -#: src/wx-console/wxbrestorepanel.cpp:1280 -#: src/wx-console/wxbrestorepanel.cpp:1287 -#: src/wx-console/wxbrestorepanel.cpp:1839 -#: src/wx-console/wxbrestorepanel.cpp:1850 -#: src/wx-console/wxbrestorepanel.cpp:1971 -msgid "Before" +#: src/tools/cats_test.c:48 +#, c-format +msgid "" +"\n" +"Version: %s (%s)\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -n specify the database name (default bacula)\n" +" -u specify database user name (default bacula)\n" +" -P specify database host (default NULL)\n" +" -w specify working directory\n" +" -p specify path\n" +" -f specify file\n" +" -l maximum tuple to fetch\n" +" -q print only errors\n" +" -v verbose\n" +" -? print this message\n" +"\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:342 -msgid "Please configure parameters concerning files to restore :" +#: src/tools/cats_test.c:364 +#, fuzzy, c-format +msgid "Could not open, database \"%s\".\n" +msgstr "Konnte Datenbank \"%s\" nicht öffen.\n" + +#: src/tools/ing_test.c:219 src/tools/ing_test.c:252 src/tools/ing_test.c:290 +msgid "Stmt went wrong\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:351 -#: src/wx-console/wxbrestorepanel.cpp:1905 -msgid "always" +#: src/tools/ing_test.c:308 +msgid "CREATE-Stmt went wrong\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:351 -msgid "if newer" +#: src/tools/ing_test.c:313 +msgid "DROP-Stmt went wrong\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:351 -msgid "if older" +#: examples/nagios/check_bacula/check_bacula.c:59 +#, c-format +msgid "" +"Copyright (C) 2005 Christian Masopust\n" +"Written by Christian Masopust (2005)\n" +"\n" +"Version: " msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:351 -#: src/wx-console/wxbrestorepanel.cpp:1908 -msgid "never" +#: src/lib/status.h:82 +msgid "===================================================================\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:359 -msgid "Please configure parameters concerning files restoration :" +#: src/baconfig.h:60 src/baconfig.h:61 src/baconfig.h:66 src/baconfig.h:67 +#, c-format +msgid "Failed ASSERT: %s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:427 -msgid "Getting parameters list." +#: src/qt-console/bcomm/dircomm.cpp:79 +#, c-format +msgid "Already connected\"%s\".\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:435 -msgid "Error : no clients returned by the director." +#: src/qt-console/bcomm/dircomm.cpp:90 +#: src/qt-console/tray-monitor/tray-monitor.cpp:347 +#, c-format +msgid "Connecting to Director %s:%d" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:459 -msgid "Error : no filesets returned by the director." +#: src/qt-console/bcomm/dircomm.cpp:92 +#, c-format +msgid "" +"Connecting to Director %s:%d\n" +"\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:483 -msgid "Error : no storage returned by the director." +#: src/qt-console/bcomm/dircomm.cpp:163 +#: src/qt-console/tray-monitor/tray-monitor.cpp:349 +msgid "Director daemon" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:506 -#: src/wx-console/wxbrestorepanel.cpp:530 -msgid "Error : no jobs returned by the director." +#: src/qt-console/bcomm/dircomm.cpp:201 +msgid "Initializing ..." msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:516 -#, fuzzy -msgid "RestoreFiles" -msgstr "Wiederherstellung läuft..." - -#: src/wx-console/wxbrestorepanel.cpp:551 -msgid "Please configure your restore parameters." +#: src/qt-console/bcomm/dircomm.cpp:217 src/qt-console/console/console.cpp:130 +msgid "Connected" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:556 -msgid "Please select a client." +#: src/qt-console/bcomm/dircomm.cpp:341 +msgid "Command completed ..." msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:560 -msgid "Please select a restore date." +#: src/qt-console/bcomm/dircomm.cpp:348 src/qt-console/console/console.cpp:367 +msgid "Processing command ..." msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:565 -msgid "Building restore tree..." +#: src/qt-console/bcomm/dircomm.cpp:355 +msgid "At main prompt waiting for input ..." msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:613 -#, fuzzy -msgid "Error while starting restore: " -msgstr "Fehler beim schreiben der bsr Datei.\n" - -#: src/wx-console/wxbrestorepanel.cpp:705 -msgid "" -"Right click on a file or on a directory, or double-click on its mark to add " -"it to the restore list." +#: src/qt-console/bcomm/dircomm.cpp:362 src/qt-console/bcomm/dircomm.cpp:375 +msgid "At prompt waiting for input ..." msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:720 src/wx-console/wxbmainframe.cpp:685 -msgid "Unexpected question has been received.\n" +#: src/qt-console/bcomm/dircomm.cpp:383 +msgid "Command failed." msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:742 -#: src/wx-console/wxbrestorepanel.cpp:764 -msgid "bwx-console: unexpected restore question." +#: src/qt-console/bcomm/dircomm.cpp:455 +msgid "Director disconnected." msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:775 -#, fuzzy -msgid " files selected to be restored." -msgstr "Keine Volumes zum Wiederherstellen gefunden.\n" - -#: src/wx-console/wxbrestorepanel.cpp:780 -msgid " file selected to be restored." +#: src/qt-console/tray-monitor/tray_conf.cpp:165 +#, c-format +msgid "Monitor: name=%s FDtimeout=%s SDtimeout=%s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:787 +#: src/qt-console/tray-monitor/tray_conf.cpp:171 #, c-format -msgid "Please configure your restore (%ld files selected to be restored)..." +msgid "Director: name=%s address=%s FDport=%d\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:797 -#, fuzzy -msgid "Restore failed : no file selected.\n" -msgstr "Mehr als ein Dateiname! %s für Datei: %s\n" - -#: src/wx-console/wxbrestorepanel.cpp:798 -#, fuzzy -msgid "Restore failed : no file selected." -msgstr "Mehr als ein Dateiname! %s für Datei: %s\n" - -#: src/wx-console/wxbrestorepanel.cpp:808 -#, fuzzy -msgid "Restoring, please wait..." -msgstr "Wiederherstellung läuft..." - -#: src/wx-console/wxbrestorepanel.cpp:821 -msgid "Job queued. JobId=" +#: src/qt-console/tray-monitor/tray_conf.cpp:175 +#, c-format +msgid "Client: name=%s address=%s FDport=%d\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:823 -msgid "Restore queued, jobid=" +#: src/qt-console/tray-monitor/tray_conf.cpp:179 +#, c-format +msgid "Storage: name=%s address=%s SDport=%d\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:827 -#, fuzzy -msgid "Job failed." -msgstr "%s Abgebrochen" - -#: src/wx-console/wxbrestorepanel.cpp:828 -msgid "Restore failed, please look at messages.\n" +#: src/qt-console/tray-monitor/tray_conf.cpp:183 +#: src/qt-console/bat_conf.cpp:145 +#, c-format +msgid "ConsoleFont: name=%s font face=%s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:829 -msgid "Restore failed, please look at messages in console." +#: src/qt-console/tray-monitor/tray-monitor.cpp:55 +#, fuzzy, c-format +msgid "" +"\n" +"Version: %s (%s) %s %s %s\n" +"\n" +"Usage: tray-monitor [-c config_file] [-d debug_level]\n" +" -c set configuration file to file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -t test - read configuration and exit\n" +" -? print this message.\n" +"\n" msgstr "" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: dird [-f -s] [-c config_file] [-d debug_level] [config_file]\n" +" -c setze Konfigurationsdatei auf Datei\n" +" -dnn setze debug level auf nn\n" +" -f starte im Vordergrund (für debugging Zwecke)\n" +" -g groupid\n" +" -r starte jetzt\n" +" -s no signals\n" +" -t test - Konfiguration Lesen und beenden\n" +" -u userid\n" +" -v ausführliche Benutzer Meldungen\n" +" -? diese Meldung ausgeben.\n" +"\n" -#: src/wx-console/wxbrestorepanel.cpp:835 -#: src/wx-console/wxbrestorepanel.cpp:836 -#, fuzzy -msgid "Failed to retrieve jobid.\n" -msgstr "Verbindung zu File daemon fehlgeschlagen.\n" - -#: src/wx-console/wxbrestorepanel.cpp:862 +#: src/qt-console/tray-monitor/tray-monitor.cpp:204 +#, c-format msgid "" -"Restore is scheduled to run. bwx-console will not wait for its completion.\n" +"Error: %d Monitor resources defined in %s. You must define one and only one " +"Monitor resource.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:863 +#: src/qt-console/tray-monitor/tray-monitor.cpp:236 +#, fuzzy, c-format msgid "" -"Restore is scheduled to run. bwx-console will not wait for its completion." +"No Client, Storage or Director resource defined in %s\n" +"Without that I don't how to get status from the File, Storage or Director " +"Daemon :-(\n" msgstr "" +"Keine Director resource definiert in %s\n" +"Ohne dies weiss ich nicht wer ich bin :-(\n" -#: src/wx-console/wxbrestorepanel.cpp:889 -msgid "Restore job created, but not yet running." +#: src/qt-console/tray-monitor/tray-monitor.cpp:251 +#, c-format +msgid "" +"Invalid refresh interval defined in %s\n" +"This value must be greater or equal to 1 second and less or equal to 10 " +"minutes (read value: %d).\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:894 +#: src/qt-console/tray-monitor/tray-monitor.cpp:319 #, c-format -msgid "Restore job running, please wait (%ld of %ld files restored)..." +msgid "Error, currentitem is not a Client or a Storage..\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:898 -msgid "Restore job terminated successfully." +#: src/qt-console/tray-monitor/tray-monitor.cpp:354 +#, c-format +msgid "Connecting to Client %s:%d" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:899 -msgid "Restore job terminated successfully.\n" -msgstr "" +#: src/qt-console/tray-monitor/tray-monitor.cpp:356 +msgid "File daemon" +msgstr "File daemon" -#: src/wx-console/wxbrestorepanel.cpp:904 -msgid "Restore job terminated in error, see messages in console." +#: src/qt-console/tray-monitor/tray-monitor.cpp:361 +#, c-format +msgid "Connecting to Storage %s:%d" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:905 -msgid "Restore job terminated in error, see messages.\n" +#: src/qt-console/tray-monitor/tray-monitor.cpp:367 +#: src/qt-console/tray-monitor/tray-monitor.cpp:397 +#, c-format +msgid "Error, currentitem is not a Client, a Storage or a Director..\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:910 -#, fuzzy -msgid "Restore job reported a non-fatal error." -msgstr "Attribute create error. %s" - -#: src/wx-console/wxbrestorepanel.cpp:914 -#, fuzzy -msgid "Restore job reported a fatal error." -msgstr "Attribute create error. %s" - -#: src/wx-console/wxbrestorepanel.cpp:919 -msgid "Restore job cancelled by user." +#: src/qt-console/tray-monitor/tray-monitor.cpp:372 +msgid "Cannot connect to daemon." msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:920 -msgid "Restore job cancelled by user.\n" +#: src/qt-console/tray-monitor/tray-monitor.cpp:381 +#, c-format +msgid "Authentication error : %s" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:925 -#, fuzzy -msgid "Restore job is waiting on File daemon." -msgstr "File daemon" - -#: src/wx-console/wxbrestorepanel.cpp:929 -msgid "Restore job is waiting for new media." +#: src/qt-console/tray-monitor/tray-monitor.cpp:388 +msgid "Opened connection with Director daemon." msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:933 -#, fuzzy -msgid "Restore job is waiting for storage resource." -msgstr "Storage daemon" - -#: src/wx-console/wxbrestorepanel.cpp:937 -msgid "Restore job is waiting for job resource." +#: src/qt-console/tray-monitor/tray-monitor.cpp:391 +msgid "Opened connection with File daemon." msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:941 -msgid "Restore job is waiting for Client resource." +#: src/qt-console/tray-monitor/tray-monitor.cpp:394 +msgid "Opened connection with Storage daemon." msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:945 -msgid "Restore job is waiting for maximum jobs." +#: src/qt-console/tray-monitor/tray-monitor.cpp:445 +msgid "Error : BNET_HARDEOF or BNET_ERROR" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:949 -#, fuzzy -msgid "Restore job is waiting for start time." -msgstr "Job %s wartet %d Sekunden auf die geplante Startzeit.\n" - -#: src/wx-console/wxbrestorepanel.cpp:953 -msgid "Restore job is waiting for higher priority jobs to finish." +#: src/qt-console/tray-monitor/tray-monitor.cpp:454 +msgid "Error : Connection closed." msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1002 +#: src/qt-console/tray-monitor/authenticate.cpp:75 msgid "" -"The restore job has not been started within one minute, bwx-console will not " -"wait for its completion anymore.\n" +"Director authorization problem.\n" +"Most likely the passwords do not agree.\n" +"Please see " msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1003 +#: src/qt-console/tray-monitor/authenticate.cpp:125 +#, fuzzy msgid "" -"The restore job has not been started within one minute, bwx-console will not " -"wait for its completion anymore." -msgstr "" - -#: src/wx-console/wxbrestorepanel.cpp:1013 -msgid "Restore done successfully.\n" -msgstr "" - -#: src/wx-console/wxbrestorepanel.cpp:1014 -msgid "Restore done successfully." -msgstr "" - -#: src/wx-console/wxbrestorepanel.cpp:1086 -msgid "Applying restore configuration changes..." -msgstr "" +"Director and Storage daemon passwords or names not the same.\n" +"Please see " +msgstr "Director und Storage daemon Passworte or Namen nicht gleich.\n" -#: src/wx-console/wxbrestorepanel.cpp:1138 -msgid "Failed to find the selected client." +#: src/qt-console/tray-monitor/authenticate.cpp:132 +#, c-format +msgid "bdird set configuration file to file\n" +" -dnn set debug level to nn\n" +" -s no signals\n" +" -t test - read configuration and exit\n" +" -? print this message.\n" +"\n" msgstr "" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: dird [-f -s] [-c config_file] [-d debug_level] [config_file]\n" +" -c setze Konfigurationsdatei auf Datei\n" +" -dnn setze debug level auf nn\n" +" -f starte im Vordergrund (für debugging Zwecke)\n" +" -g groupid\n" +" -r starte jetzt\n" +" -s no signals\n" +" -t test - Konfiguration Lesen und beenden\n" +" -u userid\n" +" -v ausführliche Benutzer Meldungen\n" +" -? diese Meldung ausgeben.\n" +"\n" -#: src/wx-console/wxbrestorepanel.cpp:1225 -#, fuzzy -msgid "Restore cancelled.\n" -msgstr "%s Abgebrochen" +#: src/qt-console/bat_conf.cpp:142 +#, c-format +msgid "Console: name=%s\n" +msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1226 #, fuzzy -msgid "Restore cancelled." -msgstr "%s Abgebrochen" +#~ msgid "Cannot open current directory: ERR=%s\n" +#~ msgstr "Kann inkludierte Datei nicht öffnen: %s. ERR=%s\n" -#: src/wx-console/wxbrestorepanel.cpp:1248 #, fuzzy -msgid "No results to list." -msgstr "Keine Ergebnisse zu \"list\" Kommando.\n" +#~ msgid "Cannot get current directory: ERR=%s\n" +#~ msgstr "kann Variable operate nicht setzen: ERR=%s\n" -#: src/wx-console/wxbrestorepanel.cpp:1250 #, fuzzy -msgid "No backup found for this client." -msgstr "Kein Job gefunden für: %s.\n" - -#: src/wx-console/wxbrestorepanel.cpp:1257 -msgid "ERROR" -msgstr "" +#~ msgid "Cannot reset current directory: ERR=%s\n" +#~ msgstr "kann Variable operate nicht setzen: ERR=%s\n" -#: src/wx-console/wxbrestorepanel.cpp:1258 #, fuzzy -msgid "Query failed" -msgstr "Abfrage fehlgeschlagen: %s\n" - -#: src/wx-console/wxbrestorepanel.cpp:1260 -msgid "Cannot get previous backups list, see console." -msgstr "" +#~ msgid "CreateSGenerate VSS snapshots failed. ERR=%s\n" +#~ msgstr "Erzeugung des db Path Eintrags %s fehlgeschlagen. ERR=%s\n" -#: src/wx-console/wxbrestorepanel.cpp:1896 -msgid "JobName:" -msgstr "" - -#: src/wx-console/wxbrestorepanel.cpp:1898 #, fuzzy -msgid "Bootstrap:" -msgstr " --> Bootstrap=%s\n" - -#: src/wx-console/wxbrestorepanel.cpp:1900 -msgid "Where:" -msgstr "" - -#: src/wx-console/wxbrestorepanel.cpp:1903 -msgid "Replace:" -msgstr "" - -#: src/wx-console/wxbrestorepanel.cpp:1906 -msgid "ifnewer" -msgstr "" - -#: src/wx-console/wxbrestorepanel.cpp:1907 -msgid "ifolder" -msgstr "" +#~ msgid "VSS was not initialized properly. ERR=%s\n" +#~ msgstr "Kann DB lock nicht initialisieren. ERR=%s\n" -#: src/wx-console/wxbrestorepanel.cpp:1911 #, fuzzy -msgid "FileSet:" -msgstr "FileSet: name=%s\n" +#~ msgid "Disable a job" +#~ msgstr "ist nicht aktiviert" -#: src/wx-console/wxbrestorepanel.cpp:1913 -msgid "Client:" -msgstr "" - -#: src/wx-console/wxbrestorepanel.cpp:1915 #, fuzzy -msgid "Storage:" -msgstr "Storage daemon" - -#: src/wx-console/wxbrestorepanel.cpp:1917 -msgid "When:" -msgstr "" - -#: src/wx-console/wxbrestorepanel.cpp:1920 -msgid "Priority:" -msgstr "" - -#: src/wx-console/wxbrestorepanel.cpp:2028 -msgid "Restoring..." -msgstr "Wiederherstellung läuft..." +#~ msgid "Illegal JobId %s ignored\n" +#~ msgstr "Clone JobId %d gestartet.\n" -#: src/wx-console/console_thread.cpp:125 -#, fuzzy, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Director \"%s\" in config file.\n" -"At least one CA certificate store is required.\n" -msgstr "" -"Weder \"TLS CA Certificate\" noch \"TLS CA Certificate Dir\" sind für " -"Director \"%s\" in %s definert. Mindestens ein CA certificate store wird " -"benötigt wenn \"TLS Verify Peer\" eingesetzt wird.\n" +#~ msgid "1992 Update Media error. VolFiles=%u, CatFiles=%u\n" +#~ msgstr "1992 Update Media Fehler. VolFiles=%u, CatFiles=%u\n" -#: src/wx-console/console_thread.cpp:132 #, fuzzy -msgid "" -"No Director resource defined in config file.\n" -"Without that I don't how to speak to the Director :-(\n" -msgstr "" -"Keine Director resource definiert in %s\n" -"Ohne dies weiss ich nicht wer ich bin :-(\n" - -#: src/wx-console/console_thread.cpp:151 -#, fuzzy, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Console \"%s\" in config file.\n" -msgstr "" -"Weder \"TLS CA Certificate\" noch \"TLS CA Certificate Dir\" sind definiert " -"fürStorage \"%s\" in %s.\n" +#~ msgid "" +#~ "Written by Nicolas Boichat (2004)\n" +#~ "\n" +#~ "Version: %s (%s) %s %s %s\n" +#~ "\n" +#~ "Usage: tray-monitor [-c config_file] [-d debug_level]\n" +#~ " -c set configuration file to file\n" +#~ " -d set debug level to \n" +#~ " -dt print timestamp in debug output\n" +#~ " -t test - read configuration and exit\n" +#~ " -? print this message.\n" +#~ "\n" +#~ msgstr "" +#~ "\n" +#~ "Version: %s (%s)\n" +#~ "\n" +#~ "Usage: dird [-f -s] [-c config_file] [-d debug_level] [config_file]\n" +#~ " -c setze Konfigurationsdatei auf Datei\n" +#~ " -dnn setze debug level auf nn\n" +#~ " -f starte im Vordergrund (für debugging Zwecke)\n" +#~ " -g groupid\n" +#~ " -r starte jetzt\n" +#~ " -s no signals\n" +#~ " -t test - Konfiguration Lesen und beenden\n" +#~ " -u userid\n" +#~ " -v ausführliche Benutzer Meldungen\n" +#~ " -? diese Meldung ausgeben.\n" +#~ "\n" -#: src/wx-console/console_thread.cpp:173 #, fuzzy -msgid "Error while initializing windows sockets...\n" -msgstr "Fehler beim schreiben der bsr Datei.\n" - -#: src/wx-console/console_thread.cpp:189 -msgid "Error while cleaning up windows sockets...\n" -msgstr "" +#~ msgid "Append data error.\n" +#~ msgstr "unbekannt" -#: src/wx-console/console_thread.cpp:228 #, fuzzy -msgid "Error while initializing library." -msgstr "Fehler beim schreiben der bsr Datei.\n" +#~ msgid "Truncate on attributes file failed: ERR=%s\n" +#~ msgstr "Abfrage gescheitert: %s: ERR=%s\n" -#: src/wx-console/console_thread.cpp:256 #, fuzzy -msgid "Cryptographic library initialization failed.\n" -msgstr "Initialisierung der Verschlüsselungsbibliothek fehlgeschlagen.\n" +#~ msgid "" +#~ "Unable to connect to Ingres server.\n" +#~ "Database=%s User=%s\n" +#~ "It is probably not running or your password is incorrect.\n" +#~ msgstr "" +#~ "Kann Verbindung zu MySQL Server nicht aufbauen. \n" +#~ "Datenbank=%s Benutzer=%s\n" +#~ "Der Datenbankserver läuft möglicherweise nicht oder das Passwort ist " +#~ "nicht korrekt.\n" -#: src/wx-console/console_thread.cpp:260 #, fuzzy -msgid "Please correct configuration file.\n" -msgstr "Bitte die Konfigurationsdatei korrigieren: %s\n" +#~ msgid "A user name for Ingres must be supplied.\n" +#~ msgstr "Ein Benutzername für MySQL muss angegeben werden.\n" -#: src/wx-console/console_thread.cpp:302 #, fuzzy -msgid "Error : Library not initialized\n" -msgstr "Initialisierung der Verschlüsselungsbibliothek fehlgeschlagen.\n" +#~ msgid "" +#~ "Unable to connect to DBI interface. Type=%s Database=%s User=%s\n" +#~ "Possible causes: SQL server not running; password incorrect; " +#~ "max_connections exceeded.\n" +#~ msgstr "" +#~ "Kann Verbindung zu PostgreSQL Server nicht aufbauen.\n" +#~ "Datenbank=%s Benutzer=%s\n" +#~ "Der Datenbankserver läuft möglicherweise nicht oder das Passwort ist " +#~ "nicht korrekt.\n" -#: src/wx-console/console_thread.cpp:313 #, fuzzy -msgid "Error : No configuration file loaded\n" -msgstr "Bitte die Konfigurationsdatei korrigieren: %s\n" +#~ msgid "error inserting batch mode: %s" +#~ msgstr "Fehler beim holen von Zeile: %s\n" -#: src/wx-console/console_thread.cpp:323 #, fuzzy -msgid "Connecting...\n" -msgstr "Wiederherstellung läuft..." +#~ msgid "Driver type not specified in Catalog resource.\n" +#~ msgstr "Schlüsselwort %s ist in dieser Ressource nicht erlaubt." -#: src/wx-console/console_thread.cpp:339 #, fuzzy -msgid "Error : No director defined in config file.\n" -msgstr "Keine Job records definiert in %s\n" - -#: src/wx-console/console_thread.cpp:351 -msgid "Multiple directors found in your config file.\n" -msgstr "" - -#: src/wx-console/console_thread.cpp:360 -#, c-format -msgid "Please choose a director (1-%d): " -msgstr "" - -#: src/wx-console/console_thread.cpp:389 -#, c-format -msgid "Passphrase for Console \"%s\" TLS private key: " -msgstr "" - -#: src/wx-console/console_thread.cpp:410 -#, c-format -msgid "Passphrase for Director \"%s\" TLS private key: " -msgstr "" +#~ msgid "A user name for DBI must be supplied.\n" +#~ msgstr "Ein Benutzername für MySQL muss angegeben werden.\n" -#: src/wx-console/console_thread.cpp:432 #, fuzzy -msgid "Failed to connect to the director\n" -msgstr "Verbindung zu File daemon fehlgeschlagen.\n" - -#: src/wx-console/console_thread.cpp:442 -msgid "Connected\n" -msgstr "" - -#: src/wx-console/console_thread.cpp:499 -msgid "<< Unexpected signal received : " -msgstr "" - -#: src/wx-console/console_thread.cpp:519 -msgid "Connection terminated\n" -msgstr "" +#~ msgid " Files=%s Bytes=%s Bytes/sec=%s Errors=%d\n" +#~ msgstr " MigTime=%s MigHiBytes=%s MigLoBytes=%s\n" -#: src/wx-console/wxbconfigpanel.cpp:213 -msgid "Apply" -msgstr "" - -#: src/wx-console/wxbhistorytextctrl.cpp:82 -#: src/wx-console/wxbhistorytextctrl.cpp:153 -#: src/wx-console/wxbmainframe.cpp:291 -msgid "Type your command below:" -msgstr "" - -#: src/wx-console/wxbhistorytextctrl.cpp:117 #, fuzzy -msgid "Unknown command." -msgstr "unbekannt" - -#: src/wx-console/wxbhistorytextctrl.cpp:126 -msgid "Possible completions: " -msgstr "" +#~ msgid "" +#~ "\n" +#~ "\n" +#~ "Bacula ERROR: " +#~ msgstr "Bacula " -#: src/wx-console/main.cpp:119 #, fuzzy -msgid "Bacula bwx-console" -msgstr "Bitte die Konfigurationsdatei korrigieren: %s\n" - -#: src/wx-console/main.cpp:124 src/wx-console/wxbmainframe.cpp:267 -#, c-format -msgid "Welcome to bacula bwx-console %s (%s)!\n" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:246 -msgid "&About...\tF1" -msgstr "" +#~ msgid "Registry service entry point not found" +#~ msgstr "Pool Ressource \"%s\" nicht gefunden.\n" -#: src/wx-console/wxbmainframe.cpp:246 -msgid "Show about dialog" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:248 src/wx-console/wxbmainframe.cpp:619 -msgid "Connect" -msgstr "" +#, fuzzy +#~ msgid "# Bacula bwx-console Configuration File\n" +#~ msgstr "Bitte die Konfigurationsdatei korrigieren: %s\n" -#: src/wx-console/wxbmainframe.cpp:248 src/wx-console/wxbmainframe.cpp:620 -msgid "Connect to the director" -msgstr "" +#, fuzzy +#~ msgid "Close without saving" +#~ msgstr "%s OK -- mit Warnungen" -#: src/wx-console/wxbmainframe.cpp:249 -msgid "Disconnect" -msgstr "" +#, fuzzy +#~ msgid "Unable to write to %s\n" +#~ msgstr "Kann DB lock nicht initialisieren. ERR=%s\n" -#: src/wx-console/wxbmainframe.cpp:249 -msgid "Disconnect of the director" -msgstr "" +#, fuzzy +#~ msgid "Error while saving" +#~ msgstr "Fehler beim schreiben der bsr Datei.\n" -#: src/wx-console/wxbmainframe.cpp:251 #, fuzzy -msgid "Change of configuration file" -msgstr "Bitte die Konfigurationsdatei korrigieren: %s\n" +#~ msgid "Enter restore mode" +#~ msgstr "Job Ressource" -#: src/wx-console/wxbmainframe.cpp:251 #, fuzzy -msgid "Change your default configuration file" -msgstr "Bitte die Konfigurationsdatei korrigieren: %s\n" +#~ msgid "Cancel restore" +#~ msgstr "Job Ressource" -#: src/wx-console/wxbmainframe.cpp:252 #, fuzzy -msgid "Edit your configuration file" -msgstr "Bitte die Konfigurationsdatei korrigieren: %s\n" +#~ msgid "Filename" +#~ msgstr "FileSet: name=%s\n" -#: src/wx-console/wxbmainframe.cpp:254 -msgid "E&xit\tAlt-X" -msgstr "" +#, fuzzy +#~ msgid "RestoreFiles" +#~ msgstr "Wiederherstellung läuft..." -#: src/wx-console/wxbmainframe.cpp:254 -msgid "Quit this program" -msgstr "" +#, fuzzy +#~ msgid "Error while starting restore: " +#~ msgstr "Fehler beim schreiben der bsr Datei.\n" -#: src/wx-console/wxbmainframe.cpp:258 -msgid "&File" -msgstr "" +#, fuzzy +#~ msgid " files selected to be restored." +#~ msgstr "Keine Volumes zum Wiederherstellen gefunden.\n" -#: src/wx-console/wxbmainframe.cpp:259 -msgid "&Help" -msgstr "" +#, fuzzy +#~ msgid "Restore failed : no file selected.\n" +#~ msgstr "Mehr als ein Dateiname! %s für Datei: %s\n" -#: src/wx-console/wxbmainframe.cpp:283 -msgid "" -"Warning : Unicode is disabled because you are using wxWidgets for GTK+ 1.2.\n" -msgstr "" +#, fuzzy +#~ msgid "Restore failed : no file selected." +#~ msgstr "Mehr als ein Dateiname! %s für Datei: %s\n" -#: src/wx-console/wxbmainframe.cpp:287 -msgid "" -"Warning : There is a problem with wxWidgets for GTK+ 2.0 without Unicode " -"support when handling non-ASCII filenames: Every non-ASCII character in such " -"filenames will be replaced by an interrogation mark.\n" -"If this behaviour disturbs you, please build bwx-console against a Unicode " -"version of wxWidgets for GTK+ 2.0.\n" -"---\n" -msgstr "" +#, fuzzy +#~ msgid "Restoring, please wait..." +#~ msgstr "Wiederherstellung läuft..." -#: src/wx-console/wxbmainframe.cpp:298 -msgid "Send" -msgstr "" +#, fuzzy +#~ msgid "Job failed." +#~ msgstr "%s Abgebrochen" -#: src/wx-console/wxbmainframe.cpp:375 src/wx-console/wxbmainframe.cpp:387 -msgid "Error while parsing command line arguments, using defaults.\n" -msgstr "" +#, fuzzy +#~ msgid "Failed to retrieve jobid.\n" +#~ msgstr "Verbindung zu File daemon fehlgeschlagen.\n" -#: src/wx-console/wxbmainframe.cpp:376 src/wx-console/wxbmainframe.cpp:388 -msgid "Usage: bwx-console [-c configfile] [-w tmp]\n" -msgstr "" +#, fuzzy +#~ msgid "Restore job reported a non-fatal error." +#~ msgstr "Attribute create error. %s" -#: src/wx-console/wxbmainframe.cpp:417 -#, c-format -msgid "" -"It seems that it is the first time you run bwx-console.\n" -"This file (%s) has been choosen as default configuration file.\n" -"Do you want to edit it? (if you click No you will have to select another " -"file)" -msgstr "" +#, fuzzy +#~ msgid "Restore job reported a fatal error." +#~ msgstr "Attribute create error. %s" -#: src/wx-console/wxbmainframe.cpp:419 -msgid "First run" -msgstr "" +#, fuzzy +#~ msgid "Restore job is waiting on File daemon." +#~ msgstr "File daemon" -#: src/wx-console/wxbmainframe.cpp:436 -#, c-format -msgid "" -"Unable to read %s\n" -"Error: %s\n" -"Do you want to choose another one? (Press no to edit this file)" -msgstr "" +#, fuzzy +#~ msgid "Restore job is waiting for storage resource." +#~ msgstr "Storage daemon" -#: src/wx-console/wxbmainframe.cpp:438 #, fuzzy -msgid "Unable to read configuration file" -msgstr "Bitte die Konfigurationsdatei korrigieren: %s\n" +#~ msgid "Failed to find the selected storage." +#~ msgstr "Verbindung zu Storage daemon fehlgeschlagen.\n" -#: src/wx-console/wxbmainframe.cpp:450 #, fuzzy -msgid "Please choose a configuration file to use" -msgstr "Bitte die Konfigurationsdatei korrigieren: %s\n" +#~ msgid "Run Restore job" +#~ msgstr "Konnte Migrationsjob nicht starten.\n" -#: src/wx-console/wxbmainframe.cpp:463 -msgid "This configuration file has been successfully read, use it as default?" -msgstr "" +#, fuzzy +#~ msgid "Restore cancelled." +#~ msgstr "%s Abgebrochen" -#: src/wx-console/wxbmainframe.cpp:464 -msgid "Configuration file read successfully" -msgstr "" +#, fuzzy +#~ msgid "No results to list." +#~ msgstr "Keine Ergebnisse zu \"list\" Kommando.\n" -#: src/wx-console/wxbmainframe.cpp:474 -#, fuzzy, c-format -msgid "Using this configuration file: %s\n" -msgstr "Bitte die Konfigurationsdatei korrigieren: %s\n" +#, fuzzy +#~ msgid "No backup found for this client." +#~ msgstr "Kein Job gefunden für: %s.\n" -#: src/wx-console/wxbmainframe.cpp:479 -msgid "Connecting to the director..." -msgstr "" +#, fuzzy +#~ msgid "Query failed" +#~ msgstr "Abfrage fehlgeschlagen: %s\n" -#: src/wx-console/wxbmainframe.cpp:494 -msgid "Failed to unregister a data parser !" -msgstr "" +#, fuzzy +#~ msgid "Bootstrap:" +#~ msgstr " --> Bootstrap=%s\n" -#: src/wx-console/wxbmainframe.cpp:502 -msgid "Quitting.\n" -msgstr "" +#, fuzzy +#~ msgid "FileSet:" +#~ msgstr "FileSet: name=%s\n" -#: src/wx-console/wxbmainframe.cpp:517 -msgid "" -"Welcome to Bacula bwx-console.\n" -"Written by Nicolas Boichat \n" -"Copyright (C), 2005-2007 Free Software Foundation Europe, e.V.\n" -msgstr "" +#, fuzzy +#~ msgid "Storage:" +#~ msgstr "Storage daemon" -#: src/wx-console/wxbmainframe.cpp:521 -msgid "About Bacula bwx-console" -msgstr "" +#~ msgid "Restoring..." +#~ msgstr "Wiederherstellung läuft..." -#: src/wx-console/wxbmainframe.cpp:527 #, fuzzy -msgid "Please choose your default configuration file" -msgstr "Bitte die Konfigurationsdatei korrigieren: %s\n" +#~ msgid "" +#~ "Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined " +#~ "for Director \"%s\" in config file.\n" +#~ "At least one CA certificate store is required.\n" +#~ msgstr "" +#~ "Weder \"TLS CA Certificate\" noch \"TLS CA Certificate Dir\" sind für " +#~ "Director \"%s\" in %s definert. Mindestens ein CA certificate store wird " +#~ "benötigt wenn \"TLS Verify Peer\" eingesetzt wird.\n" -#: src/wx-console/wxbmainframe.cpp:531 #, fuzzy -msgid "Use this configuration file as default?" -msgstr "Bitte die Konfigurationsdatei korrigieren: %s\n" +#~ msgid "" +#~ "No Director resource defined in config file.\n" +#~ "Without that I don't how to speak to the Director :-(\n" +#~ msgstr "" +#~ "Keine Director resource definiert in %s\n" +#~ "Ohne dies weiss ich nicht wer ich bin :-(\n" -#: src/wx-console/wxbmainframe.cpp:532 #, fuzzy -msgid "Configuration file" -msgstr "Bitte die Konfigurationsdatei korrigieren: %s\n" - -#: src/wx-console/wxbmainframe.cpp:603 -msgid "Console thread terminated." -msgstr "" +#~ msgid "" +#~ "Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined " +#~ "for Console \"%s\" in config file.\n" +#~ msgstr "" +#~ "Weder \"TLS CA Certificate\" noch \"TLS CA Certificate Dir\" sind " +#~ "definiert fürStorage \"%s\" in %s.\n" -#: src/wx-console/wxbmainframe.cpp:611 -msgid "Connection to the director lost. Quit program?" -msgstr "" +#, fuzzy +#~ msgid "Error while initializing windows sockets...\n" +#~ msgstr "Fehler beim schreiben der bsr Datei.\n" -#: src/wx-console/wxbmainframe.cpp:612 -msgid "Connection lost" -msgstr "" +#, fuzzy +#~ msgid "Error while initializing library." +#~ msgstr "Fehler beim schreiben der bsr Datei.\n" -#: src/wx-console/wxbmainframe.cpp:628 -msgid "Connected to the director." -msgstr "" +#, fuzzy +#~ msgid "Cryptographic library initialization failed.\n" +#~ msgstr "Initialisierung der Verschlüsselungsbibliothek fehlgeschlagen.\n" -#: src/wx-console/wxbmainframe.cpp:651 -msgid "Reconnect" -msgstr "" +#, fuzzy +#~ msgid "Please correct configuration file.\n" +#~ msgstr "Bitte die Konfigurationsdatei korrigieren: %s\n" -#: src/wx-console/wxbmainframe.cpp:652 -msgid "Reconnect to the director" -msgstr "" +#, fuzzy +#~ msgid "Error : Library not initialized\n" +#~ msgstr "Initialisierung der Verschlüsselungsbibliothek fehlgeschlagen.\n" -#: src/wx-console/wxbmainframe.cpp:666 -msgid "Disconnected of the director." -msgstr "" +#, fuzzy +#~ msgid "Error : No configuration file loaded\n" +#~ msgstr "Bitte die Konfigurationsdatei korrigieren: %s\n" -#: src/wx-console/wxbmainframe.cpp:708 src/wx-console/wxbmainframe.cpp:725 -msgid "bwx-console: unexpected director's question." -msgstr "" +#, fuzzy +#~ msgid "Connecting...\n" +#~ msgstr "Wiederherstellung läuft..." -#: src/qt-console/tray-monitor/tray-monitor.cpp:67 -#, fuzzy, c-format -msgid "" -"\n" -"Version: %s (%s) %s %s %s\n" -"\n" -"Usage: tray-monitor [-c config_file] [-d debug_level]\n" -" -c set configuration file to file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -t test - read configuration and exit\n" -" -? print this message.\n" -"\n" -msgstr "" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: dird [-f -s] [-c config_file] [-d debug_level] [config_file]\n" -" -c setze Konfigurationsdatei auf Datei\n" -" -dnn setze debug level auf nn\n" -" -f starte im Vordergrund (für debugging Zwecke)\n" -" -g groupid\n" -" -r starte jetzt\n" -" -s no signals\n" -" -t test - Konfiguration Lesen und beenden\n" -" -u userid\n" -" -v ausführliche Benutzer Meldungen\n" -" -? diese Meldung ausgeben.\n" -"\n" +#, fuzzy +#~ msgid "Error : No director defined in config file.\n" +#~ msgstr "Keine Job records definiert in %s\n" -#: src/qt-console/bcomm/dircomm.cpp:92 -#, c-format -msgid "Already connected\"%s\".\n" -msgstr "" +#, fuzzy +#~ msgid "Failed to connect to the director\n" +#~ msgstr "Verbindung zu File daemon fehlgeschlagen.\n" -#: src/qt-console/bcomm/dircomm.cpp:105 -#, c-format -msgid "" -"Connecting to Director %s:%d\n" -"\n" -msgstr "" +#, fuzzy +#~ msgid "Unknown command." +#~ msgstr "unbekannt" -#: src/qt-console/bcomm/dircomm.cpp:208 -msgid "Initializing ..." -msgstr "" +#, fuzzy +#~ msgid "Bacula bwx-console" +#~ msgstr "Bitte die Konfigurationsdatei korrigieren: %s\n" -#: src/qt-console/bcomm/dircomm.cpp:224 src/qt-console/console/console.cpp:142 -msgid "Connected" -msgstr "" +#, fuzzy +#~ msgid "Change of configuration file" +#~ msgstr "Bitte die Konfigurationsdatei korrigieren: %s\n" -#: src/qt-console/bcomm/dircomm.cpp:348 -msgid "Command completed ..." -msgstr "" +#, fuzzy +#~ msgid "Change your default configuration file" +#~ msgstr "Bitte die Konfigurationsdatei korrigieren: %s\n" -#: src/qt-console/bcomm/dircomm.cpp:355 src/qt-console/console/console.cpp:379 -msgid "Processing command ..." -msgstr "" +#, fuzzy +#~ msgid "Edit your configuration file" +#~ msgstr "Bitte die Konfigurationsdatei korrigieren: %s\n" -#: src/qt-console/bcomm/dircomm.cpp:362 -msgid "At main prompt waiting for input ..." -msgstr "" +#, fuzzy +#~ msgid "Unable to read configuration file" +#~ msgstr "Bitte die Konfigurationsdatei korrigieren: %s\n" -#: src/qt-console/bcomm/dircomm.cpp:369 src/qt-console/bcomm/dircomm.cpp:382 -msgid "At prompt waiting for input ..." -msgstr "" +#, fuzzy +#~ msgid "Please choose a configuration file to use" +#~ msgstr "Bitte die Konfigurationsdatei korrigieren: %s\n" -#: src/qt-console/bcomm/dircomm.cpp:390 -msgid "Command failed." -msgstr "" +#, fuzzy +#~ msgid "Using this configuration file: %s\n" +#~ msgstr "Bitte die Konfigurationsdatei korrigieren: %s\n" -#: src/qt-console/bcomm/dircomm.cpp:463 -msgid "Director disconnected." -msgstr "" +#, fuzzy +#~ msgid "Please choose your default configuration file" +#~ msgstr "Bitte die Konfigurationsdatei korrigieren: %s\n" -#: src/qt-console/bat_conf.cpp:154 -#, c-format -msgid "Console: name=%s\n" -msgstr "" +#, fuzzy +#~ msgid "Use this configuration file as default?" +#~ msgstr "Bitte die Konfigurationsdatei korrigieren: %s\n" -#: src/qt-console/main.cpp:191 -#, fuzzy, c-format -msgid "" -"\n" -"Version: %s (%s) %s %s %s\n" -"\n" -"Usage: bat [-s] [-c config_file] [-d debug_level] [config_file]\n" -" -c set configuration file to file\n" -" -dnn set debug level to nn\n" -" -s no signals\n" -" -t test - read configuration and exit\n" -" -? print this message.\n" -"\n" -msgstr "" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: dird [-f -s] [-c config_file] [-d debug_level] [config_file]\n" -" -c setze Konfigurationsdatei auf Datei\n" -" -dnn setze debug level auf nn\n" -" -f starte im Vordergrund (für debugging Zwecke)\n" -" -g groupid\n" -" -r starte jetzt\n" -" -s no signals\n" -" -t test - Konfiguration Lesen und beenden\n" -" -u userid\n" -" -v ausführliche Benutzer Meldungen\n" -" -? diese Meldung ausgeben.\n" -"\n" +#, fuzzy +#~ msgid "Configuration file" +#~ msgstr "Bitte die Konfigurationsdatei korrigieren: %s\n" #, fuzzy #~ msgid " Drive %d status unknown.\n" @@ -18633,9 +17814,6 @@ msgstr "" #~ msgid "Unable to open Catalog DB control file %s: ERR=%s\n" #~ msgstr "Kann Catalog DB Steuerdatei nicht öffnen %s: ERR=%s\n" -#~ msgid "Error reading catalog DB control file. ERR=%s\n" -#~ msgstr "Fehler beim Lesen der catalog DB Steuerdatei. ERR=%s\n" - #~ msgid "" #~ "Error, catalog DB control file wrong version. Wanted %d, got %d\n" #~ "Please reinitialize the working directory.\n" @@ -18671,14 +17849,6 @@ msgstr "" #~ msgid "No Catalog resource defined for client %s\n" #~ msgstr "Keine Messages resource definiert in %s\n" -#, fuzzy -#~ msgid "%d files (%s)" -#~ msgstr "%s -- keine Dateien zur Migration." - -#, fuzzy -#~ msgid "An error occurred while extracting files." -#~ msgstr "Fehler beim schreiben der bsr Datei.\n" - #, fuzzy #~ msgid "" #~ "\n" @@ -18721,9 +17891,6 @@ msgstr "" #~ msgid "No Volumes found to migrate.\n" #~ msgstr "Keine Volumes zum Migrieren gefunden.\n" -#~ msgid "No JobIds found to migrate.\n" -#~ msgstr "Keine JobIds zum migrieren gefunden.\n" - #~ msgid "Migration JobId %d started.\n" #~ msgstr "Migration JobId %d gestartet.\n" @@ -18738,9 +17905,5 @@ msgstr "" #~ "Wollte Volume \"%s\"erzeugen, aber , but it already exists. Trying " #~ "again.\n" -#, fuzzy -#~ msgid "Unable to get Volume record: ERR=%s" -#~ msgstr "Konnte Job Eintrag nicht holen. ERR=%s\n" - #~ msgid "Invalid MediaId found.\n" #~ msgstr "Ungültige MediaId gefunden.\n" diff --git a/bacula/po/es.po b/bacula/po/es.po index 32252c80ba..275c62e525 100644 --- a/bacula/po/es.po +++ b/bacula/po/es.po @@ -1,14 +1,14 @@ # Spanish translations for branch package # Traducciones al español para el paquete branch. -# Copyright (C) 2006 Free Software Foundation Europe e.V. +# Copyright (C) 2006-2014 Free Software Foundation Europe e.V. # This file is distributed under the same license as the branch package. # -# , 2006, 2009. +# , 2006-2014 msgid "" msgstr "" "Project-Id-Version: Bacula 3.0.2\n" "Report-Msgid-Bugs-To: bacula-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2013-02-19 18:26+0100\n" +"POT-Creation-Date: 2014-03-23 22:51+0100\n" "PO-Revision-Date: 2009-12-01 16:04-0300\n" "Last-Translator: Victor Hugo dos Santos \n" "Language-Team: Bacula Spanish Team \n" @@ -20,19706 +20,19817 @@ msgstr "" "X-Poedit-Language: Spanish\n" "X-Poedit-SourceCharset: utf-8\n" -#: src/dird/jobq.c:74 -#, c-format -msgid "pthread_attr_init: ERR=%s\n" -msgstr "pthread_attr_init: ERR=%s\n" +#: src/console/authenticate.c:117 src/dird/authenticate.c:121 +msgid "" +"Authorization problem: Remote server did not advertise required TLS " +"support.\n" +msgstr "" +"Problema de Autorización: El servidor remoto no anuncio soporte TLS " +"requerido.\n" -#: src/dird/jobq.c:83 -#, c-format -msgid "pthread_mutex_init: ERR=%s\n" -msgstr "pthread_mutex_init: ERR=%s\n" +#: src/console/authenticate.c:124 src/stored/authenticate.c:154 +#: src/stored/authenticate.c:267 src/stored/authenticate.c:376 +#: src/dird/authenticate.c:128 src/filed/authenticate.c:148 +#: src/filed/authenticate.c:276 +msgid "Authorization problem: Remote server requires TLS.\n" +msgstr "Problema de autorización. Servidor remoto requiere TLS.\n" -#: src/dird/jobq.c:89 -#, c-format -msgid "pthread_cond_init: ERR=%s\n" -msgstr "pthread_cond_init: ERR=%s\n" +#: src/console/authenticate.c:133 +msgid "TLS negotiation failed\n" +msgstr "Negociación TLS fallida\n" -#: src/dird/jobq.c:131 +#: src/console/authenticate.c:147 +#: src/qt-console/tray-monitor/authenticate.cpp:84 #, c-format -msgid "pthread_cond_broadcast: ERR=%s\n" -msgstr "pthread_cond_broadcast: ERR=%s\n" +msgid "Bad response to Hello command: ERR=%s\n" +msgstr "mala respuesta al comando Hello: ERR=%s\n" -#: src/dird/jobq.c:139 -#, c-format -msgid "pthread_cond_wait: ERR=%s\n" -msgstr "pthread_cond_wait: ERR=%s\n" +#: src/console/authenticate.c:154 +#: src/qt-console/tray-monitor/authenticate.cpp:91 +msgid "Director rejected Hello command\n" +msgstr "Director rechazo comando Hello\n" -#: src/dird/jobq.c:180 -#, c-format -msgid "Job %s waiting %d seconds for scheduled start time.\n" -msgstr "Job %s esperando %d segundos para la hora de inicio programada.\n" +#: src/console/authenticate.c:166 +#, fuzzy +msgid "" +"Director authorization problem.\n" +"Most likely the passwords do not agree.\n" +"If you are using TLS, there may have been a certificate validation error " +"during the TLS handshake.\n" +"Please see " +msgstr "" +"Problema de Autorización de Director.\n" +"El más probable es que las contraseñas no están de acuerdo.\n" +"Si usted esta utilizando TLS, puede haber habido un error de validación de " +"certificado durante el apretón de manos TLS.\n" +"Por favor, consulte http://www.bacula.org/en/rel-manual/" +"Bacula_Freque_Asked_Questi.html#SECTION003760000000000000000 para ayuda.\n" -#: src/dird/jobq.c:220 src/dird/job.c:113 src/stored/dircmd.c:200 -#: src/stored/stored.c:560 +#: src/console/console_conf.c:128 src/qt-console/bat_conf.cpp:129 #, c-format -msgid "Unable to init job cond variable: ERR=%s\n" -msgstr "No se puede iniciar job cond varibale: ERR=%s\n" +msgid "No record for %d %s\n" +msgstr "Ningún registro para %d %s\n" -#: src/dird/jobq.c:242 +#: src/console/console_conf.c:137 #, c-format -msgid "pthread_thread_create: ERR=%s\n" -msgstr "pthread_thread_create: ERR=%s\n" +msgid "Console: name=%s rcfile=%s histfile=%s\n" +msgstr "Console: nombre=%s rcfile=%s histfile=%s\n" -#: src/dird/jobq.c:352 +#: src/console/console_conf.c:141 src/qt-console/bat_conf.cpp:138 #, c-format -msgid "pthread_cond_signal: ERR=%s\n" -msgstr "pthread_cond_signal: ERR=%s\n" +msgid "Director: name=%s address=%s DIRport=%d\n" +msgstr "Director: nombre=%s dirección=%s DIRport=%d\n" -#: src/dird/jobq.c:363 +#: src/console/console_conf.c:145 src/console/console_conf.c:221 +#: src/console/console_conf.c:266 src/console/console_conf.c:293 +#: src/stored/stored_conf.c:538 src/stored/stored_conf.c:628 +#: src/stored/stored_conf.c:663 src/filed/filed_conf.c:411 +#: src/filed/filed_conf.c:476 src/filed/filed_conf.c:506 +#: src/qt-console/bat_conf.cpp:149 src/qt-console/bat_conf.cpp:227 +#: src/qt-console/bat_conf.cpp:275 src/qt-console/bat_conf.cpp:305 #, c-format -msgid "pthread_create: ERR=%s\n" -msgstr "pthread_create: ERR=%s\n" +msgid "Unknown resource type %d\n" +msgstr "Tipo de recurso desconocido %d\n" -#: src/dird/jobq.c:647 +#: src/console/console_conf.c:247 src/dird/dird_conf.c:1425 +#: src/dird/dird_conf.c:1440 src/filed/filed_conf.c:439 +#: src/qt-console/tray-monitor/tray_conf.cpp:276 +#: src/qt-console/bat_conf.cpp:253 #, c-format -msgid "Rescheduled Job %s at %s to re-run in %d seconds (%s).\n" -msgstr "Job %s en %s reprogramado para volver a ejecutar en %d segundos(%s).\n" - -#: src/dird/jobq.c:703 src/dird/jobq.c:708 -msgid "previous Job" -msgstr "Job anterior" +msgid "%s item is required in %s resource, but not found.\n" +msgstr "Ítem %s es necesario en recurso %s, pero no se encuentra.\n" -#: src/dird/jobq.c:745 +#: src/console/console_conf.c:310 src/dird/dird_conf.c:1664 +#: src/filed/filed_conf.c:524 src/qt-console/tray-monitor/tray_conf.cpp:360 +#: src/qt-console/bat_conf.cpp:322 #, c-format -msgid "" -"Job canceled. Attempt to read and write same device.\n" -" Read storage \"%s\" (From %s) -- Write storage \"%s\" (From %s)\n" +msgid "Attempt to define second %s resource named \"%s\" is not permitted.\n" msgstr "" -"Job cancelado. Intento de leer y escribir mismo dispositivo.\n" -" Storage de Lectura \"%s\" (desde %s) -- Storage de Escritura \"%s\" (desde " -"%s)\n" +"Segundo intento de definir recurso %s llamado \"%s\" no está permitido.\n" -#: src/dird/ua_select.c:54 +#: src/console/console.c:114 #, c-format -msgid "The current %s retention period is: %s\n" -msgstr "El período actual %s de retención es: %s\n" +msgid "" +"\n" +"Version: " +msgstr "" +"\n" +"Versión: " -#: src/dird/ua_select.c:59 -msgid "Continue? (yes/mod/no): " -msgstr "¿Continuar? (sí/mod/no):" +#: src/console/console.c:166 +msgid "input from file" +msgstr "entrada desde archivo" -#: src/dird/ua_select.c:62 src/dird/ua_run.c:219 -msgid "mod" -msgstr "mod" +#: src/console/console.c:167 +msgid "output to file" +msgstr "salida a archivo" -#: src/dird/ua_select.c:63 -msgid "Enter new retention period: " -msgstr "Introduzca el nuevo periodo de retención:" +#: src/console/console.c:168 +msgid "quit" +msgstr "salir" -#: src/dird/ua_select.c:67 -msgid "Invalid period.\n" -msgstr "Período no válido.\n" +#: src/console/console.c:169 +msgid "output to file and terminal" +msgstr "salida a archivo y pantalla" -#: src/dird/ua_select.c:143 -msgid "You have the following choices:\n" -msgstr "Usted tiene las siguientes opciones:\n" +#: src/console/console.c:170 +msgid "sleep specified time" +msgstr "tiempo de espera especificado" -#: src/dird/ua_select.c:159 -msgid "The defined Storage resources are:\n" -msgstr "Los recursos Storage definidos son:\n" +#: src/console/console.c:171 +msgid "print current time" +msgstr "imprimir hora actual" -#: src/dird/ua_select.c:167 src/dird/ua_dotcmds.c:734 src/dird/ua_cmds.c:995 -#: src/dird/ua_run.c:224 src/wx-console/wxbrestorepanel.cpp:339 -#: src/wx-console/wxbrestorepanel.cpp:355 -#: src/wx-console/wxbrestorepanel.cpp:479 -#: src/wx-console/wxbrestorepanel.cpp:480 -#: src/wx-console/wxbrestorepanel.cpp:490 -#: src/wx-console/wxbrestorepanel.cpp:491 -#: src/wx-console/wxbrestorepanel.cpp:1173 -#: src/wx-console/wxbrestorepanel.cpp:1176 -#: src/wx-console/wxbrestorepanel.cpp:1845 -#: src/wx-console/wxbrestorepanel.cpp:1916 -msgid "Storage" -msgstr "Storage" +#: src/console/console.c:172 +msgid "print Console's version" +msgstr "imprimir la versión de la Consola" -#: src/dird/ua_select.c:167 -msgid "Select Storage resource" -msgstr "Seleccione recurso Storage" +#: src/console/console.c:173 +msgid "echo command string" +msgstr "cadena de comando echo" -#: src/dird/ua_select.c:182 src/dird/ua_restore.c:1296 -msgid "The defined FileSet resources are:\n" -msgstr "Los recursos FileSet definidos son:\n" +#: src/console/console.c:174 +msgid "execute an external command" +msgstr "ejecutar un comando externo" -#: src/dird/ua_select.c:190 src/dird/ua_restore.c:1300 src/dird/ua_run.c:226 -msgid "FileSet" -msgstr "FileSet" +#: src/console/console.c:175 +msgid "exit = quit" +msgstr "exit = salir" -#: src/dird/ua_select.c:190 src/dird/ua_restore.c:1300 -msgid "Select FileSet resource" -msgstr "Seleccionar recurso FileSet" +#: src/console/console.c:176 +msgid "zed_keys = use zed keys instead of bash keys" +msgstr "zed_keys = usar las teclas zed en lugar de teclas bash" -#: src/dird/ua_select.c:220 src/dird/ua_cmds.c:2029 -msgid "Could not find a Catalog resource\n" -msgstr "No pudo encontrar un Catalogo de recursos\n" +#: src/console/console.c:177 +msgid "help listing" +msgstr "listado de ayuda" -#: src/dird/ua_select.c:223 -msgid "You must specify a \"use \" command before continuing.\n" -msgstr "" -"Usted debe especificar un comando \"use \" antes de " -"continuar.\n" +#: src/console/console.c:179 +msgid "set command separator" +msgstr "configurar separador de comandos" -#: src/dird/ua_select.c:229 -msgid "The defined Catalog resources are:\n" -msgstr "Los recursos Catalogo definidos son:\n" +#: src/console/console.c:213 +msgid ": is an invalid command\n" +msgstr ": es un comando invalido\n" -#: src/dird/ua_select.c:237 -msgid "Catalog" -msgstr "Catalogo" +#: src/console/console.c:663 +msgid "Illegal separator character.\n" +msgstr "Ilegal carácter de separación.\n" -#: src/dird/ua_select.c:237 -msgid "Select Catalog resource" -msgstr "Seleccione recurso Catalogo" +#: src/console/console.c:696 +msgid "Command logic problem\n" +msgstr "Problema lógico de comando\n" -#: src/dird/ua_select.c:255 src/dird/ua_select.c:281 -msgid "The defined Job resources are:\n" -msgstr "Los recursos Job definidos son:\n" +#: src/console/console.c:911 +#, fuzzy, c-format +msgid "Can't find %s in Director list\n" +msgstr "No se puede encontrar el recurso Director %s\n" -#: src/dird/ua_select.c:266 src/dird/ua_select.c:289 src/dird/ua_select.c:330 -#: src/dird/ua_select.c:1186 src/dird/dird_conf.c:670 src/dird/ua_prune.c:601 -#: src/dird/ua_run.c:225 -msgid "Job" -msgstr "Job" +#: src/console/console.c:919 +msgid "Available Directors:\n" +msgstr "Directors disponibles:\n" -#: src/dird/ua_select.c:266 src/dird/ua_select.c:289 -msgid "Select Job resource" -msgstr "Seleccione recurso Job" +#: src/console/console.c:923 +#, c-format +msgid "%2d: %s at %s:%d\n" +msgstr "%2d: %s en %s:%d\n" -#: src/dird/ua_select.c:308 -#, fuzzy, c-format -msgid "Error: Restore Job resource \"%s\" does not exist.\n" -msgstr "Error: recurso Pool \"%s\" no existe.\n" +#: src/console/console.c:927 +msgid "Select Director by entering a number: " +msgstr "Seleccione Director introduciendo un numero:" -#: src/dird/ua_select.c:322 -msgid "The defined Restore Job resources are:\n" -msgstr "Los recursos Restore definidos son:\n" +#: src/console/console.c:934 +#, c-format +msgid "%s is not a number. You must enter a number between 1 and %d\n" +msgstr "%s no es un número. Debe introducir un número entre 1 y %d\n" -#: src/dird/ua_select.c:330 -msgid "Select Restore Job" -msgstr "Seleccione recurso Restore" +#: src/console/console.c:941 +#, c-format +msgid "You must enter a number between 1 and %d\n" +msgstr "Debe de introducir un numero entre 1 y %d\n" -#: src/dird/ua_select.c:347 -msgid "The defined Client resources are:\n" -msgstr "Los recursos Clientes definidos son:\n" +#: src/console/console.c:1095 src/stored/stored.c:215 src/dird/dird.c:267 +#: src/filed/filed.c:204 src/qt-console/main.cpp:154 +msgid "Cryptography library initialization failed.\n" +msgstr "Inicialización de la librería de criptografía ha fallado.\n" -#: src/dird/ua_select.c:355 src/dird/ua_select.c:464 src/dird/ua_dotcmds.c:735 -#: src/dird/ua_cmds.c:996 src/dird/ua_run.c:230 -#: src/wx-console/wxbrestorepanel.cpp:336 -#: src/wx-console/wxbrestorepanel.cpp:354 -#: src/wx-console/wxbrestorepanel.cpp:431 -#: src/wx-console/wxbrestorepanel.cpp:432 -#: src/wx-console/wxbrestorepanel.cpp:442 -#: src/wx-console/wxbrestorepanel.cpp:443 -#: src/wx-console/wxbrestorepanel.cpp:700 -#: src/wx-console/wxbrestorepanel.cpp:1133 -#: src/wx-console/wxbrestorepanel.cpp:1136 -#: src/wx-console/wxbrestorepanel.cpp:1238 -#: src/wx-console/wxbrestorepanel.cpp:1838 -#: src/wx-console/wxbrestorepanel.cpp:1840 -#: src/wx-console/wxbrestorepanel.cpp:1914 -#: src/wx-console/wxbrestorepanel.cpp:1970 -msgid "Client" -msgstr "Client" +#: src/console/console.c:1099 src/stored/stored.c:219 src/dird/dird.c:271 +#: src/dird/dird.c:299 src/dird/dird.c:517 src/dird/dird.c:520 +#: src/filed/filed.c:209 src/qt-console/main.cpp:158 +#, c-format +msgid "Please correct configuration file: %s\n" +msgstr "Por favor, corrija el archivo de configuración: %s\n" -#: src/dird/ua_select.c:355 -msgid "Select Client (File daemon) resource" -msgstr "Seleccione recurso Cliente (File Daemon)" +#: src/console/console.c:1129 +#, c-format +msgid "Connecting to Director %s:%d\n" +msgstr "Conectando al Director %s:%d\n" -#: src/dird/ua_select.c:382 +#: src/console/console.c:1146 src/qt-console/bcomm/dircomm.cpp:118 #, c-format -msgid "Error: Client resource %s does not exist.\n" -msgstr "Error: Recurso Cliente %s no existe.\n" +msgid "Failed to initialize TLS context for Console \"%s\".\n" +msgstr "Fallo al inicializar el contexto TLS para la consola \"%s\".\n" -#: src/dird/ua_select.c:407 +#: src/console/console.c:1166 src/qt-console/bcomm/dircomm.cpp:141 #, c-format -msgid "Could not find Client %s: ERR=%s" -msgstr "No se pudo encontrar el Cliente %s: ERR=%s" +msgid "Failed to initialize TLS context for Director \"%s\".\n" +msgstr "Fallo al inicializar el contexto TLS para el Director \"%s\".\n" + +#: src/console/console.c:1198 +msgid "Enter a period to cancel a command.\n" +msgstr "Introduzca un período para cancelar un comando.\n" + +#: src/console/console.c:1284 src/console/console.c:1314 +#: src/stored/stored.c:342 src/dird/dird.c:607 src/dird/dird.c:813 +#: src/dird/dird.c:868 src/dird/dird.c:907 src/filed/filed.c:366 +#: src/filed/filed.c:566 src/qt-console/main.cpp:213 +#: src/qt-console/main.cpp:243 +msgid "TLS required but not configured in Bacula.\n" +msgstr "Se requiere TLS pero no está configurado en Bacula.\n" -#: src/dird/ua_select.c:417 src/dird/ua_select.c:471 +#: src/console/console.c:1292 src/qt-console/main.cpp:221 #, c-format -msgid "Could not find Client \"%s\": ERR=%s" -msgstr "No se pudo encontrar Cliente \"%s\": ERR=%s" +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Director \"%s\" in %s. At least one CA certificate store is required.\n" +msgstr "" +"Ni \"Certificado TLS CA\" o \"Directorio de Certificado TLS CA\" están " +"definidos para Director \"%s\" en %s. Por lo menos un almacén de " +"Certificados CA es necesario.\n" -#: src/dird/ua_select.c:446 +#: src/console/console.c:1301 src/qt-console/main.cpp:230 #, c-format -msgid "Error obtaining client ids. ERR=%s\n" -msgstr "Error al obtener el ID del cliente. ERR=%s\n" +msgid "" +"No Director resource defined in %s\n" +"Without that I don't how to speak to the Director :-(\n" +msgstr "" +"Recurso Director no definido en %s\n" +"Sin eso no sé cómo hablar con el Director :-(\n" -#: src/dird/ua_select.c:450 -msgid "No clients defined. You must run a job before using this command.\n" +#: src/console/console.c:1321 src/qt-console/main.cpp:251 +#, c-format +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Console \"%s\" in %s.\n" msgstr "" -"Clientes no definidos. Usted debe ejecutar un Job antes de usar este " -"comando.\n" +"Ni \"Certificado TLS CA\" o \"Directorio de Certificado TLS CA\" están " +"definidos para Console \"%s\" en %s.\n" -#: src/dird/ua_select.c:454 -msgid "Defined Clients:\n" -msgstr "Clientes definidos:\n" +#: src/console/console.c:1347 +msgid "Too many arguments on input command.\n" +msgstr "Demasiados argumentos en comando de entrada.\n" -#: src/dird/ua_select.c:464 -msgid "Select the Client" -msgstr "Seleccione el Cliente" +#: src/console/console.c:1351 +msgid "First argument to input command must be a filename.\n" +msgstr "" +"Primer argumento para comandos de entrada debe ser un nombre de archivo.\n" -#: src/dird/ua_select.c:497 src/dird/ua_select.c:521 src/dird/ua_select.c:566 +#: src/console/console.c:1357 #, c-format -msgid "Could not find Pool \"%s\": ERR=%s" -msgstr "No se pudo encontrar Pool \"%s\": ERR=%s" +msgid "Cannot open file %s for input. ERR=%s\n" +msgstr "No se puede abrir el archivo %s para entrada. ERR=%s\n" -#: src/dird/ua_select.c:532 src/dird/ua_output.c:476 src/dird/ua_update.c:436 +#: src/console/console.c:1389 +msgid "Too many arguments on output/tee command.\n" +msgstr "Demasiados argumentos en la salida del comando output/tee.\n" + +#: src/console/console.c:1406 #, c-format -msgid "Error obtaining pool ids. ERR=%s\n" -msgstr "Error al obteniendo pool ids. ERR=%s\n" +msgid "Cannot open file %s for output. ERR=%s\n" +msgstr "No se puede abrir el archivo %s para salida. ERR=%s\n" -#: src/dird/ua_select.c:536 -msgid "No pools defined. Use the \"create\" command to create one.\n" -msgstr "Pools no definidos. Utilice el comando \"create\" para crear uno.\n" - -#: src/dird/ua_select.c:540 -msgid "Defined Pools:\n" -msgstr "Pools definidos:\n" - -#: src/dird/ua_select.c:542 src/dird/ua_select.c:562 src/dird/ua_update.c:365 -#: src/baconfig.h:88 -msgid "*None*" -msgstr "*Ninguno*" - -#: src/dird/ua_select.c:553 src/dird/ua_select.c:666 src/dird/ua_update.c:616 -#: src/dird/ua_run.c:238 src/wx-console/wxbrestorepanel.cpp:338 -#: src/wx-console/wxbrestorepanel.cpp:527 -#: src/wx-console/wxbrestorepanel.cpp:537 -#: src/wx-console/wxbrestorepanel.cpp:1834 -msgid "Pool" -msgstr "Pool" +#: src/console/console.c:1425 +msgid "Too many arguments. Enclose command in double quotes.\n" +msgstr "Demasiados argumentos. Incluya comando entre comillas dobles.\n" -#: src/dird/ua_select.c:553 -msgid "Select the Pool" -msgstr "Seleccione el Pool" +#: src/console/console.c:1434 +#, c-format +msgid "Cannot popen(\"%s\", \"r\"): ERR=%s\n" +msgstr "No puede popen(\"%s\", \"r\"): ERR=%s\n" -#: src/dird/ua_select.c:591 +#: src/console/console.c:1446 src/stored/autochanger.c:665 #, c-format -msgid "No access to Pool \"%s\"\n" -msgstr "No tienen acceso al Pool \"%s\"\n" +msgid "Autochanger error: ERR=%s\n" +msgstr "Auto-cambiador error: ERR=%s\n" -#: src/dird/ua_select.c:623 -msgid "Enter *MediaId or Volume name: " -msgstr "Introduzca MediaId o nombre del Volumen:" +#: src/cats/sql_list.c:46 +#, c-format +msgid "Query failed: %s\n" +msgstr "Consulta fallida: %s\n" -#: src/dird/ua_select.c:658 -msgid "The defined Pool resources are:\n" -msgstr "Los recursos Pool definidos son:\n" +#: src/cats/sql_list.c:262 +msgid "These JobIds have copies as follows:\n" +msgstr "Estos JobIds tienen copias de la siguiente manera:\n" -#: src/dird/ua_select.c:666 -msgid "Select Pool resource" -msgstr "Seleccione recurso Pool" +#: src/cats/sql_list.c:264 +msgid "The catalog contains copies as follows:\n" +msgstr "El catálogo contiene copias de la siguiente manera:\n" -#: src/dird/ua_select.c:690 src/dird/ua_restore.c:555 +#: src/cats/sql_get.c:139 #, c-format -msgid "Error: Pool resource \"%s\" does not exist.\n" -msgstr "Error: recurso Pool \"%s\" no existe.\n" +msgid "Error fetching row: %s\n" +msgstr "Error obteniendo fila: %s\n" -#: src/dird/ua_select.c:701 -msgid "Enter the JobId to select: " -msgstr "Introduzca el JobId para seleccionar:" +#: src/cats/sql_get.c:146 +#, fuzzy, c-format +msgid "get_file_record want 1 got rows=%d PathId=%s FilenameId=%s\n" +msgstr "get_file_record falta 1 obtuvo filas=%d\n" -#: src/dird/ua_select.c:739 +#: src/cats/sql_get.c:154 #, c-format -msgid "Could not find Job \"%s\": ERR=%s" -msgstr "No pudo encontrar Job \"%s\": ERR=%s" +msgid "File record for PathId=%s FilenameId=%s not found.\n" +msgstr "Registro File para PathID=%s FilenameID=%s no encontrado.\n" + +#: src/cats/sql_get.c:160 +msgid "File record not found in Catalog.\n" +msgstr "Registro File no se encuentra en Catalogo.\n" -#: src/dird/ua_select.c:819 +#: src/cats/sql_get.c:187 #, c-format -msgid "Automatically selected %s: %s\n" -msgstr "Seleccionado automáticamente %s: %s\n" +msgid "More than one Filename!: %s for file: %s\n" +msgstr "Más de un Filename!: %s en archivo: %s\n" -#: src/dird/ua_select.c:830 +#: src/cats/sql_get.c:193 src/cats/sql_get.c:246 src/cats/sql_get.c:623 +#: src/cats/sql_get.c:724 src/cats/sql_get.c:1043 src/cats/sql.c:341 +#: src/cats/sql.c:348 src/cats/sql_create.c:584 src/cats/postgresql.c:153 #, c-format -msgid "" -"Your request has multiple choices for \"%s\". Selection is not possible in " -"batch mode.\n" -msgstr "" -"Su petición ha múltiples opciones para \"%s\". La selección no es posible en " -"modo batch.\n" +msgid "error fetching row: %s\n" +msgstr "error al obtener la fila:%s\n" -#: src/dird/ua_select.c:848 +#: src/cats/sql_get.c:197 #, c-format -msgid "Selection list for \"%s\" is empty!\n" -msgstr "Lista de selección para \"%s\" está vacía!\n" +msgid "Get DB Filename record %s found bad record: %d\n" +msgstr "Obtener registro BD Filename %s encuentro registro malo: %d\n" -#: src/dird/ua_select.c:854 +#: src/cats/sql_get.c:203 #, c-format -msgid "Automatically selected: %s\n" -msgstr "Seleccionado automáticamente: %s\n" +msgid "Filename record: %s not found.\n" +msgstr "Registro Filename: %s no encontrado.\n" -#: src/dird/ua_select.c:866 -msgid "Selection aborted, nothing done.\n" -msgstr "Selección abortada, no hay nada hecho.\n" +#: src/cats/sql_get.c:207 +#, c-format +msgid "Filename record: %s not found in Catalog.\n" +msgstr "Registro Filename: %s no encontrado en Catalogo.\n" -#: src/dird/ua_select.c:871 +#: src/cats/sql_get.c:239 src/cats/sql_create.c:577 #, c-format -msgid "Please enter a number between 1 and %d\n" -msgstr "Por favor, introduzca un número entre 1 y %d\n" +msgid "More than one Path!: %s for path: %s\n" +msgstr "Mas de un Path!: %s para path: %s\n" -#: src/dird/ua_select.c:920 -msgid "Storage name given twice.\n" -msgstr "Nombre de Storage especificado dos veces.\n" +#: src/cats/sql_get.c:250 +#, c-format +msgid "Get DB path record %s found bad record: %s\n" +msgstr "Obtener registro ruta %s de BD encontró malo registro: %s\n" -#: src/dird/ua_select.c:937 +#: src/cats/sql_get.c:263 #, c-format -msgid "Expecting jobid=nn command, got: %s\n" -msgstr "Esperando comando jobid=nn, obtuvo: %s.\n" +msgid "Path record: %s not found.\n" +msgstr "Registro Path: %s no encontrado.\n" -#: src/dird/ua_select.c:941 +#: src/cats/sql_get.c:267 #, c-format -msgid "JobId %s is not running.\n" -msgstr "JobId %s no está en ejecución.\n" +msgid "Path record: %s not found in Catalog.\n" +msgstr "Registro Path: %s no encontrado en el Catalogo.\n" -#: src/dird/ua_select.c:951 +#: src/cats/sql_get.c:306 #, c-format -msgid "Expecting job=xxx, got: %s.\n" -msgstr "Esperando job=xxx, obtuvo: %s.\n" +msgid "No Job found for JobId %s\n" +msgstr "No se encontró un job para el JobId %s\n" -#: src/dird/ua_select.c:955 src/dird/ua_select.c:967 +#: src/cats/sql_get.c:379 src/cats/sql_get.c:436 #, c-format -msgid "Job \"%s\" is not running.\n" -msgstr "Job \"%s\" no está en ejecución.\n" +msgid "No volumes found for JobId=%d\n" +msgstr "Volúmenes no encontrados para JobId=%d\n" -#: src/dird/ua_select.c:963 +#: src/cats/sql_get.c:385 src/cats/sql_get.c:447 #, c-format -msgid "Expecting ujobid=xxx, got: %s.\n" -msgstr "Esperando ujobid=xxx, obtuvo: %s.\n" +msgid "Error fetching row %d: ERR=%s\n" +msgstr "Error obteniendo fila %d: ERR=%s\n" -#: src/dird/ua_select.c:983 +#: src/cats/sql_get.c:399 #, c-format -msgid "Storage resource \"%s\": not found\n" -msgstr "Recurso Storage \"%s\": No encontrado\n" +msgid "No Volume for JobId %d found in Catalog.\n" +msgstr "Volúmenes para JobId=%d no encontrado en el Catalogo.\n" -#: src/dird/ua_select.c:1015 -msgid "Enter autochanger drive[0]: " -msgstr "Introduzca unidad Autochanger [0]:" +#: src/cats/sql_get.c:540 +#, c-format +msgid "Pool id select failed: ERR=%s\n" +msgstr "Fallo al selecciona id del Pool: ERR=%s\n" -#: src/dird/ua_select.c:1036 -msgid "Enter autochanger slot: " -msgstr "Introduzca ranura Autochanger:" +#: src/cats/sql_get.c:577 +#, c-format +msgid "Client id select failed: ERR=%s\n" +msgstr "Fallo al seleccionar ID del Cliente: ERR=%s\n" -#: src/dird/ua_select.c:1066 -msgid "Media Types defined in conf file:\n" -msgstr "Tipos de Media definidos en el archivo de configuración:\n" +#: src/cats/sql_get.c:618 +#, c-format +msgid "More than one Pool!: %s\n" +msgstr "Mas de un Poll!: %s\n" -#: src/dird/ua_select.c:1072 -msgid "Media Type" -msgstr "Tipo de Media" +#: src/cats/sql_get.c:681 +msgid "Pool record not found in Catalog.\n" +msgstr "Registro del Pool no encontrado en Catalogo.\n" -#: src/dird/ua_select.c:1072 -msgid "Select the Media Type" -msgstr "Seleccione el Tipo de Media" +#: src/cats/sql_get.c:719 +#, c-format +msgid "More than one Client!: %s\n" +msgstr "Mas de un Cliente!: %s\n" -#: src/dird/ua_select.c:1111 -#, fuzzy, c-format -msgid "JobId %s is not running. Use Job name to %s inactive jobs.\n" -msgstr "" -"JobId %s no está en ejecución. Utilice el nombre del Job para cancelar jobs " -"inactivo.\n" +#: src/cats/sql_get.c:736 src/cats/sql_get.c:740 +msgid "Client record not found in Catalog.\n" +msgstr "Registro de cliente no encontrado en catalogo.\n" -#: src/dird/ua_select.c:1120 src/dird/ua_select.c:1130 +#: src/cats/sql_get.c:767 #, c-format -msgid "Warning Job %s is not running. Continuing anyway ...\n" -msgstr "" -"Advertencia Job %s no está¡ en ejecución. Continuar de todos modos ...\n" - -#: src/dird/ua_select.c:1140 src/dird/ua_cmds.c:692 src/dird/ua_cmds.c:738 -msgid "Unauthorized command from this console.\n" -msgstr "Comando no autorizado desde esta consola.\n" +msgid "More than one Counter!: %d\n" +msgstr "Mas de un Contador!: %d\n" -#: src/dird/ua_select.c:1165 src/stored/status.c:538 src/filed/status.c:241 -msgid "No Jobs running.\n" -msgstr "No hay Jobs en ejecución.\n" +#: src/cats/sql_get.c:772 +#, c-format +msgid "error fetching Counter row: %s\n" +msgstr "error al obtener fila Contador: %s\n" -#: src/dird/ua_select.c:1167 -msgid "None of your jobs are running.\n" -msgstr "Ninguno de sus trabajos se está ejecutando.\n" +#: src/cats/sql_get.c:792 +#, c-format +msgid "Counter record: %s not found in Catalog.\n" +msgstr "registro Contador: %s no encontrado en Catalogo.\n" -#: src/dird/ua_select.c:1172 -msgid "Select Job:\n" -msgstr "Seleccione Job:\n" +#: src/cats/sql_get.c:832 +#, c-format +msgid "Error got %s FileSets but expected only one!\n" +msgstr "Error al obtener %s FileSets pero se esperaba sólo uno!\n" -#: src/dird/ua_select.c:1181 +#: src/cats/sql_get.c:837 #, c-format -msgid "JobId=%s Job=%s" -msgstr "JobId=%s Job=%s" +msgid "FileSet record \"%s\" not found.\n" +msgstr "Registro FileSet \"%s\" no encontrado.\n" -#: src/dird/ua_select.c:1185 -#, fuzzy, c-format -msgid "Choose Job to %s" -msgstr "Elija Job para cancelar" +#: src/cats/sql_get.c:847 +msgid "FileSet record not found in Catalog.\n" +msgstr "Registro FileSet no encontrado en Catalogo.\n" -#: src/dird/ua_select.c:1192 +#: src/cats/sql_get.c:943 #, c-format -msgid "" -"Cancel: %s\n" -"\n" -"%s" -msgstr "" -"Cancelar: %s\n" -"\n" -"%s" +msgid "Media id select failed: ERR=%s\n" +msgstr "Fallo al seleccionar ID del Medio: ERR=%s\n" -#: src/dird/ua_select.c:1193 -msgid "Confirm cancel?" -msgstr "Confirmar cancelar?" +#: src/cats/sql_get.c:981 +#, c-format +msgid "query dbids failed: ERR=%s\n" +msgstr "Consulta fallida a dbids: ERR=%s\n" -#: src/dird/ua_select.c:1199 -msgid "Confirm cancel (yes/no): " -msgstr "Confirmar cancelar(si/no): " +#: src/cats/sql_get.c:1038 +#, c-format +msgid "More than one Volume!: %s\n" +msgstr "Mas de un Volumen!: %s\n" -#: src/dird/ua_select.c:1208 src/dird/ua_cmds.c:733 src/dird/ua_cmds.c:1100 +#: src/cats/sql_get.c:1094 #, c-format -msgid "Job \"%s\" not found.\n" -msgstr "Job \"%s\" no encontrado.\n" +msgid "Media record MediaId=%s not found.\n" +msgstr "Registro Media MediaID=%s no encontrado.\n" -#: src/dird/bsr.c:173 +#: src/cats/sql_get.c:1097 #, c-format -msgid "Unable to get Job record. ERR=%s\n" -msgstr "No se pudo obtener registro de Job. ERR=%s\n" +msgid "Media record for Volume \"%s\" not found.\n" +msgstr "Registro Media para Volumen \"%s\" no encontrado.\n" -#: src/dird/bsr.c:184 +#: src/cats/sql_get.c:1104 #, c-format -msgid "Unable to get Job Volume Parameters. ERR=%s\n" -msgstr "No se pudo obtener Parámetros de Volumen de Job. ERR=%s\n" +msgid "Media record for MediaId=%u not found in Catalog.\n" +msgstr "Registro Media para MediaId=%u no encontrado en el Catalogo.\n" -#: src/dird/bsr.c:232 +#: src/cats/sql_get.c:1107 #, c-format -msgid "Unable to create bootstrap file %s. ERR=%s\n" -msgstr "No se puede crear el archivo bootstrap %s. ERR=%s\n" +msgid "Media record for Vol=%s not found in Catalog.\n" +msgstr "Registro Media para Volumen=%s no encontrado en el Catalogo.\n" -#: src/dird/bsr.c:241 -msgid "No files found to read. No bootstrap file written.\n" +#: src/cats/sql_get.c:1140 src/cats/sql_create.c:1183 +msgid "ERR=JobIds are empty\n" +msgstr "ERR=JobIds están vacíos\n" + +#: src/cats/sql_find.c:86 src/cats/sql_find.c:115 src/cats/sql_find.c:170 +#, c-format +msgid "" +"Query error for start time request: ERR=%s\n" +"CMD=%s\n" msgstr "" -"Ninguno archivo encontrado para leer. Ninguno archivo bootstrap escrito.\n" +"Error de consulta al solicitar tiempo inicial: ERR=%s\n" +"CMD=%s\n" -#: src/dird/bsr.c:245 -msgid "Error writing bsr file.\n" -msgstr "Error escribiendo archivo bsr.\n" +#: src/cats/sql_find.c:92 src/cats/sql_find.c:176 +msgid "No prior Full backup Job record found.\n" +msgstr "No encontrado registro anterior de Job de respaldo completo.\n" -#: src/dird/bsr.c:250 +#: src/cats/sql_find.c:104 #, c-format -msgid "Bootstrap records written to %s\n" -msgstr "Registros Bootstrap escritos para %s\n" +msgid "Unknown level=%d\n" +msgstr "Nivel desconocido=%d\n" -#: src/dird/bsr.c:298 +#: src/cats/sql_find.c:121 +#, c-format msgid "" -"The job will require the following\n" -" Volume(s) Storage(s) SD Device(s)\n" -"===========================================================================\n" +"No Job record found: ERR=%s\n" +"CMD=%s\n" msgstr "" -"El job irá requerir los siguientes\n" -" Storage(s) Dispositivo(s) SD Volumen(es)\n" -"===========================================================================\n" +"No se encuentra el registro de trabajo: ERR=%s\n" +" CMD=%s\n" -#: src/dird/bsr.c:317 -msgid "No Volumes found to restore.\n" -msgstr "Volúmenes no encontrados para restaurar.\n" +#: src/cats/sql_find.c:279 +#, c-format +msgid "Unknown Job level=%d\n" +msgstr "Nivel del Job desconocido=%d\n" -#: src/dird/bsr.c:319 -msgid "" -"\n" -"Volumes marked with \"*\" are online.\n" -msgstr "" -"\n" -"Volúmenes marcados con \"*\" están en línea.\n" +#: src/cats/sql_find.c:289 +#, c-format +msgid "No Job found for: %s.\n" +msgstr "No se encontró ningún Job para: %s.\n" -#: src/dird/ua_server.c:69 +#: src/cats/sql_find.c:300 #, c-format -msgid "Cannot create UA thread: %s\n" -msgstr "No se puede crear hilo UA: %s\n" +msgid "No Job found for: %s\n" +msgstr "Job no encontrado para:%s\n" -#: src/dird/ua_server.c:159 -msgid "You have messages.\n" -msgstr "Usted tiene mensajes.\n" +#: src/cats/sql_find.c:386 +#, c-format +msgid "Request for Volume item %d greater than max %d or less than 1\n" +msgstr "Solicitud de ítem Volumen %d mayor que el máximo %d o menor que 1\n" -#: src/dird/verify.c:86 src/dird/verify.c:318 +#: src/cats/sql_find.c:401 #, c-format -msgid "Unimplemented Verify level %d(%c)\n" -msgstr "Nivel Verify no implementado %d(%c)\n" +msgid "No Volume record found for item %d.\n" +msgstr "Registro de ítem Volumen no encontrado %d.\n" + +#: src/cats/cats_dummy.c:27 +msgid "Please replace this null libbaccats library with a proper one.\n" +msgstr "" -#: src/dird/verify.c:148 +#: src/cats/sql.c:185 +#, c-format msgid "" -"Unable to find JobId of previous InitCatalog Job.\n" -"Please run a Verify with Level=InitCatalog before\n" -"running the current Job.\n" +"Potential performance problem:\n" +"max_connections=%d set for %s database \"%s\" should be larger than " +"Director's MaxConcurrentJobs=%d\n" msgstr "" -"No se puede encontrar JobId de Job InitCatalog anterior.\n" -"Por favor, ejecutar Verificar con Nivel=InitCatalog antes de\n" -" ejecutar el Job actual.\n" -#: src/dird/verify.c:153 -msgid "Unable to find JobId of previous Job for this client.\n" -msgstr "No se puede encontrar JobId del trabajo anterior por este cliente.\n" +#: src/cats/sql.c:230 +#, c-format +msgid "" +"query %s failed:\n" +"%s\n" +msgstr "" +"consulta %s fallida:\n" +"%s\n" -#: src/dird/verify.c:170 +#: src/cats/sql.c:252 #, c-format -msgid "Could not get job record for previous Job. ERR=%s" -msgstr "No se ha podido obtener el registro Job para Job anterior. ERR=%s" +msgid "" +"insert %s failed:\n" +"%s\n" +msgstr "" +"Inserción %s fallida:\n" +"%s\n" -#: src/dird/verify.c:176 +#: src/cats/sql.c:262 #, c-format -msgid "Last Job %d did not terminate normally. JobStatus=%c\n" -msgstr "Último Job %d no termino normalmente. JobStatus=%c\n" +msgid "Insertion problem: affected_rows=%s\n" +msgstr "Problemas con la inserción: filas afectadas=%s\n" -#: src/dird/verify.c:180 +#: src/cats/sql.c:283 #, c-format -msgid "Verifying against JobId=%d Job=%s\n" -msgstr "Verificar contra JobId=%d Job=%s\n" +msgid "" +"update %s failed:\n" +"%s\n" +msgstr "" +"Actualizar %s fallida:\n" +"%s\n" -#: src/dird/verify.c:219 +#: src/cats/sql.c:293 #, c-format -msgid "Start Verify JobId=%s Level=%s Job=%s\n" -msgstr "Inicio Verificar JobId=%s Nivel=%s Job=%s\n" +msgid "Update failed: affected_rows=%s for %s\n" +msgstr "Actualización fallida: celdas afectadas =%s por %s\n" -#: src/dird/verify.c:305 -msgid "Deprecated feature ... use bootstrap.\n" -msgstr "Función obsoleta ... use bootstrap.\n" +#: src/cats/sql.c:315 +#, c-format +msgid "" +"delete %s failed:\n" +"%s\n" +msgstr "" +"Borrado %s fallido:\n" +"%s\n" -#: src/dird/verify.c:372 +#: src/cats/sql.c:409 #, c-format -msgid "Unimplemented verify level %d\n" -msgstr "Nivel Verify no implementado %d\n" +msgid "Path length is zero. File=%s\n" +msgstr "La longitud de la ruta es nula. Archivo=%s\n" -#: src/dird/verify.c:421 -msgid "Verify OK" -msgstr "Verificar OK" +#: src/cats/sql.c:604 +msgid "No results to list.\n" +msgstr "No hay resultados para listar.\n" -#: src/dird/verify.c:425 -msgid "*** Verify Error ***" -msgstr "*** Verificar Error ***" +#: src/cats/sql.c:722 +#, fuzzy +msgid "Could not init database batch connection\n" +msgstr "No se pudo iniciar base de datos de Bacula\n" -#: src/dird/verify.c:429 -msgid "Verify warnings" -msgstr "Verificar advertencias" +#: src/cats/sql.c:728 +#, c-format +msgid "Could not open database \"%s\": ERR=%s\n" +msgstr "No se pudo abrir la base de datos \"%s\": ERR=%s\n" -#: src/dird/verify.c:432 -msgid "Verify Canceled" -msgstr "Verificar Cancelada" +#: src/cats/sql_create.c:89 +#, c-format +msgid "Create DB Job record %s failed. ERR=%s\n" +msgstr "Creación de registro de Job %s en BD fallido. ERR=%s\n" -#: src/dird/verify.c:435 -msgid "Verify Differences" -msgstr "Verificar Diferencias" +#: src/cats/sql_create.c:133 +#, c-format +msgid "Create JobMedia record %s failed: ERR=%s\n" +msgstr "Creación de registro de JobMedia %s fallido. ERR=%s\n" -#: src/dird/verify.c:440 +#: src/cats/sql_create.c:142 #, c-format -msgid "Inappropriate term code: %d %c\n" -msgstr "Inadecuado código de terminación: %d %c\n" +msgid "Update Media record %s failed: ERR=%s\n" +msgstr "Actualización del registro de Media %s fallido: ERR=%s\n" -#: src/dird/verify.c:454 -#, fuzzy, c-format -msgid "" -"%s %s %s (%s):\n" -" Build OS: %s %s %s\n" -" JobId: %d\n" -" Job: %s\n" -" FileSet: %s\n" -" Verify Level: %s\n" -" Client: %s\n" -" Verify JobId: %d\n" -" Verify Job: %s\n" -" Start time: %s\n" -" End time: %s\n" -" Files Expected: %s\n" -" Files Examined: %s\n" -" Non-fatal FD errors: %d\n" -" FD termination status: %s\n" -" SD termination status: %s\n" -" Termination: %s\n" -"\n" -msgstr "" -"%s %s %s (%s): %s\n" -" Build OS: %s %s %s\n" -" JobId: %d\n" -" Job: %s\n" -" FileSet: %s\n" -" Verificar Nivel: %s\n" -" Cliente: %s\n" -" Verificar JobId: %d\n" -" Verificar Job: %s\n" -" Hora de inicio: %s\n" -" Hora de finalización: %s\n" -" Archivos Esperado: %s\n" -" Archivos Examinados: %s\n" -" No-fatal FD errores: %d\n" -" Estado de terminación del FD: %s\n" -" Estado de terminación del SD: %s\n" -" Terminación: %s\n" -"\n" +#: src/cats/sql_create.c:177 +#, c-format +msgid "pool record %s already exists\n" +msgstr "registro del pool %s ya existe\n" -#: src/dird/verify.c:489 -#, fuzzy, c-format -msgid "" -"%s %s %s (%s):\n" -" Build: %s %s %s\n" -" JobId: %d\n" -" Job: %s\n" -" FileSet: %s\n" -" Verify Level: %s\n" -" Client: %s\n" -" Verify JobId: %d\n" -" Verify Job: %s\n" -" Start time: %s\n" -" End time: %s\n" -" Files Examined: %s\n" -" Non-fatal FD errors: %d\n" -" FD termination status: %s\n" -" Termination: %s\n" -"\n" -msgstr "" -"%s %s %s (%s): %s\n" -" Build: %s %s %s\n" -" JobId: %d\n" -" Job: %s\n" -" FileSet: %s\n" -" Verificar Nivel: %s\n" -" Cliente: %s\n" -" Verificar JobId: %d\n" -" Verificar Job: %s\n" -" Hora de Inicio: %s\n" -" Hora de Finalización: %s\n" -" Archivos Examinados: %s\n" -" No-fatal FD errores: %d\n" -" FD estado de finalización: %s\n" -" Terminación: %s\n" -"\n" +#: src/cats/sql_create.c:209 +#, c-format +msgid "Create db Pool record %s failed: ERR=%s\n" +msgstr "Creación del registro BD Pool %s fallido: ERR=%s\n" -#: src/dird/verify.c:567 +#: src/cats/sql_create.c:242 #, c-format -msgid "" -"bird set configuration file to file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -f run in foreground (for debugging)\n" -" -g groupid\n" -" -m print kaboom output (for debugging)\n" -" -r run now\n" -" -s no signals\n" -" -t test - read configuration and exit\n" -" -u userid\n" -" -v verbose user messages\n" -" -? print this message.\n" -"\n" +#: src/cats/sql_create.c:1084 +msgid "Cannot Copy/Migrate job using BaseJob.\n" msgstr "" -"\n" -"Versión: %s (%s)\n" -"\n" -"Utilice: dird [-f -s] [-c archivo_configuración] [-d nivel_depuración] " -"[archivo_configuración]\n" -" -c establecer archivo de configuración para archivo \n" -" -d establecer el nivel de depuración para \n" -" -dt imprimir timestamp en salida de depuración\n" -" -f ejecutar en primer plano (para depuración)\n" -" -g groupid\n" -" -m imprimir salida kaboom para depuración)\n" -" -r ejecutar ahora\n" -" -s sin señales\n" -" -t prueba - leer la configuración y salir\n" -" -u userid\n" -" -v mensajes de usuario detallados\n" -" -? imprimir este mensaje.\n" -"\n" -#: src/dird/dird.c:296 src/stored/stored.c:227 src/console/console.c:1109 -#: src/filed/filed.c:218 src/qt-console/main.cpp:165 -msgid "Cryptography library initialization failed.\n" -msgstr "Inicialización de la librería de criptografía ha fallado.\n" +#: src/cats/sql_create.c:1236 +#, fuzzy, c-format +msgid "Create db Object record %s failed. ERR=%s" +msgstr "Creación del registro File db %s fallido. ERR=%s" -#: src/dird/dird.c:300 src/dird/dird.c:328 src/dird/dird.c:560 -#: src/dird/dird.c:563 src/stored/stored.c:231 src/console/console.c:1113 -#: src/filed/filed.c:223 src/qt-console/main.cpp:169 +#: src/cats/mysql.c:152 src/cats/postgresql.c:198 src/cats/sqlite.c:154 #, c-format -msgid "Please correct configuration file: %s\n" -msgstr "Por favor, corrija el archivo de configuración: %s\n" - -#: src/dird/dird.c:546 -msgid "Too many open reload requests. Request ignored.\n" -msgstr "Demasiadas solicitudes de recarga abiertas. Solicitud ignorada.\n" - -#: src/dird/dird.c:561 -msgid "Out of reload table entries. Giving up.\n" -msgstr "Fuera de entradas de las tablas recargadas. Abandonando.\n" - -#: src/dird/dird.c:564 -msgid "Resetting previous configuration.\n" -msgstr "Restablecimiento de la configuración anterior.\n" +msgid "Unable to initialize DB lock. ERR=%s\n" +msgstr "No se puede inicializar el bloqueo de la BD. ERR=%s\n" -#: src/dird/dird.c:628 +#: src/cats/mysql.c:195 #, c-format msgid "" -"No Director resource defined in %s\n" -"Without that I don't know who I am :-(\n" +"Unable to connect to MySQL server.\n" +"Database=%s User=%s\n" +"MySQL connect failed either server not running or your authorization is " +"incorrect.\n" msgstr "" -"Recurso Director no definido en %s\n" -"Sin eso no sé quién soy :-(\n" +"No se puede conectar al servidor MySQL.\n" +"Base de Datos=%s Usuario=%s\n" -#: src/dird/dird.c:636 src/filed/filed.c:350 +#: src/cats/mysql.c:359 src/cats/postgresql.c:442 src/cats/sqlite.c:374 +#: src/dird/fd_cmds.c:836 src/dird/fd_cmds.c:896 #, c-format -msgid "No Messages resource defined in %s\n" -msgstr "Recursos de Mensajes no definidos en %s\n" +msgid "Attribute create error. %s" +msgstr "error al crear Atributo.%s" -#: src/dird/dird.c:641 +#: src/cats/mysql.c:381 src/cats/cats.c:121 src/cats/postgresql.c:494 +#: src/cats/postgresql.c:541 src/cats/sqlite.c:449 #, c-format -msgid "Only one Director resource permitted in %s\n" -msgstr "Sólo un recurso Director permitido en %s\n" - -#: src/dird/dird.c:650 src/dird/dird.c:856 src/dird/dird.c:911 -#: src/dird/dird.c:950 src/stored/stored.c:354 src/console/console.c:1296 -#: src/console/console.c:1326 src/filed/filed.c:357 src/filed/filed.c:516 -#: src/wx-console/console_thread.cpp:118 src/wx-console/console_thread.cpp:144 -#: src/qt-console/main.cpp:224 src/qt-console/main.cpp:254 -msgid "TLS required but not configured in Bacula.\n" -msgstr "Se requiere TLS pero no está configurado en Bacula.\n" +msgid "Query failed: %s: ERR=%s\n" +msgstr "Consulta fallida: %s: ERR=%s\n" -#: src/dird/dird.c:658 src/stored/stored.c:410 src/filed/filed.c:526 -#, c-format -msgid "\"TLS Certificate\" file not defined for Director \"%s\" in %s.\n" -msgstr "\"Certificado TLS\" archivo no definido para director \"%s\" en %s.\n" +#: src/cats/mysql.c:680 +msgid "A user name for MySQL must be supplied.\n" +msgstr "Un nombre de usuario para MySQL debe de ser suministrado.\n" -#: src/dird/dird.c:664 src/stored/stored.c:416 src/filed/filed.c:532 +#: src/cats/postgresql.c:169 #, c-format -msgid "\"TLS Key\" file not defined for Director \"%s\" in %s.\n" -msgstr "\"Clave TLS\" archivo no definido para director \"%s\" en %s.\n" +msgid "Encoding error for database \"%s\". Wanted SQL_ASCII, got %s\n" +msgstr "" +"Error de codificación de la base de datos \"%s\". Busco SQL_ASCII, obtuvo " +"%s\n" -#: src/dird/dird.c:671 src/stored/stored.c:422 src/filed/filed.c:538 -#, c-format +#: src/cats/postgresql.c:234 +#, fuzzy, c-format msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Director \"%s\" in %s. At least one CA certificate store is required when " -"using \"TLS Verify Peer\".\n" +"Unable to connect to PostgreSQL server. Database=%s User=%s\n" +"Possible causes: SQL server not running; password incorrect; max_connections " +"exceeded.\n" msgstr "" -"Ninguno \"TLS CA Certificate\" o \"TLS CA Certificate Dir\" esta definido " -"para Director \"%s\" en %s. Al menos un almacén de certificado CA es " -"requerido cuando se utiliza \"TLS Verify Peer\".\n" +"No se puede conectar al servidor PostgreSQL.\n" +"Base de datos=%s Usuario=%s\n" +", probablemente no funciona o tu contraseña es incorrecta.\n" -#: src/dird/dird.c:690 src/stored/stored.c:441 src/filed/filed.c:557 -#, c-format -msgid "Failed to initialize TLS context for Director \"%s\" in %s.\n" -msgstr "Fallo al inicializar contexto TLS para Director \"%s\" en %s.\n" +#: src/cats/postgresql.c:338 +msgid "PQescapeStringConn returned non-zero.\n" +msgstr "PQescapeStringConn devuelto no-cero.\n" -#: src/dird/dird.c:698 -#, c-format -msgid "No Job records defined in %s\n" -msgstr "Registros de Job no definidos en %s\n" +#: src/cats/postgresql.c:356 +#, fuzzy +msgid "PQescapeByteaConn returned NULL.\n" +msgstr "PQescapeStringConn devuelto no-cero.\n" -#: src/dird/dird.c:756 src/dird/dird.c:769 -#, c-format -msgid "Hey something is wrong. p=0x%lu\n" -msgstr "Oye, algo está mal. p=0x%lu\n" +#: src/cats/postgresql.c:387 +#, fuzzy +msgid "PQunescapeByteaConn returned NULL.\n" +msgstr "PQescapeStringConn devuelto no-cero.\n" -#: src/dird/dird.c:830 +#: src/cats/postgresql.c:801 #, c-format -msgid "\"%s\" directive in Job \"%s\" resource is required, but not found.\n" -msgstr "" -"Directiva \"%s\" en recurso Job \"%s\" es requerida, pero no se encuentra.\n" - -#: src/dird/dird.c:837 -msgid "Too many items in Job resource\n" -msgstr "Demasiados elementos en el recurso Job\n" +msgid "error fetching currval: %s\n" +msgstr "error al obtener el valor: %s\n" -#: src/dird/dird.c:841 +#: src/cats/postgresql.c:992 #, c-format -msgid "No storage specified in Job \"%s\" nor in Pool.\n" -msgstr "Ningún storage especificada en Job \"%s\" ni en Pool.\n" +msgid "error starting batch mode: %s" +msgstr "Error iniciando modo batch: %s" -#: src/dird/dird.c:865 +#: src/cats/postgresql.c:1022 src/cats/postgresql.c:1029 #, c-format -msgid "\"TLS Certificate\" file not defined for Console \"%s\" in %s.\n" -msgstr "" -"Archivo de \"Certificado TLS\" no definido para Console \"%s\" en %s.\n" +msgid "error ending batch mode: %s" +msgstr "Error finalizando modo batch: %s" -#: src/dird/dird.c:871 +#: src/cats/postgresql.c:1079 #, c-format -msgid "\"TLS Key\" file not defined for Console \"%s\" in %s.\n" -msgstr "Archivo de \"Llave TLS\" no definido para Console \"%s\" en %s.\n" +msgid "error copying in batch mode: %s" +msgstr "Error copiando en modo batch: %s" -#: src/dird/dird.c:878 -#, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Console \"%s\" in %s. At least one CA certificate store is required when " -"using \"TLS Verify Peer\".\n" -msgstr "" -"Ninguno \"TLS CA Certificate\" o \"TLS CA Certificate Dir\" esta definido " -"para Console \"%s\" en %s. Al menos un almacén de certificado CA es " -"requerido cuando se utiliza \"TLS Verify Peer\".\n" +#: src/cats/postgresql.c:1101 +msgid "A user name for PostgreSQL must be supplied.\n" +msgstr "Un nombre de usuario para PostgreSQL debe de ser suministrado.\n" -#: src/dird/dird.c:895 src/dird/dird.c:935 src/filed/filed.c:382 +#: src/cats/sqlite.c:169 #, c-format -msgid "Failed to initialize TLS context for File daemon \"%s\" in %s.\n" -msgstr "Fallo al inicializar contexto TLS para demonio File \"%s\" en %s.\n" +msgid "Database %s does not exist, please create it.\n" +msgstr "No existe base de datos %s, por favor crearla.\n" -#: src/dird/dird.c:918 +#: src/cats/sqlite.c:191 #, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"File daemon \"%s\" in %s.\n" -msgstr "" -"Ninguno \"TLS CA Certificate\" o \"TLS CA Certificate Dir\" esta definido " -"para demonio File \"%s\" en %s.\n" +msgid "Unable to open Database=%s. ERR=%s\n" +msgstr "No se puede abrir la base de datos=%s. ERR=%s\n" -#: src/dird/dird.c:959 -#, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Storage \"%s\" in %s.\n" -msgstr "" -"Ninguno \"TLS CA Certificate\" o \"TLS CA Certificate Dir\" esta definido " -"para Storage \"%s\" en %s.\n" +#: src/cats/sqlite.c:192 +msgid "unknown" +msgstr "desconocido" -#: src/dird/dird.c:975 src/stored/stored.c:394 +#: src/cats/sql_delete.c:65 #, c-format -msgid "Failed to initialize TLS context for Storage \"%s\" in %s.\n" -msgstr "Fallo al inicializar contexto TLS para Storage \"%s\" en %s.\n" +msgid "No pool record %s exists\n" +msgstr "Registro de pool %s inexistente\n" -#: src/dird/dird.c:1014 src/dird/dird.c:1016 +#: src/cats/sql_delete.c:70 #, c-format -msgid "Could not open Catalog \"%s\", database \"%s\".\n" -msgstr "No se pudo abrir Catálogo \"%s\", base de datos \"%s\".\n" +msgid "Expecting one pool record, got %d\n" +msgstr "Esperando un registro pool, tiene %d\n" -#: src/dird/dird.c:1019 src/tools/cats_test.c:377 +#: src/cats/sql_delete.c:76 #, c-format -msgid "%s" -msgstr "%s" +msgid "Error fetching row %s\n" +msgstr "Error obteniendo fila %s\n" -#: src/dird/dird.c:1098 +#: src/stored/job.c:190 +#, fuzzy +msgid "Client socket not open. Could not connect to Client.\n" +msgstr "Fallo al conectar con el cliente.\n" + +#: src/stored/job.c:205 src/stored/job.c:207 #, fuzzy, c-format -msgid "Could not create storage record for %s\n" -msgstr "No es posible crear el registro Pool. ERR=%s\n" +msgid "Recv request to Client failed. ERR=%s\n" +msgstr "Fallo solicitud de conexión desde %s.\n" -#: src/dird/dird.c:1106 +#: src/stored/job.c:213 src/stored/job.c:214 #, fuzzy, c-format -msgid "Could not update storage record for %s\n" -msgstr "No se pudo actualizar el registro de trabajo. ERR=%s\n" +msgid "Bad Hello from Client: %s.\n" +msgstr "Malo comando Hello desde Director en %s: %s\n" -#: src/dird/dird.c:1181 src/dird/migrate.c:1072 src/stored/stored.c:491 -#, c-format -msgid "Could not compile regex pattern \"%s\" ERR=%s\n" -msgstr "No se ha podido compilar patrón regex \"%s\" ERR=%s\n" +#: src/stored/job.c:228 src/stored/job.c:311 +msgid "Unable to authenticate File daemon\n" +msgstr "No se puede autenticar demonio File\n" -#: src/dird/inc_conf.c:312 +#: src/stored/job.c:282 #, c-format -msgid "Expected a strip path positive integer, got:%s:" -msgstr "Esperaba una franja de ruta entero positivo, obtuvo: %s:" +msgid "FD connect failed: Job name not found: %s\n" +msgstr "Fallo al conectar a FD: Nombre del Job no encontrado: %s\n" -#: src/dird/inc_conf.c:332 +#: src/stored/job.c:291 #, c-format -msgid "Expected a FileSet option keyword, got:%s:" -msgstr "Esperaba una palabra clave Tipo FileSet, obtuvo: %s" +msgid "Hey!!!! JobId %u Job %s already authenticated.\n" +msgstr "Hey!!!! JobId %u Job %s ya autenticada.\n" -#: src/dird/inc_conf.c:365 -msgid "Old style Include/Exclude not supported\n" -msgstr "Antiguo estilo Incluir/Excluir no soportado\n" +#: src/stored/job.c:441 +msgid "In free_jcr(), but still attached to device!!!!\n" +msgstr "En free_jcr(), pero todavía conectado al dispositivo!!!!\n" -#: src/dird/inc_conf.c:393 src/dird/inc_conf.c:739 src/dird/dird_conf.c:2022 -#, c-format -msgid "Expecting keyword, got: %s\n" -msgstr "Esperando palabra clave, obtuvo: %s\n" +#: src/stored/vbackup.c:67 +msgid "Read and write devices not properly initialized.\n" +msgstr "" +"Dispositivos de lectura y escritura no se han iniciado correctamente.\n" -#: src/dird/inc_conf.c:401 src/dird/inc_conf.c:745 src/dird/dird_conf.c:2028 -#: src/lib/parse_conf.c:976 +#: src/stored/vbackup.c:73 #, c-format -msgid "expected an equals, got: %s" -msgstr "esperaba una igual, obtuvo: %s" +msgid "No Volume names found for %s.\n" +msgstr "Nombres de Volúmenes no encontrados para %s.\n" -#: src/dird/inc_conf.c:411 src/dird/inc_conf.c:754 src/dird/dird_conf.c:2039 +#: src/stored/vbackup.c:114 src/stored/vbackup.c:248 src/stored/append.c:261 +#: src/stored/spool.c:262 #, c-format -msgid "Keyword %s not permitted in this resource" -msgstr "Palabra clave %s no esta permitido en este recurso" +msgid "Fatal append error on device %s: ERR=%s\n" +msgstr "Error Fatal añadiendo en el dispositivo %s: ERR=%s\n" -#: src/dird/inc_conf.c:464 -#, c-format -msgid "Regex compile error. ERR=%s\n" -msgstr "Error al compilar Regex. ERR=%s\n" +#: src/stored/vbackup.c:116 src/stored/append.c:263 +msgid "Set ok=FALSE after write_block_to_device.\n" +msgstr "Set ok=FALSE después de write_block_to_device.\n" -#: src/dird/inc_conf.c:485 -#, c-format -msgid "Expected a regex string, got: %s\n" -msgstr "Se esperaba una expresión regular, se obtuvo: %s\n" +#: src/stored/vbackup.c:139 src/stored/append.c:287 src/stored/read.c:92 +#, fuzzy, c-format +msgid "Elapsed time=%02d:%02d:%02d, Transfer rate=%s Bytes/second\n" +msgstr "" +"Tiempo transcurrido de escritura del Job = %02d:%02d:%02d, Tasa de " +"transferencia = %s Bytes/segundo\n" -#: src/dird/inc_conf.c:559 -#, c-format -msgid "Expected a wild-card string, got: %s\n" -msgstr "Esperada una cadena comodín, obtuvo: %s\n" +#: src/stored/append.c:49 +msgid "DCR is NULL!!!\n" +msgstr "DCR es NULL!!!\n" -#: src/dird/inc_conf.c:582 -#, c-format -msgid "Expected an fstype string, got: %s\n" -msgstr "Se esperaba una cadena fstype, se obtuvo: %s\n" +#: src/stored/append.c:55 +msgid "DEVICE is NULL!!!\n" +msgstr "DEVICE es NULL!!!\n" -#: src/dird/inc_conf.c:593 -msgid "ExcludeDirContaining directive not permitted in Exclude.\n" -msgstr "Directiva ExcludeDirContaining no permitida en Excluir(Exclude).\n" +#: src/stored/append.c:66 +msgid "Unable to set network buffer size.\n" +msgstr "No se puede establecer el tamaño del búfer de red.\n" -#: src/dird/inc_conf.c:620 -#, c-format -msgid "Expected an drivetype string, got: %s\n" -msgstr "Se esperaba una cadena drivetype, se obtuvo: %s\n" +#: src/stored/append.c:80 src/stored/append.c:90 src/stored/append.c:103 +#: src/stored/askdir.c:355 src/stored/askdir.c:356 +msgid "NULL Volume name. This shouldn't happen!!!\n" +msgstr "Nombre de volumen VACÍO. Esto no debería suceder!\n" -#: src/dird/inc_conf.c:644 src/dird/inc_conf.c:687 +#: src/stored/append.c:96 src/stored/btape.c:2232 #, c-format -msgid "Backslash found. Use forward slashes or quote the string.: %s\n" -msgstr "" -"Barra invertida encontrada. Utilice barras inclinadas o cite la cadena.: %s\n" +msgid "Write session label failed. ERR=%s\n" +msgstr "Fallo al escribir la etiqueta de sesión. ERR=%s\n" -#: src/dird/inc_conf.c:659 src/dird/inc_conf.c:702 +#: src/stored/append.c:109 #, c-format -msgid "Expected a filename, got: %s" -msgstr "Se esperaba un nombre de archivo, se obtuvo: %s" - -#: src/dird/inc_conf.c:676 -msgid "Plugin directive not permitted in Exclude\n" -msgstr "Directiva Plugin no permitida en Exclude\n" +msgid "Network send error to FD. ERR=%s\n" +msgstr "Error de red al enviar a FD. ERR=%s\n" -#: src/dird/inc_conf.c:719 -msgid "Options section not permitted in Exclude\n" -msgstr "Sección Options no permitida en Exclude\n" +#: src/stored/append.c:148 +#, fuzzy, c-format +msgid "Error reading data header from FD. n=%d msglen=%d ERR=%s\n" +msgstr "Error al leer datos de cabecera de FD. ERR=%s\n" -#: src/dird/inc_conf.c:724 src/dird/dird_conf.c:2008 +#: src/stored/append.c:155 #, c-format -msgid "Expecting open brace. Got %s" -msgstr "Esperando abrir paréntesis. Obtuvo %s" +msgid "Malformed data header from FD: %s\n" +msgstr "Datos de cabecera mal formados desde FD: %s\n" -#: src/dird/inc_conf.c:779 +#: src/stored/append.c:174 +#, fuzzy, c-format +msgid "FI=%d from FD not positive or last_FI=%d\n" +msgstr "Archivo de índice de FD no es positivo o secuencial\n" + +#: src/stored/append.c:222 #, c-format -msgid "Expected a FileSet keyword, got: %s" -msgstr "Esperaba una palabra clave FileSet, obtuvo: %s" +msgid "Network error reading from FD. ERR=%s\n" +msgstr "Error al leer la red desde FD. ERR=%s\n" -#: src/dird/ua_query.c:73 src/findlib/create_file.c:288 -#: src/findlib/create_file.c:391 +#: src/stored/append.c:251 src/stored/btape.c:2351 #, c-format -msgid "Could not open %s: ERR=%s\n" -msgstr "No se pudo abrir %s: ERR=%s\n" +msgid "Error writing end session label. ERR=%s\n" +msgstr "Error escribiendo etiqueta de fin de sesión. ERR=%s\n" -#: src/dird/ua_query.c:78 -msgid "Available queries:\n" -msgstr "Consultas disponibles:\n" +#: src/stored/append.c:324 +#, c-format +msgid "Error updating file attributes. ERR=%s\n" +msgstr "Error al actualizar los atributos de archivo. ERR=%s\n" -#: src/dird/ua_query.c:85 -msgid "Choose a query" -msgstr "Elija una consulta" +#: src/stored/mount.c:87 +#, fuzzy, c-format +msgid "Too many errors trying to mount %s device %s.\n" +msgstr "Demasiados errores tratando de montar el dispositivo %s.\n" -#: src/dird/ua_query.c:99 -msgid "Could not find query.\n" -msgstr "No se pudo encontrar la consulta.\n" +#: src/stored/mount.c:95 +#, c-format +msgid "Job %d canceled.\n" +msgstr "Job %d cancelado.\n" -#: src/dird/ua_query.c:117 -msgid "Too many prompts in query, max is 9.\n" -msgstr "Demasiadas consolas en consulta, máximo es 9.\n" +#: src/stored/mount.c:211 +#, fuzzy, c-format +msgid "Open of %s device %s Volume \"%s\" failed: ERR=%s\n" +msgstr "Fallo al abrir dispositivo %s Volumen \"%s\": ERR=%s\n" -#: src/dird/ua_query.c:220 +#: src/stored/mount.c:276 #, c-format -msgid "Warning prompt %d missing.\n" -msgstr "Alerta de consola %d perdida.\n" +msgid "Volume \"%s\" previously written, moving to end of data.\n" +msgstr "Volumen \"%s\" previamente escrito, moviendo a finales de los datos.\n" -#: src/dird/ua_query.c:265 -msgid "" -"Entering SQL query mode.\n" -"Terminate each query with a semicolon.\n" -"Terminate query mode with a blank line.\n" +#: src/stored/mount.c:282 +#, fuzzy, c-format +msgid "Unable to position to end of data on %s device %s: ERR=%s\n" msgstr "" -"Entrando en modo de consulta SQL.\n" -"Termine cada consulta con un punto-coma.\n" -"Termine el modo de consulta con una linea en blanco.\n" +"No se puede posicionar al final los datos en el dispositivo %s: ERR=%s\n" -#: src/dird/ua_query.c:268 src/dird/ua_query.c:284 -msgid "Enter SQL query: " -msgstr "Ingrese una consulta SQL:" +#: src/stored/mount.c:420 src/stored/mount.c:781 +#, fuzzy, c-format +msgid "Volume \"%s\" not on %s device %s.\n" +msgstr "Volumen \"%s\" no en dispositivo %s.\n" -#: src/dird/ua_query.c:286 -msgid "Add to SQL query: " -msgstr "Agregar a la consulta SQL:" +#: src/stored/mount.c:453 +#, c-format +msgid "" +"Director wanted Volume \"%s\".\n" +" Current Volume \"%s\" not acceptable because:\n" +" %s" +msgstr "" +"Director quería Volumen \"%s\".\n" +" Volumen actual \"%s\" no es aceptable porque:\n" +" %s" -#: src/dird/ua_query.c:289 -msgid "End query mode.\n" -msgstr "Fin modo de consulta.\n" +#: src/stored/mount.c:473 src/stored/label.c:232 src/stored/label.c:383 +#, fuzzy, c-format +msgid "Could not reserve volume %s on %s device %s\n" +msgstr "No es posible reservar volumen %s en %s\n" -#: src/dird/newvol.c:90 +#: src/stored/mount.c:631 #, c-format -msgid "Illegal character in Volume name \"%s\"\n" -msgstr "Carácter ilegal en el nombre del Volumen \"%s\"\n" +msgid "Ready to append to end of Volume \"%s\" part=%d size=%s\n" +msgstr "Listo para anexar al final del Volumen \"%s\" parte=%d tamaño=%s\n" -#: src/dird/newvol.c:104 +#: src/stored/mount.c:635 #, c-format -msgid "Created new Volume \"%s\" in catalog.\n" -msgstr "Se creó un Volumen nuevo \"%s\" en el catálogo.\n" +msgid "" +"Bacula cannot write on DVD Volume \"%s\" because: The sizes do not match! " +"Volume=%s Catalog=%s\n" +msgstr "" +"Bacula no puedo escribir en el volumen DVD \"%s\" porque: Los tamaños no " +"coinciden! Volumen=%s Catálogo=%s\n" -#: src/dird/newvol.c:131 +#: src/stored/mount.c:649 #, c-format -msgid "SQL failed, but ignored. ERR=%s\n" -msgstr "SQL fallido, pero ignorado. ERR=%s\n" +msgid "Ready to append to end of Volume \"%s\" at file=%d.\n" +msgstr "Listo para anexar al final del volumen \"%s\" en el archivo=%d\n" -#: src/dird/newvol.c:141 -#, c-format -msgid "Wanted to create Volume \"%s\", but it already exists. Trying again.\n" +#: src/stored/mount.c:652 +#, fuzzy, c-format +msgid "" +"For Volume \"%s\":\n" +"The number of files mismatch! Volume=%u Catalog=%u\n" +"Correcting Catalog\n" msgstr "" -"Se trató de crear el Volumen \"%s\", pero ya existe. Tratando de nuevo.\n" +"Bacula no puede escribir en el Volumen de cinta \"%s\" porque:\n" +"El número de archivos de desfasa! Volumen=%u Catalogo=%u\n" -#: src/dird/newvol.c:150 -msgid "Too many failures. Giving up creating Volume name.\n" -msgstr "Demasiados errores. Abandono el intento de crear nombre de Volumen\n" +#: src/stored/mount.c:659 src/stored/mount.c:694 +#, fuzzy +msgid "Error updating Catalog\n" +msgstr "Error abriendo archivo de datos %s\n" -#: src/dird/expand.c:255 +#: src/stored/mount.c:664 #, c-format -msgid "Count not update counter %s: ERR=%s\n" -msgstr "Conteo no actualizo contador %s: ERR=%s\n" +msgid "" +"Bacula cannot write on tape Volume \"%s\" because:\n" +"The number of files mismatch! Volume=%u Catalog=%u\n" +msgstr "" +"Bacula no puede escribir en el Volumen de cinta \"%s\" porque:\n" +"El número de archivos de desfasa! Volumen=%u Catalogo=%u\n" -#: src/dird/expand.c:427 +#: src/stored/mount.c:679 #, c-format -msgid "Cannot create var context: ERR=%s\n" -msgstr "No se puede crear contexto var: ERR=%s\n" +msgid "Ready to append to end of Volume \"%s\" size=%s\n" +msgstr "Listo para anexar al final del volumen \"%s\" tamaño=%s\n" -#: src/dird/expand.c:432 -#, c-format -msgid "Cannot set var callback: ERR=%s\n" -msgstr "No se puede establecer llamada var: ERR=%s\n" +#: src/stored/mount.c:684 +#, fuzzy, c-format +msgid "" +"For Volume \"%s\":\n" +" The sizes do not match! Volume=%s Catalog=%s\n" +" Correcting Catalog\n" +msgstr "" +"Bacula no puedo escribir en el volumen DVD \"%s\" porque: Los tamaños no " +"coinciden! Volumen=%s Catálogo=%s\n" -#: src/dird/expand.c:438 +#: src/stored/mount.c:699 #, c-format -msgid "Cannot set var operate: ERR=%s\n" -msgstr "No se puede establecer variable operar: ERR=%s\n" +msgid "" +"Bacula cannot write on disk Volume \"%s\" because: The sizes do not match! " +"Volume=%s Catalog=%s\n" +msgstr "" +"Bacula no puede escribir en el Volumen de cinta \"%s\" porque:Los tamaños no " +"coinciden! Volumen=%s Catalogo=%s\n" -#: src/dird/expand.c:444 src/dird/expand.c:459 -#, c-format -msgid "Cannot unescape string: ERR=%s\n" -msgstr "No se puede unescapar cadena: ERR=%s\n" +#: src/stored/mount.c:765 +#, fuzzy, c-format +msgid "Labeled new Volume \"%s\" on %s device %s.\n" +msgstr "Etiquetada nuevo Volumen \"%s\" en el dispositivo %s.\n" -#: src/dird/expand.c:452 -#, c-format -msgid "Cannot expand expression \"%s\": ERR=%s\n" -msgstr "No se puede ampliar la expresión \"%s\": ERR=%s\n" +#: src/stored/mount.c:776 +#, fuzzy, c-format +msgid "%s device %s not configured to autolabel Volumes.\n" +msgstr "Dispositivo %s no configurado para volúmenes autolabel.\n" -#: src/dird/expand.c:470 +#: src/stored/mount.c:798 #, c-format -msgid "Cannot destroy var context: ERR=%s\n" -msgstr "No se puede destruir variable contexto: ERR=%s\n" +msgid "Marking Volume \"%s\" in Error in Catalog.\n" +msgstr "Marcado volumen \"%s\" en Error en el Catálogo.\n" -#: src/dird/recycle.c:69 +#: src/stored/mount.c:815 #, c-format -msgid "Recycled volume \"%s\"\n" -msgstr "Volumen \"%s\" reciclado\n" - -#: src/dird/ua_purge.c:90 msgid "" -"\n" -"This command can be DANGEROUS!!!\n" -"\n" -"It purges (deletes) all Files from a Job,\n" -"JobId, Client or Volume; or it purges (deletes)\n" -"all Jobs from a Client or Volume without regard\n" -"to retention periods. Normally you should use the\n" -"PRUNE command, which respects retention periods.\n" +"Autochanger Volume \"%s\" not found in slot %d.\n" +" Setting InChanger to zero in catalog.\n" msgstr "" -"\n" -"Este comando puede ser PELIGROSO!!!\n" -"\n" -"El purgas (elimina) todos los archivos de un Job,\n" -"JobId, Cliente o Volumen; o el purgas (elimina)\n" -"Todos los Jobs de un Cliente o Volumen sin tener en cuenta\n" -"los periodos de retención. Normalmente debería utilizar el\n" -"comando PRUNE, que respecta los plazos de retención.\n" +"Volumen auto-cambiador \"%s\" no se encuentra en la ranura %d\n" +"Estableciendo InChanger a cero en el catálogo.\n" -#: src/dird/ua_purge.c:157 -msgid "Choose item to purge" -msgstr "Elija el ítem para purgar" +#: src/stored/mount.c:834 +msgid "Hey!!!!! WroteVol non-zero !!!!!\n" +msgstr "Hey !!!!! No WroteVol cero !!!!!\n" -#: src/dird/ua_purge.c:204 +#: src/stored/mount.c:884 #, c-format -msgid "Begin purging files for Client \"%s\"\n" -msgstr "Iniciando purga de archivos para Cliente \"%s\"\n" +msgid "" +"Invalid tape position on volume \"%s\" on device %s. Expected %d, got %d\n" +msgstr "" +"Posición de la cinta no válida en el volumen \"%s\" en el dispositivo %s. " +"Esperaba %d, obtuvo %d\n" -#: src/dird/ua_purge.c:213 src/dird/ua_purge.c:263 +#: src/stored/mount.c:925 +#, fuzzy, c-format +msgid "Cannot open %s Dev=%s, Vol=%s for reading.\n" +msgstr "No se puede abrir Dev=%s, Vol=%s\n" + +#: src/stored/askdir.c:168 +msgid "Network error on bnet_recv in req_vol_info.\n" +msgstr "Error de red en bnet_recv en req_vol_info.\n" + +#: src/stored/askdir.c:191 #, c-format -msgid "No Files found for client %s to purge from %s catalog.\n" -msgstr "" -"No encuentra los archivos del cliente %s para purgar %s del catálogo.\n" +msgid "Error getting Volume info: %s" +msgstr "Error al obtener Volumen información: %s" -#: src/dird/ua_purge.c:216 +#: src/stored/askdir.c:396 #, c-format -msgid "Files for %d Jobs for client \"%s\" purged from %s catalog.\n" -msgstr "Archivos para Jobs %d para cliente \"%s\" purgado del catalogo %s.\n" +msgid "Didn't get vol info vol=%s: ERR=%s" +msgstr "no recibió información de volumen vol=%s: ERR=%s" -#: src/dird/ua_purge.c:254 +#: src/stored/askdir.c:461 #, c-format -msgid "Begin purging jobs from Client \"%s\"\n" -msgstr "Iniciando purga de jobs para Cliente \"%s\"\n" +msgid "Error creating JobMedia record: ERR=%s\n" +msgstr "Error al crear registro JobMedia: ERR=%s\n" -#: src/dird/ua_purge.c:266 +#: src/stored/askdir.c:468 #, c-format -msgid "%d Jobs for client %s purged from %s catalog.\n" -msgstr "Jobs %d para cliente \"%s\" purgado del catalogo %s.\n" +msgid "Error creating JobMedia record: %s\n" +msgstr "Error al crear registro JobMedia: %s\n" -#: src/dird/ua_purge.c:464 +#: src/stored/askdir.c:556 #, c-format -msgid "" -"\n" -"Volume \"%s\" has VolStatus \"%s\" and cannot be purged.\n" -"The VolStatus must be: Append, Full, Used, or Error to be purged.\n" +msgid "Job %s canceled while waiting for mount on Storage Device \"%s\".\n" msgstr "" -"\n" -"Volumen \"%s\" tiene VolStatus \"%s\" y no puede ser purgado.\n" -"El VolStatus debe ser: Añadir, Lleno, Usado, o Error para ser purgado.\n" - -#: src/dird/ua_purge.c:492 -#, c-format -msgid "%d File%s on Volume \"%s\" purged from catalog.\n" -msgstr "%d Archivo%s en Volumen \"%s\" purgado desde el catalogo.\n" +"Job %s cancelado a la espera de montar el dispositivo Storage \"%s\".\n" -#: src/dird/ua_purge.c:541 -#, c-format +#: src/stored/askdir.c:568 +#, fuzzy, c-format msgid "" -"There are no more Jobs associated with Volume \"%s\". Marking it purged.\n" +"Job %s is waiting. Cannot find any appendable volumes.\n" +"Please use the \"label\" command to create a new Volume for:\n" +" Storage: %s\n" +" Pool: %s\n" +" Media type: %s\n" msgstr "" -"No hay más Jobs relacionados con Volumen \"%s\". Marcando el para purgar.\n" +"Job %s en espera. No se puede encontrar ningún volumen grabable.\n" +"Por favor utilice el comando \"label\" para crear un nuevo Volumen para:\n" +"Storage: %s\n" +"Pool: %s\n" +"Tipo de Media: %s\n" -#: src/dird/ua_purge.c:556 src/dird/ua_label.c:774 +#: src/stored/askdir.c:593 src/stored/askdir.c:694 #, c-format -msgid "Connecting to Storage daemon %s at %s:%d ...\n" -msgstr "Conectando al demonio Storage %s en %s:%d ...\n" +msgid "Max time exceeded waiting to mount Storage Device %s for Job %s\n" +msgstr "" +"Tiempo máximo de espera excedido para montar dispositivo Storage %s para el " +"Job %s\n" -#: src/dird/ua_purge.c:559 src/dird/ua_dotcmds.c:625 src/dird/ua_cmds.c:771 -#: src/dird/ua_cmds.c:1577 src/dird/ua_label.c:777 src/dird/job.c:448 -msgid "Failed to connect to Storage daemon.\n" -msgstr "Error al conectar con demonio Storage.\n" +#: src/stored/askdir.c:603 +msgid "pthread error in mount_next_volume.\n" +msgstr "pthread error en mount_next_volume.\n" -#: src/dird/ua_purge.c:623 -#, fuzzy -msgid "Can't update volume size in the catalog\n" -msgstr "Se creó un Volumen nuevo \"%s\" en el catálogo.\n" +#: src/stored/askdir.c:636 +msgid "Cannot request another volume: no volume name given.\n" +msgstr "No puede solicitar otro volumen: nombre de volumen no entregado.\n" -#: src/dird/ua_purge.c:625 +#: src/stored/askdir.c:642 #, c-format -msgid "The volume \"%s\" has been truncated\n" +msgid "Job %s canceled while waiting for mount on Storage Device %s.\n" +msgstr "Job %s cancelado a la espera de montar el dispositivo Storage %s.\n" + +#: src/stored/askdir.c:659 +#, fuzzy, c-format +msgid "" +"%sPlease mount append Volume \"%s\" or label a new one for:\n" +" Job: %s\n" +" Storage: %s\n" +" Pool: %s\n" +" Media type: %s\n" msgstr "" +"Por favor, montar Volumen \"%s\" o etiquete uno nuevo para :\n" +" Job: %s\n" +" Storage: %s\n" +" Pool: %s\n" +" Media type: %s\n" -#: src/dird/ua_purge.c:627 +#: src/stored/askdir.c:665 #, fuzzy, c-format -msgid "Unable to truncate volume \"%s\"\n" -msgstr "No se puede truncar el dispositivo %s. ERR=%s\n" +msgid "" +"%sPlease mount read Volume \"%s\" for:\n" +" Job: %s\n" +" Storage: %s\n" +" Pool: %s\n" +" Media type: %s\n" +msgstr "" +"Por favor, montar el volumen \"%s\" for:\n" +" Job: %s\n" +" Storage: %s\n" +" Pool: %s\n" +" Media type: %s\n" + +#: src/stored/askdir.c:672 +msgid "" +"\n" +"\n" +"WARNING: device is full! Please add more disk space then ...\n" +"\n" +msgstr "" -#: src/dird/ua_purge.c:713 +#: src/stored/askdir.c:704 +msgid "pthread error in mount_volume\n" +msgstr "pthread error en mount_volume\n" + +#: src/stored/stored.c:75 #, fuzzy, c-format -msgid "No Volumes found to perform %s action.\n" -msgstr "No encontraron volúmenes para etiquetar, o sin códigos de barras.\n" +msgid "" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: bacula-sd [options] [-c config_file] [config_file]\n" +" -c use as configuration file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -f run in foreground (for debugging)\n" +" -g set groupid to group\n" +" -m print kaboom output (for debugging)\n" +" -p proceed despite I/O errors\n" +" -s no signals (for debugging)\n" +" -t test - read config and exit\n" +" -u userid to \n" +" -v verbose user messages\n" +" -? print this message.\n" +"\n" +msgstr "" +"\n" +"Versión: %s (%s)\n" +"\n" +"Utilice: stored [opciones] [-c archivo_configuración] " +"[archivo_configuración]\n" +" -c usar como archivo de configuración\n" +" -d establecer el nivel de depuración para \n" +" -dt imprimir timestamp en salida de depuración\n" +" -f ejecutar en primer plano (para depuración)\n" +" -g establecer groupid para grupo\n" +" -m imprimir salida kaboom para depuración)\n" +" -p continuar a pesar de errores de E/S\n" +" -s sin señales (para depuración)\n" +" -t prueba - leer la configuración y salir\n" +" -u establecer userid para \n" +" -v mensajes de usuario detallados\n" +" -? imprimir este mensaje.\n" +"\n" -#: src/dird/ua_purge.c:786 +#: src/stored/stored.c:124 src/stored/btape.c:167 #, c-format -msgid "Unable move recycled Volume in full Pool \"%s\" MaxVols=%d\n" +msgid "Tape block size (%d) not multiple of system size (%d)\n" msgstr "" -"No se puede mover el Volumen reciclado en full Pool \"%s\" MaxVols=%d\n" +"Tamaño de bloque de cinta (%d) no es múltiplo del tamaño de sistema (% d)\n" -#: src/dird/ua_purge.c:800 +#: src/stored/stored.c:128 src/stored/btape.c:171 #, c-format -msgid "All records pruned from Volume \"%s\"; marking it \"Purged\"\n" -msgstr "" -"Todos los registros del Volumen \"%s\" podados; marcando el \"Purgados\"\n" +msgid "Tape block size (%d) is not a power of 2\n" +msgstr "Tamaño de bloque de cinta (%d) no es una potencia de 2\n" + +#: src/stored/stored.c:256 +msgid "Volume Session Time is ZERO!\n" +msgstr "Tiempo de Sesión de Volumen es CERO!\n" -#: src/dird/ua_purge.c:805 +#: src/stored/stored.c:265 #, c-format -msgid "Cannot purge Volume with VolStatus=%s\n" -msgstr "No se puede purgar Volumen con VolStatus=%s\n" +msgid "Unable to create thread. ERR=%s\n" +msgstr "No se puede crear hilo. ERR=%s\n" -#: src/dird/vbackup.c:76 src/dird/migrate.c:114 -msgid "Could not get or create a Pool record.\n" -msgstr "No es posible obtener o crear un registro Pool.\n" +#: src/stored/stored.c:298 src/stored/butil.c:76 +#, c-format +msgid "No Storage resource defined in %s. Cannot continue.\n" +msgstr "Recurso Storage no definido en %s. No se puede continuar.\n" -#: src/dird/vbackup.c:89 src/dird/migrate.c:227 src/dird/migrate.c:228 -#: src/dird/backup.c:93 src/dird/job.c:185 src/dird/job.c:871 -#: src/dird/job.c:1126 src/dird/job.c:1172 src/dird/job.c:1186 -msgid "Pool resource" -msgstr "Recurso pool" +#: src/stored/stored.c:304 +#, c-format +msgid "Only one Storage resource permitted in %s\n" +msgstr "Sólo un recurso Storage permitido en %s\n" -#: src/dird/vbackup.c:116 src/dird/migrate.c:285 -msgid "Job Pool's NextPool resource" -msgstr "Recurso Job Pool's NextPool " +#: src/stored/stored.c:309 +#, c-format +msgid "No Director resource defined in %s. Cannot continue.\n" +msgstr "Recurso Director no definido en %s. No se puede continuar.\n" -#: src/dird/vbackup.c:147 +#: src/stored/stored.c:314 #, c-format -msgid "Start Virtual Backup JobId %s, Job=%s\n" -msgstr "Respaldo Virtual iniciado JobId %s, Job=%s\n" +msgid "No Device resource defined in %s. Cannot continue.\n" +msgstr "Recurso Device no definido en %s. No se puede continuar.\n" + +#: src/stored/stored.c:322 +#, c-format +msgid "No Messages resource defined in %s. Cannot continue.\n" +msgstr "Recurso Mensajes no definido en %s. No se puede continuar.\n" + +#: src/stored/stored.c:329 src/stored/bscan.c:256 +#, c-format +msgid "No Working Directory defined in %s. Cannot continue.\n" +msgstr "Directorio de Trabajo no definido en %s. No se puede continuar.\n" + +#: src/stored/stored.c:351 +#, c-format +msgid "\"TLS Certificate\" file not defined for Storage \"%s\" in %s.\n" +msgstr "Archivo \"TLS Certificate\" no definido para Storage \"%s\" en %s.\n" + +#: src/stored/stored.c:357 +#, c-format +msgid "\"TLS Key\" file not defined for Storage \"%s\" in %s.\n" +msgstr "Archivo \"TLS Key\" no definido para Storage \"%s\" en %s.\n" -#: src/dird/vbackup.c:151 +#: src/stored/stored.c:363 +#, c-format msgid "" -"This Job is not an Accurate backup so is not equivalent to a Full backup.\n" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Storage \"%s\" in %s. At least one CA certificate store is required when " +"using \"TLS Verify Peer\".\n" msgstr "" -"Este trabajo no es una copia de seguridad exacta, por lo que no es " -"equivalente a una copia de seguridad completa.\n" +"Ni \"Certificado TLS CA \" o \"Directorio del Certificado TLS CA\" están " +"definidos para el Storage \"%s\" en %s. Por lo menos un almacén de " +"Certificados CA es necesario cuando se utiliza \"Verificar TLS Peer\".\n" -#: src/dird/vbackup.c:158 -msgid "No previous Jobs found.\n" -msgstr "Jobs previos no encontrados.\n" +#: src/stored/stored.c:382 src/dird/dird.c:932 +#, c-format +msgid "Failed to initialize TLS context for Storage \"%s\" in %s.\n" +msgstr "Fallo al inicializar contexto TLS para Storage \"%s\" en %s.\n" -#: src/dird/vbackup.c:180 +#: src/stored/stored.c:398 src/dird/dird.c:615 src/filed/filed.c:576 #, c-format -msgid "Error getting Job record for previous Job: ERR=%s" -msgstr "Error obteniendo registro Job para Job anterior: ERR=%s" +msgid "\"TLS Certificate\" file not defined for Director \"%s\" in %s.\n" +msgstr "\"Certificado TLS\" archivo no definido para director \"%s\" en %s.\n" -#: src/dird/vbackup.c:186 src/dird/migrate.c:131 -msgid "Could not get or create the FileSet record.\n" -msgstr "No es posible obtener o crear un registro FileSet.\n" +#: src/stored/stored.c:404 src/dird/dird.c:621 src/filed/filed.c:582 +#, c-format +msgid "\"TLS Key\" file not defined for Director \"%s\" in %s.\n" +msgstr "\"Clave TLS\" archivo no definido para director \"%s\" en %s.\n" -#: src/dird/vbackup.c:313 src/dird/backup.c:635 +#: src/stored/stored.c:410 src/dird/dird.c:628 src/filed/filed.c:588 #, c-format -msgid "Error getting Client record for Job report: ERR=%s" -msgstr "Error al obtener registro de Clientes para reporte de Job: ERR=%s" +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Director \"%s\" in %s. At least one CA certificate store is required when " +"using \"TLS Verify Peer\".\n" +msgstr "" +"Ninguno \"TLS CA Certificate\" o \"TLS CA Certificate Dir\" esta definido " +"para Director \"%s\" en %s. Al menos un almacén de certificado CA es " +"requerido cuando se utiliza \"TLS Verify Peer\".\n" -#: src/dird/vbackup.c:319 src/dird/migrate.c:1257 src/dird/backup.c:641 +#: src/stored/stored.c:429 src/dird/dird.c:647 src/filed/filed.c:607 #, c-format -msgid "Error getting Media record for Volume \"%s\": ERR=%s" -msgstr "Error al obtener registro de Media para Volumen \"%s\": ERR=%s" +msgid "Failed to initialize TLS context for Director \"%s\" in %s.\n" +msgstr "Fallo al inicializar contexto TLS para Director \"%s\" en %s.\n" -#: src/dird/vbackup.c:329 src/dird/backup.c:651 src/dird/backup.c:660 -#: src/stored/bscan.c:1214 -msgid "Backup OK -- with warnings" -msgstr "Respaldo OK -- con advertencias" +#: src/stored/stored.c:479 src/dird/mac_sql.c:547 src/dird/dird.c:1138 +#, c-format +msgid "Could not compile regex pattern \"%s\" ERR=%s\n" +msgstr "No se ha podido compilar patrón regex \"%s\" ERR=%s\n" -#: src/dird/vbackup.c:331 src/dird/backup.c:653 src/stored/bscan.c:1211 -msgid "Backup OK" -msgstr "Respaldo OK" +#: src/stored/stored.c:548 src/stored/dircmd.c:204 src/dird/job.c:101 +#: src/dird/jobq.c:208 src/filed/job.c:257 +#, c-format +msgid "Unable to init job cond variable: ERR=%s\n" +msgstr "No se puede iniciar job cond varibale: ERR=%s\n" -#: src/dird/vbackup.c:336 src/dird/backup.c:664 src/stored/bscan.c:1218 -msgid "*** Backup Error ***" -msgstr "***Error en Respaldo ***" +#: src/stored/stored.c:556 +#, c-format +msgid "Could not initialize %s\n" +msgstr "No se puede iniciar %s\n" -#: src/dird/vbackup.c:346 src/dird/backup.c:674 src/stored/bscan.c:1221 -msgid "Backup Canceled" -msgstr "Respaldo Cancelado" +#: src/stored/stored.c:570 +#, c-format +msgid "Could not open device %s\n" +msgstr "No se pudo abrir el dispositivo %s\n" -#: src/dird/vbackup.c:393 -#, fuzzy, c-format +#: src/stored/stored.c:584 +#, c-format +msgid "Could not mount device %s\n" +msgstr "No se pudo montar el dispositivo %s\n" + +#: src/stored/btape.c:174 +#, c-format msgid "" -"%s %s %s (%s):\n" -" Build OS: %s %s %s\n" -" JobId: %d\n" -" Job: %s\n" -" Backup Level: Virtual Full\n" -" Client: \"%s\" %s\n" -" FileSet: \"%s\" %s\n" -" Pool: \"%s\" (From %s)\n" -" Catalog: \"%s\" (From %s)\n" -" Storage: \"%s\" (From %s)\n" -" Scheduled time: %s\n" -" Start time: %s\n" -" End time: %s\n" -" Elapsed time: %s\n" -" Priority: %d\n" -" SD Files Written: %s\n" -" SD Bytes Written: %s (%sB)\n" -" Rate: %.1f KB/s\n" -" Volume name(s): %s\n" -" Volume Session Id: %d\n" -" Volume Session Time: %d\n" -" Last Volume Bytes: %s (%sB)\n" -" SD Errors: %d\n" -" SD termination status: %s\n" -" Termination: %s\n" +"\n" +"\n" +"!!!! Warning large disk addressing disabled. boffset_t=%d should be 8 or " +"more !!!!!\n" +"\n" "\n" msgstr "" -"%s %s %s (%s): %s\n" -" Build OS: %s %s %s\n" -" JobId: %d\n" -" Job: %s\n" -" Nivel del Respaldo: Virtual Completo\n" -" Cliente: \"%s\" %s\n" -" FileSet: \"%s\" %s\n" -" Pool: \"%s\" (Desde %s)\n" -" Catalogo: \"%s\" (Desde %s)\n" -" Storage: \"%s\" (Desde %s)\n" -" Hora programada: %s\n" -" Hora de inicio: %s\n" -" Hora de finalización: %s\n" -" Tiempo transcurrido: %s\n" -" Prioridad: %d\n" -" SD Archivos Escritos: %s\n" -" SD Bytes Escritos: %s (%sB)\n" -" Tasa: %.1f KB/s\n" -" Nombre del Volumen(es): %s\n" -" Id de Sesión de Volumen: %d\n" -" Tiempo de Sesión de Volumen: %d\n" -" Ultimo Bytes del Volumen: %s (%sB)\n" -" Errores del SD: %d\n" -" Estado de terminación del SD: %s\n" -" Terminación: %s\n" +"\n" +"\n" +"!!!! Advertencia, deshabilitado direccionamiento de discos largos. boffset_t=" +"%d debe ser de 8 o más !!!!!\n" +"\n" "\n" -#: src/dird/ua_output.c:69 src/dird/ua_output.c:93 -msgid "ON or OFF keyword missing.\n" -msgstr "Faltan palabra clave ON u OFF.\n" - -#: src/dird/ua_output.c:113 -msgid "Disabled Jobs:\n" -msgstr "Jobs Deshabilitados:\n" - -#: src/dird/ua_output.c:119 -msgid "No disabled Jobs.\n" -msgstr "Ningún Jobs Deshabilitado.\n" - -#: src/dird/ua_output.c:163 -msgid "disabled" -msgstr "deshabilitado" +#: src/stored/btape.c:181 +#, c-format +msgid "32 bit printf/scanf problem. i=%d x32=%u y32=%u\n" +msgstr "32 bit printf/scanf problema. i=%d x32=%u y32=%u\n" -#: src/dird/ua_output.c:211 -msgid "Keywords for the show command are:\n" -msgstr "Palabras clave para el comando show son:\n" +#: src/stored/btape.c:190 +msgid "64 bit printf/scanf problem. i=%d x64=%" +msgstr "64 bit printf/scanf problema. i=%d x64=%" -#: src/dird/ua_output.c:217 +#: src/stored/btape.c:195 #, c-format -msgid "%s resource %s not found.\n" -msgstr "%s recurso %s no encontrado.\n" +msgid "Tape block granularity is %d bytes.\n" +msgstr "Granularidad del bloque de cinta es %d bytes.\n" -#: src/dird/ua_output.c:220 -#, c-format -msgid "Resource %s not found\n" -msgstr "Recursos %s no encontrado\n" +#: src/stored/btape.c:270 +msgid "No archive name specified.\n" +msgstr "Nombre de archivo no especificado.\n" -#: src/dird/ua_output.c:290 -msgid "Hey! DB is NULL\n" -msgstr "Hey! BD esta VACÍA\n" +#: src/stored/btape.c:274 +msgid "Improper number of arguments specified.\n" +msgstr "Número incorrecto de argumentos especificados.\n" -#: src/dird/ua_output.c:447 -#, c-format -msgid "Jobid %d used %d Volume(s): %s\n" -msgstr "Jobid %d usado %d Volumen(s): %s\n" +#: src/stored/btape.c:288 +msgid "btape does not work with DVD storage.\n" +msgstr "btape no funciona con el almacenamiento de DVD.\n" -#: src/dird/ua_output.c:465 -msgid "No Pool specified.\n" -msgstr "Ningún Pool especificado.\n" +#: src/stored/btape.c:293 +msgid "btape only works with tape storage.\n" +msgstr "btape sólo funciona con almacenamiento en cinta.\n" -#: src/dird/ua_output.c:486 +#: src/stored/btape.c:377 #, c-format -msgid "Pool: %s\n" -msgstr "Pool: %s\n" - -#: src/dird/ua_output.c:502 -msgid "Ignoring invalid value for days. Max is 50.\n" -msgstr "Ignorando valor invalido para días. Máximo es 50.\n" +msgid "Total Volume bytes=%sB. Total Write rate = %sB/s\n" +msgstr "Volumen total bytes=%sB. Tasa total de Escritura = %sB/s\n" -#: src/dird/ua_output.c:524 +#: src/stored/btape.c:403 #, c-format -msgid "Unknown list keyword: %s\n" -msgstr "Lista de palabras clave desconocida: %s\n" +msgid "Volume bytes=%sB. Write rate = %sB/s\n" +msgstr "Volumen bytes=%sB. Tasa de Escritura = %sB/s\n" -#: src/dird/ua_output.c:549 +#: src/stored/btape.c:467 src/stored/device.c:303 src/stored/bcopy.c:194 #, c-format -msgid "%s is not a job name.\n" -msgstr "%s no es un nombre de Job.\n" +msgid "dev open failed: %s\n" +msgstr "Fallo al abrir dev: %s\n" -#: src/dird/ua_output.c:563 +#: src/stored/btape.c:471 #, c-format -msgid "Could not find Pool for Job %s\n" -msgstr "No se pudo encontrar Pool para Job %s\n" +msgid "open device %s: OK\n" +msgstr "abrir dispositivo %s: OK\n" -#: src/dird/ua_output.c:576 -#, c-format -msgid "Could not find next Volume for Job %s (Pool=%s, Level=%s).\n" -msgstr "" -"No se pudo encontrar el siguiente Volumen para Job %s (Pool=%s, Nivel=%s).\n" +#: src/stored/btape.c:494 +msgid "Enter Volume Name: " +msgstr "Ingrese nombre de Volumen:" -#: src/dird/ua_output.c:580 +#: src/stored/btape.c:501 #, c-format -msgid "" -"The next Volume to be used by Job \"%s\" (Pool=%s, Level=%s) will be %s\n" -msgstr "" -"El próximo Volumen que se utilizará por Job \"%s\" (Pool=%s, Nivel=%s) será " -"%s\n" +msgid "Device open failed. ERR=%s\n" +msgstr "Fallo al abrir dispositivo. ERR=%s\n" -#: src/dird/ua_output.c:593 +#: src/stored/btape.c:506 #, c-format -msgid "Could not find next Volume for Job %s.\n" -msgstr "No se pudo encontrar el siguiente Volumen para Job %s.\n" +msgid "Wrote Volume label for volume \"%s\".\n" +msgstr "Escribe la etiqueta de Volumen para el volumen \"%s\".\n" -#: src/dird/ua_output.c:720 src/dird/job.c:133 src/tools/cats_test.c:375 -#, c-format -msgid "Could not open database \"%s\".\n" -msgstr "No se puede abrir la base de datos \"%s\".\n" +#: src/stored/btape.c:520 +msgid "Volume has no label.\n" +msgstr "Volumen no tiene etiqueta.\n" -#: src/dird/ua_output.c:733 -#, c-format -msgid "Pool %s not in database. %s" -msgstr "Pool %s no creado en la base de datos. %s" +#: src/stored/btape.c:523 +msgid "Volume label read correctly.\n" +msgstr "Etiqueta de volumen leída correctamente.\n" -#: src/dird/ua_output.c:741 +#: src/stored/btape.c:526 #, c-format -msgid "Pool %s created in database.\n" -msgstr "Pool %s creado en la base de datos.\n" +msgid "I/O error on device: ERR=%s" +msgstr "error de E/S en el dispositivo: ERR=%s" -#: src/dird/ua_output.c:794 -msgid "You have no messages.\n" -msgstr "Usted no tiene mensajes.\n" +#: src/stored/btape.c:529 +#, fuzzy, c-format +msgid "Volume type error: ERR=%s\n" +msgstr "Seek error: ERR=%s\n" -#: src/dird/ua_output.c:874 -msgid "Message too long to display.\n" -msgstr "Mensaje demasiado largo para mostrar.\n" +#: src/stored/btape.c:532 +msgid "Volume name error\n" +msgstr "Nombre de Volumen error\n" -#: src/dird/ua_dotcmds.c:155 src/dird/ua_cmds.c:236 +#: src/stored/btape.c:535 #, c-format -msgid "Can't use %s command in a runscript" -msgstr "No se puede usar comando %s en un runscript" +msgid "Error creating label. ERR=%s" +msgstr "Error creando etiqueta. ERR=%s" -#: src/dird/ua_dotcmds.c:175 -msgid ": is an invalid command.\n" -msgstr ": es un comando inválido.\n" +#: src/stored/btape.c:538 +msgid "Volume version error.\n" +msgstr "Volumen versión error.\n" -#: src/dird/ua_dotcmds.c:553 src/dird/ua_restore.c:780 -#: src/dird/ua_restore.c:823 -#, c-format -msgid "Unable to get Job record for JobId=%s: ERR=%s\n" -msgstr "No se puede obtener el registro Job para JobId=%s: ERR=%s\n" +#: src/stored/btape.c:541 +msgid "Bad Volume label type.\n" +msgstr "Malo tipo de etiqueta de volumen.\n" -#: src/dird/ua_dotcmds.c:619 src/dird/ua_cmds.c:765 src/dird/ua_cmds.c:1566 -#: src/dird/ua_status.c:352 src/dird/job.c:147 src/dird/job.c:153 -#: src/dird/job.c:1160 src/dird/job.c:1164 -msgid "unknown source" -msgstr "fuente desconocida" +#: src/stored/btape.c:544 +msgid "Unknown error.\n" +msgstr "Error desconocido.\n" -#: src/dird/ua_dotcmds.c:622 src/dird/ua_cmds.c:768 src/dird/ua_status.c:355 +#: src/stored/btape.c:562 #, c-format -msgid "Connecting to Storage daemon %s at %s:%d\n" -msgstr "Conectando al demonio Storage %s en %s:%d\n" - -#: src/dird/ua_dotcmds.c:628 src/dird/ua_cmds.c:774 src/dird/ua_status.c:366 -msgid "Connected to storage daemon\n" -msgstr "Conectado al demonio Storage\n" +msgid "Bad status from load. ERR=%s\n" +msgstr "Malo estado de carga. ERR=%s\n" -#: src/dird/ua_dotcmds.c:648 src/dird/ua_cmds.c:803 src/dird/ua_cmds.c:1208 -#: src/dird/ua_status.c:397 +#: src/stored/btape.c:564 #, c-format -msgid "Connecting to Client %s at %s:%d\n" -msgstr "Conectando al Cliente %s en %s:%d\n" - -#: src/dird/ua_dotcmds.c:651 src/dird/ua_cmds.c:806 src/dird/ua_cmds.c:1211 -msgid "Failed to connect to Client.\n" -msgstr "Fallo al conectar con el cliente.\n" +msgid "Loaded %s\n" +msgstr "Cargado %s\n" -#: src/dird/ua_dotcmds.c:694 src/dird/ua_dotcmds.c:788 -#, fuzzy, c-format -msgid "Unknown command: %s\n" -msgstr "Comando desconocido." +#: src/stored/btape.c:573 src/stored/btape.c:1136 src/stored/btape.c:1209 +#: src/stored/btape.c:1289 src/stored/btape.c:1560 +#, c-format +msgid "Bad status from rewind. ERR=%s\n" +msgstr "Malo estado de rebobinado. ERR=%s\n" -#: src/dird/ua_dotcmds.c:732 src/dird/ua_cmds.c:993 -msgid "Available daemons are: \n" -msgstr "Demonios disponible son: \n" +#: src/stored/btape.c:576 src/stored/btape.c:1568 +#, c-format +msgid "Rewound %s\n" +msgstr "Rebobinado %s\n" -#: src/dird/ua_dotcmds.c:733 src/dird/ua_cmds.c:994 -msgid "Director" -msgstr "Director" +#: src/stored/btape.c:602 src/stored/btape.c:1572 +#, c-format +msgid "Bad status from weof. ERR=%s\n" +msgstr "Malo estado de weof. ERR=%s\n" -#: src/dird/ua_dotcmds.c:736 -msgid "Select daemon type to make die" -msgstr "Seleccione tipo de demonio para matar" +#: src/stored/btape.c:606 +#, c-format +msgid "Wrote 1 EOF to %s\n" +msgstr "Escribir 1 EOF para %s\n" -#: src/dird/ua_dotcmds.c:762 -#, fuzzy -msgid "The Director will generate a deadlock.\n" -msgstr "El Director tendrá una violación de segmento.\n" +#: src/stored/btape.c:609 +#, c-format +msgid "Wrote %d EOFs to %s\n" +msgstr "Escribir %d EOFs para %s\n" -#: src/dird/ua_dotcmds.c:766 -msgid "The Director will segment fault.\n" -msgstr "El Director tendrá una violación de segmento.\n" +#: src/stored/btape.c:627 +msgid "Moved to end of medium.\n" +msgstr "Movido para el final de la media.\n" -#: src/dird/ua_dotcmds.c:955 -msgid "Access to specified Client or FileSet not allowed.\n" -msgstr "El acceso a determinado Cliente o FileSet no permitido.\n" +#: src/stored/btape.c:654 +#, c-format +msgid "Bad status from bsf. ERR=%s\n" +msgstr "Mal estado desde BSF. ERR=%s\n" -#: src/dird/ua_dotcmds.c:960 src/dird/ua_dotcmds.c:1004 -#: src/dird/ua_restore.c:941 src/dird/ua_restore.c:969 -#: src/dird/ua_restore.c:990 +#: src/stored/btape.c:656 #, c-format -msgid "Query failed: %s. ERR=%s\n" -msgstr "Consulta fallida: %s. ERR=%s\n" +msgid "Backspaced %d file%s.\n" +msgstr "Backspaced %d archivo%s.\n" -#: src/dird/ua_dotcmds.c:999 -msgid "query keyword not found.\n" -msgstr "consulta de palabra clave no encontrada.\n" +#: src/stored/btape.c:673 +#, c-format +msgid "Bad status from bsr. ERR=%s\n" +msgstr "Malo estado de BSR. ERR=%s\n" -#: src/dird/ua_dotcmds.c:1026 +#: src/stored/btape.c:675 #, c-format -msgid "List MediaType failed: ERR=%s\n" -msgstr "Fallo al listar MediaType: ERR=%s\n" +msgid "Backspaced %d record%s.\n" +msgstr "Backspaced %d registro%s.\n" -#: src/dird/ua_dotcmds.c:1040 +#: src/stored/btape.c:685 src/stored/status.c:361 #, c-format -msgid "List Media failed: ERR=%s\n" -msgstr "Fallo al listar Media: ERR=%s\n" +msgid "Configured device capabilities:\n" +msgstr "Capacidades del dispositivo configuradas:\n" -#: src/dird/ua_dotcmds.c:1054 +#: src/stored/btape.c:703 #, c-format -msgid "List Location failed: ERR=%s\n" -msgstr "Fallo al listar Ubicación: ERR=%s\n" +msgid "Device status:\n" +msgstr "Estado del Dispositivo:\n" -#: src/dird/next_vol.c:166 +#: src/stored/btape.c:717 src/stored/status.c:417 #, c-format -msgid "Purging oldest volume \"%s\"\n" -msgstr "Purgando volumen más antiguo \"%s\"\n" +msgid "Device parameters:\n" +msgstr "Parámetros del Dispositivo:\n" -#: src/dird/next_vol.c:172 +#: src/stored/btape.c:722 #, c-format -msgid "Pruning oldest volume \"%s\"\n" -msgstr "Podando volumen más antiguo \"%s\"\n" +msgid "Status:\n" +msgstr "Estados:\n" -#: src/dird/next_vol.c:191 -msgid "We seem to be looping trying to find the next volume. I give up.\n" +#: src/stored/btape.c:737 +msgid "" +"Test writing larger and larger records.\n" +"This is a torture test for records.\n" +"I am going to write\n" +"larger and larger records. It will stop when the record size\n" +"plus the header exceeds the block size (by default about 64K)\n" msgstr "" -"Parece que estamos en bucle tratando de encontrar el próximo volumen. Me " -"rindo.\n" +"Prueba de escritura de registros cada vez mayores.\n" +"Esta es una prueba de tortura para los registros.\n" +"Voy a escribir\n" +"registros cada vez mayores. Se detendrá cuando el tamaño de registro además " +"de la cabecera excede el tamaño de bloque (por defecto sobre 64K)\n" -#: src/dird/next_vol.c:218 -#, fuzzy, c-format -msgid "Max Volume bytes=%s exceeded. Marking Volume \"%s\" as Full.\n" -msgstr "" -"Máximo bytes por Volumen excedido. Marcando Volumen \"%s\" como Completo.\n" +#: src/stored/btape.c:743 +msgid "Do you want to continue? (y/n): " +msgstr "Desea continuar? (y/n)" -#: src/dird/next_vol.c:226 -#, c-format -msgid "Volume used once. Marking Volume \"%s\" as Used.\n" -msgstr "Volumen utilizado una vez. Marcando Volumen \"%s\" como Usado.\n" +#: src/stored/btape.c:745 src/stored/btape.c:2197 +msgid "Command aborted.\n" +msgstr "Comando Abortado.\n" -#: src/dird/next_vol.c:233 -#, fuzzy, c-format -msgid "Max Volume jobs=%s exceeded. Marking Volume \"%s\" as Used.\n" -msgstr "" -"Máximo jobs por Volumen excedido. Marcando Volumen \"%s\" como Usado.\n" +#: src/stored/btape.c:762 +#, c-format +msgid "Block %d i=%d\n" +msgstr "Bloque %d i=%d\n" -#: src/dird/next_vol.c:243 -#, fuzzy, c-format -msgid "Max Volume files=%s exceeded. Marking Volume \"%s\" as Used.\n" -msgstr "" -"Máximo archivos por Volumen excedido. Marcando Volumen \"%s\" como Usado.\n" +#: src/stored/btape.c:789 +msgid "Skipping read backwards test because BSR turned off.\n" +msgstr "Saltar prueba de lectura hacia atrás, porque BSR esta desactivado.\n" -#: src/dird/next_vol.c:254 -#, fuzzy, c-format +#: src/stored/btape.c:793 msgid "" -"Max configured use duration=%s sec. exceeded. Marking Volume \"%s\" as " -"Used.\n" +"\n" +"=== Write, backup, and re-read test ===\n" +"\n" +"I'm going to write three records and an EOF\n" +"then backup over the EOF and re-read the last record.\n" +"Bacula does this after writing the last block on the\n" +"tape to verify that the block was written correctly.\n" +"\n" +"This is not an *essential* feature ...\n" +"\n" msgstr "" -"Máximo de duración de uso configurado superado. Marcando Volumen \"%s\" " -"como Usado.\n" +"\n" +"=== Prueba de escritura, copia de seguridad y re-lectura ===\n" +"\n" +"Yo voy a escribir 3 registros y un EOF\n" +"a continuación respaldar sobre el EOF y re-leer el ultimo registro.\n" +" Bacula hace esto después de escribir el último bloque en la\n" +"cinta para comprobar que el bloque ha sido escrito correctamente.\n" +"\n" +"Esta es una característica *esencial* ...\n" +"\n" + +#: src/stored/btape.c:806 src/stored/btape.c:817 src/stored/btape.c:828 +#: src/stored/btape.c:1146 src/stored/btape.c:1162 src/stored/btape.c:1904 +#: src/stored/btape.c:2821 +msgid "Error writing record to block.\n" +msgstr "Error al escribir registro al bloque.\n" + +#: src/stored/btape.c:810 src/stored/btape.c:821 src/stored/btape.c:832 +#: src/stored/btape.c:1150 src/stored/btape.c:1166 src/stored/btape.c:1908 +#: src/stored/btape.c:2825 +msgid "Error writing block to device.\n" +msgstr "Error al escribir bloque al dispositivo.\n" -#: src/dird/next_vol.c:267 +#: src/stored/btape.c:813 #, c-format -msgid "Catalog error updating volume \"%s\". ERR=%s" -msgstr "Error de Catálogo actualizando volumen \"%s\". ERR=%s" +msgid "Wrote first record of %d bytes.\n" +msgstr "Escribió primer registro de %d bytes.\n" -#: src/dird/next_vol.c:289 -msgid "volume has expired" -msgstr "volumen ha caducado" +#: src/stored/btape.c:824 +#, c-format +msgid "Wrote second record of %d bytes.\n" +msgstr "Escribió segundo registro de %d bytes.\n" -#: src/dird/next_vol.c:307 src/dird/next_vol.c:351 +#: src/stored/btape.c:835 #, c-format -msgid "Recycled current volume \"%s\"\n" -msgstr "Reciclado actual volumen \"%s\"\n" +msgid "Wrote third record of %d bytes.\n" +msgstr "Escribió tercer registro de %d bytes.\n" -#: src/dird/next_vol.c:312 -msgid "and recycling of current volume failed" -msgstr "y el reciclado de volumen actual fallo" +#: src/stored/btape.c:842 src/stored/btape.c:847 +#, c-format +msgid "Backspace file failed! ERR=%s\n" +msgstr "Fallo en retroceso de archivo! ERR=%s\n" -#: src/dird/next_vol.c:318 -msgid "but should be Append, Purged or Recycle" -msgstr "pero debería ser Anexar, Purgado o Reciclaje" +#: src/stored/btape.c:851 +msgid "Backspaced over EOF OK.\n" +msgstr "Retroceso sobre EOF OK.\n" -#: src/dird/next_vol.c:327 -msgid "volume has recycling disabled" -msgstr "el volumen de reciclado se ha desactivado" +#: src/stored/btape.c:853 +#, c-format +msgid "Backspace record failed! ERR=%s\n" +msgstr "Fallo en retroceso de registro! ERR=%s\n" -#: src/dird/next_vol.c:354 +#: src/stored/btape.c:856 +msgid "Backspace record OK.\n" +msgstr "Retroceso de registro OK.\n" + +#: src/stored/btape.c:859 src/stored/btape.c:865 +#, c-format +msgid "Read block failed! ERR=%s\n" +msgstr "Lectura de bloque fallida! ERR=%s\n" + +#: src/stored/btape.c:870 +msgid "Bad data in record. Test failed!\n" +msgstr "Datos erróneos en el registro. Prueba fallida!\n" + +#: src/stored/btape.c:874 msgid "" -"but should be Append, Purged or Recycle (recycling of the current volume " -"failed)" +"\n" +"Block re-read correct. Test succeeded!\n" msgstr "" -"pero debería ser Anexar, Purgado o Reciclaje (reciclado del volumen actual " -"fallido)" +"\n" +"Re-lectura de bloque correcta. Prueba Satisfactoria!\n" -#: src/dird/next_vol.c:358 +#: src/stored/btape.c:875 msgid "" -"but should be Append, Purged or Recycle (cannot automatically recycle " -"current volume, as it still contains unpruned data or the Volume Retention " -"time has not expired.)" +"=== End Write, backup, and re-read test ===\n" +"\n" msgstr "" -"pero debería ser Anexar, Purgado o Reciclaje (no puede reciclar " -"automáticamente el volumen actual, ya que aún contiene datos \"unpruned\" o " -"el tiempo de retención del Volumen no ha expirado.)" +"=== Fin prueba de escritura, copia de seguridad, y re-lectura ===\n" +"\n" -#: src/dird/next_vol.c:421 -#, c-format -msgid "Unable to get Pool record: ERR=%s" -msgstr "No es posible obtener registro Pool: ERR=%s" +#: src/stored/btape.c:882 +msgid "" +"This is not terribly serious since Bacula only uses\n" +"this function to verify the last block written to the\n" +"tape. Bacula will skip the last block verification\n" +"if you add:\n" +"\n" +"Backward Space Record = No\n" +"\n" +"to your Storage daemon's Device resource definition.\n" +msgstr "" +"Esto no es terriblemente grave, desde que sólo utilices Bacula\n" +"esta función para verificar el último bloque por escrito en la\n" +"cinta. Bacula saltará la verificación del último bloque\n" +"si usted agrega:\n" +"\n" +"Backward Space Record = NO\n" +"\n" +" en la definición de los recursos de Dispositivos de su demonio Storage.\n" -#: src/dird/next_vol.c:428 +#: src/stored/btape.c:904 #, c-format -msgid "Unable add Scratch Volume, Pool \"%s\" full MaxVols=%d\n" -msgstr "" -"No se puede agregar el volumen Scratch, Pool \"%s\" completo MaxVols=%d\n" +msgid "Begin writing %i files of %sB with raw blocks of %u bytes.\n" +msgstr "Inicia escribiendo %i archivos de %sB con raw bloques de %u bytes.\n" -#: src/dird/next_vol.c:448 +#: src/stored/btape.c:925 src/stored/btape.c:2877 #, c-format -msgid "Failed to move Scratch Volume. ERR=%s\n" -msgstr "No se pudo mover Volumen Scratch. ERR=%s\n" +msgid "Write failed at block %u. stat=%d ERR=%s\n" +msgstr "Error al escritura en el bloque %u. stat=%d ERR=%s\n" -#: src/dird/next_vol.c:453 +#: src/stored/btape.c:959 #, c-format -msgid "Using Volume \"%s\" from 'Scratch' pool.\n" -msgstr "Usando Volumen \"%s\" desde 'Scratch' pool.\n" +msgid "Begin writing %i files of %sB with blocks of %u bytes.\n" +msgstr "Inicia escribiendo %i archivos de %sB con bloques de %u bytes.\n" -#: src/dird/ua_cmds.c:120 -msgid "Add media to a pool" -msgstr "Añadir medios a un pool" +#: src/stored/btape.c:968 +msgid "" +"\n" +"Error writing record to block.\n" +msgstr "" +"\n" +"Error escribiendo registro al bloque.\n" -#: src/dird/ua_cmds.c:121 -msgid "Autodisplay console messages" -msgstr "Autodisplay mensajes de la consola" +#: src/stored/btape.c:972 +msgid "" +"\n" +"Error writing block to device.\n" +msgstr "" +"\n" +"Error escribiendo bloque al dispositivo.\n" -#: src/dird/ua_cmds.c:122 -msgid "Automount after label" -msgstr "Auto-montar después de etiquetar" +#: src/stored/btape.c:1027 +msgid "The file_size is too big, stop this test with Ctrl-c.\n" +msgstr "" +"El tamaño_archivo es demasiado grande, detenga esta prueba con Ctrl-c.\n" -#: src/dird/ua_cmds.c:123 -msgid "Cancel a job" -msgstr "Cancelar un Job" +#: src/stored/btape.c:1055 +msgid "Test with zero data, should give the maximum throughput.\n" +msgstr "Prueba con cero de datos, debe dar el máximo rendimiento.\n" -#: src/dird/ua_cmds.c:124 -msgid "Create DB Pool from resource" -msgstr "Crear Pool BD desde recurso" +#: src/stored/btape.c:1067 src/stored/btape.c:1093 +msgid "Test with random data, should give the minimum throughput.\n" +msgstr "Prueba con datos aleatorios, deben dar el rendimiento mínimo.\n" -#: src/dird/ua_cmds.c:125 -msgid "Delete volume, pool or job" -msgstr "Eliminar volumen, pool o job" +#: src/stored/btape.c:1082 +msgid "Test with zero data and bacula block structure.\n" +msgstr "Prueba con cero de datos y estructura del bloque de Bacula.\n" -#: src/dird/ua_cmds.c:126 -msgid "Disable a job" -msgstr "Deshabilitar un job" +#: src/stored/btape.c:1122 +#, c-format +msgid "" +"\n" +"=== Write, rewind, and re-read test ===\n" +"\n" +"I'm going to write %d records and an EOF\n" +"then write %d records and an EOF, then rewind,\n" +"and re-read the data to verify that it is correct.\n" +"\n" +"This is an *essential* feature ...\n" +"\n" +msgstr "" +"\n" +"=== Probar Escritura, Rebobinado y Re-lectura === \n" +"\n" +"Voy a escribir %d registros y un EOF\n" +"a continuación escribiré %d registros y un EOF, a continuación, rebobinar,\n" +"y re-leer los datos para verificar que son correctos.\n" +"\n" +"Este es una característica *esencial*...\n" +"\n" -#: src/dird/ua_cmds.c:127 -msgid "Enable a job" -msgstr "Habilitar un job" +#: src/stored/btape.c:1154 src/stored/btape.c:1170 +#, c-format +msgid "Wrote %d blocks of %d bytes.\n" +msgstr "Escribió %d bloques de %d bytes.\n" -#: src/dird/ua_cmds.c:128 -msgid "Performs FileSet estimate, listing gives full listing" -msgstr "Realiza estimación FileSet, listando lista completa" +#: src/stored/btape.c:1212 src/stored/btape.c:1292 +msgid "Rewind OK.\n" +msgstr "Rebobinar OK.\n" -#: src/dird/ua_cmds.c:131 src/dird/ua_cmds.c:155 -msgid "Terminate Bconsole session" -msgstr "Terminar la sesión bconsole" +#: src/stored/btape.c:1225 src/stored/btape.c:1344 +msgid "Got EOF on tape.\n" +msgstr "Obtuvo EOF en la cinta.\n" -#: src/dird/ua_cmds.c:132 -msgid "Non-interactive gui mode" -msgstr "Modo gui no-interactivo" +#: src/stored/btape.c:1230 +#, c-format +msgid "Read block %d failed! ERR=%s\n" +msgstr "Fallo al leer bloque %d! ERR=%s\n" -#: src/dird/ua_cmds.c:133 -msgid "Print help on specific command" -msgstr "Imprimir ayuda en comandos específicos" +#: src/stored/btape.c:1236 +#, c-format +msgid "Read record failed. Block %d! ERR=%s\n" +msgstr "Fallo al leer registro. Bloque %d! ERR =%s\n" -#: src/dird/ua_cmds.c:138 -msgid "Label a tape" -msgstr "Etiquetar una cinta" +#: src/stored/btape.c:1242 src/stored/btape.c:1374 +#, c-format +msgid "Bad data in record. Expected %d, got %d at byte %d. Test failed!\n" +msgstr "" +"Datos incorrectos en el registro. Esperaba %d, obtuvo %d en byte %d. Prueba " +"Fallida!\n" -#: src/dird/ua_cmds.c:139 -msgid "List objects from catalog" -msgstr "Listar objetos del catálogo" +#: src/stored/btape.c:1249 +#, c-format +msgid "%d blocks re-read correctly.\n" +msgstr "%d bloques releídos correctamente.\n" -#: src/dird/ua_cmds.c:142 -msgid "Full or long list like list command" -msgstr "Completo o lista larga como la lista de comando" +#: src/stored/btape.c:1252 src/stored/btape.c:1381 +msgid "" +"=== Test Succeeded. End Write, rewind, and re-read test ===\n" +"\n" +msgstr "" +"=== Prueba Satisfactoria. Fin prueba de Escritura, Rebobinado y Re-lectura " +"===\n" +"\n" -#: src/dird/ua_cmds.c:145 -msgid "Display pending messages" -msgstr "Mostrar mensajes pendientes" +#: src/stored/btape.c:1280 +msgid "Block position test\n" +msgstr "Prueba de posición del bloque\n" -#: src/dird/ua_cmds.c:146 -msgid "Print current memory usage" -msgstr "Imprimir uso de la memoria actual" +#: src/stored/btape.c:1335 +#, c-format +msgid "Reposition to file:block %d:%d\n" +msgstr "Reposición para archivo:bloque %d:%d\n" -#: src/dird/ua_cmds.c:147 -msgid "Mount storage" -msgstr "Montar Storage" - -#: src/dird/ua_cmds.c:150 -msgid "Prune expired records from catalog" -msgstr "Prunar registros expirados del catálogo" - -#: src/dird/ua_cmds.c:153 -msgid "Purge records from catalog" -msgstr "Purgar registros del catálogo" - -#: src/dird/ua_cmds.c:154 -msgid "Python control commands" -msgstr "Comandos de control de Python" - -#: src/dird/ua_cmds.c:156 -msgid "Query catalog" -msgstr "Consulta de catálogo " - -#: src/dird/ua_cmds.c:157 -msgid "Restore files" -msgstr "Restaurar Archivos" - -#: src/dird/ua_cmds.c:162 -msgid "Relabel a tape" -msgstr "Reetiquetar una cinta" - -#: src/dird/ua_cmds.c:165 -msgid "Release storage" -msgstr "Liberar Storage" +#: src/stored/btape.c:1337 +msgid "Reposition error.\n" +msgstr "Error de reposición.\n" -#: src/dird/ua_cmds.c:166 -msgid "Reload conf file" -msgstr "Recargar archivo de configuración" +#: src/stored/btape.c:1350 +#, c-format +msgid "" +"Read block %d failed! file=%d blk=%d. ERR=%s\n" +"\n" +msgstr "" +"Fallo al leer bloque %d! archivo=%d blk=%d. ERR=%s\n" +"\n" -#: src/dird/ua_cmds.c:167 -msgid "Run a job" -msgstr "Ejecutar un Job" +#: src/stored/btape.c:1352 +msgid "" +"This may be because the tape drive block size is not\n" +" set to variable blocking as normally used by Bacula.\n" +" Please see the Tape Testing chapter in the manual and \n" +" look for using mt with defblksize and setoptions\n" +"If your tape drive block size is correct, then perhaps\n" +" your SCSI driver is *really* stupid and does not\n" +" correctly report the file:block after a FSF. In this\n" +" case try setting:\n" +" Fast Forward Space File = no\n" +" in your Device resource.\n" +msgstr "" +"Esto puede ser porque el tamaño del bloque de la\n" +"unidad de cinta no está establecido en la variable\n" +"de bloqueo como utilizado normalmente por Bacula.\n" +"Consulte el capítulo Probando Cintas en el manual y\n" +"busque por usando mt con defblksize y setoptions.\n" +"Si el tamaño del bloque de la unidad de cinta es correcto,\n" +"entonces quizá el controlador SCSI es *realmente* estúpido\n" +"y no informa correctamente el archivo:bloque después de un FSF.\n" +"En este caso, intente configurar:\n" +" Fast Forward Space File = no\n" +"en su recurso de Dispositivos.\n" -#: src/dird/ua_cmds.c:171 -msgid "Report status" -msgstr "Informe de estado" +#: src/stored/btape.c:1368 +#, c-format +msgid "Read record failed! ERR=%s\n" +msgstr "Fallo al leer registro! ERR=%s\n" -#: src/dird/ua_cmds.c:174 -msgid "Sets debug level" -msgstr "Establecer el nivel de depuración" +#: src/stored/btape.c:1379 +#, c-format +msgid "Block %d re-read correctly.\n" +msgstr "Bloque %d re-leído correctamente.\n" -#: src/dird/ua_cmds.c:177 -msgid "Sets new client address -- if authorized" -msgstr "Establecer nueva dirección del cliente - si esta autorizado" +#: src/stored/btape.c:1400 +msgid "" +"\n" +"\n" +"=== Append files test ===\n" +"\n" +"This test is essential to Bacula.\n" +"\n" +"I'm going to write one record in file 0,\n" +" two records in file 1,\n" +" and three records in file 2\n" +"\n" +msgstr "" +"\n" +"\n" +"=== Prueba de Añadir Archivos===\n" +"\n" +"Esta prueba es esencial para Bacula.\n" +"\n" +"Voy a escribir un registro en el archivo 0,\n" +" dos registros en el archivo 1,\n" +" y tres registros en el archivo de 2\n" +"\n" -#: src/dird/ua_cmds.c:178 -msgid "Show resource records" -msgstr "Mostrar los registros de recursos" +#: src/stored/btape.c:1424 +msgid "Now moving to end of medium.\n" +msgstr "Moviendo ahora a final de medio.\n" -#: src/dird/ua_cmds.c:181 -msgid "Use SQL to query catalog" -msgstr "usar SQL para consultar el catálogo" +#: src/stored/btape.c:1426 src/stored/btape.c:1655 +#, c-format +msgid "We should be in file 3. I am at file %d. %s\n" +msgstr "Deberíamos estar en el archivo 3. Estoy en el archivo %d. %s\n" -#: src/dird/ua_cmds.c:182 -msgid "Print current time" -msgstr "Imprimir hora actual" +#: src/stored/btape.c:1427 src/stored/btape.c:1445 src/stored/btape.c:1644 +#: src/stored/btape.c:1656 src/stored/btape.c:1669 src/stored/btape.c:1686 +msgid "This is correct!" +msgstr "Esto es correcto!" -#: src/dird/ua_cmds.c:183 -msgid "Turn on/off trace to file" -msgstr "Activar/desactivar archivo de traza" +#: src/stored/btape.c:1427 src/stored/btape.c:1445 src/stored/btape.c:1644 +#: src/stored/btape.c:1656 src/stored/btape.c:1669 src/stored/btape.c:1686 +msgid "This is NOT correct!!!!" +msgstr "Esto NO es correcto!" -#: src/dird/ua_cmds.c:184 -msgid "Unmount storage" -msgstr "Desmonte almacenamiento" +#: src/stored/btape.c:1433 +msgid "" +"\n" +"Now the important part, I am going to attempt to append to the tape.\n" +"\n" +msgstr "" +"\n" +"Ahora la parte importante, voy a tratar de anexar a la cinta.\n" +"\n" -#: src/dird/ua_cmds.c:187 -msgid "Umount - for old-time Unix guys, see unmount" -msgstr "Umount - para los viejos tiempos tipos de Unix, véase unmount" +#: src/stored/btape.c:1440 +msgid "" +"Done appending, there should be no I/O errors\n" +"\n" +msgstr "" +"Añadiendo hecho, no debería haber ningún error de E/S\n" +"\n" -#: src/dird/ua_cmds.c:190 -msgid "Update volume, pool or stats" -msgstr "Actualizar volumen, pool o stats" +#: src/stored/btape.c:1441 +msgid "Doing Bacula scan of blocks:\n" +msgstr "Hacer Bacula exploración de los bloques:\n" -#: src/dird/ua_cmds.c:196 -msgid "Use catalog xxx" -msgstr "Usar catálogo xxx" +#: src/stored/btape.c:1443 +msgid "End scanning the tape.\n" +msgstr "Fin del escaneo de la cinta.\n" -#: src/dird/ua_cmds.c:197 -msgid "Does variable expansion" -msgstr "es la variable de expansión" +#: src/stored/btape.c:1444 src/stored/btape.c:1668 +#, c-format +msgid "We should be in file 4. I am at file %d. %s\n" +msgstr "Deberíamos estar en el archivo 4. Estoy en el archivo %d. %s\n" -#: src/dird/ua_cmds.c:198 -msgid "Print Director version" -msgstr "Imprimir la versión del Director" +#: src/stored/btape.c:1469 +msgid "" +"\n" +"Autochanger enabled, but no name or no command device specified.\n" +msgstr "" +"\n" +"Auto-cambiador habilitado, pero ningún nombre o comando de dispositivo " +"especificado.\n" -#: src/dird/ua_cmds.c:199 -msgid "Wait until no jobs are running" -msgstr "Esperar hasta que no se estén ejecutando jobs" +#: src/stored/btape.c:1473 +msgid "" +"\n" +"Ah, I see you have an autochanger configured.\n" +"To test the autochanger you must have a blank tape\n" +" that I can write on in Slot 1.\n" +msgstr "" +"\n" +"Ah, veo que tienen un auto-cargador configurado.\n" +"Para probar el auto-cargador debe tener una cinta en blanco\n" +" que yo pueda escribir en la Ranura 1.\n" -#: src/dird/ua_cmds.c:247 -#, c-format -msgid "%s: is an invalid command.\n" -msgstr "%s: es un comando invalido.\n" +#: src/stored/btape.c:1476 +msgid "" +"\n" +"Do you wish to continue with the Autochanger test? (y/n): " +msgstr "" +"\n" +"¿Desea continuar con la prueba del auto-cambiador? (y/n):" -#: src/dird/ua_cmds.c:288 +#: src/stored/btape.c:1483 msgid "" -"You probably don't want to be using this command since it\n" -"creates database records without labeling the Volumes.\n" -"You probably want to use the \"label\" command.\n" +"\n" +"\n" +"=== Autochanger test ===\n" "\n" msgstr "" -"Usted probablemente no quiere usar este comando, ya que el\n" -"crea registros en la base de datos sin etiquetar los volúmenes.\n" -"Usted probablemente desea utilizar el comando \"label\".\n" +"\n" +"\n" +"=== Prueba Auto-cambiador ===\n" "\n" -#: src/dird/ua_cmds.c:306 -#, c-format -msgid "Pool already has maximum volumes=%d\n" -msgstr "Pool ya tiene volúmenes máximo=%d\n" +#: src/stored/btape.c:1492 +msgid "3301 Issuing autochanger \"loaded\" command.\n" +msgstr "3301 Emitiendo comando auto-cambiador \"cargado\".\n" -#: src/dird/ua_cmds.c:307 -msgid "Enter new maximum (zero for unlimited): " -msgstr "Introduzca nuevo máximo (cero para un número ilimitado):" +#: src/stored/btape.c:1501 +#, c-format +msgid "3991 Bad autochanger command: %s\n" +msgstr "3991 Malo comando cargador: %s\n" -#: src/dird/ua_cmds.c:327 +#: src/stored/btape.c:1502 #, c-format -msgid "Enter number of Volumes to create. 0=>fixed name. Max=%d: " -msgstr "" -"Introduzca el número de volúmenes para crear. 0=>nombre fijo. Máximo=%d:" +msgid "3991 result=\"%s\": ERR=%s\n" +msgstr "3991 resultado=\"%s\": ERR=%s\n" -#: src/dird/ua_cmds.c:333 +#: src/stored/btape.c:1506 #, c-format -msgid "The number must be between 0 and %d\n" -msgstr "El número debe estar comprendido entre 0 y %d\n" +msgid "Slot %d loaded. I am going to unload it.\n" +msgstr "Ranura %d cargada. Voy a descargarla.\n" -#: src/dird/ua_cmds.c:341 -msgid "Enter Volume name: " -msgstr "Introduzca nombre de Volumen:" +#: src/stored/btape.c:1508 +msgid "Nothing loaded in the drive. OK.\n" +msgstr "Nada cargado en la unidad. OK.\n" -#: src/dird/ua_cmds.c:345 -msgid "Enter base volume name: " -msgstr "Introduzca nombre de Volumen base:" +#: src/stored/btape.c:1515 +#, c-format +msgid "3302 Issuing autochanger \"unload %d %d\" command.\n" +msgstr "3302 Emitiendo comando auto-cambiador \"descargar %d %d\".\n" -#: src/dird/ua_cmds.c:354 src/dird/ua_label.c:663 -msgid "Volume name too long.\n" -msgstr "Nombre de Volumen demasiado largo.\n" +#: src/stored/btape.c:1520 +#, c-format +msgid "unload status=%s %d\n" +msgstr "estado descargar=%s %d\n" -#: src/dird/ua_cmds.c:358 src/dird/ua_label.c:669 src/lib/edit.c:501 -msgid "Volume name must be at least one character long.\n" -msgstr "Nombre de volumen debe ser de al menos un carácter de largo.\n" +#: src/stored/btape.c:1520 src/lib/util.c:177 src/lib/util.c:309 +#: src/dird/ua_status.c:1093 src/lib/status.h:115 +msgid "OK" +msgstr "OK" -#: src/dird/ua_cmds.c:369 -msgid "Enter the starting number: " -msgstr "Introduzca el número inicial:" +#: src/stored/btape.c:1520 +msgid "Bad" +msgstr "Malo" -#: src/dird/ua_cmds.c:374 -msgid "Start number must be greater than zero.\n" -msgstr "Número de inicio debe ser mayor que cero.\n" +#: src/stored/btape.c:1523 +#, c-format +msgid "3992 Bad autochanger command: %s\n" +msgstr "3992 Malo comando cargador: %s\n" -#: src/dird/ua_cmds.c:385 -msgid "Enter slot (0 for none): " -msgstr "Introduzca ranura (0 para ninguno):" +#: src/stored/btape.c:1524 +#, c-format +msgid "3992 result=\"%s\": ERR=%s\n" +msgstr "3992 resultado=\"%s\": ERR=%s\n" -#: src/dird/ua_cmds.c:389 -msgid "InChanger? yes/no: " -msgstr "InChanger? si/no: " +#: src/stored/btape.c:1534 +#, c-format +msgid "3303 Issuing autochanger \"load %d %d\" command.\n" +msgstr "3303 Emitiendo comando auto-cambiador \"cargar %d %d\".\n" -#: src/dird/ua_cmds.c:414 +#: src/stored/btape.c:1542 #, c-format -msgid "%d Volumes created in pool %s\n" -msgstr "%d Volúmenes creados en el pool %s\n" +msgid "3303 Autochanger \"load %d %d\" status is OK.\n" +msgstr "3303 Estado auto-cambiador \"carga %d %d\" está OK.\n" -#: src/dird/ua_cmds.c:430 src/dird/ua_cmds.c:1032 -msgid "Turn on or off? " -msgstr "Encender o apagar?" +#: src/stored/btape.c:1546 +#, c-format +msgid "3993 Bad autochanger command: %s\n" +msgstr "3993 Malo comando cargador: %s\n" -#: src/dird/ua_cmds.c:544 +#: src/stored/btape.c:1547 #, c-format -msgid "" -"Can't set %s RecyclePool to %s, %s is not in database.\n" -"Try to update it with 'update pool=%s'\n" -msgstr "" -"No se puede establecer %s RecyclePool para %s, %s no está¡ en la base de " -"datos.\n" -"Intente actualizarlo con 'update pool=%s'\n" - -#: src/dird/ua_cmds.c:562 -#, c-format -msgid "" -"Can't set %s ScratchPool to %s, %s is not in database.\n" -"Try to update it with 'update pool=%s'\n" -msgstr "" -"No se puede establecer %s ScratchPool para %s, %s no está en la base de " -"datos.\n" -"Intente actualizarlo con 'update pool=%s'\n" +msgid "3993 result=\"%s\": ERR=%s\n" +msgstr "3993 resultado=\"%s\": ERR=%s\n" -#: src/dird/ua_cmds.c:631 -#, c-format +#: src/stored/btape.c:1562 msgid "" -"Error: Pool %s already exists.\n" -"Use update to change it.\n" +"\n" +"The test failed, probably because you need to put\n" +"a longer sleep time in the mtx-script in the load) case.\n" +"Adding a 30 second sleep and trying again ...\n" msgstr "" -"Error: Pool %s ya existe.\n" -"Use update para cambiarlo.\n" - -#: src/dird/ua_cmds.c:642 -#, c-format -msgid "Pool %s created.\n" -msgstr "Pool %s creado.\n" - -#: src/dird/ua_cmds.c:672 -msgid "Python interpreter restarted.\n" -msgstr "Interprete Python reiniciado.\n" - -#: src/dird/ua_cmds.c:675 src/dird/ua_cmds.c:1337 -msgid "Nothing done.\n" -msgstr "Nada hecho.\n" - -#: src/dird/ua_cmds.c:699 src/dird/ua_cmds.c:1083 src/dird/ua_run.c:1588 -#, c-format -msgid "Client \"%s\" not found.\n" -msgstr "Cliente \"%s\" no encontrado.\n" - -#: src/dird/ua_cmds.c:708 -#, c-format -msgid "Client \"%s\" address set to %s\n" -msgstr "Cliente \"%s\" dirección configurada para %s\n" - -#: src/dird/ua_cmds.c:742 -#, c-format -msgid "Job \"%s\" %sabled\n" -msgstr "Job \"%s\" %sabled\n" - -#: src/dird/ua_cmds.c:920 -msgid "Enter new debug level: " -msgstr "Introduzca el nuevo nivel de depuración:" - -#: src/dird/ua_cmds.c:997 -msgid "All" -msgstr "All" - -#: src/dird/ua_cmds.c:998 -msgid "Select daemon type to set debug level" -msgstr "Seleccione el tipo de Demonio para establecer el nivel de depuración" - -#: src/dird/ua_cmds.c:1087 src/dird/ua_cmds.c:1972 -#, c-format -msgid "No authorization for Client \"%s\"\n" -msgstr "No autorización para Cliente \"%s\"\n" - -#: src/dird/ua_cmds.c:1092 -msgid "Client name missing.\n" -msgstr "Falta el nombre del cliente.\n" - -#: src/dird/ua_cmds.c:1104 src/dird/ua_cmds.c:1171 src/dird/ua_cmds.c:1994 -#, c-format -msgid "No authorization for Job \"%s\"\n" -msgstr "No autorización para Job \"%s\"\n" - -#: src/dird/ua_cmds.c:1109 -msgid "Job name missing.\n" -msgstr "Falta el nombre del Job.\n" - -#: src/dird/ua_cmds.c:1118 -#, c-format -msgid "Fileset \"%s\" not found.\n" -msgstr "FileSet \"%s\" no encontrado.\n" +"\n" +"Fallo la prueba, probablemente porque es necesario poner\n" +"un mayor tiempo de espera en su mtx-script en la clausula load).\n" +"Añadiendo 30 segundos de espera y volviendo a intentarlo...\n" -#: src/dird/ua_cmds.c:1122 +#: src/stored/btape.c:1575 #, c-format -msgid "No authorization for FileSet \"%s\"\n" -msgstr "No autorización para FileSet \"%s\"\n" - -#: src/dird/ua_cmds.c:1127 -msgid "Fileset name missing.\n" -msgstr "Falta Nombre del Fileset.\n" +msgid "Wrote EOF to %s\n" +msgstr "Escribió EOF para %s\n" -#: src/dird/ua_cmds.c:1138 src/dird/ua_run.c:550 +#: src/stored/btape.c:1579 #, c-format -msgid "Level \"%s\" not valid.\n" -msgstr "Nivel \"%s\" no es válido.\n" - -#: src/dird/ua_cmds.c:1142 -msgid "Level value missing.\n" -msgstr "Valor del nivel ausente.\n" - -#: src/dird/ua_cmds.c:1149 -msgid "Invalid value for accurate. It must be yes or no.\n" -msgstr "Valor no válido para exacto. Debe ser sí o no.\n" - -#: src/dird/ua_cmds.c:1154 -#, fuzzy -msgid "Accurate value missing.\n" -msgstr "Valor del nivel ausente.\n" - -#: src/dird/ua_cmds.c:1167 -msgid "No job specified.\n" -msgstr "Job no especificado.\n" - -#: src/dird/ua_cmds.c:1227 -msgid "Error sending include list.\n" -msgstr "Error al enviar lista incluir.\n" - -#: src/dird/ua_cmds.c:1232 -msgid "Error sending exclude list.\n" -msgstr "Error al enviar lista excluir.\n" - -#: src/dird/ua_cmds.c:1323 msgid "" -"In general it is not a good idea to delete either a\n" -"Pool or a Volume since they may contain data.\n" "\n" -msgstr "" -"En general, esto no es una buena idea para eliminar un\n" -"Pool o un Volumen ya que pueden contener datos.\n" +"The test worked this time. Please add:\n" +"\n" +" sleep %d\n" +"\n" +"to your mtx-changer script in the load) case.\n" "\n" - -#: src/dird/ua_cmds.c:1326 -msgid "Choose catalog item to delete" -msgstr "Seleccione el ítem del catalogo para eliminar" - -#: src/dird/ua_cmds.c:1376 src/dird/ua_cmds.c:1391 src/dird/ua_cmds.c:1401 -#, fuzzy, c-format -msgid "Illegal JobId %s ignored\n" -msgstr "Clonar JobId %d iniciado.\n" - -#: src/dird/ua_cmds.c:1404 -msgid "Enter JobId to delete: " -msgstr "Introduzca jobId para eliminar:" - -#: src/dird/ua_cmds.c:1440 -#, fuzzy, c-format -msgid "Are you sure you want to delete %d JobIds ? (yes/no): " -msgstr "¿Esta usted seguro de que desea eliminar el Pool \"%s\"? (si/no):" - -#: src/dird/ua_cmds.c:1450 -#, c-format -msgid "Illegal JobId range %s - %s should define increasing JobIds, ignored\n" msgstr "" +"\n" +"La prueba funcionó esta vez. Por favor, añada:\n" +"\n" +" sleep %d\n" +"\n" +"en su script mtx-cambiador dentro de de la clausula load).\n" +"\n" -#: src/dird/ua_cmds.c:1454 -#, c-format -msgid "Illegal JobId range %s - %s, ignored\n" +#: src/stored/btape.c:1584 +msgid "" +"\n" +"The test autochanger worked!!\n" +"\n" msgstr "" +"\n" +"La prueba del auto-cargador funcionó!!\n" +"\n" -#: src/dird/ua_cmds.c:1469 -#, fuzzy, c-format -msgid "Jobid %s and associated records deleted from the catalog.\n" -msgstr "Job %s y los registros asociados eliminados del catálogo.\n" +#: src/stored/btape.c:1595 +msgid "You must correct this error or the Autochanger will not work.\n" +msgstr "Usted debe corregir este error o la Auto-cambiador no funcionará.\n" -#: src/dird/ua_cmds.c:1484 -#, c-format +#: src/stored/btape.c:1613 msgid "" "\n" -"This command will delete volume %s\n" -"and all Jobs saved on that volume from the Catalog\n" +"\n" +"=== Forward space files test ===\n" +"\n" +"This test is essential to Bacula.\n" +"\n" +"I'm going to write five files then test forward spacing\n" +"\n" msgstr "" "\n" -"Este comando eliminara los volúmenes %s\n" -"y todos los Jobs guardados en este volumen desde el Catalogo\n" - -#: src/dird/ua_cmds.c:1491 -#, c-format -msgid "Are you sure you want to delete Volume \"%s\"? (yes/no): " -msgstr "¿Estas usted seguro de que desea eliminar el Volumen \"%s\"? (si/no):" +"\n" +"=== Probar espaciar archivos hacia adelante ===\n" +"\n" +"Esta prueba es esencial para Bacula.\n" +"\n" +"Voy a escribir cinco archivo, a continuación probar espaciado hacia " +"adelante\n" +"\n" -#: src/dird/ua_cmds.c:1504 -msgid "Can't list jobs on this volume\n" -msgstr "" +#: src/stored/btape.c:1638 +msgid "Now forward spacing 1 file.\n" +msgstr "Ahora espaciando 1 archivo hacia adelante.\n" -#: src/dird/ua_cmds.c:1529 +#: src/stored/btape.c:1640 src/stored/btape.c:1652 src/stored/btape.c:1665 +#: src/stored/btape.c:1683 src/stored/btape.c:1859 #, c-format -msgid "Are you sure you want to delete Pool \"%s\"? (yes/no): " -msgstr "¿Esta usted seguro de que desea eliminar el Pool \"%s\"? (si/no):" +msgid "Bad status from fsr. ERR=%s\n" +msgstr "Malo estado desde FSR. ERR=%s\n" -#: src/dird/ua_cmds.c:1644 +#: src/stored/btape.c:1643 #, c-format -msgid "Using Catalog name=%s DB=%s\n" -msgstr "Utilizando Catalogo nombre=%s BD=%s\n" - -#: src/dird/ua_cmds.c:1712 -msgid "ERR: Can't open db\n" -msgstr "ERR: No se puede abrir db\n" - -#: src/dird/ua_cmds.c:1759 -msgid "Wait on mount timed out\n" -msgstr "Tiempo agotado en esperar mount \n" +msgid "We should be in file 1. I am at file %d. %s\n" +msgstr "Debemos estar en el archivo 1. Estoy en el archivo %d. %s\n" -#: src/dird/ua_cmds.c:1769 -msgid "ERR: Job was not found\n" -msgstr "ERR: Job no se ha encontrado\n" +#: src/stored/btape.c:1650 +msgid "Now forward spacing 2 files.\n" +msgstr "Ahora espaciando 2 archivo hacia adelante.\n" -#: src/dird/ua_cmds.c:1845 -msgid "" -" Command Description\n" -" ======= ===========\n" -msgstr "" -"Comando Descripción\n" -" ======== ==============\n" +#: src/stored/btape.c:1663 +msgid "Now forward spacing 4 files.\n" +msgstr "Ahora espaciando 4 archivo hacia adelante.\n" -#: src/dird/ua_cmds.c:1849 -#, c-format +#: src/stored/btape.c:1675 msgid "" -" %-13s %s\n" +"The test worked this time. Please add:\n" "\n" -"Arguments:\n" -"\t%s\n" +" Fast Forward Space File = no\n" +"\n" +"to your Device resource for this drive.\n" msgstr "" -"%-13s %s\n" +"La prueba funcionó esta vez. Por favor, añadir:\n" "\n" -"Argumentos:\n" -"\t%s\n" +" Fast Forward Space File = no\n" +"\n" +"a su recurso Device para esta unidad.\n" -#: src/dird/ua_cmds.c:1854 -#, c-format -msgid " %-13s %s\n" -msgstr " %-13s %s\n" +#: src/stored/btape.c:1681 +msgid "Now forward spacing 1 more file.\n" +msgstr "Ahora espaciando un archivo mas hacia adelante.\n" -#: src/dird/ua_cmds.c:1858 +#: src/stored/btape.c:1685 #, c-format +msgid "We should be in file 5. I am at file %d. %s\n" +msgstr "Debemos estar en el archivo 5. Estoy en el archivo %d. %s\n" + +#: src/stored/btape.c:1690 msgid "" "\n" -"Can't find %s command.\n" +"=== End Forward space files test ===\n" "\n" msgstr "" "\n" -"No se puede encontrar comando %s. \n" +"=== Finalizo prueba de Espaciar archivos hacia adelante ===\n" "\n" -#: src/dird/ua_cmds.c:1860 +#: src/stored/btape.c:1694 msgid "" "\n" -"When at a prompt, entering a period cancels the command.\n" -"\n" +"The forward space file test failed.\n" msgstr "" "\n" -"Cuando en un prompt, entrando un período cancela el comando.\n" -"\n" - -#: src/dird/ua_cmds.c:1896 src/filed/status.c:85 -#, c-format -msgid "%s Version: %s (%s) %s %s %s %s\n" -msgstr "%s Versión: %s (%s) %s %s %s %s\n" +"Fallida la prueba de espaciar archivos hacia adelante.\n" -#: src/dird/ua_cmds.c:1955 src/dird/ua_cmds.c:1982 src/dird/ua_cmds.c:2004 -#, c-format -msgid "No authorization for Catalog \"%s\"\n" -msgstr "No autorización para Catalogo \"%s\"\n" +#: src/stored/btape.c:1696 +msgid "" +"You have Fast Forward Space File enabled.\n" +"I am turning it off then retrying the test.\n" +msgstr "" +"usted tiene habilitado Espaciar Archivos Hacia Adelante Rápido.\n" +"Voy deshabilitarlo y luego volver a intentar la prueba.\n" -#: src/dird/ua_cmds.c:2049 -#, c-format -msgid "Could not open catalog database \"%s\".\n" -msgstr "No se pudo abrir la base de datos de catálogo \"%s\".\n" - -#: src/dird/ua_cmds.c:2059 -#, c-format -msgid "Using Catalog \"%s\"\n" -msgstr "Usando Catalogo \"%s\"\n" - -#: src/dird/ua_tree.c:74 -msgid "add dir/file to be restored recursively, wildcards allowed" +#: src/stored/btape.c:1702 +msgid "" +"You must correct this error or Bacula will not work.\n" +"Some systems, e.g. OpenBSD, require you to set\n" +" Use MTIOCGET= no\n" +"in your device resource. Use with caution.\n" msgstr "" -"añadir directorio/archivo a ser restaurado de forma recursiva, comodines " -"permitido" - -#: src/dird/ua_tree.c:75 -msgid "change current directory" -msgstr "cambio del directorio actual" - -#: src/dird/ua_tree.c:76 -msgid "count marked files in and below the cd" -msgstr "contar archivos marcados dentro y por debajo de CD" - -#: src/dird/ua_tree.c:77 -msgid "delete dir/file to be restored recursively in dir" -msgstr "eliminar dir/archivo a restaurar recursivamente en dir" - -#: src/dird/ua_tree.c:78 src/dird/ua_tree.c:79 -msgid "long list current directory, wildcards allowed" -msgstr "larga lista directorio actual, comodines permitido" - -#: src/dird/ua_tree.c:80 -msgid "leave file selection mode" -msgstr "abandonar el modo de selección de archivos" - -#: src/dird/ua_tree.c:81 -msgid "estimate restore size" -msgstr "tamaño estimado de restauración" - -#: src/dird/ua_tree.c:82 -msgid "same as done command" -msgstr "mismo que el comando done" - -#: src/dird/ua_tree.c:83 -msgid "find files, wildcards allowed" -msgstr "encontrar los archivos, comodines permitidos" - -#: src/dird/ua_tree.c:84 src/dird/ua_tree.c:97 src/dird/ua_tree.c:98 -msgid "print help" -msgstr "imprimir ayuda" - -#: src/dird/ua_tree.c:85 src/dird/ua_tree.c:86 -msgid "list current directory, wildcards allowed" -msgstr "lista el directorio actual, comodines permitidos" - -#: src/dird/ua_tree.c:87 -#, fuzzy -msgid "list subdir in current directory, wildcards allowed" -msgstr "lista el directorio actual, comodines permitidos" - -#: src/dird/ua_tree.c:88 -msgid "list the marked files in and below the cd" -msgstr "lista los archivos marcados dentro y por debajo de CD" - -#: src/dird/ua_tree.c:89 -#, fuzzy -msgid "list the marked files in" -msgstr "lista los archivos marcados dentro y por debajo de CD" +"Usted debe corregir este error o Bacula no funcionará.\n" +"Algunos Sistemas, por ejemplo OpenBSD, requiere que usted establezca\n" +"Use MTIOCGET = no\n" +"en su recurso de dispositivo. Utilizar con precaución.\n" -#: src/dird/ua_tree.c:90 -msgid "mark dir/file to be restored recursively, wildcards allowed" +#: src/stored/btape.c:1736 +msgid "" +"\n" +"Append test failed. Attempting again.\n" +"Setting \"Hardware End of Medium = no\n" +" and \"Fast Forward Space File = no\n" +"and retrying append test.\n" +"\n" msgstr "" -"marca directorio/archivo para restaurar recursivamente, comodines permitido" - -#: src/dird/ua_tree.c:91 -msgid "mark directory name to be restored (no files)" -msgstr "marca nombre del directorio para ser restaurado (sin archivos)" - -#: src/dird/ua_tree.c:92 src/dird/ua_tree.c:93 -msgid "print current working directory" -msgstr "imprimir directorio de trabajo actual" +"\n" +"Prueba de Añadir fallida. Intentando de nuevo.\n" +"Configurando \"Hardware End of Medium = no\n" +" y \"Fast Forward Space File = no\n" +"y volviendo a intentar la prueba de añadir.\n" +"\n" -#: src/dird/ua_tree.c:94 -msgid "unmark dir/file to be restored recursively in dir" +#: src/stored/btape.c:1744 +msgid "" +"\n" +"\n" +"It looks like the test worked this time, please add:\n" +"\n" +" Hardware End of Medium = No\n" +"\n" +" Fast Forward Space File = No\n" +"to your Device resource in the Storage conf file.\n" msgstr "" -"desmarcar directorio/archivo para ser restaurado en el directorio " -"recursivamente" - -#: src/dird/ua_tree.c:95 -msgid "unmark directory name only no recursion" -msgstr "desmarcar solo nombre del directorio sin recursividad" - -#: src/dird/ua_tree.c:96 -msgid "quit and do not do restore" -msgstr "salir y no restaurar" +"\n" +"\n" +"Parece que la prueba funcionó esta vez, por favor, añadir:\n" +"\n" +" Hardware End of Medium = No\n" +"\n" +" Fast Forward Space File = No\n" +"a su recurso de Device en el archivo configuración del Storage.\n" -#: src/dird/ua_tree.c:118 +#: src/stored/btape.c:1751 msgid "" "\n" -"You are now entering file selection mode where you add (mark) and\n" -"remove (unmark) files to be restored. No files are initially added, unless\n" -"you used the \"all\" keyword on the command line.\n" -"Enter \"done\" to leave this mode.\n" "\n" +"That appears *NOT* to have corrected the problem.\n" msgstr "" "\n" -"Usted está entrando ahora en el modo de selección de archivo donde usted " -"agrega(mark) y\n" -"elimina (unmark) los archivos que va a restaurar. No hay archivos añadido " -"inicialmente, a menos que\n" -"usted utilice la palabra clave \"all\" en la línea de comandos. Introduzca " -"\"done\" para salir de este modo.\n" "\n" +"Parece que *NO* se ha corregido el problema.\n" -#: src/dird/ua_tree.c:129 src/dird/ua_tree.c:831 -#, c-format -msgid "cwd is: %s\n" -msgstr "cwd es: %s\n" - -#: src/dird/ua_tree.c:138 src/dird/ua_tree.c:157 -#, c-format -msgid "Invalid command \"%s\". Enter \"done\" to exit.\n" -msgstr "Invalido comando \"%s\". Introduzca \"done\" para salir.\n" +#: src/stored/btape.c:1756 +msgid "" +"\n" +"\n" +"It looks like the append failed. Attempting again.\n" +"Setting \"BSF at EOM = yes\" and retrying append test.\n" +msgstr "" +"\n" +"\n" +"Parece que ha fallado el añadir.Intentando de nuevo.\n" +"Configurando \"BSF en EOM = yes\" y reintentando probar añadir.\n" -#: src/dird/ua_tree.c:227 -#, c-format +#: src/stored/btape.c:1761 msgid "" -"Something is wrong with the Delta sequence of %s, skiping new parts. Current " -"sequence is %d\n" +"\n" +"\n" +"It looks like the test worked this time, please add:\n" +"\n" +" Hardware End of Medium = No\n" +" Fast Forward Space File = No\n" +" BSF at EOM = yes\n" +"\n" +"to your Device resource in the Storage conf file.\n" msgstr "" +"\n" +"\n" +"Parece que la prueba funcionó esta vez, por favor agregue:\n" +"\n" +"Hardware End of Medium = No\n" +" Fast Forward Space File = No\n" +" BSF at EOM = yes\n" +"\n" +"en su recurso Device en el archivo de configuración del Storage.\n" -#: src/dird/ua_tree.c:373 src/dird/ua_tree.c:385 src/dird/ua_tree.c:402 -msgid "No files marked.\n" -msgstr "Ningún archivo marcado.\n" +#: src/stored/btape.c:1772 +msgid "" +"\n" +"Append test failed.\n" +"\n" +"\n" +"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n" +"Unable to correct the problem. You MUST fix this\n" +"problem before Bacula can use your tape drive correctly\n" +"\n" +"Perhaps running Bacula in fixed block mode will work.\n" +"Do so by setting:\n" +"\n" +"Minimum Block Size = nnn\n" +"Maximum Block Size = nnn\n" +"\n" +"in your Storage daemon's Device definition.\n" +"nnn must match your tape driver's block size, which\n" +"can be determined by reading your tape manufacturers\n" +"information, and the information on your kernel dirver.\n" +"Fixed block sizes, however, are not normally an ideal solution.\n" +"\n" +"Some systems, e.g. OpenBSD, require you to set\n" +" Use MTIOCGET= no\n" +"in your device resource. Use with caution.\n" +msgstr "" +"\n" +"Fallo prueba Anexar.\n" +"\n" +"\n" +"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n" +"No se puede corregir el problema. Usted DEBE corregir este\n" +"problema antes de que Bacula pueda utilizar su unidad de cinta " +"correctamente \n" +"\n" +"Tal vez ejecutando Bacula en modo de bloque fijo va a funcionar.\n" +"Hacerlo estableciendo:\n" +"\n" +"Minimum Block Size = nnn\n" +"Maximum Block Size = nnn\n" +"\n" +"en la definición de dispositivo del demonio Storage.\n" +"nnn debe coincidir con el tamaño de bloque controlador de su cinta, que\n" +"puede determinarse mediante lectura de información del fabricante de la " +"cinta, y la información en su driver del núcleo.\n" +"Tamaños de bloque fijo, sin embargo, normalmente no son una solución ideal.\n" +"\n" +"Algunos sistemas, por ejemplo OpenBSD, exigen que se establezcan\n" +"Use MTIOCGET= no\n" +"en su recurso de dispositivo. Utilice con precaución.\n" -#: src/dird/ua_tree.c:387 -msgid "1 file marked.\n" -msgstr "1 archivo marcado.\n" +#: src/stored/btape.c:1794 +msgid "" +"\n" +"The above Bacula scan should have output identical to what follows.\n" +"Please double check it ...\n" +"=== Sample correct output ===\n" +"1 block of 64448 bytes in file 1\n" +"End of File mark.\n" +"2 blocks of 64448 bytes in file 2\n" +"End of File mark.\n" +"3 blocks of 64448 bytes in file 3\n" +"End of File mark.\n" +"1 block of 64448 bytes in file 4\n" +"End of File mark.\n" +"Total files=4, blocks=7, bytes = 451,136\n" +"=== End sample correct output ===\n" +"\n" +"If the above scan output is not identical to the\n" +"sample output, you MUST correct the problem\n" +"or Bacula will not be able to write multiple Jobs to \n" +"the tape.\n" +"\n" +msgstr "" +"\n" +"La anterior Bacula análisis debe tener una salida idéntica a lo que sigue.\n" +"Por favor, verifique bien ...\n" +"Ejemplo de la salida correcta === n1 bloque de 64448 bytes en el archivo " +"1\n" +"Fin de la marca de archivo.\n" +"2 bloques de 64.448 bytes en el archivo 2\n" +"Fin de la marca de archivo.\n" +"3 bloques de 64448 bytes en el archivo 3\n" +"Fin de la marca de archivo.\n" +"1 bloque de 64448 bytes en el archivo 4\n" +"Fin de la marca de archivo.\n" +"Total de archivos = 4, bloques = 7, bytes = 451.136\n" +"===Fin ejemplo de la salida correcta===\n" +"\n" +"Si la anterior salida de escaneo no es idéntica a la \n" +"salida de ejemplo, usted DEBE corregir el problema\n" +"o Bacula no será capaz de escribir varios Jobs en\n" +"la cinta.\n" +"\n" -#: src/dird/ua_tree.c:389 +#: src/stored/btape.c:1837 #, c-format -msgid "%s files marked.\n" -msgstr "%s archivos marcados.\n" - -#: src/dird/ua_tree.c:417 -msgid "No directories marked.\n" -msgstr "Ningún directorio marcado.\n" - -#: src/dird/ua_tree.c:419 -msgid "1 directory marked.\n" -msgstr "1 directorio marcado.\n" +msgid "Bad status from fsf. ERR=%s\n" +msgstr "Malo estado desde FSF. ERR=%s\n" -#: src/dird/ua_tree.c:421 -#, c-format -msgid "%s directories marked.\n" -msgstr "%s directorios marcados.\n" +#: src/stored/btape.c:1841 +msgid "Forward spaced 1 file.\n" +msgstr "Espaciado 1 archivo hacia adelante.\n" -#: src/dird/ua_tree.c:442 +#: src/stored/btape.c:1844 #, c-format -msgid "%s total files/dirs. %s marked to be restored.\n" -msgstr "" -"%s total de los archivos/directorios. %s marcado para ser restaurado.\n" - -#: src/dird/ua_tree.c:453 -msgid "No file specification given.\n" -msgstr "Especificación de archivo no dado.\n" +msgid "Forward spaced %d files.\n" +msgstr "Espaciados %d archivos hacia adelante.\n" -#: src/dird/ua_tree.c:674 -#, c-format -msgid "Node %s has no children.\n" -msgstr "Nodo %s no tiene hijos.\n" +#: src/stored/btape.c:1863 +msgid "Forward spaced 1 record.\n" +msgstr "Espaciado 1 registro hacia adelante.\n" -#: src/dird/ua_tree.c:767 +#: src/stored/btape.c:1866 #, c-format -msgid "%d total files; %d marked to be restored; %s bytes.\n" -msgstr "%d total de los archivos; %d marcado para ser restaurado; %s bytes.\n" +msgid "Forward spaced %d records.\n" +msgstr "Espaciados %d registros hacia adelante.\n" -#: src/dird/ua_tree.c:778 src/stored/btape.c:2949 +#: src/stored/btape.c:1911 #, c-format -msgid "" -" Command Description\n" -" ======= ===========\n" -msgstr "" -"Comando Descripción\n" -" ======= ===========\n" - -#: src/dird/ua_tree.c:801 -msgid "Too few or too many arguments. Try using double quotes.\n" -msgstr "Muy pocos o demasiados argumentos. Trate de usar comillas dobles.\n" +msgid "Wrote one record of %d bytes.\n" +msgstr "Escribió un registro de %d bytes.\n" -#: src/dird/ua_tree.c:814 -msgid "Invalid path given.\n" -msgstr "Ruta dada no válida.\n" +#: src/stored/btape.c:1913 +msgid "Wrote block to device.\n" +msgstr "Escribió bloques al dispositivo.\n" -#: src/dird/ua_tree.c:850 src/dird/ua_tree.c:862 -msgid "No files unmarked.\n" -msgstr "No hay archivos sin marcar.\n" +#: src/stored/btape.c:1927 +msgid "Enter length to read: " +msgstr "Introduzca la longitud para leer:" -#: src/dird/ua_tree.c:864 -msgid "1 file unmarked.\n" -msgstr "1 archivo sin marcar.\n" +#: src/stored/btape.c:1932 +msgid "Bad length entered, using default of 1024 bytes.\n" +msgstr "Mala longitud introducida, utilizando 1024 bytes por defecto.\n" -#: src/dird/ua_tree.c:867 +#: src/stored/btape.c:1941 #, c-format -msgid "%s files unmarked.\n" -msgstr "%s archivos sin marcar.\n" +msgid "Read of %d bytes gives stat=%d. ERR=%s\n" +msgstr "Lectura de %d bytes obtuvo stat=%d. ERR=%s\n" -#: src/dird/ua_tree.c:878 src/dird/ua_tree.c:895 -msgid "No directories unmarked.\n" -msgstr "No hay directorios sin marcar.\n" +#: src/stored/btape.c:1964 src/stored/btape.c:2013 +#, c-format +msgid "End of tape\n" +msgstr "Fin de la cinta\n" -#: src/dird/ua_tree.c:897 -msgid "1 directory unmarked.\n" -msgstr "1 directorio sin marcar.\n" +#: src/stored/btape.c:1969 +#, c-format +msgid "Starting scan at file %u\n" +msgstr "Iniciando escaneo en el archivo %u\n" -#: src/dird/ua_tree.c:899 +#: src/stored/btape.c:1974 src/stored/tape_dev.c:613 #, c-format -msgid "%d directories unmarked.\n" -msgstr "%d directorios sin marcar.\n" +msgid "read error on %s. ERR=%s.\n" +msgstr "error de lectura en %s. ERR=%s.\n" -#: src/dird/dird_conf.c:567 src/tray-monitor/tray_conf.c:168 -#: src/qt-console/tray-monitor/tray_conf.cpp:168 +#: src/stored/btape.c:1976 #, c-format -msgid "No %s resource defined\n" -msgstr "Recurso %s no definido\n" +msgid "Bad status from read %d. ERR=%s\n" +msgstr "Malo estado desde lectura %d. ERR=%s\n" -#: src/dird/dird_conf.c:576 +#: src/stored/btape.c:1979 src/stored/btape.c:1993 src/stored/btape.c:2057 +#: src/stored/btape.c:2069 src/stored/btape.c:2082 src/stored/btape.c:2098 #, c-format -msgid "Director: name=%s MaxJobs=%d FDtimeout=%s SDtimeout=%s\n" -msgstr "Director: nombre=%s MaxJobs=%d FDtimeout=%s SDtimeout=%s\n" +msgid "1 block of %d bytes in file %d\n" +msgstr "1 bloque de %d bytes en el archivo %d\n" -#: src/dird/dird_conf.c:581 +#: src/stored/btape.c:1982 src/stored/btape.c:1996 src/stored/btape.c:2060 +#: src/stored/btape.c:2072 src/stored/btape.c:2085 src/stored/btape.c:2101 #, c-format -msgid " query_file=%s\n" -msgstr "query_file=%s\n" +msgid "%d blocks of %d bytes in file %d\n" +msgstr "%d bloques de %d bytes en archivo %d\n" -#: src/dird/dird_conf.c:584 src/dird/dird_conf.c:604 src/dird/dird_conf.c:621 -#: src/dird/dird_conf.c:689 src/dird/dird_conf.c:693 src/dird/dird_conf.c:697 -#: src/dird/dird_conf.c:730 src/dird/dird_conf.c:753 src/dird/dird_conf.c:757 -#: src/dird/dird_conf.c:761 src/dird/dird_conf.c:765 src/dird/dird_conf.c:769 -#: src/dird/dird_conf.c:782 src/dird/dird_conf.c:1018 -#: src/dird/dird_conf.c:1025 -msgid " --> " -msgstr "--> " +#: src/stored/btape.c:2004 src/stored/btape.c:2076 +#, c-format +msgid "End of File mark.\n" +msgstr "Fin de la marca de archivo.\n" -#: src/dird/dird_conf.c:589 +#: src/stored/btape.c:2025 src/stored/btape.c:2129 #, c-format -msgid "Console: name=%s SSL=%d\n" -msgstr "Console: nombre=%s SSL=%d\n" +msgid "Total files=%d, blocks=%d, bytes = %s\n" +msgstr "Total de archivos=%d, bloques=%d, bytes = %s\n" -#: src/dird/dird_conf.c:594 +#: src/stored/btape.c:2089 #, c-format -msgid "Counter: name=%s min=%d max=%d cur=%d wrapcntr=%s\n" -msgstr "Counter: nombre=%s mínimo=%d máximo=%d cur=%d wrapcntr=%s\n" +msgid "Short block read.\n" +msgstr "Leer bloque corto.\n" -#: src/dird/dird_conf.c:599 +#: src/stored/btape.c:2092 #, c-format -msgid "Counter: name=%s min=%d max=%d\n" -msgstr "Counter: nombre=%s mínimo=%d máximo=%d\n" +msgid "Error reading block. ERR=%s\n" +msgstr "Error leyendo el bloque. ERR=%s\n" -#: src/dird/dird_conf.c:613 +#: src/stored/btape.c:2116 #, c-format -msgid "Client: name=%s address=%s FDport=%d MaxJobs=%u\n" -msgstr "Cliente: nombre=%s dirección=%s FDport=%d MaxJobs=%u\n" +msgid "" +"Block=%u file,blk=%u,%u blen=%u First rec FI=%s SessId=%u SessTim=%u Strm=%s " +"rlen=%d\n" +msgstr "" +"Bloque=%u archivo,blk=%u,%u blen=%u Primero rec FI=%s SessId=%u SessTim=%u " +"Strm=%s rlen=%d\n" -#: src/dird/dird_conf.c:616 +#: src/stored/btape.c:2138 #, c-format -msgid " JobRetention=%s FileRetention=%s AutoPrune=%d\n" -msgstr "JobRetention=%s FileRetention=%s AutoPrune=%d\n" +msgid "Device status: %u. ERR=%s\n" +msgstr "Estado del dispositivo: %u. ERR=%s\n" -#: src/dird/dird_conf.c:629 +#: src/stored/btape.c:2170 #, c-format msgid "" -"Device: name=%s ok=%d num_writers=%d max_writers=%d\n" -" reserved=%d open=%d append=%d read=%d labeled=%d offline=%d autochgr=" -"%d\n" -" poolid=%s volname=%s MediaType=%s\n" +"\n" +"This command simulates Bacula writing to a tape.\n" +"It requires either one or two blank tapes, which it\n" +"will label and write.\n" +"\n" +"If you have an autochanger configured, it will use\n" +"the tapes that are in slots 1 and 2, otherwise, you will\n" +"be prompted to insert the tapes when necessary.\n" +"\n" +"It will print a status approximately\n" +"every 322 MB, and write an EOF every %s. If you have\n" +"selected the simple test option, after writing the first tape\n" +"it will rewind it and re-read the last block written.\n" +"\n" +"If you have selected the multiple tape test, when the first tape\n" +"fills, it will ask for a second, and after writing a few more \n" +"blocks, it will stop. Then it will begin re-reading the\n" +"two tapes.\n" +"\n" +"This may take a long time -- hours! ...\n" +"\n" msgstr "" -"Device: nombre=%s ok=%d num_writers=%d max_writers=%d\n" -" reservado=%d abierto=%d append=%d leer=%d etiquetado=%d offline=%d autochgr=" -"%d\n" -" poolid=%s volname=%s MediaType=%s\n" +"\n" +"Este comando simula Bacula escrito en una cinta.\n" +"Se requiere de una o dos cintas en blanco, que se pueda etiquetar y " +"escribir.\n" +"\n" +"Si usted tiene un auto-cargador configurado, se usará\n" +"las cintas que se encuentran en las ranuras 1 y 2, de lo contrario,\n" +"se le pedirá que inserte las cintas cuando sea necesario.\n" +"\n" +"Se imprimirá un estado a aproximadamente cada 322 MB, y escribirá un EOF " +"cada %s.Si ha seleccionado\n" +"la opción de prueba simple, después de escribir la primera cinta\n" +"se rebobinará y volverá a leer el último bloque escrito.\n" +"\n" +"Si ha seleccionado\n" +"la prueba de la cinta múltiple, cuando la primera cinta se llena, se le " +"preguntará por la segunda, y después de escribir unos pocos\n" +"bloques más, se detendrá. Entonces comenzará a releer las\n" +"dos cintas.\n" +"\n" +"Esto puede tomar mucho tiempo - horas! ...\n" -#: src/dird/dird_conf.c:643 -#, c-format +#: src/stored/btape.c:2188 msgid "" -"Storage: name=%s address=%s SDport=%d MaxJobs=%u\n" -" DeviceName=%s MediaType=%s StorageId=%s\n" +"Do you want to run the simplified test (s) with one tape\n" +"or the complete multiple tape (m) test: (s/m) " msgstr "" -"Storage: nombre=%s dirección=%s SDport=%d MaxJobs=%u\n" -" DeviceName=%s MediaType=%s StorageId=%s\n" +"¿Desea ejecutar la prueba simplificada (s) con una cinta\n" +"o la prueba completa con múltiples (m) cintas?: (s/m)" -#: src/dird/dird_conf.c:656 -#, c-format -msgid "" -"Catalog: name=%s address=%s DBport=%d db_name=%s\n" -" db_driver=%s db_user=%s MutliDBConn=%d\n" -msgstr "" -"Catálogo: nombre=%s dirección=%s DBport=%d db_nombre=%s\n" -" db_driver=%s db_user=%s MutliDBConn=%d\n" +#: src/stored/btape.c:2191 +msgid "Simple test (single tape) selected.\n" +msgstr "Prueba simple (una sola cinta) seleccionada.\n" -#: src/dird/dird_conf.c:669 -#, c-format -msgid "%s: name=%s JobType=%d level=%s Priority=%d Enabled=%d\n" -msgstr "%s: nombre=%s JobType=%d nivel=%s Prioridad=%d Activo=%d\n" +#: src/stored/btape.c:2194 +msgid "Multiple tape test selected.\n" +msgstr "Múltiples cintas de prueba seleccionados.\n" -#: src/dird/dird_conf.c:670 -msgid "JobDefs" -msgstr "JobDefs" +#: src/stored/btape.c:2236 +msgid "Wrote Start of Session label.\n" +msgstr "Escribe la etiqueta de Inicio de Sesión.\n" -#: src/dird/dird_conf.c:674 +#: src/stored/btape.c:2255 #, c-format -msgid "" -" MaxJobs=%u Resched=%d Times=%d Interval=%s Spool=%d WritePartAfterJob=" -"%d\n" -msgstr "" -"MaxJobs=%u Resched=%d Times=%d Intervalo=%s Spool=%d WritePartAfterJob=%d\n" +msgid "%s Begin writing Bacula records to tape ...\n" +msgstr "%s Empezar a escribir registros Bacula en cinta ...\n" -#: src/dird/dird_conf.c:680 +#: src/stored/btape.c:2257 #, c-format -msgid " SpoolSize=%s\n" -msgstr "SpoolSize=%s\n" +msgid "%s Begin writing Bacula records to first tape ...\n" +msgstr "%s Empezar a escribir registros Bacula en la primera cinta ...\n" -#: src/dird/dird_conf.c:683 -#, c-format -msgid " Accurate=%d\n" -msgstr "Preciso=%d\n" +#: src/stored/btape.c:2283 +msgid "Flush block failed.\n" +msgstr "Fallo Flush bloque.\n" -#: src/dird/dird_conf.c:686 +#: src/stored/btape.c:2297 #, c-format -msgid " SelectionType=%d\n" -msgstr "SelectionType=%d\n" +msgid "Wrote block=%u, file,blk=%u,%u VolBytes=%s rate=%sB/s\n" +msgstr "Escribió bloque=%u, archivo,blk=%u,%u VolBytes=%s tasa=%sB/s\n" -#: src/dird/dird_conf.c:701 +#: src/stored/btape.c:2308 #, c-format -msgid " --> Where=%s\n" -msgstr "--> Donde=%s\n" +msgid "%s Flush block, write EOF\n" +msgstr "%s Flush bloque, escribir EOF\n" -#: src/dird/dird_conf.c:704 -#, c-format -msgid " --> RegexWhere=%s\n" -msgstr "--> RegexDonde=%s\n" +#: src/stored/btape.c:2317 +msgid "Wrote 1000 blocks on second tape. Done.\n" +msgstr "Escribió 1000 bloques en segunda cinta. Hecho.\n" -#: src/dird/dird_conf.c:707 -#, c-format -msgid " --> Bootstrap=%s\n" -msgstr "--> Bootstrap=%s\n" +#: src/stored/btape.c:2322 +msgid "Not OK\n" +msgstr "No OK\n" -#: src/dird/dird_conf.c:710 -#, c-format -msgid " --> WriteBootstrap=%s\n" -msgstr "--> WriteBootstrap=%s\n" +#: src/stored/btape.c:2346 +msgid "Job canceled.\n" +msgstr "Job cancelado.\n" -#: src/dird/dird_conf.c:713 -#, c-format -msgid " --> PluginOptions=%s\n" -msgstr "--> PluginOptions=%s\n" +#: src/stored/btape.c:2357 +msgid "Set ok=false after write_block_to_device.\n" +msgstr "Establecer ok=false después de write_block_to_device.\n" -#: src/dird/dird_conf.c:716 -#, c-format -msgid " --> MaxRunTime=%u\n" -msgstr "--> MaxRunTime=%u\n" +#: src/stored/btape.c:2361 +msgid "Wrote End of Session label.\n" +msgstr "Escribió etiqueta de Fin de Sesión.\n" -#: src/dird/dird_conf.c:719 +#: src/stored/btape.c:2385 #, c-format -msgid " --> MaxWaitTime=%u\n" -msgstr "--> MaxWaitTime=%u\n" +msgid "Wrote state file last_block_num1=%d last_block_num2=%d\n" +msgstr "Escribió archivo de estado last_block_num1=%d last_block_num2=%d\n" -#: src/dird/dird_conf.c:722 +#: src/stored/btape.c:2389 #, c-format -msgid " --> MaxStartDelay=%u\n" -msgstr "--> MaxStartDelay=%u\n" - -#: src/dird/dird_conf.c:725 -#, fuzzy, c-format -msgid " --> MaxRunSchedTime=%u\n" -msgstr "--> MaxRunTime=%u\n" - -#: src/dird/dird_conf.c:737 -#, fuzzy, c-format -msgid " --> Base %s\n" -msgstr "--> Objetivo=%s\n" - -#: src/dird/dird_conf.c:743 src/lib/runscript.c:297 -msgid " --> RunScript\n" -msgstr "--> EjecutarScript\n" +msgid "Could not create state file: %s ERR=%s\n" +msgstr "No se puede crear archivo de estado: %s ERR=%s\n" -#: src/dird/dird_conf.c:744 src/lib/runscript.c:298 +#: src/stored/btape.c:2400 #, c-format -msgid " --> Command=%s\n" -msgstr "--> Comando=%s\n" +msgid "" +"\n" +"\n" +"%s Done filling tape at %d:%d. Now beginning re-read of tape ...\n" +msgstr "" +"\n" +"\n" +"%s Hecho llenado de cinta en %d:%d. Ahora empezando a releer la cinta ...\n" -#: src/dird/dird_conf.c:745 src/lib/runscript.c:299 +#: src/stored/btape.c:2403 #, c-format -msgid " --> Target=%s\n" -msgstr "--> Objetivo=%s\n" +msgid "" +"\n" +"\n" +"%s Done filling tapes at %d:%d. Now beginning re-read of first tape ...\n" +msgstr "" +"\n" +"\n" +"%s Hecho llenado de cintas en %d:%d. Ahora empezando a releer la primera " +"cinta ...\n" -#: src/dird/dird_conf.c:746 src/lib/runscript.c:300 -#, c-format -msgid " --> RunOnSuccess=%u\n" -msgstr "--> RunOnSuccess=%u\n" +#: src/stored/btape.c:2409 +msgid "do_unfill failed.\n" +msgstr "do_unfill fallido.\n" -#: src/dird/dird_conf.c:747 src/lib/runscript.c:301 +#: src/stored/btape.c:2414 #, c-format -msgid " --> RunOnFailure=%u\n" -msgstr "--> RunOnFailure=%u\n" +msgid "%s: Error during test.\n" +msgstr "%s: Error durante la prueba.\n" -#: src/dird/dird_conf.c:748 src/lib/runscript.c:302 -#, c-format -msgid " --> FailJobOnError=%u\n" -msgstr "--> FailJobOnError=%u\n" +#: src/stored/btape.c:2449 +msgid "" +"\n" +"The state file level has changed. You must redo\n" +"the fill command.\n" +msgstr "" +"\n" +"El estado del archivo de nivel de ha cambiado. Usted debe rehacer\n" +"el comando llenar.\n" -#: src/dird/dird_conf.c:749 src/lib/runscript.c:303 +#: src/stored/btape.c:2456 #, c-format -msgid " --> RunWhen=%u\n" -msgstr "--> EjecutarCuando=%u\n" +msgid "" +"\n" +"Could not find the state file: %s ERR=%s\n" +"You must redo the fill command.\n" +msgstr "" +"\n" +"No se pudo encontrar el archivo de estado: %s ERR=%s\n" +"Usted debe rehacer el comando llenar.\n" -#: src/dird/dird_conf.c:775 -#, c-format -msgid " --> Run=%s\n" -msgstr "--> Ejecutar=%s\n" +#: src/stored/btape.c:2522 +msgid "Mount first tape. Press enter when ready: " +msgstr "Monte primera cinta. Cuando esté listo, presione ENTER:" -#: src/dird/dird_conf.c:779 -#, c-format -msgid " --> SelectionPattern=%s\n" -msgstr "--> SeleccionPatron=%s\n" +#: src/stored/btape.c:2538 +msgid "Rewinding.\n" +msgstr "Rebobinado.\n" -#: src/dird/dird_conf.c:793 +#: src/stored/btape.c:2543 #, c-format -msgid "FileSet: name=%s\n" -msgstr "FileSet: nombre=%s\n" +msgid "Reading the first 10000 records from %u:%u.\n" +msgstr "Leyendo los primeros 10.000 registros desde %u:%u.\n" -#: src/dird/dird_conf.c:887 src/dird/dird_conf.c:966 +#: src/stored/btape.c:2547 src/stored/btape.c:2615 #, c-format -msgid "Schedule: name=%s\n" -msgstr "Schedule: nombre=%s\n" +msgid "Reposition from %u:%u to %u:%u\n" +msgstr "Reposición desde %u:%u para %u:%u\n" -#: src/dird/dird_conf.c:892 +#: src/stored/btape.c:2550 src/stored/btape.c:2602 src/stored/btape.c:2618 #, c-format -msgid " --> Run Level=%s\n" -msgstr "--> Ejecutar Nivel=%s\n" - -#: src/dird/dird_conf.c:893 -msgid " hour=" -msgstr "hora=" +msgid "Reposition error. ERR=%s\n" +msgstr "Error de reposición. ERR=%s\n" -#: src/dird/dird_conf.c:902 -msgid " mday=" -msgstr "mdia=" +#: src/stored/btape.c:2553 +#, c-format +msgid "Reading block %u.\n" +msgstr "Leyendo bloque %u.\n" -#: src/dird/dird_conf.c:911 -msgid " month=" -msgstr "mes=" +#: src/stored/btape.c:2555 src/stored/btape.c:2607 src/stored/btape.c:2623 +#, c-format +msgid "Error reading block: ERR=%s\n" +msgstr "Error leyendo bloque: ERR=%s.\n" -#: src/dird/dird_conf.c:920 -msgid " wday=" -msgstr "wdia=" +#: src/stored/btape.c:2560 +msgid "" +"\n" +"The last block on the tape matches. Test succeeded.\n" +"\n" +msgstr "" +"\n" +"El último bloque de la cinta concuerdan. Prueba Satisfactoria.\n" +"\n" -#: src/dird/dird_conf.c:929 -msgid " wom=" -msgstr "wom=" +#: src/stored/btape.c:2563 +msgid "" +"\n" +"The last block of the first tape matches.\n" +"\n" +msgstr "" +"\n" +"El último bloque de la primera cinta concuerdan.\n" +"\n" -#: src/dird/dird_conf.c:938 -msgid " woy=" -msgstr "woy=" +#: src/stored/btape.c:2587 +msgid "Mount second tape. Press enter when ready: " +msgstr "Monte la segunda cinta. Cuando esté listo, presione ENTER:" -#: src/dird/dird_conf.c:947 +#: src/stored/btape.c:2600 #, c-format -msgid " mins=%d\n" -msgstr "mins=%d\n" - -#: src/dird/dird_conf.c:949 src/dird/dird_conf.c:953 src/dird/dird_conf.c:957 -msgid " --> " -msgstr "--> " +msgid "Reposition from %u:%u to 0:1\n" +msgstr "Reposición desde %u:%u para 0:1\n" -#: src/dird/dird_conf.c:974 +#: src/stored/btape.c:2605 src/stored/btape.c:2621 #, c-format -msgid "Pool: name=%s PoolType=%s\n" -msgstr "Pool: nombre=%s PoolType=%s\n" +msgid "Reading block %d.\n" +msgstr "Leyendo bloque %d.\n" -#: src/dird/dird_conf.c:976 -#, c-format -msgid " use_cat=%d use_once=%d cat_files=%d\n" -msgstr "use_cat=%d use_once=%d cat_files=%d\n" +#: src/stored/btape.c:2611 +msgid "" +"\n" +"The first block on the second tape matches.\n" +"\n" +msgstr "" +"\n" +"El primer bloque de la segunda cinta concuerdan.\n" +"\n" + +#: src/stored/btape.c:2627 +msgid "" +"\n" +"The last block on the second tape matches. Test succeeded.\n" +"\n" +msgstr "" +"\n" +"El último bloque de la segunda cinta concuerdan. Prueba Satisfactoria.\n" +"\n" -#: src/dird/dird_conf.c:979 +#: src/stored/btape.c:2645 #, c-format -msgid " max_vols=%d auto_prune=%d VolRetention=%s\n" -msgstr "max_vols=%d auto_prune=%d VolRetention=%s\n" +msgid "10000 records read now at %d:%d\n" +msgstr "Leer 10000 registros ahora desde %d:%d\n" -#: src/dird/dird_conf.c:982 -#, c-format -msgid " VolUse=%s recycle=%d LabelFormat=%s\n" -msgstr "VolUse=%s recycle=%d LabelFormat=%s\n" +#: src/stored/btape.c:2671 src/stored/btape.c:2682 src/stored/btape.c:2727 +msgid "Last block written" +msgstr "Ultimo bloque escrito" -#: src/dird/dird_conf.c:986 -#, c-format -msgid " CleaningPrefix=%s LabelType=%d\n" -msgstr "CleaningPrefix=%s LabelType=%d\n" +#: src/stored/btape.c:2673 src/stored/btape.c:2683 +msgid "Block read back" +msgstr "Bloque que leer" -#: src/dird/dird_conf.c:988 +#: src/stored/btape.c:2674 #, c-format -msgid " RecyleOldest=%d PurgeOldest=%d ActionOnPurge=%d\n" -msgstr "RecyleOldest=%d PurgeOldest=%d ActionOnPurge=%d\n" +msgid "" +"\n" +"\n" +"The blocks differ at byte %u\n" +msgstr "" +"\n" +"\n" +"Los bloques difieren en %u byte\n" -#: src/dird/dird_conf.c:992 -#, c-format -msgid " MaxVolJobs=%d MaxVolFiles=%d MaxVolBytes=%s\n" -msgstr "MaxVolJobs=%d MaxVolFiles=%d MaxVolBytes=%s\n" +#: src/stored/btape.c:2675 +msgid "" +"\n" +"\n" +"!!!! The last block written and the block\n" +"that was read back differ. The test FAILED !!!!\n" +"This must be corrected before you use Bacula\n" +"to write multi-tape Volumes.!!!!\n" +msgstr "" +"\n" +"\n" +"!!!! El último bloque escrito y el bloque\n" +"que se vuelve a leer difieren. La prueba FALLO !!!!\n" +"Esto debe ser corregido antes de utilizar Bacula\n" +"para escribir volúmenes multi-cinta !!!!\n" -#: src/dird/dird_conf.c:996 +#: src/stored/btape.c:2711 #, c-format -msgid " MigTime=%s MigHiBytes=%s MigLoBytes=%s\n" -msgstr "MigTime=%s MigHiBytes=%s MigLoBytes=%s\n" - -#: src/dird/dird_conf.c:1000 -#, fuzzy, c-format -msgid " JobRetention=%s FileRetention=%s\n" -msgstr "JobRetention=%s FileRetention=%s AutoPrune=%d\n" +msgid "Last block at: %u:%u this_dev_block_num=%d\n" +msgstr "Último bloque en: %u:%u this_dev_block_num=%d\n" -#: src/dird/dird_conf.c:1004 +#: src/stored/btape.c:2725 #, c-format -msgid " NextPool=%s\n" -msgstr "NextPool=%s\n" +msgid "Block not written: FileIndex=%u blk_block=%u Size=%u\n" +msgstr "Bloque no está escrito: FileIndex=%u blk_block=%u Tamaño=%u\n" -#: src/dird/dird_conf.c:1007 -#, c-format -msgid " RecyclePool=%s\n" -msgstr "RecyclePool=%s\n" +#: src/stored/btape.c:2729 +msgid "Block not written" +msgstr "Bloque no escrito" -#: src/dird/dird_conf.c:1010 +#: src/stored/btape.c:2744 #, c-format -msgid " ScratchPool=%s\n" -msgstr "ScratchPool=%s\n" +msgid "End of tape %d:%d. Volume Bytes=%s. Write rate = %sB/s\n" +msgstr "" +"Fin de la cinta %d:%d. Volumen Bytes=%s. Velocidad de Escritura = %sB/s\n" -#: src/dird/dird_conf.c:1013 +#: src/stored/btape.c:2754 src/stored/bcopy.c:272 src/stored/bcopy.c:280 +#: src/stored/bcopy.c:308 #, c-format -msgid " Catalog=%s\n" -msgstr "Catálogo=%s\n" +msgid "Cannot fixup device error. %s\n" +msgstr "No se puede corregir error de dispositivo. %s\n" -#: src/dird/dird_conf.c:1033 -#, c-format -msgid "Messages: name=%s\n" -msgstr "Mensajes: nombre=%s\n" +#: src/stored/btape.c:2795 +msgid "Test writing blocks of 64512 bytes to tape.\n" +msgstr "Prueba de escritura de bloques de 64512 bytes a cinta.\n" -#: src/dird/dird_conf.c:1035 -#, c-format -msgid " mailcmd=%s\n" -msgstr "mailcmd=%s\n" +#: src/stored/btape.c:2797 +msgid "How many blocks do you want to write? (1000): " +msgstr "¿Cuántos bloques usted quiere escribir? (1000):" -#: src/dird/dird_conf.c:1037 +#: src/stored/btape.c:2814 #, c-format -msgid " opcmd=%s\n" -msgstr "opcmd=%s\n" +msgid "Begin writing %d Bacula blocks to tape ...\n" +msgstr "Empezando a escribir %d bloques Bacula en la cinta ...\n" -#: src/dird/dird_conf.c:1041 src/tray-monitor/tray_conf.c:199 -#: src/qt-console/tray-monitor/tray_conf.cpp:199 +#: src/stored/btape.c:2857 #, c-format -msgid "Unknown resource type %d in dump_resource.\n" -msgstr "Tipo de recurso desconocido %d en dump_resource.\n" +msgid "Begin writing raw blocks of %u bytes.\n" +msgstr "Empezando a escribir bloques raw de %u bytes.\n" -#: src/dird/dird_conf.c:1372 src/tray-monitor/tray_conf.c:257 -#: src/qt-console/tray-monitor/tray_conf.cpp:257 -#, c-format -msgid "Unknown resource type %d in free_resource.\n" -msgstr "Tipo de recurso desconocido %d en free_resource.\n" +#: src/stored/btape.c:2888 +msgid "test autochanger" +msgstr "prueba Autochanger" -#: src/dird/dird_conf.c:1404 src/dird/dird_conf.c:1419 -#: src/tray-monitor/tray_conf.c:288 src/wx-console/console_conf.c:265 -#: src/console/console_conf.c:259 src/filed/filed_conf.c:361 -#: src/qt-console/tray-monitor/tray_conf.cpp:288 -#: src/qt-console/bat_conf.cpp:265 -#, c-format -msgid "%s item is required in %s resource, but not found.\n" -msgstr "Ítem %s es necesario en recurso %s, pero no se encuentra.\n" +#: src/stored/btape.c:2889 +msgid "backspace file" +msgstr "archivo de retroceso" -#: src/dird/dird_conf.c:1410 src/tray-monitor/tray_conf.c:294 -#: src/lib/parse_conf.c:225 src/qt-console/tray-monitor/tray_conf.cpp:294 -#, c-format -msgid "Too many items in %s resource\n" -msgstr "Demasiados ítem en recurso %s\n" +#: src/stored/btape.c:2890 +msgid "backspace record" +msgstr "registro de retroceso" -#: src/dird/dird_conf.c:1450 -#, c-format -msgid "Cannot find Pool resource %s\n" -msgstr "No se puede encontrar el recurso Pool %s\n" +#: src/stored/btape.c:2891 +msgid "list device capabilities" +msgstr "lista de las capacidades del dispositivo" -#: src/dird/dird_conf.c:1461 -#, c-format -msgid "Cannot find Console resource %s\n" -msgstr "No se puede encontrar el recurso Console %s\n" +#: src/stored/btape.c:2892 +msgid "clear tape errors" +msgstr "Errores Cinta de Limpieza" -#: src/dird/dird_conf.c:1467 src/stored/stored_conf.c:611 -#: src/filed/filed_conf.c:381 -#, c-format -msgid "Cannot find Director resource %s\n" -msgstr "No se puede encontrar el recurso Director %s\n" +#: src/stored/btape.c:2893 +msgid "go to end of Bacula data for append" +msgstr "ir al final de los datos de Bacula para añadir" -#: src/dird/dird_conf.c:1474 src/stored/stored_conf.c:617 -#, c-format -msgid "Cannot find Storage resource %s\n" -msgstr "No se puede encontrar el recurso Storage %s\n" +#: src/stored/btape.c:2894 +msgid "go to the physical end of medium" +msgstr "ir al final del medio físico" -#: src/dird/dird_conf.c:1483 -#, c-format -msgid "Cannot find Job resource %s\n" -msgstr "No se puede encontrar el recurso Job %s\n" +#: src/stored/btape.c:2895 +msgid "fill tape, write onto second volume" +msgstr "llenar cinta, escribir en segundo volumen" -#: src/dird/dird_conf.c:1533 -#, c-format -msgid "Cannot find Counter resource %s\n" -msgstr "No se puede encontrar el recurso Counter %s\n" +#: src/stored/btape.c:2896 +msgid "read filled tape" +msgstr "leer cinta llena" -#: src/dird/dird_conf.c:1541 src/filed/filed_conf.c:387 -#, c-format -msgid "Cannot find Client resource %s\n" -msgstr "No se puede encontrar el recurso Cliente %s\n" +#: src/stored/btape.c:2897 +msgid "forward space a file" +msgstr "espaciar un archivo hacia adelante" -#: src/dird/dird_conf.c:1554 -#, c-format -msgid "Cannot find Schedule resource %s\n" -msgstr "No se puede encontrar el recurso Schedule %s\n" +#: src/stored/btape.c:2898 +msgid "forward space a record" +msgstr "espaciar un registro hacia adelante" -#: src/dird/dird_conf.c:1559 src/dird/dird_conf.c:1619 -#: src/tray-monitor/tray_conf.c:314 src/tray-monitor/tray_conf.c:352 -#: src/qt-console/tray-monitor/tray_conf.cpp:314 -#: src/qt-console/tray-monitor/tray_conf.cpp:352 -#, c-format -msgid "Unknown resource type %d in save_resource.\n" -msgstr "Tipo de recurso desconocido %d en save_resource.\n" +#: src/stored/btape.c:2899 +msgid "print this command" +msgstr "imprimir este comando" -#: src/dird/dird_conf.c:1634 -#, c-format -msgid "Name item is required in %s resource, but not found.\n" -msgstr "Nombre del ítem se requiere en recurso %s, pero no se encuentra.\n" +#: src/stored/btape.c:2900 +msgid "write a Bacula label to the tape" +msgstr "escribir una etiqueta Bacula en la cinta" -#: src/dird/dird_conf.c:1642 src/tray-monitor/tray_conf.c:372 -#: src/wx-console/console_conf.c:328 src/console/console_conf.c:322 -#: src/filed/filed_conf.c:446 src/qt-console/tray-monitor/tray_conf.cpp:372 -#: src/qt-console/bat_conf.cpp:334 -#, c-format -msgid "Attempt to define second %s resource named \"%s\" is not permitted.\n" -msgstr "" -"Segundo intento de definir recurso %s llamado \"%s\" no está permitido.\n" +#: src/stored/btape.c:2901 +msgid "load a tape" +msgstr "cargar una cinta" -#: src/dird/dird_conf.c:1647 -#, c-format -msgid "Inserting %s res: %s index=%d pass=%d\n" -msgstr "Insertando %s res: %s index=%d pass=%d\n" +#: src/stored/btape.c:2902 +msgid "quit btape" +msgstr "salir btape" -#: src/dird/dird_conf.c:1660 -#, c-format -msgid "Expected one of: %s, got: %s" -msgstr "Esperaba uno de: %s, obtuvo: %s" +#: src/stored/btape.c:2903 +msgid "use write() to fill tape" +msgstr "usar write() para llenar la cinta" -#: src/dird/dird_conf.c:1732 -#, c-format -msgid "Expected a Migration Job Type keyword, got: %s" -msgstr "Espera una palabra clave Tipo Job de Migración, obtuvo: %s" +#: src/stored/btape.c:2904 +msgid "read and print the Bacula tape label" +msgstr "leer e imprimir la etiqueta Bacula de la cinta" -#: src/dird/dird_conf.c:1758 -#, c-format -msgid "Expected a Job Type keyword, got: %s" -msgstr "Esperaba una palabra clave Tipo Job, obtuvo: %s" +#: src/stored/btape.c:2905 +msgid "test record handling functions" +msgstr "prueba de manejo de registro de funciones" -#: src/dird/dird_conf.c:1782 -#, c-format -msgid "Expected a Job Level keyword, got: %s" -msgstr "Esperaba una palabra clave Tipo Level, obtuvo: %s" +#: src/stored/btape.c:2906 +msgid "rewind the tape" +msgstr "rebobinar la cinta" -#: src/dird/dird_conf.c:1802 -#, c-format -msgid "Expected a Restore replacement option, got: %s" -msgstr "Esperaba una opción de reemplazo de Restauración, obtuvo: %s" +#: src/stored/btape.c:2907 +msgid "read() tape block by block to EOT and report" +msgstr "leer() cinta bloque por bloque para EOT y reportar" -#: src/dird/dird_conf.c:1852 src/dird/dird_conf.c:1968 -#: src/lib/parse_conf.c:761 src/lib/parse_conf.c:777 src/lib/ini.c:593 -#, c-format -msgid "Expect %s, got: %s" -msgstr "Esperaba %s, obtuvo: %s" +#: src/stored/btape.c:2908 +msgid "Bacula read block by block to EOT and report" +msgstr "Bacula leer bloque por bloque para EOT y reportar" -#: src/dird/dird_conf.c:1874 src/lib/parse_conf.c:478 -#, c-format -msgid "Could not find config Resource %s referenced on line %d : %s\n" +#: src/stored/btape.c:2909 +msgid "" +"[file_size=n(GB)|nb_file=3|skip_zero|skip_random|skip_raw|skip_block] report " +"drive speed" msgstr "" -"No se pudo encontrar Recursos de configuración %s referenciado en la línea " -"%d: %s\n" - -#: src/dird/getmsg.c:176 -#, c-format -msgid "bget_dirmsg: unknown bnet signal %d\n" -msgstr "bget_dirmsg: señal bnet desconocida %d\n" +"[file_size=n(GB)|nb_file=3|skip_zero|skip_random|skip_raw|skip_block] " +"informe de velocidad de la unidad" -#: src/dird/getmsg.c:194 src/dird/getmsg.c:200 src/dird/getmsg.c:213 -#: src/dird/getmsg.c:247 src/dird/getmsg.c:269 src/dird/getmsg.c:295 -#, c-format -msgid "Malformed message: %s\n" -msgstr "Mensaje incorrecto: %s\n" +#: src/stored/btape.c:2910 +msgid "print tape status" +msgstr "imprimir estado de la cinta" -#: src/dird/getmsg.c:367 -#, c-format -msgid "Bad response to %s command: wanted %s, got %s\n" -msgstr "Mala respuesta al comando %s: quería %s, obtuvo %s\n" +#: src/stored/btape.c:2911 +msgid "General test Bacula tape functions" +msgstr "Prueba general de las funciones de cinta Bacula" -#: src/dird/getmsg.c:372 -#, c-format -msgid "Socket error on %s command: ERR=%s\n" -msgstr "Error de Socket en comando %s: ERR=%s\n" +#: src/stored/btape.c:2912 +msgid "write an EOF on the tape" +msgstr "escribir un EOF en la cinta" -#: src/dird/ua_restore.c:148 -msgid "\"RegexWhere\" specification not authorized.\n" -msgstr "\"RegexWhere\" especificación no autorizada.\n" +#: src/stored/btape.c:2913 +msgid "write a single Bacula block" +msgstr "escribir un único bloque de Bacula" -#: src/dird/ua_restore.c:155 -msgid "\"where\" specification not authorized.\n" -msgstr "especificación \"where\" no autorizada.\n" +#: src/stored/btape.c:2914 +msgid "read a single record" +msgstr "leer un solo registro" -#: src/dird/ua_restore.c:177 -msgid "" -"No Restore Job Resource found in bacula-dir.conf.\n" -"You must create at least one before running this command.\n" -msgstr "" -"Recurso Job de Restauración no encontrado en bacula-dir.conf.\n" -"Usted debe crear al menos uno antes de ejecutar este comando.\n" +#: src/stored/btape.c:2915 +msgid "read a single Bacula block" +msgstr "leer un único bloque de Bacula" -#: src/dird/ua_restore.c:194 -msgid "Restore not done.\n" -msgstr "Restauración no hecha.\n" +#: src/stored/btape.c:2916 +msgid "quick fill command" +msgstr "comando de llenado rápido" -#: src/dird/ua_restore.c:205 -msgid "Unable to construct a valid BSR. Cannot continue.\n" -msgstr "No se puede construir un BSR válido. No puede continuar.\n" +#: src/stored/btape.c:2937 +#, c-format +msgid "\"%s\" is an invalid command\n" +msgstr "\"%s\" es un comando inválido\n" -#: src/dird/ua_restore.c:209 src/dird/ua_restore.c:221 -msgid "No files selected to be restored.\n" -msgstr "No hay archivos seleccionados para ser restaurado.\n" +#: src/stored/btape.c:2946 +#, c-format +msgid "Interactive commands:\n" +msgstr "Comandos interactivos:\n" -#: src/dird/ua_restore.c:215 +#: src/stored/btape.c:2947 src/dird/ua_tree.c:794 +#, c-format msgid "" -"\n" -"1 file selected to be restored.\n" -"\n" +" Command Description\n" +" ======= ===========\n" msgstr "" -"\n" -"1 archivo seleccionado para ser restaurado.\n" -"\n" +"Comando Descripción\n" +" ======= ===========\n" -#: src/dird/ua_restore.c:217 +#: src/stored/btape.c:2957 #, c-format msgid "" "\n" -"%s files selected to be restored.\n" +"Version: %s (%s)\n" +"\n" +"Usage: btape \n" +" -b specify bootstrap file\n" +" -c set configuration file to file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -p proceed inspite of I/O errors\n" +" -s turn off signals\n" +" -v be verbose\n" +" -? print this message.\n" "\n" msgstr "" "\n" -"%s archivos seleccionados para ser restaurado.\n" +"Versión: %s (%s)\n" +"\n" +"Utilice: btape \n" +" -b especifica un archivo bootstrap\n" +" -c especifica un archivo File de configuración\n" +" -d establece nivel de depuración para \n" +" -dt imprime timestamp en salida de depuración\n" +" -p proceder a pesar de los errores de E/S\n" +" -s desactivar señales\n" +" -v detallado\n" +" -? imprime esta mensaje.\n" "\n" -#: src/dird/ua_restore.c:236 -msgid "No Client resource found!\n" -msgstr "Ningún recurso Cliente encontrado!\n" - -#: src/dird/ua_restore.c:333 -#, fuzzy -msgid "The restore will use the following job(s) as Base\n" -msgstr "Usted ha seleccionado los siguientes JobIds: %s\n" - -#: src/dird/ua_restore.c:354 +#: src/stored/btape.c:3045 #, c-format -msgid "Missing value for keyword: %s\n" -msgstr "Falta el valor de palabra clave: %s\n" +msgid "Mount second Volume on device %s and press return when ready: " +msgstr "" +"Monte el segundo volumen en el dispositivo %s y pulse ENTER cuando esté " +"listo:" -#: src/dird/ua_restore.c:434 -msgid "List last 20 Jobs run" -msgstr "Listar los Últimos 20 Jobs ejecutados" +#: src/stored/btape.c:3048 src/stored/bls.c:478 src/stored/bextract.c:609 +#: src/stored/bscan.c:1354 src/stored/bcopy.c:365 +#, c-format +msgid "Mount Volume \"%s\" on device %s and press return when ready: " +msgstr "" +"Monte Volumen \"%s\" en el dispositivo %s y presione ENTER cuando esté " +"preparado:" -#: src/dird/ua_restore.c:435 -msgid "List Jobs where a given File is saved" -msgstr "Listado de Jobs donde un determinado archivo se ha guardado" +#: src/stored/btape.c:3073 +#, c-format +msgid "Mount blank Volume on device %s and press return when ready: " +msgstr "" +"Monte un volumen en blanco en el dispositivo %s y pulse ENTER cuando esté " +"listo:" -#: src/dird/ua_restore.c:436 -msgid "Enter list of comma separated JobIds to select" -msgstr "Introduzca lista de JobIds separados por comas para seleccionar" +#: src/stored/btape.c:3093 +#, c-format +msgid "End of Volume \"%s\" %d records.\n" +msgstr "Fin del Volumen \"%s\" %d registros.\n" -#: src/dird/ua_restore.c:437 -msgid "Enter SQL list command" -msgstr "Introduzca lista de comandos SQL" +#: src/stored/btape.c:3107 +#, c-format +msgid "Read block=%u, VolBytes=%s rate=%sB/s\n" +msgstr "Leer bloque=%u, VolBytes=%s velocidad=%sB/s\n" -#: src/dird/ua_restore.c:438 -msgid "Select the most recent backup for a client" -msgstr "Seleccionar el respaldo mas reciente para un cliente" +#: src/stored/btape.c:3120 +#, c-format +msgid "Cannot open Dev=%s, Vol=%s\n" +msgstr "No se puede abrir Dev=%s, Vol=%s\n" -#: src/dird/ua_restore.c:439 -msgid "Select backup for a client before a specified time" +#: src/stored/record_read.c:164 src/stored/record.c:658 +#, c-format +msgid "Sanity check failed. maxlen=%d datalen=%d. Block discarded.\n" msgstr "" -"Seleccione un respaldo de un cliente antes de un período de tiempo " -"especificado" +"Chequeo de Sanidad fracasado. maxlen=%d datalen=%d. Bloque descartado.\n" -#: src/dird/ua_restore.c:440 -msgid "Enter a list of files to restore" -msgstr "Introduzca una lista de archivos para restaurar" +#: src/stored/spool.c:71 +msgid "Spooling statistics:\n" +msgstr "Estadísticas de cola:\n" -#: src/dird/ua_restore.c:441 -msgid "Enter a list of files to restore before a specified time" +#: src/stored/spool.c:74 +#, c-format +msgid "" +"Data spooling: %u active jobs, %s bytes; %u total jobs, %s max bytes/job.\n" msgstr "" -"Introduzca una lista de archivos para restaurar antes de un período de " -"tiempo especificado" - -#: src/dird/ua_restore.c:442 -msgid "Find the JobIds of the most recent backup for a client" -msgstr "Encuentre el JobIds del respaldo más reciente para un cliente" +"Encolando datos: %u jobs activos, %s bytes; %u total de jobs, %s máximo " +"bytes/job.\n" -#: src/dird/ua_restore.c:443 -msgid "Find the JobIds for a backup for a client before a specified time" +#: src/stored/spool.c:82 +#, c-format +msgid "Attr spooling: %u active jobs, %s bytes; %u total jobs, %s max bytes.\n" msgstr "" -"Encuentre el JobIds del respaldo de un cliente antes de un período de tiempo " -"especificado" +"Encolando Atributos: %u jobs activos, %s bytes; %u jobs total, %s bytes " +"máximos.\n" -#: src/dird/ua_restore.c:444 -msgid "Enter a list of directories to restore for found JobIds" -msgstr "" -"Introduzca una lista de directorios para restaurar por JobIds encontrado" +#: src/stored/spool.c:100 +msgid "Spooling data ...\n" +msgstr "Datos en cola ...\n" -#: src/dird/ua_restore.c:445 -msgid "Select full restore to a specified Job date" -msgstr "Seleccione restauración completa para una fecha especifica de Job" +#: src/stored/spool.c:126 +#, c-format +msgid "Bad return from despool WroteVol=%d\n" +msgstr "Mal retorno de despool WroteVol=%d\n" -#: src/dird/ua_restore.c:446 src/dird/ua_status.c:862 src/stored/status.c:611 -#: src/filed/status.c:373 src/wx-console/wxbconfigpanel.cpp:220 -msgid "Cancel" -msgstr "Cancelar" +#: src/stored/spool.c:159 +#, c-format +msgid "Open data spool file %s failed: ERR=%s\n" +msgstr "Fallo al abrir archivo %s de datos de cola: ERR=%s\n" + +#: src/stored/spool.c:187 +msgid "Despooling zero bytes. Your disk is probably FULL!\n" +msgstr "Desencolando cero bytes. El disco probablemente esta LLENO!\n" -#: src/dird/ua_restore.c:491 +#: src/stored/spool.c:196 #, c-format -msgid "Unknown keyword: %s\n" -msgstr "Palabra clave desconocida: %s\n" +msgid "Committing spooled data to Volume \"%s\". Despooling %s bytes ...\n" +msgstr "" +"Perpetrando datos encolados al volumen \"%s\". Desencolando %s bytes ...\n" -#: src/dird/ua_restore.c:520 src/dird/ua_update.c:957 +#: src/stored/spool.c:201 #, c-format -msgid "Improper date format: %s\n" -msgstr "Inadecuado formato de fecha: %s\n" +msgid "Writing spooled data to Volume. Despooling %s bytes ...\n" +msgstr "Escribiendo datos encolados al volumen. Desencolando %s bytes ...\n" -#: src/dird/ua_restore.c:560 +#: src/stored/spool.c:272 src/stored/acquire.c:517 src/stored/block_util.c:552 +#: src/stored/block_util.c:622 src/stored/block_util.c:652 #, c-format -msgid "Error: Pool resource \"%s\" access not allowed.\n" -msgstr "Error: recurso Pool \"%s\" acceso no permitido.\n" +msgid "Could not create JobMedia record for Volume=\"%s\" Job=%s\n" +msgstr "No es posible crear el registro JobMedia para Volumen=\"%s\" Job=%s\n" -#: src/dird/ua_restore.c:576 +#: src/stored/spool.c:290 +#, c-format msgid "" -"\n" -"First you select one or more JobIds that contain files\n" -"to be restored. You will be presented several methods\n" -"of specifying the JobIds. Then you will be allowed to\n" -"select which files from those JobIds are to be restored.\n" -"\n" -msgstr "" -"\n" -"Primero debe seleccionar una o más JobIds que contienen archivos\n" -"para ser restaurado.Se le presentará varios métodos\n" -"para especificar los JobIDs. Luego se le permitirá seleccionar los archivos " -"de los JobIds que deben ser restaurados.\n" -"\n" - -#: src/dird/ua_restore.c:589 -msgid "To select the JobIds, you have the following choices:\n" +"Despooling elapsed time = %02d:%02d:%02d, Transfer rate = %s Bytes/second\n" msgstr "" -"Para seleccionar el JobIds, usted dispone de las siguientes opciones:\n" - -#: src/dird/ua_restore.c:594 -msgid "Select item: " -msgstr "Seleccione un ítem:" - -#: src/dird/ua_restore.c:599 src/dird/ua_restore.c:634 -msgid "SQL query not authorized.\n" -msgstr "Consulta SQL no autorizada.\n" +"Tiempo transcurrido desencolando = %02d:%02d:%02d, Tasa de transferencia = " +"%s Bytes/segundo\n" -#: src/dird/ua_restore.c:612 -msgid "Enter Filename (no path):" -msgstr "Introduzca Nombre de Archivo (sin ruta):" +#: src/stored/spool.c:299 src/stored/spool.c:500 src/stored/spool.c:546 +#, c-format +msgid "Ftruncate spool file failed: ERR=%s\n" +msgstr "Fallo ftruncate archivo de cola: ERR=%s\n" -#: src/dird/ua_restore.c:627 src/dird/ua_restore.c:735 -msgid "Enter JobId(s), comma separated, to restore: " -msgstr "Introduzca JobId(s), separados por comas, para restaurar:" +#: src/stored/spool.c:358 +#, c-format +msgid "Spool header read error. ERR=%s\n" +msgstr "Error de lectura de la cola. ERR=%s\n" -#: src/dird/ua_restore.c:637 -msgid "Enter SQL list command: " -msgstr "Introduzca lista de comandos SQL:" +#: src/stored/spool.c:361 +#, c-format +msgid "Spool read error. Wanted %u bytes, got %d\n" +msgstr "Error de lectura de la cola. Esperaba %u bytes, obtuvo %d\n" -#: src/dird/ua_restore.c:671 src/dird/ua_restore.c:694 -msgid "" -"Enter file names with paths, or < to enter a filename\n" -"containing a list of file names with paths, and terminate\n" -"them with a blank line.\n" +#: src/stored/spool.c:362 +#, c-format +msgid "Spool header read error. Wanted %u bytes, got %d\n" msgstr "" -"Escriba los nombres de archivo con las rutas, o < para introducir un nombre " -"de archivo\n" -"conteniendo una lista de nombres de archivo con las rutas, y terminado\n" -"con una línea en blanco.\n" +"Error de lectura de cabecera de la cola. Esperaba %u bytes, obtuvo %d\n" -#: src/dird/ua_restore.c:675 src/dird/ua_restore.c:698 -msgid "Enter full filename: " -msgstr "Introduzca el nombre de archivo completo:" +#: src/stored/spool.c:369 src/stored/spool.c:370 +#, c-format +msgid "Spool block too big. Max %u bytes, got %u\n" +msgstr "Bloque de la cola demasiado grande. Máximo %u bytes, obtuvo %u\n" -#: src/dird/ua_restore.c:733 +#: src/stored/spool.c:376 src/stored/spool.c:377 #, c-format -msgid "You have already selected the following JobIds: %s\n" -msgstr "Usted ya ha seleccionado los siguientes JobIds: %s\n" +msgid "Spool data read error. Wanted %u bytes, got %d\n" +msgstr "Error de lectura de datos de la cola. Esperaba %u bytes, obtuvo %d\n" -#: src/dird/ua_restore.c:751 +#: src/stored/spool.c:431 +#, fuzzy, c-format msgid "" -"Enter full directory names or start the name\n" -"with a < to indicate it is a filename containing a list\n" -"of directories and terminate them with a blank line.\n" -msgstr "" -"Escriba los nombres de directorio completo o inicie el nombre\n" -" con un < para indicar que es un nombre de archivo que contiene una lista\n" -"de directorios y terminado con una línea en blanco.\n" - -#: src/dird/ua_restore.c:755 -msgid "Enter directory name: " -msgstr "Introduzca nombre de directorio:" - -#: src/dird/ua_restore.c:771 -msgid "Enter JobId to get the state to restore: " -msgstr "Introduzca JobId para obtener el estado para restaurar:" - -#: src/dird/ua_restore.c:784 -#, c-format -msgid "Selecting jobs to build the Full state at %s\n" -msgstr "Seleccionando trabajos para construir el estado completo en %s\n" +"User specified Job spool size reached: JobSpoolSize=%s MaxJobSpoolSize=%s\n" +msgstr "Tamaño de cola especificada por el usuario alcanzado.\n" -#: src/dird/ua_restore.c:810 -msgid "Invalid JobId in list.\n" -msgstr "JobId inválido en la lista.\n" +#: src/stored/spool.c:436 +#, fuzzy, c-format +msgid "" +"User specified Device spool size reached: DevSpoolSize=%s MaxDevSpoolSize=" +"%s\n" +msgstr "Tamaño de cola especificada por el usuario alcanzado.\n" -#: src/dird/ua_restore.c:829 -#, c-format -msgid "Access to JobId=%s (Job \"%s\") not authorized. Not selected.\n" -msgstr "Acceso al JobId=%s (Job \"%s\") no autorizado. No seleccionado.\n" +#: src/stored/spool.c:443 +msgid "Bad return from despool in write_block.\n" +msgstr "Malo retorno desde despool en write_block.\n" -#: src/dird/ua_restore.c:842 -msgid "No Jobs selected.\n" -msgstr "Jobs no seleccionados.\n" +#: src/stored/spool.c:451 +msgid "Spooling data again ...\n" +msgstr "Encolando datos de nuevo ...\n" -#: src/dird/ua_restore.c:847 +#: src/stored/spool.c:483 #, c-format -msgid "You have selected the following JobIds: %s\n" -msgstr "Usted ha seleccionado los siguientes JobIds: %s\n" +msgid "Error writing header to spool file. ERR=%s\n" +msgstr "Error escribiendo encabezado para archivo de cola. ERR=%s\n" -#: src/dird/ua_restore.c:849 +#: src/stored/spool.c:488 #, c-format -msgid "You have selected the following JobId: %s\n" -msgstr "Usted ha seleccionado el siguiente JobId: %s\n" - -#: src/dird/ua_restore.c:859 msgid "" -"The restored files will the most current backup\n" -"BEFORE the date you specify below.\n" -"\n" +"Error writing header to spool file. Disk probably full. Attempting recovery. " +"Wanted to write=%d got=%d\n" msgstr "" -"Los archivos restaurados serán los más actuales respaldados\n" -"ANTES de la fecha especificada a continuación.\n" -"\n" +"Error al escribir encabezado al archivo de cola. Probablemente disco lleno. " +"Intentando recuperación. Esperaba escribir=%d tiene=%d\n" -#: src/dird/ua_restore.c:862 -msgid "Enter date as YYYY-MM-DD HH:MM:SS :" -msgstr "Introduzca la fecha en formato YYYY-MM-DD HH:MM:SS :" +#: src/stored/spool.c:506 src/stored/spool.c:552 +msgid "Fatal despooling error." +msgstr "Error fatal desencolando." -#: src/dird/ua_restore.c:868 -msgid "Improper date format.\n" -msgstr "Inadecuado formato de fecha.\n" +#: src/stored/spool.c:514 +msgid "Retrying after header spooling error failed.\n" +msgstr "Fallido reintento después de error encolando encabezado.\n" -#: src/dird/ua_restore.c:889 +#: src/stored/spool.c:530 #, c-format -msgid "Cannot open file %s: ERR=%s\n" -msgstr "No se puede abrir el archivo %s: ERR=%s\n" +msgid "Error writing data to spool file. ERR=%s\n" +msgstr "Error escribiendo datos en archivo de cola. ERR=%s\n" + +#: src/stored/spool.c:563 +msgid "Retrying after data spooling error failed.\n" +msgstr "Fallido reintento después de error encolando dato.\n" + +#: src/stored/spool.c:650 +msgid "Network error on BlastAttributes.\n" +msgstr "Error de red en BlastAttributes.\n" -#: src/dird/ua_restore.c:897 src/dird/ua_restore.c:901 +#: src/stored/spool.c:674 src/stored/spool.c:682 #, c-format -msgid "Error occurred on line %d of file \"%s\"\n" -msgstr "Se ha producido un error en la línea %d del archivo \"%s\"\n" +msgid "Fseek on attributes file failed: ERR=%s\n" +msgstr "Fallo fseek en los atributos de archivo: ERR=%s\n" -#: src/dird/ua_restore.c:945 src/dird/ua_restore.c:973 +#: src/stored/spool.c:694 #, c-format -msgid "No database record found for: %s\n" -msgstr "No encuentra registro en base de datos para: %s\n" +msgid "Sending spooled attrs to the Director. Despooling %s bytes ...\n" +msgstr "Enviando attrs encolados al Director. Desencolando %s bytes ...\n" -#: src/dird/ua_restore.c:961 -msgid "No JobId specified cannot continue.\n" -msgstr "JobId no especificado, imposible continuar.\n" +#: src/stored/spool.c:720 +#, c-format +msgid "fopen attr spool file %s failed: ERR=%s\n" +msgstr "Fallo fopen en archivo %s de atributo de cola: ERR=%s\n" -#: src/dird/ua_restore.c:994 +#: src/stored/record.c:63 src/stored/record_util.c:61 #, c-format -msgid "No table found: %s\n" -msgstr "Tabla no encontrada: %s\n" +msgid "unknown: %d" +msgstr "desconocido: %d" + +#: src/stored/record.c:380 +msgid "Damaged buffer\n" +msgstr "Buffer dañado\n" -#: src/dird/ua_restore.c:1052 +#: src/stored/bls.c:68 +#, c-format msgid "" "\n" +"Version: %s (%s)\n" "\n" -"For one or more of the JobIds selected, no files were found,\n" -"so file selection is not possible.\n" -"Most likely your retention policy pruned the files.\n" -msgstr "" -"\n" -"\n" -"Para uno o más de los JobIds seleccionado, no se encontraron archivos,\n" -"por lo tanto, selección de archivos no es posible.\n" -"El mas probable es que su política de retención podo los archivos.\n" - -#: src/dird/ua_restore.c:1055 -msgid "" +"Usage: bls [options] \n" +" -b specify a bootstrap file\n" +" -c specify a Storage configuration file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -e exclude list\n" +" -i include list\n" +" -j list jobs\n" +" -k list blocks\n" +" (no j or k option) list saved files\n" +" -L dump label\n" +" -p proceed inspite of errors\n" +" -v be verbose\n" +" -V specify Volume names (separated by |)\n" +" -? print this message\n" "\n" -"Do you want to restore all the files? (yes|no): " msgstr "" "\n" -"Desea restaurar todos los archivos? (sí­|no):" - -#: src/dird/ua_restore.c:1058 -msgid "" +"Versión: %s (%s)\n" "\n" -"Regexp matching files to restore? (empty to abort): " -msgstr "" +"Utilice: bls [opciones] \n" +" -b especifica un archivo bootstrap\n" +" -c especifica un archivo Storage de configuración\n" +" -d establece nivel de depuración para \n" +" -dt imprime timestamp en salida de depuración\n" +" -e lista de exclusión\n" +" -i lista de inclusión\n" +" -j lista de trabajos\n" +" -k lista de bloques\n" +" (no j o k opción) lista de archivos guardados\n" +" -L dump label\n" +" -p proceder a pesar de los errores\n" +" -v detallado\n" +" -V especifica nombres de Volumen (separados por |)\n" +" -? imprime esta mensaje\n" "\n" -"Regexp para restaurar los archivos que coinciden? (vacío para abortar):" -#: src/dird/ua_restore.c:1074 +#: src/stored/bls.c:138 src/stored/bextract.c:141 #, c-format -msgid "Regex compile error: %s\n" -msgstr "Error de compilación Regex: %s\n" +msgid "Could not open exclude file: %s, ERR=%s\n" +msgstr "No se pudo abrir archivo excluir: %s, ERR=%s\n" -#: src/dird/ua_restore.c:1137 +#: src/stored/bls.c:153 src/stored/bextract.c:156 #, c-format -msgid "" -"\n" -"Building directory tree for JobId(s) %s ... " -msgstr "" -"\n" -"Construyendo árbol de directorios para JobId(s) %s ..." +msgid "Could not open include file: %s, ERR=%s\n" +msgstr "No se pudo abrir archivo incluir: %s, ERR=%s\n" -#: src/dird/ua_restore.c:1207 -#, c-format -msgid "" -"\n" -"%s files inserted into the tree and marked for extraction.\n" -msgstr "" -"\n" -"%s archivos insertados en el árbol y marcados para la extracción.\n" +#: src/stored/bls.c:200 +msgid "No archive name specified\n" +msgstr "Nombre de archivo no especificado\n" -#: src/dird/ua_restore.c:1210 +#: src/stored/bls.c:238 #, c-format msgid "" "\n" -"%s files inserted into the tree.\n" +"Warning, this Volume is a continuation of Volume %s\n" msgstr "" "\n" -"%s archivos insertados en el árbol.\n" +"Advertencia, este Volumen es una continuación del Volumen %s\n" -#: src/dird/ua_restore.c:1285 +#: src/stored/bls.c:281 #, c-format -msgid "Error getting FileSet \"%s\": ERR=%s\n" -msgstr "Error al obtener FileSet \"%s\": ERR=%s\n" - -#: src/dird/ua_restore.c:1290 -#, fuzzy, c-format -msgid "FileSet argument: %s\n" -msgstr "FileSet: nombre=%s\n" +msgid "Got EOM at file %u on device %s, Volume \"%s\"\n" +msgstr "Obtuvo EOM en archivo %u en el dispositivo %s, Volumen \"%s\"\n" -#: src/dird/ua_restore.c:1302 +#: src/stored/bls.c:292 #, c-format -msgid "No FileSet found for client \"%s\".\n" -msgstr "FileSet para cliente \"%s\" no encontrado.\n" +msgid "Mounted Volume \"%s\".\n" +msgstr "Volumen Montado \"%s\".\n" -#: src/dird/ua_restore.c:1308 +#: src/stored/bls.c:294 #, c-format -msgid "Error getting FileSet record: %s\n" -msgstr "Error al obtener el registro FileSet: %s\n" +msgid "End of file %u on device %s, Volume \"%s\"\n" +msgstr "Fin de archivo %u en el dispositivo %s, Volumen \"%s\"\n" -#: src/dird/ua_restore.c:1309 +#: src/stored/bls.c:318 +#, c-format msgid "" -"This probably means you modified the FileSet.\n" -"Continuing anyway.\n" +"File:blk=%u:%u blk_num=%u blen=%u First rec FI=%s SessId=%u SessTim=%u Strm=" +"%s rlen=%d\n" msgstr "" -"Esto probablemente significa que usted modifico el FileSet.\n" -"Continuando de todos modos.\n" - -#: src/dird/ua_restore.c:1324 -#, c-format -msgid "Pool \"%s\" not found, using any pool.\n" -msgstr "Pool \"%s\" no encontrado, utilizando cualquier pool.\n" - -#: src/dird/ua_restore.c:1351 src/dird/ua_restore.c:1367 -#, c-format -msgid "No Full backup before %s found.\n" -msgstr "Full Backup no encontrado antes de %s.\n" - -#: src/dird/ua_restore.c:1396 -msgid "No jobs found.\n" -msgstr "Jobs no encontrados.\n" +"Archivo:blk=%u:%u blk_num=%u blen=%u Primer registro FI=%s SessId=%u SessTim=" +"%u Strm=%s rlen=%d\n" -#: src/dird/ua_restore.c:1517 +#: src/stored/bls.c:327 #, c-format -msgid "Warning default storage overridden by \"%s\" on command line.\n" -msgstr "" -"Advertencia, storage por defecto reemplazada por \"%s\" en la línea de " -"comandos.\n" - -#: src/dird/ua_restore.c:1534 -#, fuzzy, c-format -msgid "Using Storage \"%s\" from MediaType \"%s\".\n" -msgstr "" -"Storage \"%s\" no encontrado, usando Storage \"%s\" desde MediaType\"%s\".\n" +msgid "Block: %d size=%d\n" +msgstr "Bloque: %d tamaño=%d\n" -#: src/dird/ua_restore.c:1537 -#, c-format -msgid "Storage \"%s\" not found, using Storage \"%s\" from MediaType \"%s\".\n" -msgstr "" -"Storage \"%s\" no encontrado, usando Storage \"%s\" desde MediaType\"%s\".\n" +#: src/stored/bls.c:385 src/stored/bextract.c:325 src/stored/bscan.c:674 +msgid "Cannot continue.\n" +msgstr "No se puede continuar.\n" -#: src/dird/ua_restore.c:1546 -#, c-format -msgid "" -"\n" -"Unable to find Storage resource for\n" -"MediaType \"%s\", needed by the Jobs you selected.\n" +#: src/stored/bls.c:387 +msgid "Attrib unpack error!\n" msgstr "" -"\n" -"No se puede encontrar los recursos Storage para\n" -"MediaType \"%s\", necesario por los Jobs que ha seleccionado.\n" - -#: src/dird/fd_cmds.c:95 -msgid "Client: " -msgstr "Cliente:" -#: src/dird/fd_cmds.c:137 +#: src/stored/bls.c:398 #, c-format -msgid "File daemon \"%s\" rejected Job command: %s\n" -msgstr "Demonio File \"%s\" rechazó comando Job: %s\n" +msgid "FileIndex=%d VolSessionId=%d VolSessionTime=%d Stream=%d DataLen=%d\n" +msgstr "FileIndex=%d VolSessionId=%d VolSessionTime=%d Stream=%d DataLen=%d\n" -#: src/dird/fd_cmds.c:150 -#, c-format -msgid "Error updating Client record. ERR=%s\n" -msgstr "Error al actualizar el registro Cliente:ERR=%s\n" +#: src/stored/bls.c:424 src/stored/bcopy.c:322 src/stored/read_records.c:387 +msgid "Fresh Volume Label" +msgstr "Nueva Etiqueta de Volumen" -#: src/dird/fd_cmds.c:155 -#, c-format -msgid "FD gave bad response to JobId command: %s\n" -msgstr "FD dio mala respuesta al comando jobId: %s\n" +#: src/stored/bls.c:427 src/stored/bcopy.c:325 src/stored/read_records.c:390 +msgid "Volume Label" +msgstr "Etiqueta de Volumen" -#: src/dird/fd_cmds.c:184 src/dird/fd_cmds.c:272 -msgid ", since=" -msgstr ", desde=" +#: src/stored/bls.c:431 src/stored/label.c:1128 src/stored/bcopy.c:329 +msgid "Begin Job Session" +msgstr "Inicio Job Sesión" -#: src/dird/fd_cmds.c:249 -msgid "No prior or suitable Full backup found in catalog. Doing FULL backup.\n" -msgstr "" -"Ninguna copia de seguridad Completa anterior encontrada en el catálogo. " -"Haciendo copia de seguridad COMPLETA.\n" +#: src/stored/bls.c:436 src/stored/label.c:1131 src/stored/bcopy.c:333 +msgid "End Job Session" +msgstr "Fin Job Sesión" -#: src/dird/fd_cmds.c:250 src/dird/fd_cmds.c:256 src/dird/fd_cmds.c:265 -#, c-format -msgid " (upgraded from %s)" -msgstr "(actualizar desde %s)" +#: src/stored/bls.c:440 src/stored/bcopy.c:338 +msgid "End of Medium" +msgstr "Fin de Medio" -#: src/dird/fd_cmds.c:255 -msgid "" -"No prior or suitable Differential backup found in catalog. Doing " -"Differential backup.\n" -msgstr "" -"Ninguna copia de seguridad Diferencial previa o adecuada encontrada en el " -"catálogo. Haciendo copia de seguridad Diferencial.\n" +#: src/stored/bls.c:443 +#, fuzzy +msgid "End of Physical Medium" +msgstr "Fin de Medio" -#: src/dird/fd_cmds.c:263 -#, c-format -msgid "Prior failed job found in catalog. Upgrading to %s.\n" +#: src/stored/bls.c:446 +msgid "Start of object" msgstr "" -"Trabajo anterior fallido encontrado en el catálogo. Actualizando a %s.\n" -#: src/dird/fd_cmds.c:328 -#, c-format -msgid "Unimplemented backup level %d %c\n" -msgstr "Nivel %d %c de respaldo no implementado\n" +#: src/stored/bls.c:449 +#, fuzzy +msgid "End of object" +msgstr "Fin de la Cinta" -#: src/dird/fd_cmds.c:401 -msgid "" -"FD compression disabled for this Job because AllowCompress=No in Storage " -"resource.\n" -msgstr "" +#: src/stored/bls.c:452 src/stored/label.c:1140 src/stored/bcopy.c:341 +msgid "Unknown" +msgstr "Desconocido" -#: src/dird/fd_cmds.c:500 src/filed/job.c:854 +#: src/stored/bls.c:459 src/stored/bcopy.c:347 src/stored/read_records.c:408 #, c-format -msgid "Cannot run program: %s. ERR=%s\n" -msgstr "No se puede ejecutar el programa: %s. ERR=%s\n" +msgid "%s Record: VolSessionId=%d VolSessionTime=%d JobId=%d DataLen=%d\n" +msgstr "%s Registro: VolSessionId=%d VolSessionTime=%d JobId=%d DataLen=%d\n" -#: src/dird/fd_cmds.c:511 src/dird/fd_cmds.c:536 src/dird/fd_cmds.c:550 -msgid ">filed: write error on socket\n" -msgstr ">filed: error de escritura en socket\n" +#: src/stored/wait.c:121 +#, c-format +msgid "pthread timedwait error. ERR=%s\n" +msgstr "error timedwait pthread. ERR=%s\n" -#: src/dird/fd_cmds.c:517 +#: src/stored/wait.c:227 #, c-format -msgid "Error running program: %s. ERR=%s\n" -msgstr "Error ejecutando el programa: %s. ERR=%s\n" +msgid "JobId=%s, Job %s waiting to reserve a device.\n" +msgstr "JobId=%s, Job %s esperando para reservar un dispositivo.\n" + +#: src/stored/wait.c:273 +#, fuzzy, c-format +msgid "JobId=%s, Job %s waiting device %s.\n" +msgstr "JobId=%s, Job %s esperando para reservar un dispositivo.\n" -#: src/dird/fd_cmds.c:526 +#: src/stored/device.c:120 #, c-format -msgid "Cannot open included file: %s. ERR=%s\n" -msgstr "No se puede abrir el archivo incluido: %s. ERR=%s\n" +msgid "End of medium on Volume \"%s\" Bytes=%s Blocks=%s at %s.\n" +msgstr "Fin de medio en Volumen \"%s\" Bytes=%s Bloques=%s en %s.\n" -#: src/dird/fd_cmds.c:672 +#: src/stored/device.c:146 #, c-format -msgid "Client \"%s\" RunScript failed.\n" -msgstr "Cliente \"%s\" RunScript fallido.\n" +msgid "New volume \"%s\" mounted on device %s at %s.\n" +msgstr "Nuevo volumen \"%s\" montado en el dispositivo %s en %s.\n" -#: src/dird/fd_cmds.c:695 +#: src/stored/device.c:158 #, c-format -msgid "" -"Client \"%s\" may not be used to restore this job. Please upgrade your " -"client.\n" -msgstr "" +msgid "write_block_to_device Volume label failed. ERR=%s" +msgstr "Fallo de etiqueta de volumen write_block_to_device. ERR=%s" -#: src/dird/fd_cmds.c:770 -#, fuzzy -msgid "RestoreObject failed.\n" -msgstr "Restaurar Archivos" +#: src/stored/device.c:177 +#, c-format +msgid "write_block_to_device overflow block failed. ERR=%s" +msgstr "Fallo de desbordamiento de bloque write_block_to_device. ERR=%s" -#: src/dird/fd_cmds.c:806 +#: src/stored/device.c:182 #, c-format -msgid "" -" \n" +" -b specify a bootstrap file\n" +" -c specify a Storage configuration file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -e exclude list\n" +" -i include list\n" +" -p proceed inspite of I/O errors\n" +" -v verbose\n" +" -V specify Volume names (separated by |)\n" +" -? print this message\n" +"\n" +msgstr "" +"\n" +"Versión: %s (%s)\n" +"\n" +"Utilice: bextract " +"\n" +" -b especifica un archivo bootstrap\n" +" -c especifica un archivo Storage de configuración\n" +" -d establece nivel de depuración para \n" +" -dt imprime timestamp en salida de depuración\n" +" -e lista de exclusión\n" +" -i lista de inclusión\n" +" -p proceder a pesar de los errores de E/S\n" +" -v detallado\n" +" -V especifica nombres de Volúmenes (separados por |)\n" +" -? imprime esta mensaje\n" +"\n" -#: src/dird/ua_update.c:306 -#, c-format -msgid "New Slot is: %d\n" -msgstr "Nueva Ranura es: %d\n" +#: src/stored/bextract.c:191 src/stored/bscan.c:239 src/stored/bcopy.c:151 +#: src/tools/bbatch.c:178 src/tools/bvfs_test.c:189 src/tools/cats_test.c:309 +#: src/tools/ing_test.c:173 +msgid "Wrong number of arguments: \n" +msgstr "Incorrecto numero de argumentos: \n" -#: src/dird/ua_update.c:331 +#: src/stored/bextract.c:215 #, c-format -msgid "New Pool is: %s\n" -msgstr "Nuevo Pool es: %s\n" +msgid "%d Program Name and/or Program Data Stream records ignored.\n" +msgstr "" +"Nombre del Programa %d y/o registros de Datos de Flujo del Programa " +"ignorado.\n" -#: src/dird/ua_update.c:374 +#: src/stored/bextract.c:219 #, c-format -msgid "New RecyclePool is: %s\n" -msgstr "Nuevo RecyclePool es: %s\n" +msgid "%d Win32 data or Win32 gzip data stream records. Ignored.\n" +msgstr "%d registros de flujo de datos Win32 or Win32 datos gzip. Ignorados.\n" -#: src/dird/ua_update.c:394 +#: src/stored/bextract.c:246 #, c-format -msgid "Error updating Volume record: ERR=%s" -msgstr "Error actualizando registro Volumen: ERR=%s" +msgid "Cannot stat %s. It must exist. ERR=%s\n" +msgstr "No se puede stat %s. El debe existir. ERR=%s\n" -#: src/dird/ua_update.c:396 +#: src/stored/bextract.c:250 #, c-format -msgid "Volume defaults updated from \"%s\" Pool record.\n" -msgstr "Volumen por defecto actualizado desde registro \"%s\" Pool.\n" +msgid "%s must be a directory.\n" +msgstr "%s debe ser un directorio.\n" -#: src/dird/ua_update.c:419 src/dird/ua_update.c:451 +#: src/stored/bextract.c:271 #, c-format -msgid "Error updating Volume records: ERR=%s" -msgstr "Error actualizando registros Volumen: ERR=%s" +msgid "%u files restored.\n" +msgstr "%u archivos restaurados.\n" -#: src/dird/ua_update.c:421 src/dird/ua_update.c:453 +#: src/stored/bextract.c:281 src/stored/bextract.c:287 #, c-format -msgid "All Volume defaults updated from \"%s\" Pool record.\n" -msgstr "Todos Volúmenes por defectos actualizado desde registro \"%s\" Pool.\n" +msgid "Write error on %s: %s\n" +msgstr "Error de escritura en %s: %s\n" -#: src/dird/ua_update.c:443 -#, c-format -msgid "Updating all pools, but skipped PoolId=%d. ERR=%s\n" -msgstr "Actualizando todos los pools, pero saltando PoolId=%d. ERR=%s\n" +#: src/stored/bextract.c:318 src/stored/bextract.c:584 +msgid "Logic error output file should be open but is not.\n" +msgstr "Error lógico, archivo de salida debería estar abierto, pero no esta.\n" -#: src/dird/ua_update.c:469 +#: src/stored/bextract.c:332 src/filed/restore.c:560 #, c-format -msgid "Error updating media record Enabled: ERR=%s" -msgstr "Error actualizando registro media Activado: ERR=%s" +msgid "%s stream not supported on this Client.\n" +msgstr "flujo %s no suportado en este Cliente.\n" -#: src/dird/ua_update.c:472 +#: src/stored/bextract.c:342 #, c-format -msgid "New Enabled is: %d\n" -msgstr "Nuevo Activado es: %d\n" +msgid "%s was deleted.\n" +msgstr "%s se ha eliminado.\n" -#: src/dird/ua_update.c:487 +#: src/stored/bextract.c:390 #, c-format -msgid "Error updating media record ActionOnPurge: ERR=%s" -msgstr "Error actualizando registro de medios ActionOnPurge: ERR=%s" +msgid "Seek error on %s: %s\n" +msgstr "Buscar error en %s: %s\n" -#: src/dird/ua_update.c:490 +#: src/stored/bextract.c:426 src/stored/bextract.c:491 +#: src/filed/restore.c:1335 #, c-format -msgid "New ActionOnPurge is: %s\n" -msgstr "Nueva ActionOnPurge es: %s\n" - -#: src/dird/ua_update.c:605 src/dird/ua_run.c:222 -msgid "Parameters to modify:\n" -msgstr "Parámetros para modificar:\n" - -#: src/dird/ua_update.c:606 -msgid "Volume Status" -msgstr "Estado del Volumen" - -#: src/dird/ua_update.c:607 -msgid "Volume Retention Period" -msgstr "Periodo de Retención del Volumen" - -#: src/dird/ua_update.c:608 -msgid "Volume Use Duration" -msgstr "Duración de uso del Volumen" - -#: src/dird/ua_update.c:609 -msgid "Maximum Volume Jobs" -msgstr "Máximo Volumen Jobs" - -#: src/dird/ua_update.c:610 -msgid "Maximum Volume Files" -msgstr "Máximo Archivos de Volumen" - -#: src/dird/ua_update.c:611 -msgid "Maximum Volume Bytes" -msgstr "Máximo Volumen Bytes" - -#: src/dird/ua_update.c:612 -msgid "Recycle Flag" -msgstr "Recycle Flag" - -#: src/dird/ua_update.c:613 -msgid "Slot" -msgstr "Ranura" - -#: src/dird/ua_update.c:614 -msgid "InChanger Flag" -msgstr "InChanger Flag" - -#: src/dird/ua_update.c:615 -msgid "Volume Files" -msgstr "Archivos de Volumen" - -#: src/dird/ua_update.c:617 -msgid "Volume from Pool" -msgstr "Volumen de Pool" - -#: src/dird/ua_update.c:618 -msgid "All Volumes from Pool" -msgstr "Todos Volúmenes de Pool" - -#: src/dird/ua_update.c:619 -msgid "All Volumes from all Pools" -msgstr "Todos los Volúmenes de todas los Pools" - -#: src/dird/ua_update.c:620 -msgid "Enabled" -msgstr "Activado" - -#: src/dird/ua_update.c:621 -msgid "RecyclePool" -msgstr "RecyclePool" - -#: src/dird/ua_update.c:622 -msgid "Action On Purge" -msgstr "Action On Purge" +msgid "Seek to %s error on %s: ERR=%s\n" +msgstr "Tratar de %s error en %s: ERR=%s\n" -#: src/dird/ua_update.c:623 -msgid "Done" -msgstr "Hecho" +#: src/stored/bextract.c:445 +#, c-format +msgid "Uncompression error. ERR=%d\n" +msgstr "Error de descompresión. ERR=%d\n" -#: src/dird/ua_update.c:624 src/dird/ua_run.c:252 src/dird/ua_run.c:600 -msgid "Select parameter to modify" -msgstr "Seleccione los parámetros para modificar" +#: src/stored/bextract.c:459 src/filed/restore.c:1450 +msgid "GZIP data stream found, but GZIP not configured!\n" +msgstr "Flujo de datos GZIP encontrado, pero GZIP no está configurado!\n" -#: src/dird/ua_update.c:632 +#: src/stored/bextract.c:514 src/filed/restore.c:1376 #, c-format -msgid "Updating Volume \"%s\"\n" -msgstr "Actualizando Volumen \"%s\"\n" +msgid "Compressed header version error. version=0x%x\n" +msgstr "" -#: src/dird/ua_update.c:637 +#: src/stored/bextract.c:519 src/filed/restore.c:1381 #, c-format -msgid "Current Volume status is: %s\n" -msgstr "Actual estado del Volumen es: %s\n" - -#: src/dird/ua_update.c:638 -msgid "Possible Values are:\n" -msgstr "Posibles Valores son:\n" +msgid "Compressed header size error. comp_len=%d, msglen=%d\n" +msgstr "" -#: src/dird/ua_update.c:649 -msgid "Choose new Volume Status" -msgstr "Seleccione el nuevo estado del Volumen" +#: src/stored/bextract.c:541 +#, fuzzy, c-format +msgid "LZO uncompression error. ERR=%d\n" +msgstr "Error de descompresión. ERR=%d\n" -#: src/dird/ua_update.c:655 +#: src/stored/bextract.c:553 src/filed/restore.c:1414 #, c-format -msgid "Current retention period is: %s\n" -msgstr "Actual periodo de retención es: %s\n" +msgid "Compression algorithm 0x%x found, but not supported!\n" +msgstr "" -#: src/dird/ua_update.c:657 -msgid "Enter Volume Retention period: " -msgstr "Introduzca periodo de Retención del Volumen:" +#: src/stored/bextract.c:575 +msgid "Got Program Name or Data Stream. Ignored.\n" +msgstr "Obtener Nombre de Programa o Secuencia de Datos. Ignorado.\n" -#: src/dird/ua_update.c:664 +#: src/stored/bextract.c:589 src/filed/restore.c:316 src/filed/restore.c:1033 #, c-format -msgid "Current use duration is: %s\n" -msgstr "Duración de uso actual es: %s\n" +msgid "Unknown stream=%d ignored. This shouldn't happen!\n" +msgstr "Flujo desconocido=%d ignorado. Esto no debería suceder!\n" -#: src/dird/ua_update.c:666 -msgid "Enter Volume Use Duration: " -msgstr "Introduzca Duración de Uso de Volumen:" +#: src/stored/bscan.c:108 +#, c-format +msgid "" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: bscan [ options ] \n" +" -b bootstrap specify a bootstrap file\n" +" -c specify configuration file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -m update media info in database\n" +" -D specify the driver database name (default NULL)\n" +" -n specify the database name (default bacula)\n" +" -u specify database user name (default bacula)\n" +" -P specify database password (default none)\n" +" -h specify database host (default NULL)\n" +" -t specify database port (default 0)\n" +" -p proceed inspite of I/O errors\n" +" -r list records\n" +" -s synchronize or store in database\n" +" -S show scan progress periodically\n" +" -v verbose\n" +" -V specify Volume names (separated by |)\n" +" -w specify working directory (default from conf file)\n" +" -? print this message\n" +"\n" +msgstr "" +"\n" +"Versión: %s (%s)\n" +"\n" +"Utilice: bscan [opciones] \n" +" -b especifica un archivo bootstrap\n" +" -c especifica un archivo de configuración\n" +" -d establece nivel de depuración para \n" +" -dt imprime timestamp en salida de depuración\n" +" -m Actualiza información de los medios en la base de datos\n" +" -D especifica el nombre del driver de base de datos " +"(por defecto NULL)\n" +" -n especifica el nombre de la base de datos (por defecto bacula)\n" +" -u especifica el nombre de usuario de la base de datos (por " +"defecto bacula)\n" +" -P especifica la contraseña de la base de datos (por defecto " +"none)\n" +" -h especifica servidor de la base de datos (por defecto NULL)\n" +" -t especifica el puerto de la base de datos (por defecto 0)\n" +" -p proceder a pesar de los errores\n" +" -r lista de registros\n" -#: src/dird/ua_update.c:673 +#: src/stored/bscan.c:264 #, c-format -msgid "Current max jobs is: %u\n" -msgstr "Máximo jobs actual es: %u\n" +msgid "Working Directory: %s not found. Cannot continue.\n" +msgstr "Directorio de Trabajo: %s no encontrado. No se puede continuar.\n" -#: src/dird/ua_update.c:674 -msgid "Enter new Maximum Jobs: " -msgstr "Introduzca nuevo Máximo de Trabajos" +#: src/stored/bscan.c:268 +#, c-format +msgid "Working Directory: %s is not a directory. Cannot continue.\n" +msgstr "" +"Directorio de Trabajo: %s no es un directorio. No se puede continuar.\n" -#: src/dird/ua_update.c:681 +#: src/stored/bscan.c:282 src/stored/bscan.c:358 #, c-format -msgid "Current max files is: %u\n" -msgstr "Actual máximo de archivos es: %u\n" +msgid "First Volume Size = %s\n" +msgstr "Tamaño Primero Volumen = %s\n" -#: src/dird/ua_update.c:682 -msgid "Enter new Maximum Files: " -msgstr "Introduzca nuevo máximo de archivos:" +#: src/stored/bscan.c:288 src/tools/bbatch.c:189 src/tools/bbatch.c:238 +#: src/tools/bvfs_test.c:203 src/tools/ing_test.c:179 +msgid "Could not init Bacula database\n" +msgstr "No se pudo iniciar base de datos de Bacula\n" -#: src/dird/ua_update.c:689 +#: src/stored/bscan.c:295 src/tools/bbatch.c:245 src/tools/bvfs_test.c:212 +#: src/tools/ing_test.c:188 #, c-format -msgid "Current value is: %s\n" -msgstr "Valor actual es: %s\n" +msgid "Using Database: %s, User: %s\n" +msgstr "Usando Base de Datos: %s, Usuario: %s\n" -#: src/dird/ua_update.c:690 -msgid "Enter new Maximum Bytes: " -msgstr "Introduzca nuevo Máximo de Bytes:" +#: src/stored/bscan.c:329 +#, c-format +msgid "Create JobMedia for Job %s\n" +msgstr "Crear JobMedia para Job %s\n" -#: src/dird/ua_update.c:698 +#: src/stored/bscan.c:339 #, c-format -msgid "Current recycle flag is: %s\n" -msgstr "Recycle flag actual es: %s\n" +msgid "Could not create JobMedia record for Volume=%s Job=%s\n" +msgstr "No es posible crear registro JobMedia para Volumen=%s Job=%s\n" -#: src/dird/ua_update.c:700 -msgid "Enter new Recycle status: " -msgstr "Introduzca el nuevo estado de Reciclaje:" +#: src/stored/bscan.c:406 +#, c-format +msgid "done: %d%%\n" +msgstr "Hecho: %d%%\n" -#: src/dird/ua_update.c:707 +#: src/stored/bscan.c:414 src/stored/bcopy.c:230 #, c-format -msgid "Current Slot is: %d\n" -msgstr "Ranura Actual es: %d\n" +msgid "Record: SessId=%u SessTim=%u FileIndex=%d Stream=%d len=%u\n" +msgstr "Registro: SessId=%u SessTim=%u FileIndex=%d Stream=%d len=%u\n" -#: src/dird/ua_update.c:708 -msgid "Enter new Slot: " -msgstr "Introduzca nueva Ranura:" +#: src/stored/bscan.c:430 +msgid "Volume is prelabeled. This tape cannot be scanned.\n" +msgstr "El volumen esta prelabeled. Esta cinta no puede ser escaneada. \n" -#: src/dird/ua_update.c:715 +#: src/stored/bscan.c:442 #, c-format -msgid "Current InChanger flag is: %d\n" -msgstr "Bandera InChanger actual es: %d\n" +msgid "Pool record for %s found in DB.\n" +msgstr "Registro Pool para %s encontrado en BD.\n" -#: src/dird/ua_update.c:716 +#: src/stored/bscan.c:446 #, c-format -msgid "Set InChanger flag for Volume \"%s\": yes/no: " -msgstr "Configurar bandera InChanger para Volumen \"%s\": sí/no: " +msgid "VOL_LABEL: Pool record not found for Pool: %s\n" +msgstr "VOL_LABEL: Registro Pool no encontrado para Pool: %s\n" -#: src/dird/ua_update.c:730 +#: src/stored/bscan.c:452 #, c-format -msgid "New InChanger flag is: %d\n" -msgstr "Nueva InChanger flag es: %d\n" - -#: src/dird/ua_update.c:737 -msgid "" -"Warning changing Volume Files can result\n" -"in loss of data on your Volume\n" -"\n" -msgstr "" -"Advertencia, cambiar Archivos de Volumen puede resultar\n" -"en pérdida de datos en el Volumen\n" -"\n" +msgid "VOL_LABEL: PoolType mismatch. DB=%s Vol=%s\n" +msgstr "VOL_LABEL: PoolType desajustado. BD=%s Vol=%s\n" -#: src/dird/ua_update.c:739 +#: src/stored/bscan.c:456 #, c-format -msgid "Current Volume Files is: %u\n" -msgstr "Archivos de Volumen actual es: %u\n" - -#: src/dird/ua_update.c:740 -msgid "Enter new number of Files for Volume: " -msgstr "Introduzca el nuevo número de Archivos para el Volumen:" - -#: src/dird/ua_update.c:745 -msgid "Normally, you should only increase Volume Files by one!\n" -msgstr "Normalmente, sólo debería aumentar el Archivo de Volumen en uno!\n" +msgid "Pool type \"%s\" is OK.\n" +msgstr "Tipo de Pool \"%s\" esta OK.\n" -#: src/dird/ua_update.c:746 -msgid "Increase Volume Files? (yes/no): " -msgstr "Incrementar Archivo de Volumen? (sí/no):" +#: src/stored/bscan.c:466 +#, c-format +msgid "Media record for %s found in DB.\n" +msgstr "Registro Media para %s encontrado en BD.\n" -#: src/dird/ua_update.c:756 +#: src/stored/bscan.c:473 #, c-format -msgid "New Volume Files is: %u\n" -msgstr "Nuevo Archivo de Volumen es: %u\n" +msgid "VOL_LABEL: Media record not found for Volume: %s\n" +msgstr "VOL_LABEL: Registro Media no encontrado para Volumen: %s\n" -#: src/dird/ua_update.c:768 +#: src/stored/bscan.c:480 #, c-format -msgid "Current Pool is: %s\n" -msgstr "Pool actual es: %s\n" +msgid "VOL_LABEL: MediaType mismatch. DB=%s Vol=%s\n" +msgstr "VOL_LABEL: MediaType desajustada. BD=%s Vol=%s\n" -#: src/dird/ua_update.c:769 -msgid "Enter new Pool name: " -msgstr "Introduzca el nuevo nombre del Pool:" +#: src/stored/bscan.c:484 +#, c-format +msgid "Media type \"%s\" is OK.\n" +msgstr "Tipo de Media \"%s\" esta OK.\n" -#: src/dird/ua_update.c:790 +#: src/stored/bscan.c:494 #, c-format -msgid "Current Enabled is: %d\n" -msgstr "Habilitado(Enabled) actual es: %d\n" +msgid "VOL_LABEL: OK for Volume: %s\n" +msgstr "VOL_LABEL: OK para Volumen: %s\n" -#: src/dird/ua_update.c:791 -msgid "Enter new Enabled: " -msgstr "Introduzca nuevo Habilitado(Enabled):" +#: src/stored/bscan.c:501 +#, c-format +msgid "%d \"errors\" ignored before first Start of Session record.\n" +msgstr "" +"%d \"errores\" ignorados antes del primero registro de Inicio de Sesión.\n" -#: src/dird/ua_update.c:810 +#: src/stored/bscan.c:512 #, c-format -msgid "Current RecyclePool is: %s\n" -msgstr "RecyclePool actual es: %s\n" +msgid "SOS_LABEL: Found Job record for JobId: %d\n" +msgstr "SOS_LABEL: Encontrado registro Job para JobId: %d\n" -#: src/dird/ua_update.c:812 -msgid "No current RecyclePool\n" -msgstr "No actual RecyclePool\n" +#: src/stored/bscan.c:517 +#, c-format +msgid "SOS_LABEL: Job record not found for JobId: %d\n" +msgstr "SOS_LABEL: Registro Job no encontrado para JobId: %d\n" -#: src/dird/ua_update.c:822 +#: src/stored/bscan.c:557 #, c-format -msgid "Current ActionOnPurge is: %s\n" -msgstr "Actual ActionOnPurge es: %s\n" +msgid "SOS_LABEL: VolSessId mismatch for JobId=%u. DB=%d Vol=%d\n" +msgstr "SOS_LABEL: VolSessId desajustado para JobId=%u. BD=%d Vol=%d\n" -#: src/dird/ua_update.c:824 -msgid "Enter new ActionOnPurge (one of: Truncate, None): " -msgstr "Introduzca nuevo ActionOnPurge (uno de: Truncar, Ninguno):" +#: src/stored/bscan.c:563 +#, c-format +msgid "SOS_LABEL: VolSessTime mismatch for JobId=%u. DB=%d Vol=%d\n" +msgstr "SOS_LABEL: VolSessTime desajustado para JobId=%u. BD=%d Vol=%d\n" -#: src/dird/ua_update.c:832 -msgid "Selection terminated.\n" -msgstr "Selección terminada.\n" +#: src/stored/bscan.c:569 +#, c-format +msgid "SOS_LABEL: PoolId mismatch for JobId=%u. DB=%d Vol=%d\n" +msgstr "SOS_LABEL: PoolId diferente para JobId=%u. BD=%d Vol=%d\n" -#: src/dird/ua_update.c:852 +#: src/stored/bscan.c:587 src/stored/bscan.c:1141 #, c-format -msgid "Updating %i job(s).\n" -msgstr "Actualizando %i job(s).\n" +msgid "Could not find SessId=%d SessTime=%d for EOS record.\n" +msgstr "No se pudo encontrar SessId=%d SessTime=%d para registro EOS.\n" -#: src/dird/ua_update.c:884 +#: src/stored/bscan.c:633 #, c-format -msgid "db_update_pool_record returned %d. ERR=%s\n" -msgstr "db_update_pool_record regreso %d. ERR=%s\n" +msgid "Could not update job record. ERR=%s\n" +msgstr "No se pudo actualizar el registro de trabajo. ERR=%s\n" -#: src/dird/ua_update.c:891 -msgid "Pool DB record updated from resource.\n" -msgstr "registro BD Pool actualizado desde recursos.\n" +#: src/stored/bscan.c:644 +#, c-format +msgid "End of all Volumes. VolFiles=%u VolBlocks=%u VolBytes=%s\n" +msgstr "Final de todos los volúmenes. VolFiles=%u VolBlocks=%u VolBytes=%s\n" -#: src/dird/ua_update.c:918 -msgid "Expect JobId keyword, not found.\n" -msgstr "Esperaba palabra clave JobId, no encontrada.\n" +#: src/stored/bscan.c:656 +#, c-format +msgid "Could not find Job for SessId=%d SessTime=%d record.\n" +msgstr "No se pudo encontrar registro trabajo para SessId=%d SessTime=%d.\n" -#: src/dird/ua_update.c:943 -msgid "Neither Client nor StartTime specified.\n" -msgstr "Ni el Cliente ni StartTime especificado.\n" +#: src/stored/bscan.c:687 +#, c-format +msgid "%s file records. At file:blk=%s:%s bytes=%s\n" +msgstr "%s registros de archivo. En el archivo:blk=%s:%s bytes=%s\n" -#: src/dird/migrate.c:149 src/dird/migrate.c:163 +#: src/stored/bscan.c:752 #, c-format -msgid "No previous Job found to %s.\n" -msgstr "Ninguno Job previo encontrado para %s.\n" +msgid "Got MD5 record: %s\n" +msgstr "Obtuvo registro MD5: %s\n" -#: src/dird/migrate.c:155 -msgid "Create bootstrap file failed.\n" -msgstr "Fallo crear archivo bootstrap.\n" +#: src/stored/bscan.c:760 +#, c-format +msgid "Got SHA1 record: %s\n" +msgstr "Obtuvo registro SHA1: %s\n" -#: src/dird/migrate.c:165 +#: src/stored/bscan.c:768 #, c-format -msgid "Previous Job has no data to %s.\n" -msgstr "Job anterior no tiene datos para %s.\n" +msgid "Got SHA256 record: %s\n" +msgstr "Obtuvo registro SHA256: %s\n" -#: src/dird/migrate.c:182 +#: src/stored/bscan.c:776 #, c-format -msgid "Job resource not found for \"%s\".\n" -msgstr "Recurso Job no encontrado para \"%s\".\n" +msgid "Got SHA512 record: %s\n" +msgstr "Obtuvo registro SHA512: %s\n" + +#: src/stored/bscan.c:784 src/stored/bscan.c:791 +msgid "Got signed digest record\n" +msgstr "Obtuvo registro resume firmado: %s\n" -#: src/dird/migrate.c:186 +#: src/stored/bscan.c:797 #, c-format -msgid "Previous Job resource not found for \"%s\".\n" -msgstr "Recurso Job anterior no encontrado para \"%s\".\n" +msgid "Got Prog Names Stream: %s\n" +msgstr "Obtuvo Stream Nombres de Programas: %s\n" -#: src/dird/migrate.c:203 -msgid "setup job failed.\n" -msgstr "Configuración del job fallida.\n" +#: src/stored/bscan.c:803 +msgid "Got Prog Data Stream record.\n" +msgstr "Obtuvo Registro Stream Datos de Programas: %s\n" -#: src/dird/migrate.c:258 +#: src/stored/bscan.c:848 #, c-format -msgid "Pool for JobId %s not in database. ERR=%s\n" -msgstr "Pool para JobId %s no esta en base de datos. ERR=%s\n" +msgid "Unknown stream type!!! stream=%d len=%i\n" +msgstr "Tipo de flujo desconocido!!! stream=%d len=%i\n" -#: src/dird/migrate.c:266 +#: src/stored/bscan.c:910 #, c-format -msgid "Pool resource \"%s\" not found.\n" -msgstr "Recurso Pool \"%s\" no encontrado.\n" +msgid "Could not create File Attributes record. ERR=%s\n" +msgstr "No se pudo crear el registro de Archivos de Atributos. ERR=%s\n" -#: src/dird/migrate.c:316 src/dird/migrate.c:898 +#: src/stored/bscan.c:916 #, c-format -msgid "Could not get job record for JobId %s to %s. ERR=%s" -msgstr "No se pudo obtener el registro Job para JobId %s para %s. ERR=%s" +msgid "Created File record: %s\n" +msgstr "Registro Archivo creado: %s\n" -#: src/dird/migrate.c:327 +#: src/stored/bscan.c:961 #, c-format -msgid "JobId %s already %s probably by another Job. %s stopped.\n" -msgstr "JobId %s ya %s probablemente por otro Job. %s detenido.\n" +msgid "Could not create media record. ERR=%s\n" +msgstr "No es posible crear registro media. ERR=%s\n" -#: src/dird/migrate.c:337 +#: src/stored/bscan.c:965 src/stored/bscan.c:986 #, c-format -msgid "Start %s JobId %s, Job=%s\n" -msgstr "Inicio %s JobId %s, Job=%s\n" +msgid "Could not update media record. ERR=%s\n" +msgstr "No es posible actualizar registro media. ERR=%s\n" -#: src/dird/migrate.c:712 +#: src/stored/bscan.c:969 #, c-format -msgid "No %s SQL selection pattern specified.\n" -msgstr "Ninguno %s patrón de selección de SQL especificado.\n" +msgid "Created Media record for Volume: %s\n" +msgstr "Creado Registro Media para Volumen: %s\n" -#: src/dird/migrate.c:719 src/dird/migrate.c:738 src/dird/migrate.c:759 -#: src/dird/migrate.c:795 src/dird/migrate.c:822 src/dird/migrate.c:956 -#: src/dird/migrate.c:989 src/dird/migrate.c:1118 +#: src/stored/bscan.c:990 #, c-format -msgid "SQL failed. ERR=%s\n" -msgstr "Fallo SQL. ERR=%s\n" +msgid "Updated Media record at end of Volume: %s\n" +msgstr "Actualizado el registro Media al final del Volumen: %s\n" -#: src/dird/migrate.c:742 src/dird/migrate.c:749 src/dird/migrate.c:763 -#: src/dird/migrate.c:826 +#: src/stored/bscan.c:1007 #, c-format -msgid "No Volumes found to %s.\n" -msgstr "Volúmenes no encontrado para %s.\n" - -#: src/dird/migrate.c:777 src/dird/migrate.c:866 src/dird/migrate.c:886 -msgid "Invalid JobId found.\n" -msgstr "JobId inválido encontrado.\n" +msgid "Could not create pool record. ERR=%s\n" +msgstr "No es posible crear el registro Pool. ERR=%s\n" -#: src/dird/migrate.c:837 +#: src/stored/bscan.c:1011 #, c-format -msgid "Unknown %s Selection Type.\n" -msgstr "Tipo de selección %s desconocido.\n" +msgid "Created Pool record for Pool: %s\n" +msgstr "Creado el registro Pool para Pool: %s\n" -#: src/dird/migrate.c:848 src/dird/migrate.c:869 src/dird/migrate.c:889 +#: src/stored/bscan.c:1030 #, c-format -msgid "No JobIds found to %s.\n" -msgstr "Ninguno JobIds encontrado para %s.\n" +msgid "Could not get Client record. ERR=%s\n" +msgstr "No se ha podido obtener el registro del cliente. ERR=%s\n" -#: src/dird/migrate.c:852 +#: src/stored/bscan.c:1036 src/dird/job.c:1060 #, c-format -msgid "The following %u JobId%s chosen to be %s: %s\n" -msgstr "El siguiente %u JobId%s elegido para ser %s: %s\n" +msgid "Could not create Client record. ERR=%s\n" +msgstr "No es posible crear el registro de clientes. ERR=%s\n" -#: src/dird/migrate.c:853 -msgid " was" -msgstr "era" +#: src/stored/bscan.c:1040 +#, c-format +msgid "Created Client record for Client: %s\n" +msgstr "Creado registro Cliente para Cliente: %s\n" -#: src/dird/migrate.c:853 -msgid "s were" -msgstr "s eran" +#: src/stored/bscan.c:1057 +#, c-format +msgid "Fileset \"%s\" already exists.\n" +msgstr "Fileset \"%s\" ya existe.\n" -#: src/dird/migrate.c:905 +#: src/stored/bscan.c:1061 #, c-format -msgid "%s using JobId=%s Job=%s\n" -msgstr "%s utilizando JobId=%s Job=%s\n" +msgid "Could not create FileSet record \"%s\". ERR=%s\n" +msgstr "No es posible crear registro FileSet \"%s\". ERR=%s\n" -#: src/dird/migrate.c:939 -msgid "Could not start migration job.\n" -msgstr "No se pudo arrancar el Job de migración.\n" +#: src/stored/bscan.c:1066 +#, c-format +msgid "Created FileSet record \"%s\"\n" +msgstr "Creado registro FileSet \"%s\"\n" -#: src/dird/migrate.c:941 +#: src/stored/bscan.c:1113 #, c-format -msgid "%s JobId %d started.\n" -msgstr "%s JobId %d iniciado.\n" +msgid "Could not create JobId record. ERR=%s\n" +msgstr "No es posible crear registro JobId. ERR=%s\n" -#: src/dird/migrate.c:960 +#: src/stored/bscan.c:1119 #, c-format -msgid "No %s found to %s.\n" -msgstr "Ninguno %s encontrado para %s.\n" +msgid "Could not update job start record. ERR=%s\n" +msgstr "No se pudo actualizar el registro job de inicio. ERR=%s\n" -#: src/dird/migrate.c:964 +#: src/stored/bscan.c:1122 #, c-format -msgid "SQL error. Expected 1 MediaId got %d\n" -msgstr "SQL error. Esperaba 1 MediaId, obtuvo %d\n" +msgid "Created new JobId=%u record for original JobId=%u\n" +msgstr "Creado nuevo registro JobId=%u para JobId=%u original\n" -#: src/dird/migrate.c:993 src/dird/migrate.c:1123 +#: src/stored/bscan.c:1175 #, c-format -msgid "No %ss found to %s.\n" -msgstr "Ninguno %ss encontrado para %s.\n" +msgid "Could not update JobId=%u record. ERR=%s\n" +msgstr "No se puede actualizar registro JobId=%u. ERR=%s\n" -#: src/dird/migrate.c:1015 -msgid "Selection Type 'pooluncopiedjobs' only applies to Copy Jobs" +#: src/stored/bscan.c:1180 +#, c-format +msgid "Updated Job termination record for JobId=%u Level=%s TermStat=%c\n" msgstr "" -"Selección del tipo 'pooluncopiedjos' sólo se aplica a Trabajos de Copia(Copy " -"Jobs)" +"Actualizado el registro de terminación de Job para JobId=%u Nivel=%s " +"TermStat=%c\n" -#: src/dird/migrate.c:1024 -#, c-format -msgid "SQL to get uncopied jobs failed. ERR=%s\n" -msgstr "Fallo SQL para obtener uncopied jobs. ERR=%s\n" +#: src/stored/bscan.c:1191 src/dird/vbackup.c:386 src/dird/backup.c:774 +msgid "Backup OK" +msgstr "Respaldo OK" -#: src/dird/migrate.c:1047 -#, c-format -msgid "No %s %s selection pattern specified.\n" -msgstr "Ninguno %s %s patrón de selección especificados.\n" +#: src/stored/bscan.c:1194 src/dird/vbackup.c:384 src/dird/backup.c:772 +#: src/dird/backup.c:778 +msgid "Backup OK -- with warnings" +msgstr "Respaldo OK -- con advertencias" -#: src/dird/migrate.c:1058 -#, c-format -msgid "SQL to get %s failed. ERR=%s\n" -msgstr "Fallo SQL para obtener %s. ERR=%s\n" +#: src/stored/bscan.c:1198 src/dird/vbackup.c:391 src/dird/backup.c:782 +msgid "*** Backup Error ***" +msgstr "***Error en Respaldo ***" -#: src/dird/migrate.c:1063 -#, c-format -msgid "Query of Pool \"%s\" returned no Jobs to %s.\n" -msgstr "Consulta de Pool \"%s\" No regreso Jobs para %s.\n" +#: src/stored/bscan.c:1201 src/dird/vbackup.c:401 src/dird/backup.c:792 +msgid "Backup Canceled" +msgstr "Respaldo Cancelado" -#: src/dird/migrate.c:1101 +#: src/stored/bscan.c:1205 #, c-format -msgid "Regex pattern matched no Jobs to %s.\n" -msgstr "Patrón Regex no encontró Jobs para %s.\n" +msgid "Job Termination code: %d" +msgstr "Código de Terminación del Job: %d" -#: src/dird/migrate.c:1265 +#: src/stored/bscan.c:1210 #, c-format -msgid "%s OK -- with warnings" -msgstr "%s OK -- con alertas" +msgid "" +"%s\n" +"JobId: %d\n" +"Job: %s\n" +"FileSet: %s\n" +"Backup Level: %s\n" +"Client: %s\n" +"Start time: %s\n" +"End time: %s\n" +"Files Written: %s\n" +"Bytes Written: %s\n" +"Volume Session Id: %d\n" +"Volume Session Time: %d\n" +"Last Volume Bytes: %s\n" +"Termination: %s\n" +"\n" +msgstr "" +"%s\n" +"JobId: %d\n" +"Job: %s\n" +"FileSet: %s\n" +"Nivel de Respaldo: %s\n" +"Cliente: %s\n" +"Hora de Inicio: %s\n" +"Hora de Finalización: %s\n" +"Archivos Escritos: %s\n" +"Bytes Escritos: %s\n" +"Id Volumen Sesión: %d\n" +"Tiempo de la Sesión del Volumen: %d\n" +"Últimos Bytes del Volumen: %s\n" +"Terminación: %s\n" +"\n" -#: src/dird/migrate.c:1267 +#: src/stored/bscan.c:1268 #, c-format -msgid "%s OK" -msgstr "%s OK" +msgid "Could not create JobMedia record. ERR=%s\n" +msgstr "No es posible crear registro JobMedia. ERR=%s\n" -#: src/dird/migrate.c:1272 +#: src/stored/bscan.c:1272 #, c-format -msgid "*** %s Error ***" -msgstr "*** %s Error ***" +msgid "Created JobMedia record JobId %d, MediaId %d\n" +msgstr "Creado registro JobMedia JobID %d, MediaID %d\n" -#: src/dird/migrate.c:1282 +#: src/stored/bscan.c:1288 #, c-format -msgid "%s Canceled" -msgstr "%s Cancelado" +msgid "Could not find SessId=%d SessTime=%d for MD5/SHA1 record.\n" +msgstr "No se pudo encontrar SessId=%d SessTime=%d para registro MD5/SHA1.\n" -#: src/dird/migrate.c:1291 +#: src/stored/bscan.c:1302 #, c-format -msgid "Inappropriate %s term code" -msgstr "Inadecuado código de terminación %s" +msgid "Could not add MD5/SHA1 to File record. ERR=%s\n" +msgstr "No se pudo agregar MD5/SHA1 al registro File. ERR=%s\n" -#: src/dird/migrate.c:1301 +#: src/stored/bscan.c:1307 +msgid "Updated MD5/SHA1 record\n" +msgstr "Actualizado registro MD5/SHA1\n" + +#: src/stored/stored_conf.c:224 #, c-format -msgid "%s -- no files to %s" -msgstr "%s -- ninguno archivo para %s" +msgid "Expected a Device Type keyword, got: %s" +msgstr "Esperaba una palabra clave Tipo Device, obtuvo: %s" -#: src/dird/migrate.c:1316 -#, fuzzy, c-format +#: src/stored/stored_conf.c:238 +#, c-format msgid "" -"%s %s %s (%s):\n" -" Build OS: %s %s %s\n" -" Prev Backup JobId: %s\n" -" Prev Backup Job: %s\n" -" New Backup JobId: %s\n" -" Current JobId: %s\n" -" Current Job: %s\n" -" Backup Level: %s%s\n" -" Client: %s\n" -" FileSet: \"%s\" %s\n" -" Read Pool: \"%s\" (From %s)\n" -" Read Storage: \"%s\" (From %s)\n" -" Write Pool: \"%s\" (From %s)\n" -" Write Storage: \"%s\" (From %s)\n" -" Catalog: \"%s\" (From %s)\n" -" Start time: %s\n" -" End time: %s\n" -" Elapsed time: %s\n" -" Priority: %d\n" -" SD Files Written: %s\n" -" SD Bytes Written: %s (%sB)\n" -" Rate: %.1f KB/s\n" -" Volume name(s): %s\n" -" Volume Session Id: %d\n" -" Volume Session Time: %d\n" -" Last Volume Bytes: %s (%sB)\n" -" SD Errors: %d\n" -" SD termination status: %s\n" -" Termination: %s\n" -"\n" +"Maximum Block Size configured value %u is greater than allowed maximum: %u" msgstr "" -"%s %s %s (%s): %s\n" -" Build OS: %s %s %s\n" -" Prev Respaldo JobId: %s\n" -" Job anterior de Respaldo: %s\n" -" Nuevo JobId de Respaldo: %s\n" -" JobId Actual: %s\n" -" Job Actual: %s\n" -" Nivel de Respaldo: %s%s\n" -" Cliente: %s\n" -" FileSet: \"%s\" %s\n" -" Pool Lectura: \"%s\" (Desde %s)\n" -" Storage Lectura: \"%s\" (Desde %s)\n" -" Pool Escritura: \"%s\" (Desde %s)\n" -" Storage Escritura: \"%s\" (Desde %s)\n" -" Catalogo: \"%s\" (Desde %s)\n" -" Hora de inicio: %s\n" -" Hora de finalización: %s\n" -" Tiempo transcurrido: %s\n" -" Prioridad: %d\n" -" SD Archivos Escritos: %s\n" -" SD Bytes Escritos: %s (%sB)\n" -" Tasa: %.1f KB/s\n" -" Nombre del Volumen(es): %s\n" -" Id de Sesión de Volumen: %d\n" -" Tiempo de Sesión de Volumen: %d\n" -" Ultimo Bytes del Volumen: %s (%sB)\n" -" Errores del SD: %d\n" -" Estado de terminación del SD: %s\n" -" Terminación: %s\n" -"\n" +"Valor máximo de tamaño bloque configurado %u es mayor de lo máximo " +"permitido: %u" -#: src/dird/migrate.c:1427 +#: src/stored/stored_conf.c:252 #, c-format -msgid "No Next Pool specification found in Pool \"%s\".\n" -msgstr "Especificación Next Pool no encontrada en Pool \"%s\".\n" +msgid "Warning: no \"%s\" resource (%d) defined.\n" +msgstr "Advertencia: Recurso \"%s\" (%d) no definido.\n" -#: src/dird/migrate.c:1433 +#: src/stored/stored_conf.c:255 #, c-format -msgid "No Storage specification found in Next Pool \"%s\".\n" -msgstr "Especificación Storage no encontrada en Next Pool \"%s\".\n" - -#: src/dird/migrate.c:1439 -msgid "Storage from Pool's NextPool resource" -msgstr "Storage desde recurso Pool's NextPool " - -#: src/dird/ua_prune.c:127 -msgid "Choose item to prune" -msgstr "Elija el ítem para podar" +msgid "dump_resource type=%d\n" +msgstr "dump_resource tipo=%d\n" -#: src/dird/ua_prune.c:175 +#: src/stored/stored_conf.c:371 #, c-format -msgid "Cannot prune Volume \"%s\" because it is archived.\n" -msgstr "No se puede podar Volumen \"%s\", porque el esta archivo.\n" - -#: src/dird/ua_prune.c:217 -msgid "Pruned Jobs from JobHisto catalog.\n" -msgstr "Podar Jobs del catálogo JobHisto.\n" - -#: src/dird/ua_prune.c:305 -#, fuzzy -msgid "Begin pruning Files.\n" -msgstr "Comenzar poda de Archivos.\n" +msgid "Warning: unknown resource type %d\n" +msgstr "Advertencia: Tipo de recurso %d desconocido\n" -#: src/dird/ua_prune.c:320 -msgid "No Files found to prune.\n" -msgstr "No se encontraron archivos para podar.\n" +#: src/stored/stored_conf.c:567 +#, c-format +msgid "\"%s\" item is required in \"%s\" resource, but not found.\n" +msgstr "ítem \"%s\" es necesario en recurso \"%s\", pero no se encuentra.\n" -#: src/dird/ua_prune.c:343 +#: src/stored/stored_conf.c:573 #, c-format -msgid "Pruned Files from %s Jobs for client %s from catalog.\n" -msgstr "Archivos podados desde Jobs %s para el cliente %s desde el catálogo.\n" +msgid "Too many items in \"%s\" resource\n" +msgstr "Demasiados elementos en recursos \"%s\"\n" -#: src/dird/ua_prune.c:489 -#, fuzzy, c-format -msgid "Begin pruning Jobs older than %s.\n" -msgstr "Comenzar poda de Jobs.\n" +#: src/stored/stored_conf.c:594 src/dird/dird_conf.c:1488 +#: src/filed/filed_conf.c:459 +#, c-format +msgid "Cannot find Director resource %s\n" +msgstr "No se puede encontrar el recurso Director %s\n" -#: src/dird/ua_prune.c:600 +#: src/stored/stored_conf.c:600 src/dird/dird_conf.c:1495 #, c-format -msgid "Pruned %d %s for client %s from catalog.\n" -msgstr "Podados %d %s para el cliente %s desde el catálogo.\n" +msgid "Cannot find Storage resource %s\n" +msgstr "No se puede encontrar el recurso Storage %s\n" -#: src/dird/ua_prune.c:601 -msgid "Jobs" -msgstr "Jobs" +#: src/stored/stored_conf.c:607 +#, c-format +msgid "Cannot find AutoChanger resource %s\n" +msgstr "No puede encontrar recurso Auto-cambiador %s\n" -#: src/dird/ua_prune.c:603 -msgid "No Jobs found to prune.\n" -msgstr "No encontraron Jobs para podar.\n" +#: src/stored/stored_conf.c:623 +#, fuzzy, c-format +msgid "Unable to init lock: ERR=%s\n" +msgstr "No se puede iniciar mutex: ERR=%s\n" -#: src/dird/autoprune.c:75 +#: src/stored/stored_conf.c:681 +#, c-format msgid "" -"End auto prune.\n" -"\n" +"Attempt to define second \"%s\" resource named \"%s\" is not permitted.\n" msgstr "" -"Fin auto podar(prune).\n" -"\n" - -#: src/dird/ua_run.c:154 -msgid "OK to run? (yes/mod/no): " -msgstr "OK para ejecutar? (si/mod/no): " +"Intento para definir secundo recurso \"%s\" denominado \"%s\" no está " +"permitido.\n" -#: src/dird/ua_run.c:193 -msgid "Job failed.\n" -msgstr "Job fallido.\n" +#: src/stored/dircmd.c:157 +#, c-format +msgid "Connection request from %s failed.\n" +msgstr "Fallo solicitud de conexión desde %s.\n" -#: src/dird/ua_run.c:196 +#: src/stored/dircmd.c:168 #, c-format -msgid "Job queued. JobId=%s\n" -msgstr "Cola de Job. JobId=%s\n" +msgid "Invalid connection from %s. Len=%d\n" +msgstr "Inválida conexión desde %s. Len=%d\n" -#: src/dird/ua_run.c:203 +#: src/stored/dircmd.c:215 src/filed/authenticate.c:196 +msgid "Unable to authenticate Director\n" +msgstr "No se puede autentificar el Director\n" + +#: src/stored/dircmd.c:308 #, fuzzy, c-format -msgid "" -"\n" -"Bad response: %s. You must answer yes, mod, or no.\n" -"\n" -msgstr "Respuesta no válida. Usted tiene que contestar sí o no.\n" +msgid "Bad client command: %s" +msgstr "Malo comando nivel: %s\n" -#: src/dird/ua_run.c:207 -msgid "Job not run.\n" -msgstr "Job no ejecutando.\n" +#: src/stored/dircmd.c:318 +#, fuzzy +msgid "Client daemon" +msgstr "demonio File" -#: src/dird/ua_run.c:223 -msgid "Level" -msgstr "Level" +#: src/stored/dircmd.c:321 +#, fuzzy, c-format +msgid "Failed to connect to Client daemon: %s:%d\n" +msgstr "Error al conectar con el demonio de Storage: %s:%d\n" -#: src/dird/ua_run.c:228 -msgid "Restore Client" -msgstr "Restaurar Client" +#: src/stored/dircmd.c:358 src/filed/job.c:1855 +#, c-format +msgid "Bad storage command: %s" +msgstr "Malo comando storage: %s" -#: src/dird/ua_run.c:232 src/wx-console/wxbrestorepanel.cpp:356 -#: src/wx-console/wxbrestorepanel.cpp:854 -#: src/wx-console/wxbrestorepanel.cpp:1918 -msgid "When" -msgstr "Cuando " +#: src/stored/dircmd.c:377 src/dird/msgchan.c:121 src/filed/job.c:1880 +#: src/qt-console/tray-monitor/tray-monitor.cpp:363 +msgid "Storage daemon" +msgstr "Demonio Storage" -#: src/dird/ua_run.c:233 src/wx-console/wxbrestorepanel.cpp:357 -#: src/wx-console/wxbrestorepanel.cpp:1128 -#: src/wx-console/wxbrestorepanel.cpp:1921 -msgid "Priority" -msgstr "Prioridad" +#: src/stored/dircmd.c:380 src/filed/job.c:1883 +#, c-format +msgid "Failed to connect to Storage daemon: %s:%d\n" +msgstr "Error al conectar con el demonio de Storage: %s:%d\n" -#: src/dird/ua_run.c:240 -msgid "Verify Job" -msgstr "Verificar Job" +#: src/stored/dircmd.c:397 +msgid "In storage_cmd port==0, no prior Storage connection.\n" +msgstr "" -#: src/dird/ua_run.c:243 src/wx-console/wxbrestorepanel.cpp:349 -#: src/wx-console/wxbrestorepanel.cpp:1899 -msgid "Bootstrap" -msgstr "Bootstrap" +#: src/stored/dircmd.c:445 +#, c-format +msgid "3991 Bad setdebug command: %s\n" +msgstr "3991 Malo comando setdebug: %s\n" -#: src/dird/ua_run.c:244 src/wx-console/wxbrestorepanel.cpp:350 -#: src/wx-console/wxbrestorepanel.cpp:1104 -#: src/wx-console/wxbrestorepanel.cpp:1901 -msgid "Where" -msgstr "Donde" +#: src/stored/dircmd.c:479 +msgid "3903 Error scanning cancel command.\n" +msgstr "3903 Error escaneando comando cancel.\n" -#: src/dird/ua_run.c:245 -msgid "File Relocation" -msgstr "Reubicar Archivo" +#: src/stored/dircmd.c:483 +#, c-format +msgid "3904 Job %s not found.\n" +msgstr "3904 Job %s no encontrado.\n" -#: src/dird/ua_run.c:246 src/wx-console/wxbrestorepanel.cpp:352 -#: src/wx-console/wxbrestorepanel.cpp:1112 -#: src/wx-console/wxbrestorepanel.cpp:1905 -#: src/wx-console/wxbrestorepanel.cpp:1906 -#: src/wx-console/wxbrestorepanel.cpp:1907 -#: src/wx-console/wxbrestorepanel.cpp:1908 -#: src/wx-console/wxbrestorepanel.cpp:1909 -msgid "Replace" -msgstr "Reemplazar" +#: src/stored/dircmd.c:511 +#, fuzzy, c-format +msgid "3000 JobId=%ld Job=\"%s\" marked to be %s.\n" +msgstr "JobId %s, Job %s marcado para ser cancelado.\n" -#: src/dird/ua_run.c:247 -msgid "JobId" -msgstr "JobId" +#: src/stored/dircmd.c:590 src/stored/dircmd.c:971 src/stored/dircmd.c:1066 +#: src/stored/dircmd.c:1177 src/stored/dircmd.c:1299 src/stored/dircmd.c:1341 +#, c-format +msgid "3999 Device \"%s\" not found or could not be opened.\n" +msgstr "3999 Dispositivo \"%s\" no encontrado o no pudo ser abierto.\n" -#: src/dird/ua_run.c:250 -msgid "Plugin Options" -msgstr "Opciones de Plug-in" +#: src/stored/dircmd.c:595 +#, c-format +msgid "3903 Error scanning label command: %s\n" +msgstr "3903 Error escaneando comando cancel: %s\n" -#: src/dird/ua_run.c:261 src/dird/ua_run.c:1569 -msgid "user selection" -msgstr "Selección de usuario" +#: src/stored/dircmd.c:644 +#, fuzzy, c-format +msgid "3910 Unable to open device \"%s\": ERR=%s\n" +msgstr "3910 No se puede abrir el dispositivo %s: ERR=%s\n" -#: src/dird/ua_run.c:293 -msgid "" -"Please enter desired start time as YYYY-MM-DD HH:MM:SS (return for now): " +#: src/stored/dircmd.c:661 +#, c-format +msgid "3920 Cannot label Volume because it is already labeled: \"%s\"\n" msgstr "" -"Por favor, introduzca hora de inicio deseada YYYY-MM-DD HH:MM:SS (Enter para " -"ahora)" +"3920 No se puede etiquetar el volumen porque ya está etiquetado: \"%s\"\n" -#: src/dird/ua_run.c:301 src/dird/ua_run.c:477 -msgid "Invalid time, using current time.\n" -msgstr "Hora inválida, usando hora actual.\n" +#: src/stored/dircmd.c:668 +msgid "3921 Wrong volume mounted.\n" +msgstr "3921 Volumen incorrecto montado.\n" -#: src/dird/ua_run.c:308 -msgid "Enter new Priority: " -msgstr "Introduzca nueva prioridad:" +#: src/stored/dircmd.c:672 +msgid "3922 Cannot relabel an ANSI/IBM labeled Volume.\n" +msgstr "3922 No se puede renombrar un volumen ANSI/IBM etiquetado.\n" -#: src/dird/ua_run.c:312 -msgid "Priority must be a positive integer.\n" -msgstr "Prioridad debe ser un entero positivo.\n" +#: src/stored/dircmd.c:680 +#, c-format +msgid "3912 Failed to label Volume: ERR=%s\n" +msgstr "3912 Fallo al etiquetar el Volumen: ERR=%s\n" -#: src/dird/ua_run.c:333 -msgid "Please enter the Bootstrap file name: " -msgstr "Por favor, introduzca nombre de archivo Bootstrap:" +#: src/stored/dircmd.c:690 +#, fuzzy, c-format +msgid "3915 Failed to label Volume: ERR=%s\n" +msgstr "3912 Fallo al etiquetar el Volumen: ERR=%s\n" -#: src/dird/ua_run.c:345 +#: src/stored/dircmd.c:693 #, c-format -msgid "Warning cannot open %s: ERR=%s\n" -msgstr "Advertencia no puede abrir %s: ERR=%s\n" +msgid "3914 Failed to label Volume (no media): ERR=%s\n" +msgstr "3914 No se ha podido etiquetar el volumen (no hay medios): ERR=%s\n" -#: src/dird/ua_run.c:364 -#, fuzzy -msgid "Please enter the full path prefix for restore (/ for none): " +#: src/stored/dircmd.c:696 +#, c-format +msgid "3913 Cannot label Volume. Unknown status %d from read_volume_label()\n" msgstr "" -"Por favor, introduzca el prefijo de ruta para restaurar (/ para ninguno):" - -#: src/dird/ua_run.c:386 -msgid "Replace:\n" -msgstr "Reemplazar:\n" +"3913 No se puede etiquetar el volumen. Estado desconocido %d de " +"read_volume_label()\n" -#: src/dird/ua_run.c:390 -msgid "Select replace option" -msgstr "Seleccione la opción sustituir" +#: src/stored/dircmd.c:733 +#, c-format +msgid "3001 Mounted Volume: %s\n" +msgstr "3001 Volumen Montado: %s\n" -#: src/dird/ua_run.c:401 +#: src/stored/dircmd.c:737 src/stored/dircmd.c:1377 +#, fuzzy, c-format msgid "" -"You must set the bootstrap file to NULL to be able to specify a JobId.\n" +"3902 Cannot mount Volume on Storage Device \"%s\" because:\n" +"%s" msgstr "" -"Usted debe configurar el archivo bootstrap a NULL para poder especificar un " -"jobId.\n" - -#: src/dird/ua_run.c:406 -msgid "Please Plugin Options string: " -msgstr "Por favor, cadena de Opciones de Plugin:" - -#: src/dird/ua_run.c:444 src/dird/ua_run.c:453 -msgid "User input" -msgstr "Entrada del usuario" +"3902 No se puede montar el volumen en Storage Device %s debido a que:\n" +"%s" -#: src/dird/ua_run.c:507 +#: src/stored/dircmd.c:768 src/stored/reserve.c:646 #, c-format -msgid "Invalid replace option: %s\n" -msgstr "Opción replace no valida: %s\n" +msgid "" +"\n" +" Device \"%s\" requested by DIR could not be opened or does not exist.\n" +msgstr "" +"\n" +"Dispositivo \"%s\" solicitado por el DIR no se pudo abrir o no existe.\n" -#: src/dird/ua_run.c:589 +#: src/stored/dircmd.c:790 src/stored/reserve.c:642 #, c-format -msgid "strip_prefix=%s add_prefix=%s add_suffix=%s\n" -msgstr "strip_prefix=%s add_prefix=%s add_suffix=%s\n" +msgid "" +"\n" +" Device \"%s\" in changer \"%s\" requested by DIR could not be opened or " +"does not exist.\n" +msgstr "" +"\n" +"Dispositivo \"%s\" en el cambiador \"%s\" solicitado por el DIR no se pudo " +"abrir o no existe.\n" -#: src/dird/ua_run.c:592 -msgid "This will replace your current Where value\n" -msgstr "Este sustituirá a su actual valor Donde\n" +#: src/stored/dircmd.c:854 +msgid "Specified slot ignored. " +msgstr "Ranura especificado ignorado." -#: src/dird/ua_run.c:593 -msgid "Strip prefix" -msgstr "Eliminar prefijo" +#: src/stored/dircmd.c:871 src/stored/dircmd.c:929 +#, fuzzy, c-format +msgid "3901 Unable to open device \"%s\": ERR=%s\n" +msgstr "3901 No se puede abrir el dispositivo %s: ERR=%s\n" -#: src/dird/ua_run.c:594 -msgid "Add prefix" -msgstr "Añadir prefijo" +#: src/stored/dircmd.c:891 src/stored/dircmd.c:920 +#, fuzzy, c-format +msgid "3001 Device \"%s\" is mounted with Volume \"%s\"\n" +msgstr "3001 Dispositivo %s esta montado con volumen \"%s\"\n" -#: src/dird/ua_run.c:595 -msgid "Add file suffix" -msgstr "Añadir sufijo de archivo" +#: src/stored/dircmd.c:894 src/stored/dircmd.c:923 src/stored/dircmd.c:938 +#, fuzzy, c-format +msgid "" +"3905 Device \"%s\" open but no Bacula volume is mounted.\n" +"If this is not a blank tape, try unmounting and remounting the Volume.\n" +msgstr "" +"3905 Dispositivo %s abierto, pero ninguno volumen Bacula está montado.\n" +"Si esto no es una cinta en blanco, trate de desmontar y volver a montar el " +"volumen.\n" -#: src/dird/ua_run.c:596 -msgid "Enter a regexp" -msgstr "Introduzca una expresión regular" +#: src/stored/dircmd.c:904 +#, fuzzy, c-format +msgid "3001 Device \"%s\" is doing acquire.\n" +msgstr "3001% s dispositivo está haciendo adquirir.\n" -#: src/dird/ua_run.c:597 -msgid "Test filename manipulation" -msgstr "Prueba de la manipulación de nombre de archivo" +#: src/stored/dircmd.c:909 src/stored/dircmd.c:1037 +#, fuzzy, c-format +msgid "3903 Device \"%s\" is being labeled.\n" +msgstr "3903 Dispositivo %s ha sido etiquetada.\n" -#: src/dird/ua_run.c:598 -msgid "Use this ?" -msgstr "Usar esto ?" +#: src/stored/dircmd.c:935 +#, fuzzy, c-format +msgid "3001 Device \"%s\" is already mounted with Volume \"%s\"\n" +msgstr "3001 Dispositivo %s ya está montado con el volumen \"%s\"\n" -#: src/dird/ua_run.c:603 -#, fuzzy -msgid "Please enter the path prefix to strip: " -msgstr "Por favor, introduzca la ruta de prefijo para eliminar:" +#: src/stored/dircmd.c:947 +#, fuzzy, c-format +msgid "3002 Device \"%s\" is mounted.\n" +msgstr "3002 Dispositivo %s está montado.\n" -#: src/dird/ua_run.c:611 -#, fuzzy -msgid "Please enter the path prefix to add (/ for none): " -msgstr "" -"Por favor, introduzca el prefijo de la ruta para añadir (/ para ninguno):" +#: src/stored/dircmd.c:949 src/stored/dircmd.c:1006 src/stored/dircmd.c:1025 +#: src/stored/dircmd.c:1057 +#, c-format +msgid "3907 %s" +msgstr "3907 %s" -#: src/dird/ua_run.c:622 -#, fuzzy -msgid "Please enter the file suffix to add: " -msgstr "Por favor, introduzca el sufijo de archivo para añadir:" +#: src/stored/dircmd.c:952 +#, fuzzy, c-format +msgid "3906 File device \"%s\" is always mounted.\n" +msgstr "3906 Dispositivo de Archivo %s está siempre montado.\n" -#: src/dird/ua_run.c:629 -msgid "Please enter a valid regexp (!from!to!): " -msgstr "Por favor, introduzca una expresión regular válida (!from!to!):" +#: src/stored/dircmd.c:961 +#, fuzzy, c-format +msgid "3930 Device \"%s\" is being released.\n" +msgstr "3903 Dispositivo %s ha sido etiquetada.\n" -#: src/dird/ua_run.c:642 -#, c-format -msgid "regexwhere=%s\n" -msgstr "regexdonde=%s\n" +#: src/stored/dircmd.c:965 +#, fuzzy, c-format +msgid "3905 Unknown wait state %d\n" +msgstr "Estado del Analizador %d desconocido\n" -#: src/dird/ua_run.c:648 +#: src/stored/dircmd.c:975 #, c-format -msgid "strip_prefix=%s add_prefix=%s add_suffix=%s result=%s\n" -msgstr "strip_prefix=%s add_prefix=%s add_suffix=%s resultado=%s\n" +msgid "3909 Error scanning mount command: %s\n" +msgstr "3909 Error escaneando comando mount: %s\n" -#: src/dird/ua_run.c:655 -msgid "Cannot use your regexp\n" -msgstr "No se pudo utilizar su regexp\n" +#: src/stored/dircmd.c:1003 src/stored/dircmd.c:1059 +#, fuzzy, c-format +msgid "3002 Device \"%s\" unmounted.\n" +msgstr "3002 Dispositivo %s desmontado.\n" -#: src/dird/ua_run.c:658 -msgid "Enter a period (.) to stop this test\n" -msgstr "" +#: src/stored/dircmd.c:1010 +#, fuzzy, c-format +msgid "3901 Device \"%s\" is already unmounted.\n" +msgstr "3901 Dispositivos %s ya está desmontado.\n" -#: src/dird/ua_run.c:659 -msgid "Please enter filename to test: " -msgstr "Por favor, introduzca el nombre de archivo de prueba:" +#: src/stored/dircmd.c:1028 +#, fuzzy, c-format +msgid "3001 Device \"%s\" unmounted.\n" +msgstr "3001 Dispositivo %s desmontado.\n" + +#: src/stored/dircmd.c:1033 +#, fuzzy, c-format +msgid "3902 Device \"%s\" is busy in acquire.\n" +msgstr "3902 Dispositivo %s está ocupado en adquirir.\n" -#: src/dird/ua_run.c:661 +#: src/stored/dircmd.c:1071 #, c-format -msgid "%s -> %s\n" -msgstr "%s -> %s\n" +msgid "3907 Error scanning unmount command: %s\n" +msgstr "3907 Error escaneando comando unmount: %s\n" -#: src/dird/ua_run.c:705 -msgid "Cannot use your regexp.\n" -msgstr "No puede utilizar su expresión regular.\n" +#: src/stored/dircmd.c:1099 +msgid "3916 Error scanning action_on_purge command\n" +msgstr "3916 Error de escaneando comando action_on_purge\n" -#: src/dird/ua_run.c:718 src/dird/ua_run.c:748 -msgid "Levels:\n" -msgstr "Niveles:\n" +#: src/stored/dircmd.c:1142 +#, fuzzy, c-format +msgid "3921 Device \"%s\" already released.\n" +msgstr "3921 Dispositivo %s ya liberado.\n" -#: src/dird/ua_run.c:720 src/stored/status.c:665 src/lib/util.c:426 -#: src/lib/util.c:472 src/filed/status.c:519 -msgid "Full" -msgstr "Completo" +#: src/stored/dircmd.c:1149 +#, fuzzy, c-format +msgid "3922 Device \"%s\" waiting for sysop.\n" +msgstr "3922 Dispositivo %s aguardando por sysop.\n" -#: src/dird/ua_run.c:721 src/stored/status.c:668 src/lib/util.c:429 -#: src/filed/status.c:522 -msgid "Incremental" -msgstr "Incremental" +#: src/stored/dircmd.c:1155 +#, fuzzy, c-format +msgid "3922 Device \"%s\" waiting for mount.\n" +msgstr "3922 Dispositivo %s aguardando por montar.\n" -#: src/dird/ua_run.c:722 src/stored/status.c:671 src/lib/util.c:432 -#: src/filed/status.c:525 -msgid "Differential" -msgstr "Diferencial" +#: src/stored/dircmd.c:1159 +#, fuzzy, c-format +msgid "3923 Device \"%s\" is busy in acquire.\n" +msgstr "3923 Dispositivo %s está ocupado en adquirir.\n" -#: src/dird/ua_run.c:723 src/stored/status.c:674 src/lib/util.c:435 -#: src/filed/status.c:528 -msgid "Since" -msgstr "Desde" +#: src/stored/dircmd.c:1163 +#, fuzzy, c-format +msgid "3914 Device \"%s\" is being labeled.\n" +msgstr "3914 Dispositivo %s ha sido etiquetada.\n" -#: src/dird/ua_run.c:724 -msgid "VirtualFull" -msgstr "VirtualFull" +#: src/stored/dircmd.c:1171 +#, fuzzy, c-format +msgid "3022 Device \"%s\" released.\n" +msgstr "3022 Dispositivo %s liberado.\n" -#: src/dird/ua_run.c:725 src/dird/ua_run.c:754 -msgid "Select level" -msgstr "Seleccionar Nivel" +#: src/stored/dircmd.c:1182 +#, c-format +msgid "3927 Error scanning release command: %s\n" +msgstr "3927 Error escaneando comando de liberación: %s\n" -#: src/dird/ua_run.c:749 -msgid "Initialize Catalog" -msgstr "Iniciar Catálogo" +#: src/stored/dircmd.c:1211 +#, c-format +msgid "Could not create bootstrap file %s: ERR=%s\n" +msgstr "No se pudo crear el archivo de arranque %s: ERR=%s\n" -#: src/dird/ua_run.c:750 src/stored/status.c:677 src/lib/util.c:438 -#: src/filed/status.c:531 -msgid "Verify Catalog" -msgstr "Verificar Catálogo" +#: src/stored/dircmd.c:1224 +msgid "Error parsing bootstrap file.\n" +msgstr "Error analizando archivo bootstrap.\n" -#: src/dird/ua_run.c:751 src/lib/util.c:444 -msgid "Verify Volume to Catalog" -msgstr "Verificar volumen de catalogo" +#: src/stored/dircmd.c:1286 +#, fuzzy, c-format +msgid "3998 Device \"%s\" is not an autochanger.\n" +msgstr "3995 Dispositivo %s no es un auto-cargador.\n" -#: src/dird/ua_run.c:752 src/lib/util.c:447 -msgid "Verify Disk to Catalog" -msgstr "Verificar disco de catalogo" +#: src/stored/dircmd.c:1303 +#, fuzzy, c-format +msgid "3908 Error scanning autochanger drives/list/slots command: %s\n" +msgstr "3908 Error comando scanning auto-cambiador drives/list/ranuras: %s\n" -#: src/dird/ua_run.c:753 -msgid "Verify Volume Data (not yet implemented)" -msgstr "Verificar volumen de datos (aún no implementado)" +#: src/stored/dircmd.c:1345 +#, c-format +msgid "3909 Error scanning readlabel command: %s\n" +msgstr "3909 Error comando scanning readlabel: %s\n" -#: src/dird/ua_run.c:774 -msgid "Level not appropriate for this Job. Cannot be changed.\n" -msgstr "Nivel no adecuado para este trabajo. No se puede cambiar.\n" +#: src/stored/dircmd.c:1373 +#, c-format +msgid "3001 Volume=%s Slot=%d\n" +msgstr "3001 Volumen=%s Ranura=%d\n" -#: src/dird/ua_run.c:805 +#: src/stored/dircmd.c:1405 #, fuzzy, c-format -msgid "" -"Run Admin Job\n" -"JobName: %s\n" -"FileSet: %s\n" -"Client: %s\n" -"Storage: %s\n" -"When: %s\n" -"Priority: %d\n" -msgstr "" -"Ejecutar %s job\n" -"JobName: %s\n" -"FileSet: %s\n" -"Cliente: %s\n" -"Storage: %s\n" -"Cuando: %s\n" -"Prioridad: %d\n" +msgid "3931 Device \"%s\" is BLOCKED. user unmounted.\n" +msgstr "3931 Dispositivo %s está BLOQUEADO. Usuario sin montar.\n" -#: src/dird/ua_run.c:849 +#: src/stored/dircmd.c:1409 #, fuzzy, c-format msgid "" -"Run Backup job\n" -"JobName: %s\n" -"Level: %s\n" -"Client: %s\n" -"FileSet: %s\n" -"Pool: %s (From %s)\n" -"Storage: %s (From %s)\n" -"When: %s\n" -"Priority: %d\n" -"%s%s%s" +"3932 Device \"%s\" is BLOCKED. user unmounted during wait for media/mount.\n" msgstr "" -"Ejecutar %s job\n" -"Nombre del Job: %s\n" -"Nivel: %s\n" -"Cliente: %s\n" -"FileSet: %s\n" -"Pool: %s (Desde %s)\n" -"Storage: %s (Desde %s)\n" -"Cuando: %s\n" -"Prioridad: %d\n" -"%s%s%s" +"3932 Dispositivo %s está BLOQUEADO. Usuario sin montar en espera por medios/" +"montar.\n" -#: src/dird/ua_run.c:880 +#: src/stored/dircmd.c:1413 #, fuzzy, c-format -msgid "Could not get job record for selected JobId. ERR=%s" -msgstr "No se ha podido obtener el registro Job para Job anterior. ERR=%s" +msgid "3933 Device \"%s\" is BLOCKED waiting for media.\n" +msgstr "3933 Dispositivo %s está BLOQUEADO esperando por media.\n" -#: src/dird/ua_run.c:919 +#: src/stored/dircmd.c:1417 #, fuzzy, c-format -msgid "" -"Run Verify Job\n" -"JobName: %s\n" -"Level: %s\n" -"Client: %s\n" -"FileSet: %s\n" -"Pool: %s (From %s)\n" -"Storage: %s (From %s)\n" -"Verify Job: %s\n" -"Verify List: %s\n" -"When: %s\n" -"Priority: %d\n" -msgstr "" -"Ejecutar %s job\n" -"JobName: %s\n" -"Level: %s\n" -"Cliente: %s\n" -"FileSet: %s\n" -"Pool: %s (Desde %s)\n" -"Storage: %s (Desde %s)\n" -"Verify Job: %s\n" -"Verify List: %s\n" -"Cuando: %s\n" -"Prioridad: %d\n" +msgid "3934 Device \"%s\" is being initialized.\n" +msgstr "3934 Dispositivo %s se está inicializado.\n" -#: src/dird/ua_run.c:948 -msgid "Please enter a JobId for restore: " -msgstr "Por favor, introduzca un JobId para restaurar:" +#: src/stored/dircmd.c:1421 +#, fuzzy, c-format +msgid "3935 Device \"%s\" is blocked labeling a Volume.\n" +msgstr "3935 Dispositivo %s está BLOQUEADO etiquetando un Volumen.\n" + +#: src/stored/dircmd.c:1425 +#, fuzzy, c-format +msgid "3935 Device \"%s\" is blocked for unknown reason.\n" +msgstr "3935 Dispositivo %s está BLOQUEADO por razón desconocida.\n" + +#: src/stored/dircmd.c:1430 +#, fuzzy, c-format +msgid "3936 Device \"%s\" is busy reading.\n" +msgstr "3936 Dispositivo %s está ocupado leyendo.\n" + +#: src/stored/dircmd.c:1433 +#, fuzzy, c-format +msgid "3937 Device \"%s\" is busy with writers=%d reserved=%d.\n" +msgstr "3937 Dispositivo %s está ocupado con %d escritura(s).\n" -#: src/dird/ua_run.c:988 +#: src/stored/dev.c:129 #, c-format -msgid "" -"Run Restore job\n" -"JobName: %s\n" -"Bootstrap: %s\n" -"RegexWhere: %s\n" -"Replace: %s\n" -"FileSet: %s\n" -"Backup Client: %s\n" -"Restore Client: %s\n" -"Storage: %s\n" -"When: %s\n" -"Catalog: %s\n" -"Priority: %d\n" -"Plugin Options: %s\n" -msgstr "" -"Ejecutar Job de Restauración\n" -"Nombre del Job: %s\n" -"Bootstrap: %s\n" -"RegexWhere: %s\n" -"Reemplazar: %s\n" -"FileSet: %s\n" -"Cliente de Respaldo: %s\n" -"Cliente de Restauración: %s\n" -"Storage: %s\n" -"Cuando: %s\n" -"Catalogo: %s\n" -"Prioridad: %d\n" -"Opciones de Plugin: %s\n" +msgid "Unable to stat device %s: ERR=%s\n" +msgstr "No se puede stat dispositivo %s: ERR=%s\n" -#: src/dird/ua_run.c:1044 +#: src/stored/dev.c:147 #, c-format msgid "" -"Run Restore job\n" -"JobName: %s\n" -"Bootstrap: %s\n" -"Where: %s\n" -"Replace: %s\n" -"FileSet: %s\n" -"Backup Client: %s\n" -"Restore Client: %s\n" -"Storage: %s\n" -"When: %s\n" -"Catalog: %s\n" -"Priority: %d\n" -"Plugin Options: %s\n" +"%s is an unknown device type. Must be tape or directory\n" +" or have RequiresMount=yes for DVD. st_mode=%x\n" msgstr "" -"Ejecutar Job de Restauración\n" -"Nombre del Job: %s\n" -"Bootstrap: %s\n" -"Donde: %s\n" -"Reemplazar: %s\n" -"FileSet: %s\n" -"Respaldo Cliente: %s\n" -"Restaurar Cliente: %s\n" -"Storage: %s\n" -"Cuando: %s\n" -"Catalogo: %s\n" -"Prioridad: %d\n" -"Opciones de Plugin: %s\n" +"%s es un tipo de dispositivo desconocido. Debe ser cinta o directorio\n" +" o tener RequiresMount=yes para DVD. st_mode=%x\n" + +#: src/stored/dev.c:157 +msgid "DVD support is now deprecated.\n" +msgstr "" + +#: src/stored/dev.c:160 +msgid "Aligned device not supported. Please use \"DeviceType = File\"\n" +msgstr "" + +#: src/stored/dev.c:256 +#, c-format +msgid "Unable to stat mount point %s: ERR=%s\n" +msgstr "No se puede stat punto de montaje %s: ERR=%s\n" -#: src/dird/ua_run.c:1075 -#, c-format +#: src/stored/dev.c:261 msgid "" -"Run Restore job\n" -"JobName: %s\n" -"Bootstrap: %s\n" +"Mount and unmount commands must defined for a device which requires mount.\n" msgstr "" -"Ejecutar Job Restaurar\n" -"JobName: %s\n" -"Bootstrap: %s\n" +"Comandos mount y unmount deben ser definidos para un dispositivo que " +"requiere montaje.\n" -#: src/dird/ua_run.c:1083 +#: src/stored/dev.c:272 #, c-format -msgid "RegexWhere: %s\n" -msgstr "RegexWhere: %s\n" +msgid "Min block size > max on device %s\n" +msgstr "Mínimo tamaño de bloque > máximo en el dispositivo %s\n" -#: src/dird/ua_run.c:1086 +#: src/stored/dev.c:276 #, c-format -msgid "Where: %s\n" -msgstr "Donde: %s\n" +msgid "Block size %u on device %s is too large, using default %u\n" +msgstr "" +"Tamaño de bloque %u en el dispositivo %s es demasiado grande, usando %u " +"omisión\n" -#: src/dird/ua_run.c:1090 -#, c-format -msgid "" -"Replace: %s\n" -"Client: %s\n" -"Storage: %s\n" -"JobId: %s\n" -"When: %s\n" -"Catalog: %s\n" -"Priority: %d\n" -"Plugin Options: %s\n" +#: src/stored/dev.c:281 +#, fuzzy, c-format +msgid "Max block size %u not multiple of device %s block size=%d.\n" msgstr "" -"Remplazar: %s\n" -"Cliente: %s\n" -"Storage: %s\n" -"JobId: %s\n" -"Cuando: %s\n" -"Catalogo: %s\n" -"Prioridad: %d\n" -"Opciones de Plugin: %s\n" +"Tamaño máximo de bloque %u no es múltiplo de tamaño de bloque en dispositivo " +"%s.\n" -#: src/dird/ua_run.c:1145 -msgid "Run Copy job\n" -msgstr "Ejecutar Job de Copia\n" +#: src/stored/dev.c:285 +#, fuzzy, c-format +msgid "Max Vol Size < 8 * Max Block Size for device %s\n" +msgstr "" +"Máximo Tamaño de Volumen < 8 * Máximo Tamaño de Bloque en dispositivo %s\n" -#: src/dird/ua_run.c:1147 -msgid "Run Migration job\n" -msgstr "Ejecutar Job de Migración\n" +#: src/stored/dev.c:295 src/stored/dev.c:347 src/lib/openssl.c:110 +#: src/lib/openssl.c:169 +#, c-format +msgid "Unable to init mutex: ERR=%s\n" +msgstr "No se puede iniciar mutex: ERR=%s\n" -#: src/dird/ua_run.c:1176 +#: src/stored/dev.c:301 src/stored/dev.c:307 #, c-format -msgid "Unknown Job Type=%d\n" -msgstr "Tipo de Job desconocido=%d\n" +msgid "Unable to init cond variable: ERR=%s\n" +msgstr "No se puede iniciar variable cond: ERR=%s\n" + +#: src/stored/dev.c:313 +#, fuzzy, c-format +msgid "Unable to init spool mutex: ERR=%s\n" +msgstr "No se puede iniciar mutex: ERR=%s\n" + +#: src/stored/dev.c:319 +#, fuzzy, c-format +msgid "Unable to init acquire mutex: ERR=%s\n" +msgstr "No se puede iniciar mutex: ERR=%s\n" + +#: src/stored/dev.c:325 +#, fuzzy, c-format +msgid "Unable to init read acquire mutex: ERR=%s\n" +msgstr "No se puede iniciar mutex: ERR=%s\n" + +#: src/stored/dev.c:331 +#, fuzzy, c-format +msgid "Unable to init volcat mutex: ERR=%s\n" +msgstr "No se puede iniciar mutex: ERR=%s\n" + +#: src/stored/dev.c:337 +#, fuzzy, c-format +msgid "Unable to init dcrs mutex: ERR=%s\n" +msgstr "No se puede iniciar mutex: ERR=%s\n" + +#: src/stored/dev.c:426 +msgid "Illegal mode given to open dev.\n" +msgstr "Modo ilegal dado para abrir dev.\n" -#: src/dird/ua_run.c:1245 +#: src/stored/dev.c:478 +msgid "Bad device call. Device not open\n" +msgstr "Mala llamada de dispositivo. Dispositivo no abierto\n" + +#: src/stored/dev.c:490 #, c-format -msgid "Value missing for keyword %s\n" -msgstr "Falta valor para la palabra clave %s\n" +msgid "Seek error: ERR=%s\n" +msgstr "Seek error: ERR=%s\n" -#: src/dird/ua_run.c:1252 -msgid "Job name specified twice.\n" -msgstr "Nombre del Job especificado dos veces.\n" +#: src/stored/dev.c:491 src/stored/tape_dev.c:293 src/stored/file_dev.c:73 +#: src/stored/file_dev.c:100 +#, c-format +msgid "lseek error on %s. ERR=%s.\n" +msgstr "Iseek error en %s. ERR=%s.\n" -#: src/dird/ua_run.c:1260 -msgid "JobId specified twice.\n" -msgstr "JobId especificada dos veces.\n" +#: src/stored/fd_cmds.c:193 +#, fuzzy, c-format +msgid "Command error with FD, hanging up. ERR=%s\n" +msgstr "Error de comando con FD, colgando. %s\n" -#: src/dird/ua_run.c:1269 src/dird/ua_run.c:1409 -msgid "Client specified twice.\n" -msgstr "Cliente especificado dos veces.\n" +#: src/stored/fd_cmds.c:196 +msgid "Command error with FD, hanging up.\n" +msgstr "Error de comando con FD, colgando.\n" -#: src/dird/ua_run.c:1277 -msgid "FileSet specified twice.\n" -msgstr "FileSet especificado dos veces.\n" +#: src/stored/fd_cmds.c:207 +#, c-format +msgid "FD command not found: %s\n" +msgstr "Comando FD no encontrado:% s \n" -#: src/dird/ua_run.c:1285 -msgid "Level specified twice.\n" -msgstr "Level especificado dos veces.\n" +#: src/stored/fd_cmds.c:238 +msgid "Attempt to append on non-open session.\n" +msgstr "Intento de anexar en sesión no abierta.\n" -#: src/dird/ua_run.c:1294 -msgid "Storage specified twice.\n" -msgstr "Storage especificado dos veces.\n" +#: src/stored/fd_cmds.c:250 src/stored/fd_cmds.c:293 +msgid "Attempt to close non-open session.\n" +msgstr "Intento de cerrar sesión no abierta.\n" -#: src/dird/ua_run.c:1302 -msgid "RegexWhere or Where specified twice.\n" -msgstr "RegexDónde o Dónde especificado dos veces.\n" +#: src/stored/fd_cmds.c:268 +msgid "Attempt to open already open session.\n" +msgstr "Intento de abrir sesión ya abierta.\n" -#: src/dird/ua_run.c:1307 -msgid "No authorization for \"regexwhere\" specification.\n" -msgstr "Sin autorización para especificación \"regexwhere\".\n" +#: src/stored/fd_cmds.c:322 +msgid "Attempt to read on non-open session.\n" +msgstr "Intento de leer sesión no abierta.\n" -#: src/dird/ua_run.c:1314 -msgid "Where or RegexWhere specified twice.\n" -msgstr "Dónde o RegexDónde especificado dos veces.\n" +#: src/stored/fd_cmds.c:340 src/stored/fd_cmds.c:349 +msgid "Attempt to open read on non-open session.\n" +msgstr "Intento de abrir leer sesión no abierta.\n" -#: src/dird/ua_run.c:1319 -msgid "No authoriztion for \"where\" specification.\n" -msgstr "Sin autorización para especificación \"where\".\n" +#: src/stored/fd_cmds.c:412 src/dird/getmsg.c:365 +#, c-format +msgid "Bad response to %s command: wanted %s, got %s\n" +msgstr "Mala respuesta al comando %s: quería %s, obtuvo %s\n" -#: src/dird/ua_run.c:1326 -msgid "Bootstrap specified twice.\n" -msgstr "Bootstrap especificado dos veces.\n" +#: src/stored/fd_cmds.c:416 src/dird/getmsg.c:370 +#, c-format +msgid "Socket error on %s command: ERR=%s\n" +msgstr "Error de Socket en comando %s: ERR=%s\n" -#: src/dird/ua_run.c:1334 -msgid "Replace specified twice.\n" -msgstr "Replace especificado dos veces.\n" +#: src/stored/block_util.c:88 +#, fuzzy, c-format +msgid "" +"Dump block %s %p: size=%d BlkNum=%d\n" +" Hdrcksum=%x cksum=%x\n" +msgstr "" +"Volcado de bloque %s %x: tamaño=%d BlkNum=%d\n" +" Hdrcksum=%x cksum=%x\n" -#: src/dird/ua_run.c:1342 -msgid "When specified twice.\n" -msgstr "Cuando especificado dos veces.\n" +#: src/stored/block_util.c:103 +#, fuzzy, c-format +msgid " Rec: VId=%u VT=%u FI=%s Strm=%s len=%d reclen=%d\n" +msgstr "Rec: VId=%u VT=%u FI=%s Strm=%s len=%d p=%x\n" -#: src/dird/ua_run.c:1350 -msgid "Priority specified twice.\n" -msgstr "Prioridad especificada dos veces.\n" +#: src/stored/block_util.c:165 +#, c-format +msgid "%d block read errors not printed.\n" +msgstr "%d errores de lectura de bloques no impresos.\n" -#: src/dird/ua_run.c:1355 -msgid "Priority must be positive nonzero setting it to 10.\n" -msgstr "Prioridad debe ser positivo y distinto a cero, configurando en 10.\n" +#: src/stored/block_util.c:281 src/stored/block_util.c:297 +#: src/stored/block_util.c:307 +#, c-format +msgid "" +"Volume data error at %u:%u! Wanted ID: \"%s\", got \"%s\". Buffer " +"discarded.\n" +msgstr "" +"Error de volumen de datos en %u:%u! Se busca ID: \"%s\",se obtiene \"%s\". " +"Buffer descartado.\n" -#: src/dird/ua_run.c:1365 -msgid "Verify Job specified twice.\n" -msgstr "Job Verificar especificado dos veces.\n" +#: src/stored/block_util.c:322 +#, c-format +msgid "" +"Volume data error at %u:%u! Block length %u is insane (too large), probably " +"due to a bad archive.\n" +msgstr "" +"Error de datos de volumen en %u:%u! Longitud de bloque %u es demente " +"(demasiado grande), probablemente debido a un archivo malo.\n" -#: src/dird/ua_run.c:1393 -msgid "Migration Job specified twice.\n" -msgstr "Job Migración especificado dos veces.\n" +#: src/stored/block_util.c:349 +#, c-format +msgid "" +"Volume data error at %u:%u!\n" +"Block checksum mismatch in block=%u len=%d: calc=%x blk=%x\n" +msgstr "" +"Error de datos de Volumen en %u:%u!\n" +"Bloque checksum desajustado en bloque=%u len=%d: calc=%x blk=%x\n" -#: src/dird/ua_run.c:1401 -msgid "Pool specified twice.\n" -msgstr "Pool especificado dos veces.\n" +#: src/stored/block_util.c:435 +#, fuzzy, c-format +msgid "" +"User defined maximum volume size %s will be exceeded on device %s.\n" +" Marking Volume \"%s\" as Full.\n" +msgstr "" +"Capacidad máxima %s de volumen definido por el usuario superado en el " +"dispositivo %s.\n" -#: src/dird/ua_run.c:1417 -msgid "Restore Client specified twice.\n" -msgstr "Restaurar Cliente especificado dos veces.\n" +#: src/stored/block_util.c:472 src/stored/block_util.c:478 +#, c-format +msgid "Backspace file at EOT failed. ERR=%s\n" +msgstr "Fallo en retroceso de archivo desde EOT. ERR=%s\n" -#: src/dird/ua_run.c:1424 -msgid "Plugin Options not yet implemented.\n" -msgstr "Opciones de Plugin todavía no se ha implementado.\n" +#: src/stored/block_util.c:485 +#, c-format +msgid "Backspace record at EOT failed. ERR=%s\n" +msgstr "Fallo en retroceso de registro desde EOT. ERR=%s\n" -#: src/dird/ua_run.c:1427 -msgid "Plugin Options specified twice.\n" -msgstr "Opciones de Plugin especificado dos veces.\n" +#: src/stored/block_util.c:502 +#, c-format +msgid "Re-read last block at EOT failed. ERR=%s" +msgstr "Fallo en re-lectura del último bloque en EOT. ERR=%s" + +#: src/stored/block_util.c:512 +#, c-format +msgid "" +"Re-read of last block: block numbers differ by more than one.\n" +"Probable tape misconfiguration and data loss. Read block=%u Want block=%u.\n" +msgstr "" +"Re-lectura del último bloque: número de bloque difieren en más de uno.\n" +"Probable mala configuración de la cinta y pérdida de datos. Leer bloque=%u " +"Espera bloque=%u.\n" + +#: src/stored/block_util.c:517 +#, c-format +msgid "" +"Re-read of last block OK, but block numbers differ. Read block=%u Want block=" +"%u.\n" +msgstr "" +"Re-lectura del último bloque OK, pero número de bloque difieren. Leer bloque=" +"%u Espera bloque=%u.\n" + +#: src/stored/block_util.c:521 +msgid "Re-read of last block succeeded.\n" +msgstr "Éxito en re-lectura del último bloque.\n" + +#: src/stored/block_util.c:560 +#, c-format +msgid "" +"Error writing final EOF to tape. This Volume may not be readable.\n" +"%s" +msgstr "" +"Error al escribir EOF final a la cinta. Este volumen puede no ser legible.\n" +"%s" + +#: src/stored/block_util.c:578 +#, fuzzy +msgid "Error sending Volume info to Director.\n" +msgstr "Error al obtener Volumen información: %s" + +#: src/stored/bcopy.c:64 +#, c-format +msgid "" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: bcopy [-d debug_level] \n" +" -b bootstrap specify a bootstrap file\n" +" -c specify a Storage configuration file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -i specify input Volume names (separated by |)\n" +" -o specify output Volume names (separated by |)\n" +" -p proceed inspite of errors\n" +" -v verbose\n" +" -w specify working directory (default /tmp)\n" +" -? print this message\n" +"\n" +msgstr "" +"\n" +"Versión: %s (%s)\n" +"\n" +"Utilice: bcopy [-d nivel_ depuración] \n" +" -b bootstrap especifica un archivo bootstrap\n" +" -c especifica un archivo Storage de configuración\n" +" -d establece nivel de depuración para \n" +" -dt imprime timestamp en salida de depuración\n" +" -i especifica nombres de Volúmenes de entrada (separados por |)\n" +" -o especifica nombres de Volúmenes de salida (separados por |)\n" +" -p proceder a pesar de los errores\n" +"\n" +" -v detallado\n" +" -w especifica directorio de trabajo (por defecto /tmp)\n" +" -? imprime esta mensaje\n" +"\n" -#: src/dird/ua_run.c:1432 -msgid "No authoriztion for \"PluginOptions\" specification.\n" -msgstr "Sin autorización para especificación \"PluginOptions\".\n" +#: src/stored/bcopy.c:209 +msgid "Write of last block failed.\n" +msgstr "Fallo al escribir ultimo bloque.\n" -#: src/dird/ua_run.c:1439 -msgid "Spool flag specified twice.\n" -msgstr "Bandera de cola especificada dos veces.\n" +#: src/stored/bcopy.c:213 +#, c-format +msgid "%u Jobs copied. %u records copied.\n" +msgstr "%u Jobs copiado. %u registros copiados.\n" -#: src/dird/ua_run.c:1446 -msgid "Invalid spooldata flag.\n" -msgstr "Invalida bandera spooldata.\n" +#: src/stored/bcopy.c:246 +msgid "Volume is prelabeled. This volume cannot be copied.\n" +msgstr "Volumen esta pre-etiquetado. Este volumen no puede ser copiado.\n" -#: src/dird/ua_run.c:1455 -#, fuzzy -msgid "IgnoreDuplicateCheck flag specified twice.\n" -msgstr "Bandera de cola especificada dos veces.\n" +#: src/stored/bcopy.c:249 +msgid "Volume label not copied.\n" +msgstr "Etiqueta Volumen no copiada.\n" -#: src/dird/ua_run.c:1462 -#, fuzzy -msgid "Invalid ignoreduplicatecheck flag.\n" -msgstr "Invalida bandera spooldata.\n" +#: src/stored/bcopy.c:255 +msgid "Copy skipped. Record does not match BSR filter.\n" +msgstr "Copia omitida. Registro no coincide con filtro de BSR.\n" -#: src/dird/ua_run.c:1467 -#, fuzzy -msgid "Accurate flag specified twice.\n" -msgstr "Bandera de cola especificada dos veces.\n" +#: src/stored/bcopy.c:286 +msgid "EOM label not copied.\n" +msgstr "Etiqueta EOM no copiada.\n" -#: src/dird/ua_run.c:1474 -#, fuzzy -msgid "Invalid accurate flag.\n" -msgstr "Invalida bandera spooldata.\n" +#: src/stored/bcopy.c:289 +msgid "EOT label not copied.\n" +msgstr "Etiqueta EOT no copiada.\n" -#: src/dird/ua_run.c:1495 +#: src/stored/tape_dev.c:226 #, c-format -msgid "Invalid keyword: %s\n" -msgstr "Palabra clave inválida: %s\n" +msgid "No tape loaded or drive offline on %s.\n" +msgstr "Ninguna cinta cargada o unidad offline en %s.\n" -#: src/dird/ua_run.c:1510 +#: src/stored/tape_dev.c:236 #, c-format -msgid "Catalog \"%s\" not found\n" -msgstr "Catalogo \"%s\" no encontrado\n" +msgid "Rewind error on %s. ERR=%s.\n" +msgstr "Rebobinar error en %s. ERR=%s.\n" -#: src/dird/ua_run.c:1514 +#: src/stored/tape_dev.c:261 #, c-format -msgid "No authorization. Catalog \"%s\".\n" -msgstr "Sin autorización. Catalogo \"%s\".\n" +msgid "Bad call to eod. Device %s not open\n" +msgstr "Mala llamada para eod. Dispositivo %s no abierto\n" -#: src/dird/ua_run.c:1525 +#: src/stored/tape_dev.c:333 #, c-format -msgid "Job \"%s\" not found\n" -msgstr "Job \"%s\" no encontrado\n" - -#: src/dird/ua_run.c:1532 -msgid "A job name must be specified.\n" -msgstr "Un nombre de job debe de ser especificado.\n" +msgid "ioctl MTEOM error on %s. ERR=%s.\n" +msgstr "ioctl MTEOM error en %s. ERR=%s.\n" -#: src/dird/ua_run.c:1538 +#: src/stored/tape_dev.c:344 src/stored/os.c:184 #, c-format -msgid "No authorization. Job \"%s\".\n" -msgstr "Sin autorización. Job \"%s\".\n" +msgid "ioctl MTIOCGET error on %s. ERR=%s.\n" +msgstr "ioctl MTIOCGET error en %s. ERR=%s.\n" -#: src/dird/ua_run.c:1546 -#, c-format -msgid "Pool \"%s\" not found.\n" -msgstr "Pool \"%s\" no encontrado.\n" +#: src/stored/tape_dev.c:428 +msgid "Bad call to load_dev. Device not open\n" +msgstr "Mala llamada a load_dev. Dispositivo no abierto\n" -#: src/dird/ua_run.c:1556 +#: src/stored/tape_dev.c:439 src/stored/tape_dev.c:452 #, c-format -msgid "No authorization. Pool \"%s\".\n" -msgstr "Sin autorización. Pool \"%s\".\n" +msgid "ioctl MTLOAD error on %s. ERR=%s.\n" +msgstr "ioctl MTLOAD error en %s. ERR=%s.\n" -#: src/dird/ua_run.c:1566 +#: src/stored/tape_dev.c:483 #, c-format -msgid "Storage \"%s\" not found.\n" -msgstr "Storage \"%s\" no encontrado\n" +msgid "ioctl MTOFFL error on %s. ERR=%s.\n" +msgstr "ioctl MTOFFL error en %s. ERR=%s.\n" -#: src/dird/ua_run.c:1575 src/dird/job.c:1245 -msgid "No storage specified.\n" -msgstr "Almacenamiento no especificado.\n" +#: src/stored/tape_dev.c:524 +msgid "Bad call to fsf. Device not open\n" +msgstr "Mala llamada a fsf. Dispositivo no abierto\n" -#: src/dird/ua_run.c:1578 +#: src/stored/tape_dev.c:535 src/stored/tape_dev.c:662 #, c-format -msgid "No authorization. Storage \"%s\".\n" -msgstr "Sin autorización. Storage \"%s\".\n" +msgid "Device %s at End of Tape.\n" +msgstr "Dispositivo %s en el final de la cinta.\n" -#: src/dird/ua_run.c:1598 src/dird/ua_run.c:1618 +#: src/stored/tape_dev.c:566 src/stored/tape_dev.c:642 #, c-format -msgid "No authorization. Client \"%s\".\n" -msgstr "Sin autorización. Cliente \"%s\".\n" +msgid "ioctl MTFSF error on %s. ERR=%s.\n" +msgstr "ioctl MTFSF error en %s. ERR=%s.\n" -#: src/dird/ua_run.c:1608 -#, c-format -msgid "Restore Client \"%s\" not found.\n" -msgstr "Restaurar Cliente \"%s\" no encontrado.\n" +#: src/stored/tape_dev.c:691 +msgid "Bad call to bsf. Device not open\n" +msgstr "Mala llamada a bsf. Dispositivo no abierto\n" -#: src/dird/ua_run.c:1627 +#: src/stored/tape_dev.c:697 #, c-format -msgid "FileSet \"%s\" not found.\n" -msgstr "FileSet \"%s\" no encontrado.\n" +msgid "Device %s cannot BSF because it is not a tape.\n" +msgstr "Dispositivo %s no puede BSF, porque no es una cinta.\n" -#: src/dird/ua_run.c:1636 +#: src/stored/tape_dev.c:714 #, c-format -msgid "No authorization. FileSet \"%s\".\n" -msgstr "Sin autorización. FileSet \"%s\".\n" +msgid "ioctl MTBSF error on %s. ERR=%s.\n" +msgstr "ioctl MTBSF error en %s. ERR=%s.\n" -#: src/dird/ua_run.c:1644 -#, c-format -msgid "Verify Job \"%s\" not found.\n" -msgstr "Job Verificar \"%s\" no encontrado.\n" +#: src/stored/tape_dev.c:733 +msgid "Bad call to fsr. Device not open\n" +msgstr "Mala llamada a FSR. El dispositivo no abre\n" -#: src/dird/ua_run.c:1654 +#: src/stored/tape_dev.c:743 #, c-format -msgid "Migration Job \"%s\" not found.\n" -msgstr "Job Migración \"%s\" no encontrado.\n" +msgid "ioctl MTFSR not permitted on %s.\n" +msgstr "ioctl MTFSR no permitido en %s.\n" -#: src/dird/dir_plugins.c:181 src/stored/sd_plugins.c:194 -#: src/filed/fd_plugins.c:1130 +#: src/stored/tape_dev.c:771 #, c-format -msgid "Loaded plugin: %s\n" -msgstr "Cargado el plugin: %s\n" +msgid "ioctl MTFSR %d error on %s. ERR=%s.\n" +msgstr "ioctl MTFSR %d error en %s. ERR=%s.\n" -#: src/dird/dir_plugins.c:201 src/stored/sd_plugins.c:214 -#: src/filed/fd_plugins.c:1151 -#, c-format -msgid "Plugin magic wrong. Plugin=%s wanted=%s got=%s\n" -msgstr "Incorrecto plugin mágico. Plugin=%s esperaba=%s obtuvo=%s\n" +#: src/stored/tape_dev.c:789 +msgid "Bad call to bsr_dev. Device not open\n" +msgstr "Mala llamada a bsr_dev. El dispositivo no abre\n" -#: src/dird/dir_plugins.c:209 src/stored/sd_plugins.c:222 -#: src/filed/fd_plugins.c:1159 +#: src/stored/tape_dev.c:799 #, c-format -msgid "Plugin version incorrect. Plugin=%s wanted=%d got=%d\n" -msgstr "Plugin versión incorrecta. Plugin=%s quería=%d obtuvo=%d\n" +msgid "ioctl MTBSR not permitted on %s.\n" +msgstr "ioctl MTBSR no permitido en %s.\n" -#: src/dird/dir_plugins.c:218 src/stored/sd_plugins.c:231 -#: src/filed/fd_plugins.c:1167 +#: src/stored/tape_dev.c:813 #, c-format -msgid "Plugin license incompatible. Plugin=%s license=%s\n" -msgstr "Plugin licencia incompatible. Plugin=%s licencia=%s\n" - -#: src/dird/dir_plugins.c:226 src/stored/sd_plugins.c:239 -#: src/filed/fd_plugins.c:1175 -#, fuzzy, c-format -msgid "Plugin size incorrect. Plugin=%s wanted=%d got=%d\n" -msgstr "Plugin versión incorrecta. Plugin=%s quería=%d obtuvo=%d\n" - -#: src/dird/backup.c:96 -msgid "No Storage specification found in Job or Pool.\n" -msgstr "No se encuentran en la especificación del Storage en Job or Pool.\n" +msgid "ioctl MTBSR error on %s. ERR=%s.\n" +msgstr "ioctl MTBSR error en %s. ERR=%s.\n" -#: src/dird/backup.c:256 -#, fuzzy, c-format -msgid "Using BaseJobId(s): %s\n" -msgstr "%s utilizando JobId=%s Job=%s\n" +#: src/stored/tape_dev.c:850 src/stored/file_dev.c:90 +msgid "Bad call to reposition. Device not open\n" +msgstr "Mala llamada a reposición. El dispositivo no abre\n" -#: src/dird/backup.c:266 -msgid "Cannot find previous jobids.\n" -msgstr "No se puede encontrar jobids anteriores.\n" +#: src/stored/tape_dev.c:912 +msgid "Bad call to weof_dev. Device not open\n" +msgstr "Mala llamada a weof_dev. El dispositivo no abre\n" -#: src/dird/backup.c:275 -msgid "Sending Accurate information.\n" -msgstr "Enviando información precisa.\n" +#: src/stored/tape_dev.c:922 +msgid "Attempt to WEOF on non-appendable Volume\n" +msgstr "Intento de WEOF en Volumen no-appendable\n" -#: src/dird/backup.c:328 +#: src/stored/tape_dev.c:940 #, c-format -msgid "Start Backup JobId %s, Job=%s\n" -msgstr "Iniciar Respaldo JobId %s, Job=%s\n" +msgid "ioctl MTWEOF error on %s. ERR=%s.\n" +msgstr "ioctl MTWEOF error en %s. ERR=%s.\n" -#: src/dird/backup.c:521 +#: src/stored/tape_dev.c:986 src/stored/file_dev.c:318 #, c-format -msgid "Unexpected Client Job message: %s\n" -msgstr "Inesperado Cliente Job mensaje: %s\n" +msgid "Device %s cannot be %smounted. ERR=%s\n" +msgstr "Dispositivo %s no puede ser %smounted. ERR=%s\n" -#: src/dird/backup.c:534 -#, c-format -msgid "Network error with FD during %s: ERR=%s\n" -msgstr "Error de red con FD durante %s: ERR=%s\n" +#: src/stored/butil.c:46 +msgid "Nohdr," +msgstr "Nohdr," -#: src/dird/backup.c:569 -msgid "No Job status returned from FD.\n" -msgstr "Estado de Job no retornado desde FD.\n" +#: src/stored/butil.c:49 +msgid "partial," +msgstr "parcial," -#: src/dird/backup.c:657 -msgid "Backup failed -- incomplete" -msgstr "" +#: src/stored/butil.c:52 +msgid "empty," +msgstr "vacío," -#: src/dird/backup.c:730 -#, fuzzy, c-format -msgid "" -"%s %s %s (%s):\n" -" Build OS: %s %s %s\n" -" JobId: %d\n" -" Job: %s\n" -" Backup Level: %s%s\n" -" Client: \"%s\" %s\n" -" FileSet: \"%s\" %s\n" -" Pool: \"%s\" (From %s)\n" -" Catalog: \"%s\" (From %s)\n" -" Storage: \"%s\" (From %s)\n" -" Scheduled time: %s\n" -" Start time: %s\n" -" End time: %s\n" -" Elapsed time: %s\n" -" Priority: %d\n" -" FD Files Written: %s\n" -" SD Files Written: %s\n" -" FD Bytes Written: %s (%sB)\n" -" SD Bytes Written: %s (%sB)\n" -" Rate: %.1f KB/s\n" -" Software Compression: %s\n" -"%s VSS: %s\n" -" Encryption: %s\n" -" Accurate: %s\n" -" Volume name(s): %s\n" -" Volume Session Id: %d\n" -" Volume Session Time: %d\n" -" Last Volume Bytes: %s (%sB)\n" -" Non-fatal FD errors: %d\n" -" SD Errors: %d\n" -" FD termination status: %s\n" -" SD termination status: %s\n" -" Termination: %s\n" -"\n" +#: src/stored/butil.c:55 +msgid "Nomatch," +msgstr "Nomatch," + +#: src/stored/butil.c:58 +msgid "cont," +msgstr "cont," + +#: src/stored/butil.c:148 +msgid "Volume name or names is too long. Please use a .bsr file.\n" msgstr "" -"%s %s %s (%s): %s\n" -" Build OS: %s %s %s\n" -" JobId: %d\n" -" Job: %s\n" -" Nivel de Respaldo: %s%s\n" -" Cliente: \"%s\" %s\n" -" FileSet: \"%s\" %s\n" -" Pool: \"%s\" (Desde %s)\n" -" Catalogo: \"%s\" (Desde %s)\n" -" Storage: \"%s\" (Desde %s)\n" -" Hora programada: %s\n" -" Hora de inicio: %s\n" -" Hora de finalización: %s\n" -" Tiempo transcurrido: %s\n" -" Prioridad: %d\n" -" FD Archivos Escritos: %s\n" -" SD Archivos Escritos: %s\n" -" FD Bytes Escritos: %s (%sB)\n" -" SD Bytes Escritos: %s (%sB)\n" -" Tasa: %.1f KB/s\n" -" Software Compresión: %s\n" -" VSS: %s\n" -" Cifrado: %s\n" -" Accurate: %s\n" -" Nombre del Volumen(es): %s\n" -" Id de Sesión del Volumen: %d\n" -" Tiempo de Sesión del Volumen: %d\n" -" Ultimo Volumen Bytes: %s (%sB)\n" -" No-fatal FD errores: %d\n" -" SD Errores: %d\n" -" Estado de terminación FD: %s\n" -" Estado de terminación SD: %s\n" -" Terminación: %s\n" -"\n" +"Nombre de Volumen o nombres es demasiado largo. Por favor, use un archivo ." +"BSR.\n" + +#: src/stored/butil.c:168 +#, c-format +msgid "Cannot find device \"%s\" in config file %s.\n" +msgstr "" +"No se puede encontrar el dispositivo \"%s\" en el archivo de configuración " +"%s.\n" -#: src/dird/backup.c:832 +#: src/stored/butil.c:175 #, c-format -msgid "Could not get Job Volume Parameters to update Bootstrap file. ERR=%s\n" -msgstr "" -"No es posible obtener los parámetros de Job Volumen para actualizar el " -"archivo Bootstrap. ERR=%s\n" +msgid "Cannot init device %s\n" +msgstr "No se pudo iniciar dispositivo %s\n" -#: src/dird/backup.c:868 +#: src/stored/butil.c:195 #, c-format -msgid "" -"Could not open WriteBootstrap file:\n" -"%s: ERR=%s\n" +msgid "Cannot open %s\n" +msgstr "No se pudo abrir %s\n" + +#: src/stored/butil.c:282 +#, c-format +msgid "Could not find device \"%s\" in config file %s.\n" msgstr "" -"No se pudo abrir el archivo WriteBootstrap:\n" -"%s: ERR=%s\n" +"No se pudo encontrar dispositivo \"%s\" en el archivo de configuración %s.\n" -#: src/dird/restore.c:137 src/dird/msgchan.c:476 +#: src/stored/butil.c:287 #, c-format -msgid "Could not open bootstrap file %s: ERR=%s\n" -msgstr "No se puede abrir el archivo de arranque %s: ERR=%s\n" +msgid "Using device: \"%s\" for writing.\n" +msgstr "Utilizando el dispositivo: \"%s\" para escritura.\n" -#: src/dird/restore.c:185 src/dird/restore.c:276 +#: src/stored/butil.c:289 #, c-format -msgid "Could not get storage resource '%s'.\n" -msgstr "No se pudo obtener recurso de almacenamiento '%s'.\n" +msgid "Using device: \"%s\" for reading.\n" +msgstr "Utilizando el dispositivo: \"%s\" para lectura.\n" -#: src/dird/restore.c:314 -#, fuzzy, c-format -msgid "Could not acquire read storage lock for \"%s\"" -msgstr "No se pudo obtener recurso de almacenamiento '%s'.\n" +#: src/stored/butil.c:305 +msgid "Unexpected End of Data\n" +msgstr "Fin Inesperado de los Datos\n" -#: src/dird/restore.c:505 -msgid "" -"Cannot restore without a bootstrap file.\n" -"You probably ran a restore job directly. All restore jobs must\n" -"be run using the restore command.\n" -msgstr "" -"No se puede restaurar sin un archivo bootstrap.\n" -"Usted probablemente ejecuto un job de restauración directa. Todas las tareas " -"de restauración deben\n" -"ser ejecutadas utilizando el comando de restauración.\n" +#: src/stored/butil.c:307 +msgid "Unexpected End of Tape\n" +msgstr "Fin Inesperado de la Cinta\n" -#: src/dird/restore.c:513 +#: src/stored/butil.c:309 +msgid "Unexpected End of File\n" +msgstr "Fin Inesperado del Archivo\n" + +#: src/stored/butil.c:311 +msgid "Tape Door is Open\n" +msgstr "Puerta de la cinta está abierta\n" + +#: src/stored/butil.c:313 +msgid "Unexpected Tape is Off-line\n" +msgstr "Inesperado Cinta esta off-line\n" + +#: src/stored/ansi_label.c:81 #, c-format -msgid "Start Restore Job %s\n" -msgstr "Iniciar Job Restaurar %s\n" +msgid "Read error on device %s in ANSI label. ERR=%s\n" +msgstr "Error de lectura en el dispositivo %s en la etiqueta ANSI. ERR=%s\n" -#: src/dird/restore.c:564 -msgid "Restore OK -- warning file count mismatch" -msgstr "Restauración OK -- alerta, número de archivos desajustado." +#: src/stored/ansi_label.c:91 +msgid "Insane! End of tape while reading ANSI label.\n" +msgstr "Insano! Fin de la cinta mientras leía la etiqueta ANSI.\n" -#: src/dird/restore.c:566 -msgid "Restore OK" -msgstr "Restauración OK" +#: src/stored/ansi_label.c:117 +msgid "No VOL1 label while reading ANSI/IBM label.\n" +msgstr "Ninguna etiqueta VOL1 al leer etiqueta ANSI/IBM.\n" -#: src/dird/restore.c:570 -msgid "Restore OK -- with warnings" -msgstr "Restaurar OK - con advertencias" +#: src/stored/ansi_label.c:140 +#, c-format +msgid "Wanted ANSI Volume \"%s\" got \"%s\"\n" +msgstr "Buscando volumen ANSI \"%s\" obtuvo \"%s\"\n" -#: src/dird/restore.c:574 -msgid "*** Restore Error ***" -msgstr "*** Error de Restauración ***" +#: src/stored/ansi_label.c:151 +msgid "No HDR1 label while reading ANSI label.\n" +msgstr "Ninguna etiqueta HDR1 al leer etiqueta ANSI.\n" -#: src/dird/restore.c:584 -msgid "Restore Canceled" -msgstr "Restauración Cancelada" +#: src/stored/ansi_label.c:157 +#, c-format +msgid "ANSI/IBM Volume \"%s\" does not belong to Bacula.\n" +msgstr "Volumen \"%s\" ANSI/IBM, no pertenece a Bacula.\n" -#: src/dird/restore.c:611 -#, fuzzy, c-format -msgid "" -"%s %s %s (%s):\n" -" Build OS: %s %s %s\n" -" JobId: %d\n" -" Job: %s\n" -" Restore Client: %s\n" -" Start time: %s\n" -" End time: %s\n" -" Files Expected: %s\n" -" Files Restored: %s\n" -" Bytes Restored: %s\n" -" Rate: %.1f KB/s\n" -" FD Errors: %d\n" -" FD termination status: %s\n" -" SD termination status: %s\n" -" Termination: %s\n" -"\n" -msgstr "" -"%s %s %s (%s): %s\n" -" Build OS: %s %s %s\n" -" JobId: %d\n" -" Job: %s\n" -" Restaurar Cliente: %s\n" -" Hora de inicio: %s\n" -" Hora de finalización: %s\n" -" Archivos Esperados: %s\n" -" Archivos Restaurados: %s\n" -" Bytes Restaurados: %s\n" -" Tasa: %.1f KB/s\n" -" Errores de FD: %d\n" -" Estado de terminación de FD: %s\n" -" Estado de terminación de SD: %s\n" -" Terminación: %s\n" -"\n" +#: src/stored/ansi_label.c:169 +msgid "No HDR2 label while reading ANSI/IBM label.\n" +msgstr "Ninguna etiqueta HDR2 al leer etiqueta ANSI/IBM.\n" -#: src/dird/ua_status.c:174 -msgid "Status available for:\n" -msgstr "Estado disponible para:\n" +#: src/stored/ansi_label.c:184 +msgid "Unknown or bad ANSI/IBM label record.\n" +msgstr "Registro de etiqueta ANSI/IBM desconocido o malo.\n" -#: src/dird/ua_status.c:180 -msgid "Select daemon type for status" -msgstr "Seleccione el tipo de demonio para estado" +#: src/stored/ansi_label.c:192 +msgid "Too many records in while reading ANSI/IBM label.\n" +msgstr "Demasiados registros mientras leía etiqueta ANSI/IBM.\n" -#: src/dird/ua_status.c:294 src/stored/status.c:248 +#: src/stored/ansi_label.c:292 #, c-format -msgid "%s Version: %s (%s) %s %s %s\n" -msgstr "%s Versión: %s (%s) %s %s %s\n" +msgid "ANSI Volume label name \"%s\" longer than 6 chars.\n" +msgstr "Nombre de etiqueta de Volumen ANSI \"%s\" más de 6 caracteres.\n" -#: src/dird/ua_status.c:297 +#: src/stored/ansi_label.c:318 #, fuzzy, c-format -msgid "Daemon started %s. Jobs: run=%d, running=%d mode=%d,%d\n" -msgstr "Demonio iniciado %s, %d Job ejecutando desde el inicio.\n" +msgid "Could not write ANSI VOL1 label. Wanted size=%d got=%d ERR=%s\n" +msgstr "No ha podido escribir etiqueta ANSI VOL1. ERR=%s\n" -#: src/dird/ua_status.c:300 src/stored/status.c:258 src/filed/status.c:142 +#: src/stored/ansi_label.c:356 src/stored/ansi_label.c:385 #, c-format -msgid " Heap: heap=%s smbytes=%s max_bytes=%s bufs=%s max_bufs=%s\n" -msgstr "Heap: heap=%s smbytes=%s max_bytes=%s bufs=%s max_bufs=%s\n" +msgid "Could not write ANSI HDR1 label. ERR=%s\n" +msgstr "No ha podido escribir etiqueta ANSI HDR1. ERR=%s\n" + +#: src/stored/ansi_label.c:361 src/stored/ansi_label.c:392 +msgid "Could not write ANSI HDR1 label.\n" +msgstr "No se puede escribir la etiqueta ANSI HDR1.\n" -#: src/dird/ua_status.c:358 +#: src/stored/ansi_label.c:397 #, c-format -msgid "" -"\n" -"Failed to connect to Storage daemon %s.\n" -"====\n" -msgstr "" -"\n" -"Fallo al conectar con el demonio Storage %s.\n" -"====\n" +msgid "Error writing EOF to tape. ERR=%s" +msgstr "Error al escribir EOF a la cinta. ERR=%s" -#: src/dird/ua_status.c:400 +#: src/stored/ansi_label.c:402 +msgid "write_ansi_ibm_label called for non-ANSI/IBM type\n" +msgstr "write_ansi_ibm_label llamado para tipo non-ANSI/IBM\n" + +#: src/stored/vol_mgr.c:80 #, c-format -msgid "" -"Failed to connect to Client %s.\n" -"====\n" -msgstr "" -"Fallo al conectar con el Cliente %s.\n" -"====\n" +msgid "Unable to initialize volume list lock. ERR=%s\n" +msgstr "No se puede inicializar la lista de bloqueo de volumen. ERR=%s\n" -#: src/dird/ua_status.c:408 -msgid "Connected to file daemon\n" -msgstr "Conectado al demonio file\n" +#: src/stored/vol_mgr.c:370 +#, fuzzy, c-format +msgid "Could not reserve volume \"%s\", because job canceled.\n" +msgstr "No es posible reservar volumen %s en %s\n" -#: src/dird/ua_status.c:428 -msgid "" -"\n" -"Scheduled Jobs:\n" +#: src/stored/vol_mgr.c:381 +#, fuzzy, c-format +msgid "Could not reserve volume \"%s\" for append, because it will be read.\n" +msgstr "No es posible reservar volumen %s en %s\n" + +#: src/stored/vol_mgr.c:414 +#, fuzzy, c-format +msgid "Cannot free Volume \"%s\", because it is reserved by someone else.\n" +msgstr "No se puede podar Volumen \"%s\", porque el esta archivo.\n" + +#: src/stored/vol_mgr.c:512 +#, c-format +msgid "Volume %s is busy swapping from %s to %s\n" msgstr "" -"\n" -"Scheduled Jobs:\n" -#: src/dird/ua_status.c:429 -msgid "" -"Level Type Pri Scheduled Name Volume\n" -msgstr "Nivel Tipo Pri Scheduled Nombre Volumen\n" +#: src/stored/vol_mgr.c:515 +#, fuzzy, c-format +msgid "Volume %s is busy swapping.\n" +msgstr "3936 Dispositivo %s está ocupado leyendo.\n" -#: src/dird/ua_status.c:430 -msgid "===================================================================================\n" -msgstr "===================================================================================\n" +#: src/stored/vol_mgr.c:519 +#, fuzzy, c-format +msgid "%s device %s is busy.\n" +msgstr "3936 Dispositivo %s está ocupado leyendo.\n" -#: src/dird/ua_status.c:486 +#: src/stored/file_dev.c:148 #, c-format -msgid "%-14s\t%-8s\t%3d\t%-18s\t%-18s\t%s\n" -msgstr "%-14s\t%-8s\t%3d\t%-18s\t%-18s\t%s\n" +msgid "Could not open file device %s. No Volume name given.\n" +msgstr "" +"No se pudo abrir dispositivo de archivo %s. No hay nombre volumen " +"determinado.\n" -#: src/dird/ua_status.c:490 -#, c-format -msgid "%-14s %-8s %3d %-18s %-18s %s\n" -msgstr "%-14s %-8s %3d %-18s %-18s %s\n" +#: src/stored/file_dev.c:171 +#, fuzzy, c-format +msgid "Could not open(%s,%s,0640): ERR=%s\n" +msgstr "No se pudo abrir %s: ERR=%s\n" -#: src/dird/ua_status.c:544 -msgid "Ignoring invalid value for days. Max is 500.\n" -msgstr "Ignorando valores inválidos para el día. Máximo es de 500.\n" +#: src/stored/file_dev.c:204 +#, c-format +msgid "Unable to truncate device %s. ERR=%s\n" +msgstr "No se puede truncar el dispositivo %s. ERR=%s\n" -#: src/dird/ua_status.c:587 -msgid "No Scheduled Jobs.\n" -msgstr "No hay Jobs Programados.\n" +#: src/stored/file_dev.c:221 +#, c-format +msgid "Unable to stat device %s. ERR=%s\n" +msgstr "No se pudo stat dispositivo %s. ERR=%s\n" -#: src/dird/ua_status.c:604 src/stored/status.c:450 src/filed/status.c:183 -msgid "" -"\n" -"Running Jobs:\n" -msgstr "" -"\n" -"Jobs Ejecutando:\n" +#: src/stored/file_dev.c:235 +#, c-format +msgid "Device %s doesn't support ftruncate(). Recreating file %s.\n" +msgstr "Dispositivo %s no admite ftruncate(). Recreando el archivo %s.\n" -#: src/dird/ua_status.c:612 +#: src/stored/file_dev.c:247 #, c-format -msgid "Console connected at %s\n" -msgstr "Consola conectada en %s\n" +msgid "Could not reopen: %s, ERR=%s\n" +msgstr "No se pudo reabrir: %s, ERR=%s\n" -#: src/dird/ua_status.c:622 -msgid "" -"No Jobs running.\n" -"====\n" -msgstr "" -"Ningún Jobs ejecutando.\n" -"====\n" +#: src/stored/lock.c:231 src/stored/lock.c:259 +#, c-format +msgid "pthread_cond_wait failure. ERR=%s\n" +msgstr "pthread_cond_wait fallido. ERR=%s\n" -#: src/dird/ua_status.c:628 -msgid " JobId Level Name Status\n" -msgstr "JobId Nivel Nombre Estado\n" +#: src/stored/lock.c:475 +msgid "unknown blocked code" +msgstr "Código desconocido bloqueado" -#: src/dird/ua_status.c:629 src/filed/status.c:342 -msgid "======================================================================\n" -msgstr "======================================================================\n" +#: src/stored/read.c:55 +msgid "No Volume names found for restore.\n" +msgstr "Nombres de Volumen no encontrados para restaurar.\n" -#: src/dird/ua_status.c:638 -msgid "is waiting execution" -msgstr "esta esperando ejecución" +#: src/stored/read.c:132 src/stored/read.c:250 +#, c-format +msgid ">filed: Error Hdr=%s\n" +msgstr ">filed: Error Hdr=%s\n" -#: src/dird/ua_status.c:641 -msgid "is running" -msgstr "esta ejecutando" +#: src/stored/read.c:133 src/stored/read.c:166 src/stored/read.c:223 +#: src/stored/read.c:251 src/stored/read.c:266 +#, c-format +msgid "Error sending to File daemon. ERR=%s\n" +msgstr "Error enviando para demonio File. ERR=%s\n" -#: src/dird/ua_status.c:644 -msgid "is blocked" -msgstr "esta bloqueado" +#: src/stored/read.c:165 src/stored/read.c:265 +#, c-format +msgid "Error sending to FD. ERR=%s\n" +msgstr "Error enviando para FD. ERR=%s\n" -#: src/dird/ua_status.c:647 -msgid "has terminated" -msgstr "ha terminado" +#: src/stored/autochanger.c:62 +#, c-format +msgid "No Changer Name given for device %s. Cannot continue.\n" +msgstr "" +"Ningún Nombre Changer obtenido para el dispositivo %s. No se puede " +"continuar.\n" -#: src/dird/ua_status.c:650 -msgid "has terminated with warnings" -msgstr "ha terminado con advertencias" +#: src/stored/autochanger.c:68 +#, c-format +msgid "No Changer Command given for device %s. Cannot continue.\n" +msgstr "" +"Ningún Comando Changer obtenido para el dispositivo %s. No se puede " +"continuar.\n" -#: src/dird/ua_status.c:653 -msgid "has erred" -msgstr "ha errado" +#: src/stored/autochanger.c:137 +#, fuzzy, c-format +msgid "No slot defined in catalog (slot=%d) for Volume \"%s\" on %s.\n" +msgstr "" +"Invalida ranura=%d definida en el catálogo para volumen \"%s\" en %s. Carga " +"manual puede ser requerida.\n" -#: src/dird/ua_status.c:656 -msgid "has errors" -msgstr "tiene errores" +#: src/stored/autochanger.c:139 +msgid "Cartridge change or \"update slots\" may be required.\n" +msgstr "" -#: src/dird/ua_status.c:659 -msgid "has a fatal error" -msgstr "tiene un error fatal" +#: src/stored/autochanger.c:145 +#, c-format +msgid "No \"Changer Device\" for %s. Manual load of Volume may be required.\n" +msgstr "" +"Ninguno \"Dispositivo Changer\" para %s. Carga manual de volumen puede ser " +"requerido.\n" -#: src/dird/ua_status.c:662 -msgid "has verify differences" -msgstr "ha verificar diferencias" +#: src/stored/autochanger.c:152 +#, c-format +msgid "No \"Changer Command\" for %s. Manual load of Volume may be requird.\n" +msgstr "" +"Ninguno \"Comando Changer\" para %s. Carga manual de volumen puede ser " +"requerido.\n" -#: src/dird/ua_status.c:665 -msgid "has been canceled" -msgstr "ha sido cancelado" +#: src/stored/autochanger.c:186 +#, c-format +msgid "3304 Issuing autochanger \"load slot %d, drive %d\" command.\n" +msgstr "" +"3304 Emitiendo comando auto-cambiador \"cargar ranura %d, unidad %d\".\n" -#: src/dird/ua_status.c:670 -msgid "is waiting on Client" -msgstr "esta esperando por Client" +#: src/stored/autochanger.c:194 +#, c-format +msgid "3305 Autochanger \"load slot %d, drive %d\", status is OK.\n" +msgstr "3305 Auto-cambiador \"carga ranura %d, unidad %d\", estado es OK.\n" -#: src/dird/ua_status.c:672 +#: src/stored/autochanger.c:207 #, c-format -msgid "is waiting on Client %s" -msgstr "esta esperando por Cliente %s" +msgid "" +"3992 Bad autochanger \"load slot %d, drive %d\": ERR=%s.\n" +"Results=%s\n" +msgstr "" +"2992 Malo Auto-cambiador \"carga ranura %d, unidad %d\": ERR=%s.\n" +"Resultados=%s\n" -#: src/dird/ua_status.c:680 src/dird/ua_status.c:682 -#, fuzzy, c-format -msgid "is waiting on Storage \"%s\"" -msgstr "esta esperando por Storage %s" +#: src/stored/autochanger.c:270 +#, c-format +msgid "3301 Issuing autochanger \"loaded? drive %d\" command.\n" +msgstr "3301 Emitiendo comando auto-cambiador \"¿cargado? unidad %d\".\n" -#: src/dird/ua_status.c:684 -msgid "is waiting on Storage" -msgstr "esta esperando por Storage" +#: src/stored/autochanger.c:282 +#, c-format +msgid "3302 Autochanger \"loaded? drive %d\", result is Slot %d.\n" +msgstr "" +"3302 Auto-cambiador \"¿cargado? unidad %d\", el resultado es Ranura %d.\n" -#: src/dird/ua_status.c:690 -msgid "is waiting on max Storage jobs" -msgstr "esta esperando por máximo Storage jobs" +#: src/stored/autochanger.c:289 +#, c-format +msgid "3302 Autochanger \"loaded? drive %d\", result: nothing loaded.\n" +msgstr "" +"3302 Auto-cambiador \"¿cargado? unidad %d\", resultado: nada cargado.\n" -#: src/dird/ua_status.c:693 -msgid "is waiting on max Client jobs" -msgstr "esta esperando por máximo Cliente jobs" +#: src/stored/autochanger.c:301 +#, c-format +msgid "" +"3991 Bad autochanger \"loaded? drive %d\" command: ERR=%s.\n" +"Results=%s\n" +msgstr "" +"3991 Malo comando auto-cambiador comando \"cargar? unidad %d\": ERR=%s\n" +"Resultados=%s\n" -#: src/dird/ua_status.c:696 -msgid "is waiting on max Job jobs" -msgstr "esta esperando por máximo Jobs jobs" +#: src/stored/autochanger.c:321 +#, fuzzy, c-format +msgid "Lock failure on autochanger. ERR=%s\n" +msgstr "Error bloqueando Mutex. ERR=%s\n" -#: src/dird/ua_status.c:699 -msgid "is waiting on max total jobs" -msgstr "esta esperando por máximo total jobs" +#: src/stored/autochanger.c:335 +#, fuzzy, c-format +msgid "Unlock failure on autochanger. ERR=%s\n" +msgstr "Error desbloqueando Mutex. ERR=%s\n" -#: src/dird/ua_status.c:702 -msgid "is waiting for its start time" -msgstr "esta esperando por su hora de inicio" +#: src/stored/autochanger.c:382 src/stored/autochanger.c:548 +#, c-format +msgid "3307 Issuing autochanger \"unload slot %d, drive %d\" command.\n" +msgstr "" +"3307 Emitiendo comando auto-cambiador \"descargar ranura %d, unidad %d\"\n" -#: src/dird/ua_status.c:705 -msgid "is waiting for higher priority jobs to finish" -msgstr "está esperando por jobs de una mayor prioridad para terminar" +#: src/stored/autochanger.c:395 +#, c-format +msgid "" +"3995 Bad autochanger \"unload slot %d, drive %d\": ERR=%s\n" +"Results=%s\n" +msgstr "" +"3995 Malo comando auto-cambiador \"descargar ranura %d, unidad %d\": ERR=%s\n" +"Resultados=%s\n" -#: src/dird/ua_status.c:708 src/dird/ua_status.c:759 src/lib/util.c:241 -msgid "SD committing Data" -msgstr "SD perpetrando Datos" +#: src/stored/autochanger.c:498 +#, c-format +msgid "Volume \"%s\" wanted on %s is in use by device %s\n" +msgstr "Volumen \"%s\" buscado en %s está en uso por el dispositivo %s\n" -#: src/dird/ua_status.c:711 src/dird/ua_status.c:762 src/lib/util.c:244 -msgid "SD despooling Data" -msgstr "SD desencolando Datos" +#: src/stored/autochanger.c:565 +#, fuzzy, c-format +msgid "3997 Bad autochanger \"unload slot %d, drive %d\": ERR=%s.\n" +msgstr "" +"3995 Malo comando auto-cambiador \"descargar ranura %d, unidad %d\": ERR=" +"%s.\n" -#: src/dird/ua_status.c:714 src/dird/ua_status.c:765 src/lib/util.c:247 -msgid "SD despooling Attributes" -msgstr "SD desencolando Atributos" +#: src/stored/autochanger.c:608 +#, c-format +msgid "3993 Device %s not an autochanger device.\n" +msgstr "3993 Dispositivo %s no es un dispositivo auto-cargador.\n" -#: src/dird/ua_status.c:717 src/dird/ua_status.c:768 src/lib/util.c:250 -msgid "Dir inserting Attributes" -msgstr "Insertando Atributos Dir" +#: src/stored/autochanger.c:635 +#, c-format +msgid "3306 Issuing autochanger \"%s\" command.\n" +msgstr "3306 Emitiendo comando \"%s\" al auto-cambiador.\n" -#: src/dird/ua_status.c:722 +#: src/stored/autochanger.c:638 +msgid "3996 Open bpipe failed.\n" +msgstr "3996 Fallo al abrir bpipe.\n" + +#: src/stored/os.c:125 #, c-format -msgid "is in unknown state %c" -msgstr "esta en estado desconocido %c" +msgid "Unable to set eotmodel on device %s: ERR=%s\n" +msgstr "No se puede establecer eotmodel en el dispositivo %s: ERR=%s\n" -#: src/dird/ua_status.c:736 -msgid "is waiting for a mount request" -msgstr "esta esperando por petición de montaje" +#: src/stored/os.c:179 +msgid " Bacula status:" +msgstr "Estado del Bacula:" -#: src/dird/ua_status.c:743 -msgid "is waiting for an appendable Volume" -msgstr "está esperando un Volumen appendable" +#: src/stored/os.c:180 src/stored/os.c:263 src/stored/os.c:265 +#, c-format +msgid " file=%d block=%d\n" +msgstr "archivo=%d bloque=%d\n" -#: src/dird/ua_status.c:751 -msgid "is waiting for Client to connect to Storage daemon" -msgstr "está esperando por cliente para conectarse al demonio Storage" +#: src/stored/os.c:188 +msgid " Device status:" +msgstr "Estado del Dispositivo:" -#: src/dird/ua_status.c:753 +#: src/stored/os.c:364 #, c-format -msgid "is waiting for Client %s to connect to Storage %s" -msgstr "está aguardando por el Cliente %s para conectarse al Storage %s" +msgid "unknown func code %d" +msgstr "código de función %d desconocido" -#: src/dird/ua_status.c:784 -#, fuzzy, c-format -msgid "%6d\t%-6s\t%-20s\t%s\t%s\n" -msgstr "%6d\t%-6s\t%-20s\t%s\n" +#: src/stored/os.c:370 +#, c-format +msgid "I/O function \"%s\" not supported on this device.\n" +msgstr "I/O función \"%s\" no es compatible con este dispositivo. \n" -#: src/dird/ua_status.c:788 +#: src/stored/read_records.c:77 #, c-format -msgid "%6d %-6s %-20s %s\n" -msgstr "%6d %-6s %-20s %s\n" +msgid "End of Volume at file %u on device %s, Volume \"%s\"\n" +msgstr "Fin del Volumen en archivo %u en dispositivo %s, Volumen \"%s\"\n" -#: src/dird/ua_status.c:792 -#, fuzzy, c-format -msgid " %-30s\n" -msgstr "Job : %s\n" +#: src/stored/read_records.c:81 +msgid "End of all volumes.\n" +msgstr "Fin de todos los volúmenes.\n" -#: src/dird/ua_status.c:812 -msgid "No Terminated Jobs.\n" -msgstr "Jobs No Terminados.\n" +#: src/stored/read_records.c:131 +msgid "Did fsr in attemp to skip bad record.\n" +msgstr "fsr hizo en un intento para saltar malo registro.\n" -#: src/dird/ua_status.c:818 src/stored/status.c:572 src/filed/status.c:330 -msgid "" -"\n" -"Terminated Jobs:\n" -msgstr "" -"\n" -"Jobs No Terminados:\n" +#: src/stored/read_records.c:370 +#, c-format +msgid "Forward spacing Volume \"%s\" to file:block %u:%u.\n" +msgstr "Espaciando hacia adelante Volumen \"%s\" para archivo:bloque %u:%u.\n" -#: src/dird/ua_status.c:819 src/stored/status.c:579 src/filed/status.c:340 -msgid " JobId Level Files Bytes Status Finished Name \n" -msgstr "JobId Nivel Archivos Bytes Estado Finalizado Nombre \n" +#: src/stored/read_records.c:394 +msgid "Begin Session" +msgstr "Inicio de Sesión" -#: src/dird/ua_status.c:820 -msgid "====================================================================\n" -msgstr "====================================================================\n" +#: src/stored/read_records.c:398 +msgid "End Session" +msgstr "Fin de Sesión" -#: src/dird/ua_status.c:852 src/stored/status.c:601 src/lib/util.c:180 -#: src/filed/status.c:363 -msgid "Created" -msgstr "Creado" +#: src/stored/read_records.c:404 +#, c-format +msgid "Unknown code %d\n" +msgstr "Código desconocido %d\n" -#: src/dird/ua_status.c:856 src/stored/status.c:605 src/lib/util.c:196 -#: src/lib/util.c:331 src/lib/util.c:478 src/filed/status.c:367 -msgid "Error" -msgstr "Error" +#: src/stored/parse_bsr.c:115 +#, c-format +msgid "Cannot open bootstrap file %s: %s\n" +msgstr "No se puede abrir el archivo bootstrap %s: %s\n" -#: src/dird/ua_status.c:859 src/stored/status.c:608 src/filed/status.c:370 -msgid "Diffs" -msgstr "Diferencias" +#: src/stored/parse_bsr.c:219 +#, c-format +msgid "Device \"%s\" in bsr at inappropriate place.\n" +msgstr "Dispositivo %s en BSR en el lugar inadecuado.\n" -#: src/dird/ua_status.c:865 src/stored/status.c:614 src/stored/btape.c:1523 -#: src/lib/util.c:189 src/lib/util.c:324 src/filed/status.c:376 -#: src/wx-console/wxbconfigpanel.cpp:209 -msgid "OK" -msgstr "OK" +#: src/stored/parse_bsr.c:282 +#, c-format +msgid "REGEX '%s' compile error. ERR=%s\n" +msgstr "error de compilación REGEX '%s'. ERR=%s\n" -#: src/dird/ua_status.c:868 src/stored/status.c:617 src/lib/util.c:202 -#: src/lib/util.c:327 -msgid "OK -- with warnings" -msgstr "OK - con advertencias" +#: src/stored/parse_bsr.c:325 +msgid "JobType not yet implemented\n" +msgstr "JobType aún no se han implementado\n" -#: src/dird/ua_status.c:871 src/stored/status.c:620 src/filed/status.c:379 -msgid "Other" -msgstr "Otros" +#: src/stored/parse_bsr.c:333 +msgid "JobLevel not yet implemented\n" +msgstr "JobLevel aún no se han implementado\n" -#: src/dird/ua_status.c:875 src/stored/status.c:632 src/filed/status.c:391 +#: src/stored/parse_bsr.c:378 #, c-format -msgid "%6d\t%-6s\t%8s\t%10s\t%-7s\t%-8s\t%s\n" -msgstr "%6d\t%-6s\t%8s\t%10s\t%-7s\t%-8s\t%s\n" +msgid "MediaType %s in bsr at inappropriate place.\n" +msgstr "MediaType %s en BSR en el lugar inadecuado.\n" -#: src/dird/ua_status.c:883 src/stored/status.c:640 src/filed/status.c:399 +#: src/stored/parse_bsr.c:683 #, c-format -msgid "%6d %-6s %8s %10s %-7s %-8s %s\n" -msgstr "%6d %-6s %8s %10s %-7s %-8s %s\n" - -#: src/dird/ua_status.c:892 -msgid "\n" -msgstr "\n" - -#: src/dird/ua_input.c:103 -msgid "Enter slot" -msgstr "Introduzca ranura" +msgid "Slot %d in bsr at inappropriate place.\n" +msgstr "Ranura %d en BSR en el lugar inadecuado.\n" -#: src/dird/ua_input.c:107 src/dird/ua_input.c:113 +#: src/stored/parse_bsr.c:707 #, c-format -msgid "Expected a positive integer, got: %s\n" -msgstr "Esperaba un número entero positivo, obtuvo: %s\n" +msgid "VolFile : %u-%u\n" +msgstr "VolFile : %u-%u\n" -#: src/dird/ua_input.c:170 -msgid "Invalid response. You must answer yes or no.\n" -msgstr "Respuesta no válida. Usted tiene que contestar sí o no.\n" +#: src/stored/parse_bsr.c:715 +#, c-format +msgid "VolBlock : %u-%u\n" +msgstr "VolBlock : %u-%u\n" -#: src/dird/ua_input.c:193 -msgid "Invalid Enabled value, it must be yes, no, archived, 0, 1, or 2\n" -msgstr "Inválido valor Habilitado, debe ser sí, no, archivado, 0, 1 o 2\n" +#: src/stored/parse_bsr.c:723 +#, c-format +msgid "VolAddr : %llu-%llu\n" +msgstr "VolAddr : %llu-%llu\n" -#: src/dird/ua_input.c:220 -#, fuzzy, c-format -msgid "Illegal character \"%c\" in a comment.\n" -msgstr "Carácter ilegal \"%c\" en el nombre.\n" +#: src/stored/parse_bsr.c:732 +#, c-format +msgid "FileIndex : %u\n" +msgstr "FileIndex : %u\n" -#: src/dird/ua_input.c:227 -#, fuzzy -msgid "Comment too long.\n" -msgstr "Nombre demasiado largo.\n" +#: src/stored/parse_bsr.c:734 +#, c-format +msgid "FileIndex : %u-%u\n" +msgstr "FileIndex : %u-%u\n" -#: src/dird/ua_input.c:233 -#, fuzzy -msgid "Comment must be at least one character long.\n" -msgstr "Nombre de volumen debe ser de al menos un carácter de largo.\n" +#: src/stored/parse_bsr.c:744 +#, c-format +msgid "JobId : %u\n" +msgstr "JobId : %u\n" -#: src/dird/pythondir.c:121 src/stored/pythonsd.c:101 -#: src/stored/pythonsd.c:166 src/filed/pythonfd.c:94 src/filed/pythonfd.c:148 -#: src/filed/pythonfd.c:212 -msgid "Job pointer not found." -msgstr "No se encuentra el puntero del Job." +#: src/stored/parse_bsr.c:746 +#, c-format +msgid "JobId : %u-%u\n" +msgstr "JobId : %u-%u\n" -#: src/dird/pythondir.c:153 -msgid "Pool record not found." -msgstr "Registro Pool no encontrado" +#: src/stored/parse_bsr.c:756 +#, c-format +msgid "SessId : %u\n" +msgstr "SessId : %u\n" -#: src/dird/pythondir.c:209 src/stored/pythonsd.c:143 src/filed/pythonfd.c:125 +#: src/stored/parse_bsr.c:758 #, c-format -msgid "Attribute %s not found." -msgstr "Atributo %s no encontrado." +msgid "SessId : %u-%u\n" +msgstr "SessId : %u-%u\n" -#: src/dird/pythondir.c:252 src/dird/pythondir.c:258 src/stored/pythonsd.c:183 -#: src/filed/pythonfd.c:167 -msgid "Read-only attribute" -msgstr "Atributo Solo-Lectura" +#: src/stored/parse_bsr.c:767 +#, c-format +msgid "VolumeName : %s\n" +msgstr "VolumeName : %s\n" -#: src/dird/pythondir.c:284 -msgid "Priority must be 1-100" -msgstr "Prioridad debe ser 1-100" +#: src/stored/parse_bsr.c:768 +#, c-format +msgid " MediaType : %s\n" +msgstr "MediaType : %s\n" -#: src/dird/pythondir.c:289 -msgid "Job Level can be set only during JobInit" -msgstr "Nivel de Job sólo se puede ajustar durante JobInit" +#: src/stored/parse_bsr.c:769 +#, c-format +msgid " Device : %s\n" +msgstr "Dispositivo : %s\n" -#: src/dird/pythondir.c:303 -msgid "Bad JobLevel string" -msgstr "Mala cadena JobLevel" +#: src/stored/parse_bsr.c:770 +#, c-format +msgid " Slot : %d\n" +msgstr "Ranura : %d\n" -#: src/dird/job.c:62 +#: src/stored/parse_bsr.c:779 #, c-format -msgid "Could not init job queue: ERR=%s\n" -msgstr "No se pudo iniciar la cola de trabajos: ERR=%s\n" +msgid "Client : %s\n" +msgstr "Cliente : %s\n" -#: src/dird/job.c:94 +#: src/stored/parse_bsr.c:787 #, c-format -msgid "Could not add job queue: ERR=%s\n" -msgstr "No se ha podido añadir la cola de trabajo: ERR=%s\n" +msgid "Job : %s\n" +msgstr "Job : %s\n" -#: src/dird/job.c:183 src/dird/job.c:433 src/dird/job.c:435 src/dird/job.c:485 -#: src/dird/job.c:487 src/dird/job.c:1129 src/dird/job.c:1170 -#: src/dird/job.c:1179 -msgid "Job resource" -msgstr "Recurso Job" +#: src/stored/parse_bsr.c:795 +#, c-format +msgid "SessTime : %u\n" +msgstr "SessTime : %u\n" + +#: src/stored/parse_bsr.c:806 +msgid "BSR is NULL\n" +msgstr "BSR is NULL\n" -#: src/dird/job.c:230 src/dird/job.c:349 +#: src/stored/parse_bsr.c:810 #, c-format -msgid "Unimplemented job type: %d\n" -msgstr "Tipo de Job no implementado: %d\n" +msgid "Next : 0x%x\n" +msgstr "Siguiente : 0x%x\n" -#: src/dird/job.c:272 -msgid "Job canceled because max start delay time exceeded.\n" -msgstr "Job cancelado porque el tiempo máximo de espera ha excedido.\n" +#: src/stored/parse_bsr.c:811 +#, c-format +msgid "Root bsr : 0x%x\n" +msgstr "Root bsr : 0x%x\n" -#: src/dird/job.c:277 -#, fuzzy -msgid "Job canceled because max run sched time exceeded.\n" -msgstr "" -"Job cancelado porque el tiempo de ejecución máximo programado se ha " -"superado.\n" +#: src/stored/parse_bsr.c:823 +#, c-format +msgid "count : %u\n" +msgstr "contado : %u\n" -#: src/dird/job.c:403 +#: src/stored/parse_bsr.c:824 #, c-format -msgid "JobId %s, Job %s marked to be canceled.\n" -msgstr "JobId %s, Job %s marcado para ser cancelado.\n" +msgid "found : %u\n" +msgstr "encontrado : %u\n" -#: src/dird/job.c:413 -msgid "Failed to connect to File daemon.\n" -msgstr "Error al conectar con demonio File.\n" +#: src/stored/parse_bsr.c:827 +#, c-format +msgid "done : %s\n" +msgstr "realizado : %s\n" -#: src/dird/job.c:548 -msgid "Max wait time exceeded. Job canceled.\n" -msgstr "Máximo tiempo de espera excedido. Job cancelado.\n" +#: src/stored/parse_bsr.c:827 src/dird/ua_run.c:173 src/dird/backup.c:916 +#: src/dird/backup.c:917 src/dird/backup.c:918 src/dird/ua_input.c:141 +#: src/dird/ua_update.c:245 src/dird/ua_update.c:265 src/dird/ua_update.c:687 +#: src/tools/dbcheck.c:1340 +msgid "yes" +msgstr "si" -#: src/dird/job.c:553 -msgid "Max run time exceeded. Job canceled.\n" -msgstr "Máximo tiempo de ejecución excedido. Job cancelado.\n" +#: src/stored/parse_bsr.c:827 src/dird/ua_run.c:176 src/dird/backup.c:916 +#: src/dird/backup.c:917 src/dird/backup.c:918 src/dird/ua_input.c:145 +#: src/dird/ua_update.c:245 src/dird/ua_update.c:265 src/dird/ua_update.c:687 +msgid "no" +msgstr "no" -#: src/dird/job.c:558 -#, fuzzy -msgid "Max run sched time exceeded. Job canceled.\n" -msgstr "Máximo tiempo de ejecución excedido. Job cancelado.\n" +#: src/stored/parse_bsr.c:828 +#, c-format +msgid "positioning : %d\n" +msgstr "posicionamiento : %d\n" -#: src/dird/job.c:680 +#: src/stored/parse_bsr.c:829 #, c-format -msgid "Pool \"%s\" not in database. ERR=%s" -msgstr "Poll \"%s\" no en base de datos. ERR=%s" +msgid "fast_reject : %d\n" +msgstr "fast_reject : %d\n" -#: src/dird/job.c:684 +#: src/stored/parse_bsr.c:1053 src/stored/parse_bsr.c:1057 #, c-format -msgid "Created database record for Pool \"%s\".\n" -msgstr "Creado registro base de datos para Pool \"%s\".\n" +msgid "" +"Bootstrap file error: %s\n" +" : Line %d, col %d of file %s\n" +"%s\n" +msgstr "" +"Error archivo Bootstrap: %s\n" +" : Linea %d, columna %d del archivo %s\n" +"%s\n" -#: src/dird/job.c:766 src/dird/job.c:809 +#: src/stored/reserve.c:64 #, c-format -msgid "JobId %d already running. Duplicate job not allowed.\n" -msgstr "JobId %d ya esta en ejecución. No se permite job duplicados.\n" +msgid "Unable to initialize reservation lock. ERR=%s\n" +msgstr "No se puede inicializar bloqueo de reserva. ERR=%s\n" -#: src/dird/job.c:797 +#: src/stored/reserve.c:144 #, c-format -msgid "Cancelling duplicate JobId=%d.\n" -msgstr "Cancelando duplicado JobId=%d.\n" +msgid "Hey! num_writers=%d!!!!\n" +msgstr "Hey! num_writers=%d!!!!\n" -#: src/dird/job.c:828 src/dird/job.c:1116 -msgid "Run pool override" -msgstr "Anular Ejecutar Pool" +#: src/stored/reserve.c:259 +msgid "3939 Could not get dcr\n" +msgstr "3939 No se pudo obtener DCR\n" -#: src/dird/job.c:839 -msgid "Run FullPool override" -msgstr "Anular Ejecutar FullPool " +#: src/stored/reserve.c:368 +#, c-format +msgid "Device reservation failed for JobId=%d: %s\n" +msgstr "Reservación del Dispositivo fallida para JobId=%d: %s\n" -#: src/dird/job.c:841 -msgid "Job FullPool override" -msgstr "Anular Job FullPool" +#: src/stored/reserve.c:377 +#, c-format +msgid "Failed command: %s\n" +msgstr "Comando fallido: %s\n" -#: src/dird/job.c:850 -msgid "Run IncPool override" -msgstr "Anular Ejecutar IncPoll" +#: src/stored/reserve.c:662 +#, c-format +msgid "3926 Could not get dcr for device: %s\n" +msgstr "3926 No se pudo obtener dcr para el dispositivo: %s\n" -#: src/dird/job.c:852 -msgid "Job IncPool override" -msgstr "Anular Job IncPoll" +#: src/stored/reserve.c:802 +#, fuzzy, c-format +msgid "3603 JobId=%u %s device %s is busy reading.\n" +msgstr "3603 JobId=%u dispositivo %s está ocupado leyendo.\n" -#: src/dird/job.c:861 -msgid "Run DiffPool override" -msgstr "Anular Ejecutar DiffPool" +#: src/stored/reserve.c:811 +#, fuzzy, c-format +msgid "3604 JobId=%u %s device %s is BLOCKED due to user unmount.\n" +msgstr "" +"3604 JobId=%u dispositivo %s está BLOQUEADO debido al desmonte de usuario.\n" -#: src/dird/job.c:863 -msgid "Job DiffPool override" -msgstr "Anular Job DiffPool" +#: src/stored/reserve.c:859 +#, fuzzy, c-format +msgid "3601 JobId=%u %s device %s is BLOCKED due to user unmount.\n" +msgstr "" +"3601 JobId=%u dispositivo %s está BLOQUEADO debido al desmontar por el " +"usuario.\n" -#: src/dird/job.c:893 src/stored/bscan.c:1056 -#, c-format -msgid "Could not create Client record. ERR=%s\n" -msgstr "No es posible crear el registro de clientes. ERR=%s\n" +#: src/stored/reserve.c:867 +#, fuzzy, c-format +msgid "" +"3602 JobId=%u %s device %s is busy (already reading/writing). read=%d, " +"writers=%d reserved=%d\n" +msgstr "3602 JobId=%u dispositivo %s está ocupado (ya leyendo/escribiendo).\n" -#: src/dird/job.c:929 -msgid "FileSet MD5 digest not found.\n" -msgstr "FileSet MD5 digest no encontrado.\n" +#: src/stored/reserve.c:906 +#, fuzzy, c-format +msgid "3609 JobId=%u Max concurrent jobs=%d exceeded on %s device %s.\n" +msgstr "3609 JobId=%u Máximo trabajos simultáneos superado en la unidad %s.\n" -#: src/dird/job.c:934 -#, c-format -msgid "Could not create FileSet \"%s\" record. ERR=%s\n" -msgstr "No es posible crear el registro FileSet \"%s\". ERR=%s\n" +#: src/stored/reserve.c:920 +#, fuzzy, c-format +msgid "3611 JobId=%u Volume max jobs=%d exceeded on %s device %s.\n" +msgstr "3610 JobId=%u máximo volumen jobs excedido en la unidad %s.\n" -#: src/dird/job.c:976 -#, c-format -msgid "Error updating job record. %s" -msgstr "Error actualizando registro job. %s" +#: src/stored/reserve.c:945 +#, fuzzy, c-format +msgid "" +"3608 JobId=%u wants Pool=\"%s\" but have Pool=\"%s\" nreserve=%d on %s " +"device %s.\n" +msgstr "" +"3608 JobId=%u requiere Pool=\"%s\", pero hay Pool=\"%s\" nreserve=%d en la " +"unidad %s.\n" -#: src/dird/job.c:1121 -msgid "Run storage override" -msgstr "Anular Ejecutar Storage" +#: src/stored/reserve.c:997 +#, fuzzy, c-format +msgid "3605 JobId=%u wants free drive but %s device %s is busy.\n" +msgstr "" +"3605 JobId=%u requiere la unidad disponible, pero el dispositivo %s está " +"ocupado.\n" -#: src/dird/job.c:1189 -msgid "Client resource" -msgstr "Recurso de cliente" +#: src/stored/reserve.c:1006 +#, fuzzy, c-format +msgid "3606 JobId=%u prefers mounted drives, but %s device %s has no Volume.\n" +msgstr "" +"3606 JobId=%u prefiere unidades montadas, pero la unidad %s no tiene " +"Volumen.\n" -#: src/dird/job.c:1406 -#, c-format -msgid "Could not start clone job: \"%s\".\n" -msgstr "No se pudo iniciar el job de clonación: \"%s\".\n" +#: src/stored/reserve.c:1028 +#, fuzzy, c-format +msgid "3607 JobId=%u wants Vol=\"%s\" drive has Vol=\"%s\" on %s device %s.\n" +msgstr "" +"3607 JobId=%u quiere Vol=\"%s\" la unidad tiene Vol=\"%s\" en la unidad %s.\n" -#: src/dird/job.c:1409 +#: src/stored/reserve.c:1083 #, c-format -msgid "Clone JobId %d started.\n" -msgstr "Clonar JobId %d iniciado.\n" +msgid "Logic error!!!! JobId=%u Should not get here.\n" +msgstr "Error lógico!! JobId=%u No debería llegar hasta aquí.\n" -#: src/dird/authenticate.c:83 src/dird/authenticate.c:84 -#: src/tray-monitor/authenticate.c:132 -#: src/qt-console/tray-monitor/authenticate.cpp:131 -#, c-format -msgid "Error sending Hello to Storage daemon. ERR=%s\n" -msgstr "Error enviando Hello al servicio de Almacenamiento. ERR=%s\n" +#: src/stored/reserve.c:1084 +#, fuzzy, c-format +msgid "3910 JobId=%u Logic error!!!! %s device %s Should not get here.\n" +msgstr "" +"3910 JobId=%u Error de lógica!!! la unidad %s no debería llegar aquí.\n" -#: src/dird/authenticate.c:113 -msgid "Director and Storage daemon passwords or names not the same.\n" -msgstr "Nombres o contraseñas en el Director o Storage no son las mismas.\n" +#: src/stored/reserve.c:1087 +msgid "Logic error!!!! Should not get here.\n" +msgstr "Error lógico!!! No debe llegar aquí.\n" -#: src/dird/authenticate.c:115 +#: src/stored/reserve.c:1090 #, fuzzy, c-format +msgid "3911 JobId=%u failed reserve %s device %s.\n" +msgstr "3911 JobId=%u fallo al reservar unidad %s.\n" + +#: src/stored/status.c:85 +msgid "Used Volume status:\n" +msgstr "Estado de Volumen Usados:\n" + +#: src/stored/status.c:103 msgid "" -"Director unable to authenticate with Storage daemon at \"%s:%d\". Possible " -"causes:\n" -"Passwords or names not the same or\n" -"Maximum Concurrent Jobs exceeded on the SD or\n" -"SD networking messed up (restart daemon).\n" -"Please see " +"\n" +"SD Resources:\n" msgstr "" -"Director no se puede autenticar con el demonio Storage en \"%s:%d\". " -"Posibles causas:\n" -"Contraseñas o nombres no son los mismos o\n" -"el Máximo de Concurrentes Jobs ha superado en el SD o\n" -"red SD desordenada (reiniciar demonio).\n" -"Por favor, consulte http://www.bacula.org/en/rel-manual/" -"Bacula_Freque_Asked_Questi.html#SECTION003760000000000000000 por ayuda.\n" -#: src/dird/authenticate.c:127 src/wx-console/authenticate.c:127 -#: src/console/authenticate.c:122 +#: src/stored/status.c:139 msgid "" -"Authorization problem: Remote server did not advertise required TLS " -"support.\n" +"\n" +"Device status:\n" msgstr "" -"Problema de Autorización: El servidor remoto no anuncio soporte TLS " -"requerido.\n" - -#: src/dird/authenticate.c:134 src/stored/authenticate.c:146 -#: src/stored/authenticate.c:257 src/wx-console/authenticate.c:133 -#: src/console/authenticate.c:129 src/filed/authenticate.c:160 -#: src/filed/authenticate.c:279 -msgid "Authorization problem: Remote server requires TLS.\n" -msgstr "Problema de autorización. Servidor remoto requiere TLS.\n" +"\n" +"Estado del dispositivo:\n" -#: src/dird/authenticate.c:143 +#: src/stored/status.c:143 #, c-format -msgid "TLS negotiation failed with SD at \"%s:%d\"\n" -msgstr "Negociación TLS fallida con SD en \"%s:%d\"\n" +msgid "Autochanger \"%s\" with devices:\n" +msgstr "Auto-cambiador \"%s\" con los dispositivos:\n" -#: src/dird/authenticate.c:155 -#, c-format -msgid "bdird set configuration file to file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -t test - read configuration and exit\n" -" -? print this message.\n" -"\n" -msgstr "" -"Escrito por Nicolas Boichat (2004)\n" -"\n" -"Versión: %s (%s) %s %s %s\n" -"\n" -"Utilice: tray-monitor [-c archivo_configuración] [-d nivel_depuración]\n" -" -c establece archivo de configuración para archivo\n" -" -d establece nivel de depuración para \n" -" -dt imprime timestamp en salida de depuración\n" -" -t prueba - leer configuración y salir\n" -" -? imprimir este mensaje.\n" -"\n" +msgid "Failed to find any plugins in %s\n" +msgstr "No se pudo encontrar ningún plugin en %s\n" + +#: src/lib/plugins.c:156 +#, fuzzy, c-format +msgid "dlopen plugin %s failed: ERR=%s\n" +msgstr "fopen %s ha fallado: ERR=%s\n" -#: src/tray-monitor/tray-monitor.c:270 -#: src/qt-console/tray-monitor/tray-monitor.cpp:216 +#: src/lib/plugins.c:167 #, c-format -msgid "" -"Error: %d Monitor resources defined in %s. You must define one and only one " -"Monitor resource.\n" -msgstr "" -"Error: %d Monitor de recursos definidos en %s. Usted debe definir un único " -"monitor de recursos.\n" +msgid "Lookup of loadPlugin in plugin %s failed: ERR=%s\n" +msgstr "Fallo buscando por loadPlugin en plugin %s: ERR=%s\n" -#: src/tray-monitor/tray-monitor.c:301 -#: src/qt-console/tray-monitor/tray-monitor.cpp:248 +#: src/lib/plugins.c:176 #, c-format +msgid "Lookup of unloadPlugin in plugin %s failed: ERR=%s\n" +msgstr "Fallo buscando por unloadPlugin en plugin %s: ERR=%s\n" + +#: src/lib/bnet.c:127 +#, fuzzy, c-format +msgid "Attr spool write error. wrote=%d wanted=%d bytes. ERR=%s\n" +msgstr "Error de escritura en cola de atributo. ERR=%s\n" + +#: src/lib/bnet.c:212 src/lib/bnet.c:253 +msgid "TLS connection initialization failed.\n" +msgstr "Ha fallado la conexión de inicialización TLS.\n" + +#: src/lib/bnet.c:220 +msgid "TLS Negotiation failed.\n" +msgstr "Negociación TLS fallida.\n" + +#: src/lib/bnet.c:226 src/lib/bnet.c:268 msgid "" -"No Client, Storage or Director resource defined in %s\n" -"Without that I don't how to get status from the File, Storage or Director " -"Daemon :-(\n" +"TLS certificate verification failed. Peer certificate did not match a " +"required commonName\n" msgstr "" -"Ningún recurso Cliente, Storage o Director definido en %s\n" -"Sin esto, Yo no se como obtener el estado de los demonios File, Storage o " -"Director :-(\n" +"Comprobación de certificados TLS fallido. Certificado equivalente no " +"corresponde con el commonName requerido\n" -#: src/tray-monitor/tray-monitor.c:323 -#: src/qt-console/tray-monitor/tray-monitor.cpp:263 +#: src/lib/bnet.c:277 #, c-format msgid "" -"Invalid refresh interval defined in %s\n" -"This value must be greater or equal to 1 second and less or equal to 10 " -"minutes (read value: %d).\n" +"TLS host certificate verification failed. Host name \"%s\" did not match " +"presented certificate\n" msgstr "" -"Invalido intervalo de actualización definido en %s\n" -"Este valor debe ser mayor o igual a 1 segundo y menor o igual a 10 minutos " -"(leer el valor:% d).\n" - -#: src/tray-monitor/tray-monitor.c:330 -msgid "Bacula daemon status monitor" -msgstr "Monitor de Estado del demonio Bacula" - -#: src/tray-monitor/tray-monitor.c:339 -msgid "Open status window..." -msgstr "Abrir la ventana de estado..." - -#: src/tray-monitor/tray-monitor.c:345 -msgid "Exit" -msgstr "Salir" - -#: src/tray-monitor/tray-monitor.c:357 -msgid "Bacula tray monitor" -msgstr "Bacula tray monitor" +"Fallo en verificación en certificado TLS de la maquina. Nombre de la maquina " +"\"%s\" no coincide con el certificado presentado\n" -#: src/tray-monitor/tray-monitor.c:382 -msgid " (DIR)" -msgstr "(DIR)" +#: src/lib/bnet.c:294 +msgid "TLS enabled but not configured.\n" +msgstr "TLS activado, pero no configurado.\n" -#: src/tray-monitor/tray-monitor.c:386 -msgid " (FD)" -msgstr "(FD)" +#: src/lib/bnet.c:300 +msgid "TLS enable but not configured.\n" +msgstr "TLS permitido, pero no configurado.\n" -#: src/tray-monitor/tray-monitor.c:390 -msgid " (SD)" -msgstr "(SD)" +#: src/lib/bnet.c:397 +msgid "No problem." +msgstr "No hay problema." -#: src/tray-monitor/tray-monitor.c:403 -msgid "Unknown status." -msgstr "Estado desconocido." +#: src/lib/bnet.c:400 +msgid "Authoritative answer for host not found." +msgstr "Respuesta autoritativa para el host no encontrado." -#: src/tray-monitor/tray-monitor.c:477 -msgid "Refresh interval in seconds: " -msgstr "Intervalo de actualización en segundos:" +#: src/lib/bnet.c:403 +msgid "Non-authoritative for host not found, or ServerFail." +msgstr "Non-autoritativa para la maquina no encontrada, o ServerFail." -#: src/tray-monitor/tray-monitor.c:485 -msgid "Refresh now" -msgstr "Actualizar Ahora" +#: src/lib/bnet.c:406 +msgid "Non-recoverable errors, FORMERR, REFUSED, or NOTIMP." +msgstr "Errores no recuperables, FORMERR, RECHAZADO o NOTIMP." -#: src/tray-monitor/tray-monitor.c:489 -msgid "About" -msgstr "Sobre" +#: src/lib/bnet.c:409 +msgid "Valid name, no data record of resquested type." +msgstr "Nombre válido, ningún registro de datos del tipo solicitado." -#: src/tray-monitor/tray-monitor.c:493 -msgid "Close" -msgstr "Cerrar" +#: src/lib/bnet.c:412 +msgid "Unknown error." +msgstr "Error desconocido." -#: src/tray-monitor/tray-monitor.c:513 +#: src/lib/bnet.c:554 #, c-format -msgid "Disconnecting from Director %s:%d\n" -msgstr "Desconectando del Director %s:%d\n" +msgid "Unknown sig %d" +msgstr "Sig desconocido %d" -#: src/tray-monitor/tray-monitor.c:516 +#: src/lib/openssl.c:131 src/lib/openssl.c:202 #, c-format -msgid "Disconnecting from Client %s:%d\n" -msgstr "Desconectando del Cliente %s:%d\n" +msgid "Unable to destroy mutex: ERR=%s\n" +msgstr "No se puede destruir mutex: ERR=%s\n" -#: src/tray-monitor/tray-monitor.c:519 -#, c-format -msgid "Disconnecting from Storage %s:%d\n" -msgstr "Desconectando del Almacenamiento %s:%d\n" +#: src/lib/var.c:2657 +msgid "everything ok" +msgstr "todo bien" -#: src/tray-monitor/tray-monitor.c:560 src/tray-monitor/tray-monitor.c:571 -msgid "Bacula Tray Monitor" -msgstr "Bacula Tray Monitor" +#: src/lib/var.c:2658 +msgid "incomplete named character" +msgstr "carácter nombrado incompleto" -#: src/tray-monitor/tray-monitor.c:562 src/tray-monitor/tray-monitor.c:573 -msgid "Written by Nicolas Boichat\n" -msgstr "Escrito por Nicolás Boichat\n" +#: src/lib/var.c:2659 +msgid "incomplete hexadecimal value" +msgstr "valor hexadecimal incompleto" -#: src/tray-monitor/tray-monitor.c:563 src/tray-monitor/tray-monitor.c:574 -msgid "Version" -msgstr "Version" +#: src/lib/var.c:2660 +msgid "invalid hexadecimal value" +msgstr "valor hexadecimal inválido" -#: src/tray-monitor/tray-monitor.c:656 -#: src/qt-console/tray-monitor/tray-monitor.cpp:331 -#, c-format -msgid "Error, currentitem is not a Client or a Storage..\n" -msgstr "Error, CurrentItem no es un Cliente o un Storage ...\n" +#: src/lib/var.c:2661 +msgid "octal value too large" +msgstr "valor octal demasiado grande" -#: src/tray-monitor/tray-monitor.c:730 -#, c-format -msgid "" -"Current job: %s\n" -"Last job: %s" -msgstr "" -"Job actual: %s\n" -"Ultimo job: %s" +#: src/lib/var.c:2662 +msgid "invalid octal value" +msgstr "valor octal inválido" -#: src/tray-monitor/tray-monitor.c:742 -#, c-format -msgid " (%d errors)" -msgstr "(%d errores)" +#: src/lib/var.c:2663 +msgid "incomplete octal value" +msgstr "valor octal incompleto" -#: src/tray-monitor/tray-monitor.c:745 -#, c-format -msgid " (%d error)" -msgstr "(%d error)" +#: src/lib/var.c:2664 +msgid "incomplete grouped hexadecimal value" +msgstr "valor hexadecimal agrupado incompleto" -#: src/tray-monitor/tray-monitor.c:783 -msgid "No current job." -msgstr "Ningún trabajo actual." +#: src/lib/var.c:2665 +msgid "incorrect character class specification" +msgstr "incorrecta especificación de clase de caracteres" -#: src/tray-monitor/tray-monitor.c:786 -msgid "No last job." -msgstr "Ningún ultimo trabajo." +#: src/lib/var.c:2666 +msgid "invalid expansion configuration" +msgstr "configuración de expansión inválido" + +#: src/lib/var.c:2667 +msgid "out of memory" +msgstr "sin memoria" -#: src/tray-monitor/tray-monitor.c:794 -msgid "Job status: Created" -msgstr "Estado del trabajo: Creado" +#: src/lib/var.c:2668 +msgid "incomplete variable specification" +msgstr "especificación de la variable incompleta" -#: src/tray-monitor/tray-monitor.c:799 -msgid "Job status: Running" -msgstr "Estado del trabajo: Ejecutando" +#: src/lib/var.c:2669 +msgid "undefined variable" +msgstr "variable no definida" -#: src/tray-monitor/tray-monitor.c:803 -msgid "Job status: Blocked" -msgstr "Estado del trabajo: Bloqueado" +#: src/lib/var.c:2670 +msgid "input is neither text nor variable" +msgstr "de entrada no es ni texto ni variable" -#: src/tray-monitor/tray-monitor.c:808 -msgid "Job status: Terminated" -msgstr "Estado del trabajo: Terminado" +#: src/lib/var.c:2671 +msgid "unknown command character in variable" +msgstr "carácter de comando desconocido en la variable" -#: src/tray-monitor/tray-monitor.c:813 -msgid "Job status: Terminated in error" -msgstr "Estado del trabajo: Terminado con error" +#: src/lib/var.c:2672 +msgid "malformatted search and replace operation" +msgstr "mal-formada operación de búsqueda y reemplazo" -#: src/tray-monitor/tray-monitor.c:819 -msgid "Job status: Error" -msgstr "Estado del trabajo: Error" +#: src/lib/var.c:2673 +msgid "unknown flag in search and replace operation" +msgstr "bandera desconocida en operación de búsqueda y reemplazo" -#: src/tray-monitor/tray-monitor.c:823 -msgid "Job status: Fatal error" -msgstr "Estado del trabajo: Fatal error" +#: src/lib/var.c:2674 +msgid "invalid regex in search and replace operation" +msgstr "regex no válida en operación de búsqueda y reemplazo" -#: src/tray-monitor/tray-monitor.c:828 -msgid "Job status: Verify differences" -msgstr "Estado del Job: Verificar las diferencias" +#: src/lib/var.c:2675 +msgid "missing parameter in command" +msgstr "faltan parámetros en el comando" -#: src/tray-monitor/tray-monitor.c:833 -msgid "Job status: Canceled" -msgstr "Estado del Job: Cancelado" +#: src/lib/var.c:2676 +msgid "empty search string in search and replace operation" +msgstr "palabra de búsqueda vacía en operación de búsqueda y reemplazo" -#: src/tray-monitor/tray-monitor.c:838 -msgid "Job status: Waiting on File daemon" -msgstr "Estado del Job: Esperando en demonio File" +#: src/lib/var.c:2677 +msgid "start offset missing in cut operation" +msgstr "inicio offset ausente en operación de corte" -#: src/tray-monitor/tray-monitor.c:843 -msgid "Job status: Waiting on the Storage daemon" -msgstr "Estado del Job: Esperando en demonio Storage" +#: src/lib/var.c:2678 +msgid "offsets in cut operation delimited by unknown character" +msgstr "offset en operación de corte delimitado por carácter desconocido" -#: src/tray-monitor/tray-monitor.c:848 -msgid "Job status: Waiting for new media" -msgstr "Estado del Job: Esperando por nuevo medio" +#: src/lib/var.c:2679 +msgid "range out of bounds in cut operation" +msgstr "rango fuera de límites en operaciones de corte" -#: src/tray-monitor/tray-monitor.c:853 -msgid "Job status: Waiting for Mount" -msgstr "Estado del Job: Esperando por montar" +#: src/lib/var.c:2680 +msgid "offset out of bounds in cut operation" +msgstr "desplazamiento fuera de límites en operaciones de corte" -#: src/tray-monitor/tray-monitor.c:858 -msgid "Job status: Waiting for storage resource" -msgstr "Estado del Job: Esperando por recurso storage" +#: src/lib/var.c:2681 +msgid "logic error in cut operation" +msgstr "error lógico en la operación de corte" -#: src/tray-monitor/tray-monitor.c:863 -msgid "Job status: Waiting for job resource" -msgstr "Estado del Job: Esperando por recurso job" +#: src/lib/var.c:2682 +msgid "malformatted transpose operation" +msgstr "malformación en operación de transposición" -#: src/tray-monitor/tray-monitor.c:868 -msgid "Job status: Waiting for Client resource" -msgstr "Estado del Job: Esperando por recurso Cliente" +#: src/lib/var.c:2683 +msgid "source and target class mismatch in transpose operation" +msgstr "clase de origen y de destino desajustada en operación de transposición" -#: src/tray-monitor/tray-monitor.c:873 -msgid "Job status: Waiting for maximum jobs" -msgstr "Estado del Job: Esperando por jobs máximos " +#: src/lib/var.c:2684 +msgid "empty character class in transpose operation" +msgstr "clase de caracteres vacía en operación de transposición" -#: src/tray-monitor/tray-monitor.c:878 -msgid "Job status: Waiting for start time" -msgstr "Estado del Job: Esperando por hora de inicio " +#: src/lib/var.c:2685 +msgid "incorrect character class in transpose operation" +msgstr "clase de caracteres incorrectos en la operación adaptación" -#: src/tray-monitor/tray-monitor.c:883 -msgid "Job status: Waiting for higher priority jobs to finish" -msgstr "Estado del Job: Esperando por jobs de prioridad mayor por finalizar" +#: src/lib/var.c:2686 +msgid "malformatted padding operation" +msgstr "malformación en operación de relleno" -#: src/tray-monitor/tray-monitor.c:888 -#, c-format -msgid "Unknown job status %c." -msgstr "Estado del job desconocido %c." +#: src/lib/var.c:2687 +msgid "width parameter missing in padding operation" +msgstr "parámetro de anchura ausente en la operación de relleno" -#: src/tray-monitor/tray-monitor.c:889 -#, c-format -msgid "Job status: Unknown(%c)" -msgstr "Estado del job: Desconocido (%c)" +#: src/lib/var.c:2688 +msgid "fill string missing in padding operation" +msgstr "cadena de llenado ausente en la operación de relleno" -#: src/tray-monitor/tray-monitor.c:896 -#, c-format -msgid "Bad scan : '%s' %d\n" -msgstr "Mala análisis: '%s' %d\n" +#: src/lib/var.c:2689 +msgid "unknown quoted pair in search and replace operation" +msgstr "par de citado desconocido en operación de búsqueda y reemplazo" -#: src/tray-monitor/tray-monitor.c:936 src/console/console.c:1143 -#, c-format -msgid "Connecting to Director %s:%d\n" -msgstr "Conectando al Director %s:%d\n" +#: src/lib/var.c:2690 +msgid "sub-matching reference out of range" +msgstr "referencia de sub-coincidente fuera de rango" -#: src/tray-monitor/tray-monitor.c:937 -#: src/qt-console/tray-monitor/tray-monitor.cpp:359 -#: src/qt-console/bcomm/dircomm.cpp:103 -#, c-format -msgid "Connecting to Director %s:%d" -msgstr "Conectando con Director %s:%d" +#: src/lib/var.c:2691 +msgid "invalid argument" +msgstr "argumento invalido" -#: src/tray-monitor/tray-monitor.c:938 src/wx-console/console_thread.cpp:428 -#: src/qt-console/tray-monitor/tray-monitor.cpp:361 -#: src/qt-console/bcomm/dircomm.cpp:173 -msgid "Director daemon" -msgstr "Servicio Director" +#: src/lib/var.c:2692 +msgid "incomplete quoted pair" +msgstr "par de la cita incompleta" -#: src/tray-monitor/tray-monitor.c:943 -#, c-format -msgid "Connecting to Client %s:%d\n" -msgstr "Conectando con Cliente %s:%d\n" +#: src/lib/var.c:2693 +msgid "lookup function does not support variable arrays" +msgstr "función de búsqueda no soporta conjuntos de variables" -#: src/tray-monitor/tray-monitor.c:944 -#: src/qt-console/tray-monitor/tray-monitor.cpp:366 -#, c-format -msgid "Connecting to Client %s:%d" -msgstr "Conectando con Cliente %s:%d" +#: src/lib/var.c:2694 +msgid "index of array variable contains an invalid character" +msgstr "índice de la variable de matriz contiene un carácter inválido" -#: src/tray-monitor/tray-monitor.c:945 -#: src/qt-console/tray-monitor/tray-monitor.cpp:368 -msgid "File daemon" -msgstr "demonio File" +#: src/lib/var.c:2695 +msgid "index of array variable is incomplete" +msgstr "índice de la variable de matriz está incompleta" -#: src/tray-monitor/tray-monitor.c:950 -#, c-format -msgid "Connecting to Storage %s:%d\n" -msgstr "Conectando con Storage %s:%d\n" +#: src/lib/var.c:2696 +msgid "bracket expression in array variable's index not closed" +msgstr "expresión de corchetes en el índice variable de matriz no cerrado" -#: src/tray-monitor/tray-monitor.c:951 -#: src/qt-console/tray-monitor/tray-monitor.cpp:373 -#, c-format -msgid "Connecting to Storage %s:%d" -msgstr "Conectando con Storage %s:%d" +#: src/lib/var.c:2697 +msgid "division by zero error in index specification" +msgstr "Error de división por cero en especificación del índice" -#: src/tray-monitor/tray-monitor.c:956 src/tray-monitor/tray-monitor.c:994 -#: src/qt-console/tray-monitor/tray-monitor.cpp:379 -#: src/qt-console/tray-monitor/tray-monitor.cpp:409 -#, c-format -msgid "Error, currentitem is not a Client, a Storage or a Director..\n" -msgstr "Error, currentitem no es un cliente, un Storage o un Director..\n" +#: src/lib/var.c:2698 +msgid "unterminated loop construct" +msgstr "no terminado la construcción de bucle" -#: src/tray-monitor/tray-monitor.c:962 -msgid "Cannot connect to daemon.\n" -msgstr "No se puede conectar al demonio.\n" +#: src/lib/var.c:2699 +msgid "invalid character in loop limits" +msgstr "carácter no válido en el bucle de límites" -#: src/tray-monitor/tray-monitor.c:963 -#: src/qt-console/tray-monitor/tray-monitor.cpp:384 -msgid "Cannot connect to daemon." -msgstr "No se puede conectar al demonio" +#: src/lib/var.c:2700 +msgid "malformed operation argument list" +msgstr "lista de argumentos de operación mal formada " -#: src/tray-monitor/tray-monitor.c:975 -#: src/qt-console/tray-monitor/tray-monitor.cpp:393 -#, c-format -msgid "Authentication error : %s" -msgstr "Error de autenticación : %s" +#: src/lib/var.c:2701 +msgid "undefined operation" +msgstr "operación no definida" -#: src/tray-monitor/tray-monitor.c:982 -msgid "Opened connection with Director daemon.\n" -msgstr "Conexión abierta con demonio Director.\n" +#: src/lib/var.c:2702 +msgid "formatting failure" +msgstr "Error de formato" -#: src/tray-monitor/tray-monitor.c:983 -#: src/qt-console/tray-monitor/tray-monitor.cpp:400 -msgid "Opened connection with Director daemon." -msgstr "Conexión abierta con demonio Director." +#: src/lib/var.c:2711 +msgid "unknown error" +msgstr "error desconocido" -#: src/tray-monitor/tray-monitor.c:986 -msgid "Opened connection with File daemon.\n" -msgstr "Conexión abierta con demonio File.\n" +#: src/lib/util.c:168 src/dird/ua_status.c:1080 src/lib/status.h:102 +msgid "Created" +msgstr "Creado" -#: src/tray-monitor/tray-monitor.c:987 -#: src/qt-console/tray-monitor/tray-monitor.cpp:403 -msgid "Opened connection with File daemon." -msgstr "Conexión abierta con demonio File." +#: src/lib/util.c:171 +msgid "Running" +msgstr "Ejecutando" -#: src/tray-monitor/tray-monitor.c:990 -msgid "Opened connection with Storage daemon.\n" -msgstr "Conexión abierta con demonio Storage.\n" +#: src/lib/util.c:174 +msgid "Blocked" +msgstr "Bloqueado" -#: src/tray-monitor/tray-monitor.c:991 -#: src/qt-console/tray-monitor/tray-monitor.cpp:406 -msgid "Opened connection with Storage daemon." -msgstr "Conexión abierta con demonio Storage." +#: src/lib/util.c:181 src/lib/util.c:316 src/lib/util.c:463 +#: src/dird/ua_status.c:1084 src/lib/status.h:106 +msgid "Error" +msgstr "Error" -#: src/tray-monitor/tray-monitor.c:1028 -#, fuzzy -msgid "<< Error: BNET_SUB_PROMPT signal received. >>\n" -msgstr "<< Error: BNET_PROMPT señal recibida. >>\n" +#: src/lib/util.c:184 +msgid "Non-fatal error" +msgstr "No Fatal Error" -#: src/tray-monitor/tray-monitor.c:1033 src/wx-console/console_thread.cpp:494 -msgid "<< Heartbeat signal received, answered. >>\n" -msgstr "<< Heartbeat señal recibida, respondió. >>\n" +#: src/lib/util.c:187 src/lib/util.c:312 src/dird/ua_status.c:1096 +#: src/lib/status.h:118 +msgid "OK -- with warnings" +msgstr "OK - con advertencias" -#: src/tray-monitor/tray-monitor.c:1037 -#, c-format -msgid "<< Unexpected signal received : %s >>\n" -msgstr "<< Inesperada señal recibida: %s >>\n" +#: src/lib/util.c:190 src/lib/util.c:322 +msgid "Canceled" +msgstr "Cancelado" -#: src/tray-monitor/tray-monitor.c:1042 -msgid "\n" -msgstr "\n" +#: src/lib/util.c:193 +msgid "Verify differences" +msgstr "Verificar diferencias" -#: src/tray-monitor/tray-monitor.c:1046 -#: src/qt-console/tray-monitor/tray-monitor.cpp:457 -msgid "Error : BNET_HARDEOF or BNET_ERROR" -msgstr "Error: BNET_HARDEOF o BNET_ERROR" +#: src/lib/util.c:196 +msgid "Waiting on FD" +msgstr "Esperando al FD" -#: src/tray-monitor/tray-monitor.c:1052 -msgid "\n" -msgstr "\n" +#: src/lib/util.c:199 +msgid "Wait on SD" +msgstr "Espere al SD" -#: src/tray-monitor/tray-monitor.c:1056 -#: src/qt-console/tray-monitor/tray-monitor.cpp:466 -msgid "Error : Connection closed." -msgstr "Error : Conexión cerrada." +#: src/lib/util.c:202 +msgid "Wait for new Volume" +msgstr "Espere por un nuevo Volumen" -#: src/tray-monitor/authenticate.c:88 -#: src/qt-console/tray-monitor/authenticate.cpp:87 -#, fuzzy -msgid "" -"Director authorization problem.\n" -"Most likely the passwords do not agree.\n" -"Please see " -msgstr "" -"Director problema de autorización.\n" -"Lo mas probable es que las contraseñas no están de acuerdo.\n" -"Por favor vea http://www.bacula.org/en/rel-manual/Bacula_Freque_Asked_Questi." -"html#SECTION003760000000000000000 para ayuda.\n" +#: src/lib/util.c:205 +msgid "Waiting for mount" +msgstr "Esperando por montaje" -#: src/tray-monitor/authenticate.c:97 src/console/authenticate.c:152 -#: src/qt-console/tray-monitor/authenticate.cpp:96 -#, c-format -msgid "Bad response to Hello command: ERR=%s\n" -msgstr "mala respuesta al comando Hello: ERR=%s\n" +#: src/lib/util.c:208 +msgid "Waiting for Storage resource" +msgstr "Esperando al recurso Storage" -#: src/tray-monitor/authenticate.c:104 src/wx-console/authenticate.c:157 -#: src/console/authenticate.c:159 -#: src/qt-console/tray-monitor/authenticate.cpp:103 -msgid "Director rejected Hello command\n" -msgstr "Director rechazo comando Hello\n" +#: src/lib/util.c:211 +msgid "Waiting for Job resource" +msgstr "Esperando al recurso Job" -#: src/tray-monitor/authenticate.c:138 -#: src/qt-console/tray-monitor/authenticate.cpp:137 -#, fuzzy -msgid "" -"Director and Storage daemon passwords or names not the same.\n" -"Please see " -msgstr "Nombres o contraseñas en el Director o Storage no son las mismas.\n" +#: src/lib/util.c:214 +msgid "Waiting for Client resource" +msgstr "Esperando al recurso Cliente" -#: src/tray-monitor/authenticate.c:145 -#: src/qt-console/tray-monitor/authenticate.cpp:144 -#, c-format -msgid "bdird\n" -" -b specify a bootstrap file\n" -" -c specify a Storage configuration file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -e exclude list\n" -" -i include list\n" -" -j list jobs\n" -" -k list blocks\n" -" (no j or k option) list saved files\n" -" -L dump label\n" -" -p proceed inspite of errors\n" -" -v be verbose\n" -" -V specify Volume names (separated by |)\n" -" -? print this message\n" -"\n" -msgstr "" -"\n" -"Versión: %s (%s)\n" -"\n" -"Utilice: bls [opciones] \n" -" -b especifica un archivo bootstrap\n" -" -c especifica un archivo Storage de configuración\n" -" -d establece nivel de depuración para \n" -" -dt imprime timestamp en salida de depuración\n" -" -e lista de exclusión\n" -" -i lista de inclusión\n" -" -j lista de trabajos\n" -" -k lista de bloques\n" -" (no j o k opción) lista de archivos guardados\n" -" -L dump label\n" -" -p proceder a pesar de los errores\n" -" -v detallado\n" -" -V especifica nombres de Volumen (separados por |)\n" -" -? imprime esta mensaje\n" -"\n" +#: src/lib/util.c:353 +msgid "Restore" +msgstr "Restaurar" -#: src/stored/bls.c:149 src/stored/bextract.c:146 -#, c-format -msgid "Could not open exclude file: %s, ERR=%s\n" -msgstr "No se pudo abrir archivo excluir: %s, ERR=%s\n" +#: src/lib/util.c:356 +msgid "Console" +msgstr "Consola" -#: src/stored/bls.c:164 src/stored/bextract.c:161 -#, c-format -msgid "Could not open include file: %s, ERR=%s\n" -msgstr "No se pudo abrir archivo incluir: %s, ERR=%s\n" +#: src/lib/util.c:359 +msgid "System or Console" +msgstr "Sistema o Consola" -#: src/stored/bls.c:211 -msgid "No archive name specified\n" -msgstr "Nombre de archivo no especificado\n" +#: src/lib/util.c:362 +msgid "Admin" +msgstr "Admin" -#: src/stored/bls.c:247 -#, c-format -msgid "" -"\n" -"Warning, this Volume is a continuation of Volume %s\n" -msgstr "" -"\n" -"Advertencia, este Volumen es una continuación del Volumen %s\n" +#: src/lib/util.c:365 src/lib/util.c:455 +msgid "Archive" +msgstr "Archivo" -#: src/stored/bls.c:290 -#, c-format -msgid "Got EOM at file %u on device %s, Volume \"%s\"\n" -msgstr "Obtuvo EOM en archivo %u en el dispositivo %s, Volumen \"%s\"\n" +#: src/lib/util.c:368 +msgid "Job Copy" +msgstr "Job de Copia" -#: src/stored/bls.c:301 -#, c-format -msgid "Mounted Volume \"%s\".\n" -msgstr "Volumen Montado \"%s\".\n" +#: src/lib/util.c:371 +msgid "Copy" +msgstr "Copiar" -#: src/stored/bls.c:303 -#, c-format -msgid "End of file %u on device %s, Volume \"%s\"\n" -msgstr "Fin de archivo %u en el dispositivo %s, Volumen \"%s\"\n" +#: src/lib/util.c:374 +msgid "Migrate" +msgstr "Migrar" -#: src/stored/bls.c:327 -#, c-format -msgid "" -"File:blk=%u:%u blk_num=%u blen=%u First rec FI=%s SessId=%u SessTim=%u Strm=" -"%s rlen=%d\n" -msgstr "" -"Archivo:blk=%u:%u blk_num=%u blen=%u Primer registro FI=%s SessId=%u SessTim=" -"%u Strm=%s rlen=%d\n" +#: src/lib/util.c:377 +msgid "Scan" +msgstr "Escanear" -#: src/stored/bls.c:336 -#, c-format -msgid "Block: %d size=%d\n" -msgstr "Bloque: %d tamaño=%d\n" +#: src/lib/util.c:381 +msgid "Unknown Type" +msgstr "Tipo Desconocido" -#: src/stored/bls.c:386 src/stored/bextract.c:328 src/stored/bscan.c:688 -msgid "Cannot continue.\n" -msgstr "No se puede continuar.\n" +#: src/lib/util.c:391 +msgid "Truncate" +msgstr "Truncar" -#: src/stored/bls.c:388 -msgid "Attrib unpack error!\n" -msgstr "" +#: src/lib/util.c:394 src/filed/restore.c:1164 +msgid "None" +msgstr "Ninguno" -#: src/stored/bls.c:399 -#, c-format -msgid "FileIndex=%d VolSessionId=%d VolSessionTime=%d Stream=%d DataLen=%d\n" -msgstr "FileIndex=%d VolSessionId=%d VolSessionTime=%d Stream=%d DataLen=%d\n" +#: src/lib/util.c:408 +msgid "Base" +msgstr "Base" -#: src/stored/bls.c:425 src/stored/read_record.c:414 src/stored/bcopy.c:330 -msgid "Fresh Volume Label" -msgstr "Nueva Etiqueta de Volumen" +#: src/lib/util.c:411 src/lib/util.c:457 src/dird/ua_run.c:1147 +msgid "Full" +msgstr "Completo" -#: src/stored/bls.c:428 src/stored/read_record.c:417 src/stored/bcopy.c:333 -msgid "Volume Label" -msgstr "Etiqueta de Volumen" +#: src/lib/util.c:414 src/dird/ua_run.c:1148 +msgid "Incremental" +msgstr "Incremental" -#: src/stored/bls.c:432 src/stored/label.c:1028 src/stored/bcopy.c:337 -msgid "Begin Job Session" -msgstr "Inicio Job Sesión" +#: src/lib/util.c:417 src/dird/ua_run.c:1149 +msgid "Differential" +msgstr "Diferencial" -#: src/stored/bls.c:437 src/stored/label.c:1031 src/stored/bcopy.c:341 -msgid "End Job Session" -msgstr "Fin Job Sesión" +#: src/lib/util.c:420 src/dird/ua_run.c:1150 +msgid "Since" +msgstr "Desde" -#: src/stored/bls.c:441 src/stored/bcopy.c:346 -msgid "End of Medium" -msgstr "Fin de Medio" +#: src/lib/util.c:423 src/dird/ua_run.c:1177 +msgid "Verify Catalog" +msgstr "Verificar Catálogo" -#: src/stored/bls.c:444 -#, fuzzy -msgid "End of Physical Medium" -msgstr "Fin de Medio" +#: src/lib/util.c:426 +msgid "Verify Init Catalog" +msgstr "Verificar Catálogo Inicial" -#: src/stored/bls.c:447 -msgid "Start of object" -msgstr "" +#: src/lib/util.c:429 src/dird/ua_run.c:1178 +msgid "Verify Volume to Catalog" +msgstr "Verificar volumen de catalogo" -#: src/stored/bls.c:450 -#, fuzzy -msgid "End of object" -msgstr "Fin de la Cinta" +#: src/lib/util.c:432 src/dird/ua_run.c:1179 +msgid "Verify Disk to Catalog" +msgstr "Verificar disco de catalogo" -#: src/stored/bls.c:453 src/stored/label.c:1040 src/stored/bcopy.c:349 -msgid "Unknown" -msgstr "Desconocido" +#: src/lib/util.c:435 +msgid "Verify Data" +msgstr "Verificar Datos" -#: src/stored/bls.c:460 src/stored/read_record.c:435 src/stored/bcopy.c:355 -#, c-format -msgid "%s Record: VolSessionId=%d VolSessionTime=%d JobId=%d DataLen=%d\n" -msgstr "%s Registro: VolSessionId=%d VolSessionTime=%d JobId=%d DataLen=%d\n" +#: src/lib/util.c:438 +msgid "Virtual Full" +msgstr "Virtual completa" -#: src/stored/bls.c:479 src/stored/bextract.c:612 src/stored/bcopy.c:373 -#: src/stored/bscan.c:1374 src/stored/btape.c:3050 -#, c-format -msgid "Mount Volume \"%s\" on device %s and press return when ready: " -msgstr "" -"Monte Volumen \"%s\" en el dispositivo %s y presione ENTER cuando esté " -"preparado:" +#: src/lib/util.c:444 +msgid "Unknown Job Level" +msgstr "Nivel del Job desconocido" -#: src/stored/dircmd.c:155 -#, c-format -msgid "Connection request from %s failed.\n" -msgstr "Fallo solicitud de conexión desde %s.\n" +#: src/lib/util.c:454 +msgid "Append" +msgstr "Añadir" -#: src/stored/dircmd.c:166 -#, c-format -msgid "Invalid connection from %s. Len=%d\n" -msgstr "Inválida conexión desde %s. Len=%d\n" +#: src/lib/util.c:456 +msgid "Disabled" +msgstr "Inhabilitado" -#: src/stored/dircmd.c:210 src/filed/authenticate.c:208 -msgid "Unable to authenticate Director\n" -msgstr "No se puede autentificar el Director\n" +#: src/lib/util.c:458 +msgid "Used" +msgstr "Usado" -#: src/stored/dircmd.c:299 -#, c-format -msgid "3991 Bad setdebug command: %s\n" -msgstr "3991 Malo comando setdebug: %s\n" +#: src/lib/util.c:459 +msgid "Cleaning" +msgstr "Limpieza" -#: src/stored/dircmd.c:326 -msgid "3903 Error scanning cancel command.\n" -msgstr "3903 Error escaneando comando cancel.\n" +#: src/lib/util.c:460 +msgid "Purged" +msgstr "Purga" -#: src/stored/dircmd.c:330 -#, c-format -msgid "3904 Job %s not found.\n" -msgstr "3904 Job %s no encontrado.\n" +#: src/lib/util.c:461 +msgid "Recycle" +msgstr "Reciclar" -#: src/stored/dircmd.c:358 -#, fuzzy, c-format -msgid "3000 JobId=%ld Job=\"%s\" marked to be %s.\n" -msgstr "JobId %s, Job %s marcado para ser cancelado.\n" +#: src/lib/util.c:462 +msgid "Read-Only" +msgstr "Sólo-Lectura" -#: src/stored/dircmd.c:437 src/stored/dircmd.c:812 src/stored/dircmd.c:904 -#: src/stored/dircmd.c:1015 src/stored/dircmd.c:1137 src/stored/dircmd.c:1179 -#, c-format -msgid "3999 Device \"%s\" not found or could not be opened.\n" -msgstr "3999 Dispositivo \"%s\" no encontrado o no pudo ser abierto.\n" +#: src/lib/util.c:474 +msgid "Invalid volume status" +msgstr "Invalido estado de volumen" -#: src/stored/dircmd.c:442 -#, c-format -msgid "3903 Error scanning label command: %s\n" -msgstr "3903 Error escaneando comando cancel: %s\n" +#: src/lib/util.c:736 src/lib/util.c:746 src/lib/util.c:754 src/lib/util.c:761 +#: src/lib/util.c:768 src/lib/util.c:782 src/lib/util.c:792 src/lib/util.c:805 +#: src/lib/util.c:816 src/filed/restore.c:1180 +msgid "*none*" +msgstr "*ninguno*" + +#: src/lib/util.c:854 +msgid "Working directory not defined. Cannot continue.\n" +msgstr "Directorio de trabajo no definido. No se puede continuar.\n" -#: src/stored/dircmd.c:492 -#, fuzzy, c-format -msgid "3910 Unable to open device \"%s\": ERR=%s\n" -msgstr "3910 No se puede abrir el dispositivo %s: ERR=%s\n" +#: src/lib/util.c:857 +#, c-format +msgid "Working Directory: \"%s\" not found. Cannot continue.\n" +msgstr "Directorio de Trabajo: \"%s\" no encontrado. No se puede continuar.\n" -#: src/stored/dircmd.c:509 +#: src/lib/util.c:861 #, c-format -msgid "3920 Cannot label Volume because it is already labeled: \"%s\"\n" +msgid "Working Directory: \"%s\" is not a directory. Cannot continue.\n" msgstr "" -"3920 No se puede etiquetar el volumen porque ya está etiquetado: \"%s\"\n" +"Directorio de Trabajo: \"%s\" no es un directorio. No se puede continuar.\n" -#: src/stored/dircmd.c:516 -msgid "3921 Wrong volume mounted.\n" -msgstr "3921 Volumen incorrecto montado.\n" +#: src/lib/devlock.c:318 src/lib/save/devlock.c:337 +#, fuzzy +msgid "writeunlock called too many times.\n" +msgstr "rwl_writeunlock llamado muchas veces.\n" -#: src/stored/dircmd.c:520 -msgid "3922 Cannot relabel an ANSI/IBM labeled Volume.\n" -msgstr "3922 No se puede renombrar un volumen ANSI/IBM etiquetado.\n" +#: src/lib/devlock.c:323 src/lib/save/devlock.c:342 +#, fuzzy +msgid "writeunlock by non-owner.\n" +msgstr "rwl_writeunlock por no-propietario.\n" -#: src/stored/dircmd.c:528 +#: src/lib/devlock.c:489 src/lib/save/devlock.c:508 src/lib/rwlock.c:425 #, c-format -msgid "3912 Failed to label Volume: ERR=%s\n" -msgstr "3912 Fallo al etiquetar el Volumen: ERR=%s\n" +msgid "Thread %d found unchanged elements %d times\n" +msgstr "Hilo %d encontró elementos sin cambios %d veces\n" -#: src/stored/dircmd.c:538 +#: src/lib/devlock.c:559 src/lib/save/devlock.c:578 src/lib/rwlock.c:495 #, c-format -msgid "3914 Failed to label Volume (no media): ERR=%s\n" -msgstr "3914 No se ha podido etiquetar el volumen (no hay medios): ERR=%s\n" +msgid "%02d: interval %d, writes %d, reads %d\n" +msgstr "%02d: intervalo %d, escritos %d, leídos %d\n" -#: src/stored/dircmd.c:541 +#: src/lib/devlock.c:569 src/lib/save/devlock.c:588 src/lib/rwlock.c:505 #, c-format -msgid "3913 Cannot label Volume. Unknown status %d from read_volume_label()\n" -msgstr "" -"3913 No se puede etiquetar el volumen. Estado desconocido %d de " -"read_volume_label()\n" +msgid "data %02d: value %d, %d writes\n" +msgstr "datos %02d: valor %d, %d escritos\n" -#: src/stored/dircmd.c:578 +#: src/lib/devlock.c:574 src/lib/save/devlock.c:593 src/lib/rwlock.c:510 #, c-format -msgid "3001 Mounted Volume: %s\n" -msgstr "3001 Volumen Montado: %s\n" +msgid "Total: %d thread writes, %d data writes\n" +msgstr "Total: %d hilos escritos, %d datos escritos\n" -#: src/stored/dircmd.c:582 src/stored/dircmd.c:1215 -#, fuzzy, c-format -msgid "" -"3902 Cannot mount Volume on Storage Device \"%s\" because:\n" -"%s" -msgstr "" -"3902 No se puede montar el volumen en Storage Device %s debido a que:\n" -"%s" +#: src/lib/devlock.c:646 src/lib/save/devlock.c:665 src/lib/rwlock.c:582 +msgid "Try write lock" +msgstr "Intente escribir bloqueo" -#: src/stored/dircmd.c:696 -msgid "Specified slot ignored. " -msgstr "Ranura especificado ignorado." +#: src/lib/devlock.c:652 src/lib/save/devlock.c:671 src/lib/rwlock.c:588 +msgid "Try read lock" +msgstr "Intente leer bloqueo" -#: src/stored/dircmd.c:712 src/stored/dircmd.c:770 -#, fuzzy, c-format -msgid "3901 Unable to open device \"%s\": ERR=%s\n" -msgstr "3901 No se puede abrir el dispositivo %s: ERR=%s\n" +#: src/lib/devlock.c:708 src/lib/save/devlock.c:727 src/lib/rwlock.c:644 +msgid "Create thread" +msgstr "Crear hilo" -#: src/stored/dircmd.c:732 src/stored/dircmd.c:761 -#, fuzzy, c-format -msgid "3001 Device \"%s\" is mounted with Volume \"%s\"\n" -msgstr "3001 Dispositivo %s esta montado con volumen \"%s\"\n" +#: src/lib/devlock.c:718 src/lib/save/devlock.c:737 src/lib/rwlock.c:654 +msgid "Join thread" +msgstr "Unir hilo" -#: src/stored/dircmd.c:735 src/stored/dircmd.c:764 src/stored/dircmd.c:779 -#, fuzzy, c-format -msgid "" -"3905 Device \"%s\" open but no Bacula volume is mounted.\n" -"If this is not a blank tape, try unmounting and remounting the Volume.\n" +#: src/lib/devlock.c:720 src/lib/save/devlock.c:739 src/lib/rwlock.c:656 +#, c-format +msgid "%02d: interval %d, updates %d, r_collisions %d, w_collisions %d\n" msgstr "" -"3905 Dispositivo %s abierto, pero ninguno volumen Bacula está montado.\n" -"Si esto no es una cinta en blanco, trate de desmontar y volver a montar el " -"volumen.\n" +"%02d: intervalo %d, actualizados %d, r_collisions %d, w_collisions %d\n" -#: src/stored/dircmd.c:745 -#, fuzzy, c-format -msgid "3001 Device \"%s\" is doing acquire.\n" -msgstr "3001% s dispositivo está haciendo adquirir.\n" +#: src/lib/devlock.c:732 src/lib/save/devlock.c:751 src/lib/rwlock.c:668 +#, c-format +msgid "data %02d: value %d, %d updates\n" +msgstr "datos %02d: valor %d, %d actualizados\n" -#: src/stored/dircmd.c:750 src/stored/dircmd.c:875 -#, fuzzy, c-format -msgid "3903 Device \"%s\" is being labeled.\n" -msgstr "3903 Dispositivo %s ha sido etiquetada.\n" +#: src/lib/jcr.c:222 +msgid "Verifying" +msgstr "Verificando" -#: src/stored/dircmd.c:776 -#, fuzzy, c-format -msgid "3001 Device \"%s\" is already mounted with Volume \"%s\"\n" -msgstr "3001 Dispositivo %s ya está montado con el volumen \"%s\"\n" +#: src/lib/jcr.c:224 +msgid "Restoring" +msgstr "Restaurando" -#: src/stored/dircmd.c:788 -#, fuzzy, c-format -msgid "3002 Device \"%s\" is mounted.\n" -msgstr "3002 Dispositivo %s está montado.\n" +#: src/lib/jcr.c:226 +msgid "Archiving" +msgstr "Archivando" -#: src/stored/dircmd.c:790 src/stored/dircmd.c:847 src/stored/dircmd.c:863 -#: src/stored/dircmd.c:895 -#, c-format -msgid "3907 %s" -msgstr "3907 %s" +#: src/lib/jcr.c:228 +msgid "Copying" +msgstr "Copiando" -#: src/stored/dircmd.c:793 -#, fuzzy, c-format -msgid "3906 File device \"%s\" is always mounted.\n" -msgstr "3906 Dispositivo de Archivo %s está siempre montado.\n" +#: src/lib/jcr.c:230 +msgid "Migration" +msgstr "Migración" -#: src/stored/dircmd.c:802 -#, fuzzy, c-format -msgid "3930 Device \"%s\" is being released.\n" -msgstr "3903 Dispositivo %s ha sido etiquetada.\n" +#: src/lib/jcr.c:232 +msgid "Scanning" +msgstr "Escaneando" -#: src/stored/dircmd.c:806 -#, fuzzy, c-format -msgid "3905 Unknown wait state %d\n" -msgstr "Estado del Analizador %d desconocido\n" +#: src/lib/jcr.c:234 +msgid "Unknown operation" +msgstr "Operación desconocida" -#: src/stored/dircmd.c:816 -#, c-format -msgid "3909 Error scanning mount command: %s\n" -msgstr "3909 Error escaneando comando mount: %s\n" +#: src/lib/jcr.c:243 +msgid "backup" +msgstr "backup" -#: src/stored/dircmd.c:844 src/stored/dircmd.c:897 -#, fuzzy, c-format -msgid "3002 Device \"%s\" unmounted.\n" -msgstr "3002 Dispositivo %s desmontado.\n" +#: src/lib/jcr.c:245 +msgid "verified" +msgstr "verificado" -#: src/stored/dircmd.c:851 -#, fuzzy, c-format -msgid "3901 Device \"%s\" is already unmounted.\n" -msgstr "3901 Dispositivos %s ya está desmontado.\n" +#: src/lib/jcr.c:245 +msgid "verify" +msgstr "verificar" -#: src/stored/dircmd.c:866 -#, fuzzy, c-format -msgid "3001 Device \"%s\" unmounted.\n" -msgstr "3001 Dispositivo %s desmontado.\n" +#: src/lib/jcr.c:247 +msgid "restored" +msgstr "restaurado" -#: src/stored/dircmd.c:871 -#, fuzzy, c-format -msgid "3902 Device \"%s\" is busy in acquire.\n" -msgstr "3902 Dispositivo %s está ocupado en adquirir.\n" +#: src/lib/jcr.c:247 +msgid "restore" +msgstr "restaurar" -#: src/stored/dircmd.c:909 -#, c-format -msgid "3907 Error scanning unmount command: %s\n" -msgstr "3907 Error escaneando comando unmount: %s\n" +#: src/lib/jcr.c:249 +msgid "archived" +msgstr "archivado" -#: src/stored/dircmd.c:937 -msgid "3916 Error scanning action_on_purge command\n" -msgstr "3916 Error de escaneando comando action_on_purge\n" +#: src/lib/jcr.c:249 +msgid "archive" +msgstr "archivo" -#: src/stored/dircmd.c:980 -#, fuzzy, c-format -msgid "3921 Device \"%s\" already released.\n" -msgstr "3921 Dispositivo %s ya liberado.\n" +#: src/lib/jcr.c:251 +msgid "copied" +msgstr "copiado" -#: src/stored/dircmd.c:987 -#, fuzzy, c-format -msgid "3922 Device \"%s\" waiting for sysop.\n" -msgstr "3922 Dispositivo %s aguardando por sysop.\n" +#: src/lib/jcr.c:251 +msgid "copy" +msgstr "copia" -#: src/stored/dircmd.c:993 -#, fuzzy, c-format -msgid "3922 Device \"%s\" waiting for mount.\n" -msgstr "3922 Dispositivo %s aguardando por montar.\n" +#: src/lib/jcr.c:253 +msgid "migrated" +msgstr "migrado" -#: src/stored/dircmd.c:997 -#, fuzzy, c-format -msgid "3923 Device \"%s\" is busy in acquire.\n" -msgstr "3923 Dispositivo %s está ocupado en adquirir.\n" +#: src/lib/jcr.c:253 +msgid "migrate" +msgstr "migrar" -#: src/stored/dircmd.c:1001 -#, fuzzy, c-format -msgid "3914 Device \"%s\" is being labeled.\n" -msgstr "3914 Dispositivo %s ha sido etiquetada.\n" +#: src/lib/jcr.c:255 +msgid "scanned" +msgstr "escaneado" -#: src/stored/dircmd.c:1009 -#, fuzzy, c-format -msgid "3022 Device \"%s\" released.\n" -msgstr "3022 Dispositivo %s liberado.\n" +#: src/lib/jcr.c:255 +msgid "scan" +msgstr "escanear" -#: src/stored/dircmd.c:1020 -#, c-format -msgid "3927 Error scanning release command: %s\n" -msgstr "3927 Error escaneando comando de liberación: %s\n" +#: src/lib/jcr.c:257 +msgid "unknown action" +msgstr "acción desconocida" -#: src/stored/dircmd.c:1049 src/filed/job.c:1535 +#: src/lib/jcr.c:309 src/lib/lockmgr.c:301 src/lib/lockmgr.c:756 +#: src/lib/lockmgr.c:784 #, c-format -msgid "Could not create bootstrap file %s: ERR=%s\n" -msgstr "No se pudo crear el archivo de arranque %s: ERR=%s\n" +msgid "pthread key create failed: ERR=%s\n" +msgstr "fallo crear clave pthread: ERR=%s\n" -#: src/stored/dircmd.c:1062 -msgid "Error parsing bootstrap file.\n" -msgstr "Error analizando archivo bootstrap.\n" +#: src/lib/jcr.c:331 +#, c-format +msgid "pthread_once failed. ERR=%s\n" +msgstr "fallo pthread_once. ERR=%s\n" -#: src/stored/dircmd.c:1124 -#, fuzzy, c-format -msgid "3998 Device \"%s\" is not an autochanger.\n" -msgstr "3995 Dispositivo %s no es un auto-cargador.\n" +#: src/lib/jcr.c:338 +#, c-format +msgid "Could not init msg_queue mutex. ERR=%s\n" +msgstr "No se pudo iniciar msg_queue mutex. ERR=%s\n" -#: src/stored/dircmd.c:1141 -#, fuzzy, c-format -msgid "3908 Error scanning autochanger drives/list/slots command: %s\n" -msgstr "3908 Error comando scanning auto-cambiador drives/list/ranuras: %s\n" +#: src/lib/jcr.c:392 +msgid "NULL jcr.\n" +msgstr "NULL jcr.\n" -#: src/stored/dircmd.c:1183 +#: src/lib/jcr.c:496 #, c-format -msgid "3909 Error scanning readlabel command: %s\n" -msgstr "3909 Error comando scanning readlabel: %s\n" +msgid "JCR use_count=%d JobId=%d\n" +msgstr "JCR use_count=%d JobId=%d\n" -#: src/stored/dircmd.c:1211 +#: src/lib/jcr.c:601 #, c-format -msgid "3001 Volume=%s Slot=%d\n" -msgstr "3001 Volumen=%s Ranura=%d\n" - -#: src/stored/dircmd.c:1243 -#, fuzzy, c-format -msgid "3931 Device \"%s\" is BLOCKED. user unmounted.\n" -msgstr "3931 Dispositivo %s está BLOQUEADO. Usuario sin montar.\n" +msgid "pthread_setspecific failed: ERR=%s\n" +msgstr "fallo pthread_setspecific: ERR=%s\n" -#: src/stored/dircmd.c:1247 -#, fuzzy, c-format +#: src/lib/jcr.c:1082 +#, c-format msgid "" -"3932 Device \"%s\" is BLOCKED. user unmounted during wait for media/mount.\n" +"Watchdog sending kill after %d secs to thread stalled reading Storage " +"daemon.\n" msgstr "" -"3932 Dispositivo %s está BLOQUEADO. Usuario sin montar en espera por medios/" -"montar.\n" - -#: src/stored/dircmd.c:1251 -#, fuzzy, c-format -msgid "3933 Device \"%s\" is BLOCKED waiting for media.\n" -msgstr "3933 Dispositivo %s está BLOQUEADO esperando por media.\n" - -#: src/stored/dircmd.c:1255 -#, fuzzy, c-format -msgid "3934 Device \"%s\" is being initialized.\n" -msgstr "3934 Dispositivo %s se está inicializado.\n" - -#: src/stored/dircmd.c:1259 -#, fuzzy, c-format -msgid "3935 Device \"%s\" is blocked labeling a Volume.\n" -msgstr "3935 Dispositivo %s está BLOQUEADO etiquetando un Volumen.\n" +"Watchdog envío kill después de %d segundos para hilo estancado leyendo " +"demonio Storage.\n" -#: src/stored/dircmd.c:1263 -#, fuzzy, c-format -msgid "3935 Device \"%s\" is blocked for unknown reason.\n" -msgstr "3935 Dispositivo %s está BLOQUEADO por razón desconocida.\n" +#: src/lib/jcr.c:1094 +#, c-format +msgid "" +"Watchdog sending kill after %d secs to thread stalled reading File daemon.\n" +msgstr "" +"Watchdog envío kill después de %d segundos para hilo estancado leyendo " +"demonio File.\n" -#: src/stored/dircmd.c:1268 -#, fuzzy, c-format -msgid "3936 Device \"%s\" is busy reading.\n" -msgstr "3936 Dispositivo %s está ocupado leyendo.\n" +#: src/lib/jcr.c:1106 +#, c-format +msgid "" +"Watchdog sending kill after %d secs to thread stalled reading Director.\n" +msgstr "" +"Watchdog envío kill después de %d segundos para hilo estancado leyendo " +"demonio Director.\n" -#: src/stored/dircmd.c:1271 -#, fuzzy, c-format -msgid "3937 Device \"%s\" is busy with writers=%d reserved=%d.\n" -msgstr "3937 Dispositivo %s está ocupado con %d escritura(s).\n" +#: src/lib/lex.c:77 +#, c-format +msgid "Problem probably begins at line %d.\n" +msgstr "Probablemente comienza el problema en la línea %d\n" -#: src/stored/parse_bsr.c:122 src/stored/parse_bsr.c:126 +#: src/lib/lex.c:82 #, c-format msgid "" -"Bootstrap file error: %s\n" -" : Line %d, col %d of file %s\n" +"Config error: %s\n" +" : line %d, col %d of file %s\n" "%s\n" +"%s" msgstr "" -"Error archivo Bootstrap: %s\n" -" : Linea %d, columna %d del archivo %s\n" +"Error de configuración: %s\n" +" : línea %d, columna %d en el archivo %s\n" "%s\n" +"%s" -#: src/stored/parse_bsr.c:148 +#: src/lib/lex.c:86 #, c-format -msgid "Cannot open bootstrap file %s: %s\n" -msgstr "No se puede abrir el archivo bootstrap %s: %s\n" +msgid "Config error: %s\n" +msgstr "Error de configuración: %s\n" -#: src/stored/parse_bsr.c:279 -#, c-format -msgid "MediaType %s in bsr at inappropriate place.\n" -msgstr "MediaType %s en BSR en el lugar inadecuado.\n" +#: src/lib/lex.c:115 +msgid "Close of NULL file\n" +msgstr "Cierre de archivo NULL\n" -#: src/stored/parse_bsr.c:311 -#, c-format -msgid "Device \"%s\" in bsr at inappropriate place.\n" -msgstr "Dispositivo %s en BSR en el lugar inadecuado.\n" +#: src/lib/lex.c:212 +msgid "" +"get_char: called after EOF. You may have a open double quote without the " +"closing double quote.\n" +msgstr "" +"get_char: llamado después de EOF. Usted puede tener una comilla doble " +"abierta sin el cierre de comillas dobles.\n" -#: src/stored/parse_bsr.c:484 +#: src/lib/lex.c:254 #, c-format -msgid "REGEX '%s' compile error. ERR=%s\n" -msgstr "error de compilación REGEX '%s'. ERR=%s\n" +msgid "Config token too long, file: %s, line %d, begins at line %d\n" +msgstr "" +"Configuración de señal demasiado largo, archivo: %s, línea %d, se inicia en " +"la línea %d\n" -#: src/stored/parse_bsr.c:494 -msgid "JobType not yet implemented\n" -msgstr "JobType aún no se han implementado\n" +#: src/lib/lex.c:278 +msgid "none" +msgstr "ninguno" -#: src/stored/parse_bsr.c:502 -msgid "JobLevel not yet implemented\n" -msgstr "JobLevel aún no se han implementado\n" +#: src/lib/lex.c:279 +msgid "comment" +msgstr "comentario" -#: src/stored/parse_bsr.c:719 -#, c-format -msgid "Slot %d in bsr at inappropriate place.\n" -msgstr "Ranura %d en BSR en el lugar inadecuado.\n" +#: src/lib/lex.c:280 +msgid "number" +msgstr "numero" -#: src/stored/parse_bsr.c:743 -#, c-format -msgid "VolFile : %u-%u\n" -msgstr "VolFile : %u-%u\n" +#: src/lib/lex.c:281 +msgid "ip_addr" +msgstr "ip_addr" -#: src/stored/parse_bsr.c:751 -#, c-format -msgid "VolBlock : %u-%u\n" -msgstr "VolBlock : %u-%u\n" +#: src/lib/lex.c:282 +msgid "identifier" +msgstr "identificar" -#: src/stored/parse_bsr.c:759 -#, c-format -msgid "VolAddr : %llu-%llu\n" -msgstr "VolAddr : %llu-%llu\n" +#: src/lib/lex.c:283 +msgid "string" +msgstr "cadena" -#: src/stored/parse_bsr.c:768 -#, c-format -msgid "FileIndex : %u\n" -msgstr "FileIndex : %u\n" +#: src/lib/lex.c:284 +msgid "quoted_string" +msgstr "quoted_string" -#: src/stored/parse_bsr.c:770 -#, c-format -msgid "FileIndex : %u-%u\n" -msgstr "FileIndex : %u-%u\n" +#: src/lib/lex.c:285 +msgid "include" +msgstr "incluir" -#: src/stored/parse_bsr.c:780 -#, c-format -msgid "JobId : %u\n" -msgstr "JobId : %u\n" +#: src/lib/lex.c:286 +msgid "include_quoted_string" +msgstr "include_quoted_string" -#: src/stored/parse_bsr.c:782 -#, c-format -msgid "JobId : %u-%u\n" -msgstr "JobId : %u-%u\n" +#: src/lib/lex.c:287 +msgid "UTF-8 Byte Order Mark" +msgstr "Marca de Orden de UTF-8 Byte" -#: src/stored/parse_bsr.c:792 -#, c-format -msgid "SessId : %u\n" -msgstr "SessId : %u\n" +#: src/lib/lex.c:288 +msgid "UTF-16le Byte Order Mark" +msgstr "Marca de Orden de UTF-16le Byte" -#: src/stored/parse_bsr.c:794 +#: src/lib/lex.c:326 src/lib/lex.c:332 src/lib/lex.c:343 src/lib/lex.c:349 #, c-format -msgid "SessId : %u-%u\n" -msgstr "SessId : %u-%u\n" +msgid "expected a positive integer number, got: %s" +msgstr "esperaba un numero entero positivo, obtuvo: %s" -#: src/stored/parse_bsr.c:803 -#, c-format -msgid "VolumeName : %s\n" -msgstr "VolumeName : %s\n" +#: src/lib/lex.c:465 +msgid "" +"This config file appears to be in an unsupported Unicode format (UTF-16be). " +"Please resave as UTF-8\n" +msgstr "" +"Este archivo de configuración parece estar en un formato no compatible con " +"Unicode (UTF-16be). Por favor, vuelva a guardar como UTF-8\n" -#: src/stored/parse_bsr.c:804 +#: src/lib/lex.c:611 src/lib/lex.c:639 #, c-format -msgid " MediaType : %s\n" -msgstr "MediaType : %s\n" +msgid "Cannot open included config file %s: %s\n" +msgstr "No se puede abrir el archivo de configuración incluido %s: %s\n" -#: src/stored/parse_bsr.c:805 +#: src/lib/lex.c:698 src/lib/lex.c:755 #, c-format -msgid " Device : %s\n" -msgstr "Dispositivo : %s\n" +msgid "expected an integer or a range, got %s: %s" +msgstr "esperaba un numero entero o un rango, obtuvo %s: %s" -#: src/stored/parse_bsr.c:806 +#: src/lib/lex.c:712 src/lib/lex.c:720 src/lib/lex.c:731 src/lib/lex.c:739 #, c-format -msgid " Slot : %d\n" -msgstr "Ranura : %d\n" +msgid "expected an integer number, got %s: %s" +msgstr "esperaba un numero entero, obtuvo %s: %s" -#: src/stored/parse_bsr.c:815 +#: src/lib/lex.c:769 #, c-format -msgid "Client : %s\n" -msgstr "Cliente : %s\n" +msgid "expected a name, got %s: %s" +msgstr "esperaba un nombre, obtuvo %s: %s" -#: src/stored/parse_bsr.c:823 +#: src/lib/lex.c:773 #, c-format -msgid "Job : %s\n" -msgstr "Job : %s\n" +msgid "name %s length %d too long, max is %d\n" +msgstr "nombre %s longitud %d demasiado largo, el máximo es %d\n" -#: src/stored/parse_bsr.c:831 +#: src/lib/lex.c:781 #, c-format -msgid "SessTime : %u\n" -msgstr "SessTime : %u\n" +msgid "expected a string, got %s: %s" +msgstr "esperaba una cadena, obtuvo %s: %s" -#: src/stored/parse_bsr.c:842 -msgid "BSR is NULL\n" -msgstr "BSR is NULL\n" +#: src/lib/bpipe.c:365 src/lib/bpipe.c:448 +msgid "Program killed by Bacula (timeout)\n" +msgstr "Programa finalizado(killed) por Bacula (timeout) \n" -#: src/stored/parse_bsr.c:846 -#, c-format -msgid "Next : 0x%x\n" -msgstr "Siguiente : 0x%x\n" +#: src/lib/btimers.c:253 +msgid "stop_btimer called with NULL btimer_id\n" +msgstr "stop_btimer llamado con NULL btimer_id\n" -#: src/stored/parse_bsr.c:847 -#, c-format -msgid "Root bsr : 0x%x\n" -msgstr "Root bsr : 0x%x\n" +#: src/lib/bsys.c:133 +#, fuzzy, c-format +msgid "safe_unlink could not compile regex pattern \"%s\" ERR=%s\n" +msgstr "No se ha podido compilar patrón regex \"%s\" ERR=%s\n" -#: src/stored/parse_bsr.c:859 +#: src/lib/bsys.c:333 src/lib/bsys.c:350 src/lib/bsys.c:374 src/lib/bsys.c:387 #, c-format -msgid "count : %u\n" -msgstr "contado : %u\n" +msgid "Out of memory: ERR=%s\n" +msgstr "Fuera de memoria: ERR=%s\n" -#: src/stored/parse_bsr.c:860 -#, c-format -msgid "found : %u\n" -msgstr "encontrado : %u\n" +#: src/lib/bsys.c:429 +msgid "Buffer overflow.\n" +msgstr "Desbordamiento de búfer.\n" -#: src/stored/parse_bsr.c:863 -#, c-format -msgid "done : %s\n" -msgstr "realizado : %s\n" +#: src/lib/bsys.c:495 +msgid "Bad errno" +msgstr "Malo errno" -#: src/stored/parse_bsr.c:864 +#: src/lib/bsys.c:510 #, c-format -msgid "positioning : %d\n" -msgstr "posicionamiento : %d\n" +msgid "Memset for %d bytes at %s:%d\n" +msgstr "Memset para %d bytes en %s:%d\n" -#: src/stored/parse_bsr.c:865 +#: src/lib/bsys.c:540 #, c-format -msgid "fast_reject : %d\n" -msgstr "fast_reject : %d\n" +msgid "Cannot open pid file. %s ERR=%s\n" +msgstr "No se puede abrir el archivo pid. %s ERR=%s\n" -#: src/stored/ansi_label.c:96 +#: src/lib/bsys.c:555 #, c-format -msgid "Read error on device %s in ANSI label. ERR=%s\n" -msgstr "Error de lectura en el dispositivo %s en la etiqueta ANSI. ERR=%s\n" - -#: src/stored/ansi_label.c:106 -msgid "Insane! End of tape while reading ANSI label.\n" -msgstr "Insano! Fin de la cinta mientras leía la etiqueta ANSI.\n" - -#: src/stored/ansi_label.c:132 -msgid "No VOL1 label while reading ANSI/IBM label.\n" -msgstr "Ninguna etiqueta VOL1 al leer etiqueta ANSI/IBM.\n" +msgid "" +"%s is already running. pid=%d\n" +"Check file %s\n" +msgstr "" +"%s ya está en ejecución. pid=%d\n" +"Compruebe el archivo %s\n" -#: src/stored/ansi_label.c:155 +#: src/lib/bsys.c:569 #, c-format -msgid "Wanted ANSI Volume \"%s\" got \"%s\"\n" -msgstr "Buscando volumen ANSI \"%s\" obtuvo \"%s\"\n" - -#: src/stored/ansi_label.c:166 -msgid "No HDR1 label while reading ANSI label.\n" -msgstr "Ninguna etiqueta HDR1 al leer etiqueta ANSI.\n" +msgid "Could not open pid file. %s ERR=%s\n" +msgstr "No se pudo abrir el archivo pid. %s ERR=%s\n" -#: src/stored/ansi_label.c:172 +#: src/lib/bsys.c:680 #, c-format -msgid "ANSI/IBM Volume \"%s\" does not belong to Bacula.\n" -msgstr "Volumen \"%s\" ANSI/IBM, no pertenece a Bacula.\n" - -#: src/stored/ansi_label.c:184 -msgid "No HDR2 label while reading ANSI/IBM label.\n" -msgstr "Ninguna etiqueta HDR2 al leer etiqueta ANSI/IBM.\n" +msgid "Could not create state file. %s ERR=%s\n" +msgstr "No es posible crear el archivo de estado. %s ERR=%s\n" -#: src/stored/ansi_label.c:199 -msgid "Unknown or bad ANSI/IBM label record.\n" -msgstr "Registro de etiqueta ANSI/IBM desconocido o malo.\n" +#: src/lib/bsys.c:699 +#, c-format +msgid "Write final hdr error: ERR=%s\n" +msgstr "Error de escritura HDR final: ERR=%s\n" -#: src/stored/ansi_label.c:207 -msgid "Too many records in while reading ANSI/IBM label.\n" -msgstr "Demasiados registros mientras leía etiqueta ANSI/IBM.\n" +#: src/lib/bsock.c:111 +#, c-format +msgid "" +"Could not connect to %s on %s:%d. ERR=%s\n" +"Retrying ...\n" +msgstr "" +"No se pudo conectar a %s en %s:%d. ERR=%s\n" +"Reintentando ...\n" -#: src/stored/ansi_label.c:307 +#: src/lib/bsock.c:117 #, c-format -msgid "ANSI Volume label name \"%s\" longer than 6 chars.\n" -msgstr "Nombre de etiqueta de Volumen ANSI \"%s\" más de 6 caracteres.\n" +msgid "Unable to connect to %s on %s:%d. ERR=%s\n" +msgstr "No se puede conectar a %s en %s:%d. ERR=%s\n" -#: src/stored/ansi_label.c:333 +#: src/lib/bsock.c:193 #, fuzzy, c-format -msgid "Could not write ANSI VOL1 label. Wanted size=%d got=%d ERR=%s\n" -msgstr "No ha podido escribir etiqueta ANSI VOL1. ERR=%s\n" +msgid "gethostbyname() for host \"%s\" failed: ERR=%s\n" +msgstr "fallo gethostbyname() para la maquina \"%s\": ERR=%s\n" -#: src/stored/ansi_label.c:371 src/stored/ansi_label.c:400 +#: src/lib/bsock.c:225 src/lib/bsock.c:227 #, c-format -msgid "Could not write ANSI HDR1 label. ERR=%s\n" -msgstr "No ha podido escribir etiqueta ANSI HDR1. ERR=%s\n" +msgid "Socket open error. proto=%d port=%d. ERR=%s\n" +msgstr "Error al abrir socket. proto=%d puerto=%d. ERR=%s\n" -#: src/stored/ansi_label.c:376 src/stored/ansi_label.c:407 -msgid "Could not write ANSI HDR1 label.\n" -msgstr "No se puede escribir la etiqueta ANSI HDR1.\n" +#: src/lib/bsock.c:240 src/lib/bsock.c:242 +#, c-format +msgid "Source address bind error. proto=%d. ERR=%s\n" +msgstr "Error al enlazar dirección de origen. proto=%d. ERR=%s\n" -#: src/stored/ansi_label.c:412 +#: src/lib/bsock.c:254 src/lib/bsock.c:293 src/lib/bnet_server.c:212 #, c-format -msgid "Error writing EOF to tape. ERR=%s" -msgstr "Error al escribir EOF a la cinta. ERR=%s" +msgid "Cannot set SO_KEEPALIVE on socket: %s\n" +msgstr "No se puede establecer SO_KEEPALIVE en el socket: %s\n" -#: src/stored/ansi_label.c:417 -msgid "write_ansi_ibm_label called for non-ANSI/IBM type\n" -msgstr "write_ansi_ibm_label llamado para tipo non-ANSI/IBM\n" +#: src/lib/bsock.c:262 +#, fuzzy, c-format +msgid "Cannot set TCP_KEEPIDLE on socket: %s\n" +msgstr "No se puede establecer SO_KEEPIDLE en el socket: %s\n" -#: src/stored/append.c:68 -msgid "DCR is NULL!!!\n" -msgstr "DCR es NULL!!!\n" +#: src/lib/bsock.c:327 +#, c-format +msgid "Could not init bsock mutex. ERR=%s\n" +msgstr "No se pudo iniciar bsock mutex. ERR=%s\n" -#: src/stored/append.c:73 -msgid "DEVICE is NULL!!!\n" -msgstr "DEVICE es NULL!!!\n" +#: src/lib/bsock.c:364 +#, fuzzy +msgid "Socket is closed\n" +msgstr "SDSocket cerrado.\n" -#: src/stored/append.c:83 -msgid "Unable to set network buffer size.\n" -msgstr "No se puede establecer el tamaño del búfer de red.\n" +#: src/lib/bsock.c:370 +#, c-format +msgid "Socket has errors=%d on call to %s:%s:%d\n" +msgstr "" -#: src/stored/append.c:95 src/stored/append.c:104 src/stored/append.c:116 -#: src/stored/askdir.c:340 src/stored/askdir.c:341 -msgid "NULL Volume name. This shouldn't happen!!!\n" -msgstr "Nombre de volumen VACÍO. Esto no debería suceder!\n" +#: src/lib/bsock.c:377 +#, c-format +msgid "Socket is terminated=%d on call to %s:%s:%d\n" +msgstr "" -#: src/stored/append.c:110 src/stored/btape.c:2235 +#: src/lib/bsock.c:385 #, c-format -msgid "Write session label failed. ERR=%s\n" -msgstr "Fallo al escribir la etiqueta de sesión. ERR=%s\n" +msgid "Socket has insane msglen=%d on call to %s:%s:%d\n" +msgstr "" -#: src/stored/append.c:122 +#: src/lib/bsock.c:426 #, c-format -msgid "Network send error to FD. ERR=%s\n" -msgstr "Error de red al enviar a FD. ERR=%s\n" +msgid "Write error sending %d bytes to %s:%s:%d: ERR=%s\n" +msgstr "Error de escritura enviando %d bytes para %s:%s:%d: ERR=%s\n" -#: src/stored/append.c:159 +#: src/lib/bsock.c:432 #, c-format -msgid "Error reading data header from FD. ERR=%s\n" -msgstr "Error al leer datos de cabecera de FD. ERR=%s\n" +msgid "Wrote %d bytes to %s:%s:%d, but only %d accepted.\n" +msgstr "Escribió %d bytes para %s:%s:%d, pero solo %d aceptado.\n" -#: src/stored/append.c:167 +#: src/lib/bsock.c:527 src/lib/bsock.c:588 #, c-format -msgid "Malformed data header from FD: %s\n" -msgstr "Datos de cabecera mal formados desde FD: %s\n" +msgid "Read expected %d got %d from %s:%s:%d\n" +msgstr "Esperaba leer %d obtuvo %d desde %s:%s:%d\n" -#: src/stored/append.c:187 +#: src/lib/bsock.c:547 #, fuzzy, c-format -msgid "FI=%d from FD not positive or sequential=%d\n" -msgstr "Archivo de índice de FD no es positivo o secuencial\n" +msgid "Packet size=%d too big from \"%s:%s:%d. Terminating connection.\n" +msgstr "Tamaño de paquete muy grande de \"%s:%s:%d. Conexión de terminación.\n" -#: src/stored/append.c:235 +#: src/lib/bsock.c:577 #, c-format -msgid "Network error reading from FD. ERR=%s\n" -msgstr "Error al leer la red desde FD. ERR=%s\n" +msgid "Read error from %s:%s:%d: ERR=%s\n" +msgstr "Error de lectura desde %s:%s:%d: ERR=%s\n" -#: src/stored/append.c:265 src/stored/btape.c:2354 -#, c-format -msgid "Error writing end session label. ERR=%s\n" -msgstr "Error escribiendo etiqueta de fin de sesión. ERR=%s\n" +#: src/lib/bsock.c:651 +#, fuzzy, c-format +msgid "fread attr spool error. Wanted=%d got=%d bytes. ERR=%s\n" +msgstr "Error fread attr spool. ERR=%s\n" + +#: src/lib/bsock.c:669 +msgid "fread attr spool I/O error.\n" +msgstr "Error fread attr spool I/O.\n" + +#: src/lib/bsock.c:730 +msgid "Could not malloc BSOCK data buffer\n" +msgstr "No se pudo malloc datos BSOCK buffer.\n" -#: src/stored/append.c:277 src/stored/mac.c:126 src/stored/mac.c:261 -#: src/stored/spool.c:300 +#: src/lib/bsock.c:748 src/lib/bsock.c:767 #, c-format -msgid "Fatal append error on device %s: ERR=%s\n" -msgstr "Error Fatal añadiendo en el dispositivo %s: ERR=%s\n" +msgid "sockopt error: %s\n" +msgstr "error de sockopt: %s\n" -#: src/stored/append.c:279 src/stored/mac.c:128 -msgid "Set ok=FALSE after write_block_to_device.\n" -msgstr "Set ok=FALSE después de write_block_to_device.\n" +#: src/lib/bsock.c:754 src/lib/bsock.c:773 +#, c-format +msgid "Warning network buffer = %d bytes not max size.\n" +msgstr "Alerta, búfer de red=%d bytes no tamaño máximo.\n" -#: src/stored/append.c:308 src/stored/mac.c:151 -#, fuzzy, c-format -msgid "Elapsed time=%02d:%02d:%02d, Transfer rate=%s Bytes/second\n" -msgstr "" -"Tiempo transcurrido de escritura del Job = %02d:%02d:%02d, Tasa de " -"transferencia = %s Bytes/segundo\n" +#: src/lib/bsock.c:793 src/lib/bsock.c:827 +#, c-format +msgid "fcntl F_GETFL error. ERR=%s\n" +msgstr "error F_GETFL fcntl. ERR=%s\n" -#: src/stored/append.c:345 +#: src/lib/bsock.c:799 src/lib/bsock.c:833 src/lib/bsock.c:865 #, c-format -msgid "Error updating file attributes. ERR=%s\n" -msgstr "Error al actualizar los atributos de archivo. ERR=%s\n" +msgid "fcntl F_SETFL error. ERR=%s\n" +msgstr "error F_SETFL fcntl. ERR=%s\n" -#: src/stored/vol_mgr.c:93 +#: src/lib/bsock.c:1065 src/qt-console/bcomm/dircomm_auth.cpp:107 #, c-format -msgid "Unable to initialize volume list lock. ERR=%s\n" -msgstr "No se puede inicializar la lista de bloqueo de volumen. ERR=%s\n" +msgid "Director authorization problem at \"%s:%d\"\n" +msgstr "Problema de autorización de Director en \"%s:%d\"\n" -#: src/stored/label.c:93 +#: src/lib/bsock.c:1072 src/qt-console/bcomm/dircomm_auth.cpp:114 #, c-format -msgid "Couldn't rewind device %s: ERR=%s\n" -msgstr "No se puede rebobinar dispositivo %s: ERR=%s\n" +msgid "" +"Authorization problem: Remote server at \"%s:%d\" did not advertise required " +"TLS support.\n" +msgstr "" +"Problema de autorización: El servidor remoto en \"%s:%d\" no anuncio soporte " +"TLS requiere.\n" -#: src/stored/label.c:110 src/stored/label.c:202 +#: src/lib/bsock.c:1080 src/qt-console/bcomm/dircomm_auth.cpp:122 #, c-format -msgid "Wrong Volume mounted on device %s: Wanted %s have %s\n" +msgid "" +"Authorization problem with Director at \"%s:%d\": Remote server requires " +"TLS.\n" msgstr "" -"Volumen incorrecto montado en el dispositivo %s: Esperaba %s tiene %s\n" +"Problema de autorización con el Director en \"%s:%d\": El servidor remoto " +"requiere TLS.\n" -#: src/stored/label.c:113 src/stored/label.c:190 +#: src/lib/bsock.c:1092 src/qt-console/bcomm/dircomm_auth.cpp:133 #, c-format -msgid "Too many tries: %s" -msgstr "Demasiados intentos: %s" +msgid "TLS negotiation failed with Director at \"%s:%d\"\n" +msgstr "Fallo negociación TLS no con el Director en \"%s:%d\"\n" -#: src/stored/label.c:130 +#: src/lib/bsock.c:1102 src/qt-console/bcomm/dircomm_auth.cpp:145 #, c-format msgid "" -"Requested Volume \"%s\" on %s is not a Bacula labeled Volume, because: ERR=%s" +"Bad response to Hello command: ERR=%s\n" +"The Director at \"%s:%d\" is probably not running.\n" msgstr "" -"Volumen requerido \"%s\" en %s no es un volumen etiquetado Bacula, debido a " -"que: ERR=%s" - -#: src/stored/label.c:135 -msgid "Could not read Volume label from block.\n" -msgstr "No se pudo leer la etiqueta de volumen desde bloque.\n" +"Mala respuesta al comando Hello: ERR=%s\n" +"El director en \"%s:%d\" probablemente no esta corriendo.\n" -#: src/stored/label.c:138 +#: src/lib/bsock.c:1111 src/qt-console/bcomm/dircomm_auth.cpp:154 #, c-format -msgid "Could not unserialize Volume label: ERR=%s\n" -msgstr "No se pudo unserialize etiqueta del Volumen: ERR=%s\n" +msgid "Director at \"%s:%d\" rejected Hello command\n" +msgstr "Director en \"%s:%d\" rechazó comando Hello\n" + +#: src/lib/bsock.c:1121 src/qt-console/bcomm/dircomm_auth.cpp:169 +#, fuzzy, c-format +msgid "" +"Authorization problem with Director at \"%s:%d\"\n" +"Most likely the passwords do not agree.\n" +"If you are using TLS, there may have been a certificate validation error " +"during the TLS handshake.\n" +"Please see " +msgstr "" +"Problema de autorización con el Director en \"%s:%d\"\n" +"Lo mas probable es que las contraseñas no están de acuerdo.\n" +"Si está usando TLS, puede haber habido un error de validación de " +"certificados durante la negociación TLS.\n" +" Por favor vea http://www.bacula.org/en/rel-manual/" +"Bacula_Freque_Asked_Questi.html#SECTION003760000000000000000 para ayuda.\n" + +#: src/lib/parse_conf.c:165 +msgid "***UNKNOWN***" +msgstr "***DESCONOCIDO***" -#: src/stored/label.c:143 +#: src/lib/parse_conf.c:213 src/dird/dird_conf.c:1431 +#: src/qt-console/tray-monitor/tray_conf.cpp:282 #, c-format -msgid "Volume Header Id bad: %s\n" -msgstr "Malo Id de cabecera de Volumen: %s\n" +msgid "Too many items in %s resource\n" +msgstr "Demasiados ítem en recurso %s\n" -#: src/stored/label.c:175 +#: src/lib/parse_conf.c:266 src/lib/parse_conf.c:287 #, c-format -msgid "Volume on %s has wrong Bacula version. Wanted %d got %d\n" -msgstr "" -"Volumen en %s tiene la versión incorrecta de Bacula. Busco %d tiene %d\n" +msgid "expected an =, got: %s" +msgstr "esperaba un =, obtuvo: %s" -#: src/stored/label.c:186 +#: src/lib/parse_conf.c:296 #, c-format -msgid "Volume on %s has bad Bacula label type: %x\n" -msgstr "Volumen en %s tiene una malo tipo de etiqueta Bacula: %x\n" +msgid "Unknown item code: %d\n" +msgstr "Código de ítem desconocido: %d\n" -#: src/stored/label.c:236 src/stored/label.c:397 src/stored/mount.c:463 +#: src/lib/parse_conf.c:336 #, c-format -msgid "Could not reserve volume %s on %s\n" -msgstr "No es posible reservar volumen %s en %s\n" +msgid "message type: %s not found" +msgstr "tipo de mensaje: %s no encontrado" -#: src/stored/label.c:277 +#: src/lib/parse_conf.c:374 #, c-format -msgid "Cannot write Volume label to block for device %s\n" -msgstr "" -"No se puede escribir la etiqueta de volumen para bloquear el dispositivo %s\n" +msgid "Attempt to redefine name \"%s\" to \"%s\"." +msgstr "Intento de redefinir el nombre \"%s\" para \"%s\"." -#: src/stored/label.c:328 src/stored/label.c:426 src/stored/mount.c:218 +#: src/lib/parse_conf.c:466 src/dird/dird_conf.c:1896 #, c-format -msgid "Open device %s Volume \"%s\" failed: ERR=%s\n" -msgstr "Fallo al abrir dispositivo %s Volumen \"%s\": ERR=%s\n" +msgid "Could not find config Resource %s referenced on line %d : %s\n" +msgstr "" +"No se pudo encontrar Recursos de configuración %s referenciado en la línea " +"%d: %s\n" -#: src/stored/label.c:451 +#: src/lib/parse_conf.c:471 #, c-format -msgid "Rewind error on device %s: ERR=%s\n" -msgstr "Error de rebobinado en el dispositivo %s: ERR=%s\n" +msgid "Attempt to redefine resource \"%s\" referenced on line %d : %s\n" +msgstr "Intento de redefinir recurso \"%s\" referenciado en la línea %d: %s\n" -#: src/stored/label.c:458 +#: src/lib/parse_conf.c:507 #, c-format -msgid "Truncate error on device %s: ERR=%s\n" -msgstr "Error al truncar en el dispositivo %s :ERR=%s\n" +msgid "Too many %s directives. Max. is %d. line %d: %s\n" +msgstr "Demasiadas directivas %s. Máximo es %d. linea %d: %s\n" -#: src/stored/label.c:464 +#: src/lib/parse_conf.c:518 #, c-format -msgid "Failed to re-open DVD after truncate on device %s: ERR=%s\n" +msgid "Could not find config Resource \"%s\" referenced on line %d : %s\n" msgstr "" -"No se ha podido re-abrir el DVD después de truncar el dispositivo %s: ERR=" +"No pudo encontrar recurso de configuración \"%s\" referenciado en linea %d : " "%s\n" -#: src/stored/label.c:487 +#: src/lib/parse_conf.c:581 #, c-format -msgid "Unable to write device %s: ERR=%s\n" -msgstr "No es posible escribir el dispositivo %s: ERR=%s\n" +msgid "Missing config Resource \"%s\" referenced on line %d : %s\n" +msgstr "" +"Falta la configuración de Recurso \"%s\" referenciado en linea %d : %s\n" -#: src/stored/label.c:518 +#: src/lib/parse_conf.c:653 #, c-format -msgid "Recycled volume \"%s\" on device %s, all previous data lost.\n" +msgid "expected a size number, got: %s" +msgstr "esperaba un numero de tamaño, obtuvo: %s" + +#: src/lib/parse_conf.c:658 +#, fuzzy, c-format +msgid "expected a speed number, got: %s" +msgstr "esperaba un numero de tamaño, obtuvo: %s" + +#: src/lib/parse_conf.c:669 +#, fuzzy, c-format +msgid "expected a %s, got: %s" +msgstr "esperaba un tamaño, obtuvo: %s" + +#: src/lib/parse_conf.c:670 +msgid "size" msgstr "" -"Volumen \"%s\" reciclado en el dispositivo %s, todos los datos anteriores " -"perdidos.\n" -#: src/stored/label.c:521 -#, c-format -msgid "Wrote label to prelabeled Volume \"%s\" on device %s\n" +#: src/lib/parse_conf.c:670 +msgid "speed" msgstr "" -"Escribió etiqueta de volumen \"%s\" pre-etiquetada en el dispositivo %s\n" -#: src/stored/label.c:721 +#: src/lib/parse_conf.c:724 src/lib/parse_conf.c:730 src/dird/run_conf.c:315 #, c-format -msgid "Bad Volume session label = %d\n" -msgstr "Mala etiqueta de Volumen de sesión = %d\n" +msgid "expected a time period, got: %s" +msgstr "esperaba un periodo de tiempo , obtuvo: %s" -#: src/stored/label.c:776 +#: src/lib/parse_conf.c:749 src/lib/parse_conf.c:765 src/lib/ini.c:590 +#: src/dird/dird_conf.c:1874 src/dird/dird_conf.c:1990 #, c-format -msgid "Expecting Volume Label, got FI=%s Stream=%s len=%d\n" -msgstr "Esperando Etiqueta de Volumen, obtuvo FI=%s Stream=%s len=%d\n" +msgid "Expect %s, got: %s" +msgstr "Esperaba %s, obtuvo: %s" -#: src/stored/label.c:903 +#: src/lib/parse_conf.c:791 #, c-format -msgid "Unknown %d" -msgstr "Desconocido %d" +msgid "Expected a Tape Label keyword, got: %s" +msgstr "esperaba una etiqueta Tape Label , obtuvo: %s" -#: src/stored/label.c:907 +#: src/lib/parse_conf.c:874 #, c-format -msgid "" -"\n" -"Volume Label:\n" -"Id : %sVerNo : %d\n" -"VolName : %s\n" -"PrevVolName : %s\n" -"VolFile : %d\n" -"LabelType : %s\n" -"LabelSize : %d\n" -"PoolName : %s\n" -"MediaType : %s\n" -"PoolType : %s\n" -"HostName : %s\n" -msgstr "" -"\n" -"Volumen Label:\n" -"Id : %sVerNo : %d\n" -"VolName : %s\n" -"PrevVolName : %s\n" -"VolFile : %d\n" -"LabelType : %s\n" -"LabelSize : %d\n" -"PoolName : %s\n" -"MediaType : %s\n" -"PoolType : %s\n" -"HostName : %s\n" +msgid "Unable to initialize resource lock. ERR=%s\n" +msgstr "No se puede inicializar recurso de bloqueo. ERR=%s\n" -#: src/stored/label.c:929 -#, c-format -msgid "Date label written: %s\n" -msgstr "Fecha de etiqueta escrito: %s\n" +#: src/lib/parse_conf.c:882 +msgid "Config filename too long.\n" +msgstr "Nombre de archivo de configuración muy largo.\n" -#: src/stored/label.c:935 +#: src/lib/parse_conf.c:905 #, c-format -msgid "Date label written: %04d-%02d-%02d at %02d:%02d\n" -msgstr "Fecha de etiqueta escrito: %04d-%02d-%02d at %02d:%02d\n" +msgid "Cannot open config file \"%s\": %s\n" +msgstr "No se pudo abrir archivo de configuración \"%s\": %s\n" -#: src/stored/label.c:955 -#, c-format +#: src/lib/parse_conf.c:922 msgid "" -"\n" -"%s Record:\n" -"JobId : %d\n" -"VerNum : %d\n" -"PoolName : %s\n" -"PoolType : %s\n" -"JobName : %s\n" -"ClientName : %s\n" +"Currently we cannot handle UTF-16 source files. Please convert the conf file " +"to UTF-8\n" msgstr "" -"\n" -"%s Registro:\n" -"JobId : %d\n" -"VerNum : %d\n" -"Nombre Pool : %s\n" -"Tipo del Pool : %s\n" -"Nombre del Job : %s\n" -"Nombre del Cliente : %s\n" +"Actualmente no podemos manejar archivos de origen UTF-16 . Por favor, " +"convierta el archivo de configuración a UTF-8\n" -#: src/stored/label.c:968 +#: src/lib/parse_conf.c:926 #, c-format -msgid "" -"Job (unique name) : %s\n" -"FileSet : %s\n" -"JobType : %c\n" -"JobLevel : %c\n" -msgstr "" -"Job (nombre único) : %s\n" -"FileSet : %s\n" -"Tipo de Job : %c\n" -"JobLevel : %c\n" +msgid "Expected a Resource name identifier, got: %s" +msgstr "esperaba un nombre de identificación de Recurso, obtuvo: %s" + +#: src/lib/parse_conf.c:942 +#, c-format +msgid "expected resource name, got: %s" +msgstr "esperaba un nombre de recurso, obtuvo: %s" + +#: src/lib/parse_conf.c:953 +#, c-format +msgid "not in resource definition: %s" +msgstr "no en la definición de recurso: %s" + +#: src/lib/parse_conf.c:964 src/dird/inc_conf.c:388 src/dird/inc_conf.c:732 +#: src/dird/dird_conf.c:2050 +#, c-format +msgid "expected an equals, got: %s" +msgstr "esperaba una igual, obtuvo: %s" -#: src/stored/label.c:977 +#: src/lib/parse_conf.c:978 #, c-format msgid "" -"JobFiles : %s\n" -"JobBytes : %s\n" -"StartBlock : %s\n" -"EndBlock : %s\n" -"StartFile : %s\n" -"EndFile : %s\n" -"JobErrors : %s\n" -"JobStatus : %c\n" +"Keyword \"%s\" not permitted in this resource.\n" +"Perhaps you left the trailing brace off of the previous resource." msgstr "" -"JobFiles : %s\n" -"JobBytes : %s\n" -"StartBlock : %s\n" -"EndBlock : %s\n" -"StartFile : %s\n" -"EndFile : %s\n" -"JobErrors : %s\n" -"JobStatus : %c\n" +"Palabra clave \"%s\" no permitida en este recurso.\n" +"Tal vez a la izquierda de la llave de los recursos anteriores." + +#: src/lib/parse_conf.c:989 +msgid "Name not specified for resource" +msgstr "Nombre no especificado para el recurso" -#: src/stored/label.c:998 +#: src/lib/parse_conf.c:999 #, c-format -msgid "Date written : %s\n" -msgstr "Fecha escrito: %s\n" +msgid "unexpected token %d %s in resource definition" +msgstr "símbolo %d no soporte %s en la definición de los recursos" -#: src/stored/label.c:1003 +#: src/lib/parse_conf.c:1005 #, c-format -msgid "Date written : %04d-%02d-%02d at %02d:%02d\n" -msgstr "Fecha escrito: %04d-%02d-%02d at %02d:%02d\n" +msgid "Unknown parser state %d\n" +msgstr "Estado del Analizador %d desconocido\n" -#: src/stored/label.c:1022 -msgid "Fresh Volume" -msgstr "Volumen fresco" +#: src/lib/parse_conf.c:1010 +msgid "End of conf file reached with unclosed resource." +msgstr "Fin de archivo de configuración alcanzado con recursos sin cerrar." -#: src/stored/label.c:1025 -msgid "Volume" -msgstr "Volumen" +#: src/lib/daemon.c:52 +#, c-format +msgid "Cannot fork to become daemon: ERR=%s\n" +msgstr "No se puede fork para convertirse en demonio: ERR =%s\n" -#: src/stored/label.c:1034 src/stored/read_record.c:428 -msgid "End of Media" -msgstr "Fin de la Media" +#: src/lib/lockmgr.c:53 +#, c-format +msgid "ASSERT failed at %s:%i: %s\n" +msgstr "" -#: src/stored/label.c:1037 -msgid "End of Tape" -msgstr "Fin de la Cinta" +#: src/lib/lockmgr.c:58 +#, c-format +msgid "ASSERT failed at %s:%i: %s \n" +msgstr "" -#: src/stored/label.c:1057 src/stored/label.c:1065 src/stored/label.c:1098 +#: src/lib/lockmgr.c:64 #, c-format -msgid "%s Record: File:blk=%u:%u SessId=%d SessTime=%d JobId=%d DataLen=%d\n" +msgid "ASSERT failed at %s:%i: %s (%s)\n" msgstr "" -"%s Registro: Archivo:blk=%u:%u SessId=%d SessTime=%d JobId=%d DataLen=%d\n" -#: src/stored/label.c:1062 -msgid "End of physical tape.\n" -msgstr "Fin de la cinta física.\n" +#: src/lib/lockmgr.c:95 +#, c-format +msgid "Mutex lock failure. ERR=%s\n" +msgstr "Error bloqueando Mutex. ERR=%s\n" -#: src/stored/label.c:1077 src/stored/label.c:1086 +#: src/lib/lockmgr.c:105 #, c-format -msgid "%s Record: File:blk=%u:%u SessId=%d SessTime=%d JobId=%d\n" -msgstr "Registro %s: Archivo:blk=%u:%u SessId=%d SessTime=%d JobId=%d\n" +msgid "Mutex unlock failure. ERR=%s\n" +msgstr "Error desbloqueando Mutex. ERR=%s\n" -#: src/stored/label.c:1079 +#: src/lib/lockmgr.c:768 #, c-format -msgid " Job=%s Date=%s Level=%c Type=%c\n" -msgstr "Job=%s Fecha=%s Nivel=%c Tipo=%c\n" +msgid "pthread_create failed: ERR=%s\n" +msgstr "pthread_create fallido: ERR=%s\n" -#: src/stored/label.c:1088 +#: src/lib/message.c:417 src/lib/message.c:427 #, c-format -msgid " Date=%s Level=%c Type=%c Files=%s Bytes=%s Errors=%d Status=%c\n" -msgstr "Fecha=%s Nivel=%c Tipo=%c Archivos=%s Bytes=%s Errores=%d Estado=%c\n" +msgid "Could not open console message file %s: ERR=%s\n" +msgstr "No puede abrir el archivo de mensajes de la consola %s: ERR=%s\n" -#: src/stored/status.c:99 -msgid "Used Volume status:\n" -msgstr "Estado de Volumen Usados:\n" +#: src/lib/message.c:432 +#, c-format +msgid "Could not get con mutex: ERR=%s\n" +msgstr "No se pudo obtener con mutex: ERR=%s\n" -#: src/stored/status.c:117 -msgid "" -"\n" -"SD Resources:\n" -msgstr "" +#: src/lib/message.c:537 +msgid "Bacula Message" +msgstr "Bacula Message" -#: src/stored/status.c:153 -msgid "" -"\n" -"Device status:\n" -msgstr "" -"\n" -"Estado del dispositivo:\n" +#: src/lib/message.c:541 +#, c-format +msgid "open mail pipe %s failed: ERR=%s\n" +msgstr "Fallo al abrir tubería de correo %s: ERR=%s\n" + +#: src/lib/message.c:632 +msgid "open mail pipe failed.\n" +msgstr "Fallo al abrir tubería de correo .\n" -#: src/stored/status.c:157 +#: src/lib/message.c:645 #, c-format -msgid "Autochanger \"%s\" with devices:\n" -msgstr "Auto-cambiador \"%s\" con los dispositivos:\n" +msgid "close error: ERR=%s\n" +msgstr "Error al cerrar: ERR=%s\n" -#: src/stored/status.c:177 -#, fuzzy, c-format +#: src/lib/message.c:656 +#, c-format +msgid "Mail prog: %s" +msgstr "Programa de Correo: %s" + +#: src/lib/message.c:665 +#, c-format msgid "" -"\n" -"Device %s is %s:\n" -" Volume: %s\n" -" Pool: %s\n" -" Media type: %s\n" +"Mail program terminated in error.\n" +"CMD=%s\n" +"ERR=%s\n" msgstr "" -"Dispositivo %s está montado con:\n" -" Volumen: %s\n" -" Pool: %s\n" -" Tipo de Media: %s\n" +"Programa de correo terminado en error.\n" +"CMD=%s\n" +"ERR=%s\n" -#: src/stored/status.c:182 -#, fuzzy -msgid "waiting for" -msgstr "Esperando por montaje" +#: src/lib/message.c:770 +#, c-format +msgid "fopen %s failed: ERR=%s\n" +msgstr "fopen %s ha fallado: ERR=%s\n" -#: src/stored/status.c:182 -msgid "mounted with" +#: src/lib/message.c:892 src/lib/message.c:895 +msgid "Msg delivery error: Unable to store data in database.\n" msgstr "" -#: src/stored/status.c:184 -#, fuzzy -msgid "*unknown*" -msgstr "desconocido" - -#: src/stored/status.c:188 +#: src/lib/message.c:947 #, fuzzy, c-format msgid "" -"\n" -"Device %s open but no Bacula volume is currently mounted.\n" -msgstr "Dispositivo %s abierto, pero volumen actual montado no es Bacula.\n" +"Msg delivery error: Operator mail program terminated in error.\n" +"CMD=%s\n" +"ERR=%s\n" +msgstr "" +"Operador de programa de correo terminado en error.\n" +"CMD=%s\n" +"ERR=%s\n" + +#: src/lib/message.c:968 +#, fuzzy, c-format +msgid "Msg delivery error: fopen %s failed: ERR=%s\n" +msgstr "fopen %s ha fallado: ERR=%s\n" -#: src/stored/status.c:199 +#: src/lib/message.c:1287 #, c-format -msgid " Total Bytes=%s Blocks=%s Bytes/block=%s\n" -msgstr "Total de Bytes=%s Bloques=%s Bytes/bloques=%s\n" +msgid "%s: ABORTING due to ERROR in %s:%d\n" +msgstr "%s: ABORTADO debido a un ERROR en %s:%d\n" -#: src/stored/status.c:214 +#: src/lib/message.c:1291 #, c-format -msgid " Total Bytes Read=%s Blocks Read=%s Bytes/block=%s\n" -msgstr "Total de Bytes Leídos=%s Bloques Leídos=%s Bytes/bloque=%s\n" +msgid "%s: ERROR TERMINATION at %s:%d\n" +msgstr "%s: ERROR DE TERMINACIÓN en %s:%d\n" -#: src/stored/status.c:220 +#: src/lib/message.c:1296 #, c-format -msgid " Positioned at File=%s Block=%s\n" -msgstr "Situado en el archivo=%s Bloque=%s\n" +msgid "%s: Fatal Error because: " +msgstr "%s: Error Fatal porque: " -#: src/stored/status.c:227 -#, fuzzy, c-format -msgid "" -"\n" -"Device %s is not open.\n" -msgstr "Dispositivo %s no está abierto.\n" +#: src/lib/message.c:1298 +#, c-format +msgid "%s: Fatal Error at %s:%d because:\n" +msgstr "%s: Error Fatal en %s:%d porque:\n" -#: src/stored/status.c:231 -#, fuzzy, c-format -msgid "" -"\n" -"Device \"%s\" is not open or does not exist.\n" -msgstr "Dispositivo \"%s\" no está abierto o no existe.\n" +#: src/lib/message.c:1302 +#, c-format +msgid "%s: ERROR: " +msgstr "%s: ERROR: " -#: src/stored/status.c:255 -#, fuzzy, c-format -msgid "Daemon started %s. Jobs: run=%d, running=%d.\n" -msgstr "Demonio iniciado %s, %d Job ejecutando desde el inicio.\n" +#: src/lib/message.c:1304 +#, c-format +msgid "%s: ERROR in %s:%d " +msgstr "%s: ERROR en %s:%d " -#: src/stored/status.c:293 -msgid "" -"No DEVICE structure.\n" -"\n" -msgstr "" -"Ninguna estructura del DISPOSITIVO.\n" -"\n" +#: src/lib/message.c:1307 +#, c-format +msgid "%s: Warning: " +msgstr "%s: Advertencia: " -#: src/stored/status.c:299 -msgid " Device is BLOCKED. User unmounted.\n" -msgstr "Dispositivo está BLOQUEADO. Usuario desmontado.\n" +#: src/lib/message.c:1310 +#, c-format +msgid "%s: Security violation: " +msgstr "%s: Violación de seguridad: " -#: src/stored/status.c:303 -msgid " Device is BLOCKED. User unmounted during wait for media/mount.\n" -msgstr "" -" Dispositivo está BLOQUEADO. Usuario desmontado durante espera por media/" -"mount.\n" +#: src/lib/message.c:1398 +#, c-format +msgid "%s ABORTING due to ERROR\n" +msgstr "%s: ABORTADO debido a un ERROR\n" -#: src/stored/status.c:313 +#: src/lib/message.c:1401 #, c-format -msgid "" -" Device is BLOCKED waiting for mount of volume \"%s\",\n" -" Pool: %s\n" -" Media type: %s\n" -msgstr "" -"Dispositivo está BLOQUEADO esperando por montaje de volumen \"%s\",\n" -" Pool: %s\n" -" Tipo de Media: %s\n" +msgid "%s ERROR TERMINATION\n" +msgstr "%s: ERROR DE TERMINACIÓN\n" -#: src/stored/status.c:322 +#: src/lib/message.c:1404 #, c-format -msgid "" -" Device is BLOCKED waiting to create a volume for:\n" -" Pool: %s\n" -" Media type: %s\n" -msgstr "" -"Dispositivo está BLOQUEADO esperando para crear un volumen para:\n" -" Pool: %s\n" -" Tipo de Media: %s\n" +msgid "%s JobId %u: Fatal error: " +msgstr "%s JobId %u: Error Fatal: " -#: src/stored/status.c:333 -msgid " Device is BLOCKED waiting for media.\n" -msgstr "Dispositivo está bloqueado esperando por medios.\n" +#: src/lib/message.c:1413 +#, c-format +msgid "%s JobId %u: Error: " +msgstr "%s JobId %u: Error: " -#: src/stored/status.c:339 -msgid " Device is being initialized.\n" -msgstr "Dispositivo se está inicializando.\n" +#: src/lib/message.c:1419 +#, c-format +msgid "%s JobId %u: Warning: " +msgstr "%s JobId %u: Advertencia: " -#: src/stored/status.c:343 -msgid " Device is blocked labeling a Volume.\n" -msgstr "El dispositivo está bloqueado etiquetando un volumen.\n" +#: src/lib/message.c:1425 +#, c-format +msgid "%s JobId %u: Security violation: " +msgstr "%s JobId %u: Violación de seguridad: " -#: src/stored/status.c:352 -#, fuzzy, c-format -msgid " Slot %d %s loaded in drive %d.\n" -msgstr "Ranura %d esta cargado en la unidad %d.\n" +#: src/lib/message.c:1696 +#, fuzzy +msgid "Debug lock information" +msgstr "Enviando información precisa.\n" -#: src/stored/status.c:356 -#, c-format -msgid " Drive %d is not loaded.\n" -msgstr "Unidad %d no está cargada.\n" +#: src/lib/message.c:1697 +msgid "Debug network information" +msgstr "" -#: src/stored/status.c:371 src/stored/btape.c:688 -#, c-format -msgid "Configured device capabilities:\n" -msgstr "Capacidades del dispositivo configuradas:\n" +#: src/lib/message.c:1698 +msgid "Debug plugin information" +msgstr "" -#: src/stored/status.c:389 -msgid "Device state:\n" -msgstr "Estado del dispositivo:\n" +#: src/lib/message.c:1699 +#, fuzzy +msgid "Debug volume information" +msgstr "Enviando información precisa.\n" + +#: src/lib/message.c:1700 +msgid "Debug SQL queries" +msgstr "" -#: src/stored/status.c:405 -#, fuzzy, c-format -msgid " num_writers=%d reserves=%d block=%d\n" +#: src/lib/message.c:1701 +msgid "Debug BVFS queries" msgstr "" -"num_writers=%d reservado=%d bloque=%d\n" -"\n" -#: src/stored/status.c:409 -#, fuzzy -msgid "Attached Jobs: " +#: src/lib/message.c:1702 +msgid "Debug memory allocation" msgstr "" -"\n" -"Scheduled Jobs:\n" -#: src/stored/status.c:427 src/stored/btape.c:720 -#, c-format -msgid "Device parameters:\n" -msgstr "Parámetros del Dispositivo:\n" +#: src/lib/message.c:1703 +#, fuzzy +msgid "Debug scheduler information" +msgstr "Enviando información precisa.\n" -#: src/stored/status.c:429 -#, fuzzy, c-format -msgid " Archive name: %s Device name: %s\n" -msgstr "Nombre del archivo: %s Nombre del dispositivo: %s\n" +#: src/lib/message.c:1704 +#, fuzzy +msgid "Debug protocol information" +msgstr "Enviando información precisa.\n" -#: src/stored/status.c:432 -#, fuzzy, c-format -msgid " File=%u block=%u\n" -msgstr "Archivo=%u bloque=%u\n" +#: src/lib/message.c:1705 +#, fuzzy +msgid "Debug all information" +msgstr "Enviando información precisa.\n" -#: src/stored/status.c:434 -#, fuzzy, c-format -msgid " Min block=%u Max block=%u\n" -msgstr "Bloque Min=%u Bloque Max=%u\n" +#: src/lib/edit.c:476 +#, fuzzy +msgid "Empty name not allowed.\n" +msgstr "Bloque de direcciones vacío no está permitido" -#: src/stored/status.c:455 +#: src/lib/edit.c:486 #, c-format -msgid "%s Job %s waiting for Client connection.\n" -msgstr "%s Job %s esperando por conexión de cliente.\n" +msgid "Illegal character \"%c\" in name.\n" +msgstr "Carácter ilegal \"%c\" en el nombre.\n" -#: src/stored/status.c:471 +#: src/lib/edit.c:493 +msgid "Name too long.\n" +msgstr "Nombre demasiado largo.\n" + +#: src/lib/edit.c:499 src/dird/ua_label.c:656 src/dird/ua_cmds.c:345 +msgid "Volume name must be at least one character long.\n" +msgstr "Nombre de volumen debe ser de al menos un carácter de largo.\n" + +#: src/lib/tls.c:78 #, c-format msgid "" -"Reading: %s %s job %s JobId=%d Volume=\"%s\"\n" -" pool=\"%s\" device=%s\n" +"Error with certificate at depth: %d, issuer = %s, subject = %s, ERR=%d:%s\n" msgstr "" -"Leyendo: %s %s trabajo %s JobId=%d Volumen=\"%s\"\n" -" pool=\"%s\" dispositivo=%s\n" +"Error con el certificado en profundidad: %d, emisor=%s, asunto=%s, ERR=%d:" +"%s\n" -#: src/stored/status.c:484 -#, c-format +#: src/lib/tls.c:115 +msgid "Error initializing SSL context" +msgstr "Error inicializando contexto SSL" + +#: src/lib/tls.c:136 +msgid "Error loading certificate verification stores" +msgstr "Error al cargar los almacenes de verificación del certificado" + +#: src/lib/tls.c:141 msgid "" -"Writing: %s %s job %s JobId=%d Volume=\"%s\"\n" -" pool=\"%s\" device=%s\n" +"Either a certificate file or a directory must be specified as a verification " +"store\n" msgstr "" -"Escribiendo: %s %s trabajo %s JobId=%d Volumen=\"%s\"\n" -" pool=\"%s\" dispositivo=%s\n" +"Un certificado de archivo o un directorio debe especificarse como un " +"almacenes de verificación\n" -#: src/stored/status.c:495 -#, c-format -msgid " spooling=%d despooling=%d despool_wait=%d\n" -msgstr "encolando=%d desencolando=%d despool_wait=%d\n" +#: src/lib/tls.c:152 +msgid "Error loading certificate file" +msgstr "Error cargando archivos de certificados" -#: src/stored/status.c:511 -#, fuzzy, c-format -msgid " Files=%s Bytes=%s AveBytes/sec=%s LastBytes/sec=%s\n" -msgstr "Archivos=%s Bytes=%s Bytes/sec=%s Errores=%d\n" +#: src/lib/tls.c:160 +msgid "Error loading private key" +msgstr "Error cargando llaves privadas" -#: src/stored/status.c:523 -#, c-format -msgid " FDReadSeqNo=%s in_msg=%u out_msg=%d fd=%d\n" -msgstr " FDReadSeqNo=%s in_msg=%u out_msg=%d fd=%d\n" +#: src/lib/tls.c:168 +msgid "Unable to open DH parameters file" +msgstr "No se puede abrir el archivo de parámetros de DH" -#: src/stored/status.c:529 -msgid " FDSocket closed\n" -msgstr "FDSocket cerrado\n" +#: src/lib/tls.c:174 +msgid "Unable to load DH parameters from specified file" +msgstr "" +"No es posible cargar los parámetros de DH desde el archivo especificado" -#: src/stored/status.c:550 -msgid "" -"\n" -"Jobs waiting to reserve a drive:\n" +#: src/lib/tls.c:178 +msgid "Failed to set TLS Diffie-Hellman parameters" +msgstr "No se pudo establecer parámetros TLS de Diffie-Hellman" + +#: src/lib/tls.c:188 +msgid "Error setting cipher list, no valid ciphers available\n" msgstr "" -"\n" -"Jobs esperando para reservar una unidad:\n" +"Error configurando lista de cipher, no hay ciphers válidos disponibles\n" -#: src/stored/status.c:581 -msgid "===================================================================\n" -msgstr "===================================================================\n" +#: src/lib/tls.c:247 +msgid "Peer failed to present a TLS certificate\n" +msgstr "Par ha fallado al presentar un certificado TLS\n" -#: src/stored/status.c:663 src/lib/util.c:423 src/filed/status.c:517 -msgid "Base" -msgstr "Base" +#: src/lib/tls.c:292 src/lib/tls.c:293 +#, c-format +msgid "Peer %s failed to present a TLS certificate\n" +msgstr "Par %s ha fallado al presentar un certificado TLS\n" -#: src/stored/status.c:680 src/filed/status.c:534 -msgid "Init Catalog" -msgstr "Catálogo de inicio" +#: src/lib/tls.c:408 +msgid "Error creating file descriptor-based BIO" +msgstr "Error al crear archivo descriptor basado en BIO" -#: src/stored/status.c:683 src/filed/status.c:537 -msgid "Volume to Catalog" -msgstr "Volumen para Catalogo" +#: src/lib/tls.c:419 +msgid "Error creating new SSL object" +msgstr "Error creando nuevo objeto SSL" -#: src/stored/status.c:686 src/filed/status.c:540 -msgid "Disk to Catalog" -msgstr "Disco para Catalogo" +#: src/lib/tls.c:483 src/lib/tls.c:506 +msgid "Connect failure" +msgstr "Fallo al conectar" -#: src/stored/status.c:689 src/filed/status.c:543 -msgid "Data" -msgstr "Datos" +#: src/lib/tls.c:586 src/lib/tls.c:590 +msgid "TLS shutdown failure." +msgstr "Error de apagado TLS." -#: src/stored/status.c:695 src/lib/util.c:459 src/filed/status.c:549 -msgid "Unknown Job Level" -msgstr "Nivel del Job desconocido" +#: src/lib/tls.c:645 src/lib/tls.c:671 +msgid "TLS read/write failure." +msgstr "Error de lectura/escritura TLS." -#: src/stored/status.c:763 -#, fuzzy, c-format -msgid "3900 No arg in .status command: %s\n" -msgstr "Comando .status malo: %s\n" +#: src/lib/priv.c:56 +#, c-format +msgid "Could not find userid=%s: ERR=%s\n" +msgstr "No se pudo encontrar userid=%s: ERR=%s\n" -#: src/stored/status.c:811 -#, fuzzy, c-format -msgid "3900 Unknown arg in .status command: %s\n" -msgstr "Comando .status malo: %s\n" +#: src/lib/priv.c:62 +#, c-format +msgid "Could not find password entry. ERR=%s\n" +msgstr "No se pudo encontrar contraseña de entrada. ERR=%s\n" -#: src/stored/status.c:826 -msgid "Bacula Storage: Idle" -msgstr "Bacula Storage: Libre" +#: src/lib/priv.c:75 +#, c-format +msgid "Could not find group=%s: ERR=%s\n" +msgstr "No se pudo encontrar grupo=%s: ERR=%s\n" -#: src/stored/status.c:837 -msgid "Bacula Storage: Running" -msgstr "Bacula Storage: Ejecutando" +#: src/lib/priv.c:83 +#, c-format +msgid "Could not initgroups for group=%s, userid=%s: ERR=%s\n" +msgstr "Podría no initgroups para grupo=%s, userid=%s: ERR=%s\n" -#: src/stored/status.c:851 -msgid "Bacula Storage: Last Job Canceled" -msgstr "Bacula Storage: Último Job Cancelado" +#: src/lib/priv.c:86 +#, c-format +msgid "Could not initgroups for userid=%s: ERR=%s\n" +msgstr "Podría no initgroups para userid=%s: ERR=%s\n" -#: src/stored/status.c:855 -msgid "Bacula Storage: Last Job Failed" -msgstr "Bacula Storage: Último Job Fallido" +#: src/lib/priv.c:93 +#, c-format +msgid "Could not set group=%s: ERR=%s\n" +msgstr "No se pudo establecer grupo=%s: ERR=%s\n" -#: src/stored/status.c:859 -msgid "Bacula Storage: Last Job had Warnings" -msgstr "Bacula Storage: Último Job con Advertencias" +#: src/lib/priv.c:103 +#, c-format +msgid "prctl failed: ERR=%s\n" +msgstr "prctl fallido: ERR=%s\n" -#: src/stored/read_record.c:89 +#: src/lib/priv.c:107 #, c-format -msgid "End of Volume at file %u on device %s, Volume \"%s\"\n" -msgstr "Fin del Volumen en archivo %u en dispositivo %s, Volumen \"%s\"\n" +msgid "setreuid failed: ERR=%s\n" +msgstr "setreuid fallido: ERR=%s\n" -#: src/stored/read_record.c:93 -msgid "End of all volumes.\n" -msgstr "Fin de todos los volúmenes.\n" +#: src/lib/priv.c:111 +#, c-format +msgid "cap_from_text failed: ERR=%s\n" +msgstr "cap_from_text fallido: ERR=%s\n" -#: src/stored/read_record.c:137 -msgid "part" -msgstr "parte" +#: src/lib/priv.c:115 +#, c-format +msgid "cap_set_proc failed: ERR=%s\n" +msgstr "cap_set_proc fallido: ERR=%s\n" -#: src/stored/read_record.c:140 -msgid "file" -msgstr "archivo" +#: src/lib/priv.c:119 +msgid "Keep readall caps not implemented this OS or missing libraries.\n" +msgstr "seguir readall caps no implementado en este SO o faltan bibliotecas.\n" -#: src/stored/read_record.c:143 +#: src/lib/priv.c:123 #, c-format -msgid "End of %s %u on device %s, Volume \"%s\"\n" -msgstr "Fin de %s %u en dispositivo %s, Volumen \"%s\"\n" +msgid "Could not set specified userid: %s\n" +msgstr "No se pudo establecer userid especificado: %s\n" -#: src/stored/read_record.c:158 -msgid "Did fsr in attemp to skip bad record.\n" -msgstr "fsr hizo en un intento para saltar malo registro.\n" +#: src/lib/res.c:53 +#, c-format +msgid "rwl_writelock failure at %s:%d: ERR=%s\n" +msgstr "Fallo rwl_writelock en %s:%d: ERR=%s\n" -#: src/stored/read_record.c:397 +#: src/lib/res.c:63 #, c-format -msgid "Forward spacing Volume \"%s\" to file:block %u:%u.\n" -msgstr "Espaciando hacia adelante Volumen \"%s\" para archivo:bloque %u:%u.\n" +msgid "rwl_writeunlock failure at %s:%d:. ERR=%s\n" +msgstr "Fallo \trwl_writeunlock en %s:%d: ERR=%s\n" -#: src/stored/read_record.c:421 -msgid "Begin Session" -msgstr "Inicio de Sesión" +#: src/lib/watchdog.c:84 +#, c-format +msgid "Unable to initialize watchdog lock. ERR=%s\n" +msgstr "No se puede inicializar bloqueo de vigilancia. ERR=%s\n" -#: src/stored/read_record.c:425 -msgid "End Session" -msgstr "Fin de Sesión" +#: src/lib/watchdog.c:181 +msgid "BUG! register_watchdog called before start_watchdog\n" +msgstr "BUG! register_watchdog llamado antes de start_watchdog\n" -#: src/stored/read_record.c:431 +#: src/lib/watchdog.c:184 #, c-format -msgid "Unknown code %d\n" -msgstr "Código desconocido %d\n" +msgid "BUG! Watchdog %p has NULL callback\n" +msgstr "BUG! Watchdog %p tiene llamada NULL\n" -#: src/stored/bextract.c:80 +#: src/lib/watchdog.c:187 #, c-format -msgid "" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: bextract \n" -" -b specify a bootstrap file\n" -" -c specify a Storage configuration file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -e exclude list\n" -" -i include list\n" -" -p proceed inspite of I/O errors\n" -" -v verbose\n" -" -V specify Volume names (separated by |)\n" -" -? print this message\n" -"\n" -msgstr "" -"\n" -"Versión: %s (%s)\n" -"\n" -"Utilice: bextract " -"\n" -" -b especifica un archivo bootstrap\n" -" -c especifica un archivo Storage de configuración\n" -" -d establece nivel de depuración para \n" -" -dt imprime timestamp en salida de depuración\n" -" -e lista de exclusión\n" -" -i lista de inclusión\n" -" -p proceder a pesar de los errores de E/S\n" -" -v detallado\n" -" -V especifica nombres de Volúmenes (separados por |)\n" -" -? imprime esta mensaje\n" -"\n" +msgid "BUG! Watchdog %p has zero interval\n" +msgstr "BUG! Watchdog %p tiene intervalo cero \n" -#: src/stored/bextract.c:196 src/stored/bcopy.c:161 src/stored/bscan.c:248 -#: src/tools/bvfs_test.c:201 src/tools/bbatch.c:190 src/tools/ing_test.c:185 -#: src/tools/cats_test.c:321 -msgid "Wrong number of arguments: \n" -msgstr "Incorrecto numero de argumentos: \n" +#: src/lib/watchdog.c:207 +msgid "BUG! unregister_watchdog_unlocked called before start_watchdog\n" +msgstr "ERROR! unregister_watchdog_unlocked llamado antes start_watchdog\n" -#: src/stored/bextract.c:218 +#: src/lib/watchdog.c:327 #, c-format -msgid "%d Program Name and/or Program Data Stream records ignored.\n" +msgid "rwl_writelock failure. ERR=%s\n" +msgstr "rwl_writelock failure. ERR=%s\n" + +#: src/lib/watchdog.c:342 +#, c-format +msgid "rwl_writeunlock failure. ERR=%s\n" +msgstr "rwl_writeunlock failure. ERR=%s\n" + +#: src/lib/ini.c:94 src/lib/ini.c:106 +#, fuzzy, c-format +msgid "" +"Config file error: %s\n" +" : Line %d, col %d of file %s\n" +"%s\n" msgstr "" -"Nombre del Programa %d y/o registros de Datos de Flujo del Programa " -"ignorado.\n" +"Error de configuración: %s\n" +" : línea %d, columna %d en el archivo %s\n" +"%s\n" +"%s" + +#: src/lib/ini.c:297 src/lib/ini.c:372 +#, fuzzy, c-format +msgid "Cannot open config file %s: %s\n" +msgstr "No se pudo abrir archivo de configuración \"%s\": %s\n" + +#: src/lib/bget_msg.c:85 +msgid "Status OK\n" +msgstr "Estado OK\n" -#: src/stored/bextract.c:222 +#: src/lib/bget_msg.c:89 #, c-format -msgid "%d Win32 data or Win32 gzip data stream records. Ignored.\n" -msgstr "%d registros de flujo de datos Win32 or Win32 datos gzip. Ignorados.\n" +msgid "bget_msg: unknown signal %d\n" +msgstr "bget_msg: señal desconocida %d\n" -#: src/stored/bextract.c:249 +#: src/lib/address_conf.c:50 #, c-format -msgid "Cannot stat %s. It must exist. ERR=%s\n" -msgstr "No se puede stat %s. El debe existir. ERR=%s\n" +msgid "Only ipv4 and ipv6 are supported (%d)\n" +msgstr "Solo ipv4 y ipv6 estan soportado (%d)\n" -#: src/stored/bextract.c:253 +#: src/lib/address_conf.c:54 #, c-format -msgid "%s must be a directory.\n" -msgstr "%s debe ser un directorio.\n" +msgid "Only ipv4 is supported (%d)\n" +msgstr "Solo ipv4 esta soportado (%d)\n" -#: src/stored/bextract.c:274 -#, c-format -msgid "%u files restored.\n" -msgstr "%u archivos restaurados.\n" +#: src/lib/address_conf.c:169 +#, fuzzy, c-format +msgid "You tried to assign a ipv6 address to an ipv4(%d)\n" +msgstr "Se trató de asignar una dirección IPv6 a IPv4(%d)\n" -#: src/stored/bextract.c:284 src/stored/bextract.c:290 -#: src/filed/restore.c:1480 -#, c-format -msgid "Write error on %s: %s\n" -msgstr "Error de escritura en %s: %s\n" +#: src/lib/address_conf.c:178 +#, fuzzy, c-format +msgid "You tried to assign an ipv4 address to an ipv6(%d)\n" +msgstr "Se trató de asignar una dirección IPv4 a IPv6(%d)\n" -#: src/stored/bextract.c:321 src/stored/bextract.c:587 -msgid "Logic error output file should be open but is not.\n" -msgstr "Error lógico, archivo de salida debería estar abierto, pero no esta.\n" +#: src/lib/address_conf.c:261 +#, fuzzy, c-format +msgid "Can't add default IPv4 address (%s)\n" +msgstr "No se puede agregar dirección por defecto (%s)\n" -#: src/stored/bextract.c:335 src/filed/restore.c:569 -#, c-format -msgid "%s stream not supported on this Client.\n" -msgstr "flujo %s no suportado en este Cliente.\n" +#: src/lib/address_conf.c:292 +#, fuzzy +msgid "" +"Old style addresses cannot be mixed with new style. Try removing Port=nnn." +msgstr "" +"el viejo estilo de las direcciones no se pueden mezclar con el nuevo estilo" -#: src/stored/bextract.c:345 -#, c-format -msgid "%s was deleted.\n" -msgstr "%s se ha eliminado.\n" +#: src/lib/address_conf.c:314 +#, fuzzy, c-format +msgid "Cannot resolve service(%s)" +msgstr "no se puede resolver el servicio(%s)" -#: src/stored/bextract.c:393 -#, c-format -msgid "Seek error on %s: %s\n" -msgstr "Buscar error en %s: %s\n" +#: src/lib/address_conf.c:324 +#, fuzzy, c-format +msgid "Cannot resolve hostname(%s) %s" +msgstr "no se puede resolver el hostname(%s) %s" -#: src/stored/bextract.c:429 src/stored/bextract.c:494 -#: src/filed/restore.c:1335 -#, c-format -msgid "Seek to %s error on %s: ERR=%s\n" -msgstr "Tratar de %s error en %s: ERR=%s\n" +#: src/lib/address_conf.c:432 src/lib/address_conf.c:465 +#, fuzzy, c-format +msgid "Expected a block to begin with { but got: %s" +msgstr "Esperaba un inicio de bloque {, obtuvo: %s" -#: src/stored/bextract.c:448 -#, c-format -msgid "Uncompression error. ERR=%d\n" -msgstr "Error de descompresión. ERR=%d\n" +#: src/lib/address_conf.c:437 +msgid "Empty addr block is not allowed" +msgstr "Bloque de direcciones vacío no está permitido" -#: src/stored/bextract.c:462 src/filed/restore.c:1450 -msgid "GZIP data stream found, but GZIP not configured!\n" -msgstr "Flujo de datos GZIP encontrado, pero GZIP no está configurado!\n" +#: src/lib/address_conf.c:441 +#, fuzzy, c-format +msgid "Expected a string but got: %s" +msgstr "Esperaba una cadena, obtuvo: %s" -#: src/stored/bextract.c:517 src/filed/restore.c:1376 -#, c-format -msgid "Compressed header version error. version=0x%x\n" -msgstr "" +#: src/lib/address_conf.c:452 +#, fuzzy, c-format +msgid "Expected a string [ip|ipv4|ipv6] but got: %s" +msgstr "Espera una cadena [ip|ipv4|ipv6], obtuvo: %s" -#: src/stored/bextract.c:522 src/filed/restore.c:1381 -#, c-format -msgid "Compressed header size error. comp_len=%d, msglen=%d\n" -msgstr "" +#: src/lib/address_conf.c:456 +#, fuzzy, c-format +msgid "Expected a string [ip|ipv4] but got: %s" +msgstr "Espera una cadena [ip|ipv4], obtuvo: %s" -#: src/stored/bextract.c:544 +#: src/lib/address_conf.c:461 #, fuzzy, c-format -msgid "LZO uncompression error. ERR=%d\n" -msgstr "Error de descompresión. ERR=%d\n" +msgid "Expected an equal = but got: %s" +msgstr "Esperaba una igual =, obtuvo: %s" -#: src/stored/bextract.c:556 src/filed/restore.c:1414 -#, c-format -msgid "Compression algorithm 0x%x found, but not supported!\n" -msgstr "" +#: src/lib/address_conf.c:472 +#, fuzzy, c-format +msgid "Expected an identifier [addr|port] but got: %s" +msgstr "Esperaba un identificador [addr|port], obtuvo: %s" -#: src/stored/bextract.c:578 -msgid "Got Program Name or Data Stream. Ignored.\n" -msgstr "Obtener Nombre de Programa o Secuencia de Datos. Ignorado.\n" +#: src/lib/address_conf.c:477 +msgid "Only one port per address block" +msgstr "Sólo un puerto por bloque de direcciones" -#: src/stored/bextract.c:592 src/filed/restore.c:328 src/filed/restore.c:1033 -#, c-format -msgid "Unknown stream=%d ignored. This shouldn't happen!\n" -msgstr "Flujo desconocido=%d ignorado. Esto no debería suceder!\n" +#: src/lib/address_conf.c:483 +msgid "Only one addr per address block" +msgstr "Sólo una dirección por bloque de direcciones" -#: src/stored/bcopy.c:74 +#: src/lib/address_conf.c:487 +#, fuzzy, c-format +msgid "Expected a identifier [addr|port] but got: %s" +msgstr "Esperaba un identificador [addr|port], obtuvo: %s" + +#: src/lib/address_conf.c:491 #, c-format -msgid "" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: bcopy [-d debug_level] \n" -" -b bootstrap specify a bootstrap file\n" -" -c specify a Storage configuration file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -i specify input Volume names (separated by |)\n" -" -o specify output Volume names (separated by |)\n" -" -p proceed inspite of errors\n" -" -v verbose\n" -" -w specify working directory (default /tmp)\n" -" -? print this message\n" -"\n" +msgid "Expected a equal =, got: %s" +msgstr "Esperaba una igual =, obtuvo: %s" + +#: src/lib/address_conf.c:499 +#, fuzzy, c-format +msgid "Expected a number or a string but got: %s" +msgstr "Esperaba un numero o una cadena , obtuvo: %s" + +#: src/lib/address_conf.c:505 +#, fuzzy, c-format +msgid "Expected an IP number or a hostname but got: %s" +msgstr "Esperaba un numero IP o un hostname, obtuvo: %s" + +#: src/lib/address_conf.c:511 +msgid "State machine missmatch" +msgstr "Estado de la máquina desajustado" + +#: src/lib/address_conf.c:517 +#, fuzzy, c-format +msgid "Expected a end of block with } but got: %s" +msgstr "Esperaba un fin de bloque }, obtuvo: %s" + +#: src/lib/address_conf.c:523 +#, fuzzy, c-format +msgid "Cannot add hostname(%s) and port(%s) to addrlist (%s)" msgstr "" -"\n" -"Versión: %s (%s)\n" -"\n" -"Utilice: bcopy [-d nivel_ depuración] \n" -" -b bootstrap especifica un archivo bootstrap\n" -" -c especifica un archivo Storage de configuración\n" -" -d establece nivel de depuración para \n" -" -dt imprime timestamp en salida de depuración\n" -" -i especifica nombres de Volúmenes de entrada (separados por |)\n" -" -o especifica nombres de Volúmenes de salida (separados por |)\n" -" -p proceder a pesar de los errores\n" -"\n" -" -v detallado\n" -" -w especifica directorio de trabajo (por defecto /tmp)\n" -" -? imprime esta mensaje\n" -"\n" +"No se puede agregar el nombre de maquina(%s) y puerto(%s) a addrlist(%s)" -#: src/stored/bcopy.c:202 src/stored/device.c:298 src/stored/btape.c:473 +#: src/lib/address_conf.c:529 +#, fuzzy, c-format +msgid "Expected an end of block with } but got: %s" +msgstr "Esperaba un fin de bloque }, obtuvo: %s" + +#: src/lib/address_conf.c:538 #, c-format -msgid "dev open failed: %s\n" -msgstr "Fallo al abrir dev: %s\n" +msgid "Expected an IP number or a hostname, got: %s" +msgstr "Esperaba un numero IP o un hostname, obtuvo: %s" -#: src/stored/bcopy.c:217 -msgid "Write of last block failed.\n" -msgstr "Fallo al escribir ultimo bloque.\n" +#: src/lib/address_conf.c:543 src/lib/address_conf.c:557 +#, fuzzy, c-format +msgid "Cannot add port (%s) to (%s)" +msgstr "no puede agregar el puerto (%s) a (%s)" -#: src/stored/bcopy.c:221 +#: src/lib/address_conf.c:552 #, c-format -msgid "%u Jobs copied. %u records copied.\n" -msgstr "%u Jobs copiado. %u registros copiados.\n" +msgid "Expected a port number or string, got: %s" +msgstr "Esperaba un numero de puerto o cadena, obtuvo: %s" -#: src/stored/bcopy.c:238 src/stored/bscan.c:428 -#, c-format -msgid "Record: SessId=%u SessTim=%u FileIndex=%d Stream=%d len=%u\n" -msgstr "Registro: SessId=%u SessTim=%u FileIndex=%d Stream=%d len=%u\n" +#: src/lib/crypto.c:430 +msgid "Unable to open certificate file" +msgstr "No se puede abrir el archivo de certificado" -#: src/stored/bcopy.c:254 -msgid "Volume is prelabeled. This volume cannot be copied.\n" -msgstr "Volumen esta pre-etiquetado. Este volumen no puede ser copiado.\n" +#: src/lib/crypto.c:437 +msgid "Unable to read certificate from file" +msgstr "No es posible leer el archivo de certificado" -#: src/stored/bcopy.c:257 -msgid "Volume label not copied.\n" -msgstr "Etiqueta Volumen no copiada.\n" +#: src/lib/crypto.c:443 +msgid "Unable to extract public key from certificate" +msgstr "No se puede extraer la clave pública del certificado" -#: src/stored/bcopy.c:263 -msgid "Copy skipped. Record does not match BSR filter.\n" -msgstr "Copia omitida. Registro no coincide con filtro de BSR.\n" +#: src/lib/crypto.c:450 +msgid "" +"Provided certificate does not include the required subjectKeyIdentifier " +"extension." +msgstr "" +"Certificado suministrado no incluye la extensión subjectKeyIdentifier " +"necesaria." -#: src/stored/bcopy.c:280 src/stored/bcopy.c:288 src/stored/bcopy.c:316 -#: src/stored/btape.c:2756 +#: src/lib/crypto.c:457 #, c-format -msgid "Cannot fixup device error. %s\n" -msgstr "No se puede corregir error de dispositivo. %s\n" - -#: src/stored/bcopy.c:294 -msgid "EOM label not copied.\n" -msgstr "Etiqueta EOM no copiada.\n" +msgid "Unsupported key type provided: %d\n" +msgstr "Tipo de clave prevista no soportada: %d\n" -#: src/stored/bcopy.c:297 -msgid "EOT label not copied.\n" -msgstr "Etiqueta EOT no copiada.\n" +#: src/lib/crypto.c:494 src/lib/crypto.c:542 +msgid "Unable to open private key file" +msgstr "No se puede abrir archivo de clave privada" -#: src/stored/dvd.c:111 -msgid "No FreeSpace command defined.\n" -msgstr "Comando FreeSpace no definido.\n" +#: src/lib/crypto.c:524 src/lib/crypto.c:558 +msgid "Unable to read private key from file" +msgstr "No se puede leer la clave privada del archivo" -#: src/stored/dvd.c:145 +#: src/lib/crypto.c:617 #, c-format -msgid "Cannot run free space command. Results=%s ERR=%s\n" -msgstr "No se puede ejecutar comando de espacio libre. Resultados=%s ERR=%s\n" +msgid "Unsupported digest type: %d\n" +msgstr "Tipo Digest no soportado: %d\n" -#: src/stored/dvd.c:261 -#, c-format -msgid "Error writing part %d to the DVD: ERR=%s\n" -msgstr "Error escribiendo parte %d en el DVD: ERR=%s\n" +#: src/lib/crypto.c:631 +msgid "OpenSSL digest initialization failed" +msgstr "Fallo al inicializar resume OpenSSL" -#: src/stored/dvd.c:263 -#, c-format -msgid "Error while writing current part to the DVD: %s" -msgstr "Error al escribir parte actual al DVD: %s" +#: src/lib/crypto.c:645 +msgid "OpenSSL digest update failed" +msgstr "Fallo al actualizar resume OpenSSL" -#: src/stored/dvd.c:273 -#, c-format -msgid "Part %d (%lld bytes) written to DVD.\n" -msgstr "Parte %d (%lld bytes) escrito al DVD.\n" +#: src/lib/crypto.c:663 +msgid "OpenSSL digest finalize failed" +msgstr "Fallo al finalizar resume OpenSSL" -#: src/stored/dvd.c:292 -#, c-format -msgid "Remaining free space %s on %s\n" -msgstr "Espacio libre restante %s en %s\n" +#: src/lib/crypto.c:761 +msgid "OpenSSL digest_new failed" +msgstr "fallo digest_new OpenSSL" -#: src/stored/dvd.c:358 -#, c-format -msgid "Next Volume part already exists on DVD. Cannot continue: %s\n" -msgstr "" -"Siguiente parte del volumen ya existe en DVD. No se puede continuar: %s\n" +#: src/lib/crypto.c:767 +msgid "OpenSSL sign get digest failed" +msgstr "Fallo OpenSSL al obtener firma digest " -#: src/stored/dvd.c:563 -#, c-format -msgid "" -"Error writing. Current part less than total number of parts (%d/%d, device=" -"%s)\n" -msgstr "" -"Error al escribir. Parte actual menor que número total de partes (%d/%d, " -"dispositivo=%s)\n" +#: src/lib/crypto.c:806 src/lib/crypto.c:810 +msgid "OpenSSL digest Verify final failed" +msgstr "Fallo OpenSSL Verificación final digest " -#: src/stored/dvd.c:570 -#, c-format -msgid "Unable to write last on %s: ERR=%s\n" -msgstr "No se puede escribir última en %s: ERR=%s\n" +#: src/lib/crypto.c:815 +msgid "No signers found for crypto verify.\n" +msgstr "Firmantes no encontrados para verificar el cifrado.\n" -#: src/stored/butil.c:59 -msgid "Nohdr," -msgstr "Nohdr," +#: src/lib/crypto.c:876 +msgid "Signature creation failed" +msgstr "Fallo en creación de firma" -#: src/stored/butil.c:62 -msgid "partial," -msgstr "parcial," +#: src/lib/crypto.c:954 +msgid "Signature decoding failed" +msgstr "Fallo en decodificación de firma" -#: src/stored/butil.c:65 -msgid "empty," -msgstr "vacío," +#: src/lib/crypto.c:1031 +msgid "Unsupported cipher type specified\n" +msgstr "Tipo de cifrado especificados no soportado\n" -#: src/stored/butil.c:68 -msgid "Nomatch," -msgstr "Nomatch," +#: src/lib/crypto.c:1180 +msgid "CryptoData decoding failed" +msgstr "decodificación CryptoData fallida" -#: src/stored/butil.c:71 -msgid "cont," -msgstr "cont," +#: src/lib/crypto.c:1224 +msgid "Failure decrypting the session key" +msgstr "Error al descifrar la clave de sesión" -#: src/stored/butil.c:148 -msgid "Volume name or names is too long. Please use a .bsr file.\n" -msgstr "" -"Nombre de Volumen o nombres es demasiado largo. Por favor, use un archivo ." -"BSR.\n" +#: src/lib/crypto.c:1275 +#, c-format +msgid "Unsupported contentEncryptionAlgorithm: %d\n" +msgstr "ContentEncryptionAlgorithm no soportado: %d\n" + +#: src/lib/crypto.c:1285 src/lib/crypto.c:1291 +msgid "OpenSSL cipher context initialization failed" +msgstr "Fallo al inicializar contexto cipher OpenSSl" + +#: src/lib/crypto.c:1298 +msgid "Encryption session provided an invalid symmetric key" +msgstr "Cifrado de sesión suministro una clave simétrica inválida" + +#: src/lib/crypto.c:1304 +msgid "Encryption session provided an invalid IV" +msgstr "Cifrado de sesión suministro una IV inválida" + +#: src/lib/crypto.c:1310 +msgid "OpenSSL cipher context key/IV initialization failed" +msgstr "Fallido inicialización de contexto OpenSSL de cifrado de clave/IV " -#: src/stored/butil.c:168 +#: src/lib/crypto.c:1380 #, c-format -msgid "Cannot find device \"%s\" in config file %s.\n" -msgstr "" -"No se puede encontrar el dispositivo \"%s\" en el archivo de configuración " -"%s.\n" +msgid "Unable to init OpenSSL threading: ERR=%s\n" +msgstr "No se puede inicializar hilo OpenSSL: ERR=%s\n" -#: src/stored/butil.c:175 -#, c-format -msgid "Cannot init device %s\n" -msgstr "No se pudo iniciar dispositivo %s\n" +#: src/lib/crypto.c:1393 +msgid "Failed to seed OpenSSL PRNG\n" +msgstr "Fallo al seed OpenSSL PRNG\n" -#: src/stored/butil.c:195 -#, c-format -msgid "Cannot open %s\n" -msgstr "No se pudo abrir %s\n" +#: src/lib/crypto.c:1419 +msgid "Failed to save OpenSSL PRNG\n" +msgstr "Fallo al guardar OpenSSL PRNG\n" -#: src/stored/butil.c:282 +#: src/lib/crypto.c:1480 #, c-format -msgid "Could not find device \"%s\" in config file %s.\n" -msgstr "" -"No se pudo encontrar dispositivo \"%s\" en el archivo de configuración %s.\n" +msgid "Unsupported digest type=%d specified\n" +msgstr "Incompatible resume tipo=%d especificado\n" -#: src/stored/butil.c:287 +#: src/lib/crypto.c:1500 #, c-format -msgid "Using device: \"%s\" for reading.\n" -msgstr "Utilizando el dispositivo: \"%s\" para lectura.\n" +msgid "SHA1Update() returned an error: %d\n" +msgstr "SHA1Update() retorno un error: %d\n" -#: src/stored/butil.c:290 -#, c-format -msgid "Using device: \"%s\" for writing.\n" -msgstr "Utilizando el dispositivo: \"%s\" para escritura.\n" +#: src/lib/crypto.c:1643 +msgid "No error" +msgstr "Ningún error" -#: src/stored/butil.c:306 -msgid "Unexpected End of Data\n" -msgstr "Fin Inesperado de los Datos\n" +#: src/lib/crypto.c:1645 +msgid "Signer not found" +msgstr "Firmante no encontrado" -#: src/stored/butil.c:308 -msgid "Unexpected End of Tape\n" -msgstr "Fin Inesperado de la Cinta\n" +#: src/lib/crypto.c:1647 +msgid "Recipient not found" +msgstr "Recipiente no encontrado" -#: src/stored/butil.c:310 -msgid "Unexpected End of File\n" -msgstr "Fin Inesperado del Archivo\n" +#: src/lib/crypto.c:1649 +msgid "Unsupported digest algorithm" +msgstr "Algoritmo de resumen no soportado" -#: src/stored/butil.c:312 -msgid "Tape Door is Open\n" -msgstr "Puerta de la cinta está abierta\n" +#: src/lib/crypto.c:1651 +msgid "Unsupported encryption algorithm" +msgstr "Algoritmo de cifrado no soportado" -#: src/stored/butil.c:314 -msgid "Unexpected Tape is Off-line\n" -msgstr "Inesperado Cinta esta off-line\n" +#: src/lib/crypto.c:1653 +msgid "Signature is invalid" +msgstr "La firma no es válida" -#: src/stored/acquire.c:74 -#, c-format -msgid "Acquire read: num_writers=%d not zero. Job %d canceled.\n" -msgstr "Adquirir leer: num_writers=%d no es cero. Empleo %d cancelado.\n" +#: src/lib/crypto.c:1655 +msgid "Decryption error" +msgstr "Error de Descifrado" -#: src/stored/acquire.c:83 -#, c-format -msgid "No volumes specified for reading. Job %s canceled.\n" -msgstr "No se especifica el volumen de lectura. Job %s cancelado.\n" +#: src/lib/crypto.c:1658 +msgid "Internal error" +msgstr "Error interno" + +#: src/lib/crypto.c:1660 +msgid "Unknown error" +msgstr "Error desconocido" -#: src/stored/acquire.c:92 +#: src/lib/attr.c:69 #, c-format -msgid "Logic error: no next volume to read. Numvol=%d Curvol=%d\n" -msgstr "Error logico: no hay prójimo volumen para leer. Numvol=%d Curvol=%d\n" +msgid "Error scanning attributes: %s\n" +msgstr "Error escaneando atributos: %s\n" + +#: src/lib/signal.c:56 +msgid "Invalid signal number" +msgstr "Número de la señal no válida" -#: src/stored/acquire.c:118 +#: src/lib/signal.c:146 src/lib/signal.c:148 #, c-format -msgid "" -"Changing read device. Want Media Type=\"%s\" have=\"%s\"\n" -" device=%s\n" -msgstr "" -"Cambiando dispositivo de lectura. Media Type=\"%s\" tiene=\"%s\"\n" -" dispositivo=%s\n" +msgid "Bacula interrupted by signal %d: %s\n" +msgstr "Bacula interrumpido por señal %d: %s\n" -#: src/stored/acquire.c:162 +#: src/lib/signal.c:164 +#, fuzzy, c-format +msgid "Kaboom! %s, %s got signal %d - %s at %s. Attempting traceback.\n" +msgstr "Kaboom! %s, %s obtuvo la señal %d - %s. Intentando rastreo.\n" + +#: src/lib/signal.c:166 #, c-format -msgid "Media Type change. New read device %s chosen.\n" -msgstr "Cambio Media Type. Nuevo dispositivo de lectura %s elegido.\n" +msgid "Kaboom! exepath=%s\n" +msgstr "Kaboom! exepath=%s\n" -#: src/stored/acquire.c:174 +#: src/lib/signal.c:207 #, c-format -msgid "No suitable device found to read Volume \"%s\"\n" -msgstr "No encuentra dispositivo adecuado para leer Volumen \"%s\"\n" +msgid "Fork error: ERR=%s\n" +msgstr "Fork error: ERR=%s\n" -#: src/stored/acquire.c:213 +#: src/lib/signal.c:215 #, c-format -msgid "Job %s canceled.\n" -msgstr "Job %s cancelado.\n" +msgid "Calling: %s %s %s %s\n" +msgstr "Llamando: %s %s %s %s\n" -#: src/stored/acquire.c:231 +#: src/lib/signal.c:219 #, c-format -msgid "Read open device %s Volume \"%s\" failed: ERR=%s\n" -msgstr "Fallo al leer dispositivo %s abierto, Volumen \"%s\": ERR=%s\n" +msgid "execv: %s failed: ERR=%s\n" +msgstr "execv: %s ha fallado: ERR=%s\n" -#: src/stored/acquire.c:321 +#: src/lib/signal.c:241 +#, fuzzy, c-format +msgid "It looks like the traceback worked...\n" +msgstr "Parece que el rastreo trabaja ...\n" + +#: src/lib/signal.c:243 #, c-format -msgid "Too many errors trying to mount device %s for reading.\n" +msgid "The btraceback call returned %d\n" msgstr "" -"Demasiados errores tratando de montar el dispositivo %s para la lectura.\n" -#: src/stored/acquire.c:329 +#: src/lib/signal.c:303 #, c-format -msgid "Ready to read from volume \"%s\" on device %s.\n" -msgstr "Listo para leer desde volumen \"%s\" en el dispositivo %s.\n" +msgid "BA_NSIG too small (%d) should be (%d)\n" +msgstr "BA_NSIG demasiado pequeño (%d) debe ser (%d)\n" -#: src/stored/acquire.c:381 -#, c-format -msgid "Want to append, but device %s is busy reading.\n" -msgstr "Esperando anexar, pero el dispositivo %s está ocupado leyendo.\n" +#: src/lib/signal.c:309 +msgid "UNKNOWN SIGNAL" +msgstr "SEÑAL DESCONOCIDA" -#: src/stored/acquire.c:414 -#, c-format -msgid "Could not ready device %s for append.\n" -msgstr "Dispositivo %s puede no está listo para anexar.\n" +#: src/lib/signal.c:310 +msgid "Hangup" +msgstr "Colgar" -#: src/stored/acquire.c:501 src/stored/spool.c:321 src/stored/block.c:386 -#: src/stored/block.c:769 src/stored/block.c:847 -#, c-format -msgid "Could not create JobMedia record for Volume=\"%s\" Job=%s\n" -msgstr "No es posible crear el registro JobMedia para Volumen=\"%s\" Job=%s\n" +#: src/lib/signal.c:311 +msgid "Interrupt" +msgstr "Interrumpir" -#: src/stored/acquire.c:552 -#, c-format -msgid "Alert: %s" -msgstr "Alerta: %s" +#: src/lib/signal.c:312 +msgid "Quit" +msgstr "Salir" -#: src/stored/acquire.c:560 -#, c-format -msgid "3997 Bad alert command: %s: ERR=%s.\n" -msgstr "3997 Malo comando alerta: %s: ERR=%s.\n" +#: src/lib/signal.c:313 +msgid "Illegal instruction" +msgstr "Instrucción ilegal" -#: src/stored/acquire.c:629 src/stored/dev.c:270 src/stored/dev.c:311 -#: src/lib/openssl.c:122 src/lib/openssl.c:181 -#, c-format -msgid "Unable to init mutex: ERR=%s\n" -msgstr "No se puede iniciar mutex: ERR=%s\n" +#: src/lib/signal.c:314 +msgid "Trace/Breakpoint trap" +msgstr "Trace/Trampa de Punto de Interrupción" -#: src/stored/acquire.c:635 -#, fuzzy, c-format -msgid "Unable to init r_mutex: ERR=%s\n" -msgstr "No se puede iniciar mutex: ERR=%s\n" +#: src/lib/signal.c:315 +msgid "Abort" +msgstr "Anular" -#: src/stored/askdir.c:179 -msgid "Network error on bnet_recv in req_vol_info.\n" -msgstr "Error de red en bnet_recv en req_vol_info.\n" +#: src/lib/signal.c:317 +msgid "EMT instruction (Emulation Trap)" +msgstr "Instrucción EMT (Emulación de Trampa)" -#: src/stored/askdir.c:197 -#, c-format -msgid "Error getting Volume info: %s" -msgstr "Error al obtener Volumen información: %s" +#: src/lib/signal.c:320 +msgid "IOT trap" +msgstr "trampa IOT" -#: src/stored/askdir.c:376 -#, c-format -msgid "Didn't get vol info vol=%s: ERR=%s" -msgstr "no recibió información de volumen vol=%s: ERR=%s" +#: src/lib/signal.c:322 +msgid "BUS error" +msgstr "BUS error" -#: src/stored/askdir.c:432 -#, c-format -msgid "Error creating JobMedia record: ERR=%s\n" -msgstr "Error al crear registro JobMedia: ERR=%s\n" +#: src/lib/signal.c:323 +msgid "Floating-point exception" +msgstr "Excepción de punto flotante" -#: src/stored/askdir.c:439 -#, c-format -msgid "Error creating JobMedia record: %s\n" -msgstr "Error al crear registro JobMedia: %s\n" +#: src/lib/signal.c:324 +msgid "Kill, unblockable" +msgstr "Matar, imbloqueable" -#: src/stored/askdir.c:522 -#, c-format -msgid "Job %s canceled while waiting for mount on Storage Device \"%s\".\n" -msgstr "" -"Job %s cancelado a la espera de montar el dispositivo Storage \"%s\".\n" +#: src/lib/signal.c:325 +msgid "User-defined signal 1" +msgstr "Señal 1 definida por el usuario" -#: src/stored/askdir.c:533 -#, fuzzy, c-format -msgid "" -"Job %s is waiting. Cannot find any appendable volumes.\n" -"Please use the \"label\" command to create a new Volume for:\n" -" Storage: %s\n" -" Pool: %s\n" -" Media type: %s\n" -msgstr "" -"Job %s en espera. No se puede encontrar ningún volumen grabable.\n" -"Por favor utilice el comando \"label\" para crear un nuevo Volumen para:\n" -"Storage: %s\n" -"Pool: %s\n" -"Tipo de Media: %s\n" +#: src/lib/signal.c:326 +msgid "Segmentation violation" +msgstr "Violación de segmento" -#: src/stored/askdir.c:558 src/stored/askdir.c:658 -#, c-format -msgid "Max time exceeded waiting to mount Storage Device %s for Job %s\n" -msgstr "" -"Tiempo máximo de espera excedido para montar dispositivo Storage %s para el " -"Job %s\n" +#: src/lib/signal.c:327 +msgid "User-defined signal 2" +msgstr "Señal definida por el usuario 2" -#: src/stored/askdir.c:568 -msgid "pthread error in mount_next_volume.\n" -msgstr "pthread error en mount_next_volume.\n" +#: src/lib/signal.c:328 +msgid "Broken pipe" +msgstr "Tuberí­a rota" -#: src/stored/askdir.c:601 -msgid "Cannot request another volume: no volume name given.\n" -msgstr "No puede solicitar otro volumen: nombre de volumen no entregado.\n" +#: src/lib/signal.c:329 +msgid "Alarm clock" +msgstr "Alarma" -#: src/stored/askdir.c:607 -#, c-format -msgid "Job %s canceled while waiting for mount on Storage Device %s.\n" -msgstr "Job %s cancelado a la espera de montar el dispositivo Storage %s.\n" +#: src/lib/signal.c:330 +msgid "Termination" +msgstr "Terminación" -#: src/stored/askdir.c:624 -#, fuzzy, c-format -msgid "" -"Please mount append Volume \"%s\" or label a new one for:\n" -" Job: %s\n" -" Storage: %s\n" -" Pool: %s\n" -" Media type: %s\n" -msgstr "" -"Por favor, montar Volumen \"%s\" o etiquete uno nuevo para :\n" -" Job: %s\n" -" Storage: %s\n" -" Pool: %s\n" -" Media type: %s\n" +#: src/lib/signal.c:332 +msgid "Stack fault" +msgstr "Error de pila" -#: src/stored/askdir.c:630 -#, fuzzy, c-format -msgid "" -"Please mount read Volume \"%s\" for:\n" -" Job: %s\n" -" Storage: %s\n" -" Pool: %s\n" -" Media type: %s\n" -msgstr "" -"Por favor, montar el volumen \"%s\" for:\n" -" Job: %s\n" -" Storage: %s\n" -" Pool: %s\n" -" Media type: %s\n" +#: src/lib/signal.c:334 +msgid "Child status has changed" +msgstr "El estado de hijo ha cambiado" + +#: src/lib/signal.c:335 +msgid "Continue" +msgstr "Continue" -#: src/stored/askdir.c:668 -msgid "pthread error in mount_volume\n" -msgstr "pthread error en mount_volume\n" +#: src/lib/signal.c:336 +msgid "Stop, unblockable" +msgstr "Detener, imbloqueable" -#: src/stored/record.c:75 -#, c-format -msgid "unknown: %d" -msgstr "desconocido: %d" +#: src/lib/signal.c:337 +msgid "Keyboard stop" +msgstr "Teclado detenido" -#: src/stored/record.c:392 -msgid "Damaged buffer\n" -msgstr "Buffer dañado\n" +#: src/lib/signal.c:338 +msgid "Background read from tty" +msgstr "Leer en segundo plan desde tty" -#: src/stored/record.c:670 -#, c-format -msgid "Sanity check failed. maxlen=%d datalen=%d. Block discarded.\n" -msgstr "" -"Chequeo de Sanidad fracasado. maxlen=%d datalen=%d. Bloque descartado.\n" +#: src/lib/signal.c:339 +msgid "Background write to tty" +msgstr "Escribir en segundo plan al tty" -#: src/stored/read.c:65 -msgid "No Volume names found for restore.\n" -msgstr "Nombres de Volumen no encontrados para restaurar.\n" +#: src/lib/signal.c:340 +msgid "Urgent condition on socket" +msgstr "Condición de urgencia en el socket" -#: src/stored/read.c:120 -#, c-format -msgid ">filed: Error Hdr=%s\n" -msgstr ">filed: Error Hdr=%s\n" +#: src/lib/signal.c:341 +msgid "CPU limit exceeded" +msgstr "Limite de CPU superado" -#: src/stored/read.c:121 src/stored/read.c:136 -#, c-format -msgid "Error sending to File daemon. ERR=%s\n" -msgstr "Error enviando para demonio File. ERR=%s\n" +#: src/lib/signal.c:342 +msgid "File size limit exceeded" +msgstr "Superado el límite de tamaño de archivo" -#: src/stored/read.c:135 -#, c-format -msgid "Error sending to FD. ERR=%s\n" -msgstr "Error enviando para FD. ERR=%s\n" +#: src/lib/signal.c:343 +msgid "Virtual alarm clock" +msgstr "Despertador virtual" -#: src/stored/autochanger.c:65 -#, c-format -msgid "No Changer Name given for device %s. Cannot continue.\n" -msgstr "" -"Ningún Nombre Changer obtenido para el dispositivo %s. No se puede " -"continuar.\n" +#: src/lib/signal.c:344 +msgid "Profiling alarm clock" +msgstr "Perfiles de alarma" -#: src/stored/autochanger.c:71 -#, c-format -msgid "No Changer Command given for device %s. Cannot continue.\n" -msgstr "" -"Ningún Comando Changer obtenido para el dispositivo %s. No se puede " -"continuar.\n" +#: src/lib/signal.c:345 +msgid "Window size change" +msgstr "Cambiar el tamaño de la ventana" -#: src/stored/autochanger.c:139 -#, fuzzy, c-format -msgid "No slot defined in catalog (slot=%d) for Volume \"%s\" on %s.\n" -msgstr "" -"Invalida ranura=%d definida en el catálogo para volumen \"%s\" en %s. Carga " -"manual puede ser requerida.\n" +#: src/lib/signal.c:346 +msgid "I/O now possible" +msgstr "I/O posible ahora" -#: src/stored/autochanger.c:141 -msgid "Cartridge change or \"update slots\" may be required.\n" -msgstr "" +#: src/lib/signal.c:348 +msgid "Power failure restart" +msgstr "Fallo reiniciar energía" -#: src/stored/autochanger.c:147 -#, c-format -msgid "No \"Changer Device\" for %s. Manual load of Volume may be required.\n" -msgstr "" -"Ninguno \"Dispositivo Changer\" para %s. Carga manual de volumen puede ser " -"requerido.\n" +#: src/lib/signal.c:351 +msgid "No runnable lwp" +msgstr "LWP no ejecutable" -#: src/stored/autochanger.c:154 -#, c-format -msgid "No \"Changer Command\" for %s. Manual load of Volume may be requird.\n" -msgstr "" -"Ninguno \"Comando Changer\" para %s. Carga manual de volumen puede ser " -"requerido.\n" +#: src/lib/signal.c:354 +msgid "SIGLWP special signal used by thread library" +msgstr "La señal especial SIGLWP utilizado por la biblioteca del hilo" -#: src/stored/autochanger.c:185 -#, c-format -msgid "3304 Issuing autochanger \"load slot %d, drive %d\" command.\n" -msgstr "" -"3304 Emitiendo comando auto-cambiador \"cargar ranura %d, unidad %d\".\n" +#: src/lib/signal.c:357 +msgid "Checkpoint Freeze" +msgstr "Checkpoint de Congelación" -#: src/stored/autochanger.c:193 -#, c-format -msgid "3305 Autochanger \"load slot %d, drive %d\", status is OK.\n" -msgstr "3305 Auto-cambiador \"carga ranura %d, unidad %d\", estado es OK.\n" +#: src/lib/signal.c:360 +msgid "Checkpoint Thaw" +msgstr "Checkpoint de Thaw" -#: src/stored/autochanger.c:206 -#, c-format -msgid "" -"3992 Bad autochanger \"load slot %d, drive %d\": ERR=%s.\n" -"Results=%s\n" -msgstr "" -"2992 Malo Auto-cambiador \"carga ranura %d, unidad %d\": ERR=%s.\n" -"Resultados=%s\n" +#: src/lib/signal.c:363 +msgid "Thread Cancellation" +msgstr "Cancelación de Hilo" -#: src/stored/autochanger.c:268 -#, c-format -msgid "3301 Issuing autochanger \"loaded? drive %d\" command.\n" -msgstr "3301 Emitiendo comando auto-cambiador \"¿cargado? unidad %d\".\n" +#: src/lib/signal.c:366 +msgid "Resource Lost (e.g. record-lock lost)" +msgstr "Recurso Perdido (por ejemplo, registro de bloqueo perdido)" -#: src/stored/autochanger.c:280 -#, c-format -msgid "3302 Autochanger \"loaded? drive %d\", result is Slot %d.\n" -msgstr "" -"3302 Auto-cambiador \"¿cargado? unidad %d\", el resultado es Ranura %d.\n" +#: src/lib/berrno.c:51 +msgid "Child exited normally." +msgstr "Hijo salió normalmente." + +#: src/lib/berrno.c:58 +msgid "Unknown error during program execvp" +msgstr "Error desconocido durante el programa execvp" -#: src/stored/autochanger.c:287 +#: src/lib/berrno.c:61 #, c-format -msgid "3302 Autochanger \"loaded? drive %d\", result: nothing loaded.\n" -msgstr "" -"3302 Auto-cambiador \"¿cargado? unidad %d\", resultado: nada cargado.\n" +msgid "Child exited with code %d" +msgstr "Hijo salió con el código %d" -#: src/stored/autochanger.c:299 +#: src/lib/berrno.c:69 #, c-format -msgid "" -"3991 Bad autochanger \"loaded? drive %d\" command: ERR=%s.\n" -"Results=%s\n" -msgstr "" -"3991 Malo comando auto-cambiador comando \"cargar? unidad %d\": ERR=%s\n" -"Resultados=%s\n" +msgid "Child died from signal %d: %s" +msgstr "Niño muerto con la señal %d: %s" -#: src/stored/autochanger.c:316 -#, fuzzy, c-format -msgid "Lock failure on autochanger. ERR=%s\n" -msgstr "Error bloqueando Mutex. ERR=%s\n" +#: src/lib/berrno.c:75 +msgid "Invalid errno. No error message possible." +msgstr "Invalido errorno. Imposible mensaje de error." -#: src/stored/autochanger.c:330 -#, fuzzy, c-format -msgid "Unlock failure on autochanger. ERR=%s\n" -msgstr "Error desbloqueando Mutex. ERR=%s\n" +#: src/lib/rwlock.c:295 +msgid "rwl_writeunlock called too many times.\n" +msgstr "rwl_writeunlock llamado muchas veces.\n" -#: src/stored/autochanger.c:374 src/stored/autochanger.c:523 -#, c-format -msgid "3307 Issuing autochanger \"unload slot %d, drive %d\" command.\n" -msgstr "" -"3307 Emitiendo comando auto-cambiador \"descargar ranura %d, unidad %d\"\n" +#: src/lib/rwlock.c:300 +msgid "rwl_writeunlock by non-owner.\n" +msgstr "rwl_writeunlock por no-propietario.\n" -#: src/stored/autochanger.c:387 +#: src/lib/mem_pool.c:101 #, c-format -msgid "" -"3995 Bad autochanger \"unload slot %d, drive %d\": ERR=%s\n" -"Results=%s\n" -msgstr "" -"3995 Malo comando auto-cambiador \"descargar ranura %d, unidad %d\": ERR=%s\n" -"Resultados=%s\n" +msgid "MemPool index %d larger than max %d\n" +msgstr "MemPool índice %d mayor que máximo %d\n" -#: src/stored/autochanger.c:473 +#: src/lib/mem_pool.c:119 src/lib/mem_pool.c:139 src/lib/mem_pool.c:175 +#: src/lib/mem_pool.c:248 src/lib/mem_pool.c:268 src/lib/mem_pool.c:303 +#: src/lib/mem_pool.c:614 #, c-format -msgid "Volume \"%s\" wanted on %s is in use by device %s\n" -msgstr "Volumen \"%s\" buscado en %s está en uso por el dispositivo %s\n" +msgid "Out of memory requesting %d bytes\n" +msgstr "Fuera de memoria solicitando %d bytes\n" -#: src/stored/autochanger.c:541 -#, fuzzy, c-format -msgid "3997 Bad autochanger \"unload slot %d, drive %d\": ERR=%s.\n" -msgstr "" -"3995 Malo comando auto-cambiador \"descargar ranura %d, unidad %d\": ERR=" -"%s.\n" +#: src/lib/mem_pool.c:156 +msgid "obuf is NULL\n" +msgstr "obuf es NULL\n" -#: src/stored/autochanger.c:585 +#: src/lib/bnet_server.c:103 #, c-format -msgid "3993 Device %s not an autochanger device.\n" -msgstr "3993 Dispositivo %s no es un dispositivo auto-cargador.\n" +msgid "Cannot open stream socket. ERR=%s. Current %s All %s\n" +msgstr "No se puede abrir el socket de flujo. ERR=%s. Actual %s Todos %s\n" -#: src/stored/autochanger.c:612 +#: src/lib/bnet_server.c:116 #, c-format -msgid "3306 Issuing autochanger \"%s\" command.\n" -msgstr "3306 Emitiendo comando \"%s\" al auto-cambiador.\n" +msgid "Cannot set SO_REUSEADDR on socket: %s\n" +msgstr "No se puede establecer SO_REUSEADDR en el socket: %s\n" -#: src/stored/autochanger.c:615 -msgid "3996 Open bpipe failed.\n" -msgstr "3996 Fallo al abrir bpipe.\n" +#: src/lib/bnet_server.c:125 +#, c-format +msgid "Cannot bind port %d: ERR=%s: Retrying ...\n" +msgstr "No se puede enlazar a puerto %d: ERR=%s: Reintentando ...\n" -#: src/stored/autochanger.c:642 src/console/console.c:1458 +#: src/lib/bnet_server.c:133 src/lib/bnet_server.c:141 #, c-format -msgid "Autochanger error: ERR=%s\n" -msgstr "Auto-cambiador error: ERR=%s\n" +msgid "Cannot bind port %d: ERR=%s.\n" +msgstr "No se puede enlazar a puerto %d: ERR=%s.\n" -#: src/stored/stored.c:87 -#, fuzzy, c-format -msgid "" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: bacula-sd [options] [-c config_file] [config_file]\n" -" -c use as configuration file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -f run in foreground (for debugging)\n" -" -g set groupid to group\n" -" -m print kaboom output (for debugging)\n" -" -p proceed despite I/O errors\n" -" -s no signals (for debugging)\n" -" -t test - read config and exit\n" -" -u userid to \n" -" -v verbose user messages\n" -" -? print this message.\n" -"\n" -msgstr "" -"\n" -"Versión: %s (%s)\n" -"\n" -"Utilice: stored [opciones] [-c archivo_configuración] " -"[archivo_configuración]\n" -" -c usar como archivo de configuración\n" -" -d establecer el nivel de depuración para \n" -" -dt imprimir timestamp en salida de depuración\n" -" -f ejecutar en primer plano (para depuración)\n" -" -g establecer groupid para grupo\n" -" -m imprimir salida kaboom para depuración)\n" -" -p continuar a pesar de errores de E/S\n" -" -s sin señales (para depuración)\n" -" -t prueba - leer la configuración y salir\n" -" -u establecer userid para \n" -" -v mensajes de usuario detallados\n" -" -? imprimir este mensaje.\n" -"\n" +#: src/lib/bnet_server.c:148 +#, fuzzy +msgid "No addr/port found to listen on.\n" +msgstr "Ninguno %s encontrado para %s.\n" -#: src/stored/stored.c:136 src/stored/btape.c:178 +#: src/lib/bnet_server.c:154 #, c-format -msgid "Tape block size (%d) not multiple of system size (%d)\n" -msgstr "" -"Tamaño de bloque de cinta (%d) no es múltiplo del tamaño de sistema (% d)\n" +msgid "Could not init client queue: ERR=%s\n" +msgstr "No se pudo iniciar cola cliente: ERR=%s\n" -#: src/stored/stored.c:140 src/stored/btape.c:182 +#: src/lib/bnet_server.c:173 #, c-format -msgid "Tape block size (%d) is not a power of 2\n" -msgstr "Tamaño de bloque de cinta (%d) no es una potencia de 2\n" +msgid "Error in select: %s\n" +msgstr "Error al seleccionar: %s\n" -#: src/stored/stored.c:268 -msgid "Volume Session Time is ZERO!\n" -msgstr "Tiempo de Sesión de Volumen es CERO!\n" +#: src/lib/bnet_server.c:196 +#, c-format +msgid "Connection from %s:%d refused by hosts.access\n" +msgstr "Conexión desde %s:%d rechazada por hosts.access\n" + +#: src/lib/bnet_server.c:224 +msgid "Could not create client BSOCK.\n" +msgstr "No es posible crear cliente BSOCK. \n" -#: src/stored/stored.c:277 +#: src/lib/bnet_server.c:231 #, c-format -msgid "Unable to create thread. ERR=%s\n" -msgstr "No se puede crear hilo. ERR=%s\n" +msgid "Could not add job to client queue: ERR=%s\n" +msgstr "No se pudo agregar job a la cola de cliente: ERR=%s\n" -#: src/stored/stored.c:310 src/stored/bscan.c:262 +#: src/lib/bnet_server.c:248 #, c-format -msgid "No Storage resource defined in %s. Cannot continue.\n" -msgstr "Recurso Storage no definido en %s. No se puede continuar.\n" +msgid "Could not destroy client queue: ERR=%s\n" +msgstr "No es posible destruir la cola de cliente: ERR=%s\n" -#: src/stored/stored.c:316 +#: src/lib/runscript.c:224 #, c-format -msgid "Only one Storage resource permitted in %s\n" -msgstr "Sólo un recurso Storage permitido en %s\n" +msgid "%s: run %s \"%s\"\n" +msgstr "%s: ejecutar %s \"%s\"\n" -#: src/stored/stored.c:321 +#: src/lib/runscript.c:233 #, c-format -msgid "No Director resource defined in %s. Cannot continue.\n" -msgstr "Recurso Director no definido en %s. No se puede continuar.\n" +msgid "Runscript: %s could not execute. ERR=%s\n" +msgstr "Runscript: No pudo ejecutar %s. ERR=%s\n" -#: src/stored/stored.c:326 +#: src/lib/runscript.c:242 #, c-format -msgid "No Device resource defined in %s. Cannot continue.\n" -msgstr "Recurso Device no definido en %s. No se puede continuar.\n" +msgid "%s: %s\n" +msgstr "%s: %s\n" -#: src/stored/stored.c:334 +#: src/lib/runscript.c:247 #, c-format -msgid "No Messages resource defined in %s. Cannot continue.\n" -msgstr "Recurso Mensajes no definido en %s. No se puede continuar.\n" +msgid "Runscript: %s returned non-zero status=%d. ERR=%s\n" +msgstr "Runscript: %s devolvió estado=%d distinto de cero. ERR=%s\n" -#: src/stored/stored.c:341 src/stored/bscan.c:270 -#, c-format -msgid "No Working Directory defined in %s. Cannot continue.\n" -msgstr "Directorio de Trabajo no definido en %s. No se puede continuar.\n" +#: src/lib/runscript.c:285 src/dird/dird_conf.c:752 +msgid " --> RunScript\n" +msgstr "--> EjecutarScript\n" -#: src/stored/stored.c:363 +#: src/lib/runscript.c:286 src/dird/dird_conf.c:753 #, c-format -msgid "\"TLS Certificate\" file not defined for Storage \"%s\" in %s.\n" -msgstr "Archivo \"TLS Certificate\" no definido para Storage \"%s\" en %s.\n" +msgid " --> Command=%s\n" +msgstr "--> Comando=%s\n" -#: src/stored/stored.c:369 +#: src/lib/runscript.c:287 src/dird/dird_conf.c:754 #, c-format -msgid "\"TLS Key\" file not defined for Storage \"%s\" in %s.\n" -msgstr "Archivo \"TLS Key\" no definido para Storage \"%s\" en %s.\n" +msgid " --> Target=%s\n" +msgstr "--> Objetivo=%s\n" -#: src/stored/stored.c:375 +#: src/lib/runscript.c:288 src/dird/dird_conf.c:755 #, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Storage \"%s\" in %s. At least one CA certificate store is required when " -"using \"TLS Verify Peer\".\n" -msgstr "" -"Ni \"Certificado TLS CA \" o \"Directorio del Certificado TLS CA\" están " -"definidos para el Storage \"%s\" en %s. Por lo menos un almacén de " -"Certificados CA es necesario cuando se utiliza \"Verificar TLS Peer\".\n" +msgid " --> RunOnSuccess=%u\n" +msgstr "--> RunOnSuccess=%u\n" -#: src/stored/stored.c:568 +#: src/lib/runscript.c:289 src/dird/dird_conf.c:756 #, c-format -msgid "Could not initialize %s\n" -msgstr "No se puede iniciar %s\n" +msgid " --> RunOnFailure=%u\n" +msgstr "--> RunOnFailure=%u\n" -#: src/stored/stored.c:582 +#: src/lib/runscript.c:290 src/dird/dird_conf.c:757 #, c-format -msgid "Could not open device %s\n" -msgstr "No se pudo abrir el dispositivo %s\n" +msgid " --> FailJobOnError=%u\n" +msgstr "--> FailJobOnError=%u\n" -#: src/stored/stored.c:596 +#: src/lib/runscript.c:291 src/dird/dird_conf.c:758 #, c-format -msgid "Could not mount device %s\n" -msgstr "No se pudo montar el dispositivo %s\n" +msgid " --> RunWhen=%u\n" +msgstr "--> EjecutarCuando=%u\n" -#: src/stored/device.c:120 +#: src/lib/cram-md5.c:97 src/lib/cram-md5.c:125 +msgid "1999 Authorization failed.\n" +msgstr "1999 Fallo de Autorización.\n" + +#: src/lib/smartall.c:133 src/lib/smartall.c:244 src/lib/smartall.c:259 +msgid "Out of memory\n" +msgstr "Fuera de memoria\n" + +#: src/lib/smartall.c:138 +msgid "Too much memory used." +msgstr "Demasiada memoria utilizada." + +#: src/lib/smartall.c:168 #, c-format -msgid "End of medium on Volume \"%s\" Bytes=%s Blocks=%s at %s.\n" -msgstr "Fin de medio en Volumen \"%s\" Bytes=%s Bloques=%s en %s.\n" +msgid "Attempt to free NULL called from %s:%d\n" +msgstr "Intento para liberar NULL llamado desde %s:%d\n" -#: src/stored/device.c:139 +#: src/lib/smartall.c:182 #, c-format -msgid "New volume \"%s\" mounted on device %s at %s.\n" -msgstr "Nuevo volumen \"%s\" montado en el dispositivo %s en %s.\n" +msgid "double free from %s:%d\n" +msgstr "doble libre desde %s:%d\n" -#: src/stored/device.c:151 +#: src/lib/smartall.c:190 #, c-format -msgid "write_block_to_device Volume label failed. ERR=%s" -msgstr "Fallo de etiqueta de volumen write_block_to_device. ERR=%s" +msgid "qp->qnext->qprev != qp called from %s:%d\n" +msgstr "qp->qnext->qprev != qp llamado desde %s:%d\n" -#: src/stored/device.c:186 +#: src/lib/smartall.c:194 #, c-format -msgid "write_block_to_device overflow block failed. ERR=%s" -msgstr "Fallo de desbordamiento de bloque write_block_to_device. ERR=%s" +msgid "qp->qprev->qnext != qp called from %s:%d\n" +msgstr "qp->qprev->qnext != qp llamado desde %s:%d\n" -#: src/stored/device.c:191 +#: src/lib/smartall.c:203 #, c-format -msgid "Catastrophic error. Cannot write overflow block to device %s. ERR=%s" +msgid "Overrun buffer: len=%d addr=%p allocated: %s:%d called from %s:%d\n" msgstr "" -"Error catastrófico. No se puede escribir bloque de desbordamiento al " -"dispositivo %s. ERR=%s" -#: src/stored/device.c:327 src/stored/dev.c:512 +#: src/lib/smartall.c:281 #, c-format -msgid "Unable to open device %s: ERR=%s\n" -msgstr "No se puede abrir el dispositivo %s: ERR=%s\n" +msgid "sm_realloc size: %d\n" +msgstr "sm_realloc tamaño: %d\n" -#: src/stored/device.c:329 +#: src/lib/smartall.c:319 #, c-format -msgid "Unable to open archive %s: ERR=%s\n" -msgstr "No se puede abrir archivo %s: ERR=%s\n" +msgid "sm_realloc %d at %p from %s:%d\n" +msgstr "sm_realloc %d en %p desde %s:%d\n" -#: src/stored/fd_cmds.c:166 +#: src/lib/smartall.c:379 #, c-format -msgid "Command error with FD, hanging up. %s\n" -msgstr "Error de comando con FD, colgando. %s\n" - -#: src/stored/fd_cmds.c:169 -msgid "Command error with FD, hanging up.\n" -msgstr "Error de comando con FD, colgando.\n" +msgid "" +"\n" +"Orphaned buffers exist. Dump terminated following\n" +" discovery of bad links in chain of orphaned buffers.\n" +" Buffer address with bad links: %p\n" +msgstr "" +"\n" +"Buffers huérfanos existen. Volcado terminado tras el\n" +"descubrimiento de malos vínculos en la cadena de buffers huérfanos.\n" +" Dirección del buffer con enlaces malos: %p\n" -#: src/stored/fd_cmds.c:180 +#: src/lib/smartall.c:424 #, c-format -msgid "FD command not found: %s\n" -msgstr "Comando FD no encontrado:% s \n" - -#: src/stored/fd_cmds.c:206 -msgid "Append data error.\n" -msgstr "Error al añadir datos.\n" +msgid "Damaged buffer found. Called from %s:%d\n" +msgstr "Búfer dañado encontrado. Llamado desde %s:%d\n" -#: src/stored/fd_cmds.c:211 -msgid "Attempt to append on non-open session.\n" -msgstr "Intento de anexar en sesión no abierta.\n" +#: src/lib/smartall.c:457 +#, c-format +msgid "" +"\n" +"Damaged buffers found at %s:%d\n" +msgstr "" +"\n" +"Búfers dañado encontrado en %s:%d\n" -#: src/stored/fd_cmds.c:223 src/stored/fd_cmds.c:266 -msgid "Attempt to close non-open session.\n" -msgstr "Intento de cerrar sesión no abierta.\n" +#: src/lib/smartall.c:460 +msgid " discovery of bad prev link.\n" +msgstr "descubrimiento de un malo vínculo anterior.\n" -#: src/stored/fd_cmds.c:241 -msgid "Attempt to open already open session.\n" -msgstr "Intento de abrir sesión ya abierta.\n" +#: src/lib/smartall.c:463 +msgid " discovery of bad next link.\n" +msgstr "descubrimiento del siguiente malo enlace malo.\n" -#: src/stored/fd_cmds.c:295 -msgid "Attempt to read on non-open session.\n" -msgstr "Intento de leer sesión no abierta.\n" +#: src/lib/smartall.c:466 +msgid " discovery of data overrun.\n" +msgstr "descubrimiento de datos de rebosamiento.\n" -#: src/stored/fd_cmds.c:313 src/stored/fd_cmds.c:322 -msgid "Attempt to open read on non-open session.\n" -msgstr "Intento de abrir leer sesión no abierta.\n" +#: src/lib/smartall.c:469 +msgid " NULL pointer.\n" +msgstr "Puntero NULL.\n" -#: src/stored/mount.c:98 +#: src/lib/smartall.c:475 #, c-format -msgid "Too many errors trying to mount device %s.\n" -msgstr "Demasiados errores tratando de montar el dispositivo %s.\n" +msgid " Buffer address: %p\n" +msgstr "Dirección de buffer : %p\n" -#: src/stored/mount.c:106 +#: src/lib/smartall.c:482 #, c-format -msgid "Job %d canceled.\n" -msgstr "Job %d cancelado.\n" +msgid "Damaged buffer: %6u bytes allocated at line %d of %s %s\n" +msgstr "Búfer dañados: %6u bytes asignados en la línea %d de %s %s\n" -#: src/stored/mount.c:282 +#: src/dird/job.c:50 #, c-format -msgid "Volume \"%s\" previously written, moving to end of data.\n" -msgstr "Volumen \"%s\" previamente escrito, moviendo a finales de los datos.\n" +msgid "Could not init job queue: ERR=%s\n" +msgstr "No se pudo iniciar la cola de trabajos: ERR=%s\n" -#: src/stored/mount.c:288 +#: src/dird/job.c:82 #, c-format -msgid "Unable to position to end of data on device %s: ERR=%s\n" -msgstr "" -"No se puede posicionar al final los datos en el dispositivo %s: ERR=%s\n" +msgid "Could not add job queue: ERR=%s\n" +msgstr "No se ha podido añadir la cola de trabajo: ERR=%s\n" -#: src/stored/mount.c:411 src/stored/mount.c:737 +#: src/dird/job.c:121 src/dird/ua_output.c:714 src/dird/xua_output.c:869 +#: src/tools/cats_test.c:363 #, c-format -msgid "Volume \"%s\" not on device %s.\n" -msgstr "Volumen \"%s\" no en dispositivo %s.\n" +msgid "Could not open database \"%s\".\n" +msgstr "No se puede abrir la base de datos \"%s\".\n" -#: src/stored/mount.c:444 -#, c-format -msgid "" -"Director wanted Volume \"%s\".\n" -" Current Volume \"%s\" not acceptable because:\n" -" %s" -msgstr "" -"Director quería Volumen \"%s\".\n" -" Volumen actual \"%s\" no es aceptable porque:\n" -" %s" +#: src/dird/job.c:135 src/dird/job.c:139 src/dird/job.c:145 +#: src/dird/ua_status.c:367 src/dird/ua_dotcmds.c:831 src/dird/ua_cmds.c:836 +#: src/dird/ua_cmds.c:1589 +msgid "unknown source" +msgstr "fuente desconocida" -#: src/stored/mount.c:603 -#, c-format -msgid "Ready to append to end of Volume \"%s\" part=%d size=%s\n" -msgstr "Listo para anexar al final del Volumen \"%s\" parte=%d tamaño=%s\n" +#: src/dird/job.c:175 src/dird/job.c:397 src/dird/job.c:399 src/dird/job.c:599 +#: src/dird/job.c:601 src/dird/job.c:1303 src/dird/job.c:1345 +#: src/dird/job.c:1355 +msgid "Job resource" +msgstr "Recurso Job" -#: src/stored/mount.c:607 +#: src/dird/job.c:177 src/dird/job.c:1038 src/dird/job.c:1300 +#: src/dird/job.c:1347 src/dird/job.c:1363 src/dird/vbackup.c:77 +#: src/dird/mac.c:208 src/dird/mac.c:209 src/dird/backup.c:91 +msgid "Pool resource" +msgstr "Recurso pool" + +#: src/dird/job.c:222 src/dird/job.c:339 #, c-format -msgid "" -"Bacula cannot write on DVD Volume \"%s\" because: The sizes do not match! " -"Volume=%s Catalog=%s\n" +msgid "Unimplemented job type: %d\n" +msgstr "Tipo de Job no implementado: %d\n" + +#: src/dird/job.c:263 +msgid "Job canceled because max start delay time exceeded.\n" +msgstr "Job cancelado porque el tiempo máximo de espera ha excedido.\n" + +#: src/dird/job.c:268 +#, fuzzy +msgid "Job canceled because max run sched time exceeded.\n" msgstr "" -"Bacula no puedo escribir en el volumen DVD \"%s\" porque: Los tamaños no " -"coinciden! Volumen=%s Catálogo=%s\n" +"Job cancelado porque el tiempo de ejecución máximo programado se ha " +"superado.\n" -#: src/stored/mount.c:621 -#, c-format -msgid "Ready to append to end of Volume \"%s\" at file=%d.\n" -msgstr "Listo para anexar al final del volumen \"%s\" en el archivo=%d\n" +#: src/dird/job.c:378 +msgid "Failed to connect to File daemon.\n" +msgstr "Error al conectar con demonio File.\n" + +#: src/dird/job.c:412 +#, fuzzy +msgid "Failed to select Storage daemon.\n" +msgstr "Error al conectar con demonio Storage.\n" + +#: src/dird/job.c:417 src/dird/ua_dotcmds.c:837 src/dird/ua_cmds.c:842 +#: src/dird/ua_cmds.c:1600 src/dird/msgchan.c:69 +msgid "Failed to connect to Storage daemon.\n" +msgstr "Error al conectar con demonio Storage.\n" + +#: src/dird/job.c:512 +#, fuzzy +msgid "canceled" +msgstr "Cancelado" -#: src/stored/mount.c:624 +#: src/dird/job.c:526 #, fuzzy, c-format -msgid "" -"For Volume \"%s\":\n" -"The number of files mismatch! Volume=%u Catalog=%u\n" -"Correcting Catalog\n" -msgstr "" -"Bacula no puede escribir en el Volumen de cinta \"%s\" porque:\n" -"El número de archivos de desfasa! Volumen=%u Catalogo=%u\n" +msgid "JobId %s, Job %s marked to be %s.\n" +msgstr "JobId %s, Job %s marcado para ser cancelado.\n" -#: src/stored/mount.c:631 src/stored/mount.c:659 +#: src/dird/job.c:661 +msgid "Max wait time exceeded. Job canceled.\n" +msgstr "Máximo tiempo de espera excedido. Job cancelado.\n" + +#: src/dird/job.c:666 +msgid "Max run time exceeded. Job canceled.\n" +msgstr "Máximo tiempo de ejecución excedido. Job cancelado.\n" + +#: src/dird/job.c:671 #, fuzzy -msgid "Error updating Catalog\n" -msgstr "Error abriendo archivo de datos %s\n" +msgid "Max run sched time exceeded. Job canceled.\n" +msgstr "Máximo tiempo de ejecución excedido. Job cancelado.\n" -#: src/stored/mount.c:636 +#: src/dird/job.c:793 #, c-format -msgid "" -"Bacula cannot write on tape Volume \"%s\" because:\n" -"The number of files mismatch! Volume=%u Catalog=%u\n" -msgstr "" -"Bacula no puede escribir en el Volumen de cinta \"%s\" porque:\n" -"El número de archivos de desfasa! Volumen=%u Catalogo=%u\n" +msgid "Pool \"%s\" not in database. ERR=%s" +msgstr "Poll \"%s\" no en base de datos. ERR=%s" -#: src/stored/mount.c:647 +#: src/dird/job.c:797 #, c-format -msgid "Ready to append to end of Volume \"%s\" size=%s\n" -msgstr "Listo para anexar al final del volumen \"%s\" tamaño=%s\n" - -#: src/stored/mount.c:651 -#, fuzzy, c-format -msgid "" -"For Volume \"%s\":\n" -"The sizes do not match! Volume=%s Catalog=%s\n" -"Correcting Catalog\n" -msgstr "" -"Bacula no puedo escribir en el volumen DVD \"%s\" porque: Los tamaños no " -"coinciden! Volumen=%s Catálogo=%s\n" +msgid "Created database record for Pool \"%s\".\n" +msgstr "Creado registro base de datos para Pool \"%s\".\n" -#: src/stored/mount.c:664 +#: src/dird/job.c:879 src/dird/job.c:923 #, c-format -msgid "" -"Bacula cannot write on disk Volume \"%s\" because: The sizes do not match! " -"Volume=%s Catalog=%s\n" -msgstr "" -"Bacula no puede escribir en el Volumen de cinta \"%s\" porque:Los tamaños no " -"coinciden! Volumen=%s Catalogo=%s\n" +msgid "JobId %d already running. Duplicate job not allowed.\n" +msgstr "JobId %d ya esta en ejecución. No se permite job duplicados.\n" -#: src/stored/mount.c:727 +#: src/dird/job.c:911 #, c-format -msgid "Labeled new Volume \"%s\" on device %s.\n" -msgstr "Etiquetada nuevo Volumen \"%s\" en el dispositivo %s.\n" +msgid "Cancelling duplicate JobId=%d.\n" +msgstr "Cancelando duplicado JobId=%d.\n" -#: src/stored/mount.c:732 -#, c-format -msgid "Device %s not configured to autolabel Volumes.\n" -msgstr "Dispositivo %s no configurado para volúmenes autolabel.\n" +#: src/dird/job.c:946 src/dird/job.c:947 +#, fuzzy +msgid "Run NextPool override" +msgstr "Anular Ejecutar Pool" -#: src/stored/mount.c:751 -#, c-format -msgid "Marking Volume \"%s\" in Error in Catalog.\n" -msgstr "Marcado volumen \"%s\" en Error en el Catálogo.\n" +#: src/dird/job.c:948 +#, fuzzy +msgid "Storage from Run NextPool override" +msgstr "Storage desde recurso Pool's NextPool " -#: src/stored/mount.c:768 -#, c-format -msgid "" -"Autochanger Volume \"%s\" not found in slot %d.\n" -" Setting InChanger to zero in catalog.\n" -msgstr "" -"Volumen auto-cambiador \"%s\" no se encuentra en la ranura %d\n" -"Estableciendo InChanger a cero en el catálogo.\n" +#: src/dird/job.c:952 src/dird/job.c:953 src/dird/job.c:1357 +#, fuzzy +msgid "Job's NextPool resource" +msgstr "Recurso Job Pool's NextPool " -#: src/stored/mount.c:787 -msgid "Hey!!!!! WroteVol non-zero !!!!!\n" -msgstr "Hey !!!!! No WroteVol cero !!!!!\n" +#: src/dird/job.c:954 +#, fuzzy +msgid "Storage from Job's NextPool resource" +msgstr "Storage desde recurso Pool's NextPool " -#: src/stored/mount.c:834 -#, c-format -msgid "" -"Invalid tape position on volume \"%s\" on device %s. Expected %d, got %d\n" -msgstr "" -"Posición de la cinta no válida en el volumen \"%s\" en el dispositivo %s. " -"Esperaba %d, obtuvo %d\n" +#: src/dird/job.c:962 src/dird/job.c:963 +msgid "Job Pool's NextPool resource" +msgstr "Recurso Job Pool's NextPool " -#: src/stored/mount.c:875 src/stored/btape.c:3122 -#, c-format -msgid "Cannot open Dev=%s, Vol=%s\n" -msgstr "No se puede abrir Dev=%s, Vol=%s\n" +#: src/dird/job.c:964 +msgid "Storage from Pool's NextPool resource" +msgstr "Storage desde recurso Pool's NextPool " -#: src/stored/mac.c:81 -msgid "Read and write devices not properly initialized.\n" -msgstr "" -"Dispositivos de lectura y escritura no se han iniciado correctamente.\n" +#: src/dird/job.c:995 +#, fuzzy +msgid "Run Pool override" +msgstr "Anular Ejecutar Pool" -#: src/stored/mac.c:87 -#, c-format -msgid "No Volume names found for %s.\n" -msgstr "Nombres de Volúmenes no encontrados para %s.\n" +#: src/dird/job.c:1006 +msgid "Run FullPool override" +msgstr "Anular Ejecutar FullPool " -#: src/stored/pythonsd.c:160 src/filed/pythonfd.c:142 -#, c-format -msgid "Cannot delete attribute %s" -msgstr "No se puedo eliminar atributo %s" +#: src/dird/job.c:1008 +msgid "Job FullPool override" +msgstr "Anular Job FullPool" -#: src/stored/pythonsd.c:193 src/filed/pythonfd.c:160 src/filed/pythonfd.c:176 -#, c-format -msgid "Cannot find attribute %s" -msgstr "No se puedo encontrar atributo %s" +#: src/dird/job.c:1017 +msgid "Run IncPool override" +msgstr "Anular Ejecutar IncPoll" -#: src/stored/pythonsd.c:208 -msgid "Error in ParseTuple\n" -msgstr "Error en ParseTuple\n" +#: src/dird/job.c:1019 +msgid "Job IncPool override" +msgstr "Anular Job IncPoll" -#: src/stored/pythonsd.c:224 -msgid "Parse tuple error in job_write\n" -msgstr "Error de análisis de tupla en job_write\n" +#: src/dird/job.c:1028 +msgid "Run DiffPool override" +msgstr "Anular Ejecutar DiffPool" -#: src/stored/pythonsd.c:261 -#, c-format -msgid "Error in Python method %s\n" -msgstr "Error en el método Python %s\n" +#: src/dird/job.c:1030 +msgid "Job DiffPool override" +msgstr "Anular Job DiffPool" -#: src/stored/spool.c:83 -msgid "Spooling statistics:\n" -msgstr "Estadísticas de cola:\n" +#: src/dird/job.c:1097 +msgid "FileSet MD5 digest not found.\n" +msgstr "FileSet MD5 digest no encontrado.\n" -#: src/stored/spool.c:86 +#: src/dird/job.c:1102 #, c-format -msgid "" -"Data spooling: %u active jobs, %s bytes; %u total jobs, %s max bytes/job.\n" -msgstr "" -"Encolando datos: %u jobs activos, %s bytes; %u total de jobs, %s máximo " -"bytes/job.\n" +msgid "Could not create FileSet \"%s\" record. ERR=%s\n" +msgstr "No es posible crear el registro FileSet \"%s\". ERR=%s\n" -#: src/stored/spool.c:94 +#: src/dird/job.c:1144 #, c-format -msgid "Attr spooling: %u active jobs, %s bytes; %u total jobs, %s max bytes.\n" -msgstr "" -"Encolando Atributos: %u jobs activos, %s bytes; %u jobs total, %s bytes " -"máximos.\n" +msgid "Error updating job record. %s" +msgstr "Error actualizando registro job. %s" -#: src/stored/spool.c:112 -msgid "Spooling data ...\n" -msgstr "Datos en cola ...\n" +#: src/dird/job.c:1290 +msgid "Run pool override" +msgstr "Anular Ejecutar Pool" + +#: src/dird/job.c:1295 +msgid "Run storage override" +msgstr "Anular Ejecutar Storage" + +#: src/dird/job.c:1366 +msgid "Client resource" +msgstr "Recurso de cliente" + +#: src/dird/job.c:1422 src/dird/ua_run.c:392 +msgid "No storage specified.\n" +msgstr "Almacenamiento no especificado.\n" -#: src/stored/spool.c:138 +#: src/dird/job.c:1583 #, c-format -msgid "Bad return from despool WroteVol=%d\n" -msgstr "Mal retorno de despool WroteVol=%d\n" +msgid "Could not start clone job: \"%s\".\n" +msgstr "No se pudo iniciar el job de clonación: \"%s\".\n" -#: src/stored/spool.c:171 +#: src/dird/job.c:1586 #, c-format -msgid "Open data spool file %s failed: ERR=%s\n" -msgstr "Fallo al abrir archivo %s de datos de cola: ERR=%s\n" +msgid "Clone JobId %d started.\n" +msgstr "Clonar JobId %d iniciado.\n" -#: src/stored/spool.c:225 -msgid "Despooling zero bytes. Your disk is probably FULL!\n" -msgstr "Desencolando cero bytes. El disco probablemente esta LLENO!\n" +#: src/dird/vbackup.c:64 src/dird/mac.c:97 +msgid "Could not get or create a Pool record.\n" +msgstr "No es posible obtener o crear un registro Pool.\n" -#: src/stored/spool.c:234 +#: src/dird/vbackup.c:121 #, c-format -msgid "Committing spooled data to Volume \"%s\". Despooling %s bytes ...\n" +msgid "Start Virtual Backup JobId %s, Job=%s\n" +msgstr "Respaldo Virtual iniciado JobId %s, Job=%s\n" + +#: src/dird/vbackup.c:125 +msgid "" +"This Job is not an Accurate backup so is not equivalent to a Full backup.\n" msgstr "" -"Perpetrando datos encolados al volumen \"%s\". Desencolando %s bytes ...\n" +"Este trabajo no es una copia de seguridad exacta, por lo que no es " +"equivalente a una copia de seguridad completa.\n" -#: src/stored/spool.c:239 +#: src/dird/vbackup.c:141 src/dird/ua_dotcmds.c:749 src/dird/ua_restore.c:778 +#: src/dird/ua_restore.c:821 #, c-format -msgid "Writing spooled data to Volume. Despooling %s bytes ...\n" -msgstr "Escribiendo datos encolados al volumen. Desencolando %s bytes ...\n" +msgid "Unable to get Job record for JobId=%s: ERR=%s\n" +msgstr "No se puede obtener el registro Job para JobId=%s: ERR=%s\n" -#: src/stored/spool.c:339 +#: src/dird/vbackup.c:145 src/dird/ua_restore.c:782 #, c-format -msgid "" -"Despooling elapsed time = %02d:%02d:%02d, Transfer rate = %s Bytes/second\n" +msgid "Selecting jobs to build the Full state at %s\n" +msgstr "Seleccionando trabajos para construir el estado completo en %s\n" + +#: src/dird/vbackup.c:171 +#, fuzzy +msgid "No valid Jobs found from user selection.\n" +msgstr "No se encontró ningún Job para: %s.\n" + +#: src/dird/vbackup.c:175 +#, fuzzy, c-format +msgid "Using user supplied JobIds=%s\n" +msgstr "%s utilizando JobId=%s Job=%s\n" + +#: src/dird/vbackup.c:194 +msgid "No previous Full found in list, using Differential level\n" msgstr "" -"Tiempo transcurrido desencolando = %02d:%02d:%02d, Tasa de transferencia = " -"%s Bytes/segundo\n" -#: src/stored/spool.c:348 src/stored/spool.c:549 src/stored/spool.c:595 -#, c-format -msgid "Ftruncate spool file failed: ERR=%s\n" -msgstr "Fallo ftruncate archivo de cola: ERR=%s\n" +#: src/dird/vbackup.c:199 +msgid "No previous Full found in list, using Incremental level\n" +msgstr "" + +#: src/dird/vbackup.c:212 +msgid "No previous Jobs found.\n" +msgstr "Jobs previos no encontrados.\n" -#: src/stored/spool.c:407 +#: src/dird/vbackup.c:235 #, c-format -msgid "Spool header read error. ERR=%s\n" -msgstr "Error de lectura de la cola. ERR=%s\n" +msgid "Error getting Job record for previous Job: ERR=%s" +msgstr "Error obteniendo registro Job para Job anterior: ERR=%s" + +#: src/dird/vbackup.c:241 src/dird/mac.c:112 +msgid "Could not get or create the FileSet record.\n" +msgstr "No es posible obtener o crear un registro FileSet.\n" -#: src/stored/spool.c:410 +#: src/dird/vbackup.c:361 src/dird/admin.c:78 src/dird/mac.c:688 +#: src/dird/backup.c:749 #, c-format -msgid "Spool read error. Wanted %u bytes, got %d\n" -msgstr "Error de lectura de la cola. Esperaba %u bytes, obtuvo %d\n" +msgid "Error getting Job record for Job report: ERR=%s" +msgstr "Error al obtener el registro del Job para reporte de trabajo: ERR=%s" -#: src/stored/spool.c:411 +#: src/dird/vbackup.c:368 src/dird/backup.c:756 #, c-format -msgid "Spool header read error. Wanted %u bytes, got %d\n" -msgstr "" -"Error de lectura de cabecera de la cola. Esperaba %u bytes, obtuvo %d\n" +msgid "Error getting Client record for Job report: ERR=%s" +msgstr "Error al obtener registro de Clientes para reporte de Job: ERR=%s" -#: src/stored/spool.c:418 src/stored/spool.c:419 +#: src/dird/vbackup.c:374 src/dird/mac.c:718 src/dird/backup.c:762 #, c-format -msgid "Spool block too big. Max %u bytes, got %u\n" -msgstr "Bloque de la cola demasiado grande. Máximo %u bytes, obtuvo %u\n" +msgid "Error getting Media record for Volume \"%s\": ERR=%s" +msgstr "Error al obtener registro de Media para Volumen \"%s\": ERR=%s" -#: src/stored/spool.c:425 src/stored/spool.c:426 +#: src/dird/vbackup.c:411 src/dird/restore.c:614 src/dird/admin.c:98 +#: src/dird/backup.c:802 #, c-format -msgid "Spool data read error. Wanted %u bytes, got %d\n" -msgstr "Error de lectura de datos de la cola. Esperaba %u bytes, obtuvo %d\n" +msgid "Inappropriate term code: %c\n" +msgstr "Inadecuado código de terminación: %c\n" -#: src/stored/spool.c:480 +#: src/dird/vbackup.c:448 #, fuzzy, c-format msgid "" -"User specified Job spool size reached: JobSpoolSize=%s MaxJobSpoolSize=%s\n" -msgstr "Tamaño de cola especificada por el usuario alcanzado.\n" +"%s %s %s (%s):\n" +" Build OS: %s %s %s\n" +" JobId: %d\n" +" Job: %s\n" +" Backup Level: Virtual Full\n" +" Client: \"%s\" %s\n" +" FileSet: \"%s\" %s\n" +" Pool: \"%s\" (From %s)\n" +" Catalog: \"%s\" (From %s)\n" +" Storage: \"%s\" (From %s)\n" +" Scheduled time: %s\n" +" Start time: %s\n" +" End time: %s\n" +" Elapsed time: %s\n" +" Priority: %d\n" +" SD Files Written: %s\n" +" SD Bytes Written: %s (%sB)\n" +" Rate: %.1f KB/s\n" +" Volume name(s): %s\n" +" Volume Session Id: %d\n" +" Volume Session Time: %d\n" +" Last Volume Bytes: %s (%sB)\n" +" SD Errors: %d\n" +" SD termination status: %s\n" +" Termination: %s\n" +"\n" +msgstr "" +"%s %s %s (%s): %s\n" +" Build OS: %s %s %s\n" +" JobId: %d\n" +" Job: %s\n" +" Nivel del Respaldo: Virtual Completo\n" +" Cliente: \"%s\" %s\n" +" FileSet: \"%s\" %s\n" +" Pool: \"%s\" (Desde %s)\n" +" Catalogo: \"%s\" (Desde %s)\n" +" Storage: \"%s\" (Desde %s)\n" +" Hora programada: %s\n" +" Hora de inicio: %s\n" +" Hora de finalización: %s\n" +" Tiempo transcurrido: %s\n" +" Prioridad: %d\n" +" SD Archivos Escritos: %s\n" +" SD Bytes Escritos: %s (%sB)\n" +" Tasa: %.1f KB/s\n" +" Nombre del Volumen(es): %s\n" +" Id de Sesión de Volumen: %d\n" +" Tiempo de Sesión de Volumen: %d\n" +" Ultimo Bytes del Volumen: %s (%sB)\n" +" Errores del SD: %d\n" +" Estado de terminación del SD: %s\n" +" Terminación: %s\n" +"\n" -#: src/stored/spool.c:485 -#, fuzzy, c-format -msgid "" -"User specified Device spool size reached: DevSpoolSize=%s MaxDevSpoolSize=" -"%s\n" -msgstr "Tamaño de cola especificada por el usuario alcanzado.\n" +#: src/dird/ua_output.c:57 src/dird/ua_output.c:81 src/dird/xua_output.c:56 +#: src/dird/xua_output.c:80 +msgid "ON or OFF keyword missing.\n" +msgstr "Faltan palabra clave ON u OFF.\n" -#: src/stored/spool.c:492 -msgid "Bad return from despool in write_block.\n" -msgstr "Malo retorno desde despool en write_block.\n" +#: src/dird/ua_output.c:101 src/dird/xua_output.c:100 +msgid "Disabled Jobs:\n" +msgstr "Jobs Deshabilitados:\n" -#: src/stored/spool.c:500 -msgid "Spooling data again ...\n" -msgstr "Encolando datos de nuevo ...\n" +#: src/dird/ua_output.c:107 src/dird/xua_output.c:106 +msgid "No disabled Jobs.\n" +msgstr "Ningún Jobs Deshabilitado.\n" -#: src/stored/spool.c:532 -#, c-format -msgid "Error writing header to spool file. ERR=%s\n" -msgstr "Error escribiendo encabezado para archivo de cola. ERR=%s\n" +#: src/dird/ua_output.c:151 +msgid "disabled" +msgstr "deshabilitado" -#: src/stored/spool.c:537 -#, c-format -msgid "" -"Error writing header to spool file. Disk probably full. Attempting recovery. " -"Wanted to write=%d got=%d\n" -msgstr "" -"Error al escribir encabezado al archivo de cola. Probablemente disco lleno. " -"Intentando recuperación. Esperaba escribir=%d tiene=%d\n" +#: src/dird/ua_output.c:199 src/dird/xua_output.c:204 +msgid "Keywords for the show command are:\n" +msgstr "Palabras clave para el comando show son:\n" -#: src/stored/spool.c:555 src/stored/spool.c:601 -msgid "Fatal despooling error." -msgstr "Error fatal desencolando." +#: src/dird/ua_output.c:205 src/dird/xua_output.c:211 +#, c-format +msgid "%s resource %s not found.\n" +msgstr "%s recurso %s no encontrado.\n" -#: src/stored/spool.c:563 -msgid "Retrying after header spooling error failed.\n" -msgstr "Fallido reintento después de error encolando encabezado.\n" +#: src/dird/ua_output.c:208 src/dird/xua_output.c:215 +#, c-format +msgid "Resource %s not found\n" +msgstr "Recursos %s no encontrado\n" -#: src/stored/spool.c:579 +#: src/dird/ua_output.c:278 src/dird/xua_output.c:356 +msgid "Hey! DB is NULL\n" +msgstr "Hey! BD esta VACÍA\n" + +#: src/dird/ua_output.c:435 src/dird/xua_output.c:590 #, c-format -msgid "Error writing data to spool file. ERR=%s\n" -msgstr "Error escribiendo datos en archivo de cola. ERR=%s\n" +msgid "Jobid %d used %d Volume(s): %s\n" +msgstr "Jobid %d usado %d Volumen(s): %s\n" -#: src/stored/spool.c:612 -msgid "Retrying after data spooling error failed.\n" -msgstr "Fallido reintento después de error encolando dato.\n" +#: src/dird/ua_output.c:454 src/dird/xua_output.c:609 +msgid "No Pool specified.\n" +msgstr "Ningún Pool especificado.\n" -#: src/stored/spool.c:682 -msgid "Network error on BlastAttributes.\n" -msgstr "Error de red en BlastAttributes.\n" +#: src/dird/ua_output.c:465 src/dird/ua_select.c:531 src/dird/xua_output.c:620 +#: src/dird/ua_update.c:424 +#, c-format +msgid "Error obtaining pool ids. ERR=%s\n" +msgstr "Error al obteniendo pool ids. ERR=%s\n" -#: src/stored/spool.c:706 src/stored/spool.c:730 +#: src/dird/ua_output.c:475 src/dird/xua_output.c:630 #, c-format -msgid "Fseek on attributes file failed: ERR=%s\n" -msgstr "Fallo fseek en los atributos de archivo: ERR=%s\n" +msgid "Pool: %s\n" +msgstr "Pool: %s\n" -#: src/stored/spool.c:718 -#, fuzzy, c-format -msgid "Truncate on attributes file failed: ERR=%s\n" -msgstr "Fallo fseek en los atributos de archivo: ERR=%s\n" +#: src/dird/ua_output.c:491 src/dird/xua_output.c:646 +msgid "Ignoring invalid value for days. Max is 50.\n" +msgstr "Ignorando valor invalido para días. Máximo es 50.\n" -#: src/stored/spool.c:742 +#: src/dird/ua_output.c:513 src/dird/xua_output.c:668 #, c-format -msgid "Sending spooled attrs to the Director. Despooling %s bytes ...\n" -msgstr "Enviando attrs encolados al Director. Desencolando %s bytes ...\n" +msgid "Unknown list keyword: %s\n" +msgstr "Lista de palabras clave desconocida: %s\n" -#: src/stored/spool.c:768 +#: src/dird/ua_output.c:538 src/dird/xua_output.c:693 #, c-format -msgid "fopen attr spool file %s failed: ERR=%s\n" -msgstr "Fallo fopen en archivo %s de atributo de cola: ERR=%s\n" +msgid "%s is not a job name.\n" +msgstr "%s no es un nombre de Job.\n" -#: src/stored/lock.c:405 +#: src/dird/ua_output.c:552 src/dird/xua_output.c:707 #, c-format -msgid "pthread_cond_wait failure. ERR=%s\n" -msgstr "pthread_cond_wait fallido. ERR=%s\n" - -#: src/stored/lock.c:504 -msgid "unknown blocked code" -msgstr "Código desconocido bloqueado" +msgid "Could not find Pool for Job %s\n" +msgstr "No se pudo encontrar Pool para Job %s\n" -#: src/stored/stored_conf.c:241 +#: src/dird/ua_output.c:565 src/dird/xua_output.c:720 #, c-format -msgid "Expected a Device Type keyword, got: %s" -msgstr "Esperaba una palabra clave Tipo Device, obtuvo: %s" +msgid "Could not find next Volume for Job %s (Pool=%s, Level=%s).\n" +msgstr "" +"No se pudo encontrar el siguiente Volumen para Job %s (Pool=%s, Nivel=%s).\n" -#: src/stored/stored_conf.c:255 +#: src/dird/ua_output.c:569 src/dird/xua_output.c:724 #, c-format msgid "" -"Maximum Block Size configured value %u is greater than allowed maximum: %u" +"The next Volume to be used by Job \"%s\" (Pool=%s, Level=%s) will be %s\n" msgstr "" -"Valor máximo de tamaño bloque configurado %u es mayor de lo máximo " -"permitido: %u" +"El próximo Volumen que se utilizará por Job \"%s\" (Pool=%s, Nivel=%s) será " +"%s\n" -#: src/stored/stored_conf.c:269 +#: src/dird/ua_output.c:582 src/dird/xua_output.c:737 #, c-format -msgid "Warning: no \"%s\" resource (%d) defined.\n" -msgstr "Advertencia: Recurso \"%s\" (%d) no definido.\n" +msgid "Could not find next Volume for Job %s.\n" +msgstr "No se pudo encontrar el siguiente Volumen para Job %s.\n" -#: src/stored/stored_conf.c:272 +#: src/dird/ua_output.c:727 src/dird/xua_output.c:882 #, c-format -msgid "dump_resource type=%d\n" -msgstr "dump_resource tipo=%d\n" +msgid "Pool %s not in database. %s" +msgstr "Pool %s no creado en la base de datos. %s" -#: src/stored/stored_conf.c:388 +#: src/dird/ua_output.c:735 src/dird/xua_output.c:890 #, c-format -msgid "Warning: unknown resource type %d\n" -msgstr "Advertencia: Tipo de recurso %d desconocido\n" +msgid "Pool %s created in database.\n" +msgstr "Pool %s creado en la base de datos.\n" + +#: src/dird/ua_output.c:788 src/dird/xua_output.c:943 +msgid "You have no messages.\n" +msgstr "Usted no tiene mensajes.\n" + +#: src/dird/ua_output.c:868 src/dird/xua_output.c:1023 +msgid "Message too long to display.\n" +msgstr "Mensaje demasiado largo para mostrar.\n" -#: src/stored/stored_conf.c:555 src/stored/stored_conf.c:645 -#: src/stored/stored_conf.c:680 src/wx-console/console_conf.c:164 -#: src/wx-console/console_conf.c:239 src/wx-console/console_conf.c:284 -#: src/wx-console/console_conf.c:311 src/console/console_conf.c:157 -#: src/console/console_conf.c:233 src/console/console_conf.c:278 -#: src/console/console_conf.c:305 src/filed/filed_conf.c:333 -#: src/filed/filed_conf.c:398 src/filed/filed_conf.c:428 -#: src/qt-console/bat_conf.cpp:161 src/qt-console/bat_conf.cpp:239 -#: src/qt-console/bat_conf.cpp:287 src/qt-console/bat_conf.cpp:317 +#: src/dird/jobq.c:62 #, c-format -msgid "Unknown resource type %d\n" -msgstr "Tipo de recurso desconocido %d\n" +msgid "pthread_attr_init: ERR=%s\n" +msgstr "pthread_attr_init: ERR=%s\n" -#: src/stored/stored_conf.c:584 +#: src/dird/jobq.c:71 #, c-format -msgid "\"%s\" item is required in \"%s\" resource, but not found.\n" -msgstr "ítem \"%s\" es necesario en recurso \"%s\", pero no se encuentra.\n" +msgid "pthread_mutex_init: ERR=%s\n" +msgstr "pthread_mutex_init: ERR=%s\n" -#: src/stored/stored_conf.c:590 +#: src/dird/jobq.c:77 #, c-format -msgid "Too many items in \"%s\" resource\n" -msgstr "Demasiados elementos en recursos \"%s\"\n" +msgid "pthread_cond_init: ERR=%s\n" +msgstr "pthread_cond_init: ERR=%s\n" -#: src/stored/stored_conf.c:624 +#: src/dird/jobq.c:119 #, c-format -msgid "Cannot find AutoChanger resource %s\n" -msgstr "No puede encontrar recurso Auto-cambiador %s\n" +msgid "pthread_cond_broadcast: ERR=%s\n" +msgstr "pthread_cond_broadcast: ERR=%s\n" -#: src/stored/stored_conf.c:640 -#, fuzzy, c-format -msgid "Unable to init lock: ERR=%s\n" -msgstr "No se puede iniciar mutex: ERR=%s\n" +#: src/dird/jobq.c:127 +#, c-format +msgid "pthread_cond_wait: ERR=%s\n" +msgstr "pthread_cond_wait: ERR=%s\n" -#: src/stored/stored_conf.c:698 +#: src/dird/jobq.c:168 #, c-format -msgid "" -"Attempt to define second \"%s\" resource named \"%s\" is not permitted.\n" -msgstr "" -"Intento para definir secundo recurso \"%s\" denominado \"%s\" no está " -"permitido.\n" +msgid "Job %s waiting %d seconds for scheduled start time.\n" +msgstr "Job %s esperando %d segundos para la hora de inicio programada.\n" -#: src/stored/dev.c:127 +#: src/dird/jobq.c:230 #, c-format -msgid "Unable to stat device %s: ERR=%s\n" -msgstr "No se puede stat dispositivo %s: ERR=%s\n" +msgid "pthread_thread_create: ERR=%s\n" +msgstr "pthread_thread_create: ERR=%s\n" -#: src/stored/dev.c:145 +#: src/dird/jobq.c:340 #, c-format -msgid "" -"%s is an unknown device type. Must be tape or directory\n" -" or have RequiresMount=yes for DVD. st_mode=%x\n" -msgstr "" -"%s es un tipo de dispositivo desconocido. Debe ser cinta o directorio\n" -" o tener RequiresMount=yes para DVD. st_mode=%x\n" +msgid "pthread_cond_signal: ERR=%s\n" +msgstr "pthread_cond_signal: ERR=%s\n" -#: src/stored/dev.c:155 -msgid "DVD support is now deprecated\n" -msgstr "" +#: src/dird/jobq.c:351 +#, c-format +msgid "pthread_create: ERR=%s\n" +msgstr "pthread_create: ERR=%s\n" -#: src/stored/dev.c:231 +#: src/dird/jobq.c:635 #, c-format -msgid "Unable to stat mount point %s: ERR=%s\n" -msgstr "No se puede stat punto de montaje %s: ERR=%s\n" +msgid "Rescheduled Job %s at %s to re-run in %d seconds (%s).\n" +msgstr "Job %s en %s reprogramado para volver a ejecutar en %d segundos(%s).\n" + +#: src/dird/jobq.c:694 src/dird/jobq.c:699 +msgid "previous Job" +msgstr "Job anterior" -#: src/stored/dev.c:236 +#: src/dird/jobq.c:736 +#, c-format msgid "" -"Mount and unmount commands must defined for a device which requires mount.\n" +"Job canceled. Attempt to read and write same device.\n" +" Read storage \"%s\" (From %s) -- Write storage \"%s\" (From %s)\n" msgstr "" -"Comandos mount y unmount deben ser definidos para un dispositivo que " -"requiere montaje.\n" +"Job cancelado. Intento de leer y escribir mismo dispositivo.\n" +" Storage de Lectura \"%s\" (desde %s) -- Storage de Escritura \"%s\" (desde " +"%s)\n" -#: src/stored/dev.c:247 +#: src/dird/ua_select.c:42 #, c-format -msgid "Min block size > max on device %s\n" -msgstr "Mínimo tamaño de bloque > máximo en el dispositivo %s\n" +msgid "The current %s retention period is: %s\n" +msgstr "El período actual %s de retención es: %s\n" -#: src/stored/dev.c:251 -#, c-format -msgid "Block size %u on device %s is too large, using default %u\n" -msgstr "" -"Tamaño de bloque %u en el dispositivo %s es demasiado grande, usando %u " -"omisión\n" +#: src/dird/ua_select.c:47 +msgid "Continue? (yes/mod/no): " +msgstr "¿Continuar? (sí/mod/no):" -#: src/stored/dev.c:256 -#, fuzzy, c-format -msgid "Max block size %u not multiple of device %s block size=%d.\n" -msgstr "" -"Tamaño máximo de bloque %u no es múltiplo de tamaño de bloque en dispositivo " -"%s.\n" +#: src/dird/ua_select.c:50 src/dird/ua_run.c:614 +msgid "mod" +msgstr "mod" -#: src/stored/dev.c:260 -#, fuzzy, c-format -msgid "Max Vol Size < 8 * Max Block Size for device %s\n" -msgstr "" -"Máximo Tamaño de Volumen < 8 * Máximo Tamaño de Bloque en dispositivo %s\n" +#: src/dird/ua_select.c:51 +msgid "Enter new retention period: " +msgstr "Introduzca el nuevo periodo de retención:" -#: src/stored/dev.c:276 src/stored/dev.c:282 -#, c-format -msgid "Unable to init cond variable: ERR=%s\n" -msgstr "No se puede iniciar variable cond: ERR=%s\n" +#: src/dird/ua_select.c:55 +msgid "Invalid period.\n" +msgstr "Período no válido.\n" -#: src/stored/dev.c:288 -#, fuzzy, c-format -msgid "Unable to init spool mutex: ERR=%s\n" -msgstr "No se puede iniciar mutex: ERR=%s\n" +#: src/dird/ua_select.c:131 src/dird/ua_run.c:555 +msgid "You have the following choices:\n" +msgstr "Usted tiene las siguientes opciones:\n" -#: src/stored/dev.c:294 -#, fuzzy, c-format -msgid "Unable to init acquire mutex: ERR=%s\n" -msgstr "No se puede iniciar mutex: ERR=%s\n" +#: src/dird/ua_select.c:154 +msgid "The defined Storage resources are:\n" +msgstr "Los recursos Storage definidos son:\n" -#: src/stored/dev.c:300 -#, fuzzy, c-format -msgid "Unable to init read acquire mutex: ERR=%s\n" -msgstr "No se puede iniciar mutex: ERR=%s\n" +#: src/dird/ua_select.c:166 src/dird/ua_dotcmds.c:944 src/dird/ua_run.c:619 +#: src/dird/ua_cmds.c:1093 +msgid "Storage" +msgstr "Storage" -#: src/stored/dev.c:416 -msgid "Illegal mode given to open dev.\n" -msgstr "Modo ilegal dado para abrir dev.\n" +#: src/dird/ua_select.c:166 +msgid "Select Storage resource" +msgstr "Seleccione recurso Storage" -#: src/stored/dev.c:551 -#, c-format -msgid "Could not open file device %s. No Volume name given.\n" -msgstr "" -"No se pudo abrir dispositivo de archivo %s. No hay nombre volumen " -"determinado.\n" +#: src/dird/ua_select.c:181 src/dird/ua_restore.c:1296 +msgid "The defined FileSet resources are:\n" +msgstr "Los recursos FileSet definidos son:\n" -#: src/stored/dev.c:574 -#, c-format -msgid "Could not open: %s, ERR=%s\n" -msgstr "No se pudo abrir: %s, ERR=%s\n" +#: src/dird/ua_select.c:189 src/dird/ua_restore.c:1300 src/dird/ua_run.c:621 +msgid "FileSet" +msgstr "FileSet" -#: src/stored/dev.c:639 -#, c-format -msgid "No tape loaded or drive offline on %s.\n" -msgstr "Ninguna cinta cargada o unidad offline en %s.\n" +#: src/dird/ua_select.c:189 src/dird/ua_restore.c:1300 +msgid "Select FileSet resource" +msgstr "Seleccionar recurso FileSet" -#: src/stored/dev.c:649 -#, c-format -msgid "Rewind error on %s. ERR=%s.\n" -msgstr "Rebobinar error en %s. ERR=%s.\n" +#: src/dird/ua_select.c:219 src/dird/ua_cmds.c:2062 +msgid "Could not find a Catalog resource\n" +msgstr "No pudo encontrar un Catalogo de recursos\n" -#: src/stored/dev.c:659 src/stored/dev.c:737 src/stored/dev.c:878 -#: src/stored/dev.c:1469 -#, c-format -msgid "lseek error on %s. ERR=%s.\n" -msgstr "Iseek error en %s. ERR=%s.\n" +#: src/dird/ua_select.c:222 +msgid "You must specify a \"use \" command before continuing.\n" +msgstr "" +"Usted debe especificar un comando \"use \" antes de " +"continuar.\n" -#: src/stored/dev.c:708 -#, c-format -msgid "Bad call to eod. Device %s not open\n" -msgstr "Mala llamada para eod. Dispositivo %s no abierto\n" +#: src/dird/ua_select.c:228 +msgid "The defined Catalog resources are:\n" +msgstr "Los recursos Catalogo definidos son:\n" -#: src/stored/dev.c:775 -#, c-format -msgid "ioctl MTEOM error on %s. ERR=%s.\n" -msgstr "ioctl MTEOM error en %s. ERR=%s.\n" +#: src/dird/ua_select.c:236 +msgid "Catalog" +msgstr "Catalogo" -#: src/stored/dev.c:785 src/stored/dev.c:919 -#, c-format -msgid "ioctl MTIOCGET error on %s. ERR=%s.\n" -msgstr "ioctl MTIOCGET error en %s. ERR=%s.\n" +#: src/dird/ua_select.c:236 +msgid "Select Catalog resource" +msgstr "Seleccione recurso Catalogo" -#: src/stored/dev.c:865 -msgid "Bad device call. Device not open\n" -msgstr "Mala llamada de dispositivo. Dispositivo no abierto\n" +#: src/dird/ua_select.c:254 src/dird/ua_select.c:280 +msgid "The defined Job resources are:\n" +msgstr "Los recursos Job definidos son:\n" -#: src/stored/dev.c:877 -#, c-format -msgid "Seek error: ERR=%s\n" -msgstr "Seek error: ERR=%s\n" +#: src/dird/ua_select.c:265 src/dird/ua_select.c:288 src/dird/ua_select.c:329 +#: src/dird/ua_select.c:1341 src/dird/ua_run.c:620 src/dird/dird_conf.c:675 +#: src/dird/ua_prune.c:598 +msgid "Job" +msgstr "Job" -#: src/stored/dev.c:914 -msgid " Bacula status:" -msgstr "Estado del Bacula:" +#: src/dird/ua_select.c:265 src/dird/ua_select.c:288 +msgid "Select Job resource" +msgstr "Seleccione recurso Job" -#: src/stored/dev.c:915 src/stored/dev.c:998 src/stored/dev.c:1000 -#, c-format -msgid " file=%d block=%d\n" -msgstr "archivo=%d bloque=%d\n" +#: src/dird/ua_select.c:307 +#, fuzzy, c-format +msgid "Error: Restore Job resource \"%s\" does not exist.\n" +msgstr "Error: recurso Pool \"%s\" no existe.\n" -#: src/stored/dev.c:923 -msgid " Device status:" -msgstr "Estado del Dispositivo:" +#: src/dird/ua_select.c:321 +msgid "The defined Restore Job resources are:\n" +msgstr "Los recursos Restore definidos son:\n" -#: src/stored/dev.c:1022 -msgid "Bad call to load_dev. Device not open\n" -msgstr "Mala llamada a load_dev. Dispositivo no abierto\n" +#: src/dird/ua_select.c:329 +msgid "Select Restore Job" +msgstr "Seleccione recurso Restore" + +#: src/dird/ua_select.c:346 +msgid "The defined Client resources are:\n" +msgstr "Los recursos Clientes definidos son:\n" + +#: src/dird/ua_select.c:354 src/dird/ua_select.c:463 src/dird/ua_dotcmds.c:945 +#: src/dird/ua_run.c:625 src/dird/ua_cmds.c:1094 +msgid "Client" +msgstr "Client" + +#: src/dird/ua_select.c:354 +msgid "Select Client (File daemon) resource" +msgstr "Seleccione recurso Cliente (File Daemon)" -#: src/stored/dev.c:1033 src/stored/dev.c:1046 +#: src/dird/ua_select.c:381 #, c-format -msgid "ioctl MTLOAD error on %s. ERR=%s.\n" -msgstr "ioctl MTLOAD error en %s. ERR=%s.\n" +msgid "Error: Client resource %s does not exist.\n" +msgstr "Error: Recurso Cliente %s no existe.\n" -#: src/stored/dev.c:1077 +#: src/dird/ua_select.c:406 #, c-format -msgid "ioctl MTOFFL error on %s. ERR=%s.\n" -msgstr "ioctl MTOFFL error en %s. ERR=%s.\n" - -#: src/stored/dev.c:1118 -msgid "Bad call to fsf. Device not open\n" -msgstr "Mala llamada a fsf. Dispositivo no abierto\n" +msgid "Could not find Client %s: ERR=%s" +msgstr "No se pudo encontrar el Cliente %s: ERR=%s" -#: src/stored/dev.c:1129 src/stored/dev.c:1256 +#: src/dird/ua_select.c:416 src/dird/ua_select.c:470 #, c-format -msgid "Device %s at End of Tape.\n" -msgstr "Dispositivo %s en el final de la cinta.\n" +msgid "Could not find Client \"%s\": ERR=%s" +msgstr "No se pudo encontrar Cliente \"%s\": ERR=%s" -#: src/stored/dev.c:1160 src/stored/dev.c:1236 +#: src/dird/ua_select.c:445 #, c-format -msgid "ioctl MTFSF error on %s. ERR=%s.\n" -msgstr "ioctl MTFSF error en %s. ERR=%s.\n" +msgid "Error obtaining client ids. ERR=%s\n" +msgstr "Error al obtener el ID del cliente. ERR=%s\n" -#: src/stored/dev.c:1207 src/stored/btape.c:1977 -#, c-format -msgid "read error on %s. ERR=%s.\n" -msgstr "error de lectura en %s. ERR=%s.\n" +#: src/dird/ua_select.c:449 +msgid "No clients defined. You must run a job before using this command.\n" +msgstr "" +"Clientes no definidos. Usted debe ejecutar un Job antes de usar este " +"comando.\n" -#: src/stored/dev.c:1285 -msgid "Bad call to bsf. Device not open\n" -msgstr "Mala llamada a bsf. Dispositivo no abierto\n" +#: src/dird/ua_select.c:453 +msgid "Defined Clients:\n" +msgstr "Clientes definidos:\n" -#: src/stored/dev.c:1291 -#, c-format -msgid "Device %s cannot BSF because it is not a tape.\n" -msgstr "Dispositivo %s no puede BSF, porque no es una cinta.\n" +#: src/dird/ua_select.c:463 +msgid "Select the Client" +msgstr "Seleccione el Cliente" -#: src/stored/dev.c:1308 +#: src/dird/ua_select.c:496 src/dird/ua_select.c:520 src/dird/ua_select.c:565 #, c-format -msgid "ioctl MTBSF error on %s. ERR=%s.\n" -msgstr "ioctl MTBSF error en %s. ERR=%s.\n" +msgid "Could not find Pool \"%s\": ERR=%s" +msgstr "No se pudo encontrar Pool \"%s\": ERR=%s" -#: src/stored/dev.c:1327 -msgid "Bad call to fsr. Device not open\n" -msgstr "Mala llamada a FSR. El dispositivo no abre\n" +#: src/dird/ua_select.c:535 +msgid "No pools defined. Use the \"create\" command to create one.\n" +msgstr "Pools no definidos. Utilice el comando \"create\" para crear uno.\n" -#: src/stored/dev.c:1337 -#, c-format -msgid "ioctl MTFSR not permitted on %s.\n" -msgstr "ioctl MTFSR no permitido en %s.\n" +#: src/dird/ua_select.c:539 +msgid "Defined Pools:\n" +msgstr "Pools definidos:\n" -#: src/stored/dev.c:1365 -#, c-format -msgid "ioctl MTFSR %d error on %s. ERR=%s.\n" -msgstr "ioctl MTFSR %d error en %s. ERR=%s.\n" +#: src/dird/ua_select.c:541 src/dird/ua_select.c:561 src/dird/ua_update.c:353 +#: src/baconfig.h:76 +msgid "*None*" +msgstr "*Ninguno*" -#: src/stored/dev.c:1383 -msgid "Bad call to bsr_dev. Device not open\n" -msgstr "Mala llamada a bsr_dev. El dispositivo no abre\n" +#: src/dird/ua_select.c:552 src/dird/ua_select.c:665 src/dird/ua_run.c:633 +#: src/dird/ua_update.c:604 +msgid "Pool" +msgstr "Pool" -#: src/stored/dev.c:1393 -#, c-format -msgid "ioctl MTBSR not permitted on %s.\n" -msgstr "ioctl MTBSR no permitido en %s.\n" +#: src/dird/ua_select.c:552 +msgid "Select the Pool" +msgstr "Seleccione el Pool" -#: src/stored/dev.c:1407 +#: src/dird/ua_select.c:590 #, c-format -msgid "ioctl MTBSR error on %s. ERR=%s.\n" -msgstr "ioctl MTBSR error en %s. ERR=%s.\n" +msgid "No access to Pool \"%s\"\n" +msgstr "No tienen acceso al Pool \"%s\"\n" -#: src/stored/dev.c:1458 -msgid "Bad call to reposition. Device not open\n" -msgstr "Mala llamada a reposición. El dispositivo no abre\n" +#: src/dird/ua_select.c:622 +msgid "Enter *MediaId or Volume name: " +msgstr "Introduzca MediaId o nombre del Volumen:" -#: src/stored/dev.c:1537 -msgid "Bad call to weof_dev. Device not open\n" -msgstr "Mala llamada a weof_dev. El dispositivo no abre\n" +#: src/dird/ua_select.c:657 +msgid "The defined Pool resources are:\n" +msgstr "Los recursos Pool definidos son:\n" -#: src/stored/dev.c:1547 -msgid "Attempt to WEOF on non-appendable Volume\n" -msgstr "Intento de WEOF en Volumen no-appendable\n" +#: src/dird/ua_select.c:665 +msgid "Select Pool resource" +msgstr "Seleccione recurso Pool" -#: src/stored/dev.c:1565 +#: src/dird/ua_select.c:689 src/dird/ua_restore.c:553 #, c-format -msgid "ioctl MTWEOF error on %s. ERR=%s.\n" -msgstr "ioctl MTWEOF error en %s. ERR=%s.\n" +msgid "Error: Pool resource \"%s\" does not exist.\n" +msgstr "Error: recurso Pool \"%s\" no existe.\n" -#: src/stored/dev.c:1664 -#, c-format -msgid "unknown func code %d" -msgstr "código de función %d desconocido" +#: src/dird/ua_select.c:700 +msgid "Enter the JobId to select: " +msgstr "Introduzca el JobId para seleccionar:" -#: src/stored/dev.c:1670 +#: src/dird/ua_select.c:738 #, c-format -msgid "I/O function \"%s\" not supported on this device.\n" -msgstr "I/O función \"%s\" no es compatible con este dispositivo. \n" +msgid "Could not find Job \"%s\": ERR=%s" +msgstr "No pudo encontrar Job \"%s\": ERR=%s" -#: src/stored/dev.c:1844 +#: src/dird/ua_select.c:829 src/dird/ua_select.c:925 #, c-format -msgid "Unable to truncate device %s. ERR=%s\n" -msgstr "No se puede truncar el dispositivo %s. ERR=%s\n" +msgid "Automatically selected %s: %s\n" +msgstr "Seleccionado automáticamente %s: %s\n" -#: src/stored/dev.c:1861 +#: src/dird/ua_select.c:840 src/dird/ua_select.c:936 #, c-format -msgid "Unable to stat device %s. ERR=%s\n" -msgstr "No se pudo stat dispositivo %s. ERR=%s\n" +msgid "" +"Your request has multiple choices for \"%s\". Selection is not possible in " +"batch mode.\n" +msgstr "" +"Su petición ha múltiples opciones para \"%s\". La selección no es posible en " +"modo batch.\n" -#: src/stored/dev.c:1875 +#: src/dird/ua_select.c:858 src/dird/ua_select.c:918 #, c-format -msgid "Device %s doesn't support ftruncate(). Recreating file %s.\n" -msgstr "Dispositivo %s no admite ftruncate(). Recreando el archivo %s.\n" +msgid "Selection list for \"%s\" is empty!\n" +msgstr "Lista de selección para \"%s\" está vacía!\n" -#: src/stored/dev.c:1887 +#: src/dird/ua_select.c:864 #, c-format -msgid "Could not reopen: %s, ERR=%s\n" -msgstr "No se pudo reabrir: %s, ERR=%s\n" +msgid "Automatically selected: %s\n" +msgstr "Seleccionado automáticamente: %s\n" -#: src/stored/dev.c:2010 src/stored/dev.c:2081 -#, c-format -msgid "Device %s cannot be %smounted. ERR=%s\n" -msgstr "Dispositivo %s no puede ser %smounted. ERR=%s\n" +#: src/dird/ua_select.c:876 +msgid "Selection aborted, nothing done.\n" +msgstr "Selección abortada, no hay nada hecho.\n" -#: src/stored/dev.c:2481 +#: src/dird/ua_select.c:881 src/dird/ua_select.c:969 #, c-format -msgid "Unable to set eotmodel on device %s: ERR=%s\n" -msgstr "No se puede establecer eotmodel en el dispositivo %s: ERR=%s\n" +msgid "Please enter a number between 1 and %d\n" +msgstr "Por favor, introduzca un número entre 1 y %d\n" -#: src/stored/bscan.c:118 -#, c-format -msgid "" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: bscan [ options ] \n" -" -b bootstrap specify a bootstrap file\n" -" -c specify configuration file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -m update media info in database\n" -" -D specify the driver database name (default NULL)\n" -" -n specify the database name (default bacula)\n" -" -u specify database user name (default bacula)\n" -" -P specify database password (default none)\n" -" -h specify database host (default NULL)\n" -" -t specify database port (default 0)\n" -" -p proceed inspite of I/O errors\n" -" -r list records\n" -" -s synchronize or store in database\n" -" -S show scan progress periodically\n" -" -v verbose\n" -" -V specify Volume names (separated by |)\n" -" -w specify working directory (default from conf file)\n" -" -? print this message\n" -"\n" -msgstr "" -"\n" -"Versión: %s (%s)\n" -"\n" -"Utilice: bscan [opciones] \n" -" -b especifica un archivo bootstrap\n" -" -c especifica un archivo de configuración\n" -" -d establece nivel de depuración para \n" -" -dt imprime timestamp en salida de depuración\n" -" -m Actualiza información de los medios en la base de datos\n" -" -D especifica el nombre del driver de base de datos " -"(por defecto NULL)\n" -" -n especifica el nombre de la base de datos (por defecto bacula)\n" -" -u especifica el nombre de usuario de la base de datos (por " -"defecto bacula)\n" -" -P especifica la contraseña de la base de datos (por defecto " -"none)\n" -" -h especifica servidor de la base de datos (por defecto NULL)\n" -" -t especifica el puerto de la base de datos (por defecto 0)\n" -" -p proceder a pesar de los errores\n" -" -r lista de registros\n" +#: src/dird/ua_select.c:1020 +msgid "Storage name given twice.\n" +msgstr "Nombre de Storage especificado dos veces.\n" -#: src/stored/bscan.c:278 +#: src/dird/ua_select.c:1037 #, c-format -msgid "Working Directory: %s not found. Cannot continue.\n" -msgstr "Directorio de Trabajo: %s no encontrado. No se puede continuar.\n" +msgid "Expecting jobid=nn command, got: %s\n" +msgstr "Esperando comando jobid=nn, obtuvo: %s.\n" -#: src/stored/bscan.c:282 +#: src/dird/ua_select.c:1041 #, c-format -msgid "Working Directory: %s is not a directory. Cannot continue.\n" -msgstr "" -"Directorio de Trabajo: %s no es un directorio. No se puede continuar.\n" +msgid "JobId %s is not running.\n" +msgstr "JobId %s no está en ejecución.\n" -#: src/stored/bscan.c:296 src/stored/bscan.c:372 +#: src/dird/ua_select.c:1051 #, c-format -msgid "First Volume Size = %s\n" -msgstr "Tamaño Primero Volumen = %s\n" - -#: src/stored/bscan.c:302 src/tools/bvfs_test.c:215 src/tools/bbatch.c:201 -#: src/tools/bbatch.c:250 src/tools/ing_test.c:191 -msgid "Could not init Bacula database\n" -msgstr "No se pudo iniciar base de datos de Bacula\n" +msgid "Expecting job=xxx, got: %s.\n" +msgstr "Esperando job=xxx, obtuvo: %s.\n" -#: src/stored/bscan.c:309 src/tools/bvfs_test.c:224 src/tools/bbatch.c:257 -#: src/tools/ing_test.c:200 +#: src/dird/ua_select.c:1055 #, c-format -msgid "Using Database: %s, User: %s\n" -msgstr "Usando Base de Datos: %s, Usuario: %s\n" +msgid "Job \"%s\" is not running.\n" +msgstr "Job \"%s\" no está en ejecución.\n" -#: src/stored/bscan.c:343 +#: src/dird/ua_select.c:1063 #, c-format -msgid "Create JobMedia for Job %s\n" -msgstr "Crear JobMedia para Job %s\n" +msgid "Expecting ujobid=xxx, got: %s.\n" +msgstr "Esperando ujobid=xxx, obtuvo: %s.\n" -#: src/stored/bscan.c:353 +#: src/dird/ua_select.c:1084 #, c-format -msgid "Could not create JobMedia record for Volume=%s Job=%s\n" -msgstr "No es posible crear registro JobMedia para Volumen=%s Job=%s\n" +msgid "Storage resource \"%s\": not found\n" +msgstr "Recurso Storage \"%s\": No encontrado\n" -#: src/stored/bscan.c:420 -#, c-format -msgid "done: %d%%\n" -msgstr "Hecho: %d%%\n" +#: src/dird/ua_select.c:1116 +msgid "Enter autochanger drive[0]: " +msgstr "Introduzca unidad Autochanger [0]:" -#: src/stored/bscan.c:444 -msgid "Volume is prelabeled. This tape cannot be scanned.\n" -msgstr "El volumen esta prelabeled. Esta cinta no puede ser escaneada. \n" +#: src/dird/ua_select.c:1137 +msgid "Enter autochanger slot: " +msgstr "Introduzca ranura Autochanger:" -#: src/stored/bscan.c:456 -#, c-format -msgid "Pool record for %s found in DB.\n" -msgstr "Registro Pool para %s encontrado en BD.\n" +#: src/dird/ua_select.c:1167 +msgid "Media Types defined in conf file:\n" +msgstr "Tipos de Media definidos en el archivo de configuración:\n" -#: src/stored/bscan.c:460 -#, c-format -msgid "VOL_LABEL: Pool record not found for Pool: %s\n" -msgstr "VOL_LABEL: Registro Pool no encontrado para Pool: %s\n" +#: src/dird/ua_select.c:1173 +msgid "Media Type" +msgstr "Tipo de Media" -#: src/stored/bscan.c:466 -#, c-format -msgid "VOL_LABEL: PoolType mismatch. DB=%s Vol=%s\n" -msgstr "VOL_LABEL: PoolType desajustado. BD=%s Vol=%s\n" +#: src/dird/ua_select.c:1173 +msgid "Select the Media Type" +msgstr "Seleccione el Tipo de Media" -#: src/stored/bscan.c:470 -#, c-format -msgid "Pool type \"%s\" is OK.\n" -msgstr "Tipo de Pool \"%s\" esta OK.\n" +#: src/dird/ua_select.c:1213 +msgid "None of your jobs are running.\n" +msgstr "Ninguno de sus trabajos se está ejecutando.\n" -#: src/stored/bscan.c:480 -#, c-format -msgid "Media record for %s found in DB.\n" -msgstr "Registro Media para %s encontrado en BD.\n" +#: src/dird/ua_select.c:1251 +#, fuzzy, c-format +msgid "Unauthorized command from this console for JobId=%d.\n" +msgstr "Comando no autorizado desde esta consola.\n" -#: src/stored/bscan.c:487 -#, c-format -msgid "VOL_LABEL: Media record not found for Volume: %s\n" -msgstr "VOL_LABEL: Registro Media no encontrado para Volumen: %s\n" +#: src/dird/ua_select.c:1257 +#, fuzzy, c-format +msgid "Warning Job JobId=%d is not running. Continuing anyway...\n" +msgstr "" +"Advertencia Job %s no está¡ en ejecución. Continuar de todos modos ...\n" -#: src/stored/bscan.c:494 -#, c-format -msgid "VOL_LABEL: MediaType mismatch. DB=%s Vol=%s\n" -msgstr "VOL_LABEL: MediaType desajustada. BD=%s Vol=%s\n" +#: src/dird/ua_select.c:1280 src/dird/ua_select.c:1350 +#, fuzzy, c-format +msgid "Confirm %s of %d Job%s (yes/no): " +msgstr "Confirmar cancelar(si/no): " -#: src/stored/bscan.c:498 +#: src/dird/ua_select.c:1293 src/dird/ua_select.c:1307 #, c-format -msgid "Media type \"%s\" is OK.\n" -msgstr "Tipo de Media \"%s\" esta OK.\n" +msgid "Warning Job %s is not running. Continuing anyway ...\n" +msgstr "" +"Advertencia Job %s no está¡ en ejecución. Continuar de todos modos ...\n" + +#: src/dird/ua_select.c:1329 +#, fuzzy +msgid "Select Job(s):\n" +msgstr "Seleccione Job:\n" -#: src/stored/bscan.c:508 +#: src/dird/ua_select.c:1335 #, c-format -msgid "VOL_LABEL: OK for Volume: %s\n" -msgstr "VOL_LABEL: OK para Volumen: %s\n" +msgid "JobId=%s Job=%s" +msgstr "JobId=%s Job=%s" -#: src/stored/bscan.c:515 -#, c-format -msgid "%d \"errors\" ignored before first Start of Session record.\n" -msgstr "" -"%d \"errores\" ignorados antes del primero registro de Inicio de Sesión.\n" +#: src/dird/ua_select.c:1339 +#, fuzzy, c-format +msgid "Choose Job list to %s" +msgstr "Elija Job para cancelar" -#: src/stored/bscan.c:526 +#: src/dird/ua_select.c:1359 src/dird/ua_select.c:1366 src/dird/ua_cmds.c:804 +#: src/dird/ua_cmds.c:1199 #, c-format -msgid "SOS_LABEL: Found Job record for JobId: %d\n" -msgstr "SOS_LABEL: Encontrado registro Job para JobId: %d\n" +msgid "Job \"%s\" not found.\n" +msgstr "Job \"%s\" no encontrado.\n" -#: src/stored/bscan.c:531 +#: src/dird/run_conf.c:205 #, c-format -msgid "SOS_LABEL: Job record not found for JobId: %d\n" -msgstr "SOS_LABEL: Registro Job no encontrado para JobId: %d\n" +msgid "Expected an equals, got: %s" +msgstr "Esperaba una igual, obtuvo: %s" -#: src/stored/bscan.c:571 +#: src/dird/run_conf.c:218 src/dird/run_conf.c:230 src/dird/run_conf.c:330 #, c-format -msgid "SOS_LABEL: VolSessId mismatch for JobId=%u. DB=%d Vol=%d\n" -msgstr "SOS_LABEL: VolSessId desajustado para JobId=%u. BD=%d Vol=%d\n" +msgid "Expect a YES or NO, got: %s" +msgstr "Esperaba un SI o NO, obtuvo:% s" -#: src/stored/bscan.c:577 +#: src/dird/run_conf.c:245 #, c-format -msgid "SOS_LABEL: VolSessTime mismatch for JobId=%u. DB=%d Vol=%d\n" -msgstr "SOS_LABEL: VolSessTime desajustado para JobId=%u. BD=%d Vol=%d\n" +msgid "Job level field: %s not found in run record" +msgstr "Campo nivel de Job: %s no encontrado en el registro de ejecución" -#: src/stored/bscan.c:583 +#: src/dird/run_conf.c:265 #, c-format -msgid "SOS_LABEL: PoolId mismatch for JobId=%u. DB=%d Vol=%d\n" -msgstr "SOS_LABEL: PoolId diferente para JobId=%u. BD=%d Vol=%d\n" +msgid "Could not find specified Pool Resource: %s" +msgstr "No se pudo encontrar el recurso Pool especificado: %s" -#: src/stored/bscan.c:601 src/stored/bscan.c:1161 +#: src/dird/run_conf.c:293 #, c-format -msgid "Could not find SessId=%d SessTime=%d for EOS record.\n" -msgstr "No se pudo encontrar SessId=%d SessTime=%d para registro EOS.\n" +msgid "Could not find specified Storage Resource: %s" +msgstr "No se pudo encontrar el recurso Storage especificado: %s" -#: src/stored/bscan.c:647 +#: src/dird/run_conf.c:305 #, c-format -msgid "Could not update job record. ERR=%s\n" -msgstr "No se pudo actualizar el registro de trabajo. ERR=%s\n" +msgid "Could not find specified Messages Resource: %s" +msgstr "No se pudo encontrar el recurso Mensajes especificado: %s" -#: src/stored/bscan.c:658 +#: src/dird/run_conf.c:334 #, c-format -msgid "End of all Volumes. VolFiles=%u VolBlocks=%u VolBytes=%s\n" -msgstr "Final de todos los volúmenes. VolFiles=%u VolBlocks=%u VolBytes=%s\n" +msgid "Expected a keyword name, got: %s" +msgstr "Esperaba una palabra clave Tipo Name, obtuvo: %s" -#: src/stored/bscan.c:670 -#, c-format -msgid "Could not find Job for SessId=%d SessTime=%d record.\n" -msgstr "No se pudo encontrar registro trabajo para SessId=%d SessTime=%d.\n" +#: src/dird/run_conf.c:373 +msgid "Day number out of range (1-31)" +msgstr "Numero del día fuera del rango (1-31)" -#: src/stored/bscan.c:701 -#, c-format -msgid "%s file records. At file:blk=%s:%s bytes=%s\n" -msgstr "%s registros de archivo. En el archivo:blk=%s:%s bytes=%s\n" +#: src/dird/run_conf.c:390 src/dird/run_conf.c:552 +msgid "Week number out of range (0-53)" +msgstr "Número de la Semana fuera de rango (0-53)" -#: src/stored/bscan.c:766 +#: src/dird/run_conf.c:406 #, c-format -msgid "Got MD5 record: %s\n" -msgstr "Obtuvo registro MD5: %s\n" +msgid "Job type field: %s in run record not found" +msgstr "Campo tipo de Job: %s no encontrado en el registro de ejecución" -#: src/stored/bscan.c:774 +#: src/dird/run_conf.c:413 #, c-format -msgid "Got SHA1 record: %s\n" -msgstr "Obtuvo registro SHA1: %s\n" +msgid "Unexpected token: %d:%s" +msgstr "Inesperado token: %d:%s" -#: src/stored/bscan.c:782 -#, c-format -msgid "Got SHA256 record: %s\n" -msgstr "Obtuvo registro SHA256: %s\n" +#: src/dird/run_conf.c:457 +msgid "Time must be preceded by keyword AT." +msgstr "Tiempo debe ser precedido de palabra clave AT." -#: src/stored/bscan.c:790 -#, c-format -msgid "Got SHA512 record: %s\n" -msgstr "Obtuvo registro SHA512: %s\n" +#: src/dird/run_conf.c:466 +msgid "Time logic error.\n" +msgstr "Error lógico de tiempo.\n" -#: src/stored/bscan.c:798 src/stored/bscan.c:805 -msgid "Got signed digest record\n" -msgstr "Obtuvo registro resume firmado: %s\n" +#: src/dird/run_conf.c:481 src/dird/run_conf.c:500 +msgid "Bad time specification." +msgstr "Mala especificación del tiempo" -#: src/stored/bscan.c:811 -#, c-format -msgid "Got Prog Names Stream: %s\n" -msgstr "Obtuvo Stream Nombres de Programas: %s\n" +#: src/dird/run_conf.c:521 +msgid "Range logic error.\n" +msgstr "Error lógico de rango.\n" -#: src/stored/bscan.c:817 -msgid "Got Prog Data Stream record.\n" -msgstr "Obtuvo Registro Stream Datos de Programas: %s\n" +#: src/dird/run_conf.c:530 +msgid "Bad day range specification." +msgstr "Mala especificación del rango día." -#: src/stored/bscan.c:862 -#, c-format -msgid "Unknown stream type!!! stream=%d len=%i\n" -msgstr "Tipo de flujo desconocido!!! stream=%d len=%i\n" +#: src/dird/run_conf.c:577 +msgid "Invalid month, week or position day range" +msgstr "Mes no válido, semana o rango de posición de día inválidos" -#: src/stored/bscan.c:930 -#, c-format -msgid "Could not create File Attributes record. ERR=%s\n" -msgstr "No se pudo crear el registro de Archivos de Atributos. ERR=%s\n" +#: src/dird/run_conf.c:592 +msgid "Invalid month, weekday or position range" +msgstr "Mes no válido, semana o rango de posición inválidos" -#: src/stored/bscan.c:936 -#, c-format -msgid "Created File record: %s\n" -msgstr "Registro Archivo creado: %s\n" +#: src/dird/run_conf.c:651 +msgid "Unexpected run state\n" +msgstr "Inesperado estado ejecutar\n" -#: src/stored/bscan.c:981 +#: src/dird/restore.c:132 src/dird/msgchan.c:508 #, c-format -msgid "Could not create media record. ERR=%s\n" -msgstr "No es posible crear registro media. ERR=%s\n" +msgid "Could not open bootstrap file %s: ERR=%s\n" +msgstr "No se puede abrir el archivo de arranque %s: ERR=%s\n" -#: src/stored/bscan.c:985 src/stored/bscan.c:1006 +#: src/dird/restore.c:180 src/dird/restore.c:271 #, c-format -msgid "Could not update media record. ERR=%s\n" -msgstr "No es posible actualizar registro media. ERR=%s\n" +msgid "Could not get storage resource '%s'.\n" +msgstr "No se pudo obtener recurso de almacenamiento '%s'.\n" -#: src/stored/bscan.c:989 -#, c-format -msgid "Created Media record for Volume: %s\n" -msgstr "Creado Registro Media para Volumen: %s\n" +#: src/dird/restore.c:307 +#, fuzzy, c-format +msgid "Could not acquire read storage lock for \"%s\"" +msgstr "No se pudo obtener recurso de almacenamiento '%s'.\n" -#: src/stored/bscan.c:1010 -#, c-format -msgid "Updated Media record at end of Volume: %s\n" -msgstr "Actualizado el registro Media al final del Volumen: %s\n" +#: src/dird/restore.c:407 src/dird/verify.c:275 src/dird/backup.c:512 +msgid "The File daemon does not support SDCallsClient.\n" +msgstr "" -#: src/stored/bscan.c:1027 -#, c-format -msgid "Could not create pool record. ERR=%s\n" -msgstr "No es posible crear el registro Pool. ERR=%s\n" +#: src/dird/restore.c:525 +msgid "" +"Cannot restore without a bootstrap file.\n" +"You probably ran a restore job directly. All restore jobs must\n" +"be run using the restore command.\n" +msgstr "" +"No se puede restaurar sin un archivo bootstrap.\n" +"Usted probablemente ejecuto un job de restauración directa. Todas las tareas " +"de restauración deben\n" +"ser ejecutadas utilizando el comando de restauración.\n" -#: src/stored/bscan.c:1031 +#: src/dird/restore.c:533 #, c-format -msgid "Created Pool record for Pool: %s\n" -msgstr "Creado el registro Pool para Pool: %s\n" +msgid "Start Restore Job %s\n" +msgstr "Iniciar Job Restaurar %s\n" -#: src/stored/bscan.c:1050 -#, c-format -msgid "Could not get Client record. ERR=%s\n" -msgstr "No se ha podido obtener el registro del cliente. ERR=%s\n" +#: src/dird/restore.c:584 +msgid "Restore OK -- warning file count mismatch" +msgstr "Restauración OK -- alerta, número de archivos desajustado." -#: src/stored/bscan.c:1060 -#, c-format -msgid "Created Client record for Client: %s\n" -msgstr "Creado registro Cliente para Cliente: %s\n" +#: src/dird/restore.c:586 +msgid "Restore OK" +msgstr "Restauración OK" -#: src/stored/bscan.c:1077 -#, c-format -msgid "Fileset \"%s\" already exists.\n" -msgstr "Fileset \"%s\" ya existe.\n" +#: src/dird/restore.c:590 +msgid "Restore OK -- with warnings" +msgstr "Restaurar OK - con advertencias" -#: src/stored/bscan.c:1081 -#, c-format -msgid "Could not create FileSet record \"%s\". ERR=%s\n" -msgstr "No es posible crear registro FileSet \"%s\". ERR=%s\n" +#: src/dird/restore.c:594 +msgid "*** Restore Error ***" +msgstr "*** Error de Restauración ***" -#: src/stored/bscan.c:1086 -#, c-format -msgid "Created FileSet record \"%s\"\n" -msgstr "Creado registro FileSet \"%s\"\n" +#: src/dird/restore.c:604 +msgid "Restore Canceled" +msgstr "Restauración Cancelada" -#: src/stored/bscan.c:1133 -#, c-format -msgid "Could not create JobId record. ERR=%s\n" -msgstr "No es posible crear registro JobId. ERR=%s\n" +#: src/dird/restore.c:631 +#, fuzzy, c-format +msgid "" +"%s %s %s (%s):\n" +" Build OS: %s %s %s\n" +" JobId: %d\n" +" Job: %s\n" +" Restore Client: %s\n" +" Start time: %s\n" +" End time: %s\n" +" Files Expected: %s\n" +" Files Restored: %s\n" +" Bytes Restored: %s\n" +" Rate: %.1f KB/s\n" +" FD Errors: %d\n" +" FD termination status: %s\n" +" SD termination status: %s\n" +" Termination: %s\n" +"\n" +msgstr "" +"%s %s %s (%s): %s\n" +" Build OS: %s %s %s\n" +" JobId: %d\n" +" Job: %s\n" +" Restaurar Cliente: %s\n" +" Hora de inicio: %s\n" +" Hora de finalización: %s\n" +" Archivos Esperados: %s\n" +" Archivos Restaurados: %s\n" +" Bytes Restaurados: %s\n" +" Tasa: %.1f KB/s\n" +" Errores de FD: %d\n" +" Estado de terminación de FD: %s\n" +" Estado de terminación de SD: %s\n" +" Terminación: %s\n" +"\n" -#: src/stored/bscan.c:1139 +#: src/dird/admin.c:53 #, c-format -msgid "Could not update job start record. ERR=%s\n" -msgstr "No se pudo actualizar el registro job de inicio. ERR=%s\n" +msgid "Start Admin JobId %d, Job=%s\n" +msgstr "Inicio Admin JobId %d, Job=%s\n" -#: src/stored/bscan.c:1142 -#, c-format -msgid "Created new JobId=%u record for original JobId=%u\n" -msgstr "Creado nuevo registro JobId=%u para JobId=%u original\n" +#: src/dird/admin.c:86 +msgid "Admin OK" +msgstr "Administración Ok" -#: src/stored/bscan.c:1195 -#, c-format -msgid "Could not update JobId=%u record. ERR=%s\n" -msgstr "No se puede actualizar registro JobId=%u. ERR=%s\n" +#: src/dird/admin.c:90 +msgid "*** Admin Error ***" +msgstr "***Administración Error***" -#: src/stored/bscan.c:1200 -#, c-format -msgid "Updated Job termination record for JobId=%u Level=%s TermStat=%c\n" +#: src/dird/admin.c:94 +msgid "Admin Canceled" +msgstr "Administración Cancelada" + +#: src/dird/admin.c:106 src/lib/status.h:171 src/lib/status.h:182 +#: src/lib/status.h:196 src/lib/status.h:200 src/lib/status.h:204 +msgid "Bacula " +msgstr "Bacula" + +#: src/dird/ua_status.c:170 +msgid "Status available for:\n" +msgstr "Estado disponible para:\n" + +#: src/dird/ua_status.c:177 +msgid "Select daemon type for status" +msgstr "Seleccione el tipo de demonio para estado" + +#: src/dird/ua_status.c:297 +#, fuzzy, c-format +msgid "Daemon started %s. Jobs: run=%d, running=%d mode=%d,%d\n" +msgstr "Demonio iniciado %s, %d Job ejecutando desde el inicio.\n" + +#: src/dird/ua_status.c:353 +#, fuzzy, c-format +msgid "No authorization for Storage \"%s\"\n" +msgstr "Sin autorización. Storage \"%s\".\n" + +#: src/dird/ua_status.c:363 +msgid "Restricted Client or Job does not permit access to Storage daemons\n" msgstr "" -"Actualizado el registro de terminación de Job para JobId=%u Nivel=%s " -"TermStat=%c\n" -#: src/stored/bscan.c:1225 +#: src/dird/ua_status.c:370 src/dird/ua_dotcmds.c:834 src/dird/ua_cmds.c:839 #, c-format -msgid "Job Termination code: %d" -msgstr "Código de Terminación del Job: %d" +msgid "Connecting to Storage daemon %s at %s:%d\n" +msgstr "Conectando al demonio Storage %s en %s:%d\n" -#: src/stored/bscan.c:1230 -#, c-format -msgid "" -"%s\n" -"JobId: %d\n" -"Job: %s\n" -"FileSet: %s\n" -"Backup Level: %s\n" -"Client: %s\n" -"Start time: %s\n" -"End time: %s\n" -"Files Written: %s\n" -"Bytes Written: %s\n" -"Volume Session Id: %d\n" -"Volume Session Time: %d\n" -"Last Volume Bytes: %s\n" -"Termination: %s\n" +#: src/dird/ua_status.c:373 +#, c-format +msgid "" "\n" +"Failed to connect to Storage daemon %s.\n" +"====\n" msgstr "" -"%s\n" -"JobId: %d\n" -"Job: %s\n" -"FileSet: %s\n" -"Nivel de Respaldo: %s\n" -"Cliente: %s\n" -"Hora de Inicio: %s\n" -"Hora de Finalización: %s\n" -"Archivos Escritos: %s\n" -"Bytes Escritos: %s\n" -"Id Volumen Sesión: %d\n" -"Tiempo de la Sesión del Volumen: %d\n" -"Últimos Bytes del Volumen: %s\n" -"Terminación: %s\n" "\n" +"Fallo al conectar con el demonio Storage %s.\n" +"====\n" -#: src/stored/bscan.c:1288 +#: src/dird/ua_status.c:405 src/dird/ua_cmds.c:1186 src/dird/ua_cmds.c:1994 #, c-format -msgid "Could not create JobMedia record. ERR=%s\n" -msgstr "No es posible crear registro JobMedia. ERR=%s\n" +msgid "No authorization for Client \"%s\"\n" +msgstr "No autorización para Cliente \"%s\"\n" -#: src/stored/bscan.c:1292 +#: src/dird/ua_status.c:418 src/dird/ua_dotcmds.c:859 src/dird/ua_cmds.c:662 +#: src/dird/ua_cmds.c:875 src/dird/ua_cmds.c:1307 #, c-format -msgid "Created JobMedia record JobId %d, MediaId %d\n" -msgstr "Creado registro JobMedia JobID %d, MediaID %d\n" +msgid "Connecting to Client %s at %s:%d\n" +msgstr "Conectando al Cliente %s en %s:%d\n" -#: src/stored/bscan.c:1308 +#: src/dird/ua_status.c:421 #, c-format -msgid "Could not find SessId=%d SessTime=%d for MD5/SHA1 record.\n" -msgstr "No se pudo encontrar SessId=%d SessTime=%d para registro MD5/SHA1.\n" +msgid "" +"Failed to connect to Client %s.\n" +"====\n" +msgstr "" +"Fallo al conectar con el Cliente %s.\n" +"====\n" -#: src/stored/bscan.c:1322 -#, c-format -msgid "Could not add MD5/SHA1 to File record. ERR=%s\n" -msgstr "No se pudo agregar MD5/SHA1 al registro File. ERR=%s\n" +#: src/dird/ua_status.c:426 +msgid "Connected to file daemon\n" +msgstr "Conectado al demonio file\n" -#: src/stored/bscan.c:1327 -msgid "Updated MD5/SHA1 record\n" -msgstr "Actualizado registro MD5/SHA1\n" +#: src/dird/ua_status.c:445 src/dird/ua_status.c:454 +msgid "" +"\n" +"Scheduled Jobs:\n" +msgstr "" +"\n" +"Scheduled Jobs:\n" + +#: src/dird/ua_status.c:446 +#, fuzzy +msgid "" +"Level Type Pri Scheduled Job Name Volume\n" +msgstr "Nivel Tipo Pri Scheduled Nombre Volumen\n" + +#: src/dird/ua_status.c:447 +msgid "===================================================================================\n" +msgstr "===================================================================================\n" + +#: src/dird/ua_status.c:455 +#, fuzzy +msgid "" +"Level Type Pri Scheduled Job Name Schedule\n" +msgstr "Nivel Tipo Pri Scheduled Nombre Volumen\n" + +#: src/dird/ua_status.c:456 +#, fuzzy +msgid "=====================================================================================\n" +msgstr "===================================================================================\n" -#: src/stored/job.c:234 +#: src/dird/ua_status.c:513 src/dird/ua_status.c:678 #, c-format -msgid "FD connect failed: Job name not found: %s\n" -msgstr "Fallo al conectar a FD: Nombre del Job no encontrado: %s\n" +msgid "%-14s\t%-8s\t%3d\t%-18s\t%-18s\t%s\n" +msgstr "%-14s\t%-8s\t%3d\t%-18s\t%-18s\t%s\n" -#: src/stored/job.c:244 +#: src/dird/ua_status.c:517 src/dird/ua_status.c:682 #, c-format -msgid "Hey!!!! JobId %u Job %s already authenticated.\n" -msgstr "Hey!!!! JobId %u Job %s ya autenticada.\n" +msgid "%-14s %-8s %3d %-18s %-18s %s\n" +msgstr "%-14s %-8s %3d %-18s %-18s %s\n" -#: src/stored/job.c:261 -msgid "Unable to authenticate File daemon\n" -msgstr "No se puede autenticar demonio File\n" +#: src/dird/ua_status.c:553 src/dird/ua_status.c:748 +msgid "Ignoring invalid value for days. Max is 500.\n" +msgstr "Ignorando valores inválidos para el día. Máximo es de 500.\n" -#: src/stored/job.c:390 -msgid "In free_jcr(), but still attached to device!!!!\n" -msgstr "En free_jcr(), pero todavía conectado al dispositivo!!!!\n" +#: src/dird/ua_status.c:564 +#, fuzzy +msgid "Ignoring invalid value for limit. Max is 2000.\n" +msgstr "Ignorando valores inválidos para el día. Máximo es de 500.\n" -#: src/stored/btape.c:185 +#: src/dird/ua_status.c:575 +#, fuzzy +msgid "Ignoring invalid time.\n" +msgstr "Ruta dada no válida.\n" + +#: src/dird/ua_status.c:697 src/dird/ua_status.c:801 +msgid "No Scheduled Jobs.\n" +msgstr "No hay Jobs Programados.\n" + +#: src/dird/ua_status.c:826 #, c-format +msgid "Console connected at %s\n" +msgstr "Consola conectada en %s\n" + +#: src/dird/ua_status.c:837 msgid "" -"\n" -"\n" -"!!!! Warning large disk addressing disabled. boffset_t=%d should be 8 or " -"more !!!!!\n" -"\n" -"\n" +"No Jobs running.\n" +"====\n" msgstr "" -"\n" -"\n" -"!!!! Advertencia, deshabilitado direccionamiento de discos largos. boffset_t=" -"%d debe ser de 8 o más !!!!!\n" -"\n" -"\n" +"Ningún Jobs ejecutando.\n" +"====\n" -#: src/stored/btape.c:192 -#, c-format -msgid "32 bit printf/scanf problem. i=%d x32=%u y32=%u\n" -msgstr "32 bit printf/scanf problema. i=%d x32=%u y32=%u\n" +#: src/dird/ua_status.c:844 +#, fuzzy +msgid " JobId Type Level Files Bytes Name Status\n" +msgstr "JobId Nivel Nombre Estado\n" -#: src/stored/btape.c:201 -msgid "64 bit printf/scanf problem. i=%d x64=%" -msgstr "64 bit printf/scanf problema. i=%d x64=%" +#: src/dird/ua_status.c:845 +msgid "======================================================================\n" +msgstr "======================================================================\n" -#: src/stored/btape.c:206 -#, c-format -msgid "Tape block granularity is %d bytes.\n" -msgstr "Granularidad del bloque de cinta es %d bytes.\n" +#: src/dird/ua_status.c:854 +msgid "is waiting execution" +msgstr "esta esperando ejecución" -#: src/stored/btape.c:279 -msgid "No archive name specified.\n" -msgstr "Nombre de archivo no especificado.\n" +#: src/dird/ua_status.c:857 +msgid "is running" +msgstr "esta ejecutando" -#: src/stored/btape.c:283 -msgid "Improper number of arguments specified.\n" -msgstr "Número incorrecto de argumentos especificados.\n" +#: src/dird/ua_status.c:860 +msgid "is blocked" +msgstr "esta bloqueado" -#: src/stored/btape.c:297 -msgid "btape does not work with DVD storage.\n" -msgstr "btape no funciona con el almacenamiento de DVD.\n" +#: src/dird/ua_status.c:863 +msgid "has terminated" +msgstr "ha terminado" -#: src/stored/btape.c:302 -msgid "btape only works with tape storage.\n" -msgstr "btape sólo funciona con almacenamiento en cinta.\n" +#: src/dird/ua_status.c:866 +msgid "has terminated with warnings" +msgstr "ha terminado con advertencias" -#: src/stored/btape.c:383 -#, c-format -msgid "Total Volume bytes=%sB. Total Write rate = %sB/s\n" -msgstr "Volumen total bytes=%sB. Tasa total de Escritura = %sB/s\n" +#: src/dird/ua_status.c:869 +msgid "has erred" +msgstr "ha errado" -#: src/stored/btape.c:409 -#, c-format -msgid "Volume bytes=%sB. Write rate = %sB/s\n" -msgstr "Volumen bytes=%sB. Tasa de Escritura = %sB/s\n" +#: src/dird/ua_status.c:872 +msgid "has errors" +msgstr "tiene errores" -#: src/stored/btape.c:477 -#, c-format -msgid "open device %s: OK\n" -msgstr "abrir dispositivo %s: OK\n" +#: src/dird/ua_status.c:875 +msgid "has a fatal error" +msgstr "tiene un error fatal" -#: src/stored/btape.c:500 -msgid "Enter Volume Name: " -msgstr "Ingrese nombre de Volumen:" +#: src/dird/ua_status.c:878 +msgid "has verify differences" +msgstr "ha verificar diferencias" -#: src/stored/btape.c:507 -#, c-format -msgid "Device open failed. ERR=%s\n" -msgstr "Fallo al abrir dispositivo. ERR=%s\n" +#: src/dird/ua_status.c:881 +msgid "has been canceled" +msgstr "ha sido cancelado" + +#: src/dird/ua_status.c:886 +msgid "is waiting on Client" +msgstr "esta esperando por Client" -#: src/stored/btape.c:512 +#: src/dird/ua_status.c:888 #, c-format -msgid "Wrote Volume label for volume \"%s\".\n" -msgstr "Escribe la etiqueta de Volumen para el volumen \"%s\".\n" +msgid "is waiting on Client %s" +msgstr "esta esperando por Cliente %s" -#: src/stored/btape.c:526 -msgid "Volume has no label.\n" -msgstr "Volumen no tiene etiqueta.\n" +#: src/dird/ua_status.c:896 src/dird/ua_status.c:898 +#, fuzzy, c-format +msgid "is waiting on Storage \"%s\"" +msgstr "esta esperando por Storage %s" -#: src/stored/btape.c:529 -msgid "Volume label read correctly.\n" -msgstr "Etiqueta de volumen leída correctamente.\n" +#: src/dird/ua_status.c:900 +msgid "is waiting on Storage" +msgstr "esta esperando por Storage" -#: src/stored/btape.c:532 -#, c-format -msgid "I/O error on device: ERR=%s" -msgstr "error de E/S en el dispositivo: ERR=%s" +#: src/dird/ua_status.c:906 +msgid "is waiting on max Storage jobs" +msgstr "esta esperando por máximo Storage jobs" -#: src/stored/btape.c:535 -msgid "Volume name error\n" -msgstr "Nombre de Volumen error\n" +#: src/dird/ua_status.c:909 +msgid "is waiting on max Client jobs" +msgstr "esta esperando por máximo Cliente jobs" -#: src/stored/btape.c:538 -#, c-format -msgid "Error creating label. ERR=%s" -msgstr "Error creando etiqueta. ERR=%s" +#: src/dird/ua_status.c:912 +msgid "is waiting on max Job jobs" +msgstr "esta esperando por máximo Jobs jobs" -#: src/stored/btape.c:541 -msgid "Volume version error.\n" -msgstr "Volumen versión error.\n" +#: src/dird/ua_status.c:915 +msgid "is waiting on max total jobs" +msgstr "esta esperando por máximo total jobs" -#: src/stored/btape.c:544 -msgid "Bad Volume label type.\n" -msgstr "Malo tipo de etiqueta de volumen.\n" +#: src/dird/ua_status.c:919 +#, fuzzy, c-format +msgid "is waiting for its start time (%s)" +msgstr "esta esperando por su hora de inicio" -#: src/stored/btape.c:547 -msgid "Unknown error.\n" -msgstr "Error desconocido.\n" +#: src/dird/ua_status.c:925 +msgid "is waiting for higher priority jobs to finish" +msgstr "está esperando por jobs de una mayor prioridad para terminar" -#: src/stored/btape.c:565 -#, c-format -msgid "Bad status from load. ERR=%s\n" -msgstr "Malo estado de carga. ERR=%s\n" +#: src/dird/ua_status.c:928 +#, fuzzy +msgid "is waiting for a Shared Storage device" +msgstr "esta esperando por Storage" -#: src/stored/btape.c:567 +#: src/dird/ua_status.c:945 #, c-format -msgid "Loaded %s\n" -msgstr "Cargado %s\n" +msgid "is in unknown state %c" +msgstr "esta en estado desconocido %c" -#: src/stored/btape.c:576 src/stored/btape.c:1139 src/stored/btape.c:1212 -#: src/stored/btape.c:1292 src/stored/btape.c:1563 -#, c-format -msgid "Bad status from rewind. ERR=%s\n" -msgstr "Malo estado de rebobinado. ERR=%s\n" +#: src/dird/ua_status.c:959 +msgid "is waiting for a mount request" +msgstr "esta esperando por petición de montaje" -#: src/stored/btape.c:579 src/stored/btape.c:1571 -#, c-format -msgid "Rewound %s\n" -msgstr "Rebobinado %s\n" +#: src/dird/ua_status.c:966 +msgid "is waiting for an appendable Volume" +msgstr "está esperando un Volumen appendable" -#: src/stored/btape.c:605 src/stored/btape.c:1575 -#, c-format -msgid "Bad status from weof. ERR=%s\n" -msgstr "Malo estado de weof. ERR=%s\n" +#: src/dird/ua_status.c:974 +msgid "is waiting for Client to connect to Storage daemon" +msgstr "está esperando por cliente para conectarse al demonio Storage" -#: src/stored/btape.c:609 +#: src/dird/ua_status.c:976 #, c-format -msgid "Wrote 1 EOF to %s\n" -msgstr "Escribir 1 EOF para %s\n" +msgid "is waiting for Client %s to connect to Storage %s" +msgstr "está aguardando por el Cliente %s para conectarse al Storage %s" + +#: src/dird/ua_status.c:1007 +#, fuzzy, c-format +msgid "%6d\t%-6s\t%-20s\t%s\t%s\n" +msgstr "%6d\t%-6s\t%-20s\t%s\n" + +#: src/dird/ua_status.c:1015 +#, fuzzy, c-format +msgid "%6d %-4s %-3s %10s %10s %-17s %s\n" +msgstr "%6d %-6s %8s %10s %-7s %-8s %s\n" + +#: src/dird/ua_status.c:1040 +msgid "No Terminated Jobs.\n" +msgstr "Jobs No Terminados.\n" + +#: src/dird/ua_status.c:1046 src/lib/status.h:73 +msgid "" +"\n" +"Terminated Jobs:\n" +msgstr "" +"\n" +"Jobs No Terminados:\n" + +#: src/dird/ua_status.c:1047 src/lib/status.h:80 +msgid " JobId Level Files Bytes Status Finished Name \n" +msgstr "JobId Nivel Archivos Bytes Estado Finalizado Nombre \n" -#: src/stored/btape.c:612 -#, c-format -msgid "Wrote %d EOFs to %s\n" -msgstr "Escribir %d EOFs para %s\n" +#: src/dird/ua_status.c:1048 +msgid "====================================================================\n" +msgstr "====================================================================\n" -#: src/stored/btape.c:630 -msgid "Moved to end of medium.\n" -msgstr "Movido para el final de la media.\n" +#: src/dird/ua_status.c:1087 src/lib/status.h:109 +msgid "Diffs" +msgstr "Diferencias" -#: src/stored/btape.c:657 -#, c-format -msgid "Bad status from bsf. ERR=%s\n" -msgstr "Mal estado desde BSF. ERR=%s\n" +#: src/dird/ua_status.c:1090 src/dird/ua_restore.c:443 src/lib/status.h:112 +msgid "Cancel" +msgstr "Cancelar" -#: src/stored/btape.c:659 -#, c-format -msgid "Backspaced %d file%s.\n" -msgstr "Backspaced %d archivo%s.\n" +#: src/dird/ua_status.c:1099 src/lib/status.h:122 +msgid "Other" +msgstr "Otros" -#: src/stored/btape.c:676 +#: src/dird/ua_status.c:1103 src/lib/status.h:134 #, c-format -msgid "Bad status from bsr. ERR=%s\n" -msgstr "Malo estado de BSR. ERR=%s\n" +msgid "%6d\t%-6s\t%8s\t%10s\t%-7s\t%-8s\t%s\n" +msgstr "%6d\t%-6s\t%8s\t%10s\t%-7s\t%-8s\t%s\n" -#: src/stored/btape.c:678 +#: src/dird/ua_status.c:1111 src/lib/status.h:142 #, c-format -msgid "Backspaced %d record%s.\n" -msgstr "Backspaced %d registro%s.\n" +msgid "%6d %-6s %8s %10s %-7s %-8s %s\n" +msgstr "%6d %-6s %8s %10s %-7s %-8s %s\n" -#: src/stored/btape.c:706 +#: src/dird/ua_status.c:1121 +msgid "\n" +msgstr "\n" + +#: src/dird/next_vol.c:163 #, c-format -msgid "Device status:\n" -msgstr "Estado del Dispositivo:\n" +msgid "Purging oldest volume \"%s\"\n" +msgstr "Purgando volumen más antiguo \"%s\"\n" -#: src/stored/btape.c:725 +#: src/dird/next_vol.c:169 #, c-format -msgid "Status:\n" -msgstr "Estados:\n" +msgid "Pruning oldest volume \"%s\"\n" +msgstr "Podando volumen más antiguo \"%s\"\n" -#: src/stored/btape.c:740 -msgid "" -"Test writing larger and larger records.\n" -"This is a torture test for records.\n" -"I am going to write\n" -"larger and larger records. It will stop when the record size\n" -"plus the header exceeds the block size (by default about 64K)\n" +#: src/dird/next_vol.c:188 +msgid "We seem to be looping trying to find the next volume. I give up.\n" msgstr "" -"Prueba de escritura de registros cada vez mayores.\n" -"Esta es una prueba de tortura para los registros.\n" -"Voy a escribir\n" -"registros cada vez mayores. Se detendrá cuando el tamaño de registro además " -"de la cabecera excede el tamaño de bloque (por defecto sobre 64K)\n" - -#: src/stored/btape.c:746 -msgid "Do you want to continue? (y/n): " -msgstr "Desea continuar? (y/n)" +"Parece que estamos en bucle tratando de encontrar el próximo volumen. Me " +"rindo.\n" -#: src/stored/btape.c:748 src/stored/btape.c:2200 -msgid "Command aborted.\n" -msgstr "Comando Abortado.\n" +#: src/dird/next_vol.c:215 +#, fuzzy, c-format +msgid "Max Volume bytes=%s exceeded. Marking Volume \"%s\" as Full.\n" +msgstr "" +"Máximo bytes por Volumen excedido. Marcando Volumen \"%s\" como Completo.\n" -#: src/stored/btape.c:765 +#: src/dird/next_vol.c:223 #, c-format -msgid "Block %d i=%d\n" -msgstr "Bloque %d i=%d\n" - -#: src/stored/btape.c:792 -msgid "Skipping read backwards test because BSR turned off.\n" -msgstr "Saltar prueba de lectura hacia atrás, porque BSR esta desactivado.\n" +msgid "Volume used once. Marking Volume \"%s\" as Used.\n" +msgstr "Volumen utilizado una vez. Marcando Volumen \"%s\" como Usado.\n" -#: src/stored/btape.c:796 -msgid "" -"\n" -"=== Write, backup, and re-read test ===\n" -"\n" -"I'm going to write three records and an EOF\n" -"then backup over the EOF and re-read the last record.\n" -"Bacula does this after writing the last block on the\n" -"tape to verify that the block was written correctly.\n" -"\n" -"This is not an *essential* feature ...\n" -"\n" +#: src/dird/next_vol.c:230 +#, fuzzy, c-format +msgid "Max Volume jobs=%s exceeded. Marking Volume \"%s\" as Used.\n" msgstr "" -"\n" -"=== Prueba de escritura, copia de seguridad y re-lectura ===\n" -"\n" -"Yo voy a escribir 3 registros y un EOF\n" -"a continuación respaldar sobre el EOF y re-leer el ultimo registro.\n" -" Bacula hace esto después de escribir el último bloque en la\n" -"cinta para comprobar que el bloque ha sido escrito correctamente.\n" -"\n" -"Esta es una característica *esencial* ...\n" -"\n" - -#: src/stored/btape.c:809 src/stored/btape.c:820 src/stored/btape.c:831 -#: src/stored/btape.c:1149 src/stored/btape.c:1165 src/stored/btape.c:1907 -#: src/stored/btape.c:2823 -msgid "Error writing record to block.\n" -msgstr "Error al escribir registro al bloque.\n" - -#: src/stored/btape.c:813 src/stored/btape.c:824 src/stored/btape.c:835 -#: src/stored/btape.c:1153 src/stored/btape.c:1169 src/stored/btape.c:1911 -#: src/stored/btape.c:2827 -msgid "Error writing block to device.\n" -msgstr "Error al escribir bloque al dispositivo.\n" - -#: src/stored/btape.c:816 -#, c-format -msgid "Wrote first record of %d bytes.\n" -msgstr "Escribió primer registro de %d bytes.\n" +"Máximo jobs por Volumen excedido. Marcando Volumen \"%s\" como Usado.\n" -#: src/stored/btape.c:827 -#, c-format -msgid "Wrote second record of %d bytes.\n" -msgstr "Escribió segundo registro de %d bytes.\n" +#: src/dird/next_vol.c:240 +#, fuzzy, c-format +msgid "Max Volume files=%s exceeded. Marking Volume \"%s\" as Used.\n" +msgstr "" +"Máximo archivos por Volumen excedido. Marcando Volumen \"%s\" como Usado.\n" -#: src/stored/btape.c:838 -#, c-format -msgid "Wrote third record of %d bytes.\n" -msgstr "Escribió tercer registro de %d bytes.\n" +#: src/dird/next_vol.c:251 +#, fuzzy, c-format +msgid "" +"Max configured use duration=%s sec. exceeded. Marking Volume \"%s\" as " +"Used.\n" +msgstr "" +"Máximo de duración de uso configurado superado. Marcando Volumen \"%s\" " +"como Usado.\n" -#: src/stored/btape.c:845 src/stored/btape.c:850 +#: src/dird/next_vol.c:264 #, c-format -msgid "Backspace file failed! ERR=%s\n" -msgstr "Fallo en retroceso de archivo! ERR=%s\n" +msgid "Catalog error updating volume \"%s\". ERR=%s" +msgstr "Error de Catálogo actualizando volumen \"%s\". ERR=%s" -#: src/stored/btape.c:854 -msgid "Backspaced over EOF OK.\n" -msgstr "Retroceso sobre EOF OK.\n" +#: src/dird/next_vol.c:286 +msgid "volume has expired" +msgstr "volumen ha caducado" -#: src/stored/btape.c:856 +#: src/dird/next_vol.c:304 src/dird/next_vol.c:348 #, c-format -msgid "Backspace record failed! ERR=%s\n" -msgstr "Fallo en retroceso de registro! ERR=%s\n" +msgid "Recycled current volume \"%s\"\n" +msgstr "Reciclado actual volumen \"%s\"\n" -#: src/stored/btape.c:859 -msgid "Backspace record OK.\n" -msgstr "Retroceso de registro OK.\n" +#: src/dird/next_vol.c:309 +msgid "and recycling of current volume failed" +msgstr "y el reciclado de volumen actual fallo" -#: src/stored/btape.c:862 src/stored/btape.c:868 -#, c-format -msgid "Read block failed! ERR=%s\n" -msgstr "Lectura de bloque fallida! ERR=%s\n" +#: src/dird/next_vol.c:315 +msgid "but should be Append, Purged or Recycle" +msgstr "pero debería ser Anexar, Purgado o Reciclaje" -#: src/stored/btape.c:873 -msgid "Bad data in record. Test failed!\n" -msgstr "Datos erróneos en el registro. Prueba fallida!\n" +#: src/dird/next_vol.c:324 +msgid "volume has recycling disabled" +msgstr "el volumen de reciclado se ha desactivado" -#: src/stored/btape.c:877 +#: src/dird/next_vol.c:351 msgid "" -"\n" -"Block re-read correct. Test succeeded!\n" +"but should be Append, Purged or Recycle (recycling of the current volume " +"failed)" msgstr "" -"\n" -"Re-lectura de bloque correcta. Prueba Satisfactoria!\n" +"pero debería ser Anexar, Purgado o Reciclaje (reciclado del volumen actual " +"fallido)" -#: src/stored/btape.c:878 +#: src/dird/next_vol.c:355 msgid "" -"=== End Write, backup, and re-read test ===\n" -"\n" +"but should be Append, Purged or Recycle (cannot automatically recycle " +"current volume, as it still contains unpruned data or the Volume Retention " +"time has not expired.)" msgstr "" -"=== Fin prueba de escritura, copia de seguridad, y re-lectura ===\n" -"\n" +"pero debería ser Anexar, Purgado o Reciclaje (no puede reciclar " +"automáticamente el volumen actual, ya que aún contiene datos \"unpruned\" o " +"el tiempo de retención del Volumen no ha expirado.)" -#: src/stored/btape.c:885 -msgid "" -"This is not terribly serious since Bacula only uses\n" -"this function to verify the last block written to the\n" -"tape. Bacula will skip the last block verification\n" -"if you add:\n" -"\n" -"Backward Space Record = No\n" -"\n" -"to your Storage daemon's Device resource definition.\n" +#: src/dird/next_vol.c:415 +#, c-format +msgid "Unable to get Pool record: ERR=%s" +msgstr "No es posible obtener registro Pool: ERR=%s" + +#: src/dird/next_vol.c:422 +#, c-format +msgid "Unable add Scratch Volume, Pool \"%s\" full MaxVols=%d\n" msgstr "" -"Esto no es terriblemente grave, desde que sólo utilices Bacula\n" -"esta función para verificar el último bloque por escrito en la\n" -"cinta. Bacula saltará la verificación del último bloque\n" -"si usted agrega:\n" -"\n" -"Backward Space Record = NO\n" -"\n" -" en la definición de los recursos de Dispositivos de su demonio Storage.\n" +"No se puede agregar el volumen Scratch, Pool \"%s\" completo MaxVols=%d\n" -#: src/stored/btape.c:907 +#: src/dird/next_vol.c:442 #, c-format -msgid "Begin writing %i files of %sB with raw blocks of %u bytes.\n" -msgstr "Inicia escribiendo %i archivos de %sB con raw bloques de %u bytes.\n" +msgid "Failed to move Scratch Volume. ERR=%s\n" +msgstr "No se pudo mover Volumen Scratch. ERR=%s\n" -#: src/stored/btape.c:928 src/stored/btape.c:2879 +#: src/dird/next_vol.c:447 #, c-format -msgid "Write failed at block %u. stat=%d ERR=%s\n" -msgstr "Error al escritura en el bloque %u. stat=%d ERR=%s\n" +msgid "Using Volume \"%s\" from 'Scratch' pool.\n" +msgstr "Usando Volumen \"%s\" desde 'Scratch' pool.\n" -#: src/stored/btape.c:962 +#: src/dird/authenticate.c:77 src/dird/authenticate.c:78 +#: src/qt-console/tray-monitor/authenticate.cpp:119 #, c-format -msgid "Begin writing %i files of %sB with blocks of %u bytes.\n" -msgstr "Inicia escribiendo %i archivos de %sB con bloques de %u bytes.\n" +msgid "Error sending Hello to Storage daemon. ERR=%s\n" +msgstr "Error enviando Hello al servicio de Almacenamiento. ERR=%s\n" -#: src/stored/btape.c:971 -msgid "" -"\n" -"Error writing record to block.\n" -msgstr "" -"\n" -"Error escribiendo registro al bloque.\n" +#: src/dird/authenticate.c:107 +msgid "Director and Storage daemon passwords or names not the same.\n" +msgstr "Nombres o contraseñas en el Director o Storage no son las mismas.\n" -#: src/stored/btape.c:975 +#: src/dird/authenticate.c:109 +#, fuzzy, c-format msgid "" -"\n" -"Error writing block to device.\n" +"Director unable to authenticate with Storage daemon at \"%s:%d\". Possible " +"causes:\n" +"Passwords or names not the same or\n" +"Maximum Concurrent Jobs exceeded on the SD or\n" +"SD networking messed up (restart daemon).\n" +"Please see " msgstr "" -"\n" -"Error escribiendo bloque al dispositivo.\n" +"Director no se puede autenticar con el demonio Storage en \"%s:%d\". " +"Posibles causas:\n" +"Contraseñas o nombres no son los mismos o\n" +"el Máximo de Concurrentes Jobs ha superado en el SD o\n" +"red SD desordenada (reiniciar demonio).\n" +"Por favor, consulte http://www.bacula.org/en/rel-manual/" +"Bacula_Freque_Asked_Questi.html#SECTION003760000000000000000 por ayuda.\n" -#: src/stored/btape.c:1030 -msgid "The file_size is too big, stop this test with Ctrl-c.\n" -msgstr "" -"El tamaño_archivo es demasiado grande, detenga esta prueba con Ctrl-c.\n" +#: src/dird/authenticate.c:137 +#, c-format +msgid "TLS negotiation failed with SD at \"%s:%d\"\n" +msgstr "Negociación TLS fallida con SD en \"%s:%d\"\n" -#: src/stored/btape.c:1058 -msgid "Test with zero data, should give the maximum throughput.\n" -msgstr "Prueba con cero de datos, debe dar el máximo rendimiento.\n" +#: src/dird/authenticate.c:149 +#, c-format +msgid "bdird \n" -" -b specify bootstrap file\n" -" -c set configuration file to file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -p proceed inspite of I/O errors\n" -" -s turn off signals\n" -" -v be verbose\n" -" -? print this message.\n" +#: src/dird/ua_restore.c:1396 +msgid "No jobs found.\n" +msgstr "Jobs no encontrados.\n" + +#: src/dird/ua_restore.c:1531 +#, fuzzy, c-format +msgid "" "\n" +"Warning Storage is overridden by \"%s\" on the command line.\n" msgstr "" -"\n" -"Versión: %s (%s)\n" -"\n" -"Utilice: btape \n" -" -b especifica un archivo bootstrap\n" -" -c especifica un archivo File de configuración\n" -" -d establece nivel de depuración para \n" -" -dt imprime timestamp en salida de depuración\n" -" -p proceder a pesar de los errores de E/S\n" -" -s desactivar señales\n" -" -v detallado\n" -" -? imprime esta mensaje.\n" -"\n" +"Advertencia, storage por defecto reemplazada por \"%s\" en la línea de " +"comandos.\n" -#: src/stored/btape.c:3047 +#: src/dird/ua_restore.c:1536 #, c-format -msgid "Mount second Volume on device %s and press return when ready: " +msgid "" +"This may not work because of two different MediaTypes:\n" +" Storage MediaType=\"%s\"\n" +" Volume MediaType=\"%s\".\n" +"\n" msgstr "" -"Monte el segundo volumen en el dispositivo %s y pulse ENTER cuando esté " -"listo:" -#: src/stored/btape.c:3075 -#, c-format -msgid "Mount blank Volume on device %s and press return when ready: " +#: src/dird/ua_restore.c:1555 +#, fuzzy, c-format +msgid "Using Storage \"%s\" from MediaType \"%s\".\n" msgstr "" -"Monte un volumen en blanco en el dispositivo %s y pulse ENTER cuando esté " -"listo:" +"Storage \"%s\" no encontrado, usando Storage \"%s\" desde MediaType\"%s\".\n" -#: src/stored/btape.c:3095 +#: src/dird/ua_restore.c:1558 #, c-format -msgid "End of Volume \"%s\" %d records.\n" -msgstr "Fin del Volumen \"%s\" %d registros.\n" +msgid "Storage \"%s\" not found, using Storage \"%s\" from MediaType \"%s\".\n" +msgstr "" +"Storage \"%s\" no encontrado, usando Storage \"%s\" desde MediaType\"%s\".\n" -#: src/stored/btape.c:3109 +#: src/dird/ua_restore.c:1567 #, c-format -msgid "Read block=%u, VolBytes=%s rate=%sB/s\n" -msgstr "Leer bloque=%u, VolBytes=%s velocidad=%sB/s\n" +msgid "" +"\n" +"Unable to find Storage resource for\n" +"MediaType \"%s\", needed by the Jobs you selected.\n" +msgstr "" +"\n" +"No se puede encontrar los recursos Storage para\n" +"MediaType \"%s\", necesario por los Jobs que ha seleccionado.\n" -#: src/stored/authenticate.c:61 +#: src/dird/bsr.c:161 #, c-format -msgid "I only authenticate Directors, not %d\n" -msgstr "Solo autentico Directores, no %d\n" +msgid "Unable to get Job record. ERR=%s\n" +msgstr "No se pudo obtener registro de Job. ERR=%s\n" -#: src/stored/authenticate.c:67 src/filed/authenticate.c:76 +#: src/dird/bsr.c:172 #, c-format -msgid "Bad Hello command from Director at %s. Len=%d.\n" -msgstr "Malo comando Hello desde Director en %s. Len=%d\n" +msgid "Unable to get Job Volume Parameters. ERR=%s\n" +msgstr "No se pudo obtener Parámetros de Volumen de Job. ERR=%s\n" -#: src/stored/authenticate.c:78 src/filed/authenticate.c:88 +#: src/dird/bsr.c:220 #, c-format -msgid "Bad Hello command from Director at %s: %s\n" -msgstr "Malo comando Hello desde Director en %s: %s\n" +msgid "Unable to create bootstrap file %s. ERR=%s\n" +msgstr "No se puede crear el archivo bootstrap %s. ERR=%s\n" -#: src/stored/authenticate.c:92 -#, fuzzy, c-format -msgid "" -"Connection from unknown Director %s at %s rejected.\n" -"Please see " -msgstr "Conexión desde Director %s desconocido en %s rechazada.\n" +#: src/dird/bsr.c:229 +msgid "No files found to read. No bootstrap file written.\n" +msgstr "" +"Ninguno archivo encontrado para leer. Ninguno archivo bootstrap escrito.\n" + +#: src/dird/bsr.c:233 +msgid "Error writing bsr file.\n" +msgstr "Error escribiendo archivo bsr.\n" + +#: src/dird/bsr.c:238 +#, c-format +msgid "Bootstrap records written to %s\n" +msgstr "Registros Bootstrap escritos para %s\n" -#: src/stored/authenticate.c:129 +#: src/dird/bsr.c:286 #, fuzzy msgid "" -"Incorrect password given by Director.\n" -"Please see " -msgstr "Contraseña incorrecta dada por el Director en %s.\n" +"The Job will require the following (*=>InChanger):\n" +" Volume(s) Storage(s) SD Device(s)\n" +"===========================================================================\n" +msgstr "" +"El job irá requerir los siguientes\n" +" Storage(s) Dispositivo(s) SD Volumen(es)\n" +"===========================================================================\n" + +#: src/dird/bsr.c:306 +msgid "No Volumes found to restore.\n" +msgstr "Volúmenes no encontrados para restaurar.\n" -#: src/stored/authenticate.c:137 src/stored/authenticate.c:248 -#: src/filed/authenticate.c:151 src/filed/authenticate.c:270 +#: src/dird/bsr.c:308 +#, fuzzy msgid "" -"Authorization problem: Remote server did not advertize required TLS " -"support.\n" +"\n" +"Volumes marked with \"*\" are in the Autochanger.\n" msgstr "" -"Problema de autorización: El servidor remoto no anunció suporte TLS " -"requerido.\n" +"\n" +"Volúmenes marcados con \"*\" están en línea.\n" + +#: src/dird/fd_cmds.c:89 +msgid "Client: " +msgstr "Cliente:" -#: src/stored/authenticate.c:155 +#: src/dird/fd_cmds.c:125 #, c-format -msgid "TLS negotiation failed with DIR at \"%s:%d\"\n" -msgstr "Fallida la negociación TLS con DIR en \"%s:%d\"\n" +msgid "File daemon \"%s\" rejected Job command: %s\n" +msgstr "Demonio File \"%s\" rechazó comando Job: %s\n" -#: src/stored/authenticate.c:191 +#: src/dird/fd_cmds.c:138 #, c-format -msgid "Unable to authenticate Director at %s.\n" -msgstr "No se puede autenticar Director en %s.\n" +msgid "Error updating Client record. ERR=%s\n" +msgstr "Error al actualizar el registro Cliente:ERR=%s\n" -#: src/stored/authenticate.c:239 src/stored/authenticate.c:279 +#: src/dird/fd_cmds.c:143 #, c-format -msgid "" -"Incorrect authorization key from File daemon at %s rejected.\n" -"Please see " +msgid "FD gave bad response to JobId command: %s\n" +msgstr "FD dio mala respuesta al comando jobId: %s\n" + +#: src/dird/fd_cmds.c:172 src/dird/fd_cmds.c:260 +msgid ", since=" +msgstr ", desde=" + +#: src/dird/fd_cmds.c:237 +msgid "No prior or suitable Full backup found in catalog. Doing FULL backup.\n" msgstr "" +"Ninguna copia de seguridad Completa anterior encontrada en el catálogo. " +"Haciendo copia de seguridad COMPLETA.\n" -#: src/stored/authenticate.c:266 +#: src/dird/fd_cmds.c:238 src/dird/fd_cmds.c:244 src/dird/fd_cmds.c:253 #, c-format -msgid "TLS negotiation failed with FD at \"%s:%d\"\n" -msgstr "Fallida la negociación TLS con FD en \"%s:%d\"\n" +msgid " (upgraded from %s)" +msgstr "(actualizar desde %s)" -#: src/stored/wait.c:133 -#, c-format -msgid "pthread timedwait error. ERR=%s\n" -msgstr "error timedwait pthread. ERR=%s\n" +#: src/dird/fd_cmds.c:243 +msgid "" +"No prior or suitable Differential backup found in catalog. Doing " +"Differential backup.\n" +msgstr "" +"Ninguna copia de seguridad Diferencial previa o adecuada encontrada en el " +"catálogo. Haciendo copia de seguridad Diferencial.\n" -#: src/stored/wait.c:239 +#: src/dird/fd_cmds.c:251 #, c-format -msgid "JobId=%s, Job %s waiting to reserve a device.\n" -msgstr "JobId=%s, Job %s esperando para reservar un dispositivo.\n" +msgid "Prior failed job found in catalog. Upgrading to %s.\n" +msgstr "" +"Trabajo anterior fallido encontrado en el catálogo. Actualizando a %s.\n" -#: src/stored/block.c:102 +#: src/dird/fd_cmds.c:329 #, c-format +msgid "Unimplemented backup level %d %c\n" +msgstr "Nivel %d %c de respaldo no implementado\n" + +#: src/dird/fd_cmds.c:402 msgid "" -"Dump block %s %x: size=%d BlkNum=%d\n" -" Hdrcksum=%x cksum=%x\n" +"FD compression disabled for this Job because AllowCompress=No in Storage " +"resource.\n" msgstr "" -"Volcado de bloque %s %x: tamaño=%d BlkNum=%d\n" -" Hdrcksum=%x cksum=%x\n" -#: src/stored/block.c:115 +#: src/dird/fd_cmds.c:501 src/filed/job.c:1014 #, c-format -msgid " Rec: VId=%u VT=%u FI=%s Strm=%s len=%d p=%x\n" -msgstr "Rec: VId=%u VT=%u FI=%s Strm=%s len=%d p=%x\n" +msgid "Cannot run program: %s. ERR=%s\n" +msgstr "No se puede ejecutar el programa: %s. ERR=%s\n" + +#: src/dird/fd_cmds.c:512 src/dird/fd_cmds.c:537 src/dird/fd_cmds.c:551 +msgid ">filed: write error on socket\n" +msgstr ">filed: error de escritura en socket\n" -#: src/stored/block.c:171 +#: src/dird/fd_cmds.c:518 #, c-format -msgid "%d block read errors not printed.\n" -msgstr "%d errores de lectura de bloques no impresos.\n" +msgid "Error running program: %s. ERR=%s\n" +msgstr "Error ejecutando el programa: %s. ERR=%s\n" -#: src/stored/block.c:264 src/stored/block.c:280 src/stored/block.c:290 +#: src/dird/fd_cmds.c:527 #, c-format -msgid "" -"Volume data error at %u:%u! Wanted ID: \"%s\", got \"%s\". Buffer " -"discarded.\n" -msgstr "" -"Error de volumen de datos en %u:%u! Se busca ID: \"%s\",se obtiene \"%s\". " -"Buffer descartado.\n" +msgid "Cannot open included file: %s. ERR=%s\n" +msgstr "No se puede abrir el archivo incluido: %s. ERR=%s\n" + +#: src/dird/fd_cmds.c:672 +#, c-format +msgid "Client \"%s\" RunScript failed.\n" +msgstr "Cliente \"%s\" RunScript fallido.\n" -#: src/stored/block.c:305 +#: src/dird/fd_cmds.c:695 #, c-format msgid "" -"Volume data error at %u:%u! Block length %u is insane (too large), probably " -"due to a bad archive.\n" +"Client \"%s\" may not be used to restore this job. Please upgrade your " +"client.\n" msgstr "" -"Error de datos de volumen en %u:%u! Longitud de bloque %u es demente " -"(demasiado grande), probablemente debido a un archivo malo.\n" -#: src/stored/block.c:331 +#: src/dird/fd_cmds.c:776 +#, fuzzy +msgid "RestoreObject failed.\n" +msgstr "Restaurar Archivos" + +#: src/dird/fd_cmds.c:816 #, c-format msgid "" -"Volume data error at %u:%u!\n" -"Block checksum mismatch in block=%u len=%d: calc=%x blk=%x\n" +" %s\n" +msgstr "%s -> %s\n" -#: src/lib/smartall.c:194 -#, c-format -msgid "double free from %s:%d\n" -msgstr "doble libre desde %s:%d\n" +#: src/dird/ua_run.c:1132 +msgid "Cannot use your regexp.\n" +msgstr "No puede utilizar su expresión regular.\n" -#: src/lib/smartall.c:202 -#, c-format -msgid "qp->qnext->qprev != qp called from %s:%d\n" -msgstr "qp->qnext->qprev != qp llamado desde %s:%d\n" +#: src/dird/ua_run.c:1145 src/dird/ua_run.c:1175 +msgid "Levels:\n" +msgstr "Niveles:\n" -#: src/lib/smartall.c:206 -#, c-format -msgid "qp->qprev->qnext != qp called from %s:%d\n" -msgstr "qp->qprev->qnext != qp llamado desde %s:%d\n" +#: src/dird/ua_run.c:1151 +msgid "VirtualFull" +msgstr "VirtualFull" -#: src/lib/smartall.c:215 -#, c-format -msgid "Overrun buffer: len=%d addr=%p allocated: %s:%d called from %s:%d\n" -msgstr "" +#: src/dird/ua_run.c:1152 src/dird/ua_run.c:1181 +msgid "Select level" +msgstr "Seleccionar Nivel" -#: src/lib/smartall.c:293 -#, c-format -msgid "sm_realloc size: %d\n" -msgstr "sm_realloc tamaño: %d\n" +#: src/dird/ua_run.c:1176 +msgid "Initialize Catalog" +msgstr "Iniciar Catálogo" -#: src/lib/smartall.c:331 -#, c-format -msgid "sm_realloc %d at %p from %s:%d\n" -msgstr "sm_realloc %d en %p desde %s:%d\n" +#: src/dird/ua_run.c:1180 +msgid "Verify Volume Data (not yet implemented)" +msgstr "Verificar volumen de datos (aún no implementado)" -#: src/lib/smartall.c:391 -#, c-format +#: src/dird/ua_run.c:1201 +msgid "Level not appropriate for this Job. Cannot be changed.\n" +msgstr "Nivel no adecuado para este trabajo. No se puede cambiar.\n" + +#: src/dird/ua_run.c:1232 +#, fuzzy, c-format msgid "" -"\n" -"Orphaned buffers exist. Dump terminated following\n" -" discovery of bad links in chain of orphaned buffers.\n" -" Buffer address with bad links: %p\n" +"Run Admin Job\n" +"JobName: %s\n" +"FileSet: %s\n" +"Client: %s\n" +"Storage: %s\n" +"When: %s\n" +"Priority: %d\n" msgstr "" -"\n" -"Buffers huérfanos existen. Volcado terminado tras el\n" -"descubrimiento de malos vínculos en la cadena de buffers huérfanos.\n" -" Dirección del buffer con enlaces malos: %p\n" - -#: src/lib/smartall.c:436 -#, c-format -msgid "Damaged buffer found. Called from %s:%d\n" -msgstr "Búfer dañado encontrado. Llamado desde %s:%d\n" +"Ejecutar %s job\n" +"JobName: %s\n" +"FileSet: %s\n" +"Cliente: %s\n" +"Storage: %s\n" +"Cuando: %s\n" +"Prioridad: %d\n" -#: src/lib/smartall.c:469 -#, c-format +#: src/dird/ua_run.c:1286 +#, fuzzy, c-format msgid "" -"\n" -"Damaged buffers found at %s:%d\n" +"Run Backup job\n" +"JobName: %s\n" +"Level: %s\n" +"Client: %s\n" +"FileSet: %s\n" +"Pool: %s (From %s)\n" +"%sStorage: %s (From %s)\n" +"When: %s\n" +"Priority: %d\n" msgstr "" -"\n" -"Búfers dañado encontrado en %s:%d\n" +"Ejecutar %s job\n" +"Nombre del Job: %s\n" +"Nivel: %s\n" +"Cliente: %s\n" +"FileSet: %s\n" +"Pool: %s (Desde %s)\n" +"Storage: %s (Desde %s)\n" +"Cuando: %s\n" +"Prioridad: %d\n" +"%s%s%s" -#: src/lib/smartall.c:472 -msgid " discovery of bad prev link.\n" -msgstr "descubrimiento de un malo vínculo anterior.\n" +#: src/dird/ua_run.c:1315 +#, fuzzy, c-format +msgid "Could not get job record for selected JobId. ERR=%s" +msgstr "No se ha podido obtener el registro Job para Job anterior. ERR=%s" -#: src/lib/smartall.c:475 -msgid " discovery of bad next link.\n" -msgstr "descubrimiento del siguiente malo enlace malo.\n" +#: src/dird/ua_run.c:1354 +#, fuzzy, c-format +msgid "" +"Run Verify Job\n" +"JobName: %s\n" +"Level: %s\n" +"Client: %s\n" +"FileSet: %s\n" +"Pool: %s (From %s)\n" +"Storage: %s (From %s)\n" +"Verify Job: %s\n" +"Verify List: %s\n" +"When: %s\n" +"Priority: %d\n" +msgstr "" +"Ejecutar %s job\n" +"JobName: %s\n" +"Level: %s\n" +"Cliente: %s\n" +"FileSet: %s\n" +"Pool: %s (Desde %s)\n" +"Storage: %s (Desde %s)\n" +"Verify Job: %s\n" +"Verify List: %s\n" +"Cuando: %s\n" +"Prioridad: %d\n" -#: src/lib/smartall.c:478 -msgid " discovery of data overrun.\n" -msgstr "descubrimiento de datos de rebosamiento.\n" +#: src/dird/ua_run.c:1383 +msgid "Please enter a JobId for restore: " +msgstr "Por favor, introduzca un JobId para restaurar:" -#: src/lib/smartall.c:481 -msgid " NULL pointer.\n" -msgstr "Puntero NULL.\n" +#: src/dird/ua_run.c:1421 +#, fuzzy, c-format +msgid "" +"Run Restore job\n" +"JobName: %s\n" +"Bootstrap: %s\n" +"RegexWhere: %s\n" +"Replace: %s\n" +"FileSet: %s\n" +"Backup Client: %s\n" +"Restore Client: %s\n" +"Storage: %s\n" +"When: %s\n" +"Catalog: %s\n" +"Priority: %d\n" +msgstr "" +"Ejecutar Job de Restauración\n" +"Nombre del Job: %s\n" +"Bootstrap: %s\n" +"RegexWhere: %s\n" +"Reemplazar: %s\n" +"FileSet: %s\n" +"Cliente de Respaldo: %s\n" +"Cliente de Restauración: %s\n" +"Storage: %s\n" +"Cuando: %s\n" +"Catalogo: %s\n" +"Prioridad: %d\n" +"Opciones de Plugin: %s\n" -#: src/lib/smartall.c:487 -#, c-format -msgid " Buffer address: %p\n" -msgstr "Dirección de buffer : %p\n" +#: src/dird/ua_run.c:1473 +#, fuzzy, c-format +msgid "" +"Run Restore job\n" +"JobName: %s\n" +"Bootstrap: %s\n" +"Where: %s\n" +"Replace: %s\n" +"FileSet: %s\n" +"Backup Client: %s\n" +"Restore Client: %s\n" +"Storage: %s\n" +"When: %s\n" +"Catalog: %s\n" +"Priority: %d\n" +msgstr "" +"Ejecutar Job de Restauración\n" +"Nombre del Job: %s\n" +"Bootstrap: %s\n" +"Donde: %s\n" +"Reemplazar: %s\n" +"FileSet: %s\n" +"Respaldo Cliente: %s\n" +"Restaurar Cliente: %s\n" +"Storage: %s\n" +"Cuando: %s\n" +"Catalogo: %s\n" +"Prioridad: %d\n" +"Opciones de Plugin: %s\n" -#: src/lib/smartall.c:494 +#: src/dird/ua_run.c:1502 #, c-format -msgid "Damaged buffer: %6u bytes allocated at line %d of %s %s\n" -msgstr "Búfer dañados: %6u bytes asignados en la línea %d de %s %s\n" - -#: src/lib/sellist.c:69 -#, fuzzy -msgid "Negative numbers not permitted.\n" -msgstr "Números negativos no permitidos.\n" +msgid "" +"Run Restore job\n" +"JobName: %s\n" +"Bootstrap: %s\n" +msgstr "" +"Ejecutar Job Restaurar\n" +"JobName: %s\n" +"Bootstrap: %s\n" -#: src/lib/sellist.c:106 -#, fuzzy -msgid "Selection items must be be greater than zero.\n" -msgstr "Los valores deben ser ser mayor que cero.\n" +#: src/dird/ua_run.c:1510 +#, c-format +msgid "RegexWhere: %s\n" +msgstr "RegexWhere: %s\n" -#: src/lib/sellist.c:110 -#, fuzzy -msgid "Selection item too large.\n" -msgstr "Ranura demasiado grande.\n" +#: src/dird/ua_run.c:1513 +#, c-format +msgid "Where: %s\n" +msgstr "Donde: %s\n" -#: src/lib/sellist.c:167 -#, fuzzy -msgid "No input string given.\n" -msgstr "Especificación de archivo no dado.\n" +#: src/dird/ua_run.c:1517 +#, fuzzy, c-format +msgid "" +"Replace: %s\n" +"Client: %s\n" +"Storage: %s\n" +"JobId: %s\n" +"When: %s\n" +"Catalog: %s\n" +"Priority: %d\n" +msgstr "" +"Remplazar: %s\n" +"Cliente: %s\n" +"Storage: %s\n" +"JobId: %s\n" +"Cuando: %s\n" +"Catalogo: %s\n" +"Prioridad: %d\n" +"Opciones de Plugin: %s\n" -#: src/lib/rwlock.c:307 -msgid "rwl_writeunlock called too many times.\n" -msgstr "rwl_writeunlock llamado muchas veces.\n" +#: src/dird/ua_run.c:1572 +msgid "Run Copy job\n" +msgstr "Ejecutar Job de Copia\n" -#: src/lib/rwlock.c:312 -msgid "rwl_writeunlock by non-owner.\n" -msgstr "rwl_writeunlock por no-propietario.\n" +#: src/dird/ua_run.c:1574 +msgid "Run Migration job\n" +msgstr "Ejecutar Job de Migración\n" -#: src/lib/rwlock.c:437 src/lib/save/devlock.c:501 src/lib/devlock.c:501 +#: src/dird/ua_run.c:1606 #, c-format -msgid "Thread %d found unchanged elements %d times\n" -msgstr "Hilo %d encontró elementos sin cambios %d veces\n" +msgid "Unknown Job Type=%d\n" +msgstr "Tipo de Job desconocido=%d\n" -#: src/lib/rwlock.c:507 src/lib/save/devlock.c:571 src/lib/devlock.c:571 +#: src/dird/ua_run.c:1680 #, c-format -msgid "%02d: interval %d, writes %d, reads %d\n" -msgstr "%02d: intervalo %d, escritos %d, leídos %d\n" +msgid "Value missing for keyword %s\n" +msgstr "Falta valor para la palabra clave %s\n" -#: src/lib/rwlock.c:517 src/lib/save/devlock.c:581 src/lib/devlock.c:581 -#, c-format -msgid "data %02d: value %d, %d writes\n" -msgstr "datos %02d: valor %d, %d escritos\n" +#: src/dird/ua_run.c:1690 +msgid "JobId specified twice.\n" +msgstr "JobId especificada dos veces.\n" -#: src/lib/rwlock.c:522 src/lib/save/devlock.c:586 src/lib/devlock.c:586 -#, c-format -msgid "Total: %d thread writes, %d data writes\n" -msgstr "Total: %d hilos escritos, %d datos escritos\n" +#: src/dird/ua_run.c:1699 src/dird/ua_run.c:1839 +msgid "Client specified twice.\n" +msgstr "Cliente especificado dos veces.\n" -#: src/lib/rwlock.c:594 src/lib/save/devlock.c:658 src/lib/devlock.c:658 -msgid "Try write lock" -msgstr "Intente escribir bloqueo" +#: src/dird/ua_run.c:1707 +msgid "FileSet specified twice.\n" +msgstr "FileSet especificado dos veces.\n" -#: src/lib/rwlock.c:600 src/lib/save/devlock.c:664 src/lib/devlock.c:664 -msgid "Try read lock" -msgstr "Intente leer bloqueo" +#: src/dird/ua_run.c:1715 +msgid "Level specified twice.\n" +msgstr "Level especificado dos veces.\n" -#: src/lib/rwlock.c:656 src/lib/save/devlock.c:720 src/lib/devlock.c:720 -msgid "Create thread" -msgstr "Crear hilo" +#: src/dird/ua_run.c:1724 +msgid "Storage specified twice.\n" +msgstr "Storage especificado dos veces.\n" -#: src/lib/rwlock.c:666 src/lib/save/devlock.c:730 src/lib/devlock.c:730 -msgid "Join thread" -msgstr "Unir hilo" +#: src/dird/ua_run.c:1732 +msgid "RegexWhere or Where specified twice.\n" +msgstr "RegexDónde o Dónde especificado dos veces.\n" -#: src/lib/rwlock.c:668 src/lib/save/devlock.c:732 src/lib/devlock.c:732 -#, c-format -msgid "%02d: interval %d, updates %d, r_collisions %d, w_collisions %d\n" -msgstr "" -"%02d: intervalo %d, actualizados %d, r_collisions %d, w_collisions %d\n" +#: src/dird/ua_run.c:1737 +msgid "No authorization for \"regexwhere\" specification.\n" +msgstr "Sin autorización para especificación \"regexwhere\".\n" -#: src/lib/rwlock.c:680 src/lib/save/devlock.c:744 src/lib/devlock.c:744 -#, c-format -msgid "data %02d: value %d, %d updates\n" -msgstr "datos %02d: valor %d, %d actualizados\n" +#: src/dird/ua_run.c:1744 +msgid "Where or RegexWhere specified twice.\n" +msgstr "Dónde o RegexDónde especificado dos veces.\n" -#: src/lib/bget_msg.c:97 -msgid "Status OK\n" -msgstr "Estado OK\n" +#: src/dird/ua_run.c:1749 +msgid "No authoriztion for \"where\" specification.\n" +msgstr "Sin autorización para especificación \"where\".\n" -#: src/lib/bget_msg.c:101 -#, c-format -msgid "bget_msg: unknown signal %d\n" -msgstr "bget_msg: señal desconocida %d\n" +#: src/dird/ua_run.c:1756 +msgid "Bootstrap specified twice.\n" +msgstr "Bootstrap especificado dos veces.\n" -#: src/lib/bsock.c:131 -#, c-format -msgid "" -"Could not connect to %s on %s:%d. ERR=%s\n" -"Retrying ...\n" -msgstr "" -"No se pudo conectar a %s en %s:%d. ERR=%s\n" -"Reintentando ...\n" +#: src/dird/ua_run.c:1764 +msgid "Replace specified twice.\n" +msgstr "Replace especificado dos veces.\n" -#: src/lib/bsock.c:137 -#, c-format -msgid "Unable to connect to %s on %s:%d. ERR=%s\n" -msgstr "No se puede conectar a %s en %s:%d. ERR=%s\n" +#: src/dird/ua_run.c:1772 +msgid "When specified twice.\n" +msgstr "Cuando especificado dos veces.\n" -#: src/lib/bsock.c:207 -#, fuzzy, c-format -msgid "bnet_host2ipaddrs() for host \"%s\" failed: ERR=%s\n" -msgstr "fallo gethostbyname() para la maquina \"%s\": ERR=%s\n" +#: src/dird/ua_run.c:1780 +msgid "Priority specified twice.\n" +msgstr "Prioridad especificada dos veces.\n" -#: src/lib/bsock.c:260 -#, c-format -msgid "Socket open error. proto=%d port=%d. ERR=%s\n" -msgstr "Error al abrir socket. proto=%d puerto=%d. ERR=%s\n" +#: src/dird/ua_run.c:1785 +msgid "Priority must be positive nonzero setting it to 10.\n" +msgstr "Prioridad debe ser positivo y distinto a cero, configurando en 10.\n" -#: src/lib/bsock.c:273 -#, c-format -msgid "Source address bind error. proto=%d. ERR=%s\n" -msgstr "Error al enlazar dirección de origen. proto=%d. ERR=%s\n" +#: src/dird/ua_run.c:1795 +msgid "Verify Job specified twice.\n" +msgstr "Job Verificar especificado dos veces.\n" -#: src/lib/bsock.c:284 src/lib/bsock.c:320 src/lib/bnet_server.c:218 -#, c-format -msgid "Cannot set SO_KEEPALIVE on socket: %s\n" -msgstr "No se puede establecer SO_KEEPALIVE en el socket: %s\n" +#: src/dird/ua_run.c:1823 +msgid "Migration Job specified twice.\n" +msgstr "Job Migración especificado dos veces.\n" -#: src/lib/bsock.c:292 -#, fuzzy, c-format -msgid "Cannot set TCP_KEEPIDLE on socket: %s\n" -msgstr "No se puede establecer SO_KEEPIDLE en el socket: %s\n" +#: src/dird/ua_run.c:1831 +msgid "Pool specified twice.\n" +msgstr "Pool especificado dos veces.\n" -#: src/lib/bsock.c:339 -#, c-format -msgid "Could not init bsock mutex. ERR=%s\n" -msgstr "No se pudo iniciar bsock mutex. ERR=%s\n" +#: src/dird/ua_run.c:1847 +msgid "Restore Client specified twice.\n" +msgstr "Restaurar Cliente especificado dos veces.\n" -#: src/lib/bsock.c:374 -#, c-format -msgid "Socket has errors=%d on call to %s:%s:%d\n" -msgstr "" +#: src/dird/ua_run.c:1854 +msgid "Plugin Options not yet implemented.\n" +msgstr "Opciones de Plugin todavía no se ha implementado.\n" -#: src/lib/bsock.c:381 -#, c-format -msgid "Socket is terminated=%d on call to %s:%s:%d\n" -msgstr "" +#: src/dird/ua_run.c:1857 +msgid "Plugin Options specified twice.\n" +msgstr "Opciones de Plugin especificado dos veces.\n" -#: src/lib/bsock.c:389 -#, c-format -msgid "Socket has insane msglen=%d on call to %s:%s:%d\n" -msgstr "" +#: src/dird/ua_run.c:1862 +msgid "No authoriztion for \"PluginOptions\" specification.\n" +msgstr "Sin autorización para especificación \"PluginOptions\".\n" -#: src/lib/bsock.c:427 -#, c-format -msgid "Write error sending %d bytes to %s:%s:%d: ERR=%s\n" -msgstr "Error de escritura enviando %d bytes para %s:%s:%d: ERR=%s\n" +#: src/dird/ua_run.c:1869 +msgid "Spool flag specified twice.\n" +msgstr "Bandera de cola especificada dos veces.\n" -#: src/lib/bsock.c:433 -#, c-format -msgid "Wrote %d bytes to %s:%s:%d, but only %d accepted.\n" -msgstr "Escribió %d bytes para %s:%s:%d, pero solo %d aceptado.\n" +#: src/dird/ua_run.c:1876 +msgid "Invalid spooldata flag.\n" +msgstr "Invalida bandera spooldata.\n" -#: src/lib/bsock.c:522 src/lib/bsock.c:583 -#, c-format -msgid "Read expected %d got %d from %s:%s:%d\n" -msgstr "Esperaba leer %d obtuvo %d desde %s:%s:%d\n" +#: src/dird/ua_run.c:1885 +#, fuzzy +msgid "IgnoreDuplicateCheck flag specified twice.\n" +msgstr "Bandera de cola especificada dos veces.\n" -#: src/lib/bsock.c:542 -#, c-format -msgid "Packet size too big from \"%s:%s:%d. Terminating connection.\n" -msgstr "Tamaño de paquete muy grande de \"%s:%s:%d. Conexión de terminación.\n" +#: src/dird/ua_run.c:1892 +#, fuzzy +msgid "Invalid ignoreduplicatecheck flag.\n" +msgstr "Invalida bandera spooldata.\n" -#: src/lib/bsock.c:572 -#, c-format -msgid "Read error from %s:%s:%d: ERR=%s\n" -msgstr "Error de lectura desde %s:%s:%d: ERR=%s\n" +#: src/dird/ua_run.c:1897 +#, fuzzy +msgid "Accurate flag specified twice.\n" +msgstr "Bandera de cola especificada dos veces.\n" -#: src/lib/bsock.c:663 -msgid "fread attr spool I/O error.\n" -msgstr "Error fread attr spool I/O.\n" +#: src/dird/ua_run.c:1904 +#, fuzzy +msgid "Invalid accurate flag.\n" +msgstr "Invalida bandera spooldata.\n" -#: src/lib/bsock.c:724 -msgid "Could not malloc BSOCK data buffer\n" -msgstr "No se pudo malloc datos BSOCK buffer.\n" +#: src/dird/ua_run.c:1909 +msgid "Job name specified twice.\n" +msgstr "Nombre del Job especificado dos veces.\n" -#: src/lib/bsock.c:742 src/lib/bsock.c:761 -#, c-format -msgid "sockopt error: %s\n" -msgstr "error de sockopt: %s\n" +#: src/dird/ua_run.c:1917 +#, fuzzy +msgid "Media Type specified twice.\n" +msgstr "Replace especificado dos veces.\n" -#: src/lib/bsock.c:748 src/lib/bsock.c:767 -#, c-format -msgid "Warning network buffer = %d bytes not max size.\n" -msgstr "Alerta, búfer de red=%d bytes no tamaño máximo.\n" +#: src/dird/ua_run.c:1925 +#, fuzzy +msgid "NextPool specified twice.\n" +msgstr "Pool especificado dos veces.\n" -#: src/lib/bsock.c:787 src/lib/bsock.c:821 +#: src/dird/ua_run.c:1950 #, c-format -msgid "fcntl F_GETFL error. ERR=%s\n" -msgstr "error F_GETFL fcntl. ERR=%s\n" +msgid "Invalid keyword: %s\n" +msgstr "Palabra clave inválida: %s\n" -#: src/lib/bsock.c:793 src/lib/bsock.c:827 src/lib/bsock.c:859 +#: src/dird/ua_run.c:1965 #, c-format -msgid "fcntl F_SETFL error. ERR=%s\n" -msgstr "error F_SETFL fcntl. ERR=%s\n" +msgid "Catalog \"%s\" not found\n" +msgstr "Catalogo \"%s\" no encontrado\n" -#: src/lib/bsock.c:1032 src/qt-console/bcomm/dircomm_auth.cpp:112 +#: src/dird/ua_run.c:1969 #, c-format -msgid "Director authorization problem at \"%s:%d\"\n" -msgstr "Problema de autorización de Director en \"%s:%d\"\n" +msgid "No authorization. Catalog \"%s\".\n" +msgstr "Sin autorización. Catalogo \"%s\".\n" -#: src/lib/bsock.c:1039 src/qt-console/bcomm/dircomm_auth.cpp:119 +#: src/dird/ua_run.c:2003 #, c-format -msgid "" -"Authorization problem: Remote server at \"%s:%d\" did not advertise required " -"TLS support.\n" -msgstr "" -"Problema de autorización: El servidor remoto en \"%s:%d\" no anuncio soporte " -"TLS requiere.\n" +msgid "Verify Job \"%s\" not found.\n" +msgstr "Job Verificar \"%s\" no encontrado.\n" -#: src/lib/bsock.c:1047 src/qt-console/bcomm/dircomm_auth.cpp:127 +#: src/dird/ua_run.c:2013 #, c-format -msgid "" -"Authorization problem with Director at \"%s:%d\": Remote server requires " -"TLS.\n" -msgstr "" -"Problema de autorización con el Director en \"%s:%d\": El servidor remoto " -"requiere TLS.\n" +msgid "Migration Job \"%s\" not found.\n" +msgstr "Job Migración \"%s\" no encontrado.\n" -#: src/lib/bsock.c:1059 src/qt-console/bcomm/dircomm_auth.cpp:138 -#, c-format -msgid "TLS negotiation failed with Director at \"%s:%d\"\n" -msgstr "Fallo negociación TLS no con el Director en \"%s:%d\"\n" +#: src/dird/ua_label.c:92 +msgid "Negative numbers not permitted\n" +msgstr "Números negativos no permitidos.\n" + +#: src/dird/ua_label.c:121 +msgid "Values must be be greater than zero.\n" +msgstr "Los valores deben ser ser mayor que cero.\n" -#: src/lib/bsock.c:1069 src/qt-console/bcomm/dircomm_auth.cpp:150 +#: src/dird/ua_label.c:125 +msgid "Slot too large.\n" +msgstr "Ranura demasiado grande.\n" + +#: src/dird/ua_label.c:195 src/dird/ua_label.c:518 src/dird/ua_label.c:1198 +msgid "No slots in changer to scan.\n" +msgstr "No hay ranuras en cambiador para analizar.\n" + +#: src/dird/ua_label.c:207 src/dird/ua_label.c:529 +msgid "No Volumes found to label, or no barcodes.\n" +msgstr "No encontraron volúmenes para etiquetar, o sin códigos de barras.\n" + +#: src/dird/ua_label.c:217 src/dird/ua_label.c:1219 #, c-format -msgid "" -"Bad response to Hello command: ERR=%s\n" -"The Director at \"%s:%d\" is probably not running.\n" -msgstr "" -"Mala respuesta al comando Hello: ERR=%s\n" -"El director en \"%s:%d\" probablemente no esta corriendo.\n" +msgid "Slot %d greater than max %d ignored.\n" +msgstr "Ranura %d mayor que el máximo %d ignorado.\n" -#: src/lib/bsock.c:1078 src/qt-console/bcomm/dircomm_auth.cpp:159 +#: src/dird/ua_label.c:255 #, c-format -msgid "Director at \"%s:%d\" rejected Hello command\n" -msgstr "Director en \"%s:%d\" rechazó comando Hello\n" +msgid "No VolName for Slot=%d InChanger set to zero.\n" +msgstr "Ninguno VolName para Ranura=%d InChanger establecido en cero.\n" -#: src/lib/bsock.c:1088 src/qt-console/bcomm/dircomm_auth.cpp:171 -#, fuzzy, c-format -msgid "" -"Authorization problem with Director at \"%s:%d\"\n" -"Most likely the passwords do not agree.\n" -"If you are using TLS, there may have been a certificate validation error " -"during the TLS handshake.\n" -"Please see " +#: src/dird/ua_label.c:276 +#, c-format +msgid "Catalog record for Volume \"%s\" updated to reference slot %d.\n" msgstr "" -"Problema de autorización con el Director en \"%s:%d\"\n" -"Lo mas probable es que las contraseñas no están de acuerdo.\n" -"Si está usando TLS, puede haber habido un error de validación de " -"certificados durante la negociación TLS.\n" -" Por favor vea http://www.bacula.org/en/rel-manual/" -"Bacula_Freque_Asked_Questi.html#SECTION003760000000000000000 para ayuda.\n" +"Registro de catálogo para Volumen \"%s\" actualizado para referenciar ranura " +"%d.\n" -#: src/lib/message.c:362 src/lib/message.c:372 +#: src/dird/ua_label.c:280 #, c-format -msgid "Could not open console message file %s: ERR=%s\n" -msgstr "No puede abrir el archivo de mensajes de la consola %s: ERR=%s\n" +msgid "Catalog record for Volume \"%s\" is up to date.\n" +msgstr "Registro de catálogo para Volumen \"%s\" esta actualizado.\n" -#: src/lib/message.c:377 +#: src/dird/ua_label.c:286 #, c-format -msgid "Could not get con mutex: ERR=%s\n" -msgstr "No se pudo obtener con mutex: ERR=%s\n" - -#: src/lib/message.c:482 -msgid "Bacula Message" -msgstr "Bacula Message" +msgid "Volume \"%s\" not found in catalog. Slot=%d InChanger set to zero.\n" +msgstr "" +"Volumen \"%s\" no se encuentra en el catálogo. Ranura=%d InChanger " +"configurado para cero.\n" -#: src/lib/message.c:486 +#: src/dird/ua_label.c:383 #, c-format -msgid "open mail pipe %s failed: ERR=%s\n" -msgstr "Fallo al abrir tubería de correo %s: ERR=%s\n" +msgid "" +"Volume \"%s\" has VolStatus %s. It must be Purged or Recycled before " +"relabeling.\n" +msgstr "" +"Volumen \"%s\" hay VolStatus %s. Debe ser purgado o reciclado antes de " +"volver a etiquetar.\n" -#: src/lib/message.c:577 -msgid "open mail pipe failed.\n" -msgstr "Fallo al abrir tubería de correo .\n" +#: src/dird/ua_label.c:399 +msgid "Enter new Volume name: " +msgstr "Introduzca el nuevo nombre de Volumen:" -#: src/lib/message.c:590 +#: src/dird/ua_label.c:412 #, c-format -msgid "close error: ERR=%s\n" -msgstr "Error al cerrar: ERR=%s\n" +msgid "Media record for new Volume \"%s\" already exists.\n" +msgstr "Registro de Medios para nuevo volumen \"%s\" ya existe.\n" + +#: src/dird/ua_label.c:430 +msgid "Enter slot (0 or Enter for none): " +msgstr "Introduzca ranura (0 o Enter para ninguno):" -#: src/lib/message.c:601 +#: src/dird/ua_label.c:458 #, c-format -msgid "Mail prog: %s" -msgstr "Programa de Correo: %s" +msgid "Delete of Volume \"%s\" failed. ERR=%s" +msgstr "Fallo al eliminar el Volumen \"%s\". ERR=%s" -#: src/lib/message.c:610 +#: src/dird/ua_label.c:461 #, c-format -msgid "" -"Mail program terminated in error.\n" -"CMD=%s\n" -"ERR=%s\n" -msgstr "" -"Programa de correo terminado en error.\n" -"CMD=%s\n" -"ERR=%s\n" +msgid "Old volume \"%s\" deleted from catalog.\n" +msgstr "Antiguo volumen \"%s\" borrado del catalogo.\n" -#: src/lib/message.c:713 +#: src/dird/ua_label.c:472 #, c-format -msgid "fopen %s failed: ERR=%s\n" -msgstr "fopen %s ha fallado: ERR=%s\n" +msgid "Requesting to mount %s ...\n" +msgstr "Solicitando para montar %s ...\n" -#: src/lib/message.c:835 src/lib/message.c:838 -msgid "Msg delivery error: Unable to store data in database.\n" -msgstr "" +#: src/dird/ua_label.c:494 +msgid "Do not forget to mount the drive!!!\n" +msgstr "No se olvide de montar la unidad!!!\n" -#: src/lib/message.c:890 -#, fuzzy, c-format +#: src/dird/ua_label.c:534 msgid "" -"Msg delivery error: Operator mail program terminated in error.\n" -"CMD=%s\n" -"ERR=%s\n" +"The following Volumes will be labeled:\n" +"Slot Volume\n" +"==============\n" msgstr "" -"Operador de programa de correo terminado en error.\n" -"CMD=%s\n" -"ERR=%s\n" +"Los siguientes volúmenes serán etiquetados:\n" +"Ranura Volumen\n" +"==============\n" -#: src/lib/message.c:911 -#, fuzzy, c-format -msgid "Msg delivery error: fopen %s failed: ERR=%s\n" -msgstr "fopen %s ha fallado: ERR=%s\n" +#: src/dird/ua_label.c:543 +msgid "Do you want to label these Volumes? (yes|no): " +msgstr "¿Quieres etiquetar estos volúmenes? (sí | no):" -#: src/lib/message.c:1230 +#: src/dird/ua_label.c:563 #, c-format -msgid "%s: ABORTING due to ERROR in %s:%d\n" -msgstr "%s: ABORTADO debido a un ERROR en %s:%d\n" +msgid "Media record for Slot %d Volume \"%s\" already exists.\n" +msgstr "Registro de Medios para ranura %d Volumen \"%s\" ya existe.\n" -#: src/lib/message.c:1234 +#: src/dird/ua_label.c:569 #, c-format -msgid "%s: ERROR TERMINATION at %s:%d\n" -msgstr "%s: ERROR DE TERMINACIÓN en %s:%d\n" +msgid "Error setting InChanger: ERR=%s" +msgstr "Error al configurar InChanger: ERR =% s" -#: src/lib/message.c:1239 +#: src/dird/ua_label.c:592 #, c-format -msgid "%s: Fatal Error because: " -msgstr "%s: Error Fatal porque: " +msgid "Maximum pool Volumes=%d reached.\n" +msgstr "Máximo pool Volúmenes=%d alcanzado.\n" -#: src/lib/message.c:1241 +#: src/dird/ua_label.c:600 #, c-format -msgid "%s: Fatal Error at %s:%d because:\n" -msgstr "%s: Error Fatal en %s:%d porque:\n" +msgid "Catalog record for cleaning tape \"%s\" successfully created.\n" +msgstr "" +"Registro de catálogo para la limpieza de la cinta \"%s\" ha creado " +"correctamente.\n" -#: src/lib/message.c:1245 +#: src/dird/ua_label.c:607 #, c-format -msgid "%s: ERROR: " -msgstr "%s: ERROR: " +msgid "Catalog error on cleaning tape: %s" +msgstr "Error de catálogo en la limpieza de la cinta: %s" -#: src/lib/message.c:1247 +#: src/dird/ua_label.c:643 #, c-format -msgid "%s: ERROR in %s:%d " -msgstr "%s: ERROR en %s:%d " +msgid "Illegal character \"%c\" in a volume name.\n" +msgstr "Ilegal carácter \"%c\" en un nombre de volumen.\n" -#: src/lib/message.c:1250 -#, c-format -msgid "%s: Warning: " -msgstr "%s: Advertencia: " +#: src/dird/ua_label.c:650 src/dird/ua_cmds.c:341 +msgid "Volume name too long.\n" +msgstr "Nombre de Volumen demasiado largo.\n" -#: src/lib/message.c:1253 +#: src/dird/ua_label.c:690 #, c-format -msgid "%s: Security violation: " -msgstr "%s: Violación de seguridad: " +msgid "Sending relabel command from \"%s\" to \"%s\" ...\n" +msgstr "Enviando comando relabel desde \"%s\" para \"%s\" ...\n" -#: src/lib/message.c:1341 +#: src/dird/ua_label.c:697 #, c-format -msgid "%s ABORTING due to ERROR\n" -msgstr "%s: ABORTADO debido a un ERROR\n" +msgid "Sending label command for Volume \"%s\" Slot %d ...\n" +msgstr "Enviando comando relabel para Volumen \"%s\" Ranura %d ...\n" -#: src/lib/message.c:1344 +#: src/dird/ua_label.c:738 #, c-format -msgid "%s ERROR TERMINATION\n" -msgstr "%s: ERROR DE TERMINACIÓN\n" +msgid "Catalog record for Volume \"%s\", Slot %d successfully created.\n" +msgstr "" +"Registro Catalogo para Volumen \"%s\", Ranura %d creado correctamente.\n" -#: src/lib/message.c:1347 +#: src/dird/ua_label.c:751 #, c-format -msgid "%s JobId %u: Fatal error: " -msgstr "%s JobId %u: Error Fatal: " +msgid "Label command failed for Volume %s.\n" +msgstr "Comando Label fallido para Volumen %s.\n" -#: src/lib/message.c:1356 -#, c-format -msgid "%s JobId %u: Error: " -msgstr "%s JobId %u: Error: " +#: src/dird/ua_label.c:765 +msgid "Could not open SD socket.\n" +msgstr "No se pudo abrir socket SD.\n" -#: src/lib/message.c:1362 +#: src/dird/ua_label.c:837 src/dird/ua_label.c:847 #, c-format -msgid "%s JobId %u: Warning: " -msgstr "%s JobId %u: Advertencia: " +msgid "Invalid Slot number: %s\n" +msgstr "Número de Ranura no válido:%s\n" -#: src/lib/message.c:1368 +#: src/dird/ua_label.c:856 #, c-format -msgid "%s JobId %u: Security violation: " -msgstr "%s JobId %u: Violación de seguridad: " +msgid "Invalid Volume name: %s\n" +msgstr "Nombre de Volumen no válido:%s\n" -#: src/lib/bnet_server.c:125 +#: src/dird/ua_label.c:950 #, c-format -msgid "Cannot open stream socket. ERR=%s. Current %s All %s\n" -msgstr "No se puede abrir el socket de flujo. ERR=%s. Actual %s Todos %s\n" +msgid "Device \"%s\" has %d slots.\n" +msgstr "Dispositivo \"%s\" tiene %d ranuras.\n" -#: src/lib/bnet_server.c:138 +#: src/dird/ua_label.c:996 #, c-format -msgid "Cannot set SO_REUSEADDR on socket: %s\n" -msgstr "No se puede establecer SO_REUSEADDR en el socket: %s\n" +msgid "Pool \"%s\" resource not found for volume \"%s\"!\n" +msgstr "Recurso Pool \"%s\" no encontrado para volumen \"%s\"!\n" -#: src/lib/bnet_server.c:147 -#, c-format -msgid "Cannot bind port %d: ERR=%s: Retrying ...\n" -msgstr "No se puede enlazar a puerto %d: ERR=%s: Reintentando ...\n" +#: src/dird/ua_label.c:1210 +msgid "No Volumes found, or no barcodes.\n" +msgstr "Volúmenes no encontrados, o no códigos de barras.\n" -#: src/lib/bnet_server.c:152 -#, c-format -msgid "Cannot bind port %d: ERR=%s.\n" -msgstr "No se puede enlazar a puerto %d: ERR=%s.\n" +#: src/dird/ua_label.c:1213 +msgid "" +" Slot | Volume Name | Status | Media Type | " +"Pool |\n" +msgstr "Ranura | Nombre Volumen | Estado | Tipo de Media | Pool |\n" -#: src/lib/bnet_server.c:163 -#, c-format -msgid "Could not init client queue: ERR=%s\n" -msgstr "No se pudo iniciar cola cliente: ERR=%s\n" +#: src/dird/ua_label.c:1214 +msgid "" +"------+------------------+-----------+----------------------" +"+--------------------|\n" +msgstr "" +"------+------------------+-----------+----------------------" +"+--------------------|\n" -#: src/lib/bnet_server.c:182 -#, c-format -msgid "Error in select: %s\n" -msgstr "Error al seleccionar: %s\n" +#: src/dird/ua_cmds.c:95 +msgid "Add media to a pool" +msgstr "Añadir medios a un pool" -#: src/lib/bnet_server.c:203 -#, c-format -msgid "Connection from %s:%d refused by hosts.access\n" -msgstr "Conexión desde %s:%d rechazada por hosts.access\n" +#: src/dird/ua_cmds.c:96 +msgid "Autodisplay console messages" +msgstr "Autodisplay mensajes de la consola" -#: src/lib/bnet_server.c:229 -msgid "Could not create client BSOCK.\n" -msgstr "No es posible crear cliente BSOCK. \n" +#: src/dird/ua_cmds.c:97 +msgid "Automount after label" +msgstr "Auto-montar después de etiquetar" -#: src/lib/bnet_server.c:236 -#, c-format -msgid "Could not add job to client queue: ERR=%s\n" -msgstr "No se pudo agregar job a la cola de cliente: ERR=%s\n" +#: src/dird/ua_cmds.c:98 +msgid "Cancel a job" +msgstr "Cancelar un Job" -#: src/lib/bnet_server.c:253 -#, c-format -msgid "Could not destroy client queue: ERR=%s\n" -msgstr "No es posible destruir la cola de cliente: ERR=%s\n" +#: src/dird/ua_cmds.c:99 +msgid "Create DB Pool from resource" +msgstr "Crear Pool BD desde recurso" -#: src/lib/bpipe.c:361 src/lib/bpipe.c:444 -msgid "Program killed by Bacula (timeout)\n" -msgstr "Programa finalizado(killed) por Bacula (timeout) \n" +#: src/dird/ua_cmds.c:100 +msgid "Delete volume, pool or job" +msgstr "Eliminar volumen, pool o job" -#: src/lib/lockmgr.c:65 -#, c-format -msgid "ASSERT failed at %s:%i: %s\n" +#: src/dird/ua_cmds.c:101 +msgid "Disable a job, attributes batch process" msgstr "" -#: src/lib/lockmgr.c:70 -#, c-format -msgid "ASSERT failed at %s:%i: %s \n" +#: src/dird/ua_cmds.c:102 +msgid "Enable a job, attributes batch process" msgstr "" -#: src/lib/lockmgr.c:100 -#, c-format -msgid "Mutex lock failure. ERR=%s\n" -msgstr "Error bloqueando Mutex. ERR=%s\n" +#: src/dird/ua_cmds.c:103 +msgid "Performs FileSet estimate, listing gives full listing" +msgstr "Realiza estimación FileSet, listando lista completa" -#: src/lib/lockmgr.c:110 -#, c-format -msgid "Mutex unlock failure. ERR=%s\n" -msgstr "Error desbloqueando Mutex. ERR=%s\n" +#: src/dird/ua_cmds.c:106 src/dird/ua_cmds.c:130 +msgid "Terminate Bconsole session" +msgstr "Terminar la sesión bconsole" -#: src/lib/lockmgr.c:275 src/lib/lockmgr.c:611 src/lib/lockmgr.c:639 -#: src/lib/jcr.c:321 -#, c-format -msgid "pthread key create failed: ERR=%s\n" -msgstr "fallo crear clave pthread: ERR=%s\n" +#: src/dird/ua_cmds.c:107 +msgid "Non-interactive gui mode" +msgstr "Modo gui no-interactivo" -#: src/lib/lockmgr.c:623 -#, c-format -msgid "pthread_create failed: ERR=%s\n" -msgstr "pthread_create fallido: ERR=%s\n" +#: src/dird/ua_cmds.c:108 +msgid "Print help on specific command" +msgstr "Imprimir ayuda en comandos específicos" -#: src/lib/crypto.c:442 -msgid "Unable to open certificate file" -msgstr "No se puede abrir el archivo de certificado" +#: src/dird/ua_cmds.c:113 +msgid "Label a tape" +msgstr "Etiquetar una cinta" + +#: src/dird/ua_cmds.c:114 +msgid "List objects from catalog" +msgstr "Listar objetos del catálogo" + +#: src/dird/ua_cmds.c:118 +msgid "Full or long list like list command" +msgstr "Completo o lista larga como la lista de comando" + +#: src/dird/ua_cmds.c:121 +msgid "Display pending messages" +msgstr "Mostrar mensajes pendientes" + +#: src/dird/ua_cmds.c:122 +msgid "Print current memory usage" +msgstr "Imprimir uso de la memoria actual" + +#: src/dird/ua_cmds.c:123 +msgid "Mount storage" +msgstr "Montar Storage" + +#: src/dird/ua_cmds.c:126 +msgid "Prune expired records from catalog" +msgstr "Prunar registros expirados del catálogo" + +#: src/dird/ua_cmds.c:129 +msgid "Purge records from catalog" +msgstr "Purgar registros del catálogo" + +#: src/dird/ua_cmds.c:131 +msgid "Query catalog" +msgstr "Consulta de catálogo " + +#: src/dird/ua_cmds.c:132 +msgid "Restore files" +msgstr "Restaurar Archivos" + +#: src/dird/ua_cmds.c:137 +msgid "Relabel a tape" +msgstr "Reetiquetar una cinta" + +#: src/dird/ua_cmds.c:140 +msgid "Release storage" +msgstr "Liberar Storage" + +#: src/dird/ua_cmds.c:141 +msgid "Reload conf file" +msgstr "Recargar archivo de configuración" + +#: src/dird/ua_cmds.c:142 +msgid "Run a job" +msgstr "Ejecutar un Job" + +#: src/dird/ua_cmds.c:147 +msgid "Report status" +msgstr "Informe de estado" -#: src/lib/crypto.c:449 -msgid "Unable to read certificate from file" -msgstr "No es posible leer el archivo de certificado" +#: src/dird/ua_cmds.c:150 +#, fuzzy +msgid "Stop a job" +msgstr "Ningún ultimo trabajo." -#: src/lib/crypto.c:455 -msgid "Unable to extract public key from certificate" -msgstr "No se puede extraer la clave pública del certificado" +#: src/dird/ua_cmds.c:151 +msgid "Sets debug level" +msgstr "Establecer el nivel de depuración" -#: src/lib/crypto.c:462 -msgid "" -"Provided certificate does not include the required subjectKeyIdentifier " -"extension." +#: src/dird/ua_cmds.c:154 +msgid "Sets bandwidth" msgstr "" -"Certificado suministrado no incluye la extensión subjectKeyIdentifier " -"necesaria." -#: src/lib/crypto.c:469 -#, c-format -msgid "Unsupported key type provided: %d\n" -msgstr "Tipo de clave prevista no soportada: %d\n" +#: src/dird/ua_cmds.c:157 +msgid "Sets new client address -- if authorized" +msgstr "Establecer nueva dirección del cliente - si esta autorizado" -#: src/lib/crypto.c:506 src/lib/crypto.c:554 -msgid "Unable to open private key file" -msgstr "No se puede abrir archivo de clave privada" +#: src/dird/ua_cmds.c:158 +msgid "Show resource records" +msgstr "Mostrar los registros de recursos" -#: src/lib/crypto.c:536 src/lib/crypto.c:570 -msgid "Unable to read private key from file" -msgstr "No se puede leer la clave privada del archivo" +#: src/dird/ua_cmds.c:161 +msgid "Use SQL to query catalog" +msgstr "usar SQL para consultar el catálogo" -#: src/lib/crypto.c:629 -#, c-format -msgid "Unsupported digest type: %d\n" -msgstr "Tipo Digest no soportado: %d\n" +#: src/dird/ua_cmds.c:162 +msgid "Print current time" +msgstr "Imprimir hora actual" -#: src/lib/crypto.c:643 -msgid "OpenSSL digest initialization failed" -msgstr "Fallo al inicializar resume OpenSSL" +#: src/dird/ua_cmds.c:163 +msgid "Turn on/off trace to file" +msgstr "Activar/desactivar archivo de traza" -#: src/lib/crypto.c:657 -msgid "OpenSSL digest update failed" -msgstr "Fallo al actualizar resume OpenSSL" +#: src/dird/ua_cmds.c:164 +#, fuzzy +msgid "Truncate one or more Volumes" +msgstr "Creado Registro Media para Volumen: %s\n" -#: src/lib/crypto.c:675 -msgid "OpenSSL digest finalize failed" -msgstr "Fallo al finalizar resume OpenSSL" +#: src/dird/ua_cmds.c:165 +msgid "Unmount storage" +msgstr "Desmonte almacenamiento" -#: src/lib/crypto.c:773 -msgid "OpenSSL digest_new failed" -msgstr "fallo digest_new OpenSSL" +#: src/dird/ua_cmds.c:168 +msgid "Umount - for old-time Unix guys, see unmount" +msgstr "Umount - para los viejos tiempos tipos de Unix, véase unmount" -#: src/lib/crypto.c:779 -msgid "OpenSSL sign get digest failed" -msgstr "Fallo OpenSSL al obtener firma digest " +#: src/dird/ua_cmds.c:171 +msgid "Update volume, pool or stats" +msgstr "Actualizar volumen, pool o stats" -#: src/lib/crypto.c:818 src/lib/crypto.c:822 -msgid "OpenSSL digest Verify final failed" -msgstr "Fallo OpenSSL Verificación final digest " +#: src/dird/ua_cmds.c:178 +msgid "Use catalog xxx" +msgstr "Usar catálogo xxx" -#: src/lib/crypto.c:827 -msgid "No signers found for crypto verify.\n" -msgstr "Firmantes no encontrados para verificar el cifrado.\n" +#: src/dird/ua_cmds.c:179 +msgid "Does variable expansion" +msgstr "es la variable de expansión" -#: src/lib/crypto.c:888 -msgid "Signature creation failed" -msgstr "Fallo en creación de firma" +#: src/dird/ua_cmds.c:180 +msgid "Print Director version" +msgstr "Imprimir la versión del Director" -#: src/lib/crypto.c:966 -msgid "Signature decoding failed" -msgstr "Fallo en decodificación de firma" +#: src/dird/ua_cmds.c:181 +msgid "Wait until no jobs are running" +msgstr "Esperar hasta que no se estén ejecutando jobs" -#: src/lib/crypto.c:1043 -msgid "Unsupported cipher type specified\n" -msgstr "Tipo de cifrado especificados no soportado\n" +#: src/dird/ua_cmds.c:234 +#, c-format +msgid "%s: is an invalid command.\n" +msgstr "%s: es un comando invalido.\n" -#: src/lib/crypto.c:1192 -msgid "CryptoData decoding failed" -msgstr "decodificación CryptoData fallida" +#: src/dird/ua_cmds.c:275 +msgid "" +"You probably don't want to be using this command since it\n" +"creates database records without labeling the Volumes.\n" +"You probably want to use the \"label\" command.\n" +"\n" +msgstr "" +"Usted probablemente no quiere usar este comando, ya que el\n" +"crea registros en la base de datos sin etiquetar los volúmenes.\n" +"Usted probablemente desea utilizar el comando \"label\".\n" +"\n" -#: src/lib/crypto.c:1236 -msgid "Failure decrypting the session key" -msgstr "Error al descifrar la clave de sesión" +#: src/dird/ua_cmds.c:293 +#, c-format +msgid "Pool already has maximum volumes=%d\n" +msgstr "Pool ya tiene volúmenes máximo=%d\n" -#: src/lib/crypto.c:1287 +#: src/dird/ua_cmds.c:294 +msgid "Enter new maximum (zero for unlimited): " +msgstr "Introduzca nuevo máximo (cero para un número ilimitado):" + +#: src/dird/ua_cmds.c:314 #, c-format -msgid "Unsupported contentEncryptionAlgorithm: %d\n" -msgstr "ContentEncryptionAlgorithm no soportado: %d\n" +msgid "Enter number of Volumes to create. 0=>fixed name. Max=%d: " +msgstr "" +"Introduzca el número de volúmenes para crear. 0=>nombre fijo. Máximo=%d:" -#: src/lib/crypto.c:1297 src/lib/crypto.c:1303 -msgid "OpenSSL cipher context initialization failed" -msgstr "Fallo al inicializar contexto cipher OpenSSl" +#: src/dird/ua_cmds.c:320 +#, c-format +msgid "The number must be between 0 and %d\n" +msgstr "El número debe estar comprendido entre 0 y %d\n" -#: src/lib/crypto.c:1310 -msgid "Encryption session provided an invalid symmetric key" -msgstr "Cifrado de sesión suministro una clave simétrica inválida" +#: src/dird/ua_cmds.c:328 +msgid "Enter Volume name: " +msgstr "Introduzca nombre de Volumen:" -#: src/lib/crypto.c:1316 -msgid "Encryption session provided an invalid IV" -msgstr "Cifrado de sesión suministro una IV inválida" +#: src/dird/ua_cmds.c:332 +msgid "Enter base volume name: " +msgstr "Introduzca nombre de Volumen base:" -#: src/lib/crypto.c:1322 -msgid "OpenSSL cipher context key/IV initialization failed" -msgstr "Fallido inicialización de contexto OpenSSL de cifrado de clave/IV " +#: src/dird/ua_cmds.c:356 +msgid "Enter the starting number: " +msgstr "Introduzca el número inicial:" + +#: src/dird/ua_cmds.c:361 +msgid "Start number must be greater than zero.\n" +msgstr "Número de inicio debe ser mayor que cero.\n" + +#: src/dird/ua_cmds.c:372 +msgid "Enter slot (0 for none): " +msgstr "Introduzca ranura (0 para ninguno):" -#: src/lib/crypto.c:1392 +#: src/dird/ua_cmds.c:376 +msgid "InChanger? yes/no: " +msgstr "InChanger? si/no: " + +#: src/dird/ua_cmds.c:404 #, c-format -msgid "Unable to init OpenSSL threading: ERR=%s\n" -msgstr "No se puede inicializar hilo OpenSSL: ERR=%s\n" +msgid "%d Volumes created in pool %s\n" +msgstr "%d Volúmenes creados en el pool %s\n" -#: src/lib/crypto.c:1405 -msgid "Failed to seed OpenSSL PRNG\n" -msgstr "Fallo al seed OpenSSL PRNG\n" +#: src/dird/ua_cmds.c:420 src/dird/ua_cmds.c:1131 +msgid "Turn on or off? " +msgstr "Encender o apagar?" -#: src/lib/crypto.c:1431 -msgid "Failed to save OpenSSL PRNG\n" -msgstr "Fallo al guardar OpenSSL PRNG\n" +#: src/dird/ua_cmds.c:547 +#, c-format +msgid "" +"Can't set %s RecyclePool to %s, %s is not in database.\n" +"Try to update it with 'update pool=%s'\n" +msgstr "" +"No se puede establecer %s RecyclePool para %s, %s no está¡ en la base de " +"datos.\n" +"Intente actualizarlo con 'update pool=%s'\n" -#: src/lib/crypto.c:1492 +#: src/dird/ua_cmds.c:565 #, c-format -msgid "Unsupported digest type=%d specified\n" -msgstr "Incompatible resume tipo=%d especificado\n" +msgid "" +"Can't set %s ScratchPool to %s, %s is not in database.\n" +"Try to update it with 'update pool=%s'\n" +msgstr "" +"No se puede establecer %s ScratchPool para %s, %s no está en la base de " +"datos.\n" +"Intente actualizarlo con 'update pool=%s'\n" -#: src/lib/crypto.c:1512 +#: src/dird/ua_cmds.c:632 #, c-format -msgid "SHA1Update() returned an error: %d\n" -msgstr "SHA1Update() retorno un error: %d\n" +msgid "" +"Error: Pool %s already exists.\n" +"Use update to change it.\n" +msgstr "" +"Error: Pool %s ya existe.\n" +"Use update para cambiarlo.\n" -#: src/lib/crypto.c:1655 -msgid "No error" -msgstr "Ningún error" +#: src/dird/ua_cmds.c:643 +#, c-format +msgid "Pool %s created.\n" +msgstr "Pool %s creado.\n" -#: src/lib/crypto.c:1657 -msgid "Signer not found" -msgstr "Firmante no encontrado" +#: src/dird/ua_cmds.c:671 +#, fuzzy +msgid "Failed to set bandwidth limit to Client.\n" +msgstr "Fallo al conectar con el cliente.\n" -#: src/lib/crypto.c:1659 -msgid "Recipient not found" -msgstr "Recipiente no encontrado" +#: src/dird/ua_cmds.c:674 +#, c-format +msgid "2000 OK Limiting bandwidth to %lldkb/s %s\n" +msgstr "" -#: src/lib/crypto.c:1661 -msgid "Unsupported digest algorithm" -msgstr "Algoritmo de resumen no soportado" +#: src/dird/ua_cmds.c:675 +msgid "on running and future jobs" +msgstr "" -#: src/lib/crypto.c:1663 -msgid "Unsupported encryption algorithm" -msgstr "Algoritmo de cifrado no soportado" +#: src/dird/ua_cmds.c:697 +msgid "Set Bandwidth choice:\n" +msgstr "" -#: src/lib/crypto.c:1665 -msgid "Signature is invalid" -msgstr "La firma no es válida" +#: src/dird/ua_cmds.c:698 +#, fuzzy +msgid "Running Job" +msgstr "" +"\n" +"Jobs Ejecutando:\n" -#: src/lib/crypto.c:1667 -msgid "Decryption error" -msgstr "Error de Descifrado" +#: src/dird/ua_cmds.c:699 +msgid "Running and future Jobs for a Client" +msgstr "" -#: src/lib/crypto.c:1670 -msgid "Internal error" -msgstr "Error interno" +#: src/dird/ua_cmds.c:700 +msgid "Choose where to limit the bandwidth" +msgstr "" -#: src/lib/crypto.c:1672 -msgid "Unknown error" -msgstr "Error desconocido" +#: src/dird/ua_cmds.c:712 +#, fuzzy +msgid "Enter new bandwidth limit kb/s: " +msgstr "Introduzca nuevo Máximo de Trabajos" -#: src/lib/cram-md5.c:109 src/lib/cram-md5.c:137 -msgid "1999 Authorization failed.\n" -msgstr "1999 Fallo de Autorización.\n" +#: src/dird/ua_cmds.c:749 src/dird/ua_cmds.c:809 +msgid "Unauthorized command from this console.\n" +msgstr "Comando no autorizado desde esta consola.\n" -#: src/lib/priv.c:68 +#: src/dird/ua_cmds.c:766 #, c-format -msgid "Could not find userid=%s: ERR=%s\n" -msgstr "No se pudo encontrar userid=%s: ERR=%s\n" +msgid "Client \"%s\" address set to %s\n" +msgstr "Cliente \"%s\" dirección configurada para %s\n" -#: src/lib/priv.c:74 +#: src/dird/ua_cmds.c:780 #, c-format -msgid "Could not find password entry. ERR=%s\n" -msgstr "No se pudo encontrar contraseña de entrada. ERR=%s\n" +msgid "Job Attributes Insertion %sabled\n" +msgstr "" -#: src/lib/priv.c:87 +#: src/dird/ua_cmds.c:813 #, c-format -msgid "Could not find group=%s: ERR=%s\n" -msgstr "No se pudo encontrar grupo=%s: ERR=%s\n" +msgid "Job \"%s\" %sabled\n" +msgstr "Job \"%s\" %sabled\n" -#: src/lib/priv.c:95 -#, c-format -msgid "Could not initgroups for group=%s, userid=%s: ERR=%s\n" -msgstr "Podría no initgroups para grupo=%s, userid=%s: ERR=%s\n" +#: src/dird/ua_cmds.c:1005 +msgid "Enter new debug level: " +msgstr "Introduzca el nuevo nivel de depuración:" -#: src/lib/priv.c:98 +#: src/dird/ua_cmds.c:1018 #, c-format -msgid "Could not initgroups for userid=%s: ERR=%s\n" -msgstr "Podría no initgroups para userid=%s: ERR=%s\n" +msgid "Incorrect tags found on command line %s\n" +msgstr "" -#: src/lib/priv.c:105 -#, c-format -msgid "Could not set group=%s: ERR=%s\n" -msgstr "No se pudo establecer grupo=%s: ERR=%s\n" +#: src/dird/ua_cmds.c:1095 +msgid "All" +msgstr "All" -#: src/lib/priv.c:115 -#, c-format -msgid "prctl failed: ERR=%s\n" -msgstr "prctl fallido: ERR=%s\n" +#: src/dird/ua_cmds.c:1096 +msgid "Select daemon type to set debug level" +msgstr "Seleccione el tipo de Demonio para establecer el nivel de depuración" -#: src/lib/priv.c:119 +#: src/dird/ua_cmds.c:1191 +msgid "Client name missing.\n" +msgstr "Falta el nombre del cliente.\n" + +#: src/dird/ua_cmds.c:1203 src/dird/ua_cmds.c:1270 src/dird/ua_cmds.c:2016 #, c-format -msgid "setreuid failed: ERR=%s\n" -msgstr "setreuid fallido: ERR=%s\n" +msgid "No authorization for Job \"%s\"\n" +msgstr "No autorización para Job \"%s\"\n" -#: src/lib/priv.c:123 +#: src/dird/ua_cmds.c:1208 +msgid "Job name missing.\n" +msgstr "Falta el nombre del Job.\n" + +#: src/dird/ua_cmds.c:1217 #, c-format -msgid "cap_from_text failed: ERR=%s\n" -msgstr "cap_from_text fallido: ERR=%s\n" +msgid "Fileset \"%s\" not found.\n" +msgstr "FileSet \"%s\" no encontrado.\n" -#: src/lib/priv.c:127 +#: src/dird/ua_cmds.c:1221 #, c-format -msgid "cap_set_proc failed: ERR=%s\n" -msgstr "cap_set_proc fallido: ERR=%s\n" +msgid "No authorization for FileSet \"%s\"\n" +msgstr "No autorización para FileSet \"%s\"\n" -#: src/lib/priv.c:131 -msgid "Keep readall caps not implemented this OS or missing libraries.\n" -msgstr "seguir readall caps no implementado en este SO o faltan bibliotecas.\n" +#: src/dird/ua_cmds.c:1226 +msgid "Fileset name missing.\n" +msgstr "Falta Nombre del Fileset.\n" -#: src/lib/priv.c:135 -#, c-format -msgid "Could not set specified userid: %s\n" -msgstr "No se pudo establecer userid especificado: %s\n" +#: src/dird/ua_cmds.c:1241 +msgid "Level value missing.\n" +msgstr "Valor del nivel ausente.\n" -#: src/lib/openssl.c:143 src/lib/openssl.c:214 -#, c-format -msgid "Unable to destroy mutex: ERR=%s\n" -msgstr "No se puede destruir mutex: ERR=%s\n" +#: src/dird/ua_cmds.c:1248 +msgid "Invalid value for accurate. It must be yes or no.\n" +msgstr "Valor no válido para exacto. Debe ser sí o no.\n" -#: src/lib/util.c:183 -msgid "Running" -msgstr "Ejecutando" +#: src/dird/ua_cmds.c:1253 +#, fuzzy +msgid "Accurate value missing.\n" +msgstr "Valor del nivel ausente.\n" -#: src/lib/util.c:186 -msgid "Blocked" -msgstr "Bloqueado" +#: src/dird/ua_cmds.c:1266 +msgid "No job specified.\n" +msgstr "Job no especificado.\n" + +#: src/dird/ua_cmds.c:1326 +msgid "Error sending include list.\n" +msgstr "Error al enviar lista incluir.\n" + +#: src/dird/ua_cmds.c:1331 +msgid "Error sending exclude list.\n" +msgstr "Error al enviar lista excluir.\n" -#: src/lib/util.c:192 -msgid "Error: incomplete job" +#: src/dird/ua_cmds.c:1422 +msgid "" +"In general it is not a good idea to delete either a\n" +"Pool or a Volume since they may contain data.\n" +"\n" msgstr "" +"En general, esto no es una buena idea para eliminar un\n" +"Pool o un Volumen ya que pueden contener datos.\n" +"\n" -#: src/lib/util.c:199 -msgid "Non-fatal error" -msgstr "No Fatal Error" +#: src/dird/ua_cmds.c:1425 +msgid "Choose catalog item to delete" +msgstr "Seleccione el ítem del catalogo para eliminar" -#: src/lib/util.c:205 src/lib/util.c:337 -msgid "Canceled" -msgstr "Cancelado" +#: src/dird/ua_cmds.c:1436 +msgid "Nothing done.\n" +msgstr "Nada hecho.\n" -#: src/lib/util.c:208 -msgid "Verify differences" -msgstr "Verificar diferencias" +#: src/dird/ua_cmds.c:1464 +#, fuzzy, c-format +msgid "Are you sure you want to delete %d JobIds ? (yes/no): " +msgstr "¿Esta usted seguro de que desea eliminar el Pool \"%s\"? (si/no):" -#: src/lib/util.c:211 -msgid "Waiting on FD" -msgstr "Esperando al FD" +#: src/dird/ua_cmds.c:1474 +msgid "Enter JobId to delete: " +msgstr "Introduzca jobId para eliminar:" -#: src/lib/util.c:214 -msgid "Wait on SD" -msgstr "Espere al SD" +#: src/dird/ua_cmds.c:1492 +#, fuzzy, c-format +msgid "Jobid %s and associated records deleted from the catalog.\n" +msgstr "Job %s y los registros asociados eliminados del catálogo.\n" -#: src/lib/util.c:217 -msgid "Wait for new Volume" -msgstr "Espere por un nuevo Volumen" +#: src/dird/ua_cmds.c:1507 +#, c-format +msgid "" +"\n" +"This command will delete volume %s\n" +"and all Jobs saved on that volume from the Catalog\n" +msgstr "" +"\n" +"Este comando eliminara los volúmenes %s\n" +"y todos los Jobs guardados en este volumen desde el Catalogo\n" -#: src/lib/util.c:220 -msgid "Waiting for mount" -msgstr "Esperando por montaje" +#: src/dird/ua_cmds.c:1514 +#, c-format +msgid "Are you sure you want to delete Volume \"%s\"? (yes/no): " +msgstr "¿Estas usted seguro de que desea eliminar el Volumen \"%s\"? (si/no):" -#: src/lib/util.c:223 -msgid "Waiting for Storage resource" -msgstr "Esperando al recurso Storage" +#: src/dird/ua_cmds.c:1527 +msgid "Can't list jobs on this volume\n" +msgstr "" -#: src/lib/util.c:226 -msgid "Waiting for Job resource" -msgstr "Esperando al recurso Job" +#: src/dird/ua_cmds.c:1552 +#, c-format +msgid "Are you sure you want to delete Pool \"%s\"? (yes/no): " +msgstr "¿Esta usted seguro de que desea eliminar el Pool \"%s\"? (si/no):" -#: src/lib/util.c:229 -msgid "Waiting for Client resource" -msgstr "Esperando al recurso Cliente" +#: src/dird/ua_cmds.c:1666 +#, c-format +msgid "Using Catalog name=%s DB=%s\n" +msgstr "Utilizando Catalogo nombre=%s BD=%s\n" -#: src/lib/util.c:232 -msgid "Waiting on Max Jobs" -msgstr "Esperando el máximo Jobs" +#: src/dird/ua_cmds.c:1734 +msgid "ERR: Can't open db\n" +msgstr "ERR: No se puede abrir db\n" -#: src/lib/util.c:235 -msgid "Waiting for Start Time" -msgstr "Esperando a Hora de Inicio" +#: src/dird/ua_cmds.c:1781 +msgid "Wait on mount timed out\n" +msgstr "Tiempo agotado en esperar mount \n" -#: src/lib/util.c:238 -msgid "Waiting on Priority" -msgstr "Esperando por prioridad" +#: src/dird/ua_cmds.c:1791 +msgid "ERR: Job was not found\n" +msgstr "ERR: Job no se ha encontrado\n" -#: src/lib/util.c:257 -#, c-format -msgid "Unknown Job termination status=%d" -msgstr "Estado de terminación de Job desconocido=%d" +#: src/dird/ua_cmds.c:1867 +msgid "" +" Command Description\n" +" ======= ===========\n" +msgstr "" +"Comando Descripción\n" +" ======== ==============\n" -#: src/lib/util.c:273 -msgid "Completed successfully" -msgstr "Se ha completado con éxito" +#: src/dird/ua_cmds.c:1871 +#, c-format +msgid "" +" %-13s %s\n" +"\n" +"Arguments:\n" +"\t%s\n" +msgstr "" +"%-13s %s\n" +"\n" +"Argumentos:\n" +"\t%s\n" -#: src/lib/util.c:276 -msgid "Completed with warnings" -msgstr "Completado con advertencias" +#: src/dird/ua_cmds.c:1876 +#, c-format +msgid " %-13s %s\n" +msgstr " %-13s %s\n" -#: src/lib/util.c:279 -msgid "Terminated with errors" -msgstr "Terminado con errores" +#: src/dird/ua_cmds.c:1880 +#, c-format +msgid "" +"\n" +"Can't find %s command.\n" +"\n" +msgstr "" +"\n" +"No se puede encontrar comando %s. \n" +"\n" -#: src/lib/util.c:282 -msgid "Fatal error" -msgstr "Error fatal" +#: src/dird/ua_cmds.c:1882 +msgid "" +"\n" +"When at a prompt, entering a period cancels the command.\n" +"\n" +msgstr "" +"\n" +"Cuando en un prompt, entrando un período cancela el comando.\n" +"\n" -#: src/lib/util.c:285 -msgid "Created, not yet running" -msgstr "Creado, aún no se ejecuta" +#: src/dird/ua_cmds.c:1918 src/filed/status.c:77 +#, c-format +msgid "%s Version: %s (%s) %s %s %s %s\n" +msgstr "%s Versión: %s (%s) %s %s %s %s\n" -#: src/lib/util.c:288 -msgid "Canceled by user" -msgstr "Cancelada por el usuario" +#: src/dird/ua_cmds.c:1977 src/dird/ua_cmds.c:2004 src/dird/ua_cmds.c:2026 +#, c-format +msgid "No authorization for Catalog \"%s\"\n" +msgstr "No autorización para Catalogo \"%s\"\n" -#: src/lib/util.c:291 -msgid "Verify found differences" -msgstr "Verificar diferencias encontradas" +#: src/dird/ua_cmds.c:2083 +#, c-format +msgid "Could not open catalog database \"%s\".\n" +msgstr "No se pudo abrir la base de datos de catálogo \"%s\".\n" -#: src/lib/util.c:294 -msgid "Waiting for File daemon" -msgstr "Esperando por demonio File" +#: src/dird/ua_cmds.c:2102 +#, c-format +msgid "Using Catalog \"%s\"\n" +msgstr "Usando Catalogo \"%s\"\n" -#: src/lib/util.c:297 -msgid "Waiting for Storage daemon" -msgstr "Esperando por demonio Storage" +#: src/dird/backup.c:94 +msgid "No Storage specification found in Job or Pool.\n" +msgstr "No se encuentran en la especificación del Storage en Job or Pool.\n" -#: src/lib/util.c:300 -msgid "Waiting for higher priority jobs" -msgstr "Esperando por trabajos de mayor prioridad" +#: src/dird/backup.c:254 +#, fuzzy, c-format +msgid "Using BaseJobId(s): %s\n" +msgstr "%s utilizando JobId=%s Job=%s\n" -#: src/lib/util.c:303 -msgid "Batch inserting file records" -msgstr "Insertando registros de archivo en lote" +#: src/dird/backup.c:264 +msgid "Cannot find previous jobids.\n" +msgstr "No se puede encontrar jobids anteriores.\n" -#: src/lib/util.c:334 -msgid "Fatal Error" -msgstr "Error Fatal" +#: src/dird/backup.c:278 +#, fuzzy +msgid "Sending Accurate information to the FD.\n" +msgstr "Enviando información precisa.\n" -#: src/lib/util.c:340 -msgid "Differences" -msgstr "Diferencias" +#: src/dird/backup.c:435 +#, c-format +msgid "Start Backup JobId %s, Job=%s\n" +msgstr "Iniciar Respaldo JobId %s, Job=%s\n" -#: src/lib/util.c:343 -msgid "Unknown term code" -msgstr "Código del término desconocido" +#: src/dird/backup.c:640 +#, c-format +msgid "Unexpected Client Job message: %s\n" +msgstr "Inesperado Cliente Job mensaje: %s\n" -#: src/lib/util.c:359 src/lib/jcr.c:232 -msgid "Backup" -msgstr "Backup" +#: src/dird/backup.c:653 +#, c-format +msgid "Network error with FD during %s: ERR=%s\n" +msgstr "Error de red con FD durante %s: ERR=%s\n" -#: src/lib/util.c:362 -msgid "Migrated Job" -msgstr "Jod de Migración" +#: src/dird/backup.c:687 +msgid "No Job status returned from FD.\n" +msgstr "Estado de Job no retornado desde FD.\n" -#: src/lib/util.c:365 -msgid "Verify" -msgstr "Verificar" +#: src/dird/backup.c:847 +#, c-format +msgid " Base files/Used files: %lld/%lld (%.2f%%)\n" +msgstr "" -#: src/lib/util.c:368 src/wx-console/wxbrestorepanel.cpp:404 -#: src/wx-console/wxbrestorepanel.cpp:2000 -msgid "Restore" -msgstr "Restaurar" +#: src/dird/backup.c:858 +#, fuzzy, c-format +msgid "" +"%s %s %s (%s):\n" +" Build OS: %s %s %s\n" +" JobId: %d\n" +" Job: %s\n" +" Backup Level: %s%s\n" +" Client: \"%s\" %s\n" +" FileSet: \"%s\" %s\n" +" Pool: \"%s\" (From %s)\n" +" Catalog: \"%s\" (From %s)\n" +" Storage: \"%s\" (From %s)\n" +" Scheduled time: %s\n" +" Start time: %s\n" +" End time: %s\n" +" Elapsed time: %s\n" +" Priority: %d\n" +" FD Files Written: %s\n" +" SD Files Written: %s\n" +" FD Bytes Written: %s (%sB)\n" +" SD Bytes Written: %s (%sB)\n" +" Rate: %.1f KB/s\n" +" Software Compression: %s\n" +"%s VSS: %s\n" +" Encryption: %s\n" +" Accurate: %s\n" +" Volume name(s): %s\n" +" Volume Session Id: %d\n" +" Volume Session Time: %d\n" +" Last Volume Bytes: %s\n" +" Non-fatal FD errors: %d\n" +" SD Errors: %d\n" +" FD termination status: %s\n" +" SD termination status: %s\n" +" Termination: %s\n" +"\n" +msgstr "" +"%s %s %s (%s): %s\n" +" Build OS: %s %s %s\n" +" JobId: %d\n" +" Job: %s\n" +" Nivel de Respaldo: %s%s\n" +" Cliente: \"%s\" %s\n" +" FileSet: \"%s\" %s\n" +" Pool: \"%s\" (Desde %s)\n" +" Catalogo: \"%s\" (Desde %s)\n" +" Storage: \"%s\" (Desde %s)\n" +" Hora programada: %s\n" +" Hora de inicio: %s\n" +" Hora de finalización: %s\n" +" Tiempo transcurrido: %s\n" +" Prioridad: %d\n" +" FD Archivos Escritos: %s\n" +" SD Archivos Escritos: %s\n" +" FD Bytes Escritos: %s (%sB)\n" +" SD Bytes Escritos: %s (%sB)\n" +" Tasa: %.1f KB/s\n" +" Software Compresión: %s\n" +" VSS: %s\n" +" Cifrado: %s\n" +" Accurate: %s\n" +" Nombre del Volumen(es): %s\n" +" Id de Sesión del Volumen: %d\n" +" Tiempo de Sesión del Volumen: %d\n" +" Ultimo Volumen Bytes: %s (%sB)\n" +" No-fatal FD errores: %d\n" +" SD Errores: %d\n" +" Estado de terminación FD: %s\n" +" Estado de terminación SD: %s\n" +" Terminación: %s\n" +"\n" -#: src/lib/util.c:371 src/wx-console/wxbmainframe.cpp:276 -msgid "Console" -msgstr "Consola" +#: src/dird/backup.c:959 +#, c-format +msgid "Could not get Job Volume Parameters to update Bootstrap file. ERR=%s\n" +msgstr "" +"No es posible obtener los parámetros de Job Volumen para actualizar el " +"archivo Bootstrap. ERR=%s\n" -#: src/lib/util.c:374 -msgid "System or Console" -msgstr "Sistema o Consola" +#: src/dird/backup.c:995 +#, c-format +msgid "" +"Could not open WriteBootstrap file:\n" +"%s: ERR=%s\n" +msgstr "" +"No se pudo abrir el archivo WriteBootstrap:\n" +"%s: ERR=%s\n" -#: src/lib/util.c:377 -msgid "Admin" -msgstr "Admin" +#: src/dird/ua_tree.c:62 +msgid "add dir/file to be restored recursively, wildcards allowed" +msgstr "" +"añadir directorio/archivo a ser restaurado de forma recursiva, comodines " +"permitido" -#: src/lib/util.c:380 src/lib/util.c:470 -msgid "Archive" -msgstr "Archivo" +#: src/dird/ua_tree.c:63 +msgid "change current directory" +msgstr "cambio del directorio actual" -#: src/lib/util.c:383 -msgid "Job Copy" -msgstr "Job de Copia" +#: src/dird/ua_tree.c:64 +msgid "count marked files in and below the cd" +msgstr "contar archivos marcados dentro y por debajo de CD" -#: src/lib/util.c:386 -msgid "Copy" -msgstr "Copiar" +#: src/dird/ua_tree.c:65 +msgid "delete dir/file to be restored recursively in dir" +msgstr "eliminar dir/archivo a restaurar recursivamente en dir" -#: src/lib/util.c:389 -msgid "Migrate" -msgstr "Migrar" +#: src/dird/ua_tree.c:66 src/dird/ua_tree.c:67 +msgid "long list current directory, wildcards allowed" +msgstr "larga lista directorio actual, comodines permitido" -#: src/lib/util.c:392 -msgid "Scan" -msgstr "Escanear" +#: src/dird/ua_tree.c:68 +msgid "leave file selection mode" +msgstr "abandonar el modo de selección de archivos" -#: src/lib/util.c:396 -msgid "Unknown Type" -msgstr "Tipo Desconocido" +#: src/dird/ua_tree.c:69 +msgid "estimate restore size" +msgstr "tamaño estimado de restauración" -#: src/lib/util.c:406 -msgid "Truncate" -msgstr "Truncar" +#: src/dird/ua_tree.c:70 +msgid "same as done command" +msgstr "mismo que el comando done" -#: src/lib/util.c:409 src/filed/restore.c:1164 -msgid "None" -msgstr "Ninguno" +#: src/dird/ua_tree.c:71 +msgid "find files, wildcards allowed" +msgstr "encontrar los archivos, comodines permitidos" -#: src/lib/util.c:441 -msgid "Verify Init Catalog" -msgstr "Verificar Catálogo Inicial" +#: src/dird/ua_tree.c:72 src/dird/ua_tree.c:85 src/dird/ua_tree.c:86 +msgid "print help" +msgstr "imprimir ayuda" -#: src/lib/util.c:450 -msgid "Verify Data" -msgstr "Verificar Datos" +#: src/dird/ua_tree.c:73 src/dird/ua_tree.c:74 +msgid "list current directory, wildcards allowed" +msgstr "lista el directorio actual, comodines permitidos" -#: src/lib/util.c:453 -msgid "Virtual Full" -msgstr "Virtual completa" +#: src/dird/ua_tree.c:75 +#, fuzzy +msgid "list subdir in current directory, wildcards allowed" +msgstr "lista el directorio actual, comodines permitidos" -#: src/lib/util.c:469 -msgid "Append" -msgstr "Añadir" +#: src/dird/ua_tree.c:76 +msgid "list the marked files in and below the cd" +msgstr "lista los archivos marcados dentro y por debajo de CD" -#: src/lib/util.c:471 -msgid "Disabled" -msgstr "Inhabilitado" +#: src/dird/ua_tree.c:77 +#, fuzzy +msgid "list the marked files in" +msgstr "lista los archivos marcados dentro y por debajo de CD" -#: src/lib/util.c:473 -msgid "Used" -msgstr "Usado" +#: src/dird/ua_tree.c:78 +msgid "mark dir/file to be restored recursively, wildcards allowed" +msgstr "" +"marca directorio/archivo para restaurar recursivamente, comodines permitido" -#: src/lib/util.c:474 -msgid "Cleaning" -msgstr "Limpieza" +#: src/dird/ua_tree.c:79 +msgid "mark directory name to be restored (no files)" +msgstr "marca nombre del directorio para ser restaurado (sin archivos)" -#: src/lib/util.c:475 -msgid "Purged" -msgstr "Purga" +#: src/dird/ua_tree.c:80 src/dird/ua_tree.c:81 +msgid "print current working directory" +msgstr "imprimir directorio de trabajo actual" -#: src/lib/util.c:476 -msgid "Recycle" -msgstr "Reciclar" +#: src/dird/ua_tree.c:82 +msgid "unmark dir/file to be restored recursively in dir" +msgstr "" +"desmarcar directorio/archivo para ser restaurado en el directorio " +"recursivamente" -#: src/lib/util.c:477 -msgid "Read-Only" -msgstr "Sólo-Lectura" +#: src/dird/ua_tree.c:83 +msgid "unmark directory name only no recursion" +msgstr "desmarcar solo nombre del directorio sin recursividad" -#: src/lib/util.c:489 -msgid "Invalid volume status" -msgstr "Invalido estado de volumen" +#: src/dird/ua_tree.c:84 +msgid "quit and do not do restore" +msgstr "salir y no restaurar" -#: src/lib/util.c:753 src/lib/util.c:763 src/lib/util.c:771 src/lib/util.c:778 -#: src/lib/util.c:785 src/lib/util.c:799 src/lib/util.c:809 src/lib/util.c:822 -#: src/lib/util.c:833 src/filed/restore.c:1180 -msgid "*none*" -msgstr "*ninguno*" +#: src/dird/ua_tree.c:106 +msgid "" +"\n" +"You are now entering file selection mode where you add (mark) and\n" +"remove (unmark) files to be restored. No files are initially added, unless\n" +"you used the \"all\" keyword on the command line.\n" +"Enter \"done\" to leave this mode.\n" +"\n" +msgstr "" +"\n" +"Usted está entrando ahora en el modo de selección de archivo donde usted " +"agrega(mark) y\n" +"elimina (unmark) los archivos que va a restaurar. No hay archivos añadido " +"inicialmente, a menos que\n" +"usted utilice la palabra clave \"all\" en la línea de comandos. Introduzca " +"\"done\" para salir de este modo.\n" +"\n" -#: src/lib/util.c:867 -msgid "Working directory not defined. Cannot continue.\n" -msgstr "Directorio de trabajo no definido. No se puede continuar.\n" +#: src/dird/ua_tree.c:117 src/dird/ua_tree.c:847 +#, c-format +msgid "cwd is: %s\n" +msgstr "cwd es: %s\n" -#: src/lib/util.c:870 +#: src/dird/ua_tree.c:126 src/dird/ua_tree.c:145 #, c-format -msgid "Working Directory: \"%s\" not found. Cannot continue.\n" -msgstr "Directorio de Trabajo: \"%s\" no encontrado. No se puede continuar.\n" +msgid "Invalid command \"%s\". Enter \"done\" to exit.\n" +msgstr "Invalido comando \"%s\". Introduzca \"done\" para salir.\n" -#: src/lib/util.c:874 +#: src/dird/ua_tree.c:217 #, c-format -msgid "Working Directory: \"%s\" is not a directory. Cannot continue.\n" +msgid "" +"Something is wrong with the Delta sequence of %s, skiping new parts. Current " +"sequence is %d\n" msgstr "" -"Directorio de Trabajo: \"%s\" no es un directorio. No se puede continuar.\n" -#: src/lib/save/devlock.c:330 src/lib/devlock.c:330 -#, fuzzy -msgid "writeunlock called too many times.\n" -msgstr "rwl_writeunlock llamado muchas veces.\n" +#: src/dird/ua_tree.c:389 src/dird/ua_tree.c:401 src/dird/ua_tree.c:418 +msgid "No files marked.\n" +msgstr "Ningún archivo marcado.\n" -#: src/lib/save/devlock.c:335 src/lib/devlock.c:335 -#, fuzzy -msgid "writeunlock by non-owner.\n" -msgstr "rwl_writeunlock por no-propietario.\n" +#: src/dird/ua_tree.c:403 +msgid "1 file marked.\n" +msgstr "1 archivo marcado.\n" -#: src/lib/daemon.c:65 +#: src/dird/ua_tree.c:405 #, c-format -msgid "Cannot fork to become daemon: ERR=%s\n" -msgstr "No se puede fork para convertirse en demonio: ERR =%s\n" +msgid "%s files marked.\n" +msgstr "%s archivos marcados.\n" -#: src/lib/tls.c:90 -#, c-format -msgid "" -"Error with certificate at depth: %d, issuer = %s, subject = %s, ERR=%d:%s\n" -msgstr "" -"Error con el certificado en profundidad: %d, emisor=%s, asunto=%s, ERR=%d:" -"%s\n" +#: src/dird/ua_tree.c:433 +msgid "No directories marked.\n" +msgstr "Ningún directorio marcado.\n" -#: src/lib/tls.c:127 -msgid "Error initializing SSL context" -msgstr "Error inicializando contexto SSL" +#: src/dird/ua_tree.c:435 +msgid "1 directory marked.\n" +msgstr "1 directorio marcado.\n" -#: src/lib/tls.c:148 -msgid "Error loading certificate verification stores" -msgstr "Error al cargar los almacenes de verificación del certificado" +#: src/dird/ua_tree.c:437 +#, c-format +msgid "%s directories marked.\n" +msgstr "%s directorios marcados.\n" -#: src/lib/tls.c:153 -msgid "" -"Either a certificate file or a directory must be specified as a verification " -"store\n" +#: src/dird/ua_tree.c:458 +#, c-format +msgid "%s total files/dirs. %s marked to be restored.\n" msgstr "" -"Un certificado de archivo o un directorio debe especificarse como un " -"almacenes de verificación\n" +"%s total de los archivos/directorios. %s marcado para ser restaurado.\n" -#: src/lib/tls.c:164 -msgid "Error loading certificate file" -msgstr "Error cargando archivos de certificados" +#: src/dird/ua_tree.c:469 +msgid "No file specification given.\n" +msgstr "Especificación de archivo no dado.\n" -#: src/lib/tls.c:172 -msgid "Error loading private key" -msgstr "Error cargando llaves privadas" +#: src/dird/ua_tree.c:690 +#, c-format +msgid "Node %s has no children.\n" +msgstr "Nodo %s no tiene hijos.\n" -#: src/lib/tls.c:180 -msgid "Unable to open DH parameters file" -msgstr "No se puede abrir el archivo de parámetros de DH" +#: src/dird/ua_tree.c:783 +#, c-format +msgid "%d total files; %d marked to be restored; %s bytes.\n" +msgstr "%d total de los archivos; %d marcado para ser restaurado; %s bytes.\n" -#: src/lib/tls.c:186 -msgid "Unable to load DH parameters from specified file" -msgstr "" -"No es posible cargar los parámetros de DH desde el archivo especificado" +#: src/dird/ua_tree.c:817 +msgid "Too few or too many arguments. Try using double quotes.\n" +msgstr "Muy pocos o demasiados argumentos. Trate de usar comillas dobles.\n" -#: src/lib/tls.c:190 -msgid "Failed to set TLS Diffie-Hellman parameters" -msgstr "No se pudo establecer parámetros TLS de Diffie-Hellman" +#: src/dird/ua_tree.c:830 +msgid "Invalid path given.\n" +msgstr "Ruta dada no válida.\n" -#: src/lib/tls.c:200 -msgid "Error setting cipher list, no valid ciphers available\n" -msgstr "" -"Error configurando lista de cipher, no hay ciphers válidos disponibles\n" +#: src/dird/ua_tree.c:866 src/dird/ua_tree.c:878 +msgid "No files unmarked.\n" +msgstr "No hay archivos sin marcar.\n" -#: src/lib/tls.c:259 -msgid "Peer failed to present a TLS certificate\n" -msgstr "Par ha fallado al presentar un certificado TLS\n" +#: src/dird/ua_tree.c:880 +msgid "1 file unmarked.\n" +msgstr "1 archivo sin marcar.\n" -#: src/lib/tls.c:304 +#: src/dird/ua_tree.c:883 #, c-format -msgid "Peer %s failed to present a TLS certificate\n" -msgstr "Par %s ha fallado al presentar un certificado TLS\n" - -#: src/lib/tls.c:416 -msgid "Error creating file descriptor-based BIO" -msgstr "Error al crear archivo descriptor basado en BIO" +msgid "%s files unmarked.\n" +msgstr "%s archivos sin marcar.\n" -#: src/lib/tls.c:427 -msgid "Error creating new SSL object" -msgstr "Error creando nuevo objeto SSL" +#: src/dird/ua_tree.c:894 src/dird/ua_tree.c:911 +msgid "No directories unmarked.\n" +msgstr "No hay directorios sin marcar.\n" -#: src/lib/tls.c:491 src/lib/tls.c:514 -msgid "Connect failure" -msgstr "Fallo al conectar" +#: src/dird/ua_tree.c:913 +msgid "1 directory unmarked.\n" +msgstr "1 directorio sin marcar.\n" -#: src/lib/tls.c:594 src/lib/tls.c:598 -msgid "TLS shutdown failure." -msgstr "Error de apagado TLS." +#: src/dird/ua_tree.c:915 +#, c-format +msgid "%d directories unmarked.\n" +msgstr "%d directorios sin marcar.\n" -#: src/lib/tls.c:653 src/lib/tls.c:679 -msgid "TLS read/write failure." -msgstr "Error de lectura/escritura TLS." +#: src/dird/inc_conf.c:299 +#, c-format +msgid "Expected a strip path positive integer, got:%s:" +msgstr "Esperaba una franja de ruta entero positivo, obtuvo: %s:" -#: src/lib/jcr.c:234 -msgid "Verifying" -msgstr "Verificando" +#: src/dird/inc_conf.c:319 +#, c-format +msgid "Expected a FileSet option keyword, got:%s:" +msgstr "Esperaba una palabra clave Tipo FileSet, obtuvo: %s" -#: src/lib/jcr.c:236 -msgid "Restoring" -msgstr "Restaurando" +#: src/dird/inc_conf.c:352 +msgid "Old style Include/Exclude not supported\n" +msgstr "Antiguo estilo Incluir/Excluir no soportado\n" -#: src/lib/jcr.c:238 -msgid "Archiving" -msgstr "Archivando" +#: src/dird/inc_conf.c:380 src/dird/inc_conf.c:726 src/dird/dird_conf.c:2044 +#, c-format +msgid "Expecting keyword, got: %s\n" +msgstr "Esperando palabra clave, obtuvo: %s\n" -#: src/lib/jcr.c:240 -msgid "Copying" -msgstr "Copiando" +#: src/dird/inc_conf.c:398 src/dird/inc_conf.c:741 src/dird/dird_conf.c:2061 +#, c-format +msgid "Keyword %s not permitted in this resource" +msgstr "Palabra clave %s no esta permitido en este recurso" -#: src/lib/jcr.c:242 -msgid "Migration" -msgstr "Migración" +#: src/dird/inc_conf.c:451 +#, c-format +msgid "Regex compile error. ERR=%s\n" +msgstr "Error al compilar Regex. ERR=%s\n" -#: src/lib/jcr.c:244 -msgid "Scanning" -msgstr "Escaneando" +#: src/dird/inc_conf.c:472 +#, c-format +msgid "Expected a regex string, got: %s\n" +msgstr "Se esperaba una expresión regular, se obtuvo: %s\n" -#: src/lib/jcr.c:246 -msgid "Unknown operation" -msgstr "Operación desconocida" +#: src/dird/inc_conf.c:546 +#, c-format +msgid "Expected a wild-card string, got: %s\n" +msgstr "Esperada una cadena comodín, obtuvo: %s\n" -#: src/lib/jcr.c:255 -msgid "backup" -msgstr "backup" +#: src/dird/inc_conf.c:569 +#, c-format +msgid "Expected an fstype string, got: %s\n" +msgstr "Se esperaba una cadena fstype, se obtuvo: %s\n" -#: src/lib/jcr.c:257 -msgid "verified" -msgstr "verificado" +#: src/dird/inc_conf.c:580 +msgid "ExcludeDirContaining directive not permitted in Exclude.\n" +msgstr "Directiva ExcludeDirContaining no permitida en Excluir(Exclude).\n" -#: src/lib/jcr.c:257 -msgid "verify" -msgstr "verificar" +#: src/dird/inc_conf.c:607 +#, c-format +msgid "Expected an drivetype string, got: %s\n" +msgstr "Se esperaba una cadena drivetype, se obtuvo: %s\n" -#: src/lib/jcr.c:259 -msgid "restored" -msgstr "restaurado" +#: src/dird/inc_conf.c:631 src/dird/inc_conf.c:674 +#, c-format +msgid "Backslash found. Use forward slashes or quote the string.: %s\n" +msgstr "" +"Barra invertida encontrada. Utilice barras inclinadas o cite la cadena.: %s\n" -#: src/lib/jcr.c:259 -msgid "restore" -msgstr "restaurar" +#: src/dird/inc_conf.c:646 src/dird/inc_conf.c:689 +#, c-format +msgid "Expected a filename, got: %s" +msgstr "Se esperaba un nombre de archivo, se obtuvo: %s" -#: src/lib/jcr.c:261 -msgid "archived" -msgstr "archivado" +#: src/dird/inc_conf.c:663 +msgid "Plugin directive not permitted in Exclude\n" +msgstr "Directiva Plugin no permitida en Exclude\n" -#: src/lib/jcr.c:261 -msgid "archive" -msgstr "archivo" +#: src/dird/inc_conf.c:706 +msgid "Options section not permitted in Exclude\n" +msgstr "Sección Options no permitida en Exclude\n" -#: src/lib/jcr.c:263 -msgid "copied" -msgstr "copiado" +#: src/dird/inc_conf.c:711 src/dird/dird_conf.c:2030 +#, c-format +msgid "Expecting open brace. Got %s" +msgstr "Esperando abrir paréntesis. Obtuvo %s" -#: src/lib/jcr.c:263 -msgid "copy" -msgstr "copia" +#: src/dird/inc_conf.c:766 +#, c-format +msgid "Expected a FileSet keyword, got: %s" +msgstr "Esperaba una palabra clave FileSet, obtuvo: %s" -#: src/lib/jcr.c:265 -msgid "migrated" -msgstr "migrado" +#: src/dird/recycle.c:57 +#, c-format +msgid "Recycled volume \"%s\"\n" +msgstr "Volumen \"%s\" reciclado\n" -#: src/lib/jcr.c:265 -msgid "migrate" -msgstr "migrar" +#: src/dird/ua_server.c:56 +#, c-format +msgid "Cannot create UA thread: %s\n" +msgstr "No se puede crear hilo UA: %s\n" -#: src/lib/jcr.c:267 -msgid "scanned" -msgstr "escaneado" +#: src/dird/ua_server.c:146 +msgid "You have messages.\n" +msgstr "Usted tiene mensajes.\n" -#: src/lib/jcr.c:267 -msgid "scan" -msgstr "escanear" +#: src/dird/newvol.c:77 +#, c-format +msgid "Illegal character in Volume name \"%s\"\n" +msgstr "Carácter ilegal en el nombre del Volumen \"%s\"\n" -#: src/lib/jcr.c:269 -msgid "unknown action" -msgstr "acción desconocida" +#: src/dird/newvol.c:90 +#, fuzzy, c-format +msgid "Created new Volume=\"%s\", Pool=\"%s\", MediaType=\"%s\" in catalog.\n" +msgstr "Se creó un Volumen nuevo \"%s\" en el catálogo.\n" -#: src/lib/jcr.c:343 +#: src/dird/newvol.c:119 #, c-format -msgid "pthread_once failed. ERR=%s\n" -msgstr "fallo pthread_once. ERR=%s\n" +msgid "SQL failed, but ignored. ERR=%s\n" +msgstr "SQL fallido, pero ignorado. ERR=%s\n" -#: src/lib/jcr.c:350 +#: src/dird/newvol.c:129 #, c-format -msgid "Could not init msg_queue mutex. ERR=%s\n" -msgstr "No se pudo iniciar msg_queue mutex. ERR=%s\n" +msgid "Wanted to create Volume \"%s\", but it already exists. Trying again.\n" +msgstr "" +"Se trató de crear el Volumen \"%s\", pero ya existe. Tratando de nuevo.\n" -#: src/lib/jcr.c:403 -msgid "NULL jcr.\n" -msgstr "NULL jcr.\n" +#: src/dird/newvol.c:138 +msgid "Too many failures. Giving up creating Volume name.\n" +msgstr "Demasiados errores. Abandono el intento de crear nombre de Volumen\n" -#: src/lib/jcr.c:509 +#: src/dird/msgchan.c:66 #, c-format -msgid "JCR use_count=%d JobId=%d\n" -msgstr "JCR use_count=%d JobId=%d\n" +msgid "Connecting to Storage daemon %s at %s:%d ...\n" +msgstr "Conectando al demonio Storage %s en %s:%d ...\n" -#: src/lib/jcr.c:619 +#: src/dird/msgchan.c:230 #, c-format -msgid "pthread_setspecific failed: ERR=%s\n" -msgstr "fallo pthread_setspecific: ERR=%s\n" +msgid "Storage daemon rejected Job command: %s\n" +msgstr "Storage daemon rechazo Job comando: %s\n" + +#: src/dird/msgchan.c:238 +#, c-format +msgid " " +msgstr "--> " + +#: src/dird/dird_conf.c:584 +#, c-format +msgid "Console: name=%s SSL=%d\n" +msgstr "Console: nombre=%s SSL=%d\n" + +#: src/dird/dird_conf.c:589 +#, c-format +msgid "Counter: name=%s min=%d max=%d cur=%d wrapcntr=%s\n" +msgstr "Counter: nombre=%s mínimo=%d máximo=%d cur=%d wrapcntr=%s\n" -#: src/lib/parse_conf.c:483 +#: src/dird/dird_conf.c:594 #, c-format -msgid "Attempt to redefine resource \"%s\" referenced on line %d : %s\n" -msgstr "Intento de redefinir recurso \"%s\" referenciado en la línea %d: %s\n" +msgid "Counter: name=%s min=%d max=%d\n" +msgstr "Counter: nombre=%s mínimo=%d máximo=%d\n" -#: src/lib/parse_conf.c:519 +#: src/dird/dird_conf.c:608 #, c-format -msgid "Too many %s directives. Max. is %d. line %d: %s\n" -msgstr "Demasiadas directivas %s. Máximo es %d. linea %d: %s\n" +msgid "Client: name=%s address=%s FDport=%d MaxJobs=%u\n" +msgstr "Cliente: nombre=%s dirección=%s FDport=%d MaxJobs=%u\n" -#: src/lib/parse_conf.c:530 +#: src/dird/dird_conf.c:611 #, c-format -msgid "Could not find config Resource \"%s\" referenced on line %d : %s\n" -msgstr "" -"No pudo encontrar recurso de configuración \"%s\" referenciado en linea %d : " -"%s\n" +msgid " JobRetention=%s FileRetention=%s AutoPrune=%d\n" +msgstr "JobRetention=%s FileRetention=%s AutoPrune=%d\n" -#: src/lib/parse_conf.c:593 +#: src/dird/dird_conf.c:619 src/dird/dird_conf.c:691 #, c-format -msgid "Missing config Resource \"%s\" referenced on line %d : %s\n" +msgid " MaximumBandwidth=%lld\n" msgstr "" -"Falta la configuración de Recurso \"%s\" referenciado en linea %d : %s\n" -#: src/lib/parse_conf.c:665 +#: src/dird/dird_conf.c:631 #, c-format -msgid "expected a size number, got: %s" -msgstr "esperaba un numero de tamaño, obtuvo: %s" - -#: src/lib/parse_conf.c:670 -#, fuzzy, c-format -msgid "expected a speed number, got: %s" -msgstr "esperaba un numero de tamaño, obtuvo: %s" - -#: src/lib/parse_conf.c:681 -#, fuzzy, c-format -msgid "expected a %s, got: %s" -msgstr "esperaba un tamaño, obtuvo: %s" - -#: src/lib/parse_conf.c:682 -msgid "size" +msgid "" +"Device: name=%s ok=%d num_writers=%d max_writers=%d\n" +" reserved=%d open=%d append=%d read=%d labeled=%d offline=%d autochgr=" +"%d\n" +" poolid=%s volname=%s MediaType=%s\n" msgstr "" +"Device: nombre=%s ok=%d num_writers=%d max_writers=%d\n" +" reservado=%d abierto=%d append=%d leer=%d etiquetado=%d offline=%d autochgr=" +"%d\n" +" poolid=%s volname=%s MediaType=%s\n" -#: src/lib/parse_conf.c:682 -msgid "speed" +#: src/dird/dird_conf.c:645 +#, c-format +msgid "" +"Storage: name=%s address=%s SDport=%d MaxJobs=%u\n" +" DeviceName=%s MediaType=%s StorageId=%s\n" msgstr "" +"Storage: nombre=%s dirección=%s SDport=%d MaxJobs=%u\n" +" DeviceName=%s MediaType=%s StorageId=%s\n" -#: src/lib/parse_conf.c:803 +#: src/dird/dird_conf.c:661 #, c-format -msgid "Expected a Tape Label keyword, got: %s" -msgstr "esperaba una etiqueta Tape Label , obtuvo: %s" +msgid "" +"Catalog: name=%s address=%s DBport=%d db_name=%s\n" +" db_driver=%s db_user=%s MutliDBConn=%d\n" +msgstr "" +"Catálogo: nombre=%s dirección=%s DBport=%d db_nombre=%s\n" +" db_driver=%s db_user=%s MutliDBConn=%d\n" -#: src/lib/parse_conf.c:886 +#: src/dird/dird_conf.c:674 #, c-format -msgid "Unable to initialize resource lock. ERR=%s\n" -msgstr "No se puede inicializar recurso de bloqueo. ERR=%s\n" +msgid "%s: name=%s JobType=%d level=%s Priority=%d Enabled=%d\n" +msgstr "%s: nombre=%s JobType=%d nivel=%s Prioridad=%d Activo=%d\n" -#: src/lib/parse_conf.c:894 -msgid "Config filename too long.\n" -msgstr "Nombre de archivo de configuración muy largo.\n" +#: src/dird/dird_conf.c:675 +msgid "JobDefs" +msgstr "JobDefs" -#: src/lib/parse_conf.c:917 +#: src/dird/dird_conf.c:679 #, c-format -msgid "Cannot open config file \"%s\": %s\n" -msgstr "No se pudo abrir archivo de configuración \"%s\": %s\n" - -#: src/lib/parse_conf.c:934 msgid "" -"Currently we cannot handle UTF-16 source files. Please convert the conf file " -"to UTF-8\n" +" MaxJobs=%u Resched=%d Times=%d Interval=%s Spool=%d WritePartAfterJob=" +"%d\n" msgstr "" -"Actualmente no podemos manejar archivos de origen UTF-16 . Por favor, " -"convierta el archivo de configuración a UTF-8\n" +"MaxJobs=%u Resched=%d Times=%d Intervalo=%s Spool=%d WritePartAfterJob=%d\n" -#: src/lib/parse_conf.c:938 +#: src/dird/dird_conf.c:685 #, c-format -msgid "Expected a Resource name identifier, got: %s" -msgstr "esperaba un nombre de identificación de Recurso, obtuvo: %s" +msgid " SpoolSize=%s\n" +msgstr "SpoolSize=%s\n" -#: src/lib/parse_conf.c:954 +#: src/dird/dird_conf.c:688 #, c-format -msgid "expected resource name, got: %s" -msgstr "esperaba un nombre de recurso, obtuvo: %s" +msgid " Accurate=%d\n" +msgstr "Preciso=%d\n" -#: src/lib/parse_conf.c:965 +#: src/dird/dird_conf.c:695 #, c-format -msgid "not in resource definition: %s" -msgstr "no en la definición de recurso: %s" +msgid " SelectionType=%d\n" +msgstr "SelectionType=%d\n" -#: src/lib/parse_conf.c:990 +#: src/dird/dird_conf.c:710 #, c-format -msgid "" -"Keyword \"%s\" not permitted in this resource.\n" -"Perhaps you left the trailing brace off of the previous resource." -msgstr "" -"Palabra clave \"%s\" no permitida en este recurso.\n" -"Tal vez a la izquierda de la llave de los recursos anteriores." +msgid " --> Where=%s\n" +msgstr "--> Donde=%s\n" -#: src/lib/parse_conf.c:1001 -msgid "Name not specified for resource" -msgstr "Nombre no especificado para el recurso" +#: src/dird/dird_conf.c:713 +#, c-format +msgid " --> RegexWhere=%s\n" +msgstr "--> RegexDonde=%s\n" -#: src/lib/parse_conf.c:1011 +#: src/dird/dird_conf.c:716 #, c-format -msgid "unexpected token %d %s in resource definition" -msgstr "símbolo %d no soporte %s en la definición de los recursos" +msgid " --> Bootstrap=%s\n" +msgstr "--> Bootstrap=%s\n" -#: src/lib/parse_conf.c:1017 +#: src/dird/dird_conf.c:719 #, c-format -msgid "Unknown parser state %d\n" -msgstr "Estado del Analizador %d desconocido\n" +msgid " --> WriteBootstrap=%s\n" +msgstr "--> WriteBootstrap=%s\n" -#: src/lib/parse_conf.c:1022 -msgid "End of conf file reached with unclosed resource." -msgstr "Fin de archivo de configuración alcanzado con recursos sin cerrar." +#: src/dird/dird_conf.c:722 +#, c-format +msgid " --> PluginOptions=%s\n" +msgstr "--> PluginOptions=%s\n" -#: src/lib/mem_pool.c:112 +#: src/dird/dird_conf.c:725 #, c-format -msgid "MemPool index %d larger than max %d\n" -msgstr "MemPool índice %d mayor que máximo %d\n" +msgid " --> MaxRunTime=%u\n" +msgstr "--> MaxRunTime=%u\n" -#: src/lib/mem_pool.c:130 src/lib/mem_pool.c:150 src/lib/mem_pool.c:186 -#: src/lib/mem_pool.c:257 src/lib/mem_pool.c:277 src/lib/mem_pool.c:312 -#: src/lib/mem_pool.c:623 +#: src/dird/dird_conf.c:728 #, c-format -msgid "Out of memory requesting %d bytes\n" -msgstr "Fuera de memoria solicitando %d bytes\n" +msgid " --> MaxWaitTime=%u\n" +msgstr "--> MaxWaitTime=%u\n" -#: src/lib/mem_pool.c:167 -msgid "obuf is NULL\n" -msgstr "obuf es NULL\n" +#: src/dird/dird_conf.c:731 +#, c-format +msgid " --> MaxStartDelay=%u\n" +msgstr "--> MaxStartDelay=%u\n" -#: src/lib/berrno.c:63 -msgid "Child exited normally." -msgstr "Hijo salió normalmente." +#: src/dird/dird_conf.c:734 +#, fuzzy, c-format +msgid " --> MaxRunSchedTime=%u\n" +msgstr "--> MaxRunTime=%u\n" -#: src/lib/berrno.c:70 -msgid "Unknown error during program execvp" -msgstr "Error desconocido durante el programa execvp" +#: src/dird/dird_conf.c:746 +#, fuzzy, c-format +msgid " --> Base %s\n" +msgstr "--> Objetivo=%s\n" -#: src/lib/berrno.c:73 +#: src/dird/dird_conf.c:784 #, c-format -msgid "Child exited with code %d" -msgstr "Hijo salió con el código %d" +msgid " --> Run=%s\n" +msgstr "--> Ejecutar=%s\n" -#: src/lib/berrno.c:81 +#: src/dird/dird_conf.c:788 #, c-format -msgid "Child died from signal %d: %s" -msgstr "Niño muerto con la señal %d: %s" - -#: src/lib/berrno.c:87 -msgid "Invalid errno. No error message possible." -msgstr "Invalido errorno. Imposible mensaje de error." +msgid " --> SelectionPattern=%s\n" +msgstr "--> SeleccionPatron=%s\n" -#: src/lib/bnet.c:134 +#: src/dird/dird_conf.c:802 #, c-format -msgid "Attr spool write error. ERR=%s\n" -msgstr "Error de escritura en cola de atributo. ERR=%s\n" - -#: src/lib/bnet.c:279 src/lib/bnet.c:320 -msgid "TLS connection initialization failed.\n" -msgstr "Ha fallado la conexión de inicialización TLS.\n" - -#: src/lib/bnet.c:287 -msgid "TLS Negotiation failed.\n" -msgstr "Negociación TLS fallida.\n" +msgid "FileSet: name=%s\n" +msgstr "FileSet: nombre=%s\n" -#: src/lib/bnet.c:293 src/lib/bnet.c:335 -msgid "" -"TLS certificate verification failed. Peer certificate did not match a " -"required commonName\n" -msgstr "" -"Comprobación de certificados TLS fallido. Certificado equivalente no " -"corresponde con el commonName requerido\n" +#: src/dird/dird_conf.c:896 src/dird/dird_conf.c:981 +#, c-format +msgid "Schedule: name=%s\n" +msgstr "Schedule: nombre=%s\n" -#: src/lib/bnet.c:342 +#: src/dird/dird_conf.c:901 #, c-format -msgid "" -"TLS host certificate verification failed. Host name \"%s\" did not match " -"presented certificate\n" -msgstr "" -"Fallo en verificación en certificado TLS de la maquina. Nombre de la maquina " -"\"%s\" no coincide con el certificado presentado\n" +msgid " --> Run Level=%s\n" +msgstr "--> Ejecutar Nivel=%s\n" -#: src/lib/bnet.c:359 -msgid "TLS enabled but not configured.\n" -msgstr "TLS activado, pero no configurado.\n" +#: src/dird/dird_conf.c:903 +#, fuzzy, c-format +msgid " MaxRunSchedTime=%u\n" +msgstr "--> MaxRunTime=%u\n" -#: src/lib/bnet.c:365 -msgid "TLS enable but not configured.\n" -msgstr "TLS permitido, pero no configurado.\n" +#: src/dird/dird_conf.c:906 +#, fuzzy, c-format +msgid " Priority=%u\n" +msgstr "woy=" -#: src/lib/bnet.c:481 -msgid "No problem." -msgstr "No hay problema." +#: src/dird/dird_conf.c:908 +msgid " hour=" +msgstr "hora=" -#: src/lib/bnet.c:484 -msgid "Authoritative answer for host not found." -msgstr "Respuesta autoritativa para el host no encontrado." +#: src/dird/dird_conf.c:917 +msgid " mday=" +msgstr "mdia=" -#: src/lib/bnet.c:487 -msgid "Non-authoritative for host not found, or ServerFail." -msgstr "Non-autoritativa para la maquina no encontrada, o ServerFail." +#: src/dird/dird_conf.c:926 +msgid " month=" +msgstr "mes=" -#: src/lib/bnet.c:490 -msgid "Non-recoverable errors, FORMERR, REFUSED, or NOTIMP." -msgstr "Errores no recuperables, FORMERR, RECHAZADO o NOTIMP." +#: src/dird/dird_conf.c:935 +msgid " wday=" +msgstr "wdia=" -#: src/lib/bnet.c:493 -msgid "Valid name, no data record of resquested type." -msgstr "Nombre válido, ningún registro de datos del tipo solicitado." +#: src/dird/dird_conf.c:944 +msgid " wom=" +msgstr "wom=" -#: src/lib/bnet.c:496 -msgid "Unknown error." -msgstr "Error desconocido." +#: src/dird/dird_conf.c:953 +msgid " woy=" +msgstr "woy=" -#: src/lib/bnet.c:755 +#: src/dird/dird_conf.c:962 #, c-format -msgid "Unknown sig %d" -msgstr "Sig desconocido %d" - -#: src/lib/signal.c:67 -msgid "Invalid signal number" -msgstr "Número de la señal no válida" +msgid " mins=%d\n" +msgstr "mins=%d\n" -#: src/lib/signal.c:152 src/lib/signal.c:154 -#, c-format -msgid "Bacula interrupted by signal %d: %s\n" -msgstr "Bacula interrumpido por señal %d: %s\n" +#: src/dird/dird_conf.c:964 src/dird/dird_conf.c:968 src/dird/dird_conf.c:972 +msgid " --> " +msgstr "--> " -#: src/lib/signal.c:167 +#: src/dird/dird_conf.c:989 #, c-format -msgid "Kaboom! %s, %s got signal %d - %s. Attempting traceback.\n" -msgstr "Kaboom! %s, %s obtuvo la señal %d - %s. Intentando rastreo.\n" +msgid "Pool: name=%s PoolType=%s\n" +msgstr "Pool: nombre=%s PoolType=%s\n" -#: src/lib/signal.c:169 +#: src/dird/dird_conf.c:991 #, c-format -msgid "Kaboom! exepath=%s\n" -msgstr "Kaboom! exepath=%s\n" +msgid " use_cat=%d use_once=%d cat_files=%d\n" +msgstr "use_cat=%d use_once=%d cat_files=%d\n" -#: src/lib/signal.c:210 +#: src/dird/dird_conf.c:994 #, c-format -msgid "Fork error: ERR=%s\n" -msgstr "Fork error: ERR=%s\n" +msgid " max_vols=%d auto_prune=%d VolRetention=%s\n" +msgstr "max_vols=%d auto_prune=%d VolRetention=%s\n" -#: src/lib/signal.c:218 +#: src/dird/dird_conf.c:997 #, c-format -msgid "Calling: %s %s %s %s\n" -msgstr "Llamando: %s %s %s %s\n" +msgid " VolUse=%s recycle=%d LabelFormat=%s\n" +msgstr "VolUse=%s recycle=%d LabelFormat=%s\n" -#: src/lib/signal.c:222 +#: src/dird/dird_conf.c:1001 #, c-format -msgid "execv: %s failed: ERR=%s\n" -msgstr "execv: %s ha fallado: ERR=%s\n" - -#: src/lib/signal.c:244 -#, fuzzy, c-format -msgid "It looks like the traceback worked...\n" -msgstr "Parece que el rastreo trabaja ...\n" +msgid " CleaningPrefix=%s LabelType=%d\n" +msgstr "CleaningPrefix=%s LabelType=%d\n" -#: src/lib/signal.c:246 +#: src/dird/dird_conf.c:1003 #, c-format -msgid "The btraceback call returned %d\n" -msgstr "" +msgid " RecyleOldest=%d PurgeOldest=%d ActionOnPurge=%d\n" +msgstr "RecyleOldest=%d PurgeOldest=%d ActionOnPurge=%d\n" -#: src/lib/signal.c:306 +#: src/dird/dird_conf.c:1007 #, c-format -msgid "BA_NSIG too small (%d) should be (%d)\n" -msgstr "BA_NSIG demasiado pequeño (%d) debe ser (%d)\n" - -#: src/lib/signal.c:312 -msgid "UNKNOWN SIGNAL" -msgstr "SEÑAL DESCONOCIDA" +msgid " MaxVolJobs=%d MaxVolFiles=%d MaxVolBytes=%s\n" +msgstr "MaxVolJobs=%d MaxVolFiles=%d MaxVolBytes=%s\n" -#: src/lib/signal.c:313 -msgid "Hangup" -msgstr "Colgar" +#: src/dird/dird_conf.c:1011 +#, c-format +msgid " MigTime=%s MigHiBytes=%s MigLoBytes=%s\n" +msgstr "MigTime=%s MigHiBytes=%s MigLoBytes=%s\n" -#: src/lib/signal.c:314 -msgid "Interrupt" -msgstr "Interrumpir" +#: src/dird/dird_conf.c:1015 +#, fuzzy, c-format +msgid " JobRetention=%s FileRetention=%s\n" +msgstr "JobRetention=%s FileRetention=%s AutoPrune=%d\n" -#: src/lib/signal.c:315 -msgid "Quit" -msgstr "Salir" +#: src/dird/dird_conf.c:1019 +#, c-format +msgid " NextPool=%s\n" +msgstr "NextPool=%s\n" -#: src/lib/signal.c:316 -msgid "Illegal instruction" -msgstr "Instrucción ilegal" +#: src/dird/dird_conf.c:1022 +#, c-format +msgid " RecyclePool=%s\n" +msgstr "RecyclePool=%s\n" -#: src/lib/signal.c:317 -msgid "Trace/Breakpoint trap" -msgstr "Trace/Trampa de Punto de Interrupción" +#: src/dird/dird_conf.c:1025 +#, c-format +msgid " ScratchPool=%s\n" +msgstr "ScratchPool=%s\n" -#: src/lib/signal.c:318 -msgid "Abort" -msgstr "Anular" +#: src/dird/dird_conf.c:1028 +#, c-format +msgid " Catalog=%s\n" +msgstr "Catálogo=%s\n" -#: src/lib/signal.c:320 -msgid "EMT instruction (Emulation Trap)" -msgstr "Instrucción EMT (Emulación de Trampa)" +#: src/dird/dird_conf.c:1048 +#, c-format +msgid "Messages: name=%s\n" +msgstr "Mensajes: nombre=%s\n" -#: src/lib/signal.c:323 -msgid "IOT trap" -msgstr "trampa IOT" +#: src/dird/dird_conf.c:1050 +#, c-format +msgid " mailcmd=%s\n" +msgstr "mailcmd=%s\n" -#: src/lib/signal.c:325 -msgid "BUS error" -msgstr "BUS error" +#: src/dird/dird_conf.c:1052 +#, c-format +msgid " opcmd=%s\n" +msgstr "opcmd=%s\n" -#: src/lib/signal.c:326 -msgid "Floating-point exception" -msgstr "Excepción de punto flotante" +#: src/dird/dird_conf.c:1056 src/qt-console/tray-monitor/tray_conf.cpp:187 +#, c-format +msgid "Unknown resource type %d in dump_resource.\n" +msgstr "Tipo de recurso desconocido %d en dump_resource.\n" -#: src/lib/signal.c:327 -msgid "Kill, unblockable" -msgstr "Matar, imbloqueable" +#: src/dird/dird_conf.c:1393 src/qt-console/tray-monitor/tray_conf.cpp:245 +#, c-format +msgid "Unknown resource type %d in free_resource.\n" +msgstr "Tipo de recurso desconocido %d en free_resource.\n" -#: src/lib/signal.c:328 -msgid "User-defined signal 1" -msgstr "Señal 1 definida por el usuario" +#: src/dird/dird_conf.c:1471 +#, c-format +msgid "Cannot find Pool resource %s\n" +msgstr "No se puede encontrar el recurso Pool %s\n" -#: src/lib/signal.c:329 -msgid "Segmentation violation" -msgstr "Violación de segmento" +#: src/dird/dird_conf.c:1482 +#, c-format +msgid "Cannot find Console resource %s\n" +msgstr "No se puede encontrar el recurso Console %s\n" -#: src/lib/signal.c:330 -msgid "User-defined signal 2" -msgstr "Señal definida por el usuario 2" +#: src/dird/dird_conf.c:1504 +#, c-format +msgid "Cannot find Job resource %s\n" +msgstr "No se puede encontrar el recurso Job %s\n" -#: src/lib/signal.c:331 -msgid "Broken pipe" -msgstr "Tuberí­a rota" +#: src/dird/dird_conf.c:1555 +#, c-format +msgid "Cannot find Counter resource %s\n" +msgstr "No se puede encontrar el recurso Counter %s\n" -#: src/lib/signal.c:332 -msgid "Alarm clock" -msgstr "Alarma" +#: src/dird/dird_conf.c:1563 src/filed/filed_conf.c:465 +#, c-format +msgid "Cannot find Client resource %s\n" +msgstr "No se puede encontrar el recurso Cliente %s\n" -#: src/lib/signal.c:333 -msgid "Termination" -msgstr "Terminación" +#: src/dird/dird_conf.c:1576 +#, c-format +msgid "Cannot find Schedule resource %s\n" +msgstr "No se puede encontrar el recurso Schedule %s\n" -#: src/lib/signal.c:335 -msgid "Stack fault" -msgstr "Error de pila" +#: src/dird/dird_conf.c:1581 src/dird/dird_conf.c:1641 +#: src/qt-console/tray-monitor/tray_conf.cpp:302 +#: src/qt-console/tray-monitor/tray_conf.cpp:340 +#, c-format +msgid "Unknown resource type %d in save_resource.\n" +msgstr "Tipo de recurso desconocido %d en save_resource.\n" -#: src/lib/signal.c:337 -msgid "Child status has changed" -msgstr "El estado de hijo ha cambiado" +#: src/dird/dird_conf.c:1656 +#, c-format +msgid "Name item is required in %s resource, but not found.\n" +msgstr "Nombre del ítem se requiere en recurso %s, pero no se encuentra.\n" -#: src/lib/signal.c:338 -msgid "Continue" -msgstr "Continue" +#: src/dird/dird_conf.c:1669 +#, c-format +msgid "Inserting %s res: %s index=%d pass=%d\n" +msgstr "Insertando %s res: %s index=%d pass=%d\n" -#: src/lib/signal.c:339 -msgid "Stop, unblockable" -msgstr "Detener, imbloqueable" +#: src/dird/dird_conf.c:1682 +#, c-format +msgid "Expected one of: %s, got: %s" +msgstr "Esperaba uno de: %s, obtuvo: %s" -#: src/lib/signal.c:340 -msgid "Keyboard stop" -msgstr "Teclado detenido" +#: src/dird/dird_conf.c:1754 +#, c-format +msgid "Expected a Migration Job Type keyword, got: %s" +msgstr "Espera una palabra clave Tipo Job de Migración, obtuvo: %s" -#: src/lib/signal.c:341 -msgid "Background read from tty" -msgstr "Leer en segundo plan desde tty" +#: src/dird/dird_conf.c:1780 +#, c-format +msgid "Expected a Job Type keyword, got: %s" +msgstr "Esperaba una palabra clave Tipo Job, obtuvo: %s" -#: src/lib/signal.c:342 -msgid "Background write to tty" -msgstr "Escribir en segundo plan al tty" +#: src/dird/dird_conf.c:1804 +#, c-format +msgid "Expected a Job Level keyword, got: %s" +msgstr "Esperaba una palabra clave Tipo Level, obtuvo: %s" -#: src/lib/signal.c:343 -msgid "Urgent condition on socket" -msgstr "Condición de urgencia en el socket" +#: src/dird/dird_conf.c:1824 +#, c-format +msgid "Expected a Restore replacement option, got: %s" +msgstr "Esperaba una opción de reemplazo de Restauración, obtuvo: %s" -#: src/lib/signal.c:344 -msgid "CPU limit exceeded" -msgstr "Limite de CPU superado" +#: src/dird/ua_query.c:61 src/findlib/file_create.c:265 +#: src/findlib/file_create.c:353 +#, c-format +msgid "Could not open %s: ERR=%s\n" +msgstr "No se pudo abrir %s: ERR=%s\n" -#: src/lib/signal.c:345 -msgid "File size limit exceeded" -msgstr "Superado el límite de tamaño de archivo" +#: src/dird/ua_query.c:66 +msgid "Available queries:\n" +msgstr "Consultas disponibles:\n" -#: src/lib/signal.c:346 -msgid "Virtual alarm clock" -msgstr "Despertador virtual" +#: src/dird/ua_query.c:73 +msgid "Choose a query" +msgstr "Elija una consulta" -#: src/lib/signal.c:347 -msgid "Profiling alarm clock" -msgstr "Perfiles de alarma" +#: src/dird/ua_query.c:87 +msgid "Could not find query.\n" +msgstr "No se pudo encontrar la consulta.\n" -#: src/lib/signal.c:348 -msgid "Window size change" -msgstr "Cambiar el tamaño de la ventana" +#: src/dird/ua_query.c:105 +msgid "Too many prompts in query, max is 9.\n" +msgstr "Demasiadas consolas en consulta, máximo es 9.\n" -#: src/lib/signal.c:349 -msgid "I/O now possible" -msgstr "I/O posible ahora" +#: src/dird/ua_query.c:208 +#, c-format +msgid "Warning prompt %d missing.\n" +msgstr "Alerta de consola %d perdida.\n" -#: src/lib/signal.c:351 -msgid "Power failure restart" -msgstr "Fallo reiniciar energía" +#: src/dird/ua_query.c:253 +msgid "" +"Entering SQL query mode.\n" +"Terminate each query with a semicolon.\n" +"Terminate query mode with a blank line.\n" +msgstr "" +"Entrando en modo de consulta SQL.\n" +"Termine cada consulta con un punto-coma.\n" +"Termine el modo de consulta con una linea en blanco.\n" -#: src/lib/signal.c:354 -msgid "No runnable lwp" -msgstr "LWP no ejecutable" +#: src/dird/ua_query.c:256 src/dird/ua_query.c:272 +msgid "Enter SQL query: " +msgstr "Ingrese una consulta SQL:" -#: src/lib/signal.c:357 -msgid "SIGLWP special signal used by thread library" -msgstr "La señal especial SIGLWP utilizado por la biblioteca del hilo" +#: src/dird/ua_query.c:274 +msgid "Add to SQL query: " +msgstr "Agregar a la consulta SQL:" -#: src/lib/signal.c:360 -msgid "Checkpoint Freeze" -msgstr "Checkpoint de Congelación" +#: src/dird/ua_query.c:277 +msgid "End query mode.\n" +msgstr "Fin modo de consulta.\n" -#: src/lib/signal.c:363 -msgid "Checkpoint Thaw" -msgstr "Checkpoint de Thaw" +#: src/dird/dird.c:124 +#, fuzzy, c-format +msgid "" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: bacula-dir [-f -s] [-c config_file] [-d debug_level] [config_file]\n" +" -c set configuration file to file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -f run in foreground (for debugging)\n" +" -g groupid\n" +" -m print kaboom output (for debugging)\n" +" -r run now\n" +" -s no signals\n" +" -t test - read configuration and exit\n" +" -u userid\n" +" -v verbose user messages\n" +" -? print this message.\n" +"\n" +msgstr "" +"\n" +"Versión: %s (%s)\n" +"\n" +"Utilice: dird [-f -s] [-c archivo_configuración] [-d nivel_depuración] " +"[archivo_configuración]\n" +" -c establecer archivo de configuración para archivo \n" +" -d establecer el nivel de depuración para \n" +" -dt imprimir timestamp en salida de depuración\n" +" -f ejecutar en primer plano (para depuración)\n" +" -g groupid\n" +" -m imprimir salida kaboom para depuración)\n" +" -r ejecutar ahora\n" +" -s sin señales\n" +" -t prueba - leer la configuración y salir\n" +" -u userid\n" +" -v mensajes de usuario detallados\n" +" -? imprimir este mensaje.\n" +"\n" -#: src/lib/signal.c:366 -msgid "Thread Cancellation" -msgstr "Cancelación de Hilo" +#: src/dird/dird.c:503 +msgid "Too many open reload requests. Request ignored.\n" +msgstr "Demasiadas solicitudes de recarga abiertas. Solicitud ignorada.\n" -#: src/lib/signal.c:369 -msgid "Resource Lost (e.g. record-lock lost)" -msgstr "Recurso Perdido (por ejemplo, registro de bloqueo perdido)" +#: src/dird/dird.c:518 +msgid "Out of reload table entries. Giving up.\n" +msgstr "Fuera de entradas de las tablas recargadas. Abandonando.\n" + +#: src/dird/dird.c:521 +msgid "Resetting previous configuration.\n" +msgstr "Restablecimiento de la configuración anterior.\n" -#: src/lib/ini.c:106 src/lib/ini.c:118 -#, fuzzy, c-format +#: src/dird/dird.c:585 +#, c-format msgid "" -"Config file error: %s\n" -" : Line %d, col %d of file %s\n" -"%s\n" +"No Director resource defined in %s\n" +"Without that I don't know who I am :-(\n" msgstr "" -"Error de configuración: %s\n" -" : línea %d, columna %d en el archivo %s\n" -"%s\n" -"%s" +"Recurso Director no definido en %s\n" +"Sin eso no sé quién soy :-(\n" -#: src/lib/ini.c:308 src/lib/ini.c:383 -#, fuzzy, c-format -msgid "Cannot open config file %s: %s\n" -msgstr "No se pudo abrir archivo de configuración \"%s\": %s\n" +#: src/dird/dird.c:593 src/filed/filed.c:328 +#, c-format +msgid "No Messages resource defined in %s\n" +msgstr "Recursos de Mensajes no definidos en %s\n" -#: src/lib/btimers.c:265 -msgid "stop_btimer called with NULL btimer_id\n" -msgstr "stop_btimer llamado con NULL btimer_id\n" +#: src/dird/dird.c:598 +#, c-format +msgid "Only one Director resource permitted in %s\n" +msgstr "Sólo un recurso Director permitido en %s\n" -#: src/lib/bsys.c:72 -#, fuzzy, c-format -msgid "safe_unlink could not compile regex pattern \"%s\" ERR=%s\n" -msgstr "No se ha podido compilar patrón regex \"%s\" ERR=%s\n" +#: src/dird/dird.c:655 +#, c-format +msgid "No Job records defined in %s\n" +msgstr "Registros de Job no definidos en %s\n" -#: src/lib/bsys.c:261 src/lib/bsys.c:278 src/lib/bsys.c:302 src/lib/bsys.c:315 +#: src/dird/dird.c:713 src/dird/dird.c:726 #, c-format -msgid "Out of memory: ERR=%s\n" -msgstr "Fuera de memoria: ERR=%s\n" +msgid "Hey something is wrong. p=0x%lu\n" +msgstr "Oye, algo está mal. p=0x%lu\n" -#: src/lib/bsys.c:357 -msgid "Buffer overflow.\n" -msgstr "Desbordamiento de búfer.\n" +#: src/dird/dird.c:787 +#, c-format +msgid "\"%s\" directive in Job \"%s\" resource is required, but not found.\n" +msgstr "" +"Directiva \"%s\" en recurso Job \"%s\" es requerida, pero no se encuentra.\n" -#: src/lib/bsys.c:423 -msgid "Bad errno" -msgstr "Malo errno" +#: src/dird/dird.c:794 +msgid "Too many items in Job resource\n" +msgstr "Demasiados elementos en el recurso Job\n" -#: src/lib/bsys.c:438 +#: src/dird/dird.c:798 #, c-format -msgid "Memset for %d bytes at %s:%d\n" -msgstr "Memset para %d bytes en %s:%d\n" +msgid "No storage specified in Job \"%s\" nor in Pool.\n" +msgstr "Ningún storage especificada en Job \"%s\" ni en Pool.\n" -#: src/lib/bsys.c:468 +#: src/dird/dird.c:822 #, c-format -msgid "Cannot open pid file. %s ERR=%s\n" -msgstr "No se puede abrir el archivo pid. %s ERR=%s\n" +msgid "\"TLS Certificate\" file not defined for Console \"%s\" in %s.\n" +msgstr "" +"Archivo de \"Certificado TLS\" no definido para Console \"%s\" en %s.\n" + +#: src/dird/dird.c:828 +#, c-format +msgid "\"TLS Key\" file not defined for Console \"%s\" in %s.\n" +msgstr "Archivo de \"Llave TLS\" no definido para Console \"%s\" en %s.\n" -#: src/lib/bsys.c:483 +#: src/dird/dird.c:835 #, c-format msgid "" -"%s is already running. pid=%d\n" -"Check file %s\n" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Console \"%s\" in %s. At least one CA certificate store is required when " +"using \"TLS Verify Peer\".\n" msgstr "" -"%s ya está en ejecución. pid=%d\n" -"Compruebe el archivo %s\n" +"Ninguno \"TLS CA Certificate\" o \"TLS CA Certificate Dir\" esta definido " +"para Console \"%s\" en %s. Al menos un almacén de certificado CA es " +"requerido cuando se utiliza \"TLS Verify Peer\".\n" -#: src/lib/bsys.c:497 +#: src/dird/dird.c:852 src/dird/dird.c:892 src/filed/filed.c:391 #, c-format -msgid "Could not open pid file. %s ERR=%s\n" -msgstr "No se pudo abrir el archivo pid. %s ERR=%s\n" +msgid "Failed to initialize TLS context for File daemon \"%s\" in %s.\n" +msgstr "Fallo al inicializar contexto TLS para demonio File \"%s\" en %s.\n" -#: src/lib/bsys.c:608 +#: src/dird/dird.c:875 #, c-format -msgid "Could not create state file. %s ERR=%s\n" -msgstr "No es posible crear el archivo de estado. %s ERR=%s\n" +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"File daemon \"%s\" in %s.\n" +msgstr "" +"Ninguno \"TLS CA Certificate\" o \"TLS CA Certificate Dir\" esta definido " +"para demonio File \"%s\" en %s.\n" -#: src/lib/bsys.c:627 +#: src/dird/dird.c:916 #, c-format -msgid "Write final hdr error: ERR=%s\n" -msgstr "Error de escritura HDR final: ERR=%s\n" +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Storage \"%s\" in %s.\n" +msgstr "" +"Ninguno \"TLS CA Certificate\" o \"TLS CA Certificate Dir\" esta definido " +"para Storage \"%s\" en %s.\n" -#: src/lib/runscript.c:236 +#: src/dird/dird.c:971 src/dird/dird.c:973 #, c-format -msgid "%s: run %s \"%s\"\n" -msgstr "%s: ejecutar %s \"%s\"\n" +msgid "Could not open Catalog \"%s\", database \"%s\".\n" +msgstr "No se pudo abrir Catálogo \"%s\", base de datos \"%s\".\n" -#: src/lib/runscript.c:245 +#: src/dird/dird.c:976 src/tools/cats_test.c:365 #, c-format -msgid "Runscript: %s could not execute. ERR=%s\n" -msgstr "Runscript: No pudo ejecutar %s. ERR=%s\n" +msgid "%s" +msgstr "%s" + +#: src/dird/dird.c:1055 +#, fuzzy, c-format +msgid "Could not create storage record for %s\n" +msgstr "No es posible crear el registro Pool. ERR=%s\n" + +#: src/dird/dird.c:1063 +#, fuzzy, c-format +msgid "Could not update storage record for %s\n" +msgstr "No se pudo actualizar el registro de trabajo. ERR=%s\n" + +#: src/dird/ua_purge.c:84 +msgid "" +"\n" +"This command can be DANGEROUS!!!\n" +"\n" +"It purges (deletes) all Files from a Job,\n" +"JobId, Client or Volume; or it purges (deletes)\n" +"all Jobs from a Client or Volume without regard\n" +"to retention periods. Normally you should use the\n" +"PRUNE command, which respects retention periods.\n" +msgstr "" +"\n" +"Este comando puede ser PELIGROSO!!!\n" +"\n" +"El purgas (elimina) todos los archivos de un Job,\n" +"JobId, Cliente o Volumen; o el purgas (elimina)\n" +"Todos los Jobs de un Cliente o Volumen sin tener en cuenta\n" +"los periodos de retención. Normalmente debería utilizar el\n" +"comando PRUNE, que respecta los plazos de retención.\n" + +#: src/dird/ua_purge.c:152 +msgid "Choose item to purge" +msgstr "Elija el ítem para purgar" -#: src/lib/runscript.c:254 +#: src/dird/ua_purge.c:199 #, c-format -msgid "%s: %s\n" -msgstr "%s: %s\n" +msgid "Begin purging files for Client \"%s\"\n" +msgstr "Iniciando purga de archivos para Cliente \"%s\"\n" -#: src/lib/runscript.c:259 +#: src/dird/ua_purge.c:208 src/dird/ua_purge.c:258 #, c-format -msgid "Runscript: %s returned non-zero status=%d. ERR=%s\n" -msgstr "Runscript: %s devolvió estado=%d distinto de cero. ERR=%s\n" +msgid "No Files found for client %s to purge from %s catalog.\n" +msgstr "" +"No encuentra los archivos del cliente %s para purgar %s del catálogo.\n" -#: src/lib/lex.c:91 src/wx-console/console_thread.cpp:212 +#: src/dird/ua_purge.c:211 #, c-format -msgid "Problem probably begins at line %d.\n" -msgstr "Probablemente comienza el problema en la línea %d\n" +msgid "Files for %d Jobs for client \"%s\" purged from %s catalog.\n" +msgstr "Archivos para Jobs %d para cliente \"%s\" purgado del catalogo %s.\n" + +#: src/dird/ua_purge.c:249 +#, c-format +msgid "Begin purging jobs from Client \"%s\"\n" +msgstr "Iniciando purga de jobs para Cliente \"%s\"\n" + +#: src/dird/ua_purge.c:261 +#, c-format +msgid "%d Jobs for client %s purged from %s catalog.\n" +msgstr "Jobs %d para cliente \"%s\" purgado del catalogo %s.\n" -#: src/lib/lex.c:96 src/wx-console/console_thread.cpp:217 +#: src/dird/ua_purge.c:459 #, c-format msgid "" -"Config error: %s\n" -" : line %d, col %d of file %s\n" -"%s\n" -"%s" +"\n" +"Volume \"%s\" has VolStatus \"%s\" and cannot be purged.\n" +"The VolStatus must be: Append, Full, Used, or Error to be purged.\n" msgstr "" -"Error de configuración: %s\n" -" : línea %d, columna %d en el archivo %s\n" -"%s\n" -"%s" +"\n" +"Volumen \"%s\" tiene VolStatus \"%s\" y no puede ser purgado.\n" +"El VolStatus debe ser: Añadir, Lleno, Usado, o Error para ser purgado.\n" -#: src/lib/lex.c:100 +#: src/dird/ua_purge.c:487 #, c-format -msgid "Config error: %s\n" -msgstr "Error de configuración: %s\n" - -#: src/lib/lex.c:129 -msgid "Close of NULL file\n" -msgstr "Cierre de archivo NULL\n" +msgid "%d File%s on Volume \"%s\" purged from catalog.\n" +msgstr "%d Archivo%s en Volumen \"%s\" purgado desde el catalogo.\n" -#: src/lib/lex.c:226 +#: src/dird/ua_purge.c:537 +#, c-format msgid "" -"get_char: called after EOF. You may have a open double quote without the " -"closing double quote.\n" +"There are no more Jobs associated with Volume \"%s\". Marking it purged.\n" msgstr "" -"get_char: llamado después de EOF. Usted puede tener una comilla doble " -"abierta sin el cierre de comillas dobles.\n" +"No hay más Jobs relacionados con Volumen \"%s\". Marcando el para purgar.\n" + +#: src/dird/ua_purge.c:606 +#, fuzzy +msgid "Can't update volume size in the catalog\n" +msgstr "Se creó un Volumen nuevo \"%s\" en el catálogo.\n" -#: src/lib/lex.c:268 +#: src/dird/ua_purge.c:608 #, c-format -msgid "Config token too long, file: %s, line %d, begins at line %d\n" +msgid "The volume \"%s\" has been truncated\n" msgstr "" -"Configuración de señal demasiado largo, archivo: %s, línea %d, se inicia en " -"la línea %d\n" -#: src/lib/lex.c:292 -msgid "none" -msgstr "ninguno" +#: src/dird/ua_purge.c:610 +#, fuzzy, c-format +msgid "Unable to truncate volume \"%s\"\n" +msgstr "No se puede truncar el dispositivo %s. ERR=%s\n" -#: src/lib/lex.c:293 -msgid "comment" -msgstr "comentario" +#: src/dird/ua_purge.c:703 +#, fuzzy, c-format +msgid "No Volumes found to perform %s action.\n" +msgstr "No encontraron volúmenes para etiquetar, o sin códigos de barras.\n" -#: src/lib/lex.c:294 -msgid "number" -msgstr "numero" +#: src/dird/ua_purge.c:771 +#, c-format +msgid "Unable move recycled Volume in full Pool \"%s\" MaxVols=%d\n" +msgstr "" +"No se puede mover el Volumen reciclado en full Pool \"%s\" MaxVols=%d\n" -#: src/lib/lex.c:295 -msgid "ip_addr" -msgstr "ip_addr" +#: src/dird/ua_purge.c:785 +#, c-format +msgid "All records pruned from Volume \"%s\"; marking it \"Purged\"\n" +msgstr "" +"Todos los registros del Volumen \"%s\" podados; marcando el \"Purgados\"\n" -#: src/lib/lex.c:296 -msgid "identifier" -msgstr "identificar" +#: src/dird/ua_purge.c:790 +#, c-format +msgid "Cannot purge Volume with VolStatus=%s\n" +msgstr "No se puede purgar Volumen con VolStatus=%s\n" -#: src/lib/lex.c:297 -msgid "string" -msgstr "cadena" +#: src/dird/ua_prune.c:116 +msgid "Choose item to prune" +msgstr "Elija el ítem para podar" -#: src/lib/lex.c:298 -msgid "quoted_string" -msgstr "quoted_string" +#: src/dird/ua_prune.c:172 +#, c-format +msgid "Cannot prune Volume \"%s\" because it is archived.\n" +msgstr "No se puede podar Volumen \"%s\", porque el esta archivo.\n" -#: src/lib/lex.c:299 -msgid "include" -msgstr "incluir" +#: src/dird/ua_prune.c:214 +msgid "Pruned Jobs from JobHisto catalog.\n" +msgstr "Podar Jobs del catálogo JobHisto.\n" -#: src/lib/lex.c:300 -msgid "include_quoted_string" -msgstr "include_quoted_string" +#: src/dird/ua_prune.c:302 +#, fuzzy +msgid "Begin pruning Files.\n" +msgstr "Comenzar poda de Archivos.\n" -#: src/lib/lex.c:301 -msgid "UTF-8 Byte Order Mark" -msgstr "Marca de Orden de UTF-8 Byte" +#: src/dird/ua_prune.c:317 +msgid "No Files found to prune.\n" +msgstr "No se encontraron archivos para podar.\n" -#: src/lib/lex.c:302 -msgid "UTF-16le Byte Order Mark" -msgstr "Marca de Orden de UTF-16le Byte" +#: src/dird/ua_prune.c:340 +#, c-format +msgid "Pruned Files from %s Jobs for client %s from catalog.\n" +msgstr "Archivos podados desde Jobs %s para el cliente %s desde el catálogo.\n" + +#: src/dird/ua_prune.c:486 +#, fuzzy, c-format +msgid "Begin pruning Jobs older than %s.\n" +msgstr "Comenzar poda de Jobs.\n" -#: src/lib/lex.c:340 src/lib/lex.c:346 src/lib/lex.c:357 src/lib/lex.c:363 +#: src/dird/ua_prune.c:597 #, c-format -msgid "expected a positive integer number, got: %s" -msgstr "esperaba un numero entero positivo, obtuvo: %s" +msgid "Pruned %d %s for client %s from catalog.\n" +msgstr "Podados %d %s para el cliente %s desde el catálogo.\n" -#: src/lib/lex.c:479 -msgid "" -"This config file appears to be in an unsupported Unicode format (UTF-16be). " -"Please resave as UTF-8\n" -msgstr "" -"Este archivo de configuración parece estar en un formato no compatible con " -"Unicode (UTF-16be). Por favor, vuelva a guardar como UTF-8\n" +#: src/dird/ua_prune.c:598 +msgid "Jobs" +msgstr "Jobs" + +#: src/dird/ua_prune.c:600 +msgid "No Jobs found to prune.\n" +msgstr "No encontraron Jobs para podar.\n" -#: src/lib/lex.c:625 src/lib/lex.c:653 -#, c-format -msgid "Cannot open included config file %s: %s\n" -msgstr "No se puede abrir el archivo de configuración incluido %s: %s\n" +#: src/dird/ua_prune.c:661 +msgid "Expecting limit argument as integer\n" +msgstr "" -#: src/lib/lex.c:712 src/lib/lex.c:769 -#, c-format -msgid "expected an integer or a range, got %s: %s" -msgstr "esperaba un numero entero o un rango, obtuvo %s: %s" +#: src/dird/ua_prune.c:675 +#, fuzzy, c-format +msgid "Volume \"%s\"" +msgstr "Volumen" -#: src/lib/lex.c:726 src/lib/lex.c:734 src/lib/lex.c:745 src/lib/lex.c:753 -#, c-format -msgid "expected an integer number, got %s: %s" -msgstr "esperaba un numero entero, obtuvo %s: %s" +#: src/dird/ua_update.c:85 +msgid "Update choice:\n" +msgstr "Actualizar selección:\n" -#: src/lib/lex.c:783 -#, c-format -msgid "expected a name, got %s: %s" -msgstr "esperaba un nombre, obtuvo %s: %s" +#: src/dird/ua_update.c:86 +msgid "Volume parameters" +msgstr "Parámetros del Volumen" -#: src/lib/lex.c:787 -#, c-format -msgid "name %s length %d too long, max is %d\n" -msgstr "nombre %s longitud %d demasiado largo, el máximo es %d\n" +#: src/dird/ua_update.c:87 +msgid "Pool from resource" +msgstr "Pool de recursos" -#: src/lib/lex.c:795 -#, c-format -msgid "expected a string, got %s: %s" -msgstr "esperaba una cadena, obtuvo %s: %s" +#: src/dird/ua_update.c:88 +msgid "Slots from autochanger" +msgstr "Slots de cargador" -#: src/lib/var.c:2669 -msgid "everything ok" -msgstr "todo bien" +#: src/dird/ua_update.c:89 +msgid "Long term statistics" +msgstr "Estadísticas a largo plazo" -#: src/lib/var.c:2670 -msgid "incomplete named character" -msgstr "carácter nombrado incompleto" +#: src/dird/ua_update.c:90 +msgid "item" +msgstr "í­tem" -#: src/lib/var.c:2671 -msgid "incomplete hexadecimal value" -msgstr "valor hexadecimal incompleto" +#: src/dird/ua_update.c:90 +msgid "Choose catalog item to update" +msgstr "Seleccione el ítem del catalogo para ser actualizado" -#: src/lib/var.c:2672 -msgid "invalid hexadecimal value" -msgstr "valor hexadecimal inválido" +#: src/dird/ua_update.c:133 +#, c-format +msgid "Invalid VolStatus specified: %s\n" +msgstr "Invalido VolStatus especificado: %s\n" -#: src/lib/var.c:2673 -msgid "octal value too large" -msgstr "valor octal demasiado grande" +#: src/dird/ua_update.c:142 +#, c-format +msgid "New Volume status is: %s\n" +msgstr "Nuevo estado del Volumen es: %s\n" -#: src/lib/var.c:2674 -msgid "invalid octal value" -msgstr "valor octal inválido" +#: src/dird/ua_update.c:152 +#, c-format +msgid "Invalid retention period specified: %s\n" +msgstr "Periodo de retención especificado no valido: %s\n" -#: src/lib/var.c:2675 -msgid "incomplete octal value" -msgstr "valor octal incompleto" +#: src/dird/ua_update.c:160 +#, c-format +msgid "New retention period is: %s\n" +msgstr "Nuevo periodo de retención es: %s\n" -#: src/lib/var.c:2676 -msgid "incomplete grouped hexadecimal value" -msgstr "valor hexadecimal agrupado incompleto" +#: src/dird/ua_update.c:171 +#, c-format +msgid "Invalid use duration specified: %s\n" +msgstr "Duración de uso especificado no válido: %s\n" -#: src/lib/var.c:2677 -msgid "incorrect character class specification" -msgstr "incorrecta especificación de clase de caracteres" +#: src/dird/ua_update.c:179 +#, c-format +msgid "New use duration is: %s\n" +msgstr "Nueva duración de uso es: %s\n" -#: src/lib/var.c:2678 -msgid "invalid expansion configuration" -msgstr "configuración de expansión inválido" +#: src/dird/ua_update.c:193 +#, c-format +msgid "New max jobs is: %s\n" +msgstr "Nuevo máximo jobs es: %s\n" -#: src/lib/var.c:2679 -msgid "out of memory" -msgstr "sin memoria" +#: src/dird/ua_update.c:206 +#, c-format +msgid "New max files is: %s\n" +msgstr "Nuevo máximo files es: %s\n" -#: src/lib/var.c:2680 -msgid "incomplete variable specification" -msgstr "especificación de la variable incompleta" +#: src/dird/ua_update.c:217 +#, c-format +msgid "Invalid max. bytes specification: %s\n" +msgstr "Invalido máximo bytes especificación: %s\n" -#: src/lib/var.c:2681 -msgid "undefined variable" -msgstr "variable no definida" +#: src/dird/ua_update.c:225 +#, c-format +msgid "New Max bytes is: %s\n" +msgstr "Nuevo máximo bytes es: %s\n" -#: src/lib/var.c:2682 -msgid "input is neither text nor variable" -msgstr "de entrada no es ni texto ni variable" +#: src/dird/ua_update.c:236 src/dird/ua_update.c:256 +msgid "Invalid value. It must be yes or no.\n" +msgstr "Valor no válido. Debe ser sí o no.\n" -#: src/lib/var.c:2683 -msgid "unknown command character in variable" -msgstr "carácter de comando desconocido en la variable" +#: src/dird/ua_update.c:244 +#, c-format +msgid "New Recycle flag is: %s\n" +msgstr "Nueva Recycle flag es: %s\n" -#: src/lib/var.c:2684 -msgid "malformatted search and replace operation" -msgstr "mal-formada operación de búsqueda y reemplazo" +#: src/dird/ua_update.c:264 +#, c-format +msgid "New InChanger flag is: %s\n" +msgstr "Nueva InChanger flag es: %s\n" -#: src/lib/var.c:2685 -msgid "unknown flag in search and replace operation" -msgstr "bandera desconocida en operación de búsqueda y reemplazo" +#: src/dird/ua_update.c:282 +#, c-format +msgid "Invalid slot, it must be between 0 and MaxVols=%d\n" +msgstr "Ranura no válido, debe estar entre 0 y MaxVols=%d\n" -#: src/lib/var.c:2686 -msgid "invalid regex in search and replace operation" -msgstr "regex no válida en operación de búsqueda y reemplazo" +#: src/dird/ua_update.c:292 src/dird/ua_update.c:716 +#, c-format +msgid "Error updating media record Slot: ERR=%s" +msgstr "Error actualizando registro de medios de Ranuras: ERR=%s" -#: src/lib/var.c:2687 -msgid "missing parameter in command" -msgstr "faltan parámetros en el comando" +#: src/dird/ua_update.c:294 +#, c-format +msgid "New Slot is: %d\n" +msgstr "Nueva Ranura es: %d\n" -#: src/lib/var.c:2688 -msgid "empty search string in search and replace operation" -msgstr "palabra de búsqueda vacía en operación de búsqueda y reemplazo" +#: src/dird/ua_update.c:319 +#, c-format +msgid "New Pool is: %s\n" +msgstr "Nuevo Pool es: %s\n" -#: src/lib/var.c:2689 -msgid "start offset missing in cut operation" -msgstr "inicio offset ausente en operación de corte" +#: src/dird/ua_update.c:362 +#, c-format +msgid "New RecyclePool is: %s\n" +msgstr "Nuevo RecyclePool es: %s\n" -#: src/lib/var.c:2690 -msgid "offsets in cut operation delimited by unknown character" -msgstr "offset en operación de corte delimitado por carácter desconocido" +#: src/dird/ua_update.c:382 +#, c-format +msgid "Error updating Volume record: ERR=%s" +msgstr "Error actualizando registro Volumen: ERR=%s" -#: src/lib/var.c:2691 -msgid "range out of bounds in cut operation" -msgstr "rango fuera de límites en operaciones de corte" +#: src/dird/ua_update.c:384 +#, c-format +msgid "Volume defaults updated from \"%s\" Pool record.\n" +msgstr "Volumen por defecto actualizado desde registro \"%s\" Pool.\n" -#: src/lib/var.c:2692 -msgid "offset out of bounds in cut operation" -msgstr "desplazamiento fuera de límites en operaciones de corte" +#: src/dird/ua_update.c:407 src/dird/ua_update.c:439 +#, c-format +msgid "Error updating Volume records: ERR=%s" +msgstr "Error actualizando registros Volumen: ERR=%s" -#: src/lib/var.c:2693 -msgid "logic error in cut operation" -msgstr "error lógico en la operación de corte" +#: src/dird/ua_update.c:409 src/dird/ua_update.c:441 +#, c-format +msgid "All Volume defaults updated from \"%s\" Pool record.\n" +msgstr "Todos Volúmenes por defectos actualizado desde registro \"%s\" Pool.\n" -#: src/lib/var.c:2694 -msgid "malformatted transpose operation" -msgstr "malformación en operación de transposición" +#: src/dird/ua_update.c:431 +#, c-format +msgid "Updating all pools, but skipped PoolId=%d. ERR=%s\n" +msgstr "Actualizando todos los pools, pero saltando PoolId=%d. ERR=%s\n" -#: src/lib/var.c:2695 -msgid "source and target class mismatch in transpose operation" -msgstr "clase de origen y de destino desajustada en operación de transposición" +#: src/dird/ua_update.c:457 +#, c-format +msgid "Error updating media record Enabled: ERR=%s" +msgstr "Error actualizando registro media Activado: ERR=%s" -#: src/lib/var.c:2696 -msgid "empty character class in transpose operation" -msgstr "clase de caracteres vacía en operación de transposición" +#: src/dird/ua_update.c:460 +#, c-format +msgid "New Enabled is: %d\n" +msgstr "Nuevo Activado es: %d\n" -#: src/lib/var.c:2697 -msgid "incorrect character class in transpose operation" -msgstr "clase de caracteres incorrectos en la operación adaptación" +#: src/dird/ua_update.c:475 +#, c-format +msgid "Error updating media record ActionOnPurge: ERR=%s" +msgstr "Error actualizando registro de medios ActionOnPurge: ERR=%s" -#: src/lib/var.c:2698 -msgid "malformatted padding operation" -msgstr "malformación en operación de relleno" +#: src/dird/ua_update.c:478 +#, c-format +msgid "New ActionOnPurge is: %s\n" +msgstr "Nueva ActionOnPurge es: %s\n" -#: src/lib/var.c:2699 -msgid "width parameter missing in padding operation" -msgstr "parámetro de anchura ausente en la operación de relleno" +#: src/dird/ua_update.c:594 +msgid "Volume Status" +msgstr "Estado del Volumen" -#: src/lib/var.c:2700 -msgid "fill string missing in padding operation" -msgstr "cadena de llenado ausente en la operación de relleno" +#: src/dird/ua_update.c:595 +msgid "Volume Retention Period" +msgstr "Periodo de Retención del Volumen" -#: src/lib/var.c:2701 -msgid "unknown quoted pair in search and replace operation" -msgstr "par de citado desconocido en operación de búsqueda y reemplazo" +#: src/dird/ua_update.c:596 +msgid "Volume Use Duration" +msgstr "Duración de uso del Volumen" -#: src/lib/var.c:2702 -msgid "sub-matching reference out of range" -msgstr "referencia de sub-coincidente fuera de rango" +#: src/dird/ua_update.c:597 +msgid "Maximum Volume Jobs" +msgstr "Máximo Volumen Jobs" -#: src/lib/var.c:2703 -msgid "invalid argument" -msgstr "argumento invalido" +#: src/dird/ua_update.c:598 +msgid "Maximum Volume Files" +msgstr "Máximo Archivos de Volumen" -#: src/lib/var.c:2704 -msgid "incomplete quoted pair" -msgstr "par de la cita incompleta" +#: src/dird/ua_update.c:599 +msgid "Maximum Volume Bytes" +msgstr "Máximo Volumen Bytes" -#: src/lib/var.c:2705 -msgid "lookup function does not support variable arrays" -msgstr "función de búsqueda no soporta conjuntos de variables" +#: src/dird/ua_update.c:600 +msgid "Recycle Flag" +msgstr "Recycle Flag" -#: src/lib/var.c:2706 -msgid "index of array variable contains an invalid character" -msgstr "índice de la variable de matriz contiene un carácter inválido" +#: src/dird/ua_update.c:601 +msgid "Slot" +msgstr "Ranura" -#: src/lib/var.c:2707 -msgid "index of array variable is incomplete" -msgstr "índice de la variable de matriz está incompleta" +#: src/dird/ua_update.c:602 +msgid "InChanger Flag" +msgstr "InChanger Flag" -#: src/lib/var.c:2708 -msgid "bracket expression in array variable's index not closed" -msgstr "expresión de corchetes en el índice variable de matriz no cerrado" +#: src/dird/ua_update.c:603 +msgid "Volume Files" +msgstr "Archivos de Volumen" -#: src/lib/var.c:2709 -msgid "division by zero error in index specification" -msgstr "Error de división por cero en especificación del índice" +#: src/dird/ua_update.c:605 +msgid "Volume from Pool" +msgstr "Volumen de Pool" -#: src/lib/var.c:2710 -msgid "unterminated loop construct" -msgstr "no terminado la construcción de bucle" +#: src/dird/ua_update.c:606 +msgid "All Volumes from Pool" +msgstr "Todos Volúmenes de Pool" -#: src/lib/var.c:2711 -msgid "invalid character in loop limits" -msgstr "carácter no válido en el bucle de límites" +#: src/dird/ua_update.c:607 +msgid "All Volumes from all Pools" +msgstr "Todos los Volúmenes de todas los Pools" -#: src/lib/var.c:2712 -msgid "malformed operation argument list" -msgstr "lista de argumentos de operación mal formada " +#: src/dird/ua_update.c:608 +msgid "Enabled" +msgstr "Activado" -#: src/lib/var.c:2713 -msgid "undefined operation" -msgstr "operación no definida" +#: src/dird/ua_update.c:609 +msgid "RecyclePool" +msgstr "RecyclePool" -#: src/lib/var.c:2714 -msgid "formatting failure" -msgstr "Error de formato" +#: src/dird/ua_update.c:610 +msgid "Action On Purge" +msgstr "Action On Purge" -#: src/lib/var.c:2723 -msgid "unknown error" -msgstr "error desconocido" +#: src/dird/ua_update.c:611 +msgid "Done" +msgstr "Hecho" -#: src/lib/address_conf.c:62 +#: src/dird/ua_update.c:620 #, c-format -msgid "Only ipv4 and ipv6 are supported (%d)\n" -msgstr "Solo ipv4 y ipv6 estan soportado (%d)\n" +msgid "Updating Volume \"%s\"\n" +msgstr "Actualizando Volumen \"%s\"\n" -#: src/lib/address_conf.c:66 +#: src/dird/ua_update.c:625 #, c-format -msgid "Only ipv4 is supported (%d)\n" -msgstr "Solo ipv4 esta soportado (%d)\n" +msgid "Current Volume status is: %s\n" +msgstr "Actual estado del Volumen es: %s\n" -#: src/lib/address_conf.c:175 -#, c-format -msgid "It was tried to assign a ipv6 address to a ipv4(%d)\n" -msgstr "Se trató de asignar una dirección IPv6 a IPv4(%d)\n" +#: src/dird/ua_update.c:626 +msgid "Possible Values are:\n" +msgstr "Posibles Valores son:\n" -#: src/lib/address_conf.c:184 -#, c-format -msgid "It was tried to assign a ipv4 address to a ipv6(%d)\n" -msgstr "Se trató de asignar una dirección IPv4 a IPv6(%d)\n" +#: src/dird/ua_update.c:637 +msgid "Choose new Volume Status" +msgstr "Seleccione el nuevo estado del Volumen" -#: src/lib/address_conf.c:263 +#: src/dird/ua_update.c:643 #, c-format -msgid "Can't add default address (%s)\n" -msgstr "No se puede agregar dirección por defecto (%s)\n" +msgid "Current retention period is: %s\n" +msgstr "Actual periodo de retención es: %s\n" -#: src/lib/address_conf.c:292 -msgid "the old style addresses cannot be mixed with new style" -msgstr "" -"el viejo estilo de las direcciones no se pueden mezclar con el nuevo estilo" +#: src/dird/ua_update.c:645 +msgid "Enter Volume Retention period: " +msgstr "Introduzca periodo de Retención del Volumen:" -#: src/lib/address_conf.c:313 +#: src/dird/ua_update.c:652 #, c-format -msgid "can't resolve service(%s)" -msgstr "no se puede resolver el servicio(%s)" +msgid "Current use duration is: %s\n" +msgstr "Duración de uso actual es: %s\n" -#: src/lib/address_conf.c:322 -#, c-format -msgid "can't resolve hostname(%s) %s" -msgstr "no se puede resolver el hostname(%s) %s" +#: src/dird/ua_update.c:654 +msgid "Enter Volume Use Duration: " +msgstr "Introduzca Duración de Uso de Volumen:" -#: src/lib/address_conf.c:412 src/lib/address_conf.c:443 +#: src/dird/ua_update.c:661 #, c-format -msgid "Expected a block begin { , got: %s" -msgstr "Esperaba un inicio de bloque {, obtuvo: %s" +msgid "Current max jobs is: %u\n" +msgstr "Máximo jobs actual es: %u\n" -#: src/lib/address_conf.c:417 -msgid "Empty addr block is not allowed" -msgstr "Bloque de direcciones vacío no está permitido" +#: src/dird/ua_update.c:662 +msgid "Enter new Maximum Jobs: " +msgstr "Introduzca nuevo Máximo de Trabajos" -#: src/lib/address_conf.c:421 +#: src/dird/ua_update.c:669 #, c-format -msgid "Expected a string, got: %s" -msgstr "Esperaba una cadena, obtuvo: %s" +msgid "Current max files is: %u\n" +msgstr "Actual máximo de archivos es: %u\n" -#: src/lib/address_conf.c:430 -#, c-format -msgid "Expected a string [ip|ipv4|ipv6], got: %s" -msgstr "Espera una cadena [ip|ipv4|ipv6], obtuvo: %s" +#: src/dird/ua_update.c:670 +msgid "Enter new Maximum Files: " +msgstr "Introduzca nuevo máximo de archivos:" -#: src/lib/address_conf.c:434 +#: src/dird/ua_update.c:677 #, c-format -msgid "Expected a string [ip|ipv4], got: %s" -msgstr "Espera una cadena [ip|ipv4], obtuvo: %s" +msgid "Current value is: %s\n" +msgstr "Valor actual es: %s\n" + +#: src/dird/ua_update.c:678 +msgid "Enter new Maximum Bytes: " +msgstr "Introduzca nuevo Máximo de Bytes:" -#: src/lib/address_conf.c:439 src/lib/address_conf.c:469 +#: src/dird/ua_update.c:686 #, c-format -msgid "Expected a equal =, got: %s" -msgstr "Esperaba una igual =, obtuvo: %s" +msgid "Current recycle flag is: %s\n" +msgstr "Recycle flag actual es: %s\n" + +#: src/dird/ua_update.c:688 +msgid "Enter new Recycle status: " +msgstr "Introduzca el nuevo estado de Reciclaje:" -#: src/lib/address_conf.c:450 src/lib/address_conf.c:465 +#: src/dird/ua_update.c:695 #, c-format -msgid "Expected a identifier [addr|port], got: %s" -msgstr "Esperaba un identificador [addr|port], obtuvo: %s" +msgid "Current Slot is: %d\n" +msgstr "Ranura Actual es: %d\n" -#: src/lib/address_conf.c:455 -msgid "Only one port per address block" -msgstr "Sólo un puerto por bloque de direcciones" +#: src/dird/ua_update.c:696 +msgid "Enter new Slot: " +msgstr "Introduzca nueva Ranura:" -#: src/lib/address_conf.c:461 -msgid "Only one addr per address block" -msgstr "Sólo una dirección por bloque de direcciones" +#: src/dird/ua_update.c:703 +#, c-format +msgid "Current InChanger flag is: %d\n" +msgstr "Bandera InChanger actual es: %d\n" -#: src/lib/address_conf.c:477 +#: src/dird/ua_update.c:704 #, c-format -msgid "Expected a number or a string, got: %s" -msgstr "Esperaba un numero o una cadena , obtuvo: %s" +msgid "Set InChanger flag for Volume \"%s\": yes/no: " +msgstr "Configurar bandera InChanger para Volumen \"%s\": sí/no: " -#: src/lib/address_conf.c:483 src/lib/address_conf.c:516 +#: src/dird/ua_update.c:718 #, c-format -msgid "Expected an IP number or a hostname, got: %s" -msgstr "Esperaba un numero IP o un hostname, obtuvo: %s" +msgid "New InChanger flag is: %d\n" +msgstr "Nueva InChanger flag es: %d\n" -#: src/lib/address_conf.c:489 -msgid "State machine missmatch" -msgstr "Estado de la máquina desajustado" +#: src/dird/ua_update.c:725 +msgid "" +"Warning changing Volume Files can result\n" +"in loss of data on your Volume\n" +"\n" +msgstr "" +"Advertencia, cambiar Archivos de Volumen puede resultar\n" +"en pérdida de datos en el Volumen\n" +"\n" -#: src/lib/address_conf.c:495 src/lib/address_conf.c:507 +#: src/dird/ua_update.c:727 #, c-format -msgid "Expected a end of block }, got: %s" -msgstr "Esperaba un fin de bloque }, obtuvo: %s" +msgid "Current Volume Files is: %u\n" +msgstr "Archivos de Volumen actual es: %u\n" -#: src/lib/address_conf.c:501 -#, c-format -msgid "Can't add hostname(%s) and port(%s) to addrlist (%s)" -msgstr "" -"No se puede agregar el nombre de maquina(%s) y puerto(%s) a addrlist(%s)" +#: src/dird/ua_update.c:728 +msgid "Enter new number of Files for Volume: " +msgstr "Introduzca el nuevo número de Archivos para el Volumen:" -#: src/lib/address_conf.c:521 src/lib/address_conf.c:535 +#: src/dird/ua_update.c:733 +msgid "Normally, you should only increase Volume Files by one!\n" +msgstr "Normalmente, sólo debería aumentar el Archivo de Volumen en uno!\n" + +#: src/dird/ua_update.c:734 +msgid "Increase Volume Files? (yes/no): " +msgstr "Incrementar Archivo de Volumen? (sí/no):" + +#: src/dird/ua_update.c:744 #, c-format -msgid "can't add port (%s) to (%s)" -msgstr "no puede agregar el puerto (%s) a (%s)" +msgid "New Volume Files is: %u\n" +msgstr "Nuevo Archivo de Volumen es: %u\n" -#: src/lib/address_conf.c:530 +#: src/dird/ua_update.c:756 #, c-format -msgid "Expected a port number or string, got: %s" -msgstr "Esperaba un numero de puerto o cadena, obtuvo: %s" +msgid "Current Pool is: %s\n" +msgstr "Pool actual es: %s\n" -#: src/lib/edit.c:478 -#, fuzzy -msgid "Empty name not allowed.\n" -msgstr "Bloque de direcciones vacío no está permitido" +#: src/dird/ua_update.c:757 +msgid "Enter new Pool name: " +msgstr "Introduzca el nuevo nombre del Pool:" -#: src/lib/edit.c:488 +#: src/dird/ua_update.c:778 #, c-format -msgid "Illegal character \"%c\" in name.\n" -msgstr "Carácter ilegal \"%c\" en el nombre.\n" +msgid "Current Enabled is: %d\n" +msgstr "Habilitado(Enabled) actual es: %d\n" -#: src/lib/edit.c:495 -msgid "Name too long.\n" -msgstr "Nombre demasiado largo.\n" +#: src/dird/ua_update.c:779 +msgid "Enter new Enabled: " +msgstr "Introduzca nuevo Habilitado(Enabled):" -#: src/findlib/savecwd.c:60 +#: src/dird/ua_update.c:789 #, c-format -msgid "Cannot open current directory: ERR=%s\n" -msgstr "No se puede abrir el directorio actual: ERR=%s\n" +msgid "Current RecyclePool is: %s\n" +msgstr "RecyclePool actual es: %s\n" -#: src/findlib/savecwd.c:71 -#, c-format -msgid "Cannot get current directory: ERR=%s\n" -msgstr "No se puede obtener el directorio actual: ERR=%s\n" +#: src/dird/ua_update.c:791 +msgid "No current RecyclePool\n" +msgstr "No actual RecyclePool\n" -#: src/findlib/savecwd.c:95 src/findlib/savecwd.c:106 +#: src/dird/ua_update.c:801 #, c-format -msgid "Cannot reset current directory: ERR=%s\n" -msgstr "No se puede restablecer el directorio actual: ERR=%s\n" +msgid "Current ActionOnPurge is: %s\n" +msgstr "Actual ActionOnPurge es: %s\n" -#: src/findlib/mkpath.c:137 -#, c-format -msgid "Cannot create directory %s: ERR=%s\n" -msgstr "No se puede crear directorio %s: ERR=%s\n" +#: src/dird/ua_update.c:803 +msgid "Enter new ActionOnPurge (one of: Truncate, None): " +msgstr "Introduzca nuevo ActionOnPurge (uno de: Truncar, Ninguno):" -#: src/findlib/mkpath.c:141 src/findlib/mkpath.c:202 -#, c-format -msgid "%s exists but is not a directory.\n" -msgstr "%s existe pero no es un directorio.\n" +#: src/dird/ua_update.c:811 +msgid "Selection terminated.\n" +msgstr "Selección terminada.\n" -#: src/findlib/mkpath.c:164 +#: src/dird/ua_update.c:831 #, c-format -msgid "Cannot change owner and/or group of %s: ERR=%s\n" -msgstr "No se puede cambiar el propietario y/o grupo de %s: ERR=%s\n" +msgid "Updating %i job(s).\n" +msgstr "Actualizando %i job(s).\n" -#: src/findlib/mkpath.c:169 +#: src/dird/ua_update.c:863 #, c-format -msgid "Cannot change permissions of %s: ERR=%s\n" -msgstr "No puede cambiar los permisos de %s: ERR=%s\n" +msgid "db_update_pool_record returned %d. ERR=%s\n" +msgstr "db_update_pool_record regreso %d. ERR=%s\n" -#: src/findlib/mkpath.c:239 -#, c-format -msgid "%c: is not a valid drive.\n" -msgstr "%c: no es una unidad válida.\n" +#: src/dird/ua_update.c:870 +msgid "Pool DB record updated from resource.\n" +msgstr "registro BD Pool actualizado desde recursos.\n" -#: src/findlib/mkpath.c:283 -msgid "Too many subdirectories. Some permissions not reset.\n" -msgstr "Demasiados subdirectorios. Algunos permisos no se restablece.\n" +#: src/dird/ua_update.c:897 +msgid "Expect JobId keyword, not found.\n" +msgstr "Esperaba palabra clave JobId, no encontrada.\n" -#: src/findlib/attribs.c:483 -#, c-format -msgid "File size of restored file %s not correct. Original %s, restored %s.\n" -msgstr "" -"Tamaño del archivo %s restaurado no es correcto. Original %s, restaurado " -"%s.\n" +#: src/dird/ua_update.c:922 +msgid "Neither Client nor StartTime specified.\n" +msgstr "Ni el Cliente ni StartTime especificado.\n" -#: src/findlib/attribs.c:509 src/findlib/attribs.c:516 +#: src/dird/catreq.c:121 src/dird/catreq.c:364 #, c-format -msgid "Unable to set file owner %s: ERR=%s\n" -msgstr "No se pudo establecer propietario del archivo %s: ERR=%s\n" +msgid "1990 Invalid Catalog Request: %s" +msgstr "1990 Solicitud de Catalogo no válido: %s" -#: src/findlib/attribs.c:522 +#: src/dird/catreq.c:122 #, c-format -msgid "Unable to set file modes %s: ERR=%s\n" -msgstr "No se pudo establecer modos del archivo %s: ERR=%s\n" +msgid "Invalid Catalog request; DB not open: %s" +msgstr "Solicitud de Catalogo no válido; BD no abierta: %s" -#: src/findlib/attribs.c:532 -#, c-format -msgid "Unable to set file times %s: ERR=%s\n" -msgstr "No se pudo establecer tiempos del archivo %s: ERR=%s\n" +#: src/dird/catreq.c:143 +#, fuzzy, c-format +msgid "Pool \"%s\" not found for SD find media request.\n" +msgstr "Pool \"%s\" no encontrado, utilizando cualquier pool.\n" -#: src/findlib/attribs.c:546 -#, c-format -msgid "Unable to set file flags %s: ERR=%s\n" -msgstr "No es posible establecer banderas en archivo %s: ERR=%s\n" +#: src/dird/catreq.c:152 +msgid "1901 No Media.\n" +msgstr "1901 Ninguna Media.\n" -#: src/findlib/attribs.c:799 -#, c-format -msgid "Error in %s file %s: ERR=%s\n" -msgstr "Error en %s archivo %s: ERR=%s\n" +#: src/dird/catreq.c:184 +msgid "not in Pool" +msgstr "no está¡ en Pool" -#: src/findlib/attribs.c:816 -#, c-format -msgid "Error in %s: ERR=%s\n" -msgstr "Error en %s: ERR=%s\n" +#: src/dird/catreq.c:186 +msgid "not correct MediaType" +msgstr "Tipo de Medio incorrecto" + +#: src/dird/catreq.c:196 +msgid "is not Enabled" +msgstr "no está¡ Habilitado" -#: src/findlib/enable_priv.c:92 -msgid "AdjustTokenPrivileges set " -msgstr "Establecer AdjustTokenPrivileges " +#: src/dird/catreq.c:205 +#, fuzzy, c-format +msgid "1998 Volume \"%s\" catalog status is %s, %s.\n" +msgstr "1998 Volumen \"%s\" en estado %s, %s.\n" -#: src/findlib/create_file.c:124 +#: src/dird/catreq.c:210 #, c-format -msgid "File skipped. Not newer: %s\n" -msgstr "Archivo omitido. No más reciente: %s\n" +msgid "1997 Volume \"%s\" not in catalog.\n" +msgstr "1197 Volumen \"%s\" no está¡ en catálogo.\n" -#: src/findlib/create_file.c:131 +#: src/dird/catreq.c:236 #, c-format -msgid "File skipped. Not older: %s\n" -msgstr "Archivo omitido. No más viejo: %s\n" +msgid "Unable to get Media record for Volume %s: ERR=%s\n" +msgstr "No es posible obtener registro Media para el Volumen %s: ERR=%s\n" -#: src/findlib/create_file.c:141 +#: src/dird/catreq.c:238 #, c-format -msgid "File skipped. Already exists: %s\n" -msgstr "Archivo omitido. Ya existe: %s\n" +msgid "1991 Catalog Request for vol=%s failed: %s" +msgstr "1991 Solicitud de Catalogo para vol=%s fallida:%s" -#: src/findlib/create_file.c:167 -#, c-format -msgid "File %s already exists and could not be replaced. ERR=%s.\n" -msgstr "El archivo %s ya existe y no puede ser reemplazado. ERR=%s.\n" +#: src/dird/catreq.c:265 +#, fuzzy, c-format +msgid "Attempt to set Volume Files from %u to %u for Volume \"%s\". Ignored.\n" +msgstr "" +"Archivos de Volumen en %u se establece en %u para Volumen \"%s\". Esto es " +"incorrecto.\n" -#: src/findlib/create_file.c:218 src/findlib/create_file.c:282 -#: src/findlib/create_file.c:378 +#: src/dird/catreq.c:321 #, c-format -msgid "bpkt already open fid=%d\n" -msgstr "bpkt ya abierto fid=%d\n" +msgid "Catalog error updating Media record. %s" +msgstr "Error de catalogo actualizando registro Media. %s" -#: src/findlib/create_file.c:226 src/filed/fd_plugins.c:1009 -#, c-format -msgid "Could not create %s: ERR=%s\n" -msgstr "No se pudo crear %s: ERR=%s\n" +#: src/dird/catreq.c:323 +msgid "1993 Update Media error\n" +msgstr "1993 Error de actualización de Media\n" -#: src/findlib/create_file.c:241 +#: src/dird/catreq.c:350 #, c-format -msgid "Cannot make fifo %s: ERR=%s\n" -msgstr "No puede crear fifo %s: ERR=%s\n" +msgid "Catalog error creating JobMedia record. %s" +msgstr "Error de Catalogo al crear registro JobMedia. %s" -#: src/findlib/create_file.c:259 -#, c-format -msgid "Cannot make node %s: ERR=%s\n" -msgstr "No puede crear nodo %s: ERR=%s\n" +#: src/dird/catreq.c:352 +msgid "1992 Create JobMedia error\n" +msgstr "1992 Error al crear JobMedia\n" -#: src/findlib/create_file.c:304 +#: src/dird/catreq.c:365 #, c-format -msgid "Could not symlink %s -> %s: ERR=%s\n" -msgstr "No se pudo crear enlace simbólico %s -> %s: ERR=%s\n" +msgid "Invalid Catalog request: %s" +msgstr "Invalida petición de Catalogo: %s" + +#: src/dird/catreq.c:452 +#, fuzzy, c-format +msgid "Attribute create error: ERR=%s" +msgstr "error al crear Atributo.%s" + +#: src/dird/catreq.c:549 +#, fuzzy, c-format +msgid "Restore object create error. %s" +msgstr "error al crear Atributo.%s" + +#: src/dird/catreq.c:556 +#, fuzzy, c-format +msgid "%s not same File=%d as attributes=%d\n" +msgstr "Obtuvo %s, pero no igual que los atributos de File\n" -#: src/findlib/create_file.c:329 src/findlib/create_file.c:342 +#: src/dird/catreq.c:583 #, c-format -msgid "Could not restore file flags for file %s: ERR=%s\n" +msgid "Catalog error updating file digest. Unsupported digest stream type: %d" msgstr "" -"No se pudo restaurar el archivo de banderas para el archivo% s: ERR=%s\n" +"Error al actualizar el resumen de archivo de catálogo. Incompatible resumen " +"de tipo de flujo: %d" -#: src/findlib/create_file.c:333 src/findlib/create_file.c:350 -#, c-format -msgid "Could not hard link %s -> %s: ERR=%s\n" -msgstr "No se pudo crear enlace duro %s -> %s: ERR=%s\n" +#: src/dird/catreq.c:598 +#, fuzzy, c-format +msgid "attribute create error. %s" +msgstr "error al crear Atributo.%s" -#: src/findlib/create_file.c:346 +#: src/dird/catreq.c:604 #, c-format -msgid "Could not reset file flags for file %s: ERR=%s\n" -msgstr "" -"No se pudo restablecer el archivo de banderas para el archivo %s: ERR=%s\n" +msgid "Catalog error updating file digest. %s" +msgstr "Error de catalogo actualizando archivo de resumen. %s" -#: src/findlib/create_file.c:401 +#: src/dird/catreq.c:627 #, c-format -msgid "Original file %s have been deleted: type=%d\n" -msgstr "Archivo %s original se han eliminado: tipo=%d\n" +msgid "1994 Invalid Catalog Update: %s" +msgstr "1994 Invalido Catálogo de Actualizaciones: %s" -#: src/findlib/create_file.c:413 +#: src/dird/catreq.c:628 #, c-format -msgid "Original file %s not saved: type=%d\n" -msgstr "Archivo original %s no guardado: tipo=%d\n" +msgid "Invalid Catalog Update; DB not open: %s" +msgstr "Actualización de Catalogo Inválida; La Base de Datos no se abre: %s" -#: src/findlib/create_file.c:416 +#: src/dird/catreq.c:684 src/dird/catreq.c:699 #, c-format -msgid "Unknown file type %d; not restored: %s\n" -msgstr "Tipo de archivo desconocido %d; no restaurado: %s\n" +msgid "fread attr spool error. ERR=%s\n" +msgstr "Error fread attr spool. ERR=%s\n" -#: src/findlib/create_file.c:460 +#: src/findlib/match.c:198 src/filed/job.c:1615 src/tools/testfind.c:642 #, c-format -msgid "Zero length filename: %s\n" -msgstr "Nombre de archivo con longitud cero: %s\n" +msgid "Unknown include/exclude option: %c\n" +msgstr "Opción incluir/excluir desconocida: %c\n" -#: src/findlib/bfile.c:97 +#: src/findlib/bfile.c:85 msgid "Unix attributes" msgstr "Atributos Unix" -#: src/findlib/bfile.c:99 +#: src/findlib/bfile.c:87 msgid "File data" msgstr "Archivo de datos" -#: src/findlib/bfile.c:101 +#: src/findlib/bfile.c:89 msgid "MD5 digest" msgstr "Sumario MD5" -#: src/findlib/bfile.c:103 +#: src/findlib/bfile.c:91 msgid "GZIP data" msgstr "GZIP datos" -#: src/findlib/bfile.c:105 +#: src/findlib/bfile.c:93 #, fuzzy msgid "Compressed data" msgstr "Datos dispersos" -#: src/findlib/bfile.c:107 +#: src/findlib/bfile.c:95 msgid "Extended attributes" msgstr "Atributos extendidos" -#: src/findlib/bfile.c:109 +#: src/findlib/bfile.c:97 msgid "Sparse data" msgstr "Datos dispersos" -#: src/findlib/bfile.c:111 +#: src/findlib/bfile.c:99 msgid "GZIP sparse data" msgstr "Datos GZIP dispersos" -#: src/findlib/bfile.c:113 +#: src/findlib/bfile.c:101 #, fuzzy msgid "Compressed sparse data" msgstr "Datos GZIP dispersos" -#: src/findlib/bfile.c:115 +#: src/findlib/bfile.c:103 msgid "Program names" msgstr "Programa de nombres" -#: src/findlib/bfile.c:117 +#: src/findlib/bfile.c:105 msgid "Program data" msgstr "Datos de programa" -#: src/findlib/bfile.c:119 +#: src/findlib/bfile.c:107 msgid "SHA1 digest" msgstr "Sumario SHA1" -#: src/findlib/bfile.c:121 +#: src/findlib/bfile.c:109 msgid "Win32 data" msgstr "Win32 datos" -#: src/findlib/bfile.c:123 +#: src/findlib/bfile.c:111 msgid "Win32 GZIP data" msgstr "Win32 GZIP datos" -#: src/findlib/bfile.c:125 +#: src/findlib/bfile.c:113 #, fuzzy msgid "Win32 compressed data" msgstr "Win32 datos" -#: src/findlib/bfile.c:127 +#: src/findlib/bfile.c:115 msgid "MacOS Fork data" msgstr "Datos rama MacOS" -#: src/findlib/bfile.c:129 +#: src/findlib/bfile.c:117 msgid "HFS+ attribs" msgstr "HFS+ attribs" -#: src/findlib/bfile.c:131 +#: src/findlib/bfile.c:119 msgid "Standard Unix ACL attribs" msgstr "ACL estándar de Unix attribs" -#: src/findlib/bfile.c:133 +#: src/findlib/bfile.c:121 msgid "Default Unix ACL attribs" msgstr "ACL por defecto de Unix attribs" -#: src/findlib/bfile.c:135 +#: src/findlib/bfile.c:123 msgid "SHA256 digest" msgstr "Sumario SHA256" -#: src/findlib/bfile.c:137 +#: src/findlib/bfile.c:125 msgid "SHA512 digest" msgstr "Sumario SAH512" -#: src/findlib/bfile.c:139 +#: src/findlib/bfile.c:127 msgid "Signed digest" msgstr "Sumario Firmado" -#: src/findlib/bfile.c:141 +#: src/findlib/bfile.c:129 msgid "Encrypted File data" msgstr "Cifrado de Archivo de datos" -#: src/findlib/bfile.c:143 +#: src/findlib/bfile.c:131 msgid "Encrypted Win32 data" msgstr "Cifrado de datos Win32" -#: src/findlib/bfile.c:145 +#: src/findlib/bfile.c:133 msgid "Encrypted session data" msgstr "Cifrado de datos de sesiones " -#: src/findlib/bfile.c:147 +#: src/findlib/bfile.c:135 msgid "Encrypted GZIP data" msgstr "Cifrado de datos GZIP" -#: src/findlib/bfile.c:149 +#: src/findlib/bfile.c:137 #, fuzzy msgid "Encrypted compressed data" msgstr "Cifrado de datos de sesiones " -#: src/findlib/bfile.c:151 +#: src/findlib/bfile.c:139 msgid "Encrypted Win32 GZIP data" msgstr "Cifrado de datos Win32 GZIP" -#: src/findlib/bfile.c:153 +#: src/findlib/bfile.c:141 #, fuzzy msgid "Encrypted Win32 Compressed data" msgstr "Cifrado de datos Win32" -#: src/findlib/bfile.c:155 +#: src/findlib/bfile.c:143 msgid "Encrypted MacOS fork data" msgstr "Datos encriptados rama MacOS" -#: src/findlib/bfile.c:157 +#: src/findlib/bfile.c:145 +msgid "Plugin Name" +msgstr "" + +#: src/findlib/bfile.c:147 +#, fuzzy +msgid "Plugin Data" +msgstr "Opciones de Plug-in" + +#: src/findlib/bfile.c:149 +#, fuzzy +msgid "Restore Object" +msgstr "Restauración OK" + +#: src/findlib/bfile.c:151 msgid "AIX Specific ACL attribs" msgstr "Atributos ACL específicos de AIX" -#: src/findlib/bfile.c:159 +#: src/findlib/bfile.c:153 msgid "Darwin Specific ACL attribs" msgstr "Atributos ACL específicos de Darwin" -#: src/findlib/bfile.c:161 +#: src/findlib/bfile.c:155 msgid "FreeBSD Specific Default ACL attribs" msgstr "Atributos ACL por defecto específicos de FreeBSD" -#: src/findlib/bfile.c:163 +#: src/findlib/bfile.c:157 msgid "FreeBSD Specific Access ACL attribs" msgstr "Atributos ACL de acceso específicos de FreeBSD" -#: src/findlib/bfile.c:165 +#: src/findlib/bfile.c:159 msgid "HPUX Specific ACL attribs" msgstr "Atributos ACL específicos de HPUX" -#: src/findlib/bfile.c:167 +#: src/findlib/bfile.c:161 msgid "Irix Specific Default ACL attribs" msgstr "Atributos ACL por defecto específicos de Irix" -#: src/findlib/bfile.c:169 +#: src/findlib/bfile.c:163 msgid "Irix Specific Access ACL attribs" msgstr "Atributos ACL de acceso específicos de Irix" -#: src/findlib/bfile.c:171 +#: src/findlib/bfile.c:165 msgid "Linux Specific Default ACL attribs" msgstr "Atributos ACL por defecto específicos de Linux" -#: src/findlib/bfile.c:173 +#: src/findlib/bfile.c:167 msgid "Linux Specific Access ACL attribs" msgstr "Atributos ACL de acceso específicos de Linux" -#: src/findlib/bfile.c:175 +#: src/findlib/bfile.c:169 #, fuzzy msgid "TRU64 Specific Default ACL attribs" msgstr "Atributos ACL por defecto específicos de Irix" -#: src/findlib/bfile.c:177 +#: src/findlib/bfile.c:171 #, fuzzy msgid "TRU64 Specific Access ACL attribs" msgstr "Atributos ACL de acceso específicos de Irix" -#: src/findlib/bfile.c:179 +#: src/findlib/bfile.c:173 #, fuzzy msgid "Solaris Specific POSIX ACL attribs" msgstr "Atributos ACL específicos de Solaris" -#: src/findlib/bfile.c:181 +#: src/findlib/bfile.c:175 #, fuzzy msgid "Solaris Specific NFSv4/ZFS ACL attribs" msgstr "Atributos ACL específicos de Solaris" -#: src/findlib/bfile.c:183 +#: src/findlib/bfile.c:177 #, fuzzy msgid "AFS Specific ACL attribs" msgstr "Atributos ACL específicos de AIX" -#: src/findlib/bfile.c:185 +#: src/findlib/bfile.c:179 #, fuzzy msgid "AIX Specific POSIX ACL attribs" msgstr "Atributos ACL específicos de AIX" -#: src/findlib/bfile.c:187 +#: src/findlib/bfile.c:181 #, fuzzy msgid "AIX Specific NFSv4 ACL attribs" msgstr "Atributos ACL específicos de AIX" -#: src/findlib/bfile.c:189 +#: src/findlib/bfile.c:183 #, fuzzy msgid "FreeBSD Specific NFSv4/ZFS ACL attribs" msgstr "Atributos ACL de acceso específicos de FreeBSD" -#: src/findlib/bfile.c:191 +#: src/findlib/bfile.c:185 #, fuzzy msgid "GNU Hurd Specific Default ACL attribs" msgstr "Atributos ACL por defecto específicos de Irix" -#: src/findlib/bfile.c:193 +#: src/findlib/bfile.c:187 #, fuzzy msgid "GNU Hurd Specific Access ACL attribs" msgstr "Atributos ACL de acceso específicos de Irix" -#: src/findlib/bfile.c:195 +#: src/findlib/bfile.c:189 #, fuzzy msgid "GNU Hurd Specific Extended attribs" msgstr "Atributos Extendidos Específicos de Linux" -#: src/findlib/bfile.c:197 +#: src/findlib/bfile.c:191 #, fuzzy msgid "IRIX Specific Extended attribs" msgstr "Atributos Extendidos Específicos de Linux" -#: src/findlib/bfile.c:199 +#: src/findlib/bfile.c:193 #, fuzzy msgid "TRU64 Specific Extended attribs" msgstr "Atributos Extendidos Específicos de Linux" -#: src/findlib/bfile.c:201 +#: src/findlib/bfile.c:195 #, fuzzy msgid "AIX Specific Extended attribs" msgstr "Atributos Extendidos Específicos de Linux" -#: src/findlib/bfile.c:203 -msgid "OpenBSD Specific Extended attribs" -msgstr "Atributos Extendidos específicos de OpenBSD" +#: src/findlib/bfile.c:197 +msgid "OpenBSD Specific Extended attribs" +msgstr "Atributos Extendidos específicos de OpenBSD" + +#: src/findlib/bfile.c:199 +msgid "Solaris Specific Extensible attribs or System Extended attribs" +msgstr "" +"Atributos extensible específicos de Solaris o atributos de Sistema de " +"Extensión" + +#: src/findlib/bfile.c:201 +msgid "Solaris Specific Extended attribs" +msgstr "Atributos Extendidos Específicos de Solaris" + +#: src/findlib/bfile.c:203 +msgid "Darwin Specific Extended attribs" +msgstr "Atributos Extendidos Específicos de Darwin" + +#: src/findlib/bfile.c:205 +msgid "FreeBSD Specific Extended attribs" +msgstr "Atributos Extendidos Específicos de FreeBSD" + +#: src/findlib/bfile.c:207 +msgid "Linux Specific Extended attribs" +msgstr "Atributos Extendidos Específicos de Linux" + +#: src/findlib/bfile.c:209 +msgid "NetBSD Specific Extended attribs" +msgstr "Atributos Extendidos Específicos de NetBSD" + +#: src/findlib/makepath.c:141 +#, c-format +msgid "Cannot create directory %s: ERR=%s\n" +msgstr "No se puede crear directorio %s: ERR=%s\n" + +#: src/findlib/makepath.c:145 src/findlib/makepath.c:219 +#, c-format +msgid "%s exists but is not a directory.\n" +msgstr "%s existe pero no es un directorio.\n" + +#: src/findlib/makepath.c:155 +#, c-format +msgid "Security problem!! We created directory %s, but it is a link.\n" +msgstr "" + +#: src/findlib/makepath.c:181 +#, c-format +msgid "Cannot change owner and/or group of %s: ERR=%s\n" +msgstr "No se puede cambiar el propietario y/o grupo de %s: ERR=%s\n" + +#: src/findlib/makepath.c:186 +#, c-format +msgid "Cannot change permissions of %s: ERR=%s\n" +msgstr "No puede cambiar los permisos de %s: ERR=%s\n" + +#: src/findlib/makepath.c:256 +#, c-format +msgid "%c: is not a valid drive.\n" +msgstr "%c: no es una unidad válida.\n" + +#: src/findlib/makepath.c:300 +msgid "Too many subdirectories. Some permissions not reset.\n" +msgstr "Demasiados subdirectorios. Algunos permisos no se restablece.\n" + +#: src/findlib/file_create.c:102 +#, c-format +msgid "File skipped. Not newer: %s\n" +msgstr "Archivo omitido. No más reciente: %s\n" + +#: src/findlib/file_create.c:109 +#, c-format +msgid "File skipped. Not older: %s\n" +msgstr "Archivo omitido. No más viejo: %s\n" + +#: src/findlib/file_create.c:119 +#, c-format +msgid "File skipped. Already exists: %s\n" +msgstr "Archivo omitido. Ya existe: %s\n" + +#: src/findlib/file_create.c:145 +#, c-format +msgid "File %s already exists and could not be replaced. ERR=%s.\n" +msgstr "El archivo %s ya existe y no puede ser reemplazado. ERR=%s.\n" + +#: src/findlib/file_create.c:196 src/findlib/file_create.c:259 +#: src/findlib/file_create.c:348 +#, c-format +msgid "bpkt already open fid=%d\n" +msgstr "bpkt ya abierto fid=%d\n" + +#: src/findlib/file_create.c:204 src/filed/fd_plugins.c:1004 +#, c-format +msgid "Could not create %s: ERR=%s\n" +msgstr "No se pudo crear %s: ERR=%s\n" + +#: src/findlib/file_create.c:218 +#, c-format +msgid "Cannot make fifo %s: ERR=%s\n" +msgstr "No puede crear fifo %s: ERR=%s\n" + +#: src/findlib/file_create.c:236 +#, c-format +msgid "Cannot make node %s: ERR=%s\n" +msgstr "No puede crear nodo %s: ERR=%s\n" + +#: src/findlib/file_create.c:281 +#, c-format +msgid "Could not symlink %s -> %s: ERR=%s\n" +msgstr "No se pudo crear enlace simbólico %s -> %s: ERR=%s\n" -#: src/findlib/bfile.c:205 -msgid "Solaris Specific Extensible attribs or System Extended attribs" +#: src/findlib/file_create.c:304 src/findlib/file_create.c:317 +#, c-format +msgid "Could not restore file flags for file %s: ERR=%s\n" msgstr "" -"Atributos extensible específicos de Solaris o atributos de Sistema de " -"Extensión" +"No se pudo restaurar el archivo de banderas para el archivo% s: ERR=%s\n" -#: src/findlib/bfile.c:207 -msgid "Solaris Specific Extended attribs" -msgstr "Atributos Extendidos Específicos de Solaris" +#: src/findlib/file_create.c:308 src/findlib/file_create.c:325 +#, c-format +msgid "Could not hard link %s -> %s: ERR=%s\n" +msgstr "No se pudo crear enlace duro %s -> %s: ERR=%s\n" -#: src/findlib/bfile.c:209 -msgid "Darwin Specific Extended attribs" -msgstr "Atributos Extendidos Específicos de Darwin" +#: src/findlib/file_create.c:321 +#, c-format +msgid "Could not reset file flags for file %s: ERR=%s\n" +msgstr "" +"No se pudo restablecer el archivo de banderas para el archivo %s: ERR=%s\n" -#: src/findlib/bfile.c:211 -msgid "FreeBSD Specific Extended attribs" -msgstr "Atributos Extendidos Específicos de FreeBSD" +#: src/findlib/file_create.c:363 +#, c-format +msgid "Original file %s have been deleted: type=%d\n" +msgstr "Archivo %s original se han eliminado: tipo=%d\n" -#: src/findlib/bfile.c:213 -msgid "Linux Specific Extended attribs" -msgstr "Atributos Extendidos Específicos de Linux" +#: src/findlib/file_create.c:375 +#, c-format +msgid "Original file %s not saved: type=%d\n" +msgstr "Archivo original %s no guardado: tipo=%d\n" -#: src/findlib/bfile.c:215 -msgid "NetBSD Specific Extended attribs" -msgstr "Atributos Extendidos Específicos de NetBSD" +#: src/findlib/file_create.c:378 +#, c-format +msgid "Unknown file type %d; not restored: %s\n" +msgstr "Tipo de archivo desconocido %d; no restaurado: %s\n" + +#: src/findlib/file_create.c:413 +#, c-format +msgid "Zero length filename: %s\n" +msgstr "Nombre de archivo con longitud cero: %s\n" -#: src/findlib/find.c:237 +#: src/findlib/find.c:186 #, fuzzy, c-format msgid "Plugin: \"%s\" not found.\n" msgstr "Plugin=%s no encontrado.\n" -#: src/findlib/match.c:210 src/tools/testfind.c:654 src/filed/job.c:1460 +#: src/findlib/file_attrs.c:96 src/findlib/file_attrs.c:138 #, c-format -msgid "Unknown include/exclude option: %c\n" -msgstr "Opción incluir/excluir desconocida: %c\n" +msgid "Unable to set file modes %s: ERR=%s\n" +msgstr "No se pudo establecer modos del archivo %s: ERR=%s\n" + +#: src/findlib/file_attrs.c:106 src/findlib/file_attrs.c:132 +#: src/findlib/file_attrs.c:589 +#, c-format +msgid "Unable to set file owner %s: ERR=%s\n" +msgstr "No se pudo establecer propietario del archivo %s: ERR=%s\n" + +#: src/findlib/file_attrs.c:125 src/findlib/file_attrs.c:150 +#, c-format +msgid "Unable to set file times %s: ERR=%s\n" +msgstr "No se pudo establecer tiempos del archivo %s: ERR=%s\n" + +#: src/findlib/file_attrs.c:566 +#, c-format +msgid "File size of restored file %s not correct. Original %s, restored %s.\n" +msgstr "" +"Tamaño del archivo %s restaurado no es correcto. Original %s, restaurado " +"%s.\n" + +#: src/findlib/file_attrs.c:609 +#, c-format +msgid "Unable to set file flags %s: ERR=%s\n" +msgstr "No es posible establecer banderas en archivo %s: ERR=%s\n" -#: src/findlib/find_one.c:227 +#: src/findlib/find_one.c:215 #, c-format msgid " NODUMP flag set - will not process %s\n" msgstr "Indicador NODUMP establecido - no procesará %s\n" -#: src/findlib/find_one.c:248 +#: src/findlib/find_one.c:236 #, c-format msgid "Cannot stat file %s: ERR=%s\n" msgstr "No puede stat archivo %s: ERR=%s\n" -#: src/findlib/find_one.c:253 +#: src/findlib/find_one.c:241 #, c-format msgid "%s mtime changed during backup.\n" msgstr "%s mtime cambiado durante la copia de seguridad.\n" -#: src/findlib/find_one.c:260 +#: src/findlib/find_one.c:248 #, c-format msgid "%s ctime changed during backup.\n" msgstr "%s ctime cambiado durante la copia de seguridad.\n" -#: src/findlib/find_one.c:268 src/findlib/find_one.c:276 -#, c-format -msgid "%s size changed during backup.\n" +#: src/findlib/find_one.c:255 +#, fuzzy, c-format +msgid "%s size of %lld changed during backup to %lld.n" msgstr "%s tamaño cambiado durante la copia de seguridad.\n" -#: src/findlib/find_one.c:403 +#: src/findlib/find_one.c:383 #, c-format msgid "Top level directory \"%s\" has unlisted fstype \"%s\"\n" msgstr "Directorio de nivel superior \"%s\" tiene fstype \"%s\" no listado\n" -#: src/findlib/find_one.c:418 +#: src/findlib/find_one.c:398 #, c-format msgid "Top level directory \"%s\" has an unlisted drive type \"%s\"\n" msgstr "" "Directorio de nivel superior \"%s\" tiene un tipo de unidad \"%s\" no " "listado\n" -#: src/cats/sql_create.c:101 -#, c-format -msgid "Create DB Job record %s failed. ERR=%s\n" -msgstr "Creación de registro de Job %s en BD fallido. ERR=%s\n" - -#: src/cats/sql_create.c:145 -#, c-format -msgid "Create JobMedia record %s failed: ERR=%s\n" -msgstr "Creación de registro de JobMedia %s fallido. ERR=%s\n" - -#: src/cats/sql_create.c:154 -#, c-format -msgid "Update Media record %s failed: ERR=%s\n" -msgstr "Actualización del registro de Media %s fallido: ERR=%s\n" +#: src/filed/job.c:294 +#, fuzzy, c-format +msgid "Command: \"%s\" is disabled.\n" +msgstr "Job \"%s\" %sabled\n" -#: src/cats/sql_create.c:189 -#, c-format -msgid "pool record %s already exists\n" -msgstr "registro del pool %s ya existe\n" +#: src/filed/job.c:440 +#, fuzzy +msgid "SD connect failed: Bad Hello command\n" +msgstr "Director rechazo comando Hello\n" -#: src/cats/sql_create.c:221 -#, c-format -msgid "Create db Pool record %s failed: ERR=%s\n" -msgstr "Creación del registro BD Pool %s fallido: ERR=%s\n" +#: src/filed/job.c:448 +#, fuzzy, c-format +msgid "SD connect failed: Job name not found: %s\n" +msgstr "Fallo al conectar a FD: Nombre del Job no encontrado: %s\n" -#: src/cats/sql_create.c:254 -#, c-format -msgid "Device record %s already exists\n" -msgstr "Registro de Dispositivo %s ya existe\n" +#: src/filed/job.c:501 +#, fuzzy, c-format +msgid "Bad command from %s. Len=%d.\n" +msgstr "Malo comando Hello desde Director en %s. Len=%d\n" -#: src/cats/sql_create.c:271 -#, c-format -msgid "Create db Device record %s failed: ERR=%s\n" -msgstr "Creación del registro de BD Device %s fallido: ERR=%s\n" +#: src/filed/job.c:555 +msgid "2902 Error scanning cancel command.\n" +msgstr "2902 Error escaneando comando cancelar.\n" -#: src/cats/sql_create.c:306 +#: src/filed/job.c:559 src/filed/job.c:598 #, c-format -msgid "More than one Storage record!: %d\n" -msgstr "Mas de un registro de almacenamiento!: %d\n" +msgid "2901 Job %s not found.\n" +msgstr "2901 Job %s no encontrado.\n" -#: src/cats/sql_create.c:311 -#, c-format -msgid "error fetching Storage row: %s\n" -msgstr "error obteniendo fila del Almacenamiento:%s\n" +#: src/filed/job.c:569 +#, fuzzy, c-format +msgid "2001 Job \"%s\" marked to be %s.\n" +msgstr "2001 Job %s marcado para ser cancelado.\n" -#: src/cats/sql_create.c:332 -#, c-format -msgid "Create DB Storage record %s failed. ERR=%s\n" -msgstr "Creación del registro BD Almacenamiento %s fallido. ERR=%s\n" +#: src/filed/job.c:592 +#, fuzzy, c-format +msgid "2991 Bad setbandwidth command: %s\n" +msgstr "2991 Comando setdebug malo: %s\n" -#: src/cats/sql_create.c:366 +#: src/filed/job.c:645 #, c-format -msgid "mediatype record %s already exists\n" -msgstr "registro de tipo de media %s ya existe\n" +msgid "2991 Bad setdebug command: %s\n" +msgstr "2991 Comando setdebug malo: %s\n" -#: src/cats/sql_create.c:383 +#: src/filed/job.c:678 #, c-format -msgid "Create db mediatype record %s failed: ERR=%s\n" -msgstr "Fallo al crear la db_mediatype_record %s: ERR=%s\n" +msgid "Bad estimate command: %s" +msgstr "Malo comando estimate: %s" -#: src/cats/sql_create.c:424 -#, c-format -msgid "Volume \"%s\" already exists.\n" -msgstr "Volumen \"%s\" ya existe.\n" +#: src/filed/job.c:679 +msgid "2992 Bad estimate command.\n" +msgstr "2992 Malo comando estimación.\n" -#: src/cats/sql_create.c:470 +#: src/filed/job.c:702 #, c-format -msgid "Create DB Media record %s failed. ERR=%s\n" -msgstr "Creación del registro BD Almacenamiento %s fallido. ERR=%s\n" +msgid "Bad Job Command: %s" +msgstr "Malo Comando Job: %s" -#: src/cats/sql_create.c:521 +#: src/filed/job.c:737 #, c-format -msgid "More than one Client!: %d\n" -msgstr "Mas de un cliente!: %d\n" +msgid "Bad RunBeforeJob command: %s\n" +msgstr "Malo comando RunBeforeJob: %s\n" -#: src/cats/sql_create.c:526 -#, c-format -msgid "error fetching Client row: %s\n" -msgstr "error al obtener la fila Cliente:%s\n" +#: src/filed/job.c:738 src/filed/job.c:757 +msgid "2905 Bad RunBeforeJob command.\n" +msgstr "2905 Malo comando RunBeforeJob.\n" -#: src/cats/sql_create.c:554 -#, c-format -msgid "Create DB Client record %s failed. ERR=%s\n" -msgstr "Creación del registro BD Cliente %s fallido. ERR=%s\n" +#: src/filed/job.c:768 +msgid "2905 Bad RunBeforeNow command.\n" +msgstr "2905 Malo comando RunBeforeNow.\n" -#: src/cats/sql_create.c:589 src/cats/sql_get.c:251 +#: src/filed/job.c:787 #, c-format -msgid "More than one Path!: %s for path: %s\n" -msgstr "Mas de un Path!: %s para path: %s\n" +msgid "Bad RunAfter command: %s\n" +msgstr "Malo comando RunAfter: %s\n" -#: src/cats/sql_create.c:596 src/cats/sql_get.c:205 src/cats/sql_get.c:258 -#: src/cats/sql_get.c:640 src/cats/sql_get.c:722 src/cats/sql_get.c:1039 -#: src/cats/sql.c:340 src/cats/sql.c:347 src/cats/postgresql.c:165 -#, c-format -msgid "error fetching row: %s\n" -msgstr "error al obtener la fila:%s\n" +#: src/filed/job.c:788 +msgid "2905 Bad RunAfterJob command.\n" +msgstr "2905 Malo comando RunAfterJob.\n" -#: src/cats/sql_create.c:621 +#: src/filed/job.c:824 #, c-format -msgid "Create db Path record %s failed. ERR=%s\n" -msgstr "Creación del registro Path db %s fallido. ERR=%s\n" +msgid "Bad RunScript command: %s\n" +msgstr "Malo comando RunScript: %s\n" -#: src/cats/sql_create.c:666 -#, c-format -msgid "Create DB Counters record %s failed. ERR=%s\n" -msgstr "Creación del registro BD Contadores %s fallido. ERR=%s\n" +#: src/filed/job.c:825 +msgid "2905 Bad RunScript command.\n" +msgstr "2905 Malo comando RunScript.\n" -#: src/cats/sql_create.c:704 -#, c-format -msgid "More than one FileSet!: %d\n" -msgstr "Más de un FileSet!: %d\n" +#: src/filed/job.c:880 +#, fuzzy, c-format +msgid "Bad RestoreObject command: %s\n" +msgstr "Malo comando storage: %s" -#: src/cats/sql_create.c:709 -#, c-format -msgid "error fetching FileSet row: ERR=%s\n" -msgstr "error al obtener la fila FileSet: ERR=%s\n" +#: src/filed/job.c:945 +#, fuzzy +msgid "2909 Bad RestoreObject command.\n" +msgstr "2905 Malo comando RunBeforeJob.\n" -#: src/cats/sql_create.c:740 -#, c-format -msgid "Create DB FileSet record %s failed. ERR=%s\n" -msgstr "Creación del registro BD FileSet %s fallido. ERR=%s\n" +#: src/filed/job.c:984 +#, fuzzy, c-format +msgid "Plugin Directory not defined. Cannot use plugin: \"%s\"\n" +msgstr "Directorio de Plugin no definido. No se puede usar plug-in: \"%\"\n" -#: src/cats/sql_create.c:989 +#: src/filed/job.c:1026 #, c-format -msgid "Create db File record %s failed. ERR=%s" -msgstr "Creación del registro File db %s fallido. ERR=%s" +msgid "Error running program: %s. stat=%d: ERR=%s\n" +msgstr "Error al ejecutar el programa: %s. stat=%d: ERR=%s\n" -#: src/cats/sql_create.c:1015 +#: src/filed/job.c:1037 #, c-format -msgid "More than one Filename! %s for file: %s\n" -msgstr "Mas de un nombre de Archivo! %s para el archivo: %s\n" +msgid "Cannot open FileSet input file: %s. ERR=%s\n" +msgstr "No se puede abrir archivo de entrada FileSet: %s. ERR=%s\n" -#: src/cats/sql_create.c:1021 +#: src/filed/job.c:1191 #, c-format -msgid "Error fetching row for file=%s: ERR=%s\n" -msgstr "Error al obtener fila para el archivo=%s: ERR=%s\n" +msgid "REGEX %s compile error. ERR=%s\n" +msgstr "Error de compilación REGEX %s. ERR=%s\n" -#: src/cats/sql_create.c:1038 +#: src/filed/job.c:1342 #, c-format -msgid "Create db Filename record %s failed. ERR=%s\n" -msgstr "Creación del registro Filename db %s fallido. ERR=%s\n" +msgid "Invalid FileSet command: %s\n" +msgstr "Comando FilseSet invalido: %s\n" -#: src/cats/sql_create.c:1058 +#: src/filed/job.c:1749 #, c-format -msgid "Attempt to put non-attributes into catalog. Stream=%d\n" -msgstr "Intento de poner non-atributos en el catálogo. Stream=%d\n" - -#: src/cats/sql_create.c:1074 -msgid "Cannot Copy/Migrate job using BaseJob.\n" +msgid "" +"DIR and FD clocks differ by %lld seconds, FD automatically compensating.\n" msgstr "" +"Relojes de DIR y FD difieren por %lld segundos, FD compensando " +"automáticamente.\n" -#: src/cats/sql_create.c:1166 src/cats/sql_get.c:1136 -msgid "ERR=JobIds are empty\n" -msgstr "ERR=JobIds están vacíos\n" - -#: src/cats/sql_create.c:1219 -#, fuzzy, c-format -msgid "Create db Object record %s failed. ERR=%s" -msgstr "Creación del registro File db %s fallido. ERR=%s" - -#: src/cats/sql_get.c:151 +#: src/filed/job.c:1758 #, c-format -msgid "Error fetching row: %s\n" -msgstr "Error obteniendo fila: %s\n" - -#: src/cats/sql_get.c:158 -#, fuzzy, c-format -msgid "get_file_record want 1 got rows=%d PathId=%s FilenameId=%s\n" -msgstr "get_file_record falta 1 obtuvo filas=%d\n" +msgid "Unknown backup level: %s\n" +msgstr "Nivel de copia de seguridad desconocido: %s\n" -#: src/cats/sql_get.c:166 +#: src/filed/job.c:1771 #, c-format -msgid "File record for PathId=%s FilenameId=%s not found.\n" -msgstr "Registro File para PathID=%s FilenameID=%s no encontrado.\n" - -#: src/cats/sql_get.c:172 -msgid "File record not found in Catalog.\n" -msgstr "Registro File no se encuentra en Catalogo.\n" +msgid "Bad level command: %s\n" +msgstr "Malo comando nivel: %s\n" -#: src/cats/sql_get.c:199 +#: src/filed/job.c:1793 #, c-format -msgid "More than one Filename!: %s for file: %s\n" -msgstr "Más de un Filename!: %s en archivo: %s\n" +msgid "Bad session command: %s" +msgstr "Malo comando sesión: %s" -#: src/cats/sql_get.c:209 -#, c-format -msgid "Get DB Filename record %s found bad record: %d\n" -msgstr "Obtener registro BD Filename %s encuentro registro malo: %d\n" +#: src/filed/job.c:1922 +#, fuzzy +msgid "Failed connect from Storage daemon. SD bsock=NULL.\n" +msgstr "Error al conectar con demonio Storage.\n" -#: src/cats/sql_get.c:215 -#, c-format -msgid "Filename record: %s not found.\n" -msgstr "Registro Filename: %s no encontrado.\n" +#: src/filed/job.c:1967 +msgid "ACL support not configured for your machine.\n" +msgstr "Soporte ACL no configurado para su máquina. \n" -#: src/cats/sql_get.c:219 -#, c-format -msgid "Filename record: %s not found in Catalog.\n" -msgstr "Registro Filename: %s no encontrado en Catalogo.\n" +#: src/filed/job.c:1971 +msgid "XATTR support not configured for your machine.\n" +msgstr "Soporte XATTR no está configurado para su máquina.\n" -#: src/cats/sql_get.c:262 -#, c-format -msgid "Get DB path record %s found bad record: %s\n" -msgstr "Obtener registro ruta %s de BD encontró malo registro: %s\n" +#: src/filed/job.c:1980 +msgid "Cannot contact Storage daemon\n" +msgstr "No puede contactar demonio Storage\n" -#: src/cats/sql_get.c:275 +#: src/filed/job.c:1999 #, c-format -msgid "Path record: %s not found.\n" -msgstr "Registro Path: %s no encontrado.\n" +msgid "Bad response to append open: %s\n" +msgstr "Mala respuesta para añadir abierto: %s\n" -#: src/cats/sql_get.c:279 -#, c-format -msgid "Path record: %s not found in Catalog.\n" -msgstr "Registro Path: %s no encontrado en el Catalogo.\n" +#: src/filed/job.c:2004 +msgid "Bad response from stored to open command\n" +msgstr "Mala respuesta desde almacén para comando abrir\n" -#: src/cats/sql_get.c:318 -#, c-format -msgid "No Job found for JobId %s\n" -msgstr "No se encontró un job para el JobId %s\n" +#: src/filed/job.c:2069 +msgid "Append Close with SD failed.\n" +msgstr "Añadir Cierre con SD fallido.\n" -#: src/cats/sql_get.c:391 src/cats/sql_get.c:448 -#, c-format -msgid "No volumes found for JobId=%d\n" -msgstr "Volúmenes no encontrados para JobId=%d\n" +#: src/filed/job.c:2073 +#, fuzzy, c-format +msgid "Bad status %d %c returned from Storage Daemon.\n" +msgstr "Mal estado %d regresado desde demonio Storage.\n" -#: src/cats/sql_get.c:397 src/cats/sql_get.c:459 +#: src/filed/job.c:2095 #, c-format -msgid "Error fetching row %d: ERR=%s\n" -msgstr "Error obteniendo fila %d: ERR=%s\n" +msgid "2994 Bad verify command: %s\n" +msgstr "2994 Malo comando verificar: %s\n" -#: src/cats/sql_get.c:411 +#: src/filed/job.c:2110 src/filed/job.c:2151 #, c-format -msgid "No Volume for JobId %d found in Catalog.\n" -msgstr "Volúmenes para JobId=%d no encontrado en el Catalogo.\n" +msgid "2994 Bad verify level: %s\n" +msgstr "2994 Malo nivel de verificar: %s\n" -#: src/cats/sql_get.c:552 +#: src/filed/job.c:2222 #, c-format -msgid "Pool id select failed: ERR=%s\n" -msgstr "Fallo al selecciona id del Pool: ERR=%s\n" +msgid "Bad replace command. CMD=%s\n" +msgstr "Comando replace malo. CMD=%s\n" -#: src/cats/sql_get.c:589 +#: src/filed/job.c:2248 #, c-format -msgid "Client id select failed: ERR=%s\n" -msgstr "Fallo al seleccionar ID del Cliente: ERR=%s\n" +msgid "Bad where regexp. where=%s\n" +msgstr "Mala regexp where. where=%s\n" -#: src/cats/sql_get.c:635 +#: src/filed/job.c:2344 +msgid "Improper calling sequence.\n" +msgstr "Secuencia de llamada impropia.\n" + +#: src/filed/job.c:2364 #, c-format -msgid "More than one Pool!: %s\n" -msgstr "Mas de un Poll!: %s\n" +msgid "Bad response to SD read open: %s\n" +msgstr "Mala respuesta para SD leer abrir: %s\n" -#: src/cats/sql_get.c:679 -msgid "Pool record not found in Catalog.\n" -msgstr "Registro del Pool no encontrado en Catalogo.\n" +#: src/filed/job.c:2369 +msgid "Bad response from stored to read open command\n" +msgstr "Mala respuesta desde storage para comando leer abir\n" -#: src/cats/sql_get.c:717 +#: src/filed/job.c:2431 #, c-format -msgid "More than one Client!: %s\n" -msgstr "Mas de un Cliente!: %s\n" +msgid "Comm error with SD. bad response to %s. ERR=%s\n" +msgstr "Error de comunicación con SD. Mala respuesta a %s. ERR=%s\n" -#: src/cats/sql_get.c:734 src/cats/sql_get.c:738 -msgid "Client record not found in Catalog.\n" -msgstr "Registro de cliente no encontrado en catalogo.\n" +#: src/filed/job.c:2434 +#, fuzzy, c-format +msgid "Bad response from SD to %s command. Wanted %s, got %s\n" +msgstr "Mala respuesta al comando %s. Esperaba %s, obtuvo %s\n" -#: src/cats/sql_get.c:765 -#, c-format -msgid "More than one Counter!: %d\n" -msgstr "Mas de un Contador!: %d\n" +#: src/filed/filed_conf.c:196 src/filed/filed_conf.c:220 +#, fuzzy, c-format +msgid "Expected a Cipher Type keyword, got: %s" +msgstr "Esperaba una palabra clave Tipo Device, obtuvo: %s" -#: src/cats/sql_get.c:770 +#: src/filed/accurate.c:189 #, c-format -msgid "error fetching Counter row: %s\n" -msgstr "error al obtener fila Contador: %s\n" +msgid "Space saved with Base jobs: %lld MB\n" +msgstr "" -#: src/cats/sql_get.c:790 -#, c-format -msgid "Counter record: %s not found in Catalog.\n" -msgstr "registro Contador: %s no encontrado en Catalogo.\n" +#: src/filed/accurate.c:388 +#, fuzzy, c-format +msgid "Cannot verify checksum for %s\n" +msgstr "No se puede encontrar el recurso Schedule %s\n" -#: src/cats/sql_get.c:830 +#: src/filed/accurate.c:417 src/filed/verify.c:235 src/filed/backup.c:505 #, c-format -msgid "Error got %s FileSets but expected only one!\n" -msgstr "Error al obtener %s FileSets pero se esperaba sólo uno!\n" +msgid "%s digest initialization failed\n" +msgstr "Inicialización de %s Digest ha fallado\n" -#: src/cats/sql_get.c:835 -#, c-format -msgid "FileSet record \"%s\" not found.\n" -msgstr "Registro FileSet \"%s\" no encontrado.\n" +#: src/filed/accurate.c:496 +msgid "2991 Bad accurate command\n" +msgstr "2991 Malo comando accurate\n" -#: src/cats/sql_get.c:845 -msgid "FileSet record not found in Catalog.\n" -msgstr "Registro FileSet no encontrado en Catalogo.\n" +#: src/filed/fd_plugins.c:545 src/filed/fd_plugins.c:689 +#, fuzzy, c-format +msgid "Command plugin \"%s\": no type in startBackupFile packet.\n" +msgstr "Comando plugin \"%s\" regresó malo paquete startBackupFile.\n" -#: src/cats/sql_get.c:941 -#, c-format -msgid "Media id select failed: ERR=%s\n" -msgstr "Fallo al seleccionar ID del Medio: ERR=%s\n" +#: src/filed/fd_plugins.c:558 +#, fuzzy, c-format +msgid "Command plugin \"%s\": no object_name in startBackupFile packet.\n" +msgstr "Comando plugin \"%s\" regresó malo paquete startBackupFile.\n" -#: src/cats/sql_get.c:979 -#, c-format -msgid "query dbids failed: ERR=%s\n" -msgstr "Consulta fallida a dbids: ERR=%s\n" +#: src/filed/fd_plugins.c:571 src/filed/fd_plugins.c:696 +#, fuzzy, c-format +msgid "Command plugin \"%s\": no fname in startBackupFile packet.\n" +msgstr "Comando plugin \"%s\" regresó malo paquete startBackupFile.\n" -#: src/cats/sql_get.c:1034 -#, c-format -msgid "More than one Volume!: %s\n" -msgstr "Mas de un Volumen!: %s\n" +#: src/filed/fd_plugins.c:770 +msgid "Plugin save packet not found.\n" +msgstr "Plugin guardar paquetes no encontrado.\n" -#: src/cats/sql_get.c:1090 +#: src/filed/fd_plugins.c:784 src/filed/fd_plugins.c:800 src/filed/xattr.c:85 +#: src/filed/xattr.c:100 src/filed/xattr.c:108 src/filed/backup.c:1000 +#: src/filed/backup.c:1199 src/filed/backup.c:1236 src/filed/backup.c:1249 +#: src/filed/backup.c:1324 src/filed/backup.c:1423 src/filed/acl.c:96 +#: src/filed/acl.c:111 src/filed/acl.c:119 #, c-format -msgid "Media record MediaId=%s not found.\n" -msgstr "Registro Media MediaID=%s no encontrado.\n" +msgid "Network send error to SD. ERR=%s\n" +msgstr "Error de red al enviar para SD. ERR=%s\n" -#: src/cats/sql_get.c:1093 +#: src/filed/fd_plugins.c:905 #, c-format -msgid "Media record for Volume \"%s\" not found.\n" -msgstr "Registro Media para Volumen \"%s\" no encontrado.\n" +msgid "Plugin=%s not found.\n" +msgstr "Plugin=%s no encontrado.\n" -#: src/cats/sql_get.c:1100 +#: src/filed/fd_plugins.c:972 #, c-format -msgid "Media record for MediaId=%u not found in Catalog.\n" -msgstr "Registro Media para MediaId=%u no encontrado en el Catalogo.\n" +msgid "Plugin createFile call failed. Stat=%d file=%s\n" +msgstr "Fallo llamada plugin createFile. Stat=%d archivo=%s\n" -#: src/cats/sql_get.c:1103 +#: src/filed/fd_plugins.c:977 #, c-format -msgid "Media record for Vol=%s not found in Catalog.\n" -msgstr "Registro Media para Volumen=%s no encontrado en el Catalogo.\n" +msgid "Plugin createFile call failed. Returned CF_ERROR file=%s\n" +msgstr "Fallo llamada plugin createFile. Retorno CF_ERROR archivo=%s\n" + +#: src/filed/fd_plugins.c:1863 +#, fuzzy +msgid "Command plugin: no fname in baculaCheckChanges packet.\n" +msgstr "Comando plugin \"%s\" regresó malo paquete startBackupFile.\n" -#: src/cats/sql_find.c:98 src/cats/sql_find.c:127 src/cats/sql_find.c:182 +#: src/filed/restore.c:102 #, c-format -msgid "" -"Query error for start time request: ERR=%s\n" -"CMD=%s\n" +msgid "Size of data or stream of %s not correct. Original %s, restored %s.\n" msgstr "" -"Error de consulta al solicitar tiempo inicial: ERR=%s\n" -"CMD=%s\n" - -#: src/cats/sql_find.c:104 src/cats/sql_find.c:188 -msgid "No prior Full backup Job record found.\n" -msgstr "No encontrado registro anterior de Job de respaldo completo.\n" +"Tamaño de datos o flujo de %s no es correcto. Original %s, restaurado %s\n" -#: src/cats/sql_find.c:116 +#: src/filed/restore.c:122 #, c-format -msgid "Unknown level=%d\n" -msgstr "Nivel desconocido=%d\n" +msgid "Invalid length of Finder Info (got %d, not 32)\n" +msgstr "Longitud no válida de Buscador de Información (obtuvo %d, no 32)\n" -#: src/cats/sql_find.c:133 +#: src/filed/restore.c:127 #, c-format -msgid "" -"No Job record found: ERR=%s\n" -"CMD=%s\n" -msgstr "" -"No se encuentra el registro de trabajo: ERR=%s\n" -" CMD=%s\n" +msgid "Could not set Finder Info on %s\n" +msgstr "No se pudo establecer Finder Info en %s\n" -#: src/cats/sql_find.c:291 -#, c-format -msgid "Unknown Job level=%d\n" -msgstr "Nivel del Job desconocido=%d\n" +#: src/filed/restore.c:406 +#, fuzzy +msgid "LZO init failed\n" +msgstr "Negociación TLS fallida\n" -#: src/cats/sql_find.c:301 +#: src/filed/restore.c:474 src/filed/verify_vol.c:85 #, c-format -msgid "No Job found for: %s.\n" -msgstr "No se encontró ningún Job para: %s.\n" +msgid "Record header scan error: %s\n" +msgstr "Error analizando registro de cabecera: %s\n" -#: src/cats/sql_find.c:312 +#: src/filed/restore.c:486 src/filed/verify_vol.c:94 #, c-format -msgid "No Job found for: %s\n" -msgstr "Job no encontrado para:%s\n" +msgid "Data record error. ERR=%s\n" +msgstr "Error de registro de datos. ERR=%s\n" -#: src/cats/sql_find.c:393 +#: src/filed/restore.c:490 src/filed/verify_vol.c:98 #, c-format -msgid "Request for Volume item %d greater than max %d or less than 1\n" -msgstr "Solicitud de ítem Volumen %d mayor que el máximo %d o menor que 1\n" +msgid "Actual data size %d not same as header %d\n" +msgstr "Tamaño actual de los datos %d no igual a cabecera %d\n" -#: src/cats/sql_find.c:408 -#, c-format -msgid "No Volume record found for item %d.\n" -msgstr "Registro de ítem Volumen no encontrado %d.\n" +#: src/filed/restore.c:651 +msgid "Unexpected cryptographic session data stream.\n" +msgstr "Inesperado flujo de datos de sesión criptográfica.\n" -#: src/cats/sqlite.c:166 src/cats/ingres.c:255 src/cats/postgresql.c:210 -#: src/cats/dbi.c:228 src/cats/mysql.c:164 -#, c-format -msgid "Unable to initialize DB lock. ERR=%s\n" -msgstr "No se puede inicializar el bloqueo de la BD. ERR=%s\n" +#: src/filed/restore.c:661 +msgid "" +"No private decryption keys have been defined to decrypt encrypted backup " +"data.\n" +msgstr "" +"Ninguna claves privadas de descifrado se ha definido para descifrar los " +"datos cifrados de las copia de seguridad.\n" -#: src/cats/sqlite.c:181 -#, c-format -msgid "Database %s does not exist, please create it.\n" -msgstr "No existe base de datos %s, por favor crearla.\n" +#: src/filed/restore.c:672 +msgid "Could not create digest.\n" +msgstr "No es posible crear sumario.\n" -#: src/cats/sqlite.c:203 -#, c-format -msgid "Unable to open Database=%s. ERR=%s\n" -msgstr "No se puede abrir la base de datos=%s. ERR=%s\n" +#: src/filed/restore.c:690 +msgid "Missing private key required to decrypt encrypted backup data.\n" +msgstr "" +"Falta la clave privada requerida para descifrar los datos del respaldo " +"cifrado.\n" -#: src/cats/sqlite.c:204 -msgid "unknown" -msgstr "desconocido" +#: src/filed/restore.c:693 +msgid "Decrypt of the session key failed.\n" +msgstr "Fallo al descifrar la clave de sesión.\n" -#: src/cats/sqlite.c:462 src/cats/ingres.c:496 src/cats/postgresql.c:506 -#: src/cats/postgresql.c:553 src/cats/dbi.c:631 src/cats/cats.c:149 -#: src/cats/mysql.c:393 -#, c-format -msgid "Query failed: %s: ERR=%s\n" -msgstr "Consulta fallida: %s: ERR=%s\n" +#: src/filed/restore.c:696 +#, fuzzy +msgid "Signer not found. Decryption failed.\n" +msgstr "Fallo en creación de firma" -#: src/cats/ingres.c:87 +#: src/filed/restore.c:699 #, fuzzy -msgid "Failed to allocate space for query filter.\n" -msgstr "No se pudo asignar memoria para la firma de cifrado.\n" +msgid "Unsupported digest algorithm. Decrypt failed.\n" +msgstr "Algoritmo de resumen no soportado" -#: src/cats/ingres.c:108 +#: src/filed/restore.c:702 #, fuzzy -msgid "Failed to allocate space for query filters.\n" -msgstr "No se pudo asignar memoria para la firma de cifrado.\n" +msgid "Unsupported encryption algorithm. Decrypt failed.\n" +msgstr "Algoritmo de cifrado no soportado" -#: src/cats/ingres.c:267 +#: src/filed/restore.c:706 #, fuzzy, c-format msgid "" -"Unable to connect to Ingres server.\n" -"Database=%s User=%s\n" -"It is probably not running or your password is incorrect.\n" +"An error=%d occurred while decoding encrypted session data stream: ERR=%s\n" msgstr "" -"No se puede conectar al servidor MySQL.\n" -"Base de Datos=%s Usuario=%s\n" - -#: src/cats/ingres.c:1087 -#, fuzzy -msgid "A user name for Ingres must be supplied.\n" -msgstr "Un nombre de usuario para DBI debe ser suministrado.\n" +"Se produjo un error al descodificar flujo de datos de sesión encriptados: " +"%s\n" -#: src/cats/sql.c:184 +#: src/filed/restore.c:774 src/filed/restore.c:828 #, c-format -msgid "" -"Potential performance problem:\n" -"max_connections=%d set for %s database \"%s\" should be larger than " -"Director's MaxConcurrentJobs=%d\n" -msgstr "" +msgid "Missing encryption session data stream for %s\n" +msgstr "Falta cifrado de flujo de datos de sesión para %s\n" -#: src/cats/sql.c:229 +#: src/filed/restore.c:782 src/filed/restore.c:835 #, c-format -msgid "" -"query %s failed:\n" -"%s\n" -msgstr "" -"consulta %s fallida:\n" -"%s\n" +msgid "Failed to initialize decryption context for %s\n" +msgstr "Fallo al inicializar el contexto de descifrado para %s\n" -#: src/cats/sql.c:251 +#: src/filed/restore.c:847 #, c-format -msgid "" -"insert %s failed:\n" -"%s\n" -msgstr "" -"Inserción %s fallida:\n" -"%s\n" +msgid "Cannot open resource fork for %s.\n" +msgstr "No se puede abrir recursos fork para %s.\n" + +#: src/filed/restore.c:992 +msgid "Unexpected cryptographic signature data stream.\n" +msgstr "Inesperado signatura de datos de sesión criptográfica.\n" -#: src/cats/sql.c:261 +#: src/filed/restore.c:1000 #, c-format -msgid "Insertion problem: affected_rows=%s\n" -msgstr "Problemas con la inserción: filas afectadas=%s\n" +msgid "Failed to decode message signature for %s\n" +msgstr "No se ha podido descifrar la firma del mensaje para %s\n" -#: src/cats/sql.c:282 +#: src/filed/restore.c:1064 #, c-format -msgid "" -"update %s failed:\n" -"%s\n" -msgstr "" -"Actualizar %s fallida:\n" -"%s\n" +msgid "Encountered %ld acl errors while doing restore\n" +msgstr "Detectado %ld errores de acl mientras que hace restaurar\n" -#: src/cats/sql.c:292 +#: src/filed/restore.c:1068 #, c-format -msgid "Update failed: affected_rows=%s for %s\n" -msgstr "Actualización fallida: celdas afectadas =%s por %s\n" +msgid "Encountered %ld xattr errors while doing restore\n" +msgstr "Detectado %ld errores de xattr al hacer restauración\n" -#: src/cats/sql.c:314 +#: src/filed/restore.c:1072 #, c-format msgid "" -"delete %s failed:\n" -"%s\n" +"%d non-supported data streams and %d non-supported attrib streams ignored.\n" msgstr "" -"Borrado %s fallido:\n" -"%s\n" +"%d incompatible flujos de datos y %d incompatible atributos de flujos " +"ignorados.\n" -#: src/cats/sql.c:408 +#: src/filed/restore.c:1076 #, c-format -msgid "Path length is zero. File=%s\n" -msgstr "La longitud de la ruta es nula. Archivo=%s\n" +msgid "%d non-supported resource fork streams ignored.\n" +msgstr "%d incompatible flujo de recurso fork ignorado.\n" -#: src/cats/sql.c:603 -msgid "No results to list.\n" -msgstr "No hay resultados para listar.\n" +#: src/filed/restore.c:1079 +#, c-format +msgid "%d non-supported Finder Info streams ignored.\n" +msgstr "%d incompatible flujo Finder Info ignorado.\n" -#: src/cats/sql.c:721 -#, fuzzy -msgid "Could not init database batch connection\n" -msgstr "No se pudo iniciar base de datos de Bacula\n" +#: src/filed/restore.c:1082 +#, c-format +msgid "%d non-supported acl streams ignored.\n" +msgstr "%d incompatible flujo de acl ignorado.\n" -#: src/cats/sql.c:727 +#: src/filed/restore.c:1085 #, c-format -msgid "Could not open database \"%s\": ERR=%s\n" -msgstr "No se pudo abrir la base de datos \"%s\": ERR=%s\n" +msgid "%d non-supported crypto streams ignored.\n" +msgstr "%d incompatible flujo de cifrado ignorado.\n" -#: src/cats/postgresql.c:181 +#: src/filed/restore.c:1088 #, c-format -msgid "Encoding error for database \"%s\". Wanted SQL_ASCII, got %s\n" -msgstr "" -"Error de codificación de la base de datos \"%s\". Busco SQL_ASCII, obtuvo " -"%s\n" +msgid "%d non-supported xattr streams ignored.\n" +msgstr "ignorado %d no soportado flujo xattr.\n" -#: src/cats/postgresql.c:246 -#, fuzzy, c-format -msgid "" -"Unable to connect to PostgreSQL server. Database=%s User=%s\n" -"Possible causes: SQL server not running; password incorrect; max_connections " -"exceeded.\n" -msgstr "" -"No se puede conectar al servidor PostgreSQL.\n" -"Base de datos=%s Usuario=%s\n" -", probablemente no funciona o tu contraseña es incorrecta.\n" +#: src/filed/restore.c:1168 +msgid "Zlib errno" +msgstr "Zlib error" -#: src/cats/postgresql.c:350 -msgid "PQescapeStringConn returned non-zero.\n" -msgstr "PQescapeStringConn devuelto no-cero.\n" +#: src/filed/restore.c:1170 +msgid "Zlib stream error" +msgstr "Zlib error de stream" -#: src/cats/postgresql.c:368 -#, fuzzy -msgid "PQescapeByteaConn returned NULL.\n" -msgstr "PQescapeStringConn devuelto no-cero.\n" +#: src/filed/restore.c:1172 +msgid "Zlib data error" +msgstr "Zlib error de datos" -#: src/cats/postgresql.c:399 -#, fuzzy -msgid "PQunescapeByteaConn returned NULL.\n" -msgstr "PQescapeStringConn devuelto no-cero.\n" +#: src/filed/restore.c:1174 +msgid "Zlib memory error" +msgstr "Zlib error de memoria" -#: src/cats/postgresql.c:813 -#, c-format -msgid "error fetching currval: %s\n" -msgstr "error al obtener el valor: %s\n" +#: src/filed/restore.c:1176 +msgid "Zlib buffer error" +msgstr "Zlib error de buffer" -#: src/cats/postgresql.c:1004 src/cats/dbi.c:1277 -#, c-format -msgid "error starting batch mode: %s" -msgstr "Error iniciando modo batch: %s" +#: src/filed/restore.c:1178 +msgid "Zlib version error" +msgstr "Zlib error de version" -#: src/cats/postgresql.c:1034 src/cats/postgresql.c:1041 +#: src/filed/restore.c:1218 #, c-format -msgid "error ending batch mode: %s" -msgstr "Error finalizando modo batch: %s" +msgid "Missing cryptographic signature for %s\n" +msgstr "Falta la firma criptográfica para %s\n" -#: src/cats/postgresql.c:1088 +#: src/filed/restore.c:1251 src/filed/restore.c:1280 #, c-format -msgid "error copying in batch mode: %s" -msgstr "Error copiando en modo batch: %s" +msgid "Signature validation failed for file %s: ERR=%s\n" +msgstr "Validación de la firma fallida para el archivo %s: ERR=%s\n" -#: src/cats/postgresql.c:1110 -msgid "A user name for PostgreSQL must be supplied.\n" -msgstr "Un nombre de usuario para PostgreSQL debe de ser suministrado.\n" +#: src/filed/restore.c:1268 +#, c-format +msgid "Digest one file failed for file: %s\n" +msgstr "Digest de un archivo fallido para el archivo: %s\n" -#: src/cats/sql_list.c:59 +#: src/filed/restore.c:1307 #, c-format -msgid "Query failed: %s\n" -msgstr "Consulta fallida: %s\n" +msgid "Signature validation failed for %s: %s\n" +msgstr "Validación de la firma fallida para %s: %s\n" -#: src/cats/sql_list.c:275 -msgid "These JobIds have copies as follows:\n" -msgstr "Estos JobIds tienen copias de la siguiente manera:\n" +#: src/filed/restore.c:1404 +#, fuzzy, c-format +msgid "LZO uncompression error on file %s. ERR=%d\n" +msgstr "Error de descompresión en el archivo %s. ERR=%s\n" -#: src/cats/sql_list.c:277 -msgid "The catalog contains copies as follows:\n" -msgstr "El catálogo contiene copias de la siguiente manera:\n" +#: src/filed/restore.c:1441 +#, c-format +msgid "Uncompression error on file %s. ERR=%s\n" +msgstr "Error de descompresión en el archivo %s. ERR=%s\n" -#: src/cats/dbi.c:117 +#: src/filed/restore.c:1476 #, c-format -msgid "Unknown database type: %s\n" -msgstr "Tipo de base de datos desconocido: %s\n" +msgid "Write error in Win32 Block Decomposition on %s: %s\n" +msgstr "Error de escritura en Bloque de Descomposición Win32 en %s: %s\n" -#: src/cats/dbi.c:242 +#: src/filed/restore.c:1501 #, c-format -msgid "" -"Unable to locate the DBD drivers to DBI interface in: \n" -"db_driverdir=%s. It is probaly not found any drivers\n" +msgid "Wrong write size error at %lld block=%d wanted=%d wrote=%d\n" msgstr "" -"Incapaz de localizar los controladores de la interfaz DBD para DBI en: \n" -"db_driverdir=%s. Es probable que no se encuentra ningún controlador\n" -#: src/cats/dbi.c:299 -#, fuzzy, c-format +#: src/filed/restore.c:1505 +#, c-format msgid "" -"Unable to connect to DBI interface. Type=%s Database=%s User=%s\n" -"Possible causes: SQL server not running; password incorrect; max_connections " -"exceeded.\n" +"Write write error at %lld block=%d write_len=%d lerror=%d on %s: ERR=%s\n" msgstr "" -"No se pudo conectar a la interfaz DBI.\n" -"Tipo=%s Base de Datos=%s Usuario=%s\n" -"Probablemente no este ejecutando o su contraseña es incorrecta.\n" -#: src/cats/dbi.c:1439 -#, c-format -msgid "error inserting batch mode: %s" -msgstr "Error insertando en modo batch: %s" +#: src/filed/restore.c:1565 +msgid "Decryption error\n" +msgstr "Error de descifrado\n" + +#: src/filed/restore.c:1658 +msgid "Logic error: output file should be open\n" +msgstr "Error lógico: el archivo de salida debe estar abierto\n" -#: src/cats/dbi.c:1456 -msgid "Driver type not specified in Catalog resource.\n" -msgstr "Tipo de controlador no especificado en los recursos de Catálogo.\n" +#: src/filed/restore.c:1696 +msgid "Logic error: output file should not be open\n" +msgstr "Error lógica: archivo de salida no debe estar abierto\n" -#: src/cats/dbi.c:1460 -msgid "Invalid driver type, must be \"dbi:\"\n" -msgstr "Tipo de controlador no válido, debe ser \"dbi:\"\n" +#: src/filed/restore.c:1730 +#, c-format +msgid "Decryption error. buf_len=%d decrypt_len=%d on file %s\n" +msgstr "Error de descifrado. buf_len=%d decrypt_len=%d en el archivo %s\n" -#: src/cats/dbi.c:1464 -msgid "A user name for DBI must be supplied.\n" -msgstr "Un nombre de usuario para DBI debe ser suministrado.\n" +#: src/filed/restore.c:1851 +msgid "Open File Manager paused\n" +msgstr "Administrador Open File pausado\n" -#: src/cats/cats_dummy.c:39 -msgid "Please replace this dummy libbaccats library with a proper one.\n" -msgstr "" +#: src/filed/restore.c:1855 +msgid "FAILED to pause Open File Manager\n" +msgstr "Fallo al pausar Administrador Open File\n" -#: src/cats/sql_delete.c:80 +#: src/filed/restore.c:1863 #, c-format -msgid "No pool record %s exists\n" -msgstr "Registro de pool %s inexistente\n" +msgid "Running as '%s'. Privmask=%#08x\n" +msgstr "Ejecutando como '%s'. Privmask=%#08x\n" -#: src/cats/sql_delete.c:85 -#, c-format -msgid "Expecting one pool record, got %d\n" -msgstr "Esperando un registro pool, tiene %d\n" +#: src/filed/restore.c:1865 +msgid "Failed to retrieve current UserName\n" +msgstr "Fallo al recuperar UserName actual\n" -#: src/cats/sql_delete.c:91 -#, c-format -msgid "Error fetching row %s\n" -msgstr "Error obteniendo fila %s\n" +#: src/filed/verify_vol.c:51 +msgid "Storage command not issued before Verify.\n" +msgstr "Comando Storage no publicado antes de Verificar.\n" -#: src/cats/mysql.c:207 +#: src/filed/verify_vol.c:131 #, c-format -msgid "" -"Unable to connect to MySQL server.\n" -"Database=%s User=%s\n" -"MySQL connect failed either server not running or your authorization is " -"incorrect.\n" -msgstr "" -"No se puede conectar al servidor MySQL.\n" -"Base de Datos=%s Usuario=%s\n" - -#: src/cats/mysql.c:692 -msgid "A user name for MySQL must be supplied.\n" -msgstr "Un nombre de usuario para MySQL debe de ser suministrado.\n" +msgid "Error scanning record header: %s\n" +msgstr "Error escaneando registro de cabecera: %s\n" -#: src/wx-console/console_conf.c:147 src/console/console_conf.c:140 -#: src/qt-console/bat_conf.cpp:141 +#: src/filed/verify_vol.c:194 src/filed/verify.c:202 #, c-format -msgid "No record for %d %s\n" -msgstr "Ningún registro para %d %s\n" +msgid "Network error in send to Director: ERR=%s\n" +msgstr "Error de red en enviar al Director: ERR=%s\n" -#: src/wx-console/console_conf.c:156 src/console/console_conf.c:149 +#: src/filed/authenticate.c:63 #, c-format -msgid "Console: name=%s rcfile=%s histfile=%s\n" -msgstr "Console: nombre=%s rcfile=%s histfile=%s\n" +msgid "I only authenticate directors, not %d\n" +msgstr "Yo sólo autentifico directores, no %d\n" -#: src/wx-console/console_conf.c:160 src/console/console_conf.c:153 -#: src/qt-console/bat_conf.cpp:150 +#: src/filed/authenticate.c:88 #, c-format -msgid "Director: name=%s address=%s DIRport=%d\n" -msgstr "Director: nombre=%s dirección=%s DIRport=%d\n" +msgid "Connection from unknown Director %s at %s rejected.\n" +msgstr "Conexión desde Director %s desconocido en %s rechazada.\n" -#: src/wx-console/authenticate.c:142 src/console/authenticate.c:138 -msgid "TLS negotiation failed\n" -msgstr "Negociación TLS fallida\n" +#: src/filed/authenticate.c:132 +#, c-format +msgid "Incorrect password given by Director at %s.\n" +msgstr "Contraseña incorrecta dada por el Director en %s.\n" -#: src/wx-console/authenticate.c:150 -msgid "Bad response to Hello command: ERR=" -msgstr "mala respuesta al comando Hello: ERR =" +#: src/filed/verify.c:45 +#, c-format +msgid "Cannot malloc %d network read buffer\n" +msgstr "No se pudo leer búfer de red malloc %d\n" -#: src/wx-console/authenticate.c:167 src/console/authenticate.c:169 -#, fuzzy -msgid "" -"Director authorization problem.\n" -"Most likely the passwords do not agree.\n" -"If you are using TLS, there may have been a certificate validation error " -"during the TLS handshake.\n" -"Please see " -msgstr "" -"Problema de Autorización de Director.\n" -"El más probable es que las contraseñas no están de acuerdo.\n" -"Si usted esta utilizando TLS, puede haber habido un error de validación de " -"certificado durante el apretón de manos TLS.\n" -"Por favor, consulte http://www.bacula.org/en/rel-manual/" -"Bacula_Freque_Asked_Questi.html#SECTION003760000000000000000 para ayuda.\n" +#: src/filed/verify.c:115 +#, c-format +msgid " Could not access %s: ERR=%s\n" +msgstr "No es posible acceder %s: ERR=%s\n" -#: src/console/console.c:126 +#: src/filed/verify.c:122 #, c-format -msgid "" -"\n" -"Version: " -msgstr "" -"\n" -"Versión: " +msgid " Could not follow link %s: ERR=%s\n" +msgstr " No es posible seguir el enlace %s: ERR=%s\n" -#: src/console/console.c:178 -msgid "input from file" -msgstr "entrada desde archivo" +#: src/filed/verify.c:129 +#, c-format +msgid " Could not stat %s: ERR=%s\n" +msgstr "No se pudo stat %s: ERR=%s\n" -#: src/console/console.c:179 -msgid "output to file" -msgstr "salida a archivo" +#: src/filed/verify.c:135 src/filed/backup.c:449 +#, c-format +msgid " Unchanged file skipped: %s\n" +msgstr "Archivo sin modificar omitido: %s\n" -#: src/console/console.c:180 -msgid "quit" -msgstr "salir" +#: src/filed/verify.c:138 +#, c-format +msgid " Archive file skipped: %s\n" +msgstr "Archivo Archive omitido: %s\n" -#: src/console/console.c:181 -msgid "output to file and terminal" -msgstr "salida a archivo y pantalla" +#: src/filed/verify.c:141 +#, c-format +msgid " Recursion turned off. Directory skipped: %s\n" +msgstr "Recursión apagado. Directorio omitido: %s\n" -#: src/console/console.c:182 -msgid "sleep specified time" -msgstr "tiempo de espera especificado" +#: src/filed/verify.c:145 +#, c-format +msgid " File system change prohibited. Directory skipped: %s\n" +msgstr "Prohibido el cambio de sistema de archivos. Directorio omitido: %s\n" -#: src/console/console.c:183 -msgid "print current time" -msgstr "imprimir hora actual" +#: src/filed/verify.c:153 +#, c-format +msgid " Could not open directory %s: ERR=%s\n" +msgstr "No se pudo abrir el directorio %s: ERR=%s\n" -#: src/console/console.c:184 -msgid "print Console's version" -msgstr "imprimir la versión de la Consola" +#: src/filed/verify.c:158 +#, c-format +msgid " Unknown file type %d: %s\n" +msgstr "Tipo de archivo desconocido %d: %s\n" -#: src/console/console.c:185 -msgid "echo command string" -msgstr "cadena de comando echo" +#: src/filed/verify.c:297 +#, c-format +msgid " Cannot open %s: ERR=%s.\n" +msgstr "No se puede abrir %s: ERR=%s.\n" -#: src/console/console.c:186 -msgid "execute an external command" -msgstr "ejecutar un comando externo" +#: src/filed/verify.c:311 +#, c-format +msgid " Cannot open resource fork for %s: ERR=%s.\n" +msgstr "No se puede abrir recursos fork para %s: ERR=%s.\n" -#: src/console/console.c:187 -msgid "exit = quit" -msgstr "exit = salir" +#: src/filed/verify.c:374 +#, c-format +msgid "Error reading file %s: ERR=%s\n" +msgstr "Error leyendo archivo %s: ERR=%s\n" -#: src/console/console.c:188 -msgid "zed_keys = use zed keys instead of bash keys" -msgstr "zed_keys = usar las teclas zed en lugar de teclas bash" +#: src/filed/xattr.c:233 +#, c-format +msgid "Illegal xattr stream, no XATTR_MAGIC on file \"%s\"\n" +msgstr "Flujo xattr ilegal, no hay XATTR_MAGIC en el archivo \"%s\"\n" -#: src/console/console.c:189 -msgid "help listing" -msgstr "listado de ayuda" +#: src/filed/xattr.c:247 +#, fuzzy, c-format +msgid "Illegal xattr stream, xattr name length <= 0 on file \"%s\"\n" +msgstr "" +"Ilegal flujo xattr, fallo al analizar flujo xattr en el archivo \"%s\"\n" -#: src/console/console.c:191 -msgid "set command separator" -msgstr "configurar separador de comandos" +#: src/filed/xattr.c:369 src/filed/xattr.c:405 +#, fuzzy, c-format +msgid "llistea error on file \"%s\": ERR=%s\n" +msgstr "error de llistxattr en el archivo \"%s\": ERR=%s\n" -#: src/console/console.c:225 -msgid ": is an invalid command\n" -msgstr ": es un comando invalido\n" +#: src/filed/xattr.c:455 src/filed/xattr.c:509 +#, fuzzy, c-format +msgid "lgetea error on file \"%s\": ERR=%s\n" +msgstr "error de getacl en el archivo \"%s\": ERR=%s\n" -#: src/console/console.c:675 -msgid "Illegal separator character.\n" -msgstr "Ilegal carácter de separación.\n" +#: src/filed/xattr.c:545 src/filed/xattr.c:867 src/filed/xattr.c:1342 +#: src/filed/xattr.c:1810 src/filed/xattr.c:2167 src/filed/xattr.c:2959 +#, c-format +msgid "Xattr stream on file \"%s\" exceeds maximum size of %d bytes\n" +msgstr "Flujo Xattr en el archivo \"%s\" excede el máximo tamaño de %d bytes\n" -#: src/console/console.c:708 -msgid "Command logic problem\n" -msgstr "Problema lógico de comando\n" +#: src/filed/xattr.c:565 src/filed/xattr.c:893 src/filed/xattr.c:1362 +#: src/filed/xattr.c:1840 src/filed/xattr.c:2184 +#, c-format +msgid "Failed to serialize extended attributes on file \"%s\"\n" +msgstr "No se pudo serializar los atributos extendidos en el archivo \"%s\"\n" -#: src/console/console.c:925 +#: src/filed/xattr.c:632 #, fuzzy, c-format -msgid "Can't find %s in Director list\n" -msgstr "No se puede encontrar el recurso Director %s\n" +msgid "lsetea error on file \"%s\": ERR=%s\n" +msgstr "setacl error en el archivo \"%s\": ERR=%s\n" -#: src/console/console.c:933 -msgid "Available Directors:\n" -msgstr "Directors disponibles:\n" +#: src/filed/xattr.c:720 src/filed/xattr.c:758 src/filed/xattr.c:822 +#: src/filed/xattr.c:834 +#, fuzzy, c-format +msgid "attr_list error on file \"%s\": ERR=%s\n" +msgstr "error de extattr_list_link en el archivo \"%s\": ERR=%s\n" -#: src/console/console.c:937 -#, c-format -msgid "%2d: %s at %s:%d\n" -msgstr "%2d: %s en %s:%d\n" +#: src/filed/xattr.c:958 +#, fuzzy, c-format +msgid "Received illegal xattr named %s on file \"%s\"\n" +msgstr "Flujo xattr ilegal, no hay XATTR_MAGIC en el archivo \"%s\"\n" -#: src/console/console.c:941 -msgid "Select Director by entering a number: " -msgstr "Seleccione Director introduciendo un numero:" +#: src/filed/xattr.c:991 src/filed/xattr.c:1001 +#, fuzzy, c-format +msgid "attr_set error on file \"%s\": ERR=%s\n" +msgstr "error de acl_set en el archivo \"%s\": ERR=%s\n" -#: src/console/console.c:948 +#: src/filed/xattr.c:1151 src/filed/xattr.c:1186 #, c-format -msgid "%s is not a number. You must enter a number between 1 and %d\n" -msgstr "%s no es un número. Debe introducir un número entre 1 y %d\n" +msgid "llistxattr error on file \"%s\": ERR=%s\n" +msgstr "error de llistxattr en el archivo \"%s\": ERR=%s\n" -#: src/console/console.c:955 +#: src/filed/xattr.c:1254 src/filed/xattr.c:1306 #, c-format -msgid "You must enter a number between 1 and %d\n" -msgstr "Debe de introducir un numero entre 1 y %d\n" +msgid "lgetxattr error on file \"%s\": ERR=%s\n" +msgstr "error de lgetxattr en el archivo \"%s\": ERR=%s\n" -#: src/console/console.c:1160 src/wx-console/console_thread.cpp:399 -#: src/qt-console/bcomm/dircomm.cpp:131 +#: src/filed/xattr.c:1425 #, c-format -msgid "Failed to initialize TLS context for Console \"%s\".\n" -msgstr "Fallo al inicializar el contexto TLS para la consola \"%s\".\n" +msgid "lsetxattr error on file \"%s\": ERR=%s\n" +msgstr "error de lsetxattr en el archivo \"%s\": ERR=%s\n" -#: src/console/console.c:1180 src/wx-console/console_thread.cpp:420 -#: src/qt-console/bcomm/dircomm.cpp:154 +#: src/filed/xattr.c:1583 src/filed/xattr.c:1618 #, c-format -msgid "Failed to initialize TLS context for Director \"%s\".\n" -msgstr "Fallo al inicializar el contexto TLS para el Director \"%s\".\n" - -#: src/console/console.c:1210 -msgid "Enter a period to cancel a command.\n" -msgstr "Introduzca un período para cancelar un comando.\n" +msgid "extattr_list_link error on file \"%s\": ERR=%s\n" +msgstr "error de extattr_list_link en el archivo \"%s\": ERR=%s\n" -#: src/console/console.c:1304 src/qt-console/main.cpp:232 +#: src/filed/xattr.c:1638 #, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Director \"%s\" in %s. At least one CA certificate store is required.\n" -msgstr "" -"Ni \"Certificado TLS CA\" o \"Directorio de Certificado TLS CA\" están " -"definidos para Director \"%s\" en %s. Por lo menos un almacén de " -"Certificados CA es necesario.\n" +msgid "Failed to convert %d into namespace on file \"%s\"\n" +msgstr "No se pudo convertir %d al namespace en el archivo \"%s\"\n" -#: src/console/console.c:1313 src/qt-console/main.cpp:241 +#: src/filed/xattr.c:1718 src/filed/xattr.c:1773 #, c-format -msgid "" -"No Director resource defined in %s\n" -"Without that I don't how to speak to the Director :-(\n" -msgstr "" -"Recurso Director no definido en %s\n" -"Sin eso no sé cómo hablar con el Director :-(\n" +msgid "extattr_get_link error on file \"%s\": ERR=%s\n" +msgstr "error de extattr_get_link en el archivo \"%s\": ERR=%s\n" -#: src/console/console.c:1333 src/qt-console/main.cpp:262 +#: src/filed/xattr.c:1897 #, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Console \"%s\" in %s.\n" +msgid "Failed to split %s into namespace and name part on file \"%s\"\n" msgstr "" -"Ni \"Certificado TLS CA\" o \"Directorio de Certificado TLS CA\" están " -"definidos para Console \"%s\" en %s.\n" - -#: src/console/console.c:1359 -msgid "Too many arguments on input command.\n" -msgstr "Demasiados argumentos en comando de entrada.\n" +"No se ha podido separar %s en el namespace y parte del nombre en el archivo " +"\"%s\"\n" -#: src/console/console.c:1363 -msgid "First argument to input command must be a filename.\n" -msgstr "" -"Primer argumento para comandos de entrada debe ser un nombre de archivo.\n" +#: src/filed/xattr.c:1910 +#, c-format +msgid "Failed to convert %s into namespace on file \"%s\"\n" +msgstr "No se pudo convertir %s al namespace en el archivo \"%s\"\n" -#: src/console/console.c:1369 +#: src/filed/xattr.c:1931 #, c-format -msgid "Cannot open file %s for input. ERR=%s\n" -msgstr "No se puede abrir el archivo %s para entrada. ERR=%s\n" +msgid "extattr_set_link error on file \"%s\": ERR=%s\n" +msgstr "error de extattr_set_link en el archivo \"%s\": ERR=%s\n" -#: src/console/console.c:1401 -msgid "Too many arguments on output/tee command.\n" -msgstr "Demasiados argumentos en la salida del comando output/tee.\n" +#: src/filed/xattr.c:2034 src/filed/xattr.c:2059 +#, fuzzy, c-format +msgid "getproplist error on file \"%s\": ERR=%s\n" +msgstr "error de getacl en el archivo \"%s\": ERR=%s\n" -#: src/console/console.c:1418 -#, c-format -msgid "Cannot open file %s for output. ERR=%s\n" -msgstr "No se puede abrir el archivo %s para salida. ERR=%s\n" +#: src/filed/xattr.c:2253 +#, fuzzy, c-format +msgid "Unable create proper proplist to restore xattrs on file \"%s\"\n" +msgstr "No es posible leer el contenido de xattr %s en el archivo \"%s\"\n" -#: src/console/console.c:1437 -msgid "Too many arguments. Enclose command in double quotes.\n" -msgstr "Demasiados argumentos. Incluya comando entre comillas dobles.\n" +#: src/filed/xattr.c:2282 +#, fuzzy, c-format +msgid "setproplist error on file \"%s\": ERR=%s\n" +msgstr "strtoacl error en el archivo \"%s\": ERR=%s\n" -#: src/console/console.c:1446 +#: src/filed/xattr.c:2600 src/filed/xattr.c:2653 #, c-format -msgid "Cannot popen(\"%s\", \"r\"): ERR=%s\n" -msgstr "No puede popen(\"%s\", \"r\"): ERR=%s\n" +msgid "Unable to get acl on xattr %s on file \"%s\": ERR=%s\n" +msgstr "No se puede obtener acl en xattr %s en el archivo \"%s\": ERR=%s\n" -#: src/tools/testls.c:59 -#, fuzzy, c-format -msgid "" -"\n" -"Usage: testls [-d debug_level] [-] [pattern1 ...]\n" -" -a print extended attributes (Win32 debug)\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -e specify file of exclude patterns\n" -" -i specify file of include patterns\n" -" -q quiet, don't print filenames (debug)\n" -" - read pattern(s) from stdin\n" -" -? print this message.\n" -"\n" -"Patterns are file inclusion -- normally directories.\n" -"Debug level >= 1 prints each file found.\n" -"Debug level >= 10 prints path/file for catalog.\n" -"Errors always printed.\n" -"Files/paths truncated is number with len > 255.\n" -"Truncation is only in catalog.\n" -"\n" +#: src/filed/xattr.c:2670 +#, c-format +msgid "Unable to get acl text on xattr %s on file \"%s\": ERR=%s\n" msgstr "" -"\n" -"Utilice: testls [-d nivel_ depuración] [-] [patrón1 ...]\n" -" -a imprime atributos extendidos (depuración de Win32)\n" -" -d establece nivel de depuración para \n" -" -dt imprime timestamp en salida de depuración\n" -" -e especifica archivo de exclusión de patrones\n" -" -i especifica archivo de inclusión de patrones\n" -" - leer patrón(es) desde stdin\n" +"No se puede obtener acl texto en xattr %s en el archivo \"%s\": ERR=%s\n" -#: src/tools/testls.c:155 +#: src/filed/xattr.c:2744 #, c-format -msgid "Could not open include file: %s\n" -msgstr "No se pudo abrir el archivo incluir: %s\n" +msgid "Unable to get status on xattr %s on file \"%s\": ERR=%s\n" +msgstr "No se puede obtener estado en xattr %s en el archivo \"%s\": ERR=%s\n" -#: src/tools/testls.c:168 +#: src/filed/xattr.c:2877 #, c-format -msgid "Could not open exclude file: %s\n" -msgstr "No se pudo abrir el archivo excluir: %s\n" +msgid "Unable to open xattr %s on \"%s\": ERR=%s\n" +msgstr "No se puede abrir xattr %s en \"%s\": ERR=%s\n" -#: src/tools/testls.c:182 +#: src/filed/xattr.c:2900 #, c-format -msgid "Files seen = %d\n" -msgstr "" +msgid "Unable to read symlin %s on \"%s\": ERR=%s\n" +msgstr "No se puede leer symlin %s en \"%s\": ERR=%s\n" -#: src/tools/testls.c:215 src/tools/testfind.c:322 +#: src/filed/xattr.c:2975 #, c-format -msgid "Err: Could not access %s: %s\n" -msgstr "Err: No es posible acceder %s: %s\n" +msgid "Unable to read content of xattr %s on file \"%s\"\n" +msgstr "No es posible leer el contenido de xattr %s en el archivo \"%s\"\n" -#: src/tools/testls.c:218 src/tools/testfind.c:325 +#: src/filed/xattr.c:3015 #, c-format -msgid "Err: Could not follow ff->link %s: %s\n" -msgstr "Err: no podía seguir ff->link %s: %s\n" +msgid "Unable to chdir to xattr space of file \"%s\": ERR=%s\n" +msgstr "No se puede chdir a xattr espacio de archivo \"%s\": ERR=%s\n" -#: src/tools/testls.c:221 src/tools/testfind.c:328 +#: src/filed/xattr.c:3072 src/filed/xattr.c:3321 #, c-format -msgid "Err: Could not stat %s: %s\n" -msgstr "Err: no se pudo stat %s: %s\n" +msgid "Unable to open file \"%s\": ERR=%s\n" +msgstr "No se puede abrir el archivo \"%s\": ERR=%s\n" -#: src/tools/testls.c:224 src/tools/testfind.c:331 +#: src/filed/xattr.c:3100 src/filed/xattr.c:3382 #, c-format -msgid "Skip: File not saved. No change. %s\n" -msgstr "Saltar: Archivo no guardado. Sin cambios. %s\n" +msgid "Unable to open xattr space %s on file \"%s\": ERR=%s\n" +msgstr "No se puede abrir espacio xattr %s en el archivo \"%s\": ERR=%s\n" -#: src/tools/testls.c:227 src/tools/testfind.c:334 +#: src/filed/xattr.c:3116 src/filed/xattr.c:3346 #, c-format -msgid "Err: Attempt to backup archive. Not saved. %s\n" -msgstr "Err: Intento de copia de seguridad. No guardado. %s\n" +msgid "Unable to chdir to xattr space on file \"%s\": ERR=%s\n" +msgstr "No se puede chdir a xattr espacio en el archivo \"%s\": ERR=%s\n" -#: src/tools/testls.c:230 +#: src/filed/xattr.c:3137 #, c-format -msgid "Recursion turned off. Directory not entered. %s\n" -msgstr "Recursión deshabilitada. No entró al directorio. %s\n" +msgid "Unable to list the xattr space on file \"%s\": ERR=%s\n" +msgstr "No se puede listar el xattr espacio en el archivo \"%s\": ERR=%s\n" -#: src/tools/testls.c:233 +#: src/filed/xattr.c:3229 #, c-format -msgid "Skip: File system change prohibited. Directory not entered. %s\n" -msgstr "" -"Saltar: Cambio de sistema de archivos prohibido. No entró al directorio. %s\n" +msgid "Unable to convert acl from text on file \"%s\"\n" +msgstr "No se puede convertir acl de texto en el archivo \"%s\"\n" -#: src/tools/testls.c:236 src/tools/testfind.c:337 +#: src/filed/xattr.c:3239 src/filed/xattr.c:3262 #, c-format -msgid "Err: Could not open directory %s: %s\n" -msgstr "Err: no se pudo abrir el directorio %s: %s\n" +msgid "Unable to restore acl of xattr %s on file \"%s\": ERR=%s\n" +msgstr "No se puede restablecer acl de xattr %s en el archivo \"%s\": ERR=%s\n" -#: src/tools/testls.c:239 src/tools/testfind.c:340 +#: src/filed/xattr.c:3335 #, c-format -msgid "Err: Unknown file ff->type %d: %s\n" -msgstr "Err: Archivo desconocido ff->tipo %d: %s\n" +msgid "Unable to open xattr space on file \"%s\": ERR=%s\n" +msgstr "No se puede abrir xattr espacio en el archivo \"%s\": ERR=%s\n" -#: src/tools/bvfs_test.c:56 src/tools/ing_test.c:57 +#: src/filed/xattr.c:3365 src/filed/xattr.c:3527 #, c-format -msgid "" -"\n" -"Version: %s (%s)\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -n specify the database name (default bacula)\n" -" -u specify database user name (default bacula)\n" -" -P specify database host (default NULL)\n" -" -w specify working directory\n" -" -j specify jobids\n" -" -p specify path\n" -" -f specify file\n" -" -l maximum tuple to fetch\n" -" -T truncate cache table before starting\n" -" -v verbose\n" -" -? print this message\n" -"\n" -msgstr "" -"\n" -"Versión: %s (%s)\n" -" -d establece nivel de depuración para \n" -" -dt imprime timestamp en salida de depuración\n" -" -n especifica el nombre de la base de datos (por defecto bacula)\n" -" -u especifica el nombre de usuario de la base de datos (por " -"defecto bacula)\n" -" -P especifica la contraseña de la base de datos (por defecto " -"none)\n" -" -h especifica servidor de la base de datos (por defecto NULL)\n" -" -w especifica el directorio de trabajo\n" -" -j especifica jobids\n" -" -p especifica la ruta\n" -" -f especifica el archivo\n" -" -l tupla máxima a buscar\n" -" -T Truncar tabla de caché antes de empezar\n" -" -v detallado\n" -" -? imprime esta mensaje\n" -"\n" +msgid "Unable to open xattr %s on file \"%s\": ERR=%s\n" +msgstr "No se puede abrir xattr %s en el archivo \"%s\": ERR=%s\n" -#: src/tools/bbatch.c:79 -#, fuzzy, c-format +#: src/filed/xattr.c:3399 +#, c-format +msgid "Unable to chdir to xattr space %s on file \"%s\": ERR=%s\n" +msgstr "No se puede chdir a xattr espacio de %s en el archivo \"%s\": ERR=%s\n" + +#: src/filed/xattr.c:3439 +#, c-format +msgid "Unable to mkfifo xattr %s on file \"%s\": ERR=%s\n" +msgstr "No se puede mkfifo xattr %s en el archivo \"%s\": ERR=%s\n" + +#: src/filed/xattr.c:3457 +#, c-format +msgid "Unable to mknod xattr %s on file \"%s\": ERR=%s\n" +msgstr "No se puede mknode xattr %s en el archivo \"%s\": ERR=%s\n" + +#: src/filed/xattr.c:3475 +#, c-format +msgid "Unable to mkdir xattr %s on file \"%s\": ERR=%s\n" +msgstr "No se puede mkdir xattr %s en el archivo \"%s\": ERR=%s\n" + +#: src/filed/xattr.c:3495 +#, c-format +msgid "Unable to link xattr %s to %s on file \"%s\": ERR=%s\n" +msgstr "No se puede link xattr %s para %s en el archivo \"%s\": ERR=%s\n" + +#: src/filed/xattr.c:3548 +#, c-format msgid "" -"\n" -"Version: %s (%s)\n" -"Example : bbatch -w /path/to/workdir -h localhost -f dat1 -f dat -f datx\n" -" will start 3 thread and load dat1, dat and datx in your catalog\n" -"See bbatch.c to generate datafile\n" -"\n" -"Usage: bbatch [ options ] -w working/dir -f datafile\n" -" -b with batch mode\n" -" -B without batch mode\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -n specify the database name (default bacula)\n" -" -u specify database user name (default bacula)\n" -" -P specify database host (default NULL)\n" -" -w specify working directory\n" -" -r call restore code with given jobids\n" -" -v verbose\n" -" -f specify data file\n" -" -? print this message\n" -"\n" +"Unable to restore data of xattr %s on file \"%s\": Not all data available in " +"xattr stream\n" msgstr "" -"\n" -"Versión: %s (%s)\n" -"Ejemplo : bbatch -w /ruta/para/directorio/trabajo -h localhost -f dat1 -f " -"dat -f datx\n" -" inicializará 3 hilos y cargará dat1, dat y datx en su catalogo\n" -"Vea bbatch.c para generar archivos de datos\n" -"\n" -"Utilice: bbatch [opciones] -w directorio/trabajo -f archivo_de_datos\n" -" -d establece nivel de depuración para \n" -" -dt imprime timestamp en salida de depuración\n" -" -n especifica el nombre de la base de datos (por defecto bacula)\n" -" -u especifica el nombre de usuario de la base de datos (por " -"defecto bacula)\n" -" -P especifica la contraseña de la base de datos (por defecto " -"none)\n" -" -h especifica servidor de la base de datos (por defecto NULL)\n" -" -w especifica el directorio de trabajo\n" -" -v detallado\n" -" -f especifica archivo de datos\n" -" -? imprime esta mensaje\n" -"\n" +"No se puede restaurar los datos de xattr %s en el archivo \"%s\": No todos " +"los datos disponibles en flujo xattr\n" -#: src/tools/bbatch.c:211 +#: src/filed/xattr.c:3561 #, c-format -msgid "Computing file list for jobid=%s files=%lld secs=%d\n" +msgid "Unable to restore data of xattr %s on file \"%s\": ERR=%s\n" msgstr "" +"No se puede restaurar los datos de xattr %s en el archivo \"%s\": ERR=%s\n" -#: src/tools/bbatch.c:315 +#: src/filed/xattr.c:3584 #, c-format -msgid "Error opening datafile %s\n" -msgstr "Error abriendo archivo de datos %s\n" - -#: src/tools/bbatch.c:325 -msgid "Error while inserting file\n" -msgstr "Error insertando el archivo\n" +msgid "Unable to symlink xattr %s to %s on file \"%s\": ERR=%s\n" +msgstr "No se puede symlink xattr %s para %s en el archivo \"%s\": ERR=%s\n" -#: src/tools/ing_test.c:231 src/tools/ing_test.c:264 src/tools/ing_test.c:302 -msgid "Stmt went wrong\n" +#: src/filed/xattr.c:3620 +#, c-format +msgid "Unable to restore owner of xattr %s on file \"%s\": ERR=%s\n" msgstr "" +"No es posible restablecer el propietario de xattr %s en el archivo \"%s\": " +"ERR=%s\n" -#: src/tools/ing_test.c:320 -msgid "CREATE-Stmt went wrong\n" +#: src/filed/xattr.c:3648 +#, c-format +msgid "Unable to restore filetimes of xattr %s on file \"%s\": ERR=%s\n" msgstr "" +"No es posible restablecer filetimes de xattr %s en el archivo \"%s\": ERR=" +"%s\n" -#: src/tools/ing_test.c:325 -msgid "DROP-Stmt went wrong\n" +#: src/filed/xattr.c:3664 +#, c-format +msgid "Illegal xattr stream, failed to parse xattr stream on file \"%s\"\n" msgstr "" +"Ilegal flujo xattr, fallo al analizar flujo xattr en el archivo \"%s\"\n" + +#: src/filed/xattr.c:3725 +#, c-format +msgid "Failed to restore extensible attributes on file \"%s\"\n" +msgstr "Fallo al restablecer atributos extensible en el archivo \"%s\"\n" + +#: src/filed/xattr.c:3738 +#, c-format +msgid "Failed to restore extended attributes on file \"%s\"\n" +msgstr "Fallo al restablecer atributos extendidos en el archivo \"%s\"\n" + +#: src/filed/xattr.c:3832 src/filed/acl.c:2253 +#, fuzzy, c-format +msgid "Unable to stat file \"%s\": ERR=%s\n" +msgstr "No se puede abrir el archivo \"%s\": ERR=%s\n" -#: src/tools/fstype.c:48 +#: src/filed/xattr.c:3882 #, c-format msgid "" -"\n" -"Usage: fstype [-v] path ...\n" -"\n" -" Print the file system type a given file/directory is on.\n" -" The following options are supported:\n" -"\n" -" -v print both path and file system type.\n" -" -? print this message.\n" -"\n" +"Can't restore Extended Attributes of %s - incompatible xattr stream " +"encountered - %d\n" msgstr "" -"\n" -"Utilice: fstype [-v] ruta ...\n" -"\n" -" Imprime el tipo de sistema de archivo de un determinado archivo/" -"directorio.\n" -"Las siguientes opciones son compatibles:\n" -"\n" -" -v imprimir tanto tipo de rutas y sistema de archivos.\n" -" -? imprimir este mensaje.\n" -"\n" +"No se puede restaurar los atributos extendidos de %s - incompatible flujo " +"xattr encontrado - %d\n" -#: src/tools/fstype.c:102 src/tools/drivetype.c:78 +#: src/filed/backup.c:90 +msgid "Cannot set buffer size FD->SD.\n" +msgstr "No puede establecer el tamaño del búfer FD-> SD.\n" + +#: src/filed/backup.c:182 #, c-format -msgid "%s: unknown\n" -msgstr "%s: desconocido\n" +msgid "Encountered %ld acl errors while doing backup\n" +msgstr "Detectado %ld errores de acl al hacer copia de seguridad\n" -#: src/tools/bregex.c:153 src/tools/bwild.c:122 src/tools/bregtest.c:137 +#: src/filed/backup.c:186 #, c-format -msgid "Could not open data file: %s\n" -msgstr "No se pudo abrir el archivo de datos: %s\n" +msgid "Encountered %ld xattr errors while doing backup\n" +msgstr "Detectado %ld errores de xattr al hacer copia de seguridad\n" + +#: src/filed/backup.c:253 +#, fuzzy +msgid "Unsupported cipher on this system.\n" +msgstr "Tipo de cifrado especificados no soportado\n" + +#: src/filed/backup.c:259 src/filed/backup.c:268 +msgid "An error occurred while encrypting the stream.\n" +msgstr "A ocurrido un error al cifrar el stream.\n" + +#: src/filed/backup.c:386 +#, c-format +msgid " Recursion turned off. Will not descend from %s into %s\n" +msgstr "Recursión desactivado. No descenderá de %s dentro de %s\n" -#: src/tools/drivetype.c:47 +#: src/filed/backup.c:393 #, fuzzy, c-format -msgid "" -"\n" -"Usage: drivetype [-v] path ...\n" -"\n" -" Print the drive type a given file/directory is on.\n" -" The following options are supported:\n" -"\n" -" -l print local fixed hard drive\n" -" -a display information on all drives\n" -" -v print both path and file system type.\n" -" -? print this message.\n" -"\n" +msgid " %s is a different filesystem. Will not descend from %s into it.\n" msgstr "" -"\n" -"Utilice: drivetype [-v] ruta ...\n" -"\n" -" Imprime el tipo de unidad dado a archivo/directorio esta activada.\n" -" Las siguientes opciones están soportados:\n" -"\n" -" -v imprime ambos tipos de rutas y archivo de sistemas.\n" -" -? imprime esta mensaje.\n" -"\n" +"%s es un sistema de ficheros diferentes. No descenderá de %s dentro de %s\n" -#: src/tools/testfind.c:70 +#: src/filed/backup.c:399 #, c-format -msgid "" -"\n" -"Usage: testfind [-d debug_level] [-] [pattern1 ...]\n" -" -a print extended attributes (Win32 debug)\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -c specify config file containing FileSet resources\n" -" -f specify which FileSet to use\n" -" -? print this message.\n" -"\n" -"Patterns are used for file inclusion -- normally directories.\n" -"Debug level >= 1 prints each file found.\n" -"Debug level >= 10 prints path/file for catalog.\n" -"Errors are always printed.\n" -"Files/paths truncated is the number of files/paths with len > 255.\n" -"Truncation is only in the catalog.\n" -"\n" -msgstr "" -"\n" -"Utilice: testfind [-d nivel_ depuración] [-] [patrón1 ...]\n" -" -a imprime atributos extendidos (depuración de Win32)\n" -" -d establece nivel de depuración para \n" -" -dt imprime timestamp en salida de depuración\n" -" -c especifica archivo de conteniendo recursos FileSet\n" -" -f especifica cual FileSet para usar\n" -" -? imprime esta mensaje.\n" -"\n" -"Los patrones son archivos de inclusión - normalmente directorios.\n" -"Nivel de depuración >= 1 imprime cada archivo encontrado.\n" -"Nivel de depuración >= 10 imprime ruta/archivo para catalogo.\n" -"Los errores siempre se imprimen.\n" -"Archivos/rutas truncados es numero con longitud > 255.\n" -"Truncamiento es sólo en catálogo..\n" -"\n" +msgid " Disallowed filesystem. Will not descend from %s into %s\n" +msgstr "Sistema de Archivos no permitido. No descenderá de %s en %s\n" -#: src/tools/testfind.c:235 +#: src/filed/backup.c:404 #, c-format -msgid "" -"\n" -"Total files : %d\n" -"Max file length: %d\n" -"Max path length: %d\n" -"Files truncated: %d\n" -"Paths truncated: %d\n" -"Hard links : %d\n" -msgstr "" -"\n" -"Total de Archivos : %d\n" -"Longitud máxima de archivo: %d\n" -"Longitud máxima de ruta: %d\n" -"Archivos truncados: %d\n" -"Rutas truncadas: %d\n" -"Enlaces duros : %d\n" +msgid " Disallowed drive type. Will not descend into %s\n" +msgstr "Tipo de unidad no permitido. No descenderá en %s\n" -#: src/tools/testfind.c:278 +#: src/filed/backup.c:415 #, c-format -msgid "Reg: %s\n" -msgstr "Reg: %s\n" +msgid " Socket file skipped: %s\n" +msgstr "Archivo de Socket omitido: %s\n" -#: src/tools/testfind.c:300 -msgid "\t[will not descend: recursion turned off]" -msgstr "\t[no descenderá: recursividad desactivado]" +#: src/filed/backup.c:428 +#, c-format +msgid " Could not access \"%s\": ERR=%s\n" +msgstr "No se pudo acceder a \"%s\": ERR=%s\n" -#: src/tools/testfind.c:302 -msgid "\t[will not descend: file system change not allowed]" -msgstr "\t[no descenderá: no permitido cambio de sistema de archivo]" +#: src/filed/backup.c:435 +#, c-format +msgid " Could not follow link \"%s\": ERR=%s\n" +msgstr "No se pudo seguir el enlace \"%s\": ERR=%s\n" -#: src/tools/testfind.c:304 -msgid "\t[will not descend: disallowed file system]" -msgstr "\t[no descenderá: sistema de archivo no permitido]" +#: src/filed/backup.c:442 +#, c-format +msgid " Could not stat \"%s\": ERR=%s\n" +msgstr "No se pudo stat \"%s\": ERR=%s\n" -#: src/tools/testfind.c:306 -msgid "\t[will not descend: disallowed drive type]" -msgstr "\t[no descenderá: tipo de unidad no permitido]" +#: src/filed/backup.c:452 +#, c-format +msgid " Archive file not saved: %s\n" +msgstr "Archivo no guardado: %s\n" + +#: src/filed/backup.c:456 +#, c-format +msgid " Could not open directory \"%s\": ERR=%s\n" +msgstr "No se puede abrir directorio \"%s\": ERR=%s.\n" + +#: src/filed/backup.c:465 +#, c-format +msgid " Unknown file type %d; not saved: %s\n" +msgstr " Tipo de archivo %d desconocido; no ha sido guardado: %s\n" -#: src/tools/testfind.c:390 +#: src/filed/backup.c:521 #, c-format -msgid "===== Filename truncated to 255 chars: %s\n" -msgstr "===== Nombre de Archivo truncado para 255 caracteres: %s\n" +msgid "%s signature digest initialization failed\n" +msgstr "Fallo la inicialización de la firma digest %s\n" -#: src/tools/testfind.c:407 +#: src/filed/backup.c:629 #, c-format -msgid "========== Path name truncated to 255 chars: %s\n" -msgstr "========== Nombre de Ruta truncado para 255 caracteres: %s\n" +msgid " Cannot open \"%s\": ERR=%s.\n" +msgstr "No se puede abrir \"%s\": ERR=%s.\n" -#: src/tools/testfind.c:416 +#: src/filed/backup.c:666 #, c-format -msgid "========== Path length is zero. File=%s\n" -msgstr "========== La longitud de la ruta es nula. Archivo=%s\n" +msgid " Cannot open resource fork for \"%s\": ERR=%s.\n" +msgstr "No se puede abrir recurso fork para \"%s\": ERR=%s.\n" + +#: src/filed/backup.c:762 +msgid "Failed to allocate memory for crypto signature.\n" +msgstr "No se pudo asignar memoria para la firma de cifrado.\n" + +#: src/filed/backup.c:767 +#, fuzzy +msgid "An error occurred while adding signer the stream.\n" +msgstr "Se produjo un error al firmar el stream.\n" + +#: src/filed/backup.c:773 src/filed/backup.c:788 +msgid "An error occurred while signing the stream.\n" +msgstr "Se produjo un error al firmar el stream.\n" -#: src/tools/testfind.c:419 +#: src/filed/backup.c:812 +msgid "An error occurred finalizing signing the stream.\n" +msgstr "Se produjo un error concluir la firma del stream.\n" + +#: src/filed/backup.c:931 #, c-format -msgid "Path: %s\n" -msgstr "Ruta: %s\n" +msgid "Compression deflateParams error: %d\n" +msgstr "Error de compresión DeflateParams: %d\n" -#: src/tools/cats_test.c:60 -#, fuzzy, c-format -msgid "" -"\n" -"Version: %s (%s)\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -n specify the database name (default bacula)\n" -" -u specify database user name (default bacula)\n" -" -P specify database host (default NULL)\n" -" -w specify working directory\n" -" -p specify path\n" -" -f specify file\n" -" -l maximum tuple to fetch\n" -" -q print only errors\n" -" -v verbose\n" -" -? print this message\n" -"\n" -msgstr "" -"\n" -"Versión: %s (%s)\n" -" -d establece nivel de depuración para \n" -" -dt imprime timestamp en salida de depuración\n" -" -n especifica el nombre de la base de datos (por defecto bacula)\n" -" -u especifica el nombre de usuario de la base de datos (por " -"defecto bacula)\n" -" -P especifica la contraseña de la base de datos (por defecto " -"none)\n" -" -h especifica servidor de la base de datos (por defecto NULL)\n" -" -w especifica el directorio de trabajo\n" -" -j especifica jobids\n" -" -p especifica la ruta\n" -" -f especifica el archivo\n" -" -l tupla máxima a buscar\n" -" -T Truncar tabla de caché antes de empezar\n" -" -v detallado\n" -" -? imprime esta mensaje\n" -"\n" +#: src/filed/backup.c:968 +#, fuzzy +msgid "Encrypting sparse or offset data not supported.\n" +msgstr "Cifrado de datos dispersos no soportado.\n" -#: src/tools/cats_test.c:376 -#, fuzzy, c-format -msgid "Could not open, database \"%s\".\n" -msgstr "No se puede abrir la base de datos \"%s\".\n" +#: src/filed/backup.c:975 +msgid "Failed to initialize encryption context.\n" +msgstr "Fallo al inicializar el contexto de cifrado.\n" -#: src/tools/bsmtp.c:151 +#: src/filed/backup.c:1086 #, c-format -msgid "Fatal malformed reply from %s: %s\n" -msgstr "Fatal malformación de respuesta desde %s: %s\n" +msgid "Compression deflate error: %d\n" +msgstr "Error de compresión Deflate: %d\n" -#: src/tools/bsmtp.c:159 +#: src/filed/backup.c:1093 #, c-format -msgid "Fatal fgets error: ERR=%s\n" -msgstr "fgets fatal error: ERR=%s\n" +msgid "Compression deflateReset error: %d\n" +msgstr "Error de compresión DeflateReset: %d\n" -#: src/tools/bsmtp.c:192 +#: src/filed/backup.c:1126 #, fuzzy, c-format -msgid "" -"\n" -"Usage: %s [-f from] [-h mailhost] [-s subject] [-c copy] [recipient ...]\n" -" -4 forces bsmtp to use IPv4 addresses only.\n" -" -6 forces bsmtp to use IPv6 addresses only.\n" -" -8 set charset to UTF-8\n" -" -a use any ip protocol for address resolution\n" -" -c set the Cc: field\n" -" -d set debug level to \n" -" -dt print a timestamp in debug output\n" -" -f set the From: field\n" -" -h use mailhost:port as the SMTP server\n" -" -s set the Subject: field\n" -" -r set the Reply-To: field\n" -" -l set the maximum number of lines to send (default: " -"unlimited)\n" -" -? print this message.\n" -"\n" -msgstr "" -"\n" -"Utilice: %s [-f desde] [-h servidor de correo] [-s asunto] [-c con copia] " -"[destinatario ...]\n" -" -8 conjunto charset a UTF-8\n" -" -c establece el campo Cc:\n" -" -d establece el nivel de depuración para \n" -" -dt imprime un timestamp en salida de depuración\n" -" -f establece el campo Desde:\n" -" -h use servidor de correo:puerto como servidor SMTP\n" -" -s establece el campo Asunto:\n" -" -r establece el campo Responder-Para:\n" -" -l establece el número máximo de líneas a enviar (por defecto: sin límite)\n" -" -? imprimir este mensaje.\n" -"\n" +msgid "Compression LZO error: %d\n" +msgstr "Error de compresión Deflate: %d\n" -#: src/tools/bsmtp.c:379 -msgid "Fatal error: no recipient given.\n" -msgstr "Fatal error: destinatario no determinado.\n" +#: src/filed/backup.c:1171 src/filed/backup.c:1187 +msgid "Encryption error\n" +msgstr "Error de cifrado\n" -#: src/tools/bsmtp.c:407 +#: src/filed/backup.c:1213 #, c-format -msgid "Fatal gethostname error: ERR=%s\n" -msgstr "gethostname fatal error: ERR=%s\n" +msgid "Read error on file %s. ERR=%s\n" +msgstr "Error de lectura en el archivo %s. ERR=%s\n" -#: src/tools/bsmtp.c:418 +#: src/filed/backup.c:1216 #, fuzzy, c-format -msgid "Fatal getaddrinfo for myself failed \"%s\": ERR=%s\n" -msgstr "Fallo fatal gethostbyname para mi mismo \"%s\": ERR=%s\n" +msgid "Too many errors. JobErrors=%d.\n" +msgstr "Demasiados errores.\n" -#: src/tools/bsmtp.c:426 -#, c-format -msgid "Fatal gethostbyname for myself failed \"%s\": ERR=%s\n" -msgstr "Fallo fatal gethostbyname para mi mismo \"%s\": ERR=%s\n" +#: src/filed/backup.c:1226 +msgid "Encryption padding error\n" +msgstr "Error de relleno de cifrado\n" + +#: src/filed/backup.c:1290 +msgid "Invalid file flags, no supported data stream type.\n" +msgstr "Invalidas banderas de archivo, tipo de flujo de datos no soportado.\n" -#: src/tools/bsmtp.c:486 src/tools/bsmtp.c:521 +#: src/filed/backup.c:1548 #, c-format -msgid "Error unknown mail host \"%s\": ERR=%s\n" -msgstr "Error servidor de correo \"%s\" desconocido: ERR=%s\n" +msgid "VSS Writer (BackupComplete): %s\n" +msgstr "VSS Writer (BackupComplete): %s\n" -#: src/tools/bsmtp.c:489 src/tools/bsmtp.c:524 -msgid "Retrying connection using \"localhost\".\n" -msgstr "Reintentando la conexión usando \"localhost\".\n" +#: src/filed/acl.c:217 src/filed/acl.c:242 +#, fuzzy, c-format +msgid "aclx_get error on file \"%s\": ERR=%s\n" +msgstr "error de acl_get en el archivo \"%s\": ERR=%s\n" -#: src/tools/bsmtp.c:514 +#: src/filed/acl.c:268 #, fuzzy, c-format -msgid "Failed to connect to mailhost %s\n" -msgstr "Fallo al conectar con el cliente.\n" +msgid "Unknown acl type encountered on file \"%s\": %ld\n" +msgstr "" +"codificación errónea del tipo de ACL en el flujo de ACL en el archivo \"%s" +"\" \n" -#: src/tools/bsmtp.c:532 -#, c-format -msgid "Fatal error: Unknown address family for smtp host: %d\n" +#: src/filed/acl.c:292 src/filed/acl.c:301 +#, fuzzy, c-format +msgid "Failed to convert acl into text on file \"%s\"\n" +msgstr "No se puede convertir acl de texto en el archivo \"%s\"\n" + +#: src/filed/acl.c:374 +#, fuzzy, c-format +msgid "" +"Trying to restore POSIX acl on file \"%s\" on filesystem without AIXC acl " +"support\n" msgstr "" -"Fatal error: Desconocida familia de direcciones para servidor smtp: %d\n" +"Tratando de restaurar acl en el archivo \"%s\" en sistema de ficheros sin " +"soporte a acl\n" -#: src/tools/bsmtp.c:541 src/tools/bsmtp.c:546 -#, c-format -msgid "Fatal socket error: ERR=%s\n" -msgstr "Fatal error de socket: ERR=%s\n" +#: src/filed/acl.c:382 +#, fuzzy, c-format +msgid "" +"Trying to restore NFSv4 acl on file \"%s\" on filesystem without NFS4 acl " +"support\n" +msgstr "" +"Tratando de restaurar acl en el archivo \"%s\" en sistema de ficheros sin " +"soporte a acl\n" -#: src/tools/bsmtp.c:551 -#, c-format -msgid "Fatal connect error to %s: ERR=%s\n" -msgstr "Fatal error de conexión para %s: ERR=%s\n" +#: src/filed/acl.c:430 src/filed/acl.c:440 +#, fuzzy, c-format +msgid "aclx_scanStr error on file \"%s\": ERR=%s\n" +msgstr "error de acl_set en el archivo \"%s\": ERR=%s\n" -#: src/tools/bsmtp.c:560 -#, c-format -msgid "Fatal _open_osfhandle error: ERR=%s\n" -msgstr "Fatal error _open_osfhandle: ERR=%s\n" +#: src/filed/acl.c:466 +#, fuzzy, c-format +msgid "aclx_put error on file \"%s\": ERR=%s\n" +msgstr "error de acl_get en el archivo \"%s\": ERR=%s\n" -#: src/tools/bsmtp.c:567 src/tools/bsmtp.c:571 src/tools/bsmtp.c:580 -#: src/tools/bsmtp.c:584 +#: src/filed/acl.c:811 #, c-format -msgid "Fatal fdopen error: ERR=%s\n" -msgstr "Fatal error fdopen: ERR=%s\n" +msgid "acl_to_text error on file \"%s\": ERR=%s\n" +msgstr "acl_to_text error en el archivo \"%s\": ERR=%s\n" -#: src/tools/bsmtp.c:576 +#: src/filed/acl.c:841 #, c-format -msgid "Fatal dup error: ERR=%s\n" -msgstr "Fatal error dup: ERR=%s\n" +msgid "acl_get_file error on file \"%s\": ERR=%s\n" +msgstr "error de acl_get_file en el archivo \"%s\": ERR=%s\n" -#: src/tools/dbcheck.c:195 +#: src/filed/acl.c:894 +#, fuzzy, c-format msgid "" -"Warning skipping the additional parameters for working directory/dbname/user/" -"password/host.\n" -msgstr "" -"Advertencia, saltando los parámetros adicionales para el directorio de " -"trabajo/dbname/usuario/contraseña/maquina.\n" +"acl_delete_def_file error on file \"%s\": filesystem doesn't support ACLs\n" +msgstr "acl_delete_def_file error en el archivo \"%s\": ERR=%s\n" -#: src/tools/dbcheck.c:212 +#: src/filed/acl.c:900 #, c-format -msgid "Error can not find the Catalog name[%s] in the given config file [%s]\n" -msgstr "" -"Error, no puede encontrar el nombre del Catálogo [%s] en el archivo [%s] de " -"configuración dado\n" +msgid "acl_delete_def_file error on file \"%s\": ERR=%s\n" +msgstr "acl_delete_def_file error en el archivo \"%s\": ERR=%s\n" -#: src/tools/dbcheck.c:214 +#: src/filed/acl.c:911 #, c-format -msgid "Error there is no Catalog section in the given config file [%s]\n" -msgstr "" -"Error, no hay una sección de Catálogo en el archivo de configuración dado " -"[% s]\n" - -#: src/tools/dbcheck.c:223 -msgid "Error no Director resource defined.\n" -msgstr "Error, recurso Director no definido.\n" - -#: src/tools/dbcheck.c:247 -msgid "Wrong number of arguments.\n" -msgstr "Número incorrecto de argumentos.\n" +msgid "acl_from_text error on file \"%s\": ERR=%s\n" +msgstr "acl_from_text error en el archivo \"%s\": ERR=%s\n" -#: src/tools/dbcheck.c:252 -msgid "Working directory not supplied.\n" -msgstr "Directorio de trabajo no suministrado.\n" +#: src/filed/acl.c:927 +#, c-format +msgid "acl_valid error on file \"%s\": ERR=%s\n" +msgstr "error de acl_valid en el archivo \"%s\": ERR=%s\n" -#: src/tools/dbcheck.c:288 -msgid "Database port must be a numeric value.\n" -msgstr "Puerto de la BD debe ser un valor numérico.\n" +#: src/filed/acl.c:959 +#, fuzzy, c-format +msgid "acl_set_file error on file \"%s\": filesystem doesn't support ACLs\n" +msgstr "acl_set_file error en el archivo \"%s\": ERR=%s\n" -#: src/tools/dbcheck.c:291 -msgid "Database port must be a int value.\n" -msgstr "Puerto de la BD debe ser un valor entero.\n" +#: src/filed/acl.c:968 +#, c-format +msgid "acl_set_file error on file \"%s\": ERR=%s\n" +msgstr "acl_set_file error en el archivo \"%s\": ERR=%s\n" -#: src/tools/dbcheck.c:365 +#: src/filed/acl.c:1075 src/filed/acl.c:1104 src/filed/acl.c:1218 +#: src/filed/acl.c:1726 src/filed/acl.c:1833 #, c-format -msgid "Hello, this is the database check/correct program.\n" +msgid "pathconf error on file \"%s\": ERR=%s\n" +msgstr "error de pathconf en el archivo \"%s\": ERR=%s\n" + +#: src/filed/acl.c:1234 +#, fuzzy, c-format +msgid "" +"Trying to restore acl on file \"%s\" on filesystem without %s acl support\n" msgstr "" -"Hola, este es el programa de comprobación/corrección de la base de datos.\n" +"Tratando de restaurar acl en el archivo \"%s\" en sistema de ficheros sin " +"soporte a acl\n" -#: src/tools/dbcheck.c:367 +#: src/filed/acl.c:1519 #, c-format -msgid "Modify database is on." -msgstr "Modificación de base de datos esta activada." +msgid "getacl error on file \"%s\": ERR=%s\n" +msgstr "error de getacl en el archivo \"%s\": ERR=%s\n" -#: src/tools/dbcheck.c:369 +#: src/filed/acl.c:1554 #, c-format -msgid "Modify database is off." -msgstr "Modificación base de datos esta desactivada." +msgid "acltostr error on file \"%s\": ERR=%s\n" +msgstr "altostr error en el archivo \"%s\": ERR=%s\n" -#: src/tools/dbcheck.c:371 src/tools/dbcheck.c:432 +#: src/filed/acl.c:1576 src/filed/acl.c:1586 #, c-format -msgid " Verbose is on.\n" -msgstr "Detallado esta activado.\n" +msgid "strtoacl error on file \"%s\": ERR=%s\n" +msgstr "strtoacl error en el archivo \"%s\": ERR=%s\n" + +#: src/filed/acl.c:1615 +#, fuzzy, c-format +msgid "setacl error on file \"%s\": filesystem doesn't support ACLs\n" +msgstr "" +"Tratando de restaurar acl en el archivo \"%s\" en sistema de ficheros sin " +"soporte a acl\n" -#: src/tools/dbcheck.c:373 src/tools/dbcheck.c:434 +#: src/filed/acl.c:1623 #, c-format -msgid " Verbose is off.\n" -msgstr "Detallado está apagado.\n" +msgid "setacl error on file \"%s\": ERR=%s\n" +msgstr "setacl error en el archivo \"%s\": ERR=%s\n" -#: src/tools/dbcheck.c:375 +#: src/filed/acl.c:1748 #, c-format -msgid "Please select the function you want to perform.\n" -msgstr "Por favor seleccione la función que desea realizar.\n" +msgid "acl_get error on file \"%s\": ERR=%s\n" +msgstr "error de acl_get en el archivo \"%s\": ERR=%s\n" -#: src/tools/dbcheck.c:379 +#: src/filed/acl.c:1822 #, c-format msgid "" -"\n" -" 1) Toggle modify database flag\n" -" 2) Toggle verbose flag\n" -" 3) Repair bad Filename records\n" -" 4) Repair bad Path records\n" -" 5) Eliminate duplicate Filename records\n" -" 6) Eliminate duplicate Path records\n" -" 7) Eliminate orphaned Jobmedia records\n" -" 8) Eliminate orphaned File records\n" -" 9) Eliminate orphaned Path records\n" -" 10) Eliminate orphaned Filename records\n" -" 11) Eliminate orphaned FileSet records\n" -" 12) Eliminate orphaned Client records\n" -" 13) Eliminate orphaned Job records\n" -" 14) Eliminate all Admin records\n" -" 15) Eliminate all Restore records\n" -" 16) All (3-15)\n" -" 17) Quit\n" +"Trying to restore acl on file \"%s\" on filesystem without acl support\n" msgstr "" -"\n" -" 1) Activar bandera modificar base de datos\n" -" 2) Activar bandera detallado\n" -" 3) Reparar malos registros de Nombre de Archivo\n" -" 4) Reparar malos registros de Rutas\n" -" 5) Eliminar registros de Nombre de Archivo duplicados\n" -" 6) Eliminar registros de Rutas duplicados\n" -" 7) Eliminar registros de Jobmedia huérfanos\n" -" 8) Eliminar registros de Archivo huérfanos\n" -" 9) Eliminar registros de Rutas huérfanos\n" -" 10) Eliminar registros de nombre de archivo huérfanos\n" -" 11) Eliminar registros de FileSet huérfanos\n" -" 12) Eliminar registros de Cliente huérfanos\n" -" 13) Eliminar registros de Job huérfanos\n" -" 14) Eliminar todos los registros de Administración\n" -" 15) Eliminar todos los registros de Restauración\n" -" 16) Todos (3-15)\n" -" 17) Salir\n" +"Tratando de restaurar acl en el archivo \"%s\" en sistema de ficheros sin " +"soporte a acl\n" -#: src/tools/dbcheck.c:398 -#, c-format +#: src/filed/acl.c:1851 +#, fuzzy, c-format msgid "" -"\n" -" 1) Toggle modify database flag\n" -" 2) Toggle verbose flag\n" -" 3) Check for bad Filename records\n" -" 4) Check for bad Path records\n" -" 5) Check for duplicate Filename records\n" -" 6) Check for duplicate Path records\n" -" 7) Check for orphaned Jobmedia records\n" -" 8) Check for orphaned File records\n" -" 9) Check for orphaned Path records\n" -" 10) Check for orphaned Filename records\n" -" 11) Check for orphaned FileSet records\n" -" 12) Check for orphaned Client records\n" -" 13) Check for orphaned Job records\n" -" 14) Check for all Admin records\n" -" 15) Check for all Restore records\n" -" 16) All (3-15)\n" -" 17) Quit\n" +"Trying to restore POSIX acl on file \"%s\" on filesystem without aclent acl " +"support\n" msgstr "" -"\n" -" 1) Activar bandera modificar base de datos\n" -" 2) Activar bandera detallado\n" -" 3) Verificar malos registros de Nombre de Archivo\n" -" 4) Verificar malos registros de Rutas\n" -" 5) Verificar registros de Nombre de Archivo duplicados\n" -" 6) Verificar registros de Rutas duplicados\n" -" 7) Verificar registros de Jobmedia huérfanos\n" -" 8) Verificar registros de Archivo huérfanos\n" -" 9) Verificar registros de Rutas huérfanos\n" -" 10) Verificar registros de nombre de archivo huérfanos\n" -" 11) Verificar registros de FileSet huérfanos\n" -" 12) Verificar registros de Cliente huérfanos\n" -" 13) Verificar registros de Job huérfanos\n" -" 14) Verificar todos los registros de Administración\n" -" 15) Verificar todos los registros de Restauración\n" -" 16) Todos (3-15)\n" -" 17) Salir\n" +"Tratando de restaurar acl en el archivo \"%s\" en sistema de ficheros sin " +"soporte a acl aclent\n" -#: src/tools/dbcheck.c:418 -msgid "Select function number: " -msgstr "Seleccione número de función:" +#: src/filed/acl.c:1862 +#, fuzzy, c-format +msgid "" +"Trying to restore NFSv4 acl on file \"%s\" on filesystem without ace acl " +"support\n" +msgstr "" +"Tratando de restaurar acl en el archivo \"%s\" en sistema de ficheros sin " +"soporte a acl ace\n" -#: src/tools/dbcheck.c:425 +#: src/filed/acl.c:1878 #, c-format -msgid "Database will be modified.\n" -msgstr "Base de datos será modificada.\n" +msgid "acl_fromtext error on file \"%s\": ERR=%s\n" +msgstr "error de acl_fromtext en el archivo \"%s\": ERR=%s\n" -#: src/tools/dbcheck.c:427 +#: src/filed/acl.c:1892 src/filed/acl.c:1900 #, c-format -msgid "Database will NOT be modified.\n" -msgstr "Base de datos NO será modificada.\n" +msgid "wrong encoding of acl type in acl stream on file \"%s\"\n" +msgstr "" +"codificación errónea del tipo de ACL en el flujo de ACL en el archivo \"%s" +"\" \n" -#: src/tools/dbcheck.c:518 +#: src/filed/acl.c:1925 #, c-format -msgid "JobId=%s Name=\"%s\" StartTime=%s\n" -msgstr "JobId=%s Nombre=\"%s\" HoraInicio=%s\n" +msgid "acl_set error on file \"%s\": ERR=%s\n" +msgstr "error de acl_set en el archivo \"%s\": ERR=%s\n" -#: src/tools/dbcheck.c:525 +#: src/filed/acl.c:2011 #, c-format -msgid "Orphaned JobMediaId=%s JobId=%s Volume=\"%s\"\n" -msgstr "Huérfanos JobMediaId=%s JobId=%s Volumen=\"%s\"\n" +msgid "acltotext error on file \"%s\": ERR=%s\n" +msgstr "acltotext error en el archivo \"%s\": ERR=%s\n" -#: src/tools/dbcheck.c:532 +#: src/filed/acl.c:2034 #, c-format -msgid "Orphaned FileId=%s JobId=%s Volume=\"%s\"\n" -msgstr "Huérfanos FileId=%s JobId=%s Volumen=\"%s\"\n" +msgid "aclfromtext error on file \"%s\": ERR=%s\n" +msgstr "aclfromtext error en el archivo \"%s\": ERR=%s\n" -#: src/tools/dbcheck.c:539 +#: src/filed/acl.c:2054 #, c-format -msgid "Orphaned FileSetId=%s FileSet=\"%s\" MD5=%s\n" -msgstr "Huérfanos FileSetId=%s FileSet=\"%s\" MD5=%s\n" +msgid "acl(SETACL) error on file \"%s\": ERR=%s\n" +msgstr "acl(SETACL) error en el archivo \"%s\": ERR=%s\n" + +#: src/filed/acl.c:2120 +#, fuzzy, c-format +msgid "pioctl VIOCGETAL error on file \"%s\": ERR=%s\n" +msgstr "acl(SETACL) error en el archivo \"%s\": ERR=%s\n" + +#: src/filed/acl.c:2148 +#, fuzzy, c-format +msgid "pioctl VIOCSETAL error on file \"%s\": ERR=%s\n" +msgstr "acl(SETACL) error en el archivo \"%s\": ERR=%s\n" -#: src/tools/dbcheck.c:546 +#: src/filed/acl.c:2351 #, c-format -msgid "Orphaned ClientId=%s Name=\"%s\"\n" -msgstr "Huérfanos ClientId=%s Nombre=\"%s\"\n" +msgid "Can't restore ACLs of %s - incompatible acl stream encountered - %d\n" +msgstr "" +"No puede restaurar ACL de %s - incompatible flujo acl encontrado - %d\n" + +#: src/filed/filed.c:52 +#, fuzzy, c-format +msgid "" +"\n" +"%sVersion: %s (%s)\n" +"\n" +"Usage: bacula-fd [-f -s] [-c config_file] [-d debug_level]\n" +" -c use as configuration file\n" +" -d [,] set debug level to , debug tags to \n" +" -dt print a timestamp in debug output\n" +" -f run in foreground (for debugging)\n" +" -g groupid\n" +" -k keep readall capabilities\n" +" -m print kaboom output (for debugging)\n" +" -s no signals (for debugging)\n" +" -t test configuration file and exit\n" +" -T set trace on\n" +" -u userid\n" +" -v verbose user messages\n" +" -? print this message.\n" +"\n" +msgstr "" +"\n" +"Version: %s (%s)\n" +"\n" +"Utilice: bacula-fd [-f -s] [-c archivo_de_configuración] [-d " +"nivel_depuración]\n" +" -c establecer archivo de configuración para archivo \n" +" -d establecer el nivel de depuración para \n" +" -dt imprimir timestamp en salida de depuración\n" +" -f ejecutar en primer plano (para depuración)\n" +" -g groupid\n" +" -k keep readall capabilities\n" +" -m imprimir salida kaboom para depuración)\n" +" -s sin señales(para depuración)\n" +" -t prueba - leer la configuración y salir\n" +" -u userid\n" +" -v mensajes de usuario detallados\n" +" -? imprimir este mensaje.\n" +"\n" -#: src/tools/dbcheck.c:599 +#: src/filed/filed.c:185 +msgid "-k option has no meaning without -u option.\n" +msgstr "la opción -k no tiene sentido sin la opción -u.\n" + +#: src/filed/filed.c:315 #, c-format -msgid "Deleting: %s\n" -msgstr "Eliminando: %s\n" +msgid "" +"No File daemon resource defined in %s\n" +"Without that I don't know who I am :-(\n" +msgstr "" +"Ninguno recurso File Daemon definido en %s\n" +"Sin eso yo no sé quién soy :-(\n" -#: src/tools/dbcheck.c:671 +#: src/filed/filed.c:320 #, c-format -msgid "Checking for duplicate Filename entries.\n" -msgstr "Comprobando entradas Nombre de Archivo(Filename) duplicadas.\n" +msgid "Only one Client resource permitted in %s\n" +msgstr "Sólo un recurso de cliente permitido en %s\n" -#: src/tools/dbcheck.c:682 +#: src/filed/filed.c:348 src/filed/filed.c:547 +#, fuzzy, c-format +msgid "Disable Command \"%s\" not found.\n" +msgstr "Registro FileSet \"%s\" no encontrado.\n" + +#: src/filed/filed.c:375 #, c-format -msgid "Found %d duplicate Filename records.\n" -msgstr "Encontrados %d registros Nombre de Archivo(Filename) duplicados.\n" +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"File daemon in %s.\n" +msgstr "" +"Ninguno \"Certificado TLS de CA\" o \"Directorio de Certificado TLS de CA\" " +"están definidos para el demonio File en %s.\n" -#: src/tools/dbcheck.c:683 -msgid "Print the list? (yes/no): " -msgstr "Imprimir la lista? (sí/no):" +#: src/filed/filed.c:399 +msgid "PKI encryption/signing enabled but not compiled into Bacula.\n" +msgstr "Cifrado o Firma PKI habilitado, pero no compilado en Bacula.\n" -#: src/tools/dbcheck.c:706 src/tools/dbcheck.c:771 +#: src/filed/filed.c:410 #, c-format -msgid "Found %d for: %s\n" -msgstr "Encontrados %d para: %s\n" +msgid "" +"\"PKI Key Pair\" must be defined for File daemon \"%s\" in %s if either " +"\"PKI Sign\" or \"PKI Encrypt\" are enabled.\n" +msgstr "" +"\"Par de Claves PKI\" debe estar definido para el demonio File \"%s\" en %s, " +"si uno o otro \"Firma PKI\" o \"Cifrar PKI\" están habilitados.\n" + +#: src/filed/filed.c:422 src/filed/filed.c:453 src/filed/filed.c:503 +msgid "Failed to allocate a new keypair object.\n" +msgstr "No se ha podido asignar un nuevo objeto keypair.\n" -#: src/tools/dbcheck.c:736 +#: src/filed/filed.c:426 #, c-format -msgid "Checking for duplicate Path entries.\n" -msgstr "Comprobando entradas Path duplicadas.\n" +msgid "Failed to load public certificate for File daemon \"%s\" in %s.\n" +msgstr "Fallo al cargar certificado publico para File Daemon \"%s\" en %s.\n" -#: src/tools/dbcheck.c:747 +#: src/filed/filed.c:432 #, c-format -msgid "Found %d duplicate Path records.\n" -msgstr "Encontrados %d registros de Rutas duplicados.\n" +msgid "Failed to load private key for File daemon \"%s\" in %s.\n" +msgstr "Fallo al cargar llave privada para File Daemon \"%s\" en %s.\n" -#: src/tools/dbcheck.c:748 src/tools/dbcheck.c:810 src/tools/dbcheck.c:856 -#: src/tools/dbcheck.c:924 src/tools/dbcheck.c:982 src/tools/dbcheck.c:1025 -#: src/tools/dbcheck.c:1067 src/tools/dbcheck.c:1109 src/tools/dbcheck.c:1146 -#: src/tools/dbcheck.c:1179 src/tools/dbcheck.c:1213 src/tools/dbcheck.c:1280 -msgid "Print them? (yes/no): " -msgstr "Imprimirlos? (sí/no):" +#: src/filed/filed.c:462 +#, c-format +msgid "Failed to load private key from file %s for File daemon \"%s\" in %s.\n" +msgstr "" +"Fallo al cargar llave privada desde el archivo %s para File Daemon \"%s\" en " +"%s.\n" -#: src/tools/dbcheck.c:801 +#: src/filed/filed.c:469 #, c-format -msgid "Checking for orphaned JobMedia entries.\n" -msgstr "Comprobando entradas JobMedia huérfanas.\n" +msgid "" +"Failed to load trusted signer certificate from file %s for File daemon \"%s" +"\" in %s.\n" +msgstr "" +"Fallo al cargar certificado del firmante desde el archivo %s para File " +"Daemon \"%s\" en %s.\n" -#: src/tools/dbcheck.c:809 +#: src/filed/filed.c:509 #, c-format -msgid "Found %d orphaned JobMedia records.\n" -msgstr "Encontrados %d registros JobMedia huérfanos.\n" +msgid "" +"Failed to load master key certificate from file %s for File daemon \"%s\" in " +"%s.\n" +msgstr "" +"Fallo al cargar certificado de llave maestro desde el archivo %s para File " +"Daemon \"%s\" en %s.\n" -#: src/tools/dbcheck.c:827 +#: src/filed/filed.c:525 #, c-format -msgid "Deleting %d orphaned JobMedia records.\n" -msgstr "Eliminando %d registros JobMedia huérfanos.\n" +msgid "No Director resource defined in %s\n" +msgstr "Recurso Director no definido en %s\n" -#: src/tools/dbcheck.c:844 -#, c-format -msgid "Checking for orphaned File entries. This may take some time!\n" -msgstr "Comprobando entradas Files huérfanas. Esto puede tomar algún tiempo.\n" +#: src/filed/status.c:82 +#, fuzzy, c-format +msgid "Daemon started %s. Jobs: run=%d running=%d.\n" +msgstr "Demonio iniciado %s, %d Job ejecutando desde el inicio.\n" -#: src/tools/dbcheck.c:855 -#, c-format -msgid "Found %d orphaned File records.\n" -msgstr "Encontrados %d registros File huérfanos.\n" +#: src/filed/status.c:143 +#, fuzzy, c-format +msgid "" +" Sizes: boffset_t=%d size_t=%d debug=%s trace=%d mode=%d,%d bwlimit=%skB/s\n" +msgstr "Sizeof: boffset_t=%d size_t=%d debug=%d trace=%d\n" -#: src/tools/dbcheck.c:872 +#: src/filed/status.c:199 #, c-format -msgid "Deleting %d orphaned File records.\n" -msgstr "Eliminando %d registros File huérfanos.\n" +msgid "Director connected at: %s\n" +msgstr "Director conectado en: %s\n" -#: src/tools/dbcheck.c:891 +#: src/filed/status.c:201 #, c-format -msgid "Pruning orphaned Path entries isn't possible when using BVFS.\n" -msgstr "" +msgid "JobId %d Job %s is running.\n" +msgstr "JobId %d Job %s se está ejecutando.\n" -#: src/tools/dbcheck.c:900 src/tools/dbcheck.c:958 -msgid "Create temporary index? (yes/no): " -msgstr "Crear índice temporal? (sí/no):" +#: src/filed/status.c:204 +#, fuzzy, c-format +msgid " %s%s %s Job started: %s\n" +msgstr " %s%s Job iniciado: %s\n" + +#: src/filed/status.c:232 +#, fuzzy, c-format +msgid "" +" Files=%s Bytes=%s AveBytes/sec=%s LastBytes/sec=%s Errors=%d\n" +" Bwlimit=%s\n" +msgstr "Archivos=%s Bytes=%s Bytes/sec=%s Errores=%d\n" -#: src/tools/dbcheck.c:912 +#: src/filed/status.c:242 #, c-format -msgid "Checking for orphaned Path entries. This may take some time!\n" +msgid " Files: Restored=%s Expected=%s Completed=%d%%\n" msgstr "" -"Comprobando de entradas huérfanas de Ruta. Esto puede tomar algún tiempo!\n" -#: src/tools/dbcheck.c:923 -#, c-format -msgid "Found %d orphaned Path records.\n" -msgstr "Se han encontrado %d registros huérfanos de Ruta.\n" +#: src/filed/status.c:247 +#, fuzzy, c-format +msgid " Files: Examined=%s Backed up=%s\n" +msgstr "Archivos examinados=%s\n" -#: src/tools/dbcheck.c:936 +#: src/filed/status.c:260 #, c-format -msgid "Deleting %d orphaned Path records.\n" -msgstr "Eliminando %d registros huérfanos de Ruta.\n" +msgid " Processing file: %s\n" +msgstr "Procesando archivo: %s\n" -#: src/tools/dbcheck.c:970 -#, c-format -msgid "Checking for orphaned Filename entries. This may take some time!\n" -msgstr "" -"Comprobando de entradas de Nombre de Archivo huérfanos. Esto puede tomar " -"algún tiempo!\n" +#: src/filed/status.c:271 +msgid " SDSocket closed.\n" +msgstr "SDSocket cerrado.\n" -#: src/tools/dbcheck.c:981 -#, c-format -msgid "Found %d orphaned Filename records.\n" -msgstr "Se han encontrado %d registros de Nombre de Archivos huérfanos.\n" +#: src/filed/status.c:281 +msgid "====\n" +msgstr "====\n" -#: src/tools/dbcheck.c:994 -#, c-format -msgid "Deleting %d orphaned Filename records.\n" -msgstr "Eliminando %d registros de Nombre de Archivos huérfanos.\n" +#: src/filed/status.c:343 +#, fuzzy +msgid " SDSocket=closed\n" +msgstr "SDSocket cerrado.\n" -#: src/tools/dbcheck.c:1014 +#: src/filed/status.c:393 src/filed/status.c:427 #, c-format -msgid "Checking for orphaned FileSet entries. This takes some time!\n" -msgstr "" -"Comprobando de entradas FileSet huérfanos. Esto puede tomar algún tiempo!\n" +msgid "Bad .status command: %s\n" +msgstr "Comando .status malo: %s\n" -#: src/tools/dbcheck.c:1024 -#, c-format -msgid "Found %d orphaned FileSet records.\n" -msgstr "Se han encontrado %d registros FileSet huérfanos.\n" +#: src/filed/status.c:394 +msgid "2900 Bad .status command, missing argument.\n" +msgstr "2900 Malo comando .status, falta argumento.\n" -#: src/tools/dbcheck.c:1039 -#, c-format -msgid "Deleting %d orphaned FileSet records.\n" -msgstr "Eliminando %d registros FileSet huérfanos.\n" +#: src/filed/status.c:428 +msgid "2900 Bad .status command, wrong argument.\n" +msgstr "2900 Malo comando .status, malo argumento.\n" -#: src/tools/dbcheck.c:1048 +#: src/tools/bregex.c:141 src/tools/bregtest.c:125 src/tools/bwild.c:110 #, c-format -msgid "Checking for orphaned Client entries.\n" +msgid "Could not open data file: %s\n" +msgstr "No se pudo abrir el archivo de datos: %s\n" + +#: src/tools/bbatch.c:67 +#, fuzzy, c-format +msgid "" +"\n" +"Version: %s (%s)\n" +"Example : bbatch -w /path/to/workdir -h localhost -f dat1 -f dat -f datx\n" +" will start 3 thread and load dat1, dat and datx in your catalog\n" +"See bbatch.c to generate datafile\n" +"\n" +"Usage: bbatch [ options ] -w working/dir -f datafile\n" +" -b with batch mode\n" +" -B without batch mode\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -n specify the database name (default bacula)\n" +" -u specify database user name (default bacula)\n" +" -P specify database host (default NULL)\n" +" -w specify working directory\n" +" -r call restore code with given jobids\n" +" -v verbose\n" +" -f specify data file\n" +" -? print this message\n" +"\n" msgstr "" -"Comprobando entradas de Clientes huérfanos. Esto puede tomar algún tiempo!\n" +"\n" +"Versión: %s (%s)\n" +"Ejemplo : bbatch -w /ruta/para/directorio/trabajo -h localhost -f dat1 -f " +"dat -f datx\n" +" inicializará 3 hilos y cargará dat1, dat y datx en su catalogo\n" +"Vea bbatch.c para generar archivos de datos\n" +"\n" +"Utilice: bbatch [opciones] -w directorio/trabajo -f archivo_de_datos\n" +" -d establece nivel de depuración para \n" +" -dt imprime timestamp en salida de depuración\n" +" -n especifica el nombre de la base de datos (por defecto bacula)\n" +" -u especifica el nombre de usuario de la base de datos (por " +"defecto bacula)\n" +" -P especifica la contraseña de la base de datos (por defecto " +"none)\n" +" -h especifica servidor de la base de datos (por defecto NULL)\n" +" -w especifica el directorio de trabajo\n" +" -v detallado\n" +" -f especifica archivo de datos\n" +" -? imprime esta mensaje\n" +"\n" -#: src/tools/dbcheck.c:1066 +#: src/tools/bbatch.c:199 #, c-format -msgid "Found %d orphaned Client records.\n" -msgstr "Se han encontrado %d registros de Clientes huérfanos.\n" +msgid "Computing file list for jobid=%s files=%lld secs=%d\n" +msgstr "" -#: src/tools/dbcheck.c:1081 +#: src/tools/bbatch.c:303 #, c-format -msgid "Deleting %d orphaned Client records.\n" -msgstr "Eliminando %d registros de Clientes huérfanos.\n" +msgid "Error opening datafile %s\n" +msgstr "Error abriendo archivo de datos %s\n" -#: src/tools/dbcheck.c:1090 -#, c-format -msgid "Checking for orphaned Job entries.\n" +#: src/tools/bbatch.c:313 +msgid "Error while inserting file\n" +msgstr "Error insertando el archivo\n" + +#: src/tools/drivetype.c:35 +#, fuzzy, c-format +msgid "" +"\n" +"Usage: drivetype [-v] path ...\n" +"\n" +" Print the drive type a given file/directory is on.\n" +" The following options are supported:\n" +"\n" +" -l print local fixed hard drive\n" +" -a display information on all drives\n" +" -v print both path and file system type.\n" +" -? print this message.\n" +"\n" msgstr "" -"Comprobando entradas de Job huérfanos. Esto puede tomar algún tiempo!\n" +"\n" +"Utilice: drivetype [-v] ruta ...\n" +"\n" +" Imprime el tipo de unidad dado a archivo/directorio esta activada.\n" +" Las siguientes opciones están soportados:\n" +"\n" +" -v imprime ambos tipos de rutas y archivo de sistemas.\n" +" -? imprime esta mensaje.\n" +"\n" -#: src/tools/dbcheck.c:1108 +#: src/tools/drivetype.c:66 src/tools/fstype.c:90 #, c-format -msgid "Found %d orphaned Job records.\n" -msgstr "Se han encontrado %d registros de Job huérfanos.\n" +msgid "%s: unknown\n" +msgstr "%s: desconocido\n" -#: src/tools/dbcheck.c:1123 +#: src/tools/bsmtp.c:139 #, c-format -msgid "Deleting %d orphaned Job records.\n" -msgstr "Eliminando %d registros de Job huérfanos.\n" +msgid "Fatal malformed reply from %s: %s\n" +msgstr "Fatal malformación de respuesta desde %s: %s\n" -#: src/tools/dbcheck.c:1125 +#: src/tools/bsmtp.c:147 #, c-format -msgid "Deleting JobMedia records of orphaned Job records.\n" -msgstr "Eliminando registros JobMedia de registros de Job huérfanos.\n" +msgid "Fatal fgets error: ERR=%s\n" +msgstr "fgets fatal error: ERR=%s\n" -#: src/tools/dbcheck.c:1127 -#, c-format -msgid "Deleting Log records of orphaned Job records.\n" -msgstr "Eliminando registros Log de registros de Job huérfanos.\n" +#: src/tools/bsmtp.c:180 +#, fuzzy, c-format +msgid "" +"\n" +"Usage: %s [-f from] [-h mailhost] [-s subject] [-c copy] [recipient ...]\n" +" -4 forces bsmtp to use IPv4 addresses only.\n" +" -6 forces bsmtp to use IPv6 addresses only.\n" +" -8 set charset to UTF-8\n" +" -a use any ip protocol for address resolution\n" +" -c set the Cc: field\n" +" -d set debug level to \n" +" -dt print a timestamp in debug output\n" +" -f set the From: field\n" +" -h use mailhost:port as the SMTP server\n" +" -s set the Subject: field\n" +" -r set the Reply-To: field\n" +" -l set the maximum number of lines to send (default: " +"unlimited)\n" +" -? print this message.\n" +"\n" +msgstr "" +"\n" +"Utilice: %s [-f desde] [-h servidor de correo] [-s asunto] [-c con copia] " +"[destinatario ...]\n" +" -8 conjunto charset a UTF-8\n" +" -c establece el campo Cc:\n" +" -d establece el nivel de depuración para \n" +" -dt imprime un timestamp en salida de depuración\n" +" -f establece el campo Desde:\n" +" -h use servidor de correo:puerto como servidor SMTP\n" +" -s establece el campo Asunto:\n" +" -r establece el campo Responder-Para:\n" +" -l establece el número máximo de líneas a enviar (por defecto: sin límite)\n" +" -? imprimir este mensaje.\n" +"\n" -#: src/tools/dbcheck.c:1136 -#, c-format -msgid "Checking for Admin Job entries.\n" -msgstr "Comprobando entradas para Job Administrativo.\n" +#: src/tools/bsmtp.c:367 +msgid "Fatal error: no recipient given.\n" +msgstr "Fatal error: destinatario no determinado.\n" -#: src/tools/dbcheck.c:1145 +#: src/tools/bsmtp.c:395 #, c-format -msgid "Found %d Admin Job records.\n" -msgstr "Se han encontrado %d registros de Job Administrativo.\n" +msgid "Fatal gethostname error: ERR=%s\n" +msgstr "gethostname fatal error: ERR=%s\n" -#: src/tools/dbcheck.c:1160 -#, c-format -msgid "Deleting %d Admin Job records.\n" -msgstr "Eliminando %d registros de Job Administrativo.\n" +#: src/tools/bsmtp.c:406 +#, fuzzy, c-format +msgid "Fatal getaddrinfo for myself failed \"%s\": ERR=%s\n" +msgstr "Fallo fatal gethostbyname para mi mismo \"%s\": ERR=%s\n" -#: src/tools/dbcheck.c:1169 +#: src/tools/bsmtp.c:414 #, c-format -msgid "Checking for Restore Job entries.\n" -msgstr "Comprobando entradas para Job de Restauración.\n" +msgid "Fatal gethostbyname for myself failed \"%s\": ERR=%s\n" +msgstr "Fallo fatal gethostbyname para mi mismo \"%s\": ERR=%s\n" -#: src/tools/dbcheck.c:1178 +#: src/tools/bsmtp.c:474 src/tools/bsmtp.c:509 #, c-format -msgid "Found %d Restore Job records.\n" -msgstr "Se han encontrado %d registros de Job de Restauración.\n" +msgid "Error unknown mail host \"%s\": ERR=%s\n" +msgstr "Error servidor de correo \"%s\" desconocido: ERR=%s\n" + +#: src/tools/bsmtp.c:477 src/tools/bsmtp.c:512 +msgid "Retrying connection using \"localhost\".\n" +msgstr "Reintentando la conexión usando \"localhost\".\n" + +#: src/tools/bsmtp.c:502 +#, fuzzy, c-format +msgid "Failed to connect to mailhost %s\n" +msgstr "Fallo al conectar con el cliente.\n" -#: src/tools/dbcheck.c:1193 +#: src/tools/bsmtp.c:520 #, c-format -msgid "Deleting %d Restore Job records.\n" -msgstr "Eliminando %d registros de Job de Restauración.\n" +msgid "Fatal error: Unknown address family for smtp host: %d\n" +msgstr "" +"Fatal error: Desconocida familia de direcciones para servidor smtp: %d\n" -#: src/tools/dbcheck.c:1203 +#: src/tools/bsmtp.c:529 src/tools/bsmtp.c:534 #, c-format -msgid "Checking for Filenames with a trailing slash\n" -msgstr "Comprobando Nombres de Archivo con una barra diagonal\n" +msgid "Fatal socket error: ERR=%s\n" +msgstr "Fatal error de socket: ERR=%s\n" -#: src/tools/dbcheck.c:1212 +#: src/tools/bsmtp.c:539 #, c-format -msgid "Found %d bad Filename records.\n" -msgstr "Se han encontrado %d malos registros de Nombre de Archivo.\n" +msgid "Fatal connect error to %s: ERR=%s\n" +msgstr "Fatal error de conexión para %s: ERR=%s\n" -#: src/tools/dbcheck.c:1230 src/tools/dbcheck.c:1296 +#: src/tools/bsmtp.c:548 #, c-format -msgid "Reparing %d bad Filename records.\n" -msgstr "Reparando %d malos registros de Nombre de Archivo.\n" +msgid "Fatal _open_osfhandle error: ERR=%s\n" +msgstr "Fatal error _open_osfhandle: ERR=%s\n" -#: src/tools/dbcheck.c:1270 +#: src/tools/bsmtp.c:555 src/tools/bsmtp.c:559 src/tools/bsmtp.c:568 +#: src/tools/bsmtp.c:572 #, c-format -msgid "Checking for Paths without a trailing slash\n" -msgstr "Comprobando Rutas sin una barra diagonal\n" +msgid "Fatal fdopen error: ERR=%s\n" +msgstr "Fatal error fdopen: ERR=%s\n" -#: src/tools/dbcheck.c:1279 +#: src/tools/bsmtp.c:564 #, c-format -msgid "Found %d bad Path records.\n" -msgstr "Se han encontrado %d malos registros de Rutas.\n" +msgid "Fatal dup error: ERR=%s\n" +msgstr "Fatal error dup: ERR=%s\n" -#: src/tools/dbcheck.c:1442 -#, c-format +#: src/tools/dbcheck.c:183 msgid "" -"Ok. Index over the %s column already exists and dbcheck will work faster.\n" +"Warning skipping the additional parameters for working directory/dbname/user/" +"password/host.\n" msgstr "" -"Listo. Índice sobre la columna %s ya existe y dbcheck funcionará más " -"rápido.\n" +"Advertencia, saltando los parámetros adicionales para el directorio de " +"trabajo/dbname/usuario/contraseña/maquina.\n" -#: src/tools/dbcheck.c:1445 +#: src/tools/dbcheck.c:200 #, c-format -msgid "" -"Note. Index over the %s column not found, that can greatly slow down " -"dbcheck.\n" +msgid "Error can not find the Catalog name[%s] in the given config file [%s]\n" msgstr "" -"Nota. Índice sobre la columna %s no encontrado, esto puede en gran medida " -"ralentizar dbcheck.\n" +"Error, no puede encontrar el nombre del Catálogo [%s] en el archivo [%s] de " +"configuración dado\n" -#: src/tools/dbcheck.c:1460 +#: src/tools/dbcheck.c:202 #, c-format -msgid "Create temporary index... This may take some time!\n" -msgstr "Crear índice temporal... Esto puede tomar algún tiempo!\n" +msgid "Error there is no Catalog section in the given config file [%s]\n" +msgstr "" +"Error, no hay una sección de Catálogo en el archivo de configuración dado " +"[% s]\n" -#: src/tools/dbcheck.c:1468 -#, c-format -msgid "Temporary index created.\n" -msgstr "Índice temporal creado.\n" +#: src/tools/dbcheck.c:211 +msgid "Error no Director resource defined.\n" +msgstr "Error, recurso Director no definido.\n" -#: src/tools/dbcheck.c:1483 -#, c-format -msgid "Drop temporary index.\n" -msgstr "Eliminar índice temporal.\n" +#: src/tools/dbcheck.c:235 +msgid "Wrong number of arguments.\n" +msgstr "Número incorrecto de argumentos.\n" -#: src/tools/dbcheck.c:1493 -#, c-format -msgid "Temporary index %s deleted.\n" -msgstr "Índice temporal %s eliminado.\n" +#: src/tools/dbcheck.c:240 +msgid "Working directory not supplied.\n" +msgstr "Directorio de trabajo no suministrado.\n" -#: src/filed/verify.c:57 -#, c-format -msgid "Cannot malloc %d network read buffer\n" -msgstr "No se pudo leer búfer de red malloc %d\n" +#: src/tools/dbcheck.c:276 +msgid "Database port must be a numeric value.\n" +msgstr "Puerto de la BD debe ser un valor numérico.\n" -#: src/filed/verify.c:127 -#, c-format -msgid " Could not access %s: ERR=%s\n" -msgstr "No es posible acceder %s: ERR=%s\n" +#: src/tools/dbcheck.c:279 +msgid "Database port must be a int value.\n" +msgstr "Puerto de la BD debe ser un valor entero.\n" -#: src/filed/verify.c:134 +#: src/tools/dbcheck.c:353 #, c-format -msgid " Could not follow link %s: ERR=%s\n" -msgstr " No es posible seguir el enlace %s: ERR=%s\n" +msgid "Hello, this is the database check/correct program.\n" +msgstr "" +"Hola, este es el programa de comprobación/corrección de la base de datos.\n" -#: src/filed/verify.c:141 +#: src/tools/dbcheck.c:355 #, c-format -msgid " Could not stat %s: ERR=%s\n" -msgstr "No se pudo stat %s: ERR=%s\n" +msgid "Modify database is on." +msgstr "Modificación de base de datos esta activada." -#: src/filed/verify.c:147 src/filed/backup.c:450 +#: src/tools/dbcheck.c:357 #, c-format -msgid " Unchanged file skipped: %s\n" -msgstr "Archivo sin modificar omitido: %s\n" +msgid "Modify database is off." +msgstr "Modificación base de datos esta desactivada." -#: src/filed/verify.c:150 +#: src/tools/dbcheck.c:359 src/tools/dbcheck.c:420 #, c-format -msgid " Archive file skipped: %s\n" -msgstr "Archivo Archive omitido: %s\n" +msgid " Verbose is on.\n" +msgstr "Detallado esta activado.\n" -#: src/filed/verify.c:153 +#: src/tools/dbcheck.c:361 src/tools/dbcheck.c:422 #, c-format -msgid " Recursion turned off. Directory skipped: %s\n" -msgstr "Recursión apagado. Directorio omitido: %s\n" +msgid " Verbose is off.\n" +msgstr "Detallado está apagado.\n" -#: src/filed/verify.c:157 +#: src/tools/dbcheck.c:363 #, c-format -msgid " File system change prohibited. Directory skipped: %s\n" -msgstr "Prohibido el cambio de sistema de archivos. Directorio omitido: %s\n" +msgid "Please select the function you want to perform.\n" +msgstr "Por favor seleccione la función que desea realizar.\n" -#: src/filed/verify.c:165 +#: src/tools/dbcheck.c:367 #, c-format -msgid " Could not open directory %s: ERR=%s\n" -msgstr "No se pudo abrir el directorio %s: ERR=%s\n" +msgid "" +"\n" +" 1) Toggle modify database flag\n" +" 2) Toggle verbose flag\n" +" 3) Repair bad Filename records\n" +" 4) Repair bad Path records\n" +" 5) Eliminate duplicate Filename records\n" +" 6) Eliminate duplicate Path records\n" +" 7) Eliminate orphaned Jobmedia records\n" +" 8) Eliminate orphaned File records\n" +" 9) Eliminate orphaned Path records\n" +" 10) Eliminate orphaned Filename records\n" +" 11) Eliminate orphaned FileSet records\n" +" 12) Eliminate orphaned Client records\n" +" 13) Eliminate orphaned Job records\n" +" 14) Eliminate all Admin records\n" +" 15) Eliminate all Restore records\n" +" 16) All (3-15)\n" +" 17) Quit\n" +msgstr "" +"\n" +" 1) Activar bandera modificar base de datos\n" +" 2) Activar bandera detallado\n" +" 3) Reparar malos registros de Nombre de Archivo\n" +" 4) Reparar malos registros de Rutas\n" +" 5) Eliminar registros de Nombre de Archivo duplicados\n" +" 6) Eliminar registros de Rutas duplicados\n" +" 7) Eliminar registros de Jobmedia huérfanos\n" +" 8) Eliminar registros de Archivo huérfanos\n" +" 9) Eliminar registros de Rutas huérfanos\n" +" 10) Eliminar registros de nombre de archivo huérfanos\n" +" 11) Eliminar registros de FileSet huérfanos\n" +" 12) Eliminar registros de Cliente huérfanos\n" +" 13) Eliminar registros de Job huérfanos\n" +" 14) Eliminar todos los registros de Administración\n" +" 15) Eliminar todos los registros de Restauración\n" +" 16) Todos (3-15)\n" +" 17) Salir\n" -#: src/filed/verify.c:170 +#: src/tools/dbcheck.c:386 #, c-format -msgid " Unknown file type %d: %s\n" -msgstr "Tipo de archivo desconocido %d: %s\n" +msgid "" +"\n" +" 1) Toggle modify database flag\n" +" 2) Toggle verbose flag\n" +" 3) Check for bad Filename records\n" +" 4) Check for bad Path records\n" +" 5) Check for duplicate Filename records\n" +" 6) Check for duplicate Path records\n" +" 7) Check for orphaned Jobmedia records\n" +" 8) Check for orphaned File records\n" +" 9) Check for orphaned Path records\n" +" 10) Check for orphaned Filename records\n" +" 11) Check for orphaned FileSet records\n" +" 12) Check for orphaned Client records\n" +" 13) Check for orphaned Job records\n" +" 14) Check for all Admin records\n" +" 15) Check for all Restore records\n" +" 16) All (3-15)\n" +" 17) Quit\n" +msgstr "" +"\n" +" 1) Activar bandera modificar base de datos\n" +" 2) Activar bandera detallado\n" +" 3) Verificar malos registros de Nombre de Archivo\n" +" 4) Verificar malos registros de Rutas\n" +" 5) Verificar registros de Nombre de Archivo duplicados\n" +" 6) Verificar registros de Rutas duplicados\n" +" 7) Verificar registros de Jobmedia huérfanos\n" +" 8) Verificar registros de Archivo huérfanos\n" +" 9) Verificar registros de Rutas huérfanos\n" +" 10) Verificar registros de nombre de archivo huérfanos\n" +" 11) Verificar registros de FileSet huérfanos\n" +" 12) Verificar registros de Cliente huérfanos\n" +" 13) Verificar registros de Job huérfanos\n" +" 14) Verificar todos los registros de Administración\n" +" 15) Verificar todos los registros de Restauración\n" +" 16) Todos (3-15)\n" +" 17) Salir\n" -#: src/filed/verify.c:214 src/filed/verify_vol.c:206 -#, c-format -msgid "Network error in send to Director: ERR=%s\n" -msgstr "Error de red en enviar al Director: ERR=%s\n" +#: src/tools/dbcheck.c:406 +msgid "Select function number: " +msgstr "Seleccione número de función:" -#: src/filed/verify.c:247 src/filed/accurate.c:429 src/filed/backup.c:506 +#: src/tools/dbcheck.c:413 #, c-format -msgid "%s digest initialization failed\n" -msgstr "Inicialización de %s Digest ha fallado\n" +msgid "Database will be modified.\n" +msgstr "Base de datos será modificada.\n" -#: src/filed/verify.c:309 +#: src/tools/dbcheck.c:415 #, c-format -msgid " Cannot open %s: ERR=%s.\n" -msgstr "No se puede abrir %s: ERR=%s.\n" +msgid "Database will NOT be modified.\n" +msgstr "Base de datos NO será modificada.\n" -#: src/filed/verify.c:323 +#: src/tools/dbcheck.c:506 #, c-format -msgid " Cannot open resource fork for %s: ERR=%s.\n" -msgstr "No se puede abrir recursos fork para %s: ERR=%s.\n" +msgid "JobId=%s Name=\"%s\" StartTime=%s\n" +msgstr "JobId=%s Nombre=\"%s\" HoraInicio=%s\n" -#: src/filed/verify.c:386 +#: src/tools/dbcheck.c:513 #, c-format -msgid "Error reading file %s: ERR=%s\n" -msgstr "Error leyendo archivo %s: ERR=%s\n" +msgid "Orphaned JobMediaId=%s JobId=%s Volume=\"%s\"\n" +msgstr "Huérfanos JobMediaId=%s JobId=%s Volumen=\"%s\"\n" -#: src/filed/accurate.c:201 +#: src/tools/dbcheck.c:520 #, c-format -msgid "Space saved with Base jobs: %lld MB\n" -msgstr "" - -#: src/filed/accurate.c:400 -#, fuzzy, c-format -msgid "Cannot verify checksum for %s\n" -msgstr "No se puede encontrar el recurso Schedule %s\n" +msgid "Orphaned FileId=%s JobId=%s Volume=\"%s\"\n" +msgstr "Huérfanos FileId=%s JobId=%s Volumen=\"%s\"\n" -#: src/filed/accurate.c:508 -msgid "2991 Bad accurate command\n" -msgstr "2991 Malo comando accurate\n" +#: src/tools/dbcheck.c:527 +#, c-format +msgid "Orphaned FileSetId=%s FileSet=\"%s\" MD5=%s\n" +msgstr "Huérfanos FileSetId=%s FileSet=\"%s\" MD5=%s\n" -#: src/filed/status.c:89 -#, fuzzy, c-format -msgid "Daemon started %s. Jobs: run=%d running=%d.\n" -msgstr "Demonio iniciado %s, %d Job ejecutando desde el inicio.\n" +#: src/tools/dbcheck.c:534 +#, c-format +msgid "Orphaned ClientId=%s Name=\"%s\"\n" +msgstr "Huérfanos ClientId=%s Nombre=\"%s\"\n" -#: src/filed/status.c:149 -#, fuzzy, c-format -msgid " Sizeof: boffset_t=%d size_t=%d debug=%d trace=%d " -msgstr "Sizeof: boffset_t=%d size_t=%d debug=%d trace=%d\n" +#: src/tools/dbcheck.c:587 +#, c-format +msgid "Deleting: %s\n" +msgstr "Eliminando: %s\n" -#: src/filed/status.c:194 +#: src/tools/dbcheck.c:659 #, c-format -msgid "Director connected at: %s\n" -msgstr "Director conectado en: %s\n" +msgid "Checking for duplicate Filename entries.\n" +msgstr "Comprobando entradas Nombre de Archivo(Filename) duplicadas.\n" -#: src/filed/status.c:196 +#: src/tools/dbcheck.c:670 #, c-format -msgid "JobId %d Job %s is running.\n" -msgstr "JobId %d Job %s se está ejecutando.\n" +msgid "Found %d duplicate Filename records.\n" +msgstr "Encontrados %d registros Nombre de Archivo(Filename) duplicados.\n" -#: src/filed/status.c:199 -#, fuzzy, c-format -msgid " %s%s %s Job started: %s\n" -msgstr " %s%s Job iniciado: %s\n" +#: src/tools/dbcheck.c:671 +msgid "Print the list? (yes/no): " +msgstr "Imprimir la lista? (sí/no):" -#: src/filed/status.c:212 +#: src/tools/dbcheck.c:694 src/tools/dbcheck.c:759 #, c-format -msgid " Files=%s Bytes=%s Bytes/sec=%s Errors=%d\n" -msgstr "Archivos=%s Bytes=%s Bytes/sec=%s Errores=%d\n" +msgid "Found %d for: %s\n" +msgstr "Encontrados %d para: %s\n" -#: src/filed/status.c:218 +#: src/tools/dbcheck.c:724 #, c-format -msgid " Files Examined=%s\n" -msgstr "Archivos examinados=%s\n" +msgid "Checking for duplicate Path entries.\n" +msgstr "Comprobando entradas Path duplicadas.\n" -#: src/filed/status.c:223 +#: src/tools/dbcheck.c:735 #, c-format -msgid " Processing file: %s\n" -msgstr "Procesando archivo: %s\n" - -#: src/filed/status.c:234 -msgid " SDSocket closed.\n" -msgstr "SDSocket cerrado.\n" +msgid "Found %d duplicate Path records.\n" +msgstr "Encontrados %d registros de Rutas duplicados.\n" -#: src/filed/status.c:244 src/filed/status.c:335 src/filed/status.c:409 -msgid "====\n" -msgstr "====\n" +#: src/tools/dbcheck.c:736 src/tools/dbcheck.c:798 src/tools/dbcheck.c:844 +#: src/tools/dbcheck.c:912 src/tools/dbcheck.c:970 src/tools/dbcheck.c:1013 +#: src/tools/dbcheck.c:1055 src/tools/dbcheck.c:1097 src/tools/dbcheck.c:1134 +#: src/tools/dbcheck.c:1167 src/tools/dbcheck.c:1201 src/tools/dbcheck.c:1268 +msgid "Print them? (yes/no): " +msgstr "Imprimirlos? (sí/no):" -#: src/filed/status.c:306 -#, fuzzy -msgid " SDSocket=closed\n" -msgstr "SDSocket cerrado.\n" +#: src/tools/dbcheck.c:789 +#, c-format +msgid "Checking for orphaned JobMedia entries.\n" +msgstr "Comprobando entradas JobMedia huérfanas.\n" -#: src/filed/status.c:463 src/filed/status.c:496 +#: src/tools/dbcheck.c:797 #, c-format -msgid "Bad .status command: %s\n" -msgstr "Comando .status malo: %s\n" +msgid "Found %d orphaned JobMedia records.\n" +msgstr "Encontrados %d registros JobMedia huérfanos.\n" -#: src/filed/status.c:464 -msgid "2900 Bad .status command, missing argument.\n" -msgstr "2900 Malo comando .status, falta argumento.\n" +#: src/tools/dbcheck.c:815 +#, c-format +msgid "Deleting %d orphaned JobMedia records.\n" +msgstr "Eliminando %d registros JobMedia huérfanos.\n" -#: src/filed/status.c:497 -msgid "2900 Bad .status command, wrong argument.\n" -msgstr "2900 Malo comando .status, malo argumento.\n" +#: src/tools/dbcheck.c:832 +#, c-format +msgid "Checking for orphaned File entries. This may take some time!\n" +msgstr "Comprobando entradas Files huérfanas. Esto puede tomar algún tiempo.\n" -#: src/filed/status.c:565 -msgid "Bacula Client: Idle" -msgstr "Bacula Cliente: Inactivo" +#: src/tools/dbcheck.c:843 +#, c-format +msgid "Found %d orphaned File records.\n" +msgstr "Encontrados %d registros File huérfanos.\n" -#: src/filed/status.c:576 -msgid "Bacula Client: Running" -msgstr "Bacula Cliente: Funcionando" +#: src/tools/dbcheck.c:860 +#, c-format +msgid "Deleting %d orphaned File records.\n" +msgstr "Eliminando %d registros File huérfanos.\n" -#: src/filed/status.c:590 -msgid "Bacula Client: Last Job Canceled" -msgstr "Bacula Cliente: Ultimo Job Cancelado" +#: src/tools/dbcheck.c:879 +#, c-format +msgid "Pruning orphaned Path entries isn't possible when using BVFS.\n" +msgstr "" -#: src/filed/status.c:594 -msgid "Bacula Client: Last Job Failed" -msgstr "Bacula Cliente: Ultimo Job Fallido" +#: src/tools/dbcheck.c:888 src/tools/dbcheck.c:946 +msgid "Create temporary index? (yes/no): " +msgstr "Crear índice temporal? (sí/no):" -#: src/filed/status.c:598 -msgid "Bacula Client: Last Job had Warnings" -msgstr "Bacula Cliente: Ultimo Job con Advertencias" +#: src/tools/dbcheck.c:900 +#, c-format +msgid "Checking for orphaned Path entries. This may take some time!\n" +msgstr "" +"Comprobando de entradas huérfanas de Ruta. Esto puede tomar algún tiempo!\n" -#: src/filed/xattr.c:97 src/filed/xattr.c:112 src/filed/xattr.c:120 -#: src/filed/fd_plugins.c:789 src/filed/fd_plugins.c:805 src/filed/acl.c:108 -#: src/filed/acl.c:123 src/filed/acl.c:131 src/filed/backup.c:999 -#: src/filed/backup.c:1199 src/filed/backup.c:1236 src/filed/backup.c:1249 -#: src/filed/backup.c:1325 src/filed/backup.c:1424 +#: src/tools/dbcheck.c:911 #, c-format -msgid "Network send error to SD. ERR=%s\n" -msgstr "Error de red al enviar para SD. ERR=%s\n" +msgid "Found %d orphaned Path records.\n" +msgstr "Se han encontrado %d registros huérfanos de Ruta.\n" -#: src/filed/xattr.c:245 +#: src/tools/dbcheck.c:924 #, c-format -msgid "Illegal xattr stream, no XATTR_MAGIC on file \"%s\"\n" -msgstr "Flujo xattr ilegal, no hay XATTR_MAGIC en el archivo \"%s\"\n" +msgid "Deleting %d orphaned Path records.\n" +msgstr "Eliminando %d registros huérfanos de Ruta.\n" -#: src/filed/xattr.c:259 -#, fuzzy, c-format -msgid "Illegal xattr stream, xattr name length <= 0 on file \"%s\"\n" +#: src/tools/dbcheck.c:958 +#, c-format +msgid "Checking for orphaned Filename entries. This may take some time!\n" msgstr "" -"Ilegal flujo xattr, fallo al analizar flujo xattr en el archivo \"%s\"\n" - -#: src/filed/xattr.c:381 src/filed/xattr.c:417 -#, fuzzy, c-format -msgid "llistea error on file \"%s\": ERR=%s\n" -msgstr "error de llistxattr en el archivo \"%s\": ERR=%s\n" +"Comprobando de entradas de Nombre de Archivo huérfanos. Esto puede tomar " +"algún tiempo!\n" -#: src/filed/xattr.c:467 src/filed/xattr.c:520 -#, fuzzy, c-format -msgid "lgetea error on file \"%s\": ERR=%s\n" -msgstr "error de getacl en el archivo \"%s\": ERR=%s\n" +#: src/tools/dbcheck.c:969 +#, c-format +msgid "Found %d orphaned Filename records.\n" +msgstr "Se han encontrado %d registros de Nombre de Archivos huérfanos.\n" -#: src/filed/xattr.c:556 src/filed/xattr.c:877 src/filed/xattr.c:1352 -#: src/filed/xattr.c:1820 src/filed/xattr.c:2176 src/filed/xattr.c:2968 +#: src/tools/dbcheck.c:982 #, c-format -msgid "Xattr stream on file \"%s\" exceeds maximum size of %d bytes\n" -msgstr "Flujo Xattr en el archivo \"%s\" excede el máximo tamaño de %d bytes\n" +msgid "Deleting %d orphaned Filename records.\n" +msgstr "Eliminando %d registros de Nombre de Archivos huérfanos.\n" -#: src/filed/xattr.c:576 src/filed/xattr.c:903 src/filed/xattr.c:1372 -#: src/filed/xattr.c:1850 src/filed/xattr.c:2193 +#: src/tools/dbcheck.c:1002 #, c-format -msgid "Failed to serialize extended attributes on file \"%s\"\n" -msgstr "No se pudo serializar los atributos extendidos en el archivo \"%s\"\n" +msgid "Checking for orphaned FileSet entries. This takes some time!\n" +msgstr "" +"Comprobando de entradas FileSet huérfanos. Esto puede tomar algún tiempo!\n" -#: src/filed/xattr.c:643 -#, fuzzy, c-format -msgid "lsetea error on file \"%s\": ERR=%s\n" -msgstr "setacl error en el archivo \"%s\": ERR=%s\n" +#: src/tools/dbcheck.c:1012 +#, c-format +msgid "Found %d orphaned FileSet records.\n" +msgstr "Se han encontrado %d registros FileSet huérfanos.\n" -#: src/filed/xattr.c:731 src/filed/xattr.c:769 src/filed/xattr.c:832 -#: src/filed/xattr.c:844 -#, fuzzy, c-format -msgid "attr_list error on file \"%s\": ERR=%s\n" -msgstr "error de extattr_list_link en el archivo \"%s\": ERR=%s\n" +#: src/tools/dbcheck.c:1027 +#, c-format +msgid "Deleting %d orphaned FileSet records.\n" +msgstr "Eliminando %d registros FileSet huérfanos.\n" -#: src/filed/xattr.c:968 -#, fuzzy, c-format -msgid "Received illegal xattr named %s on file \"%s\"\n" -msgstr "Flujo xattr ilegal, no hay XATTR_MAGIC en el archivo \"%s\"\n" +#: src/tools/dbcheck.c:1036 +#, c-format +msgid "Checking for orphaned Client entries.\n" +msgstr "" +"Comprobando entradas de Clientes huérfanos. Esto puede tomar algún tiempo!\n" -#: src/filed/xattr.c:1001 src/filed/xattr.c:1011 -#, fuzzy, c-format -msgid "attr_set error on file \"%s\": ERR=%s\n" -msgstr "error de acl_set en el archivo \"%s\": ERR=%s\n" +#: src/tools/dbcheck.c:1054 +#, c-format +msgid "Found %d orphaned Client records.\n" +msgstr "Se han encontrado %d registros de Clientes huérfanos.\n" -#: src/filed/xattr.c:1161 src/filed/xattr.c:1196 +#: src/tools/dbcheck.c:1069 #, c-format -msgid "llistxattr error on file \"%s\": ERR=%s\n" -msgstr "error de llistxattr en el archivo \"%s\": ERR=%s\n" +msgid "Deleting %d orphaned Client records.\n" +msgstr "Eliminando %d registros de Clientes huérfanos.\n" -#: src/filed/xattr.c:1264 src/filed/xattr.c:1316 +#: src/tools/dbcheck.c:1078 #, c-format -msgid "lgetxattr error on file \"%s\": ERR=%s\n" -msgstr "error de lgetxattr en el archivo \"%s\": ERR=%s\n" +msgid "Checking for orphaned Job entries.\n" +msgstr "" +"Comprobando entradas de Job huérfanos. Esto puede tomar algún tiempo!\n" -#: src/filed/xattr.c:1435 +#: src/tools/dbcheck.c:1096 #, c-format -msgid "lsetxattr error on file \"%s\": ERR=%s\n" -msgstr "error de lsetxattr en el archivo \"%s\": ERR=%s\n" +msgid "Found %d orphaned Job records.\n" +msgstr "Se han encontrado %d registros de Job huérfanos.\n" -#: src/filed/xattr.c:1593 src/filed/xattr.c:1628 +#: src/tools/dbcheck.c:1111 #, c-format -msgid "extattr_list_link error on file \"%s\": ERR=%s\n" -msgstr "error de extattr_list_link en el archivo \"%s\": ERR=%s\n" +msgid "Deleting %d orphaned Job records.\n" +msgstr "Eliminando %d registros de Job huérfanos.\n" -#: src/filed/xattr.c:1648 +#: src/tools/dbcheck.c:1113 #, c-format -msgid "Failed to convert %d into namespace on file \"%s\"\n" -msgstr "No se pudo convertir %d al namespace en el archivo \"%s\"\n" +msgid "Deleting JobMedia records of orphaned Job records.\n" +msgstr "Eliminando registros JobMedia de registros de Job huérfanos.\n" -#: src/filed/xattr.c:1728 src/filed/xattr.c:1783 +#: src/tools/dbcheck.c:1115 #, c-format -msgid "extattr_get_link error on file \"%s\": ERR=%s\n" -msgstr "error de extattr_get_link en el archivo \"%s\": ERR=%s\n" +msgid "Deleting Log records of orphaned Job records.\n" +msgstr "Eliminando registros Log de registros de Job huérfanos.\n" -#: src/filed/xattr.c:1907 +#: src/tools/dbcheck.c:1124 #, c-format -msgid "Failed to split %s into namespace and name part on file \"%s\"\n" -msgstr "" -"No se ha podido separar %s en el namespace y parte del nombre en el archivo " -"\"%s\"\n" +msgid "Checking for Admin Job entries.\n" +msgstr "Comprobando entradas para Job Administrativo.\n" -#: src/filed/xattr.c:1920 +#: src/tools/dbcheck.c:1133 #, c-format -msgid "Failed to convert %s into namespace on file \"%s\"\n" -msgstr "No se pudo convertir %s al namespace en el archivo \"%s\"\n" +msgid "Found %d Admin Job records.\n" +msgstr "Se han encontrado %d registros de Job Administrativo.\n" -#: src/filed/xattr.c:1941 +#: src/tools/dbcheck.c:1148 #, c-format -msgid "extattr_set_link error on file \"%s\": ERR=%s\n" -msgstr "error de extattr_set_link en el archivo \"%s\": ERR=%s\n" +msgid "Deleting %d Admin Job records.\n" +msgstr "Eliminando %d registros de Job Administrativo.\n" -#: src/filed/xattr.c:2044 src/filed/xattr.c:2069 -#, fuzzy, c-format -msgid "getproplist error on file \"%s\": ERR=%s\n" -msgstr "error de getacl en el archivo \"%s\": ERR=%s\n" +#: src/tools/dbcheck.c:1157 +#, c-format +msgid "Checking for Restore Job entries.\n" +msgstr "Comprobando entradas para Job de Restauración.\n" -#: src/filed/xattr.c:2262 -#, fuzzy, c-format -msgid "Unable create proper proplist to restore xattrs on file \"%s\"\n" -msgstr "No es posible leer el contenido de xattr %s en el archivo \"%s\"\n" +#: src/tools/dbcheck.c:1166 +#, c-format +msgid "Found %d Restore Job records.\n" +msgstr "Se han encontrado %d registros de Job de Restauración.\n" -#: src/filed/xattr.c:2291 -#, fuzzy, c-format -msgid "setproplist error on file \"%s\": ERR=%s\n" -msgstr "strtoacl error en el archivo \"%s\": ERR=%s\n" +#: src/tools/dbcheck.c:1181 +#, c-format +msgid "Deleting %d Restore Job records.\n" +msgstr "Eliminando %d registros de Job de Restauración.\n" -#: src/filed/xattr.c:2609 src/filed/xattr.c:2662 +#: src/tools/dbcheck.c:1191 #, c-format -msgid "Unable to get acl on xattr %s on file \"%s\": ERR=%s\n" -msgstr "No se puede obtener acl en xattr %s en el archivo \"%s\": ERR=%s\n" +msgid "Checking for Filenames with a trailing slash\n" +msgstr "Comprobando Nombres de Archivo con una barra diagonal\n" -#: src/filed/xattr.c:2679 +#: src/tools/dbcheck.c:1200 #, c-format -msgid "Unable to get acl text on xattr %s on file \"%s\": ERR=%s\n" -msgstr "" -"No se puede obtener acl texto en xattr %s en el archivo \"%s\": ERR=%s\n" +msgid "Found %d bad Filename records.\n" +msgstr "Se han encontrado %d malos registros de Nombre de Archivo.\n" -#: src/filed/xattr.c:2753 +#: src/tools/dbcheck.c:1218 src/tools/dbcheck.c:1284 #, c-format -msgid "Unable to get status on xattr %s on file \"%s\": ERR=%s\n" -msgstr "No se puede obtener estado en xattr %s en el archivo \"%s\": ERR=%s\n" +msgid "Reparing %d bad Filename records.\n" +msgstr "Reparando %d malos registros de Nombre de Archivo.\n" -#: src/filed/xattr.c:2886 +#: src/tools/dbcheck.c:1258 #, c-format -msgid "Unable to open xattr %s on \"%s\": ERR=%s\n" -msgstr "No se puede abrir xattr %s en \"%s\": ERR=%s\n" +msgid "Checking for Paths without a trailing slash\n" +msgstr "Comprobando Rutas sin una barra diagonal\n" -#: src/filed/xattr.c:2909 +#: src/tools/dbcheck.c:1267 #, c-format -msgid "Unable to read symlin %s on \"%s\": ERR=%s\n" -msgstr "No se puede leer symlin %s en \"%s\": ERR=%s\n" +msgid "Found %d bad Path records.\n" +msgstr "Se han encontrado %d malos registros de Rutas.\n" -#: src/filed/xattr.c:2984 +#: src/tools/dbcheck.c:1430 #, c-format -msgid "Unable to read content of xattr %s on file \"%s\"\n" -msgstr "No es posible leer el contenido de xattr %s en el archivo \"%s\"\n" +msgid "" +"Ok. Index over the %s column already exists and dbcheck will work faster.\n" +msgstr "" +"Listo. Índice sobre la columna %s ya existe y dbcheck funcionará más " +"rápido.\n" -#: src/filed/xattr.c:3024 +#: src/tools/dbcheck.c:1433 #, c-format -msgid "Unable to chdir to xattr space of file \"%s\": ERR=%s\n" -msgstr "No se puede chdir a xattr espacio de archivo \"%s\": ERR=%s\n" +msgid "" +"Note. Index over the %s column not found, that can greatly slow down " +"dbcheck.\n" +msgstr "" +"Nota. Índice sobre la columna %s no encontrado, esto puede en gran medida " +"ralentizar dbcheck.\n" -#: src/filed/xattr.c:3081 src/filed/xattr.c:3330 +#: src/tools/dbcheck.c:1448 #, c-format -msgid "Unable to open file \"%s\": ERR=%s\n" -msgstr "No se puede abrir el archivo \"%s\": ERR=%s\n" +msgid "Create temporary index... This may take some time!\n" +msgstr "Crear índice temporal... Esto puede tomar algún tiempo!\n" -#: src/filed/xattr.c:3109 src/filed/xattr.c:3391 +#: src/tools/dbcheck.c:1456 #, c-format -msgid "Unable to open xattr space %s on file \"%s\": ERR=%s\n" -msgstr "No se puede abrir espacio xattr %s en el archivo \"%s\": ERR=%s\n" +msgid "Temporary index created.\n" +msgstr "Índice temporal creado.\n" -#: src/filed/xattr.c:3125 src/filed/xattr.c:3355 +#: src/tools/dbcheck.c:1471 #, c-format -msgid "Unable to chdir to xattr space on file \"%s\": ERR=%s\n" -msgstr "No se puede chdir a xattr espacio en el archivo \"%s\": ERR=%s\n" +msgid "Drop temporary index.\n" +msgstr "Eliminar índice temporal.\n" -#: src/filed/xattr.c:3146 +#: src/tools/dbcheck.c:1481 #, c-format -msgid "Unable to list the xattr space on file \"%s\": ERR=%s\n" -msgstr "No se puede listar el xattr espacio en el archivo \"%s\": ERR=%s\n" +msgid "Temporary index %s deleted.\n" +msgstr "Índice temporal %s eliminado.\n" -#: src/filed/xattr.c:3238 +#: src/tools/bvfs_test.c:44 src/tools/ing_test.c:45 #, c-format -msgid "Unable to convert acl from text on file \"%s\"\n" -msgstr "No se puede convertir acl de texto en el archivo \"%s\"\n" +msgid "" +"\n" +"Version: %s (%s)\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -n specify the database name (default bacula)\n" +" -u specify database user name (default bacula)\n" +" -P specify database host (default NULL)\n" +" -w specify working directory\n" +" -j specify jobids\n" +" -p specify path\n" +" -f specify file\n" +" -l maximum tuple to fetch\n" +" -T truncate cache table before starting\n" +" -v verbose\n" +" -? print this message\n" +"\n" +msgstr "" +"\n" +"Versión: %s (%s)\n" +" -d establece nivel de depuración para \n" +" -dt imprime timestamp en salida de depuración\n" +" -n especifica el nombre de la base de datos (por defecto bacula)\n" +" -u especifica el nombre de usuario de la base de datos (por " +"defecto bacula)\n" +" -P especifica la contraseña de la base de datos (por defecto " +"none)\n" +" -h especifica servidor de la base de datos (por defecto NULL)\n" +" -w especifica el directorio de trabajo\n" +" -j especifica jobids\n" +" -p especifica la ruta\n" +" -f especifica el archivo\n" +" -l tupla máxima a buscar\n" +" -T Truncar tabla de caché antes de empezar\n" +" -v detallado\n" +" -? imprime esta mensaje\n" +"\n" + +#: src/tools/testls.c:47 +#, fuzzy, c-format +msgid "" +"\n" +"Usage: testls [-d debug_level] [-] [pattern1 ...]\n" +" -a print extended attributes (Win32 debug)\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -e specify file of exclude patterns\n" +" -i specify file of include patterns\n" +" -q quiet, don't print filenames (debug)\n" +" - read pattern(s) from stdin\n" +" -? print this message.\n" +"\n" +"Patterns are file inclusion -- normally directories.\n" +"Debug level >= 1 prints each file found.\n" +"Debug level >= 10 prints path/file for catalog.\n" +"Errors always printed.\n" +"Files/paths truncated is number with len > 255.\n" +"Truncation is only in catalog.\n" +"\n" +msgstr "" +"\n" +"Utilice: testls [-d nivel_ depuración] [-] [patrón1 ...]\n" +" -a imprime atributos extendidos (depuración de Win32)\n" +" -d establece nivel de depuración para \n" +" -dt imprime timestamp en salida de depuración\n" +" -e especifica archivo de exclusión de patrones\n" +" -i especifica archivo de inclusión de patrones\n" +" - leer patrón(es) desde stdin\n" -#: src/filed/xattr.c:3248 src/filed/xattr.c:3271 +#: src/tools/testls.c:143 #, c-format -msgid "Unable to restore acl of xattr %s on file \"%s\": ERR=%s\n" -msgstr "No se puede restablecer acl de xattr %s en el archivo \"%s\": ERR=%s\n" +msgid "Could not open include file: %s\n" +msgstr "No se pudo abrir el archivo incluir: %s\n" -#: src/filed/xattr.c:3344 +#: src/tools/testls.c:156 #, c-format -msgid "Unable to open xattr space on file \"%s\": ERR=%s\n" -msgstr "No se puede abrir xattr espacio en el archivo \"%s\": ERR=%s\n" +msgid "Could not open exclude file: %s\n" +msgstr "No se pudo abrir el archivo excluir: %s\n" -#: src/filed/xattr.c:3374 src/filed/xattr.c:3536 +#: src/tools/testls.c:170 #, c-format -msgid "Unable to open xattr %s on file \"%s\": ERR=%s\n" -msgstr "No se puede abrir xattr %s en el archivo \"%s\": ERR=%s\n" +msgid "Files seen = %d\n" +msgstr "" -#: src/filed/xattr.c:3408 +#: src/tools/testls.c:203 src/tools/testfind.c:310 #, c-format -msgid "Unable to chdir to xattr space %s on file \"%s\": ERR=%s\n" -msgstr "No se puede chdir a xattr espacio de %s en el archivo \"%s\": ERR=%s\n" +msgid "Err: Could not access %s: %s\n" +msgstr "Err: No es posible acceder %s: %s\n" -#: src/filed/xattr.c:3448 +#: src/tools/testls.c:206 src/tools/testfind.c:313 #, c-format -msgid "Unable to mkfifo xattr %s on file \"%s\": ERR=%s\n" -msgstr "No se puede mkfifo xattr %s en el archivo \"%s\": ERR=%s\n" +msgid "Err: Could not follow ff->link %s: %s\n" +msgstr "Err: no podía seguir ff->link %s: %s\n" -#: src/filed/xattr.c:3466 +#: src/tools/testls.c:209 src/tools/testfind.c:316 #, c-format -msgid "Unable to mknod xattr %s on file \"%s\": ERR=%s\n" -msgstr "No se puede mknode xattr %s en el archivo \"%s\": ERR=%s\n" +msgid "Err: Could not stat %s: %s\n" +msgstr "Err: no se pudo stat %s: %s\n" -#: src/filed/xattr.c:3484 +#: src/tools/testls.c:212 src/tools/testfind.c:319 #, c-format -msgid "Unable to mkdir xattr %s on file \"%s\": ERR=%s\n" -msgstr "No se puede mkdir xattr %s en el archivo \"%s\": ERR=%s\n" +msgid "Skip: File not saved. No change. %s\n" +msgstr "Saltar: Archivo no guardado. Sin cambios. %s\n" -#: src/filed/xattr.c:3504 +#: src/tools/testls.c:215 src/tools/testfind.c:322 #, c-format -msgid "Unable to link xattr %s to %s on file \"%s\": ERR=%s\n" -msgstr "No se puede link xattr %s para %s en el archivo \"%s\": ERR=%s\n" +msgid "Err: Attempt to backup archive. Not saved. %s\n" +msgstr "Err: Intento de copia de seguridad. No guardado. %s\n" -#: src/filed/xattr.c:3557 +#: src/tools/testls.c:218 #, c-format -msgid "" -"Unable to restore data of xattr %s on file \"%s\": Not all data available in " -"xattr stream\n" -msgstr "" -"No se puede restaurar los datos de xattr %s en el archivo \"%s\": No todos " -"los datos disponibles en flujo xattr\n" +msgid "Recursion turned off. Directory not entered. %s\n" +msgstr "Recursión deshabilitada. No entró al directorio. %s\n" -#: src/filed/xattr.c:3570 +#: src/tools/testls.c:221 #, c-format -msgid "Unable to restore data of xattr %s on file \"%s\": ERR=%s\n" +msgid "Skip: File system change prohibited. Directory not entered. %s\n" msgstr "" -"No se puede restaurar los datos de xattr %s en el archivo \"%s\": ERR=%s\n" +"Saltar: Cambio de sistema de archivos prohibido. No entró al directorio. %s\n" -#: src/filed/xattr.c:3593 +#: src/tools/testls.c:224 src/tools/testfind.c:325 #, c-format -msgid "Unable to symlink xattr %s to %s on file \"%s\": ERR=%s\n" -msgstr "No se puede symlink xattr %s para %s en el archivo \"%s\": ERR=%s\n" +msgid "Err: Could not open directory %s: %s\n" +msgstr "Err: no se pudo abrir el directorio %s: %s\n" -#: src/filed/xattr.c:3629 +#: src/tools/testls.c:227 src/tools/testfind.c:328 #, c-format -msgid "Unable to restore owner of xattr %s on file \"%s\": ERR=%s\n" -msgstr "" -"No es posible restablecer el propietario de xattr %s en el archivo \"%s\": " -"ERR=%s\n" +msgid "Err: Unknown file ff->type %d: %s\n" +msgstr "Err: Archivo desconocido ff->tipo %d: %s\n" -#: src/filed/xattr.c:3657 +#: src/tools/testfind.c:58 #, c-format -msgid "Unable to restore filetimes of xattr %s on file \"%s\": ERR=%s\n" +msgid "" +"\n" +"Usage: testfind [-d debug_level] [-] [pattern1 ...]\n" +" -a print extended attributes (Win32 debug)\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -c specify config file containing FileSet resources\n" +" -f specify which FileSet to use\n" +" -? print this message.\n" +"\n" +"Patterns are used for file inclusion -- normally directories.\n" +"Debug level >= 1 prints each file found.\n" +"Debug level >= 10 prints path/file for catalog.\n" +"Errors are always printed.\n" +"Files/paths truncated is the number of files/paths with len > 255.\n" +"Truncation is only in the catalog.\n" +"\n" msgstr "" -"No es posible restablecer filetimes de xattr %s en el archivo \"%s\": ERR=" -"%s\n" +"\n" +"Utilice: testfind [-d nivel_ depuración] [-] [patrón1 ...]\n" +" -a imprime atributos extendidos (depuración de Win32)\n" +" -d establece nivel de depuración para \n" +" -dt imprime timestamp en salida de depuración\n" +" -c especifica archivo de conteniendo recursos FileSet\n" +" -f especifica cual FileSet para usar\n" +" -? imprime esta mensaje.\n" +"\n" +"Los patrones son archivos de inclusión - normalmente directorios.\n" +"Nivel de depuración >= 1 imprime cada archivo encontrado.\n" +"Nivel de depuración >= 10 imprime ruta/archivo para catalogo.\n" +"Los errores siempre se imprimen.\n" +"Archivos/rutas truncados es numero con longitud > 255.\n" +"Truncamiento es sólo en catálogo..\n" +"\n" -#: src/filed/xattr.c:3673 +#: src/tools/testfind.c:223 #, c-format -msgid "Illegal xattr stream, failed to parse xattr stream on file \"%s\"\n" +msgid "" +"\n" +"Total files : %d\n" +"Max file length: %d\n" +"Max path length: %d\n" +"Files truncated: %d\n" +"Paths truncated: %d\n" +"Hard links : %d\n" msgstr "" -"Ilegal flujo xattr, fallo al analizar flujo xattr en el archivo \"%s\"\n" - -#: src/filed/xattr.c:3734 -#, c-format -msgid "Failed to restore extensible attributes on file \"%s\"\n" -msgstr "Fallo al restablecer atributos extensible en el archivo \"%s\"\n" - -#: src/filed/xattr.c:3747 -#, c-format -msgid "Failed to restore extended attributes on file \"%s\"\n" -msgstr "Fallo al restablecer atributos extendidos en el archivo \"%s\"\n" - -#: src/filed/xattr.c:3841 src/filed/acl.c:2265 -#, fuzzy, c-format -msgid "Unable to stat file \"%s\": ERR=%s\n" -msgstr "No se puede abrir el archivo \"%s\": ERR=%s\n" +"\n" +"Total de Archivos : %d\n" +"Longitud máxima de archivo: %d\n" +"Longitud máxima de ruta: %d\n" +"Archivos truncados: %d\n" +"Rutas truncadas: %d\n" +"Enlaces duros : %d\n" -#: src/filed/xattr.c:3891 +#: src/tools/testfind.c:266 #, c-format -msgid "" -"Can't restore Extended Attributes of %s - incompatible xattr stream " -"encountered - %d\n" -msgstr "" -"No se puede restaurar los atributos extendidos de %s - incompatible flujo " -"xattr encontrado - %d\n" +msgid "Reg: %s\n" +msgstr "Reg: %s\n" -#: src/filed/fd_plugins.c:550 src/filed/fd_plugins.c:694 -#, fuzzy, c-format -msgid "Command plugin \"%s\": no type in startBackupFile packet.\n" -msgstr "Comando plugin \"%s\" regresó malo paquete startBackupFile.\n" +#: src/tools/testfind.c:288 +msgid "\t[will not descend: recursion turned off]" +msgstr "\t[no descenderá: recursividad desactivado]" -#: src/filed/fd_plugins.c:563 -#, fuzzy, c-format -msgid "Command plugin \"%s\": no object_name in startBackupFile packet.\n" -msgstr "Comando plugin \"%s\" regresó malo paquete startBackupFile.\n" +#: src/tools/testfind.c:290 +msgid "\t[will not descend: file system change not allowed]" +msgstr "\t[no descenderá: no permitido cambio de sistema de archivo]" -#: src/filed/fd_plugins.c:576 src/filed/fd_plugins.c:701 -#, fuzzy, c-format -msgid "Command plugin \"%s\": no fname in startBackupFile packet.\n" -msgstr "Comando plugin \"%s\" regresó malo paquete startBackupFile.\n" +#: src/tools/testfind.c:292 +msgid "\t[will not descend: disallowed file system]" +msgstr "\t[no descenderá: sistema de archivo no permitido]" -#: src/filed/fd_plugins.c:775 -msgid "Plugin save packet not found.\n" -msgstr "Plugin guardar paquetes no encontrado.\n" +#: src/tools/testfind.c:294 +msgid "\t[will not descend: disallowed drive type]" +msgstr "\t[no descenderá: tipo de unidad no permitido]" -#: src/filed/fd_plugins.c:910 +#: src/tools/testfind.c:378 #, c-format -msgid "Plugin=%s not found.\n" -msgstr "Plugin=%s no encontrado.\n" +msgid "===== Filename truncated to 255 chars: %s\n" +msgstr "===== Nombre de Archivo truncado para 255 caracteres: %s\n" -#: src/filed/fd_plugins.c:977 +#: src/tools/testfind.c:395 #, c-format -msgid "Plugin createFile call failed. Stat=%d file=%s\n" -msgstr "Fallo llamada plugin createFile. Stat=%d archivo=%s\n" +msgid "========== Path name truncated to 255 chars: %s\n" +msgstr "========== Nombre de Ruta truncado para 255 caracteres: %s\n" -#: src/filed/fd_plugins.c:982 +#: src/tools/testfind.c:404 #, c-format -msgid "Plugin createFile call failed. Returned CF_ERROR file=%s\n" -msgstr "Fallo llamada plugin createFile. Retorno CF_ERROR archivo=%s\n" +msgid "========== Path length is zero. File=%s\n" +msgstr "========== La longitud de la ruta es nula. Archivo=%s\n" -#: src/filed/fd_plugins.c:1859 -#, fuzzy -msgid "Command plugin: no fname in baculaCheckChanges packet.\n" -msgstr "Comando plugin \"%s\" regresó malo paquete startBackupFile.\n" +#: src/tools/testfind.c:407 +#, c-format +msgid "Path: %s\n" +msgstr "Ruta: %s\n" -#: src/filed/filed.c:76 +#: src/tools/fstype.c:36 #, c-format msgid "" "\n" -"Version: %s (%s)\n" +"Usage: fstype [-v] path ...\n" "\n" -"Usage: bacula-fd [-f -s] [-c config_file] [-d debug_level]\n" -" -c use as configuration file\n" -" -d set debug level to \n" -" -dt print a timestamp in debug output\n" -" -f run in foreground (for debugging)\n" -" -g groupid\n" -" -k keep readall capabilities\n" -" -m print kaboom output (for debugging)\n" -" -s no signals (for debugging)\n" -" -t test configuration file and exit\n" -" -u userid\n" -" -v verbose user messages\n" -" -? print this message.\n" +" Print the file system type a given file/directory is on.\n" +" The following options are supported:\n" +"\n" +" -v print both path and file system type.\n" +" -? print this message.\n" "\n" msgstr "" "\n" -"Version: %s (%s)\n" +"Utilice: fstype [-v] ruta ...\n" "\n" -"Utilice: bacula-fd [-f -s] [-c archivo_de_configuración] [-d " -"nivel_depuración]\n" -" -c establecer archivo de configuración para archivo \n" -" -d establecer el nivel de depuración para \n" -" -dt imprimir timestamp en salida de depuración\n" -" -f ejecutar en primer plano (para depuración)\n" -" -g groupid\n" -" -k keep readall capabilities\n" -" -m imprimir salida kaboom para depuración)\n" -" -s sin señales(para depuración)\n" -" -t prueba - leer la configuración y salir\n" -" -u userid\n" -" -v mensajes de usuario detallados\n" +" Imprime el tipo de sistema de archivo de un determinado archivo/" +"directorio.\n" +"Las siguientes opciones son compatibles:\n" +"\n" +" -v imprimir tanto tipo de rutas y sistema de archivos.\n" " -? imprimir este mensaje.\n" "\n" -#: src/filed/filed.c:199 -msgid "-k option has no meaning without -u option.\n" -msgstr "la opción -k no tiene sentido sin la opción -u.\n" - -#: src/filed/filed.c:337 -#, c-format +#: src/tools/cats_test.c:48 +#, fuzzy, c-format msgid "" -"No File daemon resource defined in %s\n" -"Without that I don't know who I am :-(\n" +"\n" +"Version: %s (%s)\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -n specify the database name (default bacula)\n" +" -u specify database user name (default bacula)\n" +" -P specify database host (default NULL)\n" +" -w specify working directory\n" +" -p specify path\n" +" -f specify file\n" +" -l maximum tuple to fetch\n" +" -q print only errors\n" +" -v verbose\n" +" -? print this message\n" +"\n" msgstr "" -"Ninguno recurso File Daemon definido en %s\n" -"Sin eso yo no sé quién soy :-(\n" +"\n" +"Versión: %s (%s)\n" +" -d establece nivel de depuración para \n" +" -dt imprime timestamp en salida de depuración\n" +" -n especifica el nombre de la base de datos (por defecto bacula)\n" +" -u especifica el nombre de usuario de la base de datos (por " +"defecto bacula)\n" +" -P especifica la contraseña de la base de datos (por defecto " +"none)\n" +" -h especifica servidor de la base de datos (por defecto NULL)\n" +" -w especifica el directorio de trabajo\n" +" -j especifica jobids\n" +" -p especifica la ruta\n" +" -f especifica el archivo\n" +" -l tupla máxima a buscar\n" +" -T Truncar tabla de caché antes de empezar\n" +" -v detallado\n" +" -? imprime esta mensaje\n" +"\n" + +#: src/tools/cats_test.c:364 +#, fuzzy, c-format +msgid "Could not open, database \"%s\".\n" +msgstr "No se puede abrir la base de datos \"%s\".\n" -#: src/filed/filed.c:342 -#, c-format -msgid "Only one Client resource permitted in %s\n" -msgstr "Sólo un recurso de cliente permitido en %s\n" +#: src/tools/ing_test.c:219 src/tools/ing_test.c:252 src/tools/ing_test.c:290 +msgid "Stmt went wrong\n" +msgstr "" -#: src/filed/filed.c:366 -#, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"File daemon in %s.\n" +#: src/tools/ing_test.c:308 +msgid "CREATE-Stmt went wrong\n" msgstr "" -"Ninguno \"Certificado TLS de CA\" o \"Directorio de Certificado TLS de CA\" " -"están definidos para el demonio File en %s.\n" -#: src/filed/filed.c:390 -msgid "PKI encryption/signing enabled but not compiled into Bacula.\n" -msgstr "Cifrado o Firma PKI habilitado, pero no compilado en Bacula.\n" +#: src/tools/ing_test.c:313 +msgid "DROP-Stmt went wrong\n" +msgstr "" -#: src/filed/filed.c:401 +#: examples/nagios/check_bacula/check_bacula.c:59 #, c-format msgid "" -"\"PKI Key Pair\" must be defined for File daemon \"%s\" in %s if either " -"\"PKI Sign\" or \"PKI Encrypt\" are enabled.\n" +"Copyright (C) 2005 Christian Masopust\n" +"Written by Christian Masopust (2005)\n" +"\n" +"Version: " msgstr "" -"\"Par de Claves PKI\" debe estar definido para el demonio File \"%s\" en %s, " -"si uno o otro \"Firma PKI\" o \"Cifrar PKI\" están habilitados.\n" -#: src/filed/filed.c:413 src/filed/filed.c:444 src/filed/filed.c:485 -msgid "Failed to allocate a new keypair object.\n" -msgstr "No se ha podido asignar un nuevo objeto keypair.\n" +#: src/lib/status.h:82 +msgid "===================================================================\n" +msgstr "===================================================================\n" -#: src/filed/filed.c:417 +#: src/baconfig.h:60 src/baconfig.h:61 src/baconfig.h:66 src/baconfig.h:67 #, c-format -msgid "Failed to load public certificate for File daemon \"%s\" in %s.\n" -msgstr "Fallo al cargar certificado publico para File Daemon \"%s\" en %s.\n" +msgid "Failed ASSERT: %s\n" +msgstr "Fallo ASSERT: %s\n" -#: src/filed/filed.c:423 +#: src/qt-console/bcomm/dircomm.cpp:79 #, c-format -msgid "Failed to load private key for File daemon \"%s\" in %s.\n" -msgstr "Fallo al cargar llave privada para File Daemon \"%s\" en %s.\n" +msgid "Already connected\"%s\".\n" +msgstr "Ya conectado\"%s\".\n" -#: src/filed/filed.c:453 +#: src/qt-console/bcomm/dircomm.cpp:90 +#: src/qt-console/tray-monitor/tray-monitor.cpp:347 #, c-format -msgid "Failed to load private key from file %s for File daemon \"%s\" in %s.\n" -msgstr "" -"Fallo al cargar llave privada desde el archivo %s para File Daemon \"%s\" en " -"%s.\n" +msgid "Connecting to Director %s:%d" +msgstr "Conectando con Director %s:%d" -#: src/filed/filed.c:460 +#: src/qt-console/bcomm/dircomm.cpp:92 #, c-format msgid "" -"Failed to load trusted signer certificate from file %s for File daemon \"%s" -"\" in %s.\n" +"Connecting to Director %s:%d\n" +"\n" msgstr "" -"Fallo al cargar certificado del firmante desde el archivo %s para File " -"Daemon \"%s\" en %s.\n" +"Conectando con Director %s:%d\n" +"\n" -#: src/filed/filed.c:491 -#, c-format -msgid "" -"Failed to load master key certificate from file %s for File daemon \"%s\" in " -"%s.\n" -msgstr "" -"Fallo al cargar certificado de llave maestro desde el archivo %s para File " -"Daemon \"%s\" en %s.\n" +#: src/qt-console/bcomm/dircomm.cpp:163 +#: src/qt-console/tray-monitor/tray-monitor.cpp:349 +msgid "Director daemon" +msgstr "Servicio Director" -#: src/filed/filed.c:507 -#, c-format -msgid "No Director resource defined in %s\n" -msgstr "Recurso Director no definido en %s\n" +#: src/qt-console/bcomm/dircomm.cpp:201 +msgid "Initializing ..." +msgstr "Inicializando ..." -#: src/filed/acl.c:229 src/filed/acl.c:254 -#, fuzzy, c-format -msgid "aclx_get error on file \"%s\": ERR=%s\n" -msgstr "error de acl_get en el archivo \"%s\": ERR=%s\n" +#: src/qt-console/bcomm/dircomm.cpp:217 src/qt-console/console/console.cpp:130 +msgid "Connected" +msgstr "Conectado" -#: src/filed/acl.c:280 -#, fuzzy, c-format -msgid "Unknown acl type encountered on file \"%s\": %ld\n" -msgstr "" -"codificación errónea del tipo de ACL en el flujo de ACL en el archivo \"%s" -"\" \n" +#: src/qt-console/bcomm/dircomm.cpp:341 +msgid "Command completed ..." +msgstr "Comando completado ..." -#: src/filed/acl.c:304 src/filed/acl.c:313 -#, fuzzy, c-format -msgid "Failed to convert acl into text on file \"%s\"\n" -msgstr "No se puede convertir acl de texto en el archivo \"%s\"\n" +#: src/qt-console/bcomm/dircomm.cpp:348 src/qt-console/console/console.cpp:367 +msgid "Processing command ..." +msgstr "Procesando comando ..." -#: src/filed/acl.c:386 -#, fuzzy, c-format -msgid "" -"Trying to restore POSIX acl on file \"%s\" on filesystem without AIXC acl " -"support\n" -msgstr "" -"Tratando de restaurar acl en el archivo \"%s\" en sistema de ficheros sin " -"soporte a acl\n" +#: src/qt-console/bcomm/dircomm.cpp:355 +msgid "At main prompt waiting for input ..." +msgstr "En prompt principal esperando por una entrada..." -#: src/filed/acl.c:394 -#, fuzzy, c-format -msgid "" -"Trying to restore NFSv4 acl on file \"%s\" on filesystem without NFS4 acl " -"support\n" -msgstr "" -"Tratando de restaurar acl en el archivo \"%s\" en sistema de ficheros sin " -"soporte a acl\n" +#: src/qt-console/bcomm/dircomm.cpp:362 src/qt-console/bcomm/dircomm.cpp:375 +msgid "At prompt waiting for input ..." +msgstr "En prompt esperando por una entrada..." -#: src/filed/acl.c:442 src/filed/acl.c:452 -#, fuzzy, c-format -msgid "aclx_scanStr error on file \"%s\": ERR=%s\n" -msgstr "error de acl_set en el archivo \"%s\": ERR=%s\n" +#: src/qt-console/bcomm/dircomm.cpp:383 +msgid "Command failed." +msgstr "Comando fallido." -#: src/filed/acl.c:478 -#, fuzzy, c-format -msgid "aclx_put error on file \"%s\": ERR=%s\n" -msgstr "error de acl_get en el archivo \"%s\": ERR=%s\n" +#: src/qt-console/bcomm/dircomm.cpp:455 +msgid "Director disconnected." +msgstr "Director desconectado." -#: src/filed/acl.c:823 +#: src/qt-console/tray-monitor/tray_conf.cpp:165 #, c-format -msgid "acl_to_text error on file \"%s\": ERR=%s\n" -msgstr "acl_to_text error en el archivo \"%s\": ERR=%s\n" +msgid "Monitor: name=%s FDtimeout=%s SDtimeout=%s\n" +msgstr "Monitor: nombre=%s FDtimeout=%s SDtimeout=%s\n" -#: src/filed/acl.c:853 +#: src/qt-console/tray-monitor/tray_conf.cpp:171 #, c-format -msgid "acl_get_file error on file \"%s\": ERR=%s\n" -msgstr "error de acl_get_file en el archivo \"%s\": ERR=%s\n" - -#: src/filed/acl.c:906 -#, fuzzy, c-format -msgid "" -"acl_delete_def_file error on file \"%s\": filesystem doesn't support ACLs\n" -msgstr "acl_delete_def_file error en el archivo \"%s\": ERR=%s\n" +msgid "Director: name=%s address=%s FDport=%d\n" +msgstr "Director: nombre=%s dirección=%s FDport=%d\n" -#: src/filed/acl.c:912 +#: src/qt-console/tray-monitor/tray_conf.cpp:175 #, c-format -msgid "acl_delete_def_file error on file \"%s\": ERR=%s\n" -msgstr "acl_delete_def_file error en el archivo \"%s\": ERR=%s\n" +msgid "Client: name=%s address=%s FDport=%d\n" +msgstr "Cliente: nombre=%s dirección=%s FDport=%d\n" -#: src/filed/acl.c:923 +#: src/qt-console/tray-monitor/tray_conf.cpp:179 #, c-format -msgid "acl_from_text error on file \"%s\": ERR=%s\n" -msgstr "acl_from_text error en el archivo \"%s\": ERR=%s\n" +msgid "Storage: name=%s address=%s SDport=%d\n" +msgstr "Storage: nombre=%s dirección=%s SDport=%d\n" -#: src/filed/acl.c:939 +#: src/qt-console/tray-monitor/tray_conf.cpp:183 +#: src/qt-console/bat_conf.cpp:145 #, c-format -msgid "acl_valid error on file \"%s\": ERR=%s\n" -msgstr "error de acl_valid en el archivo \"%s\": ERR=%s\n" +msgid "ConsoleFont: name=%s font face=%s\n" +msgstr "ConsoleFont: nombre=%s font face=%s\n" -#: src/filed/acl.c:971 +#: src/qt-console/tray-monitor/tray-monitor.cpp:55 #, fuzzy, c-format -msgid "acl_set_file error on file \"%s\": filesystem doesn't support ACLs\n" -msgstr "acl_set_file error en el archivo \"%s\": ERR=%s\n" +msgid "" +"\n" +"Version: %s (%s) %s %s %s\n" +"\n" +"Usage: tray-monitor [-c config_file] [-d debug_level]\n" +" -c set configuration file to file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -t test - read configuration and exit\n" +" -? print this message.\n" +"\n" +msgstr "" +"Escrito por Nicolas Boichat (2004)\n" +"\n" +"Versión: %s (%s) %s %s %s\n" +"\n" +"Utilice: tray-monitor [-c archivo_configuración] [-d nivel_depuración]\n" +" -c establece archivo de configuración para archivo\n" +" -d establece nivel de depuración para \n" +" -dt imprime timestamp en salida de depuración\n" +" -t prueba - leer configuración y salir\n" +" -? imprimir este mensaje.\n" +"\n" -#: src/filed/acl.c:980 +#: src/qt-console/tray-monitor/tray-monitor.cpp:204 #, c-format -msgid "acl_set_file error on file \"%s\": ERR=%s\n" -msgstr "acl_set_file error en el archivo \"%s\": ERR=%s\n" +msgid "" +"Error: %d Monitor resources defined in %s. You must define one and only one " +"Monitor resource.\n" +msgstr "" +"Error: %d Monitor de recursos definidos en %s. Usted debe definir un único " +"monitor de recursos.\n" -#: src/filed/acl.c:1087 src/filed/acl.c:1116 src/filed/acl.c:1230 -#: src/filed/acl.c:1738 src/filed/acl.c:1845 +#: src/qt-console/tray-monitor/tray-monitor.cpp:236 #, c-format -msgid "pathconf error on file \"%s\": ERR=%s\n" -msgstr "error de pathconf en el archivo \"%s\": ERR=%s\n" +msgid "" +"No Client, Storage or Director resource defined in %s\n" +"Without that I don't how to get status from the File, Storage or Director " +"Daemon :-(\n" +msgstr "" +"Ningún recurso Cliente, Storage o Director definido en %s\n" +"Sin esto, Yo no se como obtener el estado de los demonios File, Storage o " +"Director :-(\n" -#: src/filed/acl.c:1246 -#, fuzzy, c-format +#: src/qt-console/tray-monitor/tray-monitor.cpp:251 +#, c-format msgid "" -"Trying to restore acl on file \"%s\" on filesystem without %s acl support\n" +"Invalid refresh interval defined in %s\n" +"This value must be greater or equal to 1 second and less or equal to 10 " +"minutes (read value: %d).\n" msgstr "" -"Tratando de restaurar acl en el archivo \"%s\" en sistema de ficheros sin " -"soporte a acl\n" +"Invalido intervalo de actualización definido en %s\n" +"Este valor debe ser mayor o igual a 1 segundo y menor o igual a 10 minutos " +"(leer el valor:% d).\n" -#: src/filed/acl.c:1531 +#: src/qt-console/tray-monitor/tray-monitor.cpp:319 #, c-format -msgid "getacl error on file \"%s\": ERR=%s\n" -msgstr "error de getacl en el archivo \"%s\": ERR=%s\n" +msgid "Error, currentitem is not a Client or a Storage..\n" +msgstr "Error, CurrentItem no es un Cliente o un Storage ...\n" -#: src/filed/acl.c:1566 +#: src/qt-console/tray-monitor/tray-monitor.cpp:354 #, c-format -msgid "acltostr error on file \"%s\": ERR=%s\n" -msgstr "altostr error en el archivo \"%s\": ERR=%s\n" +msgid "Connecting to Client %s:%d" +msgstr "Conectando con Cliente %s:%d" + +#: src/qt-console/tray-monitor/tray-monitor.cpp:356 +msgid "File daemon" +msgstr "demonio File" -#: src/filed/acl.c:1588 src/filed/acl.c:1598 +#: src/qt-console/tray-monitor/tray-monitor.cpp:361 #, c-format -msgid "strtoacl error on file \"%s\": ERR=%s\n" -msgstr "strtoacl error en el archivo \"%s\": ERR=%s\n" +msgid "Connecting to Storage %s:%d" +msgstr "Conectando con Storage %s:%d" -#: src/filed/acl.c:1627 -#, fuzzy, c-format -msgid "setacl error on file \"%s\": filesystem doesn't support ACLs\n" -msgstr "" -"Tratando de restaurar acl en el archivo \"%s\" en sistema de ficheros sin " -"soporte a acl\n" +#: src/qt-console/tray-monitor/tray-monitor.cpp:367 +#: src/qt-console/tray-monitor/tray-monitor.cpp:397 +#, c-format +msgid "Error, currentitem is not a Client, a Storage or a Director..\n" +msgstr "Error, currentitem no es un cliente, un Storage o un Director..\n" + +#: src/qt-console/tray-monitor/tray-monitor.cpp:372 +msgid "Cannot connect to daemon." +msgstr "No se puede conectar al demonio" -#: src/filed/acl.c:1635 +#: src/qt-console/tray-monitor/tray-monitor.cpp:381 #, c-format -msgid "setacl error on file \"%s\": ERR=%s\n" -msgstr "setacl error en el archivo \"%s\": ERR=%s\n" +msgid "Authentication error : %s" +msgstr "Error de autenticación : %s" + +#: src/qt-console/tray-monitor/tray-monitor.cpp:388 +msgid "Opened connection with Director daemon." +msgstr "Conexión abierta con demonio Director." + +#: src/qt-console/tray-monitor/tray-monitor.cpp:391 +msgid "Opened connection with File daemon." +msgstr "Conexión abierta con demonio File." + +#: src/qt-console/tray-monitor/tray-monitor.cpp:394 +msgid "Opened connection with Storage daemon." +msgstr "Conexión abierta con demonio Storage." + +#: src/qt-console/tray-monitor/tray-monitor.cpp:445 +msgid "Error : BNET_HARDEOF or BNET_ERROR" +msgstr "Error: BNET_HARDEOF o BNET_ERROR" + +#: src/qt-console/tray-monitor/tray-monitor.cpp:454 +msgid "Error : Connection closed." +msgstr "Error : Conexión cerrada." + +#: src/qt-console/tray-monitor/authenticate.cpp:75 +#, fuzzy +msgid "" +"Director authorization problem.\n" +"Most likely the passwords do not agree.\n" +"Please see " +msgstr "" +"Director problema de autorización.\n" +"Lo mas probable es que las contraseñas no están de acuerdo.\n" +"Por favor vea http://www.bacula.org/en/rel-manual/Bacula_Freque_Asked_Questi." +"html#SECTION003760000000000000000 para ayuda.\n" -#: src/filed/acl.c:1760 +#: src/qt-console/tray-monitor/authenticate.cpp:125 +#, fuzzy +msgid "" +"Director and Storage daemon passwords or names not the same.\n" +"Please see " +msgstr "Nombres o contraseñas en el Director o Storage no son las mismas.\n" + +#: src/qt-console/tray-monitor/authenticate.cpp:132 #, c-format -msgid "acl_get error on file \"%s\": ERR=%s\n" -msgstr "error de acl_get en el archivo \"%s\": ERR=%s\n" +msgid "bdird set configuration file to file\n" +" -dnn set debug level to nn\n" +" -s no signals\n" +" -t test - read configuration and exit\n" +" -? print this message.\n" +"\n" msgstr "" -"Tratando de restaurar acl en el archivo \"%s\" en sistema de ficheros sin " -"soporte a acl ace\n" +"\n" +"Versión: %s (%s) %s %s %s\n" +"\n" +"Utilice: bat [-s] [-c archivo_de_configuración] [-d nivel_depuración " +"[archivo_de_configuración]\n" +" -c establecer archivo de configuración para el archivo\n" +" -dnn establecer el nivel de depuración a nn\n" +" -s no hay señales\n" +" -t prueba - leer la configuración y salir\n" +" -? imprimir este mensaje.\n" +"\n" -#: src/filed/acl.c:1890 +#: src/qt-console/bat_conf.cpp:142 #, c-format -msgid "acl_fromtext error on file \"%s\": ERR=%s\n" -msgstr "error de acl_fromtext en el archivo \"%s\": ERR=%s\n" +msgid "Console: name=%s\n" +msgstr "Console: nombre=%s\n" -#: src/filed/acl.c:1904 src/filed/acl.c:1912 -#, c-format -msgid "wrong encoding of acl type in acl stream on file \"%s\"\n" -msgstr "" -"codificación errónea del tipo de ACL en el flujo de ACL en el archivo \"%s" -"\" \n" +#~ msgid "No FreeSpace command defined.\n" +#~ msgstr "Comando FreeSpace no definido.\n" -#: src/filed/acl.c:1937 -#, c-format -msgid "acl_set error on file \"%s\": ERR=%s\n" -msgstr "error de acl_set en el archivo \"%s\": ERR=%s\n" +#~ msgid "Cannot run free space command. Results=%s ERR=%s\n" +#~ msgstr "" +#~ "No se puede ejecutar comando de espacio libre. Resultados=%s ERR=%s\n" -#: src/filed/acl.c:2023 -#, c-format -msgid "acltotext error on file \"%s\": ERR=%s\n" -msgstr "acltotext error en el archivo \"%s\": ERR=%s\n" +#~ msgid "Error writing part %d to the DVD: ERR=%s\n" +#~ msgstr "Error escribiendo parte %d en el DVD: ERR=%s\n" -#: src/filed/acl.c:2046 -#, c-format -msgid "aclfromtext error on file \"%s\": ERR=%s\n" -msgstr "aclfromtext error en el archivo \"%s\": ERR=%s\n" +#~ msgid "Error while writing current part to the DVD: %s" +#~ msgstr "Error al escribir parte actual al DVD: %s" -#: src/filed/acl.c:2066 -#, c-format -msgid "acl(SETACL) error on file \"%s\": ERR=%s\n" -msgstr "acl(SETACL) error en el archivo \"%s\": ERR=%s\n" +#~ msgid "Part %d (%lld bytes) written to DVD.\n" +#~ msgstr "Parte %d (%lld bytes) escrito al DVD.\n" -#: src/filed/acl.c:2132 -#, fuzzy, c-format -msgid "pioctl VIOCGETAL error on file \"%s\": ERR=%s\n" -msgstr "acl(SETACL) error en el archivo \"%s\": ERR=%s\n" +#~ msgid "Remaining free space %s on %s\n" +#~ msgstr "Espacio libre restante %s en %s\n" -#: src/filed/acl.c:2160 -#, fuzzy, c-format -msgid "pioctl VIOCSETAL error on file \"%s\": ERR=%s\n" -msgstr "acl(SETACL) error en el archivo \"%s\": ERR=%s\n" +#~ msgid "Next Volume part already exists on DVD. Cannot continue: %s\n" +#~ msgstr "" +#~ "Siguiente parte del volumen ya existe en DVD. No se puede continuar: %s\n" -#: src/filed/acl.c:2363 -#, c-format -msgid "Can't restore ACLs of %s - incompatible acl stream encountered - %d\n" -msgstr "" -"No puede restaurar ACL de %s - incompatible flujo acl encontrado - %d\n" +#~ msgid "" +#~ "Error writing. Current part less than total number of parts (%d/%d, " +#~ "device=%s)\n" +#~ msgstr "" +#~ "Error al escribir. Parte actual menor que número total de partes (%d/%d, " +#~ "dispositivo=%s)\n" -#: src/filed/verify_vol.c:63 -msgid "Storage command not issued before Verify.\n" -msgstr "Comando Storage no publicado antes de Verificar.\n" +#~ msgid "Unable to write last on %s: ERR=%s\n" +#~ msgstr "No se puede escribir última en %s: ERR=%s\n" -#: src/filed/verify_vol.c:97 src/filed/restore.c:486 -#, c-format -msgid "Record header scan error: %s\n" -msgstr "Error analizando registro de cabecera: %s\n" +#, fuzzy +#~ msgid "" +#~ "Out of freespace caused End of Volume \"%s\" at %u:%u on device %s. Write " +#~ "of %u bytes got %d.\n" +#~ msgstr "" +#~ "Fin de Volumen \"%s\" en %u:%u en el dispositivo %s. Escribió %u bytes " +#~ "obtuvo %d.\n" -#: src/filed/verify_vol.c:106 src/filed/restore.c:498 -#, c-format -msgid "Data record error. ERR=%s\n" -msgstr "Error de registro de datos. ERR=%s\n" +#~ msgid "" +#~ "Error while writing, current part number is less than the total number of " +#~ "parts (%d/%d, device=%s)\n" +#~ msgstr "" +#~ "Error al escribir, número de parte actual es menor que el número total de " +#~ "partes (%d/%d, dispositivo=%s)\n" -#: src/filed/verify_vol.c:110 src/filed/restore.c:502 -#, c-format -msgid "Actual data size %d not same as header %d\n" -msgstr "Tamaño actual de los datos %d no igual a cabecera %d\n" +#~ msgid "Unable to open device next part %s: ERR=%s\n" +#~ msgstr "No se puede abrir próxima parte %s del dispositivo: ERR=%s\n" -#: src/filed/verify_vol.c:143 -#, c-format -msgid "Error scanning record header: %s\n" -msgstr "Error escaneando registro de cabecera: %s\n" +#~ msgid "" +#~ "End of Volume \"%s\" at %u:%u on device %s (part_size=%s, free_space=%s, " +#~ "free_space_errno=%d, errmsg=%s).\n" +#~ msgstr "" +#~ "Fin de Volumen \"%s\" en %u:%u en el dispositivo %s (part_size=%s, " +#~ "free_space=%s, free_space_errno=%d, errmsg=%s).\n" -#: src/filed/backup.c:102 -msgid "Cannot set buffer size FD->SD.\n" -msgstr "No puede establecer el tamaño del búfer FD-> SD.\n" +#~ msgid "" +#~ "End of Volume \"%s\" at %u:%u on device %s (part_size=%s, free_space=%s, " +#~ "free_space_errno=%d).\n" +#~ msgstr "" +#~ "Fin de Volumen \"%s\" en %u:%u en el dispositivo %s (part_size=%s, " +#~ "free_space=%s, free_space_errno=%d).\n" -#: src/filed/backup.c:194 -#, c-format -msgid "Encountered %ld acl errors while doing backup\n" -msgstr "Detectado %ld errores de acl al hacer copia de seguridad\n" +#~ msgid "Could not initialize Python\n" +#~ msgstr "No se pudo inicializar Python\n" -#: src/filed/backup.c:198 -#, c-format -msgid "Encountered %ld xattr errors while doing backup\n" -msgstr "Detectado %ld errores de xattr al hacer copia de seguridad\n" +#~ msgid "Could not Run Python string %s\n" +#~ msgstr "No se pudo ejecutar Python cadena %s\n" -#: src/filed/backup.c:267 src/filed/backup.c:276 -msgid "An error occurred while encrypting the stream.\n" -msgstr "A ocurrido un error al cifrar el stream.\n" +#~ msgid "Could not initialize Python Job type.\n" +#~ msgstr "No se pudo inicializar Job tipo Python.\n" -#: src/filed/backup.c:387 -#, c-format -msgid " Recursion turned off. Will not descend from %s into %s\n" -msgstr "Recursión desactivado. No descenderá de %s dentro de %s\n" +#~ msgid "Could not import Python script %s/%s. Python disabled.\n" +#~ msgstr "No se puede importar script Python %s/%s. Python deshabilitado.\n" -#: src/filed/backup.c:394 -#, fuzzy, c-format -msgid " %s is a different filesystem. Will not descend from %s into it.\n" -msgstr "" -"%s es un sistema de ficheros diferentes. No descenderá de %s dentro de %s\n" +#~ msgid "Could not create Python Job Object.\n" +#~ msgstr "No es posible crear objeto Job Python.\n" -#: src/filed/backup.c:400 -#, c-format -msgid " Disallowed filesystem. Will not descend from %s into %s\n" -msgstr "Sistema de Archivos no permitido. No descenderá de %s en %s\n" +#~ msgid "Python function \"%s\" not found.\n" +#~ msgstr "Python función \"%s\" no encontrada.\n" -#: src/filed/backup.c:405 -#, c-format -msgid " Disallowed drive type. Will not descend into %s\n" -msgstr "Tipo de unidad no permitido. No descenderá en %s\n" +#~ msgid "Unknown Python daemon event %s\n" +#~ msgstr "Demonio Python evento %s desconocido\n" -#: src/filed/backup.c:416 -#, c-format -msgid " Socket file skipped: %s\n" -msgstr "Archivo de Socket omitido: %s\n" +#~ msgid "Unable to initialize the Python lock. ERR=%s\n" +#~ msgstr "No se puede inicializar el bloqueo de Python. ERR=%s\n" -#: src/filed/backup.c:429 -#, c-format -msgid " Could not access \"%s\": ERR=%s\n" -msgstr "No se pudo acceder a \"%s\": ERR=%s\n" +#~ msgid "Cannot open current directory: ERR=%s\n" +#~ msgstr "No se puede abrir el directorio actual: ERR=%s\n" -#: src/filed/backup.c:436 -#, c-format -msgid " Could not follow link \"%s\": ERR=%s\n" -msgstr "No se pudo seguir el enlace \"%s\": ERR=%s\n" +#~ msgid "Cannot get current directory: ERR=%s\n" +#~ msgstr "No se puede obtener el directorio actual: ERR=%s\n" -#: src/filed/backup.c:443 -#, c-format -msgid " Could not stat \"%s\": ERR=%s\n" -msgstr "No se pudo stat \"%s\": ERR=%s\n" +#~ msgid "Cannot reset current directory: ERR=%s\n" +#~ msgstr "No se puede restablecer el directorio actual: ERR=%s\n" -#: src/filed/backup.c:453 -#, c-format -msgid " Archive file not saved: %s\n" -msgstr "Archivo no guardado: %s\n" +#~ msgid "Error in %s file %s: ERR=%s\n" +#~ msgstr "Error en %s archivo %s: ERR=%s\n" -#: src/filed/backup.c:457 -#, c-format -msgid " Could not open directory \"%s\": ERR=%s\n" -msgstr "No se puede abrir directorio \"%s\": ERR=%s.\n" +#~ msgid "Error in %s: ERR=%s\n" +#~ msgstr "Error en %s: ERR=%s\n" -#: src/filed/backup.c:466 -#, c-format -msgid " Unknown file type %d; not saved: %s\n" -msgstr " Tipo de archivo %d desconocido; no ha sido guardado: %s\n" +#~ msgid "AdjustTokenPrivileges set " +#~ msgstr "Establecer AdjustTokenPrivileges " -#: src/filed/backup.c:522 -#, c-format -msgid "%s signature digest initialization failed\n" -msgstr "Fallo la inicialización de la firma digest %s\n" +#~ msgid "Generate VSS snapshots. Driver=\"%s\", Drive(s)=\"%s\"\n" +#~ msgstr "" +#~ "Generar instantáneas(snapshots) VSS. Driver=\"%s\", Drive(s)=\"%s\"\n" -#: src/filed/backup.c:630 -#, c-format -msgid " Cannot open \"%s\": ERR=%s.\n" -msgstr "No se puede abrir \"%s\": ERR=%s.\n" +#, fuzzy +#~ msgid "CreateSGenerate VSS snapshots failed. ERR=%s\n" +#~ msgstr "Fallo al generar VSS snapshots.\n" -#: src/filed/backup.c:667 -#, c-format -msgid " Cannot open resource fork for \"%s\": ERR=%s.\n" -msgstr "No se puede abrir recurso fork para \"%s\": ERR=%s.\n" +#, fuzzy +#~ msgid "Generate VSS snapshot of drive \"%c:\\\" failed.\n" +#~ msgstr "Fallo al generar VSS snapshots.\n" -#: src/filed/backup.c:763 -msgid "Failed to allocate memory for crypto signature.\n" -msgstr "No se pudo asignar memoria para la firma de cifrado.\n" +#~ msgid "VSS Writer (PrepareForBackup): %s\n" +#~ msgstr "VSS Writer (PrepareForBackup): %s\n" -#: src/filed/backup.c:768 src/filed/backup.c:774 src/filed/backup.c:789 -msgid "An error occurred while signing the stream.\n" -msgstr "Se produjo un error al firmar el stream.\n" +#~ msgid "No drive letters found for generating VSS snapshots.\n" +#~ msgstr "" +#~ "No encuentra las letras de unidad para la generación de instantáneas" +#~ "(snapshots) VSS.\n" -#: src/filed/backup.c:813 -msgid "An error occurred finalizing signing the stream.\n" -msgstr "Se produjo un error concluir la firma del stream.\n" +#, fuzzy +#~ msgid "VSS was not initialized properly. ERR=%s\n" +#~ msgstr "" +#~ "VSS no se inicializo correctamente. Suporte VSS está desactivado. ERR=%s\n" -#: src/filed/backup.c:931 -#, c-format -msgid "Compression deflateParams error: %d\n" -msgstr "Error de compresión DeflateParams: %d\n" +#~ msgid "VSS was not initialized properly. VSS support is disabled. ERR=%s\n" +#~ msgstr "" +#~ "VSS no se inicializo correctamente. Suporte VSS está desactivado. ERR=%s\n" -#: src/filed/backup.c:968 #, fuzzy -msgid "Encrypting sparse or offset data not supported.\n" -msgstr "Cifrado de datos dispersos no soportado.\n" - -#: src/filed/backup.c:975 -msgid "Failed to initialize encryption context.\n" -msgstr "Fallo al inicializar el contexto de cifrado.\n" +#~ msgid "VSS Writer (RestoreComplete): %s\n" +#~ msgstr "VSS Writer (BackupComplete): %s\n" -#: src/filed/backup.c:1085 -#, c-format -msgid "Compression deflate error: %d\n" -msgstr "Error de compresión Deflate: %d\n" +#~ msgid "Job pointer not found." +#~ msgstr "No se encuentra el puntero del Job." -#: src/filed/backup.c:1092 -#, c-format -msgid "Compression deflateReset error: %d\n" -msgstr "Error de compresión DeflateReset: %d\n" +#~ msgid "Attribute %s not found." +#~ msgstr "Atributo %s no encontrado." -#: src/filed/backup.c:1126 -#, fuzzy, c-format -msgid "Compression LZO error: %d\n" -msgstr "Error de compresión Deflate: %d\n" +#~ msgid "Cannot delete attribute %s" +#~ msgstr "No se puedo eliminar atributo %s" -#: src/filed/backup.c:1171 src/filed/backup.c:1187 -msgid "Encryption error\n" -msgstr "Error de cifrado\n" +#~ msgid "Cannot find attribute %s" +#~ msgstr "No se puedo encontrar atributo %s" -#: src/filed/backup.c:1213 -#, c-format -msgid "Read error on file %s. ERR=%s\n" -msgstr "Error de lectura en el archivo %s. ERR=%s\n" +#~ msgid "Read-only attribute" +#~ msgstr "Atributo Solo-Lectura" -#: src/filed/backup.c:1216 -#, fuzzy, c-format -msgid "Too many errors. JobErrors=%d.\n" -msgstr "Demasiados errores.\n" +#, fuzzy +#~ msgid "JobId %s is not running. Use Job name to %s inactive jobs.\n" +#~ msgstr "" +#~ "JobId %s no está en ejecución. Utilice el nombre del Job para cancelar " +#~ "jobs inactivo.\n" -#: src/filed/backup.c:1226 -msgid "Encryption padding error\n" -msgstr "Error de relleno de cifrado\n" +#~ msgid "" +#~ "Cancel: %s\n" +#~ "\n" +#~ "%s" +#~ msgstr "" +#~ "Cancelar: %s\n" +#~ "\n" +#~ "%s" -#: src/filed/backup.c:1290 -msgid "Invalid file flags, no supported data stream type.\n" -msgstr "Invalidas banderas de archivo, tipo de flujo de datos no soportado.\n" +#~ msgid "Confirm cancel?" +#~ msgstr "Confirmar cancelar?" -#: src/filed/backup.c:1549 -#, c-format -msgid "VSS Writer (BackupComplete): %s\n" -msgstr "VSS Writer (BackupComplete): %s\n" +#~ msgid "Disable a job" +#~ msgstr "Deshabilitar un job" -#: src/filed/restore.c:114 -#, c-format -msgid "Size of data or stream of %s not correct. Original %s, restored %s.\n" -msgstr "" -"Tamaño de datos o flujo de %s no es correcto. Original %s, restaurado %s\n" +#~ msgid "Enable a job" +#~ msgstr "Habilitar un job" -#: src/filed/restore.c:134 -#, c-format -msgid "Invalid length of Finder Info (got %d, not 32)\n" -msgstr "Longitud no válida de Buscador de Información (obtuvo %d, no 32)\n" +#~ msgid "Python control commands" +#~ msgstr "Comandos de control de Python" -#: src/filed/restore.c:139 -#, c-format -msgid "Could not set Finder Info on %s\n" -msgstr "No se pudo establecer Finder Info en %s\n" +#~ msgid "Python interpreter restarted.\n" +#~ msgstr "Interprete Python reiniciado.\n" -#: src/filed/restore.c:418 #, fuzzy -msgid "LZO init failed\n" -msgstr "Negociación TLS fallida\n" +#~ msgid "Illegal JobId %s ignored\n" +#~ msgstr "Clonar JobId %d iniciado.\n" -#: src/filed/restore.c:660 -msgid "Unexpected cryptographic session data stream.\n" -msgstr "Inesperado flujo de datos de sesión criptográfica.\n" +#~ msgid "Please Plugin Options string: " +#~ msgstr "Por favor, cadena de Opciones de Plugin:" -#: src/filed/restore.c:670 -msgid "" -"No private decryption keys have been defined to decrypt encrypted backup " -"data.\n" -msgstr "" -"Ninguna claves privadas de descifrado se ha definido para descifrar los " -"datos cifrados de las copia de seguridad.\n" +#~ msgid "%6d %-6s %-20s %s\n" +#~ msgstr "%6d %-6s %-20s %s\n" -#: src/filed/restore.c:681 -msgid "Could not create digest.\n" -msgstr "No es posible crear sumario.\n" +#, fuzzy +#~ msgid " %-30s\n" +#~ msgstr "Job : %s\n" -#: src/filed/restore.c:699 -msgid "Missing private key required to decrypt encrypted backup data.\n" -msgstr "" -"Falta la clave privada requerida para descifrar los datos del respaldo " -"cifrado.\n" +#~ msgid "Pool record not found." +#~ msgstr "Registro Pool no encontrado" -#: src/filed/restore.c:702 -msgid "Decrypt of the session key failed.\n" -msgstr "Fallo al descifrar la clave de sesión.\n" +#~ msgid "Priority must be 1-100" +#~ msgstr "Prioridad debe ser 1-100" -#: src/filed/restore.c:708 -#, c-format -msgid "An error occurred while decoding encrypted session data stream: %s\n" -msgstr "" -"Se produjo un error al descodificar flujo de datos de sesión encriptados: " -"%s\n" +#~ msgid "Job Level can be set only during JobInit" +#~ msgstr "Nivel de Job sólo se puede ajustar durante JobInit" -#: src/filed/restore.c:775 src/filed/restore.c:828 -#, c-format -msgid "Missing encryption session data stream for %s\n" -msgstr "Falta cifrado de flujo de datos de sesión para %s\n" +#~ msgid "Bad JobLevel string" +#~ msgstr "Mala cadena JobLevel" -#: src/filed/restore.c:783 src/filed/restore.c:835 -#, c-format -msgid "Failed to initialize decryption context for %s\n" -msgstr "Fallo al inicializar el contexto de descifrado para %s\n" +#~ msgid "1992 Update Media error. VolFiles=%u, CatFiles=%u\n" +#~ msgstr "1992 Error de actualización de Media. VolFiles=%u, CatFiles=%u\n" -#: src/filed/restore.c:847 -#, c-format -msgid "Cannot open resource fork for %s.\n" -msgstr "No se puede abrir recursos fork para %s.\n" +#~ msgid "" +#~ "Written by Nicolas Boichat (2004)\n" +#~ "\n" +#~ "Version: %s (%s) %s %s %s\n" +#~ "\n" +#~ "Usage: tray-monitor [-c config_file] [-d debug_level]\n" +#~ " -c set configuration file to file\n" +#~ " -d set debug level to \n" +#~ " -dt print timestamp in debug output\n" +#~ " -t test - read configuration and exit\n" +#~ " -? print this message.\n" +#~ "\n" +#~ msgstr "" +#~ "Escrito por Nicolas Boichat (2004)\n" +#~ "\n" +#~ "Versión: %s (%s) %s %s %s\n" +#~ "\n" +#~ "Utilice: tray-monitor [-c archivo_configuración] [-d nivel_depuración]\n" +#~ " -c establece archivo de configuración para archivo\n" +#~ " -d establece nivel de depuración para \n" +#~ " -dt imprime timestamp en salida de depuración\n" +#~ " -t prueba - leer configuración y salir\n" +#~ " -? imprimir este mensaje.\n" +#~ "\n" -#: src/filed/restore.c:992 -msgid "Unexpected cryptographic signature data stream.\n" -msgstr "Inesperado signatura de datos de sesión criptográfica.\n" +#~ msgid "Bacula daemon status monitor" +#~ msgstr "Monitor de Estado del demonio Bacula" -#: src/filed/restore.c:1000 -#, c-format -msgid "Failed to decode message signature for %s\n" -msgstr "No se ha podido descifrar la firma del mensaje para %s\n" +#~ msgid "Open status window..." +#~ msgstr "Abrir la ventana de estado..." -#: src/filed/restore.c:1064 -#, c-format -msgid "Encountered %ld acl errors while doing restore\n" -msgstr "Detectado %ld errores de acl mientras que hace restaurar\n" +#~ msgid "Exit" +#~ msgstr "Salir" -#: src/filed/restore.c:1068 -#, c-format -msgid "Encountered %ld xattr errors while doing restore\n" -msgstr "Detectado %ld errores de xattr al hacer restauración\n" +#~ msgid "Bacula tray monitor" +#~ msgstr "Bacula tray monitor" -#: src/filed/restore.c:1072 -#, c-format -msgid "" -"%d non-supported data streams and %d non-supported attrib streams ignored.\n" -msgstr "" -"%d incompatible flujos de datos y %d incompatible atributos de flujos " -"ignorados.\n" +#~ msgid " (DIR)" +#~ msgstr "(DIR)" -#: src/filed/restore.c:1076 -#, c-format -msgid "%d non-supported resource fork streams ignored.\n" -msgstr "%d incompatible flujo de recurso fork ignorado.\n" +#~ msgid " (FD)" +#~ msgstr "(FD)" -#: src/filed/restore.c:1079 -#, c-format -msgid "%d non-supported Finder Info streams ignored.\n" -msgstr "%d incompatible flujo Finder Info ignorado.\n" +#~ msgid " (SD)" +#~ msgstr "(SD)" -#: src/filed/restore.c:1082 -#, c-format -msgid "%d non-supported acl streams ignored.\n" -msgstr "%d incompatible flujo de acl ignorado.\n" +#~ msgid "Unknown status." +#~ msgstr "Estado desconocido." -#: src/filed/restore.c:1085 -#, c-format -msgid "%d non-supported crypto streams ignored.\n" -msgstr "%d incompatible flujo de cifrado ignorado.\n" +#~ msgid "Refresh interval in seconds: " +#~ msgstr "Intervalo de actualización en segundos:" -#: src/filed/restore.c:1088 -#, c-format -msgid "%d non-supported xattr streams ignored.\n" -msgstr "ignorado %d no soportado flujo xattr.\n" +#~ msgid "Refresh now" +#~ msgstr "Actualizar Ahora" -#: src/filed/restore.c:1168 -msgid "Zlib errno" -msgstr "Zlib error" +#~ msgid "About" +#~ msgstr "Sobre" -#: src/filed/restore.c:1170 -msgid "Zlib stream error" -msgstr "Zlib error de stream" +#~ msgid "Close" +#~ msgstr "Cerrar" -#: src/filed/restore.c:1172 -msgid "Zlib data error" -msgstr "Zlib error de datos" +#~ msgid "Disconnecting from Director %s:%d\n" +#~ msgstr "Desconectando del Director %s:%d\n" -#: src/filed/restore.c:1174 -msgid "Zlib memory error" -msgstr "Zlib error de memoria" +#~ msgid "Disconnecting from Client %s:%d\n" +#~ msgstr "Desconectando del Cliente %s:%d\n" -#: src/filed/restore.c:1176 -msgid "Zlib buffer error" -msgstr "Zlib error de buffer" +#~ msgid "Disconnecting from Storage %s:%d\n" +#~ msgstr "Desconectando del Almacenamiento %s:%d\n" -#: src/filed/restore.c:1178 -msgid "Zlib version error" -msgstr "Zlib error de version" +#~ msgid "Bacula Tray Monitor" +#~ msgstr "Bacula Tray Monitor" -#: src/filed/restore.c:1218 -#, c-format -msgid "Missing cryptographic signature for %s\n" -msgstr "Falta la firma criptográfica para %s\n" +#~ msgid "Written by Nicolas Boichat\n" +#~ msgstr "Escrito por Nicolás Boichat\n" -#: src/filed/restore.c:1251 src/filed/restore.c:1280 -#, c-format -msgid "Signature validation failed for file %s: ERR=%s\n" -msgstr "Validación de la firma fallida para el archivo %s: ERR=%s\n" +#~ msgid "Version" +#~ msgstr "Version" -#: src/filed/restore.c:1268 -#, c-format -msgid "Digest one file failed for file: %s\n" -msgstr "Digest de un archivo fallido para el archivo: %s\n" +#~ msgid "" +#~ "Current job: %s\n" +#~ "Last job: %s" +#~ msgstr "" +#~ "Job actual: %s\n" +#~ "Ultimo job: %s" -#: src/filed/restore.c:1307 -#, c-format -msgid "Signature validation failed for %s: %s\n" -msgstr "Validación de la firma fallida para %s: %s\n" +#~ msgid " (%d errors)" +#~ msgstr "(%d errores)" -#: src/filed/restore.c:1404 -#, fuzzy, c-format -msgid "LZO uncompression error on file %s. ERR=%d\n" -msgstr "Error de descompresión en el archivo %s. ERR=%s\n" +#~ msgid " (%d error)" +#~ msgstr "(%d error)" -#: src/filed/restore.c:1441 -#, c-format -msgid "Uncompression error on file %s. ERR=%s\n" -msgstr "Error de descompresión en el archivo %s. ERR=%s\n" +#~ msgid "No current job." +#~ msgstr "Ningún trabajo actual." -#: src/filed/restore.c:1474 -#, c-format -msgid "Write error in Win32 Block Decomposition on %s: %s\n" -msgstr "Error de escritura en Bloque de Descomposición Win32 en %s: %s\n" +#~ msgid "Job status: Created" +#~ msgstr "Estado del trabajo: Creado" -#: src/filed/restore.c:1533 -msgid "Decryption error\n" -msgstr "Error de descifrado\n" +#~ msgid "Job status: Running" +#~ msgstr "Estado del trabajo: Ejecutando" -#: src/filed/restore.c:1626 -msgid "Logic error: output file should be open\n" -msgstr "Error lógico: el archivo de salida debe estar abierto\n" +#~ msgid "Job status: Blocked" +#~ msgstr "Estado del trabajo: Bloqueado" -#: src/filed/restore.c:1664 -msgid "Logic error: output file should not be open\n" -msgstr "Error lógica: archivo de salida no debe estar abierto\n" +#~ msgid "Job status: Terminated" +#~ msgstr "Estado del trabajo: Terminado" -#: src/filed/restore.c:1698 -#, c-format -msgid "Decryption error. buf_len=%d decrypt_len=%d on file %s\n" -msgstr "Error de descifrado. buf_len=%d decrypt_len=%d en el archivo %s\n" +#~ msgid "Job status: Terminated in error" +#~ msgstr "Estado del trabajo: Terminado con error" -#: src/filed/restore.c:1819 -msgid "Open File Manager paused\n" -msgstr "Administrador Open File pausado\n" +#~ msgid "Job status: Error" +#~ msgstr "Estado del trabajo: Error" -#: src/filed/restore.c:1823 -msgid "FAILED to pause Open File Manager\n" -msgstr "Fallo al pausar Administrador Open File\n" +#~ msgid "Job status: Fatal error" +#~ msgstr "Estado del trabajo: Fatal error" -#: src/filed/restore.c:1831 -#, c-format -msgid "Running as '%s'. Privmask=%#08x\n" -msgstr "Ejecutando como '%s'. Privmask=%#08x\n" +#~ msgid "Job status: Verify differences" +#~ msgstr "Estado del Job: Verificar las diferencias" -#: src/filed/restore.c:1833 -msgid "Failed to retrieve current UserName\n" -msgstr "Fallo al recuperar UserName actual\n" +#~ msgid "Job status: Canceled" +#~ msgstr "Estado del Job: Cancelado" -#: src/filed/job.c:456 -#, c-format -msgid "2901 Job %s not found.\n" -msgstr "2901 Job %s no encontrado.\n" +#~ msgid "Job status: Waiting on File daemon" +#~ msgstr "Estado del Job: Esperando en demonio File" -#: src/filed/job.c:466 -#, c-format -msgid "2001 Job %s marked to be canceled.\n" -msgstr "2001 Job %s marcado para ser cancelado.\n" +#~ msgid "Job status: Waiting on the Storage daemon" +#~ msgstr "Estado del Job: Esperando en demonio Storage" -#: src/filed/job.c:469 -msgid "2902 Error scanning cancel command.\n" -msgstr "2902 Error escaneando comando cancelar.\n" +#~ msgid "Job status: Waiting for new media" +#~ msgstr "Estado del Job: Esperando por nuevo medio" -#: src/filed/job.c:492 -#, c-format -msgid "2991 Bad setdebug command: %s\n" -msgstr "2991 Comando setdebug malo: %s\n" +#~ msgid "Job status: Waiting for Mount" +#~ msgstr "Estado del Job: Esperando por montar" -#: src/filed/job.c:515 -#, c-format -msgid "Bad estimate command: %s" -msgstr "Malo comando estimate: %s" +#~ msgid "Job status: Waiting for storage resource" +#~ msgstr "Estado del Job: Esperando por recurso storage" -#: src/filed/job.c:516 -msgid "2992 Bad estimate command.\n" -msgstr "2992 Malo comando estimación.\n" +#~ msgid "Job status: Waiting for job resource" +#~ msgstr "Estado del Job: Esperando por recurso job" -#: src/filed/job.c:539 -#, c-format -msgid "Bad Job Command: %s" -msgstr "Malo Comando Job: %s" +#~ msgid "Job status: Waiting for Client resource" +#~ msgstr "Estado del Job: Esperando por recurso Cliente" -#: src/filed/job.c:578 -#, c-format -msgid "Bad RunBeforeJob command: %s\n" -msgstr "Malo comando RunBeforeJob: %s\n" +#~ msgid "Job status: Waiting for maximum jobs" +#~ msgstr "Estado del Job: Esperando por jobs máximos " -#: src/filed/job.c:579 src/filed/job.c:598 -msgid "2905 Bad RunBeforeJob command.\n" -msgstr "2905 Malo comando RunBeforeJob.\n" +#~ msgid "Job status: Waiting for start time" +#~ msgstr "Estado del Job: Esperando por hora de inicio " -#: src/filed/job.c:609 -msgid "2905 Bad RunBeforeNow command.\n" -msgstr "2905 Malo comando RunBeforeNow.\n" +#~ msgid "Job status: Waiting for higher priority jobs to finish" +#~ msgstr "Estado del Job: Esperando por jobs de prioridad mayor por finalizar" -#: src/filed/job.c:628 -#, c-format -msgid "Bad RunAfter command: %s\n" -msgstr "Malo comando RunAfter: %s\n" +#~ msgid "Unknown job status %c." +#~ msgstr "Estado del job desconocido %c." -#: src/filed/job.c:629 -msgid "2905 Bad RunAfterJob command.\n" -msgstr "2905 Malo comando RunAfterJob.\n" +#~ msgid "Job status: Unknown(%c)" +#~ msgstr "Estado del job: Desconocido (%c)" -#: src/filed/job.c:665 -#, c-format -msgid "Bad RunScript command: %s\n" -msgstr "Malo comando RunScript: %s\n" +#~ msgid "Bad scan : '%s' %d\n" +#~ msgstr "Mala análisis: '%s' %d\n" -#: src/filed/job.c:666 -msgid "2905 Bad RunScript command.\n" -msgstr "2905 Malo comando RunScript.\n" +#~ msgid "Connecting to Client %s:%d\n" +#~ msgstr "Conectando con Cliente %s:%d\n" -#: src/filed/job.c:720 -#, fuzzy, c-format -msgid "Bad RestoreObject command: %s\n" -msgstr "Malo comando storage: %s" +#~ msgid "Connecting to Storage %s:%d\n" +#~ msgstr "Conectando con Storage %s:%d\n" -#: src/filed/job.c:785 -#, fuzzy -msgid "2909 Bad RestoreObject command.\n" -msgstr "2905 Malo comando RunBeforeJob.\n" +#~ msgid "Cannot connect to daemon.\n" +#~ msgstr "No se puede conectar al demonio.\n" -#: src/filed/job.c:824 -#, fuzzy, c-format -msgid "Plugin Directory not defined. Cannot use plugin: \"%s\"\n" -msgstr "Directorio de Plugin no definido. No se puede usar plug-in: \"%\"\n" +#~ msgid "Opened connection with Director daemon.\n" +#~ msgstr "Conexión abierta con demonio Director.\n" -#: src/filed/job.c:866 -#, c-format -msgid "Error running program: %s. stat=%d: ERR=%s\n" -msgstr "Error al ejecutar el programa: %s. stat=%d: ERR=%s\n" +#~ msgid "Opened connection with File daemon.\n" +#~ msgstr "Conexión abierta con demonio File.\n" -#: src/filed/job.c:877 -#, c-format -msgid "Cannot open FileSet input file: %s. ERR=%s\n" -msgstr "No se puede abrir archivo de entrada FileSet: %s. ERR=%s\n" +#~ msgid "Opened connection with Storage daemon.\n" +#~ msgstr "Conexión abierta con demonio Storage.\n" -#: src/filed/job.c:1031 -#, c-format -msgid "REGEX %s compile error. ERR=%s\n" -msgstr "Error de compilación REGEX %s. ERR=%s\n" +#, fuzzy +#~ msgid "<< Error: BNET_SUB_PROMPT signal received. >>\n" +#~ msgstr "<< Error: BNET_PROMPT señal recibida. >>\n" -#: src/filed/job.c:1182 -#, c-format -msgid "Invalid FileSet command: %s\n" -msgstr "Comando FilseSet invalido: %s\n" +#~ msgid "<< Heartbeat signal received, answered. >>\n" +#~ msgstr "<< Heartbeat señal recibida, respondió. >>\n" -#: src/filed/job.c:1655 -#, c-format -msgid "" -"DIR and FD clocks differ by %lld seconds, FD automatically compensating.\n" -msgstr "" -"Relojes de DIR y FD difieren por %lld segundos, FD compensando " -"automáticamente.\n" +#~ msgid "<< Unexpected signal received : %s >>\n" +#~ msgstr "<< Inesperada señal recibida: %s >>\n" -#: src/filed/job.c:1664 -#, c-format -msgid "Unknown backup level: %s\n" -msgstr "Nivel de copia de seguridad desconocido: %s\n" +#~ msgid "\n" +#~ msgstr "\n" -#: src/filed/job.c:1677 -#, c-format -msgid "Bad level command: %s\n" -msgstr "Malo comando nivel: %s\n" +#~ msgid "\n" +#~ msgstr "\n" -#: src/filed/job.c:1699 -#, c-format -msgid "Bad session command: %s" -msgstr "Malo comando sesión: %s" +#~ msgid "End of physical tape.\n" +#~ msgstr "Fin de la cinta física.\n" -#: src/filed/job.c:1760 -#, c-format -msgid "Bad storage command: %s" -msgstr "Malo comando storage: %s" +#~ msgid "Init Catalog" +#~ msgstr "Catálogo de inicio" -#: src/filed/job.c:1781 -#, c-format -msgid "Failed to connect to Storage daemon: %s:%d\n" -msgstr "Error al conectar con el demonio de Storage: %s:%d\n" +#~ msgid "Volume to Catalog" +#~ msgstr "Volumen para Catalogo" -#: src/filed/job.c:1793 -msgid "Failed to authenticate Storage daemon.\n" -msgstr "Fallo al autenticar demonio Storage.\n" +#~ msgid "Disk to Catalog" +#~ msgstr "Disco para Catalogo" -#: src/filed/job.c:1840 -msgid "ACL support not configured for your machine.\n" -msgstr "Soporte ACL no configurado para su máquina. \n" +#~ msgid "Data" +#~ msgstr "Datos" -#: src/filed/job.c:1844 -msgid "XATTR support not configured for your machine.\n" -msgstr "Soporte XATTR no está configurado para su máquina.\n" +#~ msgid "part" +#~ msgstr "parte" -#: src/filed/job.c:1853 -msgid "Cannot contact Storage daemon\n" -msgstr "No puede contactar demonio Storage\n" +#~ msgid "file" +#~ msgstr "archivo" -#: src/filed/job.c:1872 -#, c-format -msgid "Bad response to append open: %s\n" -msgstr "Mala respuesta para añadir abierto: %s\n" +#~ msgid "End of %s %u on device %s, Volume \"%s\"\n" +#~ msgstr "Fin de %s %u en dispositivo %s, Volumen \"%s\"\n" -#: src/filed/job.c:1877 -msgid "Bad response from stored to open command\n" -msgstr "Mala respuesta desde almacén para comando abrir\n" +#~ msgid "Want to append, but device %s is busy reading.\n" +#~ msgstr "Esperando anexar, pero el dispositivo %s está ocupado leyendo.\n" -#: src/filed/job.c:1909 -#, c-format -msgid "Generate VSS snapshots. Driver=\"%s\", Drive(s)=\"%s\"\n" -msgstr "Generar instantáneas(snapshots) VSS. Driver=\"%s\", Drive(s)=\"%s\"\n" +#~ msgid "Append data error.\n" +#~ msgstr "Error al añadir datos.\n" -#: src/filed/job.c:1912 -#, fuzzy, c-format -msgid "CreateSGenerate VSS snapshots failed. ERR=%s\n" -msgstr "Fallo al generar VSS snapshots.\n" +#~ msgid "Error in ParseTuple\n" +#~ msgstr "Error en ParseTuple\n" -#: src/filed/job.c:1919 -#, fuzzy, c-format -msgid "Generate VSS snapshot of drive \"%c:\\\" failed.\n" -msgstr "Fallo al generar VSS snapshots.\n" +#~ msgid "Parse tuple error in job_write\n" +#~ msgstr "Error de análisis de tupla en job_write\n" -#: src/filed/job.c:1925 -#, c-format -msgid "VSS Writer (PrepareForBackup): %s\n" -msgstr "VSS Writer (PrepareForBackup): %s\n" +#~ msgid "Error in Python method %s\n" +#~ msgstr "Error en el método Python %s\n" -#: src/filed/job.c:1930 -msgid "No drive letters found for generating VSS snapshots.\n" -msgstr "" -"No encuentra las letras de unidad para la generación de instantáneas" -"(snapshots) VSS.\n" +#, fuzzy +#~ msgid "Truncate on attributes file failed: ERR=%s\n" +#~ msgstr "Fallo fseek en los atributos de archivo: ERR=%s\n" -#: src/filed/job.c:1934 -#, fuzzy, c-format -msgid "VSS was not initialized properly. ERR=%s\n" -msgstr "" -"VSS no se inicializo correctamente. Suporte VSS está desactivado. ERR=%s\n" +#~ msgid "Could not open: %s, ERR=%s\n" +#~ msgstr "No se pudo abrir: %s, ERR=%s\n" -#: src/filed/job.c:1985 -msgid "Append Close with SD failed.\n" -msgstr "Añadir Cierre con SD fallido.\n" +#~ msgid "" +#~ "Error writing final part to DVD. This Volume may not be readable.\n" +#~ "%s" +#~ msgstr "" +#~ "Error al escribir la parte final a DVD. Este volumen puede no ser " +#~ "legible.\n" +#~ "%s" -#: src/filed/job.c:1989 -#, c-format -msgid "Bad status %d returned from Storage Daemon.\n" -msgstr "Mal estado %d regresado desde demonio Storage.\n" +#~ msgid "Unable to open device part=%d %s: ERR=%s\n" +#~ msgstr "No se puede abrir el dispositivo parte =%d %s: ERR=%s\n" -#: src/filed/job.c:2019 -#, c-format -msgid "2994 Bad verify command: %s\n" -msgstr "2994 Malo comando verificar: %s\n" +#, fuzzy +#~ msgid "Failed to allocate space for query filter.\n" +#~ msgstr "No se pudo asignar memoria para la firma de cifrado.\n" -#: src/filed/job.c:2034 src/filed/job.c:2075 -#, c-format -msgid "2994 Bad verify level: %s\n" -msgstr "2994 Malo nivel de verificar: %s\n" +#, fuzzy +#~ msgid "Failed to allocate space for query filters.\n" +#~ msgstr "No se pudo asignar memoria para la firma de cifrado.\n" -#: src/filed/job.c:2146 -#, c-format -msgid "Bad replace command. CMD=%s\n" -msgstr "Comando replace malo. CMD=%s\n" +#, fuzzy +#~ msgid "" +#~ "Unable to connect to Ingres server.\n" +#~ "Database=%s User=%s\n" +#~ "It is probably not running or your password is incorrect.\n" +#~ msgstr "" +#~ "No se puede conectar al servidor MySQL.\n" +#~ "Base de Datos=%s Usuario=%s\n" -#: src/filed/job.c:2169 -#, c-format -msgid "Bad where regexp. where=%s\n" -msgstr "Mala regexp where. where=%s\n" +#, fuzzy +#~ msgid "A user name for Ingres must be supplied.\n" +#~ msgstr "Un nombre de usuario para DBI debe ser suministrado.\n" -#: src/filed/job.c:2207 -#, c-format -msgid "VSS was not initialized properly. VSS support is disabled. ERR=%s\n" -msgstr "" -"VSS no se inicializo correctamente. Suporte VSS está desactivado. ERR=%s\n" +#~ msgid "" +#~ "Unable to locate the DBD drivers to DBI interface in: \n" +#~ "db_driverdir=%s. It is probaly not found any drivers\n" +#~ msgstr "" +#~ "Incapaz de localizar los controladores de la interfaz DBD para DBI en: \n" +#~ "db_driverdir=%s. Es probable que no se encuentra ningún controlador\n" -#: src/filed/job.c:2252 -#, fuzzy, c-format -msgid "VSS Writer (RestoreComplete): %s\n" -msgstr "VSS Writer (BackupComplete): %s\n" +#, fuzzy +#~ msgid "" +#~ "Unable to connect to DBI interface. Type=%s Database=%s User=%s\n" +#~ "Possible causes: SQL server not running; password incorrect; " +#~ "max_connections exceeded.\n" +#~ msgstr "" +#~ "No se pudo conectar a la interfaz DBI.\n" +#~ "Tipo=%s Base de Datos=%s Usuario=%s\n" +#~ "Probablemente no este ejecutando o su contraseña es incorrecta.\n" -#: src/filed/job.c:2302 -msgid "Improper calling sequence.\n" -msgstr "Secuencia de llamada impropia.\n" +#~ msgid "error inserting batch mode: %s" +#~ msgstr "Error insertando en modo batch: %s" -#: src/filed/job.c:2322 -#, c-format -msgid "Bad response to SD read open: %s\n" -msgstr "Mala respuesta para SD leer abrir: %s\n" +#~ msgid "Driver type not specified in Catalog resource.\n" +#~ msgstr "Tipo de controlador no especificado en los recursos de Catálogo.\n" -#: src/filed/job.c:2327 -msgid "Bad response from stored to read open command\n" -msgstr "Mala respuesta desde storage para comando leer abir\n" +#~ msgid "Invalid driver type, must be \"dbi:\"\n" +#~ msgstr "Tipo de controlador no válido, debe ser \"dbi:\"\n" -#: src/filed/job.c:2391 -#, c-format -msgid "Comm error with SD. bad response to %s. ERR=%s\n" -msgstr "Error de comunicación con SD. Mala respuesta a %s. ERR=%s\n" +#~ msgid "A user name for DBI must be supplied.\n" +#~ msgstr "Un nombre de usuario para DBI debe ser suministrado.\n" -#: src/filed/job.c:2394 -#, c-format -msgid "Bad response to %s command. Wanted %s, got %s\n" -msgstr "Mala respuesta al comando %s. Esperaba %s, obtuvo %s\n" +#~ msgid "Bad response to Hello command: ERR=" +#~ msgstr "mala respuesta al comando Hello: ERR =" -#: src/filed/authenticate.c:68 -#, c-format -msgid "I only authenticate directors, not %d\n" -msgstr "Yo sólo autentifico directores, no %d\n" +#~ msgid " Files=%s Bytes=%s Bytes/sec=%s Errors=%d\n" +#~ msgstr "Archivos=%s Bytes=%s Bytes/sec=%s Errores=%d\n" -#: src/filed/authenticate.c:100 -#, c-format -msgid "Connection from unknown Director %s at %s rejected.\n" -msgstr "Conexión desde Director %s desconocido en %s rechazada.\n" +#~ msgid "Bacula Client: Idle" +#~ msgstr "Bacula Cliente: Inactivo" -#: src/filed/authenticate.c:144 -#, c-format -msgid "Incorrect password given by Director at %s.\n" -msgstr "Contraseña incorrecta dada por el Director en %s.\n" +#~ msgid "Bacula Client: Running" +#~ msgstr "Bacula Cliente: Funcionando" -#: src/filed/authenticate.c:263 -msgid "" -"Authorization key rejected by Storage daemon.\n" -"Please see " -msgstr "" +#~ msgid "Bacula Client: Last Job Canceled" +#~ msgstr "Bacula Cliente: Ultimo Job Cancelado" -#: examples/nagios/check_bacula/check_bacula.c:59 -#, c-format -msgid "" -"Copyright (C) 2005 Christian Masopust\n" -"Written by Christian Masopust (2005)\n" -"\n" -"Version: " -msgstr "" +#~ msgid "Bacula Client: Last Job Failed" +#~ msgstr "Bacula Cliente: Ultimo Job Fallido" -#: src/baconfig.h:72 src/baconfig.h:73 src/baconfig.h:78 src/baconfig.h:79 -#, c-format -msgid "Failed ASSERT: %s\n" -msgstr "Fallo ASSERT: %s\n" +#~ msgid "Bacula Client: Last Job had Warnings" +#~ msgstr "Bacula Cliente: Ultimo Job con Advertencias" -#: src/win32/compat/compat.cpp:2721 -msgid "" -"\n" -"\n" -"Bacula ERROR: " -msgstr "" -"\n" -"\n" -"Bacula ERROR: " +#~ msgid "Failed to authenticate Storage daemon.\n" +#~ msgstr "Fallo al autenticar demonio Storage.\n" -#: src/win32/libwin32/service.cpp:107 -msgid "RegisterServiceCtlHandler failed" -msgstr "RegisterServiceCtlHandler fallido" +#~ msgid "" +#~ "\n" +#~ "\n" +#~ "Bacula ERROR: " +#~ msgstr "" +#~ "\n" +#~ "\n" +#~ "Bacula ERROR: " -#: src/win32/libwin32/service.cpp:108 -msgid "Failure contacting the Service Handler" -msgstr "Error al contactar con el Manejador de Servicio" +#~ msgid "RegisterServiceCtlHandler failed" +#~ msgstr "RegisterServiceCtlHandler fallido" -#: src/win32/libwin32/service.cpp:119 -msgid "Service start report failed" -msgstr "Fallo en inicio de Servicio de Reporte" +#~ msgid "Failure contacting the Service Handler" +#~ msgstr "Error al contactar con el Manejador de Servicio" -#: src/win32/libwin32/service.cpp:172 -msgid "StartServiceCtrlDispatcher failed." -msgstr "StartServiceCtrlDispatcher fallido." +#~ msgid "Service start report failed" +#~ msgstr "Fallo en inicio de Servicio de Reporte" -#: src/win32/libwin32/service.cpp:179 -msgid "KERNEL32.DLL not found: Bacula service not started" -msgstr "KERNEL32.DLL no encontrado: Servicio Bacula no iniciado" +#~ msgid "StartServiceCtrlDispatcher failed." +#~ msgstr "StartServiceCtrlDispatcher fallido." -#: src/win32/libwin32/service.cpp:189 -msgid "Registry service not found: Bacula service not started" -msgstr "Servicio Registry no encontrado: Servicio Bacula no iniciado" +#~ msgid "KERNEL32.DLL not found: Bacula service not started" +#~ msgstr "KERNEL32.DLL no encontrado: Servicio Bacula no iniciado" -#: src/win32/libwin32/service.cpp:191 -msgid "Registry service entry point not found" -msgstr "Registro de servicio no se encuentra punto de entrada" +#~ msgid "Registry service not found: Bacula service not started" +#~ msgstr "Servicio Registry no encontrado: Servicio Bacula no iniciado" -#: src/win32/libwin32/service.cpp:212 -msgid "Report Service failure" -msgstr "Reporte de Servicio fallido" +#~ msgid "Registry service entry point not found" +#~ msgstr "Registro de servicio no se encuentra punto de entrada" -#: src/win32/libwin32/service.cpp:243 -msgid "Unable to install the service" -msgstr "No se puede instalar el servicio" +#~ msgid "Report Service failure" +#~ msgstr "Reporte de Servicio fallido" -#: src/win32/libwin32/service.cpp:251 -msgid "Service command length too long" -msgstr "Longitud de comandos de servicio demasiado largo" +#~ msgid "Unable to install the service" +#~ msgstr "No se puede instalar el servicio" -#: src/win32/libwin32/service.cpp:252 -msgid "Service command length too long. Service not registered." -msgstr "" -"Longitud de comandos de servicio demasiado largo. Servicio no registrado." +#~ msgid "Service command length too long" +#~ msgstr "Longitud de comandos de servicio demasiado largo" -#: src/win32/libwin32/service.cpp:265 -msgid "" -"The Service Control Manager could not be contacted - the service was not " -"installed" -msgstr "" -"El Manejador de Control de Servicios no puede ser contactado - el servicio " -"no fue instalado" +#~ msgid "Service command length too long. Service not registered." +#~ msgstr "" +#~ "Longitud de comandos de servicio demasiado largo. Servicio no registrado." + +#~ msgid "" +#~ "The Service Control Manager could not be contacted - the service was not " +#~ "installed" +#~ msgstr "" +#~ "El Manejador de Control de Servicios no puede ser contactado - el " +#~ "servicio no fue instalado" -#: src/win32/libwin32/service.cpp:288 src/win32/libwin32/service.cpp:317 -#: src/win32/libwin32/service.cpp:365 src/win32/libwin32/service.cpp:373 -#: src/win32/libwin32/service.cpp:377 -msgid "The Bacula service: " -msgstr "El servicio Bacula:" +#~ msgid "The Bacula service: " +#~ msgstr "El servicio Bacula:" -#: src/win32/libwin32/service.cpp:295 -msgid "" -"Provides file backup and restore services. Bacula -- the network backup " -"solution." -msgstr "" -"Proporciona servicios de copia de seguridad y restauración. Bacula - la " -"solución de copia de seguridad de red." +#~ msgid "" +#~ "Provides file backup and restore services. Bacula -- the network backup " +#~ "solution." +#~ msgstr "" +#~ "Proporciona servicios de copia de seguridad y restauración. Bacula - la " +#~ "solución de copia de seguridad de red." -#: src/win32/libwin32/service.cpp:306 -msgid "Cannot write System Registry for " -msgstr "No se puede escribir Registro de Sistema para" +#~ msgid "Cannot write System Registry for " +#~ msgstr "No se puede escribir Registro de Sistema para" -#: src/win32/libwin32/service.cpp:307 -msgid "" -"The System Registry could not be updated - the Bacula service was not " -"installed" -msgstr "" -"El Registro del Sistema no ha podido ser actualizado - el servicio Bacula no " -"se ha instalado" +#~ msgid "" +#~ "The System Registry could not be updated - the Bacula service was not " +#~ "installed" +#~ msgstr "" +#~ "El Registro del Sistema no ha podido ser actualizado - el servicio Bacula " +#~ "no se ha instalado" -#: src/win32/libwin32/service.cpp:316 -msgid "Cannot add Bacula key to System Registry" -msgstr "No se puede agregar clave Bacula al Registro del Sistema" +#~ msgid "Cannot add Bacula key to System Registry" +#~ msgstr "No se puede agregar clave Bacula al Registro del Sistema" -#: src/win32/libwin32/service.cpp:327 -msgid "The " -msgstr "El" +#~ msgid "The " +#~ msgstr "El" -#: src/win32/libwin32/service.cpp:385 #, fuzzy -msgid "An existing Bacula service: " -msgstr "Un servicio Bacula existente:" +#~ msgid "An existing Bacula service: " +#~ msgstr "Un servicio Bacula existente:" -#: src/win32/libwin32/service.cpp:394 -msgid "" -"The service Manager could not be contacted - the Bacula service was not " -"removed" -msgstr "" -"El Administrador de Servicio no puedo ser contactado - El Servicio Bacula no " -"se elimino" +#~ msgid "" +#~ "The service Manager could not be contacted - the Bacula service was not " +#~ "removed" +#~ msgstr "" +#~ "El Administrador de Servicio no puedo ser contactado - El Servicio Bacula " +#~ "no se elimino" -#: src/win32/libwin32/service.cpp:407 -msgid "" -"Could not find registry entry.\n" -"Service probably not registerd - the Bacula service was not removed" -msgstr "" -"No se pudo encontrar la entrada del Registro.\n" -"Servicio probablemente no Registrado - el servicio de Bacula no se ha quitado" +#~ msgid "" +#~ "Could not find registry entry.\n" +#~ "Service probably not registerd - the Bacula service was not removed" +#~ msgstr "" +#~ "No se pudo encontrar la entrada del Registro.\n" +#~ "Servicio probablemente no Registrado - el servicio de Bacula no se ha " +#~ "quitado" -#: src/win32/libwin32/service.cpp:414 -msgid "Could not delete Registry key for " -msgstr "No se pudo borrar la clave del Registro para" +#~ msgid "Could not delete Registry key for " +#~ msgstr "No se pudo borrar la clave del Registro para" -#: src/win32/libwin32/service.cpp:425 -msgid "Bacula could not be contacted, probably not running" -msgstr "Bacula no pudo ser contactado, probablemente no se está ejecutando" +#~ msgid "Bacula could not be contacted, probably not running" +#~ msgstr "Bacula no pudo ser contactado, probablemente no se está ejecutando" -#: src/win32/libwin32/service.cpp:433 -msgid "The Bacula service has been removed" -msgstr "El servicio Bacula se ha eliminado" +#~ msgid "The Bacula service has been removed" +#~ msgstr "El servicio Bacula se ha eliminado" -#: src/win32/libwin32/service.cpp:474 -msgid "SetServiceStatus failed" -msgstr "SetServiceStatus fallido" +#~ msgid "SetServiceStatus failed" +#~ msgstr "SetServiceStatus fallido" -#: src/win32/libwin32/service.cpp:500 -#, c-format -msgid "" -"\n" -"\n" -"%s error: %ld at %s:%d" -msgstr "" -"\n" -"\n" -"%s error: %ld en %s:%d" +#~ msgid "" +#~ "\n" +#~ "\n" +#~ "%s error: %ld at %s:%d" +#~ msgstr "" +#~ "\n" +#~ "\n" +#~ "%s error: %ld en %s:%d" -#: src/win32/libwin32/service.cpp:576 -#, c-format -msgid "Locked by: %s, duration: %ld seconds\n" -msgstr "Bloqueado por: %s, duración: %ld segundos\n" +#~ msgid "Locked by: %s, duration: %ld seconds\n" +#~ msgstr "Bloqueado por: %s, duración: %ld segundos\n" -#: src/win32/libwin32/service.cpp:580 -#, c-format -msgid "No longer locked\n" -msgstr "Ya no está bloqueado\n" +#~ msgid "No longer locked\n" +#~ msgstr "Ya no está bloqueado\n" -#: src/win32/libwin32/service.cpp:584 -msgid "Could not lock database" -msgstr "No se pudo bloquear la base de datos" +#~ msgid "Could not lock database" +#~ msgstr "No se pudo bloquear la base de datos" -#: src/win32/libwin32/main.cpp:245 -msgid "Bad Command Line Option" -msgstr "Mala Opción de Línea de Comandos" +#~ msgid "Bad Command Line Option" +#~ msgstr "Mala Opción de Línea de Comandos" -#: src/wx-console/wxbconfigfileeditor.cpp:65 -msgid "Config file editor" -msgstr "Editor de archivos de configuración" +#~ msgid "Config file editor" +#~ msgstr "Editor de archivos de configuración" -#: src/wx-console/wxbconfigfileeditor.cpp:75 -msgid "# Bacula bwx-console Configuration File\n" -msgstr "# Bacula bwx-console Archivo de Configuración\n" +#~ msgid "# Bacula bwx-console Configuration File\n" +#~ msgstr "# Bacula bwx-console Archivo de Configuración\n" -#: src/wx-console/wxbconfigfileeditor.cpp:111 -msgid "Save and close" -msgstr "Guardar y cerrar" +#~ msgid "Save and close" +#~ msgstr "Guardar y cerrar" -#: src/wx-console/wxbconfigfileeditor.cpp:112 -msgid "Close without saving" -msgstr "Cerrar sin guardar" +#~ msgid "Close without saving" +#~ msgstr "Cerrar sin guardar" -#: src/wx-console/wxbconfigfileeditor.cpp:139 -#, c-format -msgid "Unable to write to %s\n" -msgstr "No se puede escribir en %s\n" +#~ msgid "Unable to write to %s\n" +#~ msgstr "No se puede escribir en %s\n" -#: src/wx-console/wxbconfigfileeditor.cpp:140 -msgid "Error while saving" -msgstr "Error al guardar" +#~ msgid "Error while saving" +#~ msgstr "Error al guardar" -#: src/wx-console/wxbrestorepanel.cpp:234 -#: src/wx-console/wxbrestorepanel.cpp:1947 -#: src/wx-console/wxbrestorepanel.cpp:1976 -msgid "Enter restore mode" -msgstr "Introduzca el modo de restauración" +#~ msgid "Enter restore mode" +#~ msgstr "Introduzca el modo de restauración" -#: src/wx-console/wxbrestorepanel.cpp:237 -msgid "Cancel restore" -msgstr "Cancelar restauración" +#~ msgid "Cancel restore" +#~ msgstr "Cancelar restauración" -#: src/wx-console/wxbrestorepanel.cpp:263 -#: src/wx-console/wxbrestorepanel.cpp:317 -msgid "Add" -msgstr "Agregar" +#~ msgid "Add" +#~ msgstr "Agregar" -#: src/wx-console/wxbrestorepanel.cpp:265 -#: src/wx-console/wxbrestorepanel.cpp:319 -msgid "Remove" -msgstr "Eliminar" +#~ msgid "Remove" +#~ msgstr "Eliminar" -#: src/wx-console/wxbrestorepanel.cpp:267 -#: src/wx-console/wxbrestorepanel.cpp:321 -msgid "Refresh" -msgstr "Actualizar" +#~ msgid "Refresh" +#~ msgstr "Actualizar" -#: src/wx-console/wxbrestorepanel.cpp:286 -msgid "M" -msgstr "M" +#~ msgid "M" +#~ msgstr "M" -#: src/wx-console/wxbrestorepanel.cpp:290 -msgid "Filename" -msgstr "Nombre de Archivo" +#~ msgid "Filename" +#~ msgstr "Nombre de Archivo" -#: src/wx-console/wxbrestorepanel.cpp:294 -msgid "Size" -msgstr "Tamaño" +#~ msgid "Size" +#~ msgstr "Tamaño" -#: src/wx-console/wxbrestorepanel.cpp:298 -msgid "Date" -msgstr "Fecha" +#~ msgid "Date" +#~ msgstr "Fecha" -#: src/wx-console/wxbrestorepanel.cpp:302 -msgid "Perm." -msgstr "Permiso" +#~ msgid "Perm." +#~ msgstr "Permiso" -#: src/wx-console/wxbrestorepanel.cpp:306 -msgid "User" -msgstr "Usuario" +#~ msgid "User" +#~ msgstr "Usuario" -#: src/wx-console/wxbrestorepanel.cpp:310 -msgid "Group" -msgstr "Grupo" - -#: src/wx-console/wxbrestorepanel.cpp:335 -#: src/wx-console/wxbrestorepanel.cpp:348 -#: src/wx-console/wxbrestorepanel.cpp:503 -#: src/wx-console/wxbrestorepanel.cpp:513 -#: src/wx-console/wxbrestorepanel.cpp:516 -#: src/wx-console/wxbrestorepanel.cpp:1811 -#: src/wx-console/wxbrestorepanel.cpp:1897 -msgid "Job Name" -msgstr "Nombre del Job" - -#: src/wx-console/wxbrestorepanel.cpp:337 -#: src/wx-console/wxbrestorepanel.cpp:353 -#: src/wx-console/wxbrestorepanel.cpp:455 -#: src/wx-console/wxbrestorepanel.cpp:456 -#: src/wx-console/wxbrestorepanel.cpp:466 -#: src/wx-console/wxbrestorepanel.cpp:467 -#: src/wx-console/wxbrestorepanel.cpp:1153 -#: src/wx-console/wxbrestorepanel.cpp:1156 -#: src/wx-console/wxbrestorepanel.cpp:1239 -#: src/wx-console/wxbrestorepanel.cpp:1849 -#: src/wx-console/wxbrestorepanel.cpp:1851 -#: src/wx-console/wxbrestorepanel.cpp:1912 -msgid "Fileset" -msgstr "Fileset" - -#: src/wx-console/wxbrestorepanel.cpp:340 -#: src/wx-console/wxbrestorepanel.cpp:1233 -#: src/wx-console/wxbrestorepanel.cpp:1249 -#: src/wx-console/wxbrestorepanel.cpp:1251 -#: src/wx-console/wxbrestorepanel.cpp:1259 -#: src/wx-console/wxbrestorepanel.cpp:1261 -#: src/wx-console/wxbrestorepanel.cpp:1280 -#: src/wx-console/wxbrestorepanel.cpp:1287 -#: src/wx-console/wxbrestorepanel.cpp:1839 -#: src/wx-console/wxbrestorepanel.cpp:1850 -#: src/wx-console/wxbrestorepanel.cpp:1971 -msgid "Before" -msgstr "Antes de" - -#: src/wx-console/wxbrestorepanel.cpp:342 -msgid "Please configure parameters concerning files to restore :" -msgstr "" -"Por favor, configure los parámetros relativos a los archivos a restaurar:" - -#: src/wx-console/wxbrestorepanel.cpp:351 -#: src/wx-console/wxbrestorepanel.cpp:1905 -msgid "always" -msgstr "siempre" - -#: src/wx-console/wxbrestorepanel.cpp:351 -msgid "if newer" -msgstr "si los nuevos" - -#: src/wx-console/wxbrestorepanel.cpp:351 -msgid "if older" -msgstr "si los viejos" - -#: src/wx-console/wxbrestorepanel.cpp:351 -#: src/wx-console/wxbrestorepanel.cpp:1908 -msgid "never" -msgstr "nunca" - -#: src/wx-console/wxbrestorepanel.cpp:359 -msgid "Please configure parameters concerning files restoration :" -msgstr "" -"Por favor, configure los parámetros relativos a los archivos de restauración" - -#: src/wx-console/wxbrestorepanel.cpp:427 -msgid "Getting parameters list." -msgstr "Obteniendo los parámetros de la lista." - -#: src/wx-console/wxbrestorepanel.cpp:435 -msgid "Error : no clients returned by the director." -msgstr "Error: el director no devolvió ningún cliente" - -#: src/wx-console/wxbrestorepanel.cpp:459 -msgid "Error : no filesets returned by the director." -msgstr "Error: el director no devolvió ningún fileset" - -#: src/wx-console/wxbrestorepanel.cpp:483 -msgid "Error : no storage returned by the director." -msgstr "Error: el director no devolvió ningún storage" - -#: src/wx-console/wxbrestorepanel.cpp:506 -#: src/wx-console/wxbrestorepanel.cpp:530 -msgid "Error : no jobs returned by the director." -msgstr "Error: no hay Jobs devuelto por el director." - -#: src/wx-console/wxbrestorepanel.cpp:516 -msgid "RestoreFiles" -msgstr "RestoreFiles" - -#: src/wx-console/wxbrestorepanel.cpp:551 -msgid "Please configure your restore parameters." -msgstr "Por favor, configure los parámetros de restauración." - -#: src/wx-console/wxbrestorepanel.cpp:556 -msgid "Please select a client." -msgstr "Por favor seleccione un cliente." - -#: src/wx-console/wxbrestorepanel.cpp:560 -msgid "Please select a restore date." -msgstr "Por favor seleccione una fecha de restauración." +#~ msgid "Group" +#~ msgstr "Grupo" -#: src/wx-console/wxbrestorepanel.cpp:565 -msgid "Building restore tree..." -msgstr "Construyendo árbol de restauración..." +#~ msgid "Job Name" +#~ msgstr "Nombre del Job" -#: src/wx-console/wxbrestorepanel.cpp:613 -msgid "Error while starting restore: " -msgstr "Error al iniciar restauración:" +#~ msgid "Fileset" +#~ msgstr "Fileset" -#: src/wx-console/wxbrestorepanel.cpp:705 -msgid "" -"Right click on a file or on a directory, or double-click on its mark to add " -"it to the restore list." -msgstr "" -"Haga clic derecho sobre un archivo o un directorio, o haga doble clic en su " -"marca para añadirlo a la lista de restauración." +#~ msgid "Before" +#~ msgstr "Antes de" -#: src/wx-console/wxbrestorepanel.cpp:720 src/wx-console/wxbmainframe.cpp:685 -msgid "Unexpected question has been received.\n" -msgstr "Pregunta inesperada ha sido recibida.\n" +#~ msgid "Please configure parameters concerning files to restore :" +#~ msgstr "" +#~ "Por favor, configure los parámetros relativos a los archivos a restaurar:" -#: src/wx-console/wxbrestorepanel.cpp:742 -#: src/wx-console/wxbrestorepanel.cpp:764 -msgid "bwx-console: unexpected restore question." -msgstr "bwx-console: inesperada consulta de restauración." +#~ msgid "always" +#~ msgstr "siempre" -#: src/wx-console/wxbrestorepanel.cpp:775 -msgid " files selected to be restored." -msgstr "archivos seleccionados para ser restaurado." +#~ msgid "if newer" +#~ msgstr "si los nuevos" -#: src/wx-console/wxbrestorepanel.cpp:780 -msgid " file selected to be restored." -msgstr "archivo seleccionado para ser restaurado." +#~ msgid "if older" +#~ msgstr "si los viejos" -#: src/wx-console/wxbrestorepanel.cpp:787 -#, c-format -msgid "Please configure your restore (%ld files selected to be restored)..." -msgstr "" -"Por favor, configure su restauración (%ld archivos seleccionados para ser " -"restaurado)..." +#~ msgid "never" +#~ msgstr "nunca" -#: src/wx-console/wxbrestorepanel.cpp:797 -msgid "Restore failed : no file selected.\n" -msgstr "Restauración fallida: ningún archivo seleccionado.\n" +#~ msgid "Please configure parameters concerning files restoration :" +#~ msgstr "" +#~ "Por favor, configure los parámetros relativos a los archivos de " +#~ "restauración" -#: src/wx-console/wxbrestorepanel.cpp:798 -msgid "Restore failed : no file selected." -msgstr "Restauración fallida: ningún archivo seleccionado." +#~ msgid "Getting parameters list." +#~ msgstr "Obteniendo los parámetros de la lista." -#: src/wx-console/wxbrestorepanel.cpp:808 -msgid "Restoring, please wait..." -msgstr "Restaurando, por favor espere..." +#~ msgid "Error : no clients returned by the director." +#~ msgstr "Error: el director no devolvió ningún cliente" -#: src/wx-console/wxbrestorepanel.cpp:821 -msgid "Job queued. JobId=" -msgstr "Cola de Job. JobId=" +#~ msgid "Error : no filesets returned by the director." +#~ msgstr "Error: el director no devolvió ningún fileset" -#: src/wx-console/wxbrestorepanel.cpp:823 -msgid "Restore queued, jobid=" -msgstr "Cola de Restauración, JobID =" +#~ msgid "Error : no storage returned by the director." +#~ msgstr "Error: el director no devolvió ningún storage" -#: src/wx-console/wxbrestorepanel.cpp:827 -msgid "Job failed." -msgstr "Job fallido." +#~ msgid "Error : no jobs returned by the director." +#~ msgstr "Error: no hay Jobs devuelto por el director." -#: src/wx-console/wxbrestorepanel.cpp:828 -msgid "Restore failed, please look at messages.\n" -msgstr "Fallo en restauración, por favor, mirar los mensajes.\n" +#~ msgid "RestoreFiles" +#~ msgstr "RestoreFiles" -#: src/wx-console/wxbrestorepanel.cpp:829 -msgid "Restore failed, please look at messages in console." -msgstr "Fallo en restauración, por favor, mirar los mensajes en la consola." +#~ msgid "Please configure your restore parameters." +#~ msgstr "Por favor, configure los parámetros de restauración." -#: src/wx-console/wxbrestorepanel.cpp:835 -#: src/wx-console/wxbrestorepanel.cpp:836 -msgid "Failed to retrieve jobid.\n" -msgstr "No se ha podido recuperar jobId.\n" +#~ msgid "Please select a client." +#~ msgstr "Por favor seleccione un cliente." -#: src/wx-console/wxbrestorepanel.cpp:862 -msgid "" -"Restore is scheduled to run. bwx-console will not wait for its completion.\n" -msgstr "" -"Restaurar está programado para ejecutarse. bwx-consola no esperara a su " -"conclusión.\n" +#~ msgid "Please select a restore date." +#~ msgstr "Por favor seleccione una fecha de restauración." -#: src/wx-console/wxbrestorepanel.cpp:863 -msgid "" -"Restore is scheduled to run. bwx-console will not wait for its completion." -msgstr "" -"Restaurar está programado para ejecutarse. bwx-consola no esperara a su " -"conclusión." +#~ msgid "Building restore tree..." +#~ msgstr "Construyendo árbol de restauración..." -#: src/wx-console/wxbrestorepanel.cpp:889 -msgid "Restore job created, but not yet running." -msgstr "Job de restauración creado, pero aún no se ejecuta." +#~ msgid "Error while starting restore: " +#~ msgstr "Error al iniciar restauración:" -#: src/wx-console/wxbrestorepanel.cpp:894 -#, c-format -msgid "Restore job running, please wait (%ld of %ld files restored)..." -msgstr "" -"Job de restauración en ejecución, por favor espere (%ld de %ld archivos " -"restaurados) ..." +#~ msgid "" +#~ "Right click on a file or on a directory, or double-click on its mark to " +#~ "add it to the restore list." +#~ msgstr "" +#~ "Haga clic derecho sobre un archivo o un directorio, o haga doble clic en " +#~ "su marca para añadirlo a la lista de restauración." -#: src/wx-console/wxbrestorepanel.cpp:898 -msgid "Restore job terminated successfully." -msgstr "Trabajo de restauración terminado correctamente." +#~ msgid "Unexpected question has been received.\n" +#~ msgstr "Pregunta inesperada ha sido recibida.\n" -#: src/wx-console/wxbrestorepanel.cpp:899 -msgid "Restore job terminated successfully.\n" -msgstr "Trabajo de restauración terminado correctamente.\n" +#~ msgid "bwx-console: unexpected restore question." +#~ msgstr "bwx-console: inesperada consulta de restauración." -#: src/wx-console/wxbrestorepanel.cpp:904 -msgid "Restore job terminated in error, see messages in console." -msgstr "" -"Trabajo de restauración terminado con error, ver los mensajes en la consola." +#~ msgid " files selected to be restored." +#~ msgstr "archivos seleccionados para ser restaurado." -#: src/wx-console/wxbrestorepanel.cpp:905 -msgid "Restore job terminated in error, see messages.\n" -msgstr "Trabajo de restauración terminado con error, ver los mensajes.\n" +#~ msgid " file selected to be restored." +#~ msgstr "archivo seleccionado para ser restaurado." -#: src/wx-console/wxbrestorepanel.cpp:910 -msgid "Restore job reported a non-fatal error." -msgstr "Trabajo de restauración no reporto error fatal." +#~ msgid "Please configure your restore (%ld files selected to be restored)..." +#~ msgstr "" +#~ "Por favor, configure su restauración (%ld archivos seleccionados para ser " +#~ "restaurado)..." -#: src/wx-console/wxbrestorepanel.cpp:914 -msgid "Restore job reported a fatal error." -msgstr "Trabajo de restauración reporto un error fatal." +#~ msgid "Restore failed : no file selected.\n" +#~ msgstr "Restauración fallida: ningún archivo seleccionado.\n" -#: src/wx-console/wxbrestorepanel.cpp:919 -msgid "Restore job cancelled by user." -msgstr "Trabajo de restauración cancelado por el usuario." +#~ msgid "Restore failed : no file selected." +#~ msgstr "Restauración fallida: ningún archivo seleccionado." -#: src/wx-console/wxbrestorepanel.cpp:920 -msgid "Restore job cancelled by user.\n" -msgstr "Trabajo de restauración cancelado por el usuario.\n" +#~ msgid "Restoring, please wait..." +#~ msgstr "Restaurando, por favor espere..." -#: src/wx-console/wxbrestorepanel.cpp:925 -msgid "Restore job is waiting on File daemon." -msgstr "Trabajo de restauración esta esperando demonio File." +#~ msgid "Job queued. JobId=" +#~ msgstr "Cola de Job. JobId=" -#: src/wx-console/wxbrestorepanel.cpp:929 -msgid "Restore job is waiting for new media." -msgstr "Trabajo de restauración esta esperando por un nuevo medio." +#~ msgid "Restore queued, jobid=" +#~ msgstr "Cola de Restauración, JobID =" -#: src/wx-console/wxbrestorepanel.cpp:933 -msgid "Restore job is waiting for storage resource." -msgstr "Trabajo de restauración esta esperando por recurso de almacenamiento." +#~ msgid "Job failed." +#~ msgstr "Job fallido." -#: src/wx-console/wxbrestorepanel.cpp:937 -msgid "Restore job is waiting for job resource." -msgstr "Job de restauración está esperando por recurso job." +#~ msgid "Restore failed, please look at messages.\n" +#~ msgstr "Fallo en restauración, por favor, mirar los mensajes.\n" -#: src/wx-console/wxbrestorepanel.cpp:941 -msgid "Restore job is waiting for Client resource." -msgstr "Trabajo de restauración esta esperando por recurso de Cliente." +#~ msgid "Restore failed, please look at messages in console." +#~ msgstr "Fallo en restauración, por favor, mirar los mensajes en la consola." -#: src/wx-console/wxbrestorepanel.cpp:945 -msgid "Restore job is waiting for maximum jobs." -msgstr "Trabajo de restauración esta esperando por trabajo máximo." +#~ msgid "Failed to retrieve jobid.\n" +#~ msgstr "No se ha podido recuperar jobId.\n" -#: src/wx-console/wxbrestorepanel.cpp:949 -msgid "Restore job is waiting for start time." -msgstr "Trabajo de restauración esta esperando por hora de inicio." +#~ msgid "" +#~ "Restore is scheduled to run. bwx-console will not wait for its " +#~ "completion.\n" +#~ msgstr "" +#~ "Restaurar está programado para ejecutarse. bwx-consola no esperara a su " +#~ "conclusión.\n" -#: src/wx-console/wxbrestorepanel.cpp:953 -msgid "Restore job is waiting for higher priority jobs to finish." -msgstr "" -"Job de restauración está esperando por jobs de mayor prioridad para " -"finalizar." +#~ msgid "" +#~ "Restore is scheduled to run. bwx-console will not wait for its completion." +#~ msgstr "" +#~ "Restaurar está programado para ejecutarse. bwx-consola no esperara a su " +#~ "conclusión." -#: src/wx-console/wxbrestorepanel.cpp:1002 -msgid "" -"The restore job has not been started within one minute, bwx-console will not " -"wait for its completion anymore.\n" -msgstr "" -"El Job de restauración no se ha iniciado en el plazo de un minuto, bwx-" -"console no va a esperar para su realización más.\n" +#~ msgid "Restore job created, but not yet running." +#~ msgstr "Job de restauración creado, pero aún no se ejecuta." -#: src/wx-console/wxbrestorepanel.cpp:1003 -msgid "" -"The restore job has not been started within one minute, bwx-console will not " -"wait for its completion anymore." -msgstr "" -"El Job de restauración no se ha iniciado en el plazo de un minuto, bwx-" -"console no va a esperar para su realización más." +#~ msgid "Restore job running, please wait (%ld of %ld files restored)..." +#~ msgstr "" +#~ "Job de restauración en ejecución, por favor espere (%ld de %ld archivos " +#~ "restaurados) ..." -#: src/wx-console/wxbrestorepanel.cpp:1013 -msgid "Restore done successfully.\n" -msgstr "Restauración finalizada con suceso.\n" +#~ msgid "Restore job terminated successfully." +#~ msgstr "Trabajo de restauración terminado correctamente." -#: src/wx-console/wxbrestorepanel.cpp:1014 -msgid "Restore done successfully." -msgstr "Restauración finalizada con suceso." +#~ msgid "Restore job terminated successfully.\n" +#~ msgstr "Trabajo de restauración terminado correctamente.\n" -#: src/wx-console/wxbrestorepanel.cpp:1086 -msgid "Applying restore configuration changes..." -msgstr "Aplicando cambios de configuración de restauración..." +#~ msgid "Restore job terminated in error, see messages in console." +#~ msgstr "" +#~ "Trabajo de restauración terminado con error, ver los mensajes en la " +#~ "consola." -#: src/wx-console/wxbrestorepanel.cpp:1138 -msgid "Failed to find the selected client." -msgstr "Fallo al encontrar el cliente seleccionado." +#~ msgid "Restore job terminated in error, see messages.\n" +#~ msgstr "Trabajo de restauración terminado con error, ver los mensajes.\n" -#: src/wx-console/wxbrestorepanel.cpp:1158 -msgid "Failed to find the selected fileset." -msgstr "Fallo al encontrar el fileset seleccionado." +#~ msgid "Restore job reported a non-fatal error." +#~ msgstr "Trabajo de restauración no reporto error fatal." -#: src/wx-console/wxbrestorepanel.cpp:1178 -msgid "Failed to find the selected storage." -msgstr "Fallo al encontrar el almacenamiento seleccionado." +#~ msgid "Restore job reported a fatal error." +#~ msgstr "Trabajo de restauración reporto un error fatal." -#: src/wx-console/wxbrestorepanel.cpp:1199 -#: src/wx-console/wxbrestorepanel.cpp:1886 -msgid "Run Restore job" -msgstr "Ejecutando Job de restauración" +#~ msgid "Restore job cancelled by user." +#~ msgstr "Trabajo de restauración cancelado por el usuario." -#: src/wx-console/wxbrestorepanel.cpp:1216 -msgid "Restore configuration changes were applied." -msgstr "Restaurar los cambios de configuración aplicados." +#~ msgid "Restore job cancelled by user.\n" +#~ msgstr "Trabajo de restauración cancelado por el usuario.\n" -#: src/wx-console/wxbrestorepanel.cpp:1225 -msgid "Restore cancelled.\n" -msgstr "Restauración cancelada.\n" +#~ msgid "Restore job is waiting on File daemon." +#~ msgstr "Trabajo de restauración esta esperando demonio File." -#: src/wx-console/wxbrestorepanel.cpp:1226 -msgid "Restore cancelled." -msgstr "Restauración cancelada." +#~ msgid "Restore job is waiting for new media." +#~ msgstr "Trabajo de restauración esta esperando por un nuevo medio." -#: src/wx-console/wxbrestorepanel.cpp:1248 -msgid "No results to list." -msgstr "No hay resultados para listar." +#~ msgid "Restore job is waiting for storage resource." +#~ msgstr "" +#~ "Trabajo de restauración esta esperando por recurso de almacenamiento." -#: src/wx-console/wxbrestorepanel.cpp:1250 -msgid "No backup found for this client." -msgstr "Respaldos no encontrados para este cliente." +#~ msgid "Restore job is waiting for job resource." +#~ msgstr "Job de restauración está esperando por recurso job." -#: src/wx-console/wxbrestorepanel.cpp:1257 -msgid "ERROR" -msgstr "ERROR" +#~ msgid "Restore job is waiting for Client resource." +#~ msgstr "Trabajo de restauración esta esperando por recurso de Cliente." -#: src/wx-console/wxbrestorepanel.cpp:1258 -msgid "Query failed" -msgstr "Consulta fallida" +#~ msgid "Restore job is waiting for maximum jobs." +#~ msgstr "Trabajo de restauración esta esperando por trabajo máximo." -#: src/wx-console/wxbrestorepanel.cpp:1260 -msgid "Cannot get previous backups list, see console." -msgstr "" -"No se puede obtener lista de copias de seguridad anteriores, ver la consola." +#~ msgid "Restore job is waiting for start time." +#~ msgstr "Trabajo de restauración esta esperando por hora de inicio." -#: src/wx-console/wxbrestorepanel.cpp:1896 -msgid "JobName:" -msgstr "JobName:" +#~ msgid "Restore job is waiting for higher priority jobs to finish." +#~ msgstr "" +#~ "Job de restauración está esperando por jobs de mayor prioridad para " +#~ "finalizar." -#: src/wx-console/wxbrestorepanel.cpp:1898 -msgid "Bootstrap:" -msgstr "Bootstrap:" +#~ msgid "" +#~ "The restore job has not been started within one minute, bwx-console will " +#~ "not wait for its completion anymore.\n" +#~ msgstr "" +#~ "El Job de restauración no se ha iniciado en el plazo de un minuto, bwx-" +#~ "console no va a esperar para su realización más.\n" -#: src/wx-console/wxbrestorepanel.cpp:1900 -msgid "Where:" -msgstr "Donde:" +#~ msgid "" +#~ "The restore job has not been started within one minute, bwx-console will " +#~ "not wait for its completion anymore." +#~ msgstr "" +#~ "El Job de restauración no se ha iniciado en el plazo de un minuto, bwx-" +#~ "console no va a esperar para su realización más." -#: src/wx-console/wxbrestorepanel.cpp:1903 -msgid "Replace:" -msgstr "Reemplazar:" +#~ msgid "Restore done successfully.\n" +#~ msgstr "Restauración finalizada con suceso.\n" -#: src/wx-console/wxbrestorepanel.cpp:1906 -msgid "ifnewer" -msgstr "ifnewer" +#~ msgid "Restore done successfully." +#~ msgstr "Restauración finalizada con suceso." -#: src/wx-console/wxbrestorepanel.cpp:1907 -msgid "ifolder" -msgstr "ifolder" +#~ msgid "Applying restore configuration changes..." +#~ msgstr "Aplicando cambios de configuración de restauración..." -#: src/wx-console/wxbrestorepanel.cpp:1911 -msgid "FileSet:" -msgstr "FileSet:" +#~ msgid "Failed to find the selected client." +#~ msgstr "Fallo al encontrar el cliente seleccionado." -#: src/wx-console/wxbrestorepanel.cpp:1913 -msgid "Client:" -msgstr "Cliente:" +#~ msgid "Failed to find the selected fileset." +#~ msgstr "Fallo al encontrar el fileset seleccionado." -#: src/wx-console/wxbrestorepanel.cpp:1915 -msgid "Storage:" -msgstr "Storage:" +#~ msgid "Failed to find the selected storage." +#~ msgstr "Fallo al encontrar el almacenamiento seleccionado." -#: src/wx-console/wxbrestorepanel.cpp:1917 -msgid "When:" -msgstr "Cuando:" +#~ msgid "Run Restore job" +#~ msgstr "Ejecutando Job de restauración" -#: src/wx-console/wxbrestorepanel.cpp:1920 -msgid "Priority:" -msgstr "Prioridad:" +#~ msgid "Restore configuration changes were applied." +#~ msgstr "Restaurar los cambios de configuración aplicados." -#: src/wx-console/wxbrestorepanel.cpp:2028 -msgid "Restoring..." -msgstr "Restaurando..." +#~ msgid "Restore cancelled." +#~ msgstr "Restauración cancelada." -#: src/wx-console/console_thread.cpp:125 -#, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Director \"%s\" in config file.\n" -"At least one CA certificate store is required.\n" -msgstr "" -"Ni \"Certificado TLS CA \" o \"Directorio del Certificado TLS CA\" están " -"definidos para el Director \"%s\" en el archivo de configuración.\n" -"Por lo menos un almacén de certificados CA es necesario.\n" +#~ msgid "No results to list." +#~ msgstr "No hay resultados para listar." -#: src/wx-console/console_thread.cpp:132 -msgid "" -"No Director resource defined in config file.\n" -"Without that I don't how to speak to the Director :-(\n" -msgstr "" -"Recurso Director no definido en el archivo de configuración.\n" -"Sin eso, yo no sé cómo hablar con el Director :-(\n" +#~ msgid "No backup found for this client." +#~ msgstr "Respaldos no encontrados para este cliente." -#: src/wx-console/console_thread.cpp:151 -#, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Console \"%s\" in config file.\n" -msgstr "" -"Ni \"Certificado TLS CA \" o \"Directorio del Certificado TLS CA\" están " -"definidos para la Consola \"%s\" en el archivo de configuración.\n" +#~ msgid "ERROR" +#~ msgstr "ERROR" -#: src/wx-console/console_thread.cpp:173 -msgid "Error while initializing windows sockets...\n" -msgstr "Error durante la inicialización de Windows Sockets ...\n" +#~ msgid "Query failed" +#~ msgstr "Consulta fallida" -#: src/wx-console/console_thread.cpp:189 -msgid "Error while cleaning up windows sockets...\n" -msgstr "Error durante la limpieza de Windows Sockets ...\n" +#~ msgid "Cannot get previous backups list, see console." +#~ msgstr "" +#~ "No se puede obtener lista de copias de seguridad anteriores, ver la " +#~ "consola." -#: src/wx-console/console_thread.cpp:228 -msgid "Error while initializing library." -msgstr "Error al inicializar la librería." +#~ msgid "JobName:" +#~ msgstr "JobName:" -#: src/wx-console/console_thread.cpp:256 -msgid "Cryptographic library initialization failed.\n" -msgstr "Fallo en inicialización de la librería criptográfica.\n" +#~ msgid "Bootstrap:" +#~ msgstr "Bootstrap:" -#: src/wx-console/console_thread.cpp:260 -msgid "Please correct configuration file.\n" -msgstr "Por favor, corrija el archivo de configuración.\n" +#~ msgid "Where:" +#~ msgstr "Donde:" -#: src/wx-console/console_thread.cpp:302 -msgid "Error : Library not initialized\n" -msgstr "Error: Librería no inicializada\n" +#~ msgid "Replace:" +#~ msgstr "Reemplazar:" -#: src/wx-console/console_thread.cpp:313 -msgid "Error : No configuration file loaded\n" -msgstr "Error: No hay archivo de configuración cargado\n" +#~ msgid "ifnewer" +#~ msgstr "ifnewer" -#: src/wx-console/console_thread.cpp:323 -msgid "Connecting...\n" -msgstr "Conectando...\n" +#~ msgid "ifolder" +#~ msgstr "ifolder" -#: src/wx-console/console_thread.cpp:339 -msgid "Error : No director defined in config file.\n" -msgstr "Error: Director no definido en el archivo de configuración.\n" +#~ msgid "FileSet:" +#~ msgstr "FileSet:" -#: src/wx-console/console_thread.cpp:351 -msgid "Multiple directors found in your config file.\n" -msgstr "Varios directores encontrados en su archivo de configuración.\n" +#~ msgid "Client:" +#~ msgstr "Cliente:" -#: src/wx-console/console_thread.cpp:360 -#, c-format -msgid "Please choose a director (1-%d): " -msgstr "Por favor, elija un director (1-%d): " +#~ msgid "Storage:" +#~ msgstr "Storage:" -#: src/wx-console/console_thread.cpp:389 -#, c-format -msgid "Passphrase for Console \"%s\" TLS private key: " -msgstr "Frase de contraseña para Console \"%s\" TLS clave privada:" +#~ msgid "When:" +#~ msgstr "Cuando:" -#: src/wx-console/console_thread.cpp:410 -#, c-format -msgid "Passphrase for Director \"%s\" TLS private key: " -msgstr "Frase de contraseña para Director \"%s\" TLS clave privada:" +#~ msgid "Priority:" +#~ msgstr "Prioridad:" -#: src/wx-console/console_thread.cpp:432 -msgid "Failed to connect to the director\n" -msgstr "Error al conectar con el director\n" +#~ msgid "Restoring..." +#~ msgstr "Restaurando..." -#: src/wx-console/console_thread.cpp:442 -msgid "Connected\n" -msgstr "Conectado\n" +#~ msgid "" +#~ "Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined " +#~ "for Director \"%s\" in config file.\n" +#~ "At least one CA certificate store is required.\n" +#~ msgstr "" +#~ "Ni \"Certificado TLS CA \" o \"Directorio del Certificado TLS CA\" están " +#~ "definidos para el Director \"%s\" en el archivo de configuración.\n" +#~ "Por lo menos un almacén de certificados CA es necesario.\n" -#: src/wx-console/console_thread.cpp:499 -msgid "<< Unexpected signal received : " -msgstr "<\n" -"Copyright (C), 2005-2007 Free Software Foundation Europe, e.V.\n" -msgstr "" -"Bienvenido a Bacula bwx-console.\n" -"Escrito por Nicolas Boichat \n" -"Copyright (C), 2005-2007 Free Software Foundation Europe, e.V.\n" +#~ msgid "&Help" +#~ msgstr "&Ayuda" -#: src/wx-console/wxbmainframe.cpp:521 -msgid "About Bacula bwx-console" -msgstr "Acerca de Bacula bwx-console" +#~ msgid "" +#~ "Warning : Unicode is disabled because you are using wxWidgets for GTK+ " +#~ "1.2.\n" +#~ msgstr "" +#~ "Advertencia: Unicode está deshabilitado porque está utilizando wxWidgets " +#~ "para GTK+ 1.2.\n" -#: src/wx-console/wxbmainframe.cpp:527 -msgid "Please choose your default configuration file" -msgstr "Por favor, seleccione su archivo de configuración por defecto" +#~ msgid "" +#~ "Warning : There is a problem with wxWidgets for GTK+ 2.0 without Unicode " +#~ "support when handling non-ASCII filenames: Every non-ASCII character in " +#~ "such filenames will be replaced by an interrogation mark.\n" +#~ "If this behaviour disturbs you, please build bwx-console against a " +#~ "Unicode version of wxWidgets for GTK+ 2.0.\n" +#~ "---\n" +#~ msgstr "" +#~ "Advertencia: Hay un problema con wxWidgets para GTK+ 2.0 sin el soporte " +#~ "Unicode al manejar nombres de archivos no-ASCII: Cada carácter no-ASCII " +#~ "en nombres de archivos será sustituido por un signo de interrogación.\n" +#~ "Si este comportamiento te molesta, por favor construya bwx-consola para " +#~ "una versión Unicode de wxWidgets para GTK+ 2.0.\n" +#~ "---\n" -#: src/wx-console/wxbmainframe.cpp:531 -msgid "Use this configuration file as default?" -msgstr "Utilizar este archivo de configuración por defecto?" +#~ msgid "Send" +#~ msgstr "Enviar" -#: src/wx-console/wxbmainframe.cpp:532 -msgid "Configuration file" -msgstr "Archivo de configuración" +#~ msgid "Error while parsing command line arguments, using defaults.\n" +#~ msgstr "" +#~ "Error al analizar los argumentos de línea de comandos, usando valores por " +#~ "defecto.\n" -#: src/wx-console/wxbmainframe.cpp:603 -msgid "Console thread terminated." -msgstr "Hilo de Consola terminado." +#~ msgid "Usage: bwx-console [-c configfile] [-w tmp]\n" +#~ msgstr "Utilice: bwx-console [-c archivo_configuración] [-w tmp]\n" -#: src/wx-console/wxbmainframe.cpp:611 -msgid "Connection to the director lost. Quit program?" -msgstr "Conexión perdida con el director. Salir del programa?" +#~ msgid "" +#~ "It seems that it is the first time you run bwx-console.\n" +#~ "This file (%s) has been choosen as default configuration file.\n" +#~ "Do you want to edit it? (if you click No you will have to select another " +#~ "file)" +#~ msgstr "" +#~ "Parece que es la primera vez que ejecute bwx-consola.\n" +#~ "Este archivo (%s) ha sido elegido como el archivo de configuración por " +#~ "defecto.\n" +#~ "¿Desea editar lo? (si hace clic en NO usted tendrá que seleccionar otro " +#~ "archivo)" -#: src/wx-console/wxbmainframe.cpp:612 -msgid "Connection lost" -msgstr "Conexión perdida" +#~ msgid "First run" +#~ msgstr "Primera ejecución" -#: src/wx-console/wxbmainframe.cpp:628 -msgid "Connected to the director." -msgstr "Conectado al director." +#~ msgid "" +#~ "Unable to read %s\n" +#~ "Error: %s\n" +#~ "Do you want to choose another one? (Press no to edit this file)" +#~ msgstr "" +#~ "No se puede leer %s\n" +#~ "Error: %s\n" +#~ " ¿Deseas seleccionar otro? (Presione no para editar este archivo)" -#: src/wx-console/wxbmainframe.cpp:651 -msgid "Reconnect" -msgstr "Reconectar" +#~ msgid "Unable to read configuration file" +#~ msgstr "No es posible leer el archivo de configuración" -#: src/wx-console/wxbmainframe.cpp:652 -msgid "Reconnect to the director" -msgstr "Reconectar al director" +#~ msgid "Please choose a configuration file to use" +#~ msgstr "Por favor, elija un archivo de configuración para usar" -#: src/wx-console/wxbmainframe.cpp:666 -msgid "Disconnected of the director." -msgstr "Desconectado al director." +#~ msgid "" +#~ "This configuration file has been successfully read, use it as default?" +#~ msgstr "" +#~ "Este archivo de configuración se ha leído correctamente, utilizar el por " +#~ "defecto?" -#: src/wx-console/wxbmainframe.cpp:708 src/wx-console/wxbmainframe.cpp:725 -msgid "bwx-console: unexpected director's question." -msgstr "bwx-console: inesperada consulta del director." +#~ msgid "Configuration file read successfully" +#~ msgstr "Archivo de configuración leído correctamente" -#: src/qt-console/tray-monitor/tray-monitor.cpp:67 -#, fuzzy, c-format -msgid "" -"\n" -"Version: %s (%s) %s %s %s\n" -"\n" -"Usage: tray-monitor [-c config_file] [-d debug_level]\n" -" -c set configuration file to file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -t test - read configuration and exit\n" -" -? print this message.\n" -"\n" -msgstr "" -"Escrito por Nicolas Boichat (2004)\n" -"\n" -"Versión: %s (%s) %s %s %s\n" -"\n" -"Utilice: tray-monitor [-c archivo_configuración] [-d nivel_depuración]\n" -" -c establece archivo de configuración para archivo\n" -" -d establece nivel de depuración para \n" -" -dt imprime timestamp en salida de depuración\n" -" -t prueba - leer configuración y salir\n" -" -? imprimir este mensaje.\n" -"\n" +#~ msgid "Using this configuration file: %s\n" +#~ msgstr "Usando este fichero de configuración: %s\n" -#: src/qt-console/bcomm/dircomm.cpp:92 -#, c-format -msgid "Already connected\"%s\".\n" -msgstr "Ya conectado\"%s\".\n" +#~ msgid "Connecting to the director..." +#~ msgstr "Conectando con director..." -#: src/qt-console/bcomm/dircomm.cpp:105 -#, c-format -msgid "" -"Connecting to Director %s:%d\n" -"\n" -msgstr "" -"Conectando con Director %s:%d\n" -"\n" +#~ msgid "Failed to unregister a data parser !" +#~ msgstr "Fallo al anular el registro del analizador de datos!" -#: src/qt-console/bcomm/dircomm.cpp:208 -msgid "Initializing ..." -msgstr "Inicializando ..." +#~ msgid "Quitting.\n" +#~ msgstr "Saliendo.\n" -#: src/qt-console/bcomm/dircomm.cpp:224 src/qt-console/console/console.cpp:142 -msgid "Connected" -msgstr "Conectado" +#~ msgid "" +#~ "Welcome to Bacula bwx-console.\n" +#~ "Written by Nicolas Boichat \n" +#~ "Copyright (C), 2005-2007 Free Software Foundation Europe, e.V.\n" +#~ msgstr "" +#~ "Bienvenido a Bacula bwx-console.\n" +#~ "Escrito por Nicolas Boichat \n" +#~ "Copyright (C), 2005-2007 Free Software Foundation Europe, e.V.\n" -#: src/qt-console/bcomm/dircomm.cpp:348 -msgid "Command completed ..." -msgstr "Comando completado ..." +#~ msgid "About Bacula bwx-console" +#~ msgstr "Acerca de Bacula bwx-console" -#: src/qt-console/bcomm/dircomm.cpp:355 src/qt-console/console/console.cpp:379 -msgid "Processing command ..." -msgstr "Procesando comando ..." +#~ msgid "Please choose your default configuration file" +#~ msgstr "Por favor, seleccione su archivo de configuración por defecto" -#: src/qt-console/bcomm/dircomm.cpp:362 -msgid "At main prompt waiting for input ..." -msgstr "En prompt principal esperando por una entrada..." +#~ msgid "Use this configuration file as default?" +#~ msgstr "Utilizar este archivo de configuración por defecto?" -#: src/qt-console/bcomm/dircomm.cpp:369 src/qt-console/bcomm/dircomm.cpp:382 -msgid "At prompt waiting for input ..." -msgstr "En prompt esperando por una entrada..." +#~ msgid "Configuration file" +#~ msgstr "Archivo de configuración" -#: src/qt-console/bcomm/dircomm.cpp:390 -msgid "Command failed." -msgstr "Comando fallido." +#~ msgid "Console thread terminated." +#~ msgstr "Hilo de Consola terminado." -#: src/qt-console/bcomm/dircomm.cpp:463 -msgid "Director disconnected." -msgstr "Director desconectado." +#~ msgid "Connection to the director lost. Quit program?" +#~ msgstr "Conexión perdida con el director. Salir del programa?" -#: src/qt-console/bat_conf.cpp:154 -#, c-format -msgid "Console: name=%s\n" -msgstr "Console: nombre=%s\n" +#~ msgid "Connection lost" +#~ msgstr "Conexión perdida" -#: src/qt-console/main.cpp:191 -#, c-format -msgid "" -"\n" -"Version: %s (%s) %s %s %s\n" -"\n" -"Usage: bat [-s] [-c config_file] [-d debug_level] [config_file]\n" -" -c set configuration file to file\n" -" -dnn set debug level to nn\n" -" -s no signals\n" -" -t test - read configuration and exit\n" -" -? print this message.\n" -"\n" -msgstr "" -"\n" -"Versión: %s (%s) %s %s %s\n" -"\n" -"Utilice: bat [-s] [-c archivo_de_configuración] [-d nivel_depuración " -"[archivo_de_configuración]\n" -" -c establecer archivo de configuración para el archivo\n" -" -dnn establecer el nivel de depuración a nn\n" -" -s no hay señales\n" -" -t prueba - leer la configuración y salir\n" -" -? imprimir este mensaje.\n" -"\n" +#~ msgid "Connected to the director." +#~ msgstr "Conectado al director." + +#~ msgid "Reconnect" +#~ msgstr "Reconectar" + +#~ msgid "Reconnect to the director" +#~ msgstr "Reconectar al director" + +#~ msgid "Disconnected of the director." +#~ msgstr "Desconectado al director." + +#~ msgid "bwx-console: unexpected director's question." +#~ msgstr "bwx-console: inesperada consulta del director." #~ msgid "Using Device \"%s\"\n" #~ msgstr "Usando Dispositivo \"%s\"\n" diff --git a/bacula/po/es_AR.po b/bacula/po/es_AR.po index 37bdd17cf4..1bc951e6dc 100644 --- a/bacula/po/es_AR.po +++ b/bacula/po/es_AR.po @@ -1,6 +1,6 @@ # Spanish translations for branch package # Traducciones al español para el paquete branch. -# Copyright (C) 2006 Free Software Foundation Europe e.V. +# Copyright (C) 2006-2014 Free Software Foundation Europe e.V. # This file is distributed under the same license as the branch package. # , 2006. # diff --git a/bacula/po/fi.po b/bacula/po/fi.po index 7997d3581c..aa515ca513 100644 --- a/bacula/po/fi.po +++ b/bacula/po/fi.po @@ -1,5 +1,5 @@ # Finnish translations for branch package. -# Copyright (C) 2007 Kern Sibbald +# Copyright (C) 2007-2014 Kern Sibbald # This file is distributed under the same license as the branch package. # Kern Sibbald , 2007. # diff --git a/bacula/po/fr.po b/bacula/po/fr.po index b295d5f471..74e1683977 100644 --- a/bacula/po/fr.po +++ b/bacula/po/fr.po @@ -1,13 +1,13 @@ # French translations for Bacula package # Traduction anglaise du package Bacula. -# Copyright (C) 2005-2006 Free Software Foundation Europe e.V. +# Copyright (C) 2005-2014 Free Software Foundation Europe e.V. # Nicolas Boichat , 2005. # msgid "" msgstr "" -"Project-Id-Version: Bacula 1.38\n" +"Project-Id-Version: Bacula 5.2\n" "Report-Msgid-Bugs-To: bacula-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2013-02-19 18:26+0100\n" +"POT-Creation-Date: 2014-03-23 22:51+0100\n" "PO-Revision-Date: 2009-10-18 14:04+0000\n" "Last-Translator: Eric Bollengier \n" "Language-Team: French \n" @@ -17,17055 +17,16801 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: src/dird/jobq.c:74 -#, c-format -msgid "pthread_attr_init: ERR=%s\n" +#: src/console/authenticate.c:117 src/dird/authenticate.c:121 +msgid "" +"Authorization problem: Remote server did not advertise required TLS " +"support.\n" msgstr "" -#: src/dird/jobq.c:83 -#, c-format -msgid "pthread_mutex_init: ERR=%s\n" +#: src/console/authenticate.c:124 src/stored/authenticate.c:154 +#: src/stored/authenticate.c:267 src/stored/authenticate.c:376 +#: src/dird/authenticate.c:128 src/filed/authenticate.c:148 +#: src/filed/authenticate.c:276 +msgid "Authorization problem: Remote server requires TLS.\n" msgstr "" -#: src/dird/jobq.c:89 -#, c-format -msgid "pthread_cond_init: ERR=%s\n" +#: src/console/authenticate.c:133 +msgid "TLS negotiation failed\n" msgstr "" -#: src/dird/jobq.c:131 +#: src/console/authenticate.c:147 +#: src/qt-console/tray-monitor/authenticate.cpp:84 #, c-format -msgid "pthread_cond_broadcast: ERR=%s\n" -msgstr "" +msgid "Bad response to Hello command: ERR=%s\n" +msgstr "Mauvaise réponse à la commande Hello : ERR=%s\n" -#: src/dird/jobq.c:139 -#, c-format -msgid "pthread_cond_wait: ERR=%s\n" -msgstr "" +#: src/console/authenticate.c:154 +#: src/qt-console/tray-monitor/authenticate.cpp:91 +msgid "Director rejected Hello command\n" +msgstr "Le director a rejeté la commande Hello\n" -#: src/dird/jobq.c:180 -#, c-format -msgid "Job %s waiting %d seconds for scheduled start time.\n" +#: src/console/authenticate.c:166 +#, fuzzy +msgid "" +"Director authorization problem.\n" +"Most likely the passwords do not agree.\n" +"If you are using TLS, there may have been a certificate validation error " +"during the TLS handshake.\n" +"Please see " msgstr "" +"Problème d'authentification avec le director.\n" +"Le plus souvent, les mots de pass ne correspondent pas.\n" +"Si vous utilisez TLS, il peut y avoir une erreur de validation du " +"certificat\n" +"pendant l'initialisation de la connexion TLS.\n" +"Vous trouverez de l'aide sur\n" +"http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors\n" -#: src/dird/jobq.c:220 src/dird/job.c:113 src/stored/dircmd.c:200 -#: src/stored/stored.c:560 +#: src/console/console_conf.c:128 src/qt-console/bat_conf.cpp:129 #, c-format -msgid "Unable to init job cond variable: ERR=%s\n" +msgid "No record for %d %s\n" msgstr "" -#: src/dird/jobq.c:242 +#: src/console/console_conf.c:137 #, c-format -msgid "pthread_thread_create: ERR=%s\n" +msgid "Console: name=%s rcfile=%s histfile=%s\n" msgstr "" -#: src/dird/jobq.c:352 +#: src/console/console_conf.c:141 src/qt-console/bat_conf.cpp:138 #, c-format -msgid "pthread_cond_signal: ERR=%s\n" +msgid "Director: name=%s address=%s DIRport=%d\n" msgstr "" -#: src/dird/jobq.c:363 +#: src/console/console_conf.c:145 src/console/console_conf.c:221 +#: src/console/console_conf.c:266 src/console/console_conf.c:293 +#: src/stored/stored_conf.c:538 src/stored/stored_conf.c:628 +#: src/stored/stored_conf.c:663 src/filed/filed_conf.c:411 +#: src/filed/filed_conf.c:476 src/filed/filed_conf.c:506 +#: src/qt-console/bat_conf.cpp:149 src/qt-console/bat_conf.cpp:227 +#: src/qt-console/bat_conf.cpp:275 src/qt-console/bat_conf.cpp:305 #, c-format -msgid "pthread_create: ERR=%s\n" +msgid "Unknown resource type %d\n" msgstr "" -#: src/dird/jobq.c:647 +#: src/console/console_conf.c:247 src/dird/dird_conf.c:1425 +#: src/dird/dird_conf.c:1440 src/filed/filed_conf.c:439 +#: src/qt-console/tray-monitor/tray_conf.cpp:276 +#: src/qt-console/bat_conf.cpp:253 #, c-format -msgid "Rescheduled Job %s at %s to re-run in %d seconds (%s).\n" +msgid "%s item is required in %s resource, but not found.\n" msgstr "" -#: src/dird/jobq.c:703 src/dird/jobq.c:708 -msgid "previous Job" +#: src/console/console_conf.c:310 src/dird/dird_conf.c:1664 +#: src/filed/filed_conf.c:524 src/qt-console/tray-monitor/tray_conf.cpp:360 +#: src/qt-console/bat_conf.cpp:322 +#, c-format +msgid "Attempt to define second %s resource named \"%s\" is not permitted.\n" msgstr "" -#: src/dird/jobq.c:745 +#: src/console/console.c:114 #, c-format msgid "" -"Job canceled. Attempt to read and write same device.\n" -" Read storage \"%s\" (From %s) -- Write storage \"%s\" (From %s)\n" +"\n" +"Version: " msgstr "" +"\n" +"Version : " -#: src/dird/ua_select.c:54 -#, c-format -msgid "The current %s retention period is: %s\n" -msgstr "La période de rétention courante %s est : %s\n" - -#: src/dird/ua_select.c:59 -msgid "Continue? (yes/mod/no): " -msgstr "Continuer ? (oui/mod/non) : " - -#: src/dird/ua_select.c:62 src/dird/ua_run.c:219 -msgid "mod" -msgstr "mod" - -#: src/dird/ua_select.c:63 -msgid "Enter new retention period: " -msgstr "Saisissez une nouvelle période de rétention : " +#: src/console/console.c:166 +msgid "input from file" +msgstr "" -#: src/dird/ua_select.c:67 -msgid "Invalid period.\n" -msgstr "Période invalide.\n" +#: src/console/console.c:167 +msgid "output to file" +msgstr "" -#: src/dird/ua_select.c:143 -msgid "You have the following choices:\n" -msgstr "Vous avez les choix suivants :\n" +#: src/console/console.c:168 +msgid "quit" +msgstr "quit" -#: src/dird/ua_select.c:159 -msgid "The defined Storage resources are:\n" -msgstr "Les ressources de Stockage définies sont :\n" +#: src/console/console.c:169 +msgid "output to file and terminal" +msgstr "" -#: src/dird/ua_select.c:167 src/dird/ua_dotcmds.c:734 src/dird/ua_cmds.c:995 -#: src/dird/ua_run.c:224 src/wx-console/wxbrestorepanel.cpp:339 -#: src/wx-console/wxbrestorepanel.cpp:355 -#: src/wx-console/wxbrestorepanel.cpp:479 -#: src/wx-console/wxbrestorepanel.cpp:480 -#: src/wx-console/wxbrestorepanel.cpp:490 -#: src/wx-console/wxbrestorepanel.cpp:491 -#: src/wx-console/wxbrestorepanel.cpp:1173 -#: src/wx-console/wxbrestorepanel.cpp:1176 -#: src/wx-console/wxbrestorepanel.cpp:1845 -#: src/wx-console/wxbrestorepanel.cpp:1916 -msgid "Storage" -msgstr "Stockage" +#: src/console/console.c:170 +msgid "sleep specified time" +msgstr "" -#: src/dird/ua_select.c:167 -msgid "Select Storage resource" -msgstr "Sélectionnez la ressource de Stockage" +#: src/console/console.c:171 +msgid "print current time" +msgstr "affiche la date courante" -#: src/dird/ua_select.c:182 src/dird/ua_restore.c:1296 -msgid "The defined FileSet resources are:\n" -msgstr "Les FileSet définis sont :\n" +#: src/console/console.c:172 +msgid "print Console's version" +msgstr "" -#: src/dird/ua_select.c:190 src/dird/ua_restore.c:1300 src/dird/ua_run.c:226 -msgid "FileSet" -msgstr "FileSet" +#: src/console/console.c:173 +msgid "echo command string" +msgstr "" -#: src/dird/ua_select.c:190 src/dird/ua_restore.c:1300 -msgid "Select FileSet resource" -msgstr "Sélectionnez le FileSet" +#: src/console/console.c:174 +msgid "execute an external command" +msgstr "" -#: src/dird/ua_select.c:220 src/dird/ua_cmds.c:2029 -msgid "Could not find a Catalog resource\n" -msgstr "Impossible de trouver un Catalogue\n" +#: src/console/console.c:175 +msgid "exit = quit" +msgstr "exit = quit" -#: src/dird/ua_select.c:223 -msgid "You must specify a \"use \" command before continuing.\n" +#: src/console/console.c:176 +msgid "zed_keys = use zed keys instead of bash keys" msgstr "" -#: src/dird/ua_select.c:229 -msgid "The defined Catalog resources are:\n" -msgstr "Les Catalogues définis sont :\n" - -#: src/dird/ua_select.c:237 -msgid "Catalog" -msgstr "Catalogue" +#: src/console/console.c:177 +msgid "help listing" +msgstr "" -#: src/dird/ua_select.c:237 -msgid "Select Catalog resource" -msgstr "Sélectionnez le Catalogue" +#: src/console/console.c:179 +msgid "set command separator" +msgstr "" -#: src/dird/ua_select.c:255 src/dird/ua_select.c:281 -msgid "The defined Job resources are:\n" -msgstr "Les Job définis sont :\n" +#: src/console/console.c:213 +msgid ": is an invalid command\n" +msgstr "%s : est une commande invalide.\n" -#: src/dird/ua_select.c:266 src/dird/ua_select.c:289 src/dird/ua_select.c:330 -#: src/dird/ua_select.c:1186 src/dird/dird_conf.c:670 src/dird/ua_prune.c:601 -#: src/dird/ua_run.c:225 -msgid "Job" -msgstr "Job" +#: src/console/console.c:663 +#, fuzzy +msgid "Illegal separator character.\n" +msgstr "Caractère illégal « %c » dans le nom.\n" -#: src/dird/ua_select.c:266 src/dird/ua_select.c:289 -msgid "Select Job resource" -msgstr "Sélectionnez le Job" +#: src/console/console.c:696 +#, fuzzy +msgid "Command logic problem\n" +msgstr "Commande annulée.\n" -#: src/dird/ua_select.c:308 +#: src/console/console.c:911 #, fuzzy, c-format -msgid "Error: Restore Job resource \"%s\" does not exist.\n" -msgstr "Erreur : le Pool \"%s\" n'existe pas.\n" - -#: src/dird/ua_select.c:322 -msgid "The defined Restore Job resources are:\n" -msgstr "Les Job de restauration sont :\n" +msgid "Can't find %s in Director list\n" +msgstr "Impossible de trouver la ressource Director \"%s\"\n" -#: src/dird/ua_select.c:330 -msgid "Select Restore Job" -msgstr "Sélectionnez le Job de restauration" +#: src/console/console.c:919 +msgid "Available Directors:\n" +msgstr "" -#: src/dird/ua_select.c:347 -msgid "The defined Client resources are:\n" -msgstr "Les clients définis sont :\n" +#: src/console/console.c:923 +#, c-format +msgid "%2d: %s at %s:%d\n" +msgstr "" -#: src/dird/ua_select.c:355 src/dird/ua_select.c:464 src/dird/ua_dotcmds.c:735 -#: src/dird/ua_cmds.c:996 src/dird/ua_run.c:230 -#: src/wx-console/wxbrestorepanel.cpp:336 -#: src/wx-console/wxbrestorepanel.cpp:354 -#: src/wx-console/wxbrestorepanel.cpp:431 -#: src/wx-console/wxbrestorepanel.cpp:432 -#: src/wx-console/wxbrestorepanel.cpp:442 -#: src/wx-console/wxbrestorepanel.cpp:443 -#: src/wx-console/wxbrestorepanel.cpp:700 -#: src/wx-console/wxbrestorepanel.cpp:1133 -#: src/wx-console/wxbrestorepanel.cpp:1136 -#: src/wx-console/wxbrestorepanel.cpp:1238 -#: src/wx-console/wxbrestorepanel.cpp:1838 -#: src/wx-console/wxbrestorepanel.cpp:1840 -#: src/wx-console/wxbrestorepanel.cpp:1914 -#: src/wx-console/wxbrestorepanel.cpp:1970 -msgid "Client" -msgstr "Client" +#: src/console/console.c:927 +msgid "Select Director by entering a number: " +msgstr "" -#: src/dird/ua_select.c:355 -msgid "Select Client (File daemon) resource" -msgstr "Sélectionnez le client (File daemon)" +#: src/console/console.c:934 +#, fuzzy, c-format +msgid "%s is not a number. You must enter a number between 1 and %d\n" +msgstr "Vous devez saisir un nombre entre 1 et %d\n" -#: src/dird/ua_select.c:382 +#: src/console/console.c:941 #, c-format -msgid "Error: Client resource %s does not exist.\n" -msgstr "Erreur : le client %s n'est pas définie.\n" +msgid "You must enter a number between 1 and %d\n" +msgstr "Vous devez saisir un nombre entre 1 et %d\n" + +#: src/console/console.c:1095 src/stored/stored.c:215 src/dird/dird.c:267 +#: src/filed/filed.c:204 src/qt-console/main.cpp:154 +msgid "Cryptography library initialization failed.\n" +msgstr "" -#: src/dird/ua_select.c:407 +#: src/console/console.c:1099 src/stored/stored.c:219 src/dird/dird.c:271 +#: src/dird/dird.c:299 src/dird/dird.c:517 src/dird/dird.c:520 +#: src/filed/filed.c:209 src/qt-console/main.cpp:158 #, c-format -msgid "Could not find Client %s: ERR=%s" -msgstr "Impossible de trouver le client %s : ERR=%s" +msgid "Please correct configuration file: %s\n" +msgstr "Merci de corriger le fichier de configuration : %s\n" -#: src/dird/ua_select.c:417 src/dird/ua_select.c:471 +#: src/console/console.c:1129 #, c-format -msgid "Could not find Client \"%s\": ERR=%s" -msgstr "Impossible de trouver le client \"%s\" : ERR=%s" +msgid "Connecting to Director %s:%d\n" +msgstr "Connexion au Director %s:%d\n" -#: src/dird/ua_select.c:446 +#: src/console/console.c:1146 src/qt-console/bcomm/dircomm.cpp:118 #, c-format -msgid "Error obtaining client ids. ERR=%s\n" -msgstr "Erreur pendant l'obtention de l'identifiant du Client. ERR=%s\n" +msgid "Failed to initialize TLS context for Console \"%s\".\n" +msgstr "Impossible d'initialiser le contexte TLS pour la Console \"%s\".\n" -#: src/dird/ua_select.c:450 -msgid "No clients defined. You must run a job before using this command.\n" -msgstr "" -"Pas de client défini. Vous devez lancer une sauvegarde avant d'utiliser " -"cette commande.\n" +#: src/console/console.c:1166 src/qt-console/bcomm/dircomm.cpp:141 +#, c-format +msgid "Failed to initialize TLS context for Director \"%s\".\n" +msgstr "Impossible d'initialiser le contexte TLS pour le Director \"%s\".\n" -#: src/dird/ua_select.c:454 -msgid "Defined Clients:\n" -msgstr "Clients définis :\n" +#: src/console/console.c:1198 +msgid "Enter a period to cancel a command.\n" +msgstr "Tapez un point (.) pour annuler une commande.\n" -#: src/dird/ua_select.c:464 -msgid "Select the Client" -msgstr "Sélectionnez le client" +#: src/console/console.c:1284 src/console/console.c:1314 +#: src/stored/stored.c:342 src/dird/dird.c:607 src/dird/dird.c:813 +#: src/dird/dird.c:868 src/dird/dird.c:907 src/filed/filed.c:366 +#: src/filed/filed.c:566 src/qt-console/main.cpp:213 +#: src/qt-console/main.cpp:243 +msgid "TLS required but not configured in Bacula.\n" +msgstr "" -#: src/dird/ua_select.c:497 src/dird/ua_select.c:521 src/dird/ua_select.c:566 +#: src/console/console.c:1292 src/qt-console/main.cpp:221 #, c-format -msgid "Could not find Pool \"%s\": ERR=%s" -msgstr "Impossible de trouver le Pool \"%s\" : ERR=%s" +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Director \"%s\" in %s. At least one CA certificate store is required.\n" +msgstr "" -#: src/dird/ua_select.c:532 src/dird/ua_output.c:476 src/dird/ua_update.c:436 +#: src/console/console.c:1301 src/qt-console/main.cpp:230 #, c-format -msgid "Error obtaining pool ids. ERR=%s\n" -msgstr "Erreur pendant lors de la récupération du pool. ERR=%s\n" - -#: src/dird/ua_select.c:536 -msgid "No pools defined. Use the \"create\" command to create one.\n" +msgid "" +"No Director resource defined in %s\n" +"Without that I don't how to speak to the Director :-(\n" msgstr "" -"Pas de Pool défini. Utilisez la commande « create » pour en créer un.\n" - -#: src/dird/ua_select.c:540 -msgid "Defined Pools:\n" -msgstr "Pools définis :\n" +"Pas de director défini pour %s\n" +"Sans cette définition, il n'est pas possible de se connecter à celui-ci.\n" -#: src/dird/ua_select.c:542 src/dird/ua_select.c:562 src/dird/ua_update.c:365 -#: src/baconfig.h:88 -msgid "*None*" +#: src/console/console.c:1321 src/qt-console/main.cpp:251 +#, c-format +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Console \"%s\" in %s.\n" msgstr "" -#: src/dird/ua_select.c:553 src/dird/ua_select.c:666 src/dird/ua_update.c:616 -#: src/dird/ua_run.c:238 src/wx-console/wxbrestorepanel.cpp:338 -#: src/wx-console/wxbrestorepanel.cpp:527 -#: src/wx-console/wxbrestorepanel.cpp:537 -#: src/wx-console/wxbrestorepanel.cpp:1834 -msgid "Pool" -msgstr "Pool" +#: src/console/console.c:1347 +msgid "Too many arguments on input command.\n" +msgstr "Trop d'arguments sur la commande.\n" -#: src/dird/ua_select.c:553 -msgid "Select the Pool" -msgstr "Sélectionnez le Pool" +#: src/console/console.c:1351 +msgid "First argument to input command must be a filename.\n" +msgstr "Le premier argument de la commande doit être un fichier.\n" -#: src/dird/ua_select.c:591 +#: src/console/console.c:1357 #, c-format -msgid "No access to Pool \"%s\"\n" -msgstr "Pas d'accès au Pool \"%s\"\n" - -#: src/dird/ua_select.c:623 -#, fuzzy -msgid "Enter *MediaId or Volume name: " -msgstr "Saisissez le MediaId ou le nom du Volume : " - -#: src/dird/ua_select.c:658 -msgid "The defined Pool resources are:\n" -msgstr "Les Pools définis sont :\n" +msgid "Cannot open file %s for input. ERR=%s\n" +msgstr "Impossible d'ouvrir le fichier %s pour lecture. ERR=%s\n" -#: src/dird/ua_select.c:666 -msgid "Select Pool resource" -msgstr "Sélectionnez le Pool" +#: src/console/console.c:1389 +msgid "Too many arguments on output/tee command.\n" +msgstr "" -#: src/dird/ua_select.c:690 src/dird/ua_restore.c:555 +#: src/console/console.c:1406 #, c-format -msgid "Error: Pool resource \"%s\" does not exist.\n" -msgstr "Erreur : le Pool \"%s\" n'existe pas.\n" +msgid "Cannot open file %s for output. ERR=%s\n" +msgstr "Impossible d'ouvrir le fichier %s pour la sortie. ERR=%s\n" -#: src/dird/ua_select.c:701 -msgid "Enter the JobId to select: " -msgstr "Entrez le JobId à sélectionner : " +#: src/console/console.c:1425 +msgid "Too many arguments. Enclose command in double quotes.\n" +msgstr "" +"Trop d'arguments sur la commande. Essayez d'utiliser des « \" » autour des " +"commandes\n" -#: src/dird/ua_select.c:739 -#, c-format -msgid "Could not find Job \"%s\": ERR=%s" -msgstr "Impossible de trouver le Job \"%s\" : ERR=%s" +#: src/console/console.c:1434 +#, fuzzy, c-format +msgid "Cannot popen(\"%s\", \"r\"): ERR=%s\n" +msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" -#: src/dird/ua_select.c:819 +#: src/console/console.c:1446 src/stored/autochanger.c:665 #, c-format -msgid "Automatically selected %s: %s\n" -msgstr "Sélection automatique %s : %s\n" +msgid "Autochanger error: ERR=%s\n" +msgstr "Erreur sur l'autochangeur : ERR=%s\n" -#: src/dird/ua_select.c:830 +#: src/cats/sql_list.c:46 #, c-format -msgid "" -"Your request has multiple choices for \"%s\". Selection is not possible in " -"batch mode.\n" +msgid "Query failed: %s\n" +msgstr "Erreur sur la requête : %s\n" + +#: src/cats/sql_list.c:262 +msgid "These JobIds have copies as follows:\n" msgstr "" -#: src/dird/ua_select.c:848 -#, c-format -msgid "Selection list for \"%s\" is empty!\n" -msgstr "La sélection pour \"%s\" est vide !\n" +#: src/cats/sql_list.c:264 +msgid "The catalog contains copies as follows:\n" +msgstr "" -#: src/dird/ua_select.c:854 +#: src/cats/sql_get.c:139 #, c-format -msgid "Automatically selected: %s\n" -msgstr "Sélection automatique : %s\n" +msgid "Error fetching row: %s\n" +msgstr "" -#: src/dird/ua_select.c:866 -msgid "Selection aborted, nothing done.\n" -msgstr "Sélection annulée, rien de fait.\n" +#: src/cats/sql_get.c:146 +#, c-format +msgid "get_file_record want 1 got rows=%d PathId=%s FilenameId=%s\n" +msgstr "" -#: src/dird/ua_select.c:871 +#: src/cats/sql_get.c:154 #, c-format -msgid "Please enter a number between 1 and %d\n" -msgstr "Merci de saisir un nombre entre 1 et %d\n" +msgid "File record for PathId=%s FilenameId=%s not found.\n" +msgstr "" -#: src/dird/ua_select.c:920 -msgid "Storage name given twice.\n" +#: src/cats/sql_get.c:160 +msgid "File record not found in Catalog.\n" msgstr "" -#: src/dird/ua_select.c:937 +#: src/cats/sql_get.c:187 #, c-format -msgid "Expecting jobid=nn command, got: %s\n" -msgstr "Attendait l'option jobid=nn, pas : %s\n" +msgid "More than one Filename!: %s for file: %s\n" +msgstr "" -#: src/dird/ua_select.c:941 +#: src/cats/sql_get.c:193 src/cats/sql_get.c:246 src/cats/sql_get.c:623 +#: src/cats/sql_get.c:724 src/cats/sql_get.c:1043 src/cats/sql.c:341 +#: src/cats/sql.c:348 src/cats/sql_create.c:584 src/cats/postgresql.c:153 #, c-format -msgid "JobId %s is not running.\n" -msgstr "JobId %s n'est pas en cours.\n" +msgid "error fetching row: %s\n" +msgstr "" -#: src/dird/ua_select.c:951 +#: src/cats/sql_get.c:197 #, c-format -msgid "Expecting job=xxx, got: %s.\n" -msgstr "Attendait l'option job=xxx, pas : %s\n" +msgid "Get DB Filename record %s found bad record: %d\n" +msgstr "" -#: src/dird/ua_select.c:955 src/dird/ua_select.c:967 +#: src/cats/sql_get.c:203 #, c-format -msgid "Job \"%s\" is not running.\n" -msgstr "Job \"%s\" n'est pas en cours.\n" +msgid "Filename record: %s not found.\n" +msgstr "" -#: src/dird/ua_select.c:963 +#: src/cats/sql_get.c:207 #, c-format -msgid "Expecting ujobid=xxx, got: %s.\n" -msgstr "Attendait l'option ujobid=xxx, pas : %s\n" +msgid "Filename record: %s not found in Catalog.\n" +msgstr "" -#: src/dird/ua_select.c:983 +#: src/cats/sql_get.c:239 src/cats/sql_create.c:577 #, c-format -msgid "Storage resource \"%s\": not found\n" -msgstr "Storage resource \"%s\" : non trouvé\n" +msgid "More than one Path!: %s for path: %s\n" +msgstr "" -#: src/dird/ua_select.c:1015 -msgid "Enter autochanger drive[0]: " -msgstr "Saisissez le numéro du lecteur de l'autochanger [0] : " +#: src/cats/sql_get.c:250 +#, c-format +msgid "Get DB path record %s found bad record: %s\n" +msgstr "" -#: src/dird/ua_select.c:1036 -msgid "Enter autochanger slot: " -msgstr "Saisissez le slot de l'autochanger [0] : " +#: src/cats/sql_get.c:263 +#, c-format +msgid "Path record: %s not found.\n" +msgstr "" -#: src/dird/ua_select.c:1066 -msgid "Media Types defined in conf file:\n" +#: src/cats/sql_get.c:267 +#, c-format +msgid "Path record: %s not found in Catalog.\n" msgstr "" -#: src/dird/ua_select.c:1072 -msgid "Media Type" +#: src/cats/sql_get.c:306 +#, c-format +msgid "No Job found for JobId %s\n" msgstr "" -#: src/dird/ua_select.c:1072 -msgid "Select the Media Type" -msgstr "Choisissez le type de Media" +#: src/cats/sql_get.c:379 src/cats/sql_get.c:436 +#, c-format +msgid "No volumes found for JobId=%d\n" +msgstr "" -#: src/dird/ua_select.c:1111 -#, fuzzy, c-format -msgid "JobId %s is not running. Use Job name to %s inactive jobs.\n" +#: src/cats/sql_get.c:385 src/cats/sql_get.c:447 +#, c-format +msgid "Error fetching row %d: ERR=%s\n" msgstr "" -"JobId %s n'est pas en cours. Utilisez le nom du Job pour annuler un job " -"inactif.\n" -#: src/dird/ua_select.c:1120 src/dird/ua_select.c:1130 +#: src/cats/sql_get.c:399 #, c-format -msgid "Warning Job %s is not running. Continuing anyway ...\n" -msgstr "Attention le Job %s n'est pas en cours. Continuons quand même...\n" +msgid "No Volume for JobId %d found in Catalog.\n" +msgstr "" -#: src/dird/ua_select.c:1140 src/dird/ua_cmds.c:692 src/dird/ua_cmds.c:738 -msgid "Unauthorized command from this console.\n" -msgstr "Commande interdite depuis cette console.\n" +#: src/cats/sql_get.c:540 +#, c-format +msgid "Pool id select failed: ERR=%s\n" +msgstr "" -#: src/dird/ua_select.c:1165 src/stored/status.c:538 src/filed/status.c:241 -msgid "No Jobs running.\n" -msgstr "Pas de job en cours.\n" +#: src/cats/sql_get.c:577 +#, c-format +msgid "Client id select failed: ERR=%s\n" +msgstr "" -#: src/dird/ua_select.c:1167 -msgid "None of your jobs are running.\n" -msgstr "Aucun de vos jobs ne sont en cours.\n" +#: src/cats/sql_get.c:618 +#, c-format +msgid "More than one Pool!: %s\n" +msgstr "" -#: src/dird/ua_select.c:1172 -msgid "Select Job:\n" -msgstr "Sélectionnez le Job :\n" +#: src/cats/sql_get.c:681 +msgid "Pool record not found in Catalog.\n" +msgstr "" -#: src/dird/ua_select.c:1181 +#: src/cats/sql_get.c:719 #, c-format -msgid "JobId=%s Job=%s" -msgstr "JobId=%s Job=%s" - -#: src/dird/ua_select.c:1185 -#, fuzzy, c-format -msgid "Choose Job to %s" -msgstr "Sélectionnez le Job à annuler" +msgid "More than one Client!: %s\n" +msgstr "" -#: src/dird/ua_select.c:1192 -#, fuzzy, c-format -msgid "" -"Cancel: %s\n" -"\n" -"%s" +#: src/cats/sql_get.c:736 src/cats/sql_get.c:740 +msgid "Client record not found in Catalog.\n" msgstr "" -"Annule : %s\n" -"\n" -"%s" -#: src/dird/ua_select.c:1193 -msgid "Confirm cancel?" -msgstr "Confirmez l'annulation : " +#: src/cats/sql_get.c:767 +#, c-format +msgid "More than one Counter!: %d\n" +msgstr "" -#: src/dird/ua_select.c:1199 -msgid "Confirm cancel (yes/no): " -msgstr "Confirmez l'annulation (oui/non) : " +#: src/cats/sql_get.c:772 +#, c-format +msgid "error fetching Counter row: %s\n" +msgstr "" -#: src/dird/ua_select.c:1208 src/dird/ua_cmds.c:733 src/dird/ua_cmds.c:1100 +#: src/cats/sql_get.c:792 #, c-format -msgid "Job \"%s\" not found.\n" -msgstr "Job \"%s\" non trouvé.\n" +msgid "Counter record: %s not found in Catalog.\n" +msgstr "" -#: src/dird/bsr.c:173 +#: src/cats/sql_get.c:832 #, c-format -msgid "Unable to get Job record. ERR=%s\n" +msgid "Error got %s FileSets but expected only one!\n" msgstr "" -#: src/dird/bsr.c:184 +#: src/cats/sql_get.c:837 #, c-format -msgid "Unable to get Job Volume Parameters. ERR=%s\n" +msgid "FileSet record \"%s\" not found.\n" +msgstr "" + +#: src/cats/sql_get.c:847 +msgid "FileSet record not found in Catalog.\n" msgstr "" -#: src/dird/bsr.c:232 +#: src/cats/sql_get.c:943 #, c-format -msgid "Unable to create bootstrap file %s. ERR=%s\n" -msgstr "Impossible de créer le fichier bootstrap %s. ERR=%s\n" +msgid "Media id select failed: ERR=%s\n" +msgstr "" -#: src/dird/bsr.c:241 -#, fuzzy -msgid "No files found to read. No bootstrap file written.\n" +#: src/cats/sql_get.c:981 +#, fuzzy, c-format +msgid "query dbids failed: ERR=%s\n" +msgstr "fopen %s en erreur : ERR=%s\n" + +#: src/cats/sql_get.c:1038 +#, c-format +msgid "More than one Volume!: %s\n" msgstr "" -"Aucun fichier trouvé pour la restauration/migration. Pas de fichier " -"Bootstrap écrit.\n" -#: src/dird/bsr.c:245 -msgid "Error writing bsr file.\n" -msgstr "Erreur pendant l'écriture du fichier bsr.\n" +#: src/cats/sql_get.c:1094 +#, c-format +msgid "Media record MediaId=%s not found.\n" +msgstr "" -#: src/dird/bsr.c:250 +#: src/cats/sql_get.c:1097 #, c-format -msgid "Bootstrap records written to %s\n" -msgstr "Fichier bootstrap écrit sur %s\n" +msgid "Media record for Volume \"%s\" not found.\n" +msgstr "" -#: src/dird/bsr.c:298 -msgid "" -"The job will require the following\n" -" Volume(s) Storage(s) SD Device(s)\n" -"===========================================================================\n" +#: src/cats/sql_get.c:1104 +#, c-format +msgid "Media record for MediaId=%u not found in Catalog.\n" msgstr "" -"Ce job va utiliser les éléments suivants :\n" -" Volume(s) Storage(s) SD Device(s)\n" -"===========================================================================\n" -#: src/dird/bsr.c:317 -msgid "No Volumes found to restore.\n" -msgstr "Aucun volume trouvé pour la restauration.\n" +#: src/cats/sql_get.c:1107 +#, c-format +msgid "Media record for Vol=%s not found in Catalog.\n" +msgstr "" -#: src/dird/bsr.c:319 -msgid "" -"\n" -"Volumes marked with \"*\" are online.\n" +#: src/cats/sql_get.c:1140 src/cats/sql_create.c:1183 +msgid "ERR=JobIds are empty\n" msgstr "" -#: src/dird/ua_server.c:69 +#: src/cats/sql_find.c:86 src/cats/sql_find.c:115 src/cats/sql_find.c:170 #, c-format -msgid "Cannot create UA thread: %s\n" +msgid "" +"Query error for start time request: ERR=%s\n" +"CMD=%s\n" msgstr "" -#: src/dird/ua_server.c:159 -msgid "You have messages.\n" -msgstr "Vous avez des messages.\n" +#: src/cats/sql_find.c:92 src/cats/sql_find.c:176 +msgid "No prior Full backup Job record found.\n" +msgstr "Pas de précédent backup Full en base.\n" -#: src/dird/verify.c:86 src/dird/verify.c:318 +#: src/cats/sql_find.c:104 #, c-format -msgid "Unimplemented Verify level %d(%c)\n" +msgid "Unknown level=%d\n" msgstr "" -#: src/dird/verify.c:148 +#: src/cats/sql_find.c:121 +#, c-format msgid "" -"Unable to find JobId of previous InitCatalog Job.\n" -"Please run a Verify with Level=InitCatalog before\n" -"running the current Job.\n" +"No Job record found: ERR=%s\n" +"CMD=%s\n" msgstr "" -"Impossible de trouvé JobId d'un précédent Job « InitCatalog.\n" -"Il faut lancer un Job Verify avec l'option Level=InitCatalog avant\n" -"de lancer le Job courant.\n" -#: src/dird/verify.c:153 -msgid "Unable to find JobId of previous Job for this client.\n" -msgstr "Impossible de trouver JobId d'un précédent Job pour ce client.\n" +#: src/cats/sql_find.c:279 +#, c-format +msgid "Unknown Job level=%d\n" +msgstr "Niveau de job inconnu %d\n" -#: src/dird/verify.c:170 +#: src/cats/sql_find.c:289 #, c-format -msgid "Could not get job record for previous Job. ERR=%s" -msgstr "" +msgid "No Job found for: %s.\n" +msgstr "Pas de job trouvé pour : %s.\n" -#: src/dird/verify.c:176 +#: src/cats/sql_find.c:300 #, c-format -msgid "Last Job %d did not terminate normally. JobStatus=%c\n" -msgstr "Le dernier job %d ne s'est pas terminé correctement. JobStatus=%c\n" +msgid "No Job found for: %s\n" +msgstr "Pas de job trouvé pour %s\n" + +#: src/cats/sql_find.c:386 +#, fuzzy, c-format +msgid "Request for Volume item %d greater than max %d or less than 1\n" +msgstr "Le slot %d est ignoré car il est supérieur au maximum %d.\n" -#: src/dird/verify.c:180 +#: src/cats/sql_find.c:401 #, c-format -msgid "Verifying against JobId=%d Job=%s\n" +msgid "No Volume record found for item %d.\n" +msgstr "Pas de volume trouvé en base pour l'objet %d.\n" + +#: src/cats/cats_dummy.c:27 +msgid "Please replace this null libbaccats library with a proper one.\n" msgstr "" -#: src/dird/verify.c:219 +#: src/cats/sql.c:185 #, c-format -msgid "Start Verify JobId=%s Level=%s Job=%s\n" +msgid "" +"Potential performance problem:\n" +"max_connections=%d set for %s database \"%s\" should be larger than " +"Director's MaxConcurrentJobs=%d\n" msgstr "" -#: src/dird/verify.c:305 -msgid "Deprecated feature ... use bootstrap.\n" +#: src/cats/sql.c:230 +#, c-format +msgid "" +"query %s failed:\n" +"%s\n" msgstr "" -#: src/dird/verify.c:372 +#: src/cats/sql.c:252 #, c-format -msgid "Unimplemented verify level %d\n" +msgid "" +"insert %s failed:\n" +"%s\n" msgstr "" -#: src/dird/verify.c:421 -msgid "Verify OK" -msgstr "Vérification OK" - -#: src/dird/verify.c:425 -msgid "*** Verify Error ***" -msgstr "*** Erreur de Vérification ***" - -#: src/dird/verify.c:429 -msgid "Verify warnings" +#: src/cats/sql.c:262 +#, c-format +msgid "Insertion problem: affected_rows=%s\n" msgstr "" -#: src/dird/verify.c:432 -msgid "Verify Canceled" -msgstr "Vérification annulée" - -#: src/dird/verify.c:435 -msgid "Verify Differences" +#: src/cats/sql.c:283 +#, c-format +msgid "" +"update %s failed:\n" +"%s\n" msgstr "" -#: src/dird/verify.c:440 +#: src/cats/sql.c:293 #, c-format -msgid "Inappropriate term code: %d %c\n" +msgid "Update failed: affected_rows=%s for %s\n" msgstr "" -#: src/dird/verify.c:454 -#, fuzzy, c-format -msgid "" -"%s %s %s (%s):\n" -" Build OS: %s %s %s\n" -" JobId: %d\n" -" Job: %s\n" -" FileSet: %s\n" -" Verify Level: %s\n" -" Client: %s\n" -" Verify JobId: %d\n" -" Verify Job: %s\n" -" Start time: %s\n" -" End time: %s\n" -" Files Expected: %s\n" -" Files Examined: %s\n" -" Non-fatal FD errors: %d\n" -" FD termination status: %s\n" -" SD termination status: %s\n" -" Termination: %s\n" -"\n" -msgstr "" -"%s %s %s (%s): %s\n" -" Build OS: %s %s %s\n" -" JobId : %d\n" -" Job : %s\n" -" FileSet: %s\n" -" Client : %s\n" -" Début : %s\n" -" Fin : %s\n" -" Fichiers attendus : %s\n" -" Fichiers restaurés : %s\n" -" Octets restaurés : %s\n" -" Débit : %.1f Ko/s\n" -" Erreurs du FD : %d\n" -" Statut de fin du FD : %s\n" -" Statut de fin du SD : %s\n" -" Etat : %s\n" - -#: src/dird/verify.c:489 -#, fuzzy, c-format +#: src/cats/sql.c:315 +#, c-format msgid "" -"%s %s %s (%s):\n" -" Build: %s %s %s\n" -" JobId: %d\n" -" Job: %s\n" -" FileSet: %s\n" -" Verify Level: %s\n" -" Client: %s\n" -" Verify JobId: %d\n" -" Verify Job: %s\n" -" Start time: %s\n" -" End time: %s\n" -" Files Examined: %s\n" -" Non-fatal FD errors: %d\n" -" FD termination status: %s\n" -" Termination: %s\n" -"\n" +"delete %s failed:\n" +"%s\n" msgstr "" -"%s %s (%s) : %s\n" -" Build: %s %s %s\\n\"\n" -" JobId : %d\n" -" Job : %s\n" -" FileSet : %s\n" -" Client : %s\n" -" Début : %s\n" -" Fin : %s\n" -" Fichiers attendus : %s\n" -" Fichiers restaurés : %s\n" -" Octets restaurés : %s\n" -" Débit : %.1f Ko/s\n" -" Erreurs du FD : %d\n" -" Statut de fin du FD : %s\n" -" Statut de fin du SD : %s\n" -" Etat : %s\n" -#: src/dird/verify.c:567 +#: src/cats/sql.c:409 #, c-format -msgid "" -"bird set configuration file to file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -f run in foreground (for debugging)\n" -" -g groupid\n" -" -m print kaboom output (for debugging)\n" -" -r run now\n" -" -s no signals\n" -" -t test - read configuration and exit\n" -" -u userid\n" -" -v verbose user messages\n" -" -? print this message.\n" -"\n" -msgstr "" -"\n" -"Version : %s (%s)\n" -"\n" -"Usage : dird [-f -s] [-c config_file] [-d debug_level] [config_file]\n" -" -c utilise fich comme fichier de configuration\n" -" -d positionne le niveau de debug à nn\n" -" -dt affiche un timestamp devant chaque ligne de debug\n" -" -f reste en avant-plan (pour debugger)\n" -" -g groupid\n" -" -r lance maintenant\n" -" -s pas de signaux\n" -" -t test - lit seulement le fichier de configuration\n" -" -u userid\n" -" -v affiche les messages utilisateurs\n" -" -? affiche ce message.\n" -"\n" - -#: src/dird/dird.c:296 src/stored/stored.c:227 src/console/console.c:1109 -#: src/filed/filed.c:218 src/qt-console/main.cpp:165 -msgid "Cryptography library initialization failed.\n" +msgid "More than one Client!: %d\n" msgstr "" -#: src/dird/dird.c:300 src/dird/dird.c:328 src/dird/dird.c:560 -#: src/dird/dird.c:563 src/stored/stored.c:231 src/console/console.c:1113 -#: src/filed/filed.c:223 src/qt-console/main.cpp:169 +#: src/cats/sql_create.c:514 #, c-format -msgid "Please correct configuration file: %s\n" -msgstr "Merci de corriger le fichier de configuration : %s\n" - -#: src/dird/dird.c:546 -msgid "Too many open reload requests. Request ignored.\n" -msgstr "" - -#: src/dird/dird.c:561 -msgid "Out of reload table entries. Giving up.\n" +msgid "error fetching Client row: %s\n" msgstr "" -#: src/dird/dird.c:564 -msgid "Resetting previous configuration.\n" -msgstr "Retour à la dernière configuration.\n" - -#: src/dird/dird.c:628 +#: src/cats/sql_create.c:542 #, c-format -msgid "" -"No Director resource defined in %s\n" -"Without that I don't know who I am :-(\n" +msgid "Create DB Client record %s failed. ERR=%s\n" msgstr "" -#: src/dird/dird.c:636 src/filed/filed.c:350 +#: src/cats/sql_create.c:611 #, c-format -msgid "No Messages resource defined in %s\n" +msgid "Create db Path record %s failed. ERR=%s\n" msgstr "" -#: src/dird/dird.c:641 +#: src/cats/sql_create.c:656 #, c-format -msgid "Only one Director resource permitted in %s\n" +msgid "Create DB Counters record %s failed. ERR=%s\n" msgstr "" -#: src/dird/dird.c:650 src/dird/dird.c:856 src/dird/dird.c:911 -#: src/dird/dird.c:950 src/stored/stored.c:354 src/console/console.c:1296 -#: src/console/console.c:1326 src/filed/filed.c:357 src/filed/filed.c:516 -#: src/wx-console/console_thread.cpp:118 src/wx-console/console_thread.cpp:144 -#: src/qt-console/main.cpp:224 src/qt-console/main.cpp:254 -msgid "TLS required but not configured in Bacula.\n" +#: src/cats/sql_create.c:694 +#, c-format +msgid "More than one FileSet!: %d\n" msgstr "" -#: src/dird/dird.c:658 src/stored/stored.c:410 src/filed/filed.c:526 +#: src/cats/sql_create.c:699 #, c-format -msgid "\"TLS Certificate\" file not defined for Director \"%s\" in %s.\n" +msgid "error fetching FileSet row: ERR=%s\n" msgstr "" -#: src/dird/dird.c:664 src/stored/stored.c:416 src/filed/filed.c:532 +#: src/cats/sql_create.c:730 #, c-format -msgid "\"TLS Key\" file not defined for Director \"%s\" in %s.\n" +msgid "Create DB FileSet record %s failed. ERR=%s\n" msgstr "" -#: src/dird/dird.c:671 src/stored/stored.c:422 src/filed/filed.c:538 +#: src/cats/sql_create.c:999 #, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Director \"%s\" in %s. At least one CA certificate store is required when " -"using \"TLS Verify Peer\".\n" +msgid "Create db File record %s failed. ERR=%s" msgstr "" -#: src/dird/dird.c:690 src/stored/stored.c:441 src/filed/filed.c:557 +#: src/cats/sql_create.c:1025 #, c-format -msgid "Failed to initialize TLS context for Director \"%s\" in %s.\n" +msgid "More than one Filename! %s for file: %s\n" msgstr "" -#: src/dird/dird.c:698 +#: src/cats/sql_create.c:1031 #, c-format -msgid "No Job records defined in %s\n" +msgid "Error fetching row for file=%s: ERR=%s\n" msgstr "" -#: src/dird/dird.c:756 src/dird/dird.c:769 +#: src/cats/sql_create.c:1048 #, c-format -msgid "Hey something is wrong. p=0x%lu\n" +msgid "Create db Filename record %s failed. ERR=%s\n" msgstr "" -#: src/dird/dird.c:830 +#: src/cats/sql_create.c:1068 #, c-format -msgid "\"%s\" directive in Job \"%s\" resource is required, but not found.\n" +msgid "Attempt to put non-attributes into catalog. Stream=%d\n" msgstr "" -#: src/dird/dird.c:837 -msgid "Too many items in Job resource\n" +#: src/cats/sql_create.c:1084 +msgid "Cannot Copy/Migrate job using BaseJob.\n" msgstr "" -#: src/dird/dird.c:841 -#, c-format -msgid "No storage specified in Job \"%s\" nor in Pool.\n" -msgstr "Pas de Storage spécifié dans le job \"%s\" ni dans le Pool.\n" +#: src/cats/sql_create.c:1236 +#, fuzzy, c-format +msgid "Create db Object record %s failed. ERR=%s" +msgstr "fopen %s en erreur : ERR=%s\n" -#: src/dird/dird.c:865 +#: src/cats/mysql.c:152 src/cats/postgresql.c:198 src/cats/sqlite.c:154 #, c-format -msgid "\"TLS Certificate\" file not defined for Console \"%s\" in %s.\n" -msgstr "" +msgid "Unable to initialize DB lock. ERR=%s\n" +msgstr "Impossible d'initialiser le verrou sur la base. ERR=%s\n" -#: src/dird/dird.c:871 +#: src/cats/mysql.c:195 #, c-format -msgid "\"TLS Key\" file not defined for Console \"%s\" in %s.\n" +msgid "" +"Unable to connect to MySQL server.\n" +"Database=%s User=%s\n" +"MySQL connect failed either server not running or your authorization is " +"incorrect.\n" msgstr "" +"Impossible de se connecter au serveur MySQL.\n" +"Base=%s Utilisateur=%s\n" +"Le serveur n'est pas démarré ou bien votre password est invalide.\n" -#: src/dird/dird.c:878 +#: src/cats/mysql.c:359 src/cats/postgresql.c:442 src/cats/sqlite.c:374 +#: src/dird/fd_cmds.c:836 src/dird/fd_cmds.c:896 #, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Console \"%s\" in %s. At least one CA certificate store is required when " -"using \"TLS Verify Peer\".\n" +msgid "Attribute create error. %s" msgstr "" -#: src/dird/dird.c:895 src/dird/dird.c:935 src/filed/filed.c:382 +#: src/cats/mysql.c:381 src/cats/cats.c:121 src/cats/postgresql.c:494 +#: src/cats/postgresql.c:541 src/cats/sqlite.c:449 #, c-format -msgid "Failed to initialize TLS context for File daemon \"%s\" in %s.\n" +msgid "Query failed: %s: ERR=%s\n" msgstr "" -#: src/dird/dird.c:918 +#: src/cats/mysql.c:680 +msgid "A user name for MySQL must be supplied.\n" +msgstr "Un nom d'utilisateur MySQL doit être fourni.\n" + +#: src/cats/postgresql.c:169 #, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"File daemon \"%s\" in %s.\n" +msgid "Encoding error for database \"%s\". Wanted SQL_ASCII, got %s\n" msgstr "" -#: src/dird/dird.c:959 -#, c-format +#: src/cats/postgresql.c:234 +#, fuzzy, c-format msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Storage \"%s\" in %s.\n" +"Unable to connect to PostgreSQL server. Database=%s User=%s\n" +"Possible causes: SQL server not running; password incorrect; max_connections " +"exceeded.\n" msgstr "" +"Impossible de se connecter au serveur PostgreSQL.\n" +"Base=%s Utilisateur=%s\n" +"Le serveur n'est pas démarré ou bien votre password est invalide.\n" -#: src/dird/dird.c:975 src/stored/stored.c:394 -#, c-format -msgid "Failed to initialize TLS context for Storage \"%s\" in %s.\n" +#: src/cats/postgresql.c:338 +msgid "PQescapeStringConn returned non-zero.\n" msgstr "" -#: src/dird/dird.c:1014 src/dird/dird.c:1016 -#, c-format -msgid "Could not open Catalog \"%s\", database \"%s\".\n" +#: src/cats/postgresql.c:356 +msgid "PQescapeByteaConn returned NULL.\n" msgstr "" -"Impossible d'ouvrir le catalogue \"%s\", sur la base de données \"%s\".\n" -#: src/dird/dird.c:1019 src/tools/cats_test.c:377 +#: src/cats/postgresql.c:387 +msgid "PQunescapeByteaConn returned NULL.\n" +msgstr "" + +#: src/cats/postgresql.c:801 #, c-format -msgid "%s" -msgstr "%s" +msgid "error fetching currval: %s\n" +msgstr "" -#: src/dird/dird.c:1098 +#: src/cats/postgresql.c:992 #, fuzzy, c-format -msgid "Could not create storage record for %s\n" -msgstr "Impossible de trouver la ressource Storage \"%s\"\n" +msgid "error starting batch mode: %s" +msgstr "erreur en terminant le mode batch: %s\n" -#: src/dird/dird.c:1106 +#: src/cats/postgresql.c:1022 src/cats/postgresql.c:1029 #, fuzzy, c-format -msgid "Could not update storage record for %s\n" -msgstr "Impossible de trouver la ressource Storage \"%s\"\n" +msgid "error ending batch mode: %s" +msgstr "erreur en terminant le mode batch: %s\n" -#: src/dird/dird.c:1181 src/dird/migrate.c:1072 src/stored/stored.c:491 +#: src/cats/postgresql.c:1079 #, fuzzy, c-format -msgid "Could not compile regex pattern \"%s\" ERR=%s\n" -msgstr "Impossible d'ouvrir %s : ERR=%s\n" +msgid "error copying in batch mode: %s" +msgstr "erreur en terminant le mode batch: %s\n" -#: src/dird/inc_conf.c:312 -#, fuzzy, c-format -msgid "Expected a strip path positive integer, got:%s:" -msgstr "Attendait un entier positif, pas : %s\n" +#: src/cats/postgresql.c:1101 +msgid "A user name for PostgreSQL must be supplied.\n" +msgstr "Un nom d'utilisateur PostgreSQL doit être fourni.\n" -#: src/dird/inc_conf.c:332 +#: src/cats/sqlite.c:169 #, c-format -msgid "Expected a FileSet option keyword, got:%s:" -msgstr "Attendait une option de FileSet, eu : %s:" - -#: src/dird/inc_conf.c:365 -msgid "Old style Include/Exclude not supported\n" +msgid "Database %s does not exist, please create it.\n" msgstr "" -#: src/dird/inc_conf.c:393 src/dird/inc_conf.c:739 src/dird/dird_conf.c:2022 +#: src/cats/sqlite.c:191 #, c-format -msgid "Expecting keyword, got: %s\n" -msgstr "Attendait un mot clef, eu : %s\n" +msgid "Unable to open Database=%s. ERR=%s\n" +msgstr "" -#: src/dird/inc_conf.c:401 src/dird/inc_conf.c:745 src/dird/dird_conf.c:2028 -#: src/lib/parse_conf.c:976 -#, c-format -msgid "expected an equals, got: %s" -msgstr "attendait un égale, eu : %s" +#: src/cats/sqlite.c:192 +msgid "unknown" +msgstr "inconnu" -#: src/dird/inc_conf.c:411 src/dird/inc_conf.c:754 src/dird/dird_conf.c:2039 +#: src/cats/sql_delete.c:65 #, c-format -msgid "Keyword %s not permitted in this resource" +msgid "No pool record %s exists\n" msgstr "" -#: src/dird/inc_conf.c:464 +#: src/cats/sql_delete.c:70 #, c-format -msgid "Regex compile error. ERR=%s\n" +msgid "Expecting one pool record, got %d\n" msgstr "" -#: src/dird/inc_conf.c:485 +#: src/cats/sql_delete.c:76 #, c-format -msgid "Expected a regex string, got: %s\n" +msgid "Error fetching row %s\n" msgstr "" -#: src/dird/inc_conf.c:559 -#, c-format -msgid "Expected a wild-card string, got: %s\n" -msgstr "" +#: src/stored/job.c:190 +#, fuzzy +msgid "Client socket not open. Could not connect to Client.\n" +msgstr "Impossible de se connecter au Client.\n" -#: src/dird/inc_conf.c:582 -#, c-format -msgid "Expected an fstype string, got: %s\n" -msgstr "" +#: src/stored/job.c:205 src/stored/job.c:207 +#, fuzzy, c-format +msgid "Recv request to Client failed. ERR=%s\n" +msgstr "Demande de connexion échouée.\n" -#: src/dird/inc_conf.c:593 -msgid "ExcludeDirContaining directive not permitted in Exclude.\n" +#: src/stored/job.c:213 src/stored/job.c:214 +#, fuzzy, c-format +msgid "Bad Hello from Client: %s.\n" +msgstr "Début de purge des jobs du client \"%s\"\n" + +#: src/stored/job.c:228 src/stored/job.c:311 +msgid "Unable to authenticate File daemon\n" msgstr "" -#: src/dird/inc_conf.c:620 -#, c-format -msgid "Expected an drivetype string, got: %s\n" -msgstr "Attendait un type de lecteur, pas : %s\n" +#: src/stored/job.c:282 +#, fuzzy, c-format +msgid "FD connect failed: Job name not found: %s\n" +msgstr "Job non trouvé : %s\n" -#: src/dird/inc_conf.c:644 src/dird/inc_conf.c:687 +#: src/stored/job.c:291 #, c-format -msgid "Backslash found. Use forward slashes or quote the string.: %s\n" +msgid "Hey!!!! JobId %u Job %s already authenticated.\n" msgstr "" -#: src/dird/inc_conf.c:659 src/dird/inc_conf.c:702 -#, c-format -msgid "Expected a filename, got: %s" -msgstr "Attendait un nom de fichier, eu : %s" - -#: src/dird/inc_conf.c:676 -msgid "Plugin directive not permitted in Exclude\n" +#: src/stored/job.c:441 +msgid "In free_jcr(), but still attached to device!!!!\n" msgstr "" -#: src/dird/inc_conf.c:719 -msgid "Options section not permitted in Exclude\n" +#: src/stored/vbackup.c:67 +msgid "Read and write devices not properly initialized.\n" msgstr "" -#: src/dird/inc_conf.c:724 src/dird/dird_conf.c:2008 -#, c-format -msgid "Expecting open brace. Got %s" -msgstr "Attendait {, eu : %s" - -#: src/dird/inc_conf.c:779 +#: src/stored/vbackup.c:73 #, c-format -msgid "Expected a FileSet keyword, got: %s" -msgstr "Attendait le mot clef FileSet, eu : %s" +msgid "No Volume names found for %s.\n" +msgstr "" -#: src/dird/ua_query.c:73 src/findlib/create_file.c:288 -#: src/findlib/create_file.c:391 +#: src/stored/vbackup.c:114 src/stored/vbackup.c:248 src/stored/append.c:261 +#: src/stored/spool.c:262 #, c-format -msgid "Could not open %s: ERR=%s\n" -msgstr "Impossible d'ouvrir %s : ERR=%s\n" +msgid "Fatal append error on device %s: ERR=%s\n" +msgstr "" -#: src/dird/ua_query.c:78 -msgid "Available queries:\n" -msgstr "Requêtes disponibles :\n" +#: src/stored/vbackup.c:116 src/stored/append.c:263 +msgid "Set ok=FALSE after write_block_to_device.\n" +msgstr "" -#: src/dird/ua_query.c:85 -msgid "Choose a query" -msgstr "Choisissez une requête" +#: src/stored/vbackup.c:139 src/stored/append.c:287 src/stored/read.c:92 +#, fuzzy, c-format +msgid "Elapsed time=%02d:%02d:%02d, Transfer rate=%s Bytes/second\n" +msgstr "Temps d'écriture du job = %02d:%02d:%02d, Taux de transfert = %s o/s\n" -#: src/dird/ua_query.c:99 -msgid "Could not find query.\n" -msgstr "Impossible de trouver la requête.\n" +#: src/stored/append.c:49 +msgid "DCR is NULL!!!\n" +msgstr "" -#: src/dird/ua_query.c:117 -msgid "Too many prompts in query, max is 9.\n" +#: src/stored/append.c:55 +msgid "DEVICE is NULL!!!\n" msgstr "" -#: src/dird/ua_query.c:220 -#, c-format -msgid "Warning prompt %d missing.\n" +#: src/stored/append.c:66 +msgid "Unable to set network buffer size.\n" msgstr "" -#: src/dird/ua_query.c:265 -msgid "" -"Entering SQL query mode.\n" -"Terminate each query with a semicolon.\n" -"Terminate query mode with a blank line.\n" +#: src/stored/append.c:80 src/stored/append.c:90 src/stored/append.c:103 +#: src/stored/askdir.c:355 src/stored/askdir.c:356 +msgid "NULL Volume name. This shouldn't happen!!!\n" msgstr "" -#: src/dird/ua_query.c:268 src/dird/ua_query.c:284 -msgid "Enter SQL query: " -msgstr "Saisissez votre requête SQL : " +#: src/stored/append.c:96 src/stored/btape.c:2232 +#, c-format +msgid "Write session label failed. ERR=%s\n" +msgstr "Impossible d'écrire le label de session. ERR=%s\n" -#: src/dird/ua_query.c:286 -msgid "Add to SQL query: " +#: src/stored/append.c:109 +#, c-format +msgid "Network send error to FD. ERR=%s\n" msgstr "" -#: src/dird/ua_query.c:289 -msgid "End query mode.\n" +#: src/stored/append.c:148 +#, fuzzy, c-format +msgid "Error reading data header from FD. n=%d msglen=%d ERR=%s\n" msgstr "" +"Erreur pendant l'écriture des données vers le fichier de spool. ERR=%s\n" -#: src/dird/newvol.c:90 +#: src/stored/append.c:155 #, c-format -msgid "Illegal character in Volume name \"%s\"\n" -msgstr "Caractère interdit dans le nom du Volume \"%s\"\n" +msgid "Malformed data header from FD: %s\n" +msgstr "" -#: src/dird/newvol.c:104 +#: src/stored/append.c:174 #, c-format -msgid "Created new Volume \"%s\" in catalog.\n" -msgstr "Le Volume \"%s\" a été créé dans le catalogue.\n" +msgid "FI=%d from FD not positive or last_FI=%d\n" +msgstr "" -#: src/dird/newvol.c:131 +#: src/stored/append.c:222 #, fuzzy, c-format -msgid "SQL failed, but ignored. ERR=%s\n" -msgstr "fopen %s en erreur : ERR=%s\n" - -#: src/dird/newvol.c:141 -#, c-format -msgid "Wanted to create Volume \"%s\", but it already exists. Trying again.\n" -msgstr "Impossible de créer le volume \"%s\" car il existe déjà.\n" - -#: src/dird/newvol.c:150 -msgid "Too many failures. Giving up creating Volume name.\n" -msgstr "Trop d'erreurs. Abandon de la création du volume.\n" +msgid "Network error reading from FD. ERR=%s\n" +msgstr "Erreur dans l'exécution de la commande : %s. ERR=%s\n" -#: src/dird/expand.c:255 -#, c-format -msgid "Count not update counter %s: ERR=%s\n" +#: src/stored/append.c:251 src/stored/btape.c:2351 +#, fuzzy, c-format +msgid "Error writing end session label. ERR=%s\n" msgstr "" +"Erreur pendant l'écriture des données vers le fichier de spool. ERR=%s\n" -#: src/dird/expand.c:427 +#: src/stored/append.c:324 #, c-format -msgid "Cannot create var context: ERR=%s\n" +msgid "Error updating file attributes. ERR=%s\n" msgstr "" -#: src/dird/expand.c:432 +#: src/stored/mount.c:87 +#, fuzzy, c-format +msgid "Too many errors trying to mount %s device %s.\n" +msgstr "Le volume \"%s\" n'est pas dans le device %s.\n" + +#: src/stored/mount.c:95 #, c-format -msgid "Cannot set var callback: ERR=%s\n" -msgstr "" +msgid "Job %d canceled.\n" +msgstr "Le job %d est annulé.\n" + +#: src/stored/mount.c:211 +#, fuzzy, c-format +msgid "Open of %s device %s Volume \"%s\" failed: ERR=%s\n" +msgstr "Impossible de supprimer le volume \"%s\". ERR=%s" -#: src/dird/expand.c:438 +#: src/stored/mount.c:276 #, c-format -msgid "Cannot set var operate: ERR=%s\n" +msgid "Volume \"%s\" previously written, moving to end of data.\n" +msgstr "Le volume \"%s\" contient des données, re-positionnement à la fin.\n" + +#: src/stored/mount.c:282 +#, fuzzy, c-format +msgid "Unable to position to end of data on %s device %s: ERR=%s\n" msgstr "" +"Impossible de se positionner à la fin du média sur le device %s : ERR=%s\n" + +#: src/stored/mount.c:420 src/stored/mount.c:781 +#, fuzzy, c-format +msgid "Volume \"%s\" not on %s device %s.\n" +msgstr "Le volume \"%s\" n'est pas dans le device %s.\n" -#: src/dird/expand.c:444 src/dird/expand.c:459 +#: src/stored/mount.c:453 #, c-format -msgid "Cannot unescape string: ERR=%s\n" +msgid "" +"Director wanted Volume \"%s\".\n" +" Current Volume \"%s\" not acceptable because:\n" +" %s" msgstr "" +"Le director voulait utiliser le volume \"%s\".\n" +" Le volume courant \"%s\" n'est pas utilisable car :\n" +" %s" + +#: src/stored/mount.c:473 src/stored/label.c:232 src/stored/label.c:383 +#, fuzzy, c-format +msgid "Could not reserve volume %s on %s device %s\n" +msgstr "Impossible de trouver le prochain volume pour le Job %s.\n" -#: src/dird/expand.c:452 +#: src/stored/mount.c:631 #, c-format -msgid "Cannot expand expression \"%s\": ERR=%s\n" +msgid "Ready to append to end of Volume \"%s\" part=%d size=%s\n" msgstr "" +"Prêt à ajouter des données à la fin du volume \"%s\" part=%d size=%s\n" +"\n" -#: src/dird/expand.c:470 -#, c-format -msgid "Cannot destroy var context: ERR=%s\n" +#: src/stored/mount.c:635 +#, fuzzy, c-format +msgid "" +"Bacula cannot write on DVD Volume \"%s\" because: The sizes do not match! " +"Volume=%s Catalog=%s\n" msgstr "" +"Impossible d'écrire sur le volume \"%s\" car :\n" +"Les tailles ne correspondent pas. Volume=%s Catalogue=%s\n" -#: src/dird/recycle.c:69 +#: src/stored/mount.c:649 #, c-format -msgid "Recycled volume \"%s\"\n" -msgstr "Volume recyclé \"%s\"\n" +msgid "Ready to append to end of Volume \"%s\" at file=%d.\n" +msgstr "Prêt à ajouter des données à la fin du volume \"%s\" file=%d.\n" -#: src/dird/ua_purge.c:90 -#, fuzzy +#: src/stored/mount.c:652 +#, fuzzy, c-format msgid "" -"\n" -"This command can be DANGEROUS!!!\n" -"\n" -"It purges (deletes) all Files from a Job,\n" -"JobId, Client or Volume; or it purges (deletes)\n" -"all Jobs from a Client or Volume without regard\n" -"to retention periods. Normally you should use the\n" -"PRUNE command, which respects retention periods.\n" +"For Volume \"%s\":\n" +"The number of files mismatch! Volume=%u Catalog=%u\n" +"Correcting Catalog\n" msgstr "" -"\n" -"Cette commande peut être DANGEUREUSE !\n" -"\n" -"Elle supprime tous les enregistrements des fichiers d'un job, \n" -"d'un client ou d'un volume ; ou bien elle supprime tous les jobs\n" -"d'un client ou d'un volume sans s'occuper des périodes de rétention.\n" -"\n" -"Normalement vous devez utiliser la commande PRUNE qui respecte les périodes\n" -"de rétention.\n" +"Impossible d'écrire sur le volume \"%s\" \n" +"car le nombre de fichiers ne correspond pas. Volume=%u Catalogue=%u\n" -#: src/dird/ua_purge.c:157 -msgid "Choose item to purge" -msgstr "Choisissez l'élément à purger" +#: src/stored/mount.c:659 src/stored/mount.c:694 +#, fuzzy +msgid "Error updating Catalog\n" +msgstr "Impossible d'ouvrir le fichier de données %s.\n" -#: src/dird/ua_purge.c:204 -#, c-format -msgid "Begin purging files for Client \"%s\"\n" -msgstr "Début de la purge des fichiers du client \"%s\"\n" +#: src/stored/mount.c:664 +#, fuzzy, c-format +msgid "" +"Bacula cannot write on tape Volume \"%s\" because:\n" +"The number of files mismatch! Volume=%u Catalog=%u\n" +msgstr "" +"Impossible d'écrire sur le volume \"%s\" \n" +"car le nombre de fichiers ne correspond pas. Volume=%u Catalogue=%u\n" -#: src/dird/ua_purge.c:213 src/dird/ua_purge.c:263 -#, c-format -msgid "No Files found for client %s to purge from %s catalog.\n" -msgstr "Pas de fichier à purger pour le client \"%s\" dans le catalogue %s.\n" +#: src/stored/mount.c:679 +#, fuzzy, c-format +msgid "Ready to append to end of Volume \"%s\" size=%s\n" +msgstr "" +"Prêt à ajouter des données à la fin du volume \"%s\" part=%d size=%s\n" +"\n" -#: src/dird/ua_purge.c:216 -#, c-format -msgid "Files for %d Jobs for client \"%s\" purged from %s catalog.\n" -msgstr "Fichiers de %d jobs du client \"%s\" purgé du catalogue %s.\n" +#: src/stored/mount.c:684 +#, fuzzy, c-format +msgid "" +"For Volume \"%s\":\n" +" The sizes do not match! Volume=%s Catalog=%s\n" +" Correcting Catalog\n" +msgstr "" +"Impossible d'écrire sur le volume \"%s\" car :\n" +"Les tailles ne correspondent pas. Volume=%s Catalogue=%s\n" -#: src/dird/ua_purge.c:254 -#, c-format -msgid "Begin purging jobs from Client \"%s\"\n" -msgstr "Début de purge des jobs du client \"%s\"\n" +#: src/stored/mount.c:699 +#, fuzzy, c-format +msgid "" +"Bacula cannot write on disk Volume \"%s\" because: The sizes do not match! " +"Volume=%s Catalog=%s\n" +msgstr "" +"Impossible d'écrire sur le volume \"%s\" car :\n" +"Les tailles ne correspondent pas. Volume=%s Catalogue=%s\n" + +#: src/stored/mount.c:765 +#, fuzzy, c-format +msgid "Labeled new Volume \"%s\" on %s device %s.\n" +msgstr "Le nouveau volume \"%s\" a été labélisé sur le device %s.\n" + +#: src/stored/mount.c:776 +#, fuzzy, c-format +msgid "%s device %s not configured to autolabel Volumes.\n" +msgstr "" +"Attention, le device %s n'est pas configuré pour labéliser automatiquement " +"les volumes.\n" -#: src/dird/ua_purge.c:266 +#: src/stored/mount.c:798 #, c-format -msgid "%d Jobs for client %s purged from %s catalog.\n" -msgstr "%d jobs du client \"%s\" purgé du catalogue %s.\n" +msgid "Marking Volume \"%s\" in Error in Catalog.\n" +msgstr "Le volume \"%s\" est marqué en Erreur dans le catalogue.\n" -#: src/dird/ua_purge.c:464 +#: src/stored/mount.c:815 #, c-format msgid "" -"\n" -"Volume \"%s\" has VolStatus \"%s\" and cannot be purged.\n" -"The VolStatus must be: Append, Full, Used, or Error to be purged.\n" +"Autochanger Volume \"%s\" not found in slot %d.\n" +" Setting InChanger to zero in catalog.\n" msgstr "" -"\n" -"Le volume \"%s\" est en état \"%s\" et il ne peut pas être purgé.\n" -"Son statut doit être : Append, Full, Used ou Error pour être purgé.\n" -#: src/dird/ua_purge.c:492 -#, c-format -msgid "%d File%s on Volume \"%s\" purged from catalog.\n" -msgstr "%d fichier%s du volume \"%s\" purgé du catalogue.\n" +#: src/stored/mount.c:834 +msgid "Hey!!!!! WroteVol non-zero !!!!!\n" +msgstr "" -#: src/dird/ua_purge.c:541 -#, c-format +#: src/stored/mount.c:884 +#, fuzzy, c-format msgid "" -"There are no more Jobs associated with Volume \"%s\". Marking it purged.\n" +"Invalid tape position on volume \"%s\" on device %s. Expected %d, got %d\n" msgstr "" -"Il n'y a plus de job associé avec le volume \"%s\". Il est marqué purgé.\n" +"Fin du volume \"%s\" à %u:%u sur le device %s. Ecriture de %u octets, eu " +"%d.\n" -#: src/dird/ua_purge.c:556 src/dird/ua_label.c:774 -#, c-format -msgid "Connecting to Storage daemon %s at %s:%d ...\n" -msgstr "Connexion au Storage Daemon %s (%s:%d)...\n" +#: src/stored/mount.c:925 +#, fuzzy, c-format +msgid "Cannot open %s Dev=%s, Vol=%s for reading.\n" +msgstr "Impossible d'ouvrir le fichier %s pour lecture. ERR=%s\n" -#: src/dird/ua_purge.c:559 src/dird/ua_dotcmds.c:625 src/dird/ua_cmds.c:771 -#: src/dird/ua_cmds.c:1577 src/dird/ua_label.c:777 src/dird/job.c:448 -msgid "Failed to connect to Storage daemon.\n" -msgstr "Impossible de se connecter au Storage daemon.\n" +#: src/stored/askdir.c:168 +msgid "Network error on bnet_recv in req_vol_info.\n" +msgstr "" -#: src/dird/ua_purge.c:623 -#, fuzzy -msgid "Can't update volume size in the catalog\n" -msgstr "Le Volume \"%s\" a été créé dans le catalogue.\n" +#: src/stored/askdir.c:191 +#, c-format +msgid "Error getting Volume info: %s" +msgstr "Erreur pendant la récupération des informations sur un Volume : %s" -#: src/dird/ua_purge.c:625 +#: src/stored/askdir.c:396 #, c-format -msgid "The volume \"%s\" has been truncated\n" +msgid "Didn't get vol info vol=%s: ERR=%s" msgstr "" -#: src/dird/ua_purge.c:627 -#, fuzzy, c-format -msgid "Unable to truncate volume \"%s\"\n" -msgstr "Impossible d'écrire le marqueur EOF. ERR=%s\n" - -#: src/dird/ua_purge.c:713 -#, fuzzy, c-format -msgid "No Volumes found to perform %s action.\n" -msgstr "Pas de volume à labéliser ou pas de codebar.\n" +#: src/stored/askdir.c:461 +#, c-format +msgid "Error creating JobMedia record: ERR=%s\n" +msgstr "" -#: src/dird/ua_purge.c:786 +#: src/stored/askdir.c:468 #, c-format -msgid "Unable move recycled Volume in full Pool \"%s\" MaxVols=%d\n" +msgid "Error creating JobMedia record: %s\n" msgstr "" -"Impossible de déplacer le volume recyclé, le Pool \"%s\" est plein. MaxVols=" -"%d\n" -#: src/dird/ua_purge.c:800 +#: src/stored/askdir.c:556 #, c-format -msgid "All records pruned from Volume \"%s\"; marking it \"Purged\"\n" +msgid "Job %s canceled while waiting for mount on Storage Device \"%s\".\n" msgstr "" -"Il n'y a pas de job associé avec le volume \"%s\". Il est marqué comme " -"Purged.\n" +"Le job %s a été annulé alors qu'il attendait un montage sur le Storage " +"Device \"%s\".\n" + +#: src/stored/askdir.c:568 +#, fuzzy, c-format +msgid "" +"Job %s is waiting. Cannot find any appendable volumes.\n" +"Please use the \"label\" command to create a new Volume for:\n" +" Storage: %s\n" +" Pool: %s\n" +" Media type: %s\n" +msgstr "" +"Le Job %s est en attente. Bacula n'a pas pu trouver de media disponible.\n" +"Merci de créer un nouveau volume via la commande « label » pour :\n" +" Storage : %s\n" +" Type du Media : %s\n" +" Pool : %s\n" -#: src/dird/ua_purge.c:805 +#: src/stored/askdir.c:593 src/stored/askdir.c:694 #, c-format -msgid "Cannot purge Volume with VolStatus=%s\n" -msgstr "Impossible de purger un volume dans l'état (VolStatus) %s\n" +msgid "Max time exceeded waiting to mount Storage Device %s for Job %s\n" +msgstr "" -#: src/dird/vbackup.c:76 src/dird/migrate.c:114 -msgid "Could not get or create a Pool record.\n" -msgstr "Impossible de récupérer ou de créer un Pool dans le catalogue.\n" +#: src/stored/askdir.c:603 +msgid "pthread error in mount_next_volume.\n" +msgstr "" -#: src/dird/vbackup.c:89 src/dird/migrate.c:227 src/dird/migrate.c:228 -#: src/dird/backup.c:93 src/dird/job.c:185 src/dird/job.c:871 -#: src/dird/job.c:1126 src/dird/job.c:1172 src/dird/job.c:1186 -msgid "Pool resource" -msgstr "Ressource Pool" +#: src/stored/askdir.c:636 +msgid "Cannot request another volume: no volume name given.\n" +msgstr "" -#: src/dird/vbackup.c:116 src/dird/migrate.c:285 -#, fuzzy -msgid "Job Pool's NextPool resource" -msgstr "Sélectionnez le Pool" +#: src/stored/askdir.c:642 +#, c-format +msgid "Job %s canceled while waiting for mount on Storage Device %s.\n" +msgstr "" +"Le Job %s a été annulé pendant qu'il attendait le montage sur le Storage " +"Device %s.\n" -#: src/dird/vbackup.c:147 +#: src/stored/askdir.c:659 #, fuzzy, c-format -msgid "Start Virtual Backup JobId %s, Job=%s\n" -msgstr "Démarrage du backup JobId %s, Job=%s\n" - -#: src/dird/vbackup.c:151 msgid "" -"This Job is not an Accurate backup so is not equivalent to a Full backup.\n" +"%sPlease mount append Volume \"%s\" or label a new one for:\n" +" Job: %s\n" +" Storage: %s\n" +" Pool: %s\n" +" Media type: %s\n" msgstr "" +"Le Job %s est en attente. Bacula n'a pas pu trouver de media disponible.\n" +"Merci de créer un nouveau volume via la commande « label » pour :\n" +" Storage : %s\n" +" Type du Media : %s\n" +" Pool : %s\n" -#: src/dird/vbackup.c:158 -#, fuzzy -msgid "No previous Jobs found.\n" -msgstr "Aucun Job trouvé pour la migration.\n" - -#: src/dird/vbackup.c:180 +#: src/stored/askdir.c:665 #, fuzzy, c-format -msgid "Error getting Job record for previous Job: ERR=%s" -msgstr "Impossible de récupérer le Job du JobId=%s : ERR=%s\n" +msgid "" +"%sPlease mount read Volume \"%s\" for:\n" +" Job: %s\n" +" Storage: %s\n" +" Pool: %s\n" +" Media type: %s\n" +msgstr "" +"Le Job %s est en attente. Bacula n'a pas pu trouver de media disponible.\n" +"Merci de créer un nouveau volume via la commande « label » pour :\n" +" Storage : %s\n" +" Type du Media : %s\n" +" Pool : %s\n" -#: src/dird/vbackup.c:186 src/dird/migrate.c:131 -#, fuzzy -msgid "Could not get or create the FileSet record.\n" -msgstr "Impossible de créer la structure BSOCK cliente.\n" +#: src/stored/askdir.c:672 +msgid "" +"\n" +"\n" +"WARNING: device is full! Please add more disk space then ...\n" +"\n" +msgstr "" + +#: src/stored/askdir.c:704 +msgid "pthread error in mount_volume\n" +msgstr "" -#: src/dird/vbackup.c:313 src/dird/backup.c:635 +#: src/stored/stored.c:75 #, fuzzy, c-format -msgid "Error getting Client record for Job report: ERR=%s" -msgstr "Impossible de mettre à jour les informations du Volume : ERR=%s" +msgid "" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: bacula-sd [options] [-c config_file] [config_file]\n" +" -c use as configuration file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -f run in foreground (for debugging)\n" +" -g set groupid to group\n" +" -m print kaboom output (for debugging)\n" +" -p proceed despite I/O errors\n" +" -s no signals (for debugging)\n" +" -t test - read config and exit\n" +" -u userid to \n" +" -v verbose user messages\n" +" -? print this message.\n" +"\n" +msgstr "" +"\n" +"Version : %s (%s)\n" +"\n" +"Usage : stored [options] [-c config_file] [config_file]\n" +" -c utilise fich comme fichier de configuration\n" +" -dnn positionne le niveau de debug à nn\n" +" -dt affiche un timestamp devant chaque ligne de debug\n" +" -f reste en avant-plan (pour debugger)\n" +" -g groupid\n" +" -p continue même en cas d'erreurs E/S\n" +" -s pas de signaux\n" +" -t test - lit seulement le fichier de configuration\n" +" -u userid\n" +" -v affiche les messages utilisateurs\n" +" -? affiche ce message.\n" +"\n" -#: src/dird/vbackup.c:319 src/dird/migrate.c:1257 src/dird/backup.c:641 +#: src/stored/stored.c:124 src/stored/btape.c:167 #, c-format -msgid "Error getting Media record for Volume \"%s\": ERR=%s" +msgid "Tape block size (%d) not multiple of system size (%d)\n" msgstr "" -#: src/dird/vbackup.c:329 src/dird/backup.c:651 src/dird/backup.c:660 -#: src/stored/bscan.c:1214 -msgid "Backup OK -- with warnings" -msgstr "Backup OK -- avec des erreurs" +#: src/stored/stored.c:128 src/stored/btape.c:171 +#, c-format +msgid "Tape block size (%d) is not a power of 2\n" +msgstr "" -#: src/dird/vbackup.c:331 src/dird/backup.c:653 src/stored/bscan.c:1211 -msgid "Backup OK" -msgstr "Backup OK" +#: src/stored/stored.c:256 +msgid "Volume Session Time is ZERO!\n" +msgstr "" -#: src/dird/vbackup.c:336 src/dird/backup.c:664 src/stored/bscan.c:1218 -msgid "*** Backup Error ***" -msgstr "*** Backup en erreur ***" +#: src/stored/stored.c:265 +#, c-format +msgid "Unable to create thread. ERR=%s\n" +msgstr "" -#: src/dird/vbackup.c:346 src/dird/backup.c:674 src/stored/bscan.c:1221 -msgid "Backup Canceled" -msgstr "Backup annulé" +#: src/stored/stored.c:298 src/stored/butil.c:76 +#, c-format +msgid "No Storage resource defined in %s. Cannot continue.\n" +msgstr "" -#: src/dird/vbackup.c:393 -#, fuzzy, c-format -msgid "" -"%s %s %s (%s):\n" -" Build OS: %s %s %s\n" -" JobId: %d\n" -" Job: %s\n" -" Backup Level: Virtual Full\n" -" Client: \"%s\" %s\n" -" FileSet: \"%s\" %s\n" -" Pool: \"%s\" (From %s)\n" -" Catalog: \"%s\" (From %s)\n" -" Storage: \"%s\" (From %s)\n" -" Scheduled time: %s\n" -" Start time: %s\n" -" End time: %s\n" -" Elapsed time: %s\n" -" Priority: %d\n" -" SD Files Written: %s\n" -" SD Bytes Written: %s (%sB)\n" -" Rate: %.1f KB/s\n" -" Volume name(s): %s\n" -" Volume Session Id: %d\n" -" Volume Session Time: %d\n" -" Last Volume Bytes: %s (%sB)\n" -" SD Errors: %d\n" -" SD termination status: %s\n" -" Termination: %s\n" -"\n" +#: src/stored/stored.c:304 +#, c-format +msgid "Only one Storage resource permitted in %s\n" msgstr "" -"Bacula %s %s (%s): %s\n" -" Build OS : %s %s %s\n" -" JobId : %d\n" -" Job : %s\n" -" Niveau de backup : %s%s\n" -" Client : \"%s\" %s\n" -" FileSet : \"%s\" %s\n" -" Pool : \"%s\" (Depuis %s)\n" -" Storage : \"%s\" (Depuis %s)\n" -" Date prévue : %s\n" -" Date de début : %s\n" -" Date de fin : %s\n" -" Temps écoulé : %s\n" -" Priorité : %d\n" -" Fichiers écrits FD : %s\n" -" Fichiers écrits SD : %s\n" -" Octets écrits FD : %s (%so)\n" -" Octets écrits SD : %s (%so)\n" -" Débit : %.1f Ko/s\n" -" Compression logicielle : %s\n" -" Nom des Volumes : %s\n" -" Volume Session Id : %d\n" -" Volume Session date : %d\n" -" Taille du volume : %s (%so)\n" -" Erreurs FD non fatales : %d\n" -" Erreurs du SD : %d\n" -" Statut de fin du FD : %s\n" -" Statut de fin du SD : %s\n" -" Statut de fin : %s\n" - -#: src/dird/ua_output.c:69 src/dird/ua_output.c:93 -msgid "ON or OFF keyword missing.\n" -msgstr "Mot clef ON ou OFF manquant.\n" - -#: src/dird/ua_output.c:113 -#, fuzzy -msgid "Disabled Jobs:\n" -msgstr "est bloqué" - -#: src/dird/ua_output.c:119 -#, fuzzy -msgid "No disabled Jobs.\n" -msgstr "Pas de job programmé.\n" - -#: src/dird/ua_output.c:163 -#, fuzzy -msgid "disabled" -msgstr "est bloqué" -#: src/dird/ua_output.c:211 -msgid "Keywords for the show command are:\n" +#: src/stored/stored.c:309 +#, c-format +msgid "No Director resource defined in %s. Cannot continue.\n" msgstr "" -#: src/dird/ua_output.c:217 +#: src/stored/stored.c:314 #, c-format -msgid "%s resource %s not found.\n" -msgstr "%s ressource %s introuvable.\n" +msgid "No Device resource defined in %s. Cannot continue.\n" +msgstr "" -#: src/dird/ua_output.c:220 +#: src/stored/stored.c:322 #, c-format -msgid "Resource %s not found\n" -msgstr "Ressource %s introuvable\n" - -#: src/dird/ua_output.c:290 -msgid "Hey! DB is NULL\n" +msgid "No Messages resource defined in %s. Cannot continue.\n" msgstr "" -#: src/dird/ua_output.c:447 +#: src/stored/stored.c:329 src/stored/bscan.c:256 #, c-format -msgid "Jobid %d used %d Volume(s): %s\n" -msgstr "JobId %d a utilisé %d volume(s) : %s\n" - -#: src/dird/ua_output.c:465 -msgid "No Pool specified.\n" -msgstr "Pas de Pool spécifié.\n" +msgid "No Working Directory defined in %s. Cannot continue.\n" +msgstr "" -#: src/dird/ua_output.c:486 +#: src/stored/stored.c:351 #, c-format -msgid "Pool: %s\n" -msgstr "Pool : %s\n" - -#: src/dird/ua_output.c:502 -msgid "Ignoring invalid value for days. Max is 50.\n" +msgid "\"TLS Certificate\" file not defined for Storage \"%s\" in %s.\n" msgstr "" -#: src/dird/ua_output.c:524 +#: src/stored/stored.c:357 #, c-format -msgid "Unknown list keyword: %s\n" +msgid "\"TLS Key\" file not defined for Storage \"%s\" in %s.\n" msgstr "" -#: src/dird/ua_output.c:549 +#: src/stored/stored.c:363 #, c-format -msgid "%s is not a job name.\n" -msgstr "%s n'est pas un nom de job.\n" - -#: src/dird/ua_output.c:563 -#, fuzzy, c-format -msgid "Could not find Pool for Job %s\n" -msgstr "Impossible d'ouvrir le device %s\n" - -#: src/dird/ua_output.c:576 -#, fuzzy, c-format -msgid "Could not find next Volume for Job %s (Pool=%s, Level=%s).\n" -msgstr "Impossible de trouver le prochain Volume pour le Job %s (%s, %s).\n" - -#: src/dird/ua_output.c:580 -#, fuzzy, c-format msgid "" -"The next Volume to be used by Job \"%s\" (Pool=%s, Level=%s) will be %s\n" -msgstr "Le prochain Volume utilisé par le Job \"%s\" (%s, %s) sera %s\n" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Storage \"%s\" in %s. At least one CA certificate store is required when " +"using \"TLS Verify Peer\".\n" +msgstr "" -#: src/dird/ua_output.c:593 +#: src/stored/stored.c:382 src/dird/dird.c:932 #, c-format -msgid "Could not find next Volume for Job %s.\n" -msgstr "Impossible de trouver le prochain volume pour le Job %s.\n" +msgid "Failed to initialize TLS context for Storage \"%s\" in %s.\n" +msgstr "" -#: src/dird/ua_output.c:720 src/dird/job.c:133 src/tools/cats_test.c:375 +#: src/stored/stored.c:398 src/dird/dird.c:615 src/filed/filed.c:576 #, c-format -msgid "Could not open database \"%s\".\n" -msgstr "Impossible d'ouvrir la base de données \"%s\".\n" +msgid "\"TLS Certificate\" file not defined for Director \"%s\" in %s.\n" +msgstr "" -#: src/dird/ua_output.c:733 +#: src/stored/stored.c:404 src/dird/dird.c:621 src/filed/filed.c:582 #, c-format -msgid "Pool %s not in database. %s" -msgstr "Pool %s introuvable en base. %s" +msgid "\"TLS Key\" file not defined for Director \"%s\" in %s.\n" +msgstr "" -#: src/dird/ua_output.c:741 +#: src/stored/stored.c:410 src/dird/dird.c:628 src/filed/filed.c:588 #, c-format -msgid "Pool %s created in database.\n" -msgstr "Pool %s créé en base.\n" - -#: src/dird/ua_output.c:794 -msgid "You have no messages.\n" -msgstr "Vous n'avez pas de messages.\n" - -#: src/dird/ua_output.c:874 -msgid "Message too long to display.\n" +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Director \"%s\" in %s. At least one CA certificate store is required when " +"using \"TLS Verify Peer\".\n" msgstr "" -#: src/dird/ua_dotcmds.c:155 src/dird/ua_cmds.c:236 +#: src/stored/stored.c:429 src/dird/dird.c:647 src/filed/filed.c:607 #, c-format -msgid "Can't use %s command in a runscript" +msgid "Failed to initialize TLS context for Director \"%s\" in %s.\n" msgstr "" -#: src/dird/ua_dotcmds.c:175 -msgid ": is an invalid command.\n" -msgstr ": est une commande invalide.\n" +#: src/stored/stored.c:479 src/dird/mac_sql.c:547 src/dird/dird.c:1138 +#, fuzzy, c-format +msgid "Could not compile regex pattern \"%s\" ERR=%s\n" +msgstr "Impossible d'ouvrir %s : ERR=%s\n" -#: src/dird/ua_dotcmds.c:553 src/dird/ua_restore.c:780 -#: src/dird/ua_restore.c:823 +#: src/stored/stored.c:548 src/stored/dircmd.c:204 src/dird/job.c:101 +#: src/dird/jobq.c:208 src/filed/job.c:257 #, c-format -msgid "Unable to get Job record for JobId=%s: ERR=%s\n" -msgstr "Impossible de récupérer le Job du JobId=%s : ERR=%s\n" +msgid "Unable to init job cond variable: ERR=%s\n" +msgstr "" -#: src/dird/ua_dotcmds.c:619 src/dird/ua_cmds.c:765 src/dird/ua_cmds.c:1566 -#: src/dird/ua_status.c:352 src/dird/job.c:147 src/dird/job.c:153 -#: src/dird/job.c:1160 src/dird/job.c:1164 -msgid "unknown source" -msgstr "source inconnue" +#: src/stored/stored.c:556 +#, c-format +msgid "Could not initialize %s\n" +msgstr "Impossible d'initialiser %s\n" -#: src/dird/ua_dotcmds.c:622 src/dird/ua_cmds.c:768 src/dird/ua_status.c:355 +#: src/stored/stored.c:570 #, c-format -msgid "Connecting to Storage daemon %s at %s:%d\n" -msgstr "Connexion au Storage Daemon %s (%s:%d)\n" +msgid "Could not open device %s\n" +msgstr "Impossible d'ouvrir le device %s\n" -#: src/dird/ua_dotcmds.c:628 src/dird/ua_cmds.c:774 src/dird/ua_status.c:366 -msgid "Connected to storage daemon\n" -msgstr "Connecté au Storage Daemon\n" +#: src/stored/stored.c:584 +#, c-format +msgid "Could not mount device %s\n" +msgstr "Impossible de monter le device %s\n" -#: src/dird/ua_dotcmds.c:648 src/dird/ua_cmds.c:803 src/dird/ua_cmds.c:1208 -#: src/dird/ua_status.c:397 +#: src/stored/btape.c:174 #, c-format -msgid "Connecting to Client %s at %s:%d\n" -msgstr "Connexion au client %s (%s:%d)\n" +msgid "" +"\n" +"\n" +"!!!! Warning large disk addressing disabled. boffset_t=%d should be 8 or " +"more !!!!!\n" +"\n" +"\n" +msgstr "" -#: src/dird/ua_dotcmds.c:651 src/dird/ua_cmds.c:806 src/dird/ua_cmds.c:1211 -msgid "Failed to connect to Client.\n" -msgstr "Impossible de se connecter au Client.\n" +#: src/stored/btape.c:181 +#, c-format +msgid "32 bit printf/scanf problem. i=%d x32=%u y32=%u\n" +msgstr "" -#: src/dird/ua_dotcmds.c:694 src/dird/ua_dotcmds.c:788 -#, fuzzy, c-format -msgid "Unknown command: %s\n" -msgstr "Erreur inconnue." +#: src/stored/btape.c:190 +msgid "64 bit printf/scanf problem. i=%d x64=%" +msgstr "" -#: src/dird/ua_dotcmds.c:732 src/dird/ua_cmds.c:993 -msgid "Available daemons are: \n" -msgstr "Les démons disponibles sont :\n" +#: src/stored/btape.c:195 +#, c-format +msgid "Tape block granularity is %d bytes.\n" +msgstr "" -#: src/dird/ua_dotcmds.c:733 src/dird/ua_cmds.c:994 -msgid "Director" -msgstr "Director" +#: src/stored/btape.c:270 +msgid "No archive name specified.\n" +msgstr "" -#: src/dird/ua_dotcmds.c:736 -msgid "Select daemon type to make die" -msgstr "Sélectionnez le composant a tuer" +#: src/stored/btape.c:274 +msgid "Improper number of arguments specified.\n" +msgstr "" -#: src/dird/ua_dotcmds.c:762 -msgid "The Director will generate a deadlock.\n" +#: src/stored/btape.c:288 +msgid "btape does not work with DVD storage.\n" msgstr "" -#: src/dird/ua_dotcmds.c:766 -msgid "The Director will segment fault.\n" +#: src/stored/btape.c:293 +msgid "btape only works with tape storage.\n" msgstr "" -#: src/dird/ua_dotcmds.c:955 -msgid "Access to specified Client or FileSet not allowed.\n" +#: src/stored/btape.c:377 +#, c-format +msgid "Total Volume bytes=%sB. Total Write rate = %sB/s\n" msgstr "" -#: src/dird/ua_dotcmds.c:960 src/dird/ua_dotcmds.c:1004 -#: src/dird/ua_restore.c:941 src/dird/ua_restore.c:969 -#: src/dird/ua_restore.c:990 +#: src/stored/btape.c:403 #, c-format -msgid "Query failed: %s. ERR=%s\n" +msgid "Volume bytes=%sB. Write rate = %sB/s\n" msgstr "" -#: src/dird/ua_dotcmds.c:999 -#, fuzzy -msgid "query keyword not found.\n" -msgstr "%s ressource %s introuvable.\n" +#: src/stored/btape.c:467 src/stored/device.c:303 src/stored/bcopy.c:194 +#, c-format +msgid "dev open failed: %s\n" +msgstr "" -#: src/dird/ua_dotcmds.c:1026 -#, fuzzy, c-format -msgid "List MediaType failed: ERR=%s\n" -msgstr "fopen %s en erreur : ERR=%s\n" +#: src/stored/btape.c:471 +#, c-format +msgid "open device %s: OK\n" +msgstr "" -#: src/dird/ua_dotcmds.c:1040 -#, fuzzy, c-format -msgid "List Media failed: ERR=%s\n" -msgstr "fopen %s en erreur : ERR=%s\n" +#: src/stored/btape.c:494 +msgid "Enter Volume Name: " +msgstr "Saisissez un nom de Volume : " -#: src/dird/ua_dotcmds.c:1054 -#, fuzzy, c-format -msgid "List Location failed: ERR=%s\n" +#: src/stored/btape.c:501 +#, c-format +msgid "Device open failed. ERR=%s\n" msgstr "Erreur sur l'ouverture du périphérique. ERR=%s\n" -#: src/dird/next_vol.c:166 +#: src/stored/btape.c:506 #, c-format -msgid "Purging oldest volume \"%s\"\n" -msgstr "Purge du plus ancien volume \"%s\"\n" +msgid "Wrote Volume label for volume \"%s\".\n" +msgstr "" -#: src/dird/next_vol.c:172 -#, c-format -msgid "Pruning oldest volume \"%s\"\n" -msgstr "Prunning du plus ancien volume \"%s\"\n" +#: src/stored/btape.c:520 +msgid "Volume has no label.\n" +msgstr "Le Volume n'a pas de label.\n" -#: src/dird/next_vol.c:191 -msgid "We seem to be looping trying to find the next volume. I give up.\n" +#: src/stored/btape.c:523 +msgid "Volume label read correctly.\n" +msgstr "" + +#: src/stored/btape.c:526 +#, c-format +msgid "I/O error on device: ERR=%s" msgstr "" -#: src/dird/next_vol.c:218 +#: src/stored/btape.c:529 #, fuzzy, c-format -msgid "Max Volume bytes=%s exceeded. Marking Volume \"%s\" as Full.\n" +msgid "Volume type error: ERR=%s\n" +msgstr "erreur de fermeture : ERR=%s\n" + +#: src/stored/btape.c:532 +msgid "Volume name error\n" msgstr "" -"Nombre maximum de job sur le volume atteind. Marquage du volume \"%s\" comme " -"Used.\n" -#: src/dird/next_vol.c:226 +#: src/stored/btape.c:535 #, c-format -msgid "Volume used once. Marking Volume \"%s\" as Used.\n" -msgstr "Volume utilisé une fois. Marquage du volume \"%s\" comme Used.\n" +msgid "Error creating label. ERR=%s" +msgstr "" -#: src/dird/next_vol.c:233 -#, fuzzy, c-format -msgid "Max Volume jobs=%s exceeded. Marking Volume \"%s\" as Used.\n" +#: src/stored/btape.c:538 +msgid "Volume version error.\n" msgstr "" -"Nombre maximum de job sur le volume atteind. Marquage du volume \"%s\" comme " -"Used.\n" -#: src/dird/next_vol.c:243 -#, fuzzy, c-format -msgid "Max Volume files=%s exceeded. Marking Volume \"%s\" as Used.\n" +#: src/stored/btape.c:541 +msgid "Bad Volume label type.\n" msgstr "" -"Nombre de fichier maximum atteind. Marquage du volume \"%s\" comme Used.\n" -#: src/dird/next_vol.c:254 -#, fuzzy, c-format -msgid "" -"Max configured use duration=%s sec. exceeded. Marking Volume \"%s\" as " -"Used.\n" +#: src/stored/btape.c:544 +msgid "Unknown error.\n" msgstr "" -"Nombre maximum de job sur le volume atteind. Marquage du volume \"%s\" comme " -"Used.\n" -#: src/dird/next_vol.c:267 +#: src/stored/btape.c:562 #, c-format -msgid "Catalog error updating volume \"%s\". ERR=%s" +msgid "Bad status from load. ERR=%s\n" msgstr "" -#: src/dird/next_vol.c:289 -msgid "volume has expired" -msgstr "le volume a expiré" +#: src/stored/btape.c:564 +#, c-format +msgid "Loaded %s\n" +msgstr "" -#: src/dird/next_vol.c:307 src/dird/next_vol.c:351 +#: src/stored/btape.c:573 src/stored/btape.c:1136 src/stored/btape.c:1209 +#: src/stored/btape.c:1289 src/stored/btape.c:1560 #, c-format -msgid "Recycled current volume \"%s\"\n" +msgid "Bad status from rewind. ERR=%s\n" msgstr "" -#: src/dird/next_vol.c:312 -msgid "and recycling of current volume failed" +#: src/stored/btape.c:576 src/stored/btape.c:1568 +#, c-format +msgid "Rewound %s\n" msgstr "" -#: src/dird/next_vol.c:318 -msgid "but should be Append, Purged or Recycle" -msgstr "mais doit être Append, Purged ou bien Recycle" +#: src/stored/btape.c:602 src/stored/btape.c:1572 +#, c-format +msgid "Bad status from weof. ERR=%s\n" +msgstr "" -#: src/dird/next_vol.c:327 -msgid "volume has recycling disabled" -msgstr "le recyclage du volume est désactivé" +#: src/stored/btape.c:606 +#, c-format +msgid "Wrote 1 EOF to %s\n" +msgstr "" -#: src/dird/next_vol.c:354 -msgid "" -"but should be Append, Purged or Recycle (recycling of the current volume " -"failed)" +#: src/stored/btape.c:609 +#, c-format +msgid "Wrote %d EOFs to %s\n" msgstr "" -#: src/dird/next_vol.c:358 -msgid "" -"but should be Append, Purged or Recycle (cannot automatically recycle " -"current volume, as it still contains unpruned data or the Volume Retention " -"time has not expired.)" +#: src/stored/btape.c:627 +msgid "Moved to end of medium.\n" msgstr "" -#: src/dird/next_vol.c:421 +#: src/stored/btape.c:654 #, c-format -msgid "Unable to get Pool record: ERR=%s" -msgstr "Impossible de récupérer le Pool depuis le catalogue : ERR=%s" +msgid "Bad status from bsf. ERR=%s\n" +msgstr "" -#: src/dird/next_vol.c:428 +#: src/stored/btape.c:656 #, c-format -msgid "Unable add Scratch Volume, Pool \"%s\" full MaxVols=%d\n" +msgid "Backspaced %d file%s.\n" msgstr "" -"Impossible d'ajouter un volume du Scratch, le Pool \"%s\" est plein. MaxVols=" -"%d\n" -#: src/dird/next_vol.c:448 +#: src/stored/btape.c:673 #, c-format -msgid "Failed to move Scratch Volume. ERR=%s\n" -msgstr "Impossible de déplacer un Volume du Scratch. ERR=%s\n" +msgid "Bad status from bsr. ERR=%s\n" +msgstr "" -#: src/dird/next_vol.c:453 +#: src/stored/btape.c:675 #, c-format -msgid "Using Volume \"%s\" from 'Scratch' pool.\n" -msgstr "Utilisation du Volume \"%s\" du pool « Scratch ».\n" +msgid "Backspaced %d record%s.\n" +msgstr "" -#: src/dird/ua_cmds.c:120 -#, fuzzy -msgid "Add media to a pool" -msgstr "ajouter un média dans un pool" +#: src/stored/btape.c:685 src/stored/status.c:361 +#, c-format +msgid "Configured device capabilities:\n" +msgstr "" -#: src/dird/ua_cmds.c:121 -#, fuzzy -msgid "Autodisplay console messages" -msgstr "autodisplay [on|off] -- messages de la console" +#: src/stored/btape.c:703 +#, c-format +msgid "Device status:\n" +msgstr "" -#: src/dird/ua_cmds.c:122 -msgid "Automount after label" +#: src/stored/btape.c:717 src/stored/status.c:417 +#, c-format +msgid "Device parameters:\n" msgstr "" -#: src/dird/ua_cmds.c:123 -#, fuzzy -msgid "Cancel a job" -msgstr "Annulé" +#: src/stored/btape.c:722 +#, c-format +msgid "Status:\n" +msgstr "Statut :\n" -#: src/dird/ua_cmds.c:124 -#, fuzzy -msgid "Create DB Pool from resource" -msgstr "Pool à partir de sa définition" +#: src/stored/btape.c:737 +msgid "" +"Test writing larger and larger records.\n" +"This is a torture test for records.\n" +"I am going to write\n" +"larger and larger records. It will stop when the record size\n" +"plus the header exceeds the block size (by default about 64K)\n" +msgstr "" -#: src/dird/ua_cmds.c:125 -#, fuzzy -msgid "Delete volume, pool or job" -msgstr "met à jour un volume, un pool ou bien des slots" +#: src/stored/btape.c:743 +msgid "Do you want to continue? (y/n): " +msgstr "Voulez vous continuer ? (y/n) : " -#: src/dird/ua_cmds.c:126 -#, fuzzy -msgid "Disable a job" -msgstr "est bloqué" +#: src/stored/btape.c:745 src/stored/btape.c:2197 +msgid "Command aborted.\n" +msgstr "Commande annulée.\n" -#: src/dird/ua_cmds.c:127 -msgid "Enable a job" +#: src/stored/btape.c:762 +#, c-format +msgid "Block %d i=%d\n" msgstr "" -#: src/dird/ua_cmds.c:128 -#, fuzzy -msgid "Performs FileSet estimate, listing gives full listing" +#: src/stored/btape.c:789 +msgid "Skipping read backwards test because BSR turned off.\n" msgstr "" -"estimate -- estime un FileSet (listing donne la liste des fichiers)" -#: src/dird/ua_cmds.c:131 src/dird/ua_cmds.c:155 -msgid "Terminate Bconsole session" +#: src/stored/btape.c:793 +msgid "" +"\n" +"=== Write, backup, and re-read test ===\n" +"\n" +"I'm going to write three records and an EOF\n" +"then backup over the EOF and re-read the last record.\n" +"Bacula does this after writing the last block on the\n" +"tape to verify that the block was written correctly.\n" +"\n" +"This is not an *essential* feature ...\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:132 -#, fuzzy -msgid "Non-interactive gui mode" -msgstr "gui [on|off] -- mode non interactif (pour interface graphique)" +#: src/stored/btape.c:806 src/stored/btape.c:817 src/stored/btape.c:828 +#: src/stored/btape.c:1146 src/stored/btape.c:1162 src/stored/btape.c:1904 +#: src/stored/btape.c:2821 +msgid "Error writing record to block.\n" +msgstr "" -#: src/dird/ua_cmds.c:133 -#, fuzzy -msgid "Print help on specific command" -msgstr "affiche cette commande" +#: src/stored/btape.c:810 src/stored/btape.c:821 src/stored/btape.c:832 +#: src/stored/btape.c:1150 src/stored/btape.c:1166 src/stored/btape.c:1908 +#: src/stored/btape.c:2825 +msgid "Error writing block to device.\n" +msgstr "" -#: src/dird/ua_cmds.c:138 -#, fuzzy -msgid "Label a tape" -msgstr "labéliser une bande" +#: src/stored/btape.c:813 +#, c-format +msgid "Wrote first record of %d bytes.\n" +msgstr "" -#: src/dird/ua_cmds.c:139 -#, fuzzy -msgid "List objects from catalog" -msgstr "purge les enregistrements du catalogue" +#: src/stored/btape.c:824 +#, c-format +msgid "Wrote second record of %d bytes.\n" +msgstr "" -#: src/dird/ua_cmds.c:142 -msgid "Full or long list like list command" +#: src/stored/btape.c:835 +#, c-format +msgid "Wrote third record of %d bytes.\n" msgstr "" -#: src/dird/ua_cmds.c:145 -#, fuzzy -msgid "Display pending messages" -msgstr "Message de Bacula" +#: src/stored/btape.c:842 src/stored/btape.c:847 +#, c-format +msgid "Backspace file failed! ERR=%s\n" +msgstr "" -#: src/dird/ua_cmds.c:146 -#, fuzzy -msgid "Print current memory usage" -msgstr "affiche la consommation mémoire courante" +#: src/stored/btape.c:851 +msgid "Backspaced over EOF OK.\n" +msgstr "" -#: src/dird/ua_cmds.c:147 -#, fuzzy -msgid "Mount storage" -msgstr "unmount -- démonte un lecteur" +#: src/stored/btape.c:853 +#, c-format +msgid "Backspace record failed! ERR=%s\n" +msgstr "" -#: src/dird/ua_cmds.c:150 -#, fuzzy -msgid "Prune expired records from catalog" -msgstr "purge les entrées expirées du catalogue" +#: src/stored/btape.c:856 +msgid "Backspace record OK.\n" +msgstr "" -#: src/dird/ua_cmds.c:153 -#, fuzzy -msgid "Purge records from catalog" -msgstr "purge les enregistrements du catalogue" +#: src/stored/btape.c:859 src/stored/btape.c:865 +#, c-format +msgid "Read block failed! ERR=%s\n" +msgstr "" -#: src/dird/ua_cmds.c:154 -msgid "Python control commands" +#: src/stored/btape.c:870 +msgid "Bad data in record. Test failed!\n" msgstr "" -#: src/dird/ua_cmds.c:156 -#, fuzzy -msgid "Query catalog" -msgstr "interroger le catalogue" +#: src/stored/btape.c:874 +msgid "" +"\n" +"Block re-read correct. Test succeeded!\n" +msgstr "" -#: src/dird/ua_cmds.c:157 -#, fuzzy -msgid "Restore files" -msgstr "restauration de fichier" +#: src/stored/btape.c:875 +msgid "" +"=== End Write, backup, and re-read test ===\n" +"\n" +msgstr "" -#: src/dird/ua_cmds.c:162 -#, fuzzy -msgid "Relabel a tape" -msgstr "re-labélise une bande" +#: src/stored/btape.c:882 +msgid "" +"This is not terribly serious since Bacula only uses\n" +"this function to verify the last block written to the\n" +"tape. Bacula will skip the last block verification\n" +"if you add:\n" +"\n" +"Backward Space Record = No\n" +"\n" +"to your Storage daemon's Device resource definition.\n" +msgstr "" -#: src/dird/ua_cmds.c:165 -#, fuzzy -msgid "Release storage" -msgstr "Restaurer" +#: src/stored/btape.c:904 +#, c-format +msgid "Begin writing %i files of %sB with raw blocks of %u bytes.\n" +msgstr "" -#: src/dird/ua_cmds.c:166 -#, fuzzy -msgid "Reload conf file" -msgstr "recharge la configuration" +#: src/stored/btape.c:925 src/stored/btape.c:2877 +#, c-format +msgid "Write failed at block %u. stat=%d ERR=%s\n" +msgstr "" -#: src/dird/ua_cmds.c:167 -#, fuzzy -msgid "Run a job" -msgstr "Job en cours :\n" +#: src/stored/btape.c:959 +#, c-format +msgid "Begin writing %i files of %sB with blocks of %u bytes.\n" +msgstr "" -#: src/dird/ua_cmds.c:171 +#: src/stored/btape.c:968 #, fuzzy -msgid "Report status" -msgstr "Statut :\n" +msgid "" +"\n" +"Error writing record to block.\n" +msgstr "Erreur pendant l'écriture du fichier bsr.\n" -#: src/dird/ua_cmds.c:174 +#: src/stored/btape.c:972 #, fuzzy -msgid "Sets debug level" -msgstr "positionne le niveau de debug" +msgid "" +"\n" +"Error writing block to device.\n" +msgstr "Erreur pendant l'écriture du fichier bsr.\n" -#: src/dird/ua_cmds.c:177 -msgid "Sets new client address -- if authorized" +#: src/stored/btape.c:1027 +msgid "The file_size is too big, stop this test with Ctrl-c.\n" msgstr "" -#: src/dird/ua_cmds.c:178 -#, fuzzy -msgid "Show resource records" -msgstr "Pool à partir de sa définition" - -#: src/dird/ua_cmds.c:181 -#, fuzzy -msgid "Use SQL to query catalog" -msgstr "passer des commandes SQL pour interroger le catalogue" - -#: src/dird/ua_cmds.c:182 -#, fuzzy -msgid "Print current time" -msgstr "affiche la date courante" +#: src/stored/btape.c:1055 +msgid "Test with zero data, should give the maximum throughput.\n" +msgstr "" -#: src/dird/ua_cmds.c:183 -#, fuzzy -msgid "Turn on/off trace to file" -msgstr "active/désactive le fichier de trace" +#: src/stored/btape.c:1067 src/stored/btape.c:1093 +msgid "Test with random data, should give the minimum throughput.\n" +msgstr "" -#: src/dird/ua_cmds.c:184 -#, fuzzy -msgid "Unmount storage" -msgstr "unmount -- démonte un lecteur" +#: src/stored/btape.c:1082 +msgid "Test with zero data and bacula block structure.\n" +msgstr "" -#: src/dird/ua_cmds.c:187 -#, fuzzy -msgid "Umount - for old-time Unix guys, see unmount" -msgstr "umount -- démonte un lecteur" +#: src/stored/btape.c:1122 +#, c-format +msgid "" +"\n" +"=== Write, rewind, and re-read test ===\n" +"\n" +"I'm going to write %d records and an EOF\n" +"then write %d records and an EOF, then rewind,\n" +"and re-read the data to verify that it is correct.\n" +"\n" +"This is an *essential* feature ...\n" +"\n" +msgstr "" -#: src/dird/ua_cmds.c:190 -#, fuzzy -msgid "Update volume, pool or stats" -msgstr "met à jour un volume, un pool ou bien des slots" +#: src/stored/btape.c:1154 src/stored/btape.c:1170 +#, fuzzy, c-format +msgid "Wrote %d blocks of %d bytes.\n" +msgstr "Ecriture de 1000 blocs de %d octets.\n" -#: src/dird/ua_cmds.c:196 -#, fuzzy -msgid "Use catalog xxx" -msgstr "interroger le catalogue" +#: src/stored/btape.c:1212 src/stored/btape.c:1292 +msgid "Rewind OK.\n" +msgstr "" -#: src/dird/ua_cmds.c:197 -msgid "Does variable expansion" +#: src/stored/btape.c:1225 src/stored/btape.c:1344 +msgid "Got EOF on tape.\n" msgstr "" -#: src/dird/ua_cmds.c:198 -#, fuzzy -msgid "Print Director version" -msgstr "affiche la version du Director" +#: src/stored/btape.c:1230 +#, c-format +msgid "Read block %d failed! ERR=%s\n" +msgstr "" -#: src/dird/ua_cmds.c:199 -#, fuzzy -msgid "Wait until no jobs are running" -msgstr "Aucun de vos jobs ne sont en cours.\n" +#: src/stored/btape.c:1236 +#, c-format +msgid "Read record failed. Block %d! ERR=%s\n" +msgstr "" -#: src/dird/ua_cmds.c:247 +#: src/stored/btape.c:1242 src/stored/btape.c:1374 #, c-format -msgid "%s: is an invalid command.\n" -msgstr "%s : est une commande invalide.\n" +msgid "Bad data in record. Expected %d, got %d at byte %d. Test failed!\n" +msgstr "" + +#: src/stored/btape.c:1249 +#, fuzzy, c-format +msgid "%d blocks re-read correctly.\n" +msgstr "1000 blocs relus correctement.\n" -#: src/dird/ua_cmds.c:288 +#: src/stored/btape.c:1252 src/stored/btape.c:1381 msgid "" -"You probably don't want to be using this command since it\n" -"creates database records without labeling the Volumes.\n" -"You probably want to use the \"label\" command.\n" +"=== Test Succeeded. End Write, rewind, and re-read test ===\n" "\n" msgstr "" -#: src/dird/ua_cmds.c:306 +#: src/stored/btape.c:1280 +msgid "Block position test\n" +msgstr "" + +#: src/stored/btape.c:1335 #, c-format -msgid "Pool already has maximum volumes=%d\n" -msgstr "Le pool a déjà atteint le nombre maximum de volume=%d\n" +msgid "Reposition to file:block %d:%d\n" +msgstr "" -#: src/dird/ua_cmds.c:307 -msgid "Enter new maximum (zero for unlimited): " -msgstr "Entrez le nouveau maximum (zéro pour illimité) : " +#: src/stored/btape.c:1337 +msgid "Reposition error.\n" +msgstr "" -#: src/dird/ua_cmds.c:327 +#: src/stored/btape.c:1350 #, c-format -msgid "Enter number of Volumes to create. 0=>fixed name. Max=%d: " -msgstr "Entrez le nombre de Volume à créer. 0=>nom fixé. Max=%d : " +msgid "" +"Read block %d failed! file=%d blk=%d. ERR=%s\n" +"\n" +msgstr "" + +#: src/stored/btape.c:1352 +msgid "" +"This may be because the tape drive block size is not\n" +" set to variable blocking as normally used by Bacula.\n" +" Please see the Tape Testing chapter in the manual and \n" +" look for using mt with defblksize and setoptions\n" +"If your tape drive block size is correct, then perhaps\n" +" your SCSI driver is *really* stupid and does not\n" +" correctly report the file:block after a FSF. In this\n" +" case try setting:\n" +" Fast Forward Space File = no\n" +" in your Device resource.\n" +msgstr "" -#: src/dird/ua_cmds.c:333 +#: src/stored/btape.c:1368 #, c-format -msgid "The number must be between 0 and %d\n" -msgstr "Le nombre doit être entre 0 et %d\n" +msgid "Read record failed! ERR=%s\n" +msgstr "" -#: src/dird/ua_cmds.c:341 -msgid "Enter Volume name: " -msgstr "Entrez le nom du Volume : " +#: src/stored/btape.c:1379 +#, c-format +msgid "Block %d re-read correctly.\n" +msgstr "" -#: src/dird/ua_cmds.c:345 -msgid "Enter base volume name: " -msgstr "Entrez le nom de base du volume : " +#: src/stored/btape.c:1400 +msgid "" +"\n" +"\n" +"=== Append files test ===\n" +"\n" +"This test is essential to Bacula.\n" +"\n" +"I'm going to write one record in file 0,\n" +" two records in file 1,\n" +" and three records in file 2\n" +"\n" +msgstr "" -#: src/dird/ua_cmds.c:354 src/dird/ua_label.c:663 -msgid "Volume name too long.\n" -msgstr "Nom de Volume trop long.\n" +#: src/stored/btape.c:1424 +msgid "Now moving to end of medium.\n" +msgstr "" -#: src/dird/ua_cmds.c:358 src/dird/ua_label.c:669 src/lib/edit.c:501 -msgid "Volume name must be at least one character long.\n" -msgstr "Le nom du volume doit comporter au moins un caractère\n" +#: src/stored/btape.c:1426 src/stored/btape.c:1655 +#, c-format +msgid "We should be in file 3. I am at file %d. %s\n" +msgstr "" -#: src/dird/ua_cmds.c:369 -msgid "Enter the starting number: " -msgstr "Entrez le nombre de départ : " +#: src/stored/btape.c:1427 src/stored/btape.c:1445 src/stored/btape.c:1644 +#: src/stored/btape.c:1656 src/stored/btape.c:1669 src/stored/btape.c:1686 +msgid "This is correct!" +msgstr "" -#: src/dird/ua_cmds.c:374 -msgid "Start number must be greater than zero.\n" -msgstr "Le nombre de départ doit être supérieur à zéro.\n" +#: src/stored/btape.c:1427 src/stored/btape.c:1445 src/stored/btape.c:1644 +#: src/stored/btape.c:1656 src/stored/btape.c:1669 src/stored/btape.c:1686 +msgid "This is NOT correct!!!!" +msgstr "" -#: src/dird/ua_cmds.c:385 -msgid "Enter slot (0 for none): " -msgstr "Saisissez le slot (0 pour aucun) : " +#: src/stored/btape.c:1433 +msgid "" +"\n" +"Now the important part, I am going to attempt to append to the tape.\n" +"\n" +msgstr "" -#: src/dird/ua_cmds.c:389 -msgid "InChanger? yes/no: " -msgstr "InChanger ? oui/non : " +#: src/stored/btape.c:1440 +msgid "" +"Done appending, there should be no I/O errors\n" +"\n" +msgstr "" -#: src/dird/ua_cmds.c:414 -#, c-format -msgid "%d Volumes created in pool %s\n" -msgstr "%d Volumes créés dans le pool %s\n" +#: src/stored/btape.c:1441 +msgid "Doing Bacula scan of blocks:\n" +msgstr "" -#: src/dird/ua_cmds.c:430 src/dird/ua_cmds.c:1032 -msgid "Turn on or off? " -msgstr "Activer ou désactiver ? (on/off) " +#: src/stored/btape.c:1443 +msgid "End scanning the tape.\n" +msgstr "" -#: src/dird/ua_cmds.c:544 +#: src/stored/btape.c:1444 src/stored/btape.c:1668 #, c-format -msgid "" -"Can't set %s RecyclePool to %s, %s is not in database.\n" -"Try to update it with 'update pool=%s'\n" +msgid "We should be in file 4. I am at file %d. %s\n" msgstr "" -#: src/dird/ua_cmds.c:562 -#, c-format +#: src/stored/btape.c:1469 msgid "" -"Can't set %s ScratchPool to %s, %s is not in database.\n" -"Try to update it with 'update pool=%s'\n" +"\n" +"Autochanger enabled, but no name or no command device specified.\n" msgstr "" -#: src/dird/ua_cmds.c:631 -#, c-format +#: src/stored/btape.c:1473 msgid "" -"Error: Pool %s already exists.\n" -"Use update to change it.\n" +"\n" +"Ah, I see you have an autochanger configured.\n" +"To test the autochanger you must have a blank tape\n" +" that I can write on in Slot 1.\n" msgstr "" -"Erreur : Pool %s est déjà défini.\n" -"Utilisez update pour le changer\n" -#: src/dird/ua_cmds.c:642 -#, c-format -msgid "Pool %s created.\n" -msgstr "Pool %s créé.\n" +#: src/stored/btape.c:1476 +msgid "" +"\n" +"Do you wish to continue with the Autochanger test? (y/n): " +msgstr "" -#: src/dird/ua_cmds.c:672 -msgid "Python interpreter restarted.\n" +#: src/stored/btape.c:1483 +msgid "" +"\n" +"\n" +"=== Autochanger test ===\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:675 src/dird/ua_cmds.c:1337 -msgid "Nothing done.\n" -msgstr "Rien de fait.\n" +#: src/stored/btape.c:1492 +msgid "3301 Issuing autochanger \"loaded\" command.\n" +msgstr "" -#: src/dird/ua_cmds.c:699 src/dird/ua_cmds.c:1083 src/dird/ua_run.c:1588 +#: src/stored/btape.c:1501 #, c-format -msgid "Client \"%s\" not found.\n" -msgstr "le client \"%s\" est introuvable.\n" +msgid "3991 Bad autochanger command: %s\n" +msgstr "" -#: src/dird/ua_cmds.c:708 +#: src/stored/btape.c:1502 #, c-format -msgid "Client \"%s\" address set to %s\n" -msgstr "Client \"%s\" adresse positionné à %s\n" +msgid "3991 result=\"%s\": ERR=%s\n" +msgstr "" -#: src/dird/ua_cmds.c:742 +#: src/stored/btape.c:1506 #, c-format -msgid "Job \"%s\" %sabled\n" +msgid "Slot %d loaded. I am going to unload it.\n" msgstr "" -#: src/dird/ua_cmds.c:920 -msgid "Enter new debug level: " -msgstr "Saisissez le nouveau niveau de debug : " +#: src/stored/btape.c:1508 +msgid "Nothing loaded in the drive. OK.\n" +msgstr "" -#: src/dird/ua_cmds.c:997 -msgid "All" +#: src/stored/btape.c:1515 +#, c-format +msgid "3302 Issuing autochanger \"unload %d %d\" command.\n" msgstr "" -#: src/dird/ua_cmds.c:998 -msgid "Select daemon type to set debug level" -msgstr "Sélectionnez le composant a mettre à jour" +#: src/stored/btape.c:1520 +#, c-format +msgid "unload status=%s %d\n" +msgstr "" -#: src/dird/ua_cmds.c:1087 src/dird/ua_cmds.c:1972 -#, fuzzy, c-format -msgid "No authorization for Client \"%s\"\n" -msgstr "Pas d'enregistrement trouvé en base pour : %s\n" +#: src/stored/btape.c:1520 src/lib/util.c:177 src/lib/util.c:309 +#: src/dird/ua_status.c:1093 src/lib/status.h:115 +msgid "OK" +msgstr "OK" -#: src/dird/ua_cmds.c:1092 -msgid "Client name missing.\n" +#: src/stored/btape.c:1520 +msgid "Bad" msgstr "" -#: src/dird/ua_cmds.c:1104 src/dird/ua_cmds.c:1171 src/dird/ua_cmds.c:1994 +#: src/stored/btape.c:1523 #, c-format -msgid "No authorization for Job \"%s\"\n" +msgid "3992 Bad autochanger command: %s\n" msgstr "" -#: src/dird/ua_cmds.c:1109 -msgid "Job name missing.\n" +#: src/stored/btape.c:1524 +#, c-format +msgid "3992 result=\"%s\": ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:1118 -#, fuzzy, c-format -msgid "Fileset \"%s\" not found.\n" -msgstr "Le FileSet \"%s\" est introuvable.\n" +#: src/stored/btape.c:1534 +#, c-format +msgid "3303 Issuing autochanger \"load %d %d\" command.\n" +msgstr "" -#: src/dird/ua_cmds.c:1122 -#, fuzzy, c-format -msgid "No authorization for FileSet \"%s\"\n" -msgstr "Pas d'enregistrement trouvé en base pour : %s\n" +#: src/stored/btape.c:1542 +#, c-format +msgid "3303 Autochanger \"load %d %d\" status is OK.\n" +msgstr "" -#: src/dird/ua_cmds.c:1127 -msgid "Fileset name missing.\n" +#: src/stored/btape.c:1546 +#, c-format +msgid "3993 Bad autochanger command: %s\n" msgstr "" -#: src/dird/ua_cmds.c:1138 src/dird/ua_run.c:550 -#, fuzzy, c-format -msgid "Level \"%s\" not valid.\n" -msgstr "Le type %s est invalide.\n" - -#: src/dird/ua_cmds.c:1142 -msgid "Level value missing.\n" +#: src/stored/btape.c:1547 +#, c-format +msgid "3993 result=\"%s\": ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:1149 -#, fuzzy -msgid "Invalid value for accurate. It must be yes or no.\n" -msgstr "Saisie invalide. Veuillez répondre oui ou non.\n" +#: src/stored/btape.c:1562 +msgid "" +"\n" +"The test failed, probably because you need to put\n" +"a longer sleep time in the mtx-script in the load) case.\n" +"Adding a 30 second sleep and trying again ...\n" +msgstr "" -#: src/dird/ua_cmds.c:1154 -#, fuzzy -msgid "Accurate value missing.\n" -msgstr "La valeur actuelle est : %s\n" +#: src/stored/btape.c:1575 +#, c-format +msgid "Wrote EOF to %s\n" +msgstr "" -#: src/dird/ua_cmds.c:1167 -msgid "No job specified.\n" -msgstr "Pas de job sélectionné.\n" +#: src/stored/btape.c:1579 +#, c-format +msgid "" +"\n" +"The test worked this time. Please add:\n" +"\n" +" sleep %d\n" +"\n" +"to your mtx-changer script in the load) case.\n" +"\n" +msgstr "" -#: src/dird/ua_cmds.c:1227 -msgid "Error sending include list.\n" -msgstr "Erreur pendant l'envoi de la liste d'inclusion.\n" +#: src/stored/btape.c:1584 +msgid "" +"\n" +"The test autochanger worked!!\n" +"\n" +msgstr "" -#: src/dird/ua_cmds.c:1232 -msgid "Error sending exclude list.\n" -msgstr "Erreur pendant l'envoi de la liste d'exclusion.\n" +#: src/stored/btape.c:1595 +msgid "You must correct this error or the Autochanger will not work.\n" +msgstr "" -#: src/dird/ua_cmds.c:1323 +#: src/stored/btape.c:1613 msgid "" -"In general it is not a good idea to delete either a\n" -"Pool or a Volume since they may contain data.\n" "\n" -msgstr "" -"Généralement supprimer un pool ou bien un volume\n" -"n'est pas une bonne idée car ils peuvent contenir des données.\n" "\n" +"=== Forward space files test ===\n" +"\n" +"This test is essential to Bacula.\n" +"\n" +"I'm going to write five files then test forward spacing\n" +"\n" +msgstr "" -#: src/dird/ua_cmds.c:1326 -msgid "Choose catalog item to delete" -msgstr "Choisissez l'objet du catalogue à supprimer" +#: src/stored/btape.c:1638 +msgid "Now forward spacing 1 file.\n" +msgstr "" -#: src/dird/ua_cmds.c:1376 src/dird/ua_cmds.c:1391 src/dird/ua_cmds.c:1401 +#: src/stored/btape.c:1640 src/stored/btape.c:1652 src/stored/btape.c:1665 +#: src/stored/btape.c:1683 src/stored/btape.c:1859 #, c-format -msgid "Illegal JobId %s ignored\n" +msgid "Bad status from fsr. ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:1404 -msgid "Enter JobId to delete: " -msgstr "Saisissez le JobId à supprimer : " - -#: src/dird/ua_cmds.c:1440 -#, fuzzy, c-format -msgid "Are you sure you want to delete %d JobIds ? (yes/no): " -msgstr "Êtes vous certain de vouloir supprimer ce Pool ? (oui/non) : " - -#: src/dird/ua_cmds.c:1450 +#: src/stored/btape.c:1643 #, c-format -msgid "Illegal JobId range %s - %s should define increasing JobIds, ignored\n" +msgid "We should be in file 1. I am at file %d. %s\n" msgstr "" -#: src/dird/ua_cmds.c:1454 -#, c-format -msgid "Illegal JobId range %s - %s, ignored\n" +#: src/stored/btape.c:1650 +msgid "Now forward spacing 2 files.\n" msgstr "" -#: src/dird/ua_cmds.c:1469 -#, fuzzy, c-format -msgid "Jobid %s and associated records deleted from the catalog.\n" +#: src/stored/btape.c:1663 +msgid "Now forward spacing 4 files.\n" msgstr "" -"Le Job %s et les enregistrements associés ont été supprimés du catalogue.\n" -#: src/dird/ua_cmds.c:1484 -#, c-format +#: src/stored/btape.c:1675 msgid "" +"The test worked this time. Please add:\n" "\n" -"This command will delete volume %s\n" -"and all Jobs saved on that volume from the Catalog\n" -msgstr "" +" Fast Forward Space File = no\n" "\n" -"Cette commande va supprimer le Volume %s\n" -"et tous les Jobs sauvegardés sur celui-ci du Catalogue\n" +"to your Device resource for this drive.\n" +msgstr "" -#: src/dird/ua_cmds.c:1491 -#, fuzzy, c-format -msgid "Are you sure you want to delete Volume \"%s\"? (yes/no): " -msgstr "Êtes vous certain de vouloir supprimer ce Volume ? (oui/non) : " +#: src/stored/btape.c:1681 +msgid "Now forward spacing 1 more file.\n" +msgstr "" -#: src/dird/ua_cmds.c:1504 -msgid "Can't list jobs on this volume\n" +#: src/stored/btape.c:1685 +#, c-format +msgid "We should be in file 5. I am at file %d. %s\n" msgstr "" -#: src/dird/ua_cmds.c:1529 -#, fuzzy, c-format -msgid "Are you sure you want to delete Pool \"%s\"? (yes/no): " -msgstr "Êtes vous certain de vouloir supprimer ce Pool ? (oui/non) : " +#: src/stored/btape.c:1690 +msgid "" +"\n" +"=== End Forward space files test ===\n" +"\n" +msgstr "" -#: src/dird/ua_cmds.c:1644 -#, c-format -msgid "Using Catalog name=%s DB=%s\n" -msgstr "Utilisation du Catalogue name=%s DB=%s\n" +#: src/stored/btape.c:1694 +msgid "" +"\n" +"The forward space file test failed.\n" +msgstr "" -#: src/dird/ua_cmds.c:1712 -msgid "ERR: Can't open db\n" +#: src/stored/btape.c:1696 +msgid "" +"You have Fast Forward Space File enabled.\n" +"I am turning it off then retrying the test.\n" msgstr "" -#: src/dird/ua_cmds.c:1759 -msgid "Wait on mount timed out\n" +#: src/stored/btape.c:1702 +msgid "" +"You must correct this error or Bacula will not work.\n" +"Some systems, e.g. OpenBSD, require you to set\n" +" Use MTIOCGET= no\n" +"in your device resource. Use with caution.\n" msgstr "" -#: src/dird/ua_cmds.c:1769 -msgid "ERR: Job was not found\n" -msgstr "ERR: Job %s non trouvé\n" +#: src/stored/btape.c:1736 +msgid "" +"\n" +"Append test failed. Attempting again.\n" +"Setting \"Hardware End of Medium = no\n" +" and \"Fast Forward Space File = no\n" +"and retrying append test.\n" +"\n" +msgstr "" -#: src/dird/ua_cmds.c:1845 -#, fuzzy +#: src/stored/btape.c:1744 msgid "" -" Command Description\n" -" ======= ===========\n" +"\n" +"\n" +"It looks like the test worked this time, please add:\n" +"\n" +" Hardware End of Medium = No\n" +"\n" +" Fast Forward Space File = No\n" +"to your Device resource in the Storage conf file.\n" msgstr "" -" Commande Description\n" -" ======== ===========\n" -#: src/dird/ua_cmds.c:1849 -#, c-format +#: src/stored/btape.c:1751 msgid "" -" %-13s %s\n" "\n" -"Arguments:\n" -"\t%s\n" +"\n" +"That appears *NOT* to have corrected the problem.\n" msgstr "" -#: src/dird/ua_cmds.c:1854 -#, fuzzy, c-format -msgid " %-13s %s\n" -msgstr " %-10s %s\n" +#: src/stored/btape.c:1756 +msgid "" +"\n" +"\n" +"It looks like the append failed. Attempting again.\n" +"Setting \"BSF at EOM = yes\" and retrying append test.\n" +msgstr "" -#: src/dird/ua_cmds.c:1858 -#, fuzzy, c-format +#: src/stored/btape.c:1761 msgid "" "\n" -"Can't find %s command.\n" "\n" -msgstr ": est une commande invalide.\n" +"It looks like the test worked this time, please add:\n" +"\n" +" Hardware End of Medium = No\n" +" Fast Forward Space File = No\n" +" BSF at EOM = yes\n" +"\n" +"to your Device resource in the Storage conf file.\n" +msgstr "" -#: src/dird/ua_cmds.c:1860 +#: src/stored/btape.c:1772 msgid "" "\n" -"When at a prompt, entering a period cancels the command.\n" +"Append test failed.\n" +"\n" +"\n" +"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n" +"Unable to correct the problem. You MUST fix this\n" +"problem before Bacula can use your tape drive correctly\n" +"\n" +"Perhaps running Bacula in fixed block mode will work.\n" +"Do so by setting:\n" +"\n" +"Minimum Block Size = nnn\n" +"Maximum Block Size = nnn\n" +"\n" +"in your Storage daemon's Device definition.\n" +"nnn must match your tape driver's block size, which\n" +"can be determined by reading your tape manufacturers\n" +"information, and the information on your kernel dirver.\n" +"Fixed block sizes, however, are not normally an ideal solution.\n" "\n" +"Some systems, e.g. OpenBSD, require you to set\n" +" Use MTIOCGET= no\n" +"in your device resource. Use with caution.\n" msgstr "" + +#: src/stored/btape.c:1794 +msgid "" "\n" -"Sur une question, tapez un point (.) pour annuler la commande en cours.\n" +"The above Bacula scan should have output identical to what follows.\n" +"Please double check it ...\n" +"=== Sample correct output ===\n" +"1 block of 64448 bytes in file 1\n" +"End of File mark.\n" +"2 blocks of 64448 bytes in file 2\n" +"End of File mark.\n" +"3 blocks of 64448 bytes in file 3\n" +"End of File mark.\n" +"1 block of 64448 bytes in file 4\n" +"End of File mark.\n" +"Total files=4, blocks=7, bytes = 451,136\n" +"=== End sample correct output ===\n" +"\n" +"If the above scan output is not identical to the\n" +"sample output, you MUST correct the problem\n" +"or Bacula will not be able to write multiple Jobs to \n" +"the tape.\n" +"\n" +msgstr "" -#: src/dird/ua_cmds.c:1896 src/filed/status.c:85 +#: src/stored/btape.c:1837 #, c-format -msgid "%s Version: %s (%s) %s %s %s %s\n" +msgid "Bad status from fsf. ERR=%s\n" +msgstr "" + +#: src/stored/btape.c:1841 +msgid "Forward spaced 1 file.\n" msgstr "" -#: src/dird/ua_cmds.c:1955 src/dird/ua_cmds.c:1982 src/dird/ua_cmds.c:2004 +#: src/stored/btape.c:1844 #, c-format -msgid "No authorization for Catalog \"%s\"\n" +msgid "Forward spaced %d files.\n" +msgstr "" + +#: src/stored/btape.c:1863 +msgid "Forward spaced 1 record.\n" msgstr "" -#: src/dird/ua_cmds.c:2049 +#: src/stored/btape.c:1866 #, c-format -msgid "Could not open catalog database \"%s\".\n" -msgstr "Impossible d'ouvrir le catalogue \"%s\".\n" +msgid "Forward spaced %d records.\n" +msgstr "" -#: src/dird/ua_cmds.c:2059 +#: src/stored/btape.c:1911 #, c-format -msgid "Using Catalog \"%s\"\n" -msgstr "Utilisation du Catalogue \"%s\"\n" +msgid "Wrote one record of %d bytes.\n" +msgstr "" -#: src/dird/ua_tree.c:74 -#, fuzzy -msgid "add dir/file to be restored recursively, wildcards allowed" +#: src/stored/btape.c:1913 +msgid "Wrote block to device.\n" msgstr "" -"marque récursivement les fichiers/répertoires pour être restaurés, les " -"jokers (*) fonctionnent" -#: src/dird/ua_tree.c:75 -msgid "change current directory" -msgstr "change le répertoire courant" +#: src/stored/btape.c:1927 +msgid "Enter length to read: " +msgstr "" -#: src/dird/ua_tree.c:76 -msgid "count marked files in and below the cd" -msgstr "compte le nombre de fichiers marqués à partir du répertoire courant" +#: src/stored/btape.c:1932 +msgid "Bad length entered, using default of 1024 bytes.\n" +msgstr "" -#: src/dird/ua_tree.c:77 -#, fuzzy -msgid "delete dir/file to be restored recursively in dir" -msgstr "dé-sélectionne les fichiers/répertoires récursivement" +#: src/stored/btape.c:1941 +#, c-format +msgid "Read of %d bytes gives stat=%d. ERR=%s\n" +msgstr "" -#: src/dird/ua_tree.c:78 src/dird/ua_tree.c:79 -msgid "long list current directory, wildcards allowed" -msgstr "liste détaillée du répertoire courant, les jocker (*) fonctionnent" - -#: src/dird/ua_tree.c:80 -msgid "leave file selection mode" -msgstr "sort de la sélection des fichiers" - -#: src/dird/ua_tree.c:81 -msgid "estimate restore size" -msgstr "estime la taille de la restauration" - -#: src/dird/ua_tree.c:82 -msgid "same as done command" -msgstr "synonyme de la commande « done »" - -#: src/dird/ua_tree.c:83 -msgid "find files, wildcards allowed" -msgstr "recherche des fichiers, les jokers (*) fonctionnent" - -#: src/dird/ua_tree.c:84 src/dird/ua_tree.c:97 src/dird/ua_tree.c:98 -msgid "print help" -msgstr "affiche l'aide" - -#: src/dird/ua_tree.c:85 src/dird/ua_tree.c:86 -msgid "list current directory, wildcards allowed" -msgstr "affiche le contenu du répertoire courant, les jokers (*) fonctionnent" - -#: src/dird/ua_tree.c:87 -#, fuzzy -msgid "list subdir in current directory, wildcards allowed" -msgstr "affiche le contenu du répertoire courant, les jokers (*) fonctionnent" - -#: src/dird/ua_tree.c:88 -msgid "list the marked files in and below the cd" -msgstr "liste les fichiers marqués à partir du répertoire courant" - -#: src/dird/ua_tree.c:89 -#, fuzzy -msgid "list the marked files in" -msgstr "liste les fichiers marqués à partir du répertoire courant" - -#: src/dird/ua_tree.c:90 -msgid "mark dir/file to be restored recursively, wildcards allowed" +#: src/stored/btape.c:1964 src/stored/btape.c:2013 +#, c-format +msgid "End of tape\n" msgstr "" -"marque récursivement les fichiers/répertoires pour être restaurés, les " -"jokers (*) fonctionnent" - -#: src/dird/ua_tree.c:91 -msgid "mark directory name to be restored (no files)" -msgstr "marque un répertoire (seulement) pour la restauration" - -#: src/dird/ua_tree.c:92 src/dird/ua_tree.c:93 -msgid "print current working directory" -msgstr "affiche le répertoire courant" - -#: src/dird/ua_tree.c:94 -msgid "unmark dir/file to be restored recursively in dir" -msgstr "dé-sélectionne les fichiers/répertoires récursivement" - -#: src/dird/ua_tree.c:95 -msgid "unmark directory name only no recursion" -msgstr "dé-sélectionne seulement un répertoire" - -#: src/dird/ua_tree.c:96 -msgid "quit and do not do restore" -msgstr "quitte et annule la restauration" -#: src/dird/ua_tree.c:118 -msgid "" -"\n" -"You are now entering file selection mode where you add (mark) and\n" -"remove (unmark) files to be restored. No files are initially added, unless\n" -"you used the \"all\" keyword on the command line.\n" -"Enter \"done\" to leave this mode.\n" -"\n" +#: src/stored/btape.c:1969 +#, c-format +msgid "Starting scan at file %u\n" msgstr "" -"\n" -"Vous êtes dans le mode de sélection des fichiers ou vous devez ajouter " -"(mark)\n" -"et supprimez (unmark) les fichiers à restaurer. Aucun fichier n'est " -"sélectionné\n" -"par défaut sauf si vous avez utilisé l'option « all » dans la commande.\n" -"Terminez votre saisie par « done »\n" -"\n" -#: src/dird/ua_tree.c:129 src/dird/ua_tree.c:831 +#: src/stored/btape.c:1974 src/stored/tape_dev.c:613 #, c-format -msgid "cwd is: %s\n" -msgstr "Le répertoire courant est : %s\n" - -#: src/dird/ua_tree.c:138 src/dird/ua_tree.c:157 -#, fuzzy, c-format -msgid "Invalid command \"%s\". Enter \"done\" to exit.\n" -msgstr "Commande invalide. Tapez « done » pour quitter.\n" +msgid "read error on %s. ERR=%s.\n" +msgstr "" -#: src/dird/ua_tree.c:227 +#: src/stored/btape.c:1976 #, c-format -msgid "" -"Something is wrong with the Delta sequence of %s, skiping new parts. Current " -"sequence is %d\n" +msgid "Bad status from read %d. ERR=%s\n" msgstr "" -#: src/dird/ua_tree.c:373 src/dird/ua_tree.c:385 src/dird/ua_tree.c:402 -msgid "No files marked.\n" -msgstr "Aucun fichier sélectionné.\n" - -#: src/dird/ua_tree.c:387 -msgid "1 file marked.\n" -msgstr "1 fichier sélectionné.\n" - -#: src/dird/ua_tree.c:389 +#: src/stored/btape.c:1979 src/stored/btape.c:1993 src/stored/btape.c:2057 +#: src/stored/btape.c:2069 src/stored/btape.c:2082 src/stored/btape.c:2098 #, c-format -msgid "%s files marked.\n" -msgstr "%s fichiers sélectionnés.\n" - -#: src/dird/ua_tree.c:417 -msgid "No directories marked.\n" -msgstr "Pas de répertoire sélectionné.\n" - -#: src/dird/ua_tree.c:419 -msgid "1 directory marked.\n" -msgstr "1 répertoire sélectionné.\n" +msgid "1 block of %d bytes in file %d\n" +msgstr "" -#: src/dird/ua_tree.c:421 +#: src/stored/btape.c:1982 src/stored/btape.c:1996 src/stored/btape.c:2060 +#: src/stored/btape.c:2072 src/stored/btape.c:2085 src/stored/btape.c:2101 #, c-format -msgid "%s directories marked.\n" -msgstr "%s répertoires sélectionnés.\n" +msgid "%d blocks of %d bytes in file %d\n" +msgstr "" -#: src/dird/ua_tree.c:442 +#: src/stored/btape.c:2004 src/stored/btape.c:2076 #, c-format -msgid "%s total files/dirs. %s marked to be restored.\n" +msgid "End of File mark.\n" msgstr "" -"%s fichiers/répertoires au total. %s sélectionné pour la restauration.\n" -#: src/dird/ua_tree.c:453 -msgid "No file specification given.\n" +#: src/stored/btape.c:2025 src/stored/btape.c:2129 +#, c-format +msgid "Total files=%d, blocks=%d, bytes = %s\n" msgstr "" -#: src/dird/ua_tree.c:674 +#: src/stored/btape.c:2089 #, c-format -msgid "Node %s has no children.\n" -msgstr "Le noeud %s n'a pas de fils.\n" +msgid "Short block read.\n" +msgstr "" -#: src/dird/ua_tree.c:767 +#: src/stored/btape.c:2092 #, c-format -msgid "%d total files; %d marked to be restored; %s bytes.\n" -msgstr "%d fichiers en tout ; %d marqués pour la restauration ; %s octets.\n" +msgid "Error reading block. ERR=%s\n" +msgstr "" -#: src/dird/ua_tree.c:778 src/stored/btape.c:2949 +#: src/stored/btape.c:2116 #, c-format msgid "" -" Command Description\n" -" ======= ===========\n" +"Block=%u file,blk=%u,%u blen=%u First rec FI=%s SessId=%u SessTim=%u Strm=%s " +"rlen=%d\n" msgstr "" -" Commande Description\n" -" ======== ===========\n" -#: src/dird/ua_tree.c:801 -msgid "Too few or too many arguments. Try using double quotes.\n" +#: src/stored/btape.c:2138 +#, c-format +msgid "Device status: %u. ERR=%s\n" msgstr "" -"Trop ou pas assez d'arguments sur la commande. Essayez d'utiliser des « \" " -"»\n" -#: src/dird/ua_tree.c:814 -msgid "Invalid path given.\n" +#: src/stored/btape.c:2170 +#, fuzzy, c-format +msgid "" +"\n" +"This command simulates Bacula writing to a tape.\n" +"It requires either one or two blank tapes, which it\n" +"will label and write.\n" +"\n" +"If you have an autochanger configured, it will use\n" +"the tapes that are in slots 1 and 2, otherwise, you will\n" +"be prompted to insert the tapes when necessary.\n" +"\n" +"It will print a status approximately\n" +"every 322 MB, and write an EOF every %s. If you have\n" +"selected the simple test option, after writing the first tape\n" +"it will rewind it and re-read the last block written.\n" +"\n" +"If you have selected the multiple tape test, when the first tape\n" +"fills, it will ask for a second, and after writing a few more \n" +"blocks, it will stop. Then it will begin re-reading the\n" +"two tapes.\n" +"\n" +"This may take a long time -- hours! ...\n" +"\n" msgstr "" +"\n" +"Cette commande simule l'écriture d'une bande par Bacula.\n" +"Ce test requiert une ou deux bandes vierges qui vont être\n" +"labélisées et écrites.\n" +"\n" +"Si vous avez configuré un autochangeur, il utilisera les bandes\n" +"des slots 1 et 2, sinon, le programme vous demandera d'insérer\n" +"les bandes quand cela sera nécessaire.\n" +"\n" +"L'état d'avancement sera affiché tous les 322 Mo, et un EOF sera \n" +"écrit tous les 3,2 Go. Si vous avez choisi le test simple, après avoir\n" +"rempli la bande, elle sera rembobinée et le dernier bloc écrit sera\n" +"relu.\n" +"\n" +"Si vous avez choisi le test multi-bande, quand la première bande sera\n" +"remplie vous devrez insérer la nouvelle et après l'écriture de quelques\n" +"blocs les deux bandes seront relues.\n" +"\n" +"Ce test peut durer longtemps (voir des heures).\n" -#: src/dird/ua_tree.c:850 src/dird/ua_tree.c:862 -msgid "No files unmarked.\n" -msgstr "Pas de fichier dé-sélectionné.\n" - -#: src/dird/ua_tree.c:864 -msgid "1 file unmarked.\n" -msgstr "1 fichier dé-sélectionné.\n" - -#: src/dird/ua_tree.c:867 -#, c-format -msgid "%s files unmarked.\n" -msgstr "%s fichiers dé-sélectionnés.\n" +#: src/stored/btape.c:2188 +msgid "" +"Do you want to run the simplified test (s) with one tape\n" +"or the complete multiple tape (m) test: (s/m) " +msgstr "" +"Voulez vous lancer le test simplifié (s) utilisant une seule bande\n" +"ou bien le test multi-bande complet (m) : (s/m) " -#: src/dird/ua_tree.c:878 src/dird/ua_tree.c:895 -msgid "No directories unmarked.\n" -msgstr "Pas de répertoire dé-sélectionné\n" +#: src/stored/btape.c:2191 +msgid "Simple test (single tape) selected.\n" +msgstr "Sélection du test simplifié (utilisant une seule bande).\n" -#: src/dird/ua_tree.c:897 -msgid "1 directory unmarked.\n" -msgstr "1 répertoire dé-sélectionné\n" +#: src/stored/btape.c:2194 +msgid "Multiple tape test selected.\n" +msgstr "Sélection du test multiple.\n" -#: src/dird/ua_tree.c:899 -#, c-format -msgid "%d directories unmarked.\n" -msgstr "%d répertoires dé-sélectionnés.\n" +#: src/stored/btape.c:2236 +msgid "Wrote Start of Session label.\n" +msgstr "Écriture du label de début de session.\n" -#: src/dird/dird_conf.c:567 src/tray-monitor/tray_conf.c:168 -#: src/qt-console/tray-monitor/tray_conf.cpp:168 +#: src/stored/btape.c:2255 #, c-format -msgid "No %s resource defined\n" +msgid "%s Begin writing Bacula records to tape ...\n" msgstr "" -#: src/dird/dird_conf.c:576 +#: src/stored/btape.c:2257 #, c-format -msgid "Director: name=%s MaxJobs=%d FDtimeout=%s SDtimeout=%s\n" +msgid "%s Begin writing Bacula records to first tape ...\n" msgstr "" -#: src/dird/dird_conf.c:581 -#, c-format -msgid " query_file=%s\n" -msgstr "" +#: src/stored/btape.c:2283 +#, fuzzy +msgid "Flush block failed.\n" +msgstr "Flush de %s blocs, écriture de EOF\n" -#: src/dird/dird_conf.c:584 src/dird/dird_conf.c:604 src/dird/dird_conf.c:621 -#: src/dird/dird_conf.c:689 src/dird/dird_conf.c:693 src/dird/dird_conf.c:697 -#: src/dird/dird_conf.c:730 src/dird/dird_conf.c:753 src/dird/dird_conf.c:757 -#: src/dird/dird_conf.c:761 src/dird/dird_conf.c:765 src/dird/dird_conf.c:769 -#: src/dird/dird_conf.c:782 src/dird/dird_conf.c:1018 -#: src/dird/dird_conf.c:1025 -msgid " --> " -msgstr "" +#: src/stored/btape.c:2297 +#, fuzzy, c-format +msgid "Wrote block=%u, file,blk=%u,%u VolBytes=%s rate=%sB/s\n" +msgstr "Écriture blk_block=%u, dev_blk_num=%u VolBytes=%s rate=%.1f KB/s\n" -#: src/dird/dird_conf.c:589 +#: src/stored/btape.c:2308 #, c-format -msgid "Console: name=%s SSL=%d\n" +msgid "%s Flush block, write EOF\n" +msgstr "Flush de %s blocs, écriture de EOF\n" + +#: src/stored/btape.c:2317 +#, fuzzy +msgid "Wrote 1000 blocks on second tape. Done.\n" +msgstr "Ecriture de 1000 blocs de %d octets.\n" + +#: src/stored/btape.c:2322 +msgid "Not OK\n" msgstr "" -#: src/dird/dird_conf.c:594 -#, c-format -msgid "Counter: name=%s min=%d max=%d cur=%d wrapcntr=%s\n" +#: src/stored/btape.c:2346 +#, fuzzy +msgid "Job canceled.\n" +msgstr "Le job %s est annulé.\n" + +#: src/stored/btape.c:2357 +msgid "Set ok=false after write_block_to_device.\n" msgstr "" -#: src/dird/dird_conf.c:599 +#: src/stored/btape.c:2361 +msgid "Wrote End of Session label.\n" +msgstr "Écriture du label de fin de session.\n" + +#: src/stored/btape.c:2385 #, c-format -msgid "Counter: name=%s min=%d max=%d\n" -msgstr "" +msgid "Wrote state file last_block_num1=%d last_block_num2=%d\n" +msgstr "Écriture du fichier d'état last_block_num1=%d last_block_num2=%d\n" -#: src/dird/dird_conf.c:613 +#: src/stored/btape.c:2389 #, c-format -msgid "Client: name=%s address=%s FDport=%d MaxJobs=%u\n" -msgstr "" +msgid "Could not create state file: %s ERR=%s\n" +msgstr "Impossible de créer le fichier d'état : %s ERR=%s\n" -#: src/dird/dird_conf.c:616 +#: src/stored/btape.c:2400 #, c-format -msgid " JobRetention=%s FileRetention=%s AutoPrune=%d\n" +msgid "" +"\n" +"\n" +"%s Done filling tape at %d:%d. Now beginning re-read of tape ...\n" msgstr "" -#: src/dird/dird_conf.c:629 +#: src/stored/btape.c:2403 #, c-format msgid "" -"Device: name=%s ok=%d num_writers=%d max_writers=%d\n" -" reserved=%d open=%d append=%d read=%d labeled=%d offline=%d autochgr=" -"%d\n" -" poolid=%s volname=%s MediaType=%s\n" +"\n" +"\n" +"%s Done filling tapes at %d:%d. Now beginning re-read of first tape ...\n" msgstr "" -#: src/dird/dird_conf.c:643 -#, c-format +#: src/stored/btape.c:2409 +#, fuzzy +msgid "do_unfill failed.\n" +msgstr "Job échoué.\n" + +#: src/stored/btape.c:2414 +#, fuzzy, c-format +msgid "%s: Error during test.\n" +msgstr "Erreur pendant l'envoi de la liste d'inclusion.\n" + +#: src/stored/btape.c:2449 msgid "" -"Storage: name=%s address=%s SDport=%d MaxJobs=%u\n" -" DeviceName=%s MediaType=%s StorageId=%s\n" +"\n" +"The state file level has changed. You must redo\n" +"the fill command.\n" msgstr "" -#: src/dird/dird_conf.c:656 +#: src/stored/btape.c:2456 #, c-format msgid "" -"Catalog: name=%s address=%s DBport=%d db_name=%s\n" -" db_driver=%s db_user=%s MutliDBConn=%d\n" +"\n" +"Could not find the state file: %s ERR=%s\n" +"You must redo the fill command.\n" msgstr "" +"\n" +"Impossible de trouver le fichier d'état : %s ERR=%s\n" +"Vous devez relancer la commande « fill ».\n" -#: src/dird/dird_conf.c:669 -#, c-format -msgid "%s: name=%s JobType=%d level=%s Priority=%d Enabled=%d\n" -msgstr "" +#: src/stored/btape.c:2522 +msgid "Mount first tape. Press enter when ready: " +msgstr "Chargez la première bande et appuyez sur « Entrée » : " -#: src/dird/dird_conf.c:670 -msgid "JobDefs" -msgstr "JobDefs" +#: src/stored/btape.c:2538 +msgid "Rewinding.\n" +msgstr "Rembobinage.\n" -#: src/dird/dird_conf.c:674 +#: src/stored/btape.c:2543 #, c-format -msgid "" -" MaxJobs=%u Resched=%d Times=%d Interval=%s Spool=%d WritePartAfterJob=" -"%d\n" -msgstr "" +msgid "Reading the first 10000 records from %u:%u.\n" +msgstr "Lecture des 10000 premiers enregistrements depuis %u:%u.\n" -#: src/dird/dird_conf.c:680 +#: src/stored/btape.c:2547 src/stored/btape.c:2615 #, c-format -msgid " SpoolSize=%s\n" -msgstr "" +msgid "Reposition from %u:%u to %u:%u\n" +msgstr "Re-positionnement de %u:%u à %u:%u\n" -#: src/dird/dird_conf.c:683 +#: src/stored/btape.c:2550 src/stored/btape.c:2602 src/stored/btape.c:2618 #, c-format -msgid " Accurate=%d\n" -msgstr "" +msgid "Reposition error. ERR=%s\n" +msgstr "Erreur pendant le re-positionnement. ERR=%s\n" -#: src/dird/dird_conf.c:686 +#: src/stored/btape.c:2553 #, c-format -msgid " SelectionType=%d\n" -msgstr "" +msgid "Reading block %u.\n" +msgstr "Lecture du bloc %u.\n" -#: src/dird/dird_conf.c:701 +#: src/stored/btape.c:2555 src/stored/btape.c:2607 src/stored/btape.c:2623 #, c-format -msgid " --> Where=%s\n" +msgid "Error reading block: ERR=%s\n" msgstr "" -#: src/dird/dird_conf.c:704 -#, c-format -msgid " --> RegexWhere=%s\n" -msgstr " --> RegexWhere=%s\n" - -#: src/dird/dird_conf.c:707 -#, c-format -msgid " --> Bootstrap=%s\n" +#: src/stored/btape.c:2560 +msgid "" +"\n" +"The last block on the tape matches. Test succeeded.\n" +"\n" msgstr "" -#: src/dird/dird_conf.c:710 -#, c-format -msgid " --> WriteBootstrap=%s\n" +#: src/stored/btape.c:2563 +msgid "" +"\n" +"The last block of the first tape matches.\n" +"\n" msgstr "" -#: src/dird/dird_conf.c:713 -#, fuzzy, c-format -msgid " --> PluginOptions=%s\n" -msgstr " --> RunOnSuccess=%u\n" - -#: src/dird/dird_conf.c:716 -#, c-format -msgid " --> MaxRunTime=%u\n" -msgstr " --> MaxRunTime=%u\n" +#: src/stored/btape.c:2587 +msgid "Mount second tape. Press enter when ready: " +msgstr "Chargez une deuxième bande et appuyez sur « Entrée » : " -#: src/dird/dird_conf.c:719 +#: src/stored/btape.c:2600 #, c-format -msgid " --> MaxWaitTime=%u\n" -msgstr " --> MaxWaitTime=%u\n" +msgid "Reposition from %u:%u to 0:1\n" +msgstr "Re-positionnement de %u:%u à 0:1\n" -#: src/dird/dird_conf.c:722 +#: src/stored/btape.c:2605 src/stored/btape.c:2621 #, c-format -msgid " --> MaxStartDelay=%u\n" -msgstr " --> MaxStartDelay=%u\n" - -#: src/dird/dird_conf.c:725 -#, fuzzy, c-format -msgid " --> MaxRunSchedTime=%u\n" -msgstr " --> MaxRunTime=%u\n" +msgid "Reading block %d.\n" +msgstr "Lecture du bloc %d.\n" -#: src/dird/dird_conf.c:737 -#, fuzzy, c-format -msgid " --> Base %s\n" -msgstr " --> Target=%s\n" +#: src/stored/btape.c:2611 +msgid "" +"\n" +"The first block on the second tape matches.\n" +"\n" +msgstr "" -#: src/dird/dird_conf.c:743 src/lib/runscript.c:297 -msgid " --> RunScript\n" -msgstr " --> RunScript\n" +#: src/stored/btape.c:2627 +msgid "" +"\n" +"The last block on the second tape matches. Test succeeded.\n" +"\n" +msgstr "" -#: src/dird/dird_conf.c:744 src/lib/runscript.c:298 +#: src/stored/btape.c:2645 #, c-format -msgid " --> Command=%s\n" -msgstr " --> Command=%s\n" +msgid "10000 records read now at %d:%d\n" +msgstr "10000 enregistrements lus maintenant à %d:%d\n" -#: src/dird/dird_conf.c:745 src/lib/runscript.c:299 -#, c-format -msgid " --> Target=%s\n" -msgstr " --> Target=%s\n" +#: src/stored/btape.c:2671 src/stored/btape.c:2682 src/stored/btape.c:2727 +msgid "Last block written" +msgstr "Dernier bloc écrit" -#: src/dird/dird_conf.c:746 src/lib/runscript.c:300 -#, c-format -msgid " --> RunOnSuccess=%u\n" -msgstr " --> RunOnSuccess=%u\n" +#: src/stored/btape.c:2673 src/stored/btape.c:2683 +msgid "Block read back" +msgstr "" -#: src/dird/dird_conf.c:747 src/lib/runscript.c:301 +#: src/stored/btape.c:2674 #, c-format -msgid " --> RunOnFailure=%u\n" -msgstr " --> RunOnFailure=%u\n" +msgid "" +"\n" +"\n" +"The blocks differ at byte %u\n" +msgstr "" -#: src/dird/dird_conf.c:748 src/lib/runscript.c:302 -#, c-format -msgid " --> FailJobOnError=%u\n" +#: src/stored/btape.c:2675 +msgid "" +"\n" +"\n" +"!!!! The last block written and the block\n" +"that was read back differ. The test FAILED !!!!\n" +"This must be corrected before you use Bacula\n" +"to write multi-tape Volumes.!!!!\n" msgstr "" -#: src/dird/dird_conf.c:749 src/lib/runscript.c:303 +#: src/stored/btape.c:2711 #, c-format -msgid " --> RunWhen=%u\n" -msgstr " --> RunWhen=%u\n" +msgid "Last block at: %u:%u this_dev_block_num=%d\n" +msgstr "" -#: src/dird/dird_conf.c:775 +#: src/stored/btape.c:2725 #, c-format -msgid " --> Run=%s\n" +msgid "Block not written: FileIndex=%u blk_block=%u Size=%u\n" msgstr "" -#: src/dird/dird_conf.c:779 +#: src/stored/btape.c:2729 +msgid "Block not written" +msgstr "Bloc non écrit" + +#: src/stored/btape.c:2744 +#, fuzzy, c-format +msgid "End of tape %d:%d. Volume Bytes=%s. Write rate = %sB/s\n" +msgstr "Fin de média sur le Volume \"%s\" Octets=%s Blocs=%s à %s.\n" + +#: src/stored/btape.c:2754 src/stored/bcopy.c:272 src/stored/bcopy.c:280 +#: src/stored/bcopy.c:308 #, c-format -msgid " --> SelectionPattern=%s\n" +msgid "Cannot fixup device error. %s\n" msgstr "" -#: src/dird/dird_conf.c:793 -#, c-format -msgid "FileSet: name=%s\n" +#: src/stored/btape.c:2795 +msgid "Test writing blocks of 64512 bytes to tape.\n" msgstr "" -#: src/dird/dird_conf.c:887 src/dird/dird_conf.c:966 -#, c-format -msgid "Schedule: name=%s\n" +#: src/stored/btape.c:2797 +msgid "How many blocks do you want to write? (1000): " msgstr "" -#: src/dird/dird_conf.c:892 +#: src/stored/btape.c:2814 #, c-format -msgid " --> Run Level=%s\n" +msgid "Begin writing %d Bacula blocks to tape ...\n" msgstr "" -#: src/dird/dird_conf.c:893 -msgid " hour=" +#: src/stored/btape.c:2857 +#, c-format +msgid "Begin writing raw blocks of %u bytes.\n" msgstr "" -#: src/dird/dird_conf.c:902 -msgid " mday=" +#: src/stored/btape.c:2888 +msgid "test autochanger" msgstr "" -#: src/dird/dird_conf.c:911 -msgid " month=" +#: src/stored/btape.c:2889 +msgid "backspace file" msgstr "" -#: src/dird/dird_conf.c:920 -msgid " wday=" +#: src/stored/btape.c:2890 +msgid "backspace record" msgstr "" -#: src/dird/dird_conf.c:929 -msgid " wom=" +#: src/stored/btape.c:2891 +msgid "list device capabilities" msgstr "" -#: src/dird/dird_conf.c:938 -msgid " woy=" +#: src/stored/btape.c:2892 +msgid "clear tape errors" msgstr "" -#: src/dird/dird_conf.c:947 -#, c-format -msgid " mins=%d\n" +#: src/stored/btape.c:2893 +msgid "go to end of Bacula data for append" msgstr "" -#: src/dird/dird_conf.c:949 src/dird/dird_conf.c:953 src/dird/dird_conf.c:957 -msgid " --> " +#: src/stored/btape.c:2894 +msgid "go to the physical end of medium" msgstr "" -#: src/dird/dird_conf.c:974 -#, c-format -msgid "Pool: name=%s PoolType=%s\n" +#: src/stored/btape.c:2895 +msgid "fill tape, write onto second volume" msgstr "" -#: src/dird/dird_conf.c:976 -#, c-format -msgid " use_cat=%d use_once=%d cat_files=%d\n" +#: src/stored/btape.c:2896 +msgid "read filled tape" msgstr "" -#: src/dird/dird_conf.c:979 -#, c-format -msgid " max_vols=%d auto_prune=%d VolRetention=%s\n" +#: src/stored/btape.c:2897 +msgid "forward space a file" msgstr "" -#: src/dird/dird_conf.c:982 -#, c-format -msgid " VolUse=%s recycle=%d LabelFormat=%s\n" +#: src/stored/btape.c:2898 +msgid "forward space a record" msgstr "" -#: src/dird/dird_conf.c:986 -#, c-format -msgid " CleaningPrefix=%s LabelType=%d\n" -msgstr "" +#: src/stored/btape.c:2899 +msgid "print this command" +msgstr "affiche cette commande" -#: src/dird/dird_conf.c:988 -#, c-format -msgid " RecyleOldest=%d PurgeOldest=%d ActionOnPurge=%d\n" +#: src/stored/btape.c:2900 +msgid "write a Bacula label to the tape" msgstr "" -#: src/dird/dird_conf.c:992 -#, c-format -msgid " MaxVolJobs=%d MaxVolFiles=%d MaxVolBytes=%s\n" +#: src/stored/btape.c:2901 +msgid "load a tape" msgstr "" -#: src/dird/dird_conf.c:996 -#, c-format -msgid " MigTime=%s MigHiBytes=%s MigLoBytes=%s\n" +#: src/stored/btape.c:2902 +msgid "quit btape" msgstr "" -#: src/dird/dird_conf.c:1000 -#, c-format -msgid " JobRetention=%s FileRetention=%s\n" +#: src/stored/btape.c:2903 +msgid "use write() to fill tape" msgstr "" -#: src/dird/dird_conf.c:1004 -#, c-format -msgid " NextPool=%s\n" +#: src/stored/btape.c:2904 +msgid "read and print the Bacula tape label" msgstr "" -#: src/dird/dird_conf.c:1007 -#, c-format -msgid " RecyclePool=%s\n" +#: src/stored/btape.c:2905 +msgid "test record handling functions" msgstr "" -#: src/dird/dird_conf.c:1010 -#, fuzzy, c-format -msgid " ScratchPool=%s\n" -msgstr "Utilisation du Catalogue \"%s\"\n" - -#: src/dird/dird_conf.c:1013 -#, fuzzy, c-format -msgid " Catalog=%s\n" -msgstr "Utilisation du Catalogue \"%s\"\n" +#: src/stored/btape.c:2906 +msgid "rewind the tape" +msgstr "rembobine la bande" -#: src/dird/dird_conf.c:1033 -#, c-format -msgid "Messages: name=%s\n" +#: src/stored/btape.c:2907 +msgid "read() tape block by block to EOT and report" msgstr "" -#: src/dird/dird_conf.c:1035 -#, c-format -msgid " mailcmd=%s\n" -msgstr "" +#: src/stored/btape.c:2908 +msgid "Bacula read block by block to EOT and report" +msgstr "Bacula lit bloc par bloc jusqu'à la fin de la bande (EOT) et résume" -#: src/dird/dird_conf.c:1037 -#, c-format -msgid " opcmd=%s\n" +#: src/stored/btape.c:2909 +msgid "" +"[file_size=n(GB)|nb_file=3|skip_zero|skip_random|skip_raw|skip_block] report " +"drive speed" msgstr "" -#: src/dird/dird_conf.c:1041 src/tray-monitor/tray_conf.c:199 -#: src/qt-console/tray-monitor/tray_conf.cpp:199 -#, c-format -msgid "Unknown resource type %d in dump_resource.\n" +#: src/stored/btape.c:2910 +msgid "print tape status" msgstr "" -#: src/dird/dird_conf.c:1372 src/tray-monitor/tray_conf.c:257 -#: src/qt-console/tray-monitor/tray_conf.cpp:257 -#, c-format -msgid "Unknown resource type %d in free_resource.\n" -msgstr "" +#: src/stored/btape.c:2911 +msgid "General test Bacula tape functions" +msgstr "test général des fonctions Bacula sur un lecteur de bande" -#: src/dird/dird_conf.c:1404 src/dird/dird_conf.c:1419 -#: src/tray-monitor/tray_conf.c:288 src/wx-console/console_conf.c:265 -#: src/console/console_conf.c:259 src/filed/filed_conf.c:361 -#: src/qt-console/tray-monitor/tray_conf.cpp:288 -#: src/qt-console/bat_conf.cpp:265 -#, c-format -msgid "%s item is required in %s resource, but not found.\n" +#: src/stored/btape.c:2912 +msgid "write an EOF on the tape" +msgstr "écrit un EOF sur la bande" + +#: src/stored/btape.c:2913 +msgid "write a single Bacula block" +msgstr "écrit un seul bloc bacula" + +#: src/stored/btape.c:2914 +msgid "read a single record" +msgstr "lit un seul enregistrement" + +#: src/stored/btape.c:2915 +msgid "read a single Bacula block" +msgstr "lit un seul bloc bacula" + +#: src/stored/btape.c:2916 +msgid "quick fill command" msgstr "" -#: src/dird/dird_conf.c:1410 src/tray-monitor/tray_conf.c:294 -#: src/lib/parse_conf.c:225 src/qt-console/tray-monitor/tray_conf.cpp:294 +#: src/stored/btape.c:2937 #, c-format -msgid "Too many items in %s resource\n" -msgstr "Trop d'élément dans la ressource %s\n" +msgid "\"%s\" is an invalid command\n" +msgstr "\"%s\" est une commande invalide.\n" -#: src/dird/dird_conf.c:1450 +#: src/stored/btape.c:2946 #, c-format -msgid "Cannot find Pool resource %s\n" -msgstr "Impossible de trouver la ressource Pool \"%s\"\n" +msgid "Interactive commands:\n" +msgstr "" -#: src/dird/dird_conf.c:1461 +#: src/stored/btape.c:2947 src/dird/ua_tree.c:794 #, c-format -msgid "Cannot find Console resource %s\n" -msgstr "Impossible de trouver la ressource Console \"%s\"\n" +msgid "" +" Command Description\n" +" ======= ===========\n" +msgstr "" +" Commande Description\n" +" ======== ===========\n" -#: src/dird/dird_conf.c:1467 src/stored/stored_conf.c:611 -#: src/filed/filed_conf.c:381 -#, c-format -msgid "Cannot find Director resource %s\n" -msgstr "Impossible de trouver la ressource Director \"%s\"\n" +#: src/stored/btape.c:2957 +#, fuzzy, c-format +msgid "" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: btape \n" +" -b specify bootstrap file\n" +" -c set configuration file to file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -p proceed inspite of I/O errors\n" +" -s turn off signals\n" +" -v be verbose\n" +" -? print this message.\n" +"\n" +msgstr "" +") %s %s %s\n" +"\n" +"Usage : bconsole [-s] [-c config_file] [-d niveau_debug]\n" +" -c set configuration file to file\n" +" -dnn set debug level to nn\n" +" -s no signals\n" +" -t test - lecture de la configuration et sortie\n" +"\n" -#: src/dird/dird_conf.c:1474 src/stored/stored_conf.c:617 +#: src/stored/btape.c:3045 #, c-format -msgid "Cannot find Storage resource %s\n" -msgstr "Impossible de trouver la ressource Storage \"%s\"\n" +msgid "Mount second Volume on device %s and press return when ready: " +msgstr "" -#: src/dird/dird_conf.c:1483 +#: src/stored/btape.c:3048 src/stored/bls.c:478 src/stored/bextract.c:609 +#: src/stored/bscan.c:1354 src/stored/bcopy.c:365 #, c-format -msgid "Cannot find Job resource %s\n" -msgstr "Impossible de trouver la ressource Job \"%s\"\n" +msgid "Mount Volume \"%s\" on device %s and press return when ready: " +msgstr "" -#: src/dird/dird_conf.c:1533 +#: src/stored/btape.c:3073 #, c-format -msgid "Cannot find Counter resource %s\n" -msgstr "Impossible de trouver la ressource Counter \"%s\"\n" +msgid "Mount blank Volume on device %s and press return when ready: " +msgstr "" -#: src/dird/dird_conf.c:1541 src/filed/filed_conf.c:387 -#, c-format -msgid "Cannot find Client resource %s\n" -msgstr "Impossible de trouver la ressource Client \"%s\"\n" +#: src/stored/btape.c:3093 +#, fuzzy, c-format +msgid "End of Volume \"%s\" %d records.\n" +msgstr "Le volume \"%s\" existe déjà en base.\n" -#: src/dird/dird_conf.c:1554 -#, c-format -msgid "Cannot find Schedule resource %s\n" -msgstr "Impossible de trouver la ressource Schedule \"%s\"\n" +#: src/stored/btape.c:3107 +#, fuzzy, c-format +msgid "Read block=%u, VolBytes=%s rate=%sB/s\n" +msgstr "Écriture blk_block=%u, dev_blk_num=%u VolBytes=%s rate=%.1f KB/s\n" -#: src/dird/dird_conf.c:1559 src/dird/dird_conf.c:1619 -#: src/tray-monitor/tray_conf.c:314 src/tray-monitor/tray_conf.c:352 -#: src/qt-console/tray-monitor/tray_conf.cpp:314 -#: src/qt-console/tray-monitor/tray_conf.cpp:352 +#: src/stored/btape.c:3120 #, c-format -msgid "Unknown resource type %d in save_resource.\n" +msgid "Cannot open Dev=%s, Vol=%s\n" msgstr "" -#: src/dird/dird_conf.c:1634 +#: src/stored/record_read.c:164 src/stored/record.c:658 #, c-format -msgid "Name item is required in %s resource, but not found.\n" +msgid "Sanity check failed. maxlen=%d datalen=%d. Block discarded.\n" msgstr "" -#: src/dird/dird_conf.c:1642 src/tray-monitor/tray_conf.c:372 -#: src/wx-console/console_conf.c:328 src/console/console_conf.c:322 -#: src/filed/filed_conf.c:446 src/qt-console/tray-monitor/tray_conf.cpp:372 -#: src/qt-console/bat_conf.cpp:334 +#: src/stored/spool.c:71 +#, fuzzy +msgid "Spooling statistics:\n" +msgstr "Spooling des données...\n" + +#: src/stored/spool.c:74 #, c-format -msgid "Attempt to define second %s resource named \"%s\" is not permitted.\n" +msgid "" +"Data spooling: %u active jobs, %s bytes; %u total jobs, %s max bytes/job.\n" msgstr "" -#: src/dird/dird_conf.c:1647 +#: src/stored/spool.c:82 #, c-format -msgid "Inserting %s res: %s index=%d pass=%d\n" +msgid "Attr spooling: %u active jobs, %s bytes; %u total jobs, %s max bytes.\n" msgstr "" -#: src/dird/dird_conf.c:1660 -#, fuzzy, c-format -msgid "Expected one of: %s, got: %s" -msgstr "Attendait %s, a pas : %s" +#: src/stored/spool.c:100 +msgid "Spooling data ...\n" +msgstr "Spooling des données...\n" -#: src/dird/dird_conf.c:1732 +#: src/stored/spool.c:126 #, c-format -msgid "Expected a Migration Job Type keyword, got: %s" -msgstr "Attendait un type de Job de Migration, eu : %s" +msgid "Bad return from despool WroteVol=%d\n" +msgstr "" -#: src/dird/dird_conf.c:1758 +#: src/stored/spool.c:159 #, c-format -msgid "Expected a Job Type keyword, got: %s" +msgid "Open data spool file %s failed: ERR=%s\n" +msgstr "Erreur pendant l'ouverture fichier de spool %s. ERR=%s\n" + +#: src/stored/spool.c:187 +msgid "Despooling zero bytes. Your disk is probably FULL!\n" msgstr "" -#: src/dird/dird_conf.c:1782 +#: src/stored/spool.c:196 #, c-format -msgid "Expected a Job Level keyword, got: %s" -msgstr "Attendait un niveau de sauvegarde, eu : %s" +msgid "Committing spooled data to Volume \"%s\". Despooling %s bytes ...\n" +msgstr "" +"Transfert des données spoolées sur le Volume \"%s\". Transfert de %s " +"octets...\n" -#: src/dird/dird_conf.c:1802 +#: src/stored/spool.c:201 #, c-format -msgid "Expected a Restore replacement option, got: %s" -msgstr "Attendait un niveau de remplacement, eu : %s" +msgid "Writing spooled data to Volume. Despooling %s bytes ...\n" +msgstr "" +"Écriture des données spoolées sur le Volume. Transfert de %s octets...\n" -#: src/dird/dird_conf.c:1852 src/dird/dird_conf.c:1968 -#: src/lib/parse_conf.c:761 src/lib/parse_conf.c:777 src/lib/ini.c:593 +#: src/stored/spool.c:272 src/stored/acquire.c:517 src/stored/block_util.c:552 +#: src/stored/block_util.c:622 src/stored/block_util.c:652 #, c-format -msgid "Expect %s, got: %s" -msgstr "Attendait %s, a pas : %s" +msgid "Could not create JobMedia record for Volume=\"%s\" Job=%s\n" +msgstr "Impossible de créer un JobMedia en base pour le Volume=%s Job=%s\n" -#: src/dird/dird_conf.c:1874 src/lib/parse_conf.c:478 -#, c-format -msgid "Could not find config Resource %s referenced on line %d : %s\n" +#: src/stored/spool.c:290 +#, fuzzy, c-format +msgid "" +"Despooling elapsed time = %02d:%02d:%02d, Transfer rate = %s Bytes/second\n" msgstr "" +"Temps du transfert des données spoolées = %02d:%02d:%02d, Taux de transfert " +"= %s o/s\n" -#: src/dird/getmsg.c:176 +#: src/stored/spool.c:299 src/stored/spool.c:500 src/stored/spool.c:546 #, c-format -msgid "bget_dirmsg: unknown bnet signal %d\n" -msgstr "bget_dirmsg : signal bnet inconnu %d\n" +msgid "Ftruncate spool file failed: ERR=%s\n" +msgstr "" -#: src/dird/getmsg.c:194 src/dird/getmsg.c:200 src/dird/getmsg.c:213 -#: src/dird/getmsg.c:247 src/dird/getmsg.c:269 src/dird/getmsg.c:295 +#: src/stored/spool.c:358 #, c-format -msgid "Malformed message: %s\n" -msgstr "Message mal formé : %s\n" +msgid "Spool header read error. ERR=%s\n" +msgstr "" -#: src/dird/getmsg.c:367 +#: src/stored/spool.c:361 #, c-format -msgid "Bad response to %s command: wanted %s, got %s\n" -msgstr "Mauvaise réponse à la commande %s : voulait %s, pas %s\n" +msgid "Spool read error. Wanted %u bytes, got %d\n" +msgstr "" -#: src/dird/getmsg.c:372 +#: src/stored/spool.c:362 #, c-format -msgid "Socket error on %s command: ERR=%s\n" -msgstr "Erreur de socket sur la commande %s : ERR=%s\n" +msgid "Spool header read error. Wanted %u bytes, got %d\n" +msgstr "" -#: src/dird/ua_restore.c:148 -msgid "\"RegexWhere\" specification not authorized.\n" +#: src/stored/spool.c:369 src/stored/spool.c:370 +#, c-format +msgid "Spool block too big. Max %u bytes, got %u\n" msgstr "" -#: src/dird/ua_restore.c:155 -msgid "\"where\" specification not authorized.\n" +#: src/stored/spool.c:376 src/stored/spool.c:377 +#, c-format +msgid "Spool data read error. Wanted %u bytes, got %d\n" msgstr "" -#: src/dird/ua_restore.c:177 +#: src/stored/spool.c:431 +#, fuzzy, c-format msgid "" -"No Restore Job Resource found in bacula-dir.conf.\n" -"You must create at least one before running this command.\n" -msgstr "" +"User specified Job spool size reached: JobSpoolSize=%s MaxJobSpoolSize=%s\n" +msgstr "Taille du spool spécifiée par l'utlisateur atteinte.\n" -#: src/dird/ua_restore.c:194 -msgid "Restore not done.\n" -msgstr "Restauration non effectuée.\n" +#: src/stored/spool.c:436 +#, fuzzy, c-format +msgid "" +"User specified Device spool size reached: DevSpoolSize=%s MaxDevSpoolSize=" +"%s\n" +msgstr "Taille du spool spécifiée par l'utlisateur atteinte.\n" -#: src/dird/ua_restore.c:205 -msgid "Unable to construct a valid BSR. Cannot continue.\n" -msgstr "Impossible de générer un fichier bootstrap valide. Abandon.\n" +#: src/stored/spool.c:443 +msgid "Bad return from despool in write_block.\n" +msgstr "" -#: src/dird/ua_restore.c:209 src/dird/ua_restore.c:221 -msgid "No files selected to be restored.\n" -msgstr "Aucun fichier sélectionné pour la restauration.\n" +#: src/stored/spool.c:451 +msgid "Spooling data again ...\n" +msgstr "Reprise du spool des données...\n" -#: src/dird/ua_restore.c:215 -msgid "" -"\n" -"1 file selected to be restored.\n" -"\n" +#: src/stored/spool.c:483 +#, c-format +msgid "Error writing header to spool file. ERR=%s\n" msgstr "" -"\n" -"1 fichier sélectionne pour la restauration.\n" -"\n" -#: src/dird/ua_restore.c:217 +#: src/stored/spool.c:488 #, c-format msgid "" -"\n" -"%s files selected to be restored.\n" -"\n" +"Error writing header to spool file. Disk probably full. Attempting recovery. " +"Wanted to write=%d got=%d\n" msgstr "" -"\n" -"%s fichiers sélectionnés pour la restauration.\n" -#: src/dird/ua_restore.c:236 -#, fuzzy -msgid "No Client resource found!\n" -msgstr "Pas de ressource « Restore Job » trouvée !\n" +#: src/stored/spool.c:506 src/stored/spool.c:552 +msgid "Fatal despooling error." +msgstr "" -#: src/dird/ua_restore.c:333 -#, fuzzy -msgid "The restore will use the following job(s) as Base\n" -msgstr "Le job va utiliser les volumes suivants :\n" +#: src/stored/spool.c:514 +msgid "Retrying after header spooling error failed.\n" +msgstr "" -#: src/dird/ua_restore.c:354 +#: src/stored/spool.c:530 #, c-format -msgid "Missing value for keyword: %s\n" +msgid "Error writing data to spool file. ERR=%s\n" msgstr "" +"Erreur pendant l'écriture des données vers le fichier de spool. ERR=%s\n" -#: src/dird/ua_restore.c:434 -msgid "List last 20 Jobs run" -msgstr "Afficher les 20 derniers jobs lancés" +#: src/stored/spool.c:563 +msgid "Retrying after data spooling error failed.\n" +msgstr "" -#: src/dird/ua_restore.c:435 -msgid "List Jobs where a given File is saved" -msgstr "Afficher les jobs où un fichier donné a été sauvegardé" +#: src/stored/spool.c:650 +msgid "Network error on BlastAttributes.\n" +msgstr "" -#: src/dird/ua_restore.c:436 -msgid "Enter list of comma separated JobIds to select" -msgstr "Saisir une liste de JobIds à sélectionner (ex : 12,4,3)" +#: src/stored/spool.c:674 src/stored/spool.c:682 +#, c-format +msgid "Fseek on attributes file failed: ERR=%s\n" +msgstr "" -#: src/dird/ua_restore.c:437 -msgid "Enter SQL list command" -msgstr "Exécuter une requête SQL" +#: src/stored/spool.c:694 +#, c-format +msgid "Sending spooled attrs to the Director. Despooling %s bytes ...\n" +msgstr "" +"Transfert des attributs spoolés au Director. Transfert de %s octets...\n" -#: src/dird/ua_restore.c:438 -msgid "Select the most recent backup for a client" -msgstr "Sélectionner la sauvegarde la plus récente pour un client" +# Impossible d'ouvrir le fichier de spool des attributs : ERR=%s +#: src/stored/spool.c:720 +#, c-format +msgid "fopen attr spool file %s failed: ERR=%s\n" +msgstr "Impossible d'ouvrir le fichier de spool des attributs %s : ERR=%s\n" -#: src/dird/ua_restore.c:439 -msgid "Select backup for a client before a specified time" +#: src/stored/record.c:63 src/stored/record_util.c:61 +#, c-format +msgid "unknown: %d" msgstr "" -"Sélectionner la dernière sauvegarde pour un client avant une certaine date" - -#: src/dird/ua_restore.c:440 -msgid "Enter a list of files to restore" -msgstr "Saisir la liste des fichiers à restaurer" -#: src/dird/ua_restore.c:441 -msgid "Enter a list of files to restore before a specified time" -msgstr "Saisir la liste des fichiers à restaurer avant une certaine date" +#: src/stored/record.c:380 +msgid "Damaged buffer\n" +msgstr "" -#: src/dird/ua_restore.c:442 -msgid "Find the JobIds of the most recent backup for a client" -msgstr "Afficher les JobIds de sauvegarde les plus récents pour un client" +#: src/stored/bls.c:68 +#, fuzzy, c-format +msgid "" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: bls [options] \n" +" -b specify a bootstrap file\n" +" -c specify a Storage configuration file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -e exclude list\n" +" -i include list\n" +" -j list jobs\n" +" -k list blocks\n" +" (no j or k option) list saved files\n" +" -L dump label\n" +" -p proceed inspite of errors\n" +" -v be verbose\n" +" -V specify Volume names (separated by |)\n" +" -? print this message\n" +"\n" +msgstr "" +"Copyright (C) 2000-2005 Kern Sibbald.\n" +"\n" +"Version : %s (%s)\n" +"\n" +"Usage : dird [-f -s] [-c config_file] [-d debug_level] [config_file]\n" +" -c utilise fich comme fichier de configuration\n" +" -dnn positionne le niveau de debug à nn\n" +" -f reste en avant-plan (pour debugger)\n" +" -g groupid\n" +" -r lance maintenant\n" +" -s pas de signaux\n" +" -t test - lit seulement le fichier de configuration\n" +" -u userid\n" +" -v affiche les messages utilisateurs\n" +" -? affiche ce message.\n" +"\n" -#: src/dird/ua_restore.c:443 -msgid "Find the JobIds for a backup for a client before a specified time" -msgstr "Afficher les JobIds de sauvegarde avant une certaine date" +#: src/stored/bls.c:138 src/stored/bextract.c:141 +#, c-format +msgid "Could not open exclude file: %s, ERR=%s\n" +msgstr "" -#: src/dird/ua_restore.c:444 -msgid "Enter a list of directories to restore for found JobIds" -msgstr "Saisir la liste des répertoires à restaurer (pour un JobId)" +#: src/stored/bls.c:153 src/stored/bextract.c:156 +#, c-format +msgid "Could not open include file: %s, ERR=%s\n" +msgstr "" -#: src/dird/ua_restore.c:445 -#, fuzzy -msgid "Select full restore to a specified Job date" +#: src/stored/bls.c:200 +msgid "No archive name specified\n" msgstr "" -"Sélectionner la dernière sauvegarde pour un client avant une certaine date" -#: src/dird/ua_restore.c:446 src/dird/ua_status.c:862 src/stored/status.c:611 -#: src/filed/status.c:373 src/wx-console/wxbconfigpanel.cpp:220 -msgid "Cancel" -msgstr "Annulé" +#: src/stored/bls.c:238 +#, c-format +msgid "" +"\n" +"Warning, this Volume is a continuation of Volume %s\n" +msgstr "" -#: src/dird/ua_restore.c:491 +#: src/stored/bls.c:281 #, c-format -msgid "Unknown keyword: %s\n" -msgstr "Mot clef inconnu : %s\n" +msgid "Got EOM at file %u on device %s, Volume \"%s\"\n" +msgstr "" -#: src/dird/ua_restore.c:520 src/dird/ua_update.c:957 +#: src/stored/bls.c:292 #, c-format -msgid "Improper date format: %s\n" -msgstr "Format de date invalide : %s\n" +msgid "Mounted Volume \"%s\".\n" +msgstr "" -#: src/dird/ua_restore.c:560 +#: src/stored/bls.c:294 #, c-format -msgid "Error: Pool resource \"%s\" access not allowed.\n" -msgstr "Erreur : l'utilisation du Pool \"%s\" n'est pas autorisé.\n" +msgid "End of file %u on device %s, Volume \"%s\"\n" +msgstr "" -#: src/dird/ua_restore.c:576 +#: src/stored/bls.c:318 +#, c-format msgid "" -"\n" -"First you select one or more JobIds that contain files\n" -"to be restored. You will be presented several methods\n" -"of specifying the JobIds. Then you will be allowed to\n" -"select which files from those JobIds are to be restored.\n" -"\n" +"File:blk=%u:%u blk_num=%u blen=%u First rec FI=%s SessId=%u SessTim=%u Strm=" +"%s rlen=%d\n" msgstr "" -"\n" -"\n" -"D'abord, vous devez sélectionner un ou plusieurs jobs (par leur JobId) qui\n" -"contiennent les fichiers à restaurer. Il vous est présenté plusieurs " -"méthodes\n" -"pour choisir le bon JobId. Après, vous pourrez sélectionner les fichiers à\n" -"restaurer parmi la liste totale des fichiers présents dans les jobs\n" -"sélectionnés.\n" -#: src/dird/ua_restore.c:589 -msgid "To select the JobIds, you have the following choices:\n" -msgstr "Pour sélectionner les JobIds, vous avez les possibilités suivantes :\n" +#: src/stored/bls.c:327 +#, c-format +msgid "Block: %d size=%d\n" +msgstr "Bloc : %d taille=%d\n" -#: src/dird/ua_restore.c:594 -msgid "Select item: " -msgstr "Choix : " +#: src/stored/bls.c:385 src/stored/bextract.c:325 src/stored/bscan.c:674 +msgid "Cannot continue.\n" +msgstr "" -#: src/dird/ua_restore.c:599 src/dird/ua_restore.c:634 -msgid "SQL query not authorized.\n" +#: src/stored/bls.c:387 +msgid "Attrib unpack error!\n" msgstr "" -#: src/dird/ua_restore.c:612 -msgid "Enter Filename (no path):" -msgstr "Saisissez le nom du fichier (sans le chemin) : " +#: src/stored/bls.c:398 +#, c-format +msgid "FileIndex=%d VolSessionId=%d VolSessionTime=%d Stream=%d DataLen=%d\n" +msgstr "" -#: src/dird/ua_restore.c:627 src/dird/ua_restore.c:735 -msgid "Enter JobId(s), comma separated, to restore: " -msgstr "Saisissez le ou les JobIds à restaurer (ex : id1,id2,id3) : " +#: src/stored/bls.c:424 src/stored/bcopy.c:322 src/stored/read_records.c:387 +msgid "Fresh Volume Label" +msgstr "" -#: src/dird/ua_restore.c:637 -msgid "Enter SQL list command: " -msgstr "Exécuter une requête SQL : " +#: src/stored/bls.c:427 src/stored/bcopy.c:325 src/stored/read_records.c:390 +msgid "Volume Label" +msgstr "" -#: src/dird/ua_restore.c:671 src/dird/ua_restore.c:694 -msgid "" -"Enter file names with paths, or < to enter a filename\n" -"containing a list of file names with paths, and terminate\n" -"them with a blank line.\n" +#: src/stored/bls.c:431 src/stored/label.c:1128 src/stored/bcopy.c:329 +msgid "Begin Job Session" msgstr "" -"Saisissez les répertoires complets ou bien < pour saisir le nom d'un\n" -"fichier contenant la liste des répertoires et\n" -"terminez la saisie par une ligne vide.\n" -#: src/dird/ua_restore.c:675 src/dird/ua_restore.c:698 -msgid "Enter full filename: " -msgstr "Saisissez le nom complet du fichier : " +#: src/stored/bls.c:436 src/stored/label.c:1131 src/stored/bcopy.c:333 +msgid "End Job Session" +msgstr "" -#: src/dird/ua_restore.c:733 -#, c-format -msgid "You have already selected the following JobIds: %s\n" -msgstr "Vous avez déjà sélectionné les JobIds suivants : %s\n" +#: src/stored/bls.c:440 src/stored/bcopy.c:338 +msgid "End of Medium" +msgstr "" -#: src/dird/ua_restore.c:751 -msgid "" -"Enter full directory names or start the name\n" -"with a < to indicate it is a filename containing a list\n" -"of directories and terminate them with a blank line.\n" +#: src/stored/bls.c:443 +msgid "End of Physical Medium" msgstr "" -"Saisissez les répertoires complets ou bien le nom d'un\n" -"fichier (commençant par <) contenant la liste des répertoires et\n" -"terminez la saisie par une ligne vide.\n" -#: src/dird/ua_restore.c:755 -msgid "Enter directory name: " -msgstr "Saisissez le nom d'un répertoire : " +#: src/stored/bls.c:446 +msgid "Start of object" +msgstr "" -#: src/dird/ua_restore.c:771 -#, fuzzy -msgid "Enter JobId to get the state to restore: " -msgstr "Saisissez le JobId à supprimer : " +#: src/stored/bls.c:449 +msgid "End of object" +msgstr "" -#: src/dird/ua_restore.c:784 -#, c-format -msgid "Selecting jobs to build the Full state at %s\n" +#: src/stored/bls.c:452 src/stored/label.c:1140 src/stored/bcopy.c:341 +msgid "Unknown" msgstr "" -#: src/dird/ua_restore.c:810 -msgid "Invalid JobId in list.\n" +#: src/stored/bls.c:459 src/stored/bcopy.c:347 src/stored/read_records.c:408 +#, c-format +msgid "%s Record: VolSessionId=%d VolSessionTime=%d JobId=%d DataLen=%d\n" msgstr "" -#: src/dird/ua_restore.c:829 +#: src/stored/wait.c:121 #, c-format -msgid "Access to JobId=%s (Job \"%s\") not authorized. Not selected.\n" +msgid "pthread timedwait error. ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:842 -msgid "No Jobs selected.\n" -msgstr "Pas de job sélectionné.\n" +#: src/stored/wait.c:227 +#, fuzzy, c-format +msgid "JobId=%s, Job %s waiting to reserve a device.\n" +msgstr "Le job %s est en attente de réservation d'un device.\n" -#: src/dird/ua_restore.c:847 +#: src/stored/wait.c:273 +#, fuzzy, c-format +msgid "JobId=%s, Job %s waiting device %s.\n" +msgstr "Le job %s est en attente de réservation d'un device.\n" + +#: src/stored/device.c:120 #, c-format -msgid "You have selected the following JobIds: %s\n" -msgstr "Vous avez sélectionné les JobIds suivants : %s\n" +msgid "End of medium on Volume \"%s\" Bytes=%s Blocks=%s at %s.\n" +msgstr "Fin de média sur le Volume \"%s\" Octets=%s Blocs=%s à %s.\n" -#: src/dird/ua_restore.c:849 +#: src/stored/device.c:146 #, c-format -msgid "You have selected the following JobId: %s\n" -msgstr "Vous avez sélectionné le JobId suivant : %s\n" +msgid "New volume \"%s\" mounted on device %s at %s.\n" +msgstr "Nouveau volume \"%s\" monté sur le device %s à %s.\n" -#: src/dird/ua_restore.c:859 -msgid "" -"The restored files will the most current backup\n" -"BEFORE the date you specify below.\n" -"\n" +#: src/stored/device.c:158 +#, c-format +msgid "write_block_to_device Volume label failed. ERR=%s" msgstr "" -#: src/dird/ua_restore.c:862 -msgid "Enter date as YYYY-MM-DD HH:MM:SS :" -msgstr "Saisissez la date au format YYYY-MM-DD HH:MM:SS : " - -#: src/dird/ua_restore.c:868 -msgid "Improper date format.\n" -msgstr "Format de date invalide.\n" +#: src/stored/device.c:177 +#, c-format +msgid "write_block_to_device overflow block failed. ERR=%s" +msgstr "" -#: src/dird/ua_restore.c:889 +#: src/stored/device.c:182 #, c-format -msgid "Cannot open file %s: ERR=%s\n" -msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" +msgid "Catastrophic error. Cannot write overflow block to device %s. ERR=%s" +msgstr "" -#: src/dird/ua_restore.c:897 src/dird/ua_restore.c:901 +#: src/stored/device.c:332 src/stored/tape_dev.c:160 #, c-format -msgid "Error occurred on line %d of file \"%s\"\n" -msgstr "Une erreur est survenue à la ligne %d de \"%s\"\n" +msgid "Unable to open device %s: ERR=%s\n" +msgstr "" -#: src/dird/ua_restore.c:945 src/dird/ua_restore.c:973 +#: src/stored/device.c:334 #, c-format -msgid "No database record found for: %s\n" -msgstr "Pas d'enregistrement trouvé en base pour : %s\n" +msgid "Unable to open archive %s: ERR=%s\n" +msgstr "" -#: src/dird/ua_restore.c:961 -msgid "No JobId specified cannot continue.\n" +#: src/stored/authenticate.c:65 +#, c-format +msgid "I only authenticate Directors, not %d\n" msgstr "" -#: src/dird/ua_restore.c:994 +#: src/stored/authenticate.c:71 #, c-format -msgid "No table found: %s\n" +msgid "Bad Hello command from Director at %s. Len=%d.\n" msgstr "" -#: src/dird/ua_restore.c:1052 -msgid "" -"\n" -"\n" -"For one or more of the JobIds selected, no files were found,\n" -"so file selection is not possible.\n" -"Most likely your retention policy pruned the files.\n" +#: src/stored/authenticate.c:85 src/filed/authenticate.c:76 +#, c-format +msgid "Bad Hello command from Director at %s: %s\n" msgstr "" -#: src/dird/ua_restore.c:1055 +#: src/stored/authenticate.c:100 +#, fuzzy, c-format msgid "" -"\n" -"Do you want to restore all the files? (yes|no): " +"Connection from unknown Director %s at %s rejected.\n" +"Please see " msgstr "" +"Connexion d'un Director inconnu %s à %s rejeté.\n" "\n" -"Voulez vous restaurer tous les fichiers ? (oui|non) : " -#: src/dird/ua_restore.c:1058 +#: src/stored/authenticate.c:137 +#, fuzzy msgid "" -"\n" -"Regexp matching files to restore? (empty to abort): " +"Incorrect password given by Director.\n" +"Please see " +msgstr "Password incorrect donné par le Director à %s.\n" + +#: src/stored/authenticate.c:145 src/stored/authenticate.c:258 +#: src/stored/authenticate.c:367 src/filed/authenticate.c:139 +#: src/filed/authenticate.c:267 +msgid "" +"Authorization problem: Remote server did not advertize required TLS " +"support.\n" msgstr "" -#: src/dird/ua_restore.c:1074 +#: src/stored/authenticate.c:163 #, fuzzy, c-format -msgid "Regex compile error: %s\n" -msgstr "erreur sockopt : %s\n" +msgid "TLS negotiation failed with DIR at \"%s:%d\"\n" +msgstr "Négociation TLS échouée avec le SD « %s:%d ».\n" -#: src/dird/ua_restore.c:1137 -#, fuzzy, c-format -msgid "" -"\n" -"Building directory tree for JobId(s) %s ... " +#: src/stored/authenticate.c:199 +#, c-format +msgid "Unable to authenticate Director at %s.\n" msgstr "" -"\n" -"Analyse des répertoires pour le JobId %s..." -#: src/dird/ua_restore.c:1207 -#, fuzzy, c-format +#: src/stored/authenticate.c:249 src/stored/authenticate.c:289 +#, c-format msgid "" -"\n" -"%s files inserted into the tree and marked for extraction.\n" +"Incorrect authorization key from File daemon at %s rejected.\n" +"Please see " msgstr "" -"\n" -"1 Job, %s fichiers analysés et sélectionnés pour la restauration.\n" -#: src/dird/ua_restore.c:1210 +#: src/stored/authenticate.c:276 #, fuzzy, c-format +msgid "TLS negotiation failed with FD at \"%s:%d\"\n" +msgstr "Négociation TLS échouée avec le FD « %s:%d ».\n" + +#: src/stored/authenticate.c:358 src/filed/authenticate.c:258 msgid "" -"\n" -"%s files inserted into the tree.\n" +"Authorization key rejected by Storage daemon.\n" +"Please see " msgstr "" -"\n" -"1 Job, %s fichiers analysés\n" -#: src/dird/ua_restore.c:1285 -#, c-format -msgid "Error getting FileSet \"%s\": ERR=%s\n" +#: src/stored/authenticate.c:385 src/dird/authenticate.c:400 +#: src/filed/authenticate.c:157 src/filed/authenticate.c:285 +msgid "TLS negotiation failed.\n" msgstr "" -#: src/dird/ua_restore.c:1290 -#, fuzzy, c-format -msgid "FileSet argument: %s\n" -msgstr "FileSet" - -#: src/dird/ua_restore.c:1302 +#: src/stored/block.c:133 #, fuzzy, c-format -msgid "No FileSet found for client \"%s\".\n" -msgstr "Pas d'enregistrement trouvé en base pour : %s\n" +msgid "Cannot write block. Device at EOM. dev=%s\n" +msgstr "Impossible d'écrire un bloc. Le Device est au bout EOM.\n" -#: src/dird/ua_restore.c:1308 +#: src/stored/block.c:138 #, c-format -msgid "Error getting FileSet record: %s\n" -msgstr "" - -#: src/dird/ua_restore.c:1309 -msgid "" -"This probably means you modified the FileSet.\n" -"Continuing anyway.\n" +msgid "Attempt to write on read-only Volume. dev=%s\n" msgstr "" -#: src/dird/ua_restore.c:1324 +#: src/stored/block.c:144 #, c-format -msgid "Pool \"%s\" not found, using any pool.\n" +msgid "Attempt to write on closed device=%s\n" msgstr "" -#: src/dird/ua_restore.c:1351 src/dird/ua_restore.c:1367 +#: src/stored/block.c:177 #, c-format -msgid "No Full backup before %s found.\n" -msgstr "Pas de backup Full trouvé avant %s.\n" - -#: src/dird/ua_restore.c:1396 -msgid "No jobs found.\n" -msgstr "Pas de jobs trouvé.\n" +msgid "Unable to write EOF. ERR=%s\n" +msgstr "Impossible d'écrire le marqueur EOF. ERR=%s\n" -#: src/dird/ua_restore.c:1517 -#, c-format -msgid "Warning default storage overridden by \"%s\" on command line.\n" +#: src/stored/block.c:199 src/stored/block.c:235 +msgid "Write block header zeroed.\n" msgstr "" -"Attention, le storage par défaut est remplacé par \"%s\" en ligne de " -"commande.\n" -#: src/dird/ua_restore.c:1534 -#, fuzzy, c-format -msgid "Using Storage \"%s\" from MediaType \"%s\".\n" +#: src/stored/block.c:227 +#, c-format +msgid "Block checksum changed during write: before=%ud after=%ud\n" msgstr "" -"Le Storage \"%s\" est introuvable, utilisation du Storage \"%s\" du " -"MediaType \"%s\".\n" -#: src/dird/ua_restore.c:1537 +#: src/stored/block.c:254 #, c-format -msgid "Storage \"%s\" not found, using Storage \"%s\" from MediaType \"%s\".\n" -msgstr "" -"Le Storage \"%s\" est introuvable, utilisation du Storage \"%s\" du " -"MediaType \"%s\".\n" +msgid "Write error at %u:%u on device %s. ERR=%s.\n" +msgstr "Erreur d'écriture à %u:%u sur le device %s. ERR=%s\n" -#: src/dird/ua_restore.c:1546 +#: src/stored/block.c:262 #, c-format -msgid "" -"\n" -"Unable to find Storage resource for\n" -"MediaType \"%s\", needed by the Jobs you selected.\n" +msgid "End of Volume \"%s\" at %u:%u on device %s. Write of %u bytes got %d.\n" msgstr "" +"Fin du volume \"%s\" à %u:%u sur le device %s. Ecriture de %u octets, eu " +"%d.\n" -#: src/dird/fd_cmds.c:95 +#: src/stored/block.c:366 #, fuzzy -msgid "Client: " -msgstr "Client" +msgid "Job failed or canceled.\n" +msgstr "Le job %d est annulé.\n" -#: src/dird/fd_cmds.c:137 -#, c-format -msgid "File daemon \"%s\" rejected Job command: %s\n" +#: src/stored/block.c:372 +msgid "Attempt to read past end of tape or file.\n" msgstr "" -#: src/dird/fd_cmds.c:150 +#: src/stored/block.c:380 #, c-format -msgid "Error updating Client record. ERR=%s\n" +msgid "Attempt to read closed device: fd=%d at file:blk %u:%u on device %s\n" msgstr "" -#: src/dird/fd_cmds.c:155 +#: src/stored/block.c:392 #, c-format -msgid "FD gave bad response to JobId command: %s\n" +msgid "Block buffer size looping problem on device %s\n" msgstr "" -#: src/dird/fd_cmds.c:184 src/dird/fd_cmds.c:272 -msgid ", since=" -msgstr ", depuis=" - -#: src/dird/fd_cmds.c:249 -msgid "No prior or suitable Full backup found in catalog. Doing FULL backup.\n" -msgstr "Pas de précédent backup Full utilisable. Lancement d'un backup FULL.\n" - -#: src/dird/fd_cmds.c:250 src/dird/fd_cmds.c:256 src/dird/fd_cmds.c:265 -#, c-format -msgid " (upgraded from %s)" -msgstr " (à la place de %s)" - -#: src/dird/fd_cmds.c:255 -#, fuzzy -msgid "" -"No prior or suitable Differential backup found in catalog. Doing " -"Differential backup.\n" -msgstr "Pas de précédent backup Full utilisable. Lancement d'un backup FULL.\n" - -#: src/dird/fd_cmds.c:263 +#: src/stored/block.c:425 src/stored/block.c:439 #, c-format -msgid "Prior failed job found in catalog. Upgrading to %s.\n" -msgstr "Le job précédent était en erreur. Passage au type %s.\n" +msgid "The Volume=%s on device=%s appears to be unlabeled.\n" +msgstr "" -#: src/dird/fd_cmds.c:328 +#: src/stored/block.c:428 #, c-format -msgid "Unimplemented backup level %d %c\n" +msgid "Read error on fd=%d at file:blk %u:%u on device %s. ERR=%s.\n" msgstr "" -#: src/dird/fd_cmds.c:401 +#: src/stored/block.c:442 +#, fuzzy, c-format +msgid "Read zero bytes Vol=%s at %lld on device %s.\n" +msgstr "Prêt à lire les données du volume \"%s\" depuis le device %s.\n" + +#: src/stored/block.c:471 +#, c-format msgid "" -"FD compression disabled for this Job because AllowCompress=No in Storage " -"resource.\n" +"Volume data error at %u:%u! Very short block of %d bytes on device %s " +"discarded.\n" msgstr "" -#: src/dird/fd_cmds.c:500 src/filed/job.c:854 +#: src/stored/block.c:498 #, c-format -msgid "Cannot run program: %s. ERR=%s\n" -msgstr "Impossible de lancer la commande : %s. ERR=%s\n" - -#: src/dird/fd_cmds.c:511 src/dird/fd_cmds.c:536 src/dird/fd_cmds.c:550 -msgid ">filed: write error on socket\n" +msgid "Block length %u is greater than buffer %u. Attempting recovery.\n" msgstr "" -#: src/dird/fd_cmds.c:517 +#: src/stored/block.c:518 #, c-format -msgid "Error running program: %s. ERR=%s\n" -msgstr "Erreur dans l'exécution de la commande : %s. ERR=%s\n" +msgid "Setting block buffer size to %u bytes.\n" +msgstr "" -#: src/dird/fd_cmds.c:526 +#: src/stored/block.c:533 #, c-format -msgid "Cannot open included file: %s. ERR=%s\n" -msgstr "Impossible d'ouvrir le fichier inclus : %s. ERR=%s\n" +msgid "" +"Volume data error at %u:%u! Short block of %d bytes on device %s discarded.\n" +msgstr "" -#: src/dird/fd_cmds.c:672 +#: src/stored/label.c:87 #, fuzzy, c-format -msgid "Client \"%s\" RunScript failed.\n" -msgstr "le client \"%s\" est introuvable.\n" +msgid "Couldn't rewind %s device %s: ERR=%s\n" +msgstr "Impossible de trouver le userid %s : ERR=%s\n" -#: src/dird/fd_cmds.c:695 +#: src/stored/label.c:105 src/stored/label.c:198 +#, fuzzy, c-format +msgid "Wrong Volume mounted on %s device %s: Wanted %s have %s\n" +msgstr "Nouveau volume \"%s\" monté sur le device %s à %s.\n" + +#: src/stored/label.c:108 src/stored/label.c:186 #, c-format -msgid "" -"Client \"%s\" may not be used to restore this job. Please upgrade your " -"client.\n" +msgid "Too many tries: %s" msgstr "" -#: src/dird/fd_cmds.c:770 -#, fuzzy -msgid "RestoreObject failed.\n" -msgstr "restauration de fichier" - -#: src/dird/fd_cmds.c:806 +#: src/stored/label.c:125 #, c-format msgid "" -" \n" +" -b specify a bootstrap file\n" +" -c specify a Storage configuration file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -e exclude list\n" +" -i include list\n" +" -p proceed inspite of I/O errors\n" +" -v verbose\n" +" -V specify Volume names (separated by |)\n" +" -? print this message\n" +"\n" msgstr "" +"Copyright (C) 2000-2005 Kern Sibbald.\n" +"\n" +"Version : %s (%s)\n" +"\n" +"Usage : dird [-f -s] [-c config_file] [-d debug_level] [config_file]\n" +" -c utilise fich comme fichier de configuration\n" +" -dnn positionne le niveau de debug à nn\n" +" -f reste en avant-plan (pour debugger)\n" +" -g groupid\n" +" -r lance maintenant\n" +" -s pas de signaux\n" +" -t test - lit seulement le fichier de configuration\n" +" -u userid\n" +" -v affiche les messages utilisateurs\n" +" -? affiche ce message.\n" +"\n" -#: src/dird/run_conf.c:265 -#, c-format -msgid "Could not find specified Pool Resource: %s" +#: src/stored/bextract.c:191 src/stored/bscan.c:239 src/stored/bcopy.c:151 +#: src/tools/bbatch.c:178 src/tools/bvfs_test.c:189 src/tools/cats_test.c:309 +#: src/tools/ing_test.c:173 +msgid "Wrong number of arguments: \n" msgstr "" -#: src/dird/run_conf.c:290 +#: src/stored/bextract.c:215 #, c-format -msgid "Could not find specified Storage Resource: %s" +msgid "%d Program Name and/or Program Data Stream records ignored.\n" msgstr "" -#: src/dird/run_conf.c:302 +#: src/stored/bextract.c:219 #, c-format -msgid "Could not find specified Messages Resource: %s" +msgid "%d Win32 data or Win32 gzip data stream records. Ignored.\n" msgstr "" -#: src/dird/run_conf.c:312 src/lib/parse_conf.c:736 src/lib/parse_conf.c:742 +#: src/stored/bextract.c:246 #, c-format -msgid "expected a time period, got: %s" +msgid "Cannot stat %s. It must exist. ERR=%s\n" msgstr "" -#: src/dird/run_conf.c:331 +#: src/stored/bextract.c:250 #, c-format -msgid "Expected a keyword name, got: %s" -msgstr "" +msgid "%s must be a directory.\n" +msgstr "%s doit être un répertoire.\n" -#: src/dird/run_conf.c:370 -msgid "Day number out of range (1-31)" +#: src/stored/bextract.c:271 +#, c-format +msgid "%u files restored.\n" +msgstr "%u fichiers restaurés.\n" + +#: src/stored/bextract.c:281 src/stored/bextract.c:287 +#, c-format +msgid "Write error on %s: %s\n" msgstr "" -#: src/dird/run_conf.c:387 src/dird/run_conf.c:542 -msgid "Week number out of range (0-53)" +#: src/stored/bextract.c:318 src/stored/bextract.c:584 +msgid "Logic error output file should be open but is not.\n" msgstr "" -#: src/dird/run_conf.c:403 +#: src/stored/bextract.c:332 src/filed/restore.c:560 #, c-format -msgid "Job type field: %s in run record not found" +msgid "%s stream not supported on this Client.\n" msgstr "" -#: src/dird/run_conf.c:410 +#: src/stored/bextract.c:342 +#, fuzzy, c-format +msgid "%s was deleted.\n" +msgstr "Pas de job sélectionné.\n" + +#: src/stored/bextract.c:390 #, c-format -msgid "Unexpected token: %d:%s" +msgid "Seek error on %s: %s\n" msgstr "" -#: src/dird/run_conf.c:454 -msgid "Time must be preceded by keyword AT." +#: src/stored/bextract.c:426 src/stored/bextract.c:491 +#: src/filed/restore.c:1335 +#, c-format +msgid "Seek to %s error on %s: ERR=%s\n" msgstr "" -#: src/dird/run_conf.c:463 -msgid "Time logic error.\n" -msgstr "" +#: src/stored/bextract.c:445 +#, c-format +msgid "Uncompression error. ERR=%d\n" +msgstr "Erreur de décompression. ERR=%d\n" -#: src/dird/run_conf.c:478 src/dird/run_conf.c:497 -msgid "Bad time specification." +#: src/stored/bextract.c:459 src/filed/restore.c:1450 +msgid "GZIP data stream found, but GZIP not configured!\n" msgstr "" -#: src/dird/run_conf.c:511 -msgid "Range logic error.\n" +#: src/stored/bextract.c:514 src/filed/restore.c:1376 +#, c-format +msgid "Compressed header version error. version=0x%x\n" msgstr "" -#: src/dird/run_conf.c:520 -msgid "Bad day range specification." +#: src/stored/bextract.c:519 src/filed/restore.c:1381 +#, c-format +msgid "Compressed header size error. comp_len=%d, msglen=%d\n" msgstr "" -#: src/dird/run_conf.c:567 -msgid "Invalid month, week or position day range" -msgstr "" +#: src/stored/bextract.c:541 +#, fuzzy, c-format +msgid "LZO uncompression error. ERR=%d\n" +msgstr "Erreur de décompression. ERR=%d\n" -#: src/dird/run_conf.c:582 -msgid "Invalid month, weekday or position range" +#: src/stored/bextract.c:553 src/filed/restore.c:1414 +#, c-format +msgid "Compression algorithm 0x%x found, but not supported!\n" msgstr "" -#: src/dird/run_conf.c:641 -msgid "Unexpected run state\n" +#: src/stored/bextract.c:575 +msgid "Got Program Name or Data Stream. Ignored.\n" msgstr "" -#: src/dird/ua_update.c:97 -msgid "Update choice:\n" -msgstr "Élément à mettre à jour :\n" - -#: src/dird/ua_update.c:98 -msgid "Volume parameters" -msgstr "Paramètres d'un volume" +#: src/stored/bextract.c:589 src/filed/restore.c:316 src/filed/restore.c:1033 +#, c-format +msgid "Unknown stream=%d ignored. This shouldn't happen!\n" +msgstr "" -#: src/dird/ua_update.c:99 -msgid "Pool from resource" -msgstr "Pool à partir de sa définition" +#: src/stored/bscan.c:108 +#, fuzzy, c-format +msgid "" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: bscan [ options ] \n" +" -b bootstrap specify a bootstrap file\n" +" -c specify configuration file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -m update media info in database\n" +" -D specify the driver database name (default NULL)\n" +" -n specify the database name (default bacula)\n" +" -u specify database user name (default bacula)\n" +" -P specify database password (default none)\n" +" -h specify database host (default NULL)\n" +" -t specify database port (default 0)\n" +" -p proceed inspite of I/O errors\n" +" -r list records\n" +" -s synchronize or store in database\n" +" -S show scan progress periodically\n" +" -v verbose\n" +" -V specify Volume names (separated by |)\n" +" -w specify working directory (default from conf file)\n" +" -? print this message\n" +"\n" +msgstr "" +"Copyright (C) 2000-2005 Kern Sibbald.\n" +"\n" +"Version : %s (%s)\n" +"\n" +"Usage : dird [-f -s] [-c config_file] [-d debug_level] [config_file]\n" +" -c utilise fich comme fichier de configuration\n" +" -dnn positionne le niveau de debug à nn\n" +" -f reste en avant-plan (pour debugger)\n" +" -g groupid\n" +" -r lance maintenant\n" +" -s pas de signaux\n" +" -t test - lit seulement le fichier de configuration\n" +" -u userid\n" +" -v affiche les messages utilisateurs\n" +" -? affiche ce message.\n" +"\n" -#: src/dird/ua_update.c:100 -msgid "Slots from autochanger" -msgstr "Slots d'un autochangeur" +#: src/stored/bscan.c:264 +#, c-format +msgid "Working Directory: %s not found. Cannot continue.\n" +msgstr "" -#: src/dird/ua_update.c:101 -#, fuzzy -msgid "Long term statistics" -msgstr "Spooling des données...\n" +#: src/stored/bscan.c:268 +#, c-format +msgid "Working Directory: %s is not a directory. Cannot continue.\n" +msgstr "" -#: src/dird/ua_update.c:102 -msgid "item" -msgstr "item" +#: src/stored/bscan.c:282 src/stored/bscan.c:358 +#, fuzzy, c-format +msgid "First Volume Size = %s\n" +msgstr "Le nombre courant de fichier sur le Volume est : %u\n" -#: src/dird/ua_update.c:102 -msgid "Choose catalog item to update" -msgstr "Choisissez l'élément à mettre à jour" +#: src/stored/bscan.c:288 src/tools/bbatch.c:189 src/tools/bbatch.c:238 +#: src/tools/bvfs_test.c:203 src/tools/ing_test.c:179 +msgid "Could not init Bacula database\n" +msgstr "" -#: src/dird/ua_update.c:145 +#: src/stored/bscan.c:295 src/tools/bbatch.c:245 src/tools/bvfs_test.c:212 +#: src/tools/ing_test.c:188 #, c-format -msgid "Invalid VolStatus specified: %s\n" +msgid "Using Database: %s, User: %s\n" msgstr "" -#: src/dird/ua_update.c:154 +#: src/stored/bscan.c:329 #, c-format -msgid "New Volume status is: %s\n" -msgstr "Le statut du volume est : %s\n" +msgid "Create JobMedia for Job %s\n" +msgstr "" -#: src/dird/ua_update.c:164 +#: src/stored/bscan.c:339 #, c-format -msgid "Invalid retention period specified: %s\n" -msgstr "Période de rétention invalide : %s\n" +msgid "Could not create JobMedia record for Volume=%s Job=%s\n" +msgstr "" -#: src/dird/ua_update.c:172 +#: src/stored/bscan.c:406 #, c-format -msgid "New retention period is: %s\n" -msgstr "La nouvelle période de rétention est : %s\n" +msgid "done: %d%%\n" +msgstr "" -#: src/dird/ua_update.c:183 +#: src/stored/bscan.c:414 src/stored/bcopy.c:230 #, c-format -msgid "Invalid use duration specified: %s\n" -msgstr "Durée d'utilisation invalide : %s\n" +msgid "Record: SessId=%u SessTim=%u FileIndex=%d Stream=%d len=%u\n" +msgstr "" -#: src/dird/ua_update.c:191 -#, c-format -msgid "New use duration is: %s\n" -msgstr "La nouvelle durée d'utilisation est : %s\n" +#: src/stored/bscan.c:430 +msgid "Volume is prelabeled. This tape cannot be scanned.\n" +msgstr "" -#: src/dird/ua_update.c:205 +#: src/stored/bscan.c:442 #, c-format -msgid "New max jobs is: %s\n" +msgid "Pool record for %s found in DB.\n" msgstr "" -#: src/dird/ua_update.c:218 +#: src/stored/bscan.c:446 #, c-format -msgid "New max files is: %s\n" +msgid "VOL_LABEL: Pool record not found for Pool: %s\n" msgstr "" -#: src/dird/ua_update.c:229 +#: src/stored/bscan.c:452 #, c-format -msgid "Invalid max. bytes specification: %s\n" +msgid "VOL_LABEL: PoolType mismatch. DB=%s Vol=%s\n" msgstr "" -#: src/dird/ua_update.c:237 +#: src/stored/bscan.c:456 #, c-format -msgid "New Max bytes is: %s\n" +msgid "Pool type \"%s\" is OK.\n" msgstr "" -#: src/dird/ua_update.c:248 src/dird/ua_update.c:268 -msgid "Invalid value. It must be yes or no.\n" -msgstr "Saisie invalide. Veuillez répondre oui ou non.\n" - -#: src/dird/ua_update.c:256 +#: src/stored/bscan.c:466 #, c-format -msgid "New Recycle flag is: %s\n" +msgid "Media record for %s found in DB.\n" msgstr "" -#: src/dird/ua_update.c:257 src/dird/ua_update.c:277 src/dird/ua_update.c:699 -#: src/dird/ua_run.c:180 src/dird/backup.c:788 src/dird/backup.c:789 -#: src/dird/backup.c:790 src/dird/ua_input.c:131 src/stored/parse_bsr.c:863 -#: src/tools/dbcheck.c:1352 -msgid "yes" -msgstr "oui" - -#: src/dird/ua_update.c:257 src/dird/ua_update.c:277 src/dird/ua_update.c:699 -#: src/dird/ua_run.c:200 src/dird/backup.c:788 src/dird/backup.c:789 -#: src/dird/backup.c:790 src/dird/ua_input.c:135 src/stored/parse_bsr.c:863 -msgid "no" -msgstr "non" - -#: src/dird/ua_update.c:276 +#: src/stored/bscan.c:473 #, c-format -msgid "New InChanger flag is: %s\n" +msgid "VOL_LABEL: Media record not found for Volume: %s\n" msgstr "" -#: src/dird/ua_update.c:294 +#: src/stored/bscan.c:480 #, c-format -msgid "Invalid slot, it must be between 0 and MaxVols=%d\n" -msgstr "Slot invalide, il doit être compris entre 0 et MaxVols=%d\n" +msgid "VOL_LABEL: MediaType mismatch. DB=%s Vol=%s\n" +msgstr "" -#: src/dird/ua_update.c:304 src/dird/ua_update.c:728 +#: src/stored/bscan.c:484 #, c-format -msgid "Error updating media record Slot: ERR=%s" +msgid "Media type \"%s\" is OK.\n" msgstr "" -#: src/dird/ua_update.c:306 +#: src/stored/bscan.c:494 #, c-format -msgid "New Slot is: %d\n" -msgstr "Le nouveau slot est : %d\n" +msgid "VOL_LABEL: OK for Volume: %s\n" +msgstr "" -#: src/dird/ua_update.c:331 +#: src/stored/bscan.c:501 #, c-format -msgid "New Pool is: %s\n" -msgstr "Le nouveau pool est : %s\n" +msgid "%d \"errors\" ignored before first Start of Session record.\n" +msgstr "" -#: src/dird/ua_update.c:374 +#: src/stored/bscan.c:512 #, c-format -msgid "New RecyclePool is: %s\n" -msgstr "Le nouveau RecyclePool est : %s\n" +msgid "SOS_LABEL: Found Job record for JobId: %d\n" +msgstr "" -#: src/dird/ua_update.c:394 +#: src/stored/bscan.c:517 #, c-format -msgid "Error updating Volume record: ERR=%s" +msgid "SOS_LABEL: Job record not found for JobId: %d\n" msgstr "" -#: src/dird/ua_update.c:396 +#: src/stored/bscan.c:557 #, c-format -msgid "Volume defaults updated from \"%s\" Pool record.\n" +msgid "SOS_LABEL: VolSessId mismatch for JobId=%u. DB=%d Vol=%d\n" msgstr "" -#: src/dird/ua_update.c:419 src/dird/ua_update.c:451 +#: src/stored/bscan.c:563 #, c-format -msgid "Error updating Volume records: ERR=%s" +msgid "SOS_LABEL: VolSessTime mismatch for JobId=%u. DB=%d Vol=%d\n" msgstr "" -#: src/dird/ua_update.c:421 src/dird/ua_update.c:453 +#: src/stored/bscan.c:569 #, c-format -msgid "All Volume defaults updated from \"%s\" Pool record.\n" +msgid "SOS_LABEL: PoolId mismatch for JobId=%u. DB=%d Vol=%d\n" msgstr "" -#: src/dird/ua_update.c:443 +#: src/stored/bscan.c:587 src/stored/bscan.c:1141 #, c-format -msgid "Updating all pools, but skipped PoolId=%d. ERR=%s\n" +msgid "Could not find SessId=%d SessTime=%d for EOS record.\n" msgstr "" -#: src/dird/ua_update.c:469 -#, fuzzy, c-format -msgid "Error updating media record Enabled: ERR=%s" -msgstr "Impossible de mettre à jour les informations du Volume : ERR=%s" - -#: src/dird/ua_update.c:472 -#, fuzzy, c-format -msgid "New Enabled is: %d\n" -msgstr "Le nouveau flag Enabled est : %d\n" +#: src/stored/bscan.c:633 +#, c-format +msgid "Could not update job record. ERR=%s\n" +msgstr "" -#: src/dird/ua_update.c:487 -#, fuzzy, c-format -msgid "Error updating media record ActionOnPurge: ERR=%s" -msgstr "Impossible de mettre à jour les informations du Volume : ERR=%s" +#: src/stored/bscan.c:644 +#, c-format +msgid "End of all Volumes. VolFiles=%u VolBlocks=%u VolBytes=%s\n" +msgstr "" -#: src/dird/ua_update.c:490 -#, fuzzy, c-format -msgid "New ActionOnPurge is: %s\n" -msgstr "La nouvelle durée d'utilisation est : %s\n" +#: src/stored/bscan.c:656 +#, c-format +msgid "Could not find Job for SessId=%d SessTime=%d record.\n" +msgstr "" -#: src/dird/ua_update.c:605 src/dird/ua_run.c:222 -msgid "Parameters to modify:\n" -msgstr "Paramètre à modifier :\n" +#: src/stored/bscan.c:687 +#, c-format +msgid "%s file records. At file:blk=%s:%s bytes=%s\n" +msgstr "" -#: src/dird/ua_update.c:606 -msgid "Volume Status" -msgstr "Statut d'un volume" +#: src/stored/bscan.c:752 +#, c-format +msgid "Got MD5 record: %s\n" +msgstr "" -#: src/dird/ua_update.c:607 -msgid "Volume Retention Period" -msgstr "Période de rétention d'un volume" +#: src/stored/bscan.c:760 +#, c-format +msgid "Got SHA1 record: %s\n" +msgstr "" -#: src/dird/ua_update.c:608 -msgid "Volume Use Duration" -msgstr "Durée d'utilisation d'un volume" +#: src/stored/bscan.c:768 +#, c-format +msgid "Got SHA256 record: %s\n" +msgstr "" -#: src/dird/ua_update.c:609 -msgid "Maximum Volume Jobs" -msgstr "Nombre maximum de job sur un volume" +#: src/stored/bscan.c:776 +#, c-format +msgid "Got SHA512 record: %s\n" +msgstr "" -#: src/dird/ua_update.c:610 -msgid "Maximum Volume Files" -msgstr "Nombre maximum de fichier sur un volume" +#: src/stored/bscan.c:784 src/stored/bscan.c:791 +msgid "Got signed digest record\n" +msgstr "" -#: src/dird/ua_update.c:611 -msgid "Maximum Volume Bytes" -msgstr "Taille maximum d'un volume" +#: src/stored/bscan.c:797 +#, c-format +msgid "Got Prog Names Stream: %s\n" +msgstr "" -#: src/dird/ua_update.c:612 -msgid "Recycle Flag" -msgstr "Flag de recyclage" +#: src/stored/bscan.c:803 +msgid "Got Prog Data Stream record.\n" +msgstr "" -#: src/dird/ua_update.c:613 -msgid "Slot" +#: src/stored/bscan.c:848 +#, c-format +msgid "Unknown stream type!!! stream=%d len=%i\n" msgstr "" -#: src/dird/ua_update.c:614 -msgid "InChanger Flag" -msgstr "Flag InChanger" +#: src/stored/bscan.c:910 +#, c-format +msgid "Could not create File Attributes record. ERR=%s\n" +msgstr "" -#: src/dird/ua_update.c:615 -msgid "Volume Files" -msgstr "Fichiers du Volume" +#: src/stored/bscan.c:916 +#, c-format +msgid "Created File record: %s\n" +msgstr "" -#: src/dird/ua_update.c:617 -msgid "Volume from Pool" +#: src/stored/bscan.c:961 +#, c-format +msgid "Could not create media record. ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:618 -msgid "All Volumes from Pool" +#: src/stored/bscan.c:965 src/stored/bscan.c:986 +#, c-format +msgid "Could not update media record. ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:619 -msgid "All Volumes from all Pools" +#: src/stored/bscan.c:969 +#, c-format +msgid "Created Media record for Volume: %s\n" msgstr "" -#: src/dird/ua_update.c:620 -msgid "Enabled" +#: src/stored/bscan.c:990 +#, c-format +msgid "Updated Media record at end of Volume: %s\n" msgstr "" -#: src/dird/ua_update.c:621 -msgid "RecyclePool" -msgstr "RecyclePool" +#: src/stored/bscan.c:1007 +#, c-format +msgid "Could not create pool record. ERR=%s\n" +msgstr "" -#: src/dird/ua_update.c:622 -msgid "Action On Purge" +#: src/stored/bscan.c:1011 +#, c-format +msgid "Created Pool record for Pool: %s\n" msgstr "" -#: src/dird/ua_update.c:623 -msgid "Done" -msgstr "Fin" +#: src/stored/bscan.c:1030 +#, fuzzy, c-format +msgid "Could not get Client record. ERR=%s\n" +msgstr "Impossible d'initialiser la queue cliente : ERR=%s\n" -#: src/dird/ua_update.c:624 src/dird/ua_run.c:252 src/dird/ua_run.c:600 -msgid "Select parameter to modify" -msgstr "Sélectionnez le paramètre à modifier" +#: src/stored/bscan.c:1036 src/dird/job.c:1060 +#, c-format +msgid "Could not create Client record. ERR=%s\n" +msgstr "" -#: src/dird/ua_update.c:632 +#: src/stored/bscan.c:1040 #, c-format -msgid "Updating Volume \"%s\"\n" -msgstr "Mise à jour du Volume \"%s\"\n" +msgid "Created Client record for Client: %s\n" +msgstr "" -#: src/dird/ua_update.c:637 +#: src/stored/bscan.c:1057 #, c-format -msgid "Current Volume status is: %s\n" -msgstr "Le statut actuel du volume (Volume status) est : %s\n" - -#: src/dird/ua_update.c:638 -msgid "Possible Values are:\n" -msgstr "Les valeurs possibles sont :\n" - -#: src/dird/ua_update.c:649 -msgid "Choose new Volume Status" -msgstr "Saisissez le nouveau statut du volume (Volume Status)" +msgid "Fileset \"%s\" already exists.\n" +msgstr "" -#: src/dird/ua_update.c:655 +#: src/stored/bscan.c:1061 #, c-format -msgid "Current retention period is: %s\n" -msgstr "La période de rétention actuelle est : %s\n" - -#: src/dird/ua_update.c:657 -msgid "Enter Volume Retention period: " -msgstr "Saisissez la période de rétention du volume : " +msgid "Could not create FileSet record \"%s\". ERR=%s\n" +msgstr "" -#: src/dird/ua_update.c:664 +#: src/stored/bscan.c:1066 #, c-format -msgid "Current use duration is: %s\n" -msgstr "La durée d'utilisation actuelle est : %s\n" - -#: src/dird/ua_update.c:666 -msgid "Enter Volume Use Duration: " -msgstr "Saisissez la durée d'utilisation du volume : " +msgid "Created FileSet record \"%s\"\n" +msgstr "" -#: src/dird/ua_update.c:673 +#: src/stored/bscan.c:1113 #, c-format -msgid "Current max jobs is: %u\n" -msgstr "Le nombre maximum de Job actuel est : %u\n" - -#: src/dird/ua_update.c:674 -msgid "Enter new Maximum Jobs: " -msgstr "Saisissez la valeur du nombre maximum de Job : " +msgid "Could not create JobId record. ERR=%s\n" +msgstr "" -#: src/dird/ua_update.c:681 +#: src/stored/bscan.c:1119 #, c-format -msgid "Current max files is: %u\n" -msgstr "Le nombre maximum de fichier actuel est : %u\n" - -#: src/dird/ua_update.c:682 -msgid "Enter new Maximum Files: " -msgstr "Saisissez la valeur du nombre maximum de fichier (Maximum Files) : " +msgid "Could not update job start record. ERR=%s\n" +msgstr "" -#: src/dird/ua_update.c:689 +#: src/stored/bscan.c:1122 #, c-format -msgid "Current value is: %s\n" -msgstr "La valeur actuelle est : %s\n" - -#: src/dird/ua_update.c:690 -msgid "Enter new Maximum Bytes: " -msgstr "Saisissez la nouvelle taille maximum (octets) : " +msgid "Created new JobId=%u record for original JobId=%u\n" +msgstr "" -#: src/dird/ua_update.c:698 +#: src/stored/bscan.c:1175 #, c-format -msgid "Current recycle flag is: %s\n" -msgstr "Le flag de recyclage courant est : %s\n" - -#: src/dird/ua_update.c:700 -msgid "Enter new Recycle status: " +msgid "Could not update JobId=%u record. ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:707 +#: src/stored/bscan.c:1180 #, c-format -msgid "Current Slot is: %d\n" -msgstr "Le slot courant est : %d\n" +msgid "Updated Job termination record for JobId=%u Level=%s TermStat=%c\n" +msgstr "" -#: src/dird/ua_update.c:708 -msgid "Enter new Slot: " -msgstr "Saisissez le nouveau slot : " +#: src/stored/bscan.c:1191 src/dird/vbackup.c:386 src/dird/backup.c:774 +msgid "Backup OK" +msgstr "Backup OK" -#: src/dird/ua_update.c:715 -#, c-format -msgid "Current InChanger flag is: %d\n" -msgstr "Le flag InChanger courant est : %d\n" +#: src/stored/bscan.c:1194 src/dird/vbackup.c:384 src/dird/backup.c:772 +#: src/dird/backup.c:778 +msgid "Backup OK -- with warnings" +msgstr "Backup OK -- avec des erreurs" -#: src/dird/ua_update.c:716 -#, fuzzy, c-format -msgid "Set InChanger flag for Volume \"%s\": yes/no: " -msgstr "Positionner le flag InChanger ? oui/non : " +#: src/stored/bscan.c:1198 src/dird/vbackup.c:391 src/dird/backup.c:782 +msgid "*** Backup Error ***" +msgstr "*** Backup en erreur ***" -#: src/dird/ua_update.c:730 +#: src/stored/bscan.c:1201 src/dird/vbackup.c:401 src/dird/backup.c:792 +msgid "Backup Canceled" +msgstr "Backup annulé" + +#: src/stored/bscan.c:1205 #, c-format -msgid "New InChanger flag is: %d\n" -msgstr "Le nouveau flag InChanger est : %d\n" +msgid "Job Termination code: %d" +msgstr "" -#: src/dird/ua_update.c:737 +#: src/stored/bscan.c:1210 +#, c-format msgid "" -"Warning changing Volume Files can result\n" -"in loss of data on your Volume\n" +"%s\n" +"JobId: %d\n" +"Job: %s\n" +"FileSet: %s\n" +"Backup Level: %s\n" +"Client: %s\n" +"Start time: %s\n" +"End time: %s\n" +"Files Written: %s\n" +"Bytes Written: %s\n" +"Volume Session Id: %d\n" +"Volume Session Time: %d\n" +"Last Volume Bytes: %s\n" +"Termination: %s\n" "\n" msgstr "" -"Attention, changer le nombre de fichier du Volume peut\n" -"vous faire perdre des données du Volume\n" -"\n" -#: src/dird/ua_update.c:739 +#: src/stored/bscan.c:1268 #, c-format -msgid "Current Volume Files is: %u\n" -msgstr "Le nombre courant de fichier sur le Volume est : %u\n" - -#: src/dird/ua_update.c:740 -msgid "Enter new number of Files for Volume: " -msgstr "Saisissez le nouveau nombre de fichiers du Volume : " - -#: src/dird/ua_update.c:745 -msgid "Normally, you should only increase Volume Files by one!\n" +msgid "Could not create JobMedia record. ERR=%s\n" msgstr "" -"Logiquement, vous devez augmenter le nombre de fichier du Volume d'un !\n" -#: src/dird/ua_update.c:746 -#, fuzzy -msgid "Increase Volume Files? (yes/no): " -msgstr "Le nouveau nombre de fichier du Volume est : %u\n" - -#: src/dird/ua_update.c:756 +#: src/stored/bscan.c:1272 #, c-format -msgid "New Volume Files is: %u\n" -msgstr "Le nouveau nombre de fichier du Volume est : %u\n" +msgid "Created JobMedia record JobId %d, MediaId %d\n" +msgstr "" -#: src/dird/ua_update.c:768 +#: src/stored/bscan.c:1288 #, c-format -msgid "Current Pool is: %s\n" -msgstr "Le pool courant est : %s\n" - -#: src/dird/ua_update.c:769 -msgid "Enter new Pool name: " -msgstr "Saisissez le nouveau nom pour ce pool : " +msgid "Could not find SessId=%d SessTime=%d for MD5/SHA1 record.\n" +msgstr "" -#: src/dird/ua_update.c:790 +#: src/stored/bscan.c:1302 #, c-format -msgid "Current Enabled is: %d\n" -msgstr "La valeur actuelle de Enabled est : %d\n" +msgid "Could not add MD5/SHA1 to File record. ERR=%s\n" +msgstr "" -#: src/dird/ua_update.c:791 -msgid "Enter new Enabled: " -msgstr "Saisissez la nouvelle valeur pour Enabled : " +#: src/stored/bscan.c:1307 +msgid "Updated MD5/SHA1 record\n" +msgstr "" -#: src/dird/ua_update.c:810 +#: src/stored/stored_conf.c:224 #, c-format -msgid "Current RecyclePool is: %s\n" -msgstr "Le RecyclePool courant est : %s\n" +msgid "Expected a Device Type keyword, got: %s" +msgstr "" -#: src/dird/ua_update.c:812 -msgid "No current RecyclePool\n" -msgstr "Pas de RecyclePool courant\n" +#: src/stored/stored_conf.c:238 +#, c-format +msgid "" +"Maximum Block Size configured value %u is greater than allowed maximum: %u" +msgstr "" -#: src/dird/ua_update.c:822 -#, fuzzy, c-format -msgid "Current ActionOnPurge is: %s\n" -msgstr "La valeur actuelle est : %s\n" +#: src/stored/stored_conf.c:252 +#, c-format +msgid "Warning: no \"%s\" resource (%d) defined.\n" +msgstr "" -#: src/dird/ua_update.c:824 -msgid "Enter new ActionOnPurge (one of: Truncate, None): " +#: src/stored/stored_conf.c:255 +#, c-format +msgid "dump_resource type=%d\n" msgstr "" -#: src/dird/ua_update.c:832 -msgid "Selection terminated.\n" -msgstr "Sélection terminée.\n" +#: src/stored/stored_conf.c:371 +#, c-format +msgid "Warning: unknown resource type %d\n" +msgstr "" -#: src/dird/ua_update.c:852 +#: src/stored/stored_conf.c:567 #, c-format -msgid "Updating %i job(s).\n" +msgid "\"%s\" item is required in \"%s\" resource, but not found.\n" msgstr "" -#: src/dird/ua_update.c:884 +#: src/stored/stored_conf.c:573 #, c-format -msgid "db_update_pool_record returned %d. ERR=%s\n" -msgstr "db_update_pool_record a retourné %d. ERR=%s\n" +msgid "Too many items in \"%s\" resource\n" +msgstr "Trop d'éléments dans la ressource \"%s\"\n" -#: src/dird/ua_update.c:891 -msgid "Pool DB record updated from resource.\n" -msgstr "" -"Les paramètres du Pool en base ont été mis à jour depuis la configuration.\n" +#: src/stored/stored_conf.c:594 src/dird/dird_conf.c:1488 +#: src/filed/filed_conf.c:459 +#, c-format +msgid "Cannot find Director resource %s\n" +msgstr "Impossible de trouver la ressource Director \"%s\"\n" -#: src/dird/ua_update.c:918 -#, fuzzy -msgid "Expect JobId keyword, not found.\n" -msgstr "%s ressource %s introuvable.\n" +#: src/stored/stored_conf.c:600 src/dird/dird_conf.c:1495 +#, c-format +msgid "Cannot find Storage resource %s\n" +msgstr "Impossible de trouver la ressource Storage \"%s\"\n" -#: src/dird/ua_update.c:943 -#, fuzzy -msgid "Neither Client nor StartTime specified.\n" -msgstr "Pas de storage sélectionné.\n" +#: src/stored/stored_conf.c:607 +#, c-format +msgid "Cannot find AutoChanger resource %s\n" +msgstr "Impossible de trouver la ressource AutoChanger %s\n" -#: src/dird/migrate.c:149 src/dird/migrate.c:163 +#: src/stored/stored_conf.c:623 #, fuzzy, c-format -msgid "No previous Job found to %s.\n" -msgstr "Aucun Job trouvé pour la migration.\n" +msgid "Unable to init lock: ERR=%s\n" +msgstr "Impossible d'initialiser le muxtex : ERR=%s\n" -#: src/dird/migrate.c:155 -#, fuzzy -msgid "Create bootstrap file failed.\n" -msgstr "Impossible de restaurer sans un fichier bootstrap.\n" +#: src/stored/stored_conf.c:681 +#, c-format +msgid "" +"Attempt to define second \"%s\" resource named \"%s\" is not permitted.\n" +msgstr "" -#: src/dird/migrate.c:165 +#: src/stored/dircmd.c:157 #, fuzzy, c-format -msgid "Previous Job has no data to %s.\n" -msgstr "Aucun volume trouvé pour la restauration.\n" +msgid "Connection request from %s failed.\n" +msgstr "Demande de connexion échouée.\n" -#: src/dird/migrate.c:182 +#: src/stored/dircmd.c:168 #, fuzzy, c-format -msgid "Job resource not found for \"%s\".\n" -msgstr "La ressource Pool \"%s\" est introuvable !\n" +msgid "Invalid connection from %s. Len=%d\n" +msgstr "Connexion invalide. Len=%d\n" + +#: src/stored/dircmd.c:215 src/filed/authenticate.c:196 +msgid "Unable to authenticate Director\n" +msgstr "" -#: src/dird/migrate.c:186 +#: src/stored/dircmd.c:308 #, fuzzy, c-format -msgid "Previous Job resource not found for \"%s\".\n" -msgstr "La ressource Pool \"%s\" est introuvable !\n" +msgid "Bad client command: %s" +msgstr "Erreur dans la commande RunScript : %s\n" -#: src/dird/migrate.c:203 +#: src/stored/dircmd.c:318 #, fuzzy -msgid "setup job failed.\n" -msgstr "Job échoué.\n" +msgid "Client daemon" +msgstr "Director" + +#: src/stored/dircmd.c:321 +#, fuzzy, c-format +msgid "Failed to connect to Client daemon: %s:%d\n" +msgstr "Impossible de se connecter au client.\n" -#: src/dird/migrate.c:258 +#: src/stored/dircmd.c:358 src/filed/job.c:1855 #, c-format -msgid "Pool for JobId %s not in database. ERR=%s\n" +msgid "Bad storage command: %s" msgstr "" -#: src/dird/migrate.c:266 +#: src/stored/dircmd.c:377 src/dird/msgchan.c:121 src/filed/job.c:1880 +#: src/qt-console/tray-monitor/tray-monitor.cpp:363 +msgid "Storage daemon" +msgstr "" + +#: src/stored/dircmd.c:380 src/filed/job.c:1883 #, c-format -msgid "Pool resource \"%s\" not found.\n" +msgid "Failed to connect to Storage daemon: %s:%d\n" msgstr "" -#: src/dird/migrate.c:316 src/dird/migrate.c:898 -#, fuzzy, c-format -msgid "Could not get job record for JobId %s to %s. ERR=%s" -msgstr "Impossible de récupérer le Job du JobId=%s : ERR=%s\n" +#: src/stored/dircmd.c:397 +msgid "In storage_cmd port==0, no prior Storage connection.\n" +msgstr "" -#: src/dird/migrate.c:327 +#: src/stored/dircmd.c:445 #, c-format -msgid "JobId %s already %s probably by another Job. %s stopped.\n" +msgid "3991 Bad setdebug command: %s\n" msgstr "" -#: src/dird/migrate.c:337 -#, fuzzy, c-format -msgid "Start %s JobId %s, Job=%s\n" -msgstr "Démarrage du backup JobId %s, Job=%s\n" +#: src/stored/dircmd.c:479 +msgid "3903 Error scanning cancel command.\n" +msgstr "" -#: src/dird/migrate.c:712 -#, fuzzy, c-format -msgid "No %s SQL selection pattern specified.\n" -msgstr "Pas de storage sélectionné.\n" +#: src/stored/dircmd.c:483 +#, c-format +msgid "3904 Job %s not found.\n" +msgstr "3904 Job %s non trouvé.\n" -#: src/dird/migrate.c:719 src/dird/migrate.c:738 src/dird/migrate.c:759 -#: src/dird/migrate.c:795 src/dird/migrate.c:822 src/dird/migrate.c:956 -#: src/dird/migrate.c:989 src/dird/migrate.c:1118 +#: src/stored/dircmd.c:511 #, fuzzy, c-format -msgid "SQL failed. ERR=%s\n" -msgstr "fopen %s en erreur : ERR=%s\n" +msgid "3000 JobId=%ld Job=\"%s\" marked to be %s.\n" +msgstr "JobId %s, Job %s marqué pour être annulé.\n" -#: src/dird/migrate.c:742 src/dird/migrate.c:749 src/dird/migrate.c:763 -#: src/dird/migrate.c:826 -#, fuzzy, c-format -msgid "No Volumes found to %s.\n" -msgstr "Aucun volume trouvé pour la restauration.\n" +#: src/stored/dircmd.c:590 src/stored/dircmd.c:971 src/stored/dircmd.c:1066 +#: src/stored/dircmd.c:1177 src/stored/dircmd.c:1299 src/stored/dircmd.c:1341 +#, c-format +msgid "3999 Device \"%s\" not found or could not be opened.\n" +msgstr "" -#: src/dird/migrate.c:777 src/dird/migrate.c:866 src/dird/migrate.c:886 -#, fuzzy -msgid "Invalid JobId found.\n" -msgstr "Période invalide.\n" +#: src/stored/dircmd.c:595 +#, c-format +msgid "3903 Error scanning label command: %s\n" +msgstr "" -#: src/dird/migrate.c:837 +#: src/stored/dircmd.c:644 #, fuzzy, c-format -msgid "Unknown %s Selection Type.\n" -msgstr "Job du Type=%d inconnu\n" +msgid "3910 Unable to open device \"%s\": ERR=%s\n" +msgstr "3910 Impossible d'ouvrir le device %s : ERR=%s\n" -#: src/dird/migrate.c:848 src/dird/migrate.c:869 src/dird/migrate.c:889 -#, fuzzy, c-format -msgid "No JobIds found to %s.\n" -msgstr "Pas de job trouvé pour : %s.\n" +#: src/stored/dircmd.c:661 +#, c-format +msgid "3920 Cannot label Volume because it is already labeled: \"%s\"\n" +msgstr "" +"3920 Impossible de labéliser le Volume car il possède déjà le label : \"%s" +"\"\n" -#: src/dird/migrate.c:852 -#, fuzzy, c-format -msgid "The following %u JobId%s chosen to be %s: %s\n" -msgstr "Les fichiers suivants sont absents :\n" +#: src/stored/dircmd.c:668 +msgid "3921 Wrong volume mounted.\n" +msgstr "3921 Mauvais volume monté.\n" -#: src/dird/migrate.c:853 -msgid " was" -msgstr "" +#: src/stored/dircmd.c:672 +msgid "3922 Cannot relabel an ANSI/IBM labeled Volume.\n" +msgstr "3922 Impossible de re-labéliser un Volume ANSI/IBM.\n" -#: src/dird/migrate.c:853 -msgid "s were" -msgstr "" +#: src/stored/dircmd.c:680 +#, c-format +msgid "3912 Failed to label Volume: ERR=%s\n" +msgstr "3912 Impossible de labéliser le Volume : ERR=%s\n" -#: src/dird/migrate.c:905 +#: src/stored/dircmd.c:690 #, fuzzy, c-format -msgid "%s using JobId=%s Job=%s\n" -msgstr "Migration utilisant JobId=%s Job=%s\n" +msgid "3915 Failed to label Volume: ERR=%s\n" +msgstr "3912 Impossible de labéliser le Volume : ERR=%s\n" + +#: src/stored/dircmd.c:693 +#, fuzzy, c-format +msgid "3914 Failed to label Volume (no media): ERR=%s\n" +msgstr "3912 Impossible de labéliser le Volume : ERR=%s\n" -#: src/dird/migrate.c:939 -msgid "Could not start migration job.\n" +#: src/stored/dircmd.c:696 +#, c-format +msgid "3913 Cannot label Volume. Unknown status %d from read_volume_label()\n" msgstr "" -#: src/dird/migrate.c:941 -#, fuzzy, c-format -msgid "%s JobId %d started.\n" -msgstr "Le job %d est annulé.\n" +#: src/stored/dircmd.c:733 +#, c-format +msgid "3001 Mounted Volume: %s\n" +msgstr "3001 Volume monté : %s\n" -#: src/dird/migrate.c:960 +#: src/stored/dircmd.c:737 src/stored/dircmd.c:1377 #, fuzzy, c-format -msgid "No %s found to %s.\n" -msgstr "Aucun volume trouvé pour la restauration.\n" +msgid "" +"3902 Cannot mount Volume on Storage Device \"%s\" because:\n" +"%s" +msgstr "" +"3902 Impossible de monté le volume dans le storage device %s car :\n" +"%s" -#: src/dird/migrate.c:964 +#: src/stored/dircmd.c:768 src/stored/reserve.c:646 #, c-format -msgid "SQL error. Expected 1 MediaId got %d\n" +msgid "" +"\n" +" Device \"%s\" requested by DIR could not be opened or does not exist.\n" msgstr "" -#: src/dird/migrate.c:993 src/dird/migrate.c:1123 +#: src/stored/dircmd.c:790 src/stored/reserve.c:642 +#, c-format +msgid "" +"\n" +" Device \"%s\" in changer \"%s\" requested by DIR could not be opened or " +"does not exist.\n" +msgstr "" + +#: src/stored/dircmd.c:854 +#, fuzzy +msgid "Specified slot ignored. " +msgstr "fopen %s en erreur : ERR=%s\n" + +#: src/stored/dircmd.c:871 src/stored/dircmd.c:929 #, fuzzy, c-format -msgid "No %ss found to %s.\n" -msgstr "Aucun volume trouvé pour la restauration.\n" +msgid "3901 Unable to open device \"%s\": ERR=%s\n" +msgstr "3910 Impossible d'ouvrir le device %s : ERR=%s\n" -#: src/dird/migrate.c:1015 -msgid "Selection Type 'pooluncopiedjobs' only applies to Copy Jobs" +#: src/stored/dircmd.c:891 src/stored/dircmd.c:920 +#, fuzzy, c-format +msgid "3001 Device \"%s\" is mounted with Volume \"%s\"\n" +msgstr "3001 Device %s est monté avec le volume \"%s\"\n" + +#: src/stored/dircmd.c:894 src/stored/dircmd.c:923 src/stored/dircmd.c:938 +#, fuzzy, c-format +msgid "" +"3905 Device \"%s\" open but no Bacula volume is mounted.\n" +"If this is not a blank tape, try unmounting and remounting the Volume.\n" msgstr "" +"3905 Le device %s est ouvert mais il n'y a pas de volume Bacula monté.\n" +"Si ce n'est pas une cartouche vierge, essayer de la démonter puis de la " +"remonter.\n" -#: src/dird/migrate.c:1024 +#: src/stored/dircmd.c:904 #, fuzzy, c-format -msgid "SQL to get uncopied jobs failed. ERR=%s\n" -msgstr "fopen %s en erreur : ERR=%s\n" +msgid "3001 Device \"%s\" is doing acquire.\n" +msgstr "3902 Le Device %s est occupé en acquisition.\n" -#: src/dird/migrate.c:1047 +#: src/stored/dircmd.c:909 src/stored/dircmd.c:1037 #, fuzzy, c-format -msgid "No %s %s selection pattern specified.\n" -msgstr "Pas de storage sélectionné.\n" +msgid "3903 Device \"%s\" is being labeled.\n" +msgstr "3934 Device %s est en cours d'initialisation.\n" -#: src/dird/migrate.c:1058 +#: src/stored/dircmd.c:935 #, fuzzy, c-format -msgid "SQL to get %s failed. ERR=%s\n" -msgstr "fopen %s en erreur : ERR=%s\n" +msgid "3001 Device \"%s\" is already mounted with Volume \"%s\"\n" +msgstr "3001 Device %s est déjà monté avec le volume \"%s\"\n" -#: src/dird/migrate.c:1063 -#, c-format -msgid "Query of Pool \"%s\" returned no Jobs to %s.\n" -msgstr "" +#: src/stored/dircmd.c:947 +#, fuzzy, c-format +msgid "3002 Device \"%s\" is mounted.\n" +msgstr "3002 Le device %s est monté.\n" -#: src/dird/migrate.c:1101 +#: src/stored/dircmd.c:949 src/stored/dircmd.c:1006 src/stored/dircmd.c:1025 +#: src/stored/dircmd.c:1057 #, c-format -msgid "Regex pattern matched no Jobs to %s.\n" -msgstr "" +msgid "3907 %s" +msgstr "3907 %s" -#: src/dird/migrate.c:1265 -#, c-format -msgid "%s OK -- with warnings" -msgstr "%s OK -- avec des avertissements" +#: src/stored/dircmd.c:952 +#, fuzzy, c-format +msgid "3906 File device \"%s\" is always mounted.\n" +msgstr "3906 Le device fichier %s est toujours monté.\n" -#: src/dird/migrate.c:1267 -#, c-format -msgid "%s OK" -msgstr "" +#: src/stored/dircmd.c:961 +#, fuzzy, c-format +msgid "3930 Device \"%s\" is being released.\n" +msgstr "3934 Device %s est en cours d'initialisation.\n" -#: src/dird/migrate.c:1272 -#, c-format -msgid "*** %s Error ***" -msgstr "*** %s Erreur ***" +#: src/stored/dircmd.c:965 +#, fuzzy, c-format +msgid "3905 Unknown wait state %d\n" +msgstr "est dans un état inconnu %c" -#: src/dird/migrate.c:1282 +#: src/stored/dircmd.c:975 #, c-format -msgid "%s Canceled" -msgstr "%s Annulé" +msgid "3909 Error scanning mount command: %s\n" +msgstr "3909 Erreur pendant la lecture de la commande de montage : %s\n" -#: src/dird/migrate.c:1291 -#, c-format -msgid "Inappropriate %s term code" -msgstr "" +#: src/stored/dircmd.c:1003 src/stored/dircmd.c:1059 +#, fuzzy, c-format +msgid "3002 Device \"%s\" unmounted.\n" +msgstr "3002 Le device %s est démonté.\n" -#: src/dird/migrate.c:1301 +#: src/stored/dircmd.c:1010 #, fuzzy, c-format -msgid "%s -- no files to %s" -msgstr "Aucun volume trouvé pour la restauration.\n" +msgid "3901 Device \"%s\" is already unmounted.\n" +msgstr "3901 Le device %s est déjà démonté.\n" -#: src/dird/migrate.c:1316 +#: src/stored/dircmd.c:1028 #, fuzzy, c-format -msgid "" -"%s %s %s (%s):\n" -" Build OS: %s %s %s\n" -" Prev Backup JobId: %s\n" -" Prev Backup Job: %s\n" -" New Backup JobId: %s\n" -" Current JobId: %s\n" -" Current Job: %s\n" -" Backup Level: %s%s\n" -" Client: %s\n" -" FileSet: \"%s\" %s\n" -" Read Pool: \"%s\" (From %s)\n" -" Read Storage: \"%s\" (From %s)\n" -" Write Pool: \"%s\" (From %s)\n" -" Write Storage: \"%s\" (From %s)\n" -" Catalog: \"%s\" (From %s)\n" -" Start time: %s\n" -" End time: %s\n" -" Elapsed time: %s\n" -" Priority: %d\n" -" SD Files Written: %s\n" -" SD Bytes Written: %s (%sB)\n" -" Rate: %.1f KB/s\n" -" Volume name(s): %s\n" -" Volume Session Id: %d\n" -" Volume Session Time: %d\n" -" Last Volume Bytes: %s (%sB)\n" -" SD Errors: %d\n" -" SD termination status: %s\n" -" Termination: %s\n" -"\n" -msgstr "" -"%s %s %s (%s): %s\n" -" Build OS : %s %s %s\n" -" Prec Backup JobId : %s\n" -" Prec Backup Job : %s\n" -" Nouveau JobId : %s\n" -" JobId courrant : %s\n" -" Job courrant : %s\n" -" Niveau de backup : %s%s\n" -" Client : %s\n" -" FileSet : \"%s\" %s\n" -" Pool de lecture : \"%s\" (Depuis %s)\n" -" Storage de lecture : \"%s\" (Depuis %s)\n" -" Pool d'écriture : \"%s\" (Depuis %s)\n" -" Storage d'écriture : \"%s\" (Depuis %s)\n" -" Catalogue : \"%s\" (Depuis %s)\n" -" Date de début : %s\n" -" Date de fin : %s\n" -" Temps écoulé : %s\n" -" Priorité : %d\n" -" Fichiers écrits SD : %s\n" -" Octets écrits SD : %s (%so)\n" -" Débit : %.1f Ko/s\n" -" Nom des Volumes : %s\n" -" Volume Session Id : %d\n" -" Volume Session date : %d\n" -" Taille du volume : %s (%so)\n" -" Erreurs du SD : %d\n" -" Statut de fin du SD : %s\n" -" Statut de fin : %s\n" +msgid "3001 Device \"%s\" unmounted.\n" +msgstr "3001 Le device %s est démonté.\n" -#: src/dird/migrate.c:1427 -#, c-format -msgid "No Next Pool specification found in Pool \"%s\".\n" -msgstr "" +#: src/stored/dircmd.c:1033 +#, fuzzy, c-format +msgid "3902 Device \"%s\" is busy in acquire.\n" +msgstr "3902 Le Device %s est occupé en acquisition.\n" -#: src/dird/migrate.c:1433 +#: src/stored/dircmd.c:1071 #, c-format -msgid "No Storage specification found in Next Pool \"%s\".\n" +msgid "3907 Error scanning unmount command: %s\n" msgstr "" -#: src/dird/migrate.c:1439 +#: src/stored/dircmd.c:1099 #, fuzzy -msgid "Storage from Pool's NextPool resource" -msgstr "Sélectionnez le Pool" - -#: src/dird/ua_prune.c:127 -msgid "Choose item to prune" -msgstr "Que voulez vous purger du catalogue (prune)" +msgid "3916 Error scanning action_on_purge command\n" +msgstr "2902 Erreur dans le décodage de la commande d'annulation.\n" -#: src/dird/ua_prune.c:175 -#, c-format -msgid "Cannot prune Volume \"%s\" because it is archived.\n" -msgstr "Impossible de pruner le Volume \"%s\" car il est archivé.\n" +#: src/stored/dircmd.c:1142 +#, fuzzy, c-format +msgid "3921 Device \"%s\" already released.\n" +msgstr "3921 Le Device %s est déjà libéré.\n" -#: src/dird/ua_prune.c:217 -#, fuzzy -msgid "Pruned Jobs from JobHisto catalog.\n" -msgstr "Purge du catalogue (prune) de %d %s du client %s.\n" +#: src/stored/dircmd.c:1149 +#, fuzzy, c-format +msgid "3922 Device \"%s\" waiting for sysop.\n" +msgstr "3922 Device %s est en attente d'une intervention sysop.\n" -#: src/dird/ua_prune.c:305 -#, fuzzy -msgid "Begin pruning Files.\n" -msgstr "Début de purge des fichiers du catalogue (prune).\n" +#: src/stored/dircmd.c:1155 +#, fuzzy, c-format +msgid "3922 Device \"%s\" waiting for mount.\n" +msgstr "3922 Le Device %s est en atttente d'un montage.\n" -#: src/dird/ua_prune.c:320 -msgid "No Files found to prune.\n" -msgstr "Pas de fichier trouvé pour la purge du catalogue (prune).\n" +#: src/stored/dircmd.c:1159 +#, fuzzy, c-format +msgid "3923 Device \"%s\" is busy in acquire.\n" +msgstr "3902 Le Device %s est occupé en acquisition.\n" -#: src/dird/ua_prune.c:343 -#, c-format -msgid "Pruned Files from %s Jobs for client %s from catalog.\n" -msgstr "" -"Purge du catalogue des fichiers (prune) de %s Jobs pour le client %s.\n" +#: src/stored/dircmd.c:1163 +#, fuzzy, c-format +msgid "3914 Device \"%s\" is being labeled.\n" +msgstr "3934 Device %s est en cours d'initialisation.\n" -#: src/dird/ua_prune.c:489 +#: src/stored/dircmd.c:1171 #, fuzzy, c-format -msgid "Begin pruning Jobs older than %s.\n" -msgstr "Début de purge des Jobs du catalogue (prune).\n" +msgid "3022 Device \"%s\" released.\n" +msgstr "3022 Le device %s est libéré.\n" -#: src/dird/ua_prune.c:600 +#: src/stored/dircmd.c:1182 #, c-format -msgid "Pruned %d %s for client %s from catalog.\n" -msgstr "Purge du catalogue (prune) de %d %s du client %s.\n" +msgid "3927 Error scanning release command: %s\n" +msgstr "" -#: src/dird/ua_prune.c:601 -msgid "Jobs" -msgstr "Jobs" +#: src/stored/dircmd.c:1211 +#, c-format +msgid "Could not create bootstrap file %s: ERR=%s\n" +msgstr "Impossible de créer le fichier bootstrap %s : ERR=%s\n" -#: src/dird/ua_prune.c:603 -msgid "No Jobs found to prune.\n" -msgstr "Pas de job trouvé pour la purge du catalogue (prune).\n" +#: src/stored/dircmd.c:1224 +msgid "Error parsing bootstrap file.\n" +msgstr "" -#: src/dird/autoprune.c:75 -msgid "" -"End auto prune.\n" -"\n" -msgstr "" -"Fin de la purge automatique.\n" -"\n" +#: src/stored/dircmd.c:1286 +#, fuzzy, c-format +msgid "3998 Device \"%s\" is not an autochanger.\n" +msgstr "3995 Le Device %s n'est pas un autochangeur.\n" -#: src/dird/ua_run.c:154 -msgid "OK to run? (yes/mod/no): " -msgstr "OK pour le lancement ? (oui/mod/non) : " +#: src/stored/dircmd.c:1303 +#, fuzzy, c-format +msgid "3908 Error scanning autochanger drives/list/slots command: %s\n" +msgstr "3909 Erreur pendant la lecture de la commande de montage : %s\n" -#: src/dird/ua_run.c:193 -msgid "Job failed.\n" -msgstr "Job échoué.\n" +#: src/stored/dircmd.c:1345 +#, c-format +msgid "3909 Error scanning readlabel command: %s\n" +msgstr "" -#: src/dird/ua_run.c:196 +#: src/stored/dircmd.c:1373 #, c-format -msgid "Job queued. JobId=%s\n" -msgstr "Job mis en queue. JobId=%s\n" +msgid "3001 Volume=%s Slot=%d\n" +msgstr "3001 Volume=%s Slot=%d\n" -#: src/dird/ua_run.c:203 +#: src/stored/dircmd.c:1405 #, fuzzy, c-format -msgid "" -"\n" -"Bad response: %s. You must answer yes, mod, or no.\n" -"\n" -msgstr "Réponse invalide. Vous devez répondre oui ou non.\n" - -#: src/dird/ua_run.c:207 -msgid "Job not run.\n" -msgstr "Job non lancé.\n" +msgid "3931 Device \"%s\" is BLOCKED. user unmounted.\n" +msgstr "3931 Device %s est BLOQUÉ, démonté par l'utilisateur.\n" -#: src/dird/ua_run.c:223 -msgid "Level" -msgstr "Type" +#: src/stored/dircmd.c:1409 +#, fuzzy, c-format +msgid "" +"3932 Device \"%s\" is BLOCKED. user unmounted during wait for media/mount.\n" +msgstr "" +"3932 Device %s est BLOQUÉ, démonté par l'utilisateur alors que bacula était " +"en attente d'un média.\n" -#: src/dird/ua_run.c:228 -#, fuzzy -msgid "Restore Client" -msgstr "Restauration annulée" +#: src/stored/dircmd.c:1413 +#, fuzzy, c-format +msgid "3933 Device \"%s\" is BLOCKED waiting for media.\n" +msgstr "3933 Device %s est bloqué en attente d'un media.\n" -#: src/dird/ua_run.c:232 src/wx-console/wxbrestorepanel.cpp:356 -#: src/wx-console/wxbrestorepanel.cpp:854 -#: src/wx-console/wxbrestorepanel.cpp:1918 -msgid "When" -msgstr "Quand" +#: src/stored/dircmd.c:1417 +#, fuzzy, c-format +msgid "3934 Device \"%s\" is being initialized.\n" +msgstr "3934 Device %s est en cours d'initialisation.\n" -#: src/dird/ua_run.c:233 src/wx-console/wxbrestorepanel.cpp:357 -#: src/wx-console/wxbrestorepanel.cpp:1128 -#: src/wx-console/wxbrestorepanel.cpp:1921 -msgid "Priority" -msgstr "Priorité" +#: src/stored/dircmd.c:1421 +#, fuzzy, c-format +msgid "3935 Device \"%s\" is blocked labeling a Volume.\n" +msgstr "3935 Device %s est bloqué par une labélisation de volume.\n" -#: src/dird/ua_run.c:240 -msgid "Verify Job" -msgstr "Job de vérification" +#: src/stored/dircmd.c:1425 +#, fuzzy, c-format +msgid "3935 Device \"%s\" is blocked for unknown reason.\n" +msgstr "3935 Device %s est bloqué pour une raison inconnue.\n" -#: src/dird/ua_run.c:243 src/wx-console/wxbrestorepanel.cpp:349 -#: src/wx-console/wxbrestorepanel.cpp:1899 -msgid "Bootstrap" -msgstr "Bootstrap" +#: src/stored/dircmd.c:1430 +#, fuzzy, c-format +msgid "3936 Device \"%s\" is busy reading.\n" +msgstr "3936 Device %s est occupé en lecture.\n" -#: src/dird/ua_run.c:244 src/wx-console/wxbrestorepanel.cpp:350 -#: src/wx-console/wxbrestorepanel.cpp:1104 -#: src/wx-console/wxbrestorepanel.cpp:1901 -msgid "Where" -msgstr "Destination" +#: src/stored/dircmd.c:1433 +#, fuzzy, c-format +msgid "3937 Device \"%s\" is busy with writers=%d reserved=%d.\n" +msgstr "3937 Device %s est occupé avec %d flux en écriture.\n" -#: src/dird/ua_run.c:245 -msgid "File Relocation" +#: src/stored/dev.c:129 +#, c-format +msgid "Unable to stat device %s: ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:246 src/wx-console/wxbrestorepanel.cpp:352 -#: src/wx-console/wxbrestorepanel.cpp:1112 -#: src/wx-console/wxbrestorepanel.cpp:1905 -#: src/wx-console/wxbrestorepanel.cpp:1906 -#: src/wx-console/wxbrestorepanel.cpp:1907 -#: src/wx-console/wxbrestorepanel.cpp:1908 -#: src/wx-console/wxbrestorepanel.cpp:1909 -msgid "Replace" -msgstr "Écrasement" +#: src/stored/dev.c:147 +#, c-format +msgid "" +"%s is an unknown device type. Must be tape or directory\n" +" or have RequiresMount=yes for DVD. st_mode=%x\n" +msgstr "" -#: src/dird/ua_run.c:247 -msgid "JobId" -msgstr "JobId" +#: src/stored/dev.c:157 +msgid "DVD support is now deprecated.\n" +msgstr "" -#: src/dird/ua_run.c:250 -msgid "Plugin Options" +#: src/stored/dev.c:160 +msgid "Aligned device not supported. Please use \"DeviceType = File\"\n" msgstr "" -#: src/dird/ua_run.c:261 src/dird/ua_run.c:1569 -msgid "user selection" +#: src/stored/dev.c:256 +#, c-format +msgid "Unable to stat mount point %s: ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:293 +#: src/stored/dev.c:261 msgid "" -"Please enter desired start time as YYYY-MM-DD HH:MM:SS (return for now): " +"Mount and unmount commands must defined for a device which requires mount.\n" msgstr "" -"Saisissez la date de lancement (YYYY-MM-DD HH:MM:SS) (ou maintenant) : " -#: src/dird/ua_run.c:301 src/dird/ua_run.c:477 -msgid "Invalid time, using current time.\n" +#: src/stored/dev.c:272 +#, c-format +msgid "Min block size > max on device %s\n" msgstr "" -#: src/dird/ua_run.c:308 -msgid "Enter new Priority: " -msgstr "Saisissez la nouvelle priorité : " +#: src/stored/dev.c:276 +#, c-format +msgid "Block size %u on device %s is too large, using default %u\n" +msgstr "" +"La taille de bloc %u sur le Device %s est trop grande, utilisation de la " +"valeur par défaut %u\n" -#: src/dird/ua_run.c:312 -msgid "Priority must be a positive integer.\n" -msgstr "La priorité doit être un entier positif.\n" +#: src/stored/dev.c:281 +#, fuzzy, c-format +msgid "Max block size %u not multiple of device %s block size=%d.\n" +msgstr "" +"La taille du buffer réseau %d n'est pas un multiple de la taille de bloc du " +"lecteur.\n" -#: src/dird/ua_run.c:333 -msgid "Please enter the Bootstrap file name: " -msgstr "Saisissez le nom du fichier Bootstrap : " +#: src/stored/dev.c:285 +#, c-format +msgid "Max Vol Size < 8 * Max Block Size for device %s\n" +msgstr "" -# Impossible d'ouvrir %s : ERR=%s -#: src/dird/ua_run.c:345 +#: src/stored/dev.c:295 src/stored/dev.c:347 src/lib/openssl.c:110 +#: src/lib/openssl.c:169 #, c-format -msgid "Warning cannot open %s: ERR=%s\n" -msgstr "Impossible d'ouvrir %s : ERR=%s\n" +msgid "Unable to init mutex: ERR=%s\n" +msgstr "Impossible d'initialiser le muxtex : ERR=%s\n" -#: src/dird/ua_run.c:364 -#, fuzzy -msgid "Please enter the full path prefix for restore (/ for none): " -msgstr "Saisissez le chemin (prefix) pour la restauration (/ pour aucun) : " +#: src/stored/dev.c:301 src/stored/dev.c:307 +#, c-format +msgid "Unable to init cond variable: ERR=%s\n" +msgstr "" -#: src/dird/ua_run.c:386 -msgid "Replace:\n" -msgstr "Écrasement :\n" +#: src/stored/dev.c:313 +#, fuzzy, c-format +msgid "Unable to init spool mutex: ERR=%s\n" +msgstr "Impossible d'initialiser le muxtex : ERR=%s\n" -#: src/dird/ua_run.c:390 -msgid "Select replace option" -msgstr "Saisissez l'option d'écrasement" +#: src/stored/dev.c:319 +#, fuzzy, c-format +msgid "Unable to init acquire mutex: ERR=%s\n" +msgstr "Impossible d'initialiser le muxtex : ERR=%s\n" -#: src/dird/ua_run.c:401 -msgid "" -"You must set the bootstrap file to NULL to be able to specify a JobId.\n" +#: src/stored/dev.c:325 +#, fuzzy, c-format +msgid "Unable to init read acquire mutex: ERR=%s\n" +msgstr "Impossible d'initialiser le muxtex : ERR=%s\n" + +#: src/stored/dev.c:331 +#, fuzzy, c-format +msgid "Unable to init volcat mutex: ERR=%s\n" +msgstr "Impossible d'initialiser le muxtex : ERR=%s\n" + +#: src/stored/dev.c:337 +#, fuzzy, c-format +msgid "Unable to init dcrs mutex: ERR=%s\n" +msgstr "Impossible d'initialiser le muxtex : ERR=%s\n" + +#: src/stored/dev.c:426 +msgid "Illegal mode given to open dev.\n" msgstr "" -"Vous ne devez pas spécifié de fichier bootstrap pour pouvoir utiliser un " -"JobId.\n" -#: src/dird/ua_run.c:406 -#, fuzzy -msgid "Please Plugin Options string: " -msgstr "Saisissez le début du chemin (prefix) à enlever : " +#: src/stored/dev.c:478 +msgid "Bad device call. Device not open\n" +msgstr "" -#: src/dird/ua_run.c:444 src/dird/ua_run.c:453 -msgid "User input" +#: src/stored/dev.c:490 +#, c-format +msgid "Seek error: ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:507 +#: src/stored/dev.c:491 src/stored/tape_dev.c:293 src/stored/file_dev.c:73 +#: src/stored/file_dev.c:100 #, c-format -msgid "Invalid replace option: %s\n" -msgstr "Option d'écrasement (Replace) invalide : %s\n" +msgid "lseek error on %s. ERR=%s.\n" +msgstr "erreur de déplacement (lseek) sur %s : ERR=%s\n" -#: src/dird/ua_run.c:589 +#: src/stored/fd_cmds.c:193 #, c-format -msgid "strip_prefix=%s add_prefix=%s add_suffix=%s\n" +msgid "Command error with FD, hanging up. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:592 -msgid "This will replace your current Where value\n" +#: src/stored/fd_cmds.c:196 +msgid "Command error with FD, hanging up.\n" msgstr "" -#: src/dird/ua_run.c:593 -msgid "Strip prefix" -msgstr "" +#: src/stored/fd_cmds.c:207 +#, fuzzy, c-format +msgid "FD command not found: %s\n" +msgstr "Job non trouvé : %s\n" -#: src/dird/ua_run.c:594 -msgid "Add prefix" +#: src/stored/fd_cmds.c:238 +msgid "Attempt to append on non-open session.\n" msgstr "" -#: src/dird/ua_run.c:595 -msgid "Add file suffix" +#: src/stored/fd_cmds.c:250 src/stored/fd_cmds.c:293 +msgid "Attempt to close non-open session.\n" msgstr "" -#: src/dird/ua_run.c:596 -msgid "Enter a regexp" +#: src/stored/fd_cmds.c:268 +msgid "Attempt to open already open session.\n" msgstr "" -#: src/dird/ua_run.c:597 -msgid "Test filename manipulation" +#: src/stored/fd_cmds.c:322 +msgid "Attempt to read on non-open session.\n" msgstr "" -#: src/dird/ua_run.c:598 -msgid "Use this ?" +#: src/stored/fd_cmds.c:340 src/stored/fd_cmds.c:349 +msgid "Attempt to open read on non-open session.\n" msgstr "" -#: src/dird/ua_run.c:603 -#, fuzzy -msgid "Please enter the path prefix to strip: " -msgstr "Saisissez le début du chemin (prefix) à enlever : " +#: src/stored/fd_cmds.c:412 src/dird/getmsg.c:365 +#, c-format +msgid "Bad response to %s command: wanted %s, got %s\n" +msgstr "Mauvaise réponse à la commande %s : voulait %s, pas %s\n" -#: src/dird/ua_run.c:611 -#, fuzzy -msgid "Please enter the path prefix to add (/ for none): " -msgstr "Saisissez le chemin (prefix) à ajouter (/ pour aucun) : " +#: src/stored/fd_cmds.c:416 src/dird/getmsg.c:370 +#, c-format +msgid "Socket error on %s command: ERR=%s\n" +msgstr "Erreur de socket sur la commande %s : ERR=%s\n" -#: src/dird/ua_run.c:622 -#, fuzzy -msgid "Please enter the file suffix to add: " -msgstr "Saisissez une extention à ajouter aux fichiers : " +#: src/stored/block_util.c:88 +#, c-format +msgid "" +"Dump block %s %p: size=%d BlkNum=%d\n" +" Hdrcksum=%x cksum=%x\n" +msgstr "" -#: src/dird/ua_run.c:629 -msgid "Please enter a valid regexp (!from!to!): " -msgstr "Saisissez une regexp valide (!rechercher!remplacer!) : " +#: src/stored/block_util.c:103 +#, c-format +msgid " Rec: VId=%u VT=%u FI=%s Strm=%s len=%d reclen=%d\n" +msgstr "" -#: src/dird/ua_run.c:642 +#: src/stored/block_util.c:165 #, c-format -msgid "regexwhere=%s\n" +msgid "%d block read errors not printed.\n" msgstr "" -#: src/dird/ua_run.c:648 +#: src/stored/block_util.c:281 src/stored/block_util.c:297 +#: src/stored/block_util.c:307 #, c-format -msgid "strip_prefix=%s add_prefix=%s add_suffix=%s result=%s\n" +msgid "" +"Volume data error at %u:%u! Wanted ID: \"%s\", got \"%s\". Buffer " +"discarded.\n" msgstr "" -#: src/dird/ua_run.c:655 -msgid "Cannot use your regexp\n" -msgstr "Impossible d'utiliser votre regexp\n" +#: src/stored/block_util.c:322 +#, c-format +msgid "" +"Volume data error at %u:%u! Block length %u is insane (too large), probably " +"due to a bad archive.\n" +msgstr "" -#: src/dird/ua_run.c:658 -msgid "Enter a period (.) to stop this test\n" +#: src/stored/block_util.c:349 +#, c-format +msgid "" +"Volume data error at %u:%u!\n" +"Block checksum mismatch in block=%u len=%d: calc=%x blk=%x\n" msgstr "" -#: src/dird/ua_run.c:659 -msgid "Please enter filename to test: " -msgstr "Saisissez un nom de fichier à tester : " +#: src/stored/block_util.c:435 +#, fuzzy, c-format +msgid "" +"User defined maximum volume size %s will be exceeded on device %s.\n" +" Marking Volume \"%s\" as Full.\n" +msgstr "" +"Nombre maximum de job sur le volume atteind. Marquage du volume \"%s\" comme " +"Used.\n" -#: src/dird/ua_run.c:661 +#: src/stored/block_util.c:472 src/stored/block_util.c:478 #, c-format -msgid "%s -> %s\n" -msgstr "%s -> %s\n" - -#: src/dird/ua_run.c:705 -msgid "Cannot use your regexp.\n" -msgstr "Impossible d'utiliser votre regexp.\n" +msgid "Backspace file at EOT failed. ERR=%s\n" +msgstr "" -#: src/dird/ua_run.c:718 src/dird/ua_run.c:748 -msgid "Levels:\n" -msgstr "Types :\n" +#: src/stored/block_util.c:485 +#, c-format +msgid "Backspace record at EOT failed. ERR=%s\n" +msgstr "" -#: src/dird/ua_run.c:720 src/stored/status.c:665 src/lib/util.c:426 -#: src/lib/util.c:472 src/filed/status.c:519 -msgid "Full" -msgstr "Full" +#: src/stored/block_util.c:502 +#, c-format +msgid "Re-read last block at EOT failed. ERR=%s" +msgstr "Erreur sur la re-lecture du dernier bloc en EOT. ERR=%s" -#: src/dird/ua_run.c:721 src/stored/status.c:668 src/lib/util.c:429 -#: src/filed/status.c:522 -msgid "Incremental" -msgstr "Incrémental" +#: src/stored/block_util.c:512 +#, c-format +msgid "" +"Re-read of last block: block numbers differ by more than one.\n" +"Probable tape misconfiguration and data loss. Read block=%u Want block=%u.\n" +msgstr "" -#: src/dird/ua_run.c:722 src/stored/status.c:671 src/lib/util.c:432 -#: src/filed/status.c:525 -msgid "Differential" -msgstr "Différentiel" - -#: src/dird/ua_run.c:723 src/stored/status.c:674 src/lib/util.c:435 -#: src/filed/status.c:528 -msgid "Since" -msgstr "Depuis" - -#: src/dird/ua_run.c:724 -msgid "VirtualFull" -msgstr "" - -#: src/dird/ua_run.c:725 src/dird/ua_run.c:754 -msgid "Select level" -msgstr "Saisissez le type" - -#: src/dird/ua_run.c:749 -msgid "Initialize Catalog" -msgstr "Initialisez le catalogue" - -#: src/dird/ua_run.c:750 src/stored/status.c:677 src/lib/util.c:438 -#: src/filed/status.c:531 -msgid "Verify Catalog" -msgstr "" - -#: src/dird/ua_run.c:751 src/lib/util.c:444 -msgid "Verify Volume to Catalog" -msgstr "" - -#: src/dird/ua_run.c:752 src/lib/util.c:447 -msgid "Verify Disk to Catalog" -msgstr "" - -#: src/dird/ua_run.c:753 -msgid "Verify Volume Data (not yet implemented)" -msgstr "Vérification des données sur le volume (pas encore implémenté)" - -#: src/dird/ua_run.c:774 -msgid "Level not appropriate for this Job. Cannot be changed.\n" -msgstr "" - -#: src/dird/ua_run.c:805 -#, fuzzy, c-format -msgid "" -"Run Admin Job\n" -"JobName: %s\n" -"FileSet: %s\n" -"Client: %s\n" -"Storage: %s\n" -"When: %s\n" -"Priority: %d\n" -msgstr "" -"Lancement du job %s\n" -"JobName : %s\n" -"FileSet : %s\n" -"Client : %s\n" -"Storage : %s\n" -"Quand : %s\n" -"Priorité : %d\n" - -#: src/dird/ua_run.c:849 -#, fuzzy, c-format -msgid "" -"Run Backup job\n" -"JobName: %s\n" -"Level: %s\n" -"Client: %s\n" -"FileSet: %s\n" -"Pool: %s (From %s)\n" -"Storage: %s (From %s)\n" -"When: %s\n" -"Priority: %d\n" -"%s%s%s" -msgstr "" -"Lancement du job %s\n" -"JobName : %s\n" -"Niveau : %s\n" -"Client : %s\n" -"FileSet : %s\n" -"Pool : %s (Depuis %s)\n" -"Storage : %s (Depuis %s)\n" -"Quand : %s\n" -"Priorité : %d\n" - -#: src/dird/ua_run.c:880 -#, fuzzy, c-format -msgid "Could not get job record for selected JobId. ERR=%s" -msgstr "Impossible de récupérer le Job du JobId=%s : ERR=%s\n" - -#: src/dird/ua_run.c:919 -#, fuzzy, c-format -msgid "" -"Run Verify Job\n" -"JobName: %s\n" -"Level: %s\n" -"Client: %s\n" -"FileSet: %s\n" -"Pool: %s (From %s)\n" -"Storage: %s (From %s)\n" -"Verify Job: %s\n" -"Verify List: %s\n" -"When: %s\n" -"Priority: %d\n" -msgstr "" -"Lancement du job %s\n" -"JobName : %s\n" -"Niveau : %s\n" -"Client : %s\n" -"FileSet : %s\n" -"Pool : %s (Depuis %s)\n" -"Storage : %s (Depuis %s)\n" -"Verify Job : %s\n" -"Verify List: %s\n" -"Quand : %s\n" -"Priorité : %d\n" - -#: src/dird/ua_run.c:948 -msgid "Please enter a JobId for restore: " -msgstr "Saisissez le JobId pour la restauration : " - -#: src/dird/ua_run.c:988 -#, fuzzy, c-format -msgid "" -"Run Restore job\n" -"JobName: %s\n" -"Bootstrap: %s\n" -"RegexWhere: %s\n" -"Replace: %s\n" -"FileSet: %s\n" -"Backup Client: %s\n" -"Restore Client: %s\n" -"Storage: %s\n" -"When: %s\n" -"Catalog: %s\n" -"Priority: %d\n" -"Plugin Options: %s\n" -msgstr "" -"Lancement de la restauration\n" -"JobName : %s\n" -"Bootstrap : %s\n" -"RegexWhere : %s\n" -"Écrasement : %s\n" -"FileSet : %s\n" -"Backup Client : %s\n" -"Restore Client : %s\n" -"Storage : %s\n" -"Quand : %s\n" -"Catalogue : %s\n" -"Priorité : %d\n" - -#: src/dird/ua_run.c:1044 -#, c-format -msgid "" -"Run Restore job\n" -"JobName: %s\n" -"Bootstrap: %s\n" -"Where: %s\n" -"Replace: %s\n" -"FileSet: %s\n" -"Backup Client: %s\n" -"Restore Client: %s\n" -"Storage: %s\n" -"When: %s\n" -"Catalog: %s\n" -"Priority: %d\n" -"Plugin Options: %s\n" -msgstr "" -"Lancement de la restauration\n" -"JobName : %s\n" -"Bootstrap : %s\n" -"Déplacement : %s\n" -"Écrasement : %s\n" -"FileSet : %s\n" -"Backup Client : %s\n" -"Restore Client : %s\n" -"Storage : %s\n" -"Quand : %s\n" -"Catalogue : %s\n" -"Priorité : %d\n" -"Options Plugins: %s\n" - -#: src/dird/ua_run.c:1075 -#, c-format -msgid "" -"Run Restore job\n" -"JobName: %s\n" -"Bootstrap: %s\n" -msgstr "" -"Lancement de la restauration\n" -"JobName : %s\n" -"Bootstrap : %s\n" - -#: src/dird/ua_run.c:1083 -#, c-format -msgid "RegexWhere: %s\n" -msgstr "" - -#: src/dird/ua_run.c:1086 -#, c-format -msgid "Where: %s\n" -msgstr "Where : %s\n" - -#: src/dird/ua_run.c:1090 -#, c-format -msgid "" -"Replace: %s\n" -"Client: %s\n" -"Storage: %s\n" -"JobId: %s\n" -"When: %s\n" -"Catalog: %s\n" -"Priority: %d\n" -"Plugin Options: %s\n" -msgstr "" -"Écrasement : %s\n" -"Client : %s\n" -"Storage : %s\n" -"JobId : %s\n" -"Quand : %s\n" -"Catalogue : %s\n" -"Priorité : %d\n" -"Options Plugins : %s\n" - -#: src/dird/ua_run.c:1145 -#, fuzzy -msgid "Run Copy job\n" -msgstr "Sélectionnez le Job de restauration" - -#: src/dird/ua_run.c:1147 -#, fuzzy -msgid "Run Migration job\n" -msgstr "Sélectionnez le Job de restauration" - -#: src/dird/ua_run.c:1176 -#, c-format -msgid "Unknown Job Type=%d\n" -msgstr "Job du Type=%d inconnu\n" - -#: src/dird/ua_run.c:1245 -#, c-format -msgid "Value missing for keyword %s\n" -msgstr "" - -#: src/dird/ua_run.c:1252 -msgid "Job name specified twice.\n" -msgstr "Le job est déjà spécifié.\n" - -#: src/dird/ua_run.c:1260 -msgid "JobId specified twice.\n" -msgstr "Le JobId est déjà spécifié.\n" - -#: src/dird/ua_run.c:1269 src/dird/ua_run.c:1409 -msgid "Client specified twice.\n" -msgstr "Le client est déjà spécifié.\n" - -#: src/dird/ua_run.c:1277 -msgid "FileSet specified twice.\n" -msgstr "Le FileSet est déjà spécifié.\n" - -#: src/dird/ua_run.c:1285 -msgid "Level specified twice.\n" -msgstr "Le type (Level) est déjà spécifié.\n" - -#: src/dird/ua_run.c:1294 -msgid "Storage specified twice.\n" -msgstr "Le Storage est déjà spécifié.\n" - -#: src/dird/ua_run.c:1302 -msgid "RegexWhere or Where specified twice.\n" -msgstr "RegexWhere ou Where est déjà spécifiée.\n" - -#: src/dird/ua_run.c:1307 -#, fuzzy -msgid "No authorization for \"regexwhere\" specification.\n" -msgstr "La destination (Where) est déjà spécifiée.\n" - -#: src/dird/ua_run.c:1314 -msgid "Where or RegexWhere specified twice.\n" -msgstr "RegexWhere ou Where est déjà spécifiée.\n" - -#: src/dird/ua_run.c:1319 -#, fuzzy -msgid "No authoriztion for \"where\" specification.\n" -msgstr "Pas d'enregistrement trouvé en base pour : %s\n" - -#: src/dird/ua_run.c:1326 -msgid "Bootstrap specified twice.\n" -msgstr "Le bootstrap est déjà spécifié.\n" - -#: src/dird/ua_run.c:1334 -msgid "Replace specified twice.\n" -msgstr "L'option d'écrasement (Replace) est déjà spécifié.\n" - -#: src/dird/ua_run.c:1342 -msgid "When specified twice.\n" -msgstr "La planification (When) est déjà spécifiée.\n" - -#: src/dird/ua_run.c:1350 -msgid "Priority specified twice.\n" -msgstr "La priorité (Priority) est déjà spécifiée.\n" - -#: src/dird/ua_run.c:1355 -msgid "Priority must be positive nonzero setting it to 10.\n" -msgstr "" -"La priorité doit être supérieure à zéro. Utilisation d'une priorité de 10.\n" - -#: src/dird/ua_run.c:1365 -msgid "Verify Job specified twice.\n" -msgstr "" - -#: src/dird/ua_run.c:1393 -msgid "Migration Job specified twice.\n" -msgstr "" - -#: src/dird/ua_run.c:1401 -msgid "Pool specified twice.\n" -msgstr "Le pool est déjà spécifié.\n" - -#: src/dird/ua_run.c:1417 -#, fuzzy -msgid "Restore Client specified twice.\n" -msgstr "Le client est déjà spécifié.\n" - -#: src/dird/ua_run.c:1424 -#, fuzzy -msgid "Plugin Options not yet implemented.\n" -msgstr "Le client est déjà spécifié.\n" - -#: src/dird/ua_run.c:1427 -#, fuzzy -msgid "Plugin Options specified twice.\n" -msgstr "Le client est déjà spécifié.\n" - -#: src/dird/ua_run.c:1432 -#, fuzzy -msgid "No authoriztion for \"PluginOptions\" specification.\n" -msgstr "Pas d'enregistrement trouvé en base pour : %s\n" - -#: src/dird/ua_run.c:1439 -#, fuzzy -msgid "Spool flag specified twice.\n" -msgstr "Le pool est déjà spécifié.\n" - -#: src/dird/ua_run.c:1446 -#, fuzzy -msgid "Invalid spooldata flag.\n" -msgstr "Période invalide.\n" - -#: src/dird/ua_run.c:1455 -#, fuzzy -msgid "IgnoreDuplicateCheck flag specified twice.\n" -msgstr "Le pool est déjà spécifié.\n" - -#: src/dird/ua_run.c:1462 -#, fuzzy -msgid "Invalid ignoreduplicatecheck flag.\n" -msgstr "Période invalide.\n" - -#: src/dird/ua_run.c:1467 -#, fuzzy -msgid "Accurate flag specified twice.\n" -msgstr "Le pool est déjà spécifié.\n" - -#: src/dird/ua_run.c:1474 -#, fuzzy -msgid "Invalid accurate flag.\n" -msgstr "Période invalide.\n" - -#: src/dird/ua_run.c:1495 -#, c-format -msgid "Invalid keyword: %s\n" -msgstr "Argument invalide : %s\n" - -#: src/dird/ua_run.c:1510 -#, c-format -msgid "Catalog \"%s\" not found\n" -msgstr "Le catalogue \"%s\" est introuvable\n" - -#: src/dird/ua_run.c:1514 -#, c-format -msgid "No authorization. Catalog \"%s\".\n" -msgstr "" - -#: src/dird/ua_run.c:1525 -#, c-format -msgid "Job \"%s\" not found\n" -msgstr "Le job \"%s\" est introuvable\n" - -#: src/dird/ua_run.c:1532 -msgid "A job name must be specified.\n" -msgstr "Un nom de Job doit être spécifié.\n" - -#: src/dird/ua_run.c:1538 -#, c-format -msgid "No authorization. Job \"%s\".\n" -msgstr "" - -#: src/dird/ua_run.c:1546 -#, c-format -msgid "Pool \"%s\" not found.\n" -msgstr "Le pool \"%s\" est introuvable.\n" - -#: src/dird/ua_run.c:1556 -#, c-format -msgid "No authorization. Pool \"%s\".\n" -msgstr "" - -#: src/dird/ua_run.c:1566 -#, c-format -msgid "Storage \"%s\" not found.\n" -msgstr "Le Storage \"%s\" est introuvable.\n" - -#: src/dird/ua_run.c:1575 src/dird/job.c:1245 -msgid "No storage specified.\n" -msgstr "Pas de storage sélectionné.\n" - -#: src/dird/ua_run.c:1578 -#, c-format -msgid "No authorization. Storage \"%s\".\n" -msgstr "" - -#: src/dird/ua_run.c:1598 src/dird/ua_run.c:1618 -#, c-format -msgid "No authorization. Client \"%s\".\n" -msgstr "" - -#: src/dird/ua_run.c:1608 -#, fuzzy, c-format -msgid "Restore Client \"%s\" not found.\n" -msgstr "le client \"%s\" est introuvable.\n" - -#: src/dird/ua_run.c:1627 -#, c-format -msgid "FileSet \"%s\" not found.\n" -msgstr "Le FileSet \"%s\" est introuvable.\n" - -#: src/dird/ua_run.c:1636 -#, c-format -msgid "No authorization. FileSet \"%s\".\n" -msgstr "" - -#: src/dird/ua_run.c:1644 -#, c-format -msgid "Verify Job \"%s\" not found.\n" -msgstr "" - -#: src/dird/ua_run.c:1654 -#, c-format -msgid "Migration Job \"%s\" not found.\n" -msgstr "" - -#: src/dird/dir_plugins.c:181 src/stored/sd_plugins.c:194 -#: src/filed/fd_plugins.c:1130 -#, c-format -msgid "Loaded plugin: %s\n" -msgstr "" - -#: src/dird/dir_plugins.c:201 src/stored/sd_plugins.c:214 -#: src/filed/fd_plugins.c:1151 -#, c-format -msgid "Plugin magic wrong. Plugin=%s wanted=%s got=%s\n" -msgstr "" - -#: src/dird/dir_plugins.c:209 src/stored/sd_plugins.c:222 -#: src/filed/fd_plugins.c:1159 +#: src/stored/block_util.c:517 #, c-format -msgid "Plugin version incorrect. Plugin=%s wanted=%d got=%d\n" +msgid "" +"Re-read of last block OK, but block numbers differ. Read block=%u Want block=" +"%u.\n" msgstr "" -#: src/dird/dir_plugins.c:218 src/stored/sd_plugins.c:231 -#: src/filed/fd_plugins.c:1167 -#, c-format -msgid "Plugin license incompatible. Plugin=%s license=%s\n" -msgstr "" +#: src/stored/block_util.c:521 +msgid "Re-read of last block succeeded.\n" +msgstr "La re-lecture du dernier bloc écrit a réussi.\n" -#: src/dird/dir_plugins.c:226 src/stored/sd_plugins.c:239 -#: src/filed/fd_plugins.c:1175 +#: src/stored/block_util.c:560 #, c-format -msgid "Plugin size incorrect. Plugin=%s wanted=%d got=%d\n" +msgid "" +"Error writing final EOF to tape. This Volume may not be readable.\n" +"%s" msgstr "" -#: src/dird/backup.c:96 -msgid "No Storage specification found in Job or Pool.\n" -msgstr "Pas de Storage défini dans le Job ou le Pool.\n" - -#: src/dird/backup.c:256 -#, fuzzy, c-format -msgid "Using BaseJobId(s): %s\n" -msgstr "Migration utilisant JobId=%s Job=%s\n" - -#: src/dird/backup.c:266 +#: src/stored/block_util.c:578 #, fuzzy -msgid "Cannot find previous jobids.\n" -msgstr "Impossible de trouver la ressource Job \"%s\"\n" - -#: src/dird/backup.c:275 -msgid "Sending Accurate information.\n" -msgstr "" - -#: src/dird/backup.c:328 -#, c-format -msgid "Start Backup JobId %s, Job=%s\n" -msgstr "Démarrage du backup JobId %s, Job=%s\n" - -#: src/dird/backup.c:521 -#, c-format -msgid "Unexpected Client Job message: %s\n" -msgstr "" - -#: src/dird/backup.c:534 -#, c-format -msgid "Network error with FD during %s: ERR=%s\n" -msgstr "" - -#: src/dird/backup.c:569 -msgid "No Job status returned from FD.\n" -msgstr "Impossible de récupérer le statut du Job depuis le FD.\n" - -#: src/dird/backup.c:657 -msgid "Backup failed -- incomplete" -msgstr "" +msgid "Error sending Volume info to Director.\n" +msgstr "Erreur pendant la récupération des informations sur un Volume : %s" -#: src/dird/backup.c:730 +#: src/stored/bcopy.c:64 #, fuzzy, c-format msgid "" -"%s %s %s (%s):\n" -" Build OS: %s %s %s\n" -" JobId: %d\n" -" Job: %s\n" -" Backup Level: %s%s\n" -" Client: \"%s\" %s\n" -" FileSet: \"%s\" %s\n" -" Pool: \"%s\" (From %s)\n" -" Catalog: \"%s\" (From %s)\n" -" Storage: \"%s\" (From %s)\n" -" Scheduled time: %s\n" -" Start time: %s\n" -" End time: %s\n" -" Elapsed time: %s\n" -" Priority: %d\n" -" FD Files Written: %s\n" -" SD Files Written: %s\n" -" FD Bytes Written: %s (%sB)\n" -" SD Bytes Written: %s (%sB)\n" -" Rate: %.1f KB/s\n" -" Software Compression: %s\n" -"%s VSS: %s\n" -" Encryption: %s\n" -" Accurate: %s\n" -" Volume name(s): %s\n" -" Volume Session Id: %d\n" -" Volume Session Time: %d\n" -" Last Volume Bytes: %s (%sB)\n" -" Non-fatal FD errors: %d\n" -" SD Errors: %d\n" -" FD termination status: %s\n" -" SD termination status: %s\n" -" Termination: %s\n" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: bcopy [-d debug_level] \n" +" -b bootstrap specify a bootstrap file\n" +" -c specify a Storage configuration file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -i specify input Volume names (separated by |)\n" +" -o specify output Volume names (separated by |)\n" +" -p proceed inspite of errors\n" +" -v verbose\n" +" -w specify working directory (default /tmp)\n" +" -? print this message\n" "\n" msgstr "" -"%s %s %s (%s): %s\n" -" Build OS : %s %s %s\n" -" JobId : %d\n" -" Job : %s\n" -" Niveau de backup : %s%s\n" -" Client : \"%s\" %s\n" -" FileSet : \"%s\" %s\n" -" Pool : \"%s\" (Depuis %s)\n" -" Catalog: \"%s\" (Depuis %s)\n" -" Storage : \"%s\" (Depuis %s)\n" -" Date prévue : %s\n" -" Date de début : %s\n" -" Date de fin : %s\n" -" Temps écoulé : %s\n" -" Priorité : %d\n" -" Fichiers écrits FD : %s\n" -" Fichiers écrits SD : %s\n" -" Octets écrits FD : %s (%so)\n" -" Octets écrits SD : %s (%so)\n" -" Débit : %.1f Ko/s\n" -" Compression logicielle : %s\n" -" VSS : %s\n" -" Cryptage : %s\n" -" Accurate : %s\n" -" Nom des Volumes : %s\n" -" Volume Session Id : %d\n" -" Volume Session date : %d\n" -" Taille du volume : %s (%so)\n" -" Erreurs FD non fatales : %d\n" -" Erreurs du SD : %d\n" -" Statut de fin du FD : %s\n" -" Statut de fin du SD : %s\n" -" Statut de fin : %s\n" "\n" +"Version : %s (%s)\n" +"\n" +"Usage : dird [-f -s] [-c config_file] [-d debug_level] [config_file]\n" +" -c utilise fich comme fichier de configuration\n" +" -dnn positionne le niveau de debug à nn\n" +" -f reste en avant-plan (pour debugger)\n" +" -g groupid\n" +" -r lance maintenant\n" +" -s pas de signaux\n" +" -t test - lit seulement le fichier de configuration\n" +" -u userid\n" +" -v affiche les messages utilisateurs\n" +" -? affiche ce message.\n" +"\n" + +#: src/stored/bcopy.c:209 +msgid "Write of last block failed.\n" +msgstr "" -#: src/dird/backup.c:832 +#: src/stored/bcopy.c:213 #, c-format -msgid "Could not get Job Volume Parameters to update Bootstrap file. ERR=%s\n" +msgid "%u Jobs copied. %u records copied.\n" msgstr "" -#: src/dird/backup.c:868 -#, c-format -msgid "" -"Could not open WriteBootstrap file:\n" -"%s: ERR=%s\n" +#: src/stored/bcopy.c:246 +msgid "Volume is prelabeled. This volume cannot be copied.\n" msgstr "" -"Impossible d'ouvrir le fichier bootstrap (WriteBootstrap) :\n" -"%s : ERR=%s\n" -#: src/dird/restore.c:137 src/dird/msgchan.c:476 -#, c-format -msgid "Could not open bootstrap file %s: ERR=%s\n" -msgstr "Impossible d'ouvrir le fichier bootstrap %s : ERR=%s\n" +#: src/stored/bcopy.c:249 +msgid "Volume label not copied.\n" +msgstr "" -#: src/dird/restore.c:185 src/dird/restore.c:276 -#, fuzzy, c-format -msgid "Could not get storage resource '%s'.\n" -msgstr "Impossible de trouver la ressource Storage \"%s\"\n" +#: src/stored/bcopy.c:255 +msgid "Copy skipped. Record does not match BSR filter.\n" +msgstr "" -#: src/dird/restore.c:314 -#, fuzzy, c-format -msgid "Could not acquire read storage lock for \"%s\"" -msgstr "Impossible de trouver la ressource Storage \"%s\"\n" +#: src/stored/bcopy.c:286 +msgid "EOM label not copied.\n" +msgstr "" -#: src/dird/restore.c:505 -msgid "" -"Cannot restore without a bootstrap file.\n" -"You probably ran a restore job directly. All restore jobs must\n" -"be run using the restore command.\n" +#: src/stored/bcopy.c:289 +msgid "EOT label not copied.\n" msgstr "" -#: src/dird/restore.c:513 +#: src/stored/tape_dev.c:226 #, c-format -msgid "Start Restore Job %s\n" -msgstr "Démarrage du Job de restauration %s\n" +msgid "No tape loaded or drive offline on %s.\n" +msgstr "" -#: src/dird/restore.c:564 -msgid "Restore OK -- warning file count mismatch" -msgstr "Restauration Ok -- attention le nombre de fichier ne correspond pas" +#: src/stored/tape_dev.c:236 +#, c-format +msgid "Rewind error on %s. ERR=%s.\n" +msgstr "" -#: src/dird/restore.c:566 -msgid "Restore OK" -msgstr "Restauration OK" +#: src/stored/tape_dev.c:261 +#, fuzzy, c-format +msgid "Bad call to eod. Device %s not open\n" +msgstr "Le Device %s n'est pas ouvert.\n" -#: src/dird/restore.c:570 -#, fuzzy -msgid "Restore OK -- with warnings" -msgstr "Backup OK -- avec des erreurs" +#: src/stored/tape_dev.c:333 +#, c-format +msgid "ioctl MTEOM error on %s. ERR=%s.\n" +msgstr "" -#: src/dird/restore.c:574 -msgid "*** Restore Error ***" -msgstr "*** Restauration en erreur ***" +#: src/stored/tape_dev.c:344 src/stored/os.c:184 +#, c-format +msgid "ioctl MTIOCGET error on %s. ERR=%s.\n" +msgstr "" -#: src/dird/restore.c:584 -msgid "Restore Canceled" -msgstr "Restauration annulée" +#: src/stored/tape_dev.c:428 +msgid "Bad call to load_dev. Device not open\n" +msgstr "" -#: src/dird/restore.c:611 -#, fuzzy, c-format -msgid "" -"%s %s %s (%s):\n" -" Build OS: %s %s %s\n" -" JobId: %d\n" -" Job: %s\n" -" Restore Client: %s\n" -" Start time: %s\n" -" End time: %s\n" -" Files Expected: %s\n" -" Files Restored: %s\n" -" Bytes Restored: %s\n" -" Rate: %.1f KB/s\n" -" FD Errors: %d\n" -" FD termination status: %s\n" -" SD termination status: %s\n" -" Termination: %s\n" -"\n" +#: src/stored/tape_dev.c:439 src/stored/tape_dev.c:452 +#, c-format +msgid "ioctl MTLOAD error on %s. ERR=%s.\n" msgstr "" -"%s %s %s (%s): %s\n" -" Build OS: %s %s %s\n" -" JobId : %d\n" -" Job : %s\n" -" Client : %s\n" -" Début : %s\n" -" Fin : %s\n" -" Fichiers attendus : %s\n" -" Fichiers restaurés : %s\n" -" Octets restaurés : %s\n" -" Débit : %.1f Ko/s\n" -" Erreurs du FD : %d\n" -" Statut de fin du FD : %s\n" -" Statut de fin du SD : %s\n" -" Etat : %s\n" -#: src/dird/ua_status.c:174 -msgid "Status available for:\n" -msgstr "Statut disponible pour :\n" +#: src/stored/tape_dev.c:483 +#, c-format +msgid "ioctl MTOFFL error on %s. ERR=%s.\n" +msgstr "" -#: src/dird/ua_status.c:180 -msgid "Select daemon type for status" -msgstr "Saisissez le composant à afficher" +#: src/stored/tape_dev.c:524 +msgid "Bad call to fsf. Device not open\n" +msgstr "" -#: src/dird/ua_status.c:294 src/stored/status.c:248 +#: src/stored/tape_dev.c:535 src/stored/tape_dev.c:662 #, c-format -msgid "%s Version: %s (%s) %s %s %s\n" -msgstr "%s Version : %s (%s) %s %s %s\n" +msgid "Device %s at End of Tape.\n" +msgstr "" -#: src/dird/ua_status.c:297 -#, fuzzy, c-format -msgid "Daemon started %s. Jobs: run=%d, running=%d mode=%d,%d\n" -msgstr "Démon démarré depuis %s, %d jobs lancés depuis cette date.\n" +#: src/stored/tape_dev.c:566 src/stored/tape_dev.c:642 +#, c-format +msgid "ioctl MTFSF error on %s. ERR=%s.\n" +msgstr "" -#: src/dird/ua_status.c:300 src/stored/status.c:258 src/filed/status.c:142 -#, fuzzy, c-format -msgid " Heap: heap=%s smbytes=%s max_bytes=%s bufs=%s max_bufs=%s\n" -msgstr " Heap: bytes=%s smbytes=%s max_bytes=%s bufs=%s max_bufs=%s\n" +#: src/stored/tape_dev.c:691 +msgid "Bad call to bsf. Device not open\n" +msgstr "" -#: src/dird/ua_status.c:358 +#: src/stored/tape_dev.c:697 #, c-format -msgid "" -"\n" -"Failed to connect to Storage daemon %s.\n" -"====\n" +msgid "Device %s cannot BSF because it is not a tape.\n" msgstr "" -"\n" -"Impossible de se connecter au Storage Daemon %s.\n" -"====\n" -#: src/dird/ua_status.c:400 +#: src/stored/tape_dev.c:714 #, c-format -msgid "" -"Failed to connect to Client %s.\n" -"====\n" +msgid "ioctl MTBSF error on %s. ERR=%s.\n" msgstr "" -"Impossible de se connecter au client %s.\n" -"====\n" -#: src/dird/ua_status.c:408 -msgid "Connected to file daemon\n" -msgstr "Connecté avec le File Daemon\n" +#: src/stored/tape_dev.c:733 +msgid "Bad call to fsr. Device not open\n" +msgstr "" -#: src/dird/ua_status.c:428 -msgid "" -"\n" -"Scheduled Jobs:\n" +#: src/stored/tape_dev.c:743 +#, c-format +msgid "ioctl MTFSR not permitted on %s.\n" msgstr "" -"\n" -"Jobs planifiés :\n" -#: src/dird/ua_status.c:429 -msgid "" -"Level Type Pri Scheduled Name Volume\n" +#: src/stored/tape_dev.c:771 +#, c-format +msgid "ioctl MTFSR %d error on %s. ERR=%s.\n" msgstr "" -"Type Action Pri Planification Nom Volume\n" -#: src/dird/ua_status.c:430 -msgid "===================================================================================\n" +#: src/stored/tape_dev.c:789 +msgid "Bad call to bsr_dev. Device not open\n" msgstr "" -#: src/dird/ua_status.c:486 -#, fuzzy, c-format -msgid "%-14s\t%-8s\t%3d\t%-18s\t%-18s\t%s\n" -msgstr "%-14s %-8s %3d %-18s %-18s %s\n" +#: src/stored/tape_dev.c:799 +#, c-format +msgid "ioctl MTBSR not permitted on %s.\n" +msgstr "" -#: src/dird/ua_status.c:490 +#: src/stored/tape_dev.c:813 #, c-format -msgid "%-14s %-8s %3d %-18s %-18s %s\n" -msgstr "%-14s %-8s %3d %-18s %-18s %s\n" +msgid "ioctl MTBSR error on %s. ERR=%s.\n" +msgstr "" -#: src/dird/ua_status.c:544 -msgid "Ignoring invalid value for days. Max is 500.\n" +#: src/stored/tape_dev.c:850 src/stored/file_dev.c:90 +msgid "Bad call to reposition. Device not open\n" msgstr "" -#: src/dird/ua_status.c:587 -msgid "No Scheduled Jobs.\n" -msgstr "Pas de job programmé.\n" +#: src/stored/tape_dev.c:912 +msgid "Bad call to weof_dev. Device not open\n" +msgstr "" -#: src/dird/ua_status.c:604 src/stored/status.c:450 src/filed/status.c:183 -msgid "" -"\n" -"Running Jobs:\n" +#: src/stored/tape_dev.c:922 +msgid "Attempt to WEOF on non-appendable Volume\n" msgstr "" -"\n" -"Job en cours :\n" -#: src/dird/ua_status.c:612 +#: src/stored/tape_dev.c:940 #, c-format -msgid "Console connected at %s\n" -msgstr "Console connecté à %s\n" - -#: src/dird/ua_status.c:622 -msgid "" -"No Jobs running.\n" -"====\n" +msgid "ioctl MTWEOF error on %s. ERR=%s.\n" msgstr "" -"Pas de job en cours.\n" -"====\n" - -#: src/dird/ua_status.c:628 -msgid " JobId Level Name Status\n" -msgstr " JobId Type Nom Statut\n" - -#: src/dird/ua_status.c:629 src/filed/status.c:342 -msgid "======================================================================\n" -msgstr "======================================================================\n" -#: src/dird/ua_status.c:638 -msgid "is waiting execution" -msgstr "est en attente d'exécution" +#: src/stored/tape_dev.c:986 src/stored/file_dev.c:318 +#, c-format +msgid "Device %s cannot be %smounted. ERR=%s\n" +msgstr "Le Device %s ne peut pas être %smounted. ERR=%s\n" -#: src/dird/ua_status.c:641 -msgid "is running" -msgstr "est en cours" +#: src/stored/butil.c:46 +msgid "Nohdr," +msgstr "" -#: src/dird/ua_status.c:644 -msgid "is blocked" -msgstr "est bloqué" +#: src/stored/butil.c:49 +msgid "partial," +msgstr "" -#: src/dird/ua_status.c:647 -msgid "has terminated" -msgstr "est terminé" +#: src/stored/butil.c:52 +msgid "empty," +msgstr "" -#: src/dird/ua_status.c:650 -#, fuzzy -msgid "has terminated with warnings" -msgstr "Job terminés :\n" +#: src/stored/butil.c:55 +msgid "Nomatch," +msgstr "" -#: src/dird/ua_status.c:653 -msgid "has erred" +#: src/stored/butil.c:58 +msgid "cont," msgstr "" -#: src/dird/ua_status.c:656 -msgid "has errors" -msgstr "est en erreur" +#: src/stored/butil.c:148 +msgid "Volume name or names is too long. Please use a .bsr file.\n" +msgstr "" -#: src/dird/ua_status.c:659 -msgid "has a fatal error" -msgstr "est en erreur (fatale)" +#: src/stored/butil.c:168 +#, c-format +msgid "Cannot find device \"%s\" in config file %s.\n" +msgstr "" -#: src/dird/ua_status.c:662 -msgid "has verify differences" +#: src/stored/butil.c:175 +#, c-format +msgid "Cannot init device %s\n" msgstr "" -#: src/dird/ua_status.c:665 -msgid "has been canceled" -msgstr "a été annulé" +#: src/stored/butil.c:195 +#, c-format +msgid "Cannot open %s\n" +msgstr "" -#: src/dird/ua_status.c:670 -#, fuzzy -msgid "is waiting on Client" -msgstr "est en attente du client %s" +#: src/stored/butil.c:282 +#, c-format +msgid "Could not find device \"%s\" in config file %s.\n" +msgstr "" -#: src/dird/ua_status.c:672 +#: src/stored/butil.c:287 #, c-format -msgid "is waiting on Client %s" -msgstr "est en attente du client %s" +msgid "Using device: \"%s\" for writing.\n" +msgstr "" -#: src/dird/ua_status.c:680 src/dird/ua_status.c:682 -#, fuzzy, c-format -msgid "is waiting on Storage \"%s\"" -msgstr "est en attente du Storage %s" +#: src/stored/butil.c:289 +#, c-format +msgid "Using device: \"%s\" for reading.\n" +msgstr "" -#: src/dird/ua_status.c:684 -#, fuzzy -msgid "is waiting on Storage" -msgstr "est en attente du Storage %s" +#: src/stored/butil.c:305 +msgid "Unexpected End of Data\n" +msgstr "" -#: src/dird/ua_status.c:690 -msgid "is waiting on max Storage jobs" +#: src/stored/butil.c:307 +msgid "Unexpected End of Tape\n" msgstr "" -#: src/dird/ua_status.c:693 -msgid "is waiting on max Client jobs" +#: src/stored/butil.c:309 +msgid "Unexpected End of File\n" msgstr "" -#: src/dird/ua_status.c:696 -msgid "is waiting on max Job jobs" +#: src/stored/butil.c:311 +msgid "Tape Door is Open\n" msgstr "" -#: src/dird/ua_status.c:699 -msgid "is waiting on max total jobs" +#: src/stored/butil.c:313 +msgid "Unexpected Tape is Off-line\n" msgstr "" -#: src/dird/ua_status.c:702 -msgid "is waiting for its start time" -msgstr "attend son heure de démarrage" - -#: src/dird/ua_status.c:705 -msgid "is waiting for higher priority jobs to finish" -msgstr "attend qu'un job plus prioritaire se termine" +#: src/stored/ansi_label.c:81 +#, c-format +msgid "Read error on device %s in ANSI label. ERR=%s\n" +msgstr "" -#: src/dird/ua_status.c:708 src/dird/ua_status.c:759 src/lib/util.c:241 -msgid "SD committing Data" +#: src/stored/ansi_label.c:91 +msgid "Insane! End of tape while reading ANSI label.\n" msgstr "" -#: src/dird/ua_status.c:711 src/dird/ua_status.c:762 src/lib/util.c:244 -#, fuzzy -msgid "SD despooling Data" -msgstr "Spooling des données...\n" +#: src/stored/ansi_label.c:117 +msgid "No VOL1 label while reading ANSI/IBM label.\n" +msgstr "" -#: src/dird/ua_status.c:714 src/dird/ua_status.c:765 src/lib/util.c:247 -#, fuzzy -msgid "SD despooling Attributes" -msgstr "Spooling des données...\n" +#: src/stored/ansi_label.c:140 +#, c-format +msgid "Wanted ANSI Volume \"%s\" got \"%s\"\n" +msgstr "" -#: src/dird/ua_status.c:717 src/dird/ua_status.c:768 src/lib/util.c:250 -msgid "Dir inserting Attributes" +#: src/stored/ansi_label.c:151 +msgid "No HDR1 label while reading ANSI label.\n" msgstr "" -#: src/dird/ua_status.c:722 +#: src/stored/ansi_label.c:157 #, c-format -msgid "is in unknown state %c" -msgstr "est dans un état inconnu %c" +msgid "ANSI/IBM Volume \"%s\" does not belong to Bacula.\n" +msgstr "" -#: src/dird/ua_status.c:736 -msgid "is waiting for a mount request" -msgstr "est en attente d'un montage" +#: src/stored/ansi_label.c:169 +msgid "No HDR2 label while reading ANSI/IBM label.\n" +msgstr "" -#: src/dird/ua_status.c:743 -msgid "is waiting for an appendable Volume" -msgstr "est en attente d'un volume libre" +#: src/stored/ansi_label.c:184 +msgid "Unknown or bad ANSI/IBM label record.\n" +msgstr "" -#: src/dird/ua_status.c:751 -#, fuzzy -msgid "is waiting for Client to connect to Storage daemon" -msgstr "attend que le client %s se connecte au Storage %s" +#: src/stored/ansi_label.c:192 +msgid "Too many records in while reading ANSI/IBM label.\n" +msgstr "" -#: src/dird/ua_status.c:753 +#: src/stored/ansi_label.c:292 #, c-format -msgid "is waiting for Client %s to connect to Storage %s" -msgstr "attend que le client %s se connecte au Storage %s" +msgid "ANSI Volume label name \"%s\" longer than 6 chars.\n" +msgstr "" -#: src/dird/ua_status.c:784 +#: src/stored/ansi_label.c:318 #, fuzzy, c-format -msgid "%6d\t%-6s\t%-20s\t%s\t%s\n" -msgstr "%6d %-6s %-20s %s\n" +msgid "Could not write ANSI VOL1 label. Wanted size=%d got=%d ERR=%s\n" +msgstr "Impossible de créer le fichier d'état : %s ERR=%s\n" -#: src/dird/ua_status.c:788 +#: src/stored/ansi_label.c:356 src/stored/ansi_label.c:385 #, c-format -msgid "%6d %-6s %-20s %s\n" -msgstr "%6d %-6s %-20s %s\n" +msgid "Could not write ANSI HDR1 label. ERR=%s\n" +msgstr "" -#: src/dird/ua_status.c:792 -#, c-format -msgid " %-30s\n" +#: src/stored/ansi_label.c:361 src/stored/ansi_label.c:392 +msgid "Could not write ANSI HDR1 label.\n" msgstr "" -#: src/dird/ua_status.c:812 -msgid "No Terminated Jobs.\n" -msgstr "Pas de job terminé.\n" +#: src/stored/ansi_label.c:397 +#, c-format +msgid "Error writing EOF to tape. ERR=%s" +msgstr "" -#: src/dird/ua_status.c:818 src/stored/status.c:572 src/filed/status.c:330 -msgid "" -"\n" -"Terminated Jobs:\n" +#: src/stored/ansi_label.c:402 +msgid "write_ansi_ibm_label called for non-ANSI/IBM type\n" msgstr "" -"\n" -"Job terminés :\n" -#: src/dird/ua_status.c:819 src/stored/status.c:579 src/filed/status.c:340 -msgid " JobId Level Files Bytes Status Finished Name \n" -msgstr " JobId Type Fichiers Octets Statut Terminé Nom\n" +#: src/stored/vol_mgr.c:80 +#, fuzzy, c-format +msgid "Unable to initialize volume list lock. ERR=%s\n" +msgstr "Impossible d'initialiser le verrou sur la base. ERR=%s\n" -#: src/dird/ua_status.c:820 -msgid "====================================================================\n" -msgstr "=====================================================================\n" +#: src/stored/vol_mgr.c:370 +#, fuzzy, c-format +msgid "Could not reserve volume \"%s\", because job canceled.\n" +msgstr "Impossible de trouver le prochain volume pour le Job %s.\n" -#: src/dird/ua_status.c:852 src/stored/status.c:601 src/lib/util.c:180 -#: src/filed/status.c:363 -msgid "Created" -msgstr "Crée" +#: src/stored/vol_mgr.c:381 +#, fuzzy, c-format +msgid "Could not reserve volume \"%s\" for append, because it will be read.\n" +msgstr "Impossible de trouver le prochain volume pour le Job %s.\n" -#: src/dird/ua_status.c:856 src/stored/status.c:605 src/lib/util.c:196 -#: src/lib/util.c:331 src/lib/util.c:478 src/filed/status.c:367 -msgid "Error" -msgstr "Erreur" +#: src/stored/vol_mgr.c:414 +#, fuzzy, c-format +msgid "Cannot free Volume \"%s\", because it is reserved by someone else.\n" +msgstr "Impossible de pruner le Volume \"%s\" car il est archivé.\n" -#: src/dird/ua_status.c:859 src/stored/status.c:608 src/filed/status.c:370 -msgid "Diffs" +#: src/stored/vol_mgr.c:512 +#, c-format +msgid "Volume %s is busy swapping from %s to %s\n" msgstr "" -#: src/dird/ua_status.c:865 src/stored/status.c:614 src/stored/btape.c:1523 -#: src/lib/util.c:189 src/lib/util.c:324 src/filed/status.c:376 -#: src/wx-console/wxbconfigpanel.cpp:209 -msgid "OK" -msgstr "OK" - -#: src/dird/ua_status.c:868 src/stored/status.c:617 src/lib/util.c:202 -#: src/lib/util.c:327 -msgid "OK -- with warnings" -msgstr "OK -- avec des avertissements" - -#: src/dird/ua_status.c:871 src/stored/status.c:620 src/filed/status.c:379 -msgid "Other" -msgstr "Autre" +#: src/stored/vol_mgr.c:515 +#, fuzzy, c-format +msgid "Volume %s is busy swapping.\n" +msgstr "Le device %s est occupé en lecture.\n" -#: src/dird/ua_status.c:875 src/stored/status.c:632 src/filed/status.c:391 +#: src/stored/vol_mgr.c:519 #, fuzzy, c-format -msgid "%6d\t%-6s\t%8s\t%10s\t%-7s\t%-8s\t%s\n" -msgstr "%6d %-6s %8s %10s %-7s %-8s %s\n" +msgid "%s device %s is busy.\n" +msgstr "Le device %s est occupé en lecture.\n" -#: src/dird/ua_status.c:883 src/stored/status.c:640 src/filed/status.c:399 +#: src/stored/file_dev.c:148 #, c-format -msgid "%6d %-6s %8s %10s %-7s %-8s %s\n" -msgstr "%6d %-6s %8s %10s %-7s %-8s %s\n" - -#: src/dird/ua_status.c:892 -msgid "\n" -msgstr "\n" +msgid "Could not open file device %s. No Volume name given.\n" +msgstr "" -#: src/dird/ua_input.c:103 -msgid "Enter slot" -msgstr "Saisissez le slot" +#: src/stored/file_dev.c:171 +#, fuzzy, c-format +msgid "Could not open(%s,%s,0640): ERR=%s\n" +msgstr "Impossible d'ouvrir %s : ERR=%s\n" -#: src/dird/ua_input.c:107 src/dird/ua_input.c:113 +#: src/stored/file_dev.c:204 #, c-format -msgid "Expected a positive integer, got: %s\n" -msgstr "Attendait un entier positif, pas : %s\n" +msgid "Unable to truncate device %s. ERR=%s\n" +msgstr "" -#: src/dird/ua_input.c:170 -msgid "Invalid response. You must answer yes or no.\n" -msgstr "Réponse invalide. Vous devez répondre oui ou non.\n" +#: src/stored/file_dev.c:221 +#, fuzzy, c-format +msgid "Unable to stat device %s. ERR=%s\n" +msgstr "3910 Impossible d'ouvrir le device %s : ERR=%s\n" -#: src/dird/ua_input.c:193 -#, fuzzy -msgid "Invalid Enabled value, it must be yes, no, archived, 0, 1, or 2\n" -msgstr "Saisie invalide. Veuillez répondre oui ou non.\n" +#: src/stored/file_dev.c:235 +#, c-format +msgid "Device %s doesn't support ftruncate(). Recreating file %s.\n" +msgstr "" -#: src/dird/ua_input.c:220 +#: src/stored/file_dev.c:247 #, fuzzy, c-format -msgid "Illegal character \"%c\" in a comment.\n" -msgstr "Caractère illégal « %c » dans le nom.\n" +msgid "Could not reopen: %s, ERR=%s\n" +msgstr "Impossible d'ouvrir %s : ERR=%s\n" -#: src/dird/ua_input.c:227 -#, fuzzy -msgid "Comment too long.\n" -msgstr "Nom trop long.\n" +#: src/stored/lock.c:231 src/stored/lock.c:259 +#, fuzzy, c-format +msgid "pthread_cond_wait failure. ERR=%s\n" +msgstr "Erreur sur l'ouverture du périphérique. ERR=%s\n" -#: src/dird/ua_input.c:233 +#: src/stored/lock.c:475 #, fuzzy -msgid "Comment must be at least one character long.\n" -msgstr "Le nom du volume doit comporter au moins un caractère\n" - -#: src/dird/pythondir.c:121 src/stored/pythonsd.c:101 -#: src/stored/pythonsd.c:166 src/filed/pythonfd.c:94 src/filed/pythonfd.c:148 -#: src/filed/pythonfd.c:212 -msgid "Job pointer not found." -msgstr "" +msgid "unknown blocked code" +msgstr "source inconnue" -#: src/dird/pythondir.c:153 -msgid "Pool record not found." +#: src/stored/read.c:55 +msgid "No Volume names found for restore.\n" msgstr "" -#: src/dird/pythondir.c:209 src/stored/pythonsd.c:143 src/filed/pythonfd.c:125 +#: src/stored/read.c:132 src/stored/read.c:250 #, c-format -msgid "Attribute %s not found." -msgstr "Attribut %s non trouvé." - -#: src/dird/pythondir.c:252 src/dird/pythondir.c:258 src/stored/pythonsd.c:183 -#: src/filed/pythonfd.c:167 -msgid "Read-only attribute" +msgid ">filed: Error Hdr=%s\n" msgstr "" -#: src/dird/pythondir.c:284 -msgid "Priority must be 1-100" -msgstr "La priorité doit être comprise entre 1 et 100" - -#: src/dird/pythondir.c:289 -msgid "Job Level can be set only during JobInit" +#: src/stored/read.c:133 src/stored/read.c:166 src/stored/read.c:223 +#: src/stored/read.c:251 src/stored/read.c:266 +#, c-format +msgid "Error sending to File daemon. ERR=%s\n" msgstr "" -#: src/dird/pythondir.c:303 -msgid "Bad JobLevel string" +#: src/stored/read.c:165 src/stored/read.c:265 +#, c-format +msgid "Error sending to FD. ERR=%s\n" msgstr "" -#: src/dird/job.c:62 +#: src/stored/autochanger.c:62 #, c-format -msgid "Could not init job queue: ERR=%s\n" +msgid "No Changer Name given for device %s. Cannot continue.\n" msgstr "" -#: src/dird/job.c:94 +#: src/stored/autochanger.c:68 #, c-format -msgid "Could not add job queue: ERR=%s\n" +msgid "No Changer Command given for device %s. Cannot continue.\n" msgstr "" -#: src/dird/job.c:183 src/dird/job.c:433 src/dird/job.c:435 src/dird/job.c:485 -#: src/dird/job.c:487 src/dird/job.c:1129 src/dird/job.c:1170 -#: src/dird/job.c:1179 -#, fuzzy -msgid "Job resource" -msgstr "Pool à partir de sa définition" +#: src/stored/autochanger.c:137 +#, fuzzy, c-format +msgid "No slot defined in catalog (slot=%d) for Volume \"%s\" on %s.\n" +msgstr "Demande de labélisation du volume \"%s\" Slot %d...\n" -#: src/dird/job.c:230 src/dird/job.c:349 -#, c-format -msgid "Unimplemented job type: %d\n" +#: src/stored/autochanger.c:139 +msgid "Cartridge change or \"update slots\" may be required.\n" msgstr "" -#: src/dird/job.c:272 -msgid "Job canceled because max start delay time exceeded.\n" +#: src/stored/autochanger.c:145 +#, c-format +msgid "No \"Changer Device\" for %s. Manual load of Volume may be required.\n" msgstr "" -#: src/dird/job.c:277 -#, fuzzy -msgid "Job canceled because max run sched time exceeded.\n" +#: src/stored/autochanger.c:152 +#, c-format +msgid "No \"Changer Command\" for %s. Manual load of Volume may be requird.\n" msgstr "" -"Temps d'exécution maximum depuis la planification atteind. Abandon du job.\n" -#: src/dird/job.c:403 +#: src/stored/autochanger.c:186 #, c-format -msgid "JobId %s, Job %s marked to be canceled.\n" -msgstr "JobId %s, Job %s marqué pour être annulé.\n" - -#: src/dird/job.c:413 -msgid "Failed to connect to File daemon.\n" -msgstr "Impossible de se connecter au client.\n" - -#: src/dird/job.c:548 -msgid "Max wait time exceeded. Job canceled.\n" -msgstr "Temps d'attente maximum dépassé. Abandon du job.\n" - -#: src/dird/job.c:553 -msgid "Max run time exceeded. Job canceled.\n" -msgstr "Temps d'exécution maximum atteind. Abandon du job.\n" - -#: src/dird/job.c:558 -#, fuzzy -msgid "Max run sched time exceeded. Job canceled.\n" -msgstr "Temps d'exécution maximum atteind. Abandon du job.\n" - -#: src/dird/job.c:680 -#, fuzzy, c-format -msgid "Pool \"%s\" not in database. ERR=%s" -msgstr "Pool %s introuvable en base. %s" - -#: src/dird/job.c:684 -#, fuzzy, c-format -msgid "Created database record for Pool \"%s\".\n" -msgstr "Pas d'enregistrement trouvé en base pour : %s\n" +msgid "3304 Issuing autochanger \"load slot %d, drive %d\" command.\n" +msgstr "" +"3304 Envoi de la commande « load slot %d, drive %d » à l'autochangeur.\n" -#: src/dird/job.c:766 src/dird/job.c:809 +#: src/stored/autochanger.c:194 #, c-format -msgid "JobId %d already running. Duplicate job not allowed.\n" -msgstr "" +msgid "3305 Autochanger \"load slot %d, drive %d\", status is OK.\n" +msgstr "3305 Autochangeur « load slot %d, drive %d », le résultat est OK.\n" -#: src/dird/job.c:797 +#: src/stored/autochanger.c:207 #, c-format -msgid "Cancelling duplicate JobId=%d.\n" +msgid "" +"3992 Bad autochanger \"load slot %d, drive %d\": ERR=%s.\n" +"Results=%s\n" msgstr "" +"3992 Erreur sur l'autochangeur « load slot %d, drive %d » : ERR=%s.\n" +"Resultat=%s\n" -#: src/dird/job.c:828 src/dird/job.c:1116 -msgid "Run pool override" -msgstr "" +#: src/stored/autochanger.c:270 +#, c-format +msgid "3301 Issuing autochanger \"loaded? drive %d\" command.\n" +msgstr "3301 Envoi de la commande « loaded? drive %d » à l'autochangeur.\n" -#: src/dird/job.c:839 -msgid "Run FullPool override" -msgstr "" +#: src/stored/autochanger.c:282 +#, c-format +msgid "3302 Autochanger \"loaded? drive %d\", result is Slot %d.\n" +msgstr "3302 Autochangeur « loaded drive %d », le resultat est Slot %d.\n" -#: src/dird/job.c:841 -msgid "Job FullPool override" -msgstr "" +#: src/stored/autochanger.c:289 +#, c-format +msgid "3302 Autochanger \"loaded? drive %d\", result: nothing loaded.\n" +msgstr "3302 Autochangeur « loaded drive %d », résultat : lecteur vide.\n" -#: src/dird/job.c:850 -msgid "Run IncPool override" +#: src/stored/autochanger.c:301 +#, c-format +msgid "" +"3991 Bad autochanger \"loaded? drive %d\" command: ERR=%s.\n" +"Results=%s\n" msgstr "" +"3991 Erreur sur l'autochangeur « loaded drive %d » : ERR=%s.\n" +"Resultat=%s\n" -#: src/dird/job.c:852 -msgid "Job IncPool override" -msgstr "" +#: src/stored/autochanger.c:321 +#, fuzzy, c-format +msgid "Lock failure on autochanger. ERR=%s\n" +msgstr "Erreur sur l'ouverture du périphérique. ERR=%s\n" -#: src/dird/job.c:861 -msgid "Run DiffPool override" -msgstr "" +#: src/stored/autochanger.c:335 +#, fuzzy, c-format +msgid "Unlock failure on autochanger. ERR=%s\n" +msgstr "rwl_writeunlock en échec sur %s:%d :. ERR=%s\n" -#: src/dird/job.c:863 -msgid "Job DiffPool override" +#: src/stored/autochanger.c:382 src/stored/autochanger.c:548 +#, c-format +msgid "3307 Issuing autochanger \"unload slot %d, drive %d\" command.\n" msgstr "" +"3307 Envoi de la commande « unload slot %d, drive %d » à l'autochangeur.\n" -#: src/dird/job.c:893 src/stored/bscan.c:1056 +#: src/stored/autochanger.c:395 #, c-format -msgid "Could not create Client record. ERR=%s\n" +msgid "" +"3995 Bad autochanger \"unload slot %d, drive %d\": ERR=%s\n" +"Results=%s\n" msgstr "" +"3995 Erreur sur l'autochangeur « unload slot %d, drive %d » : ERR=%s.\n" +"Resultat=%s\n" -#: src/dird/job.c:929 -msgid "FileSet MD5 digest not found.\n" +#: src/stored/autochanger.c:498 +#, fuzzy, c-format +msgid "Volume \"%s\" wanted on %s is in use by device %s\n" +msgstr "Le volume \"%s\" est utilisé par le device %s\n" + +#: src/stored/autochanger.c:565 +#, fuzzy, c-format +msgid "3997 Bad autochanger \"unload slot %d, drive %d\": ERR=%s.\n" msgstr "" +"3995 Erreur sur l'autochangeur « unload slot %d, drive %d » : ERR=%s.\n" -#: src/dird/job.c:934 +#: src/stored/autochanger.c:608 #, c-format -msgid "Could not create FileSet \"%s\" record. ERR=%s\n" -msgstr "" +msgid "3993 Device %s not an autochanger device.\n" +msgstr "3993 Le Device %s n'est pas un autochangeur.\n" -#: src/dird/job.c:976 +#: src/stored/autochanger.c:635 #, c-format -msgid "Error updating job record. %s" -msgstr "" +msgid "3306 Issuing autochanger \"%s\" command.\n" +msgstr "3306 Envoi de la commande \"%s\" à l'autochangeur.\n" -#: src/dird/job.c:1121 -msgid "Run storage override" +#: src/stored/autochanger.c:638 +msgid "3996 Open bpipe failed.\n" msgstr "" -#: src/dird/job.c:1189 -#, fuzzy -msgid "Client resource" -msgstr "Pas de ressource « Restore Job » trouvée !\n" - -#: src/dird/job.c:1406 +#: src/stored/os.c:125 #, fuzzy, c-format -msgid "Could not start clone job: \"%s\".\n" -msgstr "Impossible d'ouvrir la base de données \"%s\".\n" +msgid "Unable to set eotmodel on device %s: ERR=%s\n" +msgstr "3910 Impossible d'ouvrir le device %s : ERR=%s\n" -#: src/dird/job.c:1409 -#, c-format -msgid "Clone JobId %d started.\n" +#: src/stored/os.c:179 +msgid " Bacula status:" msgstr "" -#: src/dird/authenticate.c:83 src/dird/authenticate.c:84 -#: src/tray-monitor/authenticate.c:132 -#: src/qt-console/tray-monitor/authenticate.cpp:131 +#: src/stored/os.c:180 src/stored/os.c:263 src/stored/os.c:265 #, c-format -msgid "Error sending Hello to Storage daemon. ERR=%s\n" -msgstr "" - -#: src/dird/authenticate.c:113 -msgid "Director and Storage daemon passwords or names not the same.\n" -msgstr "" +msgid " file=%d block=%d\n" +msgstr " fichier=%d bloc=%d\n" -#: src/dird/authenticate.c:115 -#, fuzzy, c-format -msgid "" -"Director unable to authenticate with Storage daemon at \"%s:%d\". Possible " -"causes:\n" -"Passwords or names not the same or\n" -"Maximum Concurrent Jobs exceeded on the SD or\n" -"SD networking messed up (restart daemon).\n" -"Please see " +#: src/stored/os.c:188 +msgid " Device status:" msgstr "" -"Le Director a rencontré un problème d'authentification avec le Storage " -"Daemon \"%s:%d\".\n" -"Les causes possibles sont :\n" -"- Les mots de pass ne correspondent pas ;\n" -"- Le nombre maximum de job concurrent est atteint sur le SD ;\n" -"- La connexion réseau du SD est tombée (il faut le redémarrer).\n" -"Vous trouverez de l'aide sur\n" -"http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors\n" -#: src/dird/authenticate.c:127 src/wx-console/authenticate.c:127 -#: src/console/authenticate.c:122 -msgid "" -"Authorization problem: Remote server did not advertise required TLS " -"support.\n" +#: src/stored/os.c:364 +#, c-format +msgid "unknown func code %d" msgstr "" -#: src/dird/authenticate.c:134 src/stored/authenticate.c:146 -#: src/stored/authenticate.c:257 src/wx-console/authenticate.c:133 -#: src/console/authenticate.c:129 src/filed/authenticate.c:160 -#: src/filed/authenticate.c:279 -msgid "Authorization problem: Remote server requires TLS.\n" +#: src/stored/os.c:370 +#, c-format +msgid "I/O function \"%s\" not supported on this device.\n" msgstr "" -#: src/dird/authenticate.c:143 -#, fuzzy, c-format -msgid "TLS negotiation failed with SD at \"%s:%d\"\n" -msgstr "Négociation TLS échouée avec le SD « %s:%d ».\n" - -#: src/dird/authenticate.c:155 +#: src/stored/read_records.c:77 #, c-format -msgid "bdird set configuration file to file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -t test - read configuration and exit\n" -" -? print this message.\n" -"\n" +"3602 JobId=%u %s device %s is busy (already reading/writing). read=%d, " +"writers=%d reserved=%d\n" +msgstr "3602 JobId=%u device %s est occupé (à lire ou écrire).\n" + +#: src/stored/reserve.c:906 +#, fuzzy, c-format +msgid "3609 JobId=%u Max concurrent jobs=%d exceeded on %s device %s.\n" msgstr "" -") %s %s %s\n" -"\n" -"Usage : bconsole [-s] [-c config_file] [-d niveau_debug]\n" -" -c set configuration file to file\n" -" -dnn set debug level to nn\n" -" -s no signals\n" -" -t test - lecture de la configuration et sortie\n" -"\n" +"3607 JobId=%u voulait Vol=\"%s\", c'est le Vol=\"%s\" qui est dans le drive " +"%s.\n" -#: src/tray-monitor/tray-monitor.c:270 -#: src/qt-console/tray-monitor/tray-monitor.cpp:216 -#, c-format -msgid "" -"Error: %d Monitor resources defined in %s. You must define one and only one " -"Monitor resource.\n" +#: src/stored/reserve.c:920 +#, fuzzy, c-format +msgid "3611 JobId=%u Volume max jobs=%d exceeded on %s device %s.\n" msgstr "" +"3607 JobId=%u voulait Vol=\"%s\", c'est le Vol=\"%s\" qui est dans le drive " +"%s.\n" -#: src/tray-monitor/tray-monitor.c:301 -#: src/qt-console/tray-monitor/tray-monitor.cpp:248 +#: src/stored/reserve.c:945 #, fuzzy, c-format msgid "" -"No Client, Storage or Director resource defined in %s\n" -"Without that I don't how to get status from the File, Storage or Director " -"Daemon :-(\n" +"3608 JobId=%u wants Pool=\"%s\" but have Pool=\"%s\" nreserve=%d on %s " +"device %s.\n" msgstr "" -"Pas de director défini pour %s\n" -"Sans cette définition, il n'est pas possible de se connecter à celui-ci.\n" +"3608 JobId=%u voulait le Pool=\"%s\", mais c'est le Pool=\"%s\" qui est dans " +"le drive %s.\n" -#: src/tray-monitor/tray-monitor.c:323 -#: src/qt-console/tray-monitor/tray-monitor.cpp:263 -#, c-format -msgid "" -"Invalid refresh interval defined in %s\n" -"This value must be greater or equal to 1 second and less or equal to 10 " -"minutes (read value: %d).\n" +#: src/stored/reserve.c:997 +#, fuzzy, c-format +msgid "3605 JobId=%u wants free drive but %s device %s is busy.\n" msgstr "" +"3605 JobId=%u voulait libérer le lecteur, mais le device %s est occupé.\n" -#: src/tray-monitor/tray-monitor.c:330 -#, fuzzy -msgid "Bacula daemon status monitor" -msgstr "Bacula Storage : En cours" +#: src/stored/reserve.c:1006 +#, fuzzy, c-format +msgid "3606 JobId=%u prefers mounted drives, but %s device %s has no Volume.\n" +msgstr "3606 JobId=%u voulait un lecteur monté, mais le lecteur %s est vide.\n" -#: src/tray-monitor/tray-monitor.c:339 -msgid "Open status window..." +#: src/stored/reserve.c:1028 +#, fuzzy, c-format +msgid "3607 JobId=%u wants Vol=\"%s\" drive has Vol=\"%s\" on %s device %s.\n" msgstr "" +"3607 JobId=%u voulait Vol=\"%s\", c'est le Vol=\"%s\" qui est dans le drive " +"%s.\n" -#: src/tray-monitor/tray-monitor.c:345 -msgid "Exit" +#: src/stored/reserve.c:1083 +#, c-format +msgid "Logic error!!!! JobId=%u Should not get here.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:357 -#, fuzzy -msgid "Bacula tray monitor" -msgstr "Bacula Storage : En cours" - -#: src/tray-monitor/tray-monitor.c:382 -msgid " (DIR)" +#: src/stored/reserve.c:1084 +#, c-format +msgid "3910 JobId=%u Logic error!!!! %s device %s Should not get here.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:386 -msgid " (FD)" +#: src/stored/reserve.c:1087 +msgid "Logic error!!!! Should not get here.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:390 -msgid " (SD)" +#: src/stored/reserve.c:1090 +#, fuzzy, c-format +msgid "3911 JobId=%u failed reserve %s device %s.\n" msgstr "" +"3605 JobId=%u voulait libérer le lecteur, mais le device %s est occupé.\n" -#: src/tray-monitor/tray-monitor.c:403 -#, fuzzy -msgid "Unknown status." -msgstr "Erreur inconnue." +#: src/stored/status.c:85 +msgid "Used Volume status:\n" +msgstr "Volume en cours d'utilisation :\n" -#: src/tray-monitor/tray-monitor.c:477 -msgid "Refresh interval in seconds: " +#: src/stored/status.c:103 +msgid "" +"\n" +"SD Resources:\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:485 -msgid "Refresh now" +#: src/stored/status.c:139 +msgid "" +"\n" +"Device status:\n" msgstr "" +"\n" +"Statut du Device :\n" -#: src/tray-monitor/tray-monitor.c:489 -#, fuzzy -msgid "About" -msgstr "Abort" +#: src/stored/status.c:143 +#, c-format +msgid "Autochanger \"%s\" with devices:\n" +msgstr "Autochangeur \"%s\" avec les Devices :\n" -#: src/tray-monitor/tray-monitor.c:493 -msgid "Close" +#: src/stored/status.c:163 +#, fuzzy, c-format +msgid "" +"\n" +"Device %s is %s:\n" +" Volume: %s\n" +" Pool: %s\n" +" Media type: %s\n" msgstr "" +"Le Device %s est monté avec :\n" +" Volume : %s\n" +" Pool : %s\n" +" Type du Media : %s\n" -#: src/tray-monitor/tray-monitor.c:513 -#, fuzzy, c-format -msgid "Disconnecting from Director %s:%d\n" -msgstr "Connexion au Director %s:%d\n" +#: src/stored/status.c:168 +#, fuzzy +msgid "waiting for" +msgstr "En attente d'un montage" -#: src/tray-monitor/tray-monitor.c:516 -#, fuzzy, c-format -msgid "Disconnecting from Client %s:%d\n" -msgstr "Connexion au client %s (%s:%d)\n" +#: src/stored/status.c:168 +msgid "mounted with" +msgstr "" -#: src/tray-monitor/tray-monitor.c:519 -#, fuzzy, c-format -msgid "Disconnecting from Storage %s:%d\n" -msgstr "Connexion au Director %s:%d\n" +#: src/stored/status.c:170 +#, fuzzy +msgid "*unknown*" +msgstr "inconnu" -#: src/tray-monitor/tray-monitor.c:560 src/tray-monitor/tray-monitor.c:571 -msgid "Bacula Tray Monitor" -msgstr "" +#: src/stored/status.c:174 +#, fuzzy, c-format +msgid "" +"\n" +"Device %s open but no Bacula volume is currently mounted.\n" +msgstr "Le Device %s est ouvert, mais il n'y a pas de Volume Bacula monté.\n" -#: src/tray-monitor/tray-monitor.c:562 src/tray-monitor/tray-monitor.c:573 -msgid "Written by Nicolas Boichat\n" -msgstr "" +#: src/stored/status.c:185 +#, c-format +msgid " Total Bytes=%s Blocks=%s Bytes/block=%s\n" +msgstr " Total Octets=%s Blocs=%s Octets/Bloc=%s\n" -#: src/tray-monitor/tray-monitor.c:563 src/tray-monitor/tray-monitor.c:574 -msgid "Version" -msgstr "Version" +#: src/stored/status.c:200 +#, c-format +msgid " Total Bytes Read=%s Blocks Read=%s Bytes/block=%s\n" +msgstr " Total des Octets lu=%s Blocs lu=%s Octets/Bloc=%s\n" -#: src/tray-monitor/tray-monitor.c:656 -#: src/qt-console/tray-monitor/tray-monitor.cpp:331 +#: src/stored/status.c:206 #, c-format -msgid "Error, currentitem is not a Client or a Storage..\n" -msgstr "" +msgid " Positioned at File=%s Block=%s\n" +msgstr " Positionné sur Fichier=%s Bloc=%s\n" -#: src/tray-monitor/tray-monitor.c:730 +#: src/stored/status.c:213 #, fuzzy, c-format msgid "" -"Current job: %s\n" -"Last job: %s" -msgstr "Le statut actuel du volume (Volume status) est : %s\n" +"\n" +"Device %s is not open.\n" +msgstr "Le Device %s n'est pas ouvert.\n" -#: src/tray-monitor/tray-monitor.c:742 +#: src/stored/status.c:217 #, fuzzy, c-format -msgid " (%d errors)" -msgstr "est en erreur" +msgid "" +"\n" +"Device \"%s\" is not open or does not exist.\n" +msgstr "Le Device \"%s\" n'est pas ouvert ou il n'existe pas.\n" -#: src/tray-monitor/tray-monitor.c:745 -#, fuzzy, c-format -msgid " (%d error)" -msgstr "BUS error" +#: src/stored/status.c:234 src/dird/ua_status.c:294 +#, c-format +msgid "%s Version: %s (%s) %s %s %s\n" +msgstr "%s Version : %s (%s) %s %s %s\n" -#: src/tray-monitor/tray-monitor.c:783 -#, fuzzy -msgid "No current job." -msgstr "Pas de RecyclePool courant\n" +#: src/stored/status.c:241 +#, fuzzy, c-format +msgid "Daemon started %s. Jobs: run=%d, running=%d.\n" +msgstr "Démon démarré depuis %s, %d jobs lancés depuis cette date.\n" -#: src/tray-monitor/tray-monitor.c:786 -msgid "No last job." -msgstr "" +#: src/stored/status.c:244 src/dird/ua_status.c:300 src/filed/status.c:136 +#, fuzzy, c-format +msgid " Heap: heap=%s smbytes=%s max_bytes=%s bufs=%s max_bufs=%s\n" +msgstr " Heap: bytes=%s smbytes=%s max_bytes=%s bufs=%s max_bufs=%s\n" -#: src/tray-monitor/tray-monitor.c:794 -msgid "Job status: Created" +#: src/stored/status.c:279 +msgid "" +"No DEVICE structure.\n" +"\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:799 -#, fuzzy -msgid "Job status: Running" -msgstr "Pas de job en cours.\n" +#: src/stored/status.c:285 +msgid " Device is BLOCKED. User unmounted.\n" +msgstr " Le Device est BLOQUÉ. Démonté par l'utilisateur.\n" -#: src/tray-monitor/tray-monitor.c:803 -msgid "Job status: Blocked" +#: src/stored/status.c:289 +msgid " Device is BLOCKED. User unmounted during wait for media/mount.\n" msgstr "" +" Le Device est BLOQUÉ. Démonté par l'utilisateur à cause d'un chargement " +"de média.\n" -#: src/tray-monitor/tray-monitor.c:808 -#, fuzzy -msgid "Job status: Terminated" -msgstr "est terminé" - -#: src/tray-monitor/tray-monitor.c:813 -msgid "Job status: Terminated in error" +#: src/stored/status.c:300 +#, c-format +msgid "" +" Device is BLOCKED waiting for mount of volume \"%s\",\n" +" Pool: %s\n" +" Media type: %s\n" msgstr "" +" Le Device est BLOQUÉ en attente du montage du volume \"%s\",\n" +" Pool : %s\n" +" Media type : %s\n" -#: src/tray-monitor/tray-monitor.c:819 -msgid "Job status: Error" +#: src/stored/status.c:309 +#, c-format +msgid "" +" Device is BLOCKED waiting to create a volume for:\n" +" Pool: %s\n" +" Media type: %s\n" msgstr "" +" Le Device est BLOQUÉ en attente de création d'un volume :\n" +" Pool : %s\n" +" Media type : %s\n" -#: src/tray-monitor/tray-monitor.c:823 -#, fuzzy -msgid "Job status: Fatal error" -msgstr "%s : %s Erreur fatale : " - -#: src/tray-monitor/tray-monitor.c:828 -#, fuzzy -msgid "Job status: Verify differences" -msgstr "Vérification des différences" - -#: src/tray-monitor/tray-monitor.c:833 -#, fuzzy -msgid "Job status: Canceled" -msgstr "Le job %s est annulé.\n" +#: src/stored/status.c:321 +msgid " Device is BLOCKED waiting for media.\n" +msgstr " Le Device est BLOQUÉ en attente d'un média.\n" -#: src/tray-monitor/tray-monitor.c:838 -#, fuzzy -msgid "Job status: Waiting on File daemon" -msgstr "%s Job %s est en attente de la connexion du Client.\n" +#: src/stored/status.c:327 +msgid " Device is being initialized.\n" +msgstr " Le Device est en cours d'initialisation.\n" -#: src/tray-monitor/tray-monitor.c:843 -#, fuzzy -msgid "Job status: Waiting on the Storage daemon" -msgstr "est en attente du Storage %s" +#: src/stored/status.c:331 +msgid " Device is blocked labeling a Volume.\n" +msgstr " Le Device est occupé à labéliser un Volume.\n" -#: src/tray-monitor/tray-monitor.c:848 -#, fuzzy -msgid "Job status: Waiting for new media" -msgstr " Le Device est BLOQUÉ en attente d'un média.\n" +#: src/stored/status.c:340 +#, fuzzy, c-format +msgid " Slot %d %s loaded in drive %d.\n" +msgstr " Le slot %d est chargé dans le lecteur %d.\n" -#: src/tray-monitor/tray-monitor.c:853 -#, fuzzy -msgid "Job status: Waiting for Mount" -msgstr "En attente d'un montage" +#: src/stored/status.c:344 +#, c-format +msgid " Drive %d is not loaded.\n" +msgstr " Le lecteur %d n'est pas chargé.\n" -#: src/tray-monitor/tray-monitor.c:858 -#, fuzzy -msgid "Job status: Waiting for storage resource" -msgstr "En attente du Storage" +#: src/stored/status.c:379 +msgid "Device state:\n" +msgstr "" -#: src/tray-monitor/tray-monitor.c:863 -#, fuzzy -msgid "Job status: Waiting for job resource" -msgstr "En attente du Storage" +#: src/stored/status.c:395 +#, c-format +msgid " num_writers=%d reserves=%d block=%d\n" +msgstr "" -#: src/tray-monitor/tray-monitor.c:868 +#: src/stored/status.c:399 #, fuzzy -msgid "Job status: Waiting for Client resource" -msgstr "%s Job %s est en attente de la connexion du Client.\n" - -#: src/tray-monitor/tray-monitor.c:873 -msgid "Job status: Waiting for maximum jobs" +msgid "Attached JobsIds: " msgstr "" +"\n" +"Jobs planifiés :\n" -#: src/tray-monitor/tray-monitor.c:878 -#, fuzzy -msgid "Job status: Waiting for start time" -msgstr "attend son heure de démarrage" +#: src/stored/status.c:419 +#, c-format +msgid " Archive name: %s Device name: %s\n" +msgstr "" -#: src/tray-monitor/tray-monitor.c:883 -#, fuzzy -msgid "Job status: Waiting for higher priority jobs to finish" -msgstr "attend qu'un job plus prioritaire se termine" +#: src/stored/status.c:422 +#, fuzzy, c-format +msgid " File=%u block=%u\n" +msgstr "Fichier=%u bloc=%u\n" -#: src/tray-monitor/tray-monitor.c:888 +#: src/stored/status.c:424 #, fuzzy, c-format -msgid "Unknown job status %c." -msgstr "est dans un état inconnu %c" +msgid " Min block=%u Max block=%u\n" +msgstr "Min bloc=%u Max bloc=%u\n" -#: src/tray-monitor/tray-monitor.c:889 -#, c-format -msgid "Job status: Unknown(%c)" +#: src/stored/status.c:440 src/dird/ua_status.c:818 src/filed/status.c:188 +msgid "" +"\n" +"Running Jobs:\n" msgstr "" +"\n" +"Job en cours :\n" -#: src/tray-monitor/tray-monitor.c:896 +#: src/stored/status.c:445 #, c-format -msgid "Bad scan : '%s' %d\n" -msgstr "" +msgid "%s Job %s waiting for Client connection.\n" +msgstr "%s Job %s est en attente de la connexion du Client.\n" -#: src/tray-monitor/tray-monitor.c:936 src/console/console.c:1143 +#: src/stored/status.c:461 #, c-format -msgid "Connecting to Director %s:%d\n" -msgstr "Connexion au Director %s:%d\n" +msgid "" +"Reading: %s %s job %s JobId=%d Volume=\"%s\"\n" +" pool=\"%s\" device=%s\n" +msgstr "" +"Lecture : %s %s job %s JobId=%d Volume=\"%s\"\n" +" pool=\"%s\" device=%s\n" -#: src/tray-monitor/tray-monitor.c:937 -#: src/qt-console/tray-monitor/tray-monitor.cpp:359 -#: src/qt-console/bcomm/dircomm.cpp:103 +#: src/stored/status.c:474 #, fuzzy, c-format -msgid "Connecting to Director %s:%d" -msgstr "Connexion au Director %s:%d\n" - -#: src/tray-monitor/tray-monitor.c:938 src/wx-console/console_thread.cpp:428 -#: src/qt-console/tray-monitor/tray-monitor.cpp:361 -#: src/qt-console/bcomm/dircomm.cpp:173 -#, fuzzy -msgid "Director daemon" -msgstr "Director" +msgid "" +"Writing: %s %s job %s JobId=%d Volume=\"%s\"\n" +" pool=\"%s\" device=%s\n" +msgstr "" +"Ecriture : %s %s job %s JobId=%d Volume=\"%s\"\n" +" pool=\"%s\" device=%s\n" -#: src/tray-monitor/tray-monitor.c:943 -#, fuzzy, c-format -msgid "Connecting to Client %s:%d\n" -msgstr "Connexion au client %s (%s:%d)\n" +#: src/stored/status.c:485 +#, c-format +msgid " spooling=%d despooling=%d despool_wait=%d\n" +msgstr " spooling=%d despooling=%d despool_wait=%d\n" -#: src/tray-monitor/tray-monitor.c:944 -#: src/qt-console/tray-monitor/tray-monitor.cpp:366 +#: src/stored/status.c:501 #, fuzzy, c-format -msgid "Connecting to Client %s:%d" -msgstr "Connexion au client %s (%s:%d)\n" +msgid " Files=%s Bytes=%s AveBytes/sec=%s LastBytes/sec=%s\n" +msgstr " Fichiers=%s Octets=%s Octets/sec=%s Erreurs=%d\n" -#: src/tray-monitor/tray-monitor.c:945 -#: src/qt-console/tray-monitor/tray-monitor.cpp:368 -msgid "File daemon" +#: src/stored/status.c:513 +#, c-format +msgid " FDReadSeqNo=%s in_msg=%u out_msg=%d fd=%d\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:950 -#, fuzzy, c-format -msgid "Connecting to Storage %s:%d\n" -msgstr "Connexion au Director %s:%d\n" +#: src/stored/status.c:519 +msgid " FDSocket closed\n" +msgstr "" -#: src/tray-monitor/tray-monitor.c:951 -#: src/qt-console/tray-monitor/tray-monitor.cpp:373 -#, fuzzy, c-format -msgid "Connecting to Storage %s:%d" -msgstr "Connexion au Director %s:%d\n" +#: src/stored/status.c:528 src/dird/ua_select.c:1211 src/filed/status.c:278 +msgid "No Jobs running.\n" +msgstr "Pas de job en cours.\n" -#: src/tray-monitor/tray-monitor.c:956 src/tray-monitor/tray-monitor.c:994 -#: src/qt-console/tray-monitor/tray-monitor.cpp:379 -#: src/qt-console/tray-monitor/tray-monitor.cpp:409 -#, c-format -msgid "Error, currentitem is not a Client, a Storage or a Director..\n" +#: src/stored/status.c:540 +msgid "" +"\n" +"Jobs waiting to reserve a drive:\n" msgstr "" +"\n" +"Jobs en attente de réservation de lecteur :\n" -#: src/tray-monitor/tray-monitor.c:962 -#, fuzzy -msgid "Cannot connect to daemon.\n" -msgstr "Impossible de se connecter au démon Storage\n" - -#: src/tray-monitor/tray-monitor.c:963 -#: src/qt-console/tray-monitor/tray-monitor.cpp:384 -#, fuzzy -msgid "Cannot connect to daemon." -msgstr "Impossible de se connecter au démon Storage\n" +#: src/stored/status.c:604 +#, fuzzy, c-format +msgid "3900 No arg in .status command: %s\n" +msgstr "3909 Erreur pendant la lecture de la commande de montage : %s\n" -#: src/tray-monitor/tray-monitor.c:975 -#: src/qt-console/tray-monitor/tray-monitor.cpp:393 +#: src/stored/status.c:652 #, fuzzy, c-format -msgid "Authentication error : %s" -msgstr "Erreur sur l'autochangeur : ERR=%s\n" +msgid "3900 Unknown arg in .status command: %s\n" +msgstr "Erreur inconnue." -#: src/tray-monitor/tray-monitor.c:982 -#, fuzzy -msgid "Opened connection with Director daemon.\n" -msgstr "Impossible de se connecter au Storage daemon.\n" +#: src/stored/status.c:667 +msgid "Bacula Storage: Idle" +msgstr "Bacula Storage : En attente" -#: src/tray-monitor/tray-monitor.c:983 -#: src/qt-console/tray-monitor/tray-monitor.cpp:400 -#, fuzzy -msgid "Opened connection with Director daemon." -msgstr "Impossible de se connecter au Storage daemon.\n" +#: src/stored/status.c:678 +msgid "Bacula Storage: Running" +msgstr "Bacula Storage : En cours" -#: src/tray-monitor/tray-monitor.c:986 -#, fuzzy -msgid "Opened connection with File daemon.\n" -msgstr "Impossible de se connecter au client.\n" +#: src/stored/status.c:692 +msgid "Bacula Storage: Last Job Canceled" +msgstr "Bacula Storage : Dernier Job annulé" -#: src/tray-monitor/tray-monitor.c:987 -#: src/qt-console/tray-monitor/tray-monitor.cpp:403 -#, fuzzy -msgid "Opened connection with File daemon." -msgstr "Impossible de se connecter au client.\n" +#: src/stored/status.c:696 +msgid "Bacula Storage: Last Job Failed" +msgstr "Bacula Storage : Dernier Job en erreur" -#: src/tray-monitor/tray-monitor.c:990 -#, fuzzy -msgid "Opened connection with Storage daemon.\n" -msgstr "Impossible de se connecter au Storage daemon.\n" +#: src/stored/status.c:700 +msgid "Bacula Storage: Last Job had Warnings" +msgstr "Bacula Storage : Le dernier Job avait des erreurs" -#: src/tray-monitor/tray-monitor.c:991 -#: src/qt-console/tray-monitor/tray-monitor.cpp:406 -#, fuzzy -msgid "Opened connection with Storage daemon." -msgstr "Impossible de se connecter au Storage daemon.\n" +#: src/stored/sd_plugins.c:220 src/dird/dir_plugins.c:169 +#: src/filed/fd_plugins.c:1125 +#, c-format +msgid "Loaded plugin: %s\n" +msgstr "" + +#: src/stored/sd_plugins.c:240 src/dird/dir_plugins.c:189 +#: src/filed/fd_plugins.c:1146 +#, c-format +msgid "Plugin magic wrong. Plugin=%s wanted=%s got=%s\n" +msgstr "" -#: src/tray-monitor/tray-monitor.c:1028 -msgid "<< Error: BNET_SUB_PROMPT signal received. >>\n" +#: src/stored/sd_plugins.c:248 src/dird/dir_plugins.c:197 +#: src/filed/fd_plugins.c:1154 +#, c-format +msgid "Plugin version incorrect. Plugin=%s wanted=%d got=%d\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:1033 src/wx-console/console_thread.cpp:494 -msgid "<< Heartbeat signal received, answered. >>\n" +#: src/stored/sd_plugins.c:257 src/dird/dir_plugins.c:206 +#: src/filed/fd_plugins.c:1162 +#, c-format +msgid "Plugin license incompatible. Plugin=%s license=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:1037 +#: src/stored/sd_plugins.c:265 src/dird/dir_plugins.c:214 +#: src/filed/fd_plugins.c:1170 #, c-format -msgid "<< Unexpected signal received : %s >>\n" +msgid "Plugin size incorrect. Plugin=%s wanted=%d got=%d\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:1042 +#: src/lib/sellist.c:57 #, fuzzy -msgid "\n" -msgstr "%s : ERREUR : " +msgid "Negative numbers not permitted.\n" +msgstr "Les nombres négatifs ne sont pas autorisés\n" -#: src/tray-monitor/tray-monitor.c:1046 -#: src/qt-console/tray-monitor/tray-monitor.cpp:457 -msgid "Error : BNET_HARDEOF or BNET_ERROR" +#: src/lib/sellist.c:64 src/dird/ua_label.c:98 +msgid "Range end is not integer.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:1052 -msgid "\n" +#: src/lib/sellist.c:69 src/dird/ua_label.c:103 +msgid "Range start is not an integer.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:1056 -#: src/qt-console/tray-monitor/tray-monitor.cpp:466 -#, fuzzy -msgid "Error : Connection closed." -msgstr "Connexion...\n" +#: src/lib/sellist.c:75 src/dird/ua_label.c:109 +msgid "Range end not bigger than start.\n" +msgstr "" -#: src/tray-monitor/authenticate.c:88 -#: src/qt-console/tray-monitor/authenticate.cpp:87 +#: src/lib/sellist.c:83 #, fuzzy -msgid "" -"Director authorization problem.\n" -"Most likely the passwords do not agree.\n" -"Please see " -msgstr "" -"Problème d'authentification avec le director.\n" -"Le plus souvent, les mots de pass ne correspondent pas.\n" -"Vous trouverez de l'aide sur\n" -"http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors\n" +msgid "User cancel requested.\n" +msgstr "Restauration annulée" -#: src/tray-monitor/authenticate.c:97 src/console/authenticate.c:152 -#: src/qt-console/tray-monitor/authenticate.cpp:96 -#, c-format -msgid "Bad response to Hello command: ERR=%s\n" -msgstr "Mauvaise réponse à la commande Hello : ERR=%s\n" +#: src/lib/sellist.c:93 src/dird/ua_label.c:115 +msgid "Input value is not an integer.\n" +msgstr "La valeur saisie n'est pas un nombre.\n" -#: src/tray-monitor/authenticate.c:104 src/wx-console/authenticate.c:157 -#: src/console/authenticate.c:159 -#: src/qt-console/tray-monitor/authenticate.cpp:103 -msgid "Director rejected Hello command\n" -msgstr "Le director a rejeté la commande Hello\n" +#: src/lib/sellist.c:105 +#, fuzzy +msgid "Selection items must be be greater than zero.\n" +msgstr "Les valeurs doivent être supérieurs à zéro.\n" -#: src/tray-monitor/authenticate.c:138 -#: src/qt-console/tray-monitor/authenticate.cpp:137 +#: src/lib/sellist.c:109 #, fuzzy -msgid "" -"Director and Storage daemon passwords or names not the same.\n" -"Please see " -msgstr "" -"Le mot de passe ou le nom du Director et du Client ne sont pas identiques.\n" +msgid "Selection item too large.\n" +msgstr "Slot trop grand.\n" -#: src/tray-monitor/authenticate.c:145 -#: src/qt-console/tray-monitor/authenticate.cpp:144 -#, fuzzy, c-format -msgid "bdird\n" -" -b specify a bootstrap file\n" -" -c specify a Storage configuration file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -e exclude list\n" -" -i include list\n" -" -j list jobs\n" -" -k list blocks\n" -" (no j or k option) list saved files\n" -" -L dump label\n" -" -p proceed inspite of errors\n" -" -v be verbose\n" -" -V specify Volume names (separated by |)\n" -" -? print this message\n" -"\n" +#: src/lib/var.c:2673 +msgid "unknown flag in search and replace operation" msgstr "" -"Copyright (C) 2000-2005 Kern Sibbald.\n" -"\n" -"Version : %s (%s)\n" -"\n" -"Usage : dird [-f -s] [-c config_file] [-d debug_level] [config_file]\n" -" -c utilise fich comme fichier de configuration\n" -" -dnn positionne le niveau de debug à nn\n" -" -f reste en avant-plan (pour debugger)\n" -" -g groupid\n" -" -r lance maintenant\n" -" -s pas de signaux\n" -" -t test - lit seulement le fichier de configuration\n" -" -u userid\n" -" -v affiche les messages utilisateurs\n" -" -? affiche ce message.\n" -"\n" -#: src/stored/bls.c:149 src/stored/bextract.c:146 -#, c-format -msgid "Could not open exclude file: %s, ERR=%s\n" +#: src/lib/var.c:2674 +msgid "invalid regex in search and replace operation" msgstr "" -#: src/stored/bls.c:164 src/stored/bextract.c:161 -#, c-format -msgid "Could not open include file: %s, ERR=%s\n" +#: src/lib/var.c:2675 +msgid "missing parameter in command" msgstr "" -#: src/stored/bls.c:211 -msgid "No archive name specified\n" +#: src/lib/var.c:2676 +msgid "empty search string in search and replace operation" msgstr "" -#: src/stored/bls.c:247 -#, c-format -msgid "" -"\n" -"Warning, this Volume is a continuation of Volume %s\n" +#: src/lib/var.c:2677 +msgid "start offset missing in cut operation" msgstr "" -#: src/stored/bls.c:290 -#, c-format -msgid "Got EOM at file %u on device %s, Volume \"%s\"\n" +#: src/lib/var.c:2678 +msgid "offsets in cut operation delimited by unknown character" msgstr "" -#: src/stored/bls.c:301 -#, c-format -msgid "Mounted Volume \"%s\".\n" +#: src/lib/var.c:2679 +msgid "range out of bounds in cut operation" msgstr "" -#: src/stored/bls.c:303 -#, c-format -msgid "End of file %u on device %s, Volume \"%s\"\n" +#: src/lib/var.c:2680 +msgid "offset out of bounds in cut operation" msgstr "" -#: src/stored/bls.c:327 -#, c-format -msgid "" -"File:blk=%u:%u blk_num=%u blen=%u First rec FI=%s SessId=%u SessTim=%u Strm=" -"%s rlen=%d\n" +#: src/lib/var.c:2681 +msgid "logic error in cut operation" msgstr "" -#: src/stored/bls.c:336 -#, c-format -msgid "Block: %d size=%d\n" -msgstr "Bloc : %d taille=%d\n" - -#: src/stored/bls.c:386 src/stored/bextract.c:328 src/stored/bscan.c:688 -msgid "Cannot continue.\n" +#: src/lib/var.c:2682 +msgid "malformatted transpose operation" msgstr "" -#: src/stored/bls.c:388 -msgid "Attrib unpack error!\n" +#: src/lib/var.c:2683 +msgid "source and target class mismatch in transpose operation" msgstr "" -#: src/stored/bls.c:399 -#, c-format -msgid "FileIndex=%d VolSessionId=%d VolSessionTime=%d Stream=%d DataLen=%d\n" +#: src/lib/var.c:2684 +msgid "empty character class in transpose operation" msgstr "" -#: src/stored/bls.c:425 src/stored/read_record.c:414 src/stored/bcopy.c:330 -msgid "Fresh Volume Label" +#: src/lib/var.c:2685 +msgid "incorrect character class in transpose operation" msgstr "" -#: src/stored/bls.c:428 src/stored/read_record.c:417 src/stored/bcopy.c:333 -msgid "Volume Label" +#: src/lib/var.c:2686 +msgid "malformatted padding operation" msgstr "" -#: src/stored/bls.c:432 src/stored/label.c:1028 src/stored/bcopy.c:337 -msgid "Begin Job Session" +#: src/lib/var.c:2687 +msgid "width parameter missing in padding operation" msgstr "" -#: src/stored/bls.c:437 src/stored/label.c:1031 src/stored/bcopy.c:341 -msgid "End Job Session" +#: src/lib/var.c:2688 +msgid "fill string missing in padding operation" msgstr "" -#: src/stored/bls.c:441 src/stored/bcopy.c:346 -msgid "End of Medium" +#: src/lib/var.c:2689 +msgid "unknown quoted pair in search and replace operation" msgstr "" -#: src/stored/bls.c:444 -msgid "End of Physical Medium" +#: src/lib/var.c:2690 +msgid "sub-matching reference out of range" msgstr "" -#: src/stored/bls.c:447 -msgid "Start of object" -msgstr "" +#: src/lib/var.c:2691 +msgid "invalid argument" +msgstr "argument invalide" -#: src/stored/bls.c:450 -msgid "End of object" +#: src/lib/var.c:2692 +msgid "incomplete quoted pair" msgstr "" -#: src/stored/bls.c:453 src/stored/label.c:1040 src/stored/bcopy.c:349 -msgid "Unknown" +#: src/lib/var.c:2693 +msgid "lookup function does not support variable arrays" msgstr "" -#: src/stored/bls.c:460 src/stored/read_record.c:435 src/stored/bcopy.c:355 -#, c-format -msgid "%s Record: VolSessionId=%d VolSessionTime=%d JobId=%d DataLen=%d\n" +#: src/lib/var.c:2694 +msgid "index of array variable contains an invalid character" msgstr "" -#: src/stored/bls.c:479 src/stored/bextract.c:612 src/stored/bcopy.c:373 -#: src/stored/bscan.c:1374 src/stored/btape.c:3050 -#, c-format -msgid "Mount Volume \"%s\" on device %s and press return when ready: " +#: src/lib/var.c:2695 +msgid "index of array variable is incomplete" msgstr "" -#: src/stored/dircmd.c:155 -#, fuzzy, c-format -msgid "Connection request from %s failed.\n" -msgstr "Demande de connexion échouée.\n" - -#: src/stored/dircmd.c:166 -#, fuzzy, c-format -msgid "Invalid connection from %s. Len=%d\n" -msgstr "Connexion invalide. Len=%d\n" - -#: src/stored/dircmd.c:210 src/filed/authenticate.c:208 -msgid "Unable to authenticate Director\n" +#: src/lib/var.c:2696 +msgid "bracket expression in array variable's index not closed" msgstr "" -#: src/stored/dircmd.c:299 -#, c-format -msgid "3991 Bad setdebug command: %s\n" +#: src/lib/var.c:2697 +msgid "division by zero error in index specification" msgstr "" -#: src/stored/dircmd.c:326 -msgid "3903 Error scanning cancel command.\n" +#: src/lib/var.c:2698 +msgid "unterminated loop construct" msgstr "" -#: src/stored/dircmd.c:330 -#, c-format -msgid "3904 Job %s not found.\n" -msgstr "3904 Job %s non trouvé.\n" - -#: src/stored/dircmd.c:358 -#, fuzzy, c-format -msgid "3000 JobId=%ld Job=\"%s\" marked to be %s.\n" -msgstr "JobId %s, Job %s marqué pour être annulé.\n" - -#: src/stored/dircmd.c:437 src/stored/dircmd.c:812 src/stored/dircmd.c:904 -#: src/stored/dircmd.c:1015 src/stored/dircmd.c:1137 src/stored/dircmd.c:1179 -#, c-format -msgid "3999 Device \"%s\" not found or could not be opened.\n" +#: src/lib/var.c:2699 +msgid "invalid character in loop limits" msgstr "" -#: src/stored/dircmd.c:442 -#, c-format -msgid "3903 Error scanning label command: %s\n" +#: src/lib/var.c:2700 +msgid "malformed operation argument list" msgstr "" -#: src/stored/dircmd.c:492 -#, fuzzy, c-format -msgid "3910 Unable to open device \"%s\": ERR=%s\n" -msgstr "3910 Impossible d'ouvrir le device %s : ERR=%s\n" +#: src/lib/var.c:2701 +msgid "undefined operation" +msgstr "opération indéfinie" -#: src/stored/dircmd.c:509 -#, c-format -msgid "3920 Cannot label Volume because it is already labeled: \"%s\"\n" +#: src/lib/var.c:2702 +msgid "formatting failure" msgstr "" -"3920 Impossible de labéliser le Volume car il possède déjà le label : \"%s" -"\"\n" - -#: src/stored/dircmd.c:516 -msgid "3921 Wrong volume mounted.\n" -msgstr "3921 Mauvais volume monté.\n" -#: src/stored/dircmd.c:520 -msgid "3922 Cannot relabel an ANSI/IBM labeled Volume.\n" -msgstr "3922 Impossible de re-labéliser un Volume ANSI/IBM.\n" - -#: src/stored/dircmd.c:528 -#, c-format -msgid "3912 Failed to label Volume: ERR=%s\n" -msgstr "3912 Impossible de labéliser le Volume : ERR=%s\n" +#: src/lib/var.c:2711 +msgid "unknown error" +msgstr "erreur inconnue" -#: src/stored/dircmd.c:538 -#, fuzzy, c-format -msgid "3914 Failed to label Volume (no media): ERR=%s\n" -msgstr "3912 Impossible de labéliser le Volume : ERR=%s\n" +#: src/lib/util.c:168 src/dird/ua_status.c:1080 src/lib/status.h:102 +msgid "Created" +msgstr "Crée" -#: src/stored/dircmd.c:541 -#, c-format -msgid "3913 Cannot label Volume. Unknown status %d from read_volume_label()\n" -msgstr "" +#: src/lib/util.c:171 +msgid "Running" +msgstr "En cours" -#: src/stored/dircmd.c:578 -#, c-format -msgid "3001 Mounted Volume: %s\n" -msgstr "3001 Volume monté : %s\n" +#: src/lib/util.c:174 +msgid "Blocked" +msgstr "Bloqué" -#: src/stored/dircmd.c:582 src/stored/dircmd.c:1215 -#, fuzzy, c-format -msgid "" -"3902 Cannot mount Volume on Storage Device \"%s\" because:\n" -"%s" -msgstr "" -"3902 Impossible de monté le volume dans le storage device %s car :\n" -"%s" +#: src/lib/util.c:181 src/lib/util.c:316 src/lib/util.c:463 +#: src/dird/ua_status.c:1084 src/lib/status.h:106 +msgid "Error" +msgstr "Erreur" -#: src/stored/dircmd.c:696 -#, fuzzy -msgid "Specified slot ignored. " -msgstr "fopen %s en erreur : ERR=%s\n" +#: src/lib/util.c:184 +msgid "Non-fatal error" +msgstr "Erreur non fatale" -#: src/stored/dircmd.c:712 src/stored/dircmd.c:770 -#, fuzzy, c-format -msgid "3901 Unable to open device \"%s\": ERR=%s\n" -msgstr "3910 Impossible d'ouvrir le device %s : ERR=%s\n" +#: src/lib/util.c:187 src/lib/util.c:312 src/dird/ua_status.c:1096 +#: src/lib/status.h:118 +msgid "OK -- with warnings" +msgstr "OK -- avec des avertissements" -#: src/stored/dircmd.c:732 src/stored/dircmd.c:761 -#, fuzzy, c-format -msgid "3001 Device \"%s\" is mounted with Volume \"%s\"\n" -msgstr "3001 Device %s est monté avec le volume \"%s\"\n" +#: src/lib/util.c:190 src/lib/util.c:322 +msgid "Canceled" +msgstr "Annulé" -#: src/stored/dircmd.c:735 src/stored/dircmd.c:764 src/stored/dircmd.c:779 -#, fuzzy, c-format -msgid "" -"3905 Device \"%s\" open but no Bacula volume is mounted.\n" -"If this is not a blank tape, try unmounting and remounting the Volume.\n" -msgstr "" -"3905 Le device %s est ouvert mais il n'y a pas de volume Bacula monté.\n" -"Si ce n'est pas une cartouche vierge, essayer de la démonter puis de la " -"remonter.\n" +#: src/lib/util.c:193 +msgid "Verify differences" +msgstr "Vérification des différences" -#: src/stored/dircmd.c:745 -#, fuzzy, c-format -msgid "3001 Device \"%s\" is doing acquire.\n" -msgstr "3902 Le Device %s est occupé en acquisition.\n" +#: src/lib/util.c:196 +msgid "Waiting on FD" +msgstr "En attente du FD" -#: src/stored/dircmd.c:750 src/stored/dircmd.c:875 -#, fuzzy, c-format -msgid "3903 Device \"%s\" is being labeled.\n" -msgstr "3934 Device %s est en cours d'initialisation.\n" +#: src/lib/util.c:199 +msgid "Wait on SD" +msgstr "En attente du SD" -#: src/stored/dircmd.c:776 -#, fuzzy, c-format -msgid "3001 Device \"%s\" is already mounted with Volume \"%s\"\n" -msgstr "3001 Device %s est déjà monté avec le volume \"%s\"\n" +#: src/lib/util.c:202 +msgid "Wait for new Volume" +msgstr "En attente d'un nouveau Volume" -#: src/stored/dircmd.c:788 -#, fuzzy, c-format -msgid "3002 Device \"%s\" is mounted.\n" -msgstr "3002 Le device %s est monté.\n" +#: src/lib/util.c:205 +msgid "Waiting for mount" +msgstr "En attente d'un montage" -#: src/stored/dircmd.c:790 src/stored/dircmd.c:847 src/stored/dircmd.c:863 -#: src/stored/dircmd.c:895 -#, c-format -msgid "3907 %s" -msgstr "3907 %s" +#: src/lib/util.c:208 +msgid "Waiting for Storage resource" +msgstr "En attente du Storage" -#: src/stored/dircmd.c:793 -#, fuzzy, c-format -msgid "3906 File device \"%s\" is always mounted.\n" -msgstr "3906 Le device fichier %s est toujours monté.\n" +#: src/lib/util.c:211 +msgid "Waiting for Job resource" +msgstr "" -#: src/stored/dircmd.c:802 -#, fuzzy, c-format -msgid "3930 Device \"%s\" is being released.\n" -msgstr "3934 Device %s est en cours d'initialisation.\n" +#: src/lib/util.c:214 +msgid "Waiting for Client resource" +msgstr "" -#: src/stored/dircmd.c:806 -#, fuzzy, c-format -msgid "3905 Unknown wait state %d\n" -msgstr "est dans un état inconnu %c" +#: src/lib/util.c:217 +msgid "Waiting on Max Jobs" +msgstr "" -#: src/stored/dircmd.c:816 -#, c-format -msgid "3909 Error scanning mount command: %s\n" -msgstr "3909 Erreur pendant la lecture de la commande de montage : %s\n" +#: src/lib/util.c:220 +msgid "Waiting for Start Time" +msgstr "" -#: src/stored/dircmd.c:844 src/stored/dircmd.c:897 -#, fuzzy, c-format -msgid "3002 Device \"%s\" unmounted.\n" -msgstr "3002 Le device %s est démonté.\n" +#: src/lib/util.c:223 +msgid "Waiting on Priority" +msgstr "" -#: src/stored/dircmd.c:851 -#, fuzzy, c-format -msgid "3901 Device \"%s\" is already unmounted.\n" -msgstr "3901 Le device %s est déjà démonté.\n" +#: src/lib/util.c:226 src/dird/ua_status.c:931 src/dird/ua_status.c:982 +msgid "SD committing Data" +msgstr "" -#: src/stored/dircmd.c:866 -#, fuzzy, c-format -msgid "3001 Device \"%s\" unmounted.\n" -msgstr "3001 Le device %s est démonté.\n" +#: src/lib/util.c:229 src/dird/ua_status.c:934 src/dird/ua_status.c:985 +#, fuzzy +msgid "SD despooling Data" +msgstr "Spooling des données...\n" -#: src/stored/dircmd.c:871 -#, fuzzy, c-format -msgid "3902 Device \"%s\" is busy in acquire.\n" -msgstr "3902 Le Device %s est occupé en acquisition.\n" +#: src/lib/util.c:232 src/dird/ua_status.c:937 src/dird/ua_status.c:988 +#, fuzzy +msgid "SD despooling Attributes" +msgstr "Spooling des données...\n" + +#: src/lib/util.c:235 src/dird/ua_status.c:940 src/dird/ua_status.c:991 +msgid "Dir inserting Attributes" +msgstr "" -#: src/stored/dircmd.c:909 +#: src/lib/util.c:242 #, c-format -msgid "3907 Error scanning unmount command: %s\n" +msgid "Unknown Job termination status=%d" msgstr "" -#: src/stored/dircmd.c:937 +#: src/lib/util.c:258 #, fuzzy -msgid "3916 Error scanning action_on_purge command\n" -msgstr "2902 Erreur dans le décodage de la commande d'annulation.\n" +msgid "Completed successfully" +msgstr "Restauration effectuée." -#: src/stored/dircmd.c:980 -#, fuzzy, c-format -msgid "3921 Device \"%s\" already released.\n" -msgstr "3921 Le Device %s est déjà libéré.\n" +#: src/lib/util.c:261 +msgid "Completed with warnings" +msgstr "Terminé avec des avertissements" -#: src/stored/dircmd.c:987 -#, fuzzy, c-format -msgid "3922 Device \"%s\" waiting for sysop.\n" -msgstr "3922 Device %s est en attente d'une intervention sysop.\n" +#: src/lib/util.c:264 +msgid "Terminated with errors" +msgstr "Terminé avec des erreurs" -#: src/stored/dircmd.c:993 -#, fuzzy, c-format -msgid "3922 Device \"%s\" waiting for mount.\n" -msgstr "3922 Le Device %s est en atttente d'un montage.\n" +#: src/lib/util.c:267 +msgid "Fatal error" +msgstr "Erreur fatale" -#: src/stored/dircmd.c:997 -#, fuzzy, c-format -msgid "3923 Device \"%s\" is busy in acquire.\n" -msgstr "3902 Le Device %s est occupé en acquisition.\n" +#: src/lib/util.c:270 +msgid "Created, not yet running" +msgstr "Créé, mais non démarré" -#: src/stored/dircmd.c:1001 -#, fuzzy, c-format -msgid "3914 Device \"%s\" is being labeled.\n" -msgstr "3934 Device %s est en cours d'initialisation.\n" +#: src/lib/util.c:273 +msgid "Canceled by user" +msgstr "Annulé par l'utilisateur" -#: src/stored/dircmd.c:1009 -#, fuzzy, c-format -msgid "3022 Device \"%s\" released.\n" -msgstr "3022 Le device %s est libéré.\n" +#: src/lib/util.c:276 +#, fuzzy +msgid "Verify found differences" +msgstr "Vérification des différences" -#: src/stored/dircmd.c:1020 -#, c-format -msgid "3927 Error scanning release command: %s\n" -msgstr "" +#: src/lib/util.c:279 +msgid "Waiting for File daemon" +msgstr "En attente du client" -#: src/stored/dircmd.c:1049 src/filed/job.c:1535 -#, c-format -msgid "Could not create bootstrap file %s: ERR=%s\n" -msgstr "Impossible de créer le fichier bootstrap %s : ERR=%s\n" +#: src/lib/util.c:282 +msgid "Waiting for Storage daemon" +msgstr "En attente du Storage" -#: src/stored/dircmd.c:1062 -msgid "Error parsing bootstrap file.\n" -msgstr "" +#: src/lib/util.c:285 +msgid "Waiting for higher priority jobs" +msgstr "Attend qu'un job plus prioritaire se termine" -#: src/stored/dircmd.c:1124 -#, fuzzy, c-format -msgid "3998 Device \"%s\" is not an autochanger.\n" -msgstr "3995 Le Device %s n'est pas un autochangeur.\n" +#: src/lib/util.c:288 +msgid "Batch inserting file records" +msgstr "Mise à jour du catalogue" -#: src/stored/dircmd.c:1141 -#, fuzzy, c-format -msgid "3908 Error scanning autochanger drives/list/slots command: %s\n" -msgstr "3909 Erreur pendant la lecture de la commande de montage : %s\n" +#: src/lib/util.c:319 +msgid "Fatal Error" +msgstr "Erreur Fatale" -#: src/stored/dircmd.c:1183 -#, c-format -msgid "3909 Error scanning readlabel command: %s\n" +#: src/lib/util.c:325 +msgid "Differences" msgstr "" -#: src/stored/dircmd.c:1211 -#, c-format -msgid "3001 Volume=%s Slot=%d\n" -msgstr "3001 Volume=%s Slot=%d\n" +#: src/lib/util.c:328 +msgid "Unknown term code" +msgstr "" -#: src/stored/dircmd.c:1243 -#, fuzzy, c-format -msgid "3931 Device \"%s\" is BLOCKED. user unmounted.\n" -msgstr "3931 Device %s est BLOQUÉ, démonté par l'utilisateur.\n" +#: src/lib/util.c:344 src/lib/jcr.c:220 +msgid "Backup" +msgstr "Backup" -#: src/stored/dircmd.c:1247 -#, fuzzy, c-format -msgid "" -"3932 Device \"%s\" is BLOCKED. user unmounted during wait for media/mount.\n" +#: src/lib/util.c:347 +#, fuzzy +msgid "Migrated Job" +msgstr "Migrer" + +#: src/lib/util.c:350 +msgid "Verify" +msgstr "Vérifier" + +#: src/lib/util.c:353 +msgid "Restore" +msgstr "Restaurer" + +#: src/lib/util.c:356 +msgid "Console" msgstr "" -"3932 Device %s est BLOQUÉ, démonté par l'utilisateur alors que bacula était " -"en attente d'un média.\n" -#: src/stored/dircmd.c:1251 -#, fuzzy, c-format -msgid "3933 Device \"%s\" is BLOCKED waiting for media.\n" -msgstr "3933 Device %s est bloqué en attente d'un media.\n" +#: src/lib/util.c:359 +msgid "System or Console" +msgstr "" -#: src/stored/dircmd.c:1255 -#, fuzzy, c-format -msgid "3934 Device \"%s\" is being initialized.\n" -msgstr "3934 Device %s est en cours d'initialisation.\n" +#: src/lib/util.c:362 +msgid "Admin" +msgstr "Admin" -#: src/stored/dircmd.c:1259 -#, fuzzy, c-format -msgid "3935 Device \"%s\" is blocked labeling a Volume.\n" -msgstr "3935 Device %s est bloqué par une labélisation de volume.\n" +#: src/lib/util.c:365 src/lib/util.c:455 +msgid "Archive" +msgstr "Archiver" -#: src/stored/dircmd.c:1263 -#, fuzzy, c-format -msgid "3935 Device \"%s\" is blocked for unknown reason.\n" -msgstr "3935 Device %s est bloqué pour une raison inconnue.\n" +#: src/lib/util.c:368 +#, fuzzy +msgid "Job Copy" +msgstr "Copier" -#: src/stored/dircmd.c:1268 -#, fuzzy, c-format -msgid "3936 Device \"%s\" is busy reading.\n" -msgstr "3936 Device %s est occupé en lecture.\n" +#: src/lib/util.c:371 +msgid "Copy" +msgstr "Copier" -#: src/stored/dircmd.c:1271 -#, fuzzy, c-format -msgid "3937 Device \"%s\" is busy with writers=%d reserved=%d.\n" -msgstr "3937 Device %s est occupé avec %d flux en écriture.\n" +#: src/lib/util.c:374 +msgid "Migrate" +msgstr "Migrer" -#: src/stored/parse_bsr.c:122 src/stored/parse_bsr.c:126 -#, c-format -msgid "" -"Bootstrap file error: %s\n" -" : Line %d, col %d of file %s\n" -"%s\n" +#: src/lib/util.c:377 +msgid "Scan" msgstr "" -#: src/stored/parse_bsr.c:148 -#, c-format -msgid "Cannot open bootstrap file %s: %s\n" +#: src/lib/util.c:381 +msgid "Unknown Type" msgstr "" -#: src/stored/parse_bsr.c:279 -#, c-format -msgid "MediaType %s in bsr at inappropriate place.\n" +#: src/lib/util.c:391 +msgid "Truncate" msgstr "" -#: src/stored/parse_bsr.c:311 -#, c-format -msgid "Device \"%s\" in bsr at inappropriate place.\n" +#: src/lib/util.c:394 src/filed/restore.c:1164 +msgid "None" msgstr "" -#: src/stored/parse_bsr.c:484 -#, fuzzy, c-format -msgid "REGEX '%s' compile error. ERR=%s\n" -msgstr "erreur de fermeture : ERR=%s\n" +#: src/lib/util.c:408 +msgid "Base" +msgstr "Base" -#: src/stored/parse_bsr.c:494 -msgid "JobType not yet implemented\n" -msgstr "" +#: src/lib/util.c:411 src/lib/util.c:457 src/dird/ua_run.c:1147 +msgid "Full" +msgstr "Full" + +#: src/lib/util.c:414 src/dird/ua_run.c:1148 +msgid "Incremental" +msgstr "Incrémental" + +#: src/lib/util.c:417 src/dird/ua_run.c:1149 +msgid "Differential" +msgstr "Différentiel" + +#: src/lib/util.c:420 src/dird/ua_run.c:1150 +msgid "Since" +msgstr "Depuis" -#: src/stored/parse_bsr.c:502 -msgid "JobLevel not yet implemented\n" +#: src/lib/util.c:423 src/dird/ua_run.c:1177 +msgid "Verify Catalog" msgstr "" -#: src/stored/parse_bsr.c:719 -#, c-format -msgid "Slot %d in bsr at inappropriate place.\n" +#: src/lib/util.c:426 +msgid "Verify Init Catalog" msgstr "" -#: src/stored/parse_bsr.c:743 -#, c-format -msgid "VolFile : %u-%u\n" +#: src/lib/util.c:429 src/dird/ua_run.c:1178 +msgid "Verify Volume to Catalog" msgstr "" -#: src/stored/parse_bsr.c:751 -#, c-format -msgid "VolBlock : %u-%u\n" +#: src/lib/util.c:432 src/dird/ua_run.c:1179 +msgid "Verify Disk to Catalog" msgstr "" -#: src/stored/parse_bsr.c:759 -#, c-format -msgid "VolAddr : %llu-%llu\n" +#: src/lib/util.c:435 +msgid "Verify Data" msgstr "" -#: src/stored/parse_bsr.c:768 -#, c-format -msgid "FileIndex : %u\n" +#: src/lib/util.c:438 +msgid "Virtual Full" msgstr "" -#: src/stored/parse_bsr.c:770 -#, c-format -msgid "FileIndex : %u-%u\n" +#: src/lib/util.c:444 +msgid "Unknown Job Level" msgstr "" -#: src/stored/parse_bsr.c:780 -#, c-format -msgid "JobId : %u\n" +#: src/lib/util.c:454 +msgid "Append" msgstr "" -#: src/stored/parse_bsr.c:782 -#, c-format -msgid "JobId : %u-%u\n" -msgstr "" +#: src/lib/util.c:456 +#, fuzzy +msgid "Disabled" +msgstr "est bloqué" -#: src/stored/parse_bsr.c:792 -#, c-format -msgid "SessId : %u\n" +#: src/lib/util.c:458 +msgid "Used" msgstr "" -#: src/stored/parse_bsr.c:794 -#, c-format -msgid "SessId : %u-%u\n" +#: src/lib/util.c:459 +msgid "Cleaning" msgstr "" -#: src/stored/parse_bsr.c:803 -#, c-format -msgid "VolumeName : %s\n" +#: src/lib/util.c:460 +msgid "Purged" msgstr "" -#: src/stored/parse_bsr.c:804 -#, c-format -msgid " MediaType : %s\n" -msgstr "" +#: src/lib/util.c:461 +#, fuzzy +msgid "Recycle" +msgstr "RecyclePool" -#: src/stored/parse_bsr.c:805 -#, c-format -msgid " Device : %s\n" +#: src/lib/util.c:462 +msgid "Read-Only" msgstr "" -#: src/stored/parse_bsr.c:806 -#, c-format -msgid " Slot : %d\n" +#: src/lib/util.c:474 +#, fuzzy +msgid "Invalid volume status" +msgstr "Nom de Volume invalide : %s\n" + +#: src/lib/util.c:736 src/lib/util.c:746 src/lib/util.c:754 src/lib/util.c:761 +#: src/lib/util.c:768 src/lib/util.c:782 src/lib/util.c:792 src/lib/util.c:805 +#: src/lib/util.c:816 src/filed/restore.c:1180 +msgid "*none*" msgstr "" -#: src/stored/parse_bsr.c:815 -#, c-format -msgid "Client : %s\n" +#: src/lib/util.c:854 +msgid "Working directory not defined. Cannot continue.\n" msgstr "" -#: src/stored/parse_bsr.c:823 +#: src/lib/util.c:857 #, c-format -msgid "Job : %s\n" +msgid "Working Directory: \"%s\" not found. Cannot continue.\n" msgstr "" -#: src/stored/parse_bsr.c:831 +#: src/lib/util.c:861 #, c-format -msgid "SessTime : %u\n" +msgid "Working Directory: \"%s\" is not a directory. Cannot continue.\n" msgstr "" -#: src/stored/parse_bsr.c:842 -msgid "BSR is NULL\n" +#: src/lib/devlock.c:318 src/lib/save/devlock.c:337 +msgid "writeunlock called too many times.\n" msgstr "" -#: src/stored/parse_bsr.c:846 -#, c-format -msgid "Next : 0x%x\n" +#: src/lib/devlock.c:323 src/lib/save/devlock.c:342 +msgid "writeunlock by non-owner.\n" msgstr "" -#: src/stored/parse_bsr.c:847 +#: src/lib/devlock.c:489 src/lib/save/devlock.c:508 src/lib/rwlock.c:425 #, c-format -msgid "Root bsr : 0x%x\n" +msgid "Thread %d found unchanged elements %d times\n" msgstr "" -#: src/stored/parse_bsr.c:859 +#: src/lib/devlock.c:559 src/lib/save/devlock.c:578 src/lib/rwlock.c:495 #, c-format -msgid "count : %u\n" +msgid "%02d: interval %d, writes %d, reads %d\n" msgstr "" -#: src/stored/parse_bsr.c:860 +#: src/lib/devlock.c:569 src/lib/save/devlock.c:588 src/lib/rwlock.c:505 #, c-format -msgid "found : %u\n" +msgid "data %02d: value %d, %d writes\n" msgstr "" -#: src/stored/parse_bsr.c:863 +#: src/lib/devlock.c:574 src/lib/save/devlock.c:593 src/lib/rwlock.c:510 #, c-format -msgid "done : %s\n" +msgid "Total: %d thread writes, %d data writes\n" msgstr "" -#: src/stored/parse_bsr.c:864 -#, c-format -msgid "positioning : %d\n" +#: src/lib/devlock.c:646 src/lib/save/devlock.c:665 src/lib/rwlock.c:582 +msgid "Try write lock" msgstr "" -#: src/stored/parse_bsr.c:865 -#, c-format -msgid "fast_reject : %d\n" +#: src/lib/devlock.c:652 src/lib/save/devlock.c:671 src/lib/rwlock.c:588 +msgid "Try read lock" msgstr "" -#: src/stored/ansi_label.c:96 -#, c-format -msgid "Read error on device %s in ANSI label. ERR=%s\n" +#: src/lib/devlock.c:708 src/lib/save/devlock.c:727 src/lib/rwlock.c:644 +msgid "Create thread" msgstr "" -#: src/stored/ansi_label.c:106 -msgid "Insane! End of tape while reading ANSI label.\n" +#: src/lib/devlock.c:718 src/lib/save/devlock.c:737 src/lib/rwlock.c:654 +msgid "Join thread" msgstr "" -#: src/stored/ansi_label.c:132 -msgid "No VOL1 label while reading ANSI/IBM label.\n" +#: src/lib/devlock.c:720 src/lib/save/devlock.c:739 src/lib/rwlock.c:656 +#, c-format +msgid "%02d: interval %d, updates %d, r_collisions %d, w_collisions %d\n" msgstr "" -#: src/stored/ansi_label.c:155 +#: src/lib/devlock.c:732 src/lib/save/devlock.c:751 src/lib/rwlock.c:668 #, c-format -msgid "Wanted ANSI Volume \"%s\" got \"%s\"\n" +msgid "data %02d: value %d, %d updates\n" msgstr "" -#: src/stored/ansi_label.c:166 -msgid "No HDR1 label while reading ANSI label.\n" -msgstr "" +#: src/lib/jcr.c:222 +msgid "Verifying" +msgstr "Vérification" -#: src/stored/ansi_label.c:172 -#, c-format -msgid "ANSI/IBM Volume \"%s\" does not belong to Bacula.\n" -msgstr "" +#: src/lib/jcr.c:224 +msgid "Restoring" +msgstr "Restauration" -#: src/stored/ansi_label.c:184 -msgid "No HDR2 label while reading ANSI/IBM label.\n" -msgstr "" +#: src/lib/jcr.c:226 +msgid "Archiving" +msgstr "Archivage" -#: src/stored/ansi_label.c:199 -msgid "Unknown or bad ANSI/IBM label record.\n" -msgstr "" +#: src/lib/jcr.c:228 +msgid "Copying" +msgstr "Copier" -#: src/stored/ansi_label.c:207 -msgid "Too many records in while reading ANSI/IBM label.\n" -msgstr "" +#: src/lib/jcr.c:230 +msgid "Migration" +msgstr "Migrer" -#: src/stored/ansi_label.c:307 -#, c-format -msgid "ANSI Volume label name \"%s\" longer than 6 chars.\n" -msgstr "" +#: src/lib/jcr.c:232 +#, fuzzy +msgid "Scanning" +msgstr "En cours" -#: src/stored/ansi_label.c:333 -#, fuzzy, c-format -msgid "Could not write ANSI VOL1 label. Wanted size=%d got=%d ERR=%s\n" -msgstr "Impossible de créer le fichier d'état : %s ERR=%s\n" +#: src/lib/jcr.c:234 +msgid "Unknown operation" +msgstr "Opération inconnue" -#: src/stored/ansi_label.c:371 src/stored/ansi_label.c:400 -#, c-format -msgid "Could not write ANSI HDR1 label. ERR=%s\n" -msgstr "" +#: src/lib/jcr.c:243 +msgid "backup" +msgstr "backup" -#: src/stored/ansi_label.c:376 src/stored/ansi_label.c:407 -msgid "Could not write ANSI HDR1 label.\n" -msgstr "" +#: src/lib/jcr.c:245 +msgid "verified" +msgstr "vérifié" + +#: src/lib/jcr.c:245 +msgid "verify" +msgstr "Vérifier" + +#: src/lib/jcr.c:247 +msgid "restored" +msgstr "Restauré" + +#: src/lib/jcr.c:247 +msgid "restore" +msgstr "restaurer" + +#: src/lib/jcr.c:249 +msgid "archived" +msgstr "archivé" + +#: src/lib/jcr.c:249 +msgid "archive" +msgstr "archiver" + +#: src/lib/jcr.c:251 +msgid "copied" +msgstr "copié" + +#: src/lib/jcr.c:251 +msgid "copy" +msgstr "copier" + +#: src/lib/jcr.c:253 +msgid "migrated" +msgstr "migrer" + +#: src/lib/jcr.c:253 +msgid "migrate" +msgstr "migré" + +#: src/lib/jcr.c:255 +msgid "scanned" +msgstr "scanné" + +#: src/lib/jcr.c:255 +msgid "scan" +msgstr "scanner" + +#: src/lib/jcr.c:257 +msgid "unknown action" +msgstr "action inconnue" -#: src/stored/ansi_label.c:412 +#: src/lib/jcr.c:309 src/lib/lockmgr.c:301 src/lib/lockmgr.c:756 +#: src/lib/lockmgr.c:784 #, c-format -msgid "Error writing EOF to tape. ERR=%s" -msgstr "" +msgid "pthread key create failed: ERR=%s\n" +msgstr "erreur sur pthread_key_create. ERR=%s\n" -#: src/stored/ansi_label.c:417 -msgid "write_ansi_ibm_label called for non-ANSI/IBM type\n" -msgstr "" +#: src/lib/jcr.c:331 +#, c-format +msgid "pthread_once failed. ERR=%s\n" +msgstr "erreur sur pthread_once. ERR=%s\n" -#: src/stored/append.c:68 -msgid "DCR is NULL!!!\n" -msgstr "" +#: src/lib/jcr.c:338 +#, fuzzy, c-format +msgid "Could not init msg_queue mutex. ERR=%s\n" +msgstr "Impossible d'initialiser la queue cliente : ERR=%s\n" -#: src/stored/append.c:73 -msgid "DEVICE is NULL!!!\n" +#: src/lib/jcr.c:392 +msgid "NULL jcr.\n" +msgstr "NULL jcr.\n" + +#: src/lib/jcr.c:496 +#, c-format +msgid "JCR use_count=%d JobId=%d\n" +msgstr "JCR use_count=%d JobId=%d\n" + +#: src/lib/jcr.c:601 +#, fuzzy, c-format +msgid "pthread_setspecific failed: ERR=%s\n" +msgstr "Erreur sur l'ouverture du périphérique. ERR=%s\n" + +#: src/lib/jcr.c:1082 +#, c-format +msgid "" +"Watchdog sending kill after %d secs to thread stalled reading Storage " +"daemon.\n" msgstr "" +"Le watchdog a envoyé un signal après %d secs au thread bloqué en écoute du " +"SD.\n" -#: src/stored/append.c:83 -msgid "Unable to set network buffer size.\n" +#: src/lib/jcr.c:1094 +#, c-format +msgid "" +"Watchdog sending kill after %d secs to thread stalled reading File daemon.\n" msgstr "" +"Le watchdog a envoyé un signal après %d secs au thread bloqué en écoute du " +"FD.\n" -#: src/stored/append.c:95 src/stored/append.c:104 src/stored/append.c:116 -#: src/stored/askdir.c:340 src/stored/askdir.c:341 -msgid "NULL Volume name. This shouldn't happen!!!\n" +#: src/lib/jcr.c:1106 +#, c-format +msgid "" +"Watchdog sending kill after %d secs to thread stalled reading Director.\n" msgstr "" +"Le watchdog a envoyé un signal après %d secs au thread bloqué en écoute du " +"Director.\n" -#: src/stored/append.c:110 src/stored/btape.c:2235 +#: src/lib/lex.c:77 #, c-format -msgid "Write session label failed. ERR=%s\n" -msgstr "Impossible d'écrire le label de session. ERR=%s\n" +msgid "Problem probably begins at line %d.\n" +msgstr "Le problème commence sûrement au début de la ligne %d.\n" -#: src/stored/append.c:122 +#: src/lib/lex.c:82 #, c-format -msgid "Network send error to FD. ERR=%s\n" +msgid "" +"Config error: %s\n" +" : line %d, col %d of file %s\n" +"%s\n" +"%s" msgstr "" +"Erreur de config : %s\n" +" : ligne %d, col %d du fichier %s\n" +"%s\n" +"%s" -#: src/stored/append.c:159 +#: src/lib/lex.c:86 #, c-format -msgid "Error reading data header from FD. ERR=%s\n" +msgid "Config error: %s\n" +msgstr "Erreur de config : %s\n" + +#: src/lib/lex.c:115 +msgid "Close of NULL file\n" msgstr "" -#: src/stored/append.c:167 -#, c-format -msgid "Malformed data header from FD: %s\n" +#: src/lib/lex.c:212 +msgid "" +"get_char: called after EOF. You may have a open double quote without the " +"closing double quote.\n" msgstr "" -#: src/stored/append.c:187 +#: src/lib/lex.c:254 #, c-format -msgid "FI=%d from FD not positive or sequential=%d\n" -msgstr "" +msgid "Config token too long, file: %s, line %d, begins at line %d\n" +msgstr "Config token trop long, fichier : %s, ligne %d, débutant ligne %d\n" -#: src/stored/append.c:235 -#, fuzzy, c-format -msgid "Network error reading from FD. ERR=%s\n" -msgstr "Erreur dans l'exécution de la commande : %s. ERR=%s\n" +#: src/lib/lex.c:278 +msgid "none" +msgstr "none" + +#: src/lib/lex.c:279 +msgid "comment" +msgstr "comment" + +#: src/lib/lex.c:280 +msgid "number" +msgstr "number" -#: src/stored/append.c:265 src/stored/btape.c:2354 -#, fuzzy, c-format -msgid "Error writing end session label. ERR=%s\n" -msgstr "" -"Erreur pendant l'écriture des données vers le fichier de spool. ERR=%s\n" +#: src/lib/lex.c:281 +msgid "ip_addr" +msgstr "ip_addr" -#: src/stored/append.c:277 src/stored/mac.c:126 src/stored/mac.c:261 -#: src/stored/spool.c:300 -#, c-format -msgid "Fatal append error on device %s: ERR=%s\n" -msgstr "" +# identifiant +#: src/lib/lex.c:282 +msgid "identifier" +msgstr "identifier" -#: src/stored/append.c:279 src/stored/mac.c:128 -msgid "Set ok=FALSE after write_block_to_device.\n" -msgstr "" +#: src/lib/lex.c:283 +msgid "string" +msgstr "string" -#: src/stored/append.c:308 src/stored/mac.c:151 -#, fuzzy, c-format -msgid "Elapsed time=%02d:%02d:%02d, Transfer rate=%s Bytes/second\n" -msgstr "Temps d'écriture du job = %02d:%02d:%02d, Taux de transfert = %s o/s\n" +#: src/lib/lex.c:284 +msgid "quoted_string" +msgstr "quoted_string" -#: src/stored/append.c:345 -#, c-format -msgid "Error updating file attributes. ERR=%s\n" -msgstr "" +#: src/lib/lex.c:285 +#, fuzzy +msgid "include" +msgstr "Depuis" -#: src/stored/vol_mgr.c:93 -#, fuzzy, c-format -msgid "Unable to initialize volume list lock. ERR=%s\n" -msgstr "Impossible d'initialiser le verrou sur la base. ERR=%s\n" +#: src/lib/lex.c:286 +#, fuzzy +msgid "include_quoted_string" +msgstr "quoted_string" -#: src/stored/label.c:93 -#, c-format -msgid "Couldn't rewind device %s: ERR=%s\n" +#: src/lib/lex.c:287 +msgid "UTF-8 Byte Order Mark" msgstr "" -#: src/stored/label.c:110 src/stored/label.c:202 -#, c-format -msgid "Wrong Volume mounted on device %s: Wanted %s have %s\n" +#: src/lib/lex.c:288 +msgid "UTF-16le Byte Order Mark" msgstr "" -#: src/stored/label.c:113 src/stored/label.c:190 +#: src/lib/lex.c:326 src/lib/lex.c:332 src/lib/lex.c:343 src/lib/lex.c:349 #, c-format -msgid "Too many tries: %s" -msgstr "" +msgid "expected a positive integer number, got: %s" +msgstr "attendait un nombre entier positif, pas : %s" -#: src/stored/label.c:130 -#, c-format +#: src/lib/lex.c:465 msgid "" -"Requested Volume \"%s\" on %s is not a Bacula labeled Volume, because: ERR=%s" +"This config file appears to be in an unsupported Unicode format (UTF-16be). " +"Please resave as UTF-8\n" msgstr "" -#: src/stored/label.c:135 -msgid "Could not read Volume label from block.\n" -msgstr "Impossible de lire le label du Volume depuis le média.\n" - -#: src/stored/label.c:138 +#: src/lib/lex.c:611 src/lib/lex.c:639 #, c-format -msgid "Could not unserialize Volume label: ERR=%s\n" -msgstr "" +msgid "Cannot open included config file %s: %s\n" +msgstr "Impossible d'ouvrir le fichier de configuration inclus %s : %s\n" -#: src/stored/label.c:143 +#: src/lib/lex.c:698 src/lib/lex.c:755 #, c-format -msgid "Volume Header Id bad: %s\n" -msgstr "" +msgid "expected an integer or a range, got %s: %s" +msgstr "attendait un entier ou bien un intervalle, pas %s : %s" -#: src/stored/label.c:175 +#: src/lib/lex.c:712 src/lib/lex.c:720 src/lib/lex.c:731 src/lib/lex.c:739 #, c-format -msgid "Volume on %s has wrong Bacula version. Wanted %d got %d\n" -msgstr "" +msgid "expected an integer number, got %s: %s" +msgstr "attendait un nombre entier, pas %s : %s" -#: src/stored/label.c:186 +#: src/lib/lex.c:769 #, c-format -msgid "Volume on %s has bad Bacula label type: %x\n" -msgstr "Le volume sur %s possède un mauvais label Bacula : %x\n" - -#: src/stored/label.c:236 src/stored/label.c:397 src/stored/mount.c:463 -#, fuzzy, c-format -msgid "Could not reserve volume %s on %s\n" -msgstr "Impossible de trouver le prochain volume pour le Job %s.\n" +msgid "expected a name, got %s: %s" +msgstr "attendait un nom, pas %s : %s" -#: src/stored/label.c:277 +#: src/lib/lex.c:773 #, c-format -msgid "Cannot write Volume label to block for device %s\n" -msgstr "Impossible d'écrire le label du Volume sur le Device %s\n" - -#: src/stored/label.c:328 src/stored/label.c:426 src/stored/mount.c:218 -#, fuzzy, c-format -msgid "Open device %s Volume \"%s\" failed: ERR=%s\n" -msgstr "Impossible de supprimer le volume \"%s\". ERR=%s" +msgid "name %s length %d too long, max is %d\n" +msgstr "la longueur du nom %s (%d) est trop grande, le max est %d\n" -#: src/stored/label.c:451 +#: src/lib/lex.c:781 #, c-format -msgid "Rewind error on device %s: ERR=%s\n" -msgstr "" +msgid "expected a string, got %s: %s" +msgstr "attendait une chaîne, pas %s : %s" -#: src/stored/label.c:458 -#, c-format -msgid "Truncate error on device %s: ERR=%s\n" +#: src/lib/bpipe.c:365 src/lib/bpipe.c:448 +msgid "Program killed by Bacula (timeout)\n" msgstr "" -#: src/stored/label.c:464 -#, fuzzy, c-format -msgid "Failed to re-open DVD after truncate on device %s: ERR=%s\n" +#: src/lib/btimers.c:253 +msgid "stop_btimer called with NULL btimer_id\n" msgstr "" -"Impossible de se positionner à la fin du média sur le device %s : ERR=%s\n" -#: src/stored/label.c:487 -#, c-format -msgid "Unable to write device %s: ERR=%s\n" -msgstr "" +#: src/lib/bsys.c:133 +#, fuzzy, c-format +msgid "safe_unlink could not compile regex pattern \"%s\" ERR=%s\n" +msgstr "Impossible d'ouvrir %s : ERR=%s\n" -#: src/stored/label.c:518 +#: src/lib/bsys.c:333 src/lib/bsys.c:350 src/lib/bsys.c:374 src/lib/bsys.c:387 #, c-format -msgid "Recycled volume \"%s\" on device %s, all previous data lost.\n" -msgstr "" -"Recyclage du volume \"%s\" sur le lecteur %s, les précédentes données sont " -"perdues.\n" +msgid "Out of memory: ERR=%s\n" +msgstr "Plus de mémoire : ERR=%s\n" -#: src/stored/label.c:521 -#, c-format -msgid "Wrote label to prelabeled Volume \"%s\" on device %s\n" -msgstr "" -"Écriture du label sur le Volume pré-labélisé \"%s\" sur le lecteur %s\n" +#: src/lib/bsys.c:429 +msgid "Buffer overflow.\n" +msgstr "Buffer overflow.\n" -#: src/stored/label.c:721 -#, fuzzy, c-format -msgid "Bad Volume session label = %d\n" -msgstr "Le Volume n'a pas de label.\n" +#: src/lib/bsys.c:495 +msgid "Bad errno" +msgstr "Mauvais errno" -#: src/stored/label.c:776 +#: src/lib/bsys.c:510 #, c-format -msgid "Expecting Volume Label, got FI=%s Stream=%s len=%d\n" +msgid "Memset for %d bytes at %s:%d\n" msgstr "" -#: src/stored/label.c:903 +#: src/lib/bsys.c:540 #, c-format -msgid "Unknown %d" -msgstr "" +msgid "Cannot open pid file. %s ERR=%s\n" +msgstr "Impossible d'ouvrir le fichier contenant le pid. %s ERR=%s\n" -#: src/stored/label.c:907 +#: src/lib/bsys.c:555 #, c-format msgid "" -"\n" -"Volume Label:\n" -"Id : %sVerNo : %d\n" -"VolName : %s\n" -"PrevVolName : %s\n" -"VolFile : %d\n" -"LabelType : %s\n" -"LabelSize : %d\n" -"PoolName : %s\n" -"MediaType : %s\n" -"PoolType : %s\n" -"HostName : %s\n" +"%s is already running. pid=%d\n" +"Check file %s\n" msgstr "" -#: src/stored/label.c:929 +#: src/lib/bsys.c:569 #, c-format -msgid "Date label written: %s\n" -msgstr "" +msgid "Could not open pid file. %s ERR=%s\n" +msgstr "Impossible d'ouvrir le fichier pid. %s ERR=%s\n" -#: src/stored/label.c:935 +#: src/lib/bsys.c:680 #, c-format -msgid "Date label written: %04d-%02d-%02d at %02d:%02d\n" -msgstr "" +msgid "Could not create state file. %s ERR=%s\n" +msgstr "Impossible de créer le fichier d'état. %s ERR=%s\n" -#: src/stored/label.c:955 +#: src/lib/bsys.c:699 #, c-format -msgid "" -"\n" -"%s Record:\n" -"JobId : %d\n" -"VerNum : %d\n" -"PoolName : %s\n" -"PoolType : %s\n" -"JobName : %s\n" -"ClientName : %s\n" +msgid "Write final hdr error: ERR=%s\n" msgstr "" -#: src/stored/label.c:968 +#: src/lib/bsock.c:111 #, c-format msgid "" -"Job (unique name) : %s\n" -"FileSet : %s\n" -"JobType : %c\n" -"JobLevel : %c\n" +"Could not connect to %s on %s:%d. ERR=%s\n" +"Retrying ...\n" msgstr "" +"Impossible de se connecter à %s sur %s:%d. ERR=%s\n" +"Réessaie...\n" -#: src/stored/label.c:977 +#: src/lib/bsock.c:117 #, c-format -msgid "" -"JobFiles : %s\n" -"JobBytes : %s\n" -"StartBlock : %s\n" -"EndBlock : %s\n" -"StartFile : %s\n" -"EndFile : %s\n" -"JobErrors : %s\n" -"JobStatus : %c\n" -msgstr "" +msgid "Unable to connect to %s on %s:%d. ERR=%s\n" +msgstr "Impossible de se connecter à %s sur %s:%d. ERR=%s\n" -#: src/stored/label.c:998 -#, c-format -msgid "Date written : %s\n" -msgstr "" +#: src/lib/bsock.c:193 +#, fuzzy, c-format +msgid "gethostbyname() for host \"%s\" failed: ERR=%s\n" +msgstr "Impossible de supprimer le volume \"%s\". ERR=%s" -#: src/stored/label.c:1003 +#: src/lib/bsock.c:225 src/lib/bsock.c:227 #, c-format -msgid "Date written : %04d-%02d-%02d at %02d:%02d\n" -msgstr "" - -#: src/stored/label.c:1022 -msgid "Fresh Volume" -msgstr "" +msgid "Socket open error. proto=%d port=%d. ERR=%s\n" +msgstr "Ouverture de la socket en erreur. proto=%d port=%d. ERR=%s\n" -#: src/stored/label.c:1025 -msgid "Volume" -msgstr "" +#: src/lib/bsock.c:240 src/lib/bsock.c:242 +#, fuzzy, c-format +msgid "Source address bind error. proto=%d. ERR=%s\n" +msgstr "Ouverture de la socket en erreur. proto=%d port=%d. ERR=%s\n" -#: src/stored/label.c:1034 src/stored/read_record.c:428 -msgid "End of Media" -msgstr "" +#: src/lib/bsock.c:254 src/lib/bsock.c:293 src/lib/bnet_server.c:212 +#, c-format +msgid "Cannot set SO_KEEPALIVE on socket: %s\n" +msgstr "Impossible de positionner SO_KEEPALIVE sur la socket : %s\n" -#: src/stored/label.c:1037 -msgid "End of Tape" -msgstr "" +#: src/lib/bsock.c:262 +#, fuzzy, c-format +msgid "Cannot set TCP_KEEPIDLE on socket: %s\n" +msgstr "Impossible de positionner SO_KEEPALIVE sur la socket : %s\n" -#: src/stored/label.c:1057 src/stored/label.c:1065 src/stored/label.c:1098 -#, c-format -msgid "%s Record: File:blk=%u:%u SessId=%d SessTime=%d JobId=%d DataLen=%d\n" -msgstr "" +#: src/lib/bsock.c:327 +#, fuzzy, c-format +msgid "Could not init bsock mutex. ERR=%s\n" +msgstr "Impossible d'initialiser la queue cliente : ERR=%s\n" -#: src/stored/label.c:1062 -msgid "End of physical tape.\n" +#: src/lib/bsock.c:364 +msgid "Socket is closed\n" msgstr "" -#: src/stored/label.c:1077 src/stored/label.c:1086 +#: src/lib/bsock.c:370 #, c-format -msgid "%s Record: File:blk=%u:%u SessId=%d SessTime=%d JobId=%d\n" +msgid "Socket has errors=%d on call to %s:%s:%d\n" msgstr "" -#: src/stored/label.c:1079 +#: src/lib/bsock.c:377 #, c-format -msgid " Job=%s Date=%s Level=%c Type=%c\n" +msgid "Socket is terminated=%d on call to %s:%s:%d\n" msgstr "" -#: src/stored/label.c:1088 +#: src/lib/bsock.c:385 #, c-format -msgid " Date=%s Level=%c Type=%c Files=%s Bytes=%s Errors=%d Status=%c\n" +msgid "Socket has insane msglen=%d on call to %s:%s:%d\n" msgstr "" -#: src/stored/status.c:99 -msgid "Used Volume status:\n" -msgstr "Volume en cours d'utilisation :\n" +#: src/lib/bsock.c:426 +#, fuzzy, c-format +msgid "Write error sending %d bytes to %s:%s:%d: ERR=%s\n" +msgstr "Erreur de lecture de %s:%s:%d : ERR=%s\n" -#: src/stored/status.c:117 -msgid "" -"\n" -"SD Resources:\n" +#: src/lib/bsock.c:432 +#, c-format +msgid "Wrote %d bytes to %s:%s:%d, but only %d accepted.\n" msgstr "" -#: src/stored/status.c:153 -msgid "" -"\n" -"Device status:\n" +#: src/lib/bsock.c:527 src/lib/bsock.c:588 +#, c-format +msgid "Read expected %d got %d from %s:%s:%d\n" +msgstr "Attendait %d en lecture, eu %d de %s:%s:%d\n" + +#: src/lib/bsock.c:547 +#, c-format +msgid "Packet size=%d too big from \"%s:%s:%d. Terminating connection.\n" msgstr "" -"\n" -"Statut du Device :\n" -#: src/stored/status.c:157 +#: src/lib/bsock.c:577 #, c-format -msgid "Autochanger \"%s\" with devices:\n" -msgstr "Autochangeur \"%s\" avec les Devices :\n" +msgid "Read error from %s:%s:%d: ERR=%s\n" +msgstr "Erreur de lecture de %s:%s:%d : ERR=%s\n" -#: src/stored/status.c:177 +#: src/lib/bsock.c:651 #, fuzzy, c-format -msgid "" -"\n" -"Device %s is %s:\n" -" Volume: %s\n" -" Pool: %s\n" -" Media type: %s\n" -msgstr "" -"Le Device %s est monté avec :\n" -" Volume : %s\n" -" Pool : %s\n" -" Type du Media : %s\n" +msgid "fread attr spool error. Wanted=%d got=%d bytes. ERR=%s\n" +msgstr "Erreur pendant l'écriture des attributs dans le spool. ERR=%s\n" -#: src/stored/status.c:182 +#: src/lib/bsock.c:669 #, fuzzy -msgid "waiting for" -msgstr "En attente d'un montage" - -#: src/stored/status.c:182 -msgid "mounted with" -msgstr "" +msgid "fread attr spool I/O error.\n" +msgstr "Erreur pendant l'écriture des attributs dans le spool. ERR=%s\n" -#: src/stored/status.c:184 +#: src/lib/bsock.c:730 #, fuzzy -msgid "*unknown*" -msgstr "inconnu" - -#: src/stored/status.c:188 -#, fuzzy, c-format -msgid "" -"\n" -"Device %s open but no Bacula volume is currently mounted.\n" -msgstr "Le Device %s est ouvert, mais il n'y a pas de Volume Bacula monté.\n" - -#: src/stored/status.c:199 -#, c-format -msgid " Total Bytes=%s Blocks=%s Bytes/block=%s\n" -msgstr " Total Octets=%s Blocs=%s Octets/Bloc=%s\n" +msgid "Could not malloc BSOCK data buffer\n" +msgstr "Impossible d'ouvrir la base de données \"%s\".\n" -#: src/stored/status.c:214 +#: src/lib/bsock.c:748 src/lib/bsock.c:767 #, c-format -msgid " Total Bytes Read=%s Blocks Read=%s Bytes/block=%s\n" -msgstr " Total des Octets lu=%s Blocs lu=%s Octets/Bloc=%s\n" +msgid "sockopt error: %s\n" +msgstr "erreur sockopt : %s\n" -#: src/stored/status.c:220 +#: src/lib/bsock.c:754 src/lib/bsock.c:773 #, c-format -msgid " Positioned at File=%s Block=%s\n" -msgstr " Positionné sur Fichier=%s Bloc=%s\n" +msgid "Warning network buffer = %d bytes not max size.\n" +msgstr "" -#: src/stored/status.c:227 +#: src/lib/bsock.c:793 src/lib/bsock.c:827 #, fuzzy, c-format -msgid "" -"\n" -"Device %s is not open.\n" -msgstr "Le Device %s n'est pas ouvert.\n" +msgid "fcntl F_GETFL error. ERR=%s\n" +msgstr "erreur de fermeture : ERR=%s\n" -#: src/stored/status.c:231 +#: src/lib/bsock.c:799 src/lib/bsock.c:833 src/lib/bsock.c:865 #, fuzzy, c-format -msgid "" -"\n" -"Device \"%s\" is not open or does not exist.\n" -msgstr "Le Device \"%s\" n'est pas ouvert ou il n'existe pas.\n" +msgid "fcntl F_SETFL error. ERR=%s\n" +msgstr "erreur de fermeture : ERR=%s\n" -#: src/stored/status.c:255 +#: src/lib/bsock.c:1065 src/qt-console/bcomm/dircomm_auth.cpp:107 #, fuzzy, c-format -msgid "Daemon started %s. Jobs: run=%d, running=%d.\n" -msgstr "Démon démarré depuis %s, %d jobs lancés depuis cette date.\n" - -#: src/stored/status.c:293 -msgid "" -"No DEVICE structure.\n" -"\n" -msgstr "" - -#: src/stored/status.c:299 -msgid " Device is BLOCKED. User unmounted.\n" -msgstr " Le Device est BLOQUÉ. Démonté par l'utilisateur.\n" - -#: src/stored/status.c:303 -msgid " Device is BLOCKED. User unmounted during wait for media/mount.\n" -msgstr "" -" Le Device est BLOQUÉ. Démonté par l'utilisateur à cause d'un chargement " -"de média.\n" +msgid "Director authorization problem at \"%s:%d\"\n" +msgstr "Pas d'enregistrement trouvé en base pour : %s\n" -#: src/stored/status.c:313 +#: src/lib/bsock.c:1072 src/qt-console/bcomm/dircomm_auth.cpp:114 #, c-format msgid "" -" Device is BLOCKED waiting for mount of volume \"%s\",\n" -" Pool: %s\n" -" Media type: %s\n" +"Authorization problem: Remote server at \"%s:%d\" did not advertise required " +"TLS support.\n" msgstr "" -" Le Device est BLOQUÉ en attente du montage du volume \"%s\",\n" -" Pool : %s\n" -" Media type : %s\n" -#: src/stored/status.c:322 +#: src/lib/bsock.c:1080 src/qt-console/bcomm/dircomm_auth.cpp:122 #, c-format msgid "" -" Device is BLOCKED waiting to create a volume for:\n" -" Pool: %s\n" -" Media type: %s\n" +"Authorization problem with Director at \"%s:%d\": Remote server requires " +"TLS.\n" msgstr "" -" Le Device est BLOQUÉ en attente de création d'un volume :\n" -" Pool : %s\n" -" Media type : %s\n" -#: src/stored/status.c:333 -msgid " Device is BLOCKED waiting for media.\n" -msgstr " Le Device est BLOQUÉ en attente d'un média.\n" +#: src/lib/bsock.c:1092 src/qt-console/bcomm/dircomm_auth.cpp:133 +#, fuzzy, c-format +msgid "TLS negotiation failed with Director at \"%s:%d\"\n" +msgstr "Négociation TLS échouée avec le SD « %s:%d ».\n" -#: src/stored/status.c:339 -msgid " Device is being initialized.\n" -msgstr " Le Device est en cours d'initialisation.\n" +#: src/lib/bsock.c:1102 src/qt-console/bcomm/dircomm_auth.cpp:145 +#, fuzzy, c-format +msgid "" +"Bad response to Hello command: ERR=%s\n" +"The Director at \"%s:%d\" is probably not running.\n" +msgstr "Mauvaise réponse à la commande Hello : ERR=%s\n" -#: src/stored/status.c:343 -msgid " Device is blocked labeling a Volume.\n" -msgstr " Le Device est occupé à labéliser un Volume.\n" +#: src/lib/bsock.c:1111 src/qt-console/bcomm/dircomm_auth.cpp:154 +#, fuzzy, c-format +msgid "Director at \"%s:%d\" rejected Hello command\n" +msgstr "Le File Daemon « %s:%d » a rejeté la commande Hello\n" -#: src/stored/status.c:352 +#: src/lib/bsock.c:1121 src/qt-console/bcomm/dircomm_auth.cpp:169 #, fuzzy, c-format -msgid " Slot %d %s loaded in drive %d.\n" -msgstr " Le slot %d est chargé dans le lecteur %d.\n" +msgid "" +"Authorization problem with Director at \"%s:%d\"\n" +"Most likely the passwords do not agree.\n" +"If you are using TLS, there may have been a certificate validation error " +"during the TLS handshake.\n" +"Please see " +msgstr "" +"Problème d'authentification avec le director.\n" +"Le plus souvent, les mots de pass ne correspondent pas.\n" +"Si vous utilisez TLS, il peut y avoir une erreur de validation du " +"certificat\n" +"pendant l'initialisation de la connexion TLS.\n" +"Vous trouverez de l'aide sur\n" +"http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors\n" + +#: src/lib/parse_conf.c:165 +msgid "***UNKNOWN***" +msgstr "" -#: src/stored/status.c:356 +#: src/lib/parse_conf.c:213 src/dird/dird_conf.c:1431 +#: src/qt-console/tray-monitor/tray_conf.cpp:282 #, c-format -msgid " Drive %d is not loaded.\n" -msgstr " Le lecteur %d n'est pas chargé.\n" +msgid "Too many items in %s resource\n" +msgstr "Trop d'élément dans la ressource %s\n" -#: src/stored/status.c:371 src/stored/btape.c:688 +#: src/lib/parse_conf.c:266 src/lib/parse_conf.c:287 #, c-format -msgid "Configured device capabilities:\n" +msgid "expected an =, got: %s" +msgstr "attendait un =, eu : %s" + +#: src/lib/parse_conf.c:296 +#, c-format +msgid "Unknown item code: %d\n" msgstr "" -#: src/stored/status.c:389 -msgid "Device state:\n" +#: src/lib/parse_conf.c:336 +#, c-format +msgid "message type: %s not found" msgstr "" -#: src/stored/status.c:405 +#: src/lib/parse_conf.c:374 #, c-format -msgid " num_writers=%d reserves=%d block=%d\n" +msgid "Attempt to redefine name \"%s\" to \"%s\"." msgstr "" -#: src/stored/status.c:409 -#, fuzzy -msgid "Attached Jobs: " +#: src/lib/parse_conf.c:466 src/dird/dird_conf.c:1896 +#, c-format +msgid "Could not find config Resource %s referenced on line %d : %s\n" msgstr "" -"\n" -"Jobs planifiés :\n" -#: src/stored/status.c:427 src/stored/btape.c:720 +#: src/lib/parse_conf.c:471 #, c-format -msgid "Device parameters:\n" +msgid "Attempt to redefine resource \"%s\" referenced on line %d : %s\n" msgstr "" -#: src/stored/status.c:429 +#: src/lib/parse_conf.c:507 #, c-format -msgid " Archive name: %s Device name: %s\n" +msgid "Too many %s directives. Max. is %d. line %d: %s\n" msgstr "" -#: src/stored/status.c:432 +#: src/lib/parse_conf.c:518 +#, c-format +msgid "Could not find config Resource \"%s\" referenced on line %d : %s\n" +msgstr "Impossible de trouver la ressource \"%s\" utilisée ligne %d : %s\n" + +#: src/lib/parse_conf.c:581 +#, c-format +msgid "Missing config Resource \"%s\" referenced on line %d : %s\n" +msgstr "Impossible de trouver la ressource \"%s\" utilisée ligne %d : %s\n" + +#: src/lib/parse_conf.c:653 +#, c-format +msgid "expected a size number, got: %s" +msgstr "attendait une taille, eu : %s" + +#: src/lib/parse_conf.c:658 #, fuzzy, c-format -msgid " File=%u block=%u\n" -msgstr "Fichier=%u bloc=%u\n" +msgid "expected a speed number, got: %s" +msgstr "attendait une taille, eu : %s" -#: src/stored/status.c:434 +#: src/lib/parse_conf.c:669 #, fuzzy, c-format -msgid " Min block=%u Max block=%u\n" -msgstr "Min bloc=%u Max bloc=%u\n" +msgid "expected a %s, got: %s" +msgstr "attendait un =, eu : %s" + +#: src/lib/parse_conf.c:670 +msgid "size" +msgstr "" + +#: src/lib/parse_conf.c:670 +msgid "speed" +msgstr "" -#: src/stored/status.c:455 +#: src/lib/parse_conf.c:724 src/lib/parse_conf.c:730 src/dird/run_conf.c:315 #, c-format -msgid "%s Job %s waiting for Client connection.\n" -msgstr "%s Job %s est en attente de la connexion du Client.\n" +msgid "expected a time period, got: %s" +msgstr "" -#: src/stored/status.c:471 +#: src/lib/parse_conf.c:749 src/lib/parse_conf.c:765 src/lib/ini.c:590 +#: src/dird/dird_conf.c:1874 src/dird/dird_conf.c:1990 #, c-format -msgid "" -"Reading: %s %s job %s JobId=%d Volume=\"%s\"\n" -" pool=\"%s\" device=%s\n" +msgid "Expect %s, got: %s" +msgstr "Attendait %s, a pas : %s" + +#: src/lib/parse_conf.c:791 +#, c-format +msgid "Expected a Tape Label keyword, got: %s" +msgstr "Attendait un Label de lecteur, a pas : %s" + +#: src/lib/parse_conf.c:874 +#, c-format +msgid "Unable to initialize resource lock. ERR=%s\n" msgstr "" -"Lecture : %s %s job %s JobId=%d Volume=\"%s\"\n" -" pool=\"%s\" device=%s\n" -#: src/stored/status.c:484 -#, fuzzy, c-format +#: src/lib/parse_conf.c:882 +#, fuzzy +msgid "Config filename too long.\n" +msgstr "Nom de Volume trop long.\n" + +#: src/lib/parse_conf.c:905 +#, c-format +msgid "Cannot open config file \"%s\": %s\n" +msgstr "Impossible d'ouvrir le fichier de configuration \"%s\" : %s\n" + +#: src/lib/parse_conf.c:922 msgid "" -"Writing: %s %s job %s JobId=%d Volume=\"%s\"\n" -" pool=\"%s\" device=%s\n" +"Currently we cannot handle UTF-16 source files. Please convert the conf file " +"to UTF-8\n" msgstr "" -"Ecriture : %s %s job %s JobId=%d Volume=\"%s\"\n" -" pool=\"%s\" device=%s\n" -#: src/stored/status.c:495 +#: src/lib/parse_conf.c:926 #, c-format -msgid " spooling=%d despooling=%d despool_wait=%d\n" -msgstr " spooling=%d despooling=%d despool_wait=%d\n" +msgid "Expected a Resource name identifier, got: %s" +msgstr "Attendait un identifiant de Ressource, a pas : %s" -#: src/stored/status.c:511 -#, fuzzy, c-format -msgid " Files=%s Bytes=%s AveBytes/sec=%s LastBytes/sec=%s\n" -msgstr " Fichiers=%s Octets=%s Octets/sec=%s Erreurs=%d\n" +#: src/lib/parse_conf.c:942 +#, c-format +msgid "expected resource name, got: %s" +msgstr "attendait un nom de ressource, eu : %s" -#: src/stored/status.c:523 +#: src/lib/parse_conf.c:953 #, c-format -msgid " FDReadSeqNo=%s in_msg=%u out_msg=%d fd=%d\n" +msgid "not in resource definition: %s" msgstr "" -#: src/stored/status.c:529 -msgid " FDSocket closed\n" -msgstr "" +#: src/lib/parse_conf.c:964 src/dird/inc_conf.c:388 src/dird/inc_conf.c:732 +#: src/dird/dird_conf.c:2050 +#, c-format +msgid "expected an equals, got: %s" +msgstr "attendait un égale, eu : %s" -#: src/stored/status.c:550 +#: src/lib/parse_conf.c:978 +#, c-format msgid "" -"\n" -"Jobs waiting to reserve a drive:\n" +"Keyword \"%s\" not permitted in this resource.\n" +"Perhaps you left the trailing brace off of the previous resource." msgstr "" -"\n" -"Jobs en attente de réservation de lecteur :\n" -#: src/stored/status.c:581 -msgid "===================================================================\n" -msgstr "===================================================================\n" +#: src/lib/parse_conf.c:989 +msgid "Name not specified for resource" +msgstr "" -#: src/stored/status.c:663 src/lib/util.c:423 src/filed/status.c:517 -msgid "Base" -msgstr "Base" +#: src/lib/parse_conf.c:999 +#, c-format +msgid "unexpected token %d %s in resource definition" +msgstr "mot clés inattendu %d %s dans la définition de la ressource" -#: src/stored/status.c:680 src/filed/status.c:534 -msgid "Init Catalog" +#: src/lib/parse_conf.c:1005 +#, c-format +msgid "Unknown parser state %d\n" msgstr "" -#: src/stored/status.c:683 src/filed/status.c:537 -msgid "Volume to Catalog" +#: src/lib/parse_conf.c:1010 +msgid "End of conf file reached with unclosed resource." msgstr "" -#: src/stored/status.c:686 src/filed/status.c:540 -msgid "Disk to Catalog" +#: src/lib/daemon.c:52 +#, fuzzy, c-format +msgid "Cannot fork to become daemon: ERR=%s\n" +msgstr "Impossible de forker pour passer en mode démon : %s\n" + +#: src/lib/lockmgr.c:53 +#, c-format +msgid "ASSERT failed at %s:%i: %s\n" msgstr "" -#: src/stored/status.c:689 src/filed/status.c:543 -msgid "Data" +#: src/lib/lockmgr.c:58 +#, c-format +msgid "ASSERT failed at %s:%i: %s \n" msgstr "" -#: src/stored/status.c:695 src/lib/util.c:459 src/filed/status.c:549 -msgid "Unknown Job Level" +#: src/lib/lockmgr.c:64 +#, c-format +msgid "ASSERT failed at %s:%i: %s (%s)\n" msgstr "" -#: src/stored/status.c:763 +#: src/lib/lockmgr.c:95 #, fuzzy, c-format -msgid "3900 No arg in .status command: %s\n" -msgstr "3909 Erreur pendant la lecture de la commande de montage : %s\n" +msgid "Mutex lock failure. ERR=%s\n" +msgstr "Erreur sur l'ouverture du périphérique. ERR=%s\n" -#: src/stored/status.c:811 +#: src/lib/lockmgr.c:105 #, fuzzy, c-format -msgid "3900 Unknown arg in .status command: %s\n" -msgstr "Erreur inconnue." - -#: src/stored/status.c:826 -msgid "Bacula Storage: Idle" -msgstr "Bacula Storage : En attente" - -#: src/stored/status.c:837 -msgid "Bacula Storage: Running" -msgstr "Bacula Storage : En cours" - -#: src/stored/status.c:851 -msgid "Bacula Storage: Last Job Canceled" -msgstr "Bacula Storage : Dernier Job annulé" +msgid "Mutex unlock failure. ERR=%s\n" +msgstr "rwl_writeunlock en échec sur %s:%d :. ERR=%s\n" -#: src/stored/status.c:855 -msgid "Bacula Storage: Last Job Failed" -msgstr "Bacula Storage : Dernier Job en erreur" +#: src/lib/lockmgr.c:768 +#, fuzzy, c-format +msgid "pthread_create failed: ERR=%s\n" +msgstr "Erreur sur l'ouverture du périphérique. ERR=%s\n" -#: src/stored/status.c:859 -msgid "Bacula Storage: Last Job had Warnings" -msgstr "Bacula Storage : Le dernier Job avait des erreurs" +#: src/lib/message.c:417 src/lib/message.c:427 +#, c-format +msgid "Could not open console message file %s: ERR=%s\n" +msgstr "" -#: src/stored/read_record.c:89 +#: src/lib/message.c:432 #, c-format -msgid "End of Volume at file %u on device %s, Volume \"%s\"\n" -msgstr "Fin de Volume au fichier %u sur le Device %s, Volume \"%s\"\n" +msgid "Could not get con mutex: ERR=%s\n" +msgstr "" -#: src/stored/read_record.c:93 -msgid "End of all volumes.\n" -msgstr "Fin de tous les Volumes.\n" +#: src/lib/message.c:537 +msgid "Bacula Message" +msgstr "Message de Bacula" -#: src/stored/read_record.c:137 -msgid "part" +#: src/lib/message.c:541 +#, c-format +msgid "open mail pipe %s failed: ERR=%s\n" msgstr "" -#: src/stored/read_record.c:140 -msgid "file" +#: src/lib/message.c:632 +msgid "open mail pipe failed.\n" msgstr "" -#: src/stored/read_record.c:143 +#: src/lib/message.c:645 #, c-format -msgid "End of %s %u on device %s, Volume \"%s\"\n" -msgstr "Fin de %s %u sur le device %s, Volume \"%s\"\n" - -#: src/stored/read_record.c:158 -msgid "Did fsr in attemp to skip bad record.\n" -msgstr "" +msgid "close error: ERR=%s\n" +msgstr "erreur de fermeture : ERR=%s\n" -#: src/stored/read_record.c:397 +#: src/lib/message.c:656 #, c-format -msgid "Forward spacing Volume \"%s\" to file:block %u:%u.\n" -msgstr "Postionnement en avant du Volume \"%s\" sur le fichier:bloc %u:%u.\n" - -#: src/stored/read_record.c:421 -msgid "Begin Session" +msgid "Mail prog: %s" msgstr "" -#: src/stored/read_record.c:425 -msgid "End Session" +#: src/lib/message.c:665 +#, c-format +msgid "" +"Mail program terminated in error.\n" +"CMD=%s\n" +"ERR=%s\n" msgstr "" +"La commande mail s'est terminée en erreur.\n" +"CMD=%s\n" +"ERR=%s\n" -#: src/stored/read_record.c:431 +#: src/lib/message.c:770 #, c-format -msgid "Unknown code %d\n" +msgid "fopen %s failed: ERR=%s\n" +msgstr "fopen %s en erreur : ERR=%s\n" + +#: src/lib/message.c:892 src/lib/message.c:895 +msgid "Msg delivery error: Unable to store data in database.\n" msgstr "" -#: src/stored/bextract.c:80 +#: src/lib/message.c:947 #, fuzzy, c-format msgid "" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: bextract \n" -" -b specify a bootstrap file\n" -" -c specify a Storage configuration file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -e exclude list\n" -" -i include list\n" -" -p proceed inspite of I/O errors\n" -" -v verbose\n" -" -V specify Volume names (separated by |)\n" -" -? print this message\n" -"\n" +"Msg delivery error: Operator mail program terminated in error.\n" +"CMD=%s\n" +"ERR=%s\n" msgstr "" -"Copyright (C) 2000-2005 Kern Sibbald.\n" -"\n" -"Version : %s (%s)\n" -"\n" -"Usage : dird [-f -s] [-c config_file] [-d debug_level] [config_file]\n" -" -c utilise fich comme fichier de configuration\n" -" -dnn positionne le niveau de debug à nn\n" -" -f reste en avant-plan (pour debugger)\n" -" -g groupid\n" -" -r lance maintenant\n" -" -s pas de signaux\n" -" -t test - lit seulement le fichier de configuration\n" -" -u userid\n" -" -v affiche les messages utilisateurs\n" -" -? affiche ce message.\n" -"\n" +"La commande mail s'est terminée en erreur.\n" +"CMD=%s\n" +"ERR=%s\n" -#: src/stored/bextract.c:196 src/stored/bcopy.c:161 src/stored/bscan.c:248 -#: src/tools/bvfs_test.c:201 src/tools/bbatch.c:190 src/tools/ing_test.c:185 -#: src/tools/cats_test.c:321 -msgid "Wrong number of arguments: \n" -msgstr "" +#: src/lib/message.c:968 +#, fuzzy, c-format +msgid "Msg delivery error: fopen %s failed: ERR=%s\n" +msgstr "fopen %s en erreur : ERR=%s\n" -#: src/stored/bextract.c:218 +#: src/lib/message.c:1287 #, c-format -msgid "%d Program Name and/or Program Data Stream records ignored.\n" +msgid "%s: ABORTING due to ERROR in %s:%d\n" msgstr "" -#: src/stored/bextract.c:222 +#: src/lib/message.c:1291 #, c-format -msgid "%d Win32 data or Win32 gzip data stream records. Ignored.\n" +msgid "%s: ERROR TERMINATION at %s:%d\n" msgstr "" -#: src/stored/bextract.c:249 +#: src/lib/message.c:1296 #, c-format -msgid "Cannot stat %s. It must exist. ERR=%s\n" -msgstr "" +msgid "%s: Fatal Error because: " +msgstr "%s : Erreur Fatale car : " -#: src/stored/bextract.c:253 +#: src/lib/message.c:1298 #, c-format -msgid "%s must be a directory.\n" -msgstr "%s doit être un répertoire.\n" +msgid "%s: Fatal Error at %s:%d because:\n" +msgstr "%s : Erreur Fatale à %s:%d car :\n" -#: src/stored/bextract.c:274 +#: src/lib/message.c:1302 #, c-format -msgid "%u files restored.\n" -msgstr "%u fichiers restaurés.\n" +msgid "%s: ERROR: " +msgstr "%s : ERREUR : " -#: src/stored/bextract.c:284 src/stored/bextract.c:290 -#: src/filed/restore.c:1480 +#: src/lib/message.c:1304 #, c-format -msgid "Write error on %s: %s\n" +msgid "%s: ERROR in %s:%d " +msgstr "%s : ERREUR dans %s:%d " + +#: src/lib/message.c:1307 +#, c-format +msgid "%s: Warning: " +msgstr "%s : Attention : " + +#: src/lib/message.c:1310 +#, c-format +msgid "%s: Security violation: " msgstr "" -#: src/stored/bextract.c:321 src/stored/bextract.c:587 -msgid "Logic error output file should be open but is not.\n" +#: src/lib/message.c:1398 +#, c-format +msgid "%s ABORTING due to ERROR\n" msgstr "" -#: src/stored/bextract.c:335 src/filed/restore.c:569 +#: src/lib/message.c:1401 #, c-format -msgid "%s stream not supported on this Client.\n" +msgid "%s ERROR TERMINATION\n" msgstr "" -#: src/stored/bextract.c:345 +#: src/lib/message.c:1404 #, fuzzy, c-format -msgid "%s was deleted.\n" -msgstr "Pas de job sélectionné.\n" +msgid "%s JobId %u: Fatal error: " +msgstr "%s : %s Erreur fatale : " -#: src/stored/bextract.c:393 -#, c-format -msgid "Seek error on %s: %s\n" -msgstr "" +#: src/lib/message.c:1413 +#, fuzzy, c-format +msgid "%s JobId %u: Error: " +msgstr "%s : %s Erreur : " -#: src/stored/bextract.c:429 src/stored/bextract.c:494 -#: src/filed/restore.c:1335 +#: src/lib/message.c:1419 +#, fuzzy, c-format +msgid "%s JobId %u: Warning: " +msgstr "%s : Attention : " + +#: src/lib/message.c:1425 #, c-format -msgid "Seek to %s error on %s: ERR=%s\n" +msgid "%s JobId %u: Security violation: " msgstr "" -#: src/stored/bextract.c:448 -#, c-format -msgid "Uncompression error. ERR=%d\n" -msgstr "Erreur de décompression. ERR=%d\n" +#: src/lib/message.c:1696 +msgid "Debug lock information" +msgstr "" -#: src/stored/bextract.c:462 src/filed/restore.c:1450 -msgid "GZIP data stream found, but GZIP not configured!\n" +#: src/lib/message.c:1697 +msgid "Debug network information" msgstr "" -#: src/stored/bextract.c:517 src/filed/restore.c:1376 -#, c-format -msgid "Compressed header version error. version=0x%x\n" +#: src/lib/message.c:1698 +msgid "Debug plugin information" msgstr "" -#: src/stored/bextract.c:522 src/filed/restore.c:1381 -#, c-format -msgid "Compressed header size error. comp_len=%d, msglen=%d\n" +#: src/lib/message.c:1699 +msgid "Debug volume information" msgstr "" -#: src/stored/bextract.c:544 -#, fuzzy, c-format -msgid "LZO uncompression error. ERR=%d\n" -msgstr "Erreur de décompression. ERR=%d\n" +#: src/lib/message.c:1700 +msgid "Debug SQL queries" +msgstr "" -#: src/stored/bextract.c:556 src/filed/restore.c:1414 -#, c-format -msgid "Compression algorithm 0x%x found, but not supported!\n" +#: src/lib/message.c:1701 +msgid "Debug BVFS queries" msgstr "" -#: src/stored/bextract.c:578 -msgid "Got Program Name or Data Stream. Ignored.\n" +#: src/lib/message.c:1702 +msgid "Debug memory allocation" msgstr "" -#: src/stored/bextract.c:592 src/filed/restore.c:328 src/filed/restore.c:1033 -#, c-format -msgid "Unknown stream=%d ignored. This shouldn't happen!\n" +#: src/lib/message.c:1703 +msgid "Debug scheduler information" msgstr "" -#: src/stored/bcopy.c:74 -#, fuzzy, c-format -msgid "" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: bcopy [-d debug_level] \n" -" -b bootstrap specify a bootstrap file\n" -" -c specify a Storage configuration file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -i specify input Volume names (separated by |)\n" -" -o specify output Volume names (separated by |)\n" -" -p proceed inspite of errors\n" -" -v verbose\n" -" -w specify working directory (default /tmp)\n" -" -? print this message\n" -"\n" +#: src/lib/message.c:1704 +msgid "Debug protocol information" msgstr "" -"\n" -"Version : %s (%s)\n" -"\n" -"Usage : dird [-f -s] [-c config_file] [-d debug_level] [config_file]\n" -" -c utilise fich comme fichier de configuration\n" -" -dnn positionne le niveau de debug à nn\n" -" -f reste en avant-plan (pour debugger)\n" -" -g groupid\n" -" -r lance maintenant\n" -" -s pas de signaux\n" -" -t test - lit seulement le fichier de configuration\n" -" -u userid\n" -" -v affiche les messages utilisateurs\n" -" -? affiche ce message.\n" -"\n" -#: src/stored/bcopy.c:202 src/stored/device.c:298 src/stored/btape.c:473 -#, c-format -msgid "dev open failed: %s\n" +#: src/lib/message.c:1705 +msgid "Debug all information" msgstr "" -#: src/stored/bcopy.c:217 -msgid "Write of last block failed.\n" +#: src/lib/edit.c:476 +msgid "Empty name not allowed.\n" msgstr "" -#: src/stored/bcopy.c:221 +#: src/lib/edit.c:486 #, c-format -msgid "%u Jobs copied. %u records copied.\n" -msgstr "" +msgid "Illegal character \"%c\" in name.\n" +msgstr "Caractère illégal « %c » dans le nom.\n" -#: src/stored/bcopy.c:238 src/stored/bscan.c:428 +#: src/lib/edit.c:493 +msgid "Name too long.\n" +msgstr "Nom trop long.\n" + +#: src/lib/edit.c:499 src/dird/ua_label.c:656 src/dird/ua_cmds.c:345 +msgid "Volume name must be at least one character long.\n" +msgstr "Le nom du volume doit comporter au moins un caractère\n" + +#: src/lib/tls.c:78 #, c-format -msgid "Record: SessId=%u SessTim=%u FileIndex=%d Stream=%d len=%u\n" +msgid "" +"Error with certificate at depth: %d, issuer = %s, subject = %s, ERR=%d:%s\n" msgstr "" -#: src/stored/bcopy.c:254 -msgid "Volume is prelabeled. This volume cannot be copied.\n" -msgstr "" +#: src/lib/tls.c:115 +msgid "Error initializing SSL context" +msgstr "Erreur pendant l'initialisation du contexte SSL" -#: src/stored/bcopy.c:257 -msgid "Volume label not copied.\n" +#: src/lib/tls.c:136 +msgid "Error loading certificate verification stores" msgstr "" -#: src/stored/bcopy.c:263 -msgid "Copy skipped. Record does not match BSR filter.\n" +#: src/lib/tls.c:141 +msgid "" +"Either a certificate file or a directory must be specified as a verification " +"store\n" msgstr "" -#: src/stored/bcopy.c:280 src/stored/bcopy.c:288 src/stored/bcopy.c:316 -#: src/stored/btape.c:2756 -#, c-format -msgid "Cannot fixup device error. %s\n" +#: src/lib/tls.c:152 +msgid "Error loading certificate file" +msgstr "Erreur dans le chargement du certificat" + +#: src/lib/tls.c:160 +msgid "Error loading private key" +msgstr "Erreur dans le chargement de la clef privée" + +#: src/lib/tls.c:168 +msgid "Unable to open DH parameters file" +msgstr "Impossible d'ouvrir le fichier de paramètre DH" + +#: src/lib/tls.c:174 +msgid "Unable to load DH parameters from specified file" +msgstr "Impossible de charger les paramètres DH à partir du fichier spécifié" + +#: src/lib/tls.c:178 +msgid "Failed to set TLS Diffie-Hellman parameters" +msgstr "Impossible de positionner les paramètres TLS Diffie-Hellman" + +#: src/lib/tls.c:188 +msgid "Error setting cipher list, no valid ciphers available\n" msgstr "" -#: src/stored/bcopy.c:294 -msgid "EOM label not copied.\n" +#: src/lib/tls.c:247 +msgid "Peer failed to present a TLS certificate\n" msgstr "" -#: src/stored/bcopy.c:297 -msgid "EOT label not copied.\n" +#: src/lib/tls.c:292 src/lib/tls.c:293 +#, c-format +msgid "Peer %s failed to present a TLS certificate\n" msgstr "" -#: src/stored/dvd.c:111 -msgid "No FreeSpace command defined.\n" +#: src/lib/tls.c:408 +msgid "Error creating file descriptor-based BIO" msgstr "" -#: src/stored/dvd.c:145 -#, fuzzy, c-format -msgid "Cannot run free space command. Results=%s ERR=%s\n" -msgstr "Impossible de lancer la commande : %s. ERR=%s\n" +#: src/lib/tls.c:419 +msgid "Error creating new SSL object" +msgstr "Erreur pendant la création d'un nouvel objet SSL" -#: src/stored/dvd.c:261 -#, fuzzy, c-format -msgid "Error writing part %d to the DVD: ERR=%s\n" -msgstr "Erreur dans l'exécution de la commande : %s. ERR=%s\n" +#: src/lib/tls.c:483 src/lib/tls.c:506 +msgid "Connect failure" +msgstr "Erreur de connexion" -#: src/stored/dvd.c:263 -#, c-format -msgid "Error while writing current part to the DVD: %s" +#: src/lib/tls.c:586 src/lib/tls.c:590 +msgid "TLS shutdown failure." msgstr "" -#: src/stored/dvd.c:273 -#, c-format -msgid "Part %d (%lld bytes) written to DVD.\n" +#: src/lib/tls.c:645 src/lib/tls.c:671 +msgid "TLS read/write failure." msgstr "" -#: src/stored/dvd.c:292 +#: src/lib/priv.c:56 #, c-format -msgid "Remaining free space %s on %s\n" -msgstr "" +msgid "Could not find userid=%s: ERR=%s\n" +msgstr "Impossible de trouver le userid %s : ERR=%s\n" + +#: src/lib/priv.c:62 +#, fuzzy, c-format +msgid "Could not find password entry. ERR=%s\n" +msgstr "Impossible de trouver le client %s : ERR=%s\n" -#: src/stored/dvd.c:358 +#: src/lib/priv.c:75 #, c-format -msgid "Next Volume part already exists on DVD. Cannot continue: %s\n" -msgstr "" +msgid "Could not find group=%s: ERR=%s\n" +msgstr "Impossible de trouver le groupe=%s : ERR=%s\n" -#: src/stored/dvd.c:563 +#: src/lib/priv.c:83 #, c-format -msgid "" -"Error writing. Current part less than total number of parts (%d/%d, device=" -"%s)\n" +msgid "Could not initgroups for group=%s, userid=%s: ERR=%s\n" msgstr "" +"Impossible d'utiliser initgroups pour le groupe=%s, userid=%s: ERR=%s\n" +"\n" -#: src/stored/dvd.c:570 +#: src/lib/priv.c:86 #, fuzzy, c-format -msgid "Unable to write last on %s: ERR=%s\n" -msgstr "Impossible de se connecter à %s sur %s:%d. ERR=%s\n" +msgid "Could not initgroups for userid=%s: ERR=%s\n" +msgstr "Impossible d'ouvrir %s : ERR=%s\n" -#: src/stored/butil.c:59 -msgid "Nohdr," -msgstr "" +#: src/lib/priv.c:93 +#, fuzzy, c-format +msgid "Could not set group=%s: ERR=%s\n" +msgstr "Impossible d'ouvrir %s : ERR=%s\n" + +#: src/lib/priv.c:103 +#, fuzzy, c-format +msgid "prctl failed: ERR=%s\n" +msgstr "Erreur sur l'ouverture du périphérique. ERR=%s\n" -#: src/stored/butil.c:62 -msgid "partial," -msgstr "" +#: src/lib/priv.c:107 +#, fuzzy, c-format +msgid "setreuid failed: ERR=%s\n" +msgstr "fopen %s en erreur : ERR=%s\n" -#: src/stored/butil.c:65 -msgid "empty," -msgstr "" +#: src/lib/priv.c:111 +#, fuzzy, c-format +msgid "cap_from_text failed: ERR=%s\n" +msgstr "fopen %s en erreur : ERR=%s\n" -#: src/stored/butil.c:68 -msgid "Nomatch," -msgstr "" +#: src/lib/priv.c:115 +#, fuzzy, c-format +msgid "cap_set_proc failed: ERR=%s\n" +msgstr "Erreur sur l'ouverture du périphérique. ERR=%s\n" -#: src/stored/butil.c:71 -msgid "cont," +#: src/lib/priv.c:119 +msgid "Keep readall caps not implemented this OS or missing libraries.\n" msgstr "" -#: src/stored/butil.c:148 -msgid "Volume name or names is too long. Please use a .bsr file.\n" +#: src/lib/priv.c:123 +#, c-format +msgid "Could not set specified userid: %s\n" msgstr "" -#: src/stored/butil.c:168 +#: src/lib/res.c:53 #, c-format -msgid "Cannot find device \"%s\" in config file %s.\n" -msgstr "" +msgid "rwl_writelock failure at %s:%d: ERR=%s\n" +msgstr "rwl_writelock en échec sur %s:%d : ERR=%s\n" -#: src/stored/butil.c:175 +#: src/lib/res.c:63 #, c-format -msgid "Cannot init device %s\n" -msgstr "" +msgid "rwl_writeunlock failure at %s:%d:. ERR=%s\n" +msgstr "rwl_writeunlock en échec sur %s:%d :. ERR=%s\n" -#: src/stored/butil.c:195 +#: src/lib/watchdog.c:84 #, c-format -msgid "Cannot open %s\n" +msgid "Unable to initialize watchdog lock. ERR=%s\n" msgstr "" -#: src/stored/butil.c:282 -#, c-format -msgid "Could not find device \"%s\" in config file %s.\n" +#: src/lib/watchdog.c:181 +msgid "BUG! register_watchdog called before start_watchdog\n" msgstr "" -#: src/stored/butil.c:287 +#: src/lib/watchdog.c:184 #, c-format -msgid "Using device: \"%s\" for reading.\n" +msgid "BUG! Watchdog %p has NULL callback\n" msgstr "" -#: src/stored/butil.c:290 +#: src/lib/watchdog.c:187 #, c-format -msgid "Using device: \"%s\" for writing.\n" +msgid "BUG! Watchdog %p has zero interval\n" msgstr "" -#: src/stored/butil.c:306 -msgid "Unexpected End of Data\n" +#: src/lib/watchdog.c:207 +msgid "BUG! unregister_watchdog_unlocked called before start_watchdog\n" msgstr "" -#: src/stored/butil.c:308 -msgid "Unexpected End of Tape\n" +#: src/lib/watchdog.c:327 +#, c-format +msgid "rwl_writelock failure. ERR=%s\n" msgstr "" -#: src/stored/butil.c:310 -msgid "Unexpected End of File\n" +#: src/lib/watchdog.c:342 +#, c-format +msgid "rwl_writeunlock failure. ERR=%s\n" msgstr "" -#: src/stored/butil.c:312 -msgid "Tape Door is Open\n" +#: src/lib/ini.c:94 src/lib/ini.c:106 +#, fuzzy, c-format +msgid "" +"Config file error: %s\n" +" : Line %d, col %d of file %s\n" +"%s\n" msgstr "" +"Erreur de config : %s\n" +" : ligne %d, col %d du fichier %s\n" +"%s\n" +"%s" -#: src/stored/butil.c:314 -msgid "Unexpected Tape is Off-line\n" -msgstr "" +#: src/lib/ini.c:297 src/lib/ini.c:372 +#, fuzzy, c-format +msgid "Cannot open config file %s: %s\n" +msgstr "Impossible d'ouvrir le fichier de configuration \"%s\" : %s\n" -#: src/stored/acquire.c:74 -#, c-format -msgid "Acquire read: num_writers=%d not zero. Job %d canceled.\n" -msgstr "" +#: src/lib/bget_msg.c:85 +msgid "Status OK\n" +msgstr "Statut OK\n" -#: src/stored/acquire.c:83 +#: src/lib/bget_msg.c:89 #, c-format -msgid "No volumes specified for reading. Job %s canceled.\n" -msgstr "Pas de volume spécifié pour la lecture. Abandon du job %s.\n" +msgid "bget_msg: unknown signal %d\n" +msgstr "" -#: src/stored/acquire.c:92 +#: src/lib/address_conf.c:50 #, c-format -msgid "Logic error: no next volume to read. Numvol=%d Curvol=%d\n" -msgstr "" +msgid "Only ipv4 and ipv6 are supported (%d)\n" +msgstr "Seulement l'ipv4 et l'ipv6 sont supportés (%d)\n" -#: src/stored/acquire.c:118 +#: src/lib/address_conf.c:54 #, c-format -msgid "" -"Changing read device. Want Media Type=\"%s\" have=\"%s\"\n" -" device=%s\n" -msgstr "" -"Changement du Device de lecture. Want Media Type=\"%s\" have=\"%s\"\n" -" device=%s\n" +msgid "Only ipv4 is supported (%d)\n" +msgstr "Seulement l'ipv4 est supporté (%d)\n" -#: src/stored/acquire.c:162 +#: src/lib/address_conf.c:169 #, c-format -msgid "Media Type change. New read device %s chosen.\n" +msgid "You tried to assign a ipv6 address to an ipv4(%d)\n" msgstr "" -#: src/stored/acquire.c:174 +#: src/lib/address_conf.c:178 #, c-format -msgid "No suitable device found to read Volume \"%s\"\n" +msgid "You tried to assign an ipv4 address to an ipv6(%d)\n" msgstr "" -#: src/stored/acquire.c:213 +#: src/lib/address_conf.c:261 #, fuzzy, c-format -msgid "Job %s canceled.\n" -msgstr "Le job %s est annulé.\n" +msgid "Can't add default IPv4 address (%s)\n" +msgstr "Impossible d'ajouter l'adresse par défaut (%s)\n" -#: src/stored/acquire.c:231 -#, c-format -msgid "Read open device %s Volume \"%s\" failed: ERR=%s\n" +#: src/lib/address_conf.c:292 +msgid "" +"Old style addresses cannot be mixed with new style. Try removing Port=nnn." msgstr "" -#: src/stored/acquire.c:321 -#, c-format -msgid "Too many errors trying to mount device %s for reading.\n" -msgstr "" +#: src/lib/address_conf.c:314 +#, fuzzy, c-format +msgid "Cannot resolve service(%s)" +msgstr "impossible de trouver une correspondance pour le service (%s)" -#: src/stored/acquire.c:329 -#, c-format -msgid "Ready to read from volume \"%s\" on device %s.\n" -msgstr "Prêt à lire les données du volume \"%s\" depuis le device %s.\n" +#: src/lib/address_conf.c:324 +#, fuzzy, c-format +msgid "Cannot resolve hostname(%s) %s" +msgstr "impossible de résoudre le hostname (%s) %s" -#: src/stored/acquire.c:381 -#, c-format -msgid "Want to append, but device %s is busy reading.\n" -msgstr "" +#: src/lib/address_conf.c:432 src/lib/address_conf.c:465 +#, fuzzy, c-format +msgid "Expected a block to begin with { but got: %s" +msgstr "Attendait un début de bloc {, pas : %s" -#: src/stored/acquire.c:414 -#, c-format -msgid "Could not ready device %s for append.\n" +#: src/lib/address_conf.c:437 +msgid "Empty addr block is not allowed" msgstr "" -#: src/stored/acquire.c:501 src/stored/spool.c:321 src/stored/block.c:386 -#: src/stored/block.c:769 src/stored/block.c:847 -#, c-format -msgid "Could not create JobMedia record for Volume=\"%s\" Job=%s\n" -msgstr "Impossible de créer un JobMedia en base pour le Volume=%s Job=%s\n" +#: src/lib/address_conf.c:441 +#, fuzzy, c-format +msgid "Expected a string but got: %s" +msgstr "Attendait une chaîne, pas : %s" -#: src/stored/acquire.c:552 -#, c-format -msgid "Alert: %s" -msgstr "Alert: %s" +#: src/lib/address_conf.c:452 +#, fuzzy, c-format +msgid "Expected a string [ip|ipv4|ipv6] but got: %s" +msgstr "Attentait la chaîne [ip|ipv4|ipv6], pas : %s" -#: src/stored/acquire.c:560 -#, c-format -msgid "3997 Bad alert command: %s: ERR=%s.\n" -msgstr "" +#: src/lib/address_conf.c:456 +#, fuzzy, c-format +msgid "Expected a string [ip|ipv4] but got: %s" +msgstr "Attendait la chaîne [ip|ipv4], pas : %s" -#: src/stored/acquire.c:629 src/stored/dev.c:270 src/stored/dev.c:311 -#: src/lib/openssl.c:122 src/lib/openssl.c:181 -#, c-format -msgid "Unable to init mutex: ERR=%s\n" -msgstr "Impossible d'initialiser le muxtex : ERR=%s\n" +#: src/lib/address_conf.c:461 +#, fuzzy, c-format +msgid "Expected an equal = but got: %s" +msgstr "Attendait un égal =, pas : %s" -#: src/stored/acquire.c:635 +#: src/lib/address_conf.c:472 #, fuzzy, c-format -msgid "Unable to init r_mutex: ERR=%s\n" -msgstr "Impossible d'initialiser le muxtex : ERR=%s\n" +msgid "Expected an identifier [addr|port] but got: %s" +msgstr "Attendait un identifiant [addr|port], pas : %s" -#: src/stored/askdir.c:179 -msgid "Network error on bnet_recv in req_vol_info.\n" -msgstr "" +#: src/lib/address_conf.c:477 +msgid "Only one port per address block" +msgstr "Seulement un port par bloc d'adresse" -#: src/stored/askdir.c:197 -#, c-format -msgid "Error getting Volume info: %s" -msgstr "Erreur pendant la récupération des informations sur un Volume : %s" +#: src/lib/address_conf.c:483 +msgid "Only one addr per address block" +msgstr "Seulement une adresse par bloc d'adresse" -#: src/stored/askdir.c:376 -#, c-format -msgid "Didn't get vol info vol=%s: ERR=%s" -msgstr "" +#: src/lib/address_conf.c:487 +#, fuzzy, c-format +msgid "Expected a identifier [addr|port] but got: %s" +msgstr "Attendait un identifiant [addr|port], pas : %s" -#: src/stored/askdir.c:432 +#: src/lib/address_conf.c:491 #, c-format -msgid "Error creating JobMedia record: ERR=%s\n" +msgid "Expected a equal =, got: %s" +msgstr "Attendait un égal =, pas : %s" + +#: src/lib/address_conf.c:499 +#, fuzzy, c-format +msgid "Expected a number or a string but got: %s" +msgstr "Attendait un nombre ou une chaîne, pas : %s" + +#: src/lib/address_conf.c:505 +#, fuzzy, c-format +msgid "Expected an IP number or a hostname but got: %s" +msgstr "Attendait une adresse IP ou un nom de machine, pas : %s" + +#: src/lib/address_conf.c:511 +msgid "State machine missmatch" msgstr "" -#: src/stored/askdir.c:439 -#, c-format -msgid "Error creating JobMedia record: %s\n" +#: src/lib/address_conf.c:517 +#, fuzzy, c-format +msgid "Expected a end of block with } but got: %s" +msgstr "Attendait une fin de bloc }, pas : %s" + +#: src/lib/address_conf.c:523 +#, fuzzy, c-format +msgid "Cannot add hostname(%s) and port(%s) to addrlist (%s)" msgstr "" +"Impossible d'ajouter le hostname (%s) et le port (%s) à la liste d'adresse " +"(%s)" -#: src/stored/askdir.c:522 +#: src/lib/address_conf.c:529 +#, fuzzy, c-format +msgid "Expected an end of block with } but got: %s" +msgstr "Attendait une fin de bloc }, pas : %s" + +#: src/lib/address_conf.c:538 #, c-format -msgid "Job %s canceled while waiting for mount on Storage Device \"%s\".\n" -msgstr "" -"Le job %s a été annulé alors qu'il attendait un montage sur le Storage " -"Device \"%s\".\n" +msgid "Expected an IP number or a hostname, got: %s" +msgstr "Attendait une adresse IP ou un nom de machine, pas : %s" -#: src/stored/askdir.c:533 +#: src/lib/address_conf.c:543 src/lib/address_conf.c:557 #, fuzzy, c-format -msgid "" -"Job %s is waiting. Cannot find any appendable volumes.\n" -"Please use the \"label\" command to create a new Volume for:\n" -" Storage: %s\n" -" Pool: %s\n" -" Media type: %s\n" -msgstr "" -"Le Job %s est en attente. Bacula n'a pas pu trouver de media disponible.\n" -"Merci de créer un nouveau volume via la commande « label » pour :\n" -" Storage : %s\n" -" Type du Media : %s\n" -" Pool : %s\n" +msgid "Cannot add port (%s) to (%s)" +msgstr "impossible d'ajouter le port (%s) à (%s)" -#: src/stored/askdir.c:558 src/stored/askdir.c:658 +#: src/lib/address_conf.c:552 #, c-format -msgid "Max time exceeded waiting to mount Storage Device %s for Job %s\n" -msgstr "" +msgid "Expected a port number or string, got: %s" +msgstr "Attendait un numéro de port ou une chaîne, pas : %s" -#: src/stored/askdir.c:568 -msgid "pthread error in mount_next_volume.\n" -msgstr "" +#: src/lib/crypto.c:430 +msgid "Unable to open certificate file" +msgstr "Impossible d'ouvrir de fichier de certificat" -#: src/stored/askdir.c:601 -msgid "Cannot request another volume: no volume name given.\n" -msgstr "" +#: src/lib/crypto.c:437 +msgid "Unable to read certificate from file" +msgstr "Impossible de lire le certificat à partir du fichier" -#: src/stored/askdir.c:607 -#, c-format -msgid "Job %s canceled while waiting for mount on Storage Device %s.\n" -msgstr "" -"Le Job %s a été annulé pendant qu'il attendait le montage sur le Storage " -"Device %s.\n" +#: src/lib/crypto.c:443 +msgid "Unable to extract public key from certificate" +msgstr "Impossible d'extraire la clef publique à partir du certificat" -#: src/stored/askdir.c:624 -#, fuzzy, c-format +#: src/lib/crypto.c:450 msgid "" -"Please mount append Volume \"%s\" or label a new one for:\n" -" Job: %s\n" -" Storage: %s\n" -" Pool: %s\n" -" Media type: %s\n" +"Provided certificate does not include the required subjectKeyIdentifier " +"extension." msgstr "" -"Le Job %s est en attente. Bacula n'a pas pu trouver de media disponible.\n" -"Merci de créer un nouveau volume via la commande « label » pour :\n" -" Storage : %s\n" -" Type du Media : %s\n" -" Pool : %s\n" +"Le certificat fournis n'inclus pas l'extension subjectKeyIdentifier requise" -#: src/stored/askdir.c:630 -#, fuzzy, c-format -msgid "" -"Please mount read Volume \"%s\" for:\n" -" Job: %s\n" -" Storage: %s\n" -" Pool: %s\n" -" Media type: %s\n" -msgstr "" -"Le Job %s est en attente. Bacula n'a pas pu trouver de media disponible.\n" -"Merci de créer un nouveau volume via la commande « label » pour :\n" -" Storage : %s\n" -" Type du Media : %s\n" -" Pool : %s\n" +#: src/lib/crypto.c:457 +#, c-format +msgid "Unsupported key type provided: %d\n" +msgstr "Type de clef fourni non supporté : %d\n" -#: src/stored/askdir.c:668 -msgid "pthread error in mount_volume\n" -msgstr "" +#: src/lib/crypto.c:494 src/lib/crypto.c:542 +msgid "Unable to open private key file" +msgstr "Impossible d'ouvrir le fichier de clef privée" -#: src/stored/record.c:75 -#, c-format -msgid "unknown: %d" -msgstr "" +#: src/lib/crypto.c:524 src/lib/crypto.c:558 +msgid "Unable to read private key from file" +msgstr "Impossible de lire la clef privée à partir du fichier" -#: src/stored/record.c:392 -msgid "Damaged buffer\n" -msgstr "" +#: src/lib/crypto.c:617 +#, c-format +msgid "Unsupported digest type: %d\n" +msgstr "Le digest spécifié n'est pas supporté : %d\n" -#: src/stored/record.c:670 -#, c-format -msgid "Sanity check failed. maxlen=%d datalen=%d. Block discarded.\n" +#: src/lib/crypto.c:631 +msgid "OpenSSL digest initialization failed" msgstr "" -#: src/stored/read.c:65 -msgid "No Volume names found for restore.\n" +#: src/lib/crypto.c:645 +msgid "OpenSSL digest update failed" msgstr "" -#: src/stored/read.c:120 -#, c-format -msgid ">filed: Error Hdr=%s\n" -msgstr "" +#: src/lib/crypto.c:663 +msgid "OpenSSL digest finalize failed" +msgstr "Initialisation du digest OpenSSL à échoué" -#: src/stored/read.c:121 src/stored/read.c:136 -#, c-format -msgid "Error sending to File daemon. ERR=%s\n" +#: src/lib/crypto.c:761 +msgid "OpenSSL digest_new failed" msgstr "" -#: src/stored/read.c:135 -#, c-format -msgid "Error sending to FD. ERR=%s\n" +#: src/lib/crypto.c:767 +msgid "OpenSSL sign get digest failed" msgstr "" -#: src/stored/autochanger.c:65 -#, c-format -msgid "No Changer Name given for device %s. Cannot continue.\n" -msgstr "" +#: src/lib/crypto.c:806 src/lib/crypto.c:810 +#, fuzzy +msgid "OpenSSL digest Verify final failed" +msgstr "Initialisation du contexte clef/IV du cipher OpenSSL à échoué" -#: src/stored/autochanger.c:71 -#, c-format -msgid "No Changer Command given for device %s. Cannot continue.\n" -msgstr "" +#: src/lib/crypto.c:815 +#, fuzzy +msgid "No signers found for crypto verify.\n" +msgstr "Aucun volume trouvé pour la restauration.\n" -#: src/stored/autochanger.c:139 -#, fuzzy, c-format -msgid "No slot defined in catalog (slot=%d) for Volume \"%s\" on %s.\n" -msgstr "Demande de labélisation du volume \"%s\" Slot %d...\n" +#: src/lib/crypto.c:876 +msgid "Signature creation failed" +msgstr "La création de la signature a échouée" -#: src/stored/autochanger.c:141 -msgid "Cartridge change or \"update slots\" may be required.\n" -msgstr "" +#: src/lib/crypto.c:954 +msgid "Signature decoding failed" +msgstr "Le décodage de la signature a échoué" -#: src/stored/autochanger.c:147 -#, c-format -msgid "No \"Changer Device\" for %s. Manual load of Volume may be required.\n" -msgstr "" +#: src/lib/crypto.c:1031 +msgid "Unsupported cipher type specified\n" +msgstr "Le cipher spécifié est non supporté\n" -#: src/stored/autochanger.c:154 -#, c-format -msgid "No \"Changer Command\" for %s. Manual load of Volume may be requird.\n" -msgstr "" +#: src/lib/crypto.c:1180 +msgid "CryptoData decoding failed" +msgstr "Le décodage du CryptoData a échoué" -#: src/stored/autochanger.c:185 -#, c-format -msgid "3304 Issuing autochanger \"load slot %d, drive %d\" command.\n" -msgstr "" -"3304 Envoi de la commande « load slot %d, drive %d » à l'autochangeur.\n" +#: src/lib/crypto.c:1224 +msgid "Failure decrypting the session key" +msgstr "Impossible de décrypter la clef de session" -#: src/stored/autochanger.c:193 +#: src/lib/crypto.c:1275 #, c-format -msgid "3305 Autochanger \"load slot %d, drive %d\", status is OK.\n" -msgstr "3305 Autochangeur « load slot %d, drive %d », le résultat est OK.\n" +msgid "Unsupported contentEncryptionAlgorithm: %d\n" +msgstr "contentEncryptionAlgorithm non supporté : %d\n" -#: src/stored/autochanger.c:206 -#, c-format -msgid "" -"3992 Bad autochanger \"load slot %d, drive %d\": ERR=%s.\n" -"Results=%s\n" +#: src/lib/crypto.c:1285 src/lib/crypto.c:1291 +msgid "OpenSSL cipher context initialization failed" +msgstr "Initialisation du contexte clef/IV du cipher OpenSSL à échoué" + +#: src/lib/crypto.c:1298 +msgid "Encryption session provided an invalid symmetric key" msgstr "" -"3992 Erreur sur l'autochangeur « load slot %d, drive %d » : ERR=%s.\n" -"Resultat=%s\n" -#: src/stored/autochanger.c:268 -#, c-format -msgid "3301 Issuing autochanger \"loaded? drive %d\" command.\n" -msgstr "3301 Envoi de la commande « loaded? drive %d » à l'autochangeur.\n" +#: src/lib/crypto.c:1304 +msgid "Encryption session provided an invalid IV" +msgstr "" -#: src/stored/autochanger.c:280 -#, c-format -msgid "3302 Autochanger \"loaded? drive %d\", result is Slot %d.\n" -msgstr "3302 Autochangeur « loaded drive %d », le resultat est Slot %d.\n" +#: src/lib/crypto.c:1310 +msgid "OpenSSL cipher context key/IV initialization failed" +msgstr "" -#: src/stored/autochanger.c:287 +#: src/lib/crypto.c:1380 #, c-format -msgid "3302 Autochanger \"loaded? drive %d\", result: nothing loaded.\n" -msgstr "3302 Autochangeur « loaded drive %d », résultat : lecteur vide.\n" +msgid "Unable to init OpenSSL threading: ERR=%s\n" +msgstr "Impossible d'initialiser le thread OpenSSL : ERR=%s\n" -#: src/stored/autochanger.c:299 -#, c-format -msgid "" -"3991 Bad autochanger \"loaded? drive %d\" command: ERR=%s.\n" -"Results=%s\n" +#: src/lib/crypto.c:1393 +msgid "Failed to seed OpenSSL PRNG\n" msgstr "" -"3991 Erreur sur l'autochangeur « loaded drive %d » : ERR=%s.\n" -"Resultat=%s\n" -#: src/stored/autochanger.c:316 -#, fuzzy, c-format -msgid "Lock failure on autochanger. ERR=%s\n" -msgstr "Erreur sur l'ouverture du périphérique. ERR=%s\n" +#: src/lib/crypto.c:1419 +msgid "Failed to save OpenSSL PRNG\n" +msgstr "Impossible de sauvegarder le PRNG OpenSSL\n" -#: src/stored/autochanger.c:330 +#: src/lib/crypto.c:1480 #, fuzzy, c-format -msgid "Unlock failure on autochanger. ERR=%s\n" -msgstr "rwl_writeunlock en échec sur %s:%d :. ERR=%s\n" - -#: src/stored/autochanger.c:374 src/stored/autochanger.c:523 -#, c-format -msgid "3307 Issuing autochanger \"unload slot %d, drive %d\" command.\n" -msgstr "" -"3307 Envoi de la commande « unload slot %d, drive %d » à l'autochangeur.\n" +msgid "Unsupported digest type=%d specified\n" +msgstr "Le cipher spécifié est non supporté\n" -#: src/stored/autochanger.c:387 +#: src/lib/crypto.c:1500 #, c-format -msgid "" -"3995 Bad autochanger \"unload slot %d, drive %d\": ERR=%s\n" -"Results=%s\n" +msgid "SHA1Update() returned an error: %d\n" msgstr "" -"3995 Erreur sur l'autochangeur « unload slot %d, drive %d » : ERR=%s.\n" -"Resultat=%s\n" - -#: src/stored/autochanger.c:473 -#, fuzzy, c-format -msgid "Volume \"%s\" wanted on %s is in use by device %s\n" -msgstr "Le volume \"%s\" est utilisé par le device %s\n" -#: src/stored/autochanger.c:541 -#, fuzzy, c-format -msgid "3997 Bad autochanger \"unload slot %d, drive %d\": ERR=%s.\n" -msgstr "" -"3995 Erreur sur l'autochangeur « unload slot %d, drive %d » : ERR=%s.\n" +#: src/lib/crypto.c:1643 +msgid "No error" +msgstr "Pas d'erreur" -#: src/stored/autochanger.c:585 -#, c-format -msgid "3993 Device %s not an autochanger device.\n" -msgstr "3993 Le Device %s n'est pas un autochangeur.\n" +#: src/lib/crypto.c:1645 +#, fuzzy +msgid "Signer not found" +msgstr "Le Storage \"%s\" est introuvable.\n" -#: src/stored/autochanger.c:612 -#, c-format -msgid "3306 Issuing autochanger \"%s\" command.\n" -msgstr "3306 Envoi de la commande \"%s\" à l'autochangeur.\n" +#: src/lib/crypto.c:1647 +#, fuzzy +msgid "Recipient not found" +msgstr "Ressource %s introuvable\n" -#: src/stored/autochanger.c:615 -msgid "3996 Open bpipe failed.\n" -msgstr "" +#: src/lib/crypto.c:1649 +#, fuzzy +msgid "Unsupported digest algorithm" +msgstr "Le digest spécifié n'est pas supporté : %d\n" -#: src/stored/autochanger.c:642 src/console/console.c:1458 -#, c-format -msgid "Autochanger error: ERR=%s\n" -msgstr "Erreur sur l'autochangeur : ERR=%s\n" +#: src/lib/crypto.c:1651 +#, fuzzy +msgid "Unsupported encryption algorithm" +msgstr "contentEncryptionAlgorithm non supporté : %d\n" -#: src/stored/stored.c:87 -#, fuzzy, c-format -msgid "" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: bacula-sd [options] [-c config_file] [config_file]\n" -" -c use as configuration file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -f run in foreground (for debugging)\n" -" -g set groupid to group\n" -" -m print kaboom output (for debugging)\n" -" -p proceed despite I/O errors\n" -" -s no signals (for debugging)\n" -" -t test - read config and exit\n" -" -u userid to \n" -" -v verbose user messages\n" -" -? print this message.\n" -"\n" -msgstr "" -"\n" -"Version : %s (%s)\n" -"\n" -"Usage : stored [options] [-c config_file] [config_file]\n" -" -c utilise fich comme fichier de configuration\n" -" -dnn positionne le niveau de debug à nn\n" -" -dt affiche un timestamp devant chaque ligne de debug\n" -" -f reste en avant-plan (pour debugger)\n" -" -g groupid\n" -" -p continue même en cas d'erreurs E/S\n" -" -s pas de signaux\n" -" -t test - lit seulement le fichier de configuration\n" -" -u userid\n" -" -v affiche les messages utilisateurs\n" -" -? affiche ce message.\n" -"\n" +#: src/lib/crypto.c:1653 +#, fuzzy +msgid "Signature is invalid" +msgstr "La création de la signature a échouée" -#: src/stored/stored.c:136 src/stored/btape.c:178 -#, c-format -msgid "Tape block size (%d) not multiple of system size (%d)\n" +#: src/lib/crypto.c:1655 +msgid "Decryption error" msgstr "" -#: src/stored/stored.c:140 src/stored/btape.c:182 -#, c-format -msgid "Tape block size (%d) is not a power of 2\n" -msgstr "" +#: src/lib/crypto.c:1658 +msgid "Internal error" +msgstr "Erreur interne" -#: src/stored/stored.c:268 -msgid "Volume Session Time is ZERO!\n" -msgstr "" +#: src/lib/crypto.c:1660 +msgid "Unknown error" +msgstr "Erreur inconnue." -#: src/stored/stored.c:277 +#: src/lib/attr.c:69 #, c-format -msgid "Unable to create thread. ERR=%s\n" -msgstr "" +msgid "Error scanning attributes: %s\n" +msgstr "Erreur pendant la lecture des attributs : %s\n" -#: src/stored/stored.c:310 src/stored/bscan.c:262 -#, c-format -msgid "No Storage resource defined in %s. Cannot continue.\n" +#: src/lib/signal.c:56 +msgid "Invalid signal number" msgstr "" -#: src/stored/stored.c:316 +#: src/lib/signal.c:146 src/lib/signal.c:148 #, c-format -msgid "Only one Storage resource permitted in %s\n" -msgstr "" +msgid "Bacula interrupted by signal %d: %s\n" +msgstr "Bacula a reçu le signal %d : %s\n" -#: src/stored/stored.c:321 -#, c-format -msgid "No Director resource defined in %s. Cannot continue.\n" +#: src/lib/signal.c:164 +#, fuzzy, c-format +msgid "Kaboom! %s, %s got signal %d - %s at %s. Attempting traceback.\n" msgstr "" +"Kaboom ! %s, %s a reçu le signal %d - %s. Tentative de dump des traces.\n" -#: src/stored/stored.c:326 +#: src/lib/signal.c:166 #, c-format -msgid "No Device resource defined in %s. Cannot continue.\n" -msgstr "" +msgid "Kaboom! exepath=%s\n" +msgstr "Kaboom ! exepath=%s\n" -#: src/stored/stored.c:334 +#: src/lib/signal.c:207 #, c-format -msgid "No Messages resource defined in %s. Cannot continue.\n" -msgstr "" +msgid "Fork error: ERR=%s\n" +msgstr "Fork en erreur : ERR=%s\n" -#: src/stored/stored.c:341 src/stored/bscan.c:270 -#, c-format -msgid "No Working Directory defined in %s. Cannot continue.\n" -msgstr "" +#: src/lib/signal.c:215 +#, fuzzy, c-format +msgid "Calling: %s %s %s %s\n" +msgstr "Exécution : %s %s %s\n" -#: src/stored/stored.c:363 +#: src/lib/signal.c:219 #, c-format -msgid "\"TLS Certificate\" file not defined for Storage \"%s\" in %s.\n" -msgstr "" +msgid "execv: %s failed: ERR=%s\n" +msgstr "execv : %s en échec : ERR=%s\n" -#: src/stored/stored.c:369 +#: src/lib/signal.c:241 #, c-format -msgid "\"TLS Key\" file not defined for Storage \"%s\" in %s.\n" +msgid "It looks like the traceback worked...\n" msgstr "" -#: src/stored/stored.c:375 +#: src/lib/signal.c:243 #, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Storage \"%s\" in %s. At least one CA certificate store is required when " -"using \"TLS Verify Peer\".\n" +msgid "The btraceback call returned %d\n" msgstr "" -#: src/stored/stored.c:568 +#: src/lib/signal.c:303 #, c-format -msgid "Could not initialize %s\n" -msgstr "Impossible d'initialiser %s\n" +msgid "BA_NSIG too small (%d) should be (%d)\n" +msgstr "BA_NSIG trop petit (%d) devrait être (%d)\n" -#: src/stored/stored.c:582 -#, c-format -msgid "Could not open device %s\n" -msgstr "Impossible d'ouvrir le device %s\n" +#: src/lib/signal.c:309 +msgid "UNKNOWN SIGNAL" +msgstr "SIGNAL INCONNU" -#: src/stored/stored.c:596 -#, c-format -msgid "Could not mount device %s\n" -msgstr "Impossible de monter le device %s\n" +#: src/lib/signal.c:310 +msgid "Hangup" +msgstr "Hangup" -#: src/stored/device.c:120 -#, c-format -msgid "End of medium on Volume \"%s\" Bytes=%s Blocks=%s at %s.\n" -msgstr "Fin de média sur le Volume \"%s\" Octets=%s Blocs=%s à %s.\n" +#: src/lib/signal.c:311 +msgid "Interrupt" +msgstr "" -#: src/stored/device.c:139 -#, c-format -msgid "New volume \"%s\" mounted on device %s at %s.\n" -msgstr "Nouveau volume \"%s\" monté sur le device %s à %s.\n" +#: src/lib/signal.c:312 +msgid "Quit" +msgstr "Quit" -#: src/stored/device.c:151 -#, c-format -msgid "write_block_to_device Volume label failed. ERR=%s" +#: src/lib/signal.c:313 +msgid "Illegal instruction" msgstr "" -#: src/stored/device.c:186 -#, c-format -msgid "write_block_to_device overflow block failed. ERR=%s" +#: src/lib/signal.c:314 +msgid "Trace/Breakpoint trap" msgstr "" -#: src/stored/device.c:191 -#, c-format -msgid "Catastrophic error. Cannot write overflow block to device %s. ERR=%s" +#: src/lib/signal.c:315 +msgid "Abort" +msgstr "Abort" + +#: src/lib/signal.c:317 +msgid "EMT instruction (Emulation Trap)" msgstr "" -#: src/stored/device.c:327 src/stored/dev.c:512 -#, c-format -msgid "Unable to open device %s: ERR=%s\n" +#: src/lib/signal.c:320 +msgid "IOT trap" +msgstr "IOT trap" + +#: src/lib/signal.c:322 +msgid "BUS error" +msgstr "BUS error" + +#: src/lib/signal.c:323 +msgid "Floating-point exception" msgstr "" -#: src/stored/device.c:329 -#, c-format -msgid "Unable to open archive %s: ERR=%s\n" +#: src/lib/signal.c:324 +msgid "Kill, unblockable" msgstr "" -#: src/stored/fd_cmds.c:166 -#, c-format -msgid "Command error with FD, hanging up. %s\n" +#: src/lib/signal.c:325 +msgid "User-defined signal 1" msgstr "" -#: src/stored/fd_cmds.c:169 -msgid "Command error with FD, hanging up.\n" +#: src/lib/signal.c:326 +msgid "Segmentation violation" +msgstr "Erreur de segmentation" + +#: src/lib/signal.c:327 +msgid "User-defined signal 2" msgstr "" -#: src/stored/fd_cmds.c:180 -#, fuzzy, c-format -msgid "FD command not found: %s\n" -msgstr "Job non trouvé : %s\n" +#: src/lib/signal.c:328 +msgid "Broken pipe" +msgstr "Tube brisé" -#: src/stored/fd_cmds.c:206 -#, fuzzy -msgid "Append data error.\n" -msgstr "Erreur non fatale" +#: src/lib/signal.c:329 +msgid "Alarm clock" +msgstr "Alarm clock" -#: src/stored/fd_cmds.c:211 -msgid "Attempt to append on non-open session.\n" +#: src/lib/signal.c:330 +msgid "Termination" msgstr "" -#: src/stored/fd_cmds.c:223 src/stored/fd_cmds.c:266 -msgid "Attempt to close non-open session.\n" +#: src/lib/signal.c:332 +msgid "Stack fault" msgstr "" -#: src/stored/fd_cmds.c:241 -msgid "Attempt to open already open session.\n" +#: src/lib/signal.c:334 +msgid "Child status has changed" msgstr "" -#: src/stored/fd_cmds.c:295 -msgid "Attempt to read on non-open session.\n" +#: src/lib/signal.c:335 +msgid "Continue" +msgstr "Continue" + +#: src/lib/signal.c:336 +msgid "Stop, unblockable" msgstr "" -#: src/stored/fd_cmds.c:313 src/stored/fd_cmds.c:322 -msgid "Attempt to open read on non-open session.\n" +#: src/lib/signal.c:337 +msgid "Keyboard stop" msgstr "" -#: src/stored/mount.c:98 -#, c-format -msgid "Too many errors trying to mount device %s.\n" +#: src/lib/signal.c:338 +msgid "Background read from tty" msgstr "" -#: src/stored/mount.c:106 -#, c-format -msgid "Job %d canceled.\n" -msgstr "Le job %d est annulé.\n" +#: src/lib/signal.c:339 +msgid "Background write to tty" +msgstr "" -#: src/stored/mount.c:282 -#, c-format -msgid "Volume \"%s\" previously written, moving to end of data.\n" -msgstr "Le volume \"%s\" contient des données, re-positionnement à la fin.\n" +#: src/lib/signal.c:340 +msgid "Urgent condition on socket" +msgstr "" -#: src/stored/mount.c:288 -#, c-format -msgid "Unable to position to end of data on device %s: ERR=%s\n" +#: src/lib/signal.c:341 +msgid "CPU limit exceeded" msgstr "" -"Impossible de se positionner à la fin du média sur le device %s : ERR=%s\n" -#: src/stored/mount.c:411 src/stored/mount.c:737 -#, c-format -msgid "Volume \"%s\" not on device %s.\n" -msgstr "Le volume \"%s\" n'est pas dans le device %s.\n" +#: src/lib/signal.c:342 +msgid "File size limit exceeded" +msgstr "" -#: src/stored/mount.c:444 -#, c-format -msgid "" -"Director wanted Volume \"%s\".\n" -" Current Volume \"%s\" not acceptable because:\n" -" %s" +#: src/lib/signal.c:343 +msgid "Virtual alarm clock" msgstr "" -"Le director voulait utiliser le volume \"%s\".\n" -" Le volume courant \"%s\" n'est pas utilisable car :\n" -" %s" -#: src/stored/mount.c:603 -#, c-format -msgid "Ready to append to end of Volume \"%s\" part=%d size=%s\n" +#: src/lib/signal.c:344 +msgid "Profiling alarm clock" msgstr "" -"Prêt à ajouter des données à la fin du volume \"%s\" part=%d size=%s\n" -"\n" -#: src/stored/mount.c:607 -#, fuzzy, c-format -msgid "" -"Bacula cannot write on DVD Volume \"%s\" because: The sizes do not match! " -"Volume=%s Catalog=%s\n" +#: src/lib/signal.c:345 +msgid "Window size change" msgstr "" -"Impossible d'écrire sur le volume \"%s\" car :\n" -"Les tailles ne correspondent pas. Volume=%s Catalogue=%s\n" -#: src/stored/mount.c:621 -#, c-format -msgid "Ready to append to end of Volume \"%s\" at file=%d.\n" -msgstr "Prêt à ajouter des données à la fin du volume \"%s\" file=%d.\n" +#: src/lib/signal.c:346 +msgid "I/O now possible" +msgstr "" -#: src/stored/mount.c:624 -#, fuzzy, c-format -msgid "" -"For Volume \"%s\":\n" -"The number of files mismatch! Volume=%u Catalog=%u\n" -"Correcting Catalog\n" +#: src/lib/signal.c:348 +msgid "Power failure restart" msgstr "" -"Impossible d'écrire sur le volume \"%s\" \n" -"car le nombre de fichiers ne correspond pas. Volume=%u Catalogue=%u\n" -#: src/stored/mount.c:631 src/stored/mount.c:659 -#, fuzzy -msgid "Error updating Catalog\n" -msgstr "Impossible d'ouvrir le fichier de données %s.\n" +#: src/lib/signal.c:351 +msgid "No runnable lwp" +msgstr "" -#: src/stored/mount.c:636 -#, fuzzy, c-format -msgid "" -"Bacula cannot write on tape Volume \"%s\" because:\n" -"The number of files mismatch! Volume=%u Catalog=%u\n" +#: src/lib/signal.c:354 +msgid "SIGLWP special signal used by thread library" msgstr "" -"Impossible d'écrire sur le volume \"%s\" \n" -"car le nombre de fichiers ne correspond pas. Volume=%u Catalogue=%u\n" -#: src/stored/mount.c:647 -#, fuzzy, c-format -msgid "Ready to append to end of Volume \"%s\" size=%s\n" +#: src/lib/signal.c:357 +msgid "Checkpoint Freeze" msgstr "" -"Prêt à ajouter des données à la fin du volume \"%s\" part=%d size=%s\n" -"\n" -#: src/stored/mount.c:651 -#, fuzzy, c-format -msgid "" -"For Volume \"%s\":\n" -"The sizes do not match! Volume=%s Catalog=%s\n" -"Correcting Catalog\n" +#: src/lib/signal.c:360 +msgid "Checkpoint Thaw" msgstr "" -"Impossible d'écrire sur le volume \"%s\" car :\n" -"Les tailles ne correspondent pas. Volume=%s Catalogue=%s\n" -#: src/stored/mount.c:664 -#, fuzzy, c-format -msgid "" -"Bacula cannot write on disk Volume \"%s\" because: The sizes do not match! " -"Volume=%s Catalog=%s\n" +#: src/lib/signal.c:363 +msgid "Thread Cancellation" msgstr "" -"Impossible d'écrire sur le volume \"%s\" car :\n" -"Les tailles ne correspondent pas. Volume=%s Catalogue=%s\n" -#: src/stored/mount.c:727 -#, c-format -msgid "Labeled new Volume \"%s\" on device %s.\n" -msgstr "Le nouveau volume \"%s\" a été labélisé sur le device %s.\n" +#: src/lib/signal.c:366 +msgid "Resource Lost (e.g. record-lock lost)" +msgstr "" -#: src/stored/mount.c:732 -#, fuzzy, c-format -msgid "Device %s not configured to autolabel Volumes.\n" +#: src/lib/berrno.c:51 +msgid "Child exited normally." msgstr "" -"Attention, le device %s n'est pas configuré pour labéliser automatiquement " -"les volumes.\n" -#: src/stored/mount.c:751 -#, c-format -msgid "Marking Volume \"%s\" in Error in Catalog.\n" -msgstr "Le volume \"%s\" est marqué en Erreur dans le catalogue.\n" +#: src/lib/berrno.c:58 +msgid "Unknown error during program execvp" +msgstr "" -#: src/stored/mount.c:768 +#: src/lib/berrno.c:61 #, c-format -msgid "" -"Autochanger Volume \"%s\" not found in slot %d.\n" -" Setting InChanger to zero in catalog.\n" +msgid "Child exited with code %d" msgstr "" -#: src/stored/mount.c:787 -msgid "Hey!!!!! WroteVol non-zero !!!!!\n" -msgstr "" +#: src/lib/berrno.c:69 +#, c-format +msgid "Child died from signal %d: %s" +msgstr "Le processus fils est mort par le signal %d : %s" -#: src/stored/mount.c:834 -#, fuzzy, c-format -msgid "" -"Invalid tape position on volume \"%s\" on device %s. Expected %d, got %d\n" +#: src/lib/berrno.c:75 +msgid "Invalid errno. No error message possible." msgstr "" -"Fin du volume \"%s\" à %u:%u sur le device %s. Ecriture de %u octets, eu " -"%d.\n" -#: src/stored/mount.c:875 src/stored/btape.c:3122 -#, c-format -msgid "Cannot open Dev=%s, Vol=%s\n" +#: src/lib/rwlock.c:295 +msgid "rwl_writeunlock called too many times.\n" msgstr "" -#: src/stored/mac.c:81 -msgid "Read and write devices not properly initialized.\n" +#: src/lib/rwlock.c:300 +msgid "rwl_writeunlock by non-owner.\n" msgstr "" -#: src/stored/mac.c:87 +#: src/lib/mem_pool.c:101 #, c-format -msgid "No Volume names found for %s.\n" +msgid "MemPool index %d larger than max %d\n" msgstr "" -#: src/stored/pythonsd.c:160 src/filed/pythonfd.c:142 +#: src/lib/mem_pool.c:119 src/lib/mem_pool.c:139 src/lib/mem_pool.c:175 +#: src/lib/mem_pool.c:248 src/lib/mem_pool.c:268 src/lib/mem_pool.c:303 +#: src/lib/mem_pool.c:614 #, c-format -msgid "Cannot delete attribute %s" +msgid "Out of memory requesting %d bytes\n" +msgstr "Plus de mémoire à l'allocation de %d octets\n" + +#: src/lib/mem_pool.c:156 +msgid "obuf is NULL\n" msgstr "" -#: src/stored/pythonsd.c:193 src/filed/pythonfd.c:160 src/filed/pythonfd.c:176 +#: src/lib/bnet_server.c:103 #, c-format -msgid "Cannot find attribute %s" +msgid "Cannot open stream socket. ERR=%s. Current %s All %s\n" msgstr "" -#: src/stored/pythonsd.c:208 -msgid "Error in ParseTuple\n" -msgstr "" +#: src/lib/bnet_server.c:116 +#, c-format +msgid "Cannot set SO_REUSEADDR on socket: %s\n" +msgstr "Impossible de positionner l'option SO_REUSEADDR sur la socket : %s\n" -#: src/stored/pythonsd.c:224 -msgid "Parse tuple error in job_write\n" -msgstr "" +#: src/lib/bnet_server.c:125 +#, c-format +msgid "Cannot bind port %d: ERR=%s: Retrying ...\n" +msgstr "Impossible de s'attacher au port %d : ERR=%s : Réessaie...\n" -#: src/stored/pythonsd.c:261 +#: src/lib/bnet_server.c:133 src/lib/bnet_server.c:141 #, c-format -msgid "Error in Python method %s\n" -msgstr "" +msgid "Cannot bind port %d: ERR=%s.\n" +msgstr "Impossible de s'attacher au port %d : ERR=%s.\n" -#: src/stored/spool.c:83 +#: src/lib/bnet_server.c:148 #, fuzzy -msgid "Spooling statistics:\n" -msgstr "Spooling des données...\n" +msgid "No addr/port found to listen on.\n" +msgstr "Aucun volume trouvé pour la restauration.\n" -#: src/stored/spool.c:86 +#: src/lib/bnet_server.c:154 #, c-format -msgid "" -"Data spooling: %u active jobs, %s bytes; %u total jobs, %s max bytes/job.\n" -msgstr "" +msgid "Could not init client queue: ERR=%s\n" +msgstr "Impossible d'initialiser la queue cliente : ERR=%s\n" -#: src/stored/spool.c:94 +#: src/lib/bnet_server.c:173 #, c-format -msgid "Attr spooling: %u active jobs, %s bytes; %u total jobs, %s max bytes.\n" -msgstr "" +msgid "Error in select: %s\n" +msgstr "Erreur sur le select : %s\n" -#: src/stored/spool.c:112 -msgid "Spooling data ...\n" -msgstr "Spooling des données...\n" +#: src/lib/bnet_server.c:196 +#, c-format +msgid "Connection from %s:%d refused by hosts.access\n" +msgstr "Connexion depuis %s:%d refusée par hosts.access\n" + +#: src/lib/bnet_server.c:224 +msgid "Could not create client BSOCK.\n" +msgstr "Impossible de créer la structure BSOCK cliente.\n" -#: src/stored/spool.c:138 +#: src/lib/bnet_server.c:231 #, c-format -msgid "Bad return from despool WroteVol=%d\n" -msgstr "" +msgid "Could not add job to client queue: ERR=%s\n" +msgstr "Impossible d'ajouter le job à la queue cliente : ERR=%s\n" + +#: src/lib/bnet_server.c:248 +#, c-format +msgid "Could not destroy client queue: ERR=%s\n" +msgstr "Impossible de détruire la queue cliente : ERR=%s\n" -#: src/stored/spool.c:171 +#: src/lib/runscript.c:224 #, c-format -msgid "Open data spool file %s failed: ERR=%s\n" -msgstr "Erreur pendant l'ouverture fichier de spool %s. ERR=%s\n" +msgid "%s: run %s \"%s\"\n" +msgstr "%s: exécution %s de la commande \"%s\"\n" -#: src/stored/spool.c:225 -msgid "Despooling zero bytes. Your disk is probably FULL!\n" -msgstr "" +#: src/lib/runscript.c:233 +#, c-format +msgid "Runscript: %s could not execute. ERR=%s\n" +msgstr "Runscript : impossible d'exécuter %s. ERR=%s\n" -#: src/stored/spool.c:234 +#: src/lib/runscript.c:242 #, c-format -msgid "Committing spooled data to Volume \"%s\". Despooling %s bytes ...\n" -msgstr "" -"Transfert des données spoolées sur le Volume \"%s\". Transfert de %s " -"octets...\n" +msgid "%s: %s\n" +msgstr "%s: %s\n" -#: src/stored/spool.c:239 +#: src/lib/runscript.c:247 #, c-format -msgid "Writing spooled data to Volume. Despooling %s bytes ...\n" +msgid "Runscript: %s returned non-zero status=%d. ERR=%s\n" msgstr "" -"Écriture des données spoolées sur le Volume. Transfert de %s octets...\n" +"Runscript : %s s'est terminé avec un statut différent de 0 statut=%d. ERR=" +"%s\n" -#: src/stored/spool.c:339 -#, fuzzy, c-format -msgid "" -"Despooling elapsed time = %02d:%02d:%02d, Transfer rate = %s Bytes/second\n" -msgstr "" -"Temps du transfert des données spoolées = %02d:%02d:%02d, Taux de transfert " -"= %s o/s\n" +#: src/lib/runscript.c:285 src/dird/dird_conf.c:752 +msgid " --> RunScript\n" +msgstr " --> RunScript\n" -#: src/stored/spool.c:348 src/stored/spool.c:549 src/stored/spool.c:595 +#: src/lib/runscript.c:286 src/dird/dird_conf.c:753 #, c-format -msgid "Ftruncate spool file failed: ERR=%s\n" -msgstr "" +msgid " --> Command=%s\n" +msgstr " --> Command=%s\n" -#: src/stored/spool.c:407 +#: src/lib/runscript.c:287 src/dird/dird_conf.c:754 #, c-format -msgid "Spool header read error. ERR=%s\n" -msgstr "" +msgid " --> Target=%s\n" +msgstr " --> Target=%s\n" -#: src/stored/spool.c:410 +#: src/lib/runscript.c:288 src/dird/dird_conf.c:755 #, c-format -msgid "Spool read error. Wanted %u bytes, got %d\n" -msgstr "" +msgid " --> RunOnSuccess=%u\n" +msgstr " --> RunOnSuccess=%u\n" -#: src/stored/spool.c:411 +#: src/lib/runscript.c:289 src/dird/dird_conf.c:756 #, c-format -msgid "Spool header read error. Wanted %u bytes, got %d\n" -msgstr "" +msgid " --> RunOnFailure=%u\n" +msgstr " --> RunOnFailure=%u\n" -#: src/stored/spool.c:418 src/stored/spool.c:419 +#: src/lib/runscript.c:290 src/dird/dird_conf.c:757 #, c-format -msgid "Spool block too big. Max %u bytes, got %u\n" +msgid " --> FailJobOnError=%u\n" msgstr "" -#: src/stored/spool.c:425 src/stored/spool.c:426 +#: src/lib/runscript.c:291 src/dird/dird_conf.c:758 #, c-format -msgid "Spool data read error. Wanted %u bytes, got %d\n" -msgstr "" - -#: src/stored/spool.c:480 -#, fuzzy, c-format -msgid "" -"User specified Job spool size reached: JobSpoolSize=%s MaxJobSpoolSize=%s\n" -msgstr "Taille du spool spécifiée par l'utlisateur atteinte.\n" - -#: src/stored/spool.c:485 -#, fuzzy, c-format -msgid "" -"User specified Device spool size reached: DevSpoolSize=%s MaxDevSpoolSize=" -"%s\n" -msgstr "Taille du spool spécifiée par l'utlisateur atteinte.\n" +msgid " --> RunWhen=%u\n" +msgstr " --> RunWhen=%u\n" -#: src/stored/spool.c:492 -msgid "Bad return from despool in write_block.\n" +#: src/lib/cram-md5.c:97 src/lib/cram-md5.c:125 +msgid "1999 Authorization failed.\n" msgstr "" -#: src/stored/spool.c:500 -msgid "Spooling data again ...\n" -msgstr "Reprise du spool des données...\n" +#: src/lib/smartall.c:133 src/lib/smartall.c:244 src/lib/smartall.c:259 +msgid "Out of memory\n" +msgstr "Plus de mémoire\n" -#: src/stored/spool.c:532 -#, c-format -msgid "Error writing header to spool file. ERR=%s\n" +#: src/lib/smartall.c:138 +msgid "Too much memory used." msgstr "" -#: src/stored/spool.c:537 +#: src/lib/smartall.c:168 #, c-format -msgid "" -"Error writing header to spool file. Disk probably full. Attempting recovery. " -"Wanted to write=%d got=%d\n" -msgstr "" - -#: src/stored/spool.c:555 src/stored/spool.c:601 -msgid "Fatal despooling error." +msgid "Attempt to free NULL called from %s:%d\n" msgstr "" -#: src/stored/spool.c:563 -msgid "Retrying after header spooling error failed.\n" +#: src/lib/smartall.c:182 +#, c-format +msgid "double free from %s:%d\n" msgstr "" -#: src/stored/spool.c:579 +#: src/lib/smartall.c:190 #, c-format -msgid "Error writing data to spool file. ERR=%s\n" +msgid "qp->qnext->qprev != qp called from %s:%d\n" msgstr "" -"Erreur pendant l'écriture des données vers le fichier de spool. ERR=%s\n" -#: src/stored/spool.c:612 -msgid "Retrying after data spooling error failed.\n" +#: src/lib/smartall.c:194 +#, c-format +msgid "qp->qprev->qnext != qp called from %s:%d\n" msgstr "" -#: src/stored/spool.c:682 -msgid "Network error on BlastAttributes.\n" +#: src/lib/smartall.c:203 +#, c-format +msgid "Overrun buffer: len=%d addr=%p allocated: %s:%d called from %s:%d\n" msgstr "" -#: src/stored/spool.c:706 src/stored/spool.c:730 +#: src/lib/smartall.c:281 #, c-format -msgid "Fseek on attributes file failed: ERR=%s\n" +msgid "sm_realloc size: %d\n" msgstr "" -# Impossible d'ouvrir le fichier de spool des attributs : ERR=%s -#: src/stored/spool.c:718 +#: src/lib/smartall.c:319 #, fuzzy, c-format -msgid "Truncate on attributes file failed: ERR=%s\n" -msgstr "Impossible d'ouvrir le fichier de spool des attributs %s : ERR=%s\n" +msgid "sm_realloc %d at %p from %s:%d\n" +msgstr "Attendait %d en lecture, eu %d de %s:%s:%d\n" -#: src/stored/spool.c:742 +#: src/lib/smartall.c:379 #, c-format -msgid "Sending spooled attrs to the Director. Despooling %s bytes ...\n" +msgid "" +"\n" +"Orphaned buffers exist. Dump terminated following\n" +" discovery of bad links in chain of orphaned buffers.\n" +" Buffer address with bad links: %p\n" msgstr "" -"Transfert des attributs spoolés au Director. Transfert de %s octets...\n" - -# Impossible d'ouvrir le fichier de spool des attributs : ERR=%s -#: src/stored/spool.c:768 -#, c-format -msgid "fopen attr spool file %s failed: ERR=%s\n" -msgstr "Impossible d'ouvrir le fichier de spool des attributs %s : ERR=%s\n" - -#: src/stored/lock.c:405 -#, fuzzy, c-format -msgid "pthread_cond_wait failure. ERR=%s\n" -msgstr "Erreur sur l'ouverture du périphérique. ERR=%s\n" - -#: src/stored/lock.c:504 -#, fuzzy -msgid "unknown blocked code" -msgstr "source inconnue" -#: src/stored/stored_conf.c:241 +#: src/lib/smartall.c:424 #, c-format -msgid "Expected a Device Type keyword, got: %s" +msgid "Damaged buffer found. Called from %s:%d\n" msgstr "" -#: src/stored/stored_conf.c:255 +#: src/lib/smartall.c:457 #, c-format msgid "" -"Maximum Block Size configured value %u is greater than allowed maximum: %u" +"\n" +"Damaged buffers found at %s:%d\n" msgstr "" -#: src/stored/stored_conf.c:269 -#, c-format -msgid "Warning: no \"%s\" resource (%d) defined.\n" +#: src/lib/smartall.c:460 +msgid " discovery of bad prev link.\n" msgstr "" -#: src/stored/stored_conf.c:272 -#, c-format -msgid "dump_resource type=%d\n" +#: src/lib/smartall.c:463 +msgid " discovery of bad next link.\n" msgstr "" -#: src/stored/stored_conf.c:388 -#, c-format -msgid "Warning: unknown resource type %d\n" +#: src/lib/smartall.c:466 +msgid " discovery of data overrun.\n" msgstr "" -#: src/stored/stored_conf.c:555 src/stored/stored_conf.c:645 -#: src/stored/stored_conf.c:680 src/wx-console/console_conf.c:164 -#: src/wx-console/console_conf.c:239 src/wx-console/console_conf.c:284 -#: src/wx-console/console_conf.c:311 src/console/console_conf.c:157 -#: src/console/console_conf.c:233 src/console/console_conf.c:278 -#: src/console/console_conf.c:305 src/filed/filed_conf.c:333 -#: src/filed/filed_conf.c:398 src/filed/filed_conf.c:428 -#: src/qt-console/bat_conf.cpp:161 src/qt-console/bat_conf.cpp:239 -#: src/qt-console/bat_conf.cpp:287 src/qt-console/bat_conf.cpp:317 +#: src/lib/smartall.c:469 +msgid " NULL pointer.\n" +msgstr " pointeur NULL.\n" + +#: src/lib/smartall.c:475 #, c-format -msgid "Unknown resource type %d\n" +msgid " Buffer address: %p\n" +msgstr " Adresse du buffer : %p\n" + +#: src/lib/smartall.c:482 +#, c-format +msgid "Damaged buffer: %6u bytes allocated at line %d of %s %s\n" msgstr "" -#: src/stored/stored_conf.c:584 +#: src/dird/job.c:50 #, c-format -msgid "\"%s\" item is required in \"%s\" resource, but not found.\n" +msgid "Could not init job queue: ERR=%s\n" msgstr "" -#: src/stored/stored_conf.c:590 +#: src/dird/job.c:82 #, c-format -msgid "Too many items in \"%s\" resource\n" -msgstr "Trop d'éléments dans la ressource \"%s\"\n" +msgid "Could not add job queue: ERR=%s\n" +msgstr "" -#: src/stored/stored_conf.c:624 +#: src/dird/job.c:121 src/dird/ua_output.c:714 src/dird/xua_output.c:869 +#: src/tools/cats_test.c:363 #, c-format -msgid "Cannot find AutoChanger resource %s\n" -msgstr "Impossible de trouver la ressource AutoChanger %s\n" +msgid "Could not open database \"%s\".\n" +msgstr "Impossible d'ouvrir la base de données \"%s\".\n" -#: src/stored/stored_conf.c:640 -#, fuzzy, c-format -msgid "Unable to init lock: ERR=%s\n" -msgstr "Impossible d'initialiser le muxtex : ERR=%s\n" +#: src/dird/job.c:135 src/dird/job.c:139 src/dird/job.c:145 +#: src/dird/ua_status.c:367 src/dird/ua_dotcmds.c:831 src/dird/ua_cmds.c:836 +#: src/dird/ua_cmds.c:1589 +msgid "unknown source" +msgstr "source inconnue" -#: src/stored/stored_conf.c:698 -#, c-format -msgid "" -"Attempt to define second \"%s\" resource named \"%s\" is not permitted.\n" -msgstr "" +#: src/dird/job.c:175 src/dird/job.c:397 src/dird/job.c:399 src/dird/job.c:599 +#: src/dird/job.c:601 src/dird/job.c:1303 src/dird/job.c:1345 +#: src/dird/job.c:1355 +#, fuzzy +msgid "Job resource" +msgstr "Pool à partir de sa définition" -#: src/stored/dev.c:127 -#, c-format -msgid "Unable to stat device %s: ERR=%s\n" -msgstr "" +#: src/dird/job.c:177 src/dird/job.c:1038 src/dird/job.c:1300 +#: src/dird/job.c:1347 src/dird/job.c:1363 src/dird/vbackup.c:77 +#: src/dird/mac.c:208 src/dird/mac.c:209 src/dird/backup.c:91 +msgid "Pool resource" +msgstr "Ressource Pool" -#: src/stored/dev.c:145 +#: src/dird/job.c:222 src/dird/job.c:339 #, c-format -msgid "" -"%s is an unknown device type. Must be tape or directory\n" -" or have RequiresMount=yes for DVD. st_mode=%x\n" +msgid "Unimplemented job type: %d\n" msgstr "" -#: src/stored/dev.c:155 -msgid "DVD support is now deprecated\n" +#: src/dird/job.c:263 +msgid "Job canceled because max start delay time exceeded.\n" msgstr "" -#: src/stored/dev.c:231 -#, c-format -msgid "Unable to stat mount point %s: ERR=%s\n" +#: src/dird/job.c:268 +#, fuzzy +msgid "Job canceled because max run sched time exceeded.\n" msgstr "" +"Temps d'exécution maximum depuis la planification atteind. Abandon du job.\n" -#: src/stored/dev.c:236 -msgid "" -"Mount and unmount commands must defined for a device which requires mount.\n" -msgstr "" +#: src/dird/job.c:378 +msgid "Failed to connect to File daemon.\n" +msgstr "Impossible de se connecter au client.\n" -#: src/stored/dev.c:247 -#, c-format -msgid "Min block size > max on device %s\n" -msgstr "" +#: src/dird/job.c:412 +#, fuzzy +msgid "Failed to select Storage daemon.\n" +msgstr "Impossible de se connecter au Storage daemon.\n" -#: src/stored/dev.c:251 -#, c-format -msgid "Block size %u on device %s is too large, using default %u\n" -msgstr "" -"La taille de bloc %u sur le Device %s est trop grande, utilisation de la " -"valeur par défaut %u\n" +#: src/dird/job.c:417 src/dird/ua_dotcmds.c:837 src/dird/ua_cmds.c:842 +#: src/dird/ua_cmds.c:1600 src/dird/msgchan.c:69 +msgid "Failed to connect to Storage daemon.\n" +msgstr "Impossible de se connecter au Storage daemon.\n" -#: src/stored/dev.c:256 +#: src/dird/job.c:512 +#, fuzzy +msgid "canceled" +msgstr "Annulé" + +#: src/dird/job.c:526 #, fuzzy, c-format -msgid "Max block size %u not multiple of device %s block size=%d.\n" -msgstr "" -"La taille du buffer réseau %d n'est pas un multiple de la taille de bloc du " -"lecteur.\n" +msgid "JobId %s, Job %s marked to be %s.\n" +msgstr "JobId %s, Job %s marqué pour être annulé.\n" -#: src/stored/dev.c:260 -#, c-format -msgid "Max Vol Size < 8 * Max Block Size for device %s\n" -msgstr "" +#: src/dird/job.c:661 +msgid "Max wait time exceeded. Job canceled.\n" +msgstr "Temps d'attente maximum dépassé. Abandon du job.\n" -#: src/stored/dev.c:276 src/stored/dev.c:282 -#, c-format -msgid "Unable to init cond variable: ERR=%s\n" -msgstr "" +#: src/dird/job.c:666 +msgid "Max run time exceeded. Job canceled.\n" +msgstr "Temps d'exécution maximum atteind. Abandon du job.\n" -#: src/stored/dev.c:288 -#, fuzzy, c-format -msgid "Unable to init spool mutex: ERR=%s\n" -msgstr "Impossible d'initialiser le muxtex : ERR=%s\n" +#: src/dird/job.c:671 +#, fuzzy +msgid "Max run sched time exceeded. Job canceled.\n" +msgstr "Temps d'exécution maximum atteind. Abandon du job.\n" -#: src/stored/dev.c:294 +#: src/dird/job.c:793 #, fuzzy, c-format -msgid "Unable to init acquire mutex: ERR=%s\n" -msgstr "Impossible d'initialiser le muxtex : ERR=%s\n" +msgid "Pool \"%s\" not in database. ERR=%s" +msgstr "Pool %s introuvable en base. %s" -#: src/stored/dev.c:300 +#: src/dird/job.c:797 #, fuzzy, c-format -msgid "Unable to init read acquire mutex: ERR=%s\n" -msgstr "Impossible d'initialiser le muxtex : ERR=%s\n" - -#: src/stored/dev.c:416 -msgid "Illegal mode given to open dev.\n" -msgstr "" +msgid "Created database record for Pool \"%s\".\n" +msgstr "Pas d'enregistrement trouvé en base pour : %s\n" -#: src/stored/dev.c:551 +#: src/dird/job.c:879 src/dird/job.c:923 #, c-format -msgid "Could not open file device %s. No Volume name given.\n" +msgid "JobId %d already running. Duplicate job not allowed.\n" msgstr "" -#: src/stored/dev.c:574 +#: src/dird/job.c:911 #, c-format -msgid "Could not open: %s, ERR=%s\n" +msgid "Cancelling duplicate JobId=%d.\n" msgstr "" -#: src/stored/dev.c:639 -#, c-format -msgid "No tape loaded or drive offline on %s.\n" +#: src/dird/job.c:946 src/dird/job.c:947 +msgid "Run NextPool override" msgstr "" -#: src/stored/dev.c:649 -#, c-format -msgid "Rewind error on %s. ERR=%s.\n" -msgstr "" +#: src/dird/job.c:948 +#, fuzzy +msgid "Storage from Run NextPool override" +msgstr "Sélectionnez le Pool" -#: src/stored/dev.c:659 src/stored/dev.c:737 src/stored/dev.c:878 -#: src/stored/dev.c:1469 -#, c-format -msgid "lseek error on %s. ERR=%s.\n" -msgstr "erreur de déplacement (lseek) sur %s : ERR=%s\n" +#: src/dird/job.c:952 src/dird/job.c:953 src/dird/job.c:1357 +#, fuzzy +msgid "Job's NextPool resource" +msgstr "Sélectionnez le Pool" + +#: src/dird/job.c:954 +#, fuzzy +msgid "Storage from Job's NextPool resource" +msgstr "Sélectionnez le Pool" + +#: src/dird/job.c:962 src/dird/job.c:963 +#, fuzzy +msgid "Job Pool's NextPool resource" +msgstr "Sélectionnez le Pool" -#: src/stored/dev.c:708 -#, fuzzy, c-format -msgid "Bad call to eod. Device %s not open\n" -msgstr "Le Device %s n'est pas ouvert.\n" +#: src/dird/job.c:964 +#, fuzzy +msgid "Storage from Pool's NextPool resource" +msgstr "Sélectionnez le Pool" -#: src/stored/dev.c:775 -#, c-format -msgid "ioctl MTEOM error on %s. ERR=%s.\n" +#: src/dird/job.c:995 +msgid "Run Pool override" msgstr "" -#: src/stored/dev.c:785 src/stored/dev.c:919 -#, c-format -msgid "ioctl MTIOCGET error on %s. ERR=%s.\n" +#: src/dird/job.c:1006 +msgid "Run FullPool override" msgstr "" -#: src/stored/dev.c:865 -msgid "Bad device call. Device not open\n" +#: src/dird/job.c:1008 +msgid "Job FullPool override" msgstr "" -#: src/stored/dev.c:877 -#, c-format -msgid "Seek error: ERR=%s\n" +#: src/dird/job.c:1017 +msgid "Run IncPool override" msgstr "" -#: src/stored/dev.c:914 -msgid " Bacula status:" +#: src/dird/job.c:1019 +msgid "Job IncPool override" msgstr "" -#: src/stored/dev.c:915 src/stored/dev.c:998 src/stored/dev.c:1000 -#, c-format -msgid " file=%d block=%d\n" -msgstr " fichier=%d bloc=%d\n" +#: src/dird/job.c:1028 +msgid "Run DiffPool override" +msgstr "" -#: src/stored/dev.c:923 -msgid " Device status:" +#: src/dird/job.c:1030 +msgid "Job DiffPool override" msgstr "" -#: src/stored/dev.c:1022 -msgid "Bad call to load_dev. Device not open\n" +#: src/dird/job.c:1097 +msgid "FileSet MD5 digest not found.\n" msgstr "" -#: src/stored/dev.c:1033 src/stored/dev.c:1046 +#: src/dird/job.c:1102 #, c-format -msgid "ioctl MTLOAD error on %s. ERR=%s.\n" +msgid "Could not create FileSet \"%s\" record. ERR=%s\n" msgstr "" -#: src/stored/dev.c:1077 +#: src/dird/job.c:1144 #, c-format -msgid "ioctl MTOFFL error on %s. ERR=%s.\n" +msgid "Error updating job record. %s" msgstr "" -#: src/stored/dev.c:1118 -msgid "Bad call to fsf. Device not open\n" +#: src/dird/job.c:1290 +msgid "Run pool override" msgstr "" -#: src/stored/dev.c:1129 src/stored/dev.c:1256 -#, c-format -msgid "Device %s at End of Tape.\n" +#: src/dird/job.c:1295 +msgid "Run storage override" msgstr "" -#: src/stored/dev.c:1160 src/stored/dev.c:1236 -#, c-format -msgid "ioctl MTFSF error on %s. ERR=%s.\n" -msgstr "" +#: src/dird/job.c:1366 +#, fuzzy +msgid "Client resource" +msgstr "Pas de ressource « Restore Job » trouvée !\n" -#: src/stored/dev.c:1207 src/stored/btape.c:1977 -#, c-format -msgid "read error on %s. ERR=%s.\n" -msgstr "" +#: src/dird/job.c:1422 src/dird/ua_run.c:392 +msgid "No storage specified.\n" +msgstr "Pas de storage sélectionné.\n" -#: src/stored/dev.c:1285 -msgid "Bad call to bsf. Device not open\n" -msgstr "" +#: src/dird/job.c:1583 +#, fuzzy, c-format +msgid "Could not start clone job: \"%s\".\n" +msgstr "Impossible d'ouvrir la base de données \"%s\".\n" -#: src/stored/dev.c:1291 +#: src/dird/job.c:1586 #, c-format -msgid "Device %s cannot BSF because it is not a tape.\n" +msgid "Clone JobId %d started.\n" msgstr "" -#: src/stored/dev.c:1308 -#, c-format -msgid "ioctl MTBSF error on %s. ERR=%s.\n" -msgstr "" +#: src/dird/vbackup.c:64 src/dird/mac.c:97 +msgid "Could not get or create a Pool record.\n" +msgstr "Impossible de récupérer ou de créer un Pool dans le catalogue.\n" -#: src/stored/dev.c:1327 -msgid "Bad call to fsr. Device not open\n" +#: src/dird/vbackup.c:121 +#, fuzzy, c-format +msgid "Start Virtual Backup JobId %s, Job=%s\n" +msgstr "Démarrage du backup JobId %s, Job=%s\n" + +#: src/dird/vbackup.c:125 +msgid "" +"This Job is not an Accurate backup so is not equivalent to a Full backup.\n" msgstr "" -#: src/stored/dev.c:1337 +#: src/dird/vbackup.c:141 src/dird/ua_dotcmds.c:749 src/dird/ua_restore.c:778 +#: src/dird/ua_restore.c:821 #, c-format -msgid "ioctl MTFSR not permitted on %s.\n" -msgstr "" +msgid "Unable to get Job record for JobId=%s: ERR=%s\n" +msgstr "Impossible de récupérer le Job du JobId=%s : ERR=%s\n" -#: src/stored/dev.c:1365 +#: src/dird/vbackup.c:145 src/dird/ua_restore.c:782 #, c-format -msgid "ioctl MTFSR %d error on %s. ERR=%s.\n" +msgid "Selecting jobs to build the Full state at %s\n" msgstr "" -#: src/stored/dev.c:1383 -msgid "Bad call to bsr_dev. Device not open\n" -msgstr "" +#: src/dird/vbackup.c:171 +#, fuzzy +msgid "No valid Jobs found from user selection.\n" +msgstr "Pas de job trouvé pour : %s.\n" -#: src/stored/dev.c:1393 -#, c-format -msgid "ioctl MTBSR not permitted on %s.\n" -msgstr "" +#: src/dird/vbackup.c:175 +#, fuzzy, c-format +msgid "Using user supplied JobIds=%s\n" +msgstr "Migration utilisant JobId=%s Job=%s\n" -#: src/stored/dev.c:1407 -#, c-format -msgid "ioctl MTBSR error on %s. ERR=%s.\n" +#: src/dird/vbackup.c:194 +msgid "No previous Full found in list, using Differential level\n" msgstr "" -#: src/stored/dev.c:1458 -msgid "Bad call to reposition. Device not open\n" +#: src/dird/vbackup.c:199 +msgid "No previous Full found in list, using Incremental level\n" msgstr "" -#: src/stored/dev.c:1537 -msgid "Bad call to weof_dev. Device not open\n" -msgstr "" +#: src/dird/vbackup.c:212 +#, fuzzy +msgid "No previous Jobs found.\n" +msgstr "Aucun Job trouvé pour la migration.\n" -#: src/stored/dev.c:1547 -msgid "Attempt to WEOF on non-appendable Volume\n" -msgstr "" +#: src/dird/vbackup.c:235 +#, fuzzy, c-format +msgid "Error getting Job record for previous Job: ERR=%s" +msgstr "Impossible de récupérer le Job du JobId=%s : ERR=%s\n" -#: src/stored/dev.c:1565 -#, c-format -msgid "ioctl MTWEOF error on %s. ERR=%s.\n" -msgstr "" +#: src/dird/vbackup.c:241 src/dird/mac.c:112 +#, fuzzy +msgid "Could not get or create the FileSet record.\n" +msgstr "Impossible de créer la structure BSOCK cliente.\n" -#: src/stored/dev.c:1664 -#, c-format -msgid "unknown func code %d" -msgstr "" +#: src/dird/vbackup.c:361 src/dird/admin.c:78 src/dird/mac.c:688 +#: src/dird/backup.c:749 +#, fuzzy, c-format +msgid "Error getting Job record for Job report: ERR=%s" +msgstr "Impossible de récupérer le Job du JobId=%s : ERR=%s\n" + +#: src/dird/vbackup.c:368 src/dird/backup.c:756 +#, fuzzy, c-format +msgid "Error getting Client record for Job report: ERR=%s" +msgstr "Impossible de mettre à jour les informations du Volume : ERR=%s" -#: src/stored/dev.c:1670 +#: src/dird/vbackup.c:374 src/dird/mac.c:718 src/dird/backup.c:762 #, c-format -msgid "I/O function \"%s\" not supported on this device.\n" +msgid "Error getting Media record for Volume \"%s\": ERR=%s" msgstr "" -#: src/stored/dev.c:1844 +#: src/dird/vbackup.c:411 src/dird/restore.c:614 src/dird/admin.c:98 +#: src/dird/backup.c:802 #, c-format -msgid "Unable to truncate device %s. ERR=%s\n" +msgid "Inappropriate term code: %c\n" msgstr "" -#: src/stored/dev.c:1861 +#: src/dird/vbackup.c:448 #, fuzzy, c-format -msgid "Unable to stat device %s. ERR=%s\n" -msgstr "3910 Impossible d'ouvrir le device %s : ERR=%s\n" - -#: src/stored/dev.c:1875 -#, c-format -msgid "Device %s doesn't support ftruncate(). Recreating file %s.\n" +msgid "" +"%s %s %s (%s):\n" +" Build OS: %s %s %s\n" +" JobId: %d\n" +" Job: %s\n" +" Backup Level: Virtual Full\n" +" Client: \"%s\" %s\n" +" FileSet: \"%s\" %s\n" +" Pool: \"%s\" (From %s)\n" +" Catalog: \"%s\" (From %s)\n" +" Storage: \"%s\" (From %s)\n" +" Scheduled time: %s\n" +" Start time: %s\n" +" End time: %s\n" +" Elapsed time: %s\n" +" Priority: %d\n" +" SD Files Written: %s\n" +" SD Bytes Written: %s (%sB)\n" +" Rate: %.1f KB/s\n" +" Volume name(s): %s\n" +" Volume Session Id: %d\n" +" Volume Session Time: %d\n" +" Last Volume Bytes: %s (%sB)\n" +" SD Errors: %d\n" +" SD termination status: %s\n" +" Termination: %s\n" +"\n" msgstr "" +"Bacula %s %s (%s): %s\n" +" Build OS : %s %s %s\n" +" JobId : %d\n" +" Job : %s\n" +" Niveau de backup : %s%s\n" +" Client : \"%s\" %s\n" +" FileSet : \"%s\" %s\n" +" Pool : \"%s\" (Depuis %s)\n" +" Storage : \"%s\" (Depuis %s)\n" +" Date prévue : %s\n" +" Date de début : %s\n" +" Date de fin : %s\n" +" Temps écoulé : %s\n" +" Priorité : %d\n" +" Fichiers écrits FD : %s\n" +" Fichiers écrits SD : %s\n" +" Octets écrits FD : %s (%so)\n" +" Octets écrits SD : %s (%so)\n" +" Débit : %.1f Ko/s\n" +" Compression logicielle : %s\n" +" Nom des Volumes : %s\n" +" Volume Session Id : %d\n" +" Volume Session date : %d\n" +" Taille du volume : %s (%so)\n" +" Erreurs FD non fatales : %d\n" +" Erreurs du SD : %d\n" +" Statut de fin du FD : %s\n" +" Statut de fin du SD : %s\n" +" Statut de fin : %s\n" -#: src/stored/dev.c:1887 -#, fuzzy, c-format -msgid "Could not reopen: %s, ERR=%s\n" -msgstr "Impossible d'ouvrir %s : ERR=%s\n" +#: src/dird/ua_output.c:57 src/dird/ua_output.c:81 src/dird/xua_output.c:56 +#: src/dird/xua_output.c:80 +msgid "ON or OFF keyword missing.\n" +msgstr "Mot clef ON ou OFF manquant.\n" + +#: src/dird/ua_output.c:101 src/dird/xua_output.c:100 +#, fuzzy +msgid "Disabled Jobs:\n" +msgstr "est bloqué" + +#: src/dird/ua_output.c:107 src/dird/xua_output.c:106 +#, fuzzy +msgid "No disabled Jobs.\n" +msgstr "Pas de job programmé.\n" + +#: src/dird/ua_output.c:151 +#, fuzzy +msgid "disabled" +msgstr "est bloqué" + +#: src/dird/ua_output.c:199 src/dird/xua_output.c:204 +msgid "Keywords for the show command are:\n" +msgstr "" -#: src/stored/dev.c:2010 src/stored/dev.c:2081 +#: src/dird/ua_output.c:205 src/dird/xua_output.c:211 #, c-format -msgid "Device %s cannot be %smounted. ERR=%s\n" -msgstr "Le Device %s ne peut pas être %smounted. ERR=%s\n" +msgid "%s resource %s not found.\n" +msgstr "%s ressource %s introuvable.\n" -#: src/stored/dev.c:2481 -#, fuzzy, c-format -msgid "Unable to set eotmodel on device %s: ERR=%s\n" -msgstr "3910 Impossible d'ouvrir le device %s : ERR=%s\n" +#: src/dird/ua_output.c:208 src/dird/xua_output.c:215 +#, c-format +msgid "Resource %s not found\n" +msgstr "Ressource %s introuvable\n" -#: src/stored/bscan.c:118 -#, fuzzy, c-format -msgid "" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: bscan [ options ] \n" -" -b bootstrap specify a bootstrap file\n" -" -c specify configuration file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -m update media info in database\n" -" -D specify the driver database name (default NULL)\n" -" -n specify the database name (default bacula)\n" -" -u specify database user name (default bacula)\n" -" -P specify database password (default none)\n" -" -h specify database host (default NULL)\n" -" -t specify database port (default 0)\n" -" -p proceed inspite of I/O errors\n" -" -r list records\n" -" -s synchronize or store in database\n" -" -S show scan progress periodically\n" -" -v verbose\n" -" -V specify Volume names (separated by |)\n" -" -w specify working directory (default from conf file)\n" -" -? print this message\n" -"\n" +#: src/dird/ua_output.c:278 src/dird/xua_output.c:356 +msgid "Hey! DB is NULL\n" msgstr "" -"Copyright (C) 2000-2005 Kern Sibbald.\n" -"\n" -"Version : %s (%s)\n" -"\n" -"Usage : dird [-f -s] [-c config_file] [-d debug_level] [config_file]\n" -" -c utilise fich comme fichier de configuration\n" -" -dnn positionne le niveau de debug à nn\n" -" -f reste en avant-plan (pour debugger)\n" -" -g groupid\n" -" -r lance maintenant\n" -" -s pas de signaux\n" -" -t test - lit seulement le fichier de configuration\n" -" -u userid\n" -" -v affiche les messages utilisateurs\n" -" -? affiche ce message.\n" -"\n" -#: src/stored/bscan.c:278 +#: src/dird/ua_output.c:435 src/dird/xua_output.c:590 +#, c-format +msgid "Jobid %d used %d Volume(s): %s\n" +msgstr "JobId %d a utilisé %d volume(s) : %s\n" + +#: src/dird/ua_output.c:454 src/dird/xua_output.c:609 +msgid "No Pool specified.\n" +msgstr "Pas de Pool spécifié.\n" + +#: src/dird/ua_output.c:465 src/dird/ua_select.c:531 src/dird/xua_output.c:620 +#: src/dird/ua_update.c:424 #, c-format -msgid "Working Directory: %s not found. Cannot continue.\n" +msgid "Error obtaining pool ids. ERR=%s\n" +msgstr "Erreur pendant lors de la récupération du pool. ERR=%s\n" + +#: src/dird/ua_output.c:475 src/dird/xua_output.c:630 +#, c-format +msgid "Pool: %s\n" +msgstr "Pool : %s\n" + +#: src/dird/ua_output.c:491 src/dird/xua_output.c:646 +msgid "Ignoring invalid value for days. Max is 50.\n" msgstr "" -#: src/stored/bscan.c:282 +#: src/dird/ua_output.c:513 src/dird/xua_output.c:668 #, c-format -msgid "Working Directory: %s is not a directory. Cannot continue.\n" +msgid "Unknown list keyword: %s\n" msgstr "" -#: src/stored/bscan.c:296 src/stored/bscan.c:372 +#: src/dird/ua_output.c:538 src/dird/xua_output.c:693 +#, c-format +msgid "%s is not a job name.\n" +msgstr "%s n'est pas un nom de job.\n" + +#: src/dird/ua_output.c:552 src/dird/xua_output.c:707 #, fuzzy, c-format -msgid "First Volume Size = %s\n" -msgstr "Le nombre courant de fichier sur le Volume est : %u\n" +msgid "Could not find Pool for Job %s\n" +msgstr "Impossible d'ouvrir le device %s\n" -#: src/stored/bscan.c:302 src/tools/bvfs_test.c:215 src/tools/bbatch.c:201 -#: src/tools/bbatch.c:250 src/tools/ing_test.c:191 -msgid "Could not init Bacula database\n" -msgstr "" +#: src/dird/ua_output.c:565 src/dird/xua_output.c:720 +#, fuzzy, c-format +msgid "Could not find next Volume for Job %s (Pool=%s, Level=%s).\n" +msgstr "Impossible de trouver le prochain Volume pour le Job %s (%s, %s).\n" -#: src/stored/bscan.c:309 src/tools/bvfs_test.c:224 src/tools/bbatch.c:257 -#: src/tools/ing_test.c:200 -#, c-format -msgid "Using Database: %s, User: %s\n" -msgstr "" +#: src/dird/ua_output.c:569 src/dird/xua_output.c:724 +#, fuzzy, c-format +msgid "" +"The next Volume to be used by Job \"%s\" (Pool=%s, Level=%s) will be %s\n" +msgstr "Le prochain Volume utilisé par le Job \"%s\" (%s, %s) sera %s\n" -#: src/stored/bscan.c:343 +#: src/dird/ua_output.c:582 src/dird/xua_output.c:737 #, c-format -msgid "Create JobMedia for Job %s\n" -msgstr "" +msgid "Could not find next Volume for Job %s.\n" +msgstr "Impossible de trouver le prochain volume pour le Job %s.\n" -#: src/stored/bscan.c:353 +#: src/dird/ua_output.c:727 src/dird/xua_output.c:882 #, c-format -msgid "Could not create JobMedia record for Volume=%s Job=%s\n" -msgstr "" +msgid "Pool %s not in database. %s" +msgstr "Pool %s introuvable en base. %s" -#: src/stored/bscan.c:420 +#: src/dird/ua_output.c:735 src/dird/xua_output.c:890 #, c-format -msgid "done: %d%%\n" -msgstr "" +msgid "Pool %s created in database.\n" +msgstr "Pool %s créé en base.\n" -#: src/stored/bscan.c:444 -msgid "Volume is prelabeled. This tape cannot be scanned.\n" +#: src/dird/ua_output.c:788 src/dird/xua_output.c:943 +msgid "You have no messages.\n" +msgstr "Vous n'avez pas de messages.\n" + +#: src/dird/ua_output.c:868 src/dird/xua_output.c:1023 +msgid "Message too long to display.\n" msgstr "" -#: src/stored/bscan.c:456 +#: src/dird/jobq.c:62 #, c-format -msgid "Pool record for %s found in DB.\n" +msgid "pthread_attr_init: ERR=%s\n" msgstr "" -#: src/stored/bscan.c:460 +#: src/dird/jobq.c:71 #, c-format -msgid "VOL_LABEL: Pool record not found for Pool: %s\n" +msgid "pthread_mutex_init: ERR=%s\n" msgstr "" -#: src/stored/bscan.c:466 +#: src/dird/jobq.c:77 #, c-format -msgid "VOL_LABEL: PoolType mismatch. DB=%s Vol=%s\n" +msgid "pthread_cond_init: ERR=%s\n" msgstr "" -#: src/stored/bscan.c:470 +#: src/dird/jobq.c:119 #, c-format -msgid "Pool type \"%s\" is OK.\n" +msgid "pthread_cond_broadcast: ERR=%s\n" msgstr "" -#: src/stored/bscan.c:480 +#: src/dird/jobq.c:127 #, c-format -msgid "Media record for %s found in DB.\n" +msgid "pthread_cond_wait: ERR=%s\n" msgstr "" -#: src/stored/bscan.c:487 +#: src/dird/jobq.c:168 #, c-format -msgid "VOL_LABEL: Media record not found for Volume: %s\n" +msgid "Job %s waiting %d seconds for scheduled start time.\n" msgstr "" -#: src/stored/bscan.c:494 +#: src/dird/jobq.c:230 #, c-format -msgid "VOL_LABEL: MediaType mismatch. DB=%s Vol=%s\n" +msgid "pthread_thread_create: ERR=%s\n" msgstr "" -#: src/stored/bscan.c:498 +#: src/dird/jobq.c:340 #, c-format -msgid "Media type \"%s\" is OK.\n" +msgid "pthread_cond_signal: ERR=%s\n" msgstr "" -#: src/stored/bscan.c:508 +#: src/dird/jobq.c:351 #, c-format -msgid "VOL_LABEL: OK for Volume: %s\n" +msgid "pthread_create: ERR=%s\n" msgstr "" -#: src/stored/bscan.c:515 +#: src/dird/jobq.c:635 #, c-format -msgid "%d \"errors\" ignored before first Start of Session record.\n" +msgid "Rescheduled Job %s at %s to re-run in %d seconds (%s).\n" msgstr "" -#: src/stored/bscan.c:526 -#, c-format -msgid "SOS_LABEL: Found Job record for JobId: %d\n" +#: src/dird/jobq.c:694 src/dird/jobq.c:699 +msgid "previous Job" msgstr "" -#: src/stored/bscan.c:531 +#: src/dird/jobq.c:736 #, c-format -msgid "SOS_LABEL: Job record not found for JobId: %d\n" +msgid "" +"Job canceled. Attempt to read and write same device.\n" +" Read storage \"%s\" (From %s) -- Write storage \"%s\" (From %s)\n" msgstr "" -#: src/stored/bscan.c:571 +#: src/dird/ua_select.c:42 #, c-format -msgid "SOS_LABEL: VolSessId mismatch for JobId=%u. DB=%d Vol=%d\n" +msgid "The current %s retention period is: %s\n" +msgstr "La période de rétention courante %s est : %s\n" + +#: src/dird/ua_select.c:47 +msgid "Continue? (yes/mod/no): " +msgstr "Continuer ? (oui/mod/non) : " + +#: src/dird/ua_select.c:50 src/dird/ua_run.c:614 +msgid "mod" +msgstr "mod" + +#: src/dird/ua_select.c:51 +msgid "Enter new retention period: " +msgstr "Saisissez une nouvelle période de rétention : " + +#: src/dird/ua_select.c:55 +msgid "Invalid period.\n" +msgstr "Période invalide.\n" + +#: src/dird/ua_select.c:131 src/dird/ua_run.c:555 +msgid "You have the following choices:\n" +msgstr "Vous avez les choix suivants :\n" + +#: src/dird/ua_select.c:154 +msgid "The defined Storage resources are:\n" +msgstr "Les ressources de Stockage définies sont :\n" + +#: src/dird/ua_select.c:166 src/dird/ua_dotcmds.c:944 src/dird/ua_run.c:619 +#: src/dird/ua_cmds.c:1093 +msgid "Storage" +msgstr "Stockage" + +#: src/dird/ua_select.c:166 +msgid "Select Storage resource" +msgstr "Sélectionnez la ressource de Stockage" + +#: src/dird/ua_select.c:181 src/dird/ua_restore.c:1296 +msgid "The defined FileSet resources are:\n" +msgstr "Les FileSet définis sont :\n" + +#: src/dird/ua_select.c:189 src/dird/ua_restore.c:1300 src/dird/ua_run.c:621 +msgid "FileSet" +msgstr "FileSet" + +#: src/dird/ua_select.c:189 src/dird/ua_restore.c:1300 +msgid "Select FileSet resource" +msgstr "Sélectionnez le FileSet" + +#: src/dird/ua_select.c:219 src/dird/ua_cmds.c:2062 +msgid "Could not find a Catalog resource\n" +msgstr "Impossible de trouver un Catalogue\n" + +#: src/dird/ua_select.c:222 +msgid "You must specify a \"use \" command before continuing.\n" msgstr "" -#: src/stored/bscan.c:577 +#: src/dird/ua_select.c:228 +msgid "The defined Catalog resources are:\n" +msgstr "Les Catalogues définis sont :\n" + +#: src/dird/ua_select.c:236 +msgid "Catalog" +msgstr "Catalogue" + +#: src/dird/ua_select.c:236 +msgid "Select Catalog resource" +msgstr "Sélectionnez le Catalogue" + +#: src/dird/ua_select.c:254 src/dird/ua_select.c:280 +msgid "The defined Job resources are:\n" +msgstr "Les Job définis sont :\n" + +#: src/dird/ua_select.c:265 src/dird/ua_select.c:288 src/dird/ua_select.c:329 +#: src/dird/ua_select.c:1341 src/dird/ua_run.c:620 src/dird/dird_conf.c:675 +#: src/dird/ua_prune.c:598 +msgid "Job" +msgstr "Job" + +#: src/dird/ua_select.c:265 src/dird/ua_select.c:288 +msgid "Select Job resource" +msgstr "Sélectionnez le Job" + +#: src/dird/ua_select.c:307 +#, fuzzy, c-format +msgid "Error: Restore Job resource \"%s\" does not exist.\n" +msgstr "Erreur : le Pool \"%s\" n'existe pas.\n" + +#: src/dird/ua_select.c:321 +msgid "The defined Restore Job resources are:\n" +msgstr "Les Job de restauration sont :\n" + +#: src/dird/ua_select.c:329 +msgid "Select Restore Job" +msgstr "Sélectionnez le Job de restauration" + +#: src/dird/ua_select.c:346 +msgid "The defined Client resources are:\n" +msgstr "Les clients définis sont :\n" + +#: src/dird/ua_select.c:354 src/dird/ua_select.c:463 src/dird/ua_dotcmds.c:945 +#: src/dird/ua_run.c:625 src/dird/ua_cmds.c:1094 +msgid "Client" +msgstr "Client" + +#: src/dird/ua_select.c:354 +msgid "Select Client (File daemon) resource" +msgstr "Sélectionnez le client (File daemon)" + +#: src/dird/ua_select.c:381 #, c-format -msgid "SOS_LABEL: VolSessTime mismatch for JobId=%u. DB=%d Vol=%d\n" -msgstr "" +msgid "Error: Client resource %s does not exist.\n" +msgstr "Erreur : le client %s n'est pas définie.\n" -#: src/stored/bscan.c:583 +#: src/dird/ua_select.c:406 #, c-format -msgid "SOS_LABEL: PoolId mismatch for JobId=%u. DB=%d Vol=%d\n" -msgstr "" +msgid "Could not find Client %s: ERR=%s" +msgstr "Impossible de trouver le client %s : ERR=%s" -#: src/stored/bscan.c:601 src/stored/bscan.c:1161 +#: src/dird/ua_select.c:416 src/dird/ua_select.c:470 #, c-format -msgid "Could not find SessId=%d SessTime=%d for EOS record.\n" -msgstr "" +msgid "Could not find Client \"%s\": ERR=%s" +msgstr "Impossible de trouver le client \"%s\" : ERR=%s" -#: src/stored/bscan.c:647 +#: src/dird/ua_select.c:445 #, c-format -msgid "Could not update job record. ERR=%s\n" +msgid "Error obtaining client ids. ERR=%s\n" +msgstr "Erreur pendant l'obtention de l'identifiant du Client. ERR=%s\n" + +#: src/dird/ua_select.c:449 +msgid "No clients defined. You must run a job before using this command.\n" msgstr "" +"Pas de client défini. Vous devez lancer une sauvegarde avant d'utiliser " +"cette commande.\n" -#: src/stored/bscan.c:658 +#: src/dird/ua_select.c:453 +msgid "Defined Clients:\n" +msgstr "Clients définis :\n" + +#: src/dird/ua_select.c:463 +msgid "Select the Client" +msgstr "Sélectionnez le client" + +#: src/dird/ua_select.c:496 src/dird/ua_select.c:520 src/dird/ua_select.c:565 #, c-format -msgid "End of all Volumes. VolFiles=%u VolBlocks=%u VolBytes=%s\n" +msgid "Could not find Pool \"%s\": ERR=%s" +msgstr "Impossible de trouver le Pool \"%s\" : ERR=%s" + +#: src/dird/ua_select.c:535 +msgid "No pools defined. Use the \"create\" command to create one.\n" msgstr "" +"Pas de Pool défini. Utilisez la commande « create » pour en créer un.\n" -#: src/stored/bscan.c:670 -#, c-format -msgid "Could not find Job for SessId=%d SessTime=%d record.\n" +#: src/dird/ua_select.c:539 +msgid "Defined Pools:\n" +msgstr "Pools définis :\n" + +#: src/dird/ua_select.c:541 src/dird/ua_select.c:561 src/dird/ua_update.c:353 +#: src/baconfig.h:76 +msgid "*None*" msgstr "" -#: src/stored/bscan.c:701 +#: src/dird/ua_select.c:552 src/dird/ua_select.c:665 src/dird/ua_run.c:633 +#: src/dird/ua_update.c:604 +msgid "Pool" +msgstr "Pool" + +#: src/dird/ua_select.c:552 +msgid "Select the Pool" +msgstr "Sélectionnez le Pool" + +#: src/dird/ua_select.c:590 #, c-format -msgid "%s file records. At file:blk=%s:%s bytes=%s\n" -msgstr "" +msgid "No access to Pool \"%s\"\n" +msgstr "Pas d'accès au Pool \"%s\"\n" + +#: src/dird/ua_select.c:622 +#, fuzzy +msgid "Enter *MediaId or Volume name: " +msgstr "Saisissez le MediaId ou le nom du Volume : " -#: src/stored/bscan.c:766 +#: src/dird/ua_select.c:657 +msgid "The defined Pool resources are:\n" +msgstr "Les Pools définis sont :\n" + +#: src/dird/ua_select.c:665 +msgid "Select Pool resource" +msgstr "Sélectionnez le Pool" + +#: src/dird/ua_select.c:689 src/dird/ua_restore.c:553 #, c-format -msgid "Got MD5 record: %s\n" -msgstr "" +msgid "Error: Pool resource \"%s\" does not exist.\n" +msgstr "Erreur : le Pool \"%s\" n'existe pas.\n" + +#: src/dird/ua_select.c:700 +msgid "Enter the JobId to select: " +msgstr "Entrez le JobId à sélectionner : " -#: src/stored/bscan.c:774 +#: src/dird/ua_select.c:738 #, c-format -msgid "Got SHA1 record: %s\n" -msgstr "" +msgid "Could not find Job \"%s\": ERR=%s" +msgstr "Impossible de trouver le Job \"%s\" : ERR=%s" -#: src/stored/bscan.c:782 +#: src/dird/ua_select.c:829 src/dird/ua_select.c:925 #, c-format -msgid "Got SHA256 record: %s\n" -msgstr "" +msgid "Automatically selected %s: %s\n" +msgstr "Sélection automatique %s : %s\n" -#: src/stored/bscan.c:790 +#: src/dird/ua_select.c:840 src/dird/ua_select.c:936 #, c-format -msgid "Got SHA512 record: %s\n" +msgid "" +"Your request has multiple choices for \"%s\". Selection is not possible in " +"batch mode.\n" msgstr "" -#: src/stored/bscan.c:798 src/stored/bscan.c:805 -msgid "Got signed digest record\n" -msgstr "" +#: src/dird/ua_select.c:858 src/dird/ua_select.c:918 +#, c-format +msgid "Selection list for \"%s\" is empty!\n" +msgstr "La sélection pour \"%s\" est vide !\n" -#: src/stored/bscan.c:811 +#: src/dird/ua_select.c:864 #, c-format -msgid "Got Prog Names Stream: %s\n" -msgstr "" +msgid "Automatically selected: %s\n" +msgstr "Sélection automatique : %s\n" -#: src/stored/bscan.c:817 -msgid "Got Prog Data Stream record.\n" -msgstr "" +#: src/dird/ua_select.c:876 +msgid "Selection aborted, nothing done.\n" +msgstr "Sélection annulée, rien de fait.\n" -#: src/stored/bscan.c:862 +#: src/dird/ua_select.c:881 src/dird/ua_select.c:969 #, c-format -msgid "Unknown stream type!!! stream=%d len=%i\n" -msgstr "" +msgid "Please enter a number between 1 and %d\n" +msgstr "Merci de saisir un nombre entre 1 et %d\n" -#: src/stored/bscan.c:930 -#, c-format -msgid "Could not create File Attributes record. ERR=%s\n" +#: src/dird/ua_select.c:1020 +msgid "Storage name given twice.\n" msgstr "" -#: src/stored/bscan.c:936 +#: src/dird/ua_select.c:1037 #, c-format -msgid "Created File record: %s\n" -msgstr "" +msgid "Expecting jobid=nn command, got: %s\n" +msgstr "Attendait l'option jobid=nn, pas : %s\n" -#: src/stored/bscan.c:981 +#: src/dird/ua_select.c:1041 #, c-format -msgid "Could not create media record. ERR=%s\n" -msgstr "" +msgid "JobId %s is not running.\n" +msgstr "JobId %s n'est pas en cours.\n" -#: src/stored/bscan.c:985 src/stored/bscan.c:1006 +#: src/dird/ua_select.c:1051 #, c-format -msgid "Could not update media record. ERR=%s\n" -msgstr "" +msgid "Expecting job=xxx, got: %s.\n" +msgstr "Attendait l'option job=xxx, pas : %s\n" -#: src/stored/bscan.c:989 +#: src/dird/ua_select.c:1055 #, c-format -msgid "Created Media record for Volume: %s\n" -msgstr "" +msgid "Job \"%s\" is not running.\n" +msgstr "Job \"%s\" n'est pas en cours.\n" -#: src/stored/bscan.c:1010 +#: src/dird/ua_select.c:1063 #, c-format -msgid "Updated Media record at end of Volume: %s\n" -msgstr "" +msgid "Expecting ujobid=xxx, got: %s.\n" +msgstr "Attendait l'option ujobid=xxx, pas : %s\n" -#: src/stored/bscan.c:1027 +#: src/dird/ua_select.c:1084 #, c-format -msgid "Could not create pool record. ERR=%s\n" +msgid "Storage resource \"%s\": not found\n" +msgstr "Storage resource \"%s\" : non trouvé\n" + +#: src/dird/ua_select.c:1116 +msgid "Enter autochanger drive[0]: " +msgstr "Saisissez le numéro du lecteur de l'autochanger [0] : " + +#: src/dird/ua_select.c:1137 +msgid "Enter autochanger slot: " +msgstr "Saisissez le slot de l'autochanger [0] : " + +#: src/dird/ua_select.c:1167 +msgid "Media Types defined in conf file:\n" msgstr "" -#: src/stored/bscan.c:1031 -#, c-format -msgid "Created Pool record for Pool: %s\n" +#: src/dird/ua_select.c:1173 +msgid "Media Type" msgstr "" -#: src/stored/bscan.c:1050 +#: src/dird/ua_select.c:1173 +msgid "Select the Media Type" +msgstr "Choisissez le type de Media" + +#: src/dird/ua_select.c:1213 +msgid "None of your jobs are running.\n" +msgstr "Aucun de vos jobs ne sont en cours.\n" + +#: src/dird/ua_select.c:1251 #, fuzzy, c-format -msgid "Could not get Client record. ERR=%s\n" -msgstr "Impossible d'initialiser la queue cliente : ERR=%s\n" +msgid "Unauthorized command from this console for JobId=%d.\n" +msgstr "Commande interdite depuis cette console.\n" -#: src/stored/bscan.c:1060 -#, c-format -msgid "Created Client record for Client: %s\n" -msgstr "" +#: src/dird/ua_select.c:1257 +#, fuzzy, c-format +msgid "Warning Job JobId=%d is not running. Continuing anyway...\n" +msgstr "Attention le Job %s n'est pas en cours. Continuons quand même...\n" + +#: src/dird/ua_select.c:1280 src/dird/ua_select.c:1350 +#, fuzzy, c-format +msgid "Confirm %s of %d Job%s (yes/no): " +msgstr "Confirmez l'annulation (oui/non) : " -#: src/stored/bscan.c:1077 +#: src/dird/ua_select.c:1293 src/dird/ua_select.c:1307 #, c-format -msgid "Fileset \"%s\" already exists.\n" -msgstr "" +msgid "Warning Job %s is not running. Continuing anyway ...\n" +msgstr "Attention le Job %s n'est pas en cours. Continuons quand même...\n" + +#: src/dird/ua_select.c:1329 +#, fuzzy +msgid "Select Job(s):\n" +msgstr "Sélectionnez le Job :\n" -#: src/stored/bscan.c:1081 +#: src/dird/ua_select.c:1335 #, c-format -msgid "Could not create FileSet record \"%s\". ERR=%s\n" -msgstr "" +msgid "JobId=%s Job=%s" +msgstr "JobId=%s Job=%s" -#: src/stored/bscan.c:1086 +#: src/dird/ua_select.c:1339 +#, fuzzy, c-format +msgid "Choose Job list to %s" +msgstr "Sélectionnez le Job à annuler" + +#: src/dird/ua_select.c:1359 src/dird/ua_select.c:1366 src/dird/ua_cmds.c:804 +#: src/dird/ua_cmds.c:1199 #, c-format -msgid "Created FileSet record \"%s\"\n" -msgstr "" +msgid "Job \"%s\" not found.\n" +msgstr "Job \"%s\" non trouvé.\n" -#: src/stored/bscan.c:1133 +#: src/dird/run_conf.c:205 #, c-format -msgid "Could not create JobId record. ERR=%s\n" -msgstr "" +msgid "Expected an equals, got: %s" +msgstr "Attendait un égale, pas : %s" -#: src/stored/bscan.c:1139 +#: src/dird/run_conf.c:218 src/dird/run_conf.c:230 src/dird/run_conf.c:330 #, c-format -msgid "Could not update job start record. ERR=%s\n" -msgstr "" +msgid "Expect a YES or NO, got: %s" +msgstr "Attendait Oui ou Non, eu : %s" -#: src/stored/bscan.c:1142 +#: src/dird/run_conf.c:245 #, c-format -msgid "Created new JobId=%u record for original JobId=%u\n" +msgid "Job level field: %s not found in run record" msgstr "" -#: src/stored/bscan.c:1195 +#: src/dird/run_conf.c:265 #, c-format -msgid "Could not update JobId=%u record. ERR=%s\n" +msgid "Could not find specified Pool Resource: %s" msgstr "" -#: src/stored/bscan.c:1200 +#: src/dird/run_conf.c:293 #, c-format -msgid "Updated Job termination record for JobId=%u Level=%s TermStat=%c\n" +msgid "Could not find specified Storage Resource: %s" msgstr "" -#: src/stored/bscan.c:1225 +#: src/dird/run_conf.c:305 #, c-format -msgid "Job Termination code: %d" +msgid "Could not find specified Messages Resource: %s" msgstr "" -#: src/stored/bscan.c:1230 +#: src/dird/run_conf.c:334 #, c-format -msgid "" -"%s\n" -"JobId: %d\n" -"Job: %s\n" -"FileSet: %s\n" -"Backup Level: %s\n" -"Client: %s\n" -"Start time: %s\n" -"End time: %s\n" -"Files Written: %s\n" -"Bytes Written: %s\n" -"Volume Session Id: %d\n" -"Volume Session Time: %d\n" -"Last Volume Bytes: %s\n" -"Termination: %s\n" -"\n" +msgid "Expected a keyword name, got: %s" msgstr "" -#: src/stored/bscan.c:1288 -#, c-format -msgid "Could not create JobMedia record. ERR=%s\n" +#: src/dird/run_conf.c:373 +msgid "Day number out of range (1-31)" msgstr "" -#: src/stored/bscan.c:1292 -#, c-format -msgid "Created JobMedia record JobId %d, MediaId %d\n" +#: src/dird/run_conf.c:390 src/dird/run_conf.c:552 +msgid "Week number out of range (0-53)" msgstr "" -#: src/stored/bscan.c:1308 +#: src/dird/run_conf.c:406 #, c-format -msgid "Could not find SessId=%d SessTime=%d for MD5/SHA1 record.\n" +msgid "Job type field: %s in run record not found" msgstr "" -#: src/stored/bscan.c:1322 +#: src/dird/run_conf.c:413 #, c-format -msgid "Could not add MD5/SHA1 to File record. ERR=%s\n" +msgid "Unexpected token: %d:%s" msgstr "" -#: src/stored/bscan.c:1327 -msgid "Updated MD5/SHA1 record\n" +#: src/dird/run_conf.c:457 +msgid "Time must be preceded by keyword AT." msgstr "" -#: src/stored/job.c:234 -#, fuzzy, c-format -msgid "FD connect failed: Job name not found: %s\n" -msgstr "Job non trouvé : %s\n" - -#: src/stored/job.c:244 -#, c-format -msgid "Hey!!!! JobId %u Job %s already authenticated.\n" +#: src/dird/run_conf.c:466 +msgid "Time logic error.\n" msgstr "" -#: src/stored/job.c:261 -msgid "Unable to authenticate File daemon\n" +#: src/dird/run_conf.c:481 src/dird/run_conf.c:500 +msgid "Bad time specification." msgstr "" -#: src/stored/job.c:390 -msgid "In free_jcr(), but still attached to device!!!!\n" +#: src/dird/run_conf.c:521 +msgid "Range logic error.\n" msgstr "" -#: src/stored/btape.c:185 -#, c-format -msgid "" -"\n" -"\n" -"!!!! Warning large disk addressing disabled. boffset_t=%d should be 8 or " -"more !!!!!\n" -"\n" -"\n" +#: src/dird/run_conf.c:530 +msgid "Bad day range specification." msgstr "" -#: src/stored/btape.c:192 -#, c-format -msgid "32 bit printf/scanf problem. i=%d x32=%u y32=%u\n" +#: src/dird/run_conf.c:577 +msgid "Invalid month, week or position day range" msgstr "" -#: src/stored/btape.c:201 -msgid "64 bit printf/scanf problem. i=%d x64=%" +#: src/dird/run_conf.c:592 +msgid "Invalid month, weekday or position range" msgstr "" -#: src/stored/btape.c:206 -#, c-format -msgid "Tape block granularity is %d bytes.\n" +#: src/dird/run_conf.c:651 +msgid "Unexpected run state\n" msgstr "" -#: src/stored/btape.c:279 -msgid "No archive name specified.\n" -msgstr "" +#: src/dird/restore.c:132 src/dird/msgchan.c:508 +#, c-format +msgid "Could not open bootstrap file %s: ERR=%s\n" +msgstr "Impossible d'ouvrir le fichier bootstrap %s : ERR=%s\n" -#: src/stored/btape.c:283 -msgid "Improper number of arguments specified.\n" -msgstr "" +#: src/dird/restore.c:180 src/dird/restore.c:271 +#, fuzzy, c-format +msgid "Could not get storage resource '%s'.\n" +msgstr "Impossible de trouver la ressource Storage \"%s\"\n" -#: src/stored/btape.c:297 -msgid "btape does not work with DVD storage.\n" -msgstr "" +#: src/dird/restore.c:307 +#, fuzzy, c-format +msgid "Could not acquire read storage lock for \"%s\"" +msgstr "Impossible de trouver la ressource Storage \"%s\"\n" -#: src/stored/btape.c:302 -msgid "btape only works with tape storage.\n" +#: src/dird/restore.c:407 src/dird/verify.c:275 src/dird/backup.c:512 +msgid "The File daemon does not support SDCallsClient.\n" msgstr "" -#: src/stored/btape.c:383 -#, c-format -msgid "Total Volume bytes=%sB. Total Write rate = %sB/s\n" +#: src/dird/restore.c:525 +msgid "" +"Cannot restore without a bootstrap file.\n" +"You probably ran a restore job directly. All restore jobs must\n" +"be run using the restore command.\n" msgstr "" -#: src/stored/btape.c:409 +#: src/dird/restore.c:533 #, c-format -msgid "Volume bytes=%sB. Write rate = %sB/s\n" -msgstr "" +msgid "Start Restore Job %s\n" +msgstr "Démarrage du Job de restauration %s\n" -#: src/stored/btape.c:477 -#, c-format -msgid "open device %s: OK\n" -msgstr "" +#: src/dird/restore.c:584 +msgid "Restore OK -- warning file count mismatch" +msgstr "Restauration Ok -- attention le nombre de fichier ne correspond pas" -#: src/stored/btape.c:500 -msgid "Enter Volume Name: " -msgstr "Saisissez un nom de Volume : " +#: src/dird/restore.c:586 +msgid "Restore OK" +msgstr "Restauration OK" -#: src/stored/btape.c:507 -#, c-format -msgid "Device open failed. ERR=%s\n" -msgstr "Erreur sur l'ouverture du périphérique. ERR=%s\n" +#: src/dird/restore.c:590 +#, fuzzy +msgid "Restore OK -- with warnings" +msgstr "Backup OK -- avec des erreurs" -#: src/stored/btape.c:512 -#, c-format -msgid "Wrote Volume label for volume \"%s\".\n" -msgstr "" +#: src/dird/restore.c:594 +msgid "*** Restore Error ***" +msgstr "*** Restauration en erreur ***" -#: src/stored/btape.c:526 -msgid "Volume has no label.\n" -msgstr "Le Volume n'a pas de label.\n" +#: src/dird/restore.c:604 +msgid "Restore Canceled" +msgstr "Restauration annulée" -#: src/stored/btape.c:529 -msgid "Volume label read correctly.\n" +#: src/dird/restore.c:631 +#, fuzzy, c-format +msgid "" +"%s %s %s (%s):\n" +" Build OS: %s %s %s\n" +" JobId: %d\n" +" Job: %s\n" +" Restore Client: %s\n" +" Start time: %s\n" +" End time: %s\n" +" Files Expected: %s\n" +" Files Restored: %s\n" +" Bytes Restored: %s\n" +" Rate: %.1f KB/s\n" +" FD Errors: %d\n" +" FD termination status: %s\n" +" SD termination status: %s\n" +" Termination: %s\n" +"\n" msgstr "" +"%s %s %s (%s): %s\n" +" Build OS: %s %s %s\n" +" JobId : %d\n" +" Job : %s\n" +" Client : %s\n" +" Début : %s\n" +" Fin : %s\n" +" Fichiers attendus : %s\n" +" Fichiers restaurés : %s\n" +" Octets restaurés : %s\n" +" Débit : %.1f Ko/s\n" +" Erreurs du FD : %d\n" +" Statut de fin du FD : %s\n" +" Statut de fin du SD : %s\n" +" Etat : %s\n" -#: src/stored/btape.c:532 +#: src/dird/admin.c:53 #, c-format -msgid "I/O error on device: ERR=%s" -msgstr "" - -#: src/stored/btape.c:535 -msgid "Volume name error\n" +msgid "Start Admin JobId %d, Job=%s\n" msgstr "" -#: src/stored/btape.c:538 -#, c-format -msgid "Error creating label. ERR=%s" -msgstr "" +#: src/dird/admin.c:86 +msgid "Admin OK" +msgstr "Admin OK" -#: src/stored/btape.c:541 -msgid "Volume version error.\n" -msgstr "" +#: src/dird/admin.c:90 +msgid "*** Admin Error ***" +msgstr "*** Admin en Erreur ***" -#: src/stored/btape.c:544 -msgid "Bad Volume label type.\n" -msgstr "" +#: src/dird/admin.c:94 +msgid "Admin Canceled" +msgstr "Admin Annulé" -#: src/stored/btape.c:547 -msgid "Unknown error.\n" -msgstr "" +#: src/dird/admin.c:106 src/lib/status.h:171 src/lib/status.h:182 +#: src/lib/status.h:196 src/lib/status.h:200 src/lib/status.h:204 +msgid "Bacula " +msgstr "Bacula " -#: src/stored/btape.c:565 -#, c-format -msgid "Bad status from load. ERR=%s\n" -msgstr "" +#: src/dird/ua_status.c:170 +msgid "Status available for:\n" +msgstr "Statut disponible pour :\n" -#: src/stored/btape.c:567 -#, c-format -msgid "Loaded %s\n" -msgstr "" +#: src/dird/ua_status.c:177 +msgid "Select daemon type for status" +msgstr "Saisissez le composant à afficher" -#: src/stored/btape.c:576 src/stored/btape.c:1139 src/stored/btape.c:1212 -#: src/stored/btape.c:1292 src/stored/btape.c:1563 -#, c-format -msgid "Bad status from rewind. ERR=%s\n" -msgstr "" +#: src/dird/ua_status.c:297 +#, fuzzy, c-format +msgid "Daemon started %s. Jobs: run=%d, running=%d mode=%d,%d\n" +msgstr "Démon démarré depuis %s, %d jobs lancés depuis cette date.\n" -#: src/stored/btape.c:579 src/stored/btape.c:1571 -#, c-format -msgid "Rewound %s\n" -msgstr "" +#: src/dird/ua_status.c:353 +#, fuzzy, c-format +msgid "No authorization for Storage \"%s\"\n" +msgstr "Pas d'enregistrement trouvé en base pour : %s\n" -#: src/stored/btape.c:605 src/stored/btape.c:1575 -#, c-format -msgid "Bad status from weof. ERR=%s\n" +#: src/dird/ua_status.c:363 +msgid "Restricted Client or Job does not permit access to Storage daemons\n" msgstr "" -#: src/stored/btape.c:609 +#: src/dird/ua_status.c:370 src/dird/ua_dotcmds.c:834 src/dird/ua_cmds.c:839 #, c-format -msgid "Wrote 1 EOF to %s\n" -msgstr "" +msgid "Connecting to Storage daemon %s at %s:%d\n" +msgstr "Connexion au Storage Daemon %s (%s:%d)\n" -#: src/stored/btape.c:612 +#: src/dird/ua_status.c:373 #, c-format -msgid "Wrote %d EOFs to %s\n" +msgid "" +"\n" +"Failed to connect to Storage daemon %s.\n" +"====\n" msgstr "" +"\n" +"Impossible de se connecter au Storage Daemon %s.\n" +"====\n" -#: src/stored/btape.c:630 -msgid "Moved to end of medium.\n" -msgstr "" +#: src/dird/ua_status.c:405 src/dird/ua_cmds.c:1186 src/dird/ua_cmds.c:1994 +#, fuzzy, c-format +msgid "No authorization for Client \"%s\"\n" +msgstr "Pas d'enregistrement trouvé en base pour : %s\n" -#: src/stored/btape.c:657 +#: src/dird/ua_status.c:418 src/dird/ua_dotcmds.c:859 src/dird/ua_cmds.c:662 +#: src/dird/ua_cmds.c:875 src/dird/ua_cmds.c:1307 #, c-format -msgid "Bad status from bsf. ERR=%s\n" -msgstr "" +msgid "Connecting to Client %s at %s:%d\n" +msgstr "Connexion au client %s (%s:%d)\n" -#: src/stored/btape.c:659 +#: src/dird/ua_status.c:421 #, c-format -msgid "Backspaced %d file%s.\n" +msgid "" +"Failed to connect to Client %s.\n" +"====\n" msgstr "" +"Impossible de se connecter au client %s.\n" +"====\n" -#: src/stored/btape.c:676 -#, c-format -msgid "Bad status from bsr. ERR=%s\n" -msgstr "" +#: src/dird/ua_status.c:426 +msgid "Connected to file daemon\n" +msgstr "Connecté avec le File Daemon\n" -#: src/stored/btape.c:678 -#, c-format -msgid "Backspaced %d record%s.\n" +#: src/dird/ua_status.c:445 src/dird/ua_status.c:454 +msgid "" +"\n" +"Scheduled Jobs:\n" msgstr "" +"\n" +"Jobs planifiés :\n" -#: src/stored/btape.c:706 -#, c-format -msgid "Device status:\n" +#: src/dird/ua_status.c:446 +#, fuzzy +msgid "" +"Level Type Pri Scheduled Job Name Volume\n" msgstr "" +"Type Action Pri Planification Nom Volume\n" -#: src/stored/btape.c:725 -#, c-format -msgid "Status:\n" -msgstr "Statut :\n" +#: src/dird/ua_status.c:447 +msgid "===================================================================================\n" +msgstr "" -#: src/stored/btape.c:740 +#: src/dird/ua_status.c:455 +#, fuzzy msgid "" -"Test writing larger and larger records.\n" -"This is a torture test for records.\n" -"I am going to write\n" -"larger and larger records. It will stop when the record size\n" -"plus the header exceeds the block size (by default about 64K)\n" +"Level Type Pri Scheduled Job Name Schedule\n" msgstr "" +"Type Action Pri Planification Nom Volume\n" -#: src/stored/btape.c:746 -msgid "Do you want to continue? (y/n): " -msgstr "Voulez vous continuer ? (y/n) : " +#: src/dird/ua_status.c:456 +#, fuzzy +msgid "=====================================================================================\n" +msgstr "========================================================================\n" -#: src/stored/btape.c:748 src/stored/btape.c:2200 -msgid "Command aborted.\n" -msgstr "Commande annulée.\n" +#: src/dird/ua_status.c:513 src/dird/ua_status.c:678 +#, fuzzy, c-format +msgid "%-14s\t%-8s\t%3d\t%-18s\t%-18s\t%s\n" +msgstr "%-14s %-8s %3d %-18s %-18s %s\n" -#: src/stored/btape.c:765 +#: src/dird/ua_status.c:517 src/dird/ua_status.c:682 #, c-format -msgid "Block %d i=%d\n" -msgstr "" +msgid "%-14s %-8s %3d %-18s %-18s %s\n" +msgstr "%-14s %-8s %3d %-18s %-18s %s\n" -#: src/stored/btape.c:792 -msgid "Skipping read backwards test because BSR turned off.\n" +#: src/dird/ua_status.c:553 src/dird/ua_status.c:748 +msgid "Ignoring invalid value for days. Max is 500.\n" msgstr "" -#: src/stored/btape.c:796 -msgid "" -"\n" -"=== Write, backup, and re-read test ===\n" -"\n" -"I'm going to write three records and an EOF\n" -"then backup over the EOF and re-read the last record.\n" -"Bacula does this after writing the last block on the\n" -"tape to verify that the block was written correctly.\n" -"\n" -"This is not an *essential* feature ...\n" -"\n" +#: src/dird/ua_status.c:564 +msgid "Ignoring invalid value for limit. Max is 2000.\n" msgstr "" -#: src/stored/btape.c:809 src/stored/btape.c:820 src/stored/btape.c:831 -#: src/stored/btape.c:1149 src/stored/btape.c:1165 src/stored/btape.c:1907 -#: src/stored/btape.c:2823 -msgid "Error writing record to block.\n" +#: src/dird/ua_status.c:575 +msgid "Ignoring invalid time.\n" msgstr "" -#: src/stored/btape.c:813 src/stored/btape.c:824 src/stored/btape.c:835 -#: src/stored/btape.c:1153 src/stored/btape.c:1169 src/stored/btape.c:1911 -#: src/stored/btape.c:2827 -msgid "Error writing block to device.\n" -msgstr "" +#: src/dird/ua_status.c:697 src/dird/ua_status.c:801 +msgid "No Scheduled Jobs.\n" +msgstr "Pas de job programmé.\n" -#: src/stored/btape.c:816 +#: src/dird/ua_status.c:826 #, c-format -msgid "Wrote first record of %d bytes.\n" -msgstr "" +msgid "Console connected at %s\n" +msgstr "Console connecté à %s\n" -#: src/stored/btape.c:827 -#, c-format -msgid "Wrote second record of %d bytes.\n" +#: src/dird/ua_status.c:837 +msgid "" +"No Jobs running.\n" +"====\n" msgstr "" +"Pas de job en cours.\n" +"====\n" -#: src/stored/btape.c:838 -#, c-format -msgid "Wrote third record of %d bytes.\n" -msgstr "" +#: src/dird/ua_status.c:844 +#, fuzzy +msgid " JobId Type Level Files Bytes Name Status\n" +msgstr " JobId Type Nom Statut\n" -#: src/stored/btape.c:845 src/stored/btape.c:850 -#, c-format -msgid "Backspace file failed! ERR=%s\n" -msgstr "" +#: src/dird/ua_status.c:845 +msgid "======================================================================\n" +msgstr "======================================================================\n" -#: src/stored/btape.c:854 -msgid "Backspaced over EOF OK.\n" -msgstr "" +#: src/dird/ua_status.c:854 +msgid "is waiting execution" +msgstr "est en attente d'exécution" -#: src/stored/btape.c:856 -#, c-format -msgid "Backspace record failed! ERR=%s\n" -msgstr "" +#: src/dird/ua_status.c:857 +msgid "is running" +msgstr "est en cours" -#: src/stored/btape.c:859 -msgid "Backspace record OK.\n" -msgstr "" +#: src/dird/ua_status.c:860 +msgid "is blocked" +msgstr "est bloqué" -#: src/stored/btape.c:862 src/stored/btape.c:868 -#, c-format -msgid "Read block failed! ERR=%s\n" -msgstr "" +#: src/dird/ua_status.c:863 +msgid "has terminated" +msgstr "est terminé" -#: src/stored/btape.c:873 -msgid "Bad data in record. Test failed!\n" -msgstr "" +#: src/dird/ua_status.c:866 +#, fuzzy +msgid "has terminated with warnings" +msgstr "Job terminés :\n" -#: src/stored/btape.c:877 -msgid "" -"\n" -"Block re-read correct. Test succeeded!\n" +#: src/dird/ua_status.c:869 +msgid "has erred" msgstr "" -#: src/stored/btape.c:878 -msgid "" -"=== End Write, backup, and re-read test ===\n" -"\n" -msgstr "" +#: src/dird/ua_status.c:872 +msgid "has errors" +msgstr "est en erreur" -#: src/stored/btape.c:885 -msgid "" -"This is not terribly serious since Bacula only uses\n" -"this function to verify the last block written to the\n" -"tape. Bacula will skip the last block verification\n" -"if you add:\n" -"\n" -"Backward Space Record = No\n" -"\n" -"to your Storage daemon's Device resource definition.\n" -msgstr "" +#: src/dird/ua_status.c:875 +msgid "has a fatal error" +msgstr "est en erreur (fatale)" -#: src/stored/btape.c:907 -#, c-format -msgid "Begin writing %i files of %sB with raw blocks of %u bytes.\n" +#: src/dird/ua_status.c:878 +msgid "has verify differences" msgstr "" -#: src/stored/btape.c:928 src/stored/btape.c:2879 -#, c-format -msgid "Write failed at block %u. stat=%d ERR=%s\n" -msgstr "" +#: src/dird/ua_status.c:881 +msgid "has been canceled" +msgstr "a été annulé" + +#: src/dird/ua_status.c:886 +#, fuzzy +msgid "is waiting on Client" +msgstr "est en attente du client %s" -#: src/stored/btape.c:962 +#: src/dird/ua_status.c:888 #, c-format -msgid "Begin writing %i files of %sB with blocks of %u bytes.\n" -msgstr "" +msgid "is waiting on Client %s" +msgstr "est en attente du client %s" -#: src/stored/btape.c:971 -#, fuzzy -msgid "" -"\n" -"Error writing record to block.\n" -msgstr "Erreur pendant l'écriture du fichier bsr.\n" +#: src/dird/ua_status.c:896 src/dird/ua_status.c:898 +#, fuzzy, c-format +msgid "is waiting on Storage \"%s\"" +msgstr "est en attente du Storage %s" -#: src/stored/btape.c:975 +#: src/dird/ua_status.c:900 #, fuzzy -msgid "" -"\n" -"Error writing block to device.\n" -msgstr "Erreur pendant l'écriture du fichier bsr.\n" - -#: src/stored/btape.c:1030 -msgid "The file_size is too big, stop this test with Ctrl-c.\n" -msgstr "" +msgid "is waiting on Storage" +msgstr "est en attente du Storage %s" -#: src/stored/btape.c:1058 -msgid "Test with zero data, should give the maximum throughput.\n" +#: src/dird/ua_status.c:906 +msgid "is waiting on max Storage jobs" msgstr "" -#: src/stored/btape.c:1070 src/stored/btape.c:1096 -msgid "Test with random data, should give the minimum throughput.\n" +#: src/dird/ua_status.c:909 +msgid "is waiting on max Client jobs" msgstr "" -#: src/stored/btape.c:1085 -msgid "Test with zero data and bacula block structure.\n" +#: src/dird/ua_status.c:912 +msgid "is waiting on max Job jobs" msgstr "" -#: src/stored/btape.c:1125 -#, c-format -msgid "" -"\n" -"=== Write, rewind, and re-read test ===\n" -"\n" -"I'm going to write %d records and an EOF\n" -"then write %d records and an EOF, then rewind,\n" -"and re-read the data to verify that it is correct.\n" -"\n" -"This is an *essential* feature ...\n" -"\n" +#: src/dird/ua_status.c:915 +msgid "is waiting on max total jobs" msgstr "" -#: src/stored/btape.c:1157 src/stored/btape.c:1173 +#: src/dird/ua_status.c:919 #, fuzzy, c-format -msgid "Wrote %d blocks of %d bytes.\n" -msgstr "Ecriture de 1000 blocs de %d octets.\n" +msgid "is waiting for its start time (%s)" +msgstr "attend son heure de démarrage" -#: src/stored/btape.c:1215 src/stored/btape.c:1295 -msgid "Rewind OK.\n" -msgstr "" +#: src/dird/ua_status.c:925 +msgid "is waiting for higher priority jobs to finish" +msgstr "attend qu'un job plus prioritaire se termine" -#: src/stored/btape.c:1228 src/stored/btape.c:1347 -msgid "Got EOF on tape.\n" -msgstr "" +#: src/dird/ua_status.c:928 +#, fuzzy +msgid "is waiting for a Shared Storage device" +msgstr "est en attente du Storage %s" -#: src/stored/btape.c:1233 +#: src/dird/ua_status.c:945 #, c-format -msgid "Read block %d failed! ERR=%s\n" -msgstr "" +msgid "is in unknown state %c" +msgstr "est dans un état inconnu %c" -#: src/stored/btape.c:1239 -#, c-format -msgid "Read record failed. Block %d! ERR=%s\n" -msgstr "" +#: src/dird/ua_status.c:959 +msgid "is waiting for a mount request" +msgstr "est en attente d'un montage" + +#: src/dird/ua_status.c:966 +msgid "is waiting for an appendable Volume" +msgstr "est en attente d'un volume libre" + +#: src/dird/ua_status.c:974 +#, fuzzy +msgid "is waiting for Client to connect to Storage daemon" +msgstr "attend que le client %s se connecte au Storage %s" -#: src/stored/btape.c:1245 src/stored/btape.c:1377 +#: src/dird/ua_status.c:976 #, c-format -msgid "Bad data in record. Expected %d, got %d at byte %d. Test failed!\n" -msgstr "" +msgid "is waiting for Client %s to connect to Storage %s" +msgstr "attend que le client %s se connecte au Storage %s" -#: src/stored/btape.c:1252 +#: src/dird/ua_status.c:1007 #, fuzzy, c-format -msgid "%d blocks re-read correctly.\n" -msgstr "1000 blocs relus correctement.\n" +msgid "%6d\t%-6s\t%-20s\t%s\t%s\n" +msgstr "%6d %-6s %-20s %s\n" + +#: src/dird/ua_status.c:1015 +#, fuzzy, c-format +msgid "%6d %-4s %-3s %10s %10s %-17s %s\n" +msgstr "%6d %-6s %8s %10s %-7s %-8s %s\n" -#: src/stored/btape.c:1255 src/stored/btape.c:1384 +#: src/dird/ua_status.c:1040 +msgid "No Terminated Jobs.\n" +msgstr "Pas de job terminé.\n" + +#: src/dird/ua_status.c:1046 src/lib/status.h:73 msgid "" -"=== Test Succeeded. End Write, rewind, and re-read test ===\n" "\n" +"Terminated Jobs:\n" msgstr "" +"\n" +"Job terminés :\n" -#: src/stored/btape.c:1283 -msgid "Block position test\n" -msgstr "" +#: src/dird/ua_status.c:1047 src/lib/status.h:80 +msgid " JobId Level Files Bytes Status Finished Name \n" +msgstr " JobId Type Fichiers Octets Statut Terminé Nom\n" -#: src/stored/btape.c:1338 -#, c-format -msgid "Reposition to file:block %d:%d\n" -msgstr "" +#: src/dird/ua_status.c:1048 +msgid "====================================================================\n" +msgstr "=====================================================================\n" -#: src/stored/btape.c:1340 -msgid "Reposition error.\n" +#: src/dird/ua_status.c:1087 src/lib/status.h:109 +msgid "Diffs" msgstr "" -#: src/stored/btape.c:1353 +#: src/dird/ua_status.c:1090 src/dird/ua_restore.c:443 src/lib/status.h:112 +msgid "Cancel" +msgstr "Annulé" + +#: src/dird/ua_status.c:1099 src/lib/status.h:122 +msgid "Other" +msgstr "Autre" + +#: src/dird/ua_status.c:1103 src/lib/status.h:134 +#, fuzzy, c-format +msgid "%6d\t%-6s\t%8s\t%10s\t%-7s\t%-8s\t%s\n" +msgstr "%6d %-6s %8s %10s %-7s %-8s %s\n" + +#: src/dird/ua_status.c:1111 src/lib/status.h:142 #, c-format -msgid "" -"Read block %d failed! file=%d blk=%d. ERR=%s\n" -"\n" -msgstr "" +msgid "%6d %-6s %8s %10s %-7s %-8s %s\n" +msgstr "%6d %-6s %8s %10s %-7s %-8s %s\n" -#: src/stored/btape.c:1355 -msgid "" -"This may be because the tape drive block size is not\n" -" set to variable blocking as normally used by Bacula.\n" -" Please see the Tape Testing chapter in the manual and \n" -" look for using mt with defblksize and setoptions\n" -"If your tape drive block size is correct, then perhaps\n" -" your SCSI driver is *really* stupid and does not\n" -" correctly report the file:block after a FSF. In this\n" -" case try setting:\n" -" Fast Forward Space File = no\n" -" in your Device resource.\n" -msgstr "" +#: src/dird/ua_status.c:1121 +msgid "\n" +msgstr "\n" -#: src/stored/btape.c:1371 +#: src/dird/next_vol.c:163 #, c-format -msgid "Read record failed! ERR=%s\n" -msgstr "" +msgid "Purging oldest volume \"%s\"\n" +msgstr "Purge du plus ancien volume \"%s\"\n" -#: src/stored/btape.c:1382 +#: src/dird/next_vol.c:169 #, c-format -msgid "Block %d re-read correctly.\n" -msgstr "" +msgid "Pruning oldest volume \"%s\"\n" +msgstr "Prunning du plus ancien volume \"%s\"\n" -#: src/stored/btape.c:1403 -msgid "" -"\n" -"\n" -"=== Append files test ===\n" -"\n" -"This test is essential to Bacula.\n" -"\n" -"I'm going to write one record in file 0,\n" -" two records in file 1,\n" -" and three records in file 2\n" -"\n" +#: src/dird/next_vol.c:188 +msgid "We seem to be looping trying to find the next volume. I give up.\n" msgstr "" -#: src/stored/btape.c:1427 -msgid "Now moving to end of medium.\n" +#: src/dird/next_vol.c:215 +#, fuzzy, c-format +msgid "Max Volume bytes=%s exceeded. Marking Volume \"%s\" as Full.\n" msgstr "" +"Nombre maximum de job sur le volume atteind. Marquage du volume \"%s\" comme " +"Used.\n" -#: src/stored/btape.c:1429 src/stored/btape.c:1658 +#: src/dird/next_vol.c:223 #, c-format -msgid "We should be in file 3. I am at file %d. %s\n" -msgstr "" - -#: src/stored/btape.c:1430 src/stored/btape.c:1448 src/stored/btape.c:1647 -#: src/stored/btape.c:1659 src/stored/btape.c:1672 src/stored/btape.c:1689 -msgid "This is correct!" -msgstr "" +msgid "Volume used once. Marking Volume \"%s\" as Used.\n" +msgstr "Volume utilisé une fois. Marquage du volume \"%s\" comme Used.\n" -#: src/stored/btape.c:1430 src/stored/btape.c:1448 src/stored/btape.c:1647 -#: src/stored/btape.c:1659 src/stored/btape.c:1672 src/stored/btape.c:1689 -msgid "This is NOT correct!!!!" +#: src/dird/next_vol.c:230 +#, fuzzy, c-format +msgid "Max Volume jobs=%s exceeded. Marking Volume \"%s\" as Used.\n" msgstr "" +"Nombre maximum de job sur le volume atteind. Marquage du volume \"%s\" comme " +"Used.\n" -#: src/stored/btape.c:1436 -msgid "" -"\n" -"Now the important part, I am going to attempt to append to the tape.\n" -"\n" +#: src/dird/next_vol.c:240 +#, fuzzy, c-format +msgid "Max Volume files=%s exceeded. Marking Volume \"%s\" as Used.\n" msgstr "" +"Nombre de fichier maximum atteind. Marquage du volume \"%s\" comme Used.\n" -#: src/stored/btape.c:1443 +#: src/dird/next_vol.c:251 +#, fuzzy, c-format msgid "" -"Done appending, there should be no I/O errors\n" -"\n" +"Max configured use duration=%s sec. exceeded. Marking Volume \"%s\" as " +"Used.\n" msgstr "" +"Nombre maximum de job sur le volume atteind. Marquage du volume \"%s\" comme " +"Used.\n" -#: src/stored/btape.c:1444 -msgid "Doing Bacula scan of blocks:\n" +#: src/dird/next_vol.c:264 +#, c-format +msgid "Catalog error updating volume \"%s\". ERR=%s" msgstr "" -#: src/stored/btape.c:1446 -msgid "End scanning the tape.\n" -msgstr "" +#: src/dird/next_vol.c:286 +msgid "volume has expired" +msgstr "le volume a expiré" -#: src/stored/btape.c:1447 src/stored/btape.c:1671 +#: src/dird/next_vol.c:304 src/dird/next_vol.c:348 #, c-format -msgid "We should be in file 4. I am at file %d. %s\n" +msgid "Recycled current volume \"%s\"\n" msgstr "" -#: src/stored/btape.c:1472 -msgid "" -"\n" -"Autochanger enabled, but no name or no command device specified.\n" +#: src/dird/next_vol.c:309 +msgid "and recycling of current volume failed" msgstr "" -#: src/stored/btape.c:1476 -msgid "" -"\n" -"Ah, I see you have an autochanger configured.\n" -"To test the autochanger you must have a blank tape\n" -" that I can write on in Slot 1.\n" -msgstr "" +#: src/dird/next_vol.c:315 +msgid "but should be Append, Purged or Recycle" +msgstr "mais doit être Append, Purged ou bien Recycle" -#: src/stored/btape.c:1479 -msgid "" -"\n" -"Do you wish to continue with the Autochanger test? (y/n): " -msgstr "" +#: src/dird/next_vol.c:324 +msgid "volume has recycling disabled" +msgstr "le recyclage du volume est désactivé" -#: src/stored/btape.c:1486 +#: src/dird/next_vol.c:351 msgid "" -"\n" -"\n" -"=== Autochanger test ===\n" -"\n" +"but should be Append, Purged or Recycle (recycling of the current volume " +"failed)" msgstr "" -#: src/stored/btape.c:1495 -msgid "3301 Issuing autochanger \"loaded\" command.\n" +#: src/dird/next_vol.c:355 +msgid "" +"but should be Append, Purged or Recycle (cannot automatically recycle " +"current volume, as it still contains unpruned data or the Volume Retention " +"time has not expired.)" msgstr "" -#: src/stored/btape.c:1504 +#: src/dird/next_vol.c:415 #, c-format -msgid "3991 Bad autochanger command: %s\n" -msgstr "" +msgid "Unable to get Pool record: ERR=%s" +msgstr "Impossible de récupérer le Pool depuis le catalogue : ERR=%s" -#: src/stored/btape.c:1505 +#: src/dird/next_vol.c:422 #, c-format -msgid "3991 result=\"%s\": ERR=%s\n" +msgid "Unable add Scratch Volume, Pool \"%s\" full MaxVols=%d\n" msgstr "" +"Impossible d'ajouter un volume du Scratch, le Pool \"%s\" est plein. MaxVols=" +"%d\n" -#: src/stored/btape.c:1509 +#: src/dird/next_vol.c:442 #, c-format -msgid "Slot %d loaded. I am going to unload it.\n" -msgstr "" +msgid "Failed to move Scratch Volume. ERR=%s\n" +msgstr "Impossible de déplacer un Volume du Scratch. ERR=%s\n" -#: src/stored/btape.c:1511 -msgid "Nothing loaded in the drive. OK.\n" -msgstr "" +#: src/dird/next_vol.c:447 +#, c-format +msgid "Using Volume \"%s\" from 'Scratch' pool.\n" +msgstr "Utilisation du Volume \"%s\" du pool « Scratch ».\n" -#: src/stored/btape.c:1518 +#: src/dird/authenticate.c:77 src/dird/authenticate.c:78 +#: src/qt-console/tray-monitor/authenticate.cpp:119 #, c-format -msgid "3302 Issuing autochanger \"unload %d %d\" command.\n" +msgid "Error sending Hello to Storage daemon. ERR=%s\n" msgstr "" -#: src/stored/btape.c:1523 -#, c-format -msgid "unload status=%s %d\n" +#: src/dird/authenticate.c:107 +msgid "Director and Storage daemon passwords or names not the same.\n" msgstr "" -#: src/stored/btape.c:1523 -msgid "Bad" +#: src/dird/authenticate.c:109 +#, fuzzy, c-format +msgid "" +"Director unable to authenticate with Storage daemon at \"%s:%d\". Possible " +"causes:\n" +"Passwords or names not the same or\n" +"Maximum Concurrent Jobs exceeded on the SD or\n" +"SD networking messed up (restart daemon).\n" +"Please see " msgstr "" +"Le Director a rencontré un problème d'authentification avec le Storage " +"Daemon \"%s:%d\".\n" +"Les causes possibles sont :\n" +"- Les mots de pass ne correspondent pas ;\n" +"- Le nombre maximum de job concurrent est atteint sur le SD ;\n" +"- La connexion réseau du SD est tombée (il faut le redémarrer).\n" +"Vous trouverez de l'aide sur\n" +"http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors\n" -#: src/stored/btape.c:1526 +#: src/dird/authenticate.c:137 +#, fuzzy, c-format +msgid "TLS negotiation failed with SD at \"%s:%d\"\n" +msgstr "Négociation TLS échouée avec le SD « %s:%d ».\n" + +#: src/dird/authenticate.c:149 #, c-format -msgid "3992 Bad autochanger command: %s\n" +msgid "bdird \n" -" -b specify bootstrap file\n" -" -c set configuration file to file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -p proceed inspite of I/O errors\n" -" -s turn off signals\n" -" -v be verbose\n" -" -? print this message.\n" +"First you select one or more JobIds that contain files\n" +"to be restored. You will be presented several methods\n" +"of specifying the JobIds. Then you will be allowed to\n" +"select which files from those JobIds are to be restored.\n" "\n" msgstr "" -") %s %s %s\n" "\n" -"Usage : bconsole [-s] [-c config_file] [-d niveau_debug]\n" -" -c set configuration file to file\n" -" -dnn set debug level to nn\n" -" -s no signals\n" -" -t test - lecture de la configuration et sortie\n" "\n" +"D'abord, vous devez sélectionner un ou plusieurs jobs (par leur JobId) qui\n" +"contiennent les fichiers à restaurer. Il vous est présenté plusieurs " +"méthodes\n" +"pour choisir le bon JobId. Après, vous pourrez sélectionner les fichiers à\n" +"restaurer parmi la liste totale des fichiers présents dans les jobs\n" +"sélectionnés.\n" -#: src/stored/btape.c:3047 -#, c-format -msgid "Mount second Volume on device %s and press return when ready: " -msgstr "" +#: src/dird/ua_restore.c:587 +msgid "To select the JobIds, you have the following choices:\n" +msgstr "Pour sélectionner les JobIds, vous avez les possibilités suivantes :\n" -#: src/stored/btape.c:3075 -#, c-format -msgid "Mount blank Volume on device %s and press return when ready: " +#: src/dird/ua_restore.c:592 +msgid "Select item: " +msgstr "Choix : " + +#: src/dird/ua_restore.c:597 src/dird/ua_restore.c:632 +msgid "SQL query not authorized.\n" msgstr "" -#: src/stored/btape.c:3095 -#, fuzzy, c-format -msgid "End of Volume \"%s\" %d records.\n" -msgstr "Le volume \"%s\" existe déjà en base.\n" +#: src/dird/ua_restore.c:610 +msgid "Enter Filename (no path):" +msgstr "Saisissez le nom du fichier (sans le chemin) : " -#: src/stored/btape.c:3109 -#, fuzzy, c-format -msgid "Read block=%u, VolBytes=%s rate=%sB/s\n" -msgstr "Écriture blk_block=%u, dev_blk_num=%u VolBytes=%s rate=%.1f KB/s\n" +#: src/dird/ua_restore.c:625 src/dird/ua_restore.c:733 +msgid "Enter JobId(s), comma separated, to restore: " +msgstr "Saisissez le ou les JobIds à restaurer (ex : id1,id2,id3) : " -#: src/stored/authenticate.c:61 -#, c-format -msgid "I only authenticate Directors, not %d\n" -msgstr "" +#: src/dird/ua_restore.c:635 +msgid "Enter SQL list command: " +msgstr "Exécuter une requête SQL : " -#: src/stored/authenticate.c:67 src/filed/authenticate.c:76 -#, c-format -msgid "Bad Hello command from Director at %s. Len=%d.\n" +#: src/dird/ua_restore.c:669 src/dird/ua_restore.c:692 +msgid "" +"Enter file names with paths, or < to enter a filename\n" +"containing a list of file names with paths, and terminate\n" +"them with a blank line.\n" msgstr "" +"Saisissez les répertoires complets ou bien < pour saisir le nom d'un\n" +"fichier contenant la liste des répertoires et\n" +"terminez la saisie par une ligne vide.\n" -#: src/stored/authenticate.c:78 src/filed/authenticate.c:88 +#: src/dird/ua_restore.c:673 src/dird/ua_restore.c:696 +msgid "Enter full filename: " +msgstr "Saisissez le nom complet du fichier : " + +#: src/dird/ua_restore.c:731 #, c-format -msgid "Bad Hello command from Director at %s: %s\n" -msgstr "" +msgid "You have already selected the following JobIds: %s\n" +msgstr "Vous avez déjà sélectionné les JobIds suivants : %s\n" -#: src/stored/authenticate.c:92 -#, fuzzy, c-format +#: src/dird/ua_restore.c:749 msgid "" -"Connection from unknown Director %s at %s rejected.\n" -"Please see " +"Enter full directory names or start the name\n" +"with a < to indicate it is a filename containing a list\n" +"of directories and terminate them with a blank line.\n" msgstr "" -"Connexion d'un Director inconnu %s à %s rejeté.\n" -"\n" +"Saisissez les répertoires complets ou bien le nom d'un\n" +"fichier (commençant par <) contenant la liste des répertoires et\n" +"terminez la saisie par une ligne vide.\n" + +#: src/dird/ua_restore.c:753 +msgid "Enter directory name: " +msgstr "Saisissez le nom d'un répertoire : " -#: src/stored/authenticate.c:129 +#: src/dird/ua_restore.c:769 #, fuzzy -msgid "" -"Incorrect password given by Director.\n" -"Please see " -msgstr "Password incorrect donné par le Director à %s.\n" +msgid "Enter JobId to get the state to restore: " +msgstr "Saisissez le JobId à supprimer : " -#: src/stored/authenticate.c:137 src/stored/authenticate.c:248 -#: src/filed/authenticate.c:151 src/filed/authenticate.c:270 -msgid "" -"Authorization problem: Remote server did not advertize required TLS " -"support.\n" +#: src/dird/ua_restore.c:808 +msgid "Invalid JobId in list.\n" msgstr "" -#: src/stored/authenticate.c:155 -#, fuzzy, c-format -msgid "TLS negotiation failed with DIR at \"%s:%d\"\n" -msgstr "Négociation TLS échouée avec le SD « %s:%d ».\n" - -#: src/stored/authenticate.c:191 +#: src/dird/ua_restore.c:827 #, c-format -msgid "Unable to authenticate Director at %s.\n" +msgid "Access to JobId=%s (Job \"%s\") not authorized. Not selected.\n" msgstr "" -#: src/stored/authenticate.c:239 src/stored/authenticate.c:279 +#: src/dird/ua_restore.c:840 +msgid "No Jobs selected.\n" +msgstr "Pas de job sélectionné.\n" + +#: src/dird/ua_restore.c:845 +#, c-format +msgid "You have selected the following JobIds: %s\n" +msgstr "Vous avez sélectionné les JobIds suivants : %s\n" + +#: src/dird/ua_restore.c:847 #, c-format +msgid "You have selected the following JobId: %s\n" +msgstr "Vous avez sélectionné le JobId suivant : %s\n" + +#: src/dird/ua_restore.c:857 msgid "" -"Incorrect authorization key from File daemon at %s rejected.\n" -"Please see " +"The restored files will the most current backup\n" +"BEFORE the date you specify below.\n" +"\n" msgstr "" -#: src/stored/authenticate.c:266 -#, fuzzy, c-format -msgid "TLS negotiation failed with FD at \"%s:%d\"\n" -msgstr "Négociation TLS échouée avec le FD « %s:%d ».\n" +#: src/dird/ua_restore.c:860 +msgid "Enter date as YYYY-MM-DD HH:MM:SS :" +msgstr "Saisissez la date au format YYYY-MM-DD HH:MM:SS : " -#: src/stored/wait.c:133 -#, c-format -msgid "pthread timedwait error. ERR=%s\n" -msgstr "" +#: src/dird/ua_restore.c:866 +msgid "Improper date format.\n" +msgstr "Format de date invalide.\n" -#: src/stored/wait.c:239 -#, fuzzy, c-format -msgid "JobId=%s, Job %s waiting to reserve a device.\n" -msgstr "Le job %s est en attente de réservation d'un device.\n" +#: src/dird/ua_restore.c:887 +#, c-format +msgid "Cannot open file %s: ERR=%s\n" +msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" -#: src/stored/block.c:102 +#: src/dird/ua_restore.c:895 src/dird/ua_restore.c:899 #, c-format -msgid "" -"Dump block %s %x: size=%d BlkNum=%d\n" -" Hdrcksum=%x cksum=%x\n" -msgstr "" +msgid "Error occurred on line %d of file \"%s\"\n" +msgstr "Une erreur est survenue à la ligne %d de \"%s\"\n" -#: src/stored/block.c:115 +#: src/dird/ua_restore.c:943 src/dird/ua_restore.c:971 #, c-format -msgid " Rec: VId=%u VT=%u FI=%s Strm=%s len=%d p=%x\n" +msgid "No database record found for: %s\n" +msgstr "Pas d'enregistrement trouvé en base pour : %s\n" + +#: src/dird/ua_restore.c:959 +msgid "No JobId specified cannot continue.\n" msgstr "" -#: src/stored/block.c:171 +#: src/dird/ua_restore.c:992 #, c-format -msgid "%d block read errors not printed.\n" +msgid "No table found: %s\n" msgstr "" -#: src/stored/block.c:264 src/stored/block.c:280 src/stored/block.c:290 -#, c-format +#: src/dird/ua_restore.c:1050 msgid "" -"Volume data error at %u:%u! Wanted ID: \"%s\", got \"%s\". Buffer " -"discarded.\n" +"\n" +"\n" +"For one or more of the JobIds selected, no files were found,\n" +"so file selection is not possible.\n" +"Most likely your retention policy pruned the files.\n" msgstr "" -#: src/stored/block.c:305 -#, c-format +#: src/dird/ua_restore.c:1053 msgid "" -"Volume data error at %u:%u! Block length %u is insane (too large), probably " -"due to a bad archive.\n" +"\n" +"Do you want to restore all the files? (yes|no): " msgstr "" +"\n" +"Voulez vous restaurer tous les fichiers ? (oui|non) : " -#: src/stored/block.c:331 -#, c-format +#: src/dird/ua_restore.c:1056 msgid "" -"Volume data error at %u:%u!\n" -"Block checksum mismatch in block=%u len=%d: calc=%x blk=%x\n" +"\n" +"Regexp matching files to restore? (empty to abort): " msgstr "" -#: src/stored/block.c:452 +#: src/dird/ua_restore.c:1072 #, fuzzy, c-format -msgid "Cannot write block. Device at EOM. dev=%s\n" -msgstr "Impossible d'écrire un bloc. Le Device est au bout EOM.\n" +msgid "Regex compile error: %s\n" +msgstr "erreur sockopt : %s\n" -#: src/stored/block.c:458 -#, c-format -msgid "Attempt to write on read-only Volume. dev=%s\n" +#: src/dird/ua_restore.c:1137 +#, fuzzy, c-format +msgid "" +"\n" +"Building directory tree for JobId(s) %s ... " msgstr "" +"\n" +"Analyse des répertoires pour le JobId %s..." -#: src/stored/block.c:464 -#, c-format -msgid "Attempt to write on closed device=%s\n" +#: src/dird/ua_restore.c:1207 +#, fuzzy, c-format +msgid "" +"\n" +"%s files inserted into the tree and marked for extraction.\n" msgstr "" +"\n" +"1 Job, %s fichiers analysés et sélectionnés pour la restauration.\n" -#: src/stored/block.c:513 -#, c-format -msgid "User defined maximum volume capacity %s exceeded on device %s.\n" +#: src/dird/ua_restore.c:1210 +#, fuzzy, c-format +msgid "" +"\n" +"%s files inserted into the tree.\n" msgstr "" +"\n" +"1 Job, %s fichiers analysés\n" -#: src/stored/block.c:528 +#: src/dird/ua_restore.c:1285 #, c-format -msgid "Unable to write EOF. ERR=%s\n" -msgstr "Impossible d'écrire le marqueur EOF. ERR=%s\n" - -#: src/stored/block.c:554 src/stored/block.c:588 -msgid "Write block header zeroed.\n" +msgid "Error getting FileSet \"%s\": ERR=%s\n" msgstr "" -#: src/stored/block.c:580 -#, c-format -msgid "Block checksum changed during write: before=%ud after=%ud\n" -msgstr "" +#: src/dird/ua_restore.c:1290 +#, fuzzy, c-format +msgid "FileSet argument: %s\n" +msgstr "FileSet" -#: src/stored/block.c:607 -#, c-format -msgid "Write error at %u:%u on device %s. ERR=%s.\n" -msgstr "Erreur d'écriture à %u:%u sur le device %s. ERR=%s\n" +#: src/dird/ua_restore.c:1302 +#, fuzzy, c-format +msgid "No FileSet found for client \"%s\".\n" +msgstr "Pas d'enregistrement trouvé en base pour : %s\n" -#: src/stored/block.c:614 +#: src/dird/ua_restore.c:1308 #, c-format -msgid "End of Volume \"%s\" at %u:%u on device %s. Write of %u bytes got %d.\n" +msgid "Error getting FileSet record: %s\n" msgstr "" -"Fin du volume \"%s\" à %u:%u sur le device %s. Ecriture de %u octets, eu " -"%d.\n" -#: src/stored/block.c:695 src/stored/block.c:701 -#, c-format -msgid "Backspace file at EOT failed. ERR=%s\n" +#: src/dird/ua_restore.c:1309 +msgid "" +"This probably means you modified the FileSet.\n" +"Continuing anyway.\n" msgstr "" -#: src/stored/block.c:708 +#: src/dird/ua_restore.c:1324 #, c-format -msgid "Backspace record at EOT failed. ERR=%s\n" +msgid "Pool \"%s\" not found, using any pool.\n" msgstr "" -#: src/stored/block.c:725 +#: src/dird/ua_restore.c:1351 src/dird/ua_restore.c:1367 #, c-format -msgid "Re-read last block at EOT failed. ERR=%s" -msgstr "Erreur sur la re-lecture du dernier bloc en EOT. ERR=%s" +msgid "No Full backup before %s found.\n" +msgstr "Pas de backup Full trouvé avant %s.\n" -#: src/stored/block.c:735 -#, c-format +#: src/dird/ua_restore.c:1396 +msgid "No jobs found.\n" +msgstr "Pas de jobs trouvé.\n" + +#: src/dird/ua_restore.c:1531 +#, fuzzy, c-format msgid "" -"Re-read of last block: block numbers differ by more than one.\n" -"Probable tape misconfiguration and data loss. Read block=%u Want block=%u.\n" +"\n" +"Warning Storage is overridden by \"%s\" on the command line.\n" msgstr "" +"Attention, le storage par défaut est remplacé par \"%s\" en ligne de " +"commande.\n" -#: src/stored/block.c:740 +#: src/dird/ua_restore.c:1536 #, c-format msgid "" -"Re-read of last block OK, but block numbers differ. Read block=%u Want block=" -"%u.\n" +"This may not work because of two different MediaTypes:\n" +" Storage MediaType=\"%s\"\n" +" Volume MediaType=\"%s\".\n" +"\n" msgstr "" -#: src/stored/block.c:744 -msgid "Re-read of last block succeeded.\n" -msgstr "La re-lecture du dernier bloc écrit a réussi.\n" +#: src/dird/ua_restore.c:1555 +#, fuzzy, c-format +msgid "Using Storage \"%s\" from MediaType \"%s\".\n" +msgstr "" +"Le Storage \"%s\" est introuvable, utilisation du Storage \"%s\" du " +"MediaType \"%s\".\n" -#: src/stored/block.c:777 +#: src/dird/ua_restore.c:1558 #, c-format -msgid "" -"Error writing final EOF to tape. This Volume may not be readable.\n" -"%s" +msgid "Storage \"%s\" not found, using Storage \"%s\" from MediaType \"%s\".\n" msgstr "" +"Le Storage \"%s\" est introuvable, utilisation du Storage \"%s\" du " +"MediaType \"%s\".\n" -#: src/stored/block.c:791 +#: src/dird/ua_restore.c:1567 #, c-format msgid "" -"Error writing final part to DVD. This Volume may not be readable.\n" -"%s" +"\n" +"Unable to find Storage resource for\n" +"MediaType \"%s\", needed by the Jobs you selected.\n" msgstr "" -#: src/stored/block.c:801 -#, fuzzy -msgid "Error sending Volume info to Director.\n" -msgstr "Erreur pendant la récupération des informations sur un Volume : %s" +#: src/dird/bsr.c:161 +#, c-format +msgid "Unable to get Job record. ERR=%s\n" +msgstr "" -#: src/stored/block.c:896 +#: src/dird/bsr.c:172 #, c-format -msgid "" -"Error while writing, current part number is less than the total number of " -"parts (%d/%d, device=%s)\n" +msgid "Unable to get Job Volume Parameters. ERR=%s\n" msgstr "" -#: src/stored/block.c:904 +#: src/dird/bsr.c:220 #, c-format -msgid "Unable to open device next part %s: ERR=%s\n" +msgid "Unable to create bootstrap file %s. ERR=%s\n" +msgstr "Impossible de créer le fichier bootstrap %s. ERR=%s\n" + +#: src/dird/bsr.c:229 +#, fuzzy +msgid "No files found to read. No bootstrap file written.\n" msgstr "" +"Aucun fichier trouvé pour la restauration/migration. Pas de fichier " +"Bootstrap écrit.\n" + +#: src/dird/bsr.c:233 +msgid "Error writing bsr file.\n" +msgstr "Erreur pendant l'écriture du fichier bsr.\n" -#: src/stored/block.c:924 +#: src/dird/bsr.c:238 #, c-format +msgid "Bootstrap records written to %s\n" +msgstr "Fichier bootstrap écrit sur %s\n" + +#: src/dird/bsr.c:286 +#, fuzzy msgid "" -"End of Volume \"%s\" at %u:%u on device %s (part_size=%s, free_space=%s, " -"free_space_errno=%d, errmsg=%s).\n" +"The Job will require the following (*=>InChanger):\n" +" Volume(s) Storage(s) SD Device(s)\n" +"===========================================================================\n" msgstr "" +"Ce job va utiliser les éléments suivants :\n" +" Volume(s) Storage(s) SD Device(s)\n" +"===========================================================================\n" -#: src/stored/block.c:937 -#, c-format +#: src/dird/bsr.c:306 +msgid "No Volumes found to restore.\n" +msgstr "Aucun volume trouvé pour la restauration.\n" + +#: src/dird/bsr.c:308 msgid "" -"End of Volume \"%s\" at %u:%u on device %s (part_size=%s, free_space=%s, " -"free_space_errno=%d).\n" +"\n" +"Volumes marked with \"*\" are in the Autochanger.\n" msgstr "" -#: src/stored/block.c:980 +#: src/dird/fd_cmds.c:89 #, fuzzy -msgid "Job failed or canceled.\n" -msgstr "Le job %d est annulé.\n" +msgid "Client: " +msgstr "Client" -#: src/stored/block.c:986 -msgid "Attempt to read past end of tape or file.\n" +#: src/dird/fd_cmds.c:125 +#, c-format +msgid "File daemon \"%s\" rejected Job command: %s\n" msgstr "" -#: src/stored/block.c:995 +#: src/dird/fd_cmds.c:138 #, c-format -msgid "Attempt to read closed device: fd=%d at file:blk %u:%u on device %s\n" +msgid "Error updating Client record. ERR=%s\n" msgstr "" -#: src/stored/block.c:1005 +#: src/dird/fd_cmds.c:143 #, c-format -msgid "Block buffer size looping problem on device %s\n" +msgid "FD gave bad response to JobId command: %s\n" msgstr "" -#: src/stored/block.c:1017 -#, fuzzy, c-format -msgid "Unable to open device part=%d %s: ERR=%s\n" -msgstr "3910 Impossible d'ouvrir le device %s : ERR=%s\n" +#: src/dird/fd_cmds.c:172 src/dird/fd_cmds.c:260 +msgid ", since=" +msgstr ", depuis=" -#: src/stored/block.c:1044 -#, c-format -msgid "Read error on fd=%d at file:blk %u:%u on device %s. ERR=%s.\n" -msgstr "" +#: src/dird/fd_cmds.c:237 +msgid "No prior or suitable Full backup found in catalog. Doing FULL backup.\n" +msgstr "Pas de précédent backup Full utilisable. Lancement d'un backup FULL.\n" -#: src/stored/block.c:1057 +#: src/dird/fd_cmds.c:238 src/dird/fd_cmds.c:244 src/dird/fd_cmds.c:253 #, c-format -msgid "Read zero bytes at %u:%u on device %s.\n" -msgstr "" +msgid " (upgraded from %s)" +msgstr " (à la place de %s)" -#: src/stored/block.c:1081 -#, c-format +#: src/dird/fd_cmds.c:243 +#, fuzzy msgid "" -"Volume data error at %u:%u! Very short block of %d bytes on device %s " -"discarded.\n" -msgstr "" +"No prior or suitable Differential backup found in catalog. Doing " +"Differential backup.\n" +msgstr "Pas de précédent backup Full utilisable. Lancement d'un backup FULL.\n" -#: src/stored/block.c:1107 +#: src/dird/fd_cmds.c:251 #, c-format -msgid "Block length %u is greater than buffer %u. Attempting recovery.\n" -msgstr "" +msgid "Prior failed job found in catalog. Upgrading to %s.\n" +msgstr "Le job précédent était en erreur. Passage au type %s.\n" -#: src/stored/block.c:1127 +#: src/dird/fd_cmds.c:329 #, c-format -msgid "Setting block buffer size to %u bytes.\n" +msgid "Unimplemented backup level %d %c\n" msgstr "" -#: src/stored/block.c:1142 -#, c-format +#: src/dird/fd_cmds.c:402 msgid "" -"Volume data error at %u:%u! Short block of %d bytes on device %s discarded.\n" +"FD compression disabled for this Job because AllowCompress=No in Storage " +"resource.\n" msgstr "" -#: src/lib/plugins.c:117 -#, fuzzy, c-format -msgid "Failed to open Plugin directory %s: ERR=%s\n" -msgstr "3910 Impossible d'ouvrir le device %s : ERR=%s\n" - -#: src/lib/plugins.c:134 +#: src/dird/fd_cmds.c:501 src/filed/job.c:1014 #, c-format -msgid "Failed to find any plugins in %s\n" -msgstr "" +msgid "Cannot run program: %s. ERR=%s\n" +msgstr "Impossible de lancer la commande : %s. ERR=%s\n" -#: src/lib/plugins.c:168 -#, fuzzy, c-format -msgid "dlopen plugin %s failed: ERR=%s\n" -msgstr "fopen %s en erreur : ERR=%s\n" +#: src/dird/fd_cmds.c:512 src/dird/fd_cmds.c:537 src/dird/fd_cmds.c:551 +msgid ">filed: write error on socket\n" +msgstr "" -#: src/lib/plugins.c:179 -#, fuzzy, c-format -msgid "Lookup of loadPlugin in plugin %s failed: ERR=%s\n" -msgstr "fopen %s en erreur : ERR=%s\n" +#: src/dird/fd_cmds.c:518 +#, c-format +msgid "Error running program: %s. ERR=%s\n" +msgstr "Erreur dans l'exécution de la commande : %s. ERR=%s\n" -# Impossible d'ouvrir le fichier de spool des attributs : ERR=%s -#: src/lib/plugins.c:188 -#, fuzzy, c-format -msgid "Lookup of unloadPlugin in plugin %s failed: ERR=%s\n" -msgstr "Impossible d'ouvrir le fichier de spool des attributs %s : ERR=%s\n" +#: src/dird/fd_cmds.c:527 +#, c-format +msgid "Cannot open included file: %s. ERR=%s\n" +msgstr "Impossible d'ouvrir le fichier inclus : %s. ERR=%s\n" -#: src/lib/pythonlib.c:116 -msgid "Could not initialize Python\n" -msgstr "Impossible d'initialiser le Python\n" +#: src/dird/fd_cmds.c:672 +#, fuzzy, c-format +msgid "Client \"%s\" RunScript failed.\n" +msgstr "le client \"%s\" est introuvable.\n" -#: src/lib/pythonlib.c:121 +#: src/dird/fd_cmds.c:695 #, c-format -msgid "Could not Run Python string %s\n" -msgstr "Impossible de lancer la commande Python %s\n" - -#: src/lib/pythonlib.c:133 -msgid "Could not initialize Python Job type.\n" +msgid "" +"Client \"%s\" may not be used to restore this job. Please upgrade your " +"client.\n" msgstr "" -#: src/lib/pythonlib.c:138 +#: src/dird/fd_cmds.c:776 +#, fuzzy +msgid "RestoreObject failed.\n" +msgstr "restauration de fichier" + +#: src/dird/fd_cmds.c:816 #, c-format -msgid "Could not import Python script %s/%s. Python disabled.\n" +msgid "" +"qnext->qprev != qp called from %s:%d\n" -msgstr "" +msgid "Job \"%s\" not found\n" +msgstr "Le job \"%s\" est introuvable\n" + +#: src/dird/ua_run.c:228 +msgid "A job name must be specified.\n" +msgstr "Un nom de Job doit être spécifié.\n" -#: src/lib/smartall.c:206 +#: src/dird/ua_run.c:234 #, c-format -msgid "qp->qprev->qnext != qp called from %s:%d\n" +msgid "No authorization. Job \"%s\".\n" msgstr "" -#: src/lib/smartall.c:215 +#: src/dird/ua_run.c:252 #, c-format -msgid "Overrun buffer: len=%d addr=%p allocated: %s:%d called from %s:%d\n" -msgstr "" +msgid "Pool \"%s\" not found.\n" +msgstr "Le pool \"%s\" est introuvable.\n" -#: src/lib/smartall.c:293 +#: src/dird/ua_run.c:262 #, c-format -msgid "sm_realloc size: %d\n" +msgid "No authorization. Pool \"%s\".\n" msgstr "" -#: src/lib/smartall.c:331 +#: src/dird/ua_run.c:276 #, fuzzy, c-format -msgid "sm_realloc %d at %p from %s:%d\n" -msgstr "Attendait %d en lecture, eu %d de %s:%s:%d\n" +msgid "NextPool \"%s\" not found.\n" +msgstr "Le pool \"%s\" est introuvable.\n" -#: src/lib/smartall.c:391 +#: src/dird/ua_run.c:285 +#, fuzzy, c-format +msgid "No authorization. NextPool \"%s\".\n" +msgstr "Pas d'enregistrement trouvé en base pour : %s\n" + +#: src/dird/ua_run.c:306 src/dird/ua_cmds.c:756 src/dird/ua_cmds.c:1182 #, c-format -msgid "" -"\n" -"Orphaned buffers exist. Dump terminated following\n" -" discovery of bad links in chain of orphaned buffers.\n" -" Buffer address with bad links: %p\n" -msgstr "" +msgid "Client \"%s\" not found.\n" +msgstr "le client \"%s\" est introuvable.\n" -#: src/lib/smartall.c:436 +#: src/dird/ua_run.c:316 src/dird/ua_run.c:336 #, c-format -msgid "Damaged buffer found. Called from %s:%d\n" +msgid "No authorization. Client \"%s\".\n" msgstr "" -#: src/lib/smartall.c:469 +#: src/dird/ua_run.c:326 +#, fuzzy, c-format +msgid "Restore Client \"%s\" not found.\n" +msgstr "le client \"%s\" est introuvable.\n" + +#: src/dird/ua_run.c:355 #, c-format -msgid "" -"\n" -"Damaged buffers found at %s:%d\n" +msgid "FileSet \"%s\" not found.\n" +msgstr "Le FileSet \"%s\" est introuvable.\n" + +#: src/dird/ua_run.c:364 +#, c-format +msgid "No authorization. FileSet \"%s\".\n" msgstr "" -#: src/lib/smartall.c:472 -msgid " discovery of bad prev link.\n" +#: src/dird/ua_run.c:380 src/dird/ua_label.c:177 src/dird/ua_label.c:354 +#: src/dird/ua_label.c:1191 +msgid "command line" msgstr "" -#: src/lib/smartall.c:475 -msgid " discovery of bad next link.\n" +#: src/dird/ua_run.c:383 +#, c-format +msgid "Storage \"%s\" not found.\n" +msgstr "Le Storage \"%s\" est introuvable.\n" + +#: src/dird/ua_run.c:386 src/dird/ua_run.c:661 +msgid "user selection" msgstr "" -#: src/lib/smartall.c:478 -msgid " discovery of data overrun.\n" +#: src/dird/ua_run.c:395 +#, c-format +msgid "No authorization. Storage \"%s\".\n" msgstr "" -#: src/lib/smartall.c:481 -msgid " NULL pointer.\n" -msgstr " pointeur NULL.\n" +#: src/dird/ua_run.c:419 +#, fuzzy +msgid "No JobId specified.\n" +msgstr "Pas de job sélectionné.\n" -#: src/lib/smartall.c:487 -#, c-format -msgid " Buffer address: %p\n" -msgstr " Adresse du buffer : %p\n" +#: src/dird/ua_run.c:433 +#, fuzzy +msgid "Invalid or no Job name specified.\n" +msgstr "Le job est déjà spécifié.\n" -#: src/lib/smartall.c:494 +#: src/dird/ua_run.c:448 +#, fuzzy +msgid "Enter the JobId list to select: " +msgstr "Entrez le JobId à sélectionner : " + +#: src/dird/ua_run.c:464 #, c-format -msgid "Damaged buffer: %6u bytes allocated at line %d of %s %s\n" +msgid "JobId=%d entered is not in the list.\n" msgstr "" -#: src/lib/sellist.c:69 -#, fuzzy -msgid "Negative numbers not permitted.\n" -msgstr "Les nombres négatifs ne sont pas autorisés\n" +#: src/dird/ua_run.c:488 +#, fuzzy, c-format +msgid "Could not get job record for selected JobId=%d. ERR=%s" +msgstr "Impossible de récupérer le Job du JobId=%s : ERR=%s\n" -#: src/lib/sellist.c:106 +#: src/dird/ua_run.c:559 #, fuzzy -msgid "Selection items must be be greater than zero.\n" -msgstr "Les valeurs doivent être supérieurs à zéro.\n" +msgid "Select termination code: " +msgstr "Sélection terminée.\n" -#: src/lib/sellist.c:110 +#: src/dird/ua_run.c:617 src/dird/ua_update.c:593 +msgid "Parameters to modify:\n" +msgstr "Paramètre à modifier :\n" + +#: src/dird/ua_run.c:618 +msgid "Level" +msgstr "Type" + +#: src/dird/ua_run.c:623 #, fuzzy -msgid "Selection item too large.\n" -msgstr "Slot trop grand.\n" +msgid "Restore Client" +msgstr "Restauration annulée" -#: src/lib/sellist.c:167 -msgid "No input string given.\n" -msgstr "" +#: src/dird/ua_run.c:627 +msgid "When" +msgstr "Quand" -#: src/lib/rwlock.c:307 -msgid "rwl_writeunlock called too many times.\n" -msgstr "" +#: src/dird/ua_run.c:628 +msgid "Priority" +msgstr "Priorité" -#: src/lib/rwlock.c:312 -msgid "rwl_writeunlock by non-owner.\n" -msgstr "" +#: src/dird/ua_run.c:638 +#, fuzzy +msgid "NextPool" +msgstr "Pool" -#: src/lib/rwlock.c:437 src/lib/save/devlock.c:501 src/lib/devlock.c:501 -#, c-format -msgid "Thread %d found unchanged elements %d times\n" -msgstr "" +#: src/dird/ua_run.c:640 +msgid "Verify Job" +msgstr "Job de vérification" -#: src/lib/rwlock.c:507 src/lib/save/devlock.c:571 src/lib/devlock.c:571 -#, c-format -msgid "%02d: interval %d, writes %d, reads %d\n" -msgstr "" +#: src/dird/ua_run.c:643 +msgid "Bootstrap" +msgstr "Bootstrap" -#: src/lib/rwlock.c:517 src/lib/save/devlock.c:581 src/lib/devlock.c:581 -#, c-format -msgid "data %02d: value %d, %d writes\n" -msgstr "" +#: src/dird/ua_run.c:644 +msgid "Where" +msgstr "Destination" -#: src/lib/rwlock.c:522 src/lib/save/devlock.c:586 src/lib/devlock.c:586 -#, c-format -msgid "Total: %d thread writes, %d data writes\n" +#: src/dird/ua_run.c:645 +msgid "File Relocation" msgstr "" -#: src/lib/rwlock.c:594 src/lib/save/devlock.c:658 src/lib/devlock.c:658 -msgid "Try write lock" -msgstr "" +#: src/dird/ua_run.c:646 +msgid "Replace" +msgstr "Écrasement" -#: src/lib/rwlock.c:600 src/lib/save/devlock.c:664 src/lib/devlock.c:664 -msgid "Try read lock" -msgstr "" +#: src/dird/ua_run.c:647 +msgid "JobId" +msgstr "JobId" -#: src/lib/rwlock.c:656 src/lib/save/devlock.c:720 src/lib/devlock.c:720 -msgid "Create thread" +#: src/dird/ua_run.c:650 +msgid "Plugin Options" msgstr "" -#: src/lib/rwlock.c:666 src/lib/save/devlock.c:730 src/lib/devlock.c:730 -msgid "Join thread" -msgstr "" +#: src/dird/ua_run.c:652 src/dird/ua_run.c:1027 src/dird/ua_update.c:612 +msgid "Select parameter to modify" +msgstr "Sélectionnez le paramètre à modifier" -#: src/lib/rwlock.c:668 src/lib/save/devlock.c:732 src/lib/devlock.c:732 -#, c-format -msgid "%02d: interval %d, updates %d, r_collisions %d, w_collisions %d\n" +#: src/dird/ua_run.c:693 +msgid "" +"Please enter desired start time as YYYY-MM-DD HH:MM:SS (return for now): " msgstr "" +"Saisissez la date de lancement (YYYY-MM-DD HH:MM:SS) (ou maintenant) : " -#: src/lib/rwlock.c:680 src/lib/save/devlock.c:744 src/lib/devlock.c:744 -#, c-format -msgid "data %02d: value %d, %d updates\n" +#: src/dird/ua_run.c:701 src/dird/ua_run.c:895 +msgid "Invalid time, using current time.\n" msgstr "" -#: src/lib/bget_msg.c:97 -msgid "Status OK\n" -msgstr "Statut OK\n" +#: src/dird/ua_run.c:708 +msgid "Enter new Priority: " +msgstr "Saisissez la nouvelle priorité : " -#: src/lib/bget_msg.c:101 -#, c-format -msgid "bget_msg: unknown signal %d\n" -msgstr "" +#: src/dird/ua_run.c:712 +msgid "Priority must be a positive integer.\n" +msgstr "La priorité doit être un entier positif.\n" -#: src/lib/bsock.c:131 -#, c-format -msgid "" -"Could not connect to %s on %s:%d. ERR=%s\n" -"Retrying ...\n" -msgstr "" -"Impossible de se connecter à %s sur %s:%d. ERR=%s\n" -"Réessaie...\n" +#: src/dird/ua_run.c:733 +msgid "Please enter the Bootstrap file name: " +msgstr "Saisissez le nom du fichier Bootstrap : " -#: src/lib/bsock.c:137 +# Impossible d'ouvrir %s : ERR=%s +#: src/dird/ua_run.c:745 #, c-format -msgid "Unable to connect to %s on %s:%d. ERR=%s\n" -msgstr "Impossible de se connecter à %s sur %s:%d. ERR=%s\n" +msgid "Warning cannot open %s: ERR=%s\n" +msgstr "Impossible d'ouvrir %s : ERR=%s\n" -#: src/lib/bsock.c:207 -#, fuzzy, c-format -msgid "bnet_host2ipaddrs() for host \"%s\" failed: ERR=%s\n" -msgstr "Impossible de supprimer le volume \"%s\". ERR=%s" +#: src/dird/ua_run.c:763 src/dird/ua_run.c:848 src/dird/ua_run.c:853 +#, fuzzy +msgid "Command input" +msgstr "Erreur sur la commande : %s\n" -#: src/lib/bsock.c:260 -#, c-format -msgid "Socket open error. proto=%d port=%d. ERR=%s\n" -msgstr "Ouverture de la socket en erreur. proto=%d port=%d. ERR=%s\n" +#: src/dird/ua_run.c:776 +#, fuzzy +msgid "Please enter the full path prefix for restore (/ for none): " +msgstr "Saisissez le chemin (prefix) pour la restauration (/ pour aucun) : " + +#: src/dird/ua_run.c:798 +msgid "Replace:\n" +msgstr "Écrasement :\n" + +#: src/dird/ua_run.c:802 +msgid "Select replace option" +msgstr "Saisissez l'option d'écrasement" + +#: src/dird/ua_run.c:813 +msgid "" +"You must set the bootstrap file to NULL to be able to specify a JobId.\n" +msgstr "" +"Vous ne devez pas spécifié de fichier bootstrap pour pouvoir utiliser un " +"JobId.\n" -#: src/lib/bsock.c:273 -#, fuzzy, c-format -msgid "Source address bind error. proto=%d. ERR=%s\n" -msgstr "Ouverture de la socket en erreur. proto=%d port=%d. ERR=%s\n" +#: src/dird/ua_run.c:850 src/dird/ua_run.c:855 src/dird/ua_run.c:871 +msgid "User input" +msgstr "" -#: src/lib/bsock.c:284 src/lib/bsock.c:320 src/lib/bnet_server.c:218 +#: src/dird/ua_run.c:925 #, c-format -msgid "Cannot set SO_KEEPALIVE on socket: %s\n" -msgstr "Impossible de positionner SO_KEEPALIVE sur la socket : %s\n" +msgid "Invalid replace option: %s\n" +msgstr "Option d'écrasement (Replace) invalide : %s\n" -#: src/lib/bsock.c:292 -#, fuzzy, c-format -msgid "Cannot set TCP_KEEPIDLE on socket: %s\n" -msgstr "Impossible de positionner SO_KEEPALIVE sur la socket : %s\n" +#: src/dird/ua_run.c:957 +#, fuzzy +msgid "Storage from NextPool override" +msgstr "Sélectionnez le Pool" -#: src/lib/bsock.c:339 +#: src/dird/ua_run.c:969 src/dird/ua_cmds.c:1237 #, fuzzy, c-format -msgid "Could not init bsock mutex. ERR=%s\n" -msgstr "Impossible d'initialiser la queue cliente : ERR=%s\n" +msgid "Level \"%s\" not valid.\n" +msgstr "Le type %s est invalide.\n" -#: src/lib/bsock.c:374 +#: src/dird/ua_run.c:1016 #, c-format -msgid "Socket has errors=%d on call to %s:%s:%d\n" +msgid "strip_prefix=%s add_prefix=%s add_suffix=%s\n" msgstr "" -#: src/lib/bsock.c:381 -#, c-format -msgid "Socket is terminated=%d on call to %s:%s:%d\n" +#: src/dird/ua_run.c:1019 +msgid "This will replace your current Where value\n" msgstr "" -#: src/lib/bsock.c:389 -#, c-format -msgid "Socket has insane msglen=%d on call to %s:%s:%d\n" +#: src/dird/ua_run.c:1020 +msgid "Strip prefix" msgstr "" -#: src/lib/bsock.c:427 -#, fuzzy, c-format -msgid "Write error sending %d bytes to %s:%s:%d: ERR=%s\n" -msgstr "Erreur de lecture de %s:%s:%d : ERR=%s\n" +#: src/dird/ua_run.c:1021 +msgid "Add prefix" +msgstr "" -#: src/lib/bsock.c:433 -#, c-format -msgid "Wrote %d bytes to %s:%s:%d, but only %d accepted.\n" +#: src/dird/ua_run.c:1022 +msgid "Add file suffix" msgstr "" -#: src/lib/bsock.c:522 src/lib/bsock.c:583 -#, c-format -msgid "Read expected %d got %d from %s:%s:%d\n" -msgstr "Attendait %d en lecture, eu %d de %s:%s:%d\n" +#: src/dird/ua_run.c:1023 +msgid "Enter a regexp" +msgstr "" -#: src/lib/bsock.c:542 -#, c-format -msgid "Packet size too big from \"%s:%s:%d. Terminating connection.\n" +#: src/dird/ua_run.c:1024 +msgid "Test filename manipulation" msgstr "" -#: src/lib/bsock.c:572 -#, c-format -msgid "Read error from %s:%s:%d: ERR=%s\n" -msgstr "Erreur de lecture de %s:%s:%d : ERR=%s\n" +#: src/dird/ua_run.c:1025 +msgid "Use this ?" +msgstr "" -#: src/lib/bsock.c:663 +#: src/dird/ua_run.c:1030 #, fuzzy -msgid "fread attr spool I/O error.\n" -msgstr "Erreur pendant l'écriture des attributs dans le spool. ERR=%s\n" +msgid "Please enter the path prefix to strip: " +msgstr "Saisissez le début du chemin (prefix) à enlever : " -#: src/lib/bsock.c:724 +#: src/dird/ua_run.c:1038 #, fuzzy -msgid "Could not malloc BSOCK data buffer\n" -msgstr "Impossible d'ouvrir la base de données \"%s\".\n" +msgid "Please enter the path prefix to add (/ for none): " +msgstr "Saisissez le chemin (prefix) à ajouter (/ pour aucun) : " -#: src/lib/bsock.c:742 src/lib/bsock.c:761 -#, c-format -msgid "sockopt error: %s\n" -msgstr "erreur sockopt : %s\n" +#: src/dird/ua_run.c:1049 +#, fuzzy +msgid "Please enter the file suffix to add: " +msgstr "Saisissez une extention à ajouter aux fichiers : " -#: src/lib/bsock.c:748 src/lib/bsock.c:767 +#: src/dird/ua_run.c:1056 +msgid "Please enter a valid regexp (!from!to!): " +msgstr "Saisissez une regexp valide (!rechercher!remplacer!) : " + +#: src/dird/ua_run.c:1069 #, c-format -msgid "Warning network buffer = %d bytes not max size.\n" +msgid "regexwhere=%s\n" msgstr "" -#: src/lib/bsock.c:787 src/lib/bsock.c:821 -#, fuzzy, c-format -msgid "fcntl F_GETFL error. ERR=%s\n" -msgstr "erreur de fermeture : ERR=%s\n" - -#: src/lib/bsock.c:793 src/lib/bsock.c:827 src/lib/bsock.c:859 -#, fuzzy, c-format -msgid "fcntl F_SETFL error. ERR=%s\n" -msgstr "erreur de fermeture : ERR=%s\n" - -#: src/lib/bsock.c:1032 src/qt-console/bcomm/dircomm_auth.cpp:112 -#, fuzzy, c-format -msgid "Director authorization problem at \"%s:%d\"\n" -msgstr "Pas d'enregistrement trouvé en base pour : %s\n" - -#: src/lib/bsock.c:1039 src/qt-console/bcomm/dircomm_auth.cpp:119 +#: src/dird/ua_run.c:1075 #, c-format -msgid "" -"Authorization problem: Remote server at \"%s:%d\" did not advertise required " -"TLS support.\n" +msgid "strip_prefix=%s add_prefix=%s add_suffix=%s result=%s\n" msgstr "" -#: src/lib/bsock.c:1047 src/qt-console/bcomm/dircomm_auth.cpp:127 -#, c-format -msgid "" -"Authorization problem with Director at \"%s:%d\": Remote server requires " -"TLS.\n" +#: src/dird/ua_run.c:1082 +msgid "Cannot use your regexp\n" +msgstr "Impossible d'utiliser votre regexp\n" + +#: src/dird/ua_run.c:1085 +msgid "Enter a period (.) to stop this test\n" msgstr "" -#: src/lib/bsock.c:1059 src/qt-console/bcomm/dircomm_auth.cpp:138 -#, fuzzy, c-format -msgid "TLS negotiation failed with Director at \"%s:%d\"\n" -msgstr "Négociation TLS échouée avec le SD « %s:%d ».\n" +#: src/dird/ua_run.c:1086 +msgid "Please enter filename to test: " +msgstr "Saisissez un nom de fichier à tester : " -#: src/lib/bsock.c:1069 src/qt-console/bcomm/dircomm_auth.cpp:150 -#, fuzzy, c-format -msgid "" -"Bad response to Hello command: ERR=%s\n" -"The Director at \"%s:%d\" is probably not running.\n" -msgstr "Mauvaise réponse à la commande Hello : ERR=%s\n" +#: src/dird/ua_run.c:1088 +#, c-format +msgid "%s -> %s\n" +msgstr "%s -> %s\n" -#: src/lib/bsock.c:1078 src/qt-console/bcomm/dircomm_auth.cpp:159 -#, fuzzy, c-format -msgid "Director at \"%s:%d\" rejected Hello command\n" -msgstr "Le File Daemon « %s:%d » a rejeté la commande Hello\n" +#: src/dird/ua_run.c:1132 +msgid "Cannot use your regexp.\n" +msgstr "Impossible d'utiliser votre regexp.\n" -#: src/lib/bsock.c:1088 src/qt-console/bcomm/dircomm_auth.cpp:171 -#, fuzzy, c-format -msgid "" -"Authorization problem with Director at \"%s:%d\"\n" -"Most likely the passwords do not agree.\n" -"If you are using TLS, there may have been a certificate validation error " -"during the TLS handshake.\n" -"Please see " -msgstr "" -"Problème d'authentification avec le director.\n" -"Le plus souvent, les mots de pass ne correspondent pas.\n" -"Si vous utilisez TLS, il peut y avoir une erreur de validation du " -"certificat\n" -"pendant l'initialisation de la connexion TLS.\n" -"Vous trouverez de l'aide sur\n" -"http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors\n" +#: src/dird/ua_run.c:1145 src/dird/ua_run.c:1175 +msgid "Levels:\n" +msgstr "Types :\n" -#: src/lib/message.c:362 src/lib/message.c:372 -#, c-format -msgid "Could not open console message file %s: ERR=%s\n" +#: src/dird/ua_run.c:1151 +msgid "VirtualFull" msgstr "" -#: src/lib/message.c:377 -#, c-format -msgid "Could not get con mutex: ERR=%s\n" -msgstr "" +#: src/dird/ua_run.c:1152 src/dird/ua_run.c:1181 +msgid "Select level" +msgstr "Saisissez le type" -#: src/lib/message.c:482 -msgid "Bacula Message" -msgstr "Message de Bacula" +#: src/dird/ua_run.c:1176 +msgid "Initialize Catalog" +msgstr "Initialisez le catalogue" -#: src/lib/message.c:486 -#, c-format -msgid "open mail pipe %s failed: ERR=%s\n" -msgstr "" +#: src/dird/ua_run.c:1180 +msgid "Verify Volume Data (not yet implemented)" +msgstr "Vérification des données sur le volume (pas encore implémenté)" -#: src/lib/message.c:577 -msgid "open mail pipe failed.\n" +#: src/dird/ua_run.c:1201 +msgid "Level not appropriate for this Job. Cannot be changed.\n" msgstr "" -#: src/lib/message.c:590 -#, c-format -msgid "close error: ERR=%s\n" -msgstr "erreur de fermeture : ERR=%s\n" +#: src/dird/ua_run.c:1232 +#, fuzzy, c-format +msgid "" +"Run Admin Job\n" +"JobName: %s\n" +"FileSet: %s\n" +"Client: %s\n" +"Storage: %s\n" +"When: %s\n" +"Priority: %d\n" +msgstr "" +"Lancement du job %s\n" +"JobName : %s\n" +"FileSet : %s\n" +"Client : %s\n" +"Storage : %s\n" +"Quand : %s\n" +"Priorité : %d\n" -#: src/lib/message.c:601 -#, c-format -msgid "Mail prog: %s" +#: src/dird/ua_run.c:1286 +#, fuzzy, c-format +msgid "" +"Run Backup job\n" +"JobName: %s\n" +"Level: %s\n" +"Client: %s\n" +"FileSet: %s\n" +"Pool: %s (From %s)\n" +"%sStorage: %s (From %s)\n" +"When: %s\n" +"Priority: %d\n" msgstr "" +"Lancement du job %s\n" +"JobName : %s\n" +"Niveau : %s\n" +"Client : %s\n" +"FileSet : %s\n" +"Pool : %s (Depuis %s)\n" +"Storage : %s (Depuis %s)\n" +"Quand : %s\n" +"Priorité : %d\n" -#: src/lib/message.c:610 -#, c-format +#: src/dird/ua_run.c:1315 +#, fuzzy, c-format +msgid "Could not get job record for selected JobId. ERR=%s" +msgstr "Impossible de récupérer le Job du JobId=%s : ERR=%s\n" + +#: src/dird/ua_run.c:1354 +#, fuzzy, c-format msgid "" -"Mail program terminated in error.\n" -"CMD=%s\n" -"ERR=%s\n" +"Run Verify Job\n" +"JobName: %s\n" +"Level: %s\n" +"Client: %s\n" +"FileSet: %s\n" +"Pool: %s (From %s)\n" +"Storage: %s (From %s)\n" +"Verify Job: %s\n" +"Verify List: %s\n" +"When: %s\n" +"Priority: %d\n" msgstr "" -"La commande mail s'est terminée en erreur.\n" -"CMD=%s\n" -"ERR=%s\n" +"Lancement du job %s\n" +"JobName : %s\n" +"Niveau : %s\n" +"Client : %s\n" +"FileSet : %s\n" +"Pool : %s (Depuis %s)\n" +"Storage : %s (Depuis %s)\n" +"Verify Job : %s\n" +"Verify List: %s\n" +"Quand : %s\n" +"Priorité : %d\n" -#: src/lib/message.c:713 -#, c-format -msgid "fopen %s failed: ERR=%s\n" -msgstr "fopen %s en erreur : ERR=%s\n" +#: src/dird/ua_run.c:1383 +msgid "Please enter a JobId for restore: " +msgstr "Saisissez le JobId pour la restauration : " -#: src/lib/message.c:835 src/lib/message.c:838 -msgid "Msg delivery error: Unable to store data in database.\n" +#: src/dird/ua_run.c:1421 +#, fuzzy, c-format +msgid "" +"Run Restore job\n" +"JobName: %s\n" +"Bootstrap: %s\n" +"RegexWhere: %s\n" +"Replace: %s\n" +"FileSet: %s\n" +"Backup Client: %s\n" +"Restore Client: %s\n" +"Storage: %s\n" +"When: %s\n" +"Catalog: %s\n" +"Priority: %d\n" msgstr "" +"Lancement de la restauration\n" +"JobName : %s\n" +"Bootstrap : %s\n" +"RegexWhere : %s\n" +"Écrasement : %s\n" +"FileSet : %s\n" +"Backup Client : %s\n" +"Restore Client : %s\n" +"Storage : %s\n" +"Quand : %s\n" +"Catalogue : %s\n" +"Priorité : %d\n" -#: src/lib/message.c:890 +#: src/dird/ua_run.c:1473 #, fuzzy, c-format msgid "" -"Msg delivery error: Operator mail program terminated in error.\n" -"CMD=%s\n" -"ERR=%s\n" +"Run Restore job\n" +"JobName: %s\n" +"Bootstrap: %s\n" +"Where: %s\n" +"Replace: %s\n" +"FileSet: %s\n" +"Backup Client: %s\n" +"Restore Client: %s\n" +"Storage: %s\n" +"When: %s\n" +"Catalog: %s\n" +"Priority: %d\n" msgstr "" -"La commande mail s'est terminée en erreur.\n" -"CMD=%s\n" -"ERR=%s\n" - -#: src/lib/message.c:911 -#, fuzzy, c-format -msgid "Msg delivery error: fopen %s failed: ERR=%s\n" -msgstr "fopen %s en erreur : ERR=%s\n" +"Lancement de la restauration\n" +"JobName : %s\n" +"Bootstrap : %s\n" +"Déplacement : %s\n" +"Écrasement : %s\n" +"FileSet : %s\n" +"Backup Client : %s\n" +"Restore Client : %s\n" +"Storage : %s\n" +"Quand : %s\n" +"Catalogue : %s\n" +"Priorité : %d\n" +"Options Plugins: %s\n" -#: src/lib/message.c:1230 +#: src/dird/ua_run.c:1502 #, c-format -msgid "%s: ABORTING due to ERROR in %s:%d\n" +msgid "" +"Run Restore job\n" +"JobName: %s\n" +"Bootstrap: %s\n" msgstr "" +"Lancement de la restauration\n" +"JobName : %s\n" +"Bootstrap : %s\n" -#: src/lib/message.c:1234 +#: src/dird/ua_run.c:1510 #, c-format -msgid "%s: ERROR TERMINATION at %s:%d\n" +msgid "RegexWhere: %s\n" msgstr "" -#: src/lib/message.c:1239 -#, c-format -msgid "%s: Fatal Error because: " -msgstr "%s : Erreur Fatale car : " - -#: src/lib/message.c:1241 -#, c-format -msgid "%s: Fatal Error at %s:%d because:\n" -msgstr "%s : Erreur Fatale à %s:%d car :\n" - -#: src/lib/message.c:1245 +#: src/dird/ua_run.c:1513 #, c-format -msgid "%s: ERROR: " -msgstr "%s : ERREUR : " +msgid "Where: %s\n" +msgstr "Where : %s\n" -#: src/lib/message.c:1247 -#, c-format -msgid "%s: ERROR in %s:%d " -msgstr "%s : ERREUR dans %s:%d " +#: src/dird/ua_run.c:1517 +#, fuzzy, c-format +msgid "" +"Replace: %s\n" +"Client: %s\n" +"Storage: %s\n" +"JobId: %s\n" +"When: %s\n" +"Catalog: %s\n" +"Priority: %d\n" +msgstr "" +"Écrasement : %s\n" +"Client : %s\n" +"Storage : %s\n" +"JobId : %s\n" +"Quand : %s\n" +"Catalogue : %s\n" +"Priorité : %d\n" +"Options Plugins : %s\n" -#: src/lib/message.c:1250 -#, c-format -msgid "%s: Warning: " -msgstr "%s : Attention : " +#: src/dird/ua_run.c:1572 +#, fuzzy +msgid "Run Copy job\n" +msgstr "Sélectionnez le Job de restauration" -#: src/lib/message.c:1253 -#, c-format -msgid "%s: Security violation: " -msgstr "" +#: src/dird/ua_run.c:1574 +#, fuzzy +msgid "Run Migration job\n" +msgstr "Sélectionnez le Job de restauration" -#: src/lib/message.c:1341 +#: src/dird/ua_run.c:1606 #, c-format -msgid "%s ABORTING due to ERROR\n" -msgstr "" +msgid "Unknown Job Type=%d\n" +msgstr "Job du Type=%d inconnu\n" -#: src/lib/message.c:1344 +#: src/dird/ua_run.c:1680 #, c-format -msgid "%s ERROR TERMINATION\n" +msgid "Value missing for keyword %s\n" msgstr "" -#: src/lib/message.c:1347 -#, fuzzy, c-format -msgid "%s JobId %u: Fatal error: " -msgstr "%s : %s Erreur fatale : " - -#: src/lib/message.c:1356 -#, fuzzy, c-format -msgid "%s JobId %u: Error: " -msgstr "%s : %s Erreur : " +#: src/dird/ua_run.c:1690 +msgid "JobId specified twice.\n" +msgstr "Le JobId est déjà spécifié.\n" -#: src/lib/message.c:1362 -#, fuzzy, c-format -msgid "%s JobId %u: Warning: " -msgstr "%s : Attention : " +#: src/dird/ua_run.c:1699 src/dird/ua_run.c:1839 +msgid "Client specified twice.\n" +msgstr "Le client est déjà spécifié.\n" -#: src/lib/message.c:1368 -#, c-format -msgid "%s JobId %u: Security violation: " -msgstr "" +#: src/dird/ua_run.c:1707 +msgid "FileSet specified twice.\n" +msgstr "Le FileSet est déjà spécifié.\n" -#: src/lib/bnet_server.c:125 -#, c-format -msgid "Cannot open stream socket. ERR=%s. Current %s All %s\n" -msgstr "" +#: src/dird/ua_run.c:1715 +msgid "Level specified twice.\n" +msgstr "Le type (Level) est déjà spécifié.\n" -#: src/lib/bnet_server.c:138 -#, c-format -msgid "Cannot set SO_REUSEADDR on socket: %s\n" -msgstr "Impossible de positionner l'option SO_REUSEADDR sur la socket : %s\n" +#: src/dird/ua_run.c:1724 +msgid "Storage specified twice.\n" +msgstr "Le Storage est déjà spécifié.\n" -#: src/lib/bnet_server.c:147 -#, c-format -msgid "Cannot bind port %d: ERR=%s: Retrying ...\n" -msgstr "Impossible de s'attacher au port %d : ERR=%s : Réessaie...\n" +#: src/dird/ua_run.c:1732 +msgid "RegexWhere or Where specified twice.\n" +msgstr "RegexWhere ou Where est déjà spécifiée.\n" -#: src/lib/bnet_server.c:152 -#, c-format -msgid "Cannot bind port %d: ERR=%s.\n" -msgstr "Impossible de s'attacher au port %d : ERR=%s.\n" +#: src/dird/ua_run.c:1737 +#, fuzzy +msgid "No authorization for \"regexwhere\" specification.\n" +msgstr "La destination (Where) est déjà spécifiée.\n" -#: src/lib/bnet_server.c:163 -#, c-format -msgid "Could not init client queue: ERR=%s\n" -msgstr "Impossible d'initialiser la queue cliente : ERR=%s\n" +#: src/dird/ua_run.c:1744 +msgid "Where or RegexWhere specified twice.\n" +msgstr "RegexWhere ou Where est déjà spécifiée.\n" -#: src/lib/bnet_server.c:182 -#, c-format -msgid "Error in select: %s\n" -msgstr "Erreur sur le select : %s\n" +#: src/dird/ua_run.c:1749 +#, fuzzy +msgid "No authoriztion for \"where\" specification.\n" +msgstr "Pas d'enregistrement trouvé en base pour : %s\n" -#: src/lib/bnet_server.c:203 -#, c-format -msgid "Connection from %s:%d refused by hosts.access\n" -msgstr "Connexion depuis %s:%d refusée par hosts.access\n" +#: src/dird/ua_run.c:1756 +msgid "Bootstrap specified twice.\n" +msgstr "Le bootstrap est déjà spécifié.\n" -#: src/lib/bnet_server.c:229 -msgid "Could not create client BSOCK.\n" -msgstr "Impossible de créer la structure BSOCK cliente.\n" +#: src/dird/ua_run.c:1764 +msgid "Replace specified twice.\n" +msgstr "L'option d'écrasement (Replace) est déjà spécifié.\n" -#: src/lib/bnet_server.c:236 -#, c-format -msgid "Could not add job to client queue: ERR=%s\n" -msgstr "Impossible d'ajouter le job à la queue cliente : ERR=%s\n" +#: src/dird/ua_run.c:1772 +msgid "When specified twice.\n" +msgstr "La planification (When) est déjà spécifiée.\n" -#: src/lib/bnet_server.c:253 -#, c-format -msgid "Could not destroy client queue: ERR=%s\n" -msgstr "Impossible de détruire la queue cliente : ERR=%s\n" +#: src/dird/ua_run.c:1780 +msgid "Priority specified twice.\n" +msgstr "La priorité (Priority) est déjà spécifiée.\n" -#: src/lib/bpipe.c:361 src/lib/bpipe.c:444 -msgid "Program killed by Bacula (timeout)\n" +#: src/dird/ua_run.c:1785 +msgid "Priority must be positive nonzero setting it to 10.\n" msgstr "" +"La priorité doit être supérieure à zéro. Utilisation d'une priorité de 10.\n" -#: src/lib/lockmgr.c:65 -#, c-format -msgid "ASSERT failed at %s:%i: %s\n" +#: src/dird/ua_run.c:1795 +msgid "Verify Job specified twice.\n" msgstr "" -#: src/lib/lockmgr.c:70 -#, c-format -msgid "ASSERT failed at %s:%i: %s \n" +#: src/dird/ua_run.c:1823 +msgid "Migration Job specified twice.\n" msgstr "" -#: src/lib/lockmgr.c:100 -#, fuzzy, c-format -msgid "Mutex lock failure. ERR=%s\n" -msgstr "Erreur sur l'ouverture du périphérique. ERR=%s\n" +#: src/dird/ua_run.c:1831 +msgid "Pool specified twice.\n" +msgstr "Le pool est déjà spécifié.\n" -#: src/lib/lockmgr.c:110 -#, fuzzy, c-format -msgid "Mutex unlock failure. ERR=%s\n" -msgstr "rwl_writeunlock en échec sur %s:%d :. ERR=%s\n" +#: src/dird/ua_run.c:1847 +#, fuzzy +msgid "Restore Client specified twice.\n" +msgstr "Le client est déjà spécifié.\n" -#: src/lib/lockmgr.c:275 src/lib/lockmgr.c:611 src/lib/lockmgr.c:639 -#: src/lib/jcr.c:321 -#, c-format -msgid "pthread key create failed: ERR=%s\n" -msgstr "erreur sur pthread_key_create. ERR=%s\n" +#: src/dird/ua_run.c:1854 +#, fuzzy +msgid "Plugin Options not yet implemented.\n" +msgstr "Le client est déjà spécifié.\n" -#: src/lib/lockmgr.c:623 -#, fuzzy, c-format -msgid "pthread_create failed: ERR=%s\n" -msgstr "Erreur sur l'ouverture du périphérique. ERR=%s\n" +#: src/dird/ua_run.c:1857 +#, fuzzy +msgid "Plugin Options specified twice.\n" +msgstr "Le client est déjà spécifié.\n" -#: src/lib/crypto.c:442 -msgid "Unable to open certificate file" -msgstr "Impossible d'ouvrir de fichier de certificat" +#: src/dird/ua_run.c:1862 +#, fuzzy +msgid "No authoriztion for \"PluginOptions\" specification.\n" +msgstr "Pas d'enregistrement trouvé en base pour : %s\n" -#: src/lib/crypto.c:449 -msgid "Unable to read certificate from file" -msgstr "Impossible de lire le certificat à partir du fichier" +#: src/dird/ua_run.c:1869 +#, fuzzy +msgid "Spool flag specified twice.\n" +msgstr "Le pool est déjà spécifié.\n" -#: src/lib/crypto.c:455 -msgid "Unable to extract public key from certificate" -msgstr "Impossible d'extraire la clef publique à partir du certificat" +#: src/dird/ua_run.c:1876 +#, fuzzy +msgid "Invalid spooldata flag.\n" +msgstr "Période invalide.\n" -#: src/lib/crypto.c:462 -msgid "" -"Provided certificate does not include the required subjectKeyIdentifier " -"extension." -msgstr "" -"Le certificat fournis n'inclus pas l'extension subjectKeyIdentifier requise" +#: src/dird/ua_run.c:1885 +#, fuzzy +msgid "IgnoreDuplicateCheck flag specified twice.\n" +msgstr "Le pool est déjà spécifié.\n" -#: src/lib/crypto.c:469 -#, c-format -msgid "Unsupported key type provided: %d\n" -msgstr "Type de clef fourni non supporté : %d\n" +#: src/dird/ua_run.c:1892 +#, fuzzy +msgid "Invalid ignoreduplicatecheck flag.\n" +msgstr "Période invalide.\n" -#: src/lib/crypto.c:506 src/lib/crypto.c:554 -msgid "Unable to open private key file" -msgstr "Impossible d'ouvrir le fichier de clef privée" +#: src/dird/ua_run.c:1897 +#, fuzzy +msgid "Accurate flag specified twice.\n" +msgstr "Le pool est déjà spécifié.\n" -#: src/lib/crypto.c:536 src/lib/crypto.c:570 -msgid "Unable to read private key from file" -msgstr "Impossible de lire la clef privée à partir du fichier" +#: src/dird/ua_run.c:1904 +#, fuzzy +msgid "Invalid accurate flag.\n" +msgstr "Période invalide.\n" -#: src/lib/crypto.c:629 -#, c-format -msgid "Unsupported digest type: %d\n" -msgstr "Le digest spécifié n'est pas supporté : %d\n" +#: src/dird/ua_run.c:1909 +msgid "Job name specified twice.\n" +msgstr "Le job est déjà spécifié.\n" -#: src/lib/crypto.c:643 -msgid "OpenSSL digest initialization failed" -msgstr "" +#: src/dird/ua_run.c:1917 +#, fuzzy +msgid "Media Type specified twice.\n" +msgstr "L'option d'écrasement (Replace) est déjà spécifié.\n" -#: src/lib/crypto.c:657 -msgid "OpenSSL digest update failed" -msgstr "" +#: src/dird/ua_run.c:1925 +#, fuzzy +msgid "NextPool specified twice.\n" +msgstr "Le pool est déjà spécifié.\n" + +#: src/dird/ua_run.c:1950 +#, c-format +msgid "Invalid keyword: %s\n" +msgstr "Argument invalide : %s\n" -#: src/lib/crypto.c:675 -msgid "OpenSSL digest finalize failed" -msgstr "Initialisation du digest OpenSSL à échoué" +#: src/dird/ua_run.c:1965 +#, c-format +msgid "Catalog \"%s\" not found\n" +msgstr "Le catalogue \"%s\" est introuvable\n" -#: src/lib/crypto.c:773 -msgid "OpenSSL digest_new failed" +#: src/dird/ua_run.c:1969 +#, c-format +msgid "No authorization. Catalog \"%s\".\n" msgstr "" -#: src/lib/crypto.c:779 -msgid "OpenSSL sign get digest failed" +#: src/dird/ua_run.c:2003 +#, c-format +msgid "Verify Job \"%s\" not found.\n" msgstr "" -#: src/lib/crypto.c:818 src/lib/crypto.c:822 -#, fuzzy -msgid "OpenSSL digest Verify final failed" -msgstr "Initialisation du contexte clef/IV du cipher OpenSSL à échoué" - -#: src/lib/crypto.c:827 -#, fuzzy -msgid "No signers found for crypto verify.\n" -msgstr "Aucun volume trouvé pour la restauration.\n" +#: src/dird/ua_run.c:2013 +#, c-format +msgid "Migration Job \"%s\" not found.\n" +msgstr "" -#: src/lib/crypto.c:888 -msgid "Signature creation failed" -msgstr "La création de la signature a échouée" +#: src/dird/ua_label.c:92 +msgid "Negative numbers not permitted\n" +msgstr "Les nombres négatifs ne sont pas autorisés\n" -#: src/lib/crypto.c:966 -msgid "Signature decoding failed" -msgstr "Le décodage de la signature a échoué" +#: src/dird/ua_label.c:121 +msgid "Values must be be greater than zero.\n" +msgstr "Les valeurs doivent être supérieurs à zéro.\n" -#: src/lib/crypto.c:1043 -msgid "Unsupported cipher type specified\n" -msgstr "Le cipher spécifié est non supporté\n" +#: src/dird/ua_label.c:125 +msgid "Slot too large.\n" +msgstr "Slot trop grand.\n" -#: src/lib/crypto.c:1192 -msgid "CryptoData decoding failed" -msgstr "Le décodage du CryptoData a échoué" +#: src/dird/ua_label.c:195 src/dird/ua_label.c:518 src/dird/ua_label.c:1198 +msgid "No slots in changer to scan.\n" +msgstr "Pas de slot dans le magasin à scanner.\n" -#: src/lib/crypto.c:1236 -msgid "Failure decrypting the session key" -msgstr "Impossible de décrypter la clef de session" +#: src/dird/ua_label.c:207 src/dird/ua_label.c:529 +msgid "No Volumes found to label, or no barcodes.\n" +msgstr "Pas de volume à labéliser ou pas de codebar.\n" -#: src/lib/crypto.c:1287 +#: src/dird/ua_label.c:217 src/dird/ua_label.c:1219 #, c-format -msgid "Unsupported contentEncryptionAlgorithm: %d\n" -msgstr "contentEncryptionAlgorithm non supporté : %d\n" +msgid "Slot %d greater than max %d ignored.\n" +msgstr "Le slot %d est ignoré car il est supérieur au maximum %d.\n" -#: src/lib/crypto.c:1297 src/lib/crypto.c:1303 -msgid "OpenSSL cipher context initialization failed" -msgstr "Initialisation du contexte clef/IV du cipher OpenSSL à échoué" +#: src/dird/ua_label.c:255 +#, c-format +msgid "No VolName for Slot=%d InChanger set to zero.\n" +msgstr "Pas de volume sur le Slot %d. Mise à zéro de InChanger.\n" -#: src/lib/crypto.c:1310 -msgid "Encryption session provided an invalid symmetric key" +#: src/dird/ua_label.c:276 +#, c-format +msgid "Catalog record for Volume \"%s\" updated to reference slot %d.\n" msgstr "" +"Mise à jour des informations du volume \"%s\" dans le catalogue (Slot=%d).\n" -#: src/lib/crypto.c:1316 -msgid "Encryption session provided an invalid IV" -msgstr "" +#: src/dird/ua_label.c:280 +#, c-format +msgid "Catalog record for Volume \"%s\" is up to date.\n" +msgstr "Le volume \"%s\" est à jour dans le catalogue.\n" -#: src/lib/crypto.c:1322 -msgid "OpenSSL cipher context key/IV initialization failed" +#: src/dird/ua_label.c:286 +#, c-format +msgid "Volume \"%s\" not found in catalog. Slot=%d InChanger set to zero.\n" msgstr "" +"Volume \"%s\" absent du catalogue. mise à zéro de InChanger pour le Slot=" +"%d.\n" -#: src/lib/crypto.c:1392 +#: src/dird/ua_label.c:383 #, c-format -msgid "Unable to init OpenSSL threading: ERR=%s\n" -msgstr "Impossible d'initialiser le thread OpenSSL : ERR=%s\n" - -#: src/lib/crypto.c:1405 -msgid "Failed to seed OpenSSL PRNG\n" +msgid "" +"Volume \"%s\" has VolStatus %s. It must be Purged or Recycled before " +"relabeling.\n" msgstr "" +"Le volume \"%s\" (VolStatus) a le statut \"%s\". Il doit être purgé ou bien\n" +"recyclé avant de pouvoir le re-labéliser.\n" -#: src/lib/crypto.c:1431 -msgid "Failed to save OpenSSL PRNG\n" -msgstr "Impossible de sauvegarder le PRNG OpenSSL\n" - -#: src/lib/crypto.c:1492 -#, fuzzy, c-format -msgid "Unsupported digest type=%d specified\n" -msgstr "Le cipher spécifié est non supporté\n" +#: src/dird/ua_label.c:399 +msgid "Enter new Volume name: " +msgstr "Saisissez le nouveau nom du Volume : " -#: src/lib/crypto.c:1512 +#: src/dird/ua_label.c:412 #, c-format -msgid "SHA1Update() returned an error: %d\n" -msgstr "" - -#: src/lib/crypto.c:1655 -msgid "No error" -msgstr "Pas d'erreur" +msgid "Media record for new Volume \"%s\" already exists.\n" +msgstr "Le nouveau volume \"%s\" existe déjà en base.\n" -#: src/lib/crypto.c:1657 -#, fuzzy -msgid "Signer not found" -msgstr "Le Storage \"%s\" est introuvable.\n" +#: src/dird/ua_label.c:430 +msgid "Enter slot (0 or Enter for none): " +msgstr "Saisissez le slot (0 ou Entrée pour aucun) : " -#: src/lib/crypto.c:1659 -#, fuzzy -msgid "Recipient not found" -msgstr "Ressource %s introuvable\n" +#: src/dird/ua_label.c:458 +#, c-format +msgid "Delete of Volume \"%s\" failed. ERR=%s" +msgstr "Impossible de supprimer le volume \"%s\". ERR=%s" -#: src/lib/crypto.c:1661 -#, fuzzy -msgid "Unsupported digest algorithm" -msgstr "Le digest spécifié n'est pas supporté : %d\n" +#: src/dird/ua_label.c:461 +#, c-format +msgid "Old volume \"%s\" deleted from catalog.\n" +msgstr "L'ancien volume \"%s\" a été supprimé du catalogue.\n" -#: src/lib/crypto.c:1663 -#, fuzzy -msgid "Unsupported encryption algorithm" -msgstr "contentEncryptionAlgorithm non supporté : %d\n" +#: src/dird/ua_label.c:472 +#, c-format +msgid "Requesting to mount %s ...\n" +msgstr "Demande pour monter %s...\n" -#: src/lib/crypto.c:1665 -#, fuzzy -msgid "Signature is invalid" -msgstr "La création de la signature a échouée" +#: src/dird/ua_label.c:494 +msgid "Do not forget to mount the drive!!!\n" +msgstr "N'oubliez pas de monter le lecteur.\n" -#: src/lib/crypto.c:1667 -msgid "Decryption error" +#: src/dird/ua_label.c:534 +msgid "" +"The following Volumes will be labeled:\n" +"Slot Volume\n" +"==============\n" msgstr "" +"Les volumes suivants vont être labélisés :\n" +"Slot Volume\n" +"==============\n" -#: src/lib/crypto.c:1670 -msgid "Internal error" -msgstr "Erreur interne" - -#: src/lib/crypto.c:1672 -msgid "Unknown error" -msgstr "Erreur inconnue." - -#: src/lib/cram-md5.c:109 src/lib/cram-md5.c:137 -msgid "1999 Authorization failed.\n" +#: src/dird/ua_label.c:543 +#, fuzzy +msgid "Do you want to label these Volumes? (yes|no): " msgstr "" +"\n" +"Voulez vous restaurer tous les fichiers ? (oui|non) : " -#: src/lib/priv.c:68 +#: src/dird/ua_label.c:563 #, c-format -msgid "Could not find userid=%s: ERR=%s\n" -msgstr "Impossible de trouver le userid %s : ERR=%s\n" +msgid "Media record for Slot %d Volume \"%s\" already exists.\n" +msgstr "" -#: src/lib/priv.c:74 -#, fuzzy, c-format -msgid "Could not find password entry. ERR=%s\n" -msgstr "Impossible de trouver le client %s : ERR=%s\n" +#: src/dird/ua_label.c:569 +#, c-format +msgid "Error setting InChanger: ERR=%s" +msgstr "Impossible de positionner le flag InChanger : ERR=%s" -#: src/lib/priv.c:87 +#: src/dird/ua_label.c:592 #, c-format -msgid "Could not find group=%s: ERR=%s\n" -msgstr "Impossible de trouver le groupe=%s : ERR=%s\n" +msgid "Maximum pool Volumes=%d reached.\n" +msgstr "Le nombre maximum de volume (%d) pour ce pool est atteint.\n" -#: src/lib/priv.c:95 +#: src/dird/ua_label.c:600 #, c-format -msgid "Could not initgroups for group=%s, userid=%s: ERR=%s\n" +msgid "Catalog record for cleaning tape \"%s\" successfully created.\n" msgstr "" -"Impossible d'utiliser initgroups pour le groupe=%s, userid=%s: ERR=%s\n" -"\n" - -#: src/lib/priv.c:98 -#, fuzzy, c-format -msgid "Could not initgroups for userid=%s: ERR=%s\n" -msgstr "Impossible d'ouvrir %s : ERR=%s\n" -#: src/lib/priv.c:105 -#, fuzzy, c-format -msgid "Could not set group=%s: ERR=%s\n" -msgstr "Impossible d'ouvrir %s : ERR=%s\n" +#: src/dird/ua_label.c:607 +#, c-format +msgid "Catalog error on cleaning tape: %s" +msgstr "" -#: src/lib/priv.c:115 -#, fuzzy, c-format -msgid "prctl failed: ERR=%s\n" -msgstr "Erreur sur l'ouverture du périphérique. ERR=%s\n" +#: src/dird/ua_label.c:643 +#, c-format +msgid "Illegal character \"%c\" in a volume name.\n" +msgstr "Caractères « %c » interdits dans le nom d'un volume.\n" -#: src/lib/priv.c:119 -#, fuzzy, c-format -msgid "setreuid failed: ERR=%s\n" -msgstr "fopen %s en erreur : ERR=%s\n" +#: src/dird/ua_label.c:650 src/dird/ua_cmds.c:341 +msgid "Volume name too long.\n" +msgstr "Nom de Volume trop long.\n" -#: src/lib/priv.c:123 -#, fuzzy, c-format -msgid "cap_from_text failed: ERR=%s\n" -msgstr "fopen %s en erreur : ERR=%s\n" +#: src/dird/ua_label.c:690 +#, c-format +msgid "Sending relabel command from \"%s\" to \"%s\" ...\n" +msgstr "Envoie de la commande pour re-labéliser de \"%s\" à \"%s\"...\n" -#: src/lib/priv.c:127 -#, fuzzy, c-format -msgid "cap_set_proc failed: ERR=%s\n" -msgstr "Erreur sur l'ouverture du périphérique. ERR=%s\n" +#: src/dird/ua_label.c:697 +#, c-format +msgid "Sending label command for Volume \"%s\" Slot %d ...\n" +msgstr "Demande de labélisation du volume \"%s\" Slot %d...\n" -#: src/lib/priv.c:131 -msgid "Keep readall caps not implemented this OS or missing libraries.\n" +#: src/dird/ua_label.c:738 +#, c-format +msgid "Catalog record for Volume \"%s\", Slot %d successfully created.\n" msgstr "" -#: src/lib/priv.c:135 +#: src/dird/ua_label.c:751 #, c-format -msgid "Could not set specified userid: %s\n" -msgstr "" +msgid "Label command failed for Volume %s.\n" +msgstr "Impossible de labéliser le volume %s.\n" -#: src/lib/openssl.c:143 src/lib/openssl.c:214 +#: src/dird/ua_label.c:765 +msgid "Could not open SD socket.\n" +msgstr "Impossible d'ouvrir la socket avec le SD.\n" + +#: src/dird/ua_label.c:837 src/dird/ua_label.c:847 #, c-format -msgid "Unable to destroy mutex: ERR=%s\n" -msgstr "Impossible de détruire le mutex : ERR=%s\n" +msgid "Invalid Slot number: %s\n" +msgstr "Numéro de slot invalide : %s\n" -#: src/lib/util.c:183 -msgid "Running" -msgstr "En cours" +#: src/dird/ua_label.c:856 +#, c-format +msgid "Invalid Volume name: %s\n" +msgstr "Nom de Volume invalide : %s\n" -#: src/lib/util.c:186 -msgid "Blocked" -msgstr "Bloqué" +#: src/dird/ua_label.c:950 +#, c-format +msgid "Device \"%s\" has %d slots.\n" +msgstr "Le Device \"%s\" a %d slots.\n" -#: src/lib/util.c:192 -msgid "Error: incomplete job" -msgstr "" +#: src/dird/ua_label.c:996 +#, c-format +msgid "Pool \"%s\" resource not found for volume \"%s\"!\n" +msgstr "La ressource Pool \"%s\" est introuvable pour le volume \"%s\"\n" -#: src/lib/util.c:199 -msgid "Non-fatal error" -msgstr "Erreur non fatale" +#: src/dird/ua_label.c:1210 +#, fuzzy +msgid "No Volumes found, or no barcodes.\n" +msgstr "Pas de volume à labéliser ou pas de codebar.\n" -#: src/lib/util.c:205 src/lib/util.c:337 -msgid "Canceled" -msgstr "Annulé" +#: src/dird/ua_label.c:1213 +msgid "" +" Slot | Volume Name | Status | Media Type | " +"Pool |\n" +msgstr "" -#: src/lib/util.c:208 -msgid "Verify differences" -msgstr "Vérification des différences" +#: src/dird/ua_label.c:1214 +msgid "" +"------+------------------+-----------+----------------------" +"+--------------------|\n" +msgstr "" -#: src/lib/util.c:211 -msgid "Waiting on FD" -msgstr "En attente du FD" +#: src/dird/ua_cmds.c:95 +#, fuzzy +msgid "Add media to a pool" +msgstr "ajouter un média dans un pool" -#: src/lib/util.c:214 -msgid "Wait on SD" -msgstr "En attente du SD" +#: src/dird/ua_cmds.c:96 +#, fuzzy +msgid "Autodisplay console messages" +msgstr "autodisplay [on|off] -- messages de la console" -#: src/lib/util.c:217 -msgid "Wait for new Volume" -msgstr "En attente d'un nouveau Volume" +#: src/dird/ua_cmds.c:97 +msgid "Automount after label" +msgstr "" -#: src/lib/util.c:220 -msgid "Waiting for mount" -msgstr "En attente d'un montage" +#: src/dird/ua_cmds.c:98 +#, fuzzy +msgid "Cancel a job" +msgstr "Annulé" -#: src/lib/util.c:223 -msgid "Waiting for Storage resource" -msgstr "En attente du Storage" +#: src/dird/ua_cmds.c:99 +#, fuzzy +msgid "Create DB Pool from resource" +msgstr "Pool à partir de sa définition" -#: src/lib/util.c:226 -msgid "Waiting for Job resource" -msgstr "" +#: src/dird/ua_cmds.c:100 +#, fuzzy +msgid "Delete volume, pool or job" +msgstr "met à jour un volume, un pool ou bien des slots" -#: src/lib/util.c:229 -msgid "Waiting for Client resource" +#: src/dird/ua_cmds.c:101 +msgid "Disable a job, attributes batch process" msgstr "" -#: src/lib/util.c:232 -msgid "Waiting on Max Jobs" +#: src/dird/ua_cmds.c:102 +msgid "Enable a job, attributes batch process" msgstr "" -#: src/lib/util.c:235 -msgid "Waiting for Start Time" +#: src/dird/ua_cmds.c:103 +#, fuzzy +msgid "Performs FileSet estimate, listing gives full listing" msgstr "" +"estimate -- estime un FileSet (listing donne la liste des fichiers)" -#: src/lib/util.c:238 -msgid "Waiting on Priority" +#: src/dird/ua_cmds.c:106 src/dird/ua_cmds.c:130 +msgid "Terminate Bconsole session" msgstr "" -#: src/lib/util.c:257 -#, c-format -msgid "Unknown Job termination status=%d" -msgstr "" +#: src/dird/ua_cmds.c:107 +#, fuzzy +msgid "Non-interactive gui mode" +msgstr "gui [on|off] -- mode non interactif (pour interface graphique)" -#: src/lib/util.c:273 +#: src/dird/ua_cmds.c:108 #, fuzzy -msgid "Completed successfully" -msgstr "Restauration effectuée." +msgid "Print help on specific command" +msgstr "affiche cette commande" -#: src/lib/util.c:276 -msgid "Completed with warnings" -msgstr "Terminé avec des avertissements" +#: src/dird/ua_cmds.c:113 +#, fuzzy +msgid "Label a tape" +msgstr "labéliser une bande" -#: src/lib/util.c:279 -msgid "Terminated with errors" -msgstr "Terminé avec des erreurs" +#: src/dird/ua_cmds.c:114 +#, fuzzy +msgid "List objects from catalog" +msgstr "purge les enregistrements du catalogue" -#: src/lib/util.c:282 -msgid "Fatal error" -msgstr "Erreur fatale" +#: src/dird/ua_cmds.c:118 +msgid "Full or long list like list command" +msgstr "" -#: src/lib/util.c:285 -msgid "Created, not yet running" -msgstr "Créé, mais non démarré" +#: src/dird/ua_cmds.c:121 +#, fuzzy +msgid "Display pending messages" +msgstr "Message de Bacula" -#: src/lib/util.c:288 -msgid "Canceled by user" -msgstr "Annulé par l'utilisateur" +#: src/dird/ua_cmds.c:122 +#, fuzzy +msgid "Print current memory usage" +msgstr "affiche la consommation mémoire courante" -#: src/lib/util.c:291 +#: src/dird/ua_cmds.c:123 #, fuzzy -msgid "Verify found differences" -msgstr "Vérification des différences" +msgid "Mount storage" +msgstr "unmount -- démonte un lecteur" -#: src/lib/util.c:294 -msgid "Waiting for File daemon" -msgstr "En attente du client" +#: src/dird/ua_cmds.c:126 +#, fuzzy +msgid "Prune expired records from catalog" +msgstr "purge les entrées expirées du catalogue" -#: src/lib/util.c:297 -msgid "Waiting for Storage daemon" -msgstr "En attente du Storage" +#: src/dird/ua_cmds.c:129 +#, fuzzy +msgid "Purge records from catalog" +msgstr "purge les enregistrements du catalogue" -#: src/lib/util.c:300 -msgid "Waiting for higher priority jobs" -msgstr "Attend qu'un job plus prioritaire se termine" +#: src/dird/ua_cmds.c:131 +#, fuzzy +msgid "Query catalog" +msgstr "interroger le catalogue" -#: src/lib/util.c:303 -msgid "Batch inserting file records" -msgstr "Mise à jour du catalogue" +#: src/dird/ua_cmds.c:132 +#, fuzzy +msgid "Restore files" +msgstr "restauration de fichier" -#: src/lib/util.c:334 -msgid "Fatal Error" -msgstr "Erreur Fatale" +#: src/dird/ua_cmds.c:137 +#, fuzzy +msgid "Relabel a tape" +msgstr "re-labélise une bande" -#: src/lib/util.c:340 -msgid "Differences" -msgstr "" +#: src/dird/ua_cmds.c:140 +#, fuzzy +msgid "Release storage" +msgstr "Restaurer" -#: src/lib/util.c:343 -msgid "Unknown term code" -msgstr "" +#: src/dird/ua_cmds.c:141 +#, fuzzy +msgid "Reload conf file" +msgstr "recharge la configuration" -#: src/lib/util.c:359 src/lib/jcr.c:232 -msgid "Backup" -msgstr "Backup" +#: src/dird/ua_cmds.c:142 +#, fuzzy +msgid "Run a job" +msgstr "Job en cours :\n" -#: src/lib/util.c:362 +#: src/dird/ua_cmds.c:147 #, fuzzy -msgid "Migrated Job" -msgstr "Migrer" +msgid "Report status" +msgstr "Statut :\n" -#: src/lib/util.c:365 -msgid "Verify" -msgstr "Vérifier" +#: src/dird/ua_cmds.c:150 +#, fuzzy +msgid "Stop a job" +msgstr "Job en cours :\n" -#: src/lib/util.c:368 src/wx-console/wxbrestorepanel.cpp:404 -#: src/wx-console/wxbrestorepanel.cpp:2000 -msgid "Restore" -msgstr "Restaurer" +#: src/dird/ua_cmds.c:151 +#, fuzzy +msgid "Sets debug level" +msgstr "positionne le niveau de debug" -#: src/lib/util.c:371 src/wx-console/wxbmainframe.cpp:276 -msgid "Console" +#: src/dird/ua_cmds.c:154 +msgid "Sets bandwidth" msgstr "" -#: src/lib/util.c:374 -msgid "System or Console" +#: src/dird/ua_cmds.c:157 +msgid "Sets new client address -- if authorized" msgstr "" -#: src/lib/util.c:377 -msgid "Admin" -msgstr "Admin" - -#: src/lib/util.c:380 src/lib/util.c:470 -msgid "Archive" -msgstr "Archiver" - -#: src/lib/util.c:383 +#: src/dird/ua_cmds.c:158 #, fuzzy -msgid "Job Copy" -msgstr "Copier" +msgid "Show resource records" +msgstr "Pool à partir de sa définition" -#: src/lib/util.c:386 -msgid "Copy" -msgstr "Copier" +#: src/dird/ua_cmds.c:161 +#, fuzzy +msgid "Use SQL to query catalog" +msgstr "passer des commandes SQL pour interroger le catalogue" -#: src/lib/util.c:389 -msgid "Migrate" -msgstr "Migrer" +#: src/dird/ua_cmds.c:162 +#, fuzzy +msgid "Print current time" +msgstr "affiche la date courante" -#: src/lib/util.c:392 -msgid "Scan" -msgstr "" +#: src/dird/ua_cmds.c:163 +#, fuzzy +msgid "Turn on/off trace to file" +msgstr "active/désactive le fichier de trace" -#: src/lib/util.c:396 -msgid "Unknown Type" +#: src/dird/ua_cmds.c:164 +msgid "Truncate one or more Volumes" msgstr "" -#: src/lib/util.c:406 -msgid "Truncate" -msgstr "" +#: src/dird/ua_cmds.c:165 +#, fuzzy +msgid "Unmount storage" +msgstr "unmount -- démonte un lecteur" -#: src/lib/util.c:409 src/filed/restore.c:1164 -msgid "None" -msgstr "" +#: src/dird/ua_cmds.c:168 +#, fuzzy +msgid "Umount - for old-time Unix guys, see unmount" +msgstr "umount -- démonte un lecteur" -#: src/lib/util.c:441 -msgid "Verify Init Catalog" -msgstr "" +#: src/dird/ua_cmds.c:171 +#, fuzzy +msgid "Update volume, pool or stats" +msgstr "met à jour un volume, un pool ou bien des slots" -#: src/lib/util.c:450 -msgid "Verify Data" -msgstr "" +#: src/dird/ua_cmds.c:178 +#, fuzzy +msgid "Use catalog xxx" +msgstr "interroger le catalogue" -#: src/lib/util.c:453 -msgid "Virtual Full" +#: src/dird/ua_cmds.c:179 +msgid "Does variable expansion" msgstr "" -#: src/lib/util.c:469 -msgid "Append" -msgstr "" +#: src/dird/ua_cmds.c:180 +#, fuzzy +msgid "Print Director version" +msgstr "affiche la version du Director" -#: src/lib/util.c:471 +#: src/dird/ua_cmds.c:181 #, fuzzy -msgid "Disabled" -msgstr "est bloqué" +msgid "Wait until no jobs are running" +msgstr "Aucun de vos jobs ne sont en cours.\n" -#: src/lib/util.c:473 -msgid "Used" -msgstr "" +#: src/dird/ua_cmds.c:234 +#, c-format +msgid "%s: is an invalid command.\n" +msgstr "%s : est une commande invalide.\n" -#: src/lib/util.c:474 -msgid "Cleaning" +#: src/dird/ua_cmds.c:275 +msgid "" +"You probably don't want to be using this command since it\n" +"creates database records without labeling the Volumes.\n" +"You probably want to use the \"label\" command.\n" +"\n" msgstr "" -#: src/lib/util.c:475 -msgid "Purged" -msgstr "" +#: src/dird/ua_cmds.c:293 +#, c-format +msgid "Pool already has maximum volumes=%d\n" +msgstr "Le pool a déjà atteint le nombre maximum de volume=%d\n" -#: src/lib/util.c:476 -#, fuzzy -msgid "Recycle" -msgstr "RecyclePool" +#: src/dird/ua_cmds.c:294 +msgid "Enter new maximum (zero for unlimited): " +msgstr "Entrez le nouveau maximum (zéro pour illimité) : " -#: src/lib/util.c:477 -msgid "Read-Only" -msgstr "" +#: src/dird/ua_cmds.c:314 +#, c-format +msgid "Enter number of Volumes to create. 0=>fixed name. Max=%d: " +msgstr "Entrez le nombre de Volume à créer. 0=>nom fixé. Max=%d : " -#: src/lib/util.c:489 -#, fuzzy -msgid "Invalid volume status" -msgstr "Nom de Volume invalide : %s\n" +#: src/dird/ua_cmds.c:320 +#, c-format +msgid "The number must be between 0 and %d\n" +msgstr "Le nombre doit être entre 0 et %d\n" -#: src/lib/util.c:753 src/lib/util.c:763 src/lib/util.c:771 src/lib/util.c:778 -#: src/lib/util.c:785 src/lib/util.c:799 src/lib/util.c:809 src/lib/util.c:822 -#: src/lib/util.c:833 src/filed/restore.c:1180 -msgid "*none*" -msgstr "" +#: src/dird/ua_cmds.c:328 +msgid "Enter Volume name: " +msgstr "Entrez le nom du Volume : " + +#: src/dird/ua_cmds.c:332 +msgid "Enter base volume name: " +msgstr "Entrez le nom de base du volume : " + +#: src/dird/ua_cmds.c:356 +msgid "Enter the starting number: " +msgstr "Entrez le nombre de départ : " + +#: src/dird/ua_cmds.c:361 +msgid "Start number must be greater than zero.\n" +msgstr "Le nombre de départ doit être supérieur à zéro.\n" + +#: src/dird/ua_cmds.c:372 +msgid "Enter slot (0 for none): " +msgstr "Saisissez le slot (0 pour aucun) : " + +#: src/dird/ua_cmds.c:376 +msgid "InChanger? yes/no: " +msgstr "InChanger ? oui/non : " + +#: src/dird/ua_cmds.c:404 +#, c-format +msgid "%d Volumes created in pool %s\n" +msgstr "%d Volumes créés dans le pool %s\n" -#: src/lib/util.c:867 -msgid "Working directory not defined. Cannot continue.\n" -msgstr "" +#: src/dird/ua_cmds.c:420 src/dird/ua_cmds.c:1131 +msgid "Turn on or off? " +msgstr "Activer ou désactiver ? (on/off) " -#: src/lib/util.c:870 +#: src/dird/ua_cmds.c:547 #, c-format -msgid "Working Directory: \"%s\" not found. Cannot continue.\n" +msgid "" +"Can't set %s RecyclePool to %s, %s is not in database.\n" +"Try to update it with 'update pool=%s'\n" msgstr "" -#: src/lib/util.c:874 +#: src/dird/ua_cmds.c:565 #, c-format -msgid "Working Directory: \"%s\" is not a directory. Cannot continue.\n" +msgid "" +"Can't set %s ScratchPool to %s, %s is not in database.\n" +"Try to update it with 'update pool=%s'\n" msgstr "" -#: src/lib/save/devlock.c:330 src/lib/devlock.c:330 -msgid "writeunlock called too many times.\n" +#: src/dird/ua_cmds.c:632 +#, c-format +msgid "" +"Error: Pool %s already exists.\n" +"Use update to change it.\n" msgstr "" +"Erreur : Pool %s est déjà défini.\n" +"Utilisez update pour le changer\n" -#: src/lib/save/devlock.c:335 src/lib/devlock.c:335 -msgid "writeunlock by non-owner.\n" -msgstr "" +#: src/dird/ua_cmds.c:643 +#, c-format +msgid "Pool %s created.\n" +msgstr "Pool %s créé.\n" -#: src/lib/daemon.c:65 -#, fuzzy, c-format -msgid "Cannot fork to become daemon: ERR=%s\n" -msgstr "Impossible de forker pour passer en mode démon : %s\n" +#: src/dird/ua_cmds.c:671 +#, fuzzy +msgid "Failed to set bandwidth limit to Client.\n" +msgstr "Impossible de se connecter au Client.\n" -#: src/lib/tls.c:90 +#: src/dird/ua_cmds.c:674 #, c-format -msgid "" -"Error with certificate at depth: %d, issuer = %s, subject = %s, ERR=%d:%s\n" +msgid "2000 OK Limiting bandwidth to %lldkb/s %s\n" msgstr "" -#: src/lib/tls.c:127 -msgid "Error initializing SSL context" -msgstr "Erreur pendant l'initialisation du contexte SSL" +#: src/dird/ua_cmds.c:675 +msgid "on running and future jobs" +msgstr "" -#: src/lib/tls.c:148 -msgid "Error loading certificate verification stores" +#: src/dird/ua_cmds.c:697 +msgid "Set Bandwidth choice:\n" msgstr "" -#: src/lib/tls.c:153 -msgid "" -"Either a certificate file or a directory must be specified as a verification " -"store\n" +#: src/dird/ua_cmds.c:698 +#, fuzzy +msgid "Running Job" msgstr "" +"\n" +"Job en cours :\n" -#: src/lib/tls.c:164 -msgid "Error loading certificate file" -msgstr "Erreur dans le chargement du certificat" +#: src/dird/ua_cmds.c:699 +msgid "Running and future Jobs for a Client" +msgstr "" -#: src/lib/tls.c:172 -msgid "Error loading private key" -msgstr "Erreur dans le chargement de la clef privée" +#: src/dird/ua_cmds.c:700 +msgid "Choose where to limit the bandwidth" +msgstr "" -#: src/lib/tls.c:180 -msgid "Unable to open DH parameters file" -msgstr "Impossible d'ouvrir le fichier de paramètre DH" +#: src/dird/ua_cmds.c:712 +#, fuzzy +msgid "Enter new bandwidth limit kb/s: " +msgstr "Saisissez la valeur du nombre maximum de Job : " -#: src/lib/tls.c:186 -msgid "Unable to load DH parameters from specified file" -msgstr "Impossible de charger les paramètres DH à partir du fichier spécifié" +#: src/dird/ua_cmds.c:749 src/dird/ua_cmds.c:809 +msgid "Unauthorized command from this console.\n" +msgstr "Commande interdite depuis cette console.\n" -#: src/lib/tls.c:190 -msgid "Failed to set TLS Diffie-Hellman parameters" -msgstr "Impossible de positionner les paramètres TLS Diffie-Hellman" +#: src/dird/ua_cmds.c:766 +#, c-format +msgid "Client \"%s\" address set to %s\n" +msgstr "Client \"%s\" adresse positionné à %s\n" -#: src/lib/tls.c:200 -msgid "Error setting cipher list, no valid ciphers available\n" +#: src/dird/ua_cmds.c:780 +#, c-format +msgid "Job Attributes Insertion %sabled\n" msgstr "" -#: src/lib/tls.c:259 -msgid "Peer failed to present a TLS certificate\n" +#: src/dird/ua_cmds.c:813 +#, c-format +msgid "Job \"%s\" %sabled\n" msgstr "" -#: src/lib/tls.c:304 +#: src/dird/ua_cmds.c:1005 +msgid "Enter new debug level: " +msgstr "Saisissez le nouveau niveau de debug : " + +#: src/dird/ua_cmds.c:1018 #, c-format -msgid "Peer %s failed to present a TLS certificate\n" +msgid "Incorrect tags found on command line %s\n" msgstr "" -#: src/lib/tls.c:416 -msgid "Error creating file descriptor-based BIO" +#: src/dird/ua_cmds.c:1095 +msgid "All" msgstr "" -#: src/lib/tls.c:427 -msgid "Error creating new SSL object" -msgstr "Erreur pendant la création d'un nouvel objet SSL" - -#: src/lib/tls.c:491 src/lib/tls.c:514 -msgid "Connect failure" -msgstr "Erreur de connexion" +#: src/dird/ua_cmds.c:1096 +msgid "Select daemon type to set debug level" +msgstr "Sélectionnez le composant a mettre à jour" -#: src/lib/tls.c:594 src/lib/tls.c:598 -msgid "TLS shutdown failure." +#: src/dird/ua_cmds.c:1191 +msgid "Client name missing.\n" msgstr "" -#: src/lib/tls.c:653 src/lib/tls.c:679 -msgid "TLS read/write failure." +#: src/dird/ua_cmds.c:1203 src/dird/ua_cmds.c:1270 src/dird/ua_cmds.c:2016 +#, c-format +msgid "No authorization for Job \"%s\"\n" msgstr "" -#: src/lib/jcr.c:234 -msgid "Verifying" -msgstr "Vérification" +#: src/dird/ua_cmds.c:1208 +msgid "Job name missing.\n" +msgstr "" -#: src/lib/jcr.c:236 -msgid "Restoring" -msgstr "Restauration" +#: src/dird/ua_cmds.c:1217 +#, fuzzy, c-format +msgid "Fileset \"%s\" not found.\n" +msgstr "Le FileSet \"%s\" est introuvable.\n" -#: src/lib/jcr.c:238 -msgid "Archiving" -msgstr "Archivage" +#: src/dird/ua_cmds.c:1221 +#, fuzzy, c-format +msgid "No authorization for FileSet \"%s\"\n" +msgstr "Pas d'enregistrement trouvé en base pour : %s\n" -#: src/lib/jcr.c:240 -msgid "Copying" -msgstr "Copier" +#: src/dird/ua_cmds.c:1226 +msgid "Fileset name missing.\n" +msgstr "" -#: src/lib/jcr.c:242 -msgid "Migration" -msgstr "Migrer" +#: src/dird/ua_cmds.c:1241 +msgid "Level value missing.\n" +msgstr "" -#: src/lib/jcr.c:244 +#: src/dird/ua_cmds.c:1248 #, fuzzy -msgid "Scanning" -msgstr "En cours" - -#: src/lib/jcr.c:246 -msgid "Unknown operation" -msgstr "Opération inconnue" - -#: src/lib/jcr.c:255 -msgid "backup" -msgstr "backup" - -#: src/lib/jcr.c:257 -msgid "verified" -msgstr "vérifié" - -#: src/lib/jcr.c:257 -msgid "verify" -msgstr "Vérifier" - -#: src/lib/jcr.c:259 -msgid "restored" -msgstr "Restauré" +msgid "Invalid value for accurate. It must be yes or no.\n" +msgstr "Saisie invalide. Veuillez répondre oui ou non.\n" -#: src/lib/jcr.c:259 -msgid "restore" -msgstr "restaurer" +#: src/dird/ua_cmds.c:1253 +#, fuzzy +msgid "Accurate value missing.\n" +msgstr "La valeur actuelle est : %s\n" -#: src/lib/jcr.c:261 -msgid "archived" -msgstr "archivé" +#: src/dird/ua_cmds.c:1266 +msgid "No job specified.\n" +msgstr "Pas de job sélectionné.\n" -#: src/lib/jcr.c:261 -msgid "archive" -msgstr "archiver" +#: src/dird/ua_cmds.c:1326 +msgid "Error sending include list.\n" +msgstr "Erreur pendant l'envoi de la liste d'inclusion.\n" -#: src/lib/jcr.c:263 -msgid "copied" -msgstr "copié" +#: src/dird/ua_cmds.c:1331 +msgid "Error sending exclude list.\n" +msgstr "Erreur pendant l'envoi de la liste d'exclusion.\n" -#: src/lib/jcr.c:263 -msgid "copy" -msgstr "copier" +#: src/dird/ua_cmds.c:1422 +msgid "" +"In general it is not a good idea to delete either a\n" +"Pool or a Volume since they may contain data.\n" +"\n" +msgstr "" +"Généralement supprimer un pool ou bien un volume\n" +"n'est pas une bonne idée car ils peuvent contenir des données.\n" +"\n" -#: src/lib/jcr.c:265 -msgid "migrated" -msgstr "migrer" +#: src/dird/ua_cmds.c:1425 +msgid "Choose catalog item to delete" +msgstr "Choisissez l'objet du catalogue à supprimer" -#: src/lib/jcr.c:265 -msgid "migrate" -msgstr "migré" +#: src/dird/ua_cmds.c:1436 +msgid "Nothing done.\n" +msgstr "Rien de fait.\n" -#: src/lib/jcr.c:267 -msgid "scanned" -msgstr "scanné" +#: src/dird/ua_cmds.c:1464 +#, fuzzy, c-format +msgid "Are you sure you want to delete %d JobIds ? (yes/no): " +msgstr "Êtes vous certain de vouloir supprimer ce Pool ? (oui/non) : " -#: src/lib/jcr.c:267 -msgid "scan" -msgstr "scanner" +#: src/dird/ua_cmds.c:1474 +msgid "Enter JobId to delete: " +msgstr "Saisissez le JobId à supprimer : " -#: src/lib/jcr.c:269 -msgid "unknown action" -msgstr "action inconnue" +#: src/dird/ua_cmds.c:1492 +#, fuzzy, c-format +msgid "Jobid %s and associated records deleted from the catalog.\n" +msgstr "" +"Le Job %s et les enregistrements associés ont été supprimés du catalogue.\n" -#: src/lib/jcr.c:343 +#: src/dird/ua_cmds.c:1507 #, c-format -msgid "pthread_once failed. ERR=%s\n" -msgstr "erreur sur pthread_once. ERR=%s\n" +msgid "" +"\n" +"This command will delete volume %s\n" +"and all Jobs saved on that volume from the Catalog\n" +msgstr "" +"\n" +"Cette commande va supprimer le Volume %s\n" +"et tous les Jobs sauvegardés sur celui-ci du Catalogue\n" -#: src/lib/jcr.c:350 +#: src/dird/ua_cmds.c:1514 #, fuzzy, c-format -msgid "Could not init msg_queue mutex. ERR=%s\n" -msgstr "Impossible d'initialiser la queue cliente : ERR=%s\n" - -#: src/lib/jcr.c:403 -msgid "NULL jcr.\n" -msgstr "NULL jcr.\n" +msgid "Are you sure you want to delete Volume \"%s\"? (yes/no): " +msgstr "Êtes vous certain de vouloir supprimer ce Volume ? (oui/non) : " -#: src/lib/jcr.c:509 -#, c-format -msgid "JCR use_count=%d JobId=%d\n" -msgstr "JCR use_count=%d JobId=%d\n" +#: src/dird/ua_cmds.c:1527 +msgid "Can't list jobs on this volume\n" +msgstr "" -#: src/lib/jcr.c:619 +#: src/dird/ua_cmds.c:1552 #, fuzzy, c-format -msgid "pthread_setspecific failed: ERR=%s\n" -msgstr "Erreur sur l'ouverture du périphérique. ERR=%s\n" +msgid "Are you sure you want to delete Pool \"%s\"? (yes/no): " +msgstr "Êtes vous certain de vouloir supprimer ce Pool ? (oui/non) : " -#: src/lib/jcr.c:1103 +#: src/dird/ua_cmds.c:1666 #, c-format -msgid "" -"Watchdog sending kill after %d secs to thread stalled reading Storage " -"daemon.\n" -msgstr "" -"Le watchdog a envoyé un signal après %d secs au thread bloqué en écoute du " -"SD.\n" +msgid "Using Catalog name=%s DB=%s\n" +msgstr "Utilisation du Catalogue name=%s DB=%s\n" -#: src/lib/jcr.c:1115 -#, c-format -msgid "" -"Watchdog sending kill after %d secs to thread stalled reading File daemon.\n" +#: src/dird/ua_cmds.c:1734 +msgid "ERR: Can't open db\n" msgstr "" -"Le watchdog a envoyé un signal après %d secs au thread bloqué en écoute du " -"FD.\n" -#: src/lib/jcr.c:1127 -#, c-format -msgid "" -"Watchdog sending kill after %d secs to thread stalled reading Director.\n" +#: src/dird/ua_cmds.c:1781 +msgid "Wait on mount timed out\n" msgstr "" -"Le watchdog a envoyé un signal après %d secs au thread bloqué en écoute du " -"Director.\n" - -#: src/lib/res.c:65 -#, c-format -msgid "rwl_writelock failure at %s:%d: ERR=%s\n" -msgstr "rwl_writelock en échec sur %s:%d : ERR=%s\n" -#: src/lib/res.c:75 -#, c-format -msgid "rwl_writeunlock failure at %s:%d:. ERR=%s\n" -msgstr "rwl_writeunlock en échec sur %s:%d :. ERR=%s\n" +#: src/dird/ua_cmds.c:1791 +msgid "ERR: Job was not found\n" +msgstr "ERR: Job %s non trouvé\n" -#: src/lib/parse_conf.c:177 -msgid "***UNKNOWN***" +#: src/dird/ua_cmds.c:1867 +#, fuzzy +msgid "" +" Command Description\n" +" ======= ===========\n" msgstr "" +" Commande Description\n" +" ======== ===========\n" -#: src/lib/parse_conf.c:278 src/lib/parse_conf.c:299 -#, c-format -msgid "expected an =, got: %s" -msgstr "attendait un =, eu : %s" - -#: src/lib/parse_conf.c:308 +#: src/dird/ua_cmds.c:1871 #, c-format -msgid "Unknown item code: %d\n" +msgid "" +" %-13s %s\n" +"\n" +"Arguments:\n" +"\t%s\n" msgstr "" -#: src/lib/parse_conf.c:348 -#, c-format -msgid "message type: %s not found" -msgstr "" +#: src/dird/ua_cmds.c:1876 +#, fuzzy, c-format +msgid " %-13s %s\n" +msgstr " %-10s %s\n" + +#: src/dird/ua_cmds.c:1880 +#, fuzzy, c-format +msgid "" +"\n" +"Can't find %s command.\n" +"\n" +msgstr ": est une commande invalide.\n" -#: src/lib/parse_conf.c:386 -#, c-format -msgid "Attempt to redefine name \"%s\" to \"%s\"." +#: src/dird/ua_cmds.c:1882 +msgid "" +"\n" +"When at a prompt, entering a period cancels the command.\n" +"\n" msgstr "" +"\n" +"Sur une question, tapez un point (.) pour annuler la commande en cours.\n" -#: src/lib/parse_conf.c:483 +#: src/dird/ua_cmds.c:1918 src/filed/status.c:77 #, c-format -msgid "Attempt to redefine resource \"%s\" referenced on line %d : %s\n" +msgid "%s Version: %s (%s) %s %s %s %s\n" msgstr "" -#: src/lib/parse_conf.c:519 +#: src/dird/ua_cmds.c:1977 src/dird/ua_cmds.c:2004 src/dird/ua_cmds.c:2026 #, c-format -msgid "Too many %s directives. Max. is %d. line %d: %s\n" +msgid "No authorization for Catalog \"%s\"\n" msgstr "" -#: src/lib/parse_conf.c:530 +#: src/dird/ua_cmds.c:2083 #, c-format -msgid "Could not find config Resource \"%s\" referenced on line %d : %s\n" -msgstr "Impossible de trouver la ressource \"%s\" utilisée ligne %d : %s\n" +msgid "Could not open catalog database \"%s\".\n" +msgstr "Impossible d'ouvrir le catalogue \"%s\".\n" -#: src/lib/parse_conf.c:593 +#: src/dird/ua_cmds.c:2102 #, c-format -msgid "Missing config Resource \"%s\" referenced on line %d : %s\n" -msgstr "Impossible de trouver la ressource \"%s\" utilisée ligne %d : %s\n" +msgid "Using Catalog \"%s\"\n" +msgstr "Utilisation du Catalogue \"%s\"\n" -#: src/lib/parse_conf.c:665 -#, c-format -msgid "expected a size number, got: %s" -msgstr "attendait une taille, eu : %s" +#: src/dird/backup.c:94 +msgid "No Storage specification found in Job or Pool.\n" +msgstr "Pas de Storage défini dans le Job ou le Pool.\n" -#: src/lib/parse_conf.c:670 +#: src/dird/backup.c:254 #, fuzzy, c-format -msgid "expected a speed number, got: %s" -msgstr "attendait une taille, eu : %s" +msgid "Using BaseJobId(s): %s\n" +msgstr "Migration utilisant JobId=%s Job=%s\n" -#: src/lib/parse_conf.c:681 -#, fuzzy, c-format -msgid "expected a %s, got: %s" -msgstr "attendait un =, eu : %s" +#: src/dird/backup.c:264 +#, fuzzy +msgid "Cannot find previous jobids.\n" +msgstr "Impossible de trouver la ressource Job \"%s\"\n" -#: src/lib/parse_conf.c:682 -msgid "size" +#: src/dird/backup.c:278 +msgid "Sending Accurate information to the FD.\n" msgstr "" -#: src/lib/parse_conf.c:682 -msgid "speed" -msgstr "" +#: src/dird/backup.c:435 +#, c-format +msgid "Start Backup JobId %s, Job=%s\n" +msgstr "Démarrage du backup JobId %s, Job=%s\n" -#: src/lib/parse_conf.c:803 +#: src/dird/backup.c:640 #, c-format -msgid "Expected a Tape Label keyword, got: %s" -msgstr "Attendait un Label de lecteur, a pas : %s" +msgid "Unexpected Client Job message: %s\n" +msgstr "" -#: src/lib/parse_conf.c:886 +#: src/dird/backup.c:653 #, c-format -msgid "Unable to initialize resource lock. ERR=%s\n" +msgid "Network error with FD during %s: ERR=%s\n" msgstr "" -#: src/lib/parse_conf.c:894 -#, fuzzy -msgid "Config filename too long.\n" -msgstr "Nom de Volume trop long.\n" +#: src/dird/backup.c:687 +msgid "No Job status returned from FD.\n" +msgstr "Impossible de récupérer le statut du Job depuis le FD.\n" -#: src/lib/parse_conf.c:917 +#: src/dird/backup.c:847 #, c-format -msgid "Cannot open config file \"%s\": %s\n" -msgstr "Impossible d'ouvrir le fichier de configuration \"%s\" : %s\n" +msgid " Base files/Used files: %lld/%lld (%.2f%%)\n" +msgstr "" -#: src/lib/parse_conf.c:934 +#: src/dird/backup.c:858 +#, fuzzy, c-format msgid "" -"Currently we cannot handle UTF-16 source files. Please convert the conf file " -"to UTF-8\n" +"%s %s %s (%s):\n" +" Build OS: %s %s %s\n" +" JobId: %d\n" +" Job: %s\n" +" Backup Level: %s%s\n" +" Client: \"%s\" %s\n" +" FileSet: \"%s\" %s\n" +" Pool: \"%s\" (From %s)\n" +" Catalog: \"%s\" (From %s)\n" +" Storage: \"%s\" (From %s)\n" +" Scheduled time: %s\n" +" Start time: %s\n" +" End time: %s\n" +" Elapsed time: %s\n" +" Priority: %d\n" +" FD Files Written: %s\n" +" SD Files Written: %s\n" +" FD Bytes Written: %s (%sB)\n" +" SD Bytes Written: %s (%sB)\n" +" Rate: %.1f KB/s\n" +" Software Compression: %s\n" +"%s VSS: %s\n" +" Encryption: %s\n" +" Accurate: %s\n" +" Volume name(s): %s\n" +" Volume Session Id: %d\n" +" Volume Session Time: %d\n" +" Last Volume Bytes: %s\n" +" Non-fatal FD errors: %d\n" +" SD Errors: %d\n" +" FD termination status: %s\n" +" SD termination status: %s\n" +" Termination: %s\n" +"\n" msgstr "" +"%s %s %s (%s): %s\n" +" Build OS : %s %s %s\n" +" JobId : %d\n" +" Job : %s\n" +" Niveau de backup : %s%s\n" +" Client : \"%s\" %s\n" +" FileSet : \"%s\" %s\n" +" Pool : \"%s\" (Depuis %s)\n" +" Catalog: \"%s\" (Depuis %s)\n" +" Storage : \"%s\" (Depuis %s)\n" +" Date prévue : %s\n" +" Date de début : %s\n" +" Date de fin : %s\n" +" Temps écoulé : %s\n" +" Priorité : %d\n" +" Fichiers écrits FD : %s\n" +" Fichiers écrits SD : %s\n" +" Octets écrits FD : %s (%so)\n" +" Octets écrits SD : %s (%so)\n" +" Débit : %.1f Ko/s\n" +" Compression logicielle : %s\n" +" VSS : %s\n" +" Cryptage : %s\n" +" Accurate : %s\n" +" Nom des Volumes : %s\n" +" Volume Session Id : %d\n" +" Volume Session date : %d\n" +" Taille du volume : %s (%so)\n" +" Erreurs FD non fatales : %d\n" +" Erreurs du SD : %d\n" +" Statut de fin du FD : %s\n" +" Statut de fin du SD : %s\n" +" Statut de fin : %s\n" +"\n" -#: src/lib/parse_conf.c:938 -#, c-format -msgid "Expected a Resource name identifier, got: %s" -msgstr "Attendait un identifiant de Ressource, a pas : %s" - -#: src/lib/parse_conf.c:954 -#, c-format -msgid "expected resource name, got: %s" -msgstr "attendait un nom de ressource, eu : %s" - -#: src/lib/parse_conf.c:965 +#: src/dird/backup.c:959 #, c-format -msgid "not in resource definition: %s" +msgid "Could not get Job Volume Parameters to update Bootstrap file. ERR=%s\n" msgstr "" -#: src/lib/parse_conf.c:990 +#: src/dird/backup.c:995 #, c-format msgid "" -"Keyword \"%s\" not permitted in this resource.\n" -"Perhaps you left the trailing brace off of the previous resource." +"Could not open WriteBootstrap file:\n" +"%s: ERR=%s\n" msgstr "" +"Impossible d'ouvrir le fichier bootstrap (WriteBootstrap) :\n" +"%s : ERR=%s\n" -#: src/lib/parse_conf.c:1001 -msgid "Name not specified for resource" +#: src/dird/ua_tree.c:62 +#, fuzzy +msgid "add dir/file to be restored recursively, wildcards allowed" msgstr "" +"marque récursivement les fichiers/répertoires pour être restaurés, les " +"jokers (*) fonctionnent" -#: src/lib/parse_conf.c:1011 -#, c-format -msgid "unexpected token %d %s in resource definition" -msgstr "mot clés inattendu %d %s dans la définition de la ressource" +#: src/dird/ua_tree.c:63 +msgid "change current directory" +msgstr "change le répertoire courant" -#: src/lib/parse_conf.c:1017 -#, c-format -msgid "Unknown parser state %d\n" -msgstr "" +#: src/dird/ua_tree.c:64 +msgid "count marked files in and below the cd" +msgstr "compte le nombre de fichiers marqués à partir du répertoire courant" -#: src/lib/parse_conf.c:1022 -msgid "End of conf file reached with unclosed resource." -msgstr "" +#: src/dird/ua_tree.c:65 +#, fuzzy +msgid "delete dir/file to be restored recursively in dir" +msgstr "dé-sélectionne les fichiers/répertoires récursivement" -#: src/lib/mem_pool.c:112 -#, c-format -msgid "MemPool index %d larger than max %d\n" -msgstr "" +#: src/dird/ua_tree.c:66 src/dird/ua_tree.c:67 +msgid "long list current directory, wildcards allowed" +msgstr "liste détaillée du répertoire courant, les jocker (*) fonctionnent" -#: src/lib/mem_pool.c:130 src/lib/mem_pool.c:150 src/lib/mem_pool.c:186 -#: src/lib/mem_pool.c:257 src/lib/mem_pool.c:277 src/lib/mem_pool.c:312 -#: src/lib/mem_pool.c:623 -#, c-format -msgid "Out of memory requesting %d bytes\n" -msgstr "Plus de mémoire à l'allocation de %d octets\n" +#: src/dird/ua_tree.c:68 +msgid "leave file selection mode" +msgstr "sort de la sélection des fichiers" -#: src/lib/mem_pool.c:167 -msgid "obuf is NULL\n" -msgstr "" +#: src/dird/ua_tree.c:69 +msgid "estimate restore size" +msgstr "estime la taille de la restauration" -#: src/lib/berrno.c:63 -msgid "Child exited normally." -msgstr "" +#: src/dird/ua_tree.c:70 +msgid "same as done command" +msgstr "synonyme de la commande « done »" -#: src/lib/berrno.c:70 -msgid "Unknown error during program execvp" -msgstr "" +#: src/dird/ua_tree.c:71 +msgid "find files, wildcards allowed" +msgstr "recherche des fichiers, les jokers (*) fonctionnent" -#: src/lib/berrno.c:73 -#, c-format -msgid "Child exited with code %d" -msgstr "" +#: src/dird/ua_tree.c:72 src/dird/ua_tree.c:85 src/dird/ua_tree.c:86 +msgid "print help" +msgstr "affiche l'aide" -#: src/lib/berrno.c:81 -#, c-format -msgid "Child died from signal %d: %s" -msgstr "Le processus fils est mort par le signal %d : %s" +#: src/dird/ua_tree.c:73 src/dird/ua_tree.c:74 +msgid "list current directory, wildcards allowed" +msgstr "affiche le contenu du répertoire courant, les jokers (*) fonctionnent" -#: src/lib/berrno.c:87 -msgid "Invalid errno. No error message possible." +#: src/dird/ua_tree.c:75 +#, fuzzy +msgid "list subdir in current directory, wildcards allowed" +msgstr "affiche le contenu du répertoire courant, les jokers (*) fonctionnent" + +#: src/dird/ua_tree.c:76 +msgid "list the marked files in and below the cd" +msgstr "liste les fichiers marqués à partir du répertoire courant" + +#: src/dird/ua_tree.c:77 +#, fuzzy +msgid "list the marked files in" +msgstr "liste les fichiers marqués à partir du répertoire courant" + +#: src/dird/ua_tree.c:78 +msgid "mark dir/file to be restored recursively, wildcards allowed" msgstr "" +"marque récursivement les fichiers/répertoires pour être restaurés, les " +"jokers (*) fonctionnent" -#: src/lib/bnet.c:134 -#, c-format -msgid "Attr spool write error. ERR=%s\n" -msgstr "Erreur pendant l'écriture des attributs dans le spool. ERR=%s\n" +#: src/dird/ua_tree.c:79 +msgid "mark directory name to be restored (no files)" +msgstr "marque un répertoire (seulement) pour la restauration" -#: src/lib/bnet.c:279 src/lib/bnet.c:320 -msgid "TLS connection initialization failed.\n" -msgstr "Initialisation de la connexion TLS échouée.\n" +#: src/dird/ua_tree.c:80 src/dird/ua_tree.c:81 +msgid "print current working directory" +msgstr "affiche le répertoire courant" + +#: src/dird/ua_tree.c:82 +msgid "unmark dir/file to be restored recursively in dir" +msgstr "dé-sélectionne les fichiers/répertoires récursivement" + +#: src/dird/ua_tree.c:83 +msgid "unmark directory name only no recursion" +msgstr "dé-sélectionne seulement un répertoire" + +#: src/dird/ua_tree.c:84 +msgid "quit and do not do restore" +msgstr "quitte et annule la restauration" + +#: src/dird/ua_tree.c:106 +msgid "" +"\n" +"You are now entering file selection mode where you add (mark) and\n" +"remove (unmark) files to be restored. No files are initially added, unless\n" +"you used the \"all\" keyword on the command line.\n" +"Enter \"done\" to leave this mode.\n" +"\n" +msgstr "" +"\n" +"Vous êtes dans le mode de sélection des fichiers ou vous devez ajouter " +"(mark)\n" +"et supprimez (unmark) les fichiers à restaurer. Aucun fichier n'est " +"sélectionné\n" +"par défaut sauf si vous avez utilisé l'option « all » dans la commande.\n" +"Terminez votre saisie par « done »\n" +"\n" -#: src/lib/bnet.c:287 -msgid "TLS Negotiation failed.\n" -msgstr "Négociation TLS échouée.\n" +#: src/dird/ua_tree.c:117 src/dird/ua_tree.c:847 +#, c-format +msgid "cwd is: %s\n" +msgstr "Le répertoire courant est : %s\n" -#: src/lib/bnet.c:293 src/lib/bnet.c:335 -msgid "" -"TLS certificate verification failed. Peer certificate did not match a " -"required commonName\n" -msgstr "" +#: src/dird/ua_tree.c:126 src/dird/ua_tree.c:145 +#, fuzzy, c-format +msgid "Invalid command \"%s\". Enter \"done\" to exit.\n" +msgstr "Commande invalide. Tapez « done » pour quitter.\n" -#: src/lib/bnet.c:342 +#: src/dird/ua_tree.c:217 #, c-format msgid "" -"TLS host certificate verification failed. Host name \"%s\" did not match " -"presented certificate\n" +"Something is wrong with the Delta sequence of %s, skiping new parts. Current " +"sequence is %d\n" msgstr "" -#: src/lib/bnet.c:359 -msgid "TLS enabled but not configured.\n" -msgstr "TLS activé mais non configuré.\n" - -#: src/lib/bnet.c:365 -msgid "TLS enable but not configured.\n" -msgstr "TLS actif mais non configuré.\n" - -#: src/lib/bnet.c:481 -msgid "No problem." -msgstr "Pas de problème." +#: src/dird/ua_tree.c:389 src/dird/ua_tree.c:401 src/dird/ua_tree.c:418 +msgid "No files marked.\n" +msgstr "Aucun fichier sélectionné.\n" -#: src/lib/bnet.c:484 -msgid "Authoritative answer for host not found." -msgstr "" +#: src/dird/ua_tree.c:403 +msgid "1 file marked.\n" +msgstr "1 fichier sélectionné.\n" -#: src/lib/bnet.c:487 -msgid "Non-authoritative for host not found, or ServerFail." -msgstr "" +#: src/dird/ua_tree.c:405 +#, c-format +msgid "%s files marked.\n" +msgstr "%s fichiers sélectionnés.\n" -#: src/lib/bnet.c:490 -msgid "Non-recoverable errors, FORMERR, REFUSED, or NOTIMP." -msgstr "" +#: src/dird/ua_tree.c:433 +msgid "No directories marked.\n" +msgstr "Pas de répertoire sélectionné.\n" -#: src/lib/bnet.c:493 -msgid "Valid name, no data record of resquested type." -msgstr "" +#: src/dird/ua_tree.c:435 +msgid "1 directory marked.\n" +msgstr "1 répertoire sélectionné.\n" -#: src/lib/bnet.c:496 -msgid "Unknown error." -msgstr "Erreur inconnue." +#: src/dird/ua_tree.c:437 +#, c-format +msgid "%s directories marked.\n" +msgstr "%s répertoires sélectionnés.\n" -#: src/lib/bnet.c:755 +#: src/dird/ua_tree.c:458 #, c-format -msgid "Unknown sig %d" -msgstr "sig inconnu %d" +msgid "%s total files/dirs. %s marked to be restored.\n" +msgstr "" +"%s fichiers/répertoires au total. %s sélectionné pour la restauration.\n" -#: src/lib/signal.c:67 -msgid "Invalid signal number" +#: src/dird/ua_tree.c:469 +msgid "No file specification given.\n" msgstr "" -#: src/lib/signal.c:152 src/lib/signal.c:154 +#: src/dird/ua_tree.c:690 #, c-format -msgid "Bacula interrupted by signal %d: %s\n" -msgstr "Bacula a reçu le signal %d : %s\n" +msgid "Node %s has no children.\n" +msgstr "Le noeud %s n'a pas de fils.\n" -#: src/lib/signal.c:167 +#: src/dird/ua_tree.c:783 #, c-format -msgid "Kaboom! %s, %s got signal %d - %s. Attempting traceback.\n" +msgid "%d total files; %d marked to be restored; %s bytes.\n" +msgstr "%d fichiers en tout ; %d marqués pour la restauration ; %s octets.\n" + +#: src/dird/ua_tree.c:817 +msgid "Too few or too many arguments. Try using double quotes.\n" msgstr "" -"Kaboom ! %s, %s a reçu le signal %d - %s. Tentative de dump des traces.\n" +"Trop ou pas assez d'arguments sur la commande. Essayez d'utiliser des « \" " +"»\n" -#: src/lib/signal.c:169 -#, c-format -msgid "Kaboom! exepath=%s\n" -msgstr "Kaboom ! exepath=%s\n" +#: src/dird/ua_tree.c:830 +msgid "Invalid path given.\n" +msgstr "" -#: src/lib/signal.c:210 -#, c-format -msgid "Fork error: ERR=%s\n" -msgstr "Fork en erreur : ERR=%s\n" +#: src/dird/ua_tree.c:866 src/dird/ua_tree.c:878 +msgid "No files unmarked.\n" +msgstr "Pas de fichier dé-sélectionné.\n" -#: src/lib/signal.c:218 -#, fuzzy, c-format -msgid "Calling: %s %s %s %s\n" -msgstr "Exécution : %s %s %s\n" +#: src/dird/ua_tree.c:880 +msgid "1 file unmarked.\n" +msgstr "1 fichier dé-sélectionné.\n" -#: src/lib/signal.c:222 +#: src/dird/ua_tree.c:883 #, c-format -msgid "execv: %s failed: ERR=%s\n" -msgstr "execv : %s en échec : ERR=%s\n" +msgid "%s files unmarked.\n" +msgstr "%s fichiers dé-sélectionnés.\n" -#: src/lib/signal.c:244 -#, c-format -msgid "It looks like the traceback worked...\n" -msgstr "" +#: src/dird/ua_tree.c:894 src/dird/ua_tree.c:911 +msgid "No directories unmarked.\n" +msgstr "Pas de répertoire dé-sélectionné\n" -#: src/lib/signal.c:246 -#, c-format -msgid "The btraceback call returned %d\n" -msgstr "" +#: src/dird/ua_tree.c:913 +msgid "1 directory unmarked.\n" +msgstr "1 répertoire dé-sélectionné\n" -#: src/lib/signal.c:306 +#: src/dird/ua_tree.c:915 #, c-format -msgid "BA_NSIG too small (%d) should be (%d)\n" -msgstr "BA_NSIG trop petit (%d) devrait être (%d)\n" +msgid "%d directories unmarked.\n" +msgstr "%d répertoires dé-sélectionnés.\n" -#: src/lib/signal.c:312 -msgid "UNKNOWN SIGNAL" -msgstr "SIGNAL INCONNU" +#: src/dird/inc_conf.c:299 +#, fuzzy, c-format +msgid "Expected a strip path positive integer, got:%s:" +msgstr "Attendait un entier positif, pas : %s\n" -#: src/lib/signal.c:313 -msgid "Hangup" -msgstr "Hangup" +#: src/dird/inc_conf.c:319 +#, c-format +msgid "Expected a FileSet option keyword, got:%s:" +msgstr "Attendait une option de FileSet, eu : %s:" -#: src/lib/signal.c:314 -msgid "Interrupt" +#: src/dird/inc_conf.c:352 +msgid "Old style Include/Exclude not supported\n" msgstr "" -#: src/lib/signal.c:315 -msgid "Quit" -msgstr "Quit" +#: src/dird/inc_conf.c:380 src/dird/inc_conf.c:726 src/dird/dird_conf.c:2044 +#, c-format +msgid "Expecting keyword, got: %s\n" +msgstr "Attendait un mot clef, eu : %s\n" -#: src/lib/signal.c:316 -msgid "Illegal instruction" +#: src/dird/inc_conf.c:398 src/dird/inc_conf.c:741 src/dird/dird_conf.c:2061 +#, c-format +msgid "Keyword %s not permitted in this resource" msgstr "" -#: src/lib/signal.c:317 -msgid "Trace/Breakpoint trap" +#: src/dird/inc_conf.c:451 +#, c-format +msgid "Regex compile error. ERR=%s\n" msgstr "" -#: src/lib/signal.c:318 -msgid "Abort" -msgstr "Abort" - -#: src/lib/signal.c:320 -msgid "EMT instruction (Emulation Trap)" +#: src/dird/inc_conf.c:472 +#, c-format +msgid "Expected a regex string, got: %s\n" msgstr "" -#: src/lib/signal.c:323 -msgid "IOT trap" -msgstr "IOT trap" - -#: src/lib/signal.c:325 -msgid "BUS error" -msgstr "BUS error" - -#: src/lib/signal.c:326 -msgid "Floating-point exception" +#: src/dird/inc_conf.c:546 +#, c-format +msgid "Expected a wild-card string, got: %s\n" msgstr "" -#: src/lib/signal.c:327 -msgid "Kill, unblockable" +#: src/dird/inc_conf.c:569 +#, c-format +msgid "Expected an fstype string, got: %s\n" msgstr "" -#: src/lib/signal.c:328 -msgid "User-defined signal 1" +#: src/dird/inc_conf.c:580 +msgid "ExcludeDirContaining directive not permitted in Exclude.\n" msgstr "" -#: src/lib/signal.c:329 -msgid "Segmentation violation" -msgstr "Erreur de segmentation" +#: src/dird/inc_conf.c:607 +#, c-format +msgid "Expected an drivetype string, got: %s\n" +msgstr "Attendait un type de lecteur, pas : %s\n" -#: src/lib/signal.c:330 -msgid "User-defined signal 2" +#: src/dird/inc_conf.c:631 src/dird/inc_conf.c:674 +#, c-format +msgid "Backslash found. Use forward slashes or quote the string.: %s\n" msgstr "" -#: src/lib/signal.c:331 -msgid "Broken pipe" -msgstr "Tube brisé" - -#: src/lib/signal.c:332 -msgid "Alarm clock" -msgstr "Alarm clock" +#: src/dird/inc_conf.c:646 src/dird/inc_conf.c:689 +#, c-format +msgid "Expected a filename, got: %s" +msgstr "Attendait un nom de fichier, eu : %s" -#: src/lib/signal.c:333 -msgid "Termination" +#: src/dird/inc_conf.c:663 +msgid "Plugin directive not permitted in Exclude\n" msgstr "" -#: src/lib/signal.c:335 -msgid "Stack fault" +#: src/dird/inc_conf.c:706 +msgid "Options section not permitted in Exclude\n" msgstr "" -#: src/lib/signal.c:337 -msgid "Child status has changed" -msgstr "" +#: src/dird/inc_conf.c:711 src/dird/dird_conf.c:2030 +#, c-format +msgid "Expecting open brace. Got %s" +msgstr "Attendait {, eu : %s" -#: src/lib/signal.c:338 -msgid "Continue" -msgstr "Continue" +#: src/dird/inc_conf.c:766 +#, c-format +msgid "Expected a FileSet keyword, got: %s" +msgstr "Attendait le mot clef FileSet, eu : %s" -#: src/lib/signal.c:339 -msgid "Stop, unblockable" -msgstr "" +#: src/dird/recycle.c:57 +#, c-format +msgid "Recycled volume \"%s\"\n" +msgstr "Volume recyclé \"%s\"\n" -#: src/lib/signal.c:340 -msgid "Keyboard stop" +#: src/dird/ua_server.c:56 +#, c-format +msgid "Cannot create UA thread: %s\n" msgstr "" -#: src/lib/signal.c:341 -msgid "Background read from tty" -msgstr "" +#: src/dird/ua_server.c:146 +msgid "You have messages.\n" +msgstr "Vous avez des messages.\n" -#: src/lib/signal.c:342 -msgid "Background write to tty" -msgstr "" +#: src/dird/newvol.c:77 +#, c-format +msgid "Illegal character in Volume name \"%s\"\n" +msgstr "Caractère interdit dans le nom du Volume \"%s\"\n" -#: src/lib/signal.c:343 -msgid "Urgent condition on socket" -msgstr "" +#: src/dird/newvol.c:90 +#, fuzzy, c-format +msgid "Created new Volume=\"%s\", Pool=\"%s\", MediaType=\"%s\" in catalog.\n" +msgstr "Le Volume \"%s\" a été créé dans le catalogue.\n" -#: src/lib/signal.c:344 -msgid "CPU limit exceeded" -msgstr "" +#: src/dird/newvol.c:119 +#, fuzzy, c-format +msgid "SQL failed, but ignored. ERR=%s\n" +msgstr "fopen %s en erreur : ERR=%s\n" -#: src/lib/signal.c:345 -msgid "File size limit exceeded" -msgstr "" +#: src/dird/newvol.c:129 +#, c-format +msgid "Wanted to create Volume \"%s\", but it already exists. Trying again.\n" +msgstr "Impossible de créer le volume \"%s\" car il existe déjà.\n" -#: src/lib/signal.c:346 -msgid "Virtual alarm clock" -msgstr "" +#: src/dird/newvol.c:138 +msgid "Too many failures. Giving up creating Volume name.\n" +msgstr "Trop d'erreurs. Abandon de la création du volume.\n" -#: src/lib/signal.c:347 -msgid "Profiling alarm clock" -msgstr "" +#: src/dird/msgchan.c:66 +#, c-format +msgid "Connecting to Storage daemon %s at %s:%d ...\n" +msgstr "Connexion au Storage Daemon %s (%s:%d)...\n" -#: src/lib/signal.c:348 -msgid "Window size change" +#: src/dird/msgchan.c:230 +#, c-format +msgid "Storage daemon rejected Job command: %s\n" msgstr "" -#: src/lib/signal.c:349 -msgid "I/O now possible" +#: src/dird/msgchan.c:238 +#, c-format +msgid " " +msgstr "" -#: src/lib/bsys.c:627 +#: src/dird/dird_conf.c:584 #, c-format -msgid "Write final hdr error: ERR=%s\n" +msgid "Console: name=%s SSL=%d\n" msgstr "" -#: src/lib/runscript.c:236 +#: src/dird/dird_conf.c:589 #, c-format -msgid "%s: run %s \"%s\"\n" -msgstr "%s: exécution %s de la commande \"%s\"\n" +msgid "Counter: name=%s min=%d max=%d cur=%d wrapcntr=%s\n" +msgstr "" -#: src/lib/runscript.c:245 +#: src/dird/dird_conf.c:594 #, c-format -msgid "Runscript: %s could not execute. ERR=%s\n" -msgstr "Runscript : impossible d'exécuter %s. ERR=%s\n" +msgid "Counter: name=%s min=%d max=%d\n" +msgstr "" -#: src/lib/runscript.c:254 +#: src/dird/dird_conf.c:608 #, c-format -msgid "%s: %s\n" -msgstr "%s: %s\n" +msgid "Client: name=%s address=%s FDport=%d MaxJobs=%u\n" +msgstr "" -#: src/lib/runscript.c:259 +#: src/dird/dird_conf.c:611 #, c-format -msgid "Runscript: %s returned non-zero status=%d. ERR=%s\n" +msgid " JobRetention=%s FileRetention=%s AutoPrune=%d\n" msgstr "" -"Runscript : %s s'est terminé avec un statut différent de 0 statut=%d. ERR=" -"%s\n" -#: src/lib/lex.c:91 src/wx-console/console_thread.cpp:212 +#: src/dird/dird_conf.c:619 src/dird/dird_conf.c:691 #, c-format -msgid "Problem probably begins at line %d.\n" -msgstr "Le problème commence sûrement au début de la ligne %d.\n" +msgid " MaximumBandwidth=%lld\n" +msgstr "" -#: src/lib/lex.c:96 src/wx-console/console_thread.cpp:217 +#: src/dird/dird_conf.c:631 #, c-format msgid "" -"Config error: %s\n" -" : line %d, col %d of file %s\n" -"%s\n" -"%s" +"Device: name=%s ok=%d num_writers=%d max_writers=%d\n" +" reserved=%d open=%d append=%d read=%d labeled=%d offline=%d autochgr=" +"%d\n" +" poolid=%s volname=%s MediaType=%s\n" msgstr "" -"Erreur de config : %s\n" -" : ligne %d, col %d du fichier %s\n" -"%s\n" -"%s" -#: src/lib/lex.c:100 +#: src/dird/dird_conf.c:645 #, c-format -msgid "Config error: %s\n" -msgstr "Erreur de config : %s\n" - -#: src/lib/lex.c:129 -msgid "Close of NULL file\n" +msgid "" +"Storage: name=%s address=%s SDport=%d MaxJobs=%u\n" +" DeviceName=%s MediaType=%s StorageId=%s\n" msgstr "" -#: src/lib/lex.c:226 +#: src/dird/dird_conf.c:661 +#, c-format msgid "" -"get_char: called after EOF. You may have a open double quote without the " -"closing double quote.\n" +"Catalog: name=%s address=%s DBport=%d db_name=%s\n" +" db_driver=%s db_user=%s MutliDBConn=%d\n" msgstr "" -#: src/lib/lex.c:268 +#: src/dird/dird_conf.c:674 #, c-format -msgid "Config token too long, file: %s, line %d, begins at line %d\n" -msgstr "Config token trop long, fichier : %s, ligne %d, débutant ligne %d\n" - -#: src/lib/lex.c:292 -msgid "none" -msgstr "none" - -#: src/lib/lex.c:293 -msgid "comment" -msgstr "comment" - -#: src/lib/lex.c:294 -msgid "number" -msgstr "number" - -#: src/lib/lex.c:295 -msgid "ip_addr" -msgstr "ip_addr" - -# identifiant -#: src/lib/lex.c:296 -msgid "identifier" -msgstr "identifier" - -#: src/lib/lex.c:297 -msgid "string" -msgstr "string" - -#: src/lib/lex.c:298 -msgid "quoted_string" -msgstr "quoted_string" - -#: src/lib/lex.c:299 -#, fuzzy -msgid "include" -msgstr "Depuis" - -#: src/lib/lex.c:300 -#, fuzzy -msgid "include_quoted_string" -msgstr "quoted_string" - -#: src/lib/lex.c:301 -msgid "UTF-8 Byte Order Mark" +msgid "%s: name=%s JobType=%d level=%s Priority=%d Enabled=%d\n" msgstr "" -#: src/lib/lex.c:302 -msgid "UTF-16le Byte Order Mark" -msgstr "" +#: src/dird/dird_conf.c:675 +msgid "JobDefs" +msgstr "JobDefs" -#: src/lib/lex.c:340 src/lib/lex.c:346 src/lib/lex.c:357 src/lib/lex.c:363 +#: src/dird/dird_conf.c:679 #, c-format -msgid "expected a positive integer number, got: %s" -msgstr "attendait un nombre entier positif, pas : %s" - -#: src/lib/lex.c:479 msgid "" -"This config file appears to be in an unsupported Unicode format (UTF-16be). " -"Please resave as UTF-8\n" +" MaxJobs=%u Resched=%d Times=%d Interval=%s Spool=%d WritePartAfterJob=" +"%d\n" msgstr "" -#: src/lib/lex.c:625 src/lib/lex.c:653 +#: src/dird/dird_conf.c:685 #, c-format -msgid "Cannot open included config file %s: %s\n" -msgstr "Impossible d'ouvrir le fichier de configuration inclus %s : %s\n" +msgid " SpoolSize=%s\n" +msgstr "" -#: src/lib/lex.c:712 src/lib/lex.c:769 +#: src/dird/dird_conf.c:688 #, c-format -msgid "expected an integer or a range, got %s: %s" -msgstr "attendait un entier ou bien un intervalle, pas %s : %s" +msgid " Accurate=%d\n" +msgstr "" -#: src/lib/lex.c:726 src/lib/lex.c:734 src/lib/lex.c:745 src/lib/lex.c:753 +#: src/dird/dird_conf.c:695 #, c-format -msgid "expected an integer number, got %s: %s" -msgstr "attendait un nombre entier, pas %s : %s" +msgid " SelectionType=%d\n" +msgstr "" -#: src/lib/lex.c:783 +#: src/dird/dird_conf.c:710 #, c-format -msgid "expected a name, got %s: %s" -msgstr "attendait un nom, pas %s : %s" +msgid " --> Where=%s\n" +msgstr "" -#: src/lib/lex.c:787 +#: src/dird/dird_conf.c:713 #, c-format -msgid "name %s length %d too long, max is %d\n" -msgstr "la longueur du nom %s (%d) est trop grande, le max est %d\n" +msgid " --> RegexWhere=%s\n" +msgstr " --> RegexWhere=%s\n" -#: src/lib/lex.c:795 +#: src/dird/dird_conf.c:716 #, c-format -msgid "expected a string, got %s: %s" -msgstr "attendait une chaîne, pas %s : %s" - -#: src/lib/var.c:2669 -msgid "everything ok" -msgstr "tout est ok" +msgid " --> Bootstrap=%s\n" +msgstr "" -#: src/lib/var.c:2670 -msgid "incomplete named character" +#: src/dird/dird_conf.c:719 +#, c-format +msgid " --> WriteBootstrap=%s\n" msgstr "" -#: src/lib/var.c:2671 -msgid "incomplete hexadecimal value" -msgstr "valeur hexadécimale incomplète" +#: src/dird/dird_conf.c:722 +#, fuzzy, c-format +msgid " --> PluginOptions=%s\n" +msgstr " --> RunOnSuccess=%u\n" -#: src/lib/var.c:2672 -msgid "invalid hexadecimal value" -msgstr "valeur hexadécimale invalide" +#: src/dird/dird_conf.c:725 +#, c-format +msgid " --> MaxRunTime=%u\n" +msgstr " --> MaxRunTime=%u\n" -#: src/lib/var.c:2673 -msgid "octal value too large" -msgstr "valeur octal trop grande" +#: src/dird/dird_conf.c:728 +#, c-format +msgid " --> MaxWaitTime=%u\n" +msgstr " --> MaxWaitTime=%u\n" -#: src/lib/var.c:2674 -msgid "invalid octal value" -msgstr "valeur octal invalide" +#: src/dird/dird_conf.c:731 +#, c-format +msgid " --> MaxStartDelay=%u\n" +msgstr " --> MaxStartDelay=%u\n" + +#: src/dird/dird_conf.c:734 +#, fuzzy, c-format +msgid " --> MaxRunSchedTime=%u\n" +msgstr " --> MaxRunTime=%u\n" -#: src/lib/var.c:2675 -msgid "incomplete octal value" -msgstr "valeur octal incomplète" +#: src/dird/dird_conf.c:746 +#, fuzzy, c-format +msgid " --> Base %s\n" +msgstr " --> Target=%s\n" -#: src/lib/var.c:2676 -msgid "incomplete grouped hexadecimal value" +#: src/dird/dird_conf.c:784 +#, c-format +msgid " --> Run=%s\n" msgstr "" -#: src/lib/var.c:2677 -msgid "incorrect character class specification" +#: src/dird/dird_conf.c:788 +#, c-format +msgid " --> SelectionPattern=%s\n" msgstr "" -#: src/lib/var.c:2678 -msgid "invalid expansion configuration" +#: src/dird/dird_conf.c:802 +#, c-format +msgid "FileSet: name=%s\n" msgstr "" -#: src/lib/var.c:2679 -msgid "out of memory" -msgstr "plus de mémoire" - -#: src/lib/var.c:2680 -msgid "incomplete variable specification" +#: src/dird/dird_conf.c:896 src/dird/dird_conf.c:981 +#, c-format +msgid "Schedule: name=%s\n" msgstr "" -#: src/lib/var.c:2681 -msgid "undefined variable" -msgstr "variable non définie" +#: src/dird/dird_conf.c:901 +#, c-format +msgid " --> Run Level=%s\n" +msgstr "" -#: src/lib/var.c:2682 -msgid "input is neither text nor variable" -msgstr "l'entrée n'est ni du texte ni une variable" +#: src/dird/dird_conf.c:903 +#, fuzzy, c-format +msgid " MaxRunSchedTime=%u\n" +msgstr " --> MaxRunTime=%u\n" -#: src/lib/var.c:2683 -msgid "unknown command character in variable" -msgstr "" +#: src/dird/dird_conf.c:906 +#, fuzzy, c-format +msgid " Priority=%u\n" +msgstr "Priorité" -#: src/lib/var.c:2684 -msgid "malformatted search and replace operation" +#: src/dird/dird_conf.c:908 +msgid " hour=" msgstr "" -#: src/lib/var.c:2685 -msgid "unknown flag in search and replace operation" +#: src/dird/dird_conf.c:917 +msgid " mday=" msgstr "" -#: src/lib/var.c:2686 -msgid "invalid regex in search and replace operation" +#: src/dird/dird_conf.c:926 +msgid " month=" msgstr "" -#: src/lib/var.c:2687 -msgid "missing parameter in command" +#: src/dird/dird_conf.c:935 +msgid " wday=" msgstr "" -#: src/lib/var.c:2688 -msgid "empty search string in search and replace operation" +#: src/dird/dird_conf.c:944 +msgid " wom=" msgstr "" -#: src/lib/var.c:2689 -msgid "start offset missing in cut operation" +#: src/dird/dird_conf.c:953 +msgid " woy=" msgstr "" -#: src/lib/var.c:2690 -msgid "offsets in cut operation delimited by unknown character" +#: src/dird/dird_conf.c:962 +#, c-format +msgid " mins=%d\n" msgstr "" -#: src/lib/var.c:2691 -msgid "range out of bounds in cut operation" +#: src/dird/dird_conf.c:964 src/dird/dird_conf.c:968 src/dird/dird_conf.c:972 +msgid " --> " msgstr "" -#: src/lib/var.c:2692 -msgid "offset out of bounds in cut operation" +#: src/dird/dird_conf.c:989 +#, c-format +msgid "Pool: name=%s PoolType=%s\n" msgstr "" -#: src/lib/var.c:2693 -msgid "logic error in cut operation" +#: src/dird/dird_conf.c:991 +#, c-format +msgid " use_cat=%d use_once=%d cat_files=%d\n" msgstr "" -#: src/lib/var.c:2694 -msgid "malformatted transpose operation" +#: src/dird/dird_conf.c:994 +#, c-format +msgid " max_vols=%d auto_prune=%d VolRetention=%s\n" msgstr "" -#: src/lib/var.c:2695 -msgid "source and target class mismatch in transpose operation" +#: src/dird/dird_conf.c:997 +#, c-format +msgid " VolUse=%s recycle=%d LabelFormat=%s\n" msgstr "" -#: src/lib/var.c:2696 -msgid "empty character class in transpose operation" +#: src/dird/dird_conf.c:1001 +#, c-format +msgid " CleaningPrefix=%s LabelType=%d\n" msgstr "" -#: src/lib/var.c:2697 -msgid "incorrect character class in transpose operation" +#: src/dird/dird_conf.c:1003 +#, c-format +msgid " RecyleOldest=%d PurgeOldest=%d ActionOnPurge=%d\n" msgstr "" -#: src/lib/var.c:2698 -msgid "malformatted padding operation" +#: src/dird/dird_conf.c:1007 +#, c-format +msgid " MaxVolJobs=%d MaxVolFiles=%d MaxVolBytes=%s\n" msgstr "" -#: src/lib/var.c:2699 -msgid "width parameter missing in padding operation" +#: src/dird/dird_conf.c:1011 +#, c-format +msgid " MigTime=%s MigHiBytes=%s MigLoBytes=%s\n" msgstr "" -#: src/lib/var.c:2700 -msgid "fill string missing in padding operation" +#: src/dird/dird_conf.c:1015 +#, c-format +msgid " JobRetention=%s FileRetention=%s\n" msgstr "" -#: src/lib/var.c:2701 -msgid "unknown quoted pair in search and replace operation" +#: src/dird/dird_conf.c:1019 +#, c-format +msgid " NextPool=%s\n" msgstr "" -#: src/lib/var.c:2702 -msgid "sub-matching reference out of range" +#: src/dird/dird_conf.c:1022 +#, c-format +msgid " RecyclePool=%s\n" msgstr "" -#: src/lib/var.c:2703 -msgid "invalid argument" -msgstr "argument invalide" - -#: src/lib/var.c:2704 -msgid "incomplete quoted pair" -msgstr "" +#: src/dird/dird_conf.c:1025 +#, fuzzy, c-format +msgid " ScratchPool=%s\n" +msgstr "Utilisation du Catalogue \"%s\"\n" -#: src/lib/var.c:2705 -msgid "lookup function does not support variable arrays" -msgstr "" +#: src/dird/dird_conf.c:1028 +#, fuzzy, c-format +msgid " Catalog=%s\n" +msgstr "Utilisation du Catalogue \"%s\"\n" -#: src/lib/var.c:2706 -msgid "index of array variable contains an invalid character" +#: src/dird/dird_conf.c:1048 +#, c-format +msgid "Messages: name=%s\n" msgstr "" -#: src/lib/var.c:2707 -msgid "index of array variable is incomplete" +#: src/dird/dird_conf.c:1050 +#, c-format +msgid " mailcmd=%s\n" msgstr "" -#: src/lib/var.c:2708 -msgid "bracket expression in array variable's index not closed" +#: src/dird/dird_conf.c:1052 +#, c-format +msgid " opcmd=%s\n" msgstr "" -#: src/lib/var.c:2709 -msgid "division by zero error in index specification" +#: src/dird/dird_conf.c:1056 src/qt-console/tray-monitor/tray_conf.cpp:187 +#, c-format +msgid "Unknown resource type %d in dump_resource.\n" msgstr "" -#: src/lib/var.c:2710 -msgid "unterminated loop construct" +#: src/dird/dird_conf.c:1393 src/qt-console/tray-monitor/tray_conf.cpp:245 +#, c-format +msgid "Unknown resource type %d in free_resource.\n" msgstr "" -#: src/lib/var.c:2711 -msgid "invalid character in loop limits" -msgstr "" +#: src/dird/dird_conf.c:1471 +#, c-format +msgid "Cannot find Pool resource %s\n" +msgstr "Impossible de trouver la ressource Pool \"%s\"\n" -#: src/lib/var.c:2712 -msgid "malformed operation argument list" -msgstr "" +#: src/dird/dird_conf.c:1482 +#, c-format +msgid "Cannot find Console resource %s\n" +msgstr "Impossible de trouver la ressource Console \"%s\"\n" -#: src/lib/var.c:2713 -msgid "undefined operation" -msgstr "opération indéfinie" +#: src/dird/dird_conf.c:1504 +#, c-format +msgid "Cannot find Job resource %s\n" +msgstr "Impossible de trouver la ressource Job \"%s\"\n" -#: src/lib/var.c:2714 -msgid "formatting failure" -msgstr "" +#: src/dird/dird_conf.c:1555 +#, c-format +msgid "Cannot find Counter resource %s\n" +msgstr "Impossible de trouver la ressource Counter \"%s\"\n" -#: src/lib/var.c:2723 -msgid "unknown error" -msgstr "erreur inconnue" +#: src/dird/dird_conf.c:1563 src/filed/filed_conf.c:465 +#, c-format +msgid "Cannot find Client resource %s\n" +msgstr "Impossible de trouver la ressource Client \"%s\"\n" -#: src/lib/address_conf.c:62 +#: src/dird/dird_conf.c:1576 #, c-format -msgid "Only ipv4 and ipv6 are supported (%d)\n" -msgstr "Seulement l'ipv4 et l'ipv6 sont supportés (%d)\n" +msgid "Cannot find Schedule resource %s\n" +msgstr "Impossible de trouver la ressource Schedule \"%s\"\n" -#: src/lib/address_conf.c:66 +#: src/dird/dird_conf.c:1581 src/dird/dird_conf.c:1641 +#: src/qt-console/tray-monitor/tray_conf.cpp:302 +#: src/qt-console/tray-monitor/tray_conf.cpp:340 #, c-format -msgid "Only ipv4 is supported (%d)\n" -msgstr "Seulement l'ipv4 est supporté (%d)\n" +msgid "Unknown resource type %d in save_resource.\n" +msgstr "" -#: src/lib/address_conf.c:175 +#: src/dird/dird_conf.c:1656 #, c-format -msgid "It was tried to assign a ipv6 address to a ipv4(%d)\n" +msgid "Name item is required in %s resource, but not found.\n" msgstr "" -#: src/lib/address_conf.c:184 +#: src/dird/dird_conf.c:1669 #, c-format -msgid "It was tried to assign a ipv4 address to a ipv6(%d)\n" +msgid "Inserting %s res: %s index=%d pass=%d\n" msgstr "" -#: src/lib/address_conf.c:263 +#: src/dird/dird_conf.c:1682 +#, fuzzy, c-format +msgid "Expected one of: %s, got: %s" +msgstr "Attendait %s, a pas : %s" + +#: src/dird/dird_conf.c:1754 #, c-format -msgid "Can't add default address (%s)\n" -msgstr "Impossible d'ajouter l'adresse par défaut (%s)\n" +msgid "Expected a Migration Job Type keyword, got: %s" +msgstr "Attendait un type de Job de Migration, eu : %s" -#: src/lib/address_conf.c:292 -msgid "the old style addresses cannot be mixed with new style" +#: src/dird/dird_conf.c:1780 +#, c-format +msgid "Expected a Job Type keyword, got: %s" msgstr "" -#: src/lib/address_conf.c:313 +#: src/dird/dird_conf.c:1804 #, c-format -msgid "can't resolve service(%s)" -msgstr "impossible de trouver une correspondance pour le service (%s)" +msgid "Expected a Job Level keyword, got: %s" +msgstr "Attendait un niveau de sauvegarde, eu : %s" -#: src/lib/address_conf.c:322 +#: src/dird/dird_conf.c:1824 #, c-format -msgid "can't resolve hostname(%s) %s" -msgstr "impossible de résoudre le hostname (%s) %s" +msgid "Expected a Restore replacement option, got: %s" +msgstr "Attendait un niveau de remplacement, eu : %s" -#: src/lib/address_conf.c:412 src/lib/address_conf.c:443 +#: src/dird/ua_query.c:61 src/findlib/file_create.c:265 +#: src/findlib/file_create.c:353 #, c-format -msgid "Expected a block begin { , got: %s" -msgstr "Attendait un début de bloc {, pas : %s" +msgid "Could not open %s: ERR=%s\n" +msgstr "Impossible d'ouvrir %s : ERR=%s\n" -#: src/lib/address_conf.c:417 -msgid "Empty addr block is not allowed" +#: src/dird/ua_query.c:66 +msgid "Available queries:\n" +msgstr "Requêtes disponibles :\n" + +#: src/dird/ua_query.c:73 +msgid "Choose a query" +msgstr "Choisissez une requête" + +#: src/dird/ua_query.c:87 +msgid "Could not find query.\n" +msgstr "Impossible de trouver la requête.\n" + +#: src/dird/ua_query.c:105 +msgid "Too many prompts in query, max is 9.\n" msgstr "" -#: src/lib/address_conf.c:421 +#: src/dird/ua_query.c:208 #, c-format -msgid "Expected a string, got: %s" -msgstr "Attendait une chaîne, pas : %s" +msgid "Warning prompt %d missing.\n" +msgstr "" -#: src/lib/address_conf.c:430 -#, c-format -msgid "Expected a string [ip|ipv4|ipv6], got: %s" -msgstr "Attentait la chaîne [ip|ipv4|ipv6], pas : %s" +#: src/dird/ua_query.c:253 +msgid "" +"Entering SQL query mode.\n" +"Terminate each query with a semicolon.\n" +"Terminate query mode with a blank line.\n" +msgstr "" -#: src/lib/address_conf.c:434 -#, c-format -msgid "Expected a string [ip|ipv4], got: %s" -msgstr "Attendait la chaîne [ip|ipv4], pas : %s" +#: src/dird/ua_query.c:256 src/dird/ua_query.c:272 +msgid "Enter SQL query: " +msgstr "Saisissez votre requête SQL : " -#: src/lib/address_conf.c:439 src/lib/address_conf.c:469 -#, c-format -msgid "Expected a equal =, got: %s" -msgstr "Attendait un égal =, pas : %s" +#: src/dird/ua_query.c:274 +msgid "Add to SQL query: " +msgstr "" + +#: src/dird/ua_query.c:277 +msgid "End query mode.\n" +msgstr "" + +#: src/dird/dird.c:124 +#, fuzzy, c-format +msgid "" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: bacula-dir [-f -s] [-c config_file] [-d debug_level] [config_file]\n" +" -c set configuration file to file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -f run in foreground (for debugging)\n" +" -g groupid\n" +" -m print kaboom output (for debugging)\n" +" -r run now\n" +" -s no signals\n" +" -t test - read configuration and exit\n" +" -u userid\n" +" -v verbose user messages\n" +" -? print this message.\n" +"\n" +msgstr "" +"\n" +"Version : %s (%s)\n" +"\n" +"Usage : dird [-f -s] [-c config_file] [-d debug_level] [config_file]\n" +" -c utilise fich comme fichier de configuration\n" +" -d positionne le niveau de debug à nn\n" +" -dt affiche un timestamp devant chaque ligne de debug\n" +" -f reste en avant-plan (pour debugger)\n" +" -g groupid\n" +" -r lance maintenant\n" +" -s pas de signaux\n" +" -t test - lit seulement le fichier de configuration\n" +" -u userid\n" +" -v affiche les messages utilisateurs\n" +" -? affiche ce message.\n" +"\n" -#: src/lib/address_conf.c:450 src/lib/address_conf.c:465 -#, c-format -msgid "Expected a identifier [addr|port], got: %s" -msgstr "Attendait un identifiant [addr|port], pas : %s" +#: src/dird/dird.c:503 +msgid "Too many open reload requests. Request ignored.\n" +msgstr "" -#: src/lib/address_conf.c:455 -msgid "Only one port per address block" -msgstr "Seulement un port par bloc d'adresse" +#: src/dird/dird.c:518 +msgid "Out of reload table entries. Giving up.\n" +msgstr "" -#: src/lib/address_conf.c:461 -msgid "Only one addr per address block" -msgstr "Seulement une adresse par bloc d'adresse" +#: src/dird/dird.c:521 +msgid "Resetting previous configuration.\n" +msgstr "Retour à la dernière configuration.\n" -#: src/lib/address_conf.c:477 +#: src/dird/dird.c:585 #, c-format -msgid "Expected a number or a string, got: %s" -msgstr "Attendait un nombre ou une chaîne, pas : %s" +msgid "" +"No Director resource defined in %s\n" +"Without that I don't know who I am :-(\n" +msgstr "" -#: src/lib/address_conf.c:483 src/lib/address_conf.c:516 +#: src/dird/dird.c:593 src/filed/filed.c:328 #, c-format -msgid "Expected an IP number or a hostname, got: %s" -msgstr "Attendait une adresse IP ou un nom de machine, pas : %s" - -#: src/lib/address_conf.c:489 -msgid "State machine missmatch" +msgid "No Messages resource defined in %s\n" msgstr "" -#: src/lib/address_conf.c:495 src/lib/address_conf.c:507 +#: src/dird/dird.c:598 #, c-format -msgid "Expected a end of block }, got: %s" -msgstr "Attendait une fin de bloc }, pas : %s" +msgid "Only one Director resource permitted in %s\n" +msgstr "" -#: src/lib/address_conf.c:501 +#: src/dird/dird.c:655 #, c-format -msgid "Can't add hostname(%s) and port(%s) to addrlist (%s)" +msgid "No Job records defined in %s\n" msgstr "" -"Impossible d'ajouter le hostname (%s) et le port (%s) à la liste d'adresse " -"(%s)" -#: src/lib/address_conf.c:521 src/lib/address_conf.c:535 +#: src/dird/dird.c:713 src/dird/dird.c:726 #, c-format -msgid "can't add port (%s) to (%s)" -msgstr "impossible d'ajouter le port (%s) à (%s)" +msgid "Hey something is wrong. p=0x%lu\n" +msgstr "" -#: src/lib/address_conf.c:530 +#: src/dird/dird.c:787 #, c-format -msgid "Expected a port number or string, got: %s" -msgstr "Attendait un numéro de port ou une chaîne, pas : %s" +msgid "\"%s\" directive in Job \"%s\" resource is required, but not found.\n" +msgstr "" -#: src/lib/edit.c:478 -msgid "Empty name not allowed.\n" +#: src/dird/dird.c:794 +msgid "Too many items in Job resource\n" msgstr "" -#: src/lib/edit.c:488 +#: src/dird/dird.c:798 #, c-format -msgid "Illegal character \"%c\" in name.\n" -msgstr "Caractère illégal « %c » dans le nom.\n" - -#: src/lib/edit.c:495 -msgid "Name too long.\n" -msgstr "Nom trop long.\n" - -#: src/findlib/savecwd.c:60 -#, fuzzy, c-format -msgid "Cannot open current directory: ERR=%s\n" -msgstr "Impossible d'ouvrir le fichier inclus : %s. ERR=%s\n" - -#: src/findlib/savecwd.c:71 -#, fuzzy, c-format -msgid "Cannot get current directory: ERR=%s\n" -msgstr "change le répertoire courant" - -#: src/findlib/savecwd.c:95 src/findlib/savecwd.c:106 -#, fuzzy, c-format -msgid "Cannot reset current directory: ERR=%s\n" -msgstr "change le répertoire courant" +msgid "No storage specified in Job \"%s\" nor in Pool.\n" +msgstr "Pas de Storage spécifié dans le job \"%s\" ni dans le Pool.\n" -#: src/findlib/mkpath.c:137 +#: src/dird/dird.c:822 #, c-format -msgid "Cannot create directory %s: ERR=%s\n" +msgid "\"TLS Certificate\" file not defined for Console \"%s\" in %s.\n" msgstr "" -#: src/findlib/mkpath.c:141 src/findlib/mkpath.c:202 -#, fuzzy, c-format -msgid "%s exists but is not a directory.\n" -msgstr "%s doit être un répertoire.\n" - -#: src/findlib/mkpath.c:164 +#: src/dird/dird.c:828 #, c-format -msgid "Cannot change owner and/or group of %s: ERR=%s\n" +msgid "\"TLS Key\" file not defined for Console \"%s\" in %s.\n" msgstr "" -#: src/findlib/mkpath.c:169 +#: src/dird/dird.c:835 #, c-format -msgid "Cannot change permissions of %s: ERR=%s\n" -msgstr "" - -#: src/findlib/mkpath.c:239 -#, fuzzy, c-format -msgid "%c: is not a valid drive.\n" -msgstr "%s : est une commande invalide.\n" - -#: src/findlib/mkpath.c:283 -msgid "Too many subdirectories. Some permissions not reset.\n" +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Console \"%s\" in %s. At least one CA certificate store is required when " +"using \"TLS Verify Peer\".\n" msgstr "" -#: src/findlib/attribs.c:483 +#: src/dird/dird.c:852 src/dird/dird.c:892 src/filed/filed.c:391 #, c-format -msgid "File size of restored file %s not correct. Original %s, restored %s.\n" +msgid "Failed to initialize TLS context for File daemon \"%s\" in %s.\n" msgstr "" -#: src/findlib/attribs.c:509 src/findlib/attribs.c:516 +#: src/dird/dird.c:875 #, c-format -msgid "Unable to set file owner %s: ERR=%s\n" +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"File daemon \"%s\" in %s.\n" msgstr "" -#: src/findlib/attribs.c:522 +#: src/dird/dird.c:916 #, c-format -msgid "Unable to set file modes %s: ERR=%s\n" +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Storage \"%s\" in %s.\n" msgstr "" -#: src/findlib/attribs.c:532 +#: src/dird/dird.c:971 src/dird/dird.c:973 #, c-format -msgid "Unable to set file times %s: ERR=%s\n" +msgid "Could not open Catalog \"%s\", database \"%s\".\n" msgstr "" +"Impossible d'ouvrir le catalogue \"%s\", sur la base de données \"%s\".\n" -#: src/findlib/attribs.c:546 +#: src/dird/dird.c:976 src/tools/cats_test.c:365 #, c-format -msgid "Unable to set file flags %s: ERR=%s\n" -msgstr "" +msgid "%s" +msgstr "%s" -#: src/findlib/attribs.c:799 -#, c-format -msgid "Error in %s file %s: ERR=%s\n" -msgstr "" +#: src/dird/dird.c:1055 +#, fuzzy, c-format +msgid "Could not create storage record for %s\n" +msgstr "Impossible de trouver la ressource Storage \"%s\"\n" -#: src/findlib/attribs.c:816 -#, c-format -msgid "Error in %s: ERR=%s\n" -msgstr "" +#: src/dird/dird.c:1063 +#, fuzzy, c-format +msgid "Could not update storage record for %s\n" +msgstr "Impossible de trouver la ressource Storage \"%s\"\n" -#: src/findlib/enable_priv.c:92 -msgid "AdjustTokenPrivileges set " +#: src/dird/ua_purge.c:84 +#, fuzzy +msgid "" +"\n" +"This command can be DANGEROUS!!!\n" +"\n" +"It purges (deletes) all Files from a Job,\n" +"JobId, Client or Volume; or it purges (deletes)\n" +"all Jobs from a Client or Volume without regard\n" +"to retention periods. Normally you should use the\n" +"PRUNE command, which respects retention periods.\n" msgstr "" +"\n" +"Cette commande peut être DANGEUREUSE !\n" +"\n" +"Elle supprime tous les enregistrements des fichiers d'un job, \n" +"d'un client ou d'un volume ; ou bien elle supprime tous les jobs\n" +"d'un client ou d'un volume sans s'occuper des périodes de rétention.\n" +"\n" +"Normalement vous devez utiliser la commande PRUNE qui respecte les périodes\n" +"de rétention.\n" -#: src/findlib/create_file.c:124 -#, c-format -msgid "File skipped. Not newer: %s\n" -msgstr "" +#: src/dird/ua_purge.c:152 +msgid "Choose item to purge" +msgstr "Choisissez l'élément à purger" -#: src/findlib/create_file.c:131 +#: src/dird/ua_purge.c:199 #, c-format -msgid "File skipped. Not older: %s\n" -msgstr "" +msgid "Begin purging files for Client \"%s\"\n" +msgstr "Début de la purge des fichiers du client \"%s\"\n" -#: src/findlib/create_file.c:141 +#: src/dird/ua_purge.c:208 src/dird/ua_purge.c:258 #, c-format -msgid "File skipped. Already exists: %s\n" -msgstr "" +msgid "No Files found for client %s to purge from %s catalog.\n" +msgstr "Pas de fichier à purger pour le client \"%s\" dans le catalogue %s.\n" -#: src/findlib/create_file.c:167 +#: src/dird/ua_purge.c:211 #, c-format -msgid "File %s already exists and could not be replaced. ERR=%s.\n" -msgstr "" +msgid "Files for %d Jobs for client \"%s\" purged from %s catalog.\n" +msgstr "Fichiers de %d jobs du client \"%s\" purgé du catalogue %s.\n" -#: src/findlib/create_file.c:218 src/findlib/create_file.c:282 -#: src/findlib/create_file.c:378 +#: src/dird/ua_purge.c:249 #, c-format -msgid "bpkt already open fid=%d\n" -msgstr "" +msgid "Begin purging jobs from Client \"%s\"\n" +msgstr "Début de purge des jobs du client \"%s\"\n" -#: src/findlib/create_file.c:226 src/filed/fd_plugins.c:1009 +#: src/dird/ua_purge.c:261 #, c-format -msgid "Could not create %s: ERR=%s\n" -msgstr "" +msgid "%d Jobs for client %s purged from %s catalog.\n" +msgstr "%d jobs du client \"%s\" purgé du catalogue %s.\n" -#: src/findlib/create_file.c:241 +#: src/dird/ua_purge.c:459 #, c-format -msgid "Cannot make fifo %s: ERR=%s\n" +msgid "" +"\n" +"Volume \"%s\" has VolStatus \"%s\" and cannot be purged.\n" +"The VolStatus must be: Append, Full, Used, or Error to be purged.\n" msgstr "" +"\n" +"Le volume \"%s\" est en état \"%s\" et il ne peut pas être purgé.\n" +"Son statut doit être : Append, Full, Used ou Error pour être purgé.\n" -#: src/findlib/create_file.c:259 +#: src/dird/ua_purge.c:487 #, c-format -msgid "Cannot make node %s: ERR=%s\n" -msgstr "" +msgid "%d File%s on Volume \"%s\" purged from catalog.\n" +msgstr "%d fichier%s du volume \"%s\" purgé du catalogue.\n" -#: src/findlib/create_file.c:304 +#: src/dird/ua_purge.c:537 #, c-format -msgid "Could not symlink %s -> %s: ERR=%s\n" +msgid "" +"There are no more Jobs associated with Volume \"%s\". Marking it purged.\n" msgstr "" +"Il n'y a plus de job associé avec le volume \"%s\". Il est marqué purgé.\n" -#: src/findlib/create_file.c:329 src/findlib/create_file.c:342 -#, fuzzy, c-format -msgid "Could not restore file flags for file %s: ERR=%s\n" -msgstr "Impossible de créer le fichier bootstrap %s : ERR=%s\n" +#: src/dird/ua_purge.c:606 +#, fuzzy +msgid "Can't update volume size in the catalog\n" +msgstr "Le Volume \"%s\" a été créé dans le catalogue.\n" -#: src/findlib/create_file.c:333 src/findlib/create_file.c:350 +#: src/dird/ua_purge.c:608 #, c-format -msgid "Could not hard link %s -> %s: ERR=%s\n" +msgid "The volume \"%s\" has been truncated\n" msgstr "" -#: src/findlib/create_file.c:346 +#: src/dird/ua_purge.c:610 #, fuzzy, c-format -msgid "Could not reset file flags for file %s: ERR=%s\n" -msgstr "Impossible de créer le fichier bootstrap %s : ERR=%s\n" +msgid "Unable to truncate volume \"%s\"\n" +msgstr "Impossible d'écrire le marqueur EOF. ERR=%s\n" -#: src/findlib/create_file.c:401 +#: src/dird/ua_purge.c:703 +#, fuzzy, c-format +msgid "No Volumes found to perform %s action.\n" +msgstr "Pas de volume à labéliser ou pas de codebar.\n" + +#: src/dird/ua_purge.c:771 #, c-format -msgid "Original file %s have been deleted: type=%d\n" +msgid "Unable move recycled Volume in full Pool \"%s\" MaxVols=%d\n" msgstr "" +"Impossible de déplacer le volume recyclé, le Pool \"%s\" est plein. MaxVols=" +"%d\n" -#: src/findlib/create_file.c:413 +#: src/dird/ua_purge.c:785 #, c-format -msgid "Original file %s not saved: type=%d\n" +msgid "All records pruned from Volume \"%s\"; marking it \"Purged\"\n" msgstr "" +"Il n'y a pas de job associé avec le volume \"%s\". Il est marqué comme " +"Purged.\n" -#: src/findlib/create_file.c:416 +#: src/dird/ua_purge.c:790 #, c-format -msgid "Unknown file type %d; not restored: %s\n" -msgstr "" +msgid "Cannot purge Volume with VolStatus=%s\n" +msgstr "Impossible de purger un volume dans l'état (VolStatus) %s\n" -#: src/findlib/create_file.c:460 +#: src/dird/ua_prune.c:116 +msgid "Choose item to prune" +msgstr "Que voulez vous purger du catalogue (prune)" + +#: src/dird/ua_prune.c:172 #, c-format -msgid "Zero length filename: %s\n" -msgstr "" +msgid "Cannot prune Volume \"%s\" because it is archived.\n" +msgstr "Impossible de pruner le Volume \"%s\" car il est archivé.\n" -#: src/findlib/bfile.c:97 -msgid "Unix attributes" -msgstr "" +#: src/dird/ua_prune.c:214 +#, fuzzy +msgid "Pruned Jobs from JobHisto catalog.\n" +msgstr "Purge du catalogue (prune) de %d %s du client %s.\n" -#: src/findlib/bfile.c:99 -msgid "File data" -msgstr "" +#: src/dird/ua_prune.c:302 +#, fuzzy +msgid "Begin pruning Files.\n" +msgstr "Début de purge des fichiers du catalogue (prune).\n" -#: src/findlib/bfile.c:101 -msgid "MD5 digest" -msgstr "" +#: src/dird/ua_prune.c:317 +msgid "No Files found to prune.\n" +msgstr "Pas de fichier trouvé pour la purge du catalogue (prune).\n" -#: src/findlib/bfile.c:103 -msgid "GZIP data" +#: src/dird/ua_prune.c:340 +#, c-format +msgid "Pruned Files from %s Jobs for client %s from catalog.\n" msgstr "" +"Purge du catalogue des fichiers (prune) de %s Jobs pour le client %s.\n" -#: src/findlib/bfile.c:105 -msgid "Compressed data" -msgstr "" +#: src/dird/ua_prune.c:486 +#, fuzzy, c-format +msgid "Begin pruning Jobs older than %s.\n" +msgstr "Début de purge des Jobs du catalogue (prune).\n" -#: src/findlib/bfile.c:107 -msgid "Extended attributes" -msgstr "" +#: src/dird/ua_prune.c:597 +#, c-format +msgid "Pruned %d %s for client %s from catalog.\n" +msgstr "Purge du catalogue (prune) de %d %s du client %s.\n" -#: src/findlib/bfile.c:109 -msgid "Sparse data" +#: src/dird/ua_prune.c:598 +msgid "Jobs" +msgstr "Jobs" + +#: src/dird/ua_prune.c:600 +msgid "No Jobs found to prune.\n" +msgstr "Pas de job trouvé pour la purge du catalogue (prune).\n" + +#: src/dird/ua_prune.c:661 +msgid "Expecting limit argument as integer\n" msgstr "" -#: src/findlib/bfile.c:111 -msgid "GZIP sparse data" -msgstr "" +#: src/dird/ua_prune.c:675 +#, fuzzy, c-format +msgid "Volume \"%s\"" +msgstr "Fichiers du Volume" + +#: src/dird/ua_update.c:85 +msgid "Update choice:\n" +msgstr "Élément à mettre à jour :\n" + +#: src/dird/ua_update.c:86 +msgid "Volume parameters" +msgstr "Paramètres d'un volume" -#: src/findlib/bfile.c:113 -msgid "Compressed sparse data" -msgstr "" +#: src/dird/ua_update.c:87 +msgid "Pool from resource" +msgstr "Pool à partir de sa définition" -#: src/findlib/bfile.c:115 -msgid "Program names" -msgstr "" +#: src/dird/ua_update.c:88 +msgid "Slots from autochanger" +msgstr "Slots d'un autochangeur" -#: src/findlib/bfile.c:117 -msgid "Program data" -msgstr "" +#: src/dird/ua_update.c:89 +#, fuzzy +msgid "Long term statistics" +msgstr "Spooling des données...\n" -#: src/findlib/bfile.c:119 -msgid "SHA1 digest" -msgstr "" +#: src/dird/ua_update.c:90 +msgid "item" +msgstr "item" -#: src/findlib/bfile.c:121 -msgid "Win32 data" -msgstr "" +#: src/dird/ua_update.c:90 +msgid "Choose catalog item to update" +msgstr "Choisissez l'élément à mettre à jour" -#: src/findlib/bfile.c:123 -msgid "Win32 GZIP data" +#: src/dird/ua_update.c:133 +#, c-format +msgid "Invalid VolStatus specified: %s\n" msgstr "" -#: src/findlib/bfile.c:125 -msgid "Win32 compressed data" -msgstr "" +#: src/dird/ua_update.c:142 +#, c-format +msgid "New Volume status is: %s\n" +msgstr "Le statut du volume est : %s\n" -#: src/findlib/bfile.c:127 -msgid "MacOS Fork data" -msgstr "" +#: src/dird/ua_update.c:152 +#, c-format +msgid "Invalid retention period specified: %s\n" +msgstr "Période de rétention invalide : %s\n" -#: src/findlib/bfile.c:129 -msgid "HFS+ attribs" -msgstr "" +#: src/dird/ua_update.c:160 +#, c-format +msgid "New retention period is: %s\n" +msgstr "La nouvelle période de rétention est : %s\n" -#: src/findlib/bfile.c:131 -msgid "Standard Unix ACL attribs" -msgstr "" +#: src/dird/ua_update.c:171 +#, c-format +msgid "Invalid use duration specified: %s\n" +msgstr "Durée d'utilisation invalide : %s\n" -#: src/findlib/bfile.c:133 -msgid "Default Unix ACL attribs" -msgstr "" +#: src/dird/ua_update.c:179 +#, c-format +msgid "New use duration is: %s\n" +msgstr "La nouvelle durée d'utilisation est : %s\n" -#: src/findlib/bfile.c:135 -msgid "SHA256 digest" +#: src/dird/ua_update.c:193 +#, c-format +msgid "New max jobs is: %s\n" msgstr "" -#: src/findlib/bfile.c:137 -msgid "SHA512 digest" +#: src/dird/ua_update.c:206 +#, c-format +msgid "New max files is: %s\n" msgstr "" -#: src/findlib/bfile.c:139 -msgid "Signed digest" +#: src/dird/ua_update.c:217 +#, c-format +msgid "Invalid max. bytes specification: %s\n" msgstr "" -#: src/findlib/bfile.c:141 -msgid "Encrypted File data" +#: src/dird/ua_update.c:225 +#, c-format +msgid "New Max bytes is: %s\n" msgstr "" -#: src/findlib/bfile.c:143 -msgid "Encrypted Win32 data" -msgstr "" +#: src/dird/ua_update.c:236 src/dird/ua_update.c:256 +msgid "Invalid value. It must be yes or no.\n" +msgstr "Saisie invalide. Veuillez répondre oui ou non.\n" -#: src/findlib/bfile.c:145 -msgid "Encrypted session data" +#: src/dird/ua_update.c:244 +#, c-format +msgid "New Recycle flag is: %s\n" msgstr "" -#: src/findlib/bfile.c:147 -msgid "Encrypted GZIP data" +#: src/dird/ua_update.c:264 +#, c-format +msgid "New InChanger flag is: %s\n" msgstr "" -#: src/findlib/bfile.c:149 -msgid "Encrypted compressed data" -msgstr "" +#: src/dird/ua_update.c:282 +#, c-format +msgid "Invalid slot, it must be between 0 and MaxVols=%d\n" +msgstr "Slot invalide, il doit être compris entre 0 et MaxVols=%d\n" -#: src/findlib/bfile.c:151 -msgid "Encrypted Win32 GZIP data" +#: src/dird/ua_update.c:292 src/dird/ua_update.c:716 +#, c-format +msgid "Error updating media record Slot: ERR=%s" msgstr "" -#: src/findlib/bfile.c:153 -msgid "Encrypted Win32 Compressed data" -msgstr "" +#: src/dird/ua_update.c:294 +#, c-format +msgid "New Slot is: %d\n" +msgstr "Le nouveau slot est : %d\n" -#: src/findlib/bfile.c:155 -msgid "Encrypted MacOS fork data" -msgstr "" +#: src/dird/ua_update.c:319 +#, c-format +msgid "New Pool is: %s\n" +msgstr "Le nouveau pool est : %s\n" -#: src/findlib/bfile.c:157 -msgid "AIX Specific ACL attribs" -msgstr "" +#: src/dird/ua_update.c:362 +#, c-format +msgid "New RecyclePool is: %s\n" +msgstr "Le nouveau RecyclePool est : %s\n" -#: src/findlib/bfile.c:159 -msgid "Darwin Specific ACL attribs" +#: src/dird/ua_update.c:382 +#, c-format +msgid "Error updating Volume record: ERR=%s" msgstr "" -#: src/findlib/bfile.c:161 -msgid "FreeBSD Specific Default ACL attribs" +#: src/dird/ua_update.c:384 +#, c-format +msgid "Volume defaults updated from \"%s\" Pool record.\n" msgstr "" -#: src/findlib/bfile.c:163 -msgid "FreeBSD Specific Access ACL attribs" +#: src/dird/ua_update.c:407 src/dird/ua_update.c:439 +#, c-format +msgid "Error updating Volume records: ERR=%s" msgstr "" -#: src/findlib/bfile.c:165 -msgid "HPUX Specific ACL attribs" +#: src/dird/ua_update.c:409 src/dird/ua_update.c:441 +#, c-format +msgid "All Volume defaults updated from \"%s\" Pool record.\n" msgstr "" -#: src/findlib/bfile.c:167 -msgid "Irix Specific Default ACL attribs" +#: src/dird/ua_update.c:431 +#, c-format +msgid "Updating all pools, but skipped PoolId=%d. ERR=%s\n" msgstr "" -#: src/findlib/bfile.c:169 -msgid "Irix Specific Access ACL attribs" -msgstr "" +#: src/dird/ua_update.c:457 +#, fuzzy, c-format +msgid "Error updating media record Enabled: ERR=%s" +msgstr "Impossible de mettre à jour les informations du Volume : ERR=%s" -#: src/findlib/bfile.c:171 -msgid "Linux Specific Default ACL attribs" -msgstr "" +#: src/dird/ua_update.c:460 +#, fuzzy, c-format +msgid "New Enabled is: %d\n" +msgstr "Le nouveau flag Enabled est : %d\n" -#: src/findlib/bfile.c:173 -msgid "Linux Specific Access ACL attribs" -msgstr "" +#: src/dird/ua_update.c:475 +#, fuzzy, c-format +msgid "Error updating media record ActionOnPurge: ERR=%s" +msgstr "Impossible de mettre à jour les informations du Volume : ERR=%s" -#: src/findlib/bfile.c:175 -msgid "TRU64 Specific Default ACL attribs" -msgstr "" +#: src/dird/ua_update.c:478 +#, fuzzy, c-format +msgid "New ActionOnPurge is: %s\n" +msgstr "La nouvelle durée d'utilisation est : %s\n" -#: src/findlib/bfile.c:177 -msgid "TRU64 Specific Access ACL attribs" -msgstr "" +#: src/dird/ua_update.c:594 +msgid "Volume Status" +msgstr "Statut d'un volume" -#: src/findlib/bfile.c:179 -msgid "Solaris Specific POSIX ACL attribs" -msgstr "" +#: src/dird/ua_update.c:595 +msgid "Volume Retention Period" +msgstr "Période de rétention d'un volume" -#: src/findlib/bfile.c:181 -msgid "Solaris Specific NFSv4/ZFS ACL attribs" -msgstr "" +#: src/dird/ua_update.c:596 +msgid "Volume Use Duration" +msgstr "Durée d'utilisation d'un volume" -#: src/findlib/bfile.c:183 -msgid "AFS Specific ACL attribs" -msgstr "" +#: src/dird/ua_update.c:597 +msgid "Maximum Volume Jobs" +msgstr "Nombre maximum de job sur un volume" -#: src/findlib/bfile.c:185 -msgid "AIX Specific POSIX ACL attribs" -msgstr "" +#: src/dird/ua_update.c:598 +msgid "Maximum Volume Files" +msgstr "Nombre maximum de fichier sur un volume" -#: src/findlib/bfile.c:187 -msgid "AIX Specific NFSv4 ACL attribs" -msgstr "" +#: src/dird/ua_update.c:599 +msgid "Maximum Volume Bytes" +msgstr "Taille maximum d'un volume" -#: src/findlib/bfile.c:189 -msgid "FreeBSD Specific NFSv4/ZFS ACL attribs" -msgstr "" +#: src/dird/ua_update.c:600 +msgid "Recycle Flag" +msgstr "Flag de recyclage" -#: src/findlib/bfile.c:191 -msgid "GNU Hurd Specific Default ACL attribs" +#: src/dird/ua_update.c:601 +msgid "Slot" msgstr "" -#: src/findlib/bfile.c:193 -msgid "GNU Hurd Specific Access ACL attribs" -msgstr "" +#: src/dird/ua_update.c:602 +msgid "InChanger Flag" +msgstr "Flag InChanger" -#: src/findlib/bfile.c:195 -msgid "GNU Hurd Specific Extended attribs" -msgstr "" +#: src/dird/ua_update.c:603 +msgid "Volume Files" +msgstr "Fichiers du Volume" -#: src/findlib/bfile.c:197 -msgid "IRIX Specific Extended attribs" +#: src/dird/ua_update.c:605 +msgid "Volume from Pool" msgstr "" -#: src/findlib/bfile.c:199 -msgid "TRU64 Specific Extended attribs" +#: src/dird/ua_update.c:606 +msgid "All Volumes from Pool" msgstr "" -#: src/findlib/bfile.c:201 -msgid "AIX Specific Extended attribs" +#: src/dird/ua_update.c:607 +msgid "All Volumes from all Pools" msgstr "" -#: src/findlib/bfile.c:203 -msgid "OpenBSD Specific Extended attribs" +#: src/dird/ua_update.c:608 +msgid "Enabled" msgstr "" -#: src/findlib/bfile.c:205 -msgid "Solaris Specific Extensible attribs or System Extended attribs" -msgstr "" +#: src/dird/ua_update.c:609 +msgid "RecyclePool" +msgstr "RecyclePool" -#: src/findlib/bfile.c:207 -msgid "Solaris Specific Extended attribs" +#: src/dird/ua_update.c:610 +msgid "Action On Purge" msgstr "" -#: src/findlib/bfile.c:209 -msgid "Darwin Specific Extended attribs" -msgstr "" +#: src/dird/ua_update.c:611 +msgid "Done" +msgstr "Fin" -#: src/findlib/bfile.c:211 -msgid "FreeBSD Specific Extended attribs" -msgstr "" +#: src/dird/ua_update.c:620 +#, c-format +msgid "Updating Volume \"%s\"\n" +msgstr "Mise à jour du Volume \"%s\"\n" -#: src/findlib/bfile.c:213 -msgid "Linux Specific Extended attribs" -msgstr "" +#: src/dird/ua_update.c:625 +#, c-format +msgid "Current Volume status is: %s\n" +msgstr "Le statut actuel du volume (Volume status) est : %s\n" -#: src/findlib/bfile.c:215 -msgid "NetBSD Specific Extended attribs" -msgstr "" +#: src/dird/ua_update.c:626 +msgid "Possible Values are:\n" +msgstr "Les valeurs possibles sont :\n" -#: src/findlib/find.c:237 -#, fuzzy, c-format -msgid "Plugin: \"%s\" not found.\n" -msgstr "Plugin=%s non trouvé.\n" +#: src/dird/ua_update.c:637 +msgid "Choose new Volume Status" +msgstr "Saisissez le nouveau statut du volume (Volume Status)" -#: src/findlib/match.c:210 src/tools/testfind.c:654 src/filed/job.c:1460 +#: src/dird/ua_update.c:643 #, c-format -msgid "Unknown include/exclude option: %c\n" -msgstr "" +msgid "Current retention period is: %s\n" +msgstr "La période de rétention actuelle est : %s\n" + +#: src/dird/ua_update.c:645 +msgid "Enter Volume Retention period: " +msgstr "Saisissez la période de rétention du volume : " -#: src/findlib/find_one.c:227 +#: src/dird/ua_update.c:652 #, c-format -msgid " NODUMP flag set - will not process %s\n" -msgstr "" +msgid "Current use duration is: %s\n" +msgstr "La durée d'utilisation actuelle est : %s\n" -#: src/findlib/find_one.c:248 -#, fuzzy, c-format -msgid "Cannot stat file %s: ERR=%s\n" -msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" +#: src/dird/ua_update.c:654 +msgid "Enter Volume Use Duration: " +msgstr "Saisissez la durée d'utilisation du volume : " -#: src/findlib/find_one.c:253 +#: src/dird/ua_update.c:661 #, c-format -msgid "%s mtime changed during backup.\n" -msgstr "" +msgid "Current max jobs is: %u\n" +msgstr "Le nombre maximum de Job actuel est : %u\n" -#: src/findlib/find_one.c:260 -#, c-format -msgid "%s ctime changed during backup.\n" -msgstr "" +#: src/dird/ua_update.c:662 +msgid "Enter new Maximum Jobs: " +msgstr "Saisissez la valeur du nombre maximum de Job : " -#: src/findlib/find_one.c:268 src/findlib/find_one.c:276 +#: src/dird/ua_update.c:669 #, c-format -msgid "%s size changed during backup.\n" -msgstr "" +msgid "Current max files is: %u\n" +msgstr "Le nombre maximum de fichier actuel est : %u\n" -#: src/findlib/find_one.c:403 -#, c-format -msgid "Top level directory \"%s\" has unlisted fstype \"%s\"\n" -msgstr "" +#: src/dird/ua_update.c:670 +msgid "Enter new Maximum Files: " +msgstr "Saisissez la valeur du nombre maximum de fichier (Maximum Files) : " -#: src/findlib/find_one.c:418 +#: src/dird/ua_update.c:677 #, c-format -msgid "Top level directory \"%s\" has an unlisted drive type \"%s\"\n" -msgstr "" +msgid "Current value is: %s\n" +msgstr "La valeur actuelle est : %s\n" -#: src/cats/sql_create.c:101 -#, c-format -msgid "Create DB Job record %s failed. ERR=%s\n" -msgstr "" +#: src/dird/ua_update.c:678 +msgid "Enter new Maximum Bytes: " +msgstr "Saisissez la nouvelle taille maximum (octets) : " -#: src/cats/sql_create.c:145 +#: src/dird/ua_update.c:686 #, c-format -msgid "Create JobMedia record %s failed: ERR=%s\n" -msgstr "" +msgid "Current recycle flag is: %s\n" +msgstr "Le flag de recyclage courant est : %s\n" -#: src/cats/sql_create.c:154 -#, c-format -msgid "Update Media record %s failed: ERR=%s\n" +#: src/dird/ua_update.c:688 +msgid "Enter new Recycle status: " msgstr "" -#: src/cats/sql_create.c:189 +#: src/dird/ua_update.c:695 #, c-format -msgid "pool record %s already exists\n" -msgstr "Le pool %s existe déjà en base\n" +msgid "Current Slot is: %d\n" +msgstr "Le slot courant est : %d\n" -#: src/cats/sql_create.c:221 -#, c-format -msgid "Create db Pool record %s failed: ERR=%s\n" -msgstr "" +#: src/dird/ua_update.c:696 +msgid "Enter new Slot: " +msgstr "Saisissez le nouveau slot : " -#: src/cats/sql_create.c:254 +#: src/dird/ua_update.c:703 #, c-format -msgid "Device record %s already exists\n" -msgstr "Le device %s existe déjà en base\n" +msgid "Current InChanger flag is: %d\n" +msgstr "Le flag InChanger courant est : %d\n" -#: src/cats/sql_create.c:271 -#, c-format -msgid "Create db Device record %s failed: ERR=%s\n" -msgstr "" +#: src/dird/ua_update.c:704 +#, fuzzy, c-format +msgid "Set InChanger flag for Volume \"%s\": yes/no: " +msgstr "Positionner le flag InChanger ? oui/non : " -#: src/cats/sql_create.c:306 +#: src/dird/ua_update.c:718 #, c-format -msgid "More than one Storage record!: %d\n" -msgstr "" +msgid "New InChanger flag is: %d\n" +msgstr "Le nouveau flag InChanger est : %d\n" -#: src/cats/sql_create.c:311 -#, c-format -msgid "error fetching Storage row: %s\n" +#: src/dird/ua_update.c:725 +msgid "" +"Warning changing Volume Files can result\n" +"in loss of data on your Volume\n" +"\n" msgstr "" +"Attention, changer le nombre de fichier du Volume peut\n" +"vous faire perdre des données du Volume\n" +"\n" -#: src/cats/sql_create.c:332 +#: src/dird/ua_update.c:727 #, c-format -msgid "Create DB Storage record %s failed. ERR=%s\n" -msgstr "" +msgid "Current Volume Files is: %u\n" +msgstr "Le nombre courant de fichier sur le Volume est : %u\n" -#: src/cats/sql_create.c:366 -#, c-format -msgid "mediatype record %s already exists\n" -msgstr "" +#: src/dird/ua_update.c:728 +msgid "Enter new number of Files for Volume: " +msgstr "Saisissez le nouveau nombre de fichiers du Volume : " -#: src/cats/sql_create.c:383 -#, c-format -msgid "Create db mediatype record %s failed: ERR=%s\n" +#: src/dird/ua_update.c:733 +msgid "Normally, you should only increase Volume Files by one!\n" msgstr "" +"Logiquement, vous devez augmenter le nombre de fichier du Volume d'un !\n" -#: src/cats/sql_create.c:424 -#, c-format -msgid "Volume \"%s\" already exists.\n" -msgstr "Le volume \"%s\" existe déjà en base.\n" +#: src/dird/ua_update.c:734 +#, fuzzy +msgid "Increase Volume Files? (yes/no): " +msgstr "Le nouveau nombre de fichier du Volume est : %u\n" -#: src/cats/sql_create.c:470 +#: src/dird/ua_update.c:744 #, c-format -msgid "Create DB Media record %s failed. ERR=%s\n" -msgstr "" +msgid "New Volume Files is: %u\n" +msgstr "Le nouveau nombre de fichier du Volume est : %u\n" -#: src/cats/sql_create.c:521 +#: src/dird/ua_update.c:756 #, c-format -msgid "More than one Client!: %d\n" -msgstr "" +msgid "Current Pool is: %s\n" +msgstr "Le pool courant est : %s\n" -#: src/cats/sql_create.c:526 -#, c-format -msgid "error fetching Client row: %s\n" -msgstr "" +#: src/dird/ua_update.c:757 +msgid "Enter new Pool name: " +msgstr "Saisissez le nouveau nom pour ce pool : " -#: src/cats/sql_create.c:554 +#: src/dird/ua_update.c:778 #, c-format -msgid "Create DB Client record %s failed. ERR=%s\n" -msgstr "" +msgid "Current Enabled is: %d\n" +msgstr "La valeur actuelle de Enabled est : %d\n" -#: src/cats/sql_create.c:589 src/cats/sql_get.c:251 -#, c-format -msgid "More than one Path!: %s for path: %s\n" -msgstr "" +#: src/dird/ua_update.c:779 +msgid "Enter new Enabled: " +msgstr "Saisissez la nouvelle valeur pour Enabled : " -#: src/cats/sql_create.c:596 src/cats/sql_get.c:205 src/cats/sql_get.c:258 -#: src/cats/sql_get.c:640 src/cats/sql_get.c:722 src/cats/sql_get.c:1039 -#: src/cats/sql.c:340 src/cats/sql.c:347 src/cats/postgresql.c:165 +#: src/dird/ua_update.c:789 #, c-format -msgid "error fetching row: %s\n" +msgid "Current RecyclePool is: %s\n" +msgstr "Le RecyclePool courant est : %s\n" + +#: src/dird/ua_update.c:791 +msgid "No current RecyclePool\n" +msgstr "Pas de RecyclePool courant\n" + +#: src/dird/ua_update.c:801 +#, fuzzy, c-format +msgid "Current ActionOnPurge is: %s\n" +msgstr "La valeur actuelle est : %s\n" + +#: src/dird/ua_update.c:803 +msgid "Enter new ActionOnPurge (one of: Truncate, None): " msgstr "" -#: src/cats/sql_create.c:621 +#: src/dird/ua_update.c:811 +msgid "Selection terminated.\n" +msgstr "Sélection terminée.\n" + +#: src/dird/ua_update.c:831 #, c-format -msgid "Create db Path record %s failed. ERR=%s\n" +msgid "Updating %i job(s).\n" msgstr "" -#: src/cats/sql_create.c:666 +#: src/dird/ua_update.c:863 #, c-format -msgid "Create DB Counters record %s failed. ERR=%s\n" +msgid "db_update_pool_record returned %d. ERR=%s\n" +msgstr "db_update_pool_record a retourné %d. ERR=%s\n" + +#: src/dird/ua_update.c:870 +msgid "Pool DB record updated from resource.\n" msgstr "" +"Les paramètres du Pool en base ont été mis à jour depuis la configuration.\n" + +#: src/dird/ua_update.c:897 +#, fuzzy +msgid "Expect JobId keyword, not found.\n" +msgstr "%s ressource %s introuvable.\n" + +#: src/dird/ua_update.c:922 +#, fuzzy +msgid "Neither Client nor StartTime specified.\n" +msgstr "Pas de storage sélectionné.\n" -#: src/cats/sql_create.c:704 +#: src/dird/catreq.c:121 src/dird/catreq.c:364 #, c-format -msgid "More than one FileSet!: %d\n" -msgstr "" +msgid "1990 Invalid Catalog Request: %s" +msgstr "1990 Requête sur le Catalogue Invalide : %s" -#: src/cats/sql_create.c:709 +#: src/dird/catreq.c:122 #, c-format -msgid "error fetching FileSet row: ERR=%s\n" +msgid "Invalid Catalog request; DB not open: %s" +msgstr "Requête sur le Catalogue invalide ; la base n'est pas ouverte : %s" + +#: src/dird/catreq.c:143 +#, fuzzy, c-format +msgid "Pool \"%s\" not found for SD find media request.\n" +msgstr "La ressource Pool \"%s\" est introuvable pour le volume \"%s\"\n" + +#: src/dird/catreq.c:152 +msgid "1901 No Media.\n" +msgstr "1901 Pas de Media.\n" + +#: src/dird/catreq.c:184 +msgid "not in Pool" +msgstr "non présent dans le Pool" + +#: src/dird/catreq.c:186 +msgid "not correct MediaType" msgstr "" -#: src/cats/sql_create.c:740 +#: src/dird/catreq.c:196 +msgid "is not Enabled" +msgstr "n'est pas activé (Enabled)" + +#: src/dird/catreq.c:205 +#, fuzzy, c-format +msgid "1998 Volume \"%s\" catalog status is %s, %s.\n" +msgstr "1998 Le statut du Volume \"%s\" est %s, %s.\n" + +#: src/dird/catreq.c:210 #, c-format -msgid "Create DB FileSet record %s failed. ERR=%s\n" -msgstr "" +msgid "1997 Volume \"%s\" not in catalog.\n" +msgstr "1997 le Volume \"%s\" n'est pas dans le catalogue.\n" -#: src/cats/sql_create.c:989 +#: src/dird/catreq.c:236 #, c-format -msgid "Create db File record %s failed. ERR=%s" +msgid "Unable to get Media record for Volume %s: ERR=%s\n" msgstr "" +"Impossible de récupérer les informations du Media pour le Volume %s : ERR=" +"%s\n" -#: src/cats/sql_create.c:1015 +#: src/dird/catreq.c:238 #, c-format -msgid "More than one Filename! %s for file: %s\n" +msgid "1991 Catalog Request for vol=%s failed: %s" msgstr "" -#: src/cats/sql_create.c:1021 +#: src/dird/catreq.c:265 #, c-format -msgid "Error fetching row for file=%s: ERR=%s\n" +msgid "Attempt to set Volume Files from %u to %u for Volume \"%s\". Ignored.\n" msgstr "" -#: src/cats/sql_create.c:1038 +#: src/dird/catreq.c:321 #, c-format -msgid "Create db Filename record %s failed. ERR=%s\n" +msgid "Catalog error updating Media record. %s" msgstr "" -#: src/cats/sql_create.c:1058 +#: src/dird/catreq.c:323 +msgid "1993 Update Media error\n" +msgstr "1993 Erreur sur la mise à jour du Media\n" + +#: src/dird/catreq.c:350 #, c-format -msgid "Attempt to put non-attributes into catalog. Stream=%d\n" +msgid "Catalog error creating JobMedia record. %s" msgstr "" -#: src/cats/sql_create.c:1074 -msgid "Cannot Copy/Migrate job using BaseJob.\n" -msgstr "" +#: src/dird/catreq.c:352 +#, fuzzy +msgid "1992 Create JobMedia error\n" +msgstr "1991 Erreur sur la mise à jour du JobMedia\n" -#: src/cats/sql_create.c:1166 src/cats/sql_get.c:1136 -msgid "ERR=JobIds are empty\n" +#: src/dird/catreq.c:365 +#, c-format +msgid "Invalid Catalog request: %s" msgstr "" -#: src/cats/sql_create.c:1219 +#: src/dird/catreq.c:452 #, fuzzy, c-format -msgid "Create db Object record %s failed. ERR=%s" -msgstr "fopen %s en erreur : ERR=%s\n" +msgid "Attribute create error: ERR=%s" +msgstr "Erreur sur l'autochangeur : ERR=%s\n" -#: src/cats/sql_get.c:151 -#, c-format -msgid "Error fetching row: %s\n" -msgstr "" +#: src/dird/catreq.c:549 +#, fuzzy, c-format +msgid "Restore object create error. %s" +msgstr "Restauration annulée" -#: src/cats/sql_get.c:158 +#: src/dird/catreq.c:556 #, c-format -msgid "get_file_record want 1 got rows=%d PathId=%s FilenameId=%s\n" +msgid "%s not same File=%d as attributes=%d\n" msgstr "" -#: src/cats/sql_get.c:166 +#: src/dird/catreq.c:583 #, c-format -msgid "File record for PathId=%s FilenameId=%s not found.\n" +msgid "Catalog error updating file digest. Unsupported digest stream type: %d" msgstr "" -#: src/cats/sql_get.c:172 -msgid "File record not found in Catalog.\n" +#: src/dird/catreq.c:598 +#, c-format +msgid "attribute create error. %s" msgstr "" -#: src/cats/sql_get.c:199 +#: src/dird/catreq.c:604 #, c-format -msgid "More than one Filename!: %s for file: %s\n" +msgid "Catalog error updating file digest. %s" msgstr "" -#: src/cats/sql_get.c:209 +#: src/dird/catreq.c:627 +#, fuzzy, c-format +msgid "1994 Invalid Catalog Update: %s" +msgstr "1990 Requête sur le Catalogue Invalide : %s" + +#: src/dird/catreq.c:628 #, c-format -msgid "Get DB Filename record %s found bad record: %d\n" +msgid "Invalid Catalog Update; DB not open: %s" msgstr "" -#: src/cats/sql_get.c:215 +#: src/dird/catreq.c:684 src/dird/catreq.c:699 +#, fuzzy, c-format +msgid "fread attr spool error. ERR=%s\n" +msgstr "Erreur pendant l'écriture des attributs dans le spool. ERR=%s\n" + +#: src/findlib/match.c:198 src/filed/job.c:1615 src/tools/testfind.c:642 #, c-format -msgid "Filename record: %s not found.\n" +msgid "Unknown include/exclude option: %c\n" msgstr "" -#: src/cats/sql_get.c:219 -#, c-format -msgid "Filename record: %s not found in Catalog.\n" +#: src/findlib/bfile.c:85 +msgid "Unix attributes" msgstr "" -#: src/cats/sql_get.c:262 -#, c-format -msgid "Get DB path record %s found bad record: %s\n" +#: src/findlib/bfile.c:87 +msgid "File data" msgstr "" -#: src/cats/sql_get.c:275 -#, c-format -msgid "Path record: %s not found.\n" +#: src/findlib/bfile.c:89 +msgid "MD5 digest" msgstr "" -#: src/cats/sql_get.c:279 -#, c-format -msgid "Path record: %s not found in Catalog.\n" +#: src/findlib/bfile.c:91 +msgid "GZIP data" msgstr "" -#: src/cats/sql_get.c:318 -#, c-format -msgid "No Job found for JobId %s\n" +#: src/findlib/bfile.c:93 +msgid "Compressed data" msgstr "" -#: src/cats/sql_get.c:391 src/cats/sql_get.c:448 -#, c-format -msgid "No volumes found for JobId=%d\n" +#: src/findlib/bfile.c:95 +msgid "Extended attributes" msgstr "" -#: src/cats/sql_get.c:397 src/cats/sql_get.c:459 -#, c-format -msgid "Error fetching row %d: ERR=%s\n" +#: src/findlib/bfile.c:97 +msgid "Sparse data" msgstr "" -#: src/cats/sql_get.c:411 -#, c-format -msgid "No Volume for JobId %d found in Catalog.\n" +#: src/findlib/bfile.c:99 +msgid "GZIP sparse data" msgstr "" -#: src/cats/sql_get.c:552 -#, c-format -msgid "Pool id select failed: ERR=%s\n" +#: src/findlib/bfile.c:101 +msgid "Compressed sparse data" msgstr "" -#: src/cats/sql_get.c:589 -#, c-format -msgid "Client id select failed: ERR=%s\n" +#: src/findlib/bfile.c:103 +msgid "Program names" msgstr "" -#: src/cats/sql_get.c:635 -#, c-format -msgid "More than one Pool!: %s\n" +#: src/findlib/bfile.c:105 +msgid "Program data" msgstr "" -#: src/cats/sql_get.c:679 -msgid "Pool record not found in Catalog.\n" +#: src/findlib/bfile.c:107 +msgid "SHA1 digest" msgstr "" -#: src/cats/sql_get.c:717 -#, c-format -msgid "More than one Client!: %s\n" +#: src/findlib/bfile.c:109 +msgid "Win32 data" msgstr "" -#: src/cats/sql_get.c:734 src/cats/sql_get.c:738 -msgid "Client record not found in Catalog.\n" +#: src/findlib/bfile.c:111 +msgid "Win32 GZIP data" msgstr "" -#: src/cats/sql_get.c:765 -#, c-format -msgid "More than one Counter!: %d\n" +#: src/findlib/bfile.c:113 +msgid "Win32 compressed data" msgstr "" -#: src/cats/sql_get.c:770 -#, c-format -msgid "error fetching Counter row: %s\n" +#: src/findlib/bfile.c:115 +msgid "MacOS Fork data" msgstr "" -#: src/cats/sql_get.c:790 -#, c-format -msgid "Counter record: %s not found in Catalog.\n" +#: src/findlib/bfile.c:117 +msgid "HFS+ attribs" msgstr "" -#: src/cats/sql_get.c:830 -#, c-format -msgid "Error got %s FileSets but expected only one!\n" +#: src/findlib/bfile.c:119 +msgid "Standard Unix ACL attribs" msgstr "" -#: src/cats/sql_get.c:835 -#, c-format -msgid "FileSet record \"%s\" not found.\n" +#: src/findlib/bfile.c:121 +msgid "Default Unix ACL attribs" msgstr "" -#: src/cats/sql_get.c:845 -msgid "FileSet record not found in Catalog.\n" +#: src/findlib/bfile.c:123 +msgid "SHA256 digest" msgstr "" -#: src/cats/sql_get.c:941 -#, c-format -msgid "Media id select failed: ERR=%s\n" +#: src/findlib/bfile.c:125 +msgid "SHA512 digest" msgstr "" -#: src/cats/sql_get.c:979 -#, fuzzy, c-format -msgid "query dbids failed: ERR=%s\n" -msgstr "fopen %s en erreur : ERR=%s\n" - -#: src/cats/sql_get.c:1034 -#, c-format -msgid "More than one Volume!: %s\n" +#: src/findlib/bfile.c:127 +msgid "Signed digest" msgstr "" -#: src/cats/sql_get.c:1090 -#, c-format -msgid "Media record MediaId=%s not found.\n" +#: src/findlib/bfile.c:129 +msgid "Encrypted File data" msgstr "" -#: src/cats/sql_get.c:1093 -#, c-format -msgid "Media record for Volume \"%s\" not found.\n" +#: src/findlib/bfile.c:131 +msgid "Encrypted Win32 data" msgstr "" -#: src/cats/sql_get.c:1100 -#, c-format -msgid "Media record for MediaId=%u not found in Catalog.\n" +#: src/findlib/bfile.c:133 +msgid "Encrypted session data" msgstr "" -#: src/cats/sql_get.c:1103 -#, c-format -msgid "Media record for Vol=%s not found in Catalog.\n" +#: src/findlib/bfile.c:135 +msgid "Encrypted GZIP data" msgstr "" -#: src/cats/sql_find.c:98 src/cats/sql_find.c:127 src/cats/sql_find.c:182 -#, c-format -msgid "" -"Query error for start time request: ERR=%s\n" -"CMD=%s\n" +#: src/findlib/bfile.c:137 +msgid "Encrypted compressed data" msgstr "" -#: src/cats/sql_find.c:104 src/cats/sql_find.c:188 -msgid "No prior Full backup Job record found.\n" -msgstr "Pas de précédent backup Full en base.\n" +#: src/findlib/bfile.c:139 +msgid "Encrypted Win32 GZIP data" +msgstr "" -#: src/cats/sql_find.c:116 -#, c-format -msgid "Unknown level=%d\n" +#: src/findlib/bfile.c:141 +msgid "Encrypted Win32 Compressed data" msgstr "" -#: src/cats/sql_find.c:133 -#, c-format -msgid "" -"No Job record found: ERR=%s\n" -"CMD=%s\n" +#: src/findlib/bfile.c:143 +msgid "Encrypted MacOS fork data" msgstr "" -#: src/cats/sql_find.c:291 -#, c-format -msgid "Unknown Job level=%d\n" -msgstr "Niveau de job inconnu %d\n" +#: src/findlib/bfile.c:145 +#, fuzzy +msgid "Plugin Name" +msgstr "Saisissez un nom de Volume : " -#: src/cats/sql_find.c:301 -#, c-format -msgid "No Job found for: %s.\n" -msgstr "Pas de job trouvé pour : %s.\n" +#: src/findlib/bfile.c:147 +msgid "Plugin Data" +msgstr "" -#: src/cats/sql_find.c:312 -#, c-format -msgid "No Job found for: %s\n" -msgstr "Pas de job trouvé pour %s\n" +#: src/findlib/bfile.c:149 +#, fuzzy +msgid "Restore Object" +msgstr "Restauration OK" -#: src/cats/sql_find.c:393 -#, fuzzy, c-format -msgid "Request for Volume item %d greater than max %d or less than 1\n" -msgstr "Le slot %d est ignoré car il est supérieur au maximum %d.\n" +#: src/findlib/bfile.c:151 +msgid "AIX Specific ACL attribs" +msgstr "" -#: src/cats/sql_find.c:408 -#, c-format -msgid "No Volume record found for item %d.\n" -msgstr "Pas de volume trouvé en base pour l'objet %d.\n" +#: src/findlib/bfile.c:153 +msgid "Darwin Specific ACL attribs" +msgstr "" -#: src/cats/sqlite.c:166 src/cats/ingres.c:255 src/cats/postgresql.c:210 -#: src/cats/dbi.c:228 src/cats/mysql.c:164 -#, c-format -msgid "Unable to initialize DB lock. ERR=%s\n" -msgstr "Impossible d'initialiser le verrou sur la base. ERR=%s\n" +#: src/findlib/bfile.c:155 +msgid "FreeBSD Specific Default ACL attribs" +msgstr "" -#: src/cats/sqlite.c:181 -#, c-format -msgid "Database %s does not exist, please create it.\n" +#: src/findlib/bfile.c:157 +msgid "FreeBSD Specific Access ACL attribs" msgstr "" -#: src/cats/sqlite.c:203 -#, c-format -msgid "Unable to open Database=%s. ERR=%s\n" +#: src/findlib/bfile.c:159 +msgid "HPUX Specific ACL attribs" msgstr "" -#: src/cats/sqlite.c:204 -msgid "unknown" -msgstr "inconnu" +#: src/findlib/bfile.c:161 +msgid "Irix Specific Default ACL attribs" +msgstr "" -#: src/cats/sqlite.c:462 src/cats/ingres.c:496 src/cats/postgresql.c:506 -#: src/cats/postgresql.c:553 src/cats/dbi.c:631 src/cats/cats.c:149 -#: src/cats/mysql.c:393 -#, c-format -msgid "Query failed: %s: ERR=%s\n" +#: src/findlib/bfile.c:163 +msgid "Irix Specific Access ACL attribs" msgstr "" -#: src/cats/ingres.c:87 -#, fuzzy -msgid "Failed to allocate space for query filter.\n" -msgstr "Impossible de se connecter au Director\n" +#: src/findlib/bfile.c:165 +msgid "Linux Specific Default ACL attribs" +msgstr "" -#: src/cats/ingres.c:108 -#, fuzzy -msgid "Failed to allocate space for query filters.\n" -msgstr "Impossible de se connecter au Director\n" +#: src/findlib/bfile.c:167 +msgid "Linux Specific Access ACL attribs" +msgstr "" -#: src/cats/ingres.c:267 -#, fuzzy, c-format -msgid "" -"Unable to connect to Ingres server.\n" -"Database=%s User=%s\n" -"It is probably not running or your password is incorrect.\n" +#: src/findlib/bfile.c:169 +msgid "TRU64 Specific Default ACL attribs" msgstr "" -"Impossible de se connecter au serveur MySQL.\n" -"Base=%s Utilisateur=%s\n" -"Le serveur n'est pas démarré ou bien votre password est invalide.\n" -#: src/cats/ingres.c:1087 -#, fuzzy -msgid "A user name for Ingres must be supplied.\n" -msgstr "Un nom d'utilisateur MySQL doit être fourni.\n" +#: src/findlib/bfile.c:171 +msgid "TRU64 Specific Access ACL attribs" +msgstr "" -#: src/cats/sql.c:184 -#, c-format -msgid "" -"Potential performance problem:\n" -"max_connections=%d set for %s database \"%s\" should be larger than " -"Director's MaxConcurrentJobs=%d\n" +#: src/findlib/bfile.c:173 +msgid "Solaris Specific POSIX ACL attribs" msgstr "" -#: src/cats/sql.c:229 -#, c-format -msgid "" -"query %s failed:\n" -"%s\n" +#: src/findlib/bfile.c:175 +msgid "Solaris Specific NFSv4/ZFS ACL attribs" msgstr "" -#: src/cats/sql.c:251 -#, c-format -msgid "" -"insert %s failed:\n" -"%s\n" +#: src/findlib/bfile.c:177 +msgid "AFS Specific ACL attribs" msgstr "" -#: src/cats/sql.c:261 -#, c-format -msgid "Insertion problem: affected_rows=%s\n" +#: src/findlib/bfile.c:179 +msgid "AIX Specific POSIX ACL attribs" msgstr "" -#: src/cats/sql.c:282 -#, c-format -msgid "" -"update %s failed:\n" -"%s\n" +#: src/findlib/bfile.c:181 +msgid "AIX Specific NFSv4 ACL attribs" msgstr "" -#: src/cats/sql.c:292 -#, c-format -msgid "Update failed: affected_rows=%s for %s\n" +#: src/findlib/bfile.c:183 +msgid "FreeBSD Specific NFSv4/ZFS ACL attribs" msgstr "" -#: src/cats/sql.c:314 -#, c-format -msgid "" -"delete %s failed:\n" -"%s\n" +#: src/findlib/bfile.c:185 +msgid "GNU Hurd Specific Default ACL attribs" msgstr "" -#: src/cats/sql.c:408 -#, c-format -msgid "Path length is zero. File=%s\n" +#: src/findlib/bfile.c:187 +msgid "GNU Hurd Specific Access ACL attribs" msgstr "" -#: src/cats/sql.c:603 -msgid "No results to list.\n" -msgstr "Liste vide.\n" +#: src/findlib/bfile.c:189 +msgid "GNU Hurd Specific Extended attribs" +msgstr "" -#: src/cats/sql.c:721 -#, fuzzy -msgid "Could not init database batch connection\n" -msgstr "Impossible d'initialiser le Python\n" +#: src/findlib/bfile.c:191 +msgid "IRIX Specific Extended attribs" +msgstr "" -#: src/cats/sql.c:727 -#, fuzzy, c-format -msgid "Could not open database \"%s\": ERR=%s\n" -msgstr "Impossible d'ouvrir la base de données \"%s\".\n" +#: src/findlib/bfile.c:193 +msgid "TRU64 Specific Extended attribs" +msgstr "" -#: src/cats/postgresql.c:181 -#, c-format -msgid "Encoding error for database \"%s\". Wanted SQL_ASCII, got %s\n" +#: src/findlib/bfile.c:195 +msgid "AIX Specific Extended attribs" +msgstr "" + +#: src/findlib/bfile.c:197 +msgid "OpenBSD Specific Extended attribs" msgstr "" -#: src/cats/postgresql.c:246 -#, fuzzy, c-format -msgid "" -"Unable to connect to PostgreSQL server. Database=%s User=%s\n" -"Possible causes: SQL server not running; password incorrect; max_connections " -"exceeded.\n" +#: src/findlib/bfile.c:199 +msgid "Solaris Specific Extensible attribs or System Extended attribs" msgstr "" -"Impossible de se connecter au serveur PostgreSQL.\n" -"Base=%s Utilisateur=%s\n" -"Le serveur n'est pas démarré ou bien votre password est invalide.\n" -#: src/cats/postgresql.c:350 -msgid "PQescapeStringConn returned non-zero.\n" +#: src/findlib/bfile.c:201 +msgid "Solaris Specific Extended attribs" msgstr "" -#: src/cats/postgresql.c:368 -msgid "PQescapeByteaConn returned NULL.\n" +#: src/findlib/bfile.c:203 +msgid "Darwin Specific Extended attribs" msgstr "" -#: src/cats/postgresql.c:399 -msgid "PQunescapeByteaConn returned NULL.\n" +#: src/findlib/bfile.c:205 +msgid "FreeBSD Specific Extended attribs" msgstr "" -#: src/cats/postgresql.c:813 -#, c-format -msgid "error fetching currval: %s\n" +#: src/findlib/bfile.c:207 +msgid "Linux Specific Extended attribs" msgstr "" -#: src/cats/postgresql.c:1004 src/cats/dbi.c:1277 -#, fuzzy, c-format -msgid "error starting batch mode: %s" -msgstr "erreur en terminant le mode batch: %s\n" +#: src/findlib/bfile.c:209 +msgid "NetBSD Specific Extended attribs" +msgstr "" -#: src/cats/postgresql.c:1034 src/cats/postgresql.c:1041 -#, fuzzy, c-format -msgid "error ending batch mode: %s" -msgstr "erreur en terminant le mode batch: %s\n" +#: src/findlib/makepath.c:141 +#, c-format +msgid "Cannot create directory %s: ERR=%s\n" +msgstr "" -#: src/cats/postgresql.c:1088 +#: src/findlib/makepath.c:145 src/findlib/makepath.c:219 #, fuzzy, c-format -msgid "error copying in batch mode: %s" -msgstr "erreur en terminant le mode batch: %s\n" - -#: src/cats/postgresql.c:1110 -msgid "A user name for PostgreSQL must be supplied.\n" -msgstr "Un nom d'utilisateur PostgreSQL doit être fourni.\n" +msgid "%s exists but is not a directory.\n" +msgstr "%s doit être un répertoire.\n" -#: src/cats/sql_list.c:59 +#: src/findlib/makepath.c:155 #, c-format -msgid "Query failed: %s\n" -msgstr "Erreur sur la requête : %s\n" +msgid "Security problem!! We created directory %s, but it is a link.\n" +msgstr "" -#: src/cats/sql_list.c:275 -msgid "These JobIds have copies as follows:\n" +#: src/findlib/makepath.c:181 +#, c-format +msgid "Cannot change owner and/or group of %s: ERR=%s\n" msgstr "" -#: src/cats/sql_list.c:277 -msgid "The catalog contains copies as follows:\n" +#: src/findlib/makepath.c:186 +#, c-format +msgid "Cannot change permissions of %s: ERR=%s\n" msgstr "" -#: src/cats/dbi.c:117 +#: src/findlib/makepath.c:256 #, fuzzy, c-format -msgid "Unknown database type: %s\n" -msgstr "Mot clef inconnu : %s\n" +msgid "%c: is not a valid drive.\n" +msgstr "%s : est une commande invalide.\n" -#: src/cats/dbi.c:242 -#, c-format -msgid "" -"Unable to locate the DBD drivers to DBI interface in: \n" -"db_driverdir=%s. It is probaly not found any drivers\n" +#: src/findlib/makepath.c:300 +msgid "Too many subdirectories. Some permissions not reset.\n" msgstr "" -#: src/cats/dbi.c:299 -#, fuzzy, c-format -msgid "" -"Unable to connect to DBI interface. Type=%s Database=%s User=%s\n" -"Possible causes: SQL server not running; password incorrect; max_connections " -"exceeded.\n" +#: src/findlib/file_create.c:102 +#, c-format +msgid "File skipped. Not newer: %s\n" msgstr "" -"Impossible de se connecter au serveur PostgreSQL.\n" -"Base=%s Utilisateur=%s\n" -"Le serveur n'est pas démarré ou bien votre password est invalide.\n" -#: src/cats/dbi.c:1439 -#, fuzzy, c-format -msgid "error inserting batch mode: %s" -msgstr "erreur en terminant le mode batch: %s\n" +#: src/findlib/file_create.c:109 +#, c-format +msgid "File skipped. Not older: %s\n" +msgstr "" -#: src/cats/dbi.c:1456 -#, fuzzy -msgid "Driver type not specified in Catalog resource.\n" -msgstr "Impossible de trouver un Catalogue\n" +#: src/findlib/file_create.c:119 +#, c-format +msgid "File skipped. Already exists: %s\n" +msgstr "" -#: src/cats/dbi.c:1460 -#, fuzzy -msgid "Invalid driver type, must be \"dbi:\"\n" -msgstr "Saisie invalide. Veuillez répondre oui ou non.\n" +#: src/findlib/file_create.c:145 +#, c-format +msgid "File %s already exists and could not be replaced. ERR=%s.\n" +msgstr "" -#: src/cats/dbi.c:1464 -#, fuzzy -msgid "A user name for DBI must be supplied.\n" -msgstr "Un nom d'utilisateur MySQL doit être fourni.\n" +#: src/findlib/file_create.c:196 src/findlib/file_create.c:259 +#: src/findlib/file_create.c:348 +#, c-format +msgid "bpkt already open fid=%d\n" +msgstr "" -#: src/cats/cats_dummy.c:39 -msgid "Please replace this dummy libbaccats library with a proper one.\n" +#: src/findlib/file_create.c:204 src/filed/fd_plugins.c:1004 +#, c-format +msgid "Could not create %s: ERR=%s\n" msgstr "" -#: src/cats/sql_delete.c:80 +#: src/findlib/file_create.c:218 #, c-format -msgid "No pool record %s exists\n" +msgid "Cannot make fifo %s: ERR=%s\n" msgstr "" -#: src/cats/sql_delete.c:85 +#: src/findlib/file_create.c:236 #, c-format -msgid "Expecting one pool record, got %d\n" +msgid "Cannot make node %s: ERR=%s\n" msgstr "" -#: src/cats/sql_delete.c:91 +#: src/findlib/file_create.c:281 #, c-format -msgid "Error fetching row %s\n" +msgid "Could not symlink %s -> %s: ERR=%s\n" msgstr "" -#: src/cats/mysql.c:207 +#: src/findlib/file_create.c:304 src/findlib/file_create.c:317 +#, fuzzy, c-format +msgid "Could not restore file flags for file %s: ERR=%s\n" +msgstr "Impossible de créer le fichier bootstrap %s : ERR=%s\n" + +#: src/findlib/file_create.c:308 src/findlib/file_create.c:325 #, c-format -msgid "" -"Unable to connect to MySQL server.\n" -"Database=%s User=%s\n" -"MySQL connect failed either server not running or your authorization is " -"incorrect.\n" +msgid "Could not hard link %s -> %s: ERR=%s\n" msgstr "" -"Impossible de se connecter au serveur MySQL.\n" -"Base=%s Utilisateur=%s\n" -"Le serveur n'est pas démarré ou bien votre password est invalide.\n" -#: src/cats/mysql.c:692 -msgid "A user name for MySQL must be supplied.\n" -msgstr "Un nom d'utilisateur MySQL doit être fourni.\n" +#: src/findlib/file_create.c:321 +#, fuzzy, c-format +msgid "Could not reset file flags for file %s: ERR=%s\n" +msgstr "Impossible de créer le fichier bootstrap %s : ERR=%s\n" -#: src/wx-console/console_conf.c:147 src/console/console_conf.c:140 -#: src/qt-console/bat_conf.cpp:141 +#: src/findlib/file_create.c:363 #, c-format -msgid "No record for %d %s\n" +msgid "Original file %s have been deleted: type=%d\n" msgstr "" -#: src/wx-console/console_conf.c:156 src/console/console_conf.c:149 +#: src/findlib/file_create.c:375 #, c-format -msgid "Console: name=%s rcfile=%s histfile=%s\n" +msgid "Original file %s not saved: type=%d\n" msgstr "" -#: src/wx-console/console_conf.c:160 src/console/console_conf.c:153 -#: src/qt-console/bat_conf.cpp:150 +#: src/findlib/file_create.c:378 #, c-format -msgid "Director: name=%s address=%s DIRport=%d\n" +msgid "Unknown file type %d; not restored: %s\n" msgstr "" -#: src/wx-console/authenticate.c:142 src/console/authenticate.c:138 -msgid "TLS negotiation failed\n" +#: src/findlib/file_create.c:413 +#, c-format +msgid "Zero length filename: %s\n" msgstr "" -#: src/wx-console/authenticate.c:150 -#, fuzzy -msgid "Bad response to Hello command: ERR=" -msgstr "Mauvaise réponse à la commande Hello : ERR=%s\n" +#: src/findlib/find.c:186 +#, fuzzy, c-format +msgid "Plugin: \"%s\" not found.\n" +msgstr "Plugin=%s non trouvé.\n" -#: src/wx-console/authenticate.c:167 src/console/authenticate.c:169 -#, fuzzy -msgid "" -"Director authorization problem.\n" -"Most likely the passwords do not agree.\n" -"If you are using TLS, there may have been a certificate validation error " -"during the TLS handshake.\n" -"Please see " +#: src/findlib/file_attrs.c:96 src/findlib/file_attrs.c:138 +#, c-format +msgid "Unable to set file modes %s: ERR=%s\n" msgstr "" -"Problème d'authentification avec le director.\n" -"Le plus souvent, les mots de pass ne correspondent pas.\n" -"Si vous utilisez TLS, il peut y avoir une erreur de validation du " -"certificat\n" -"pendant l'initialisation de la connexion TLS.\n" -"Vous trouverez de l'aide sur\n" -"http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors\n" -#: src/console/console.c:126 +#: src/findlib/file_attrs.c:106 src/findlib/file_attrs.c:132 +#: src/findlib/file_attrs.c:589 #, c-format -msgid "" -"\n" -"Version: " +msgid "Unable to set file owner %s: ERR=%s\n" msgstr "" -"\n" -"Version : " -#: src/console/console.c:178 -msgid "input from file" +#: src/findlib/file_attrs.c:125 src/findlib/file_attrs.c:150 +#, c-format +msgid "Unable to set file times %s: ERR=%s\n" msgstr "" -#: src/console/console.c:179 -msgid "output to file" +#: src/findlib/file_attrs.c:566 +#, c-format +msgid "File size of restored file %s not correct. Original %s, restored %s.\n" msgstr "" -#: src/console/console.c:180 -msgid "quit" -msgstr "quit" - -#: src/console/console.c:181 -msgid "output to file and terminal" +#: src/findlib/file_attrs.c:609 +#, c-format +msgid "Unable to set file flags %s: ERR=%s\n" msgstr "" -#: src/console/console.c:182 -msgid "sleep specified time" +#: src/findlib/find_one.c:215 +#, c-format +msgid " NODUMP flag set - will not process %s\n" msgstr "" -#: src/console/console.c:183 -msgid "print current time" -msgstr "affiche la date courante" - -#: src/console/console.c:184 -msgid "print Console's version" -msgstr "" +#: src/findlib/find_one.c:236 +#, fuzzy, c-format +msgid "Cannot stat file %s: ERR=%s\n" +msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" -#: src/console/console.c:185 -msgid "echo command string" +#: src/findlib/find_one.c:241 +#, c-format +msgid "%s mtime changed during backup.\n" msgstr "" -#: src/console/console.c:186 -msgid "execute an external command" +#: src/findlib/find_one.c:248 +#, c-format +msgid "%s ctime changed during backup.\n" msgstr "" -#: src/console/console.c:187 -msgid "exit = quit" -msgstr "exit = quit" - -#: src/console/console.c:188 -msgid "zed_keys = use zed keys instead of bash keys" +#: src/findlib/find_one.c:255 +#, c-format +msgid "%s size of %lld changed during backup to %lld.n" msgstr "" -#: src/console/console.c:189 -msgid "help listing" +#: src/findlib/find_one.c:383 +#, c-format +msgid "Top level directory \"%s\" has unlisted fstype \"%s\"\n" msgstr "" -#: src/console/console.c:191 -msgid "set command separator" +#: src/findlib/find_one.c:398 +#, c-format +msgid "Top level directory \"%s\" has an unlisted drive type \"%s\"\n" msgstr "" -#: src/console/console.c:225 -msgid ": is an invalid command\n" -msgstr "%s : est une commande invalide.\n" +#: src/filed/job.c:294 +#, fuzzy, c-format +msgid "Command: \"%s\" is disabled.\n" +msgstr "Commande annulée.\n" -#: src/console/console.c:675 +#: src/filed/job.c:440 #, fuzzy -msgid "Illegal separator character.\n" -msgstr "Caractère illégal « %c » dans le nom.\n" +msgid "SD connect failed: Bad Hello command\n" +msgstr "Le director a rejeté la commande Hello\n" -#: src/console/console.c:708 -#, fuzzy -msgid "Command logic problem\n" -msgstr "Commande annulée.\n" +#: src/filed/job.c:448 +#, fuzzy, c-format +msgid "SD connect failed: Job name not found: %s\n" +msgstr "Job non trouvé : %s\n" -#: src/console/console.c:925 +#: src/filed/job.c:501 #, fuzzy, c-format -msgid "Can't find %s in Director list\n" -msgstr "Impossible de trouver la ressource Director \"%s\"\n" +msgid "Bad command from %s. Len=%d.\n" +msgstr "Connexion invalide. Len=%d\n" -#: src/console/console.c:933 -msgid "Available Directors:\n" -msgstr "" +#: src/filed/job.c:555 +msgid "2902 Error scanning cancel command.\n" +msgstr "2902 Erreur dans le décodage de la commande d'annulation.\n" -#: src/console/console.c:937 +#: src/filed/job.c:559 src/filed/job.c:598 #, c-format -msgid "%2d: %s at %s:%d\n" -msgstr "" - -#: src/console/console.c:941 -msgid "Select Director by entering a number: " -msgstr "" +msgid "2901 Job %s not found.\n" +msgstr "2901 Le job %s est introuvable.\n" -#: src/console/console.c:948 +#: src/filed/job.c:569 #, fuzzy, c-format -msgid "%s is not a number. You must enter a number between 1 and %d\n" -msgstr "Vous devez saisir un nombre entre 1 et %d\n" +msgid "2001 Job \"%s\" marked to be %s.\n" +msgstr "2001 Le job %s va être annulé.\n" -#: src/console/console.c:955 -#, c-format -msgid "You must enter a number between 1 and %d\n" -msgstr "Vous devez saisir un nombre entre 1 et %d\n" +#: src/filed/job.c:592 +#, fuzzy, c-format +msgid "2991 Bad setbandwidth command: %s\n" +msgstr "2991 Erreur dans la commande setdebug : %s\n" -#: src/console/console.c:1160 src/wx-console/console_thread.cpp:399 -#: src/qt-console/bcomm/dircomm.cpp:131 +#: src/filed/job.c:645 #, c-format -msgid "Failed to initialize TLS context for Console \"%s\".\n" -msgstr "Impossible d'initialiser le contexte TLS pour la Console \"%s\".\n" +msgid "2991 Bad setdebug command: %s\n" +msgstr "2991 Erreur dans la commande setdebug : %s\n" -#: src/console/console.c:1180 src/wx-console/console_thread.cpp:420 -#: src/qt-console/bcomm/dircomm.cpp:154 +#: src/filed/job.c:678 #, c-format -msgid "Failed to initialize TLS context for Director \"%s\".\n" -msgstr "Impossible d'initialiser le contexte TLS pour le Director \"%s\".\n" - -#: src/console/console.c:1210 -msgid "Enter a period to cancel a command.\n" -msgstr "Tapez un point (.) pour annuler une commande.\n" +msgid "Bad estimate command: %s" +msgstr "" -#: src/console/console.c:1304 src/qt-console/main.cpp:232 -#, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Director \"%s\" in %s. At least one CA certificate store is required.\n" +#: src/filed/job.c:679 +msgid "2992 Bad estimate command.\n" msgstr "" -#: src/console/console.c:1313 src/qt-console/main.cpp:241 +#: src/filed/job.c:702 #, c-format -msgid "" -"No Director resource defined in %s\n" -"Without that I don't how to speak to the Director :-(\n" +msgid "Bad Job Command: %s" msgstr "" -"Pas de director défini pour %s\n" -"Sans cette définition, il n'est pas possible de se connecter à celui-ci.\n" -#: src/console/console.c:1333 src/qt-console/main.cpp:262 +#: src/filed/job.c:737 #, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Console \"%s\" in %s.\n" +msgid "Bad RunBeforeJob command: %s\n" msgstr "" -#: src/console/console.c:1359 -msgid "Too many arguments on input command.\n" -msgstr "Trop d'arguments sur la commande.\n" +#: src/filed/job.c:738 src/filed/job.c:757 +msgid "2905 Bad RunBeforeJob command.\n" +msgstr "" -#: src/console/console.c:1363 -msgid "First argument to input command must be a filename.\n" -msgstr "Le premier argument de la commande doit être un fichier.\n" +#: src/filed/job.c:768 +msgid "2905 Bad RunBeforeNow command.\n" +msgstr "" -#: src/console/console.c:1369 +#: src/filed/job.c:787 #, c-format -msgid "Cannot open file %s for input. ERR=%s\n" -msgstr "Impossible d'ouvrir le fichier %s pour lecture. ERR=%s\n" +msgid "Bad RunAfter command: %s\n" +msgstr "" -#: src/console/console.c:1401 -msgid "Too many arguments on output/tee command.\n" +#: src/filed/job.c:788 +msgid "2905 Bad RunAfterJob command.\n" msgstr "" -#: src/console/console.c:1418 +#: src/filed/job.c:824 #, c-format -msgid "Cannot open file %s for output. ERR=%s\n" -msgstr "Impossible d'ouvrir le fichier %s pour la sortie. ERR=%s\n" +msgid "Bad RunScript command: %s\n" +msgstr "Erreur dans la commande RunScript : %s\n" -#: src/console/console.c:1437 -msgid "Too many arguments. Enclose command in double quotes.\n" -msgstr "" -"Trop d'arguments sur la commande. Essayez d'utiliser des « \" » autour des " -"commandes\n" +#: src/filed/job.c:825 +msgid "2905 Bad RunScript command.\n" +msgstr "2905 Erreur sur la commande RunScript.\n" -#: src/console/console.c:1446 +#: src/filed/job.c:880 #, fuzzy, c-format -msgid "Cannot popen(\"%s\", \"r\"): ERR=%s\n" -msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" +msgid "Bad RestoreObject command: %s\n" +msgstr "Erreur dans la commande RunScript : %s\n" -#: src/tools/testls.c:59 -#, c-format -msgid "" -"\n" -"Usage: testls [-d debug_level] [-] [pattern1 ...]\n" -" -a print extended attributes (Win32 debug)\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -e specify file of exclude patterns\n" -" -i specify file of include patterns\n" -" -q quiet, don't print filenames (debug)\n" -" - read pattern(s) from stdin\n" -" -? print this message.\n" -"\n" -"Patterns are file inclusion -- normally directories.\n" -"Debug level >= 1 prints each file found.\n" -"Debug level >= 10 prints path/file for catalog.\n" -"Errors always printed.\n" -"Files/paths truncated is number with len > 255.\n" -"Truncation is only in catalog.\n" -"\n" -msgstr "" +#: src/filed/job.c:945 +#, fuzzy +msgid "2909 Bad RestoreObject command.\n" +msgstr "2905 Erreur sur la commande RunScript.\n" -#: src/tools/testls.c:155 +#: src/filed/job.c:984 #, c-format -msgid "Could not open include file: %s\n" +msgid "Plugin Directory not defined. Cannot use plugin: \"%s\"\n" msgstr "" -#: src/tools/testls.c:168 +#: src/filed/job.c:1026 #, c-format -msgid "Could not open exclude file: %s\n" -msgstr "" +msgid "Error running program: %s. stat=%d: ERR=%s\n" +msgstr "Erreur dans l'exécution de la commande : %s. stat=%d: ERR=%s\n" -#: src/tools/testls.c:182 +#: src/filed/job.c:1037 #, c-format -msgid "Files seen = %d\n" +msgid "Cannot open FileSet input file: %s. ERR=%s\n" msgstr "" -#: src/tools/testls.c:215 src/tools/testfind.c:322 +#: src/filed/job.c:1191 #, c-format -msgid "Err: Could not access %s: %s\n" +msgid "REGEX %s compile error. ERR=%s\n" msgstr "" -#: src/tools/testls.c:218 src/tools/testfind.c:325 +#: src/filed/job.c:1342 #, c-format -msgid "Err: Could not follow ff->link %s: %s\n" +msgid "Invalid FileSet command: %s\n" msgstr "" -#: src/tools/testls.c:221 src/tools/testfind.c:328 -#, c-format -msgid "Err: Could not stat %s: %s\n" +#: src/filed/job.c:1749 +#, fuzzy, c-format +msgid "" +"DIR and FD clocks differ by %lld seconds, FD automatically compensating.\n" msgstr "" +"L'horloge du client et du director ont %d secondes d'écart, le client s'est " +"ajusté automatiquement.\n" -#: src/tools/testls.c:224 src/tools/testfind.c:331 +#: src/filed/job.c:1758 #, c-format -msgid "Skip: File not saved. No change. %s\n" +msgid "Unknown backup level: %s\n" msgstr "" -#: src/tools/testls.c:227 src/tools/testfind.c:334 +#: src/filed/job.c:1771 #, c-format -msgid "Err: Attempt to backup archive. Not saved. %s\n" +msgid "Bad level command: %s\n" msgstr "" -#: src/tools/testls.c:230 +#: src/filed/job.c:1793 #, c-format -msgid "Recursion turned off. Directory not entered. %s\n" +msgid "Bad session command: %s" msgstr "" -#: src/tools/testls.c:233 -#, c-format -msgid "Skip: File system change prohibited. Directory not entered. %s\n" -msgstr "" +#: src/filed/job.c:1922 +#, fuzzy +msgid "Failed connect from Storage daemon. SD bsock=NULL.\n" +msgstr "Impossible de se connecter au Storage daemon.\n" -#: src/tools/testls.c:236 src/tools/testfind.c:337 -#, c-format -msgid "Err: Could not open directory %s: %s\n" +#: src/filed/job.c:1967 +msgid "ACL support not configured for your machine.\n" msgstr "" -#: src/tools/testls.c:239 src/tools/testfind.c:340 -#, c-format -msgid "Err: Unknown file ff->type %d: %s\n" +#: src/filed/job.c:1971 +msgid "XATTR support not configured for your machine.\n" msgstr "" -#: src/tools/bvfs_test.c:56 src/tools/ing_test.c:57 -#, fuzzy, c-format -msgid "" -"\n" -"Version: %s (%s)\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -n specify the database name (default bacula)\n" -" -u specify database user name (default bacula)\n" -" -P specify database host (default NULL)\n" -" -w specify working directory\n" -" -j specify jobids\n" -" -p specify path\n" -" -f specify file\n" -" -l maximum tuple to fetch\n" -" -T truncate cache table before starting\n" -" -v verbose\n" -" -? print this message\n" -"\n" +#: src/filed/job.c:1980 +msgid "Cannot contact Storage daemon\n" +msgstr "Impossible de se connecter au démon Storage\n" + +#: src/filed/job.c:1999 +#, c-format +msgid "Bad response to append open: %s\n" msgstr "" -"Copyright (C) 2000-2005 Kern Sibbald.\n" -"\n" -"Version : %s (%s)\n" -"\n" -"Usage : dird [-f -s] [-c config_file] [-d debug_level] [config_file]\n" -" -c utilise fich comme fichier de configuration\n" -" -dnn positionne le niveau de debug à nn\n" -" -f reste en avant-plan (pour debugger)\n" -" -g groupid\n" -" -r lance maintenant\n" -" -s pas de signaux\n" -" -t test - lit seulement le fichier de configuration\n" -" -u userid\n" -" -v affiche les messages utilisateurs\n" -" -? affiche ce message.\n" -"\n" -#: src/tools/bbatch.c:79 -#, fuzzy, c-format -msgid "" -"\n" -"Version: %s (%s)\n" -"Example : bbatch -w /path/to/workdir -h localhost -f dat1 -f dat -f datx\n" -" will start 3 thread and load dat1, dat and datx in your catalog\n" -"See bbatch.c to generate datafile\n" -"\n" -"Usage: bbatch [ options ] -w working/dir -f datafile\n" -" -b with batch mode\n" -" -B without batch mode\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -n specify the database name (default bacula)\n" -" -u specify database user name (default bacula)\n" -" -P specify database host (default NULL)\n" -" -w specify working directory\n" -" -r call restore code with given jobids\n" -" -v verbose\n" -" -f specify data file\n" -" -? print this message\n" -"\n" +#: src/filed/job.c:2004 +msgid "Bad response from stored to open command\n" msgstr "" -"Copyright (C) 2000-2005 Kern Sibbald.\n" -"\n" -"Version : %s (%s)\n" -"\n" -"Usage : dird [-f -s] [-c config_file] [-d debug_level] [config_file]\n" -" -c utilise fich comme fichier de configuration\n" -" -dnn positionne le niveau de debug à nn\n" -" -f reste en avant-plan (pour debugger)\n" -" -g groupid\n" -" -r lance maintenant\n" -" -s pas de signaux\n" -" -t test - lit seulement le fichier de configuration\n" -" -u userid\n" -" -v affiche les messages utilisateurs\n" -" -? affiche ce message.\n" -"\n" -#: src/tools/bbatch.c:211 -#, c-format -msgid "Computing file list for jobid=%s files=%lld secs=%d\n" +#: src/filed/job.c:2069 +msgid "Append Close with SD failed.\n" msgstr "" -#: src/tools/bbatch.c:315 +#: src/filed/job.c:2073 #, fuzzy, c-format -msgid "Error opening datafile %s\n" -msgstr "Impossible d'ouvrir le fichier de données %s.\n" - -#: src/tools/bbatch.c:325 -#, fuzzy -msgid "Error while inserting file\n" -msgstr "Entrez le nombre de départ : " +msgid "Bad status %d %c returned from Storage Daemon.\n" +msgstr "Impossible de récupérer le statut du Job depuis le FD.\n" -#: src/tools/ing_test.c:231 src/tools/ing_test.c:264 src/tools/ing_test.c:302 -msgid "Stmt went wrong\n" +#: src/filed/job.c:2095 +#, c-format +msgid "2994 Bad verify command: %s\n" msgstr "" -#: src/tools/ing_test.c:320 -msgid "CREATE-Stmt went wrong\n" +#: src/filed/job.c:2110 src/filed/job.c:2151 +#, c-format +msgid "2994 Bad verify level: %s\n" msgstr "" -#: src/tools/ing_test.c:325 -msgid "DROP-Stmt went wrong\n" +#: src/filed/job.c:2222 +#, c-format +msgid "Bad replace command. CMD=%s\n" msgstr "" -#: src/tools/fstype.c:48 +#: src/filed/job.c:2248 #, c-format -msgid "" -"\n" -"Usage: fstype [-v] path ...\n" -"\n" -" Print the file system type a given file/directory is on.\n" -" The following options are supported:\n" -"\n" -" -v print both path and file system type.\n" -" -? print this message.\n" -"\n" +msgid "Bad where regexp. where=%s\n" msgstr "" -#: src/tools/fstype.c:102 src/tools/drivetype.c:78 -#, c-format -msgid "%s: unknown\n" +#: src/filed/job.c:2344 +msgid "Improper calling sequence.\n" msgstr "" -#: src/tools/bregex.c:153 src/tools/bwild.c:122 src/tools/bregtest.c:137 +#: src/filed/job.c:2364 #, c-format -msgid "Could not open data file: %s\n" -msgstr "Impossible d'ouvrir le fichier de données %s.\n" +msgid "Bad response to SD read open: %s\n" +msgstr "" -#: src/tools/drivetype.c:47 -#, c-format -msgid "" -"\n" -"Usage: drivetype [-v] path ...\n" -"\n" -" Print the drive type a given file/directory is on.\n" -" The following options are supported:\n" -"\n" -" -l print local fixed hard drive\n" -" -a display information on all drives\n" -" -v print both path and file system type.\n" -" -? print this message.\n" -"\n" +#: src/filed/job.c:2369 +msgid "Bad response from stored to read open command\n" msgstr "" -#: src/tools/testfind.c:70 +#: src/filed/job.c:2431 #, c-format -msgid "" -"\n" -"Usage: testfind [-d debug_level] [-] [pattern1 ...]\n" -" -a print extended attributes (Win32 debug)\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -c specify config file containing FileSet resources\n" -" -f specify which FileSet to use\n" -" -? print this message.\n" -"\n" -"Patterns are used for file inclusion -- normally directories.\n" -"Debug level >= 1 prints each file found.\n" -"Debug level >= 10 prints path/file for catalog.\n" -"Errors are always printed.\n" -"Files/paths truncated is the number of files/paths with len > 255.\n" -"Truncation is only in the catalog.\n" -"\n" +msgid "Comm error with SD. bad response to %s. ERR=%s\n" msgstr "" -#: src/tools/testfind.c:235 +#: src/filed/job.c:2434 +#, fuzzy, c-format +msgid "Bad response from SD to %s command. Wanted %s, got %s\n" +msgstr "Mauvaise réponse à la commande %s : voulait %s, pas %s\n" + +#: src/filed/filed_conf.c:196 src/filed/filed_conf.c:220 +#, fuzzy, c-format +msgid "Expected a Cipher Type keyword, got: %s" +msgstr "Attendait le mot clef FileSet, eu : %s" + +#: src/filed/accurate.c:189 #, c-format -msgid "" -"\n" -"Total files : %d\n" -"Max file length: %d\n" -"Max path length: %d\n" -"Files truncated: %d\n" -"Paths truncated: %d\n" -"Hard links : %d\n" +msgid "Space saved with Base jobs: %lld MB\n" msgstr "" -#: src/tools/testfind.c:278 +#: src/filed/accurate.c:388 +#, fuzzy, c-format +msgid "Cannot verify checksum for %s\n" +msgstr "Impossible de trouver la ressource Schedule \"%s\"\n" + +#: src/filed/accurate.c:417 src/filed/verify.c:235 src/filed/backup.c:505 #, c-format -msgid "Reg: %s\n" +msgid "%s digest initialization failed\n" msgstr "" -#: src/tools/testfind.c:300 -msgid "\t[will not descend: recursion turned off]" -msgstr "" +#: src/filed/accurate.c:496 +#, fuzzy +msgid "2991 Bad accurate command\n" +msgstr "2991 Erreur dans la commande setdebug : %s\n" -#: src/tools/testfind.c:302 -msgid "\t[will not descend: file system change not allowed]" +#: src/filed/fd_plugins.c:545 src/filed/fd_plugins.c:689 +#, c-format +msgid "Command plugin \"%s\": no type in startBackupFile packet.\n" msgstr "" -#: src/tools/testfind.c:304 -msgid "\t[will not descend: disallowed file system]" +#: src/filed/fd_plugins.c:558 +#, c-format +msgid "Command plugin \"%s\": no object_name in startBackupFile packet.\n" msgstr "" -#: src/tools/testfind.c:306 -msgid "\t[will not descend: disallowed drive type]" +#: src/filed/fd_plugins.c:571 src/filed/fd_plugins.c:696 +#, c-format +msgid "Command plugin \"%s\": no fname in startBackupFile packet.\n" msgstr "" -#: src/tools/testfind.c:390 +#: src/filed/fd_plugins.c:770 +#, fuzzy +msgid "Plugin save packet not found.\n" +msgstr "le client \"%s\" est introuvable.\n" + +#: src/filed/fd_plugins.c:784 src/filed/fd_plugins.c:800 src/filed/xattr.c:85 +#: src/filed/xattr.c:100 src/filed/xattr.c:108 src/filed/backup.c:1000 +#: src/filed/backup.c:1199 src/filed/backup.c:1236 src/filed/backup.c:1249 +#: src/filed/backup.c:1324 src/filed/backup.c:1423 src/filed/acl.c:96 +#: src/filed/acl.c:111 src/filed/acl.c:119 #, c-format -msgid "===== Filename truncated to 255 chars: %s\n" +msgid "Network send error to SD. ERR=%s\n" msgstr "" -#: src/tools/testfind.c:407 +#: src/filed/fd_plugins.c:905 #, c-format -msgid "========== Path name truncated to 255 chars: %s\n" -msgstr "" +msgid "Plugin=%s not found.\n" +msgstr "Plugin=%s non trouvé.\n" -#: src/tools/testfind.c:416 +#: src/filed/fd_plugins.c:972 #, c-format -msgid "========== Path length is zero. File=%s\n" +msgid "Plugin createFile call failed. Stat=%d file=%s\n" msgstr "" -#: src/tools/testfind.c:419 +#: src/filed/fd_plugins.c:977 #, c-format -msgid "Path: %s\n" +msgid "Plugin createFile call failed. Returned CF_ERROR file=%s\n" msgstr "" -#: src/tools/cats_test.c:60 -#, fuzzy, c-format -msgid "" -"\n" -"Version: %s (%s)\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -n specify the database name (default bacula)\n" -" -u specify database user name (default bacula)\n" -" -P specify database host (default NULL)\n" -" -w specify working directory\n" -" -p specify path\n" -" -f specify file\n" -" -l maximum tuple to fetch\n" -" -q print only errors\n" -" -v verbose\n" -" -? print this message\n" -"\n" +#: src/filed/fd_plugins.c:1863 +msgid "Command plugin: no fname in baculaCheckChanges packet.\n" msgstr "" -"Copyright (C) 2000-2005 Kern Sibbald.\n" -"\n" -"Version : %s (%s)\n" -"\n" -"Usage : dird [-f -s] [-c config_file] [-d debug_level] [config_file]\n" -" -c utilise fich comme fichier de configuration\n" -" -dnn positionne le niveau de debug à nn\n" -" -f reste en avant-plan (pour debugger)\n" -" -g groupid\n" -" -r lance maintenant\n" -" -s pas de signaux\n" -" -t test - lit seulement le fichier de configuration\n" -" -u userid\n" -" -v affiche les messages utilisateurs\n" -" -? affiche ce message.\n" -"\n" -#: src/tools/cats_test.c:376 -#, fuzzy, c-format -msgid "Could not open, database \"%s\".\n" -msgstr "Impossible d'ouvrir la base de données \"%s\".\n" +#: src/filed/restore.c:102 +#, c-format +msgid "Size of data or stream of %s not correct. Original %s, restored %s.\n" +msgstr "" -#: src/tools/bsmtp.c:151 +#: src/filed/restore.c:122 #, c-format -msgid "Fatal malformed reply from %s: %s\n" +msgid "Invalid length of Finder Info (got %d, not 32)\n" msgstr "" -#: src/tools/bsmtp.c:159 +#: src/filed/restore.c:127 #, fuzzy, c-format -msgid "Fatal fgets error: ERR=%s\n" -msgstr "erreur de fermeture : ERR=%s\n" +msgid "Could not set Finder Info on %s\n" +msgstr "Impossible d'ouvrir le device %s\n" -#: src/tools/bsmtp.c:192 -#, fuzzy, c-format -msgid "" -"\n" -"Usage: %s [-f from] [-h mailhost] [-s subject] [-c copy] [recipient ...]\n" -" -4 forces bsmtp to use IPv4 addresses only.\n" -" -6 forces bsmtp to use IPv6 addresses only.\n" -" -8 set charset to UTF-8\n" -" -a use any ip protocol for address resolution\n" -" -c set the Cc: field\n" -" -d set debug level to \n" -" -dt print a timestamp in debug output\n" -" -f set the From: field\n" -" -h use mailhost:port as the SMTP server\n" -" -s set the Subject: field\n" -" -r set the Reply-To: field\n" -" -l set the maximum number of lines to send (default: " -"unlimited)\n" -" -? print this message.\n" -"\n" -msgstr "" -"\n" -"Version : %s (%s)\n" -"\n" -"Usage : dird [-f -s] [-c config_file] [-d debug_level] [config_file]\n" -" -c utilise fich comme fichier de configuration\n" -" -d positionne le niveau de debug à nn\n" -" -dt affiche un timestamp devant chaque ligne de debug\n" -" -f reste en avant-plan (pour debugger)\n" -" -g groupid\n" -" -r lance maintenant\n" -" -s pas de signaux\n" -" -t test - lit seulement le fichier de configuration\n" -" -u userid\n" -" -v affiche les messages utilisateurs\n" -" -? affiche ce message.\n" -"\n" +#: src/filed/restore.c:406 +#, fuzzy +msgid "LZO init failed\n" +msgstr "Impossible de Rembobiner.\n" -#: src/tools/bsmtp.c:379 -msgid "Fatal error: no recipient given.\n" +#: src/filed/restore.c:474 src/filed/verify_vol.c:85 +#, c-format +msgid "Record header scan error: %s\n" msgstr "" -#: src/tools/bsmtp.c:407 +#: src/filed/restore.c:486 src/filed/verify_vol.c:94 #, c-format -msgid "Fatal gethostname error: ERR=%s\n" +msgid "Data record error. ERR=%s\n" msgstr "" -#: src/tools/bsmtp.c:418 -#, fuzzy, c-format -msgid "Fatal getaddrinfo for myself failed \"%s\": ERR=%s\n" -msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" - -#: src/tools/bsmtp.c:426 +#: src/filed/restore.c:490 src/filed/verify_vol.c:98 #, c-format -msgid "Fatal gethostbyname for myself failed \"%s\": ERR=%s\n" +msgid "Actual data size %d not same as header %d\n" msgstr "" -#: src/tools/bsmtp.c:486 src/tools/bsmtp.c:521 -#, c-format -msgid "Error unknown mail host \"%s\": ERR=%s\n" +#: src/filed/restore.c:651 +msgid "Unexpected cryptographic session data stream.\n" msgstr "" -#: src/tools/bsmtp.c:489 src/tools/bsmtp.c:524 -msgid "Retrying connection using \"localhost\".\n" +#: src/filed/restore.c:661 +msgid "" +"No private decryption keys have been defined to decrypt encrypted backup " +"data.\n" msgstr "" -#: src/tools/bsmtp.c:514 -#, fuzzy, c-format -msgid "Failed to connect to mailhost %s\n" -msgstr "Impossible de se connecter au Client.\n" +#: src/filed/restore.c:672 +#, fuzzy +msgid "Could not create digest.\n" +msgstr "Impossible de créer la structure BSOCK cliente.\n" -#: src/tools/bsmtp.c:532 -#, c-format -msgid "Fatal error: Unknown address family for smtp host: %d\n" +#: src/filed/restore.c:690 +msgid "Missing private key required to decrypt encrypted backup data.\n" msgstr "" -#: src/tools/bsmtp.c:541 src/tools/bsmtp.c:546 -#, c-format -msgid "Fatal socket error: ERR=%s\n" -msgstr "" +#: src/filed/restore.c:693 +msgid "Decrypt of the session key failed.\n" +msgstr "Impossible de décrypter la clef de session.\n" -#: src/tools/bsmtp.c:551 -#, c-format -msgid "Fatal connect error to %s: ERR=%s\n" -msgstr "" +#: src/filed/restore.c:696 +#, fuzzy +msgid "Signer not found. Decryption failed.\n" +msgstr "La création de la signature a échouée" -#: src/tools/bsmtp.c:560 -#, fuzzy, c-format -msgid "Fatal _open_osfhandle error: ERR=%s\n" -msgstr "erreur de fermeture : ERR=%s\n" +#: src/filed/restore.c:699 +#, fuzzy +msgid "Unsupported digest algorithm. Decrypt failed.\n" +msgstr "Le digest spécifié n'est pas supporté : %d\n" -#: src/tools/bsmtp.c:567 src/tools/bsmtp.c:571 src/tools/bsmtp.c:580 -#: src/tools/bsmtp.c:584 -#, c-format -msgid "Fatal fdopen error: ERR=%s\n" -msgstr "" +#: src/filed/restore.c:702 +#, fuzzy +msgid "Unsupported encryption algorithm. Decrypt failed.\n" +msgstr "contentEncryptionAlgorithm non supporté : %d\n" -#: src/tools/bsmtp.c:576 +#: src/filed/restore.c:706 #, c-format -msgid "Fatal dup error: ERR=%s\n" -msgstr "" - -#: src/tools/dbcheck.c:195 msgid "" -"Warning skipping the additional parameters for working directory/dbname/user/" -"password/host.\n" +"An error=%d occurred while decoding encrypted session data stream: ERR=%s\n" msgstr "" -#: src/tools/dbcheck.c:212 +#: src/filed/restore.c:774 src/filed/restore.c:828 #, c-format -msgid "Error can not find the Catalog name[%s] in the given config file [%s]\n" +msgid "Missing encryption session data stream for %s\n" msgstr "" -#: src/tools/dbcheck.c:214 +#: src/filed/restore.c:782 src/filed/restore.c:835 #, c-format -msgid "Error there is no Catalog section in the given config file [%s]\n" +msgid "Failed to initialize decryption context for %s\n" msgstr "" -#: src/tools/dbcheck.c:223 -msgid "Error no Director resource defined.\n" -msgstr "" +#: src/filed/restore.c:847 +#, fuzzy, c-format +msgid "Cannot open resource fork for %s.\n" +msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" -#: src/tools/dbcheck.c:247 -msgid "Wrong number of arguments.\n" +#: src/filed/restore.c:992 +msgid "Unexpected cryptographic signature data stream.\n" msgstr "" -#: src/tools/dbcheck.c:252 -msgid "Working directory not supplied.\n" +#: src/filed/restore.c:1000 +#, c-format +msgid "Failed to decode message signature for %s\n" msgstr "" -#: src/tools/dbcheck.c:288 -msgid "Database port must be a numeric value.\n" -msgstr "" +#: src/filed/restore.c:1064 +#, fuzzy, c-format +msgid "Encountered %ld acl errors while doing restore\n" +msgstr "Saisir la liste des fichiers à restaurer" -#: src/tools/dbcheck.c:291 -msgid "Database port must be a int value.\n" +#: src/filed/restore.c:1068 +#, c-format +msgid "Encountered %ld xattr errors while doing restore\n" msgstr "" -#: src/tools/dbcheck.c:365 +#: src/filed/restore.c:1072 #, c-format -msgid "Hello, this is the database check/correct program.\n" +msgid "" +"%d non-supported data streams and %d non-supported attrib streams ignored.\n" msgstr "" -#: src/tools/dbcheck.c:367 +#: src/filed/restore.c:1076 #, c-format -msgid "Modify database is on." +msgid "%d non-supported resource fork streams ignored.\n" msgstr "" -#: src/tools/dbcheck.c:369 +#: src/filed/restore.c:1079 #, c-format -msgid "Modify database is off." +msgid "%d non-supported Finder Info streams ignored.\n" msgstr "" -#: src/tools/dbcheck.c:371 src/tools/dbcheck.c:432 +#: src/filed/restore.c:1082 #, c-format -msgid " Verbose is on.\n" +msgid "%d non-supported acl streams ignored.\n" msgstr "" -#: src/tools/dbcheck.c:373 src/tools/dbcheck.c:434 -#, c-format -msgid " Verbose is off.\n" +#: src/filed/restore.c:1085 +#, fuzzy, c-format +msgid "%d non-supported crypto streams ignored.\n" +msgstr "contentEncryptionAlgorithm non supporté : %d\n" + +#: src/filed/restore.c:1088 +#, fuzzy, c-format +msgid "%d non-supported xattr streams ignored.\n" +msgstr "contentEncryptionAlgorithm non supporté : %d\n" + +#: src/filed/restore.c:1168 +msgid "Zlib errno" msgstr "" -#: src/tools/dbcheck.c:375 -#, c-format -msgid "Please select the function you want to perform.\n" +#: src/filed/restore.c:1170 +msgid "Zlib stream error" msgstr "" -#: src/tools/dbcheck.c:379 -#, c-format -msgid "" -"\n" -" 1) Toggle modify database flag\n" -" 2) Toggle verbose flag\n" -" 3) Repair bad Filename records\n" -" 4) Repair bad Path records\n" -" 5) Eliminate duplicate Filename records\n" -" 6) Eliminate duplicate Path records\n" -" 7) Eliminate orphaned Jobmedia records\n" -" 8) Eliminate orphaned File records\n" -" 9) Eliminate orphaned Path records\n" -" 10) Eliminate orphaned Filename records\n" -" 11) Eliminate orphaned FileSet records\n" -" 12) Eliminate orphaned Client records\n" -" 13) Eliminate orphaned Job records\n" -" 14) Eliminate all Admin records\n" -" 15) Eliminate all Restore records\n" -" 16) All (3-15)\n" -" 17) Quit\n" +#: src/filed/restore.c:1172 +msgid "Zlib data error" +msgstr "" + +#: src/filed/restore.c:1174 +msgid "Zlib memory error" msgstr "" -#: src/tools/dbcheck.c:398 -#, c-format -msgid "" -"\n" -" 1) Toggle modify database flag\n" -" 2) Toggle verbose flag\n" -" 3) Check for bad Filename records\n" -" 4) Check for bad Path records\n" -" 5) Check for duplicate Filename records\n" -" 6) Check for duplicate Path records\n" -" 7) Check for orphaned Jobmedia records\n" -" 8) Check for orphaned File records\n" -" 9) Check for orphaned Path records\n" -" 10) Check for orphaned Filename records\n" -" 11) Check for orphaned FileSet records\n" -" 12) Check for orphaned Client records\n" -" 13) Check for orphaned Job records\n" -" 14) Check for all Admin records\n" -" 15) Check for all Restore records\n" -" 16) All (3-15)\n" -" 17) Quit\n" +#: src/filed/restore.c:1176 +msgid "Zlib buffer error" msgstr "" -#: src/tools/dbcheck.c:418 -msgid "Select function number: " +#: src/filed/restore.c:1178 +msgid "Zlib version error" msgstr "" -#: src/tools/dbcheck.c:425 +#: src/filed/restore.c:1218 #, c-format -msgid "Database will be modified.\n" +msgid "Missing cryptographic signature for %s\n" msgstr "" -#: src/tools/dbcheck.c:427 +#: src/filed/restore.c:1251 src/filed/restore.c:1280 +#, fuzzy, c-format +msgid "Signature validation failed for file %s: ERR=%s\n" +msgstr "Impossible de créer le fichier bootstrap %s : ERR=%s\n" + +#: src/filed/restore.c:1268 +#, fuzzy, c-format +msgid "Digest one file failed for file: %s\n" +msgstr "Impossible de créer le fichier bootstrap %s : ERR=%s\n" + +#: src/filed/restore.c:1307 #, c-format -msgid "Database will NOT be modified.\n" +msgid "Signature validation failed for %s: %s\n" msgstr "" -#: src/tools/dbcheck.c:518 +#: src/filed/restore.c:1404 +#, fuzzy, c-format +msgid "LZO uncompression error on file %s. ERR=%d\n" +msgstr "Erreur de décompression. ERR=%d\n" + +#: src/filed/restore.c:1441 #, c-format -msgid "JobId=%s Name=\"%s\" StartTime=%s\n" +msgid "Uncompression error on file %s. ERR=%s\n" msgstr "" -#: src/tools/dbcheck.c:525 +#: src/filed/restore.c:1476 #, c-format -msgid "Orphaned JobMediaId=%s JobId=%s Volume=\"%s\"\n" +msgid "Write error in Win32 Block Decomposition on %s: %s\n" msgstr "" -#: src/tools/dbcheck.c:532 +#: src/filed/restore.c:1501 #, c-format -msgid "Orphaned FileId=%s JobId=%s Volume=\"%s\"\n" +msgid "Wrong write size error at %lld block=%d wanted=%d wrote=%d\n" msgstr "" -#: src/tools/dbcheck.c:539 +#: src/filed/restore.c:1505 #, c-format -msgid "Orphaned FileSetId=%s FileSet=\"%s\" MD5=%s\n" +msgid "" +"Write write error at %lld block=%d write_len=%d lerror=%d on %s: ERR=%s\n" msgstr "" -#: src/tools/dbcheck.c:546 -#, c-format -msgid "Orphaned ClientId=%s Name=\"%s\"\n" +#: src/filed/restore.c:1565 +msgid "Decryption error\n" msgstr "" -#: src/tools/dbcheck.c:599 -#, c-format -msgid "Deleting: %s\n" +#: src/filed/restore.c:1658 +msgid "Logic error: output file should be open\n" msgstr "" -#: src/tools/dbcheck.c:671 -#, c-format -msgid "Checking for duplicate Filename entries.\n" +#: src/filed/restore.c:1696 +msgid "Logic error: output file should not be open\n" msgstr "" -#: src/tools/dbcheck.c:682 +#: src/filed/restore.c:1730 #, c-format -msgid "Found %d duplicate Filename records.\n" +msgid "Decryption error. buf_len=%d decrypt_len=%d on file %s\n" msgstr "" -#: src/tools/dbcheck.c:683 -msgid "Print the list? (yes/no): " +#: src/filed/restore.c:1851 +msgid "Open File Manager paused\n" msgstr "" -#: src/tools/dbcheck.c:706 src/tools/dbcheck.c:771 -#, c-format -msgid "Found %d for: %s\n" +#: src/filed/restore.c:1855 +msgid "FAILED to pause Open File Manager\n" msgstr "" -#: src/tools/dbcheck.c:736 +#: src/filed/restore.c:1863 #, c-format -msgid "Checking for duplicate Path entries.\n" +msgid "Running as '%s'. Privmask=%#08x\n" msgstr "" -#: src/tools/dbcheck.c:747 -#, c-format -msgid "Found %d duplicate Path records.\n" +#: src/filed/restore.c:1865 +msgid "Failed to retrieve current UserName\n" msgstr "" -#: src/tools/dbcheck.c:748 src/tools/dbcheck.c:810 src/tools/dbcheck.c:856 -#: src/tools/dbcheck.c:924 src/tools/dbcheck.c:982 src/tools/dbcheck.c:1025 -#: src/tools/dbcheck.c:1067 src/tools/dbcheck.c:1109 src/tools/dbcheck.c:1146 -#: src/tools/dbcheck.c:1179 src/tools/dbcheck.c:1213 src/tools/dbcheck.c:1280 -msgid "Print them? (yes/no): " +#: src/filed/verify_vol.c:51 +msgid "Storage command not issued before Verify.\n" msgstr "" -#: src/tools/dbcheck.c:801 +#: src/filed/verify_vol.c:131 #, c-format -msgid "Checking for orphaned JobMedia entries.\n" +msgid "Error scanning record header: %s\n" msgstr "" -#: src/tools/dbcheck.c:809 +#: src/filed/verify_vol.c:194 src/filed/verify.c:202 #, c-format -msgid "Found %d orphaned JobMedia records.\n" +msgid "Network error in send to Director: ERR=%s\n" msgstr "" -#: src/tools/dbcheck.c:827 +#: src/filed/authenticate.c:63 #, c-format -msgid "Deleting %d orphaned JobMedia records.\n" +msgid "I only authenticate directors, not %d\n" msgstr "" -#: src/tools/dbcheck.c:844 +#: src/filed/authenticate.c:88 #, c-format -msgid "Checking for orphaned File entries. This may take some time!\n" +msgid "Connection from unknown Director %s at %s rejected.\n" msgstr "" +"Connexion d'un Director inconnu %s à %s rejeté.\n" +"\n" -#: src/tools/dbcheck.c:855 +#: src/filed/authenticate.c:132 #, c-format -msgid "Found %d orphaned File records.\n" -msgstr "" +msgid "Incorrect password given by Director at %s.\n" +msgstr "Password incorrect donné par le Director à %s.\n" -#: src/tools/dbcheck.c:872 +#: src/filed/verify.c:45 #, c-format -msgid "Deleting %d orphaned File records.\n" +msgid "Cannot malloc %d network read buffer\n" msgstr "" -#: src/tools/dbcheck.c:891 +#: src/filed/verify.c:115 #, c-format -msgid "Pruning orphaned Path entries isn't possible when using BVFS.\n" +msgid " Could not access %s: ERR=%s\n" msgstr "" -#: src/tools/dbcheck.c:900 src/tools/dbcheck.c:958 -#, fuzzy -msgid "Create temporary index? (yes/no): " -msgstr "Continuez ? (oui/non) : " - -#: src/tools/dbcheck.c:912 +#: src/filed/verify.c:122 #, c-format -msgid "Checking for orphaned Path entries. This may take some time!\n" +msgid " Could not follow link %s: ERR=%s\n" msgstr "" -#: src/tools/dbcheck.c:923 +#: src/filed/verify.c:129 #, c-format -msgid "Found %d orphaned Path records.\n" +msgid " Could not stat %s: ERR=%s\n" msgstr "" -#: src/tools/dbcheck.c:936 +#: src/filed/verify.c:135 src/filed/backup.c:449 #, c-format -msgid "Deleting %d orphaned Path records.\n" +msgid " Unchanged file skipped: %s\n" msgstr "" -#: src/tools/dbcheck.c:970 +#: src/filed/verify.c:138 #, c-format -msgid "Checking for orphaned Filename entries. This may take some time!\n" +msgid " Archive file skipped: %s\n" msgstr "" -#: src/tools/dbcheck.c:981 +#: src/filed/verify.c:141 #, c-format -msgid "Found %d orphaned Filename records.\n" +msgid " Recursion turned off. Directory skipped: %s\n" msgstr "" -#: src/tools/dbcheck.c:994 +#: src/filed/verify.c:145 #, c-format -msgid "Deleting %d orphaned Filename records.\n" +msgid " File system change prohibited. Directory skipped: %s\n" msgstr "" -#: src/tools/dbcheck.c:1014 +#: src/filed/verify.c:153 #, c-format -msgid "Checking for orphaned FileSet entries. This takes some time!\n" +msgid " Could not open directory %s: ERR=%s\n" msgstr "" -#: src/tools/dbcheck.c:1024 +#: src/filed/verify.c:158 #, c-format -msgid "Found %d orphaned FileSet records.\n" +msgid " Unknown file type %d: %s\n" msgstr "" -#: src/tools/dbcheck.c:1039 +#: src/filed/verify.c:297 #, c-format -msgid "Deleting %d orphaned FileSet records.\n" +msgid " Cannot open %s: ERR=%s.\n" msgstr "" -#: src/tools/dbcheck.c:1048 +#: src/filed/verify.c:311 #, c-format -msgid "Checking for orphaned Client entries.\n" +msgid " Cannot open resource fork for %s: ERR=%s.\n" msgstr "" -#: src/tools/dbcheck.c:1066 +#: src/filed/verify.c:374 #, c-format -msgid "Found %d orphaned Client records.\n" +msgid "Error reading file %s: ERR=%s\n" msgstr "" -#: src/tools/dbcheck.c:1081 +#: src/filed/xattr.c:233 #, c-format -msgid "Deleting %d orphaned Client records.\n" +msgid "Illegal xattr stream, no XATTR_MAGIC on file \"%s\"\n" msgstr "" -#: src/tools/dbcheck.c:1090 +#: src/filed/xattr.c:247 #, c-format -msgid "Checking for orphaned Job entries.\n" +msgid "Illegal xattr stream, xattr name length <= 0 on file \"%s\"\n" msgstr "" -#: src/tools/dbcheck.c:1108 +#: src/filed/xattr.c:369 src/filed/xattr.c:405 +#, fuzzy, c-format +msgid "llistea error on file \"%s\": ERR=%s\n" +msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" + +#: src/filed/xattr.c:455 src/filed/xattr.c:509 +#, fuzzy, c-format +msgid "lgetea error on file \"%s\": ERR=%s\n" +msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" + +#: src/filed/xattr.c:545 src/filed/xattr.c:867 src/filed/xattr.c:1342 +#: src/filed/xattr.c:1810 src/filed/xattr.c:2167 src/filed/xattr.c:2959 #, c-format -msgid "Found %d orphaned Job records.\n" +msgid "Xattr stream on file \"%s\" exceeds maximum size of %d bytes\n" +msgstr "" + +#: src/filed/xattr.c:565 src/filed/xattr.c:893 src/filed/xattr.c:1362 +#: src/filed/xattr.c:1840 src/filed/xattr.c:2184 +#, fuzzy, c-format +msgid "Failed to serialize extended attributes on file \"%s\"\n" +msgstr "Impossible d'initialiser le contexte TLS pour la Console \"%s\".\n" + +#: src/filed/xattr.c:632 +#, fuzzy, c-format +msgid "lsetea error on file \"%s\": ERR=%s\n" +msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" + +#: src/filed/xattr.c:720 src/filed/xattr.c:758 src/filed/xattr.c:822 +#: src/filed/xattr.c:834 +#, fuzzy, c-format +msgid "attr_list error on file \"%s\": ERR=%s\n" +msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" + +#: src/filed/xattr.c:958 +#, fuzzy, c-format +msgid "Received illegal xattr named %s on file \"%s\"\n" +msgstr "Impossible de créer le fichier bootstrap %s. ERR=%s\n" + +#: src/filed/xattr.c:991 src/filed/xattr.c:1001 +#, fuzzy, c-format +msgid "attr_set error on file \"%s\": ERR=%s\n" +msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" + +#: src/filed/xattr.c:1151 src/filed/xattr.c:1186 +#, fuzzy, c-format +msgid "llistxattr error on file \"%s\": ERR=%s\n" +msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" + +#: src/filed/xattr.c:1254 src/filed/xattr.c:1306 +#, fuzzy, c-format +msgid "lgetxattr error on file \"%s\": ERR=%s\n" +msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" + +#: src/filed/xattr.c:1425 +#, fuzzy, c-format +msgid "lsetxattr error on file \"%s\": ERR=%s\n" +msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" + +#: src/filed/xattr.c:1583 src/filed/xattr.c:1618 +#, fuzzy, c-format +msgid "extattr_list_link error on file \"%s\": ERR=%s\n" +msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" + +#: src/filed/xattr.c:1638 +#, fuzzy, c-format +msgid "Failed to convert %d into namespace on file \"%s\"\n" +msgstr "Impossible de lire le certificat à partir du fichier" + +#: src/filed/xattr.c:1718 src/filed/xattr.c:1773 +#, fuzzy, c-format +msgid "extattr_get_link error on file \"%s\": ERR=%s\n" +msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" + +#: src/filed/xattr.c:1897 +#, fuzzy, c-format +msgid "Failed to split %s into namespace and name part on file \"%s\"\n" msgstr "" +"Impossible de se positionner à la fin du média sur le device %s : ERR=%s\n" + +#: src/filed/xattr.c:1910 +#, fuzzy, c-format +msgid "Failed to convert %s into namespace on file \"%s\"\n" +msgstr "Impossible de lire le certificat à partir du fichier" + +#: src/filed/xattr.c:1931 +#, fuzzy, c-format +msgid "extattr_set_link error on file \"%s\": ERR=%s\n" +msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" + +#: src/filed/xattr.c:2034 src/filed/xattr.c:2059 +#, fuzzy, c-format +msgid "getproplist error on file \"%s\": ERR=%s\n" +msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" + +#: src/filed/xattr.c:2253 +#, fuzzy, c-format +msgid "Unable create proper proplist to restore xattrs on file \"%s\"\n" +msgstr "Impossible de lire le certificat à partir du fichier" + +#: src/filed/xattr.c:2282 +#, fuzzy, c-format +msgid "setproplist error on file \"%s\": ERR=%s\n" +msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" + +#: src/filed/xattr.c:2600 src/filed/xattr.c:2653 +#, fuzzy, c-format +msgid "Unable to get acl on xattr %s on file \"%s\": ERR=%s\n" +msgstr "Impossible de créer le fichier bootstrap %s. ERR=%s\n" + +#: src/filed/xattr.c:2670 +#, fuzzy, c-format +msgid "Unable to get acl text on xattr %s on file \"%s\": ERR=%s\n" +msgstr "Impossible de créer le fichier bootstrap %s. ERR=%s\n" + +#: src/filed/xattr.c:2744 +#, fuzzy, c-format +msgid "Unable to get status on xattr %s on file \"%s\": ERR=%s\n" +msgstr "Impossible de créer le fichier bootstrap %s. ERR=%s\n" + +#: src/filed/xattr.c:2877 +#, fuzzy, c-format +msgid "Unable to open xattr %s on \"%s\": ERR=%s\n" +msgstr "Impossible de se connecter à %s sur %s:%d. ERR=%s\n" + +#: src/filed/xattr.c:2900 +#, fuzzy, c-format +msgid "Unable to read symlin %s on \"%s\": ERR=%s\n" +msgstr "Impossible de se connecter à %s sur %s:%d. ERR=%s\n" + +#: src/filed/xattr.c:2975 +#, fuzzy, c-format +msgid "Unable to read content of xattr %s on file \"%s\"\n" +msgstr "Impossible de lire le certificat à partir du fichier" + +#: src/filed/xattr.c:3015 +#, fuzzy, c-format +msgid "Unable to chdir to xattr space of file \"%s\": ERR=%s\n" +msgstr "Impossible de créer le fichier bootstrap %s. ERR=%s\n" + +#: src/filed/xattr.c:3072 src/filed/xattr.c:3321 +#, fuzzy, c-format +msgid "Unable to open file \"%s\": ERR=%s\n" +msgstr "3910 Impossible d'ouvrir le device %s : ERR=%s\n" + +#: src/filed/xattr.c:3100 src/filed/xattr.c:3382 +#, fuzzy, c-format +msgid "Unable to open xattr space %s on file \"%s\": ERR=%s\n" +msgstr "Impossible de créer le fichier bootstrap %s. ERR=%s\n" + +#: src/filed/xattr.c:3116 src/filed/xattr.c:3346 +#, fuzzy, c-format +msgid "Unable to chdir to xattr space on file \"%s\": ERR=%s\n" +msgstr "Impossible de créer le fichier bootstrap %s. ERR=%s\n" + +#: src/filed/xattr.c:3137 +#, fuzzy, c-format +msgid "Unable to list the xattr space on file \"%s\": ERR=%s\n" +msgstr "Impossible de créer le fichier bootstrap %s. ERR=%s\n" + +#: src/filed/xattr.c:3229 +#, fuzzy, c-format +msgid "Unable to convert acl from text on file \"%s\"\n" +msgstr "Impossible de lire le certificat à partir du fichier" -#: src/tools/dbcheck.c:1123 -#, c-format -msgid "Deleting %d orphaned Job records.\n" -msgstr "" +#: src/filed/xattr.c:3239 src/filed/xattr.c:3262 +#, fuzzy, c-format +msgid "Unable to restore acl of xattr %s on file \"%s\": ERR=%s\n" +msgstr "Impossible de créer le fichier bootstrap %s. ERR=%s\n" -#: src/tools/dbcheck.c:1125 -#, c-format -msgid "Deleting JobMedia records of orphaned Job records.\n" -msgstr "" +#: src/filed/xattr.c:3335 +#, fuzzy, c-format +msgid "Unable to open xattr space on file \"%s\": ERR=%s\n" +msgstr "Impossible de créer le fichier bootstrap %s. ERR=%s\n" -#: src/tools/dbcheck.c:1127 -#, c-format -msgid "Deleting Log records of orphaned Job records.\n" -msgstr "" +#: src/filed/xattr.c:3365 src/filed/xattr.c:3527 +#, fuzzy, c-format +msgid "Unable to open xattr %s on file \"%s\": ERR=%s\n" +msgstr "Impossible de créer le fichier bootstrap %s. ERR=%s\n" -#: src/tools/dbcheck.c:1136 -#, c-format -msgid "Checking for Admin Job entries.\n" -msgstr "" +#: src/filed/xattr.c:3399 +#, fuzzy, c-format +msgid "Unable to chdir to xattr space %s on file \"%s\": ERR=%s\n" +msgstr "Impossible de créer le fichier bootstrap %s. ERR=%s\n" -#: src/tools/dbcheck.c:1145 -#, c-format -msgid "Found %d Admin Job records.\n" -msgstr "" +#: src/filed/xattr.c:3439 +#, fuzzy, c-format +msgid "Unable to mkfifo xattr %s on file \"%s\": ERR=%s\n" +msgstr "Impossible de créer le fichier bootstrap %s. ERR=%s\n" -#: src/tools/dbcheck.c:1160 -#, c-format -msgid "Deleting %d Admin Job records.\n" -msgstr "" +#: src/filed/xattr.c:3457 +#, fuzzy, c-format +msgid "Unable to mknod xattr %s on file \"%s\": ERR=%s\n" +msgstr "Impossible de créer le fichier bootstrap %s. ERR=%s\n" -#: src/tools/dbcheck.c:1169 -#, c-format -msgid "Checking for Restore Job entries.\n" -msgstr "" +#: src/filed/xattr.c:3475 +#, fuzzy, c-format +msgid "Unable to mkdir xattr %s on file \"%s\": ERR=%s\n" +msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" -#: src/tools/dbcheck.c:1178 -#, c-format -msgid "Found %d Restore Job records.\n" -msgstr "" +#: src/filed/xattr.c:3495 +#, fuzzy, c-format +msgid "Unable to link xattr %s to %s on file \"%s\": ERR=%s\n" +msgstr "Impossible de se connecter à %s sur %s:%d. ERR=%s\n" -#: src/tools/dbcheck.c:1193 +#: src/filed/xattr.c:3548 #, c-format -msgid "Deleting %d Restore Job records.\n" +msgid "" +"Unable to restore data of xattr %s on file \"%s\": Not all data available in " +"xattr stream\n" msgstr "" -#: src/tools/dbcheck.c:1203 -#, c-format -msgid "Checking for Filenames with a trailing slash\n" -msgstr "" +#: src/filed/xattr.c:3561 +#, fuzzy, c-format +msgid "Unable to restore data of xattr %s on file \"%s\": ERR=%s\n" +msgstr "Impossible de créer le fichier bootstrap %s. ERR=%s\n" -#: src/tools/dbcheck.c:1212 -#, c-format -msgid "Found %d bad Filename records.\n" -msgstr "" +#: src/filed/xattr.c:3584 +#, fuzzy, c-format +msgid "Unable to symlink xattr %s to %s on file \"%s\": ERR=%s\n" +msgstr "Impossible de créer le fichier bootstrap %s. ERR=%s\n" -#: src/tools/dbcheck.c:1230 src/tools/dbcheck.c:1296 -#, c-format -msgid "Reparing %d bad Filename records.\n" -msgstr "" +#: src/filed/xattr.c:3620 +#, fuzzy, c-format +msgid "Unable to restore owner of xattr %s on file \"%s\": ERR=%s\n" +msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" -#: src/tools/dbcheck.c:1270 -#, c-format -msgid "Checking for Paths without a trailing slash\n" -msgstr "" +#: src/filed/xattr.c:3648 +#, fuzzy, c-format +msgid "Unable to restore filetimes of xattr %s on file \"%s\": ERR=%s\n" +msgstr "Impossible de créer le fichier bootstrap %s : ERR=%s\n" -#: src/tools/dbcheck.c:1279 +#: src/filed/xattr.c:3664 #, c-format -msgid "Found %d bad Path records.\n" +msgid "Illegal xattr stream, failed to parse xattr stream on file \"%s\"\n" msgstr "" -#: src/tools/dbcheck.c:1442 +#: src/filed/xattr.c:3725 #, c-format -msgid "" -"Ok. Index over the %s column already exists and dbcheck will work faster.\n" +msgid "Failed to restore extensible attributes on file \"%s\"\n" msgstr "" -#: src/tools/dbcheck.c:1445 -#, c-format -msgid "" -"Note. Index over the %s column not found, that can greatly slow down " -"dbcheck.\n" +#: src/filed/xattr.c:3738 +#, fuzzy, c-format +msgid "Failed to restore extended attributes on file \"%s\"\n" msgstr "" +"Impossible de se positionner à la fin du média sur le device %s : ERR=%s\n" -#: src/tools/dbcheck.c:1460 -#, c-format -msgid "Create temporary index... This may take some time!\n" -msgstr "" +#: src/filed/xattr.c:3832 src/filed/acl.c:2253 +#, fuzzy, c-format +msgid "Unable to stat file \"%s\": ERR=%s\n" +msgstr "3910 Impossible d'ouvrir le device %s : ERR=%s\n" -#: src/tools/dbcheck.c:1468 +#: src/filed/xattr.c:3882 #, c-format -msgid "Temporary index created.\n" +msgid "" +"Can't restore Extended Attributes of %s - incompatible xattr stream " +"encountered - %d\n" msgstr "" -#: src/tools/dbcheck.c:1483 -#, c-format -msgid "Drop temporary index.\n" +#: src/filed/backup.c:90 +msgid "Cannot set buffer size FD->SD.\n" msgstr "" -#: src/tools/dbcheck.c:1493 +#: src/filed/backup.c:182 #, c-format -msgid "Temporary index %s deleted.\n" +msgid "Encountered %ld acl errors while doing backup\n" msgstr "" -#: src/filed/verify.c:57 +#: src/filed/backup.c:186 #, c-format -msgid "Cannot malloc %d network read buffer\n" +msgid "Encountered %ld xattr errors while doing backup\n" msgstr "" -#: src/filed/verify.c:127 -#, c-format -msgid " Could not access %s: ERR=%s\n" -msgstr "" +#: src/filed/backup.c:253 +#, fuzzy +msgid "Unsupported cipher on this system.\n" +msgstr "Le cipher spécifié est non supporté\n" -#: src/filed/verify.c:134 -#, c-format -msgid " Could not follow link %s: ERR=%s\n" +#: src/filed/backup.c:259 src/filed/backup.c:268 +msgid "An error occurred while encrypting the stream.\n" msgstr "" -#: src/filed/verify.c:141 +#: src/filed/backup.c:386 #, c-format -msgid " Could not stat %s: ERR=%s\n" +msgid " Recursion turned off. Will not descend from %s into %s\n" msgstr "" -#: src/filed/verify.c:147 src/filed/backup.c:450 +#: src/filed/backup.c:393 #, c-format -msgid " Unchanged file skipped: %s\n" +msgid " %s is a different filesystem. Will not descend from %s into it.\n" msgstr "" -#: src/filed/verify.c:150 +#: src/filed/backup.c:399 #, c-format -msgid " Archive file skipped: %s\n" +msgid " Disallowed filesystem. Will not descend from %s into %s\n" msgstr "" -#: src/filed/verify.c:153 +#: src/filed/backup.c:404 #, c-format -msgid " Recursion turned off. Directory skipped: %s\n" +msgid " Disallowed drive type. Will not descend into %s\n" msgstr "" -#: src/filed/verify.c:157 +#: src/filed/backup.c:415 #, c-format -msgid " File system change prohibited. Directory skipped: %s\n" +msgid " Socket file skipped: %s\n" msgstr "" -#: src/filed/verify.c:165 +#: src/filed/backup.c:428 #, c-format -msgid " Could not open directory %s: ERR=%s\n" -msgstr "" +msgid " Could not access \"%s\": ERR=%s\n" +msgstr " Impossible d'acceder à \"%s\" : ERR=%s\n" -#: src/filed/verify.c:170 +#: src/filed/backup.c:435 #, c-format -msgid " Unknown file type %d: %s\n" -msgstr "" +msgid " Could not follow link \"%s\": ERR=%s\n" +msgstr " Impossible de suivre le lien \"%s\" : ERR=%s\n" -#: src/filed/verify.c:214 src/filed/verify_vol.c:206 +#: src/filed/backup.c:442 #, c-format -msgid "Network error in send to Director: ERR=%s\n" -msgstr "" +msgid " Could not stat \"%s\": ERR=%s\n" +msgstr " Impossible d'acceder à \"%s\" : ERR=%s\\n\n" -#: src/filed/verify.c:247 src/filed/accurate.c:429 src/filed/backup.c:506 +#: src/filed/backup.c:452 #, c-format -msgid "%s digest initialization failed\n" +msgid " Archive file not saved: %s\n" msgstr "" -#: src/filed/verify.c:309 +#: src/filed/backup.c:456 #, c-format -msgid " Cannot open %s: ERR=%s.\n" -msgstr "" +msgid " Could not open directory \"%s\": ERR=%s\n" +msgstr " Impossible d'ouvrir le répertoire \"%s\" : ERR=%s\n" -#: src/filed/verify.c:323 +#: src/filed/backup.c:465 #, c-format -msgid " Cannot open resource fork for %s: ERR=%s.\n" -msgstr "" +msgid " Unknown file type %d; not saved: %s\n" +msgstr " Type de fichier inconnu %d ; non sauvé : %s\n" -#: src/filed/verify.c:386 +#: src/filed/backup.c:521 #, c-format -msgid "Error reading file %s: ERR=%s\n" +msgid "%s signature digest initialization failed\n" msgstr "" -#: src/filed/accurate.c:201 +#: src/filed/backup.c:629 #, c-format -msgid "Space saved with Base jobs: %lld MB\n" -msgstr "" +msgid " Cannot open \"%s\": ERR=%s.\n" +msgstr " Impossible d'ouvrir \"%s\" : ERR=%s.\n" -#: src/filed/accurate.c:400 +#: src/filed/backup.c:666 #, fuzzy, c-format -msgid "Cannot verify checksum for %s\n" -msgstr "Impossible de trouver la ressource Schedule \"%s\"\n" +msgid " Cannot open resource fork for \"%s\": ERR=%s.\n" +msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" -#: src/filed/accurate.c:508 +#: src/filed/backup.c:762 #, fuzzy -msgid "2991 Bad accurate command\n" -msgstr "2991 Erreur dans la commande setdebug : %s\n" - -#: src/filed/status.c:89 -#, fuzzy, c-format -msgid "Daemon started %s. Jobs: run=%d running=%d.\n" -msgstr "Démon démarré depuis %s, %d jobs lancés depuis cette date.\n" - -#: src/filed/status.c:149 -#, c-format -msgid " Sizeof: boffset_t=%d size_t=%d debug=%d trace=%d " -msgstr "" +msgid "Failed to allocate memory for crypto signature.\n" +msgstr "Impossible de se connecter au Director\n" -#: src/filed/status.c:194 -#, c-format -msgid "Director connected at: %s\n" -msgstr "Connexion du director le %s\n" +#: src/filed/backup.c:767 +#, fuzzy +msgid "An error occurred while adding signer the stream.\n" +msgstr "Entrez le nombre de départ : " -#: src/filed/status.c:196 -#, c-format -msgid "JobId %d Job %s is running.\n" +#: src/filed/backup.c:773 src/filed/backup.c:788 +msgid "An error occurred while signing the stream.\n" msgstr "" -#: src/filed/status.c:199 -#, fuzzy, c-format -msgid " %s%s %s Job started: %s\n" -msgstr "Le job %d est annulé.\n" - -#: src/filed/status.c:212 -#, c-format -msgid " Files=%s Bytes=%s Bytes/sec=%s Errors=%d\n" -msgstr " Fichiers=%s Octets=%s Octets/sec=%s Erreurs=%d\n" - -#: src/filed/status.c:218 -#, c-format -msgid " Files Examined=%s\n" +#: src/filed/backup.c:812 +msgid "An error occurred finalizing signing the stream.\n" msgstr "" -#: src/filed/status.c:223 +#: src/filed/backup.c:931 #, c-format -msgid " Processing file: %s\n" +msgid "Compression deflateParams error: %d\n" msgstr "" -#: src/filed/status.c:234 -msgid " SDSocket closed.\n" +#: src/filed/backup.c:968 +msgid "Encrypting sparse or offset data not supported.\n" msgstr "" -#: src/filed/status.c:244 src/filed/status.c:335 src/filed/status.c:409 -msgid "====\n" -msgstr "====\n" - -#: src/filed/status.c:306 -msgid " SDSocket=closed\n" -msgstr "" +#: src/filed/backup.c:975 +#, fuzzy +msgid "Failed to initialize encryption context.\n" +msgstr "Impossible d'initialiser le contexte TLS pour la Console \"%s\".\n" -#: src/filed/status.c:463 src/filed/status.c:496 +#: src/filed/backup.c:1086 #, c-format -msgid "Bad .status command: %s\n" -msgstr "" - -#: src/filed/status.c:464 -msgid "2900 Bad .status command, missing argument.\n" -msgstr "" - -#: src/filed/status.c:497 -msgid "2900 Bad .status command, wrong argument.\n" +msgid "Compression deflate error: %d\n" msgstr "" -#: src/filed/status.c:565 -msgid "Bacula Client: Idle" +#: src/filed/backup.c:1093 +#, c-format +msgid "Compression deflateReset error: %d\n" msgstr "" -#: src/filed/status.c:576 -msgid "Bacula Client: Running" -msgstr "" +#: src/filed/backup.c:1126 +#, fuzzy, c-format +msgid "Compression LZO error: %d\n" +msgstr "Erreur de décompression. ERR=%d\n" -#: src/filed/status.c:590 -msgid "Bacula Client: Last Job Canceled" +#: src/filed/backup.c:1171 src/filed/backup.c:1187 +msgid "Encryption error\n" msgstr "" -#: src/filed/status.c:594 -msgid "Bacula Client: Last Job Failed" +#: src/filed/backup.c:1213 +#, c-format +msgid "Read error on file %s. ERR=%s\n" msgstr "" -#: src/filed/status.c:598 -msgid "Bacula Client: Last Job had Warnings" +#: src/filed/backup.c:1216 +#, c-format +msgid "Too many errors. JobErrors=%d.\n" msgstr "" -#: src/filed/xattr.c:97 src/filed/xattr.c:112 src/filed/xattr.c:120 -#: src/filed/fd_plugins.c:789 src/filed/fd_plugins.c:805 src/filed/acl.c:108 -#: src/filed/acl.c:123 src/filed/acl.c:131 src/filed/backup.c:999 -#: src/filed/backup.c:1199 src/filed/backup.c:1236 src/filed/backup.c:1249 -#: src/filed/backup.c:1325 src/filed/backup.c:1424 -#, c-format -msgid "Network send error to SD. ERR=%s\n" +#: src/filed/backup.c:1226 +msgid "Encryption padding error\n" msgstr "" -#: src/filed/xattr.c:245 -#, c-format -msgid "Illegal xattr stream, no XATTR_MAGIC on file \"%s\"\n" +#: src/filed/backup.c:1290 +msgid "Invalid file flags, no supported data stream type.\n" msgstr "" -#: src/filed/xattr.c:259 +#: src/filed/backup.c:1548 #, c-format -msgid "Illegal xattr stream, xattr name length <= 0 on file \"%s\"\n" +msgid "VSS Writer (BackupComplete): %s\n" msgstr "" -#: src/filed/xattr.c:381 src/filed/xattr.c:417 +#: src/filed/acl.c:217 src/filed/acl.c:242 #, fuzzy, c-format -msgid "llistea error on file \"%s\": ERR=%s\n" +msgid "aclx_get error on file \"%s\": ERR=%s\n" msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" -#: src/filed/xattr.c:467 src/filed/xattr.c:520 +#: src/filed/acl.c:268 #, fuzzy, c-format -msgid "lgetea error on file \"%s\": ERR=%s\n" -msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" +msgid "Unknown acl type encountered on file \"%s\": %ld\n" +msgstr "Impossible de créer le fichier bootstrap %s. ERR=%s\n" + +#: src/filed/acl.c:292 src/filed/acl.c:301 +#, fuzzy, c-format +msgid "Failed to convert acl into text on file \"%s\"\n" +msgstr "Impossible de lire le certificat à partir du fichier" -#: src/filed/xattr.c:556 src/filed/xattr.c:877 src/filed/xattr.c:1352 -#: src/filed/xattr.c:1820 src/filed/xattr.c:2176 src/filed/xattr.c:2968 +#: src/filed/acl.c:374 #, c-format -msgid "Xattr stream on file \"%s\" exceeds maximum size of %d bytes\n" +msgid "" +"Trying to restore POSIX acl on file \"%s\" on filesystem without AIXC acl " +"support\n" msgstr "" -#: src/filed/xattr.c:576 src/filed/xattr.c:903 src/filed/xattr.c:1372 -#: src/filed/xattr.c:1850 src/filed/xattr.c:2193 -#, fuzzy, c-format -msgid "Failed to serialize extended attributes on file \"%s\"\n" -msgstr "Impossible d'initialiser le contexte TLS pour la Console \"%s\".\n" +#: src/filed/acl.c:382 +#, c-format +msgid "" +"Trying to restore NFSv4 acl on file \"%s\" on filesystem without NFS4 acl " +"support\n" +msgstr "" -#: src/filed/xattr.c:643 +#: src/filed/acl.c:430 src/filed/acl.c:440 #, fuzzy, c-format -msgid "lsetea error on file \"%s\": ERR=%s\n" +msgid "aclx_scanStr error on file \"%s\": ERR=%s\n" msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" -#: src/filed/xattr.c:731 src/filed/xattr.c:769 src/filed/xattr.c:832 -#: src/filed/xattr.c:844 +#: src/filed/acl.c:466 #, fuzzy, c-format -msgid "attr_list error on file \"%s\": ERR=%s\n" +msgid "aclx_put error on file \"%s\": ERR=%s\n" msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" -#: src/filed/xattr.c:968 +#: src/filed/acl.c:811 #, fuzzy, c-format -msgid "Received illegal xattr named %s on file \"%s\"\n" -msgstr "Impossible de créer le fichier bootstrap %s. ERR=%s\n" +msgid "acl_to_text error on file \"%s\": ERR=%s\n" +msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" -#: src/filed/xattr.c:1001 src/filed/xattr.c:1011 +#: src/filed/acl.c:841 #, fuzzy, c-format -msgid "attr_set error on file \"%s\": ERR=%s\n" +msgid "acl_get_file error on file \"%s\": ERR=%s\n" msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" -#: src/filed/xattr.c:1161 src/filed/xattr.c:1196 +#: src/filed/acl.c:894 #, fuzzy, c-format -msgid "llistxattr error on file \"%s\": ERR=%s\n" -msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" +msgid "" +"acl_delete_def_file error on file \"%s\": filesystem doesn't support ACLs\n" +msgstr "" +"Impossible de récupérer les informations du Media pour le Volume %s : ERR=" +"%s\n" -#: src/filed/xattr.c:1264 src/filed/xattr.c:1316 +#: src/filed/acl.c:900 #, fuzzy, c-format -msgid "lgetxattr error on file \"%s\": ERR=%s\n" -msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" +msgid "acl_delete_def_file error on file \"%s\": ERR=%s\n" +msgstr "" +"Impossible de récupérer les informations du Media pour le Volume %s : ERR=" +"%s\n" -#: src/filed/xattr.c:1435 +#: src/filed/acl.c:911 #, fuzzy, c-format -msgid "lsetxattr error on file \"%s\": ERR=%s\n" +msgid "acl_from_text error on file \"%s\": ERR=%s\n" msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" -#: src/filed/xattr.c:1593 src/filed/xattr.c:1628 +#: src/filed/acl.c:927 #, fuzzy, c-format -msgid "extattr_list_link error on file \"%s\": ERR=%s\n" +msgid "acl_valid error on file \"%s\": ERR=%s\n" msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" -#: src/filed/xattr.c:1648 +#: src/filed/acl.c:959 #, fuzzy, c-format -msgid "Failed to convert %d into namespace on file \"%s\"\n" -msgstr "Impossible de lire le certificat à partir du fichier" +msgid "acl_set_file error on file \"%s\": filesystem doesn't support ACLs\n" +msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" -#: src/filed/xattr.c:1728 src/filed/xattr.c:1783 +#: src/filed/acl.c:968 #, fuzzy, c-format -msgid "extattr_get_link error on file \"%s\": ERR=%s\n" +msgid "acl_set_file error on file \"%s\": ERR=%s\n" msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" -#: src/filed/xattr.c:1907 +#: src/filed/acl.c:1075 src/filed/acl.c:1104 src/filed/acl.c:1218 +#: src/filed/acl.c:1726 src/filed/acl.c:1833 #, fuzzy, c-format -msgid "Failed to split %s into namespace and name part on file \"%s\"\n" +msgid "pathconf error on file \"%s\": ERR=%s\n" +msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" + +#: src/filed/acl.c:1234 +#, c-format +msgid "" +"Trying to restore acl on file \"%s\" on filesystem without %s acl support\n" msgstr "" -"Impossible de se positionner à la fin du média sur le device %s : ERR=%s\n" -#: src/filed/xattr.c:1920 +#: src/filed/acl.c:1519 #, fuzzy, c-format -msgid "Failed to convert %s into namespace on file \"%s\"\n" -msgstr "Impossible de lire le certificat à partir du fichier" +msgid "getacl error on file \"%s\": ERR=%s\n" +msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" -#: src/filed/xattr.c:1941 +#: src/filed/acl.c:1554 #, fuzzy, c-format -msgid "extattr_set_link error on file \"%s\": ERR=%s\n" +msgid "acltostr error on file \"%s\": ERR=%s\n" msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" -#: src/filed/xattr.c:2044 src/filed/xattr.c:2069 +#: src/filed/acl.c:1576 src/filed/acl.c:1586 #, fuzzy, c-format -msgid "getproplist error on file \"%s\": ERR=%s\n" +msgid "strtoacl error on file \"%s\": ERR=%s\n" msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" -#: src/filed/xattr.c:2262 +#: src/filed/acl.c:1615 #, fuzzy, c-format -msgid "Unable create proper proplist to restore xattrs on file \"%s\"\n" -msgstr "Impossible de lire le certificat à partir du fichier" +msgid "setacl error on file \"%s\": filesystem doesn't support ACLs\n" +msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" -#: src/filed/xattr.c:2291 +#: src/filed/acl.c:1623 #, fuzzy, c-format -msgid "setproplist error on file \"%s\": ERR=%s\n" +msgid "setacl error on file \"%s\": ERR=%s\n" msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" -#: src/filed/xattr.c:2609 src/filed/xattr.c:2662 +#: src/filed/acl.c:1748 #, fuzzy, c-format -msgid "Unable to get acl on xattr %s on file \"%s\": ERR=%s\n" -msgstr "Impossible de créer le fichier bootstrap %s. ERR=%s\n" +msgid "acl_get error on file \"%s\": ERR=%s\n" +msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" -#: src/filed/xattr.c:2679 -#, fuzzy, c-format -msgid "Unable to get acl text on xattr %s on file \"%s\": ERR=%s\n" -msgstr "Impossible de créer le fichier bootstrap %s. ERR=%s\n" +#: src/filed/acl.c:1822 +#, c-format +msgid "" +"Trying to restore acl on file \"%s\" on filesystem without acl support\n" +msgstr "" -#: src/filed/xattr.c:2753 +#: src/filed/acl.c:1851 #, fuzzy, c-format -msgid "Unable to get status on xattr %s on file \"%s\": ERR=%s\n" -msgstr "Impossible de créer le fichier bootstrap %s. ERR=%s\n" +msgid "" +"Trying to restore POSIX acl on file \"%s\" on filesystem without aclent acl " +"support\n" +msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" -#: src/filed/xattr.c:2886 -#, fuzzy, c-format -msgid "Unable to open xattr %s on \"%s\": ERR=%s\n" -msgstr "Impossible de se connecter à %s sur %s:%d. ERR=%s\n" +#: src/filed/acl.c:1862 +#, c-format +msgid "" +"Trying to restore NFSv4 acl on file \"%s\" on filesystem without ace acl " +"support\n" +msgstr "" -#: src/filed/xattr.c:2909 +#: src/filed/acl.c:1878 #, fuzzy, c-format -msgid "Unable to read symlin %s on \"%s\": ERR=%s\n" -msgstr "Impossible de se connecter à %s sur %s:%d. ERR=%s\n" +msgid "acl_fromtext error on file \"%s\": ERR=%s\n" +msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" -#: src/filed/xattr.c:2984 -#, fuzzy, c-format -msgid "Unable to read content of xattr %s on file \"%s\"\n" -msgstr "Impossible de lire le certificat à partir du fichier" +#: src/filed/acl.c:1892 src/filed/acl.c:1900 +#, c-format +msgid "wrong encoding of acl type in acl stream on file \"%s\"\n" +msgstr "" -#: src/filed/xattr.c:3024 +#: src/filed/acl.c:1925 #, fuzzy, c-format -msgid "Unable to chdir to xattr space of file \"%s\": ERR=%s\n" -msgstr "Impossible de créer le fichier bootstrap %s. ERR=%s\n" +msgid "acl_set error on file \"%s\": ERR=%s\n" +msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" -#: src/filed/xattr.c:3081 src/filed/xattr.c:3330 +#: src/filed/acl.c:2011 #, fuzzy, c-format -msgid "Unable to open file \"%s\": ERR=%s\n" -msgstr "3910 Impossible d'ouvrir le device %s : ERR=%s\n" +msgid "acltotext error on file \"%s\": ERR=%s\n" +msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" -#: src/filed/xattr.c:3109 src/filed/xattr.c:3391 +#: src/filed/acl.c:2034 #, fuzzy, c-format -msgid "Unable to open xattr space %s on file \"%s\": ERR=%s\n" -msgstr "Impossible de créer le fichier bootstrap %s. ERR=%s\n" +msgid "aclfromtext error on file \"%s\": ERR=%s\n" +msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" -#: src/filed/xattr.c:3125 src/filed/xattr.c:3355 +#: src/filed/acl.c:2054 #, fuzzy, c-format -msgid "Unable to chdir to xattr space on file \"%s\": ERR=%s\n" -msgstr "Impossible de créer le fichier bootstrap %s. ERR=%s\n" +msgid "acl(SETACL) error on file \"%s\": ERR=%s\n" +msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" -#: src/filed/xattr.c:3146 +#: src/filed/acl.c:2120 #, fuzzy, c-format -msgid "Unable to list the xattr space on file \"%s\": ERR=%s\n" -msgstr "Impossible de créer le fichier bootstrap %s. ERR=%s\n" +msgid "pioctl VIOCGETAL error on file \"%s\": ERR=%s\n" +msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" -#: src/filed/xattr.c:3238 +#: src/filed/acl.c:2148 #, fuzzy, c-format -msgid "Unable to convert acl from text on file \"%s\"\n" -msgstr "Impossible de lire le certificat à partir du fichier" +msgid "pioctl VIOCSETAL error on file \"%s\": ERR=%s\n" +msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" -#: src/filed/xattr.c:3248 src/filed/xattr.c:3271 -#, fuzzy, c-format -msgid "Unable to restore acl of xattr %s on file \"%s\": ERR=%s\n" -msgstr "Impossible de créer le fichier bootstrap %s. ERR=%s\n" +#: src/filed/acl.c:2351 +#, c-format +msgid "Can't restore ACLs of %s - incompatible acl stream encountered - %d\n" +msgstr "" -#: src/filed/xattr.c:3344 +#: src/filed/filed.c:52 #, fuzzy, c-format -msgid "Unable to open xattr space on file \"%s\": ERR=%s\n" -msgstr "Impossible de créer le fichier bootstrap %s. ERR=%s\n" +msgid "" +"\n" +"%sVersion: %s (%s)\n" +"\n" +"Usage: bacula-fd [-f -s] [-c config_file] [-d debug_level]\n" +" -c use as configuration file\n" +" -d [,] set debug level to , debug tags to \n" +" -dt print a timestamp in debug output\n" +" -f run in foreground (for debugging)\n" +" -g groupid\n" +" -k keep readall capabilities\n" +" -m print kaboom output (for debugging)\n" +" -s no signals (for debugging)\n" +" -t test configuration file and exit\n" +" -T set trace on\n" +" -u userid\n" +" -v verbose user messages\n" +" -? print this message.\n" +"\n" +msgstr "" +"\n" +"Version : %s (%s)\n" +"\n" +"Usage : bacula-fd [-f -s] [-c config_file] [-d debug_level]\n" +" -c utilise fich comme fichier de configuration\n" +" -d positionne le niveau de debug à nn\n" +" -dt affiche un timestamp sur chaque ligne de debug\n" +" -f reste en avant-plan (pour debugger)\n" +" -g groupid\n" +" -s pas de signaux\n" +" -t test - lit seulement le fichier de configuration\n" +" -u userid\n" +" -v affiche les messages utilisateurs\n" +" -? affiche ce message.\n" +"\n" -#: src/filed/xattr.c:3374 src/filed/xattr.c:3536 -#, fuzzy, c-format -msgid "Unable to open xattr %s on file \"%s\": ERR=%s\n" -msgstr "Impossible de créer le fichier bootstrap %s. ERR=%s\n" +#: src/filed/filed.c:185 +msgid "-k option has no meaning without -u option.\n" +msgstr "" -#: src/filed/xattr.c:3408 -#, fuzzy, c-format -msgid "Unable to chdir to xattr space %s on file \"%s\": ERR=%s\n" -msgstr "Impossible de créer le fichier bootstrap %s. ERR=%s\n" +#: src/filed/filed.c:315 +#, c-format +msgid "" +"No File daemon resource defined in %s\n" +"Without that I don't know who I am :-(\n" +msgstr "" -#: src/filed/xattr.c:3448 -#, fuzzy, c-format -msgid "Unable to mkfifo xattr %s on file \"%s\": ERR=%s\n" -msgstr "Impossible de créer le fichier bootstrap %s. ERR=%s\n" +#: src/filed/filed.c:320 +#, c-format +msgid "Only one Client resource permitted in %s\n" +msgstr "" -#: src/filed/xattr.c:3466 +#: src/filed/filed.c:348 src/filed/filed.c:547 #, fuzzy, c-format -msgid "Unable to mknod xattr %s on file \"%s\": ERR=%s\n" -msgstr "Impossible de créer le fichier bootstrap %s. ERR=%s\n" +msgid "Disable Command \"%s\" not found.\n" +msgstr "le client \"%s\" est introuvable.\n" -#: src/filed/xattr.c:3484 -#, fuzzy, c-format -msgid "Unable to mkdir xattr %s on file \"%s\": ERR=%s\n" -msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" +#: src/filed/filed.c:375 +#, c-format +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"File daemon in %s.\n" +msgstr "" -#: src/filed/xattr.c:3504 -#, fuzzy, c-format -msgid "Unable to link xattr %s to %s on file \"%s\": ERR=%s\n" -msgstr "Impossible de se connecter à %s sur %s:%d. ERR=%s\n" +#: src/filed/filed.c:399 +msgid "PKI encryption/signing enabled but not compiled into Bacula.\n" +msgstr "" -#: src/filed/xattr.c:3557 +#: src/filed/filed.c:410 #, c-format msgid "" -"Unable to restore data of xattr %s on file \"%s\": Not all data available in " -"xattr stream\n" +"\"PKI Key Pair\" must be defined for File daemon \"%s\" in %s if either " +"\"PKI Sign\" or \"PKI Encrypt\" are enabled.\n" msgstr "" -#: src/filed/xattr.c:3570 -#, fuzzy, c-format -msgid "Unable to restore data of xattr %s on file \"%s\": ERR=%s\n" -msgstr "Impossible de créer le fichier bootstrap %s. ERR=%s\n" +#: src/filed/filed.c:422 src/filed/filed.c:453 src/filed/filed.c:503 +#, fuzzy +msgid "Failed to allocate a new keypair object.\n" +msgstr "Impossible de se connecter au Director\n" -#: src/filed/xattr.c:3593 -#, fuzzy, c-format -msgid "Unable to symlink xattr %s to %s on file \"%s\": ERR=%s\n" -msgstr "Impossible de créer le fichier bootstrap %s. ERR=%s\n" +#: src/filed/filed.c:426 +#, c-format +msgid "Failed to load public certificate for File daemon \"%s\" in %s.\n" +msgstr "" -#: src/filed/xattr.c:3629 -#, fuzzy, c-format -msgid "Unable to restore owner of xattr %s on file \"%s\": ERR=%s\n" -msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" +#: src/filed/filed.c:432 +#, c-format +msgid "Failed to load private key for File daemon \"%s\" in %s.\n" +msgstr "" -#: src/filed/xattr.c:3657 -#, fuzzy, c-format -msgid "Unable to restore filetimes of xattr %s on file \"%s\": ERR=%s\n" -msgstr "Impossible de créer le fichier bootstrap %s : ERR=%s\n" +#: src/filed/filed.c:462 +#, c-format +msgid "Failed to load private key from file %s for File daemon \"%s\" in %s.\n" +msgstr "" -#: src/filed/xattr.c:3673 +#: src/filed/filed.c:469 #, c-format -msgid "Illegal xattr stream, failed to parse xattr stream on file \"%s\"\n" +msgid "" +"Failed to load trusted signer certificate from file %s for File daemon \"%s" +"\" in %s.\n" msgstr "" -#: src/filed/xattr.c:3734 +#: src/filed/filed.c:509 #, c-format -msgid "Failed to restore extensible attributes on file \"%s\"\n" +msgid "" +"Failed to load master key certificate from file %s for File daemon \"%s\" in " +"%s.\n" msgstr "" -#: src/filed/xattr.c:3747 -#, fuzzy, c-format -msgid "Failed to restore extended attributes on file \"%s\"\n" +#: src/filed/filed.c:525 +#, c-format +msgid "No Director resource defined in %s\n" msgstr "" -"Impossible de se positionner à la fin du média sur le device %s : ERR=%s\n" -#: src/filed/xattr.c:3841 src/filed/acl.c:2265 +#: src/filed/status.c:82 #, fuzzy, c-format -msgid "Unable to stat file \"%s\": ERR=%s\n" -msgstr "3910 Impossible d'ouvrir le device %s : ERR=%s\n" +msgid "Daemon started %s. Jobs: run=%d running=%d.\n" +msgstr "Démon démarré depuis %s, %d jobs lancés depuis cette date.\n" -#: src/filed/xattr.c:3891 +#: src/filed/status.c:143 #, c-format msgid "" -"Can't restore Extended Attributes of %s - incompatible xattr stream " -"encountered - %d\n" +" Sizes: boffset_t=%d size_t=%d debug=%s trace=%d mode=%d,%d bwlimit=%skB/s\n" msgstr "" -#: src/filed/fd_plugins.c:550 src/filed/fd_plugins.c:694 +#: src/filed/status.c:199 #, c-format -msgid "Command plugin \"%s\": no type in startBackupFile packet.\n" -msgstr "" +msgid "Director connected at: %s\n" +msgstr "Connexion du director le %s\n" -#: src/filed/fd_plugins.c:563 +#: src/filed/status.c:201 #, c-format -msgid "Command plugin \"%s\": no object_name in startBackupFile packet.\n" +msgid "JobId %d Job %s is running.\n" msgstr "" -#: src/filed/fd_plugins.c:576 src/filed/fd_plugins.c:701 +#: src/filed/status.c:204 +#, fuzzy, c-format +msgid " %s%s %s Job started: %s\n" +msgstr "Le job %d est annulé.\n" + +#: src/filed/status.c:232 +#, fuzzy, c-format +msgid "" +" Files=%s Bytes=%s AveBytes/sec=%s LastBytes/sec=%s Errors=%d\n" +" Bwlimit=%s\n" +msgstr " Fichiers=%s Octets=%s Octets/sec=%s Erreurs=%d\n" + +#: src/filed/status.c:242 #, c-format -msgid "Command plugin \"%s\": no fname in startBackupFile packet.\n" +msgid " Files: Restored=%s Expected=%s Completed=%d%%\n" msgstr "" -#: src/filed/fd_plugins.c:775 -#, fuzzy -msgid "Plugin save packet not found.\n" -msgstr "le client \"%s\" est introuvable.\n" +#: src/filed/status.c:247 +#, c-format +msgid " Files: Examined=%s Backed up=%s\n" +msgstr "" -#: src/filed/fd_plugins.c:910 +#: src/filed/status.c:260 #, c-format -msgid "Plugin=%s not found.\n" -msgstr "Plugin=%s non trouvé.\n" +msgid " Processing file: %s\n" +msgstr "" + +#: src/filed/status.c:271 +msgid " SDSocket closed.\n" +msgstr "" + +#: src/filed/status.c:281 +msgid "====\n" +msgstr "====\n" -#: src/filed/fd_plugins.c:977 -#, c-format -msgid "Plugin createFile call failed. Stat=%d file=%s\n" +#: src/filed/status.c:343 +msgid " SDSocket=closed\n" msgstr "" -#: src/filed/fd_plugins.c:982 +#: src/filed/status.c:393 src/filed/status.c:427 #, c-format -msgid "Plugin createFile call failed. Returned CF_ERROR file=%s\n" +msgid "Bad .status command: %s\n" msgstr "" -#: src/filed/fd_plugins.c:1859 -msgid "Command plugin: no fname in baculaCheckChanges packet.\n" +#: src/filed/status.c:394 +msgid "2900 Bad .status command, missing argument.\n" +msgstr "" + +#: src/filed/status.c:428 +msgid "2900 Bad .status command, wrong argument.\n" msgstr "" -#: src/filed/filed.c:76 +#: src/tools/bregex.c:141 src/tools/bregtest.c:125 src/tools/bwild.c:110 +#, c-format +msgid "Could not open data file: %s\n" +msgstr "Impossible d'ouvrir le fichier de données %s.\n" + +#: src/tools/bbatch.c:67 #, fuzzy, c-format msgid "" "\n" "Version: %s (%s)\n" +"Example : bbatch -w /path/to/workdir -h localhost -f dat1 -f dat -f datx\n" +" will start 3 thread and load dat1, dat and datx in your catalog\n" +"See bbatch.c to generate datafile\n" "\n" -"Usage: bacula-fd [-f -s] [-c config_file] [-d debug_level]\n" -" -c use as configuration file\n" -" -d set debug level to \n" -" -dt print a timestamp in debug output\n" -" -f run in foreground (for debugging)\n" -" -g groupid\n" -" -k keep readall capabilities\n" -" -m print kaboom output (for debugging)\n" -" -s no signals (for debugging)\n" -" -t test configuration file and exit\n" -" -u userid\n" -" -v verbose user messages\n" -" -? print this message.\n" +"Usage: bbatch [ options ] -w working/dir -f datafile\n" +" -b with batch mode\n" +" -B without batch mode\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -n specify the database name (default bacula)\n" +" -u specify database user name (default bacula)\n" +" -P specify database host (default NULL)\n" +" -w specify working directory\n" +" -r call restore code with given jobids\n" +" -v verbose\n" +" -f specify data file\n" +" -? print this message\n" "\n" msgstr "" +"Copyright (C) 2000-2005 Kern Sibbald.\n" "\n" "Version : %s (%s)\n" "\n" -"Usage : bacula-fd [-f -s] [-c config_file] [-d debug_level]\n" +"Usage : dird [-f -s] [-c config_file] [-d debug_level] [config_file]\n" " -c utilise fich comme fichier de configuration\n" -" -d positionne le niveau de debug à nn\n" -" -dt affiche un timestamp sur chaque ligne de debug\n" +" -dnn positionne le niveau de debug à nn\n" " -f reste en avant-plan (pour debugger)\n" " -g groupid\n" +" -r lance maintenant\n" " -s pas de signaux\n" " -t test - lit seulement le fichier de configuration\n" " -u userid\n" @@ -17073,2087 +16819,2002 @@ msgstr "" " -? affiche ce message.\n" "\n" -#: src/filed/filed.c:199 -msgid "-k option has no meaning without -u option.\n" +#: src/tools/bbatch.c:199 +#, c-format +msgid "Computing file list for jobid=%s files=%lld secs=%d\n" msgstr "" -#: src/filed/filed.c:337 +#: src/tools/bbatch.c:303 +#, fuzzy, c-format +msgid "Error opening datafile %s\n" +msgstr "Impossible d'ouvrir le fichier de données %s.\n" + +#: src/tools/bbatch.c:313 +#, fuzzy +msgid "Error while inserting file\n" +msgstr "Entrez le nombre de départ : " + +#: src/tools/drivetype.c:35 #, c-format msgid "" -"No File daemon resource defined in %s\n" -"Without that I don't know who I am :-(\n" +"\n" +"Usage: drivetype [-v] path ...\n" +"\n" +" Print the drive type a given file/directory is on.\n" +" The following options are supported:\n" +"\n" +" -l print local fixed hard drive\n" +" -a display information on all drives\n" +" -v print both path and file system type.\n" +" -? print this message.\n" +"\n" msgstr "" -#: src/filed/filed.c:342 +#: src/tools/drivetype.c:66 src/tools/fstype.c:90 #, c-format -msgid "Only one Client resource permitted in %s\n" +msgid "%s: unknown\n" msgstr "" -#: src/filed/filed.c:366 +#: src/tools/bsmtp.c:139 #, c-format +msgid "Fatal malformed reply from %s: %s\n" +msgstr "" + +#: src/tools/bsmtp.c:147 +#, fuzzy, c-format +msgid "Fatal fgets error: ERR=%s\n" +msgstr "erreur de fermeture : ERR=%s\n" + +#: src/tools/bsmtp.c:180 +#, fuzzy, c-format msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"File daemon in %s.\n" +"\n" +"Usage: %s [-f from] [-h mailhost] [-s subject] [-c copy] [recipient ...]\n" +" -4 forces bsmtp to use IPv4 addresses only.\n" +" -6 forces bsmtp to use IPv6 addresses only.\n" +" -8 set charset to UTF-8\n" +" -a use any ip protocol for address resolution\n" +" -c set the Cc: field\n" +" -d set debug level to \n" +" -dt print a timestamp in debug output\n" +" -f set the From: field\n" +" -h use mailhost:port as the SMTP server\n" +" -s set the Subject: field\n" +" -r set the Reply-To: field\n" +" -l set the maximum number of lines to send (default: " +"unlimited)\n" +" -? print this message.\n" +"\n" msgstr "" +"\n" +"Version : %s (%s)\n" +"\n" +"Usage : dird [-f -s] [-c config_file] [-d debug_level] [config_file]\n" +" -c utilise fich comme fichier de configuration\n" +" -d positionne le niveau de debug à nn\n" +" -dt affiche un timestamp devant chaque ligne de debug\n" +" -f reste en avant-plan (pour debugger)\n" +" -g groupid\n" +" -r lance maintenant\n" +" -s pas de signaux\n" +" -t test - lit seulement le fichier de configuration\n" +" -u userid\n" +" -v affiche les messages utilisateurs\n" +" -? affiche ce message.\n" +"\n" -#: src/filed/filed.c:390 -msgid "PKI encryption/signing enabled but not compiled into Bacula.\n" +#: src/tools/bsmtp.c:367 +msgid "Fatal error: no recipient given.\n" msgstr "" -#: src/filed/filed.c:401 +#: src/tools/bsmtp.c:395 #, c-format -msgid "" -"\"PKI Key Pair\" must be defined for File daemon \"%s\" in %s if either " -"\"PKI Sign\" or \"PKI Encrypt\" are enabled.\n" +msgid "Fatal gethostname error: ERR=%s\n" msgstr "" -#: src/filed/filed.c:413 src/filed/filed.c:444 src/filed/filed.c:485 -#, fuzzy -msgid "Failed to allocate a new keypair object.\n" -msgstr "Impossible de se connecter au Director\n" +#: src/tools/bsmtp.c:406 +#, fuzzy, c-format +msgid "Fatal getaddrinfo for myself failed \"%s\": ERR=%s\n" +msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" -#: src/filed/filed.c:417 +#: src/tools/bsmtp.c:414 #, c-format -msgid "Failed to load public certificate for File daemon \"%s\" in %s.\n" +msgid "Fatal gethostbyname for myself failed \"%s\": ERR=%s\n" msgstr "" -#: src/filed/filed.c:423 +#: src/tools/bsmtp.c:474 src/tools/bsmtp.c:509 #, c-format -msgid "Failed to load private key for File daemon \"%s\" in %s.\n" +msgid "Error unknown mail host \"%s\": ERR=%s\n" msgstr "" -#: src/filed/filed.c:453 -#, c-format -msgid "Failed to load private key from file %s for File daemon \"%s\" in %s.\n" +#: src/tools/bsmtp.c:477 src/tools/bsmtp.c:512 +msgid "Retrying connection using \"localhost\".\n" msgstr "" -#: src/filed/filed.c:460 +#: src/tools/bsmtp.c:502 +#, fuzzy, c-format +msgid "Failed to connect to mailhost %s\n" +msgstr "Impossible de se connecter au Client.\n" + +#: src/tools/bsmtp.c:520 #, c-format -msgid "" -"Failed to load trusted signer certificate from file %s for File daemon \"%s" -"\" in %s.\n" +msgid "Fatal error: Unknown address family for smtp host: %d\n" msgstr "" -#: src/filed/filed.c:491 +#: src/tools/bsmtp.c:529 src/tools/bsmtp.c:534 #, c-format -msgid "" -"Failed to load master key certificate from file %s for File daemon \"%s\" in " -"%s.\n" +msgid "Fatal socket error: ERR=%s\n" msgstr "" -#: src/filed/filed.c:507 +#: src/tools/bsmtp.c:539 #, c-format -msgid "No Director resource defined in %s\n" +msgid "Fatal connect error to %s: ERR=%s\n" msgstr "" -#: src/filed/acl.c:229 src/filed/acl.c:254 -#, fuzzy, c-format -msgid "aclx_get error on file \"%s\": ERR=%s\n" -msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" - -#: src/filed/acl.c:280 -#, fuzzy, c-format -msgid "Unknown acl type encountered on file \"%s\": %ld\n" -msgstr "Impossible de créer le fichier bootstrap %s. ERR=%s\n" - -#: src/filed/acl.c:304 src/filed/acl.c:313 +#: src/tools/bsmtp.c:548 #, fuzzy, c-format -msgid "Failed to convert acl into text on file \"%s\"\n" -msgstr "Impossible de lire le certificat à partir du fichier" +msgid "Fatal _open_osfhandle error: ERR=%s\n" +msgstr "erreur de fermeture : ERR=%s\n" -#: src/filed/acl.c:386 +#: src/tools/bsmtp.c:555 src/tools/bsmtp.c:559 src/tools/bsmtp.c:568 +#: src/tools/bsmtp.c:572 #, c-format -msgid "" -"Trying to restore POSIX acl on file \"%s\" on filesystem without AIXC acl " -"support\n" +msgid "Fatal fdopen error: ERR=%s\n" msgstr "" -#: src/filed/acl.c:394 +#: src/tools/bsmtp.c:564 #, c-format -msgid "" -"Trying to restore NFSv4 acl on file \"%s\" on filesystem without NFS4 acl " -"support\n" +msgid "Fatal dup error: ERR=%s\n" msgstr "" -#: src/filed/acl.c:442 src/filed/acl.c:452 -#, fuzzy, c-format -msgid "aclx_scanStr error on file \"%s\": ERR=%s\n" -msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" - -#: src/filed/acl.c:478 -#, fuzzy, c-format -msgid "aclx_put error on file \"%s\": ERR=%s\n" -msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" - -#: src/filed/acl.c:823 -#, fuzzy, c-format -msgid "acl_to_text error on file \"%s\": ERR=%s\n" -msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" - -#: src/filed/acl.c:853 -#, fuzzy, c-format -msgid "acl_get_file error on file \"%s\": ERR=%s\n" -msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" - -#: src/filed/acl.c:906 -#, fuzzy, c-format +#: src/tools/dbcheck.c:183 msgid "" -"acl_delete_def_file error on file \"%s\": filesystem doesn't support ACLs\n" +"Warning skipping the additional parameters for working directory/dbname/user/" +"password/host.\n" msgstr "" -"Impossible de récupérer les informations du Media pour le Volume %s : ERR=" -"%s\n" -#: src/filed/acl.c:912 -#, fuzzy, c-format -msgid "acl_delete_def_file error on file \"%s\": ERR=%s\n" +#: src/tools/dbcheck.c:200 +#, c-format +msgid "Error can not find the Catalog name[%s] in the given config file [%s]\n" msgstr "" -"Impossible de récupérer les informations du Media pour le Volume %s : ERR=" -"%s\n" - -#: src/filed/acl.c:923 -#, fuzzy, c-format -msgid "acl_from_text error on file \"%s\": ERR=%s\n" -msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" - -#: src/filed/acl.c:939 -#, fuzzy, c-format -msgid "acl_valid error on file \"%s\": ERR=%s\n" -msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" - -#: src/filed/acl.c:971 -#, fuzzy, c-format -msgid "acl_set_file error on file \"%s\": filesystem doesn't support ACLs\n" -msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" - -#: src/filed/acl.c:980 -#, fuzzy, c-format -msgid "acl_set_file error on file \"%s\": ERR=%s\n" -msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" - -#: src/filed/acl.c:1087 src/filed/acl.c:1116 src/filed/acl.c:1230 -#: src/filed/acl.c:1738 src/filed/acl.c:1845 -#, fuzzy, c-format -msgid "pathconf error on file \"%s\": ERR=%s\n" -msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" -#: src/filed/acl.c:1246 +#: src/tools/dbcheck.c:202 #, c-format -msgid "" -"Trying to restore acl on file \"%s\" on filesystem without %s acl support\n" +msgid "Error there is no Catalog section in the given config file [%s]\n" msgstr "" -#: src/filed/acl.c:1531 -#, fuzzy, c-format -msgid "getacl error on file \"%s\": ERR=%s\n" -msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" - -#: src/filed/acl.c:1566 -#, fuzzy, c-format -msgid "acltostr error on file \"%s\": ERR=%s\n" -msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" - -#: src/filed/acl.c:1588 src/filed/acl.c:1598 -#, fuzzy, c-format -msgid "strtoacl error on file \"%s\": ERR=%s\n" -msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" - -#: src/filed/acl.c:1627 -#, fuzzy, c-format -msgid "setacl error on file \"%s\": filesystem doesn't support ACLs\n" -msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" - -#: src/filed/acl.c:1635 -#, fuzzy, c-format -msgid "setacl error on file \"%s\": ERR=%s\n" -msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" - -#: src/filed/acl.c:1760 -#, fuzzy, c-format -msgid "acl_get error on file \"%s\": ERR=%s\n" -msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" +#: src/tools/dbcheck.c:211 +msgid "Error no Director resource defined.\n" +msgstr "" -#: src/filed/acl.c:1834 -#, c-format -msgid "" -"Trying to restore acl on file \"%s\" on filesystem without acl support\n" +#: src/tools/dbcheck.c:235 +msgid "Wrong number of arguments.\n" msgstr "" -#: src/filed/acl.c:1863 -#, fuzzy, c-format -msgid "" -"Trying to restore POSIX acl on file \"%s\" on filesystem without aclent acl " -"support\n" -msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" +#: src/tools/dbcheck.c:240 +msgid "Working directory not supplied.\n" +msgstr "" -#: src/filed/acl.c:1874 -#, c-format -msgid "" -"Trying to restore NFSv4 acl on file \"%s\" on filesystem without ace acl " -"support\n" +#: src/tools/dbcheck.c:276 +msgid "Database port must be a numeric value.\n" msgstr "" -#: src/filed/acl.c:1890 -#, fuzzy, c-format -msgid "acl_fromtext error on file \"%s\": ERR=%s\n" -msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" +#: src/tools/dbcheck.c:279 +msgid "Database port must be a int value.\n" +msgstr "" -#: src/filed/acl.c:1904 src/filed/acl.c:1912 +#: src/tools/dbcheck.c:353 #, c-format -msgid "wrong encoding of acl type in acl stream on file \"%s\"\n" +msgid "Hello, this is the database check/correct program.\n" msgstr "" -#: src/filed/acl.c:1937 -#, fuzzy, c-format -msgid "acl_set error on file \"%s\": ERR=%s\n" -msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" +#: src/tools/dbcheck.c:355 +#, c-format +msgid "Modify database is on." +msgstr "" -#: src/filed/acl.c:2023 -#, fuzzy, c-format -msgid "acltotext error on file \"%s\": ERR=%s\n" -msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" +#: src/tools/dbcheck.c:357 +#, c-format +msgid "Modify database is off." +msgstr "" -#: src/filed/acl.c:2046 -#, fuzzy, c-format -msgid "aclfromtext error on file \"%s\": ERR=%s\n" -msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" +#: src/tools/dbcheck.c:359 src/tools/dbcheck.c:420 +#, c-format +msgid " Verbose is on.\n" +msgstr "" -#: src/filed/acl.c:2066 -#, fuzzy, c-format -msgid "acl(SETACL) error on file \"%s\": ERR=%s\n" -msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" +#: src/tools/dbcheck.c:361 src/tools/dbcheck.c:422 +#, c-format +msgid " Verbose is off.\n" +msgstr "" -#: src/filed/acl.c:2132 -#, fuzzy, c-format -msgid "pioctl VIOCGETAL error on file \"%s\": ERR=%s\n" -msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" +#: src/tools/dbcheck.c:363 +#, c-format +msgid "Please select the function you want to perform.\n" +msgstr "" -#: src/filed/acl.c:2160 -#, fuzzy, c-format -msgid "pioctl VIOCSETAL error on file \"%s\": ERR=%s\n" -msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" +#: src/tools/dbcheck.c:367 +#, c-format +msgid "" +"\n" +" 1) Toggle modify database flag\n" +" 2) Toggle verbose flag\n" +" 3) Repair bad Filename records\n" +" 4) Repair bad Path records\n" +" 5) Eliminate duplicate Filename records\n" +" 6) Eliminate duplicate Path records\n" +" 7) Eliminate orphaned Jobmedia records\n" +" 8) Eliminate orphaned File records\n" +" 9) Eliminate orphaned Path records\n" +" 10) Eliminate orphaned Filename records\n" +" 11) Eliminate orphaned FileSet records\n" +" 12) Eliminate orphaned Client records\n" +" 13) Eliminate orphaned Job records\n" +" 14) Eliminate all Admin records\n" +" 15) Eliminate all Restore records\n" +" 16) All (3-15)\n" +" 17) Quit\n" +msgstr "" -#: src/filed/acl.c:2363 +#: src/tools/dbcheck.c:386 #, c-format -msgid "Can't restore ACLs of %s - incompatible acl stream encountered - %d\n" +msgid "" +"\n" +" 1) Toggle modify database flag\n" +" 2) Toggle verbose flag\n" +" 3) Check for bad Filename records\n" +" 4) Check for bad Path records\n" +" 5) Check for duplicate Filename records\n" +" 6) Check for duplicate Path records\n" +" 7) Check for orphaned Jobmedia records\n" +" 8) Check for orphaned File records\n" +" 9) Check for orphaned Path records\n" +" 10) Check for orphaned Filename records\n" +" 11) Check for orphaned FileSet records\n" +" 12) Check for orphaned Client records\n" +" 13) Check for orphaned Job records\n" +" 14) Check for all Admin records\n" +" 15) Check for all Restore records\n" +" 16) All (3-15)\n" +" 17) Quit\n" msgstr "" -#: src/filed/verify_vol.c:63 -msgid "Storage command not issued before Verify.\n" +#: src/tools/dbcheck.c:406 +msgid "Select function number: " msgstr "" -#: src/filed/verify_vol.c:97 src/filed/restore.c:486 +#: src/tools/dbcheck.c:413 #, c-format -msgid "Record header scan error: %s\n" +msgid "Database will be modified.\n" msgstr "" -#: src/filed/verify_vol.c:106 src/filed/restore.c:498 +#: src/tools/dbcheck.c:415 #, c-format -msgid "Data record error. ERR=%s\n" +msgid "Database will NOT be modified.\n" msgstr "" -#: src/filed/verify_vol.c:110 src/filed/restore.c:502 +#: src/tools/dbcheck.c:506 #, c-format -msgid "Actual data size %d not same as header %d\n" +msgid "JobId=%s Name=\"%s\" StartTime=%s\n" msgstr "" -#: src/filed/verify_vol.c:143 +#: src/tools/dbcheck.c:513 #, c-format -msgid "Error scanning record header: %s\n" +msgid "Orphaned JobMediaId=%s JobId=%s Volume=\"%s\"\n" msgstr "" -#: src/filed/backup.c:102 -msgid "Cannot set buffer size FD->SD.\n" +#: src/tools/dbcheck.c:520 +#, c-format +msgid "Orphaned FileId=%s JobId=%s Volume=\"%s\"\n" msgstr "" -#: src/filed/backup.c:194 +#: src/tools/dbcheck.c:527 #, c-format -msgid "Encountered %ld acl errors while doing backup\n" +msgid "Orphaned FileSetId=%s FileSet=\"%s\" MD5=%s\n" msgstr "" -#: src/filed/backup.c:198 +#: src/tools/dbcheck.c:534 #, c-format -msgid "Encountered %ld xattr errors while doing backup\n" +msgid "Orphaned ClientId=%s Name=\"%s\"\n" msgstr "" -#: src/filed/backup.c:267 src/filed/backup.c:276 -msgid "An error occurred while encrypting the stream.\n" +#: src/tools/dbcheck.c:587 +#, c-format +msgid "Deleting: %s\n" msgstr "" -#: src/filed/backup.c:387 +#: src/tools/dbcheck.c:659 #, c-format -msgid " Recursion turned off. Will not descend from %s into %s\n" +msgid "Checking for duplicate Filename entries.\n" msgstr "" -#: src/filed/backup.c:394 +#: src/tools/dbcheck.c:670 #, c-format -msgid " %s is a different filesystem. Will not descend from %s into it.\n" +msgid "Found %d duplicate Filename records.\n" msgstr "" -#: src/filed/backup.c:400 -#, c-format -msgid " Disallowed filesystem. Will not descend from %s into %s\n" +#: src/tools/dbcheck.c:671 +msgid "Print the list? (yes/no): " msgstr "" -#: src/filed/backup.c:405 +#: src/tools/dbcheck.c:694 src/tools/dbcheck.c:759 #, c-format -msgid " Disallowed drive type. Will not descend into %s\n" +msgid "Found %d for: %s\n" msgstr "" -#: src/filed/backup.c:416 +#: src/tools/dbcheck.c:724 #, c-format -msgid " Socket file skipped: %s\n" +msgid "Checking for duplicate Path entries.\n" msgstr "" -#: src/filed/backup.c:429 +#: src/tools/dbcheck.c:735 #, c-format -msgid " Could not access \"%s\": ERR=%s\n" -msgstr " Impossible d'acceder à \"%s\" : ERR=%s\n" +msgid "Found %d duplicate Path records.\n" +msgstr "" -#: src/filed/backup.c:436 -#, c-format -msgid " Could not follow link \"%s\": ERR=%s\n" -msgstr " Impossible de suivre le lien \"%s\" : ERR=%s\n" +#: src/tools/dbcheck.c:736 src/tools/dbcheck.c:798 src/tools/dbcheck.c:844 +#: src/tools/dbcheck.c:912 src/tools/dbcheck.c:970 src/tools/dbcheck.c:1013 +#: src/tools/dbcheck.c:1055 src/tools/dbcheck.c:1097 src/tools/dbcheck.c:1134 +#: src/tools/dbcheck.c:1167 src/tools/dbcheck.c:1201 src/tools/dbcheck.c:1268 +msgid "Print them? (yes/no): " +msgstr "" -#: src/filed/backup.c:443 +#: src/tools/dbcheck.c:789 #, c-format -msgid " Could not stat \"%s\": ERR=%s\n" -msgstr " Impossible d'acceder à \"%s\" : ERR=%s\\n\n" +msgid "Checking for orphaned JobMedia entries.\n" +msgstr "" -#: src/filed/backup.c:453 +#: src/tools/dbcheck.c:797 #, c-format -msgid " Archive file not saved: %s\n" +msgid "Found %d orphaned JobMedia records.\n" msgstr "" -#: src/filed/backup.c:457 +#: src/tools/dbcheck.c:815 #, c-format -msgid " Could not open directory \"%s\": ERR=%s\n" -msgstr " Impossible d'ouvrir le répertoire \"%s\" : ERR=%s\n" +msgid "Deleting %d orphaned JobMedia records.\n" +msgstr "" -#: src/filed/backup.c:466 +#: src/tools/dbcheck.c:832 #, c-format -msgid " Unknown file type %d; not saved: %s\n" -msgstr " Type de fichier inconnu %d ; non sauvé : %s\n" +msgid "Checking for orphaned File entries. This may take some time!\n" +msgstr "" -#: src/filed/backup.c:522 +#: src/tools/dbcheck.c:843 #, c-format -msgid "%s signature digest initialization failed\n" +msgid "Found %d orphaned File records.\n" msgstr "" -#: src/filed/backup.c:630 +#: src/tools/dbcheck.c:860 #, c-format -msgid " Cannot open \"%s\": ERR=%s.\n" -msgstr " Impossible d'ouvrir \"%s\" : ERR=%s.\n" +msgid "Deleting %d orphaned File records.\n" +msgstr "" -#: src/filed/backup.c:667 -#, fuzzy, c-format -msgid " Cannot open resource fork for \"%s\": ERR=%s.\n" -msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" +#: src/tools/dbcheck.c:879 +#, c-format +msgid "Pruning orphaned Path entries isn't possible when using BVFS.\n" +msgstr "" -#: src/filed/backup.c:763 +#: src/tools/dbcheck.c:888 src/tools/dbcheck.c:946 #, fuzzy -msgid "Failed to allocate memory for crypto signature.\n" -msgstr "Impossible de se connecter au Director\n" +msgid "Create temporary index? (yes/no): " +msgstr "Continuez ? (oui/non) : " -#: src/filed/backup.c:768 src/filed/backup.c:774 src/filed/backup.c:789 -msgid "An error occurred while signing the stream.\n" +#: src/tools/dbcheck.c:900 +#, c-format +msgid "Checking for orphaned Path entries. This may take some time!\n" msgstr "" -#: src/filed/backup.c:813 -msgid "An error occurred finalizing signing the stream.\n" +#: src/tools/dbcheck.c:911 +#, c-format +msgid "Found %d orphaned Path records.\n" msgstr "" -#: src/filed/backup.c:931 +#: src/tools/dbcheck.c:924 #, c-format -msgid "Compression deflateParams error: %d\n" +msgid "Deleting %d orphaned Path records.\n" msgstr "" -#: src/filed/backup.c:968 -msgid "Encrypting sparse or offset data not supported.\n" +#: src/tools/dbcheck.c:958 +#, c-format +msgid "Checking for orphaned Filename entries. This may take some time!\n" msgstr "" -#: src/filed/backup.c:975 -#, fuzzy -msgid "Failed to initialize encryption context.\n" -msgstr "Impossible d'initialiser le contexte TLS pour la Console \"%s\".\n" - -#: src/filed/backup.c:1085 +#: src/tools/dbcheck.c:969 #, c-format -msgid "Compression deflate error: %d\n" +msgid "Found %d orphaned Filename records.\n" msgstr "" -#: src/filed/backup.c:1092 +#: src/tools/dbcheck.c:982 #, c-format -msgid "Compression deflateReset error: %d\n" +msgid "Deleting %d orphaned Filename records.\n" msgstr "" -#: src/filed/backup.c:1126 -#, fuzzy, c-format -msgid "Compression LZO error: %d\n" -msgstr "Erreur de décompression. ERR=%d\n" - -#: src/filed/backup.c:1171 src/filed/backup.c:1187 -msgid "Encryption error\n" +#: src/tools/dbcheck.c:1002 +#, c-format +msgid "Checking for orphaned FileSet entries. This takes some time!\n" msgstr "" -#: src/filed/backup.c:1213 +#: src/tools/dbcheck.c:1012 #, c-format -msgid "Read error on file %s. ERR=%s\n" +msgid "Found %d orphaned FileSet records.\n" msgstr "" -#: src/filed/backup.c:1216 +#: src/tools/dbcheck.c:1027 #, c-format -msgid "Too many errors. JobErrors=%d.\n" +msgid "Deleting %d orphaned FileSet records.\n" msgstr "" -#: src/filed/backup.c:1226 -msgid "Encryption padding error\n" +#: src/tools/dbcheck.c:1036 +#, c-format +msgid "Checking for orphaned Client entries.\n" msgstr "" -#: src/filed/backup.c:1290 -msgid "Invalid file flags, no supported data stream type.\n" +#: src/tools/dbcheck.c:1054 +#, c-format +msgid "Found %d orphaned Client records.\n" msgstr "" -#: src/filed/backup.c:1549 +#: src/tools/dbcheck.c:1069 #, c-format -msgid "VSS Writer (BackupComplete): %s\n" +msgid "Deleting %d orphaned Client records.\n" msgstr "" -#: src/filed/restore.c:114 +#: src/tools/dbcheck.c:1078 #, c-format -msgid "Size of data or stream of %s not correct. Original %s, restored %s.\n" +msgid "Checking for orphaned Job entries.\n" msgstr "" -#: src/filed/restore.c:134 +#: src/tools/dbcheck.c:1096 #, c-format -msgid "Invalid length of Finder Info (got %d, not 32)\n" +msgid "Found %d orphaned Job records.\n" msgstr "" -#: src/filed/restore.c:139 -#, fuzzy, c-format -msgid "Could not set Finder Info on %s\n" -msgstr "Impossible d'ouvrir le device %s\n" +#: src/tools/dbcheck.c:1111 +#, c-format +msgid "Deleting %d orphaned Job records.\n" +msgstr "" -#: src/filed/restore.c:418 -#, fuzzy -msgid "LZO init failed\n" -msgstr "Impossible de Rembobiner.\n" +#: src/tools/dbcheck.c:1113 +#, c-format +msgid "Deleting JobMedia records of orphaned Job records.\n" +msgstr "" -#: src/filed/restore.c:660 -msgid "Unexpected cryptographic session data stream.\n" +#: src/tools/dbcheck.c:1115 +#, c-format +msgid "Deleting Log records of orphaned Job records.\n" msgstr "" -#: src/filed/restore.c:670 -msgid "" -"No private decryption keys have been defined to decrypt encrypted backup " -"data.\n" +#: src/tools/dbcheck.c:1124 +#, c-format +msgid "Checking for Admin Job entries.\n" msgstr "" -#: src/filed/restore.c:681 -#, fuzzy -msgid "Could not create digest.\n" -msgstr "Impossible de créer la structure BSOCK cliente.\n" +#: src/tools/dbcheck.c:1133 +#, c-format +msgid "Found %d Admin Job records.\n" +msgstr "" -#: src/filed/restore.c:699 -msgid "Missing private key required to decrypt encrypted backup data.\n" +#: src/tools/dbcheck.c:1148 +#, c-format +msgid "Deleting %d Admin Job records.\n" msgstr "" -#: src/filed/restore.c:702 -msgid "Decrypt of the session key failed.\n" -msgstr "Impossible de décrypter la clef de session.\n" +#: src/tools/dbcheck.c:1157 +#, c-format +msgid "Checking for Restore Job entries.\n" +msgstr "" -#: src/filed/restore.c:708 +#: src/tools/dbcheck.c:1166 #, c-format -msgid "An error occurred while decoding encrypted session data stream: %s\n" +msgid "Found %d Restore Job records.\n" msgstr "" -#: src/filed/restore.c:775 src/filed/restore.c:828 +#: src/tools/dbcheck.c:1181 #, c-format -msgid "Missing encryption session data stream for %s\n" +msgid "Deleting %d Restore Job records.\n" msgstr "" -#: src/filed/restore.c:783 src/filed/restore.c:835 +#: src/tools/dbcheck.c:1191 #, c-format -msgid "Failed to initialize decryption context for %s\n" +msgid "Checking for Filenames with a trailing slash\n" msgstr "" -#: src/filed/restore.c:847 -#, fuzzy, c-format -msgid "Cannot open resource fork for %s.\n" -msgstr "Impossible d'ouvrir le fichier %s : ERR=%s\n" +#: src/tools/dbcheck.c:1200 +#, c-format +msgid "Found %d bad Filename records.\n" +msgstr "" -#: src/filed/restore.c:992 -msgid "Unexpected cryptographic signature data stream.\n" +#: src/tools/dbcheck.c:1218 src/tools/dbcheck.c:1284 +#, c-format +msgid "Reparing %d bad Filename records.\n" msgstr "" -#: src/filed/restore.c:1000 +#: src/tools/dbcheck.c:1258 #, c-format -msgid "Failed to decode message signature for %s\n" +msgid "Checking for Paths without a trailing slash\n" msgstr "" -#: src/filed/restore.c:1064 -#, fuzzy, c-format -msgid "Encountered %ld acl errors while doing restore\n" -msgstr "Saisir la liste des fichiers à restaurer" +#: src/tools/dbcheck.c:1267 +#, c-format +msgid "Found %d bad Path records.\n" +msgstr "" -#: src/filed/restore.c:1068 +#: src/tools/dbcheck.c:1430 #, c-format -msgid "Encountered %ld xattr errors while doing restore\n" +msgid "" +"Ok. Index over the %s column already exists and dbcheck will work faster.\n" msgstr "" -#: src/filed/restore.c:1072 +#: src/tools/dbcheck.c:1433 #, c-format msgid "" -"%d non-supported data streams and %d non-supported attrib streams ignored.\n" +"Note. Index over the %s column not found, that can greatly slow down " +"dbcheck.\n" msgstr "" -#: src/filed/restore.c:1076 +#: src/tools/dbcheck.c:1448 #, c-format -msgid "%d non-supported resource fork streams ignored.\n" +msgid "Create temporary index... This may take some time!\n" msgstr "" -#: src/filed/restore.c:1079 +#: src/tools/dbcheck.c:1456 #, c-format -msgid "%d non-supported Finder Info streams ignored.\n" +msgid "Temporary index created.\n" msgstr "" -#: src/filed/restore.c:1082 +#: src/tools/dbcheck.c:1471 #, c-format -msgid "%d non-supported acl streams ignored.\n" +msgid "Drop temporary index.\n" msgstr "" -#: src/filed/restore.c:1085 -#, fuzzy, c-format -msgid "%d non-supported crypto streams ignored.\n" -msgstr "contentEncryptionAlgorithm non supporté : %d\n" +#: src/tools/dbcheck.c:1481 +#, c-format +msgid "Temporary index %s deleted.\n" +msgstr "" -#: src/filed/restore.c:1088 +#: src/tools/bvfs_test.c:44 src/tools/ing_test.c:45 #, fuzzy, c-format -msgid "%d non-supported xattr streams ignored.\n" -msgstr "contentEncryptionAlgorithm non supporté : %d\n" - -#: src/filed/restore.c:1168 -msgid "Zlib errno" +msgid "" +"\n" +"Version: %s (%s)\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -n specify the database name (default bacula)\n" +" -u specify database user name (default bacula)\n" +" -P specify database host (default NULL)\n" +" -w specify working directory\n" +" -j specify jobids\n" +" -p specify path\n" +" -f specify file\n" +" -l maximum tuple to fetch\n" +" -T truncate cache table before starting\n" +" -v verbose\n" +" -? print this message\n" +"\n" msgstr "" +"Copyright (C) 2000-2005 Kern Sibbald.\n" +"\n" +"Version : %s (%s)\n" +"\n" +"Usage : dird [-f -s] [-c config_file] [-d debug_level] [config_file]\n" +" -c utilise fich comme fichier de configuration\n" +" -dnn positionne le niveau de debug à nn\n" +" -f reste en avant-plan (pour debugger)\n" +" -g groupid\n" +" -r lance maintenant\n" +" -s pas de signaux\n" +" -t test - lit seulement le fichier de configuration\n" +" -u userid\n" +" -v affiche les messages utilisateurs\n" +" -? affiche ce message.\n" +"\n" -#: src/filed/restore.c:1170 -msgid "Zlib stream error" +#: src/tools/testls.c:47 +#, c-format +msgid "" +"\n" +"Usage: testls [-d debug_level] [-] [pattern1 ...]\n" +" -a print extended attributes (Win32 debug)\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -e specify file of exclude patterns\n" +" -i specify file of include patterns\n" +" -q quiet, don't print filenames (debug)\n" +" - read pattern(s) from stdin\n" +" -? print this message.\n" +"\n" +"Patterns are file inclusion -- normally directories.\n" +"Debug level >= 1 prints each file found.\n" +"Debug level >= 10 prints path/file for catalog.\n" +"Errors always printed.\n" +"Files/paths truncated is number with len > 255.\n" +"Truncation is only in catalog.\n" +"\n" msgstr "" -#: src/filed/restore.c:1172 -msgid "Zlib data error" +#: src/tools/testls.c:143 +#, c-format +msgid "Could not open include file: %s\n" msgstr "" -#: src/filed/restore.c:1174 -msgid "Zlib memory error" +#: src/tools/testls.c:156 +#, c-format +msgid "Could not open exclude file: %s\n" msgstr "" -#: src/filed/restore.c:1176 -msgid "Zlib buffer error" +#: src/tools/testls.c:170 +#, c-format +msgid "Files seen = %d\n" msgstr "" -#: src/filed/restore.c:1178 -msgid "Zlib version error" +#: src/tools/testls.c:203 src/tools/testfind.c:310 +#, c-format +msgid "Err: Could not access %s: %s\n" msgstr "" -#: src/filed/restore.c:1218 +#: src/tools/testls.c:206 src/tools/testfind.c:313 #, c-format -msgid "Missing cryptographic signature for %s\n" +msgid "Err: Could not follow ff->link %s: %s\n" msgstr "" -#: src/filed/restore.c:1251 src/filed/restore.c:1280 -#, fuzzy, c-format -msgid "Signature validation failed for file %s: ERR=%s\n" -msgstr "Impossible de créer le fichier bootstrap %s : ERR=%s\n" - -#: src/filed/restore.c:1268 -#, fuzzy, c-format -msgid "Digest one file failed for file: %s\n" -msgstr "Impossible de créer le fichier bootstrap %s : ERR=%s\n" - -#: src/filed/restore.c:1307 +#: src/tools/testls.c:209 src/tools/testfind.c:316 #, c-format -msgid "Signature validation failed for %s: %s\n" +msgid "Err: Could not stat %s: %s\n" msgstr "" -#: src/filed/restore.c:1404 -#, fuzzy, c-format -msgid "LZO uncompression error on file %s. ERR=%d\n" -msgstr "Erreur de décompression. ERR=%d\n" - -#: src/filed/restore.c:1441 +#: src/tools/testls.c:212 src/tools/testfind.c:319 #, c-format -msgid "Uncompression error on file %s. ERR=%s\n" +msgid "Skip: File not saved. No change. %s\n" msgstr "" -#: src/filed/restore.c:1474 +#: src/tools/testls.c:215 src/tools/testfind.c:322 #, c-format -msgid "Write error in Win32 Block Decomposition on %s: %s\n" +msgid "Err: Attempt to backup archive. Not saved. %s\n" msgstr "" -#: src/filed/restore.c:1533 -msgid "Decryption error\n" +#: src/tools/testls.c:218 +#, c-format +msgid "Recursion turned off. Directory not entered. %s\n" msgstr "" -#: src/filed/restore.c:1626 -msgid "Logic error: output file should be open\n" +#: src/tools/testls.c:221 +#, c-format +msgid "Skip: File system change prohibited. Directory not entered. %s\n" msgstr "" -#: src/filed/restore.c:1664 -msgid "Logic error: output file should not be open\n" +#: src/tools/testls.c:224 src/tools/testfind.c:325 +#, c-format +msgid "Err: Could not open directory %s: %s\n" msgstr "" -#: src/filed/restore.c:1698 +#: src/tools/testls.c:227 src/tools/testfind.c:328 #, c-format -msgid "Decryption error. buf_len=%d decrypt_len=%d on file %s\n" +msgid "Err: Unknown file ff->type %d: %s\n" msgstr "" -#: src/filed/restore.c:1819 -msgid "Open File Manager paused\n" +#: src/tools/testfind.c:58 +#, c-format +msgid "" +"\n" +"Usage: testfind [-d debug_level] [-] [pattern1 ...]\n" +" -a print extended attributes (Win32 debug)\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -c specify config file containing FileSet resources\n" +" -f specify which FileSet to use\n" +" -? print this message.\n" +"\n" +"Patterns are used for file inclusion -- normally directories.\n" +"Debug level >= 1 prints each file found.\n" +"Debug level >= 10 prints path/file for catalog.\n" +"Errors are always printed.\n" +"Files/paths truncated is the number of files/paths with len > 255.\n" +"Truncation is only in the catalog.\n" +"\n" msgstr "" -#: src/filed/restore.c:1823 -msgid "FAILED to pause Open File Manager\n" +#: src/tools/testfind.c:223 +#, c-format +msgid "" +"\n" +"Total files : %d\n" +"Max file length: %d\n" +"Max path length: %d\n" +"Files truncated: %d\n" +"Paths truncated: %d\n" +"Hard links : %d\n" msgstr "" -#: src/filed/restore.c:1831 +#: src/tools/testfind.c:266 #, c-format -msgid "Running as '%s'. Privmask=%#08x\n" +msgid "Reg: %s\n" msgstr "" -#: src/filed/restore.c:1833 -msgid "Failed to retrieve current UserName\n" +#: src/tools/testfind.c:288 +msgid "\t[will not descend: recursion turned off]" msgstr "" -#: src/filed/job.c:456 -#, c-format -msgid "2901 Job %s not found.\n" -msgstr "2901 Le job %s est introuvable.\n" +#: src/tools/testfind.c:290 +msgid "\t[will not descend: file system change not allowed]" +msgstr "" -#: src/filed/job.c:466 -#, c-format -msgid "2001 Job %s marked to be canceled.\n" -msgstr "2001 Le job %s va être annulé.\n" +#: src/tools/testfind.c:292 +msgid "\t[will not descend: disallowed file system]" +msgstr "" -#: src/filed/job.c:469 -msgid "2902 Error scanning cancel command.\n" -msgstr "2902 Erreur dans le décodage de la commande d'annulation.\n" +#: src/tools/testfind.c:294 +msgid "\t[will not descend: disallowed drive type]" +msgstr "" -#: src/filed/job.c:492 +#: src/tools/testfind.c:378 #, c-format -msgid "2991 Bad setdebug command: %s\n" -msgstr "2991 Erreur dans la commande setdebug : %s\n" +msgid "===== Filename truncated to 255 chars: %s\n" +msgstr "" -#: src/filed/job.c:515 +#: src/tools/testfind.c:395 #, c-format -msgid "Bad estimate command: %s" +msgid "========== Path name truncated to 255 chars: %s\n" msgstr "" -#: src/filed/job.c:516 -msgid "2992 Bad estimate command.\n" +#: src/tools/testfind.c:404 +#, c-format +msgid "========== Path length is zero. File=%s\n" msgstr "" -#: src/filed/job.c:539 +#: src/tools/testfind.c:407 #, c-format -msgid "Bad Job Command: %s" +msgid "Path: %s\n" msgstr "" -#: src/filed/job.c:578 +#: src/tools/fstype.c:36 #, c-format -msgid "Bad RunBeforeJob command: %s\n" +msgid "" +"\n" +"Usage: fstype [-v] path ...\n" +"\n" +" Print the file system type a given file/directory is on.\n" +" The following options are supported:\n" +"\n" +" -v print both path and file system type.\n" +" -? print this message.\n" +"\n" +msgstr "" + +#: src/tools/cats_test.c:48 +#, fuzzy, c-format +msgid "" +"\n" +"Version: %s (%s)\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -n specify the database name (default bacula)\n" +" -u specify database user name (default bacula)\n" +" -P specify database host (default NULL)\n" +" -w specify working directory\n" +" -p specify path\n" +" -f specify file\n" +" -l maximum tuple to fetch\n" +" -q print only errors\n" +" -v verbose\n" +" -? print this message\n" +"\n" msgstr "" +"Copyright (C) 2000-2005 Kern Sibbald.\n" +"\n" +"Version : %s (%s)\n" +"\n" +"Usage : dird [-f -s] [-c config_file] [-d debug_level] [config_file]\n" +" -c utilise fich comme fichier de configuration\n" +" -dnn positionne le niveau de debug à nn\n" +" -f reste en avant-plan (pour debugger)\n" +" -g groupid\n" +" -r lance maintenant\n" +" -s pas de signaux\n" +" -t test - lit seulement le fichier de configuration\n" +" -u userid\n" +" -v affiche les messages utilisateurs\n" +" -? affiche ce message.\n" +"\n" -#: src/filed/job.c:579 src/filed/job.c:598 -msgid "2905 Bad RunBeforeJob command.\n" -msgstr "" +#: src/tools/cats_test.c:364 +#, fuzzy, c-format +msgid "Could not open, database \"%s\".\n" +msgstr "Impossible d'ouvrir la base de données \"%s\".\n" -#: src/filed/job.c:609 -msgid "2905 Bad RunBeforeNow command.\n" +#: src/tools/ing_test.c:219 src/tools/ing_test.c:252 src/tools/ing_test.c:290 +msgid "Stmt went wrong\n" msgstr "" -#: src/filed/job.c:628 -#, c-format -msgid "Bad RunAfter command: %s\n" +#: src/tools/ing_test.c:308 +msgid "CREATE-Stmt went wrong\n" msgstr "" -#: src/filed/job.c:629 -msgid "2905 Bad RunAfterJob command.\n" +#: src/tools/ing_test.c:313 +msgid "DROP-Stmt went wrong\n" msgstr "" -#: src/filed/job.c:665 -#, c-format -msgid "Bad RunScript command: %s\n" -msgstr "Erreur dans la commande RunScript : %s\n" - -#: src/filed/job.c:666 -msgid "2905 Bad RunScript command.\n" -msgstr "2905 Erreur sur la commande RunScript.\n" - -#: src/filed/job.c:720 -#, fuzzy, c-format -msgid "Bad RestoreObject command: %s\n" -msgstr "Erreur dans la commande RunScript : %s\n" - -#: src/filed/job.c:785 -#, fuzzy -msgid "2909 Bad RestoreObject command.\n" -msgstr "2905 Erreur sur la commande RunScript.\n" - -#: src/filed/job.c:824 +#: examples/nagios/check_bacula/check_bacula.c:59 #, c-format -msgid "Plugin Directory not defined. Cannot use plugin: \"%s\"\n" +msgid "" +"Copyright (C) 2005 Christian Masopust\n" +"Written by Christian Masopust (2005)\n" +"\n" +"Version: " msgstr "" -#: src/filed/job.c:866 -#, c-format -msgid "Error running program: %s. stat=%d: ERR=%s\n" -msgstr "Erreur dans l'exécution de la commande : %s. stat=%d: ERR=%s\n" +#: src/lib/status.h:82 +msgid "===================================================================\n" +msgstr "===================================================================\n" -#: src/filed/job.c:877 +#: src/baconfig.h:60 src/baconfig.h:61 src/baconfig.h:66 src/baconfig.h:67 #, c-format -msgid "Cannot open FileSet input file: %s. ERR=%s\n" +msgid "Failed ASSERT: %s\n" msgstr "" -#: src/filed/job.c:1031 -#, c-format -msgid "REGEX %s compile error. ERR=%s\n" -msgstr "" +#: src/qt-console/bcomm/dircomm.cpp:79 +#, fuzzy, c-format +msgid "Already connected\"%s\".\n" +msgstr "Console connecté à %s\n" -#: src/filed/job.c:1182 -#, c-format -msgid "Invalid FileSet command: %s\n" -msgstr "" +#: src/qt-console/bcomm/dircomm.cpp:90 +#: src/qt-console/tray-monitor/tray-monitor.cpp:347 +#, fuzzy, c-format +msgid "Connecting to Director %s:%d" +msgstr "Connexion au Director %s:%d\n" -#: src/filed/job.c:1655 +#: src/qt-console/bcomm/dircomm.cpp:92 #, fuzzy, c-format msgid "" -"DIR and FD clocks differ by %lld seconds, FD automatically compensating.\n" -msgstr "" -"L'horloge du client et du director ont %d secondes d'écart, le client s'est " -"ajusté automatiquement.\n" +"Connecting to Director %s:%d\n" +"\n" +msgstr "Connexion au Director %s:%d\n" -#: src/filed/job.c:1664 -#, c-format -msgid "Unknown backup level: %s\n" -msgstr "" +#: src/qt-console/bcomm/dircomm.cpp:163 +#: src/qt-console/tray-monitor/tray-monitor.cpp:349 +#, fuzzy +msgid "Director daemon" +msgstr "Director" -#: src/filed/job.c:1677 -#, c-format -msgid "Bad level command: %s\n" +#: src/qt-console/bcomm/dircomm.cpp:201 +msgid "Initializing ..." msgstr "" -#: src/filed/job.c:1699 -#, c-format -msgid "Bad session command: %s" -msgstr "" +#: src/qt-console/bcomm/dircomm.cpp:217 src/qt-console/console/console.cpp:130 +#, fuzzy +msgid "Connected" +msgstr "Connexion...\n" -#: src/filed/job.c:1760 -#, c-format -msgid "Bad storage command: %s" -msgstr "" +#: src/qt-console/bcomm/dircomm.cpp:341 +#, fuzzy +msgid "Command completed ..." +msgstr "Commande annulée.\n" -#: src/filed/job.c:1781 -#, c-format -msgid "Failed to connect to Storage daemon: %s:%d\n" +#: src/qt-console/bcomm/dircomm.cpp:348 src/qt-console/console/console.cpp:367 +msgid "Processing command ..." msgstr "" -#: src/filed/job.c:1793 -msgid "Failed to authenticate Storage daemon.\n" +#: src/qt-console/bcomm/dircomm.cpp:355 +msgid "At main prompt waiting for input ..." msgstr "" -#: src/filed/job.c:1840 -msgid "ACL support not configured for your machine.\n" +#: src/qt-console/bcomm/dircomm.cpp:362 src/qt-console/bcomm/dircomm.cpp:375 +msgid "At prompt waiting for input ..." msgstr "" -#: src/filed/job.c:1844 -msgid "XATTR support not configured for your machine.\n" -msgstr "" +#: src/qt-console/bcomm/dircomm.cpp:383 +#, fuzzy +msgid "Command failed." +msgstr "Commande annulée.\n" -#: src/filed/job.c:1853 -msgid "Cannot contact Storage daemon\n" -msgstr "Impossible de se connecter au démon Storage\n" +#: src/qt-console/bcomm/dircomm.cpp:455 +#, fuzzy +msgid "Director disconnected." +msgstr "Connexion du director le %s\n" -#: src/filed/job.c:1872 +#: src/qt-console/tray-monitor/tray_conf.cpp:165 #, c-format -msgid "Bad response to append open: %s\n" -msgstr "" - -#: src/filed/job.c:1877 -msgid "Bad response from stored to open command\n" +msgid "Monitor: name=%s FDtimeout=%s SDtimeout=%s\n" msgstr "" -#: src/filed/job.c:1909 +#: src/qt-console/tray-monitor/tray_conf.cpp:171 #, c-format -msgid "Generate VSS snapshots. Driver=\"%s\", Drive(s)=\"%s\"\n" -msgstr "Création des snapshot VSS. Driver=\"%s\", Lecteur(s)=\"%s\"\n" - -#: src/filed/job.c:1912 -#, fuzzy, c-format -msgid "CreateSGenerate VSS snapshots failed. ERR=%s\n" -msgstr "Erreur durant la création des snapshots VSS.\n" +msgid "Director: name=%s address=%s FDport=%d\n" +msgstr "" -#: src/filed/job.c:1919 +#: src/qt-console/tray-monitor/tray_conf.cpp:175 #, fuzzy, c-format -msgid "Generate VSS snapshot of drive \"%c:\\\" failed.\n" -msgstr "Erreur durant la création des snapshots VSS.\n" +msgid "Client: name=%s address=%s FDport=%d\n" +msgstr "Client \"%s\" adresse positionné à %s\n" -#: src/filed/job.c:1925 +#: src/qt-console/tray-monitor/tray_conf.cpp:179 #, c-format -msgid "VSS Writer (PrepareForBackup): %s\n" +msgid "Storage: name=%s address=%s SDport=%d\n" msgstr "" -#: src/filed/job.c:1930 -msgid "No drive letters found for generating VSS snapshots.\n" +#: src/qt-console/tray-monitor/tray_conf.cpp:183 +#: src/qt-console/bat_conf.cpp:145 +#, c-format +msgid "ConsoleFont: name=%s font face=%s\n" msgstr "" -#: src/filed/job.c:1934 +#: src/qt-console/tray-monitor/tray-monitor.cpp:55 #, fuzzy, c-format -msgid "VSS was not initialized properly. ERR=%s\n" -msgstr "Impossible d'initialiser le verrou sur la base. ERR=%s\n" - -#: src/filed/job.c:1985 -msgid "Append Close with SD failed.\n" +msgid "" +"\n" +"Version: %s (%s) %s %s %s\n" +"\n" +"Usage: tray-monitor [-c config_file] [-d debug_level]\n" +" -c set configuration file to file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -t test - read configuration and exit\n" +" -? print this message.\n" +"\n" msgstr "" +") %s %s %s\n" +"\n" +"Usage : bconsole [-s] [-c config_file] [-d niveau_debug]\n" +" -c set configuration file to file\n" +" -dnn set debug level to nn\n" +" -s no signals\n" +" -t test - lecture de la configuration et sortie\n" +"\n" -#: src/filed/job.c:1989 +#: src/qt-console/tray-monitor/tray-monitor.cpp:204 #, c-format -msgid "Bad status %d returned from Storage Daemon.\n" +msgid "" +"Error: %d Monitor resources defined in %s. You must define one and only one " +"Monitor resource.\n" msgstr "" -#: src/filed/job.c:2019 -#, c-format -msgid "2994 Bad verify command: %s\n" +#: src/qt-console/tray-monitor/tray-monitor.cpp:236 +#, fuzzy, c-format +msgid "" +"No Client, Storage or Director resource defined in %s\n" +"Without that I don't how to get status from the File, Storage or Director " +"Daemon :-(\n" msgstr "" +"Pas de director défini pour %s\n" +"Sans cette définition, il n'est pas possible de se connecter à celui-ci.\n" -#: src/filed/job.c:2034 src/filed/job.c:2075 +#: src/qt-console/tray-monitor/tray-monitor.cpp:251 #, c-format -msgid "2994 Bad verify level: %s\n" +msgid "" +"Invalid refresh interval defined in %s\n" +"This value must be greater or equal to 1 second and less or equal to 10 " +"minutes (read value: %d).\n" msgstr "" -#: src/filed/job.c:2146 +#: src/qt-console/tray-monitor/tray-monitor.cpp:319 #, c-format -msgid "Bad replace command. CMD=%s\n" +msgid "Error, currentitem is not a Client or a Storage..\n" msgstr "" -#: src/filed/job.c:2169 -#, c-format -msgid "Bad where regexp. where=%s\n" -msgstr "" +#: src/qt-console/tray-monitor/tray-monitor.cpp:354 +#, fuzzy, c-format +msgid "Connecting to Client %s:%d" +msgstr "Connexion au client %s (%s:%d)\n" -#: src/filed/job.c:2207 -#, c-format -msgid "VSS was not initialized properly. VSS support is disabled. ERR=%s\n" +#: src/qt-console/tray-monitor/tray-monitor.cpp:356 +msgid "File daemon" msgstr "" -#: src/filed/job.c:2252 +#: src/qt-console/tray-monitor/tray-monitor.cpp:361 +#, fuzzy, c-format +msgid "Connecting to Storage %s:%d" +msgstr "Connexion au Director %s:%d\n" + +#: src/qt-console/tray-monitor/tray-monitor.cpp:367 +#: src/qt-console/tray-monitor/tray-monitor.cpp:397 #, c-format -msgid "VSS Writer (RestoreComplete): %s\n" +msgid "Error, currentitem is not a Client, a Storage or a Director..\n" msgstr "" -#: src/filed/job.c:2302 -msgid "Improper calling sequence.\n" -msgstr "" +#: src/qt-console/tray-monitor/tray-monitor.cpp:372 +#, fuzzy +msgid "Cannot connect to daemon." +msgstr "Impossible de se connecter au démon Storage\n" -#: src/filed/job.c:2322 -#, c-format -msgid "Bad response to SD read open: %s\n" -msgstr "" +#: src/qt-console/tray-monitor/tray-monitor.cpp:381 +#, fuzzy, c-format +msgid "Authentication error : %s" +msgstr "Erreur sur l'autochangeur : ERR=%s\n" -#: src/filed/job.c:2327 -msgid "Bad response from stored to read open command\n" -msgstr "" +#: src/qt-console/tray-monitor/tray-monitor.cpp:388 +#, fuzzy +msgid "Opened connection with Director daemon." +msgstr "Impossible de se connecter au Storage daemon.\n" -#: src/filed/job.c:2391 -#, c-format -msgid "Comm error with SD. bad response to %s. ERR=%s\n" +#: src/qt-console/tray-monitor/tray-monitor.cpp:391 +#, fuzzy +msgid "Opened connection with File daemon." +msgstr "Impossible de se connecter au client.\n" + +#: src/qt-console/tray-monitor/tray-monitor.cpp:394 +#, fuzzy +msgid "Opened connection with Storage daemon." +msgstr "Impossible de se connecter au Storage daemon.\n" + +#: src/qt-console/tray-monitor/tray-monitor.cpp:445 +msgid "Error : BNET_HARDEOF or BNET_ERROR" msgstr "" -#: src/filed/job.c:2394 -#, c-format -msgid "Bad response to %s command. Wanted %s, got %s\n" +#: src/qt-console/tray-monitor/tray-monitor.cpp:454 +#, fuzzy +msgid "Error : Connection closed." +msgstr "Connexion...\n" + +#: src/qt-console/tray-monitor/authenticate.cpp:75 +#, fuzzy +msgid "" +"Director authorization problem.\n" +"Most likely the passwords do not agree.\n" +"Please see " msgstr "" +"Problème d'authentification avec le director.\n" +"Le plus souvent, les mots de pass ne correspondent pas.\n" +"Vous trouverez de l'aide sur\n" +"http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors\n" -#: src/filed/authenticate.c:68 -#, c-format -msgid "I only authenticate directors, not %d\n" +#: src/qt-console/tray-monitor/authenticate.cpp:125 +#, fuzzy +msgid "" +"Director and Storage daemon passwords or names not the same.\n" +"Please see " msgstr "" +"Le mot de passe ou le nom du Director et du Client ne sont pas identiques.\n" -#: src/filed/authenticate.c:100 -#, c-format -msgid "Connection from unknown Director %s at %s rejected.\n" +#: src/qt-console/tray-monitor/authenticate.cpp:132 +#, fuzzy, c-format +msgid "bdird set configuration file to file\n" +" -dnn set debug level to nn\n" +" -s no signals\n" +" -t test - read configuration and exit\n" +" -? print this message.\n" +"\n" msgstr "" - -#: src/win32/compat/compat.cpp:2721 -#, fuzzy -msgid "" +") %s %s %s\n" "\n" +"Usage : bconsole [-s] [-c config_file] [-d niveau_debug]\n" +" -c set configuration file to file\n" +" -dnn set debug level to nn\n" +" -s no signals\n" +" -t test - lecture de la configuration et sortie\n" "\n" -"Bacula ERROR: " -msgstr "Bacula " -#: src/win32/libwin32/service.cpp:107 -msgid "RegisterServiceCtlHandler failed" -msgstr "" +#: src/qt-console/bat_conf.cpp:142 +#, fuzzy, c-format +msgid "Console: name=%s\n" +msgstr "Console connecté à %s\n" -#: src/win32/libwin32/service.cpp:108 #, fuzzy -msgid "Failure contacting the Service Handler" -msgstr "Impossible de décrypter la clef de session" - -#: src/win32/libwin32/service.cpp:119 -msgid "Service start report failed" -msgstr "" +#~ msgid "Cannot run free space command. Results=%s ERR=%s\n" +#~ msgstr "Impossible de lancer la commande : %s. ERR=%s\n" -#: src/win32/libwin32/service.cpp:172 -msgid "StartServiceCtrlDispatcher failed." -msgstr "" - -#: src/win32/libwin32/service.cpp:179 #, fuzzy -msgid "KERNEL32.DLL not found: Bacula service not started" -msgstr "Ressource %s introuvable\n" +#~ msgid "Error writing part %d to the DVD: ERR=%s\n" +#~ msgstr "Erreur dans l'exécution de la commande : %s. ERR=%s\n" -#: src/win32/libwin32/service.cpp:189 #, fuzzy -msgid "Registry service not found: Bacula service not started" -msgstr "Ressource %s introuvable\n" +#~ msgid "Unable to write last on %s: ERR=%s\n" +#~ msgstr "Impossible de se connecter à %s sur %s:%d. ERR=%s\n" -#: src/win32/libwin32/service.cpp:191 #, fuzzy -msgid "Registry service entry point not found" -msgstr "Ressource %s introuvable\n" +#~ msgid "" +#~ "Out of freespace caused End of Volume \"%s\" at %u:%u on device %s. Write " +#~ "of %u bytes got %d.\n" +#~ msgstr "" +#~ "Fin du volume \"%s\" à %u:%u sur le device %s. Ecriture de %u octets, eu " +#~ "%d.\n" -#: src/win32/libwin32/service.cpp:212 -msgid "Report Service failure" -msgstr "" +#~ msgid "Could not initialize Python\n" +#~ msgstr "Impossible d'initialiser le Python\n" -#: src/win32/libwin32/service.cpp:243 -#, fuzzy -msgid "Unable to install the service" -msgstr "Impossible d'écrire le marqueur EOF. ERR=%s\n" +#~ msgid "Could not Run Python string %s\n" +#~ msgstr "Impossible de lancer la commande Python %s\n" -#: src/win32/libwin32/service.cpp:251 -msgid "Service command length too long" -msgstr "" +#, fuzzy +#~ msgid "Unable to initialize the Python lock. ERR=%s\n" +#~ msgstr "Impossible d'initialiser le verrou sur la base. ERR=%s\n" -#: src/win32/libwin32/service.cpp:252 -msgid "Service command length too long. Service not registered." -msgstr "" +#, fuzzy +#~ msgid "Cannot open current directory: ERR=%s\n" +#~ msgstr "Impossible d'ouvrir le fichier inclus : %s. ERR=%s\n" -#: src/win32/libwin32/service.cpp:265 #, fuzzy -msgid "" -"The Service Control Manager could not be contacted - the service was not " -"installed" -msgstr "Ressource %s introuvable\n" +#~ msgid "Cannot get current directory: ERR=%s\n" +#~ msgstr "change le répertoire courant" -#: src/win32/libwin32/service.cpp:288 src/win32/libwin32/service.cpp:317 -#: src/win32/libwin32/service.cpp:365 src/win32/libwin32/service.cpp:373 -#: src/win32/libwin32/service.cpp:377 #, fuzzy -msgid "The Bacula service: " -msgstr "Bacula Storage : Dernier Job annulé" +#~ msgid "Cannot reset current directory: ERR=%s\n" +#~ msgstr "change le répertoire courant" -#: src/win32/libwin32/service.cpp:295 -msgid "" -"Provides file backup and restore services. Bacula -- the network backup " -"solution." -msgstr "" +#~ msgid "Generate VSS snapshots. Driver=\"%s\", Drive(s)=\"%s\"\n" +#~ msgstr "Création des snapshot VSS. Driver=\"%s\", Lecteur(s)=\"%s\"\n" -#: src/win32/libwin32/service.cpp:306 #, fuzzy -msgid "Cannot write System Registry for " -msgstr "Impossible de détruire la mémoire partagée : %s\n" +#~ msgid "CreateSGenerate VSS snapshots failed. ERR=%s\n" +#~ msgstr "Erreur durant la création des snapshots VSS.\n" -#: src/win32/libwin32/service.cpp:307 #, fuzzy -msgid "" -"The System Registry could not be updated - the Bacula service was not " -"installed" -msgstr "Ressource %s introuvable\n" +#~ msgid "Generate VSS snapshot of drive \"%c:\\\" failed.\n" +#~ msgstr "Erreur durant la création des snapshots VSS.\n" -#: src/win32/libwin32/service.cpp:316 -msgid "Cannot add Bacula key to System Registry" -msgstr "" +#, fuzzy +#~ msgid "VSS was not initialized properly. ERR=%s\n" +#~ msgstr "Impossible d'initialiser le verrou sur la base. ERR=%s\n" -#: src/win32/libwin32/service.cpp:327 -msgid "The " -msgstr "" +#~ msgid "Attribute %s not found." +#~ msgstr "Attribut %s non trouvé." -#: src/win32/libwin32/service.cpp:385 #, fuzzy -msgid "An existing Bacula service: " -msgstr "Bacula Storage : Dernier Job annulé" +#~ msgid "JobId %s is not running. Use Job name to %s inactive jobs.\n" +#~ msgstr "" +#~ "JobId %s n'est pas en cours. Utilisez le nom du Job pour annuler un job " +#~ "inactif.\n" -#: src/win32/libwin32/service.cpp:394 #, fuzzy -msgid "" -"The service Manager could not be contacted - the Bacula service was not " -"removed" -msgstr "Ressource %s introuvable\n" +#~ msgid "" +#~ "Cancel: %s\n" +#~ "\n" +#~ "%s" +#~ msgstr "" +#~ "Annule : %s\n" +#~ "\n" +#~ "%s" + +#~ msgid "Confirm cancel?" +#~ msgstr "Confirmez l'annulation : " -#: src/win32/libwin32/service.cpp:407 #, fuzzy -msgid "" -"Could not find registry entry.\n" -"Service probably not registerd - the Bacula service was not removed" -msgstr "Ressource %s introuvable\n" +#~ msgid "Disable a job" +#~ msgstr "est bloqué" -#: src/win32/libwin32/service.cpp:414 #, fuzzy -msgid "Could not delete Registry key for " -msgstr "Impossible de détruire la mémoire partagée : %s\n" +#~ msgid "Please Plugin Options string: " +#~ msgstr "Saisissez le début du chemin (prefix) à enlever : " -#: src/win32/libwin32/service.cpp:425 -msgid "Bacula could not be contacted, probably not running" -msgstr "" +#~ msgid "%6d %-6s %-20s %s\n" +#~ msgstr "%6d %-6s %-20s %s\n" -#: src/win32/libwin32/service.cpp:433 -#, fuzzy -msgid "The Bacula service has been removed" -msgstr "Ressource %s introuvable\n" +#~ msgid "Priority must be 1-100" +#~ msgstr "La priorité doit être comprise entre 1 et 100" -#: src/win32/libwin32/service.cpp:474 -msgid "SetServiceStatus failed" -msgstr "" +#, fuzzy +#~ msgid "" +#~ "Written by Nicolas Boichat (2004)\n" +#~ "\n" +#~ "Version: %s (%s) %s %s %s\n" +#~ "\n" +#~ "Usage: tray-monitor [-c config_file] [-d debug_level]\n" +#~ " -c set configuration file to file\n" +#~ " -d set debug level to \n" +#~ " -dt print timestamp in debug output\n" +#~ " -t test - read configuration and exit\n" +#~ " -? print this message.\n" +#~ "\n" +#~ msgstr "" +#~ ") %s %s %s\n" +#~ "\n" +#~ "Usage : bconsole [-s] [-c config_file] [-d niveau_debug]\n" +#~ " -c set configuration file to file\n" +#~ " -dnn set debug level to nn\n" +#~ " -s no signals\n" +#~ " -t test - lecture de la configuration et sortie\n" +#~ "\n" -#: src/win32/libwin32/service.cpp:500 -#, c-format -msgid "" -"\n" -"\n" -"%s error: %ld at %s:%d" -msgstr "" +#, fuzzy +#~ msgid "Bacula daemon status monitor" +#~ msgstr "Bacula Storage : En cours" -#: src/win32/libwin32/service.cpp:576 -#, c-format -msgid "Locked by: %s, duration: %ld seconds\n" -msgstr "" +#, fuzzy +#~ msgid "Bacula tray monitor" +#~ msgstr "Bacula Storage : En cours" -#: src/win32/libwin32/service.cpp:580 -#, c-format -msgid "No longer locked\n" -msgstr "" +#, fuzzy +#~ msgid "Unknown status." +#~ msgstr "Erreur inconnue." -#: src/win32/libwin32/service.cpp:584 #, fuzzy -msgid "Could not lock database" -msgstr "Impossible d'ouvrir la base de données \"%s\".\n" +#~ msgid "About" +#~ msgstr "Abort" -#: src/win32/libwin32/main.cpp:245 -msgid "Bad Command Line Option" -msgstr "" +#, fuzzy +#~ msgid "Disconnecting from Director %s:%d\n" +#~ msgstr "Connexion au Director %s:%d\n" -#: src/wx-console/wxbconfigfileeditor.cpp:65 #, fuzzy -msgid "Config file editor" -msgstr "La création de la signature a échouée" +#~ msgid "Disconnecting from Client %s:%d\n" +#~ msgstr "Connexion au client %s (%s:%d)\n" -#: src/wx-console/wxbconfigfileeditor.cpp:75 #, fuzzy -msgid "# Bacula bwx-console Configuration File\n" -msgstr "Merci de corriger le fichier de configuration : %s\n" +#~ msgid "Disconnecting from Storage %s:%d\n" +#~ msgstr "Connexion au Director %s:%d\n" -#: src/wx-console/wxbconfigfileeditor.cpp:111 -msgid "Save and close" -msgstr "" +#~ msgid "Version" +#~ msgstr "Version" -#: src/wx-console/wxbconfigfileeditor.cpp:112 #, fuzzy -msgid "Close without saving" -msgstr "Terminé avec des avertissements" +#~ msgid "" +#~ "Current job: %s\n" +#~ "Last job: %s" +#~ msgstr "Le statut actuel du volume (Volume status) est : %s\n" -#: src/wx-console/wxbconfigfileeditor.cpp:139 -#, fuzzy, c-format -msgid "Unable to write to %s\n" -msgstr "Impossible d'écrire le marqueur EOF. ERR=%s\n" +#, fuzzy +#~ msgid " (%d errors)" +#~ msgstr "est en erreur" -#: src/wx-console/wxbconfigfileeditor.cpp:140 #, fuzzy -msgid "Error while saving" -msgstr "Entrez le nombre de départ : " +#~ msgid " (%d error)" +#~ msgstr "BUS error" -#: src/wx-console/wxbrestorepanel.cpp:234 -#: src/wx-console/wxbrestorepanel.cpp:1947 -#: src/wx-console/wxbrestorepanel.cpp:1976 #, fuzzy -msgid "Enter restore mode" -msgstr "Saisissez le nom d'un répertoire : " +#~ msgid "No current job." +#~ msgstr "Pas de RecyclePool courant\n" -#: src/wx-console/wxbrestorepanel.cpp:237 #, fuzzy -msgid "Cancel restore" -msgstr "Annulé" +#~ msgid "Job status: Running" +#~ msgstr "Pas de job en cours.\n" -#: src/wx-console/wxbrestorepanel.cpp:263 -#: src/wx-console/wxbrestorepanel.cpp:317 -msgid "Add" -msgstr "" +#, fuzzy +#~ msgid "Job status: Terminated" +#~ msgstr "est terminé" -#: src/wx-console/wxbrestorepanel.cpp:265 -#: src/wx-console/wxbrestorepanel.cpp:319 #, fuzzy -msgid "Remove" -msgstr "Restaurer" +#~ msgid "Job status: Fatal error" +#~ msgstr "%s : %s Erreur fatale : " -#: src/wx-console/wxbrestorepanel.cpp:267 -#: src/wx-console/wxbrestorepanel.cpp:321 #, fuzzy -msgid "Refresh" -msgstr "Restaurer" +#~ msgid "Job status: Verify differences" +#~ msgstr "Vérification des différences" -#: src/wx-console/wxbrestorepanel.cpp:286 -msgid "M" -msgstr "" +#, fuzzy +#~ msgid "Job status: Canceled" +#~ msgstr "Le job %s est annulé.\n" -#: src/wx-console/wxbrestorepanel.cpp:290 #, fuzzy -msgid "Filename" -msgstr "FileSet" +#~ msgid "Job status: Waiting on File daemon" +#~ msgstr "%s Job %s est en attente de la connexion du Client.\n" -#: src/wx-console/wxbrestorepanel.cpp:294 #, fuzzy -msgid "Size" -msgstr "Depuis" +#~ msgid "Job status: Waiting on the Storage daemon" +#~ msgstr "est en attente du Storage %s" -#: src/wx-console/wxbrestorepanel.cpp:298 -msgid "Date" -msgstr "" +#, fuzzy +#~ msgid "Job status: Waiting for new media" +#~ msgstr " Le Device est BLOQUÉ en attente d'un média.\n" -#: src/wx-console/wxbrestorepanel.cpp:302 -msgid "Perm." -msgstr "" +#, fuzzy +#~ msgid "Job status: Waiting for Mount" +#~ msgstr "En attente d'un montage" -#: src/wx-console/wxbrestorepanel.cpp:306 -msgid "User" -msgstr "" +#, fuzzy +#~ msgid "Job status: Waiting for storage resource" +#~ msgstr "En attente du Storage" -#: src/wx-console/wxbrestorepanel.cpp:310 -msgid "Group" -msgstr "" +#, fuzzy +#~ msgid "Job status: Waiting for job resource" +#~ msgstr "En attente du Storage" -#: src/wx-console/wxbrestorepanel.cpp:335 -#: src/wx-console/wxbrestorepanel.cpp:348 -#: src/wx-console/wxbrestorepanel.cpp:503 -#: src/wx-console/wxbrestorepanel.cpp:513 -#: src/wx-console/wxbrestorepanel.cpp:516 -#: src/wx-console/wxbrestorepanel.cpp:1811 -#: src/wx-console/wxbrestorepanel.cpp:1897 #, fuzzy -msgid "Job Name" -msgstr "Job échoué.\n" +#~ msgid "Job status: Waiting for Client resource" +#~ msgstr "%s Job %s est en attente de la connexion du Client.\n" -#: src/wx-console/wxbrestorepanel.cpp:337 -#: src/wx-console/wxbrestorepanel.cpp:353 -#: src/wx-console/wxbrestorepanel.cpp:455 -#: src/wx-console/wxbrestorepanel.cpp:456 -#: src/wx-console/wxbrestorepanel.cpp:466 -#: src/wx-console/wxbrestorepanel.cpp:467 -#: src/wx-console/wxbrestorepanel.cpp:1153 -#: src/wx-console/wxbrestorepanel.cpp:1156 -#: src/wx-console/wxbrestorepanel.cpp:1239 -#: src/wx-console/wxbrestorepanel.cpp:1849 -#: src/wx-console/wxbrestorepanel.cpp:1851 -#: src/wx-console/wxbrestorepanel.cpp:1912 -#, fuzzy -msgid "Fileset" -msgstr "FileSet" +#, fuzzy +#~ msgid "Job status: Waiting for start time" +#~ msgstr "attend son heure de démarrage" -#: src/wx-console/wxbrestorepanel.cpp:340 -#: src/wx-console/wxbrestorepanel.cpp:1233 -#: src/wx-console/wxbrestorepanel.cpp:1249 -#: src/wx-console/wxbrestorepanel.cpp:1251 -#: src/wx-console/wxbrestorepanel.cpp:1259 -#: src/wx-console/wxbrestorepanel.cpp:1261 -#: src/wx-console/wxbrestorepanel.cpp:1280 -#: src/wx-console/wxbrestorepanel.cpp:1287 -#: src/wx-console/wxbrestorepanel.cpp:1839 -#: src/wx-console/wxbrestorepanel.cpp:1850 -#: src/wx-console/wxbrestorepanel.cpp:1971 -#, fuzzy -msgid "Before" -msgstr "Restaurer" +#, fuzzy +#~ msgid "Job status: Waiting for higher priority jobs to finish" +#~ msgstr "attend qu'un job plus prioritaire se termine" -#: src/wx-console/wxbrestorepanel.cpp:342 #, fuzzy -msgid "Please configure parameters concerning files to restore :" -msgstr "Aucun fichier sélectionné pour la restauration.\n" +#~ msgid "Unknown job status %c." +#~ msgstr "est dans un état inconnu %c" -#: src/wx-console/wxbrestorepanel.cpp:351 -#: src/wx-console/wxbrestorepanel.cpp:1905 -msgid "always" -msgstr "" +#, fuzzy +#~ msgid "Connecting to Client %s:%d\n" +#~ msgstr "Connexion au client %s (%s:%d)\n" -#: src/wx-console/wxbrestorepanel.cpp:351 #, fuzzy -msgid "if newer" -msgstr "Type" +#~ msgid "Connecting to Storage %s:%d\n" +#~ msgstr "Connexion au Director %s:%d\n" -#: src/wx-console/wxbrestorepanel.cpp:351 #, fuzzy -msgid "if older" -msgstr "FileSet" +#~ msgid "Cannot connect to daemon.\n" +#~ msgstr "Impossible de se connecter au démon Storage\n" -#: src/wx-console/wxbrestorepanel.cpp:351 -#: src/wx-console/wxbrestorepanel.cpp:1908 #, fuzzy -msgid "never" -msgstr "Type" +#~ msgid "Opened connection with Director daemon.\n" +#~ msgstr "Impossible de se connecter au Storage daemon.\n" -#: src/wx-console/wxbrestorepanel.cpp:359 #, fuzzy -msgid "Please configure parameters concerning files restoration :" -msgstr "Aucun fichier sélectionné pour la restauration.\n" +#~ msgid "Opened connection with File daemon.\n" +#~ msgstr "Impossible de se connecter au client.\n" -#: src/wx-console/wxbrestorepanel.cpp:427 -msgid "Getting parameters list." -msgstr "" +#, fuzzy +#~ msgid "Opened connection with Storage daemon.\n" +#~ msgstr "Impossible de se connecter au Storage daemon.\n" -#: src/wx-console/wxbrestorepanel.cpp:435 #, fuzzy -msgid "Error : no clients returned by the director." -msgstr "Impossible de se connecter au Director\n" +#~ msgid "\n" +#~ msgstr "%s : ERREUR : " + +#~ msgid "End of %s %u on device %s, Volume \"%s\"\n" +#~ msgstr "Fin de %s %u sur le device %s, Volume \"%s\"\n" -#: src/wx-console/wxbrestorepanel.cpp:459 #, fuzzy -msgid "Error : no filesets returned by the director." -msgstr "Impossible de se connecter au Director\n" +#~ msgid "Append data error.\n" +#~ msgstr "Erreur non fatale" -#: src/wx-console/wxbrestorepanel.cpp:483 +# Impossible d'ouvrir le fichier de spool des attributs : ERR=%s #, fuzzy -msgid "Error : no storage returned by the director." -msgstr "Impossible de se connecter au Director\n" +#~ msgid "Truncate on attributes file failed: ERR=%s\n" +#~ msgstr "Impossible d'ouvrir le fichier de spool des attributs %s : ERR=%s\n" -#: src/wx-console/wxbrestorepanel.cpp:506 -#: src/wx-console/wxbrestorepanel.cpp:530 #, fuzzy -msgid "Error : no jobs returned by the director." -msgstr "Impossible de se connecter au Director\n" +#~ msgid "Unable to open device part=%d %s: ERR=%s\n" +#~ msgstr "3910 Impossible d'ouvrir le device %s : ERR=%s\n" -#: src/wx-console/wxbrestorepanel.cpp:516 #, fuzzy -msgid "RestoreFiles" -msgstr "restauration de fichier" +#~ msgid "Failed to allocate space for query filter.\n" +#~ msgstr "Impossible de se connecter au Director\n" -#: src/wx-console/wxbrestorepanel.cpp:551 #, fuzzy -msgid "Please configure your restore parameters." -msgstr "Aucun fichier sélectionné pour la restauration.\n" +#~ msgid "Failed to allocate space for query filters.\n" +#~ msgstr "Impossible de se connecter au Director\n" -#: src/wx-console/wxbrestorepanel.cpp:556 #, fuzzy -msgid "Please select a client." -msgstr "Impossible de se connecter au Client.\n" +#~ msgid "" +#~ "Unable to connect to Ingres server.\n" +#~ "Database=%s User=%s\n" +#~ "It is probably not running or your password is incorrect.\n" +#~ msgstr "" +#~ "Impossible de se connecter au serveur MySQL.\n" +#~ "Base=%s Utilisateur=%s\n" +#~ "Le serveur n'est pas démarré ou bien votre password est invalide.\n" -#: src/wx-console/wxbrestorepanel.cpp:560 #, fuzzy -msgid "Please select a restore date." -msgstr "Aucun fichier sélectionné pour la restauration.\n" +#~ msgid "A user name for Ingres must be supplied.\n" +#~ msgstr "Un nom d'utilisateur MySQL doit être fourni.\n" -#: src/wx-console/wxbrestorepanel.cpp:565 #, fuzzy -msgid "Building restore tree..." -msgstr "" -"\n" -"Analyse des répertoires pour le JobId %s..." +#~ msgid "" +#~ "Unable to connect to DBI interface. Type=%s Database=%s User=%s\n" +#~ "Possible causes: SQL server not running; password incorrect; " +#~ "max_connections exceeded.\n" +#~ msgstr "" +#~ "Impossible de se connecter au serveur PostgreSQL.\n" +#~ "Base=%s Utilisateur=%s\n" +#~ "Le serveur n'est pas démarré ou bien votre password est invalide.\n" -#: src/wx-console/wxbrestorepanel.cpp:613 #, fuzzy -msgid "Error while starting restore: " -msgstr "Entrez le nombre de départ : " +#~ msgid "error inserting batch mode: %s" +#~ msgstr "erreur en terminant le mode batch: %s\n" -#: src/wx-console/wxbrestorepanel.cpp:705 -msgid "" -"Right click on a file or on a directory, or double-click on its mark to add " -"it to the restore list." -msgstr "" +#, fuzzy +#~ msgid "Driver type not specified in Catalog resource.\n" +#~ msgstr "Impossible de trouver un Catalogue\n" -#: src/wx-console/wxbrestorepanel.cpp:720 src/wx-console/wxbmainframe.cpp:685 -msgid "Unexpected question has been received.\n" -msgstr "" +#, fuzzy +#~ msgid "Invalid driver type, must be \"dbi:\"\n" +#~ msgstr "Saisie invalide. Veuillez répondre oui ou non.\n" -#: src/wx-console/wxbrestorepanel.cpp:742 -#: src/wx-console/wxbrestorepanel.cpp:764 -msgid "bwx-console: unexpected restore question." -msgstr "" +#, fuzzy +#~ msgid "A user name for DBI must be supplied.\n" +#~ msgstr "Un nom d'utilisateur MySQL doit être fourni.\n" -#: src/wx-console/wxbrestorepanel.cpp:775 #, fuzzy -msgid " files selected to be restored." -msgstr "Aucun fichier sélectionné pour la restauration.\n" +#~ msgid "Bad response to Hello command: ERR=" +#~ msgstr "Mauvaise réponse à la commande Hello : ERR=%s\n" + +#~ msgid " Files=%s Bytes=%s Bytes/sec=%s Errors=%d\n" +#~ msgstr " Fichiers=%s Octets=%s Octets/sec=%s Erreurs=%d\n" -#: src/wx-console/wxbrestorepanel.cpp:780 #, fuzzy -msgid " file selected to be restored." -msgstr "Aucun fichier sélectionné pour la restauration.\n" +#~ msgid "" +#~ "\n" +#~ "\n" +#~ "Bacula ERROR: " +#~ msgstr "Bacula " -#: src/wx-console/wxbrestorepanel.cpp:787 -#, fuzzy, c-format -msgid "Please configure your restore (%ld files selected to be restored)..." -msgstr "Aucun fichier sélectionné pour la restauration.\n" +#, fuzzy +#~ msgid "Failure contacting the Service Handler" +#~ msgstr "Impossible de décrypter la clef de session" -#: src/wx-console/wxbrestorepanel.cpp:797 #, fuzzy -msgid "Restore failed : no file selected.\n" -msgstr "Impossible de créer le fichier bootstrap %s : ERR=%s\n" +#~ msgid "KERNEL32.DLL not found: Bacula service not started" +#~ msgstr "Ressource %s introuvable\n" -#: src/wx-console/wxbrestorepanel.cpp:798 #, fuzzy -msgid "Restore failed : no file selected." -msgstr "Impossible de se connecter au Client.\n" +#~ msgid "Registry service not found: Bacula service not started" +#~ msgstr "Ressource %s introuvable\n" -#: src/wx-console/wxbrestorepanel.cpp:808 #, fuzzy -msgid "Restoring, please wait..." -msgstr "string" +#~ msgid "Registry service entry point not found" +#~ msgstr "Ressource %s introuvable\n" -#: src/wx-console/wxbrestorepanel.cpp:821 #, fuzzy -msgid "Job queued. JobId=" -msgstr "Job mis en queue. JobId=%s\n" +#~ msgid "Unable to install the service" +#~ msgstr "Impossible d'écrire le marqueur EOF. ERR=%s\n" -#: src/wx-console/wxbrestorepanel.cpp:823 #, fuzzy -msgid "Restore queued, jobid=" -msgstr "Job démarré. JobId=%s\n" +#~ msgid "" +#~ "The Service Control Manager could not be contacted - the service was not " +#~ "installed" +#~ msgstr "Ressource %s introuvable\n" -#: src/wx-console/wxbrestorepanel.cpp:827 #, fuzzy -msgid "Job failed." -msgstr "Job échoué.\n" +#~ msgid "The Bacula service: " +#~ msgstr "Bacula Storage : Dernier Job annulé" -#: src/wx-console/wxbrestorepanel.cpp:828 #, fuzzy -msgid "Restore failed, please look at messages.\n" -msgstr "Impossible de créer le fichier bootstrap %s : ERR=%s\n" +#~ msgid "Cannot write System Registry for " +#~ msgstr "Impossible de détruire la mémoire partagée : %s\n" -#: src/wx-console/wxbrestorepanel.cpp:829 -msgid "Restore failed, please look at messages in console." -msgstr "" +#, fuzzy +#~ msgid "" +#~ "The System Registry could not be updated - the Bacula service was not " +#~ "installed" +#~ msgstr "Ressource %s introuvable\n" -#: src/wx-console/wxbrestorepanel.cpp:835 -#: src/wx-console/wxbrestorepanel.cpp:836 #, fuzzy -msgid "Failed to retrieve jobid.\n" -msgstr "Impossible de se connecter au Client.\n" +#~ msgid "An existing Bacula service: " +#~ msgstr "Bacula Storage : Dernier Job annulé" -#: src/wx-console/wxbrestorepanel.cpp:862 -msgid "" -"Restore is scheduled to run. bwx-console will not wait for its completion.\n" -msgstr "" +#, fuzzy +#~ msgid "" +#~ "The service Manager could not be contacted - the Bacula service was not " +#~ "removed" +#~ msgstr "Ressource %s introuvable\n" -#: src/wx-console/wxbrestorepanel.cpp:863 -msgid "" -"Restore is scheduled to run. bwx-console will not wait for its completion." -msgstr "" +#, fuzzy +#~ msgid "" +#~ "Could not find registry entry.\n" +#~ "Service probably not registerd - the Bacula service was not removed" +#~ msgstr "Ressource %s introuvable\n" -#: src/wx-console/wxbrestorepanel.cpp:889 #, fuzzy -msgid "Restore job created, but not yet running." -msgstr "Restauration annulée" +#~ msgid "Could not delete Registry key for " +#~ msgstr "Impossible de détruire la mémoire partagée : %s\n" -#: src/wx-console/wxbrestorepanel.cpp:894 -#, fuzzy, c-format -msgid "Restore job running, please wait (%ld of %ld files restored)..." -msgstr "%s Job %s est en attente de la connexion du Client.\n" +#, fuzzy +#~ msgid "The Bacula service has been removed" +#~ msgstr "Ressource %s introuvable\n" -#: src/wx-console/wxbrestorepanel.cpp:898 #, fuzzy -msgid "Restore job terminated successfully." -msgstr "Restauration non effectuée.\n" +#~ msgid "Could not lock database" +#~ msgstr "Impossible d'ouvrir la base de données \"%s\".\n" -#: src/wx-console/wxbrestorepanel.cpp:899 #, fuzzy -msgid "Restore job terminated successfully.\n" -msgstr "Restauration non effectuée.\n" +#~ msgid "Config file editor" +#~ msgstr "La création de la signature a échouée" -#: src/wx-console/wxbrestorepanel.cpp:904 #, fuzzy -msgid "Restore job terminated in error, see messages in console." -msgstr " Le Device est BLOQUÉ en attente d'un média.\n" +#~ msgid "# Bacula bwx-console Configuration File\n" +#~ msgstr "Merci de corriger le fichier de configuration : %s\n" -#: src/wx-console/wxbrestorepanel.cpp:905 #, fuzzy -msgid "Restore job terminated in error, see messages.\n" -msgstr " Le Device est BLOQUÉ en attente d'un média.\n" +#~ msgid "Close without saving" +#~ msgstr "Terminé avec des avertissements" -#: src/wx-console/wxbrestorepanel.cpp:910 #, fuzzy -msgid "Restore job reported a non-fatal error." -msgstr "Restauration annulée" +#~ msgid "Unable to write to %s\n" +#~ msgstr "Impossible d'écrire le marqueur EOF. ERR=%s\n" -#: src/wx-console/wxbrestorepanel.cpp:914 #, fuzzy -msgid "Restore job reported a fatal error." -msgstr "Restauration annulée" +#~ msgid "Error while saving" +#~ msgstr "Entrez le nombre de départ : " -#: src/wx-console/wxbrestorepanel.cpp:919 #, fuzzy -msgid "Restore job cancelled by user." -msgstr "Restauration annulée" +#~ msgid "Enter restore mode" +#~ msgstr "Saisissez le nom d'un répertoire : " -#: src/wx-console/wxbrestorepanel.cpp:920 #, fuzzy -msgid "Restore job cancelled by user.\n" -msgstr "Restauration annulée" +#~ msgid "Cancel restore" +#~ msgstr "Annulé" -#: src/wx-console/wxbrestorepanel.cpp:925 #, fuzzy -msgid "Restore job is waiting on File daemon." -msgstr "%s Job %s est en attente de la connexion du Client.\n" +#~ msgid "Remove" +#~ msgstr "Restaurer" -#: src/wx-console/wxbrestorepanel.cpp:929 #, fuzzy -msgid "Restore job is waiting for new media." -msgstr " Le Device est BLOQUÉ en attente d'un média.\n" +#~ msgid "Refresh" +#~ msgstr "Restaurer" -#: src/wx-console/wxbrestorepanel.cpp:933 #, fuzzy -msgid "Restore job is waiting for storage resource." -msgstr "En attente du Storage" +#~ msgid "Filename" +#~ msgstr "FileSet" -#: src/wx-console/wxbrestorepanel.cpp:937 #, fuzzy -msgid "Restore job is waiting for job resource." -msgstr "En attente du Storage" +#~ msgid "Size" +#~ msgstr "Depuis" -#: src/wx-console/wxbrestorepanel.cpp:941 #, fuzzy -msgid "Restore job is waiting for Client resource." -msgstr "%s Job %s est en attente de la connexion du Client.\n" +#~ msgid "Job Name" +#~ msgstr "Job échoué.\n" -#: src/wx-console/wxbrestorepanel.cpp:945 #, fuzzy -msgid "Restore job is waiting for maximum jobs." -msgstr "En attente du Storage" +#~ msgid "Fileset" +#~ msgstr "FileSet" -#: src/wx-console/wxbrestorepanel.cpp:949 #, fuzzy -msgid "Restore job is waiting for start time." -msgstr "attend son heure de démarrage" +#~ msgid "Before" +#~ msgstr "Restaurer" -#: src/wx-console/wxbrestorepanel.cpp:953 #, fuzzy -msgid "Restore job is waiting for higher priority jobs to finish." -msgstr "attend qu'un job plus prioritaire se termine" +#~ msgid "Please configure parameters concerning files to restore :" +#~ msgstr "Aucun fichier sélectionné pour la restauration.\n" -#: src/wx-console/wxbrestorepanel.cpp:1002 -msgid "" -"The restore job has not been started within one minute, bwx-console will not " -"wait for its completion anymore.\n" -msgstr "" +#, fuzzy +#~ msgid "if newer" +#~ msgstr "Type" -#: src/wx-console/wxbrestorepanel.cpp:1003 -msgid "" -"The restore job has not been started within one minute, bwx-console will not " -"wait for its completion anymore." -msgstr "" +#, fuzzy +#~ msgid "if older" +#~ msgstr "FileSet" -#: src/wx-console/wxbrestorepanel.cpp:1013 #, fuzzy -msgid "Restore done successfully.\n" -msgstr "Restauration non effectuée.\n" +#~ msgid "never" +#~ msgstr "Type" -#: src/wx-console/wxbrestorepanel.cpp:1014 #, fuzzy -msgid "Restore done successfully." -msgstr "Restauration non effectuée.\n" +#~ msgid "Please configure parameters concerning files restoration :" +#~ msgstr "Aucun fichier sélectionné pour la restauration.\n" -#: src/wx-console/wxbrestorepanel.cpp:1086 #, fuzzy -msgid "Applying restore configuration changes..." -msgstr "Merci de corriger le fichier de configuration : %s\n" +#~ msgid "Error : no clients returned by the director." +#~ msgstr "Impossible de se connecter au Director\n" -#: src/wx-console/wxbrestorepanel.cpp:1138 #, fuzzy -msgid "Failed to find the selected client." -msgstr "Impossible de se connecter au Client.\n" +#~ msgid "Error : no filesets returned by the director." +#~ msgstr "Impossible de se connecter au Director\n" -#: src/wx-console/wxbrestorepanel.cpp:1158 #, fuzzy -msgid "Failed to find the selected fileset." -msgstr "Impossible de se connecter au Client.\n" +#~ msgid "Error : no storage returned by the director." +#~ msgstr "Impossible de se connecter au Director\n" -#: src/wx-console/wxbrestorepanel.cpp:1178 #, fuzzy -msgid "Failed to find the selected storage." -msgstr "Impossible de se connecter au Storage daemon.\n" +#~ msgid "Error : no jobs returned by the director." +#~ msgstr "Impossible de se connecter au Director\n" -#: src/wx-console/wxbrestorepanel.cpp:1199 -#: src/wx-console/wxbrestorepanel.cpp:1886 #, fuzzy -msgid "Run Restore job" -msgstr "Sélectionnez le Job de restauration" +#~ msgid "RestoreFiles" +#~ msgstr "restauration de fichier" -#: src/wx-console/wxbrestorepanel.cpp:1216 -msgid "Restore configuration changes were applied." -msgstr "" +#, fuzzy +#~ msgid "Please configure your restore parameters." +#~ msgstr "Aucun fichier sélectionné pour la restauration.\n" -#: src/wx-console/wxbrestorepanel.cpp:1225 #, fuzzy -msgid "Restore cancelled.\n" -msgstr "Restauration annulée" +#~ msgid "Please select a client." +#~ msgstr "Impossible de se connecter au Client.\n" -#: src/wx-console/wxbrestorepanel.cpp:1226 #, fuzzy -msgid "Restore cancelled." -msgstr "Restauration annulée" +#~ msgid "Please select a restore date." +#~ msgstr "Aucun fichier sélectionné pour la restauration.\n" -#: src/wx-console/wxbrestorepanel.cpp:1248 #, fuzzy -msgid "No results to list." -msgstr "Liste vide.\n" +#~ msgid "Building restore tree..." +#~ msgstr "" +#~ "\n" +#~ "Analyse des répertoires pour le JobId %s..." -#: src/wx-console/wxbrestorepanel.cpp:1250 #, fuzzy -msgid "No backup found for this client." -msgstr "Pas de job trouvé pour : %s.\n" +#~ msgid "Error while starting restore: " +#~ msgstr "Entrez le nombre de départ : " -#: src/wx-console/wxbrestorepanel.cpp:1257 #, fuzzy -msgid "ERROR" -msgstr "%s : ERREUR : " +#~ msgid " files selected to be restored." +#~ msgstr "Aucun fichier sélectionné pour la restauration.\n" -#: src/wx-console/wxbrestorepanel.cpp:1258 #, fuzzy -msgid "Query failed" -msgstr "Erreur sur la requête : %s\n" +#~ msgid " file selected to be restored." +#~ msgstr "Aucun fichier sélectionné pour la restauration.\n" -#: src/wx-console/wxbrestorepanel.cpp:1260 -msgid "Cannot get previous backups list, see console." -msgstr "" +#, fuzzy +#~ msgid "Please configure your restore (%ld files selected to be restored)..." +#~ msgstr "Aucun fichier sélectionné pour la restauration.\n" -#: src/wx-console/wxbrestorepanel.cpp:1896 #, fuzzy -msgid "JobName:" -msgstr "Job échoué.\n" +#~ msgid "Restore failed : no file selected.\n" +#~ msgstr "Impossible de créer le fichier bootstrap %s : ERR=%s\n" -#: src/wx-console/wxbrestorepanel.cpp:1898 #, fuzzy -msgid "Bootstrap:" -msgstr "Bootstrap" +#~ msgid "Restore failed : no file selected." +#~ msgstr "Impossible de se connecter au Client.\n" -#: src/wx-console/wxbrestorepanel.cpp:1900 #, fuzzy -msgid "Where:" -msgstr "Destination" +#~ msgid "Restoring, please wait..." +#~ msgstr "string" -#: src/wx-console/wxbrestorepanel.cpp:1903 #, fuzzy -msgid "Replace:" -msgstr "Écrasement :\n" +#~ msgid "Job queued. JobId=" +#~ msgstr "Job mis en queue. JobId=%s\n" -#: src/wx-console/wxbrestorepanel.cpp:1906 #, fuzzy -msgid "ifnewer" -msgstr "Type" +#~ msgid "Restore queued, jobid=" +#~ msgstr "Job démarré. JobId=%s\n" -#: src/wx-console/wxbrestorepanel.cpp:1907 #, fuzzy -msgid "ifolder" -msgstr "FileSet" +#~ msgid "Job failed." +#~ msgstr "Job échoué.\n" -#: src/wx-console/wxbrestorepanel.cpp:1911 #, fuzzy -msgid "FileSet:" -msgstr "FileSet" +#~ msgid "Restore failed, please look at messages.\n" +#~ msgstr "Impossible de créer le fichier bootstrap %s : ERR=%s\n" -#: src/wx-console/wxbrestorepanel.cpp:1913 #, fuzzy -msgid "Client:" -msgstr "Client" +#~ msgid "Failed to retrieve jobid.\n" +#~ msgstr "Impossible de se connecter au Client.\n" -#: src/wx-console/wxbrestorepanel.cpp:1915 #, fuzzy -msgid "Storage:" -msgstr "Stockage" +#~ msgid "Restore job created, but not yet running." +#~ msgstr "Restauration annulée" -#: src/wx-console/wxbrestorepanel.cpp:1917 #, fuzzy -msgid "When:" -msgstr "Quand" +#~ msgid "Restore job running, please wait (%ld of %ld files restored)..." +#~ msgstr "%s Job %s est en attente de la connexion du Client.\n" -#: src/wx-console/wxbrestorepanel.cpp:1920 #, fuzzy -msgid "Priority:" -msgstr "Priorité" +#~ msgid "Restore job terminated successfully." +#~ msgstr "Restauration non effectuée.\n" -#: src/wx-console/wxbrestorepanel.cpp:2028 #, fuzzy -msgid "Restoring..." -msgstr "string" +#~ msgid "Restore job terminated successfully.\n" +#~ msgstr "Restauration non effectuée.\n" -#: src/wx-console/console_thread.cpp:125 -#, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Director \"%s\" in config file.\n" -"At least one CA certificate store is required.\n" -msgstr "" +#, fuzzy +#~ msgid "Restore job terminated in error, see messages in console." +#~ msgstr " Le Device est BLOQUÉ en attente d'un média.\n" -#: src/wx-console/console_thread.cpp:132 #, fuzzy -msgid "" -"No Director resource defined in config file.\n" -"Without that I don't how to speak to the Director :-(\n" -msgstr "" -"Pas de director défini pour %s\n" -"Sans cette définition, il n'est pas possible de se connecter à celui-ci.\n" +#~ msgid "Restore job terminated in error, see messages.\n" +#~ msgstr " Le Device est BLOQUÉ en attente d'un média.\n" -#: src/wx-console/console_thread.cpp:151 -#, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Console \"%s\" in config file.\n" -msgstr "" +#, fuzzy +#~ msgid "Restore job reported a non-fatal error." +#~ msgstr "Restauration annulée" -#: src/wx-console/console_thread.cpp:173 #, fuzzy -msgid "Error while initializing windows sockets...\n" -msgstr "Erreur pendant l'initialisation du contexte SSL" +#~ msgid "Restore job reported a fatal error." +#~ msgstr "Restauration annulée" -#: src/wx-console/console_thread.cpp:189 #, fuzzy -msgid "Error while cleaning up windows sockets...\n" -msgstr "Erreur pendant l'initialisation du contexte SSL" +#~ msgid "Restore job cancelled by user." +#~ msgstr "Restauration annulée" -#: src/wx-console/console_thread.cpp:228 #, fuzzy -msgid "Error while initializing library." -msgstr "Erreur pendant l'initialisation du contexte SSL" +#~ msgid "Restore job cancelled by user.\n" +#~ msgstr "Restauration annulée" -#: src/wx-console/console_thread.cpp:256 #, fuzzy -msgid "Cryptographic library initialization failed.\n" -msgstr "Initialisation de la connexion TLS échouée.\n" +#~ msgid "Restore job is waiting on File daemon." +#~ msgstr "%s Job %s est en attente de la connexion du Client.\n" -#: src/wx-console/console_thread.cpp:260 #, fuzzy -msgid "Please correct configuration file.\n" -msgstr "Merci de corriger le fichier de configuration : %s\n" +#~ msgid "Restore job is waiting for new media." +#~ msgstr " Le Device est BLOQUÉ en attente d'un média.\n" -#: src/wx-console/console_thread.cpp:302 #, fuzzy -msgid "Error : Library not initialized\n" -msgstr "Impossible d'initialiser %s\n" +#~ msgid "Restore job is waiting for storage resource." +#~ msgstr "En attente du Storage" -#: src/wx-console/console_thread.cpp:313 #, fuzzy -msgid "Error : No configuration file loaded\n" -msgstr "La création de la signature a échouée" +#~ msgid "Restore job is waiting for job resource." +#~ msgstr "En attente du Storage" -#: src/wx-console/console_thread.cpp:323 -msgid "Connecting...\n" -msgstr "Connexion...\n" +#, fuzzy +#~ msgid "Restore job is waiting for Client resource." +#~ msgstr "%s Job %s est en attente de la connexion du Client.\n" -#: src/wx-console/console_thread.cpp:339 -msgid "Error : No director defined in config file.\n" -msgstr "" +#, fuzzy +#~ msgid "Restore job is waiting for maximum jobs." +#~ msgstr "En attente du Storage" -#: src/wx-console/console_thread.cpp:351 -msgid "Multiple directors found in your config file.\n" -msgstr "" +#, fuzzy +#~ msgid "Restore job is waiting for start time." +#~ msgstr "attend son heure de démarrage" -#: src/wx-console/console_thread.cpp:360 -#, fuzzy, c-format -msgid "Please choose a director (1-%d): " -msgstr "Aucun fichier sélectionné pour la restauration.\n" +#, fuzzy +#~ msgid "Restore job is waiting for higher priority jobs to finish." +#~ msgstr "attend qu'un job plus prioritaire se termine" -#: src/wx-console/console_thread.cpp:389 -#, c-format -msgid "Passphrase for Console \"%s\" TLS private key: " -msgstr "" +#, fuzzy +#~ msgid "Restore done successfully.\n" +#~ msgstr "Restauration non effectuée.\n" -#: src/wx-console/console_thread.cpp:410 -#, c-format -msgid "Passphrase for Director \"%s\" TLS private key: " -msgstr "" +#, fuzzy +#~ msgid "Restore done successfully." +#~ msgstr "Restauration non effectuée.\n" -#: src/wx-console/console_thread.cpp:432 -msgid "Failed to connect to the director\n" -msgstr "Impossible de se connecter au Director\n" +#, fuzzy +#~ msgid "Applying restore configuration changes..." +#~ msgstr "Merci de corriger le fichier de configuration : %s\n" -#: src/wx-console/console_thread.cpp:442 #, fuzzy -msgid "Connected\n" -msgstr "Connexion...\n" +#~ msgid "Failed to find the selected client." +#~ msgstr "Impossible de se connecter au Client.\n" -#: src/wx-console/console_thread.cpp:499 -msgid "<< Unexpected signal received : " -msgstr "" +#, fuzzy +#~ msgid "Failed to find the selected fileset." +#~ msgstr "Impossible de se connecter au Client.\n" -#: src/wx-console/console_thread.cpp:519 #, fuzzy -msgid "Connection terminated\n" -msgstr "Sélection terminée.\n" +#~ msgid "Failed to find the selected storage." +#~ msgstr "Impossible de se connecter au Storage daemon.\n" -#: src/wx-console/wxbconfigpanel.cpp:213 -msgid "Apply" -msgstr "" +#, fuzzy +#~ msgid "Run Restore job" +#~ msgstr "Sélectionnez le Job de restauration" -#: src/wx-console/wxbhistorytextctrl.cpp:82 -#: src/wx-console/wxbhistorytextctrl.cpp:153 -#: src/wx-console/wxbmainframe.cpp:291 -msgid "Type your command below:" -msgstr "Saisissez votre commande ci-dessous : " +#, fuzzy +#~ msgid "Restore cancelled." +#~ msgstr "Restauration annulée" -#: src/wx-console/wxbhistorytextctrl.cpp:117 #, fuzzy -msgid "Unknown command." -msgstr "Erreur inconnue." +#~ msgid "No results to list." +#~ msgstr "Liste vide.\n" -#: src/wx-console/wxbhistorytextctrl.cpp:126 #, fuzzy -msgid "Possible completions: " -msgstr "Les valeurs possibles sont :\n" +#~ msgid "No backup found for this client." +#~ msgstr "Pas de job trouvé pour : %s.\n" -#: src/wx-console/main.cpp:119 #, fuzzy -msgid "Bacula bwx-console" -msgstr "Message de Bacula" +#~ msgid "ERROR" +#~ msgstr "%s : ERREUR : " -#: src/wx-console/main.cpp:124 src/wx-console/wxbmainframe.cpp:267 -#, c-format -msgid "Welcome to bacula bwx-console %s (%s)!\n" -msgstr "" +#, fuzzy +#~ msgid "Query failed" +#~ msgstr "Erreur sur la requête : %s\n" -#: src/wx-console/wxbmainframe.cpp:246 -msgid "&About...\tF1" -msgstr "" +#, fuzzy +#~ msgid "JobName:" +#~ msgstr "Job échoué.\n" -#: src/wx-console/wxbmainframe.cpp:246 -msgid "Show about dialog" -msgstr "" +#, fuzzy +#~ msgid "Bootstrap:" +#~ msgstr "Bootstrap" -#: src/wx-console/wxbmainframe.cpp:248 src/wx-console/wxbmainframe.cpp:619 #, fuzzy -msgid "Connect" -msgstr "Connexion...\n" +#~ msgid "Where:" +#~ msgstr "Destination" -#: src/wx-console/wxbmainframe.cpp:248 src/wx-console/wxbmainframe.cpp:620 #, fuzzy -msgid "Connect to the director" -msgstr "Impossible de se connecter au Director\n" +#~ msgid "Replace:" +#~ msgstr "Écrasement :\n" -#: src/wx-console/wxbmainframe.cpp:249 #, fuzzy -msgid "Disconnect" -msgstr "Connexion...\n" +#~ msgid "ifnewer" +#~ msgstr "Type" -#: src/wx-console/wxbmainframe.cpp:249 #, fuzzy -msgid "Disconnect of the director" -msgstr "Impossible de se connecter au Director\n" +#~ msgid "ifolder" +#~ msgstr "FileSet" -#: src/wx-console/wxbmainframe.cpp:251 #, fuzzy -msgid "Change of configuration file" -msgstr "La création de la signature a échouée" +#~ msgid "FileSet:" +#~ msgstr "FileSet" -#: src/wx-console/wxbmainframe.cpp:251 #, fuzzy -msgid "Change your default configuration file" -msgstr "Impossible de lire le certificat à partir du fichier" +#~ msgid "Client:" +#~ msgstr "Client" -#: src/wx-console/wxbmainframe.cpp:252 #, fuzzy -msgid "Edit your configuration file" -msgstr "La création de la signature a échouée" +#~ msgid "Storage:" +#~ msgstr "Stockage" -#: src/wx-console/wxbmainframe.cpp:254 -msgid "E&xit\tAlt-X" -msgstr "" +#, fuzzy +#~ msgid "When:" +#~ msgstr "Quand" -#: src/wx-console/wxbmainframe.cpp:254 -msgid "Quit this program" -msgstr "" +#, fuzzy +#~ msgid "Priority:" +#~ msgstr "Priorité" -#: src/wx-console/wxbmainframe.cpp:258 #, fuzzy -msgid "&File" -msgstr "FileSet" +#~ msgid "Restoring..." +#~ msgstr "string" -#: src/wx-console/wxbmainframe.cpp:259 -msgid "&Help" -msgstr "" +#, fuzzy +#~ msgid "" +#~ "No Director resource defined in config file.\n" +#~ "Without that I don't how to speak to the Director :-(\n" +#~ msgstr "" +#~ "Pas de director défini pour %s\n" +#~ "Sans cette définition, il n'est pas possible de se connecter à celui-ci.\n" -#: src/wx-console/wxbmainframe.cpp:283 -msgid "" -"Warning : Unicode is disabled because you are using wxWidgets for GTK+ 1.2.\n" -msgstr "" +#, fuzzy +#~ msgid "Error while initializing windows sockets...\n" +#~ msgstr "Erreur pendant l'initialisation du contexte SSL" -#: src/wx-console/wxbmainframe.cpp:287 -msgid "" -"Warning : There is a problem with wxWidgets for GTK+ 2.0 without Unicode " -"support when handling non-ASCII filenames: Every non-ASCII character in such " -"filenames will be replaced by an interrogation mark.\n" -"If this behaviour disturbs you, please build bwx-console against a Unicode " -"version of wxWidgets for GTK+ 2.0.\n" -"---\n" -msgstr "" +#, fuzzy +#~ msgid "Error while cleaning up windows sockets...\n" +#~ msgstr "Erreur pendant l'initialisation du contexte SSL" -#: src/wx-console/wxbmainframe.cpp:298 -msgid "Send" -msgstr "" +#, fuzzy +#~ msgid "Error while initializing library." +#~ msgstr "Erreur pendant l'initialisation du contexte SSL" -#: src/wx-console/wxbmainframe.cpp:375 src/wx-console/wxbmainframe.cpp:387 -msgid "Error while parsing command line arguments, using defaults.\n" -msgstr "" +#, fuzzy +#~ msgid "Cryptographic library initialization failed.\n" +#~ msgstr "Initialisation de la connexion TLS échouée.\n" -#: src/wx-console/wxbmainframe.cpp:376 src/wx-console/wxbmainframe.cpp:388 -msgid "Usage: bwx-console [-c configfile] [-w tmp]\n" -msgstr "" +#, fuzzy +#~ msgid "Please correct configuration file.\n" +#~ msgstr "Merci de corriger le fichier de configuration : %s\n" -#: src/wx-console/wxbmainframe.cpp:417 -#, c-format -msgid "" -"It seems that it is the first time you run bwx-console.\n" -"This file (%s) has been choosen as default configuration file.\n" -"Do you want to edit it? (if you click No you will have to select another " -"file)" -msgstr "" +#, fuzzy +#~ msgid "Error : Library not initialized\n" +#~ msgstr "Impossible d'initialiser %s\n" -#: src/wx-console/wxbmainframe.cpp:419 #, fuzzy -msgid "First run" -msgstr "est en cours" +#~ msgid "Error : No configuration file loaded\n" +#~ msgstr "La création de la signature a échouée" -#: src/wx-console/wxbmainframe.cpp:436 -#, c-format -msgid "" -"Unable to read %s\n" -"Error: %s\n" -"Do you want to choose another one? (Press no to edit this file)" -msgstr "" +#~ msgid "Connecting...\n" +#~ msgstr "Connexion...\n" -#: src/wx-console/wxbmainframe.cpp:438 #, fuzzy -msgid "Unable to read configuration file" -msgstr "Impossible de lire le certificat à partir du fichier" +#~ msgid "Please choose a director (1-%d): " +#~ msgstr "Aucun fichier sélectionné pour la restauration.\n" -#: src/wx-console/wxbmainframe.cpp:450 -#, fuzzy -msgid "Please choose a configuration file to use" -msgstr "Merci de corriger le fichier de configuration : %s\n" +#~ msgid "Failed to connect to the director\n" +#~ msgstr "Impossible de se connecter au Director\n" -#: src/wx-console/wxbmainframe.cpp:463 #, fuzzy -msgid "This configuration file has been successfully read, use it as default?" -msgstr "Merci de corriger le fichier de configuration : %s\n" +#~ msgid "Connected\n" +#~ msgstr "Connexion...\n" -#: src/wx-console/wxbmainframe.cpp:464 #, fuzzy -msgid "Configuration file read successfully" -msgstr "La création de la signature a échouée" +#~ msgid "Connection terminated\n" +#~ msgstr "Sélection terminée.\n" -#: src/wx-console/wxbmainframe.cpp:474 -#, fuzzy, c-format -msgid "Using this configuration file: %s\n" -msgstr "Merci de corriger le fichier de configuration : %s\n" +#~ msgid "Type your command below:" +#~ msgstr "Saisissez votre commande ci-dessous : " -#: src/wx-console/wxbmainframe.cpp:479 #, fuzzy -msgid "Connecting to the director..." -msgstr "Connexion au Director %s:%d\n" +#~ msgid "Unknown command." +#~ msgstr "Erreur inconnue." -#: src/wx-console/wxbmainframe.cpp:494 -msgid "Failed to unregister a data parser !" -msgstr "" +#, fuzzy +#~ msgid "Possible completions: " +#~ msgstr "Les valeurs possibles sont :\n" -#: src/wx-console/wxbmainframe.cpp:502 -msgid "Quitting.\n" -msgstr "" +#, fuzzy +#~ msgid "Bacula bwx-console" +#~ msgstr "Message de Bacula" -#: src/wx-console/wxbmainframe.cpp:517 -msgid "" -"Welcome to Bacula bwx-console.\n" -"Written by Nicolas Boichat \n" -"Copyright (C), 2005-2007 Free Software Foundation Europe, e.V.\n" -msgstr "" +#, fuzzy +#~ msgid "Connect" +#~ msgstr "Connexion...\n" -#: src/wx-console/wxbmainframe.cpp:521 #, fuzzy -msgid "About Bacula bwx-console" -msgstr "Message de Bacula" +#~ msgid "Connect to the director" +#~ msgstr "Impossible de se connecter au Director\n" -#: src/wx-console/wxbmainframe.cpp:527 #, fuzzy -msgid "Please choose your default configuration file" -msgstr "Merci de corriger le fichier de configuration : %s\n" +#~ msgid "Disconnect" +#~ msgstr "Connexion...\n" -#: src/wx-console/wxbmainframe.cpp:531 #, fuzzy -msgid "Use this configuration file as default?" -msgstr "Merci de corriger le fichier de configuration : %s\n" +#~ msgid "Disconnect of the director" +#~ msgstr "Impossible de se connecter au Director\n" -#: src/wx-console/wxbmainframe.cpp:532 #, fuzzy -msgid "Configuration file" -msgstr "La création de la signature a échouée" +#~ msgid "Change of configuration file" +#~ msgstr "La création de la signature a échouée" -#: src/wx-console/wxbmainframe.cpp:603 #, fuzzy -msgid "Console thread terminated." -msgstr "est terminé" +#~ msgid "Change your default configuration file" +#~ msgstr "Impossible de lire le certificat à partir du fichier" -#: src/wx-console/wxbmainframe.cpp:611 #, fuzzy -msgid "Connection to the director lost. Quit program?" -msgstr "Connexion au Director %s:%d\n" +#~ msgid "Edit your configuration file" +#~ msgstr "La création de la signature a échouée" -#: src/wx-console/wxbmainframe.cpp:612 #, fuzzy -msgid "Connection lost" -msgstr "Connexion...\n" +#~ msgid "&File" +#~ msgstr "FileSet" -#: src/wx-console/wxbmainframe.cpp:628 #, fuzzy -msgid "Connected to the director." -msgstr "Impossible de se connecter au Director\n" +#~ msgid "First run" +#~ msgstr "est en cours" -#: src/wx-console/wxbmainframe.cpp:651 #, fuzzy -msgid "Reconnect" -msgstr "Connexion...\n" +#~ msgid "Unable to read configuration file" +#~ msgstr "Impossible de lire le certificat à partir du fichier" -#: src/wx-console/wxbmainframe.cpp:652 #, fuzzy -msgid "Reconnect to the director" -msgstr "Impossible de se connecter au Director\n" +#~ msgid "Please choose a configuration file to use" +#~ msgstr "Merci de corriger le fichier de configuration : %s\n" -#: src/wx-console/wxbmainframe.cpp:666 #, fuzzy -msgid "Disconnected of the director." -msgstr "Impossible de se connecter au Director\n" +#~ msgid "" +#~ "This configuration file has been successfully read, use it as default?" +#~ msgstr "Merci de corriger le fichier de configuration : %s\n" -#: src/wx-console/wxbmainframe.cpp:708 src/wx-console/wxbmainframe.cpp:725 -msgid "bwx-console: unexpected director's question." -msgstr "" +#, fuzzy +#~ msgid "Configuration file read successfully" +#~ msgstr "La création de la signature a échouée" -#: src/qt-console/tray-monitor/tray-monitor.cpp:67 -#, fuzzy, c-format -msgid "" -"\n" -"Version: %s (%s) %s %s %s\n" -"\n" -"Usage: tray-monitor [-c config_file] [-d debug_level]\n" -" -c set configuration file to file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -t test - read configuration and exit\n" -" -? print this message.\n" -"\n" -msgstr "" -") %s %s %s\n" -"\n" -"Usage : bconsole [-s] [-c config_file] [-d niveau_debug]\n" -" -c set configuration file to file\n" -" -dnn set debug level to nn\n" -" -s no signals\n" -" -t test - lecture de la configuration et sortie\n" -"\n" +#, fuzzy +#~ msgid "Using this configuration file: %s\n" +#~ msgstr "Merci de corriger le fichier de configuration : %s\n" -#: src/qt-console/bcomm/dircomm.cpp:92 -#, fuzzy, c-format -msgid "Already connected\"%s\".\n" -msgstr "Console connecté à %s\n" +#, fuzzy +#~ msgid "Connecting to the director..." +#~ msgstr "Connexion au Director %s:%d\n" -#: src/qt-console/bcomm/dircomm.cpp:105 -#, fuzzy, c-format -msgid "" -"Connecting to Director %s:%d\n" -"\n" -msgstr "Connexion au Director %s:%d\n" +#, fuzzy +#~ msgid "About Bacula bwx-console" +#~ msgstr "Message de Bacula" -#: src/qt-console/bcomm/dircomm.cpp:208 -msgid "Initializing ..." -msgstr "" +#, fuzzy +#~ msgid "Please choose your default configuration file" +#~ msgstr "Merci de corriger le fichier de configuration : %s\n" -#: src/qt-console/bcomm/dircomm.cpp:224 src/qt-console/console/console.cpp:142 #, fuzzy -msgid "Connected" -msgstr "Connexion...\n" +#~ msgid "Use this configuration file as default?" +#~ msgstr "Merci de corriger le fichier de configuration : %s\n" -#: src/qt-console/bcomm/dircomm.cpp:348 #, fuzzy -msgid "Command completed ..." -msgstr "Commande annulée.\n" +#~ msgid "Configuration file" +#~ msgstr "La création de la signature a échouée" -#: src/qt-console/bcomm/dircomm.cpp:355 src/qt-console/console/console.cpp:379 -msgid "Processing command ..." -msgstr "" +#, fuzzy +#~ msgid "Console thread terminated." +#~ msgstr "est terminé" -#: src/qt-console/bcomm/dircomm.cpp:362 -msgid "At main prompt waiting for input ..." -msgstr "" +#, fuzzy +#~ msgid "Connection to the director lost. Quit program?" +#~ msgstr "Connexion au Director %s:%d\n" -#: src/qt-console/bcomm/dircomm.cpp:369 src/qt-console/bcomm/dircomm.cpp:382 -msgid "At prompt waiting for input ..." -msgstr "" +#, fuzzy +#~ msgid "Connection lost" +#~ msgstr "Connexion...\n" -#: src/qt-console/bcomm/dircomm.cpp:390 #, fuzzy -msgid "Command failed." -msgstr "Commande annulée.\n" +#~ msgid "Connected to the director." +#~ msgstr "Impossible de se connecter au Director\n" -#: src/qt-console/bcomm/dircomm.cpp:463 #, fuzzy -msgid "Director disconnected." -msgstr "Connexion du director le %s\n" +#~ msgid "Reconnect" +#~ msgstr "Connexion...\n" -#: src/qt-console/bat_conf.cpp:154 -#, fuzzy, c-format -msgid "Console: name=%s\n" -msgstr "Console connecté à %s\n" +#, fuzzy +#~ msgid "Reconnect to the director" +#~ msgstr "Impossible de se connecter au Director\n" -#: src/qt-console/main.cpp:191 -#, fuzzy, c-format -msgid "" -"\n" -"Version: %s (%s) %s %s %s\n" -"\n" -"Usage: bat [-s] [-c config_file] [-d debug_level] [config_file]\n" -" -c set configuration file to file\n" -" -dnn set debug level to nn\n" -" -s no signals\n" -" -t test - read configuration and exit\n" -" -? print this message.\n" -"\n" -msgstr "" -") %s %s %s\n" -"\n" -"Usage : bconsole [-s] [-c config_file] [-d niveau_debug]\n" -" -c set configuration file to file\n" -" -dnn set debug level to nn\n" -" -s no signals\n" -" -t test - lecture de la configuration et sortie\n" -"\n" +#, fuzzy +#~ msgid "Disconnected of the director." +#~ msgstr "Impossible de se connecter au Director\n" #~ msgid "" #~ "====\n" @@ -19251,10 +18912,6 @@ msgstr "" #~ msgid "There is no valid DVD in device %s.\n" #~ msgstr "Le volume \"%s\" n'est pas dans le device %s.\n" -#, fuzzy -#~ msgid "Could not mount DVD device %s.\n" -#~ msgstr "Le volume \"%s\" n'est pas dans le device %s.\n" - #~ msgid "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n" #~ msgstr "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n" @@ -19268,11 +18925,6 @@ msgstr "" #~ msgid "Unable to open Catalog DB control file %s: ERR=%s\n" #~ msgstr "Impossible de créer le fichier bootstrap %s. ERR=%s\n" -#, fuzzy -#~ msgid "Error reading catalog DB control file. ERR=%s\n" -#~ msgstr "" -#~ "Erreur pendant l'écriture des données vers le fichier de spool. ERR=%s\n" - #, fuzzy #~ msgid "Could not connect to storage daemon" #~ msgstr "Impossible de se connecter au Storage daemon.\n" @@ -19336,10 +18988,6 @@ msgstr "" #~ msgid "1 file (%s)" #~ msgstr "Nouveau Fichier : %s\n" -#, fuzzy -#~ msgid "%d files (%s)" -#~ msgstr "Nouveau Fichier : %s\n" - #, fuzzy #~ msgid "1 file selected (%s)" #~ msgstr "" @@ -19354,10 +19002,6 @@ msgstr "" #~ "1 fichier sélectionne pour la restauration.\n" #~ "\n" -#, fuzzy -#~ msgid "An error occurred while extracting files." -#~ msgstr "Entrez le nombre de départ : " - #, fuzzy #~ msgid "Command not found." #~ msgstr "Commande annulée.\n" @@ -19414,10 +19058,6 @@ msgstr "" #~ msgid "Label" #~ msgstr "Type" -#, fuzzy -#~ msgid " Command: " -#~ msgstr "Erreur sur la commande : %s\n" - #, fuzzy #~ msgid "Enter Commands Here" #~ msgstr "Exécuter une requête SQL : " @@ -19487,10 +19127,6 @@ msgstr "" #~ msgid "Label a Volume" #~ msgstr "labéliser une bande" -#, fuzzy -#~ msgid "Volume Name:" -#~ msgstr "Saisissez un nom de Volume : " - #, fuzzy #~ msgid "Restore Files Dialog" #~ msgstr "restauration de fichier" @@ -19598,10 +19234,6 @@ msgstr "" #~ msgid "No Volumes found to migrate.\n" #~ msgstr "Aucun volume trouvé pour la migration.\n" -#, fuzzy -#~ msgid "No JobIds found to migrate.\n" -#~ msgstr "Aucun volume trouvé pour la restauration.\n" - #~ msgid "" #~ "\n" #~ "%d Jobs, %s files inserted into the tree and marked for extraction.\n" @@ -19833,9 +19465,6 @@ msgstr "" #~ msgid "OpenSSL error occured" #~ msgstr "Une erreur OpenSSL s'est produite" -#~ msgid "Device %s is busy reading.\n" -#~ msgstr "Le device %s est occupé en lecture.\n" - #, fuzzy #~ msgid "Job started. JobId=" #~ msgstr "Job démarré. JobId=%s\n" @@ -19928,9 +19557,6 @@ msgstr "" #~ msgid "fd" #~ msgstr "fd" -#~ msgid "========================================================================\n" -#~ msgstr "========================================================================\n" - #~ msgid "readlabel %s Slot=%d drive=%d\n" #~ msgstr "readlabel %s Slot=%d drive=%d\n" diff --git a/bacula/po/it.po b/bacula/po/it.po index 939c1dc728..5164de5c5c 100644 --- a/bacula/po/it.po +++ b/bacula/po/it.po @@ -1,11 +1,11 @@ # Italian translations for Bacula package # Traduzioni italiane per il pacchetto Bacula.. -# Copyright (C) 2005-2006 Free Software Foundation Europe e.V. +# Copyright (C) 2005-2014 Free Software Foundation Europe e.V. # , 2005. # msgid "" msgstr "" -"Project-Id-Version: Bacula 1.38\n" +"Project-Id-Version: Bacula 5.28\n" "Report-Msgid-Bugs-To: bacula-devel@lists.sourceforge.net\n" "POT-Creation-Date: 2007-08-10 23:23+0200\n" "PO-Revision-Date: 2005-08-08 17:50+0200\n" diff --git a/bacula/po/nl.po b/bacula/po/nl.po index 6418d0cd67..da4c531c9f 100644 --- a/bacula/po/nl.po +++ b/bacula/po/nl.po @@ -1,5 +1,5 @@ # Dutch translation of Bacula -# Copyright (C) 2012 Kern Sibbald +# Copyright (C) 2012-2014 Kern Sibbald # This file is distributed under the same license as the PACKAGE package. # W. van den Akker , 2012 # @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Bacula 5.2.7\n" "Report-Msgid-Bugs-To: bacula-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2013-02-19 18:26+0100\n" +"POT-Creation-Date: 2014-03-23 22:51+0100\n" "PO-Revision-Date: 2012-05-05 11:52+0100\n" "Last-Translator: W. van den Akker \n" "Language-Team: LANGUAGE \n" @@ -16,17019 +16,16703 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: src/dird/jobq.c:74 -#, c-format -msgid "pthread_attr_init: ERR=%s\n" +#: src/console/authenticate.c:117 src/dird/authenticate.c:121 +msgid "" +"Authorization problem: Remote server did not advertise required TLS " +"support.\n" msgstr "" -#: src/dird/jobq.c:83 -#, c-format -msgid "pthread_mutex_init: ERR=%s\n" +#: src/console/authenticate.c:124 src/stored/authenticate.c:154 +#: src/stored/authenticate.c:267 src/stored/authenticate.c:376 +#: src/dird/authenticate.c:128 src/filed/authenticate.c:148 +#: src/filed/authenticate.c:276 +msgid "Authorization problem: Remote server requires TLS.\n" msgstr "" -#: src/dird/jobq.c:89 -#, c-format -msgid "pthread_cond_init: ERR=%s\n" +#: src/console/authenticate.c:133 +msgid "TLS negotiation failed\n" msgstr "" -#: src/dird/jobq.c:131 +#: src/console/authenticate.c:147 +#: src/qt-console/tray-monitor/authenticate.cpp:84 #, c-format -msgid "pthread_cond_broadcast: ERR=%s\n" +msgid "Bad response to Hello command: ERR=%s\n" msgstr "" -#: src/dird/jobq.c:139 -#, c-format -msgid "pthread_cond_wait: ERR=%s\n" +#: src/console/authenticate.c:154 +#: src/qt-console/tray-monitor/authenticate.cpp:91 +msgid "Director rejected Hello command\n" msgstr "" -#: src/dird/jobq.c:180 -#, c-format -msgid "Job %s waiting %d seconds for scheduled start time.\n" -msgstr "Job %s wacht %d seconde voor de start tijd.\n" +#: src/console/authenticate.c:166 +msgid "" +"Director authorization problem.\n" +"Most likely the passwords do not agree.\n" +"If you are using TLS, there may have been a certificate validation error " +"during the TLS handshake.\n" +"Please see " +msgstr "" -#: src/dird/jobq.c:220 src/dird/job.c:113 src/stored/dircmd.c:200 -#: src/stored/stored.c:560 +#: src/console/console_conf.c:128 src/qt-console/bat_conf.cpp:129 #, c-format -msgid "Unable to init job cond variable: ERR=%s\n" -msgstr "Kan job cond variabele niet initialiseren: ERR=%s\n" +msgid "No record for %d %s\n" +msgstr "" -#: src/dird/jobq.c:242 +#: src/console/console_conf.c:137 #, c-format -msgid "pthread_thread_create: ERR=%s\n" +msgid "Console: name=%s rcfile=%s histfile=%s\n" msgstr "" -#: src/dird/jobq.c:352 +#: src/console/console_conf.c:141 src/qt-console/bat_conf.cpp:138 #, c-format -msgid "pthread_cond_signal: ERR=%s\n" +msgid "Director: name=%s address=%s DIRport=%d\n" msgstr "" -#: src/dird/jobq.c:363 +#: src/console/console_conf.c:145 src/console/console_conf.c:221 +#: src/console/console_conf.c:266 src/console/console_conf.c:293 +#: src/stored/stored_conf.c:538 src/stored/stored_conf.c:628 +#: src/stored/stored_conf.c:663 src/filed/filed_conf.c:411 +#: src/filed/filed_conf.c:476 src/filed/filed_conf.c:506 +#: src/qt-console/bat_conf.cpp:149 src/qt-console/bat_conf.cpp:227 +#: src/qt-console/bat_conf.cpp:275 src/qt-console/bat_conf.cpp:305 #, c-format -msgid "pthread_create: ERR=%s\n" +msgid "Unknown resource type %d\n" msgstr "" -#: src/dird/jobq.c:647 +#: src/console/console_conf.c:247 src/dird/dird_conf.c:1425 +#: src/dird/dird_conf.c:1440 src/filed/filed_conf.c:439 +#: src/qt-console/tray-monitor/tray_conf.cpp:276 +#: src/qt-console/bat_conf.cpp:253 #, c-format -msgid "Rescheduled Job %s at %s to re-run in %d seconds (%s).\n" -msgstr "Opnieuw ingeplande Job %s in %s start opnieuw in %d seconden (%s).\n" - -#: src/dird/jobq.c:703 src/dird/jobq.c:708 -msgid "previous Job" -msgstr "vorige Job" +msgid "%s item is required in %s resource, but not found.\n" +msgstr "" -#: src/dird/jobq.c:745 +#: src/console/console_conf.c:310 src/dird/dird_conf.c:1664 +#: src/filed/filed_conf.c:524 src/qt-console/tray-monitor/tray_conf.cpp:360 +#: src/qt-console/bat_conf.cpp:322 #, c-format -msgid "" -"Job canceled. Attempt to read and write same device.\n" -" Read storage \"%s\" (From %s) -- Write storage \"%s\" (From %s)\n" +msgid "Attempt to define second %s resource named \"%s\" is not permitted.\n" msgstr "" -"Job geannuleerd. Er wordt van hetzelfde device gelezen en naar geschreven.\n" -" Lezen van opslag \"%s\" (Van %s) -- Schrijven naar opslag \"%s\" (Van " -"%s)\n" -#: src/dird/ua_select.c:54 +#: src/console/console.c:114 #, c-format -msgid "The current %s retention period is: %s\n" -msgstr "De huidige %s retention periode: %s\n" - -#: src/dird/ua_select.c:59 -msgid "Continue? (yes/mod/no): " -msgstr "Doorgaan? (ja, wijz, nee):" +msgid "" +"\n" +"Version: " +msgstr "" -#: src/dird/ua_select.c:62 src/dird/ua_run.c:219 -msgid "mod" +#: src/console/console.c:166 +msgid "input from file" msgstr "" -#: src/dird/ua_select.c:63 -msgid "Enter new retention period: " -msgstr "Geef nieuwe retention periode:" +#: src/console/console.c:167 +msgid "output to file" +msgstr "" -#: src/dird/ua_select.c:67 -msgid "Invalid period.\n" -msgstr "Onjuiste periode.\n" +#: src/console/console.c:168 +msgid "quit" +msgstr "" -#: src/dird/ua_select.c:143 -msgid "You have the following choices:\n" -msgstr "U heeft de volgende keuzes:\n" +#: src/console/console.c:169 +msgid "output to file and terminal" +msgstr "" -#: src/dird/ua_select.c:159 -msgid "The defined Storage resources are:\n" -msgstr "De gedefinieerde Opslag media zijn:\n" +#: src/console/console.c:170 +msgid "sleep specified time" +msgstr "" -#: src/dird/ua_select.c:167 src/dird/ua_dotcmds.c:734 src/dird/ua_cmds.c:995 -#: src/dird/ua_run.c:224 src/wx-console/wxbrestorepanel.cpp:339 -#: src/wx-console/wxbrestorepanel.cpp:355 -#: src/wx-console/wxbrestorepanel.cpp:479 -#: src/wx-console/wxbrestorepanel.cpp:480 -#: src/wx-console/wxbrestorepanel.cpp:490 -#: src/wx-console/wxbrestorepanel.cpp:491 -#: src/wx-console/wxbrestorepanel.cpp:1173 -#: src/wx-console/wxbrestorepanel.cpp:1176 -#: src/wx-console/wxbrestorepanel.cpp:1845 -#: src/wx-console/wxbrestorepanel.cpp:1916 -msgid "Storage" -msgstr "Opslag" +#: src/console/console.c:171 +msgid "print current time" +msgstr "" -#: src/dird/ua_select.c:167 -msgid "Select Storage resource" -msgstr "Selecteer opslag medium" +#: src/console/console.c:172 +msgid "print Console's version" +msgstr "" -#: src/dird/ua_select.c:182 src/dird/ua_restore.c:1296 -msgid "The defined FileSet resources are:\n" -msgstr "De gedefinieerde Fileset media zijn:\n" +#: src/console/console.c:173 +msgid "echo command string" +msgstr "" -#: src/dird/ua_select.c:190 src/dird/ua_restore.c:1300 src/dird/ua_run.c:226 -msgid "FileSet" +#: src/console/console.c:174 +msgid "execute an external command" msgstr "" -#: src/dird/ua_select.c:190 src/dird/ua_restore.c:1300 -msgid "Select FileSet resource" -msgstr "Selecteer FileSet bron" +#: src/console/console.c:175 +msgid "exit = quit" +msgstr "" -#: src/dird/ua_select.c:220 src/dird/ua_cmds.c:2029 -msgid "Could not find a Catalog resource\n" -msgstr "Kan Catalog medium niet vinden\n" +#: src/console/console.c:176 +msgid "zed_keys = use zed keys instead of bash keys" +msgstr "" -#: src/dird/ua_select.c:223 -msgid "You must specify a \"use \" command before continuing.\n" +#: src/console/console.c:177 +msgid "help listing" msgstr "" -"U diente een \"use \" te specificeren alvorens te kunnen " -"doorgaan.\n" -#: src/dird/ua_select.c:229 -msgid "The defined Catalog resources are:\n" -msgstr "De gedefinieerde Catalog media zijn:\n" +#: src/console/console.c:179 +msgid "set command separator" +msgstr "" -#: src/dird/ua_select.c:237 -msgid "Catalog" +#: src/console/console.c:213 +msgid ": is an invalid command\n" msgstr "" -#: src/dird/ua_select.c:237 -msgid "Select Catalog resource" -msgstr "Selecteer Catalog media" +#: src/console/console.c:663 +msgid "Illegal separator character.\n" +msgstr "" -#: src/dird/ua_select.c:255 src/dird/ua_select.c:281 -msgid "The defined Job resources are:\n" -msgstr "De gedefinieerde job resources zijn:\n" +#: src/console/console.c:696 +msgid "Command logic problem\n" +msgstr "" -#: src/dird/ua_select.c:266 src/dird/ua_select.c:289 src/dird/ua_select.c:330 -#: src/dird/ua_select.c:1186 src/dird/dird_conf.c:670 src/dird/ua_prune.c:601 -#: src/dird/ua_run.c:225 -msgid "Job" -msgstr "Job" +#: src/console/console.c:911 +#, c-format +msgid "Can't find %s in Director list\n" +msgstr "" -#: src/dird/ua_select.c:266 src/dird/ua_select.c:289 -msgid "Select Job resource" -msgstr "Selecteer Job media:" +#: src/console/console.c:919 +msgid "Available Directors:\n" +msgstr "" -#: src/dird/ua_select.c:308 +#: src/console/console.c:923 #, c-format -msgid "Error: Restore Job resource \"%s\" does not exist.\n" +msgid "%2d: %s at %s:%d\n" msgstr "" -#: src/dird/ua_select.c:322 -msgid "The defined Restore Job resources are:\n" +#: src/console/console.c:927 +msgid "Select Director by entering a number: " msgstr "" -#: src/dird/ua_select.c:330 -msgid "Select Restore Job" -msgstr "Selecteer Job om terug te zetten" - -#: src/dird/ua_select.c:347 -msgid "The defined Client resources are:\n" -msgstr "De gedefinieerde Clients zijn:\n" +#: src/console/console.c:934 +#, c-format +msgid "%s is not a number. You must enter a number between 1 and %d\n" +msgstr "" -#: src/dird/ua_select.c:355 src/dird/ua_select.c:464 src/dird/ua_dotcmds.c:735 -#: src/dird/ua_cmds.c:996 src/dird/ua_run.c:230 -#: src/wx-console/wxbrestorepanel.cpp:336 -#: src/wx-console/wxbrestorepanel.cpp:354 -#: src/wx-console/wxbrestorepanel.cpp:431 -#: src/wx-console/wxbrestorepanel.cpp:432 -#: src/wx-console/wxbrestorepanel.cpp:442 -#: src/wx-console/wxbrestorepanel.cpp:443 -#: src/wx-console/wxbrestorepanel.cpp:700 -#: src/wx-console/wxbrestorepanel.cpp:1133 -#: src/wx-console/wxbrestorepanel.cpp:1136 -#: src/wx-console/wxbrestorepanel.cpp:1238 -#: src/wx-console/wxbrestorepanel.cpp:1838 -#: src/wx-console/wxbrestorepanel.cpp:1840 -#: src/wx-console/wxbrestorepanel.cpp:1914 -#: src/wx-console/wxbrestorepanel.cpp:1970 -msgid "Client" -msgstr "Client" +#: src/console/console.c:941 +#, c-format +msgid "You must enter a number between 1 and %d\n" +msgstr "" -#: src/dird/ua_select.c:355 -msgid "Select Client (File daemon) resource" -msgstr "Selecteer een Client (File daemon)" +#: src/console/console.c:1095 src/stored/stored.c:215 src/dird/dird.c:267 +#: src/filed/filed.c:204 src/qt-console/main.cpp:154 +msgid "Cryptography library initialization failed.\n" +msgstr "" -#: src/dird/ua_select.c:382 +#: src/console/console.c:1099 src/stored/stored.c:219 src/dird/dird.c:271 +#: src/dird/dird.c:299 src/dird/dird.c:517 src/dird/dird.c:520 +#: src/filed/filed.c:209 src/qt-console/main.cpp:158 #, c-format -msgid "Error: Client resource %s does not exist.\n" -msgstr "Fout: Client %s bestaat niet.\n" +msgid "Please correct configuration file: %s\n" +msgstr "" -#: src/dird/ua_select.c:407 +#: src/console/console.c:1129 #, c-format -msgid "Could not find Client %s: ERR=%s" -msgstr "Kan Client niet vinden %s: ERR=%s" +msgid "Connecting to Director %s:%d\n" +msgstr "" -#: src/dird/ua_select.c:417 src/dird/ua_select.c:471 +#: src/console/console.c:1146 src/qt-console/bcomm/dircomm.cpp:118 #, c-format -msgid "Could not find Client \"%s\": ERR=%s" -msgstr "Kan Client niet vinden \"%s\": ERR=%s" +msgid "Failed to initialize TLS context for Console \"%s\".\n" +msgstr "" -#: src/dird/ua_select.c:446 +#: src/console/console.c:1166 src/qt-console/bcomm/dircomm.cpp:141 #, c-format -msgid "Error obtaining client ids. ERR=%s\n" +msgid "Failed to initialize TLS context for Director \"%s\".\n" msgstr "" -#: src/dird/ua_select.c:450 -msgid "No clients defined. You must run a job before using this command.\n" +#: src/console/console.c:1198 +msgid "Enter a period to cancel a command.\n" msgstr "" -#: src/dird/ua_select.c:454 -msgid "Defined Clients:\n" -msgstr "Gedefinieerde Clients:\n" - -#: src/dird/ua_select.c:464 -msgid "Select the Client" -msgstr "Selecteer Client" +#: src/console/console.c:1284 src/console/console.c:1314 +#: src/stored/stored.c:342 src/dird/dird.c:607 src/dird/dird.c:813 +#: src/dird/dird.c:868 src/dird/dird.c:907 src/filed/filed.c:366 +#: src/filed/filed.c:566 src/qt-console/main.cpp:213 +#: src/qt-console/main.cpp:243 +msgid "TLS required but not configured in Bacula.\n" +msgstr "" -#: src/dird/ua_select.c:497 src/dird/ua_select.c:521 src/dird/ua_select.c:566 +#: src/console/console.c:1292 src/qt-console/main.cpp:221 #, c-format -msgid "Could not find Pool \"%s\": ERR=%s" +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Director \"%s\" in %s. At least one CA certificate store is required.\n" msgstr "" -#: src/dird/ua_select.c:532 src/dird/ua_output.c:476 src/dird/ua_update.c:436 +#: src/console/console.c:1301 src/qt-console/main.cpp:230 #, c-format -msgid "Error obtaining pool ids. ERR=%s\n" +msgid "" +"No Director resource defined in %s\n" +"Without that I don't how to speak to the Director :-(\n" msgstr "" -#: src/dird/ua_select.c:536 -msgid "No pools defined. Use the \"create\" command to create one.\n" +#: src/console/console.c:1321 src/qt-console/main.cpp:251 +#, c-format +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Console \"%s\" in %s.\n" msgstr "" -#: src/dird/ua_select.c:540 -msgid "Defined Pools:\n" -msgstr "Gedefinieerde Pools:\n" - -#: src/dird/ua_select.c:542 src/dird/ua_select.c:562 src/dird/ua_update.c:365 -#: src/baconfig.h:88 -msgid "*None*" -msgstr "*Geen*" - -#: src/dird/ua_select.c:553 src/dird/ua_select.c:666 src/dird/ua_update.c:616 -#: src/dird/ua_run.c:238 src/wx-console/wxbrestorepanel.cpp:338 -#: src/wx-console/wxbrestorepanel.cpp:527 -#: src/wx-console/wxbrestorepanel.cpp:537 -#: src/wx-console/wxbrestorepanel.cpp:1834 -msgid "Pool" -msgstr "Pool" +#: src/console/console.c:1347 +msgid "Too many arguments on input command.\n" +msgstr "" -#: src/dird/ua_select.c:553 -msgid "Select the Pool" -msgstr "Selecteer Pool" +#: src/console/console.c:1351 +msgid "First argument to input command must be a filename.\n" +msgstr "" -#: src/dird/ua_select.c:591 +#: src/console/console.c:1357 #, c-format -msgid "No access to Pool \"%s\"\n" -msgstr "Geen toegang tot Pool \"%s\"\n" - -#: src/dird/ua_select.c:623 -msgid "Enter *MediaId or Volume name: " -msgstr "Voer *MediaId of Volume naam in:" - -#: src/dird/ua_select.c:658 -msgid "The defined Pool resources are:\n" +msgid "Cannot open file %s for input. ERR=%s\n" msgstr "" -#: src/dird/ua_select.c:666 -msgid "Select Pool resource" -msgstr "Selecteer Pool" +#: src/console/console.c:1389 +msgid "Too many arguments on output/tee command.\n" +msgstr "" -#: src/dird/ua_select.c:690 src/dird/ua_restore.c:555 +#: src/console/console.c:1406 #, c-format -msgid "Error: Pool resource \"%s\" does not exist.\n" +msgid "Cannot open file %s for output. ERR=%s\n" msgstr "" -#: src/dird/ua_select.c:701 -msgid "Enter the JobId to select: " -msgstr "Voer de gekozen Job in:" - -#: src/dird/ua_select.c:739 -#, c-format -msgid "Could not find Job \"%s\": ERR=%s" -msgstr "Kan Job niet vinden \"%s\": ERR=%s" +#: src/console/console.c:1425 +msgid "Too many arguments. Enclose command in double quotes.\n" +msgstr "" -#: src/dird/ua_select.c:819 +#: src/console/console.c:1434 #, c-format -msgid "Automatically selected %s: %s\n" +msgid "Cannot popen(\"%s\", \"r\"): ERR=%s\n" msgstr "" -#: src/dird/ua_select.c:830 +#: src/console/console.c:1446 src/stored/autochanger.c:665 #, c-format -msgid "" -"Your request has multiple choices for \"%s\". Selection is not possible in " -"batch mode.\n" +msgid "Autochanger error: ERR=%s\n" msgstr "" -#: src/dird/ua_select.c:848 +#: src/cats/sql_list.c:46 #, c-format -msgid "Selection list for \"%s\" is empty!\n" +msgid "Query failed: %s\n" msgstr "" -#: src/dird/ua_select.c:854 -#, c-format -msgid "Automatically selected: %s\n" +#: src/cats/sql_list.c:262 +msgid "These JobIds have copies as follows:\n" msgstr "" -#: src/dird/ua_select.c:866 -msgid "Selection aborted, nothing done.\n" +#: src/cats/sql_list.c:264 +msgid "The catalog contains copies as follows:\n" msgstr "" -#: src/dird/ua_select.c:871 +#: src/cats/sql_get.c:139 #, c-format -msgid "Please enter a number between 1 and %d\n" -msgstr "Voer een nummer in tussen 1 en %d\n" - -#: src/dird/ua_select.c:920 -msgid "Storage name given twice.\n" +msgid "Error fetching row: %s\n" msgstr "" -#: src/dird/ua_select.c:937 +#: src/cats/sql_get.c:146 #, c-format -msgid "Expecting jobid=nn command, got: %s\n" +msgid "get_file_record want 1 got rows=%d PathId=%s FilenameId=%s\n" msgstr "" -#: src/dird/ua_select.c:941 +#: src/cats/sql_get.c:154 #, c-format -msgid "JobId %s is not running.\n" -msgstr "JobID %s is niet in uitvoering.\n" +msgid "File record for PathId=%s FilenameId=%s not found.\n" +msgstr "" -#: src/dird/ua_select.c:951 -#, c-format -msgid "Expecting job=xxx, got: %s.\n" +#: src/cats/sql_get.c:160 +msgid "File record not found in Catalog.\n" msgstr "" -#: src/dird/ua_select.c:955 src/dird/ua_select.c:967 +#: src/cats/sql_get.c:187 #, c-format -msgid "Job \"%s\" is not running.\n" -msgstr "Job \"%s\" is niet in uitvoering.\n" +msgid "More than one Filename!: %s for file: %s\n" +msgstr "" -#: src/dird/ua_select.c:963 +#: src/cats/sql_get.c:193 src/cats/sql_get.c:246 src/cats/sql_get.c:623 +#: src/cats/sql_get.c:724 src/cats/sql_get.c:1043 src/cats/sql.c:341 +#: src/cats/sql.c:348 src/cats/sql_create.c:584 src/cats/postgresql.c:153 #, c-format -msgid "Expecting ujobid=xxx, got: %s.\n" +msgid "error fetching row: %s\n" msgstr "" -#: src/dird/ua_select.c:983 +#: src/cats/sql_get.c:197 #, c-format -msgid "Storage resource \"%s\": not found\n" +msgid "Get DB Filename record %s found bad record: %d\n" msgstr "" -#: src/dird/ua_select.c:1015 -msgid "Enter autochanger drive[0]: " -msgstr "Voer autochanger drive[0] in: " - -#: src/dird/ua_select.c:1036 -msgid "Enter autochanger slot: " -msgstr "Voer autochanger slot in:" - -#: src/dird/ua_select.c:1066 -msgid "Media Types defined in conf file:\n" +#: src/cats/sql_get.c:203 +#, c-format +msgid "Filename record: %s not found.\n" msgstr "" -#: src/dird/ua_select.c:1072 -msgid "Media Type" -msgstr "Type media" - -#: src/dird/ua_select.c:1072 -msgid "Select the Media Type" -msgstr "Selecteer media type" - -#: src/dird/ua_select.c:1111 +#: src/cats/sql_get.c:207 #, c-format -msgid "JobId %s is not running. Use Job name to %s inactive jobs.\n" +msgid "Filename record: %s not found in Catalog.\n" msgstr "" -#: src/dird/ua_select.c:1120 src/dird/ua_select.c:1130 +#: src/cats/sql_get.c:239 src/cats/sql_create.c:577 #, c-format -msgid "Warning Job %s is not running. Continuing anyway ...\n" +msgid "More than one Path!: %s for path: %s\n" msgstr "" -#: src/dird/ua_select.c:1140 src/dird/ua_cmds.c:692 src/dird/ua_cmds.c:738 -msgid "Unauthorized command from this console.\n" +#: src/cats/sql_get.c:250 +#, c-format +msgid "Get DB path record %s found bad record: %s\n" msgstr "" -#: src/dird/ua_select.c:1165 src/stored/status.c:538 src/filed/status.c:241 -msgid "No Jobs running.\n" -msgstr "Geen Jobs in uitvoering.\n" - -#: src/dird/ua_select.c:1167 -msgid "None of your jobs are running.\n" -msgstr "Geen van uw opdrachten zijn in uitvoering.\n" - -#: src/dird/ua_select.c:1172 -msgid "Select Job:\n" -msgstr "Selecteer Job:\n" - -#: src/dird/ua_select.c:1181 +#: src/cats/sql_get.c:263 #, c-format -msgid "JobId=%s Job=%s" +msgid "Path record: %s not found.\n" msgstr "" -#: src/dird/ua_select.c:1185 +#: src/cats/sql_get.c:267 #, c-format -msgid "Choose Job to %s" +msgid "Path record: %s not found in Catalog.\n" msgstr "" -#: src/dird/ua_select.c:1192 +#: src/cats/sql_get.c:306 #, c-format -msgid "" -"Cancel: %s\n" -"\n" -"%s" +msgid "No Job found for JobId %s\n" msgstr "" -"Anuleer: %s\n" -"\n" -"%s" - -#: src/dird/ua_select.c:1193 -msgid "Confirm cancel?" -msgstr "Bevestig annulering?" -#: src/dird/ua_select.c:1199 -#, fuzzy -msgid "Confirm cancel (yes/no): " -msgstr "Bevestig annulering (yes/no)" +#: src/cats/sql_get.c:379 src/cats/sql_get.c:436 +#, c-format +msgid "No volumes found for JobId=%d\n" +msgstr "" -#: src/dird/ua_select.c:1208 src/dird/ua_cmds.c:733 src/dird/ua_cmds.c:1100 +#: src/cats/sql_get.c:385 src/cats/sql_get.c:447 #, c-format -msgid "Job \"%s\" not found.\n" -msgstr "Job \"%s\" niet gevonden.\n" +msgid "Error fetching row %d: ERR=%s\n" +msgstr "" -#: src/dird/bsr.c:173 +#: src/cats/sql_get.c:399 #, c-format -msgid "Unable to get Job record. ERR=%s\n" +msgid "No Volume for JobId %d found in Catalog.\n" msgstr "" -#: src/dird/bsr.c:184 +#: src/cats/sql_get.c:540 #, c-format -msgid "Unable to get Job Volume Parameters. ERR=%s\n" +msgid "Pool id select failed: ERR=%s\n" msgstr "" -#: src/dird/bsr.c:232 +#: src/cats/sql_get.c:577 #, c-format -msgid "Unable to create bootstrap file %s. ERR=%s\n" +msgid "Client id select failed: ERR=%s\n" msgstr "" -#: src/dird/bsr.c:241 -msgid "No files found to read. No bootstrap file written.\n" +#: src/cats/sql_get.c:618 +#, c-format +msgid "More than one Pool!: %s\n" msgstr "" -#: src/dird/bsr.c:245 -msgid "Error writing bsr file.\n" -msgstr "Fout bij schrijven van bsr bestand.\n" +#: src/cats/sql_get.c:681 +msgid "Pool record not found in Catalog.\n" +msgstr "" -#: src/dird/bsr.c:250 +#: src/cats/sql_get.c:719 #, c-format -msgid "Bootstrap records written to %s\n" +msgid "More than one Client!: %s\n" msgstr "" -#: src/dird/bsr.c:298 -msgid "" -"The job will require the following\n" -" Volume(s) Storage(s) SD Device(s)\n" -"===========================================================================\n" +#: src/cats/sql_get.c:736 src/cats/sql_get.c:740 +msgid "Client record not found in Catalog.\n" msgstr "" -#: src/dird/bsr.c:317 -msgid "No Volumes found to restore.\n" -msgstr "Geen Volumes gevonden om terug te zetten.\n" - -#: src/dird/bsr.c:319 -msgid "" -"\n" -"Volumes marked with \"*\" are online.\n" +#: src/cats/sql_get.c:767 +#, c-format +msgid "More than one Counter!: %d\n" msgstr "" -"\n" -"Volumes gemarkeerd met \"*\" staan online.\n" -#: src/dird/ua_server.c:69 +#: src/cats/sql_get.c:772 #, c-format -msgid "Cannot create UA thread: %s\n" +msgid "error fetching Counter row: %s\n" msgstr "" -#: src/dird/ua_server.c:159 -msgid "You have messages.\n" -msgstr "U heeft berichten.\n" +#: src/cats/sql_get.c:792 +#, c-format +msgid "Counter record: %s not found in Catalog.\n" +msgstr "" -#: src/dird/verify.c:86 src/dird/verify.c:318 +#: src/cats/sql_get.c:832 #, c-format -msgid "Unimplemented Verify level %d(%c)\n" +msgid "Error got %s FileSets but expected only one!\n" msgstr "" -#: src/dird/verify.c:148 -msgid "" -"Unable to find JobId of previous InitCatalog Job.\n" -"Please run a Verify with Level=InitCatalog before\n" -"running the current Job.\n" +#: src/cats/sql_get.c:837 +#, c-format +msgid "FileSet record \"%s\" not found.\n" msgstr "" -#: src/dird/verify.c:153 -msgid "Unable to find JobId of previous Job for this client.\n" +#: src/cats/sql_get.c:847 +msgid "FileSet record not found in Catalog.\n" msgstr "" -#: src/dird/verify.c:170 +#: src/cats/sql_get.c:943 #, c-format -msgid "Could not get job record for previous Job. ERR=%s" +msgid "Media id select failed: ERR=%s\n" msgstr "" -#: src/dird/verify.c:176 +#: src/cats/sql_get.c:981 #, c-format -msgid "Last Job %d did not terminate normally. JobStatus=%c\n" +msgid "query dbids failed: ERR=%s\n" msgstr "" -#: src/dird/verify.c:180 +#: src/cats/sql_get.c:1038 #, c-format -msgid "Verifying against JobId=%d Job=%s\n" +msgid "More than one Volume!: %s\n" msgstr "" -#: src/dird/verify.c:219 +#: src/cats/sql_get.c:1094 #, c-format -msgid "Start Verify JobId=%s Level=%s Job=%s\n" +msgid "Media record MediaId=%s not found.\n" msgstr "" -#: src/dird/verify.c:305 -msgid "Deprecated feature ... use bootstrap.\n" +#: src/cats/sql_get.c:1097 +#, c-format +msgid "Media record for Volume \"%s\" not found.\n" msgstr "" -#: src/dird/verify.c:372 +#: src/cats/sql_get.c:1104 #, c-format -msgid "Unimplemented verify level %d\n" +msgid "Media record for MediaId=%u not found in Catalog.\n" msgstr "" -#: src/dird/verify.c:421 -msgid "Verify OK" -msgstr "Controle OK" - -#: src/dird/verify.c:425 -msgid "*** Verify Error ***" -msgstr "*** Fout bij controleren ***" +#: src/cats/sql_get.c:1107 +#, c-format +msgid "Media record for Vol=%s not found in Catalog.\n" +msgstr "" -#: src/dird/verify.c:429 -msgid "Verify warnings" +#: src/cats/sql_get.c:1140 src/cats/sql_create.c:1183 +msgid "ERR=JobIds are empty\n" msgstr "" -#: src/dird/verify.c:432 -msgid "Verify Canceled" +#: src/cats/sql_find.c:86 src/cats/sql_find.c:115 src/cats/sql_find.c:170 +#, c-format +msgid "" +"Query error for start time request: ERR=%s\n" +"CMD=%s\n" msgstr "" -#: src/dird/verify.c:435 -msgid "Verify Differences" +#: src/cats/sql_find.c:92 src/cats/sql_find.c:176 +msgid "No prior Full backup Job record found.\n" msgstr "" -#: src/dird/verify.c:440 +#: src/cats/sql_find.c:104 #, c-format -msgid "Inappropriate term code: %d %c\n" +msgid "Unknown level=%d\n" msgstr "" -#: src/dird/verify.c:454 +#: src/cats/sql_find.c:121 #, c-format msgid "" -"%s %s %s (%s):\n" -" Build OS: %s %s %s\n" -" JobId: %d\n" -" Job: %s\n" -" FileSet: %s\n" -" Verify Level: %s\n" -" Client: %s\n" -" Verify JobId: %d\n" -" Verify Job: %s\n" -" Start time: %s\n" -" End time: %s\n" -" Files Expected: %s\n" -" Files Examined: %s\n" -" Non-fatal FD errors: %d\n" -" FD termination status: %s\n" -" SD termination status: %s\n" -" Termination: %s\n" -"\n" +"No Job record found: ERR=%s\n" +"CMD=%s\n" msgstr "" -#: src/dird/verify.c:489 +#: src/cats/sql_find.c:279 #, c-format -msgid "" -"%s %s %s (%s):\n" -" Build: %s %s %s\n" -" JobId: %d\n" -" Job: %s\n" -" FileSet: %s\n" -" Verify Level: %s\n" -" Client: %s\n" -" Verify JobId: %d\n" -" Verify Job: %s\n" -" Start time: %s\n" -" End time: %s\n" -" Files Examined: %s\n" -" Non-fatal FD errors: %d\n" -" FD termination status: %s\n" -" Termination: %s\n" -"\n" +msgid "Unknown Job level=%d\n" msgstr "" -#: src/dird/verify.c:567 +#: src/cats/sql_find.c:289 #, c-format -msgid "" -"bird set configuration file to file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -f run in foreground (for debugging)\n" -" -g groupid\n" -" -m print kaboom output (for debugging)\n" -" -r run now\n" -" -s no signals\n" -" -t test - read configuration and exit\n" -" -u userid\n" -" -v verbose user messages\n" -" -? print this message.\n" -"\n" +#: src/cats/sql_create.c:209 +#, c-format +msgid "Create db Pool record %s failed: ERR=%s\n" msgstr "" -"\n" -"Versie: %s (%s) %s %s %s\n" -"\n" -"Specificatie: tray-monitor [-c configuratiebestand] [-d debug_level]\n" -" -c gebruik configuratiebestand\n" -" -d instellen debug level op \n" -" -dt weergeven tijd in debug output\n" -" -t test - lees configuratie en stop\n" -" -? geef deze melding.\n" -"\n" -#: src/dird/dird.c:296 src/stored/stored.c:227 src/console/console.c:1109 -#: src/filed/filed.c:218 src/qt-console/main.cpp:165 -msgid "Cryptography library initialization failed.\n" +#: src/cats/sql_create.c:242 +#, c-format +msgid "Device record %s already exists\n" msgstr "" -#: src/dird/dird.c:300 src/dird/dird.c:328 src/dird/dird.c:560 -#: src/dird/dird.c:563 src/stored/stored.c:231 src/console/console.c:1113 -#: src/filed/filed.c:223 src/qt-console/main.cpp:169 +#: src/cats/sql_create.c:259 #, c-format -msgid "Please correct configuration file: %s\n" +msgid "Create db Device record %s failed: ERR=%s\n" msgstr "" -#: src/dird/dird.c:546 -msgid "Too many open reload requests. Request ignored.\n" +#: src/cats/sql_create.c:294 +#, c-format +msgid "More than one Storage record!: %d\n" msgstr "" -#: src/dird/dird.c:561 -msgid "Out of reload table entries. Giving up.\n" +#: src/cats/sql_create.c:299 +#, c-format +msgid "error fetching Storage row: %s\n" msgstr "" -#: src/dird/dird.c:564 -msgid "Resetting previous configuration.\n" +#: src/cats/sql_create.c:320 +#, c-format +msgid "Create DB Storage record %s failed. ERR=%s\n" msgstr "" -#: src/dird/dird.c:628 +#: src/cats/sql_create.c:354 #, c-format -msgid "" -"No Director resource defined in %s\n" -"Without that I don't know who I am :-(\n" +msgid "mediatype record %s already exists\n" msgstr "" -#: src/dird/dird.c:636 src/filed/filed.c:350 +#: src/cats/sql_create.c:371 #, c-format -msgid "No Messages resource defined in %s\n" +msgid "Create db mediatype record %s failed: ERR=%s\n" msgstr "" -#: src/dird/dird.c:641 +#: src/cats/sql_create.c:412 #, c-format -msgid "Only one Director resource permitted in %s\n" +msgid "Volume \"%s\" already exists.\n" msgstr "" -#: src/dird/dird.c:650 src/dird/dird.c:856 src/dird/dird.c:911 -#: src/dird/dird.c:950 src/stored/stored.c:354 src/console/console.c:1296 -#: src/console/console.c:1326 src/filed/filed.c:357 src/filed/filed.c:516 -#: src/wx-console/console_thread.cpp:118 src/wx-console/console_thread.cpp:144 -#: src/qt-console/main.cpp:224 src/qt-console/main.cpp:254 -msgid "TLS required but not configured in Bacula.\n" +#: src/cats/sql_create.c:458 +#, c-format +msgid "Create DB Media record %s failed. ERR=%s\n" msgstr "" -#: src/dird/dird.c:658 src/stored/stored.c:410 src/filed/filed.c:526 +#: src/cats/sql_create.c:509 #, c-format -msgid "\"TLS Certificate\" file not defined for Director \"%s\" in %s.\n" +msgid "More than one Client!: %d\n" msgstr "" -#: src/dird/dird.c:664 src/stored/stored.c:416 src/filed/filed.c:532 +#: src/cats/sql_create.c:514 #, c-format -msgid "\"TLS Key\" file not defined for Director \"%s\" in %s.\n" +msgid "error fetching Client row: %s\n" msgstr "" -#: src/dird/dird.c:671 src/stored/stored.c:422 src/filed/filed.c:538 +#: src/cats/sql_create.c:542 #, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Director \"%s\" in %s. At least one CA certificate store is required when " -"using \"TLS Verify Peer\".\n" +msgid "Create DB Client record %s failed. ERR=%s\n" msgstr "" -#: src/dird/dird.c:690 src/stored/stored.c:441 src/filed/filed.c:557 +#: src/cats/sql_create.c:611 #, c-format -msgid "Failed to initialize TLS context for Director \"%s\" in %s.\n" +msgid "Create db Path record %s failed. ERR=%s\n" msgstr "" -#: src/dird/dird.c:698 +#: src/cats/sql_create.c:656 #, c-format -msgid "No Job records defined in %s\n" +msgid "Create DB Counters record %s failed. ERR=%s\n" msgstr "" -#: src/dird/dird.c:756 src/dird/dird.c:769 +#: src/cats/sql_create.c:694 #, c-format -msgid "Hey something is wrong. p=0x%lu\n" +msgid "More than one FileSet!: %d\n" msgstr "" -#: src/dird/dird.c:830 +#: src/cats/sql_create.c:699 #, c-format -msgid "\"%s\" directive in Job \"%s\" resource is required, but not found.\n" +msgid "error fetching FileSet row: ERR=%s\n" msgstr "" -#: src/dird/dird.c:837 -msgid "Too many items in Job resource\n" +#: src/cats/sql_create.c:730 +#, c-format +msgid "Create DB FileSet record %s failed. ERR=%s\n" msgstr "" -#: src/dird/dird.c:841 +#: src/cats/sql_create.c:999 #, c-format -msgid "No storage specified in Job \"%s\" nor in Pool.\n" +msgid "Create db File record %s failed. ERR=%s" msgstr "" -#: src/dird/dird.c:865 +#: src/cats/sql_create.c:1025 #, c-format -msgid "\"TLS Certificate\" file not defined for Console \"%s\" in %s.\n" +msgid "More than one Filename! %s for file: %s\n" msgstr "" -#: src/dird/dird.c:871 +#: src/cats/sql_create.c:1031 #, c-format -msgid "\"TLS Key\" file not defined for Console \"%s\" in %s.\n" +msgid "Error fetching row for file=%s: ERR=%s\n" msgstr "" -#: src/dird/dird.c:878 +#: src/cats/sql_create.c:1048 #, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Console \"%s\" in %s. At least one CA certificate store is required when " -"using \"TLS Verify Peer\".\n" +msgid "Create db Filename record %s failed. ERR=%s\n" msgstr "" -#: src/dird/dird.c:895 src/dird/dird.c:935 src/filed/filed.c:382 +#: src/cats/sql_create.c:1068 #, c-format -msgid "Failed to initialize TLS context for File daemon \"%s\" in %s.\n" +msgid "Attempt to put non-attributes into catalog. Stream=%d\n" msgstr "" -#: src/dird/dird.c:918 -#, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"File daemon \"%s\" in %s.\n" +#: src/cats/sql_create.c:1084 +msgid "Cannot Copy/Migrate job using BaseJob.\n" msgstr "" -#: src/dird/dird.c:959 +#: src/cats/sql_create.c:1236 #, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Storage \"%s\" in %s.\n" +msgid "Create db Object record %s failed. ERR=%s" msgstr "" -#: src/dird/dird.c:975 src/stored/stored.c:394 +#: src/cats/mysql.c:152 src/cats/postgresql.c:198 src/cats/sqlite.c:154 #, c-format -msgid "Failed to initialize TLS context for Storage \"%s\" in %s.\n" +msgid "Unable to initialize DB lock. ERR=%s\n" msgstr "" -#: src/dird/dird.c:1014 src/dird/dird.c:1016 +#: src/cats/mysql.c:195 #, c-format -msgid "Could not open Catalog \"%s\", database \"%s\".\n" +msgid "" +"Unable to connect to MySQL server.\n" +"Database=%s User=%s\n" +"MySQL connect failed either server not running or your authorization is " +"incorrect.\n" msgstr "" -#: src/dird/dird.c:1019 src/tools/cats_test.c:377 +#: src/cats/mysql.c:359 src/cats/postgresql.c:442 src/cats/sqlite.c:374 +#: src/dird/fd_cmds.c:836 src/dird/fd_cmds.c:896 #, c-format -msgid "%s" +msgid "Attribute create error. %s" msgstr "" -#: src/dird/dird.c:1098 +#: src/cats/mysql.c:381 src/cats/cats.c:121 src/cats/postgresql.c:494 +#: src/cats/postgresql.c:541 src/cats/sqlite.c:449 #, c-format -msgid "Could not create storage record for %s\n" +msgid "Query failed: %s: ERR=%s\n" msgstr "" -#: src/dird/dird.c:1106 -#, c-format -msgid "Could not update storage record for %s\n" +#: src/cats/mysql.c:680 +msgid "A user name for MySQL must be supplied.\n" msgstr "" -#: src/dird/dird.c:1181 src/dird/migrate.c:1072 src/stored/stored.c:491 +#: src/cats/postgresql.c:169 #, c-format -msgid "Could not compile regex pattern \"%s\" ERR=%s\n" +msgid "Encoding error for database \"%s\". Wanted SQL_ASCII, got %s\n" msgstr "" -#: src/dird/inc_conf.c:312 +#: src/cats/postgresql.c:234 #, c-format -msgid "Expected a strip path positive integer, got:%s:" +msgid "" +"Unable to connect to PostgreSQL server. Database=%s User=%s\n" +"Possible causes: SQL server not running; password incorrect; max_connections " +"exceeded.\n" msgstr "" -#: src/dird/inc_conf.c:332 -#, c-format -msgid "Expected a FileSet option keyword, got:%s:" +#: src/cats/postgresql.c:338 +msgid "PQescapeStringConn returned non-zero.\n" msgstr "" -#: src/dird/inc_conf.c:365 -msgid "Old style Include/Exclude not supported\n" +#: src/cats/postgresql.c:356 +msgid "PQescapeByteaConn returned NULL.\n" msgstr "" -#: src/dird/inc_conf.c:393 src/dird/inc_conf.c:739 src/dird/dird_conf.c:2022 -#, c-format -msgid "Expecting keyword, got: %s\n" +#: src/cats/postgresql.c:387 +msgid "PQunescapeByteaConn returned NULL.\n" msgstr "" -#: src/dird/inc_conf.c:401 src/dird/inc_conf.c:745 src/dird/dird_conf.c:2028 -#: src/lib/parse_conf.c:976 +#: src/cats/postgresql.c:801 #, c-format -msgid "expected an equals, got: %s" +msgid "error fetching currval: %s\n" msgstr "" -#: src/dird/inc_conf.c:411 src/dird/inc_conf.c:754 src/dird/dird_conf.c:2039 +#: src/cats/postgresql.c:992 #, c-format -msgid "Keyword %s not permitted in this resource" +msgid "error starting batch mode: %s" msgstr "" -#: src/dird/inc_conf.c:464 +#: src/cats/postgresql.c:1022 src/cats/postgresql.c:1029 #, c-format -msgid "Regex compile error. ERR=%s\n" +msgid "error ending batch mode: %s" msgstr "" -#: src/dird/inc_conf.c:485 +#: src/cats/postgresql.c:1079 #, c-format -msgid "Expected a regex string, got: %s\n" +msgid "error copying in batch mode: %s" +msgstr "" + +#: src/cats/postgresql.c:1101 +msgid "A user name for PostgreSQL must be supplied.\n" msgstr "" -#: src/dird/inc_conf.c:559 +#: src/cats/sqlite.c:169 #, c-format -msgid "Expected a wild-card string, got: %s\n" +msgid "Database %s does not exist, please create it.\n" msgstr "" -#: src/dird/inc_conf.c:582 +#: src/cats/sqlite.c:191 #, c-format -msgid "Expected an fstype string, got: %s\n" +msgid "Unable to open Database=%s. ERR=%s\n" msgstr "" -#: src/dird/inc_conf.c:593 -msgid "ExcludeDirContaining directive not permitted in Exclude.\n" +#: src/cats/sqlite.c:192 +msgid "unknown" msgstr "" -#: src/dird/inc_conf.c:620 +#: src/cats/sql_delete.c:65 #, c-format -msgid "Expected an drivetype string, got: %s\n" +msgid "No pool record %s exists\n" msgstr "" -#: src/dird/inc_conf.c:644 src/dird/inc_conf.c:687 +#: src/cats/sql_delete.c:70 #, c-format -msgid "Backslash found. Use forward slashes or quote the string.: %s\n" +msgid "Expecting one pool record, got %d\n" msgstr "" -#: src/dird/inc_conf.c:659 src/dird/inc_conf.c:702 +#: src/cats/sql_delete.c:76 #, c-format -msgid "Expected a filename, got: %s" +msgid "Error fetching row %s\n" msgstr "" -#: src/dird/inc_conf.c:676 -msgid "Plugin directive not permitted in Exclude\n" +#: src/stored/job.c:190 +msgid "Client socket not open. Could not connect to Client.\n" msgstr "" -#: src/dird/inc_conf.c:719 -msgid "Options section not permitted in Exclude\n" -msgstr "" +#: src/stored/job.c:205 src/stored/job.c:207 +#, fuzzy, c-format +msgid "Recv request to Client failed. ERR=%s\n" +msgstr "Lees fout op bestand %s. FOUT=%s\n" -#: src/dird/inc_conf.c:724 src/dird/dird_conf.c:2008 +#: src/stored/job.c:213 src/stored/job.c:214 #, c-format -msgid "Expecting open brace. Got %s" +msgid "Bad Hello from Client: %s.\n" msgstr "" -#: src/dird/inc_conf.c:779 +#: src/stored/job.c:228 src/stored/job.c:311 +msgid "Unable to authenticate File daemon\n" +msgstr "" + +#: src/stored/job.c:282 #, c-format -msgid "Expected a FileSet keyword, got: %s" +msgid "FD connect failed: Job name not found: %s\n" msgstr "" -#: src/dird/ua_query.c:73 src/findlib/create_file.c:288 -#: src/findlib/create_file.c:391 +#: src/stored/job.c:291 #, c-format -msgid "Could not open %s: ERR=%s\n" +msgid "Hey!!!! JobId %u Job %s already authenticated.\n" msgstr "" -#: src/dird/ua_query.c:78 -msgid "Available queries:\n" +#: src/stored/job.c:441 +msgid "In free_jcr(), but still attached to device!!!!\n" msgstr "" -#: src/dird/ua_query.c:85 -msgid "Choose a query" +#: src/stored/vbackup.c:67 +msgid "Read and write devices not properly initialized.\n" msgstr "" -#: src/dird/ua_query.c:99 -msgid "Could not find query.\n" +#: src/stored/vbackup.c:73 +#, c-format +msgid "No Volume names found for %s.\n" msgstr "" -#: src/dird/ua_query.c:117 -msgid "Too many prompts in query, max is 9.\n" +#: src/stored/vbackup.c:114 src/stored/vbackup.c:248 src/stored/append.c:261 +#: src/stored/spool.c:262 +#, c-format +msgid "Fatal append error on device %s: ERR=%s\n" +msgstr "" + +#: src/stored/vbackup.c:116 src/stored/append.c:263 +msgid "Set ok=FALSE after write_block_to_device.\n" msgstr "" -#: src/dird/ua_query.c:220 +#: src/stored/vbackup.c:139 src/stored/append.c:287 src/stored/read.c:92 #, c-format -msgid "Warning prompt %d missing.\n" +msgid "Elapsed time=%02d:%02d:%02d, Transfer rate=%s Bytes/second\n" msgstr "" -#: src/dird/ua_query.c:265 -msgid "" -"Entering SQL query mode.\n" -"Terminate each query with a semicolon.\n" -"Terminate query mode with a blank line.\n" +#: src/stored/append.c:49 +msgid "DCR is NULL!!!\n" msgstr "" -#: src/dird/ua_query.c:268 src/dird/ua_query.c:284 -msgid "Enter SQL query: " +#: src/stored/append.c:55 +msgid "DEVICE is NULL!!!\n" msgstr "" -#: src/dird/ua_query.c:286 -msgid "Add to SQL query: " +#: src/stored/append.c:66 +msgid "Unable to set network buffer size.\n" msgstr "" -#: src/dird/ua_query.c:289 -msgid "End query mode.\n" +#: src/stored/append.c:80 src/stored/append.c:90 src/stored/append.c:103 +#: src/stored/askdir.c:355 src/stored/askdir.c:356 +msgid "NULL Volume name. This shouldn't happen!!!\n" msgstr "" -#: src/dird/newvol.c:90 +#: src/stored/append.c:96 src/stored/btape.c:2232 #, c-format -msgid "Illegal character in Volume name \"%s\"\n" -msgstr "Onjuist karakter in Volume naam \"%s\"\n" +msgid "Write session label failed. ERR=%s\n" +msgstr "" -#: src/dird/newvol.c:104 +#: src/stored/append.c:109 #, c-format -msgid "Created new Volume \"%s\" in catalog.\n" -msgstr "Nieuw volume \"%s\" aangemaakt in catalogus.\n" +msgid "Network send error to FD. ERR=%s\n" +msgstr "" -#: src/dird/newvol.c:131 +#: src/stored/append.c:148 #, c-format -msgid "SQL failed, but ignored. ERR=%s\n" +msgid "Error reading data header from FD. n=%d msglen=%d ERR=%s\n" msgstr "" -#: src/dird/newvol.c:141 +#: src/stored/append.c:155 #, c-format -msgid "Wanted to create Volume \"%s\", but it already exists. Trying again.\n" +msgid "Malformed data header from FD: %s\n" msgstr "" -"Geprobeerd om \"%s\" aan te maken, maar deze bestaat al. Probeer opnieuw.\n" - -#: src/dird/newvol.c:150 -msgid "Too many failures. Giving up creating Volume name.\n" -msgstr "Teveel mislukte pogingen. Aanmaken volume naam gestopt.\n" -#: src/dird/expand.c:255 +#: src/stored/append.c:174 #, c-format -msgid "Count not update counter %s: ERR=%s\n" +msgid "FI=%d from FD not positive or last_FI=%d\n" msgstr "" -#: src/dird/expand.c:427 +#: src/stored/append.c:222 #, c-format -msgid "Cannot create var context: ERR=%s\n" +msgid "Network error reading from FD. ERR=%s\n" msgstr "" -#: src/dird/expand.c:432 +#: src/stored/append.c:251 src/stored/btape.c:2351 #, c-format -msgid "Cannot set var callback: ERR=%s\n" +msgid "Error writing end session label. ERR=%s\n" msgstr "" -#: src/dird/expand.c:438 +#: src/stored/append.c:324 #, c-format -msgid "Cannot set var operate: ERR=%s\n" +msgid "Error updating file attributes. ERR=%s\n" msgstr "" -#: src/dird/expand.c:444 src/dird/expand.c:459 +#: src/stored/mount.c:87 #, c-format -msgid "Cannot unescape string: ERR=%s\n" +msgid "Too many errors trying to mount %s device %s.\n" msgstr "" -#: src/dird/expand.c:452 +#: src/stored/mount.c:95 #, c-format -msgid "Cannot expand expression \"%s\": ERR=%s\n" +msgid "Job %d canceled.\n" msgstr "" -#: src/dird/expand.c:470 +#: src/stored/mount.c:211 #, c-format -msgid "Cannot destroy var context: ERR=%s\n" +msgid "Open of %s device %s Volume \"%s\" failed: ERR=%s\n" msgstr "" -#: src/dird/recycle.c:69 +#: src/stored/mount.c:276 #, c-format -msgid "Recycled volume \"%s\"\n" +msgid "Volume \"%s\" previously written, moving to end of data.\n" msgstr "" -#: src/dird/ua_purge.c:90 +#: src/stored/mount.c:282 +#, fuzzy, c-format +msgid "Unable to position to end of data on %s device %s: ERR=%s\n" +msgstr "Kan job cond variabele niet initialiseren: ERR=%s\n" + +#: src/stored/mount.c:420 src/stored/mount.c:781 +#, fuzzy, c-format +msgid "Volume \"%s\" not on %s device %s.\n" +msgstr "Job \"%s\" niet gevonden.\n" + +#: src/stored/mount.c:453 +#, c-format msgid "" -"\n" -"This command can be DANGEROUS!!!\n" -"\n" -"It purges (deletes) all Files from a Job,\n" -"JobId, Client or Volume; or it purges (deletes)\n" -"all Jobs from a Client or Volume without regard\n" -"to retention periods. Normally you should use the\n" -"PRUNE command, which respects retention periods.\n" +"Director wanted Volume \"%s\".\n" +" Current Volume \"%s\" not acceptable because:\n" +" %s" msgstr "" -#: src/dird/ua_purge.c:157 -msgid "Choose item to purge" +#: src/stored/mount.c:473 src/stored/label.c:232 src/stored/label.c:383 +#, c-format +msgid "Could not reserve volume %s on %s device %s\n" msgstr "" -#: src/dird/ua_purge.c:204 +#: src/stored/mount.c:631 #, c-format -msgid "Begin purging files for Client \"%s\"\n" +msgid "Ready to append to end of Volume \"%s\" part=%d size=%s\n" msgstr "" -#: src/dird/ua_purge.c:213 src/dird/ua_purge.c:263 +#: src/stored/mount.c:635 #, c-format -msgid "No Files found for client %s to purge from %s catalog.\n" +msgid "" +"Bacula cannot write on DVD Volume \"%s\" because: The sizes do not match! " +"Volume=%s Catalog=%s\n" msgstr "" -#: src/dird/ua_purge.c:216 +#: src/stored/mount.c:649 #, c-format -msgid "Files for %d Jobs for client \"%s\" purged from %s catalog.\n" +msgid "Ready to append to end of Volume \"%s\" at file=%d.\n" msgstr "" -#: src/dird/ua_purge.c:254 +#: src/stored/mount.c:652 #, c-format -msgid "Begin purging jobs from Client \"%s\"\n" +msgid "" +"For Volume \"%s\":\n" +"The number of files mismatch! Volume=%u Catalog=%u\n" +"Correcting Catalog\n" msgstr "" -#: src/dird/ua_purge.c:266 -#, c-format -msgid "%d Jobs for client %s purged from %s catalog.\n" +#: src/stored/mount.c:659 src/stored/mount.c:694 +msgid "Error updating Catalog\n" msgstr "" -#: src/dird/ua_purge.c:464 +#: src/stored/mount.c:664 #, c-format msgid "" -"\n" -"Volume \"%s\" has VolStatus \"%s\" and cannot be purged.\n" -"The VolStatus must be: Append, Full, Used, or Error to be purged.\n" +"Bacula cannot write on tape Volume \"%s\" because:\n" +"The number of files mismatch! Volume=%u Catalog=%u\n" msgstr "" -#: src/dird/ua_purge.c:492 +#: src/stored/mount.c:679 #, c-format -msgid "%d File%s on Volume \"%s\" purged from catalog.\n" +msgid "Ready to append to end of Volume \"%s\" size=%s\n" msgstr "" -#: src/dird/ua_purge.c:541 +#: src/stored/mount.c:684 #, c-format msgid "" -"There are no more Jobs associated with Volume \"%s\". Marking it purged.\n" +"For Volume \"%s\":\n" +" The sizes do not match! Volume=%s Catalog=%s\n" +" Correcting Catalog\n" msgstr "" -#: src/dird/ua_purge.c:556 src/dird/ua_label.c:774 +#: src/stored/mount.c:699 #, c-format -msgid "Connecting to Storage daemon %s at %s:%d ...\n" +msgid "" +"Bacula cannot write on disk Volume \"%s\" because: The sizes do not match! " +"Volume=%s Catalog=%s\n" msgstr "" -#: src/dird/ua_purge.c:559 src/dird/ua_dotcmds.c:625 src/dird/ua_cmds.c:771 -#: src/dird/ua_cmds.c:1577 src/dird/ua_label.c:777 src/dird/job.c:448 -msgid "Failed to connect to Storage daemon.\n" -msgstr "" +#: src/stored/mount.c:765 +#, fuzzy, c-format +msgid "Labeled new Volume \"%s\" on %s device %s.\n" +msgstr "Nieuw volume \"%s\" aangemaakt in catalogus.\n" -#: src/dird/ua_purge.c:623 -msgid "Can't update volume size in the catalog\n" +#: src/stored/mount.c:776 +#, c-format +msgid "%s device %s not configured to autolabel Volumes.\n" msgstr "" -#: src/dird/ua_purge.c:625 +#: src/stored/mount.c:798 #, c-format -msgid "The volume \"%s\" has been truncated\n" +msgid "Marking Volume \"%s\" in Error in Catalog.\n" msgstr "" -#: src/dird/ua_purge.c:627 +#: src/stored/mount.c:815 #, c-format -msgid "Unable to truncate volume \"%s\"\n" +msgid "" +"Autochanger Volume \"%s\" not found in slot %d.\n" +" Setting InChanger to zero in catalog.\n" msgstr "" -#: src/dird/ua_purge.c:713 -#, c-format -msgid "No Volumes found to perform %s action.\n" +#: src/stored/mount.c:834 +msgid "Hey!!!!! WroteVol non-zero !!!!!\n" msgstr "" -#: src/dird/ua_purge.c:786 +#: src/stored/mount.c:884 #, c-format -msgid "Unable move recycled Volume in full Pool \"%s\" MaxVols=%d\n" +msgid "" +"Invalid tape position on volume \"%s\" on device %s. Expected %d, got %d\n" msgstr "" -#: src/dird/ua_purge.c:800 +#: src/stored/mount.c:925 #, c-format -msgid "All records pruned from Volume \"%s\"; marking it \"Purged\"\n" +msgid "Cannot open %s Dev=%s, Vol=%s for reading.\n" msgstr "" -#: src/dird/ua_purge.c:805 +#: src/stored/askdir.c:168 +msgid "Network error on bnet_recv in req_vol_info.\n" +msgstr "" + +#: src/stored/askdir.c:191 #, c-format -msgid "Cannot purge Volume with VolStatus=%s\n" +msgid "Error getting Volume info: %s" msgstr "" -#: src/dird/vbackup.c:76 src/dird/migrate.c:114 -msgid "Could not get or create a Pool record.\n" +#: src/stored/askdir.c:396 +#, c-format +msgid "Didn't get vol info vol=%s: ERR=%s" msgstr "" -#: src/dird/vbackup.c:89 src/dird/migrate.c:227 src/dird/migrate.c:228 -#: src/dird/backup.c:93 src/dird/job.c:185 src/dird/job.c:871 -#: src/dird/job.c:1126 src/dird/job.c:1172 src/dird/job.c:1186 -msgid "Pool resource" +#: src/stored/askdir.c:461 +#, c-format +msgid "Error creating JobMedia record: ERR=%s\n" msgstr "" -#: src/dird/vbackup.c:116 src/dird/migrate.c:285 -msgid "Job Pool's NextPool resource" +#: src/stored/askdir.c:468 +#, c-format +msgid "Error creating JobMedia record: %s\n" msgstr "" -#: src/dird/vbackup.c:147 +#: src/stored/askdir.c:556 #, c-format -msgid "Start Virtual Backup JobId %s, Job=%s\n" +msgid "Job %s canceled while waiting for mount on Storage Device \"%s\".\n" msgstr "" -#: src/dird/vbackup.c:151 +#: src/stored/askdir.c:568 +#, c-format msgid "" -"This Job is not an Accurate backup so is not equivalent to a Full backup.\n" +"Job %s is waiting. Cannot find any appendable volumes.\n" +"Please use the \"label\" command to create a new Volume for:\n" +" Storage: %s\n" +" Pool: %s\n" +" Media type: %s\n" msgstr "" -#: src/dird/vbackup.c:158 -msgid "No previous Jobs found.\n" +#: src/stored/askdir.c:593 src/stored/askdir.c:694 +#, c-format +msgid "Max time exceeded waiting to mount Storage Device %s for Job %s\n" msgstr "" -#: src/dird/vbackup.c:180 -#, c-format -msgid "Error getting Job record for previous Job: ERR=%s" +#: src/stored/askdir.c:603 +msgid "pthread error in mount_next_volume.\n" msgstr "" -#: src/dird/vbackup.c:186 src/dird/migrate.c:131 -msgid "Could not get or create the FileSet record.\n" +#: src/stored/askdir.c:636 +msgid "Cannot request another volume: no volume name given.\n" msgstr "" -#: src/dird/vbackup.c:313 src/dird/backup.c:635 +#: src/stored/askdir.c:642 #, c-format -msgid "Error getting Client record for Job report: ERR=%s" +msgid "Job %s canceled while waiting for mount on Storage Device %s.\n" msgstr "" -#: src/dird/vbackup.c:319 src/dird/migrate.c:1257 src/dird/backup.c:641 +#: src/stored/askdir.c:659 #, c-format -msgid "Error getting Media record for Volume \"%s\": ERR=%s" +msgid "" +"%sPlease mount append Volume \"%s\" or label a new one for:\n" +" Job: %s\n" +" Storage: %s\n" +" Pool: %s\n" +" Media type: %s\n" msgstr "" -#: src/dird/vbackup.c:329 src/dird/backup.c:651 src/dird/backup.c:660 -#: src/stored/bscan.c:1214 -msgid "Backup OK -- with warnings" -msgstr "Backup OK -- met waarschuwingen" - -#: src/dird/vbackup.c:331 src/dird/backup.c:653 src/stored/bscan.c:1211 -msgid "Backup OK" +#: src/stored/askdir.c:665 +#, c-format +msgid "" +"%sPlease mount read Volume \"%s\" for:\n" +" Job: %s\n" +" Storage: %s\n" +" Pool: %s\n" +" Media type: %s\n" msgstr "" -#: src/dird/vbackup.c:336 src/dird/backup.c:664 src/stored/bscan.c:1218 -msgid "*** Backup Error ***" -msgstr "*** Backup Fout ***" +#: src/stored/askdir.c:672 +msgid "" +"\n" +"\n" +"WARNING: device is full! Please add more disk space then ...\n" +"\n" +msgstr "" -#: src/dird/vbackup.c:346 src/dird/backup.c:674 src/stored/bscan.c:1221 -msgid "Backup Canceled" -msgstr "Backup geannuleerd" +#: src/stored/askdir.c:704 +msgid "pthread error in mount_volume\n" +msgstr "" -#: src/dird/vbackup.c:393 +#: src/stored/stored.c:75 #, c-format msgid "" -"%s %s %s (%s):\n" -" Build OS: %s %s %s\n" -" JobId: %d\n" -" Job: %s\n" -" Backup Level: Virtual Full\n" -" Client: \"%s\" %s\n" -" FileSet: \"%s\" %s\n" -" Pool: \"%s\" (From %s)\n" -" Catalog: \"%s\" (From %s)\n" -" Storage: \"%s\" (From %s)\n" -" Scheduled time: %s\n" -" Start time: %s\n" -" End time: %s\n" -" Elapsed time: %s\n" -" Priority: %d\n" -" SD Files Written: %s\n" -" SD Bytes Written: %s (%sB)\n" -" Rate: %.1f KB/s\n" -" Volume name(s): %s\n" -" Volume Session Id: %d\n" -" Volume Session Time: %d\n" -" Last Volume Bytes: %s (%sB)\n" -" SD Errors: %d\n" -" SD termination status: %s\n" -" Termination: %s\n" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: bacula-sd [options] [-c config_file] [config_file]\n" +" -c use as configuration file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -f run in foreground (for debugging)\n" +" -g set groupid to group\n" +" -m print kaboom output (for debugging)\n" +" -p proceed despite I/O errors\n" +" -s no signals (for debugging)\n" +" -t test - read config and exit\n" +" -u userid to \n" +" -v verbose user messages\n" +" -? print this message.\n" "\n" msgstr "" -#: src/dird/ua_output.c:69 src/dird/ua_output.c:93 -msgid "ON or OFF keyword missing.\n" +#: src/stored/stored.c:124 src/stored/btape.c:167 +#, c-format +msgid "Tape block size (%d) not multiple of system size (%d)\n" msgstr "" -#: src/dird/ua_output.c:113 -msgid "Disabled Jobs:\n" +#: src/stored/stored.c:128 src/stored/btape.c:171 +#, c-format +msgid "Tape block size (%d) is not a power of 2\n" msgstr "" -#: src/dird/ua_output.c:119 -msgid "No disabled Jobs.\n" +#: src/stored/stored.c:256 +msgid "Volume Session Time is ZERO!\n" msgstr "" -#: src/dird/ua_output.c:163 -msgid "disabled" +#: src/stored/stored.c:265 +#, c-format +msgid "Unable to create thread. ERR=%s\n" msgstr "" -#: src/dird/ua_output.c:211 -msgid "Keywords for the show command are:\n" +#: src/stored/stored.c:298 src/stored/butil.c:76 +#, c-format +msgid "No Storage resource defined in %s. Cannot continue.\n" msgstr "" -#: src/dird/ua_output.c:217 +#: src/stored/stored.c:304 #, c-format -msgid "%s resource %s not found.\n" +msgid "Only one Storage resource permitted in %s\n" msgstr "" -#: src/dird/ua_output.c:220 +#: src/stored/stored.c:309 #, c-format -msgid "Resource %s not found\n" +msgid "No Director resource defined in %s. Cannot continue.\n" msgstr "" -#: src/dird/ua_output.c:290 -msgid "Hey! DB is NULL\n" +#: src/stored/stored.c:314 +#, c-format +msgid "No Device resource defined in %s. Cannot continue.\n" msgstr "" -#: src/dird/ua_output.c:447 +#: src/stored/stored.c:322 #, c-format -msgid "Jobid %d used %d Volume(s): %s\n" +msgid "No Messages resource defined in %s. Cannot continue.\n" msgstr "" -#: src/dird/ua_output.c:465 -msgid "No Pool specified.\n" +#: src/stored/stored.c:329 src/stored/bscan.c:256 +#, c-format +msgid "No Working Directory defined in %s. Cannot continue.\n" msgstr "" -#: src/dird/ua_output.c:486 +#: src/stored/stored.c:351 #, c-format -msgid "Pool: %s\n" +msgid "\"TLS Certificate\" file not defined for Storage \"%s\" in %s.\n" msgstr "" -#: src/dird/ua_output.c:502 -msgid "Ignoring invalid value for days. Max is 50.\n" +#: src/stored/stored.c:357 +#, c-format +msgid "\"TLS Key\" file not defined for Storage \"%s\" in %s.\n" msgstr "" -#: src/dird/ua_output.c:524 +#: src/stored/stored.c:363 #, c-format -msgid "Unknown list keyword: %s\n" +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Storage \"%s\" in %s. At least one CA certificate store is required when " +"using \"TLS Verify Peer\".\n" msgstr "" -#: src/dird/ua_output.c:549 +#: src/stored/stored.c:382 src/dird/dird.c:932 #, c-format -msgid "%s is not a job name.\n" +msgid "Failed to initialize TLS context for Storage \"%s\" in %s.\n" msgstr "" -#: src/dird/ua_output.c:563 +#: src/stored/stored.c:398 src/dird/dird.c:615 src/filed/filed.c:576 #, c-format -msgid "Could not find Pool for Job %s\n" +msgid "\"TLS Certificate\" file not defined for Director \"%s\" in %s.\n" msgstr "" -#: src/dird/ua_output.c:576 +#: src/stored/stored.c:404 src/dird/dird.c:621 src/filed/filed.c:582 #, c-format -msgid "Could not find next Volume for Job %s (Pool=%s, Level=%s).\n" +msgid "\"TLS Key\" file not defined for Director \"%s\" in %s.\n" msgstr "" -#: src/dird/ua_output.c:580 +#: src/stored/stored.c:410 src/dird/dird.c:628 src/filed/filed.c:588 #, c-format msgid "" -"The next Volume to be used by Job \"%s\" (Pool=%s, Level=%s) will be %s\n" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Director \"%s\" in %s. At least one CA certificate store is required when " +"using \"TLS Verify Peer\".\n" msgstr "" -#: src/dird/ua_output.c:593 +#: src/stored/stored.c:429 src/dird/dird.c:647 src/filed/filed.c:607 #, c-format -msgid "Could not find next Volume for Job %s.\n" +msgid "Failed to initialize TLS context for Director \"%s\" in %s.\n" msgstr "" -#: src/dird/ua_output.c:720 src/dird/job.c:133 src/tools/cats_test.c:375 +#: src/stored/stored.c:479 src/dird/mac_sql.c:547 src/dird/dird.c:1138 #, c-format -msgid "Could not open database \"%s\".\n" +msgid "Could not compile regex pattern \"%s\" ERR=%s\n" msgstr "" -#: src/dird/ua_output.c:733 +#: src/stored/stored.c:548 src/stored/dircmd.c:204 src/dird/job.c:101 +#: src/dird/jobq.c:208 src/filed/job.c:257 #, c-format -msgid "Pool %s not in database. %s" +msgid "Unable to init job cond variable: ERR=%s\n" +msgstr "Kan job cond variabele niet initialiseren: ERR=%s\n" + +#: src/stored/stored.c:556 +#, c-format +msgid "Could not initialize %s\n" msgstr "" -#: src/dird/ua_output.c:741 +#: src/stored/stored.c:570 #, c-format -msgid "Pool %s created in database.\n" +msgid "Could not open device %s\n" msgstr "" -#: src/dird/ua_output.c:794 -msgid "You have no messages.\n" +#: src/stored/stored.c:584 +#, c-format +msgid "Could not mount device %s\n" msgstr "" -#: src/dird/ua_output.c:874 -msgid "Message too long to display.\n" +#: src/stored/btape.c:174 +#, c-format +msgid "" +"\n" +"\n" +"!!!! Warning large disk addressing disabled. boffset_t=%d should be 8 or " +"more !!!!!\n" +"\n" +"\n" msgstr "" -#: src/dird/ua_dotcmds.c:155 src/dird/ua_cmds.c:236 +#: src/stored/btape.c:181 #, c-format -msgid "Can't use %s command in a runscript" +msgid "32 bit printf/scanf problem. i=%d x32=%u y32=%u\n" msgstr "" -#: src/dird/ua_dotcmds.c:175 -msgid ": is an invalid command.\n" +#: src/stored/btape.c:190 +msgid "64 bit printf/scanf problem. i=%d x64=%" msgstr "" -#: src/dird/ua_dotcmds.c:553 src/dird/ua_restore.c:780 -#: src/dird/ua_restore.c:823 +#: src/stored/btape.c:195 #, c-format -msgid "Unable to get Job record for JobId=%s: ERR=%s\n" +msgid "Tape block granularity is %d bytes.\n" msgstr "" -#: src/dird/ua_dotcmds.c:619 src/dird/ua_cmds.c:765 src/dird/ua_cmds.c:1566 -#: src/dird/ua_status.c:352 src/dird/job.c:147 src/dird/job.c:153 -#: src/dird/job.c:1160 src/dird/job.c:1164 -msgid "unknown source" +#: src/stored/btape.c:270 +msgid "No archive name specified.\n" msgstr "" -#: src/dird/ua_dotcmds.c:622 src/dird/ua_cmds.c:768 src/dird/ua_status.c:355 -#, c-format -msgid "Connecting to Storage daemon %s at %s:%d\n" +#: src/stored/btape.c:274 +msgid "Improper number of arguments specified.\n" msgstr "" -#: src/dird/ua_dotcmds.c:628 src/dird/ua_cmds.c:774 src/dird/ua_status.c:366 -msgid "Connected to storage daemon\n" +#: src/stored/btape.c:288 +msgid "btape does not work with DVD storage.\n" +msgstr "" + +#: src/stored/btape.c:293 +msgid "btape only works with tape storage.\n" msgstr "" -#: src/dird/ua_dotcmds.c:648 src/dird/ua_cmds.c:803 src/dird/ua_cmds.c:1208 -#: src/dird/ua_status.c:397 +#: src/stored/btape.c:377 #, c-format -msgid "Connecting to Client %s at %s:%d\n" +msgid "Total Volume bytes=%sB. Total Write rate = %sB/s\n" msgstr "" -#: src/dird/ua_dotcmds.c:651 src/dird/ua_cmds.c:806 src/dird/ua_cmds.c:1211 -msgid "Failed to connect to Client.\n" +#: src/stored/btape.c:403 +#, c-format +msgid "Volume bytes=%sB. Write rate = %sB/s\n" msgstr "" -#: src/dird/ua_dotcmds.c:694 src/dird/ua_dotcmds.c:788 +#: src/stored/btape.c:467 src/stored/device.c:303 src/stored/bcopy.c:194 #, c-format -msgid "Unknown command: %s\n" +msgid "dev open failed: %s\n" msgstr "" -#: src/dird/ua_dotcmds.c:732 src/dird/ua_cmds.c:993 -msgid "Available daemons are: \n" +#: src/stored/btape.c:471 +#, c-format +msgid "open device %s: OK\n" msgstr "" -#: src/dird/ua_dotcmds.c:733 src/dird/ua_cmds.c:994 -msgid "Director" +#: src/stored/btape.c:494 +msgid "Enter Volume Name: " msgstr "" -#: src/dird/ua_dotcmds.c:736 -msgid "Select daemon type to make die" +#: src/stored/btape.c:501 +#, c-format +msgid "Device open failed. ERR=%s\n" msgstr "" -#: src/dird/ua_dotcmds.c:762 -msgid "The Director will generate a deadlock.\n" +#: src/stored/btape.c:506 +#, c-format +msgid "Wrote Volume label for volume \"%s\".\n" msgstr "" -#: src/dird/ua_dotcmds.c:766 -msgid "The Director will segment fault.\n" +#: src/stored/btape.c:520 +msgid "Volume has no label.\n" msgstr "" -#: src/dird/ua_dotcmds.c:955 -msgid "Access to specified Client or FileSet not allowed.\n" +#: src/stored/btape.c:523 +msgid "Volume label read correctly.\n" msgstr "" -#: src/dird/ua_dotcmds.c:960 src/dird/ua_dotcmds.c:1004 -#: src/dird/ua_restore.c:941 src/dird/ua_restore.c:969 -#: src/dird/ua_restore.c:990 +#: src/stored/btape.c:526 #, c-format -msgid "Query failed: %s. ERR=%s\n" -msgstr "" - -#: src/dird/ua_dotcmds.c:999 -msgid "query keyword not found.\n" +msgid "I/O error on device: ERR=%s" msgstr "" -#: src/dird/ua_dotcmds.c:1026 +#: src/stored/btape.c:529 #, c-format -msgid "List MediaType failed: ERR=%s\n" +msgid "Volume type error: ERR=%s\n" msgstr "" -#: src/dird/ua_dotcmds.c:1040 -#, c-format -msgid "List Media failed: ERR=%s\n" +#: src/stored/btape.c:532 +msgid "Volume name error\n" msgstr "" -#: src/dird/ua_dotcmds.c:1054 +#: src/stored/btape.c:535 #, c-format -msgid "List Location failed: ERR=%s\n" +msgid "Error creating label. ERR=%s" msgstr "" -#: src/dird/next_vol.c:166 -#, c-format -msgid "Purging oldest volume \"%s\"\n" +#: src/stored/btape.c:538 +msgid "Volume version error.\n" msgstr "" -#: src/dird/next_vol.c:172 -#, c-format -msgid "Pruning oldest volume \"%s\"\n" +#: src/stored/btape.c:541 +msgid "Bad Volume label type.\n" msgstr "" -#: src/dird/next_vol.c:191 -msgid "We seem to be looping trying to find the next volume. I give up.\n" +#: src/stored/btape.c:544 +msgid "Unknown error.\n" msgstr "" -#: src/dird/next_vol.c:218 +#: src/stored/btape.c:562 #, c-format -msgid "Max Volume bytes=%s exceeded. Marking Volume \"%s\" as Full.\n" +msgid "Bad status from load. ERR=%s\n" msgstr "" -#: src/dird/next_vol.c:226 +#: src/stored/btape.c:564 #, c-format -msgid "Volume used once. Marking Volume \"%s\" as Used.\n" +msgid "Loaded %s\n" msgstr "" -#: src/dird/next_vol.c:233 +#: src/stored/btape.c:573 src/stored/btape.c:1136 src/stored/btape.c:1209 +#: src/stored/btape.c:1289 src/stored/btape.c:1560 #, c-format -msgid "Max Volume jobs=%s exceeded. Marking Volume \"%s\" as Used.\n" +msgid "Bad status from rewind. ERR=%s\n" msgstr "" -#: src/dird/next_vol.c:243 +#: src/stored/btape.c:576 src/stored/btape.c:1568 #, c-format -msgid "Max Volume files=%s exceeded. Marking Volume \"%s\" as Used.\n" +msgid "Rewound %s\n" msgstr "" -#: src/dird/next_vol.c:254 +#: src/stored/btape.c:602 src/stored/btape.c:1572 #, c-format -msgid "" -"Max configured use duration=%s sec. exceeded. Marking Volume \"%s\" as " -"Used.\n" +msgid "Bad status from weof. ERR=%s\n" msgstr "" -#: src/dird/next_vol.c:267 +#: src/stored/btape.c:606 #, c-format -msgid "Catalog error updating volume \"%s\". ERR=%s" -msgstr "" - -#: src/dird/next_vol.c:289 -msgid "volume has expired" +msgid "Wrote 1 EOF to %s\n" msgstr "" -#: src/dird/next_vol.c:307 src/dird/next_vol.c:351 +#: src/stored/btape.c:609 #, c-format -msgid "Recycled current volume \"%s\"\n" +msgid "Wrote %d EOFs to %s\n" msgstr "" -#: src/dird/next_vol.c:312 -msgid "and recycling of current volume failed" +#: src/stored/btape.c:627 +msgid "Moved to end of medium.\n" msgstr "" -#: src/dird/next_vol.c:318 -msgid "but should be Append, Purged or Recycle" +#: src/stored/btape.c:654 +#, c-format +msgid "Bad status from bsf. ERR=%s\n" msgstr "" -#: src/dird/next_vol.c:327 -msgid "volume has recycling disabled" +#: src/stored/btape.c:656 +#, c-format +msgid "Backspaced %d file%s.\n" msgstr "" -#: src/dird/next_vol.c:354 -msgid "" -"but should be Append, Purged or Recycle (recycling of the current volume " -"failed)" +#: src/stored/btape.c:673 +#, c-format +msgid "Bad status from bsr. ERR=%s\n" msgstr "" -#: src/dird/next_vol.c:358 -msgid "" -"but should be Append, Purged or Recycle (cannot automatically recycle " -"current volume, as it still contains unpruned data or the Volume Retention " -"time has not expired.)" +#: src/stored/btape.c:675 +#, c-format +msgid "Backspaced %d record%s.\n" msgstr "" -#: src/dird/next_vol.c:421 +#: src/stored/btape.c:685 src/stored/status.c:361 #, c-format -msgid "Unable to get Pool record: ERR=%s" +msgid "Configured device capabilities:\n" msgstr "" -#: src/dird/next_vol.c:428 +#: src/stored/btape.c:703 #, c-format -msgid "Unable add Scratch Volume, Pool \"%s\" full MaxVols=%d\n" +msgid "Device status:\n" msgstr "" -#: src/dird/next_vol.c:448 +#: src/stored/btape.c:717 src/stored/status.c:417 #, c-format -msgid "Failed to move Scratch Volume. ERR=%s\n" +msgid "Device parameters:\n" msgstr "" -#: src/dird/next_vol.c:453 +#: src/stored/btape.c:722 #, c-format -msgid "Using Volume \"%s\" from 'Scratch' pool.\n" +msgid "Status:\n" msgstr "" -#: src/dird/ua_cmds.c:120 -msgid "Add media to a pool" +#: src/stored/btape.c:737 +msgid "" +"Test writing larger and larger records.\n" +"This is a torture test for records.\n" +"I am going to write\n" +"larger and larger records. It will stop when the record size\n" +"plus the header exceeds the block size (by default about 64K)\n" msgstr "" -#: src/dird/ua_cmds.c:121 -msgid "Autodisplay console messages" +#: src/stored/btape.c:743 +msgid "Do you want to continue? (y/n): " msgstr "" -#: src/dird/ua_cmds.c:122 -msgid "Automount after label" +#: src/stored/btape.c:745 src/stored/btape.c:2197 +msgid "Command aborted.\n" msgstr "" -#: src/dird/ua_cmds.c:123 -msgid "Cancel a job" +#: src/stored/btape.c:762 +#, c-format +msgid "Block %d i=%d\n" msgstr "" -#: src/dird/ua_cmds.c:124 -msgid "Create DB Pool from resource" +#: src/stored/btape.c:789 +msgid "Skipping read backwards test because BSR turned off.\n" msgstr "" -#: src/dird/ua_cmds.c:125 -msgid "Delete volume, pool or job" +#: src/stored/btape.c:793 +msgid "" +"\n" +"=== Write, backup, and re-read test ===\n" +"\n" +"I'm going to write three records and an EOF\n" +"then backup over the EOF and re-read the last record.\n" +"Bacula does this after writing the last block on the\n" +"tape to verify that the block was written correctly.\n" +"\n" +"This is not an *essential* feature ...\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:126 -msgid "Disable a job" +#: src/stored/btape.c:806 src/stored/btape.c:817 src/stored/btape.c:828 +#: src/stored/btape.c:1146 src/stored/btape.c:1162 src/stored/btape.c:1904 +#: src/stored/btape.c:2821 +msgid "Error writing record to block.\n" msgstr "" -#: src/dird/ua_cmds.c:127 -msgid "Enable a job" +#: src/stored/btape.c:810 src/stored/btape.c:821 src/stored/btape.c:832 +#: src/stored/btape.c:1150 src/stored/btape.c:1166 src/stored/btape.c:1908 +#: src/stored/btape.c:2825 +msgid "Error writing block to device.\n" msgstr "" -#: src/dird/ua_cmds.c:128 -msgid "Performs FileSet estimate, listing gives full listing" +#: src/stored/btape.c:813 +#, c-format +msgid "Wrote first record of %d bytes.\n" msgstr "" -#: src/dird/ua_cmds.c:131 src/dird/ua_cmds.c:155 -msgid "Terminate Bconsole session" +#: src/stored/btape.c:824 +#, c-format +msgid "Wrote second record of %d bytes.\n" msgstr "" -#: src/dird/ua_cmds.c:132 -msgid "Non-interactive gui mode" +#: src/stored/btape.c:835 +#, c-format +msgid "Wrote third record of %d bytes.\n" msgstr "" -#: src/dird/ua_cmds.c:133 -msgid "Print help on specific command" +#: src/stored/btape.c:842 src/stored/btape.c:847 +#, c-format +msgid "Backspace file failed! ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:138 -msgid "Label a tape" +#: src/stored/btape.c:851 +msgid "Backspaced over EOF OK.\n" msgstr "" -#: src/dird/ua_cmds.c:139 -msgid "List objects from catalog" +#: src/stored/btape.c:853 +#, c-format +msgid "Backspace record failed! ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:142 -msgid "Full or long list like list command" +#: src/stored/btape.c:856 +msgid "Backspace record OK.\n" msgstr "" -#: src/dird/ua_cmds.c:145 -msgid "Display pending messages" +#: src/stored/btape.c:859 src/stored/btape.c:865 +#, c-format +msgid "Read block failed! ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:146 -msgid "Print current memory usage" +#: src/stored/btape.c:870 +msgid "Bad data in record. Test failed!\n" msgstr "" -#: src/dird/ua_cmds.c:147 -msgid "Mount storage" +#: src/stored/btape.c:874 +msgid "" +"\n" +"Block re-read correct. Test succeeded!\n" msgstr "" -#: src/dird/ua_cmds.c:150 -msgid "Prune expired records from catalog" +#: src/stored/btape.c:875 +msgid "" +"=== End Write, backup, and re-read test ===\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:153 -msgid "Purge records from catalog" +#: src/stored/btape.c:882 +msgid "" +"This is not terribly serious since Bacula only uses\n" +"this function to verify the last block written to the\n" +"tape. Bacula will skip the last block verification\n" +"if you add:\n" +"\n" +"Backward Space Record = No\n" +"\n" +"to your Storage daemon's Device resource definition.\n" msgstr "" -#: src/dird/ua_cmds.c:154 -msgid "Python control commands" +#: src/stored/btape.c:904 +#, c-format +msgid "Begin writing %i files of %sB with raw blocks of %u bytes.\n" msgstr "" -#: src/dird/ua_cmds.c:156 -msgid "Query catalog" +#: src/stored/btape.c:925 src/stored/btape.c:2877 +#, c-format +msgid "Write failed at block %u. stat=%d ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:157 -msgid "Restore files" +#: src/stored/btape.c:959 +#, c-format +msgid "Begin writing %i files of %sB with blocks of %u bytes.\n" msgstr "" -#: src/dird/ua_cmds.c:162 -msgid "Relabel a tape" +#: src/stored/btape.c:968 +msgid "" +"\n" +"Error writing record to block.\n" msgstr "" -#: src/dird/ua_cmds.c:165 -msgid "Release storage" +#: src/stored/btape.c:972 +msgid "" +"\n" +"Error writing block to device.\n" msgstr "" -#: src/dird/ua_cmds.c:166 -msgid "Reload conf file" +#: src/stored/btape.c:1027 +msgid "The file_size is too big, stop this test with Ctrl-c.\n" msgstr "" -#: src/dird/ua_cmds.c:167 -msgid "Run a job" +#: src/stored/btape.c:1055 +msgid "Test with zero data, should give the maximum throughput.\n" msgstr "" -#: src/dird/ua_cmds.c:171 -msgid "Report status" +#: src/stored/btape.c:1067 src/stored/btape.c:1093 +msgid "Test with random data, should give the minimum throughput.\n" msgstr "" -#: src/dird/ua_cmds.c:174 -msgid "Sets debug level" +#: src/stored/btape.c:1082 +msgid "Test with zero data and bacula block structure.\n" msgstr "" -#: src/dird/ua_cmds.c:177 -msgid "Sets new client address -- if authorized" +#: src/stored/btape.c:1122 +#, c-format +msgid "" +"\n" +"=== Write, rewind, and re-read test ===\n" +"\n" +"I'm going to write %d records and an EOF\n" +"then write %d records and an EOF, then rewind,\n" +"and re-read the data to verify that it is correct.\n" +"\n" +"This is an *essential* feature ...\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:178 -msgid "Show resource records" +#: src/stored/btape.c:1154 src/stored/btape.c:1170 +#, c-format +msgid "Wrote %d blocks of %d bytes.\n" msgstr "" -#: src/dird/ua_cmds.c:181 -msgid "Use SQL to query catalog" +#: src/stored/btape.c:1212 src/stored/btape.c:1292 +msgid "Rewind OK.\n" msgstr "" -#: src/dird/ua_cmds.c:182 -msgid "Print current time" +#: src/stored/btape.c:1225 src/stored/btape.c:1344 +msgid "Got EOF on tape.\n" msgstr "" -#: src/dird/ua_cmds.c:183 -msgid "Turn on/off trace to file" +#: src/stored/btape.c:1230 +#, c-format +msgid "Read block %d failed! ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:184 -msgid "Unmount storage" +#: src/stored/btape.c:1236 +#, c-format +msgid "Read record failed. Block %d! ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:187 -msgid "Umount - for old-time Unix guys, see unmount" +#: src/stored/btape.c:1242 src/stored/btape.c:1374 +#, c-format +msgid "Bad data in record. Expected %d, got %d at byte %d. Test failed!\n" msgstr "" -#: src/dird/ua_cmds.c:190 -msgid "Update volume, pool or stats" +#: src/stored/btape.c:1249 +#, c-format +msgid "%d blocks re-read correctly.\n" msgstr "" -#: src/dird/ua_cmds.c:196 -msgid "Use catalog xxx" +#: src/stored/btape.c:1252 src/stored/btape.c:1381 +msgid "" +"=== Test Succeeded. End Write, rewind, and re-read test ===\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:197 -msgid "Does variable expansion" +#: src/stored/btape.c:1280 +msgid "Block position test\n" msgstr "" -#: src/dird/ua_cmds.c:198 -msgid "Print Director version" +#: src/stored/btape.c:1335 +#, c-format +msgid "Reposition to file:block %d:%d\n" msgstr "" -#: src/dird/ua_cmds.c:199 -msgid "Wait until no jobs are running" +#: src/stored/btape.c:1337 +msgid "Reposition error.\n" msgstr "" -#: src/dird/ua_cmds.c:247 +#: src/stored/btape.c:1350 #, c-format -msgid "%s: is an invalid command.\n" -msgstr "" - -#: src/dird/ua_cmds.c:288 msgid "" -"You probably don't want to be using this command since it\n" -"creates database records without labeling the Volumes.\n" -"You probably want to use the \"label\" command.\n" +"Read block %d failed! file=%d blk=%d. ERR=%s\n" "\n" msgstr "" -#: src/dird/ua_cmds.c:306 -#, c-format -msgid "Pool already has maximum volumes=%d\n" -msgstr "" - -#: src/dird/ua_cmds.c:307 -msgid "Enter new maximum (zero for unlimited): " -msgstr "" - -#: src/dird/ua_cmds.c:327 -#, c-format -msgid "Enter number of Volumes to create. 0=>fixed name. Max=%d: " +#: src/stored/btape.c:1352 +msgid "" +"This may be because the tape drive block size is not\n" +" set to variable blocking as normally used by Bacula.\n" +" Please see the Tape Testing chapter in the manual and \n" +" look for using mt with defblksize and setoptions\n" +"If your tape drive block size is correct, then perhaps\n" +" your SCSI driver is *really* stupid and does not\n" +" correctly report the file:block after a FSF. In this\n" +" case try setting:\n" +" Fast Forward Space File = no\n" +" in your Device resource.\n" msgstr "" -#: src/dird/ua_cmds.c:333 +#: src/stored/btape.c:1368 #, c-format -msgid "The number must be between 0 and %d\n" +msgid "Read record failed! ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:341 -msgid "Enter Volume name: " +#: src/stored/btape.c:1379 +#, c-format +msgid "Block %d re-read correctly.\n" msgstr "" -#: src/dird/ua_cmds.c:345 -msgid "Enter base volume name: " +#: src/stored/btape.c:1400 +msgid "" +"\n" +"\n" +"=== Append files test ===\n" +"\n" +"This test is essential to Bacula.\n" +"\n" +"I'm going to write one record in file 0,\n" +" two records in file 1,\n" +" and three records in file 2\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:354 src/dird/ua_label.c:663 -msgid "Volume name too long.\n" +#: src/stored/btape.c:1424 +msgid "Now moving to end of medium.\n" msgstr "" -#: src/dird/ua_cmds.c:358 src/dird/ua_label.c:669 src/lib/edit.c:501 -msgid "Volume name must be at least one character long.\n" +#: src/stored/btape.c:1426 src/stored/btape.c:1655 +#, c-format +msgid "We should be in file 3. I am at file %d. %s\n" msgstr "" -#: src/dird/ua_cmds.c:369 -msgid "Enter the starting number: " +#: src/stored/btape.c:1427 src/stored/btape.c:1445 src/stored/btape.c:1644 +#: src/stored/btape.c:1656 src/stored/btape.c:1669 src/stored/btape.c:1686 +msgid "This is correct!" msgstr "" -#: src/dird/ua_cmds.c:374 -msgid "Start number must be greater than zero.\n" +#: src/stored/btape.c:1427 src/stored/btape.c:1445 src/stored/btape.c:1644 +#: src/stored/btape.c:1656 src/stored/btape.c:1669 src/stored/btape.c:1686 +msgid "This is NOT correct!!!!" msgstr "" -#: src/dird/ua_cmds.c:385 -msgid "Enter slot (0 for none): " +#: src/stored/btape.c:1433 +msgid "" +"\n" +"Now the important part, I am going to attempt to append to the tape.\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:389 -msgid "InChanger? yes/no: " +#: src/stored/btape.c:1440 +msgid "" +"Done appending, there should be no I/O errors\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:414 -#, c-format -msgid "%d Volumes created in pool %s\n" +#: src/stored/btape.c:1441 +msgid "Doing Bacula scan of blocks:\n" msgstr "" -#: src/dird/ua_cmds.c:430 src/dird/ua_cmds.c:1032 -msgid "Turn on or off? " +#: src/stored/btape.c:1443 +msgid "End scanning the tape.\n" msgstr "" -#: src/dird/ua_cmds.c:544 +#: src/stored/btape.c:1444 src/stored/btape.c:1668 #, c-format -msgid "" -"Can't set %s RecyclePool to %s, %s is not in database.\n" -"Try to update it with 'update pool=%s'\n" +msgid "We should be in file 4. I am at file %d. %s\n" msgstr "" -#: src/dird/ua_cmds.c:562 -#, c-format +#: src/stored/btape.c:1469 msgid "" -"Can't set %s ScratchPool to %s, %s is not in database.\n" -"Try to update it with 'update pool=%s'\n" +"\n" +"Autochanger enabled, but no name or no command device specified.\n" msgstr "" -#: src/dird/ua_cmds.c:631 -#, c-format +#: src/stored/btape.c:1473 msgid "" -"Error: Pool %s already exists.\n" -"Use update to change it.\n" +"\n" +"Ah, I see you have an autochanger configured.\n" +"To test the autochanger you must have a blank tape\n" +" that I can write on in Slot 1.\n" msgstr "" -#: src/dird/ua_cmds.c:642 -#, c-format -msgid "Pool %s created.\n" +#: src/stored/btape.c:1476 +msgid "" +"\n" +"Do you wish to continue with the Autochanger test? (y/n): " msgstr "" -#: src/dird/ua_cmds.c:672 -msgid "Python interpreter restarted.\n" +#: src/stored/btape.c:1483 +msgid "" +"\n" +"\n" +"=== Autochanger test ===\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:675 src/dird/ua_cmds.c:1337 -msgid "Nothing done.\n" +#: src/stored/btape.c:1492 +msgid "3301 Issuing autochanger \"loaded\" command.\n" msgstr "" -#: src/dird/ua_cmds.c:699 src/dird/ua_cmds.c:1083 src/dird/ua_run.c:1588 +#: src/stored/btape.c:1501 #, c-format -msgid "Client \"%s\" not found.\n" +msgid "3991 Bad autochanger command: %s\n" msgstr "" -#: src/dird/ua_cmds.c:708 +#: src/stored/btape.c:1502 #, c-format -msgid "Client \"%s\" address set to %s\n" +msgid "3991 result=\"%s\": ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:742 +#: src/stored/btape.c:1506 #, c-format -msgid "Job \"%s\" %sabled\n" -msgstr "" - -#: src/dird/ua_cmds.c:920 -msgid "Enter new debug level: " -msgstr "" - -#: src/dird/ua_cmds.c:997 -msgid "All" +msgid "Slot %d loaded. I am going to unload it.\n" msgstr "" -#: src/dird/ua_cmds.c:998 -msgid "Select daemon type to set debug level" +#: src/stored/btape.c:1508 +msgid "Nothing loaded in the drive. OK.\n" msgstr "" -#: src/dird/ua_cmds.c:1087 src/dird/ua_cmds.c:1972 +#: src/stored/btape.c:1515 #, c-format -msgid "No authorization for Client \"%s\"\n" -msgstr "" - -#: src/dird/ua_cmds.c:1092 -msgid "Client name missing.\n" +msgid "3302 Issuing autochanger \"unload %d %d\" command.\n" msgstr "" -#: src/dird/ua_cmds.c:1104 src/dird/ua_cmds.c:1171 src/dird/ua_cmds.c:1994 +#: src/stored/btape.c:1520 #, c-format -msgid "No authorization for Job \"%s\"\n" +msgid "unload status=%s %d\n" msgstr "" -#: src/dird/ua_cmds.c:1109 -msgid "Job name missing.\n" +#: src/stored/btape.c:1520 src/lib/util.c:177 src/lib/util.c:309 +#: src/dird/ua_status.c:1093 src/lib/status.h:115 +msgid "OK" msgstr "" -#: src/dird/ua_cmds.c:1118 -#, c-format -msgid "Fileset \"%s\" not found.\n" +#: src/stored/btape.c:1520 +msgid "Bad" msgstr "" -#: src/dird/ua_cmds.c:1122 +#: src/stored/btape.c:1523 #, c-format -msgid "No authorization for FileSet \"%s\"\n" +msgid "3992 Bad autochanger command: %s\n" msgstr "" -#: src/dird/ua_cmds.c:1127 -msgid "Fileset name missing.\n" +#: src/stored/btape.c:1524 +#, c-format +msgid "3992 result=\"%s\": ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:1138 src/dird/ua_run.c:550 +#: src/stored/btape.c:1534 #, c-format -msgid "Level \"%s\" not valid.\n" +msgid "3303 Issuing autochanger \"load %d %d\" command.\n" msgstr "" -#: src/dird/ua_cmds.c:1142 -msgid "Level value missing.\n" +#: src/stored/btape.c:1542 +#, c-format +msgid "3303 Autochanger \"load %d %d\" status is OK.\n" msgstr "" -#: src/dird/ua_cmds.c:1149 -msgid "Invalid value for accurate. It must be yes or no.\n" +#: src/stored/btape.c:1546 +#, c-format +msgid "3993 Bad autochanger command: %s\n" msgstr "" -#: src/dird/ua_cmds.c:1154 -msgid "Accurate value missing.\n" +#: src/stored/btape.c:1547 +#, c-format +msgid "3993 result=\"%s\": ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:1167 -msgid "No job specified.\n" +#: src/stored/btape.c:1562 +msgid "" +"\n" +"The test failed, probably because you need to put\n" +"a longer sleep time in the mtx-script in the load) case.\n" +"Adding a 30 second sleep and trying again ...\n" msgstr "" -#: src/dird/ua_cmds.c:1227 -msgid "Error sending include list.\n" +#: src/stored/btape.c:1575 +#, c-format +msgid "Wrote EOF to %s\n" msgstr "" -#: src/dird/ua_cmds.c:1232 -msgid "Error sending exclude list.\n" +#: src/stored/btape.c:1579 +#, c-format +msgid "" +"\n" +"The test worked this time. Please add:\n" +"\n" +" sleep %d\n" +"\n" +"to your mtx-changer script in the load) case.\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:1323 +#: src/stored/btape.c:1584 msgid "" -"In general it is not a good idea to delete either a\n" -"Pool or a Volume since they may contain data.\n" +"\n" +"The test autochanger worked!!\n" "\n" msgstr "" -#: src/dird/ua_cmds.c:1326 -msgid "Choose catalog item to delete" +#: src/stored/btape.c:1595 +msgid "You must correct this error or the Autochanger will not work.\n" msgstr "" -#: src/dird/ua_cmds.c:1376 src/dird/ua_cmds.c:1391 src/dird/ua_cmds.c:1401 -#, c-format -msgid "Illegal JobId %s ignored\n" +#: src/stored/btape.c:1613 +msgid "" +"\n" +"\n" +"=== Forward space files test ===\n" +"\n" +"This test is essential to Bacula.\n" +"\n" +"I'm going to write five files then test forward spacing\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:1404 -msgid "Enter JobId to delete: " +#: src/stored/btape.c:1638 +msgid "Now forward spacing 1 file.\n" msgstr "" -#: src/dird/ua_cmds.c:1440 +#: src/stored/btape.c:1640 src/stored/btape.c:1652 src/stored/btape.c:1665 +#: src/stored/btape.c:1683 src/stored/btape.c:1859 #, c-format -msgid "Are you sure you want to delete %d JobIds ? (yes/no): " +msgid "Bad status from fsr. ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:1450 +#: src/stored/btape.c:1643 #, c-format -msgid "Illegal JobId range %s - %s should define increasing JobIds, ignored\n" +msgid "We should be in file 1. I am at file %d. %s\n" msgstr "" -#: src/dird/ua_cmds.c:1454 -#, c-format -msgid "Illegal JobId range %s - %s, ignored\n" +#: src/stored/btape.c:1650 +msgid "Now forward spacing 2 files.\n" msgstr "" -#: src/dird/ua_cmds.c:1469 -#, c-format -msgid "Jobid %s and associated records deleted from the catalog.\n" +#: src/stored/btape.c:1663 +msgid "Now forward spacing 4 files.\n" msgstr "" -#: src/dird/ua_cmds.c:1484 -#, c-format +#: src/stored/btape.c:1675 msgid "" +"The test worked this time. Please add:\n" "\n" -"This command will delete volume %s\n" -"and all Jobs saved on that volume from the Catalog\n" -msgstr "" - -#: src/dird/ua_cmds.c:1491 -#, c-format -msgid "Are you sure you want to delete Volume \"%s\"? (yes/no): " -msgstr "" - -#: src/dird/ua_cmds.c:1504 -msgid "Can't list jobs on this volume\n" +" Fast Forward Space File = no\n" +"\n" +"to your Device resource for this drive.\n" msgstr "" -#: src/dird/ua_cmds.c:1529 -#, c-format -msgid "Are you sure you want to delete Pool \"%s\"? (yes/no): " +#: src/stored/btape.c:1681 +msgid "Now forward spacing 1 more file.\n" msgstr "" -#: src/dird/ua_cmds.c:1644 +#: src/stored/btape.c:1685 #, c-format -msgid "Using Catalog name=%s DB=%s\n" +msgid "We should be in file 5. I am at file %d. %s\n" msgstr "" -#: src/dird/ua_cmds.c:1712 -msgid "ERR: Can't open db\n" +#: src/stored/btape.c:1690 +msgid "" +"\n" +"=== End Forward space files test ===\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:1759 -msgid "Wait on mount timed out\n" +#: src/stored/btape.c:1694 +msgid "" +"\n" +"The forward space file test failed.\n" msgstr "" -#: src/dird/ua_cmds.c:1769 -msgid "ERR: Job was not found\n" +#: src/stored/btape.c:1696 +msgid "" +"You have Fast Forward Space File enabled.\n" +"I am turning it off then retrying the test.\n" msgstr "" -#: src/dird/ua_cmds.c:1845 +#: src/stored/btape.c:1702 msgid "" -" Command Description\n" -" ======= ===========\n" +"You must correct this error or Bacula will not work.\n" +"Some systems, e.g. OpenBSD, require you to set\n" +" Use MTIOCGET= no\n" +"in your device resource. Use with caution.\n" msgstr "" -#: src/dird/ua_cmds.c:1849 -#, c-format +#: src/stored/btape.c:1736 msgid "" -" %-13s %s\n" "\n" -"Arguments:\n" -"\t%s\n" -msgstr "" - -#: src/dird/ua_cmds.c:1854 -#, c-format -msgid " %-13s %s\n" +"Append test failed. Attempting again.\n" +"Setting \"Hardware End of Medium = no\n" +" and \"Fast Forward Space File = no\n" +"and retrying append test.\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:1858 -#, c-format +#: src/stored/btape.c:1744 msgid "" "\n" -"Can't find %s command.\n" "\n" +"It looks like the test worked this time, please add:\n" +"\n" +" Hardware End of Medium = No\n" +"\n" +" Fast Forward Space File = No\n" +"to your Device resource in the Storage conf file.\n" msgstr "" -#: src/dird/ua_cmds.c:1860 +#: src/stored/btape.c:1751 msgid "" "\n" -"When at a prompt, entering a period cancels the command.\n" "\n" +"That appears *NOT* to have corrected the problem.\n" msgstr "" -#: src/dird/ua_cmds.c:1896 src/filed/status.c:85 -#, c-format -msgid "%s Version: %s (%s) %s %s %s %s\n" -msgstr "" - -#: src/dird/ua_cmds.c:1955 src/dird/ua_cmds.c:1982 src/dird/ua_cmds.c:2004 -#, c-format -msgid "No authorization for Catalog \"%s\"\n" +#: src/stored/btape.c:1756 +msgid "" +"\n" +"\n" +"It looks like the append failed. Attempting again.\n" +"Setting \"BSF at EOM = yes\" and retrying append test.\n" msgstr "" -#: src/dird/ua_cmds.c:2049 -#, c-format -msgid "Could not open catalog database \"%s\".\n" +#: src/stored/btape.c:1761 +msgid "" +"\n" +"\n" +"It looks like the test worked this time, please add:\n" +"\n" +" Hardware End of Medium = No\n" +" Fast Forward Space File = No\n" +" BSF at EOM = yes\n" +"\n" +"to your Device resource in the Storage conf file.\n" msgstr "" -#: src/dird/ua_cmds.c:2059 -#, c-format -msgid "Using Catalog \"%s\"\n" +#: src/stored/btape.c:1772 +msgid "" +"\n" +"Append test failed.\n" +"\n" +"\n" +"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n" +"Unable to correct the problem. You MUST fix this\n" +"problem before Bacula can use your tape drive correctly\n" +"\n" +"Perhaps running Bacula in fixed block mode will work.\n" +"Do so by setting:\n" +"\n" +"Minimum Block Size = nnn\n" +"Maximum Block Size = nnn\n" +"\n" +"in your Storage daemon's Device definition.\n" +"nnn must match your tape driver's block size, which\n" +"can be determined by reading your tape manufacturers\n" +"information, and the information on your kernel dirver.\n" +"Fixed block sizes, however, are not normally an ideal solution.\n" +"\n" +"Some systems, e.g. OpenBSD, require you to set\n" +" Use MTIOCGET= no\n" +"in your device resource. Use with caution.\n" msgstr "" -#: src/dird/ua_tree.c:74 -msgid "add dir/file to be restored recursively, wildcards allowed" +#: src/stored/btape.c:1794 +msgid "" +"\n" +"The above Bacula scan should have output identical to what follows.\n" +"Please double check it ...\n" +"=== Sample correct output ===\n" +"1 block of 64448 bytes in file 1\n" +"End of File mark.\n" +"2 blocks of 64448 bytes in file 2\n" +"End of File mark.\n" +"3 blocks of 64448 bytes in file 3\n" +"End of File mark.\n" +"1 block of 64448 bytes in file 4\n" +"End of File mark.\n" +"Total files=4, blocks=7, bytes = 451,136\n" +"=== End sample correct output ===\n" +"\n" +"If the above scan output is not identical to the\n" +"sample output, you MUST correct the problem\n" +"or Bacula will not be able to write multiple Jobs to \n" +"the tape.\n" +"\n" msgstr "" -#: src/dird/ua_tree.c:75 -msgid "change current directory" +#: src/stored/btape.c:1837 +#, c-format +msgid "Bad status from fsf. ERR=%s\n" msgstr "" -#: src/dird/ua_tree.c:76 -msgid "count marked files in and below the cd" +#: src/stored/btape.c:1841 +msgid "Forward spaced 1 file.\n" msgstr "" -#: src/dird/ua_tree.c:77 -msgid "delete dir/file to be restored recursively in dir" +#: src/stored/btape.c:1844 +#, c-format +msgid "Forward spaced %d files.\n" msgstr "" -#: src/dird/ua_tree.c:78 src/dird/ua_tree.c:79 -msgid "long list current directory, wildcards allowed" +#: src/stored/btape.c:1863 +msgid "Forward spaced 1 record.\n" msgstr "" -#: src/dird/ua_tree.c:80 -msgid "leave file selection mode" +#: src/stored/btape.c:1866 +#, c-format +msgid "Forward spaced %d records.\n" msgstr "" -#: src/dird/ua_tree.c:81 -msgid "estimate restore size" +#: src/stored/btape.c:1911 +#, c-format +msgid "Wrote one record of %d bytes.\n" msgstr "" -#: src/dird/ua_tree.c:82 -msgid "same as done command" +#: src/stored/btape.c:1913 +msgid "Wrote block to device.\n" msgstr "" -#: src/dird/ua_tree.c:83 -msgid "find files, wildcards allowed" +#: src/stored/btape.c:1927 +msgid "Enter length to read: " msgstr "" -#: src/dird/ua_tree.c:84 src/dird/ua_tree.c:97 src/dird/ua_tree.c:98 -msgid "print help" +#: src/stored/btape.c:1932 +msgid "Bad length entered, using default of 1024 bytes.\n" msgstr "" -#: src/dird/ua_tree.c:85 src/dird/ua_tree.c:86 -msgid "list current directory, wildcards allowed" +#: src/stored/btape.c:1941 +#, c-format +msgid "Read of %d bytes gives stat=%d. ERR=%s\n" msgstr "" -#: src/dird/ua_tree.c:87 -msgid "list subdir in current directory, wildcards allowed" +#: src/stored/btape.c:1964 src/stored/btape.c:2013 +#, c-format +msgid "End of tape\n" msgstr "" -#: src/dird/ua_tree.c:88 -msgid "list the marked files in and below the cd" +#: src/stored/btape.c:1969 +#, c-format +msgid "Starting scan at file %u\n" msgstr "" -#: src/dird/ua_tree.c:89 -msgid "list the marked files in" +#: src/stored/btape.c:1974 src/stored/tape_dev.c:613 +#, c-format +msgid "read error on %s. ERR=%s.\n" msgstr "" -#: src/dird/ua_tree.c:90 -msgid "mark dir/file to be restored recursively, wildcards allowed" +#: src/stored/btape.c:1976 +#, c-format +msgid "Bad status from read %d. ERR=%s\n" msgstr "" -#: src/dird/ua_tree.c:91 -msgid "mark directory name to be restored (no files)" +#: src/stored/btape.c:1979 src/stored/btape.c:1993 src/stored/btape.c:2057 +#: src/stored/btape.c:2069 src/stored/btape.c:2082 src/stored/btape.c:2098 +#, c-format +msgid "1 block of %d bytes in file %d\n" msgstr "" -#: src/dird/ua_tree.c:92 src/dird/ua_tree.c:93 -msgid "print current working directory" +#: src/stored/btape.c:1982 src/stored/btape.c:1996 src/stored/btape.c:2060 +#: src/stored/btape.c:2072 src/stored/btape.c:2085 src/stored/btape.c:2101 +#, c-format +msgid "%d blocks of %d bytes in file %d\n" msgstr "" -#: src/dird/ua_tree.c:94 -msgid "unmark dir/file to be restored recursively in dir" +#: src/stored/btape.c:2004 src/stored/btape.c:2076 +#, c-format +msgid "End of File mark.\n" msgstr "" -#: src/dird/ua_tree.c:95 -msgid "unmark directory name only no recursion" +#: src/stored/btape.c:2025 src/stored/btape.c:2129 +#, c-format +msgid "Total files=%d, blocks=%d, bytes = %s\n" msgstr "" -#: src/dird/ua_tree.c:96 -msgid "quit and do not do restore" +#: src/stored/btape.c:2089 +#, c-format +msgid "Short block read.\n" msgstr "" -#: src/dird/ua_tree.c:118 -msgid "" -"\n" -"You are now entering file selection mode where you add (mark) and\n" -"remove (unmark) files to be restored. No files are initially added, unless\n" -"you used the \"all\" keyword on the command line.\n" -"Enter \"done\" to leave this mode.\n" -"\n" +#: src/stored/btape.c:2092 +#, c-format +msgid "Error reading block. ERR=%s\n" msgstr "" -#: src/dird/ua_tree.c:129 src/dird/ua_tree.c:831 +#: src/stored/btape.c:2116 #, c-format -msgid "cwd is: %s\n" +msgid "" +"Block=%u file,blk=%u,%u blen=%u First rec FI=%s SessId=%u SessTim=%u Strm=%s " +"rlen=%d\n" msgstr "" -#: src/dird/ua_tree.c:138 src/dird/ua_tree.c:157 +#: src/stored/btape.c:2138 #, c-format -msgid "Invalid command \"%s\". Enter \"done\" to exit.\n" +msgid "Device status: %u. ERR=%s\n" msgstr "" -#: src/dird/ua_tree.c:227 +#: src/stored/btape.c:2170 #, c-format msgid "" -"Something is wrong with the Delta sequence of %s, skiping new parts. Current " -"sequence is %d\n" -msgstr "" - -#: src/dird/ua_tree.c:373 src/dird/ua_tree.c:385 src/dird/ua_tree.c:402 -msgid "No files marked.\n" +"\n" +"This command simulates Bacula writing to a tape.\n" +"It requires either one or two blank tapes, which it\n" +"will label and write.\n" +"\n" +"If you have an autochanger configured, it will use\n" +"the tapes that are in slots 1 and 2, otherwise, you will\n" +"be prompted to insert the tapes when necessary.\n" +"\n" +"It will print a status approximately\n" +"every 322 MB, and write an EOF every %s. If you have\n" +"selected the simple test option, after writing the first tape\n" +"it will rewind it and re-read the last block written.\n" +"\n" +"If you have selected the multiple tape test, when the first tape\n" +"fills, it will ask for a second, and after writing a few more \n" +"blocks, it will stop. Then it will begin re-reading the\n" +"two tapes.\n" +"\n" +"This may take a long time -- hours! ...\n" +"\n" msgstr "" -#: src/dird/ua_tree.c:387 -msgid "1 file marked.\n" +#: src/stored/btape.c:2188 +msgid "" +"Do you want to run the simplified test (s) with one tape\n" +"or the complete multiple tape (m) test: (s/m) " msgstr "" -#: src/dird/ua_tree.c:389 -#, c-format -msgid "%s files marked.\n" +#: src/stored/btape.c:2191 +msgid "Simple test (single tape) selected.\n" msgstr "" -#: src/dird/ua_tree.c:417 -msgid "No directories marked.\n" +#: src/stored/btape.c:2194 +msgid "Multiple tape test selected.\n" msgstr "" -#: src/dird/ua_tree.c:419 -msgid "1 directory marked.\n" +#: src/stored/btape.c:2236 +msgid "Wrote Start of Session label.\n" msgstr "" -#: src/dird/ua_tree.c:421 +#: src/stored/btape.c:2255 #, c-format -msgid "%s directories marked.\n" +msgid "%s Begin writing Bacula records to tape ...\n" msgstr "" -#: src/dird/ua_tree.c:442 +#: src/stored/btape.c:2257 #, c-format -msgid "%s total files/dirs. %s marked to be restored.\n" +msgid "%s Begin writing Bacula records to first tape ...\n" msgstr "" -#: src/dird/ua_tree.c:453 -msgid "No file specification given.\n" +#: src/stored/btape.c:2283 +msgid "Flush block failed.\n" msgstr "" -#: src/dird/ua_tree.c:674 +#: src/stored/btape.c:2297 #, c-format -msgid "Node %s has no children.\n" +msgid "Wrote block=%u, file,blk=%u,%u VolBytes=%s rate=%sB/s\n" msgstr "" -#: src/dird/ua_tree.c:767 +#: src/stored/btape.c:2308 #, c-format -msgid "%d total files; %d marked to be restored; %s bytes.\n" +msgid "%s Flush block, write EOF\n" msgstr "" -#: src/dird/ua_tree.c:778 src/stored/btape.c:2949 -#, c-format -msgid "" -" Command Description\n" -" ======= ===========\n" +#: src/stored/btape.c:2317 +msgid "Wrote 1000 blocks on second tape. Done.\n" msgstr "" -#: src/dird/ua_tree.c:801 -msgid "Too few or too many arguments. Try using double quotes.\n" +#: src/stored/btape.c:2322 +msgid "Not OK\n" msgstr "" -#: src/dird/ua_tree.c:814 -msgid "Invalid path given.\n" +#: src/stored/btape.c:2346 +msgid "Job canceled.\n" msgstr "" -#: src/dird/ua_tree.c:850 src/dird/ua_tree.c:862 -msgid "No files unmarked.\n" +#: src/stored/btape.c:2357 +msgid "Set ok=false after write_block_to_device.\n" msgstr "" -#: src/dird/ua_tree.c:864 -msgid "1 file unmarked.\n" +#: src/stored/btape.c:2361 +msgid "Wrote End of Session label.\n" msgstr "" -#: src/dird/ua_tree.c:867 +#: src/stored/btape.c:2385 #, c-format -msgid "%s files unmarked.\n" +msgid "Wrote state file last_block_num1=%d last_block_num2=%d\n" msgstr "" -#: src/dird/ua_tree.c:878 src/dird/ua_tree.c:895 -msgid "No directories unmarked.\n" +#: src/stored/btape.c:2389 +#, c-format +msgid "Could not create state file: %s ERR=%s\n" msgstr "" -#: src/dird/ua_tree.c:897 -msgid "1 directory unmarked.\n" +#: src/stored/btape.c:2400 +#, c-format +msgid "" +"\n" +"\n" +"%s Done filling tape at %d:%d. Now beginning re-read of tape ...\n" msgstr "" -#: src/dird/ua_tree.c:899 +#: src/stored/btape.c:2403 #, c-format -msgid "%d directories unmarked.\n" +msgid "" +"\n" +"\n" +"%s Done filling tapes at %d:%d. Now beginning re-read of first tape ...\n" msgstr "" -#: src/dird/dird_conf.c:567 src/tray-monitor/tray_conf.c:168 -#: src/qt-console/tray-monitor/tray_conf.cpp:168 -#, c-format -msgid "No %s resource defined\n" +#: src/stored/btape.c:2409 +msgid "do_unfill failed.\n" msgstr "" -#: src/dird/dird_conf.c:576 +#: src/stored/btape.c:2414 #, c-format -msgid "Director: name=%s MaxJobs=%d FDtimeout=%s SDtimeout=%s\n" +msgid "%s: Error during test.\n" +msgstr "" + +#: src/stored/btape.c:2449 +msgid "" +"\n" +"The state file level has changed. You must redo\n" +"the fill command.\n" msgstr "" -#: src/dird/dird_conf.c:581 +#: src/stored/btape.c:2456 #, c-format -msgid " query_file=%s\n" +msgid "" +"\n" +"Could not find the state file: %s ERR=%s\n" +"You must redo the fill command.\n" msgstr "" -#: src/dird/dird_conf.c:584 src/dird/dird_conf.c:604 src/dird/dird_conf.c:621 -#: src/dird/dird_conf.c:689 src/dird/dird_conf.c:693 src/dird/dird_conf.c:697 -#: src/dird/dird_conf.c:730 src/dird/dird_conf.c:753 src/dird/dird_conf.c:757 -#: src/dird/dird_conf.c:761 src/dird/dird_conf.c:765 src/dird/dird_conf.c:769 -#: src/dird/dird_conf.c:782 src/dird/dird_conf.c:1018 -#: src/dird/dird_conf.c:1025 -msgid " --> " +#: src/stored/btape.c:2522 +msgid "Mount first tape. Press enter when ready: " msgstr "" -#: src/dird/dird_conf.c:589 -#, c-format -msgid "Console: name=%s SSL=%d\n" +#: src/stored/btape.c:2538 +msgid "Rewinding.\n" msgstr "" -#: src/dird/dird_conf.c:594 +#: src/stored/btape.c:2543 #, c-format -msgid "Counter: name=%s min=%d max=%d cur=%d wrapcntr=%s\n" +msgid "Reading the first 10000 records from %u:%u.\n" msgstr "" -#: src/dird/dird_conf.c:599 +#: src/stored/btape.c:2547 src/stored/btape.c:2615 #, c-format -msgid "Counter: name=%s min=%d max=%d\n" +msgid "Reposition from %u:%u to %u:%u\n" msgstr "" -#: src/dird/dird_conf.c:613 +#: src/stored/btape.c:2550 src/stored/btape.c:2602 src/stored/btape.c:2618 #, c-format -msgid "Client: name=%s address=%s FDport=%d MaxJobs=%u\n" +msgid "Reposition error. ERR=%s\n" msgstr "" -#: src/dird/dird_conf.c:616 +#: src/stored/btape.c:2553 #, c-format -msgid " JobRetention=%s FileRetention=%s AutoPrune=%d\n" +msgid "Reading block %u.\n" msgstr "" -#: src/dird/dird_conf.c:629 +#: src/stored/btape.c:2555 src/stored/btape.c:2607 src/stored/btape.c:2623 #, c-format -msgid "" -"Device: name=%s ok=%d num_writers=%d max_writers=%d\n" -" reserved=%d open=%d append=%d read=%d labeled=%d offline=%d autochgr=" -"%d\n" -" poolid=%s volname=%s MediaType=%s\n" +msgid "Error reading block: ERR=%s\n" msgstr "" -#: src/dird/dird_conf.c:643 -#, c-format +#: src/stored/btape.c:2560 msgid "" -"Storage: name=%s address=%s SDport=%d MaxJobs=%u\n" -" DeviceName=%s MediaType=%s StorageId=%s\n" +"\n" +"The last block on the tape matches. Test succeeded.\n" +"\n" msgstr "" -#: src/dird/dird_conf.c:656 -#, c-format +#: src/stored/btape.c:2563 msgid "" -"Catalog: name=%s address=%s DBport=%d db_name=%s\n" -" db_driver=%s db_user=%s MutliDBConn=%d\n" +"\n" +"The last block of the first tape matches.\n" +"\n" msgstr "" -#: src/dird/dird_conf.c:669 -#, c-format -msgid "%s: name=%s JobType=%d level=%s Priority=%d Enabled=%d\n" +#: src/stored/btape.c:2587 +msgid "Mount second tape. Press enter when ready: " msgstr "" -#: src/dird/dird_conf.c:670 -msgid "JobDefs" +#: src/stored/btape.c:2600 +#, c-format +msgid "Reposition from %u:%u to 0:1\n" msgstr "" -#: src/dird/dird_conf.c:674 +#: src/stored/btape.c:2605 src/stored/btape.c:2621 #, c-format -msgid "" -" MaxJobs=%u Resched=%d Times=%d Interval=%s Spool=%d WritePartAfterJob=" -"%d\n" +msgid "Reading block %d.\n" msgstr "" -#: src/dird/dird_conf.c:680 -#, c-format -msgid " SpoolSize=%s\n" +#: src/stored/btape.c:2611 +msgid "" +"\n" +"The first block on the second tape matches.\n" +"\n" msgstr "" -#: src/dird/dird_conf.c:683 -#, c-format -msgid " Accurate=%d\n" +#: src/stored/btape.c:2627 +msgid "" +"\n" +"The last block on the second tape matches. Test succeeded.\n" +"\n" msgstr "" -#: src/dird/dird_conf.c:686 +#: src/stored/btape.c:2645 #, c-format -msgid " SelectionType=%d\n" +msgid "10000 records read now at %d:%d\n" msgstr "" -#: src/dird/dird_conf.c:701 -#, c-format -msgid " --> Where=%s\n" +#: src/stored/btape.c:2671 src/stored/btape.c:2682 src/stored/btape.c:2727 +msgid "Last block written" msgstr "" -#: src/dird/dird_conf.c:704 -#, c-format -msgid " --> RegexWhere=%s\n" +#: src/stored/btape.c:2673 src/stored/btape.c:2683 +msgid "Block read back" msgstr "" -#: src/dird/dird_conf.c:707 +#: src/stored/btape.c:2674 #, c-format -msgid " --> Bootstrap=%s\n" +msgid "" +"\n" +"\n" +"The blocks differ at byte %u\n" msgstr "" -#: src/dird/dird_conf.c:710 -#, c-format -msgid " --> WriteBootstrap=%s\n" +#: src/stored/btape.c:2675 +msgid "" +"\n" +"\n" +"!!!! The last block written and the block\n" +"that was read back differ. The test FAILED !!!!\n" +"This must be corrected before you use Bacula\n" +"to write multi-tape Volumes.!!!!\n" msgstr "" -#: src/dird/dird_conf.c:713 +#: src/stored/btape.c:2711 #, c-format -msgid " --> PluginOptions=%s\n" +msgid "Last block at: %u:%u this_dev_block_num=%d\n" msgstr "" -#: src/dird/dird_conf.c:716 +#: src/stored/btape.c:2725 #, c-format -msgid " --> MaxRunTime=%u\n" +msgid "Block not written: FileIndex=%u blk_block=%u Size=%u\n" msgstr "" -#: src/dird/dird_conf.c:719 -#, c-format -msgid " --> MaxWaitTime=%u\n" +#: src/stored/btape.c:2729 +msgid "Block not written" msgstr "" -#: src/dird/dird_conf.c:722 +#: src/stored/btape.c:2744 #, c-format -msgid " --> MaxStartDelay=%u\n" +msgid "End of tape %d:%d. Volume Bytes=%s. Write rate = %sB/s\n" msgstr "" -#: src/dird/dird_conf.c:725 +#: src/stored/btape.c:2754 src/stored/bcopy.c:272 src/stored/bcopy.c:280 +#: src/stored/bcopy.c:308 #, c-format -msgid " --> MaxRunSchedTime=%u\n" +msgid "Cannot fixup device error. %s\n" msgstr "" -#: src/dird/dird_conf.c:737 -#, c-format -msgid " --> Base %s\n" +#: src/stored/btape.c:2795 +msgid "Test writing blocks of 64512 bytes to tape.\n" msgstr "" -#: src/dird/dird_conf.c:743 src/lib/runscript.c:297 -msgid " --> RunScript\n" +#: src/stored/btape.c:2797 +msgid "How many blocks do you want to write? (1000): " msgstr "" -#: src/dird/dird_conf.c:744 src/lib/runscript.c:298 +#: src/stored/btape.c:2814 #, c-format -msgid " --> Command=%s\n" +msgid "Begin writing %d Bacula blocks to tape ...\n" msgstr "" -#: src/dird/dird_conf.c:745 src/lib/runscript.c:299 +#: src/stored/btape.c:2857 #, c-format -msgid " --> Target=%s\n" +msgid "Begin writing raw blocks of %u bytes.\n" msgstr "" -#: src/dird/dird_conf.c:746 src/lib/runscript.c:300 -#, c-format -msgid " --> RunOnSuccess=%u\n" +#: src/stored/btape.c:2888 +msgid "test autochanger" msgstr "" -#: src/dird/dird_conf.c:747 src/lib/runscript.c:301 -#, c-format -msgid " --> RunOnFailure=%u\n" +#: src/stored/btape.c:2889 +msgid "backspace file" msgstr "" -#: src/dird/dird_conf.c:748 src/lib/runscript.c:302 -#, c-format -msgid " --> FailJobOnError=%u\n" +#: src/stored/btape.c:2890 +msgid "backspace record" msgstr "" -#: src/dird/dird_conf.c:749 src/lib/runscript.c:303 -#, c-format -msgid " --> RunWhen=%u\n" +#: src/stored/btape.c:2891 +msgid "list device capabilities" msgstr "" -#: src/dird/dird_conf.c:775 -#, c-format -msgid " --> Run=%s\n" +#: src/stored/btape.c:2892 +msgid "clear tape errors" msgstr "" -#: src/dird/dird_conf.c:779 -#, c-format -msgid " --> SelectionPattern=%s\n" +#: src/stored/btape.c:2893 +msgid "go to end of Bacula data for append" msgstr "" -#: src/dird/dird_conf.c:793 -#, c-format -msgid "FileSet: name=%s\n" +#: src/stored/btape.c:2894 +msgid "go to the physical end of medium" msgstr "" -#: src/dird/dird_conf.c:887 src/dird/dird_conf.c:966 -#, c-format -msgid "Schedule: name=%s\n" +#: src/stored/btape.c:2895 +msgid "fill tape, write onto second volume" msgstr "" -#: src/dird/dird_conf.c:892 -#, c-format -msgid " --> Run Level=%s\n" +#: src/stored/btape.c:2896 +msgid "read filled tape" msgstr "" -#: src/dird/dird_conf.c:893 -msgid " hour=" +#: src/stored/btape.c:2897 +msgid "forward space a file" msgstr "" -#: src/dird/dird_conf.c:902 -msgid " mday=" +#: src/stored/btape.c:2898 +msgid "forward space a record" msgstr "" -#: src/dird/dird_conf.c:911 -msgid " month=" +#: src/stored/btape.c:2899 +msgid "print this command" msgstr "" -#: src/dird/dird_conf.c:920 -msgid " wday=" +#: src/stored/btape.c:2900 +msgid "write a Bacula label to the tape" msgstr "" -#: src/dird/dird_conf.c:929 -msgid " wom=" +#: src/stored/btape.c:2901 +msgid "load a tape" msgstr "" -#: src/dird/dird_conf.c:938 -msgid " woy=" +#: src/stored/btape.c:2902 +msgid "quit btape" msgstr "" -#: src/dird/dird_conf.c:947 -#, c-format -msgid " mins=%d\n" +#: src/stored/btape.c:2903 +msgid "use write() to fill tape" msgstr "" -#: src/dird/dird_conf.c:949 src/dird/dird_conf.c:953 src/dird/dird_conf.c:957 -msgid " --> " +#: src/stored/btape.c:2904 +msgid "read and print the Bacula tape label" msgstr "" -#: src/dird/dird_conf.c:974 -#, c-format -msgid "Pool: name=%s PoolType=%s\n" +#: src/stored/btape.c:2905 +msgid "test record handling functions" msgstr "" -#: src/dird/dird_conf.c:976 -#, c-format -msgid " use_cat=%d use_once=%d cat_files=%d\n" +#: src/stored/btape.c:2906 +msgid "rewind the tape" msgstr "" -#: src/dird/dird_conf.c:979 -#, c-format -msgid " max_vols=%d auto_prune=%d VolRetention=%s\n" +#: src/stored/btape.c:2907 +msgid "read() tape block by block to EOT and report" msgstr "" -#: src/dird/dird_conf.c:982 -#, c-format -msgid " VolUse=%s recycle=%d LabelFormat=%s\n" +#: src/stored/btape.c:2908 +msgid "Bacula read block by block to EOT and report" msgstr "" -#: src/dird/dird_conf.c:986 -#, c-format -msgid " CleaningPrefix=%s LabelType=%d\n" +#: src/stored/btape.c:2909 +msgid "" +"[file_size=n(GB)|nb_file=3|skip_zero|skip_random|skip_raw|skip_block] report " +"drive speed" msgstr "" -#: src/dird/dird_conf.c:988 -#, c-format -msgid " RecyleOldest=%d PurgeOldest=%d ActionOnPurge=%d\n" +#: src/stored/btape.c:2910 +msgid "print tape status" msgstr "" -#: src/dird/dird_conf.c:992 -#, c-format -msgid " MaxVolJobs=%d MaxVolFiles=%d MaxVolBytes=%s\n" +#: src/stored/btape.c:2911 +msgid "General test Bacula tape functions" msgstr "" -#: src/dird/dird_conf.c:996 -#, c-format -msgid " MigTime=%s MigHiBytes=%s MigLoBytes=%s\n" +#: src/stored/btape.c:2912 +msgid "write an EOF on the tape" msgstr "" -#: src/dird/dird_conf.c:1000 -#, c-format -msgid " JobRetention=%s FileRetention=%s\n" +#: src/stored/btape.c:2913 +msgid "write a single Bacula block" msgstr "" -#: src/dird/dird_conf.c:1004 -#, c-format -msgid " NextPool=%s\n" +#: src/stored/btape.c:2914 +msgid "read a single record" msgstr "" -#: src/dird/dird_conf.c:1007 -#, c-format -msgid " RecyclePool=%s\n" +#: src/stored/btape.c:2915 +msgid "read a single Bacula block" msgstr "" -#: src/dird/dird_conf.c:1010 -#, c-format -msgid " ScratchPool=%s\n" +#: src/stored/btape.c:2916 +msgid "quick fill command" msgstr "" -#: src/dird/dird_conf.c:1013 +#: src/stored/btape.c:2937 #, c-format -msgid " Catalog=%s\n" +msgid "\"%s\" is an invalid command\n" msgstr "" -#: src/dird/dird_conf.c:1033 +#: src/stored/btape.c:2946 #, c-format -msgid "Messages: name=%s\n" +msgid "Interactive commands:\n" msgstr "" -#: src/dird/dird_conf.c:1035 +#: src/stored/btape.c:2947 src/dird/ua_tree.c:794 #, c-format -msgid " mailcmd=%s\n" +msgid "" +" Command Description\n" +" ======= ===========\n" msgstr "" -#: src/dird/dird_conf.c:1037 +#: src/stored/btape.c:2957 #, c-format -msgid " opcmd=%s\n" +msgid "" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: btape \n" +" -b specify bootstrap file\n" +" -c set configuration file to file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -p proceed inspite of I/O errors\n" +" -s turn off signals\n" +" -v be verbose\n" +" -? print this message.\n" +"\n" msgstr "" -#: src/dird/dird_conf.c:1041 src/tray-monitor/tray_conf.c:199 -#: src/qt-console/tray-monitor/tray_conf.cpp:199 +#: src/stored/btape.c:3045 #, c-format -msgid "Unknown resource type %d in dump_resource.\n" +msgid "Mount second Volume on device %s and press return when ready: " msgstr "" -#: src/dird/dird_conf.c:1372 src/tray-monitor/tray_conf.c:257 -#: src/qt-console/tray-monitor/tray_conf.cpp:257 +#: src/stored/btape.c:3048 src/stored/bls.c:478 src/stored/bextract.c:609 +#: src/stored/bscan.c:1354 src/stored/bcopy.c:365 #, c-format -msgid "Unknown resource type %d in free_resource.\n" +msgid "Mount Volume \"%s\" on device %s and press return when ready: " msgstr "" -#: src/dird/dird_conf.c:1404 src/dird/dird_conf.c:1419 -#: src/tray-monitor/tray_conf.c:288 src/wx-console/console_conf.c:265 -#: src/console/console_conf.c:259 src/filed/filed_conf.c:361 -#: src/qt-console/tray-monitor/tray_conf.cpp:288 -#: src/qt-console/bat_conf.cpp:265 +#: src/stored/btape.c:3073 #, c-format -msgid "%s item is required in %s resource, but not found.\n" +msgid "Mount blank Volume on device %s and press return when ready: " msgstr "" -#: src/dird/dird_conf.c:1410 src/tray-monitor/tray_conf.c:294 -#: src/lib/parse_conf.c:225 src/qt-console/tray-monitor/tray_conf.cpp:294 +#: src/stored/btape.c:3093 #, c-format -msgid "Too many items in %s resource\n" +msgid "End of Volume \"%s\" %d records.\n" msgstr "" -#: src/dird/dird_conf.c:1450 +#: src/stored/btape.c:3107 #, c-format -msgid "Cannot find Pool resource %s\n" +msgid "Read block=%u, VolBytes=%s rate=%sB/s\n" msgstr "" -#: src/dird/dird_conf.c:1461 +#: src/stored/btape.c:3120 #, c-format -msgid "Cannot find Console resource %s\n" +msgid "Cannot open Dev=%s, Vol=%s\n" msgstr "" -#: src/dird/dird_conf.c:1467 src/stored/stored_conf.c:611 -#: src/filed/filed_conf.c:381 +#: src/stored/record_read.c:164 src/stored/record.c:658 #, c-format -msgid "Cannot find Director resource %s\n" +msgid "Sanity check failed. maxlen=%d datalen=%d. Block discarded.\n" msgstr "" -#: src/dird/dird_conf.c:1474 src/stored/stored_conf.c:617 -#, c-format -msgid "Cannot find Storage resource %s\n" +#: src/stored/spool.c:71 +msgid "Spooling statistics:\n" msgstr "" -#: src/dird/dird_conf.c:1483 +#: src/stored/spool.c:74 #, c-format -msgid "Cannot find Job resource %s\n" +msgid "" +"Data spooling: %u active jobs, %s bytes; %u total jobs, %s max bytes/job.\n" msgstr "" -#: src/dird/dird_conf.c:1533 +#: src/stored/spool.c:82 #, c-format -msgid "Cannot find Counter resource %s\n" +msgid "Attr spooling: %u active jobs, %s bytes; %u total jobs, %s max bytes.\n" msgstr "" -#: src/dird/dird_conf.c:1541 src/filed/filed_conf.c:387 -#, c-format -msgid "Cannot find Client resource %s\n" +#: src/stored/spool.c:100 +msgid "Spooling data ...\n" msgstr "" -#: src/dird/dird_conf.c:1554 +#: src/stored/spool.c:126 #, c-format -msgid "Cannot find Schedule resource %s\n" +msgid "Bad return from despool WroteVol=%d\n" msgstr "" -#: src/dird/dird_conf.c:1559 src/dird/dird_conf.c:1619 -#: src/tray-monitor/tray_conf.c:314 src/tray-monitor/tray_conf.c:352 -#: src/qt-console/tray-monitor/tray_conf.cpp:314 -#: src/qt-console/tray-monitor/tray_conf.cpp:352 +#: src/stored/spool.c:159 #, c-format -msgid "Unknown resource type %d in save_resource.\n" +msgid "Open data spool file %s failed: ERR=%s\n" msgstr "" -#: src/dird/dird_conf.c:1634 -#, c-format -msgid "Name item is required in %s resource, but not found.\n" +#: src/stored/spool.c:187 +msgid "Despooling zero bytes. Your disk is probably FULL!\n" msgstr "" -#: src/dird/dird_conf.c:1642 src/tray-monitor/tray_conf.c:372 -#: src/wx-console/console_conf.c:328 src/console/console_conf.c:322 -#: src/filed/filed_conf.c:446 src/qt-console/tray-monitor/tray_conf.cpp:372 -#: src/qt-console/bat_conf.cpp:334 +#: src/stored/spool.c:196 #, c-format -msgid "Attempt to define second %s resource named \"%s\" is not permitted.\n" +msgid "Committing spooled data to Volume \"%s\". Despooling %s bytes ...\n" msgstr "" -#: src/dird/dird_conf.c:1647 +#: src/stored/spool.c:201 #, c-format -msgid "Inserting %s res: %s index=%d pass=%d\n" +msgid "Writing spooled data to Volume. Despooling %s bytes ...\n" msgstr "" -#: src/dird/dird_conf.c:1660 +#: src/stored/spool.c:272 src/stored/acquire.c:517 src/stored/block_util.c:552 +#: src/stored/block_util.c:622 src/stored/block_util.c:652 #, c-format -msgid "Expected one of: %s, got: %s" +msgid "Could not create JobMedia record for Volume=\"%s\" Job=%s\n" msgstr "" -#: src/dird/dird_conf.c:1732 +#: src/stored/spool.c:290 #, c-format -msgid "Expected a Migration Job Type keyword, got: %s" +msgid "" +"Despooling elapsed time = %02d:%02d:%02d, Transfer rate = %s Bytes/second\n" msgstr "" -#: src/dird/dird_conf.c:1758 +#: src/stored/spool.c:299 src/stored/spool.c:500 src/stored/spool.c:546 #, c-format -msgid "Expected a Job Type keyword, got: %s" +msgid "Ftruncate spool file failed: ERR=%s\n" msgstr "" -#: src/dird/dird_conf.c:1782 +#: src/stored/spool.c:358 #, c-format -msgid "Expected a Job Level keyword, got: %s" +msgid "Spool header read error. ERR=%s\n" msgstr "" -#: src/dird/dird_conf.c:1802 +#: src/stored/spool.c:361 #, c-format -msgid "Expected a Restore replacement option, got: %s" +msgid "Spool read error. Wanted %u bytes, got %d\n" msgstr "" -#: src/dird/dird_conf.c:1852 src/dird/dird_conf.c:1968 -#: src/lib/parse_conf.c:761 src/lib/parse_conf.c:777 src/lib/ini.c:593 +#: src/stored/spool.c:362 #, c-format -msgid "Expect %s, got: %s" +msgid "Spool header read error. Wanted %u bytes, got %d\n" msgstr "" -#: src/dird/dird_conf.c:1874 src/lib/parse_conf.c:478 +#: src/stored/spool.c:369 src/stored/spool.c:370 #, c-format -msgid "Could not find config Resource %s referenced on line %d : %s\n" +msgid "Spool block too big. Max %u bytes, got %u\n" msgstr "" -#: src/dird/getmsg.c:176 +#: src/stored/spool.c:376 src/stored/spool.c:377 #, c-format -msgid "bget_dirmsg: unknown bnet signal %d\n" -msgstr "" - -#: src/dird/getmsg.c:194 src/dird/getmsg.c:200 src/dird/getmsg.c:213 -#: src/dird/getmsg.c:247 src/dird/getmsg.c:269 src/dird/getmsg.c:295 -#, c-format -msgid "Malformed message: %s\n" +msgid "Spool data read error. Wanted %u bytes, got %d\n" msgstr "" -#: src/dird/getmsg.c:367 +#: src/stored/spool.c:431 #, c-format -msgid "Bad response to %s command: wanted %s, got %s\n" +msgid "" +"User specified Job spool size reached: JobSpoolSize=%s MaxJobSpoolSize=%s\n" msgstr "" -#: src/dird/getmsg.c:372 +#: src/stored/spool.c:436 #, c-format -msgid "Socket error on %s command: ERR=%s\n" -msgstr "" - -#: src/dird/ua_restore.c:148 -msgid "\"RegexWhere\" specification not authorized.\n" -msgstr "" - -#: src/dird/ua_restore.c:155 -msgid "\"where\" specification not authorized.\n" -msgstr "" - -#: src/dird/ua_restore.c:177 msgid "" -"No Restore Job Resource found in bacula-dir.conf.\n" -"You must create at least one before running this command.\n" -msgstr "" - -#: src/dird/ua_restore.c:194 -msgid "Restore not done.\n" +"User specified Device spool size reached: DevSpoolSize=%s MaxDevSpoolSize=" +"%s\n" msgstr "" -#: src/dird/ua_restore.c:205 -msgid "Unable to construct a valid BSR. Cannot continue.\n" +#: src/stored/spool.c:443 +msgid "Bad return from despool in write_block.\n" msgstr "" -#: src/dird/ua_restore.c:209 src/dird/ua_restore.c:221 -msgid "No files selected to be restored.\n" +#: src/stored/spool.c:451 +msgid "Spooling data again ...\n" msgstr "" -#: src/dird/ua_restore.c:215 -msgid "" -"\n" -"1 file selected to be restored.\n" -"\n" +#: src/stored/spool.c:483 +#, c-format +msgid "Error writing header to spool file. ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:217 +#: src/stored/spool.c:488 #, c-format msgid "" -"\n" -"%s files selected to be restored.\n" -"\n" +"Error writing header to spool file. Disk probably full. Attempting recovery. " +"Wanted to write=%d got=%d\n" msgstr "" -#: src/dird/ua_restore.c:236 -msgid "No Client resource found!\n" +#: src/stored/spool.c:506 src/stored/spool.c:552 +msgid "Fatal despooling error." msgstr "" -#: src/dird/ua_restore.c:333 -msgid "The restore will use the following job(s) as Base\n" +#: src/stored/spool.c:514 +msgid "Retrying after header spooling error failed.\n" msgstr "" -#: src/dird/ua_restore.c:354 +#: src/stored/spool.c:530 #, c-format -msgid "Missing value for keyword: %s\n" +msgid "Error writing data to spool file. ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:434 -msgid "List last 20 Jobs run" +#: src/stored/spool.c:563 +msgid "Retrying after data spooling error failed.\n" msgstr "" -#: src/dird/ua_restore.c:435 -msgid "List Jobs where a given File is saved" +#: src/stored/spool.c:650 +msgid "Network error on BlastAttributes.\n" msgstr "" -#: src/dird/ua_restore.c:436 -msgid "Enter list of comma separated JobIds to select" +#: src/stored/spool.c:674 src/stored/spool.c:682 +#, c-format +msgid "Fseek on attributes file failed: ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:437 -msgid "Enter SQL list command" +#: src/stored/spool.c:694 +#, c-format +msgid "Sending spooled attrs to the Director. Despooling %s bytes ...\n" msgstr "" -#: src/dird/ua_restore.c:438 -msgid "Select the most recent backup for a client" +#: src/stored/spool.c:720 +#, c-format +msgid "fopen attr spool file %s failed: ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:439 -msgid "Select backup for a client before a specified time" +#: src/stored/record.c:63 src/stored/record_util.c:61 +#, c-format +msgid "unknown: %d" msgstr "" -#: src/dird/ua_restore.c:440 -msgid "Enter a list of files to restore" +#: src/stored/record.c:380 +msgid "Damaged buffer\n" msgstr "" -#: src/dird/ua_restore.c:441 -msgid "Enter a list of files to restore before a specified time" +#: src/stored/bls.c:68 +#, c-format +msgid "" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: bls [options] \n" +" -b specify a bootstrap file\n" +" -c specify a Storage configuration file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -e exclude list\n" +" -i include list\n" +" -j list jobs\n" +" -k list blocks\n" +" (no j or k option) list saved files\n" +" -L dump label\n" +" -p proceed inspite of errors\n" +" -v be verbose\n" +" -V specify Volume names (separated by |)\n" +" -? print this message\n" +"\n" msgstr "" -#: src/dird/ua_restore.c:442 -msgid "Find the JobIds of the most recent backup for a client" +#: src/stored/bls.c:138 src/stored/bextract.c:141 +#, c-format +msgid "Could not open exclude file: %s, ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:443 -msgid "Find the JobIds for a backup for a client before a specified time" +#: src/stored/bls.c:153 src/stored/bextract.c:156 +#, c-format +msgid "Could not open include file: %s, ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:444 -msgid "Enter a list of directories to restore for found JobIds" +#: src/stored/bls.c:200 +msgid "No archive name specified\n" msgstr "" -#: src/dird/ua_restore.c:445 -msgid "Select full restore to a specified Job date" +#: src/stored/bls.c:238 +#, c-format +msgid "" +"\n" +"Warning, this Volume is a continuation of Volume %s\n" msgstr "" -#: src/dird/ua_restore.c:446 src/dird/ua_status.c:862 src/stored/status.c:611 -#: src/filed/status.c:373 src/wx-console/wxbconfigpanel.cpp:220 -msgid "Cancel" +#: src/stored/bls.c:281 +#, c-format +msgid "Got EOM at file %u on device %s, Volume \"%s\"\n" msgstr "" -#: src/dird/ua_restore.c:491 +#: src/stored/bls.c:292 #, c-format -msgid "Unknown keyword: %s\n" +msgid "Mounted Volume \"%s\".\n" msgstr "" -#: src/dird/ua_restore.c:520 src/dird/ua_update.c:957 +#: src/stored/bls.c:294 #, c-format -msgid "Improper date format: %s\n" +msgid "End of file %u on device %s, Volume \"%s\"\n" msgstr "" -#: src/dird/ua_restore.c:560 +#: src/stored/bls.c:318 #, c-format -msgid "Error: Pool resource \"%s\" access not allowed.\n" +msgid "" +"File:blk=%u:%u blk_num=%u blen=%u First rec FI=%s SessId=%u SessTim=%u Strm=" +"%s rlen=%d\n" msgstr "" -#: src/dird/ua_restore.c:576 -msgid "" -"\n" -"First you select one or more JobIds that contain files\n" -"to be restored. You will be presented several methods\n" -"of specifying the JobIds. Then you will be allowed to\n" -"select which files from those JobIds are to be restored.\n" -"\n" +#: src/stored/bls.c:327 +#, c-format +msgid "Block: %d size=%d\n" msgstr "" -#: src/dird/ua_restore.c:589 -msgid "To select the JobIds, you have the following choices:\n" +#: src/stored/bls.c:385 src/stored/bextract.c:325 src/stored/bscan.c:674 +msgid "Cannot continue.\n" msgstr "" -#: src/dird/ua_restore.c:594 -msgid "Select item: " +#: src/stored/bls.c:387 +msgid "Attrib unpack error!\n" msgstr "" -#: src/dird/ua_restore.c:599 src/dird/ua_restore.c:634 -msgid "SQL query not authorized.\n" +#: src/stored/bls.c:398 +#, c-format +msgid "FileIndex=%d VolSessionId=%d VolSessionTime=%d Stream=%d DataLen=%d\n" msgstr "" -#: src/dird/ua_restore.c:612 -msgid "Enter Filename (no path):" +#: src/stored/bls.c:424 src/stored/bcopy.c:322 src/stored/read_records.c:387 +msgid "Fresh Volume Label" msgstr "" -#: src/dird/ua_restore.c:627 src/dird/ua_restore.c:735 -msgid "Enter JobId(s), comma separated, to restore: " +#: src/stored/bls.c:427 src/stored/bcopy.c:325 src/stored/read_records.c:390 +msgid "Volume Label" msgstr "" -#: src/dird/ua_restore.c:637 -msgid "Enter SQL list command: " +#: src/stored/bls.c:431 src/stored/label.c:1128 src/stored/bcopy.c:329 +msgid "Begin Job Session" msgstr "" -#: src/dird/ua_restore.c:671 src/dird/ua_restore.c:694 -msgid "" -"Enter file names with paths, or < to enter a filename\n" -"containing a list of file names with paths, and terminate\n" -"them with a blank line.\n" +#: src/stored/bls.c:436 src/stored/label.c:1131 src/stored/bcopy.c:333 +msgid "End Job Session" msgstr "" -#: src/dird/ua_restore.c:675 src/dird/ua_restore.c:698 -msgid "Enter full filename: " +#: src/stored/bls.c:440 src/stored/bcopy.c:338 +msgid "End of Medium" msgstr "" -#: src/dird/ua_restore.c:733 -#, c-format -msgid "You have already selected the following JobIds: %s\n" +#: src/stored/bls.c:443 +msgid "End of Physical Medium" msgstr "" -#: src/dird/ua_restore.c:751 -msgid "" -"Enter full directory names or start the name\n" -"with a < to indicate it is a filename containing a list\n" -"of directories and terminate them with a blank line.\n" +#: src/stored/bls.c:446 +msgid "Start of object" msgstr "" -#: src/dird/ua_restore.c:755 -msgid "Enter directory name: " +#: src/stored/bls.c:449 +msgid "End of object" msgstr "" -#: src/dird/ua_restore.c:771 -msgid "Enter JobId to get the state to restore: " +#: src/stored/bls.c:452 src/stored/label.c:1140 src/stored/bcopy.c:341 +msgid "Unknown" msgstr "" -#: src/dird/ua_restore.c:784 +#: src/stored/bls.c:459 src/stored/bcopy.c:347 src/stored/read_records.c:408 #, c-format -msgid "Selecting jobs to build the Full state at %s\n" +msgid "%s Record: VolSessionId=%d VolSessionTime=%d JobId=%d DataLen=%d\n" msgstr "" -#: src/dird/ua_restore.c:810 -msgid "Invalid JobId in list.\n" +#: src/stored/wait.c:121 +#, c-format +msgid "pthread timedwait error. ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:829 +#: src/stored/wait.c:227 #, c-format -msgid "Access to JobId=%s (Job \"%s\") not authorized. Not selected.\n" +msgid "JobId=%s, Job %s waiting to reserve a device.\n" msgstr "" -#: src/dird/ua_restore.c:842 -msgid "No Jobs selected.\n" +#: src/stored/wait.c:273 +#, c-format +msgid "JobId=%s, Job %s waiting device %s.\n" msgstr "" -#: src/dird/ua_restore.c:847 +#: src/stored/device.c:120 #, c-format -msgid "You have selected the following JobIds: %s\n" +msgid "End of medium on Volume \"%s\" Bytes=%s Blocks=%s at %s.\n" msgstr "" -#: src/dird/ua_restore.c:849 +#: src/stored/device.c:146 #, c-format -msgid "You have selected the following JobId: %s\n" +msgid "New volume \"%s\" mounted on device %s at %s.\n" msgstr "" -#: src/dird/ua_restore.c:859 -msgid "" -"The restored files will the most current backup\n" -"BEFORE the date you specify below.\n" -"\n" +#: src/stored/device.c:158 +#, c-format +msgid "write_block_to_device Volume label failed. ERR=%s" msgstr "" -#: src/dird/ua_restore.c:862 -msgid "Enter date as YYYY-MM-DD HH:MM:SS :" +#: src/stored/device.c:177 +#, c-format +msgid "write_block_to_device overflow block failed. ERR=%s" msgstr "" -#: src/dird/ua_restore.c:868 -msgid "Improper date format.\n" +#: src/stored/device.c:182 +#, c-format +msgid "Catastrophic error. Cannot write overflow block to device %s. ERR=%s" msgstr "" -#: src/dird/ua_restore.c:889 +#: src/stored/device.c:332 src/stored/tape_dev.c:160 #, c-format -msgid "Cannot open file %s: ERR=%s\n" +msgid "Unable to open device %s: ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:897 src/dird/ua_restore.c:901 +#: src/stored/device.c:334 #, c-format -msgid "Error occurred on line %d of file \"%s\"\n" +msgid "Unable to open archive %s: ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:945 src/dird/ua_restore.c:973 +#: src/stored/authenticate.c:65 #, c-format -msgid "No database record found for: %s\n" +msgid "I only authenticate Directors, not %d\n" msgstr "" -#: src/dird/ua_restore.c:961 -msgid "No JobId specified cannot continue.\n" +#: src/stored/authenticate.c:71 +#, c-format +msgid "Bad Hello command from Director at %s. Len=%d.\n" msgstr "" -#: src/dird/ua_restore.c:994 +#: src/stored/authenticate.c:85 src/filed/authenticate.c:76 #, c-format -msgid "No table found: %s\n" +msgid "Bad Hello command from Director at %s: %s\n" msgstr "" -#: src/dird/ua_restore.c:1052 +#: src/stored/authenticate.c:100 +#, c-format msgid "" -"\n" -"\n" -"For one or more of the JobIds selected, no files were found,\n" -"so file selection is not possible.\n" -"Most likely your retention policy pruned the files.\n" +"Connection from unknown Director %s at %s rejected.\n" +"Please see " msgstr "" -#: src/dird/ua_restore.c:1055 +#: src/stored/authenticate.c:137 msgid "" -"\n" -"Do you want to restore all the files? (yes|no): " +"Incorrect password given by Director.\n" +"Please see " msgstr "" -#: src/dird/ua_restore.c:1058 +#: src/stored/authenticate.c:145 src/stored/authenticate.c:258 +#: src/stored/authenticate.c:367 src/filed/authenticate.c:139 +#: src/filed/authenticate.c:267 msgid "" -"\n" -"Regexp matching files to restore? (empty to abort): " +"Authorization problem: Remote server did not advertize required TLS " +"support.\n" msgstr "" -#: src/dird/ua_restore.c:1074 +#: src/stored/authenticate.c:163 #, c-format -msgid "Regex compile error: %s\n" +msgid "TLS negotiation failed with DIR at \"%s:%d\"\n" msgstr "" -#: src/dird/ua_restore.c:1137 +#: src/stored/authenticate.c:199 #, c-format -msgid "" -"\n" -"Building directory tree for JobId(s) %s ... " +msgid "Unable to authenticate Director at %s.\n" msgstr "" -#: src/dird/ua_restore.c:1207 +#: src/stored/authenticate.c:249 src/stored/authenticate.c:289 #, c-format msgid "" -"\n" -"%s files inserted into the tree and marked for extraction.\n" +"Incorrect authorization key from File daemon at %s rejected.\n" +"Please see " msgstr "" -#: src/dird/ua_restore.c:1210 +#: src/stored/authenticate.c:276 #, c-format +msgid "TLS negotiation failed with FD at \"%s:%d\"\n" +msgstr "" + +#: src/stored/authenticate.c:358 src/filed/authenticate.c:258 msgid "" -"\n" -"%s files inserted into the tree.\n" +"Authorization key rejected by Storage daemon.\n" +"Please see " msgstr "" -#: src/dird/ua_restore.c:1285 +#: src/stored/authenticate.c:385 src/dird/authenticate.c:400 +#: src/filed/authenticate.c:157 src/filed/authenticate.c:285 +msgid "TLS negotiation failed.\n" +msgstr "" + +#: src/stored/block.c:133 #, c-format -msgid "Error getting FileSet \"%s\": ERR=%s\n" +msgid "Cannot write block. Device at EOM. dev=%s\n" msgstr "" -#: src/dird/ua_restore.c:1290 +#: src/stored/block.c:138 #, c-format -msgid "FileSet argument: %s\n" +msgid "Attempt to write on read-only Volume. dev=%s\n" msgstr "" -#: src/dird/ua_restore.c:1302 +#: src/stored/block.c:144 #, c-format -msgid "No FileSet found for client \"%s\".\n" +msgid "Attempt to write on closed device=%s\n" msgstr "" -#: src/dird/ua_restore.c:1308 +#: src/stored/block.c:177 #, c-format -msgid "Error getting FileSet record: %s\n" +msgid "Unable to write EOF. ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:1309 -msgid "" -"This probably means you modified the FileSet.\n" -"Continuing anyway.\n" +#: src/stored/block.c:199 src/stored/block.c:235 +msgid "Write block header zeroed.\n" msgstr "" -#: src/dird/ua_restore.c:1324 +#: src/stored/block.c:227 #, c-format -msgid "Pool \"%s\" not found, using any pool.\n" +msgid "Block checksum changed during write: before=%ud after=%ud\n" msgstr "" -#: src/dird/ua_restore.c:1351 src/dird/ua_restore.c:1367 +#: src/stored/block.c:254 #, c-format -msgid "No Full backup before %s found.\n" +msgid "Write error at %u:%u on device %s. ERR=%s.\n" msgstr "" -#: src/dird/ua_restore.c:1396 -msgid "No jobs found.\n" +#: src/stored/block.c:262 +#, c-format +msgid "End of Volume \"%s\" at %u:%u on device %s. Write of %u bytes got %d.\n" +msgstr "" + +#: src/stored/block.c:366 +#, fuzzy +msgid "Job failed or canceled.\n" +msgstr "Terugzetten geannuleerd.\n" + +#: src/stored/block.c:372 +msgid "Attempt to read past end of tape or file.\n" msgstr "" -#: src/dird/ua_restore.c:1517 +#: src/stored/block.c:380 #, c-format -msgid "Warning default storage overridden by \"%s\" on command line.\n" +msgid "Attempt to read closed device: fd=%d at file:blk %u:%u on device %s\n" msgstr "" -#: src/dird/ua_restore.c:1534 +#: src/stored/block.c:392 #, c-format -msgid "Using Storage \"%s\" from MediaType \"%s\".\n" +msgid "Block buffer size looping problem on device %s\n" msgstr "" -#: src/dird/ua_restore.c:1537 +#: src/stored/block.c:425 src/stored/block.c:439 #, c-format -msgid "Storage \"%s\" not found, using Storage \"%s\" from MediaType \"%s\".\n" +msgid "The Volume=%s on device=%s appears to be unlabeled.\n" msgstr "" -#: src/dird/ua_restore.c:1546 +#: src/stored/block.c:428 #, c-format -msgid "" -"\n" -"Unable to find Storage resource for\n" -"MediaType \"%s\", needed by the Jobs you selected.\n" +msgid "Read error on fd=%d at file:blk %u:%u on device %s. ERR=%s.\n" msgstr "" -#: src/dird/fd_cmds.c:95 -msgid "Client: " +#: src/stored/block.c:442 +#, c-format +msgid "Read zero bytes Vol=%s at %lld on device %s.\n" msgstr "" -#: src/dird/fd_cmds.c:137 +#: src/stored/block.c:471 #, c-format -msgid "File daemon \"%s\" rejected Job command: %s\n" +msgid "" +"Volume data error at %u:%u! Very short block of %d bytes on device %s " +"discarded.\n" msgstr "" -#: src/dird/fd_cmds.c:150 +#: src/stored/block.c:498 #, c-format -msgid "Error updating Client record. ERR=%s\n" +msgid "Block length %u is greater than buffer %u. Attempting recovery.\n" msgstr "" -#: src/dird/fd_cmds.c:155 +#: src/stored/block.c:518 #, c-format -msgid "FD gave bad response to JobId command: %s\n" +msgid "Setting block buffer size to %u bytes.\n" msgstr "" -#: src/dird/fd_cmds.c:184 src/dird/fd_cmds.c:272 -msgid ", since=" +#: src/stored/block.c:533 +#, c-format +msgid "" +"Volume data error at %u:%u! Short block of %d bytes on device %s discarded.\n" msgstr "" -#: src/dird/fd_cmds.c:249 -msgid "No prior or suitable Full backup found in catalog. Doing FULL backup.\n" +#: src/stored/label.c:87 +#, fuzzy, c-format +msgid "Couldn't rewind %s device %s: ERR=%s\n" +msgstr "Kan Client niet vinden %s: ERR=%s" + +#: src/stored/label.c:105 src/stored/label.c:198 +#, c-format +msgid "Wrong Volume mounted on %s device %s: Wanted %s have %s\n" msgstr "" -#: src/dird/fd_cmds.c:250 src/dird/fd_cmds.c:256 src/dird/fd_cmds.c:265 +#: src/stored/label.c:108 src/stored/label.c:186 #, c-format -msgid " (upgraded from %s)" +msgid "Too many tries: %s" msgstr "" -#: src/dird/fd_cmds.c:255 +#: src/stored/label.c:125 +#, c-format msgid "" -"No prior or suitable Differential backup found in catalog. Doing " -"Differential backup.\n" +"Requested Volume \"%s\" on %s device %s is not a Bacula labeled Volume, " +"because: ERR=%s" +msgstr "" + +#: src/stored/label.c:130 +msgid "Could not read Volume label from block.\n" msgstr "" -#: src/dird/fd_cmds.c:263 +#: src/stored/label.c:133 #, c-format -msgid "Prior failed job found in catalog. Upgrading to %s.\n" +msgid "Could not unserialize Volume label: ERR=%s\n" msgstr "" -#: src/dird/fd_cmds.c:328 +#: src/stored/label.c:138 #, c-format -msgid "Unimplemented backup level %d %c\n" +msgid "Volume Header Id bad: %s\n" msgstr "" -#: src/dird/fd_cmds.c:401 -msgid "" -"FD compression disabled for this Job because AllowCompress=No in Storage " -"resource.\n" +#: src/stored/label.c:171 +#, c-format +msgid "Volume on %s device %s has wrong Bacula version. Wanted %d got %d\n" msgstr "" -#: src/dird/fd_cmds.c:500 src/filed/job.c:854 +#: src/stored/label.c:182 #, c-format -msgid "Cannot run program: %s. ERR=%s\n" +msgid "Volume on %s device %s has bad Bacula label type: %x\n" msgstr "" -#: src/dird/fd_cmds.c:511 src/dird/fd_cmds.c:536 src/dird/fd_cmds.c:550 -msgid ">filed: write error on socket\n" +#: src/stored/label.c:301 +#, c-format +msgid "Cannot write Volume label to block for %s device %s\n" msgstr "" -#: src/dird/fd_cmds.c:517 +#: src/stored/label.c:361 src/stored/label.c:486 #, c-format -msgid "Error running program: %s. ERR=%s\n" +msgid "Open %s device %s Volume \"%s\" failed: ERR=%s\n" msgstr "" -#: src/dird/fd_cmds.c:526 +#: src/stored/label.c:500 +#, fuzzy, c-format +msgid "Rewind error on %s device %s: ERR=%s\n" +msgstr "Lees fout op bestand %s. FOUT=%s\n" + +#: src/stored/label.c:508 +#, fuzzy, c-format +msgid "Truncate error on %s device %s: ERR=%s\n" +msgstr "Lees fout op bestand %s. FOUT=%s\n" + +#: src/stored/label.c:515 #, c-format -msgid "Cannot open included file: %s. ERR=%s\n" +msgid "Failed to re-open DVD after truncate on %s device %s: ERR=%s\n" msgstr "" -#: src/dird/fd_cmds.c:672 +#: src/stored/label.c:560 +#, fuzzy, c-format +msgid "Unable to write %s device %s: ERR=%s\n" +msgstr "Kan job cond variabele niet initialiseren: ERR=%s\n" + +#: src/stored/label.c:594 #, c-format -msgid "Client \"%s\" RunScript failed.\n" +msgid "Recycled volume \"%s\" on %s device %s, all previous data lost.\n" msgstr "" -#: src/dird/fd_cmds.c:695 +#: src/stored/label.c:597 #, c-format -msgid "" -"Client \"%s\" may not be used to restore this job. Please upgrade your " -"client.\n" +msgid "Wrote label to prelabeled Volume \"%s\" on %s device %s\n" msgstr "" -#: src/dird/fd_cmds.c:770 -msgid "RestoreObject failed.\n" +#: src/stored/label.c:806 +#, c-format +msgid "Bad Volume session label request=%d\n" +msgstr "" + +#: src/stored/label.c:870 +#, c-format +msgid "Expecting Volume Label, got FI=%s Stream=%s len=%d\n" +msgstr "" + +#: src/stored/label.c:1003 +#, c-format +msgid "Unknown %d" msgstr "" -#: src/dird/fd_cmds.c:806 +#: src/stored/label.c:1007 #, c-format msgid "" -" \n" +" -b specify a bootstrap file\n" +" -c specify a Storage configuration file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -e exclude list\n" +" -i include list\n" +" -p proceed inspite of I/O errors\n" +" -v verbose\n" +" -V specify Volume names (separated by |)\n" +" -? print this message\n" +"\n" msgstr "" -#: src/dird/ua_label.c:613 -#, c-format -msgid "Catalog record for cleaning tape \"%s\" successfully created.\n" +#: src/stored/bextract.c:191 src/stored/bscan.c:239 src/stored/bcopy.c:151 +#: src/tools/bbatch.c:178 src/tools/bvfs_test.c:189 src/tools/cats_test.c:309 +#: src/tools/ing_test.c:173 +msgid "Wrong number of arguments: \n" msgstr "" -#: src/dird/ua_label.c:620 +#: src/stored/bextract.c:215 #, c-format -msgid "Catalog error on cleaning tape: %s" +msgid "%d Program Name and/or Program Data Stream records ignored.\n" msgstr "" -#: src/dird/ua_label.c:656 +#: src/stored/bextract.c:219 #, c-format -msgid "Illegal character \"%c\" in a volume name.\n" +msgid "%d Win32 data or Win32 gzip data stream records. Ignored.\n" msgstr "" -#: src/dird/ua_label.c:703 +#: src/stored/bextract.c:246 #, c-format -msgid "Sending relabel command from \"%s\" to \"%s\" ...\n" +msgid "Cannot stat %s. It must exist. ERR=%s\n" msgstr "" -#: src/dird/ua_label.c:710 +#: src/stored/bextract.c:250 #, c-format -msgid "Sending label command for Volume \"%s\" Slot %d ...\n" +msgid "%s must be a directory.\n" msgstr "" -#: src/dird/ua_label.c:751 +#: src/stored/bextract.c:271 #, c-format -msgid "Catalog record for Volume \"%s\", Slot %d successfully created.\n" +msgid "%u files restored.\n" msgstr "" -#: src/dird/ua_label.c:764 +#: src/stored/bextract.c:281 src/stored/bextract.c:287 #, c-format -msgid "Label command failed for Volume %s.\n" +msgid "Write error on %s: %s\n" msgstr "" -#: src/dird/ua_label.c:802 -msgid "Could not open SD socket.\n" +#: src/stored/bextract.c:318 src/stored/bextract.c:584 +msgid "Logic error output file should be open but is not.\n" msgstr "" -#: src/dird/ua_label.c:874 src/dird/ua_label.c:884 +#: src/stored/bextract.c:332 src/filed/restore.c:560 #, c-format -msgid "Invalid Slot number: %s\n" +msgid "%s stream not supported on this Client.\n" msgstr "" -#: src/dird/ua_label.c:893 +#: src/stored/bextract.c:342 #, c-format -msgid "Invalid Volume name: %s\n" +msgid "%s was deleted.\n" msgstr "" -#: src/dird/ua_label.c:987 +#: src/stored/bextract.c:390 #, c-format -msgid "Device \"%s\" has %d slots.\n" +msgid "Seek error on %s: %s\n" msgstr "" -#: src/dird/ua_label.c:1033 +#: src/stored/bextract.c:426 src/stored/bextract.c:491 +#: src/filed/restore.c:1335 #, c-format -msgid "Pool \"%s\" resource not found for volume \"%s\"!\n" +msgid "Seek to %s error on %s: ERR=%s\n" msgstr "" -#: src/dird/ua_label.c:1247 -msgid "No Volumes found, or no barcodes.\n" +#: src/stored/bextract.c:445 +#, c-format +msgid "Uncompression error. ERR=%d\n" msgstr "" -#: src/dird/ua_label.c:1250 -msgid "" -" Slot | Volume Name | Status | Media Type | " -"Pool |\n" +#: src/stored/bextract.c:459 src/filed/restore.c:1450 +msgid "GZIP data stream found, but GZIP not configured!\n" msgstr "" -#: src/dird/ua_label.c:1251 -msgid "" -"------+------------------+-----------+----------------------" -"+--------------------|\n" +#: src/stored/bextract.c:514 src/filed/restore.c:1376 +#, c-format +msgid "Compressed header version error. version=0x%x\n" msgstr "" -#: src/dird/scheduler.c:112 +#: src/stored/bextract.c:519 src/filed/restore.c:1381 #, c-format -msgid "Job %s not found\n" -msgstr "" - -#: src/dird/scheduler.c:136 -msgid "Walk queue" -msgstr "" - -#: src/dird/scheduler.c:146 -msgid "Dequeued job" +msgid "Compressed header size error. comp_len=%d, msglen=%d\n" msgstr "" -#: src/dird/scheduler.c:149 -msgid "Scheduler logic error\n" +#: src/stored/bextract.c:541 +#, c-format +msgid "LZO uncompression error. ERR=%d\n" msgstr "" -#: src/dird/scheduler.c:190 -msgid "Run job" +#: src/stored/bextract.c:553 src/filed/restore.c:1414 +#, c-format +msgid "Compression algorithm 0x%x found, but not supported!\n" msgstr "" -#: src/dird/scheduler.c:223 -msgid "run override" +#: src/stored/bextract.c:575 +msgid "Got Program Name or Data Stream. Ignored.\n" msgstr "" -#: src/dird/scheduler.c:413 -msgid "Inserted job" +#: src/stored/bextract.c:589 src/filed/restore.c:316 src/filed/restore.c:1033 +#, c-format +msgid "Unknown stream=%d ignored. This shouldn't happen!\n" msgstr "" -#: src/dird/scheduler.c:421 -msgid "Appended job" +#: src/stored/bscan.c:108 +#, c-format +msgid "" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: bscan [ options ] \n" +" -b bootstrap specify a bootstrap file\n" +" -c specify configuration file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -m update media info in database\n" +" -D specify the driver database name (default NULL)\n" +" -n specify the database name (default bacula)\n" +" -u specify database user name (default bacula)\n" +" -P specify database password (default none)\n" +" -h specify database host (default NULL)\n" +" -t specify database port (default 0)\n" +" -p proceed inspite of I/O errors\n" +" -r list records\n" +" -s synchronize or store in database\n" +" -S show scan progress periodically\n" +" -v verbose\n" +" -V specify Volume names (separated by |)\n" +" -w specify working directory (default from conf file)\n" +" -? print this message\n" +"\n" msgstr "" -#: src/dird/scheduler.c:425 -msgid "Run queue" +#: src/stored/bscan.c:264 +#, c-format +msgid "Working Directory: %s not found. Cannot continue.\n" msgstr "" -#: src/dird/run_conf.c:208 +#: src/stored/bscan.c:268 #, c-format -msgid "Expected an equals, got: %s" +msgid "Working Directory: %s is not a directory. Cannot continue.\n" msgstr "" -#: src/dird/run_conf.c:221 src/dird/run_conf.c:233 src/dird/run_conf.c:327 +#: src/stored/bscan.c:282 src/stored/bscan.c:358 #, c-format -msgid "Expect a YES or NO, got: %s" +msgid "First Volume Size = %s\n" msgstr "" -#: src/dird/run_conf.c:247 -#, c-format -msgid "Job level field: %s not found in run record" +#: src/stored/bscan.c:288 src/tools/bbatch.c:189 src/tools/bbatch.c:238 +#: src/tools/bvfs_test.c:203 src/tools/ing_test.c:179 +msgid "Could not init Bacula database\n" msgstr "" -#: src/dird/run_conf.c:265 +#: src/stored/bscan.c:295 src/tools/bbatch.c:245 src/tools/bvfs_test.c:212 +#: src/tools/ing_test.c:188 #, c-format -msgid "Could not find specified Pool Resource: %s" +msgid "Using Database: %s, User: %s\n" msgstr "" -#: src/dird/run_conf.c:290 +#: src/stored/bscan.c:329 #, c-format -msgid "Could not find specified Storage Resource: %s" +msgid "Create JobMedia for Job %s\n" msgstr "" -#: src/dird/run_conf.c:302 +#: src/stored/bscan.c:339 #, c-format -msgid "Could not find specified Messages Resource: %s" +msgid "Could not create JobMedia record for Volume=%s Job=%s\n" msgstr "" -#: src/dird/run_conf.c:312 src/lib/parse_conf.c:736 src/lib/parse_conf.c:742 +#: src/stored/bscan.c:406 #, c-format -msgid "expected a time period, got: %s" +msgid "done: %d%%\n" msgstr "" -#: src/dird/run_conf.c:331 +#: src/stored/bscan.c:414 src/stored/bcopy.c:230 #, c-format -msgid "Expected a keyword name, got: %s" +msgid "Record: SessId=%u SessTim=%u FileIndex=%d Stream=%d len=%u\n" msgstr "" -#: src/dird/run_conf.c:370 -msgid "Day number out of range (1-31)" +#: src/stored/bscan.c:430 +msgid "Volume is prelabeled. This tape cannot be scanned.\n" msgstr "" -#: src/dird/run_conf.c:387 src/dird/run_conf.c:542 -msgid "Week number out of range (0-53)" +#: src/stored/bscan.c:442 +#, c-format +msgid "Pool record for %s found in DB.\n" msgstr "" -#: src/dird/run_conf.c:403 +#: src/stored/bscan.c:446 #, c-format -msgid "Job type field: %s in run record not found" +msgid "VOL_LABEL: Pool record not found for Pool: %s\n" msgstr "" -#: src/dird/run_conf.c:410 +#: src/stored/bscan.c:452 #, c-format -msgid "Unexpected token: %d:%s" +msgid "VOL_LABEL: PoolType mismatch. DB=%s Vol=%s\n" msgstr "" -#: src/dird/run_conf.c:454 -msgid "Time must be preceded by keyword AT." +#: src/stored/bscan.c:456 +#, c-format +msgid "Pool type \"%s\" is OK.\n" msgstr "" -#: src/dird/run_conf.c:463 -msgid "Time logic error.\n" +#: src/stored/bscan.c:466 +#, c-format +msgid "Media record for %s found in DB.\n" msgstr "" -#: src/dird/run_conf.c:478 src/dird/run_conf.c:497 -msgid "Bad time specification." +#: src/stored/bscan.c:473 +#, c-format +msgid "VOL_LABEL: Media record not found for Volume: %s\n" msgstr "" -#: src/dird/run_conf.c:511 -msgid "Range logic error.\n" +#: src/stored/bscan.c:480 +#, c-format +msgid "VOL_LABEL: MediaType mismatch. DB=%s Vol=%s\n" msgstr "" -#: src/dird/run_conf.c:520 -msgid "Bad day range specification." +#: src/stored/bscan.c:484 +#, c-format +msgid "Media type \"%s\" is OK.\n" msgstr "" -#: src/dird/run_conf.c:567 -msgid "Invalid month, week or position day range" +#: src/stored/bscan.c:494 +#, c-format +msgid "VOL_LABEL: OK for Volume: %s\n" msgstr "" -#: src/dird/run_conf.c:582 -msgid "Invalid month, weekday or position range" +#: src/stored/bscan.c:501 +#, c-format +msgid "%d \"errors\" ignored before first Start of Session record.\n" msgstr "" -#: src/dird/run_conf.c:641 -msgid "Unexpected run state\n" +#: src/stored/bscan.c:512 +#, c-format +msgid "SOS_LABEL: Found Job record for JobId: %d\n" msgstr "" -#: src/dird/ua_update.c:97 -msgid "Update choice:\n" +#: src/stored/bscan.c:517 +#, c-format +msgid "SOS_LABEL: Job record not found for JobId: %d\n" msgstr "" -#: src/dird/ua_update.c:98 -msgid "Volume parameters" +#: src/stored/bscan.c:557 +#, c-format +msgid "SOS_LABEL: VolSessId mismatch for JobId=%u. DB=%d Vol=%d\n" msgstr "" -#: src/dird/ua_update.c:99 -msgid "Pool from resource" +#: src/stored/bscan.c:563 +#, c-format +msgid "SOS_LABEL: VolSessTime mismatch for JobId=%u. DB=%d Vol=%d\n" msgstr "" -#: src/dird/ua_update.c:100 -msgid "Slots from autochanger" +#: src/stored/bscan.c:569 +#, c-format +msgid "SOS_LABEL: PoolId mismatch for JobId=%u. DB=%d Vol=%d\n" msgstr "" -#: src/dird/ua_update.c:101 -msgid "Long term statistics" +#: src/stored/bscan.c:587 src/stored/bscan.c:1141 +#, c-format +msgid "Could not find SessId=%d SessTime=%d for EOS record.\n" msgstr "" -#: src/dird/ua_update.c:102 -msgid "item" +#: src/stored/bscan.c:633 +#, c-format +msgid "Could not update job record. ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:102 -msgid "Choose catalog item to update" +#: src/stored/bscan.c:644 +#, c-format +msgid "End of all Volumes. VolFiles=%u VolBlocks=%u VolBytes=%s\n" msgstr "" -#: src/dird/ua_update.c:145 +#: src/stored/bscan.c:656 #, c-format -msgid "Invalid VolStatus specified: %s\n" +msgid "Could not find Job for SessId=%d SessTime=%d record.\n" msgstr "" -#: src/dird/ua_update.c:154 +#: src/stored/bscan.c:687 #, c-format -msgid "New Volume status is: %s\n" +msgid "%s file records. At file:blk=%s:%s bytes=%s\n" msgstr "" -#: src/dird/ua_update.c:164 +#: src/stored/bscan.c:752 #, c-format -msgid "Invalid retention period specified: %s\n" +msgid "Got MD5 record: %s\n" msgstr "" -#: src/dird/ua_update.c:172 +#: src/stored/bscan.c:760 #, c-format -msgid "New retention period is: %s\n" +msgid "Got SHA1 record: %s\n" msgstr "" -#: src/dird/ua_update.c:183 +#: src/stored/bscan.c:768 #, c-format -msgid "Invalid use duration specified: %s\n" +msgid "Got SHA256 record: %s\n" msgstr "" -#: src/dird/ua_update.c:191 +#: src/stored/bscan.c:776 #, c-format -msgid "New use duration is: %s\n" +msgid "Got SHA512 record: %s\n" msgstr "" -#: src/dird/ua_update.c:205 -#, c-format -msgid "New max jobs is: %s\n" +#: src/stored/bscan.c:784 src/stored/bscan.c:791 +msgid "Got signed digest record\n" msgstr "" -#: src/dird/ua_update.c:218 +#: src/stored/bscan.c:797 #, c-format -msgid "New max files is: %s\n" +msgid "Got Prog Names Stream: %s\n" msgstr "" -#: src/dird/ua_update.c:229 -#, c-format -msgid "Invalid max. bytes specification: %s\n" +#: src/stored/bscan.c:803 +msgid "Got Prog Data Stream record.\n" msgstr "" -#: src/dird/ua_update.c:237 +#: src/stored/bscan.c:848 #, c-format -msgid "New Max bytes is: %s\n" +msgid "Unknown stream type!!! stream=%d len=%i\n" msgstr "" -#: src/dird/ua_update.c:248 src/dird/ua_update.c:268 -msgid "Invalid value. It must be yes or no.\n" +#: src/stored/bscan.c:910 +#, c-format +msgid "Could not create File Attributes record. ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:256 +#: src/stored/bscan.c:916 #, c-format -msgid "New Recycle flag is: %s\n" +msgid "Created File record: %s\n" msgstr "" -#: src/dird/ua_update.c:257 src/dird/ua_update.c:277 src/dird/ua_update.c:699 -#: src/dird/ua_run.c:180 src/dird/backup.c:788 src/dird/backup.c:789 -#: src/dird/backup.c:790 src/dird/ua_input.c:131 src/stored/parse_bsr.c:863 -#: src/tools/dbcheck.c:1352 -msgid "yes" +#: src/stored/bscan.c:961 +#, c-format +msgid "Could not create media record. ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:257 src/dird/ua_update.c:277 src/dird/ua_update.c:699 -#: src/dird/ua_run.c:200 src/dird/backup.c:788 src/dird/backup.c:789 -#: src/dird/backup.c:790 src/dird/ua_input.c:135 src/stored/parse_bsr.c:863 -msgid "no" +#: src/stored/bscan.c:965 src/stored/bscan.c:986 +#, c-format +msgid "Could not update media record. ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:276 +#: src/stored/bscan.c:969 #, c-format -msgid "New InChanger flag is: %s\n" +msgid "Created Media record for Volume: %s\n" msgstr "" -#: src/dird/ua_update.c:294 +#: src/stored/bscan.c:990 #, c-format -msgid "Invalid slot, it must be between 0 and MaxVols=%d\n" +msgid "Updated Media record at end of Volume: %s\n" msgstr "" -#: src/dird/ua_update.c:304 src/dird/ua_update.c:728 +#: src/stored/bscan.c:1007 #, c-format -msgid "Error updating media record Slot: ERR=%s" +msgid "Could not create pool record. ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:306 +#: src/stored/bscan.c:1011 #, c-format -msgid "New Slot is: %d\n" +msgid "Created Pool record for Pool: %s\n" msgstr "" -#: src/dird/ua_update.c:331 +#: src/stored/bscan.c:1030 #, c-format -msgid "New Pool is: %s\n" +msgid "Could not get Client record. ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:374 +#: src/stored/bscan.c:1036 src/dird/job.c:1060 #, c-format -msgid "New RecyclePool is: %s\n" +msgid "Could not create Client record. ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:394 +#: src/stored/bscan.c:1040 #, c-format -msgid "Error updating Volume record: ERR=%s" +msgid "Created Client record for Client: %s\n" msgstr "" -#: src/dird/ua_update.c:396 +#: src/stored/bscan.c:1057 #, c-format -msgid "Volume defaults updated from \"%s\" Pool record.\n" +msgid "Fileset \"%s\" already exists.\n" msgstr "" -#: src/dird/ua_update.c:419 src/dird/ua_update.c:451 +#: src/stored/bscan.c:1061 #, c-format -msgid "Error updating Volume records: ERR=%s" +msgid "Could not create FileSet record \"%s\". ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:421 src/dird/ua_update.c:453 +#: src/stored/bscan.c:1066 #, c-format -msgid "All Volume defaults updated from \"%s\" Pool record.\n" +msgid "Created FileSet record \"%s\"\n" msgstr "" -#: src/dird/ua_update.c:443 +#: src/stored/bscan.c:1113 #, c-format -msgid "Updating all pools, but skipped PoolId=%d. ERR=%s\n" +msgid "Could not create JobId record. ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:469 +#: src/stored/bscan.c:1119 #, c-format -msgid "Error updating media record Enabled: ERR=%s" +msgid "Could not update job start record. ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:472 +#: src/stored/bscan.c:1122 #, c-format -msgid "New Enabled is: %d\n" +msgid "Created new JobId=%u record for original JobId=%u\n" msgstr "" -#: src/dird/ua_update.c:487 +#: src/stored/bscan.c:1175 #, c-format -msgid "Error updating media record ActionOnPurge: ERR=%s" +msgid "Could not update JobId=%u record. ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:490 +#: src/stored/bscan.c:1180 #, c-format -msgid "New ActionOnPurge is: %s\n" +msgid "Updated Job termination record for JobId=%u Level=%s TermStat=%c\n" msgstr "" -#: src/dird/ua_update.c:605 src/dird/ua_run.c:222 -msgid "Parameters to modify:\n" +#: src/stored/bscan.c:1191 src/dird/vbackup.c:386 src/dird/backup.c:774 +msgid "Backup OK" msgstr "" -#: src/dird/ua_update.c:606 -msgid "Volume Status" -msgstr "" +#: src/stored/bscan.c:1194 src/dird/vbackup.c:384 src/dird/backup.c:772 +#: src/dird/backup.c:778 +msgid "Backup OK -- with warnings" +msgstr "Backup OK -- met waarschuwingen" -#: src/dird/ua_update.c:607 -msgid "Volume Retention Period" -msgstr "" +#: src/stored/bscan.c:1198 src/dird/vbackup.c:391 src/dird/backup.c:782 +msgid "*** Backup Error ***" +msgstr "*** Backup Fout ***" -#: src/dird/ua_update.c:608 -msgid "Volume Use Duration" -msgstr "" +#: src/stored/bscan.c:1201 src/dird/vbackup.c:401 src/dird/backup.c:792 +msgid "Backup Canceled" +msgstr "Backup geannuleerd" -#: src/dird/ua_update.c:609 -msgid "Maximum Volume Jobs" +#: src/stored/bscan.c:1205 +#, c-format +msgid "Job Termination code: %d" msgstr "" -#: src/dird/ua_update.c:610 -msgid "Maximum Volume Files" +#: src/stored/bscan.c:1210 +#, c-format +msgid "" +"%s\n" +"JobId: %d\n" +"Job: %s\n" +"FileSet: %s\n" +"Backup Level: %s\n" +"Client: %s\n" +"Start time: %s\n" +"End time: %s\n" +"Files Written: %s\n" +"Bytes Written: %s\n" +"Volume Session Id: %d\n" +"Volume Session Time: %d\n" +"Last Volume Bytes: %s\n" +"Termination: %s\n" +"\n" msgstr "" -#: src/dird/ua_update.c:611 -msgid "Maximum Volume Bytes" +#: src/stored/bscan.c:1268 +#, c-format +msgid "Could not create JobMedia record. ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:612 -msgid "Recycle Flag" +#: src/stored/bscan.c:1272 +#, c-format +msgid "Created JobMedia record JobId %d, MediaId %d\n" msgstr "" -#: src/dird/ua_update.c:613 -msgid "Slot" +#: src/stored/bscan.c:1288 +#, c-format +msgid "Could not find SessId=%d SessTime=%d for MD5/SHA1 record.\n" msgstr "" -#: src/dird/ua_update.c:614 -msgid "InChanger Flag" +#: src/stored/bscan.c:1302 +#, c-format +msgid "Could not add MD5/SHA1 to File record. ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:615 -msgid "Volume Files" +#: src/stored/bscan.c:1307 +msgid "Updated MD5/SHA1 record\n" msgstr "" -#: src/dird/ua_update.c:617 -msgid "Volume from Pool" +#: src/stored/stored_conf.c:224 +#, c-format +msgid "Expected a Device Type keyword, got: %s" msgstr "" -#: src/dird/ua_update.c:618 -msgid "All Volumes from Pool" +#: src/stored/stored_conf.c:238 +#, c-format +msgid "" +"Maximum Block Size configured value %u is greater than allowed maximum: %u" msgstr "" -#: src/dird/ua_update.c:619 -msgid "All Volumes from all Pools" +#: src/stored/stored_conf.c:252 +#, c-format +msgid "Warning: no \"%s\" resource (%d) defined.\n" msgstr "" -#: src/dird/ua_update.c:620 -msgid "Enabled" -msgstr "" - -#: src/dird/ua_update.c:621 -msgid "RecyclePool" +#: src/stored/stored_conf.c:255 +#, c-format +msgid "dump_resource type=%d\n" msgstr "" -#: src/dird/ua_update.c:622 -msgid "Action On Purge" +#: src/stored/stored_conf.c:371 +#, c-format +msgid "Warning: unknown resource type %d\n" msgstr "" -#: src/dird/ua_update.c:623 -msgid "Done" +#: src/stored/stored_conf.c:567 +#, c-format +msgid "\"%s\" item is required in \"%s\" resource, but not found.\n" msgstr "" -#: src/dird/ua_update.c:624 src/dird/ua_run.c:252 src/dird/ua_run.c:600 -msgid "Select parameter to modify" +#: src/stored/stored_conf.c:573 +#, c-format +msgid "Too many items in \"%s\" resource\n" msgstr "" -#: src/dird/ua_update.c:632 +#: src/stored/stored_conf.c:594 src/dird/dird_conf.c:1488 +#: src/filed/filed_conf.c:459 #, c-format -msgid "Updating Volume \"%s\"\n" +msgid "Cannot find Director resource %s\n" msgstr "" -#: src/dird/ua_update.c:637 +#: src/stored/stored_conf.c:600 src/dird/dird_conf.c:1495 #, c-format -msgid "Current Volume status is: %s\n" +msgid "Cannot find Storage resource %s\n" msgstr "" -#: src/dird/ua_update.c:638 -msgid "Possible Values are:\n" +#: src/stored/stored_conf.c:607 +#, c-format +msgid "Cannot find AutoChanger resource %s\n" msgstr "" -#: src/dird/ua_update.c:649 -msgid "Choose new Volume Status" +#: src/stored/stored_conf.c:623 +#, c-format +msgid "Unable to init lock: ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:655 +#: src/stored/stored_conf.c:681 #, c-format -msgid "Current retention period is: %s\n" +msgid "" +"Attempt to define second \"%s\" resource named \"%s\" is not permitted.\n" msgstr "" -#: src/dird/ua_update.c:657 -msgid "Enter Volume Retention period: " +#: src/stored/dircmd.c:157 +#, c-format +msgid "Connection request from %s failed.\n" msgstr "" -#: src/dird/ua_update.c:664 +#: src/stored/dircmd.c:168 #, c-format -msgid "Current use duration is: %s\n" +msgid "Invalid connection from %s. Len=%d\n" msgstr "" -#: src/dird/ua_update.c:666 -msgid "Enter Volume Use Duration: " +#: src/stored/dircmd.c:215 src/filed/authenticate.c:196 +msgid "Unable to authenticate Director\n" msgstr "" -#: src/dird/ua_update.c:673 +#: src/stored/dircmd.c:308 #, c-format -msgid "Current max jobs is: %u\n" +msgid "Bad client command: %s" msgstr "" -#: src/dird/ua_update.c:674 -msgid "Enter new Maximum Jobs: " -msgstr "" +#: src/stored/dircmd.c:318 +#, fuzzy +msgid "Client daemon" +msgstr "Client" + +#: src/stored/dircmd.c:321 +#, fuzzy, c-format +msgid "Failed to connect to Client daemon: %s:%d\n" +msgstr "Verbinden met de director mislukt\n" -#: src/dird/ua_update.c:681 +#: src/stored/dircmd.c:358 src/filed/job.c:1855 #, c-format -msgid "Current max files is: %u\n" +msgid "Bad storage command: %s" msgstr "" -#: src/dird/ua_update.c:682 -msgid "Enter new Maximum Files: " +#: src/stored/dircmd.c:377 src/dird/msgchan.c:121 src/filed/job.c:1880 +#: src/qt-console/tray-monitor/tray-monitor.cpp:363 +msgid "Storage daemon" msgstr "" -#: src/dird/ua_update.c:689 +#: src/stored/dircmd.c:380 src/filed/job.c:1883 #, c-format -msgid "Current value is: %s\n" +msgid "Failed to connect to Storage daemon: %s:%d\n" msgstr "" -#: src/dird/ua_update.c:690 -msgid "Enter new Maximum Bytes: " +#: src/stored/dircmd.c:397 +msgid "In storage_cmd port==0, no prior Storage connection.\n" msgstr "" -#: src/dird/ua_update.c:698 +#: src/stored/dircmd.c:445 #, c-format -msgid "Current recycle flag is: %s\n" +msgid "3991 Bad setdebug command: %s\n" msgstr "" -#: src/dird/ua_update.c:700 -msgid "Enter new Recycle status: " +#: src/stored/dircmd.c:479 +msgid "3903 Error scanning cancel command.\n" msgstr "" -#: src/dird/ua_update.c:707 +#: src/stored/dircmd.c:483 #, c-format -msgid "Current Slot is: %d\n" +msgid "3904 Job %s not found.\n" msgstr "" -#: src/dird/ua_update.c:708 -msgid "Enter new Slot: " +#: src/stored/dircmd.c:511 +#, c-format +msgid "3000 JobId=%ld Job=\"%s\" marked to be %s.\n" msgstr "" -#: src/dird/ua_update.c:715 +#: src/stored/dircmd.c:590 src/stored/dircmd.c:971 src/stored/dircmd.c:1066 +#: src/stored/dircmd.c:1177 src/stored/dircmd.c:1299 src/stored/dircmd.c:1341 #, c-format -msgid "Current InChanger flag is: %d\n" +msgid "3999 Device \"%s\" not found or could not be opened.\n" msgstr "" -#: src/dird/ua_update.c:716 +#: src/stored/dircmd.c:595 #, c-format -msgid "Set InChanger flag for Volume \"%s\": yes/no: " +msgid "3903 Error scanning label command: %s\n" msgstr "" -#: src/dird/ua_update.c:730 +#: src/stored/dircmd.c:644 #, c-format -msgid "New InChanger flag is: %d\n" +msgid "3910 Unable to open device \"%s\": ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:737 -msgid "" -"Warning changing Volume Files can result\n" -"in loss of data on your Volume\n" -"\n" +#: src/stored/dircmd.c:661 +#, c-format +msgid "3920 Cannot label Volume because it is already labeled: \"%s\"\n" msgstr "" -#: src/dird/ua_update.c:739 -#, c-format -msgid "Current Volume Files is: %u\n" +#: src/stored/dircmd.c:668 +msgid "3921 Wrong volume mounted.\n" msgstr "" -#: src/dird/ua_update.c:740 -msgid "Enter new number of Files for Volume: " +#: src/stored/dircmd.c:672 +msgid "3922 Cannot relabel an ANSI/IBM labeled Volume.\n" msgstr "" -#: src/dird/ua_update.c:745 -msgid "Normally, you should only increase Volume Files by one!\n" +#: src/stored/dircmd.c:680 +#, c-format +msgid "3912 Failed to label Volume: ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:746 -msgid "Increase Volume Files? (yes/no): " +#: src/stored/dircmd.c:690 +#, c-format +msgid "3915 Failed to label Volume: ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:756 +#: src/stored/dircmd.c:693 #, c-format -msgid "New Volume Files is: %u\n" +msgid "3914 Failed to label Volume (no media): ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:768 +#: src/stored/dircmd.c:696 #, c-format -msgid "Current Pool is: %s\n" +msgid "3913 Cannot label Volume. Unknown status %d from read_volume_label()\n" msgstr "" -#: src/dird/ua_update.c:769 -msgid "Enter new Pool name: " +#: src/stored/dircmd.c:733 +#, c-format +msgid "3001 Mounted Volume: %s\n" msgstr "" -#: src/dird/ua_update.c:790 +#: src/stored/dircmd.c:737 src/stored/dircmd.c:1377 #, c-format -msgid "Current Enabled is: %d\n" +msgid "" +"3902 Cannot mount Volume on Storage Device \"%s\" because:\n" +"%s" msgstr "" -#: src/dird/ua_update.c:791 -msgid "Enter new Enabled: " +#: src/stored/dircmd.c:768 src/stored/reserve.c:646 +#, c-format +msgid "" +"\n" +" Device \"%s\" requested by DIR could not be opened or does not exist.\n" msgstr "" -#: src/dird/ua_update.c:810 +#: src/stored/dircmd.c:790 src/stored/reserve.c:642 #, c-format -msgid "Current RecyclePool is: %s\n" +msgid "" +"\n" +" Device \"%s\" in changer \"%s\" requested by DIR could not be opened or " +"does not exist.\n" msgstr "" -#: src/dird/ua_update.c:812 -msgid "No current RecyclePool\n" +#: src/stored/dircmd.c:854 +msgid "Specified slot ignored. " msgstr "" -#: src/dird/ua_update.c:822 +#: src/stored/dircmd.c:871 src/stored/dircmd.c:929 #, c-format -msgid "Current ActionOnPurge is: %s\n" +msgid "3901 Unable to open device \"%s\": ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:824 -msgid "Enter new ActionOnPurge (one of: Truncate, None): " +#: src/stored/dircmd.c:891 src/stored/dircmd.c:920 +#, c-format +msgid "3001 Device \"%s\" is mounted with Volume \"%s\"\n" msgstr "" -#: src/dird/ua_update.c:832 -msgid "Selection terminated.\n" +#: src/stored/dircmd.c:894 src/stored/dircmd.c:923 src/stored/dircmd.c:938 +#, c-format +msgid "" +"3905 Device \"%s\" open but no Bacula volume is mounted.\n" +"If this is not a blank tape, try unmounting and remounting the Volume.\n" msgstr "" -#: src/dird/ua_update.c:852 +#: src/stored/dircmd.c:904 #, c-format -msgid "Updating %i job(s).\n" +msgid "3001 Device \"%s\" is doing acquire.\n" msgstr "" -#: src/dird/ua_update.c:884 +#: src/stored/dircmd.c:909 src/stored/dircmd.c:1037 #, c-format -msgid "db_update_pool_record returned %d. ERR=%s\n" +msgid "3903 Device \"%s\" is being labeled.\n" msgstr "" -#: src/dird/ua_update.c:891 -msgid "Pool DB record updated from resource.\n" +#: src/stored/dircmd.c:935 +#, c-format +msgid "3001 Device \"%s\" is already mounted with Volume \"%s\"\n" msgstr "" -#: src/dird/ua_update.c:918 -msgid "Expect JobId keyword, not found.\n" +#: src/stored/dircmd.c:947 +#, c-format +msgid "3002 Device \"%s\" is mounted.\n" msgstr "" -#: src/dird/ua_update.c:943 -msgid "Neither Client nor StartTime specified.\n" +#: src/stored/dircmd.c:949 src/stored/dircmd.c:1006 src/stored/dircmd.c:1025 +#: src/stored/dircmd.c:1057 +#, c-format +msgid "3907 %s" msgstr "" -#: src/dird/migrate.c:149 src/dird/migrate.c:163 +#: src/stored/dircmd.c:952 #, c-format -msgid "No previous Job found to %s.\n" +msgid "3906 File device \"%s\" is always mounted.\n" msgstr "" -#: src/dird/migrate.c:155 -msgid "Create bootstrap file failed.\n" +#: src/stored/dircmd.c:961 +#, c-format +msgid "3930 Device \"%s\" is being released.\n" msgstr "" -#: src/dird/migrate.c:165 +#: src/stored/dircmd.c:965 #, c-format -msgid "Previous Job has no data to %s.\n" +msgid "3905 Unknown wait state %d\n" msgstr "" -#: src/dird/migrate.c:182 +#: src/stored/dircmd.c:975 #, c-format -msgid "Job resource not found for \"%s\".\n" +msgid "3909 Error scanning mount command: %s\n" msgstr "" -#: src/dird/migrate.c:186 +#: src/stored/dircmd.c:1003 src/stored/dircmd.c:1059 #, c-format -msgid "Previous Job resource not found for \"%s\".\n" +msgid "3002 Device \"%s\" unmounted.\n" msgstr "" -#: src/dird/migrate.c:203 -msgid "setup job failed.\n" +#: src/stored/dircmd.c:1010 +#, c-format +msgid "3901 Device \"%s\" is already unmounted.\n" msgstr "" -#: src/dird/migrate.c:258 +#: src/stored/dircmd.c:1028 #, c-format -msgid "Pool for JobId %s not in database. ERR=%s\n" +msgid "3001 Device \"%s\" unmounted.\n" msgstr "" -#: src/dird/migrate.c:266 +#: src/stored/dircmd.c:1033 #, c-format -msgid "Pool resource \"%s\" not found.\n" +msgid "3902 Device \"%s\" is busy in acquire.\n" msgstr "" -#: src/dird/migrate.c:316 src/dird/migrate.c:898 +#: src/stored/dircmd.c:1071 #, c-format -msgid "Could not get job record for JobId %s to %s. ERR=%s" +msgid "3907 Error scanning unmount command: %s\n" msgstr "" -#: src/dird/migrate.c:327 -#, c-format -msgid "JobId %s already %s probably by another Job. %s stopped.\n" +#: src/stored/dircmd.c:1099 +msgid "3916 Error scanning action_on_purge command\n" msgstr "" -#: src/dird/migrate.c:337 +#: src/stored/dircmd.c:1142 #, c-format -msgid "Start %s JobId %s, Job=%s\n" +msgid "3921 Device \"%s\" already released.\n" msgstr "" -#: src/dird/migrate.c:712 +#: src/stored/dircmd.c:1149 #, c-format -msgid "No %s SQL selection pattern specified.\n" +msgid "3922 Device \"%s\" waiting for sysop.\n" msgstr "" -#: src/dird/migrate.c:719 src/dird/migrate.c:738 src/dird/migrate.c:759 -#: src/dird/migrate.c:795 src/dird/migrate.c:822 src/dird/migrate.c:956 -#: src/dird/migrate.c:989 src/dird/migrate.c:1118 +#: src/stored/dircmd.c:1155 #, c-format -msgid "SQL failed. ERR=%s\n" +msgid "3922 Device \"%s\" waiting for mount.\n" msgstr "" -#: src/dird/migrate.c:742 src/dird/migrate.c:749 src/dird/migrate.c:763 -#: src/dird/migrate.c:826 +#: src/stored/dircmd.c:1159 #, c-format -msgid "No Volumes found to %s.\n" +msgid "3923 Device \"%s\" is busy in acquire.\n" msgstr "" -#: src/dird/migrate.c:777 src/dird/migrate.c:866 src/dird/migrate.c:886 -msgid "Invalid JobId found.\n" +#: src/stored/dircmd.c:1163 +#, c-format +msgid "3914 Device \"%s\" is being labeled.\n" msgstr "" -#: src/dird/migrate.c:837 +#: src/stored/dircmd.c:1171 #, c-format -msgid "Unknown %s Selection Type.\n" +msgid "3022 Device \"%s\" released.\n" msgstr "" -#: src/dird/migrate.c:848 src/dird/migrate.c:869 src/dird/migrate.c:889 +#: src/stored/dircmd.c:1182 #, c-format -msgid "No JobIds found to %s.\n" +msgid "3927 Error scanning release command: %s\n" msgstr "" -#: src/dird/migrate.c:852 +#: src/stored/dircmd.c:1211 #, c-format -msgid "The following %u JobId%s chosen to be %s: %s\n" +msgid "Could not create bootstrap file %s: ERR=%s\n" msgstr "" -#: src/dird/migrate.c:853 -msgid " was" +#: src/stored/dircmd.c:1224 +msgid "Error parsing bootstrap file.\n" msgstr "" -#: src/dird/migrate.c:853 -msgid "s were" +#: src/stored/dircmd.c:1286 +#, c-format +msgid "3998 Device \"%s\" is not an autochanger.\n" msgstr "" -#: src/dird/migrate.c:905 +#: src/stored/dircmd.c:1303 #, c-format -msgid "%s using JobId=%s Job=%s\n" +msgid "3908 Error scanning autochanger drives/list/slots command: %s\n" msgstr "" -#: src/dird/migrate.c:939 -msgid "Could not start migration job.\n" +#: src/stored/dircmd.c:1345 +#, c-format +msgid "3909 Error scanning readlabel command: %s\n" msgstr "" -#: src/dird/migrate.c:941 +#: src/stored/dircmd.c:1373 #, c-format -msgid "%s JobId %d started.\n" +msgid "3001 Volume=%s Slot=%d\n" msgstr "" -#: src/dird/migrate.c:960 +#: src/stored/dircmd.c:1405 #, c-format -msgid "No %s found to %s.\n" +msgid "3931 Device \"%s\" is BLOCKED. user unmounted.\n" msgstr "" -#: src/dird/migrate.c:964 +#: src/stored/dircmd.c:1409 #, c-format -msgid "SQL error. Expected 1 MediaId got %d\n" +msgid "" +"3932 Device \"%s\" is BLOCKED. user unmounted during wait for media/mount.\n" msgstr "" -#: src/dird/migrate.c:993 src/dird/migrate.c:1123 +#: src/stored/dircmd.c:1413 #, c-format -msgid "No %ss found to %s.\n" +msgid "3933 Device \"%s\" is BLOCKED waiting for media.\n" msgstr "" -#: src/dird/migrate.c:1015 -msgid "Selection Type 'pooluncopiedjobs' only applies to Copy Jobs" +#: src/stored/dircmd.c:1417 +#, c-format +msgid "3934 Device \"%s\" is being initialized.\n" msgstr "" -#: src/dird/migrate.c:1024 +#: src/stored/dircmd.c:1421 #, c-format -msgid "SQL to get uncopied jobs failed. ERR=%s\n" +msgid "3935 Device \"%s\" is blocked labeling a Volume.\n" msgstr "" -#: src/dird/migrate.c:1047 +#: src/stored/dircmd.c:1425 #, c-format -msgid "No %s %s selection pattern specified.\n" +msgid "3935 Device \"%s\" is blocked for unknown reason.\n" msgstr "" -#: src/dird/migrate.c:1058 +#: src/stored/dircmd.c:1430 #, c-format -msgid "SQL to get %s failed. ERR=%s\n" +msgid "3936 Device \"%s\" is busy reading.\n" msgstr "" -#: src/dird/migrate.c:1063 +#: src/stored/dircmd.c:1433 #, c-format -msgid "Query of Pool \"%s\" returned no Jobs to %s.\n" +msgid "3937 Device \"%s\" is busy with writers=%d reserved=%d.\n" msgstr "" -#: src/dird/migrate.c:1101 +#: src/stored/dev.c:129 #, c-format -msgid "Regex pattern matched no Jobs to %s.\n" +msgid "Unable to stat device %s: ERR=%s\n" msgstr "" -#: src/dird/migrate.c:1265 +#: src/stored/dev.c:147 #, c-format -msgid "%s OK -- with warnings" +msgid "" +"%s is an unknown device type. Must be tape or directory\n" +" or have RequiresMount=yes for DVD. st_mode=%x\n" msgstr "" -#: src/dird/migrate.c:1267 -#, c-format -msgid "%s OK" +#: src/stored/dev.c:157 +msgid "DVD support is now deprecated.\n" msgstr "" -#: src/dird/migrate.c:1272 -#, c-format -msgid "*** %s Error ***" +#: src/stored/dev.c:160 +msgid "Aligned device not supported. Please use \"DeviceType = File\"\n" msgstr "" -#: src/dird/migrate.c:1282 +#: src/stored/dev.c:256 #, c-format -msgid "%s Canceled" +msgid "Unable to stat mount point %s: ERR=%s\n" msgstr "" -#: src/dird/migrate.c:1291 -#, c-format -msgid "Inappropriate %s term code" +#: src/stored/dev.c:261 +msgid "" +"Mount and unmount commands must defined for a device which requires mount.\n" msgstr "" -#: src/dird/migrate.c:1301 +#: src/stored/dev.c:272 #, c-format -msgid "%s -- no files to %s" +msgid "Min block size > max on device %s\n" msgstr "" -#: src/dird/migrate.c:1316 +#: src/stored/dev.c:276 #, c-format -msgid "" -"%s %s %s (%s):\n" -" Build OS: %s %s %s\n" -" Prev Backup JobId: %s\n" -" Prev Backup Job: %s\n" -" New Backup JobId: %s\n" -" Current JobId: %s\n" -" Current Job: %s\n" -" Backup Level: %s%s\n" -" Client: %s\n" -" FileSet: \"%s\" %s\n" -" Read Pool: \"%s\" (From %s)\n" -" Read Storage: \"%s\" (From %s)\n" -" Write Pool: \"%s\" (From %s)\n" -" Write Storage: \"%s\" (From %s)\n" -" Catalog: \"%s\" (From %s)\n" -" Start time: %s\n" -" End time: %s\n" -" Elapsed time: %s\n" -" Priority: %d\n" -" SD Files Written: %s\n" -" SD Bytes Written: %s (%sB)\n" -" Rate: %.1f KB/s\n" -" Volume name(s): %s\n" -" Volume Session Id: %d\n" -" Volume Session Time: %d\n" -" Last Volume Bytes: %s (%sB)\n" -" SD Errors: %d\n" -" SD termination status: %s\n" -" Termination: %s\n" -"\n" +msgid "Block size %u on device %s is too large, using default %u\n" msgstr "" -#: src/dird/migrate.c:1427 +#: src/stored/dev.c:281 #, c-format -msgid "No Next Pool specification found in Pool \"%s\".\n" +msgid "Max block size %u not multiple of device %s block size=%d.\n" msgstr "" -#: src/dird/migrate.c:1433 +#: src/stored/dev.c:285 #, c-format -msgid "No Storage specification found in Next Pool \"%s\".\n" -msgstr "" - -#: src/dird/migrate.c:1439 -msgid "Storage from Pool's NextPool resource" +msgid "Max Vol Size < 8 * Max Block Size for device %s\n" msgstr "" -#: src/dird/ua_prune.c:127 -msgid "Choose item to prune" +#: src/stored/dev.c:295 src/stored/dev.c:347 src/lib/openssl.c:110 +#: src/lib/openssl.c:169 +#, c-format +msgid "Unable to init mutex: ERR=%s\n" msgstr "" -#: src/dird/ua_prune.c:175 +#: src/stored/dev.c:301 src/stored/dev.c:307 #, c-format -msgid "Cannot prune Volume \"%s\" because it is archived.\n" +msgid "Unable to init cond variable: ERR=%s\n" msgstr "" -#: src/dird/ua_prune.c:217 -msgid "Pruned Jobs from JobHisto catalog.\n" +#: src/stored/dev.c:313 +#, fuzzy, c-format +msgid "Unable to init spool mutex: ERR=%s\n" +msgstr "Kan job cond variabele niet initialiseren: ERR=%s\n" + +#: src/stored/dev.c:319 +#, fuzzy, c-format +msgid "Unable to init acquire mutex: ERR=%s\n" +msgstr "Kan job cond variabele niet initialiseren: ERR=%s\n" + +#: src/stored/dev.c:325 +#, fuzzy, c-format +msgid "Unable to init read acquire mutex: ERR=%s\n" +msgstr "Kan job cond variabele niet initialiseren: ERR=%s\n" + +#: src/stored/dev.c:331 +#, fuzzy, c-format +msgid "Unable to init volcat mutex: ERR=%s\n" +msgstr "Kan job cond variabele niet initialiseren: ERR=%s\n" + +#: src/stored/dev.c:337 +#, fuzzy, c-format +msgid "Unable to init dcrs mutex: ERR=%s\n" +msgstr "Kan job cond variabele niet initialiseren: ERR=%s\n" + +#: src/stored/dev.c:426 +msgid "Illegal mode given to open dev.\n" msgstr "" -#: src/dird/ua_prune.c:305 -msgid "Begin pruning Files.\n" +#: src/stored/dev.c:478 +msgid "Bad device call. Device not open\n" msgstr "" -#: src/dird/ua_prune.c:320 -msgid "No Files found to prune.\n" +#: src/stored/dev.c:490 +#, c-format +msgid "Seek error: ERR=%s\n" msgstr "" -#: src/dird/ua_prune.c:343 +#: src/stored/dev.c:491 src/stored/tape_dev.c:293 src/stored/file_dev.c:73 +#: src/stored/file_dev.c:100 #, c-format -msgid "Pruned Files from %s Jobs for client %s from catalog.\n" +msgid "lseek error on %s. ERR=%s.\n" msgstr "" -#: src/dird/ua_prune.c:489 +#: src/stored/fd_cmds.c:193 #, c-format -msgid "Begin pruning Jobs older than %s.\n" +msgid "Command error with FD, hanging up. ERR=%s\n" msgstr "" -#: src/dird/ua_prune.c:600 +#: src/stored/fd_cmds.c:196 +msgid "Command error with FD, hanging up.\n" +msgstr "" + +#: src/stored/fd_cmds.c:207 #, c-format -msgid "Pruned %d %s for client %s from catalog.\n" +msgid "FD command not found: %s\n" msgstr "" -#: src/dird/ua_prune.c:601 -msgid "Jobs" +#: src/stored/fd_cmds.c:238 +msgid "Attempt to append on non-open session.\n" msgstr "" -#: src/dird/ua_prune.c:603 -msgid "No Jobs found to prune.\n" +#: src/stored/fd_cmds.c:250 src/stored/fd_cmds.c:293 +msgid "Attempt to close non-open session.\n" msgstr "" -#: src/dird/autoprune.c:75 -msgid "" -"End auto prune.\n" -"\n" +#: src/stored/fd_cmds.c:268 +msgid "Attempt to open already open session.\n" msgstr "" -#: src/dird/ua_run.c:154 -msgid "OK to run? (yes/mod/no): " +#: src/stored/fd_cmds.c:322 +msgid "Attempt to read on non-open session.\n" msgstr "" -#: src/dird/ua_run.c:193 -msgid "Job failed.\n" +#: src/stored/fd_cmds.c:340 src/stored/fd_cmds.c:349 +msgid "Attempt to open read on non-open session.\n" msgstr "" -#: src/dird/ua_run.c:196 +#: src/stored/fd_cmds.c:412 src/dird/getmsg.c:365 #, c-format -msgid "Job queued. JobId=%s\n" +msgid "Bad response to %s command: wanted %s, got %s\n" msgstr "" -#: src/dird/ua_run.c:203 +#: src/stored/fd_cmds.c:416 src/dird/getmsg.c:370 +#, c-format +msgid "Socket error on %s command: ERR=%s\n" +msgstr "" + +#: src/stored/block_util.c:88 #, c-format msgid "" -"\n" -"Bad response: %s. You must answer yes, mod, or no.\n" -"\n" +"Dump block %s %p: size=%d BlkNum=%d\n" +" Hdrcksum=%x cksum=%x\n" msgstr "" -#: src/dird/ua_run.c:207 -msgid "Job not run.\n" +#: src/stored/block_util.c:103 +#, c-format +msgid " Rec: VId=%u VT=%u FI=%s Strm=%s len=%d reclen=%d\n" msgstr "" -#: src/dird/ua_run.c:223 -msgid "Level" +#: src/stored/block_util.c:165 +#, c-format +msgid "%d block read errors not printed.\n" msgstr "" -#: src/dird/ua_run.c:228 -msgid "Restore Client" +#: src/stored/block_util.c:281 src/stored/block_util.c:297 +#: src/stored/block_util.c:307 +#, c-format +msgid "" +"Volume data error at %u:%u! Wanted ID: \"%s\", got \"%s\". Buffer " +"discarded.\n" msgstr "" -#: src/dird/ua_run.c:232 src/wx-console/wxbrestorepanel.cpp:356 -#: src/wx-console/wxbrestorepanel.cpp:854 -#: src/wx-console/wxbrestorepanel.cpp:1918 -msgid "When" +#: src/stored/block_util.c:322 +#, c-format +msgid "" +"Volume data error at %u:%u! Block length %u is insane (too large), probably " +"due to a bad archive.\n" msgstr "" -#: src/dird/ua_run.c:233 src/wx-console/wxbrestorepanel.cpp:357 -#: src/wx-console/wxbrestorepanel.cpp:1128 -#: src/wx-console/wxbrestorepanel.cpp:1921 -msgid "Priority" +#: src/stored/block_util.c:349 +#, c-format +msgid "" +"Volume data error at %u:%u!\n" +"Block checksum mismatch in block=%u len=%d: calc=%x blk=%x\n" msgstr "" -#: src/dird/ua_run.c:240 -msgid "Verify Job" +#: src/stored/block_util.c:435 +#, c-format +msgid "" +"User defined maximum volume size %s will be exceeded on device %s.\n" +" Marking Volume \"%s\" as Full.\n" msgstr "" -#: src/dird/ua_run.c:243 src/wx-console/wxbrestorepanel.cpp:349 -#: src/wx-console/wxbrestorepanel.cpp:1899 -msgid "Bootstrap" +#: src/stored/block_util.c:472 src/stored/block_util.c:478 +#, c-format +msgid "Backspace file at EOT failed. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:244 src/wx-console/wxbrestorepanel.cpp:350 -#: src/wx-console/wxbrestorepanel.cpp:1104 -#: src/wx-console/wxbrestorepanel.cpp:1901 -msgid "Where" +#: src/stored/block_util.c:485 +#, c-format +msgid "Backspace record at EOT failed. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:245 -msgid "File Relocation" +#: src/stored/block_util.c:502 +#, c-format +msgid "Re-read last block at EOT failed. ERR=%s" msgstr "" -#: src/dird/ua_run.c:246 src/wx-console/wxbrestorepanel.cpp:352 -#: src/wx-console/wxbrestorepanel.cpp:1112 -#: src/wx-console/wxbrestorepanel.cpp:1905 -#: src/wx-console/wxbrestorepanel.cpp:1906 -#: src/wx-console/wxbrestorepanel.cpp:1907 -#: src/wx-console/wxbrestorepanel.cpp:1908 -#: src/wx-console/wxbrestorepanel.cpp:1909 -msgid "Replace" +#: src/stored/block_util.c:512 +#, c-format +msgid "" +"Re-read of last block: block numbers differ by more than one.\n" +"Probable tape misconfiguration and data loss. Read block=%u Want block=%u.\n" msgstr "" -#: src/dird/ua_run.c:247 -msgid "JobId" +#: src/stored/block_util.c:517 +#, c-format +msgid "" +"Re-read of last block OK, but block numbers differ. Read block=%u Want block=" +"%u.\n" msgstr "" -#: src/dird/ua_run.c:250 -msgid "Plugin Options" +#: src/stored/block_util.c:521 +msgid "Re-read of last block succeeded.\n" msgstr "" -#: src/dird/ua_run.c:261 src/dird/ua_run.c:1569 -msgid "user selection" +#: src/stored/block_util.c:560 +#, c-format +msgid "" +"Error writing final EOF to tape. This Volume may not be readable.\n" +"%s" msgstr "" -#: src/dird/ua_run.c:293 +#: src/stored/block_util.c:578 +#, fuzzy +msgid "Error sending Volume info to Director.\n" +msgstr "Geen Volumes gevonden om terug te zetten.\n" + +#: src/stored/bcopy.c:64 +#, c-format msgid "" -"Please enter desired start time as YYYY-MM-DD HH:MM:SS (return for now): " +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: bcopy [-d debug_level] \n" +" -b bootstrap specify a bootstrap file\n" +" -c specify a Storage configuration file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -i specify input Volume names (separated by |)\n" +" -o specify output Volume names (separated by |)\n" +" -p proceed inspite of errors\n" +" -v verbose\n" +" -w specify working directory (default /tmp)\n" +" -? print this message\n" +"\n" msgstr "" -#: src/dird/ua_run.c:301 src/dird/ua_run.c:477 -msgid "Invalid time, using current time.\n" +#: src/stored/bcopy.c:209 +msgid "Write of last block failed.\n" msgstr "" -#: src/dird/ua_run.c:308 -msgid "Enter new Priority: " +#: src/stored/bcopy.c:213 +#, c-format +msgid "%u Jobs copied. %u records copied.\n" msgstr "" -#: src/dird/ua_run.c:312 -msgid "Priority must be a positive integer.\n" +#: src/stored/bcopy.c:246 +msgid "Volume is prelabeled. This volume cannot be copied.\n" msgstr "" -#: src/dird/ua_run.c:333 -msgid "Please enter the Bootstrap file name: " +#: src/stored/bcopy.c:249 +msgid "Volume label not copied.\n" msgstr "" -#: src/dird/ua_run.c:345 -#, c-format -msgid "Warning cannot open %s: ERR=%s\n" +#: src/stored/bcopy.c:255 +msgid "Copy skipped. Record does not match BSR filter.\n" msgstr "" -#: src/dird/ua_run.c:364 -msgid "Please enter the full path prefix for restore (/ for none): " +#: src/stored/bcopy.c:286 +msgid "EOM label not copied.\n" msgstr "" -#: src/dird/ua_run.c:386 -msgid "Replace:\n" +#: src/stored/bcopy.c:289 +msgid "EOT label not copied.\n" msgstr "" -#: src/dird/ua_run.c:390 -msgid "Select replace option" +#: src/stored/tape_dev.c:226 +#, c-format +msgid "No tape loaded or drive offline on %s.\n" msgstr "" -#: src/dird/ua_run.c:401 -msgid "" -"You must set the bootstrap file to NULL to be able to specify a JobId.\n" +#: src/stored/tape_dev.c:236 +#, c-format +msgid "Rewind error on %s. ERR=%s.\n" msgstr "" -#: src/dird/ua_run.c:406 -msgid "Please Plugin Options string: " +#: src/stored/tape_dev.c:261 +#, c-format +msgid "Bad call to eod. Device %s not open\n" msgstr "" -#: src/dird/ua_run.c:444 src/dird/ua_run.c:453 -msgid "User input" +#: src/stored/tape_dev.c:333 +#, c-format +msgid "ioctl MTEOM error on %s. ERR=%s.\n" msgstr "" -#: src/dird/ua_run.c:507 +#: src/stored/tape_dev.c:344 src/stored/os.c:184 #, c-format -msgid "Invalid replace option: %s\n" +msgid "ioctl MTIOCGET error on %s. ERR=%s.\n" msgstr "" -#: src/dird/ua_run.c:589 +#: src/stored/tape_dev.c:428 +msgid "Bad call to load_dev. Device not open\n" +msgstr "" + +#: src/stored/tape_dev.c:439 src/stored/tape_dev.c:452 #, c-format -msgid "strip_prefix=%s add_prefix=%s add_suffix=%s\n" +msgid "ioctl MTLOAD error on %s. ERR=%s.\n" msgstr "" -#: src/dird/ua_run.c:592 -msgid "This will replace your current Where value\n" +#: src/stored/tape_dev.c:483 +#, c-format +msgid "ioctl MTOFFL error on %s. ERR=%s.\n" msgstr "" -#: src/dird/ua_run.c:593 -msgid "Strip prefix" +#: src/stored/tape_dev.c:524 +msgid "Bad call to fsf. Device not open\n" msgstr "" -#: src/dird/ua_run.c:594 -msgid "Add prefix" +#: src/stored/tape_dev.c:535 src/stored/tape_dev.c:662 +#, c-format +msgid "Device %s at End of Tape.\n" msgstr "" -#: src/dird/ua_run.c:595 -msgid "Add file suffix" +#: src/stored/tape_dev.c:566 src/stored/tape_dev.c:642 +#, c-format +msgid "ioctl MTFSF error on %s. ERR=%s.\n" msgstr "" -#: src/dird/ua_run.c:596 -msgid "Enter a regexp" +#: src/stored/tape_dev.c:691 +msgid "Bad call to bsf. Device not open\n" msgstr "" -#: src/dird/ua_run.c:597 -msgid "Test filename manipulation" +#: src/stored/tape_dev.c:697 +#, c-format +msgid "Device %s cannot BSF because it is not a tape.\n" msgstr "" -#: src/dird/ua_run.c:598 -msgid "Use this ?" +#: src/stored/tape_dev.c:714 +#, c-format +msgid "ioctl MTBSF error on %s. ERR=%s.\n" msgstr "" -#: src/dird/ua_run.c:603 -msgid "Please enter the path prefix to strip: " +#: src/stored/tape_dev.c:733 +msgid "Bad call to fsr. Device not open\n" msgstr "" -#: src/dird/ua_run.c:611 -msgid "Please enter the path prefix to add (/ for none): " +#: src/stored/tape_dev.c:743 +#, c-format +msgid "ioctl MTFSR not permitted on %s.\n" msgstr "" -#: src/dird/ua_run.c:622 -msgid "Please enter the file suffix to add: " +#: src/stored/tape_dev.c:771 +#, c-format +msgid "ioctl MTFSR %d error on %s. ERR=%s.\n" msgstr "" -#: src/dird/ua_run.c:629 -msgid "Please enter a valid regexp (!from!to!): " +#: src/stored/tape_dev.c:789 +msgid "Bad call to bsr_dev. Device not open\n" msgstr "" -#: src/dird/ua_run.c:642 +#: src/stored/tape_dev.c:799 #, c-format -msgid "regexwhere=%s\n" +msgid "ioctl MTBSR not permitted on %s.\n" msgstr "" -#: src/dird/ua_run.c:648 +#: src/stored/tape_dev.c:813 #, c-format -msgid "strip_prefix=%s add_prefix=%s add_suffix=%s result=%s\n" +msgid "ioctl MTBSR error on %s. ERR=%s.\n" msgstr "" -#: src/dird/ua_run.c:655 -msgid "Cannot use your regexp\n" +#: src/stored/tape_dev.c:850 src/stored/file_dev.c:90 +msgid "Bad call to reposition. Device not open\n" msgstr "" -#: src/dird/ua_run.c:658 -msgid "Enter a period (.) to stop this test\n" +#: src/stored/tape_dev.c:912 +msgid "Bad call to weof_dev. Device not open\n" msgstr "" -#: src/dird/ua_run.c:659 -msgid "Please enter filename to test: " +#: src/stored/tape_dev.c:922 +msgid "Attempt to WEOF on non-appendable Volume\n" msgstr "" -#: src/dird/ua_run.c:661 +#: src/stored/tape_dev.c:940 #, c-format -msgid "%s -> %s\n" +msgid "ioctl MTWEOF error on %s. ERR=%s.\n" msgstr "" -#: src/dird/ua_run.c:705 -msgid "Cannot use your regexp.\n" +#: src/stored/tape_dev.c:986 src/stored/file_dev.c:318 +#, c-format +msgid "Device %s cannot be %smounted. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:718 src/dird/ua_run.c:748 -msgid "Levels:\n" +#: src/stored/butil.c:46 +msgid "Nohdr," msgstr "" -#: src/dird/ua_run.c:720 src/stored/status.c:665 src/lib/util.c:426 -#: src/lib/util.c:472 src/filed/status.c:519 -msgid "Full" +#: src/stored/butil.c:49 +msgid "partial," msgstr "" -#: src/dird/ua_run.c:721 src/stored/status.c:668 src/lib/util.c:429 -#: src/filed/status.c:522 -msgid "Incremental" +#: src/stored/butil.c:52 +msgid "empty," msgstr "" -#: src/dird/ua_run.c:722 src/stored/status.c:671 src/lib/util.c:432 -#: src/filed/status.c:525 -msgid "Differential" +#: src/stored/butil.c:55 +msgid "Nomatch," msgstr "" -#: src/dird/ua_run.c:723 src/stored/status.c:674 src/lib/util.c:435 -#: src/filed/status.c:528 -msgid "Since" +#: src/stored/butil.c:58 +msgid "cont," msgstr "" -#: src/dird/ua_run.c:724 -msgid "VirtualFull" +#: src/stored/butil.c:148 +msgid "Volume name or names is too long. Please use a .bsr file.\n" msgstr "" -#: src/dird/ua_run.c:725 src/dird/ua_run.c:754 -msgid "Select level" +#: src/stored/butil.c:168 +#, c-format +msgid "Cannot find device \"%s\" in config file %s.\n" msgstr "" -#: src/dird/ua_run.c:749 -msgid "Initialize Catalog" +#: src/stored/butil.c:175 +#, c-format +msgid "Cannot init device %s\n" msgstr "" -#: src/dird/ua_run.c:750 src/stored/status.c:677 src/lib/util.c:438 -#: src/filed/status.c:531 -msgid "Verify Catalog" +#: src/stored/butil.c:195 +#, c-format +msgid "Cannot open %s\n" msgstr "" -#: src/dird/ua_run.c:751 src/lib/util.c:444 -msgid "Verify Volume to Catalog" +#: src/stored/butil.c:282 +#, c-format +msgid "Could not find device \"%s\" in config file %s.\n" msgstr "" -#: src/dird/ua_run.c:752 src/lib/util.c:447 -msgid "Verify Disk to Catalog" +#: src/stored/butil.c:287 +#, c-format +msgid "Using device: \"%s\" for writing.\n" msgstr "" -#: src/dird/ua_run.c:753 -msgid "Verify Volume Data (not yet implemented)" +#: src/stored/butil.c:289 +#, c-format +msgid "Using device: \"%s\" for reading.\n" msgstr "" -#: src/dird/ua_run.c:774 -msgid "Level not appropriate for this Job. Cannot be changed.\n" +#: src/stored/butil.c:305 +msgid "Unexpected End of Data\n" msgstr "" -#: src/dird/ua_run.c:805 -#, c-format -msgid "" -"Run Admin Job\n" -"JobName: %s\n" -"FileSet: %s\n" -"Client: %s\n" -"Storage: %s\n" -"When: %s\n" -"Priority: %d\n" +#: src/stored/butil.c:307 +msgid "Unexpected End of Tape\n" msgstr "" -#: src/dird/ua_run.c:849 -#, c-format -msgid "" -"Run Backup job\n" -"JobName: %s\n" -"Level: %s\n" -"Client: %s\n" -"FileSet: %s\n" -"Pool: %s (From %s)\n" -"Storage: %s (From %s)\n" -"When: %s\n" -"Priority: %d\n" -"%s%s%s" +#: src/stored/butil.c:309 +msgid "Unexpected End of File\n" msgstr "" -#: src/dird/ua_run.c:880 -#, c-format -msgid "Could not get job record for selected JobId. ERR=%s" +#: src/stored/butil.c:311 +msgid "Tape Door is Open\n" msgstr "" -#: src/dird/ua_run.c:919 -#, c-format -msgid "" -"Run Verify Job\n" -"JobName: %s\n" -"Level: %s\n" -"Client: %s\n" -"FileSet: %s\n" -"Pool: %s (From %s)\n" -"Storage: %s (From %s)\n" -"Verify Job: %s\n" -"Verify List: %s\n" -"When: %s\n" -"Priority: %d\n" +#: src/stored/butil.c:313 +msgid "Unexpected Tape is Off-line\n" msgstr "" -#: src/dird/ua_run.c:948 -msgid "Please enter a JobId for restore: " +#: src/stored/ansi_label.c:81 +#, c-format +msgid "Read error on device %s in ANSI label. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:988 -#, c-format -msgid "" -"Run Restore job\n" -"JobName: %s\n" -"Bootstrap: %s\n" -"RegexWhere: %s\n" -"Replace: %s\n" -"FileSet: %s\n" -"Backup Client: %s\n" -"Restore Client: %s\n" -"Storage: %s\n" -"When: %s\n" -"Catalog: %s\n" -"Priority: %d\n" -"Plugin Options: %s\n" +#: src/stored/ansi_label.c:91 +msgid "Insane! End of tape while reading ANSI label.\n" msgstr "" -#: src/dird/ua_run.c:1044 -#, c-format -msgid "" -"Run Restore job\n" -"JobName: %s\n" -"Bootstrap: %s\n" -"Where: %s\n" -"Replace: %s\n" -"FileSet: %s\n" -"Backup Client: %s\n" -"Restore Client: %s\n" -"Storage: %s\n" -"When: %s\n" -"Catalog: %s\n" -"Priority: %d\n" -"Plugin Options: %s\n" +#: src/stored/ansi_label.c:117 +msgid "No VOL1 label while reading ANSI/IBM label.\n" msgstr "" -#: src/dird/ua_run.c:1075 +#: src/stored/ansi_label.c:140 #, c-format -msgid "" -"Run Restore job\n" -"JobName: %s\n" -"Bootstrap: %s\n" +msgid "Wanted ANSI Volume \"%s\" got \"%s\"\n" msgstr "" -#: src/dird/ua_run.c:1083 -#, c-format -msgid "RegexWhere: %s\n" +#: src/stored/ansi_label.c:151 +msgid "No HDR1 label while reading ANSI label.\n" msgstr "" -#: src/dird/ua_run.c:1086 +#: src/stored/ansi_label.c:157 #, c-format -msgid "Where: %s\n" +msgid "ANSI/IBM Volume \"%s\" does not belong to Bacula.\n" msgstr "" -#: src/dird/ua_run.c:1090 -#, c-format -msgid "" -"Replace: %s\n" -"Client: %s\n" -"Storage: %s\n" -"JobId: %s\n" -"When: %s\n" -"Catalog: %s\n" -"Priority: %d\n" -"Plugin Options: %s\n" +#: src/stored/ansi_label.c:169 +msgid "No HDR2 label while reading ANSI/IBM label.\n" msgstr "" -#: src/dird/ua_run.c:1145 -msgid "Run Copy job\n" +#: src/stored/ansi_label.c:184 +msgid "Unknown or bad ANSI/IBM label record.\n" msgstr "" -#: src/dird/ua_run.c:1147 -msgid "Run Migration job\n" +#: src/stored/ansi_label.c:192 +msgid "Too many records in while reading ANSI/IBM label.\n" msgstr "" -#: src/dird/ua_run.c:1176 +#: src/stored/ansi_label.c:292 #, c-format -msgid "Unknown Job Type=%d\n" +msgid "ANSI Volume label name \"%s\" longer than 6 chars.\n" msgstr "" -#: src/dird/ua_run.c:1245 +#: src/stored/ansi_label.c:318 #, c-format -msgid "Value missing for keyword %s\n" +msgid "Could not write ANSI VOL1 label. Wanted size=%d got=%d ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:1252 -msgid "Job name specified twice.\n" +#: src/stored/ansi_label.c:356 src/stored/ansi_label.c:385 +#, c-format +msgid "Could not write ANSI HDR1 label. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:1260 -msgid "JobId specified twice.\n" +#: src/stored/ansi_label.c:361 src/stored/ansi_label.c:392 +msgid "Could not write ANSI HDR1 label.\n" msgstr "" -#: src/dird/ua_run.c:1269 src/dird/ua_run.c:1409 -msgid "Client specified twice.\n" +#: src/stored/ansi_label.c:397 +#, c-format +msgid "Error writing EOF to tape. ERR=%s" msgstr "" -#: src/dird/ua_run.c:1277 -msgid "FileSet specified twice.\n" +#: src/stored/ansi_label.c:402 +msgid "write_ansi_ibm_label called for non-ANSI/IBM type\n" msgstr "" -#: src/dird/ua_run.c:1285 -msgid "Level specified twice.\n" +#: src/stored/vol_mgr.c:80 +#, c-format +msgid "Unable to initialize volume list lock. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:1294 -msgid "Storage specified twice.\n" +#: src/stored/vol_mgr.c:370 +#, c-format +msgid "Could not reserve volume \"%s\", because job canceled.\n" msgstr "" -#: src/dird/ua_run.c:1302 -msgid "RegexWhere or Where specified twice.\n" +#: src/stored/vol_mgr.c:381 +#, c-format +msgid "Could not reserve volume \"%s\" for append, because it will be read.\n" msgstr "" -#: src/dird/ua_run.c:1307 -msgid "No authorization for \"regexwhere\" specification.\n" +#: src/stored/vol_mgr.c:414 +#, c-format +msgid "Cannot free Volume \"%s\", because it is reserved by someone else.\n" msgstr "" -#: src/dird/ua_run.c:1314 -msgid "Where or RegexWhere specified twice.\n" +#: src/stored/vol_mgr.c:512 +#, c-format +msgid "Volume %s is busy swapping from %s to %s\n" msgstr "" -#: src/dird/ua_run.c:1319 -msgid "No authoriztion for \"where\" specification.\n" +#: src/stored/vol_mgr.c:515 +#, c-format +msgid "Volume %s is busy swapping.\n" msgstr "" -#: src/dird/ua_run.c:1326 -msgid "Bootstrap specified twice.\n" +#: src/stored/vol_mgr.c:519 +#, c-format +msgid "%s device %s is busy.\n" msgstr "" -#: src/dird/ua_run.c:1334 -msgid "Replace specified twice.\n" +#: src/stored/file_dev.c:148 +#, c-format +msgid "Could not open file device %s. No Volume name given.\n" msgstr "" -#: src/dird/ua_run.c:1342 -msgid "When specified twice.\n" -msgstr "" +#: src/stored/file_dev.c:171 +#, fuzzy, c-format +msgid "Could not open(%s,%s,0640): ERR=%s\n" +msgstr "Kan Client niet vinden %s: ERR=%s" -#: src/dird/ua_run.c:1350 -msgid "Priority specified twice.\n" +#: src/stored/file_dev.c:204 +#, c-format +msgid "Unable to truncate device %s. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:1355 -msgid "Priority must be positive nonzero setting it to 10.\n" +#: src/stored/file_dev.c:221 +#, c-format +msgid "Unable to stat device %s. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:1365 -msgid "Verify Job specified twice.\n" +#: src/stored/file_dev.c:235 +#, c-format +msgid "Device %s doesn't support ftruncate(). Recreating file %s.\n" msgstr "" -#: src/dird/ua_run.c:1393 -msgid "Migration Job specified twice.\n" +#: src/stored/file_dev.c:247 +#, c-format +msgid "Could not reopen: %s, ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:1401 -msgid "Pool specified twice.\n" +#: src/stored/lock.c:231 src/stored/lock.c:259 +#, c-format +msgid "pthread_cond_wait failure. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:1417 -msgid "Restore Client specified twice.\n" +#: src/stored/lock.c:475 +msgid "unknown blocked code" msgstr "" -#: src/dird/ua_run.c:1424 -msgid "Plugin Options not yet implemented.\n" +#: src/stored/read.c:55 +msgid "No Volume names found for restore.\n" msgstr "" -#: src/dird/ua_run.c:1427 -msgid "Plugin Options specified twice.\n" +#: src/stored/read.c:132 src/stored/read.c:250 +#, c-format +msgid ">filed: Error Hdr=%s\n" msgstr "" -#: src/dird/ua_run.c:1432 -msgid "No authoriztion for \"PluginOptions\" specification.\n" +#: src/stored/read.c:133 src/stored/read.c:166 src/stored/read.c:223 +#: src/stored/read.c:251 src/stored/read.c:266 +#, c-format +msgid "Error sending to File daemon. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:1439 -msgid "Spool flag specified twice.\n" +#: src/stored/read.c:165 src/stored/read.c:265 +#, c-format +msgid "Error sending to FD. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:1446 -msgid "Invalid spooldata flag.\n" +#: src/stored/autochanger.c:62 +#, c-format +msgid "No Changer Name given for device %s. Cannot continue.\n" msgstr "" -#: src/dird/ua_run.c:1455 -msgid "IgnoreDuplicateCheck flag specified twice.\n" +#: src/stored/autochanger.c:68 +#, c-format +msgid "No Changer Command given for device %s. Cannot continue.\n" msgstr "" -#: src/dird/ua_run.c:1462 -msgid "Invalid ignoreduplicatecheck flag.\n" +#: src/stored/autochanger.c:137 +#, c-format +msgid "No slot defined in catalog (slot=%d) for Volume \"%s\" on %s.\n" msgstr "" -#: src/dird/ua_run.c:1467 -msgid "Accurate flag specified twice.\n" +#: src/stored/autochanger.c:139 +msgid "Cartridge change or \"update slots\" may be required.\n" msgstr "" -#: src/dird/ua_run.c:1474 -msgid "Invalid accurate flag.\n" +#: src/stored/autochanger.c:145 +#, c-format +msgid "No \"Changer Device\" for %s. Manual load of Volume may be required.\n" msgstr "" -#: src/dird/ua_run.c:1495 +#: src/stored/autochanger.c:152 #, c-format -msgid "Invalid keyword: %s\n" +msgid "No \"Changer Command\" for %s. Manual load of Volume may be requird.\n" msgstr "" -#: src/dird/ua_run.c:1510 +#: src/stored/autochanger.c:186 #, c-format -msgid "Catalog \"%s\" not found\n" +msgid "3304 Issuing autochanger \"load slot %d, drive %d\" command.\n" msgstr "" -#: src/dird/ua_run.c:1514 +#: src/stored/autochanger.c:194 #, c-format -msgid "No authorization. Catalog \"%s\".\n" +msgid "3305 Autochanger \"load slot %d, drive %d\", status is OK.\n" msgstr "" -#: src/dird/ua_run.c:1525 +#: src/stored/autochanger.c:207 #, c-format -msgid "Job \"%s\" not found\n" +msgid "" +"3992 Bad autochanger \"load slot %d, drive %d\": ERR=%s.\n" +"Results=%s\n" msgstr "" -#: src/dird/ua_run.c:1532 -msgid "A job name must be specified.\n" +#: src/stored/autochanger.c:270 +#, c-format +msgid "3301 Issuing autochanger \"loaded? drive %d\" command.\n" msgstr "" -#: src/dird/ua_run.c:1538 +#: src/stored/autochanger.c:282 #, c-format -msgid "No authorization. Job \"%s\".\n" +msgid "3302 Autochanger \"loaded? drive %d\", result is Slot %d.\n" msgstr "" -#: src/dird/ua_run.c:1546 +#: src/stored/autochanger.c:289 #, c-format -msgid "Pool \"%s\" not found.\n" +msgid "3302 Autochanger \"loaded? drive %d\", result: nothing loaded.\n" msgstr "" -#: src/dird/ua_run.c:1556 +#: src/stored/autochanger.c:301 #, c-format -msgid "No authorization. Pool \"%s\".\n" +msgid "" +"3991 Bad autochanger \"loaded? drive %d\" command: ERR=%s.\n" +"Results=%s\n" msgstr "" -#: src/dird/ua_run.c:1566 +#: src/stored/autochanger.c:321 #, c-format -msgid "Storage \"%s\" not found.\n" +msgid "Lock failure on autochanger. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:1575 src/dird/job.c:1245 -msgid "No storage specified.\n" +#: src/stored/autochanger.c:335 +#, c-format +msgid "Unlock failure on autochanger. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:1578 +#: src/stored/autochanger.c:382 src/stored/autochanger.c:548 #, c-format -msgid "No authorization. Storage \"%s\".\n" +msgid "3307 Issuing autochanger \"unload slot %d, drive %d\" command.\n" msgstr "" -#: src/dird/ua_run.c:1598 src/dird/ua_run.c:1618 +#: src/stored/autochanger.c:395 #, c-format -msgid "No authorization. Client \"%s\".\n" +msgid "" +"3995 Bad autochanger \"unload slot %d, drive %d\": ERR=%s\n" +"Results=%s\n" msgstr "" -#: src/dird/ua_run.c:1608 +#: src/stored/autochanger.c:498 #, c-format -msgid "Restore Client \"%s\" not found.\n" +msgid "Volume \"%s\" wanted on %s is in use by device %s\n" msgstr "" -#: src/dird/ua_run.c:1627 +#: src/stored/autochanger.c:565 #, c-format -msgid "FileSet \"%s\" not found.\n" +msgid "3997 Bad autochanger \"unload slot %d, drive %d\": ERR=%s.\n" msgstr "" -#: src/dird/ua_run.c:1636 +#: src/stored/autochanger.c:608 #, c-format -msgid "No authorization. FileSet \"%s\".\n" +msgid "3993 Device %s not an autochanger device.\n" msgstr "" -#: src/dird/ua_run.c:1644 +#: src/stored/autochanger.c:635 #, c-format -msgid "Verify Job \"%s\" not found.\n" +msgid "3306 Issuing autochanger \"%s\" command.\n" msgstr "" -#: src/dird/ua_run.c:1654 -#, c-format -msgid "Migration Job \"%s\" not found.\n" +#: src/stored/autochanger.c:638 +msgid "3996 Open bpipe failed.\n" msgstr "" -#: src/dird/dir_plugins.c:181 src/stored/sd_plugins.c:194 -#: src/filed/fd_plugins.c:1130 +#: src/stored/os.c:125 #, c-format -msgid "Loaded plugin: %s\n" +msgid "Unable to set eotmodel on device %s: ERR=%s\n" msgstr "" -#: src/dird/dir_plugins.c:201 src/stored/sd_plugins.c:214 -#: src/filed/fd_plugins.c:1151 -#, c-format -msgid "Plugin magic wrong. Plugin=%s wanted=%s got=%s\n" +#: src/stored/os.c:179 +msgid " Bacula status:" msgstr "" -#: src/dird/dir_plugins.c:209 src/stored/sd_plugins.c:222 -#: src/filed/fd_plugins.c:1159 +#: src/stored/os.c:180 src/stored/os.c:263 src/stored/os.c:265 #, c-format -msgid "Plugin version incorrect. Plugin=%s wanted=%d got=%d\n" +msgid " file=%d block=%d\n" msgstr "" -#: src/dird/dir_plugins.c:218 src/stored/sd_plugins.c:231 -#: src/filed/fd_plugins.c:1167 -#, c-format -msgid "Plugin license incompatible. Plugin=%s license=%s\n" +#: src/stored/os.c:188 +msgid " Device status:" msgstr "" -#: src/dird/dir_plugins.c:226 src/stored/sd_plugins.c:239 -#: src/filed/fd_plugins.c:1175 +#: src/stored/os.c:364 #, c-format -msgid "Plugin size incorrect. Plugin=%s wanted=%d got=%d\n" +msgid "unknown func code %d" msgstr "" -#: src/dird/backup.c:96 -msgid "No Storage specification found in Job or Pool.\n" +#: src/stored/os.c:370 +#, c-format +msgid "I/O function \"%s\" not supported on this device.\n" msgstr "" -#: src/dird/backup.c:256 +#: src/stored/read_records.c:77 #, c-format -msgid "Using BaseJobId(s): %s\n" +msgid "End of Volume at file %u on device %s, Volume \"%s\"\n" msgstr "" -#: src/dird/backup.c:266 -msgid "Cannot find previous jobids.\n" +#: src/stored/read_records.c:81 +msgid "End of all volumes.\n" msgstr "" -#: src/dird/backup.c:275 -msgid "Sending Accurate information.\n" +#: src/stored/read_records.c:131 +msgid "Did fsr in attemp to skip bad record.\n" msgstr "" -#: src/dird/backup.c:328 +#: src/stored/read_records.c:370 #, c-format -msgid "Start Backup JobId %s, Job=%s\n" +msgid "Forward spacing Volume \"%s\" to file:block %u:%u.\n" msgstr "" -#: src/dird/backup.c:521 -#, c-format -msgid "Unexpected Client Job message: %s\n" +#: src/stored/read_records.c:394 +msgid "Begin Session" +msgstr "" + +#: src/stored/read_records.c:398 +msgid "End Session" msgstr "" -#: src/dird/backup.c:534 +#: src/stored/read_records.c:404 #, c-format -msgid "Network error with FD during %s: ERR=%s\n" +msgid "Unknown code %d\n" msgstr "" -#: src/dird/backup.c:569 -msgid "No Job status returned from FD.\n" +#: src/stored/parse_bsr.c:115 +#, c-format +msgid "Cannot open bootstrap file %s: %s\n" msgstr "" -#: src/dird/backup.c:657 -msgid "Backup failed -- incomplete" +#: src/stored/parse_bsr.c:219 +#, c-format +msgid "Device \"%s\" in bsr at inappropriate place.\n" msgstr "" -#: src/dird/backup.c:730 +#: src/stored/parse_bsr.c:282 #, c-format -msgid "" -"%s %s %s (%s):\n" -" Build OS: %s %s %s\n" -" JobId: %d\n" -" Job: %s\n" -" Backup Level: %s%s\n" -" Client: \"%s\" %s\n" -" FileSet: \"%s\" %s\n" -" Pool: \"%s\" (From %s)\n" -" Catalog: \"%s\" (From %s)\n" -" Storage: \"%s\" (From %s)\n" -" Scheduled time: %s\n" -" Start time: %s\n" -" End time: %s\n" -" Elapsed time: %s\n" -" Priority: %d\n" -" FD Files Written: %s\n" -" SD Files Written: %s\n" -" FD Bytes Written: %s (%sB)\n" -" SD Bytes Written: %s (%sB)\n" -" Rate: %.1f KB/s\n" -" Software Compression: %s\n" -"%s VSS: %s\n" -" Encryption: %s\n" -" Accurate: %s\n" -" Volume name(s): %s\n" -" Volume Session Id: %d\n" -" Volume Session Time: %d\n" -" Last Volume Bytes: %s (%sB)\n" -" Non-fatal FD errors: %d\n" -" SD Errors: %d\n" -" FD termination status: %s\n" -" SD termination status: %s\n" -" Termination: %s\n" -"\n" +msgid "REGEX '%s' compile error. ERR=%s\n" msgstr "" -#: src/dird/backup.c:832 -#, c-format -msgid "Could not get Job Volume Parameters to update Bootstrap file. ERR=%s\n" +#: src/stored/parse_bsr.c:325 +msgid "JobType not yet implemented\n" msgstr "" -#: src/dird/backup.c:868 -#, c-format -msgid "" -"Could not open WriteBootstrap file:\n" -"%s: ERR=%s\n" +#: src/stored/parse_bsr.c:333 +msgid "JobLevel not yet implemented\n" msgstr "" -#: src/dird/restore.c:137 src/dird/msgchan.c:476 +#: src/stored/parse_bsr.c:378 #, c-format -msgid "Could not open bootstrap file %s: ERR=%s\n" +msgid "MediaType %s in bsr at inappropriate place.\n" msgstr "" -#: src/dird/restore.c:185 src/dird/restore.c:276 +#: src/stored/parse_bsr.c:683 #, c-format -msgid "Could not get storage resource '%s'.\n" +msgid "Slot %d in bsr at inappropriate place.\n" msgstr "" -#: src/dird/restore.c:314 +#: src/stored/parse_bsr.c:707 #, c-format -msgid "Could not acquire read storage lock for \"%s\"" +msgid "VolFile : %u-%u\n" msgstr "" -#: src/dird/restore.c:505 -msgid "" -"Cannot restore without a bootstrap file.\n" -"You probably ran a restore job directly. All restore jobs must\n" -"be run using the restore command.\n" +#: src/stored/parse_bsr.c:715 +#, c-format +msgid "VolBlock : %u-%u\n" msgstr "" -#: src/dird/restore.c:513 +#: src/stored/parse_bsr.c:723 #, c-format -msgid "Start Restore Job %s\n" +msgid "VolAddr : %llu-%llu\n" msgstr "" -#: src/dird/restore.c:564 -msgid "Restore OK -- warning file count mismatch" +#: src/stored/parse_bsr.c:732 +#, c-format +msgid "FileIndex : %u\n" msgstr "" -#: src/dird/restore.c:566 -msgid "Restore OK" +#: src/stored/parse_bsr.c:734 +#, c-format +msgid "FileIndex : %u-%u\n" msgstr "" -#: src/dird/restore.c:570 -msgid "Restore OK -- with warnings" +#: src/stored/parse_bsr.c:744 +#, c-format +msgid "JobId : %u\n" msgstr "" -#: src/dird/restore.c:574 -msgid "*** Restore Error ***" +#: src/stored/parse_bsr.c:746 +#, c-format +msgid "JobId : %u-%u\n" msgstr "" -#: src/dird/restore.c:584 -msgid "Restore Canceled" +#: src/stored/parse_bsr.c:756 +#, c-format +msgid "SessId : %u\n" msgstr "" -#: src/dird/restore.c:611 +#: src/stored/parse_bsr.c:758 #, c-format -msgid "" -"%s %s %s (%s):\n" -" Build OS: %s %s %s\n" -" JobId: %d\n" -" Job: %s\n" -" Restore Client: %s\n" -" Start time: %s\n" -" End time: %s\n" -" Files Expected: %s\n" -" Files Restored: %s\n" -" Bytes Restored: %s\n" -" Rate: %.1f KB/s\n" -" FD Errors: %d\n" -" FD termination status: %s\n" -" SD termination status: %s\n" -" Termination: %s\n" -"\n" +msgid "SessId : %u-%u\n" msgstr "" -#: src/dird/ua_status.c:174 -msgid "Status available for:\n" +#: src/stored/parse_bsr.c:767 +#, c-format +msgid "VolumeName : %s\n" msgstr "" -#: src/dird/ua_status.c:180 -msgid "Select daemon type for status" +#: src/stored/parse_bsr.c:768 +#, c-format +msgid " MediaType : %s\n" msgstr "" -#: src/dird/ua_status.c:294 src/stored/status.c:248 +#: src/stored/parse_bsr.c:769 #, c-format -msgid "%s Version: %s (%s) %s %s %s\n" +msgid " Device : %s\n" msgstr "" -#: src/dird/ua_status.c:297 +#: src/stored/parse_bsr.c:770 #, c-format -msgid "Daemon started %s. Jobs: run=%d, running=%d mode=%d,%d\n" +msgid " Slot : %d\n" msgstr "" -#: src/dird/ua_status.c:300 src/stored/status.c:258 src/filed/status.c:142 +#: src/stored/parse_bsr.c:779 #, c-format -msgid " Heap: heap=%s smbytes=%s max_bytes=%s bufs=%s max_bufs=%s\n" +msgid "Client : %s\n" msgstr "" -#: src/dird/ua_status.c:358 +#: src/stored/parse_bsr.c:787 #, c-format -msgid "" -"\n" -"Failed to connect to Storage daemon %s.\n" -"====\n" +msgid "Job : %s\n" msgstr "" -#: src/dird/ua_status.c:400 +#: src/stored/parse_bsr.c:795 #, c-format -msgid "" -"Failed to connect to Client %s.\n" -"====\n" +msgid "SessTime : %u\n" msgstr "" -#: src/dird/ua_status.c:408 -msgid "Connected to file daemon\n" +#: src/stored/parse_bsr.c:806 +msgid "BSR is NULL\n" msgstr "" -#: src/dird/ua_status.c:428 -msgid "" -"\n" -"Scheduled Jobs:\n" +#: src/stored/parse_bsr.c:810 +#, c-format +msgid "Next : 0x%x\n" msgstr "" -#: src/dird/ua_status.c:429 -msgid "" -"Level Type Pri Scheduled Name Volume\n" +#: src/stored/parse_bsr.c:811 +#, c-format +msgid "Root bsr : 0x%x\n" msgstr "" -#: src/dird/ua_status.c:430 -msgid "===================================================================================\n" +#: src/stored/parse_bsr.c:823 +#, c-format +msgid "count : %u\n" msgstr "" -#: src/dird/ua_status.c:486 +#: src/stored/parse_bsr.c:824 #, c-format -msgid "%-14s\t%-8s\t%3d\t%-18s\t%-18s\t%s\n" +msgid "found : %u\n" msgstr "" -#: src/dird/ua_status.c:490 +#: src/stored/parse_bsr.c:827 #, c-format -msgid "%-14s %-8s %3d %-18s %-18s %s\n" +msgid "done : %s\n" msgstr "" -#: src/dird/ua_status.c:544 -msgid "Ignoring invalid value for days. Max is 500.\n" +#: src/stored/parse_bsr.c:827 src/dird/ua_run.c:173 src/dird/backup.c:916 +#: src/dird/backup.c:917 src/dird/backup.c:918 src/dird/ua_input.c:141 +#: src/dird/ua_update.c:245 src/dird/ua_update.c:265 src/dird/ua_update.c:687 +#: src/tools/dbcheck.c:1340 +msgid "yes" msgstr "" -#: src/dird/ua_status.c:587 -msgid "No Scheduled Jobs.\n" +#: src/stored/parse_bsr.c:827 src/dird/ua_run.c:176 src/dird/backup.c:916 +#: src/dird/backup.c:917 src/dird/backup.c:918 src/dird/ua_input.c:145 +#: src/dird/ua_update.c:245 src/dird/ua_update.c:265 src/dird/ua_update.c:687 +msgid "no" msgstr "" -#: src/dird/ua_status.c:604 src/stored/status.c:450 src/filed/status.c:183 -msgid "" -"\n" -"Running Jobs:\n" +#: src/stored/parse_bsr.c:828 +#, c-format +msgid "positioning : %d\n" msgstr "" -#: src/dird/ua_status.c:612 +#: src/stored/parse_bsr.c:829 #, c-format -msgid "Console connected at %s\n" +msgid "fast_reject : %d\n" msgstr "" -#: src/dird/ua_status.c:622 +#: src/stored/parse_bsr.c:1053 src/stored/parse_bsr.c:1057 +#, c-format msgid "" -"No Jobs running.\n" -"====\n" -msgstr "" - -#: src/dird/ua_status.c:628 -msgid " JobId Level Name Status\n" -msgstr "" - -#: src/dird/ua_status.c:629 src/filed/status.c:342 -msgid "======================================================================\n" +"Bootstrap file error: %s\n" +" : Line %d, col %d of file %s\n" +"%s\n" msgstr "" -#: src/dird/ua_status.c:638 -msgid "is waiting execution" +#: src/stored/reserve.c:64 +#, c-format +msgid "Unable to initialize reservation lock. ERR=%s\n" msgstr "" -#: src/dird/ua_status.c:641 -msgid "is running" +#: src/stored/reserve.c:144 +#, c-format +msgid "Hey! num_writers=%d!!!!\n" msgstr "" -#: src/dird/ua_status.c:644 -msgid "is blocked" +#: src/stored/reserve.c:259 +msgid "3939 Could not get dcr\n" msgstr "" -#: src/dird/ua_status.c:647 -msgid "has terminated" +#: src/stored/reserve.c:368 +#, c-format +msgid "Device reservation failed for JobId=%d: %s\n" msgstr "" -#: src/dird/ua_status.c:650 -msgid "has terminated with warnings" +#: src/stored/reserve.c:377 +#, c-format +msgid "Failed command: %s\n" msgstr "" -#: src/dird/ua_status.c:653 -msgid "has erred" +#: src/stored/reserve.c:662 +#, c-format +msgid "3926 Could not get dcr for device: %s\n" msgstr "" -#: src/dird/ua_status.c:656 -msgid "has errors" +#: src/stored/reserve.c:802 +#, c-format +msgid "3603 JobId=%u %s device %s is busy reading.\n" msgstr "" -#: src/dird/ua_status.c:659 -msgid "has a fatal error" +#: src/stored/reserve.c:811 +#, c-format +msgid "3604 JobId=%u %s device %s is BLOCKED due to user unmount.\n" msgstr "" -#: src/dird/ua_status.c:662 -msgid "has verify differences" +#: src/stored/reserve.c:859 +#, c-format +msgid "3601 JobId=%u %s device %s is BLOCKED due to user unmount.\n" msgstr "" -#: src/dird/ua_status.c:665 -msgid "has been canceled" +#: src/stored/reserve.c:867 +#, c-format +msgid "" +"3602 JobId=%u %s device %s is busy (already reading/writing). read=%d, " +"writers=%d reserved=%d\n" msgstr "" -#: src/dird/ua_status.c:670 -msgid "is waiting on Client" +#: src/stored/reserve.c:906 +#, c-format +msgid "3609 JobId=%u Max concurrent jobs=%d exceeded on %s device %s.\n" msgstr "" -#: src/dird/ua_status.c:672 +#: src/stored/reserve.c:920 #, c-format -msgid "is waiting on Client %s" +msgid "3611 JobId=%u Volume max jobs=%d exceeded on %s device %s.\n" msgstr "" -#: src/dird/ua_status.c:680 src/dird/ua_status.c:682 +#: src/stored/reserve.c:945 #, c-format -msgid "is waiting on Storage \"%s\"" +msgid "" +"3608 JobId=%u wants Pool=\"%s\" but have Pool=\"%s\" nreserve=%d on %s " +"device %s.\n" msgstr "" -#: src/dird/ua_status.c:684 -msgid "is waiting on Storage" +#: src/stored/reserve.c:997 +#, c-format +msgid "3605 JobId=%u wants free drive but %s device %s is busy.\n" msgstr "" -#: src/dird/ua_status.c:690 -msgid "is waiting on max Storage jobs" +#: src/stored/reserve.c:1006 +#, c-format +msgid "3606 JobId=%u prefers mounted drives, but %s device %s has no Volume.\n" msgstr "" -#: src/dird/ua_status.c:693 -msgid "is waiting on max Client jobs" +#: src/stored/reserve.c:1028 +#, c-format +msgid "3607 JobId=%u wants Vol=\"%s\" drive has Vol=\"%s\" on %s device %s.\n" msgstr "" -#: src/dird/ua_status.c:696 -msgid "is waiting on max Job jobs" +#: src/stored/reserve.c:1083 +#, c-format +msgid "Logic error!!!! JobId=%u Should not get here.\n" msgstr "" -#: src/dird/ua_status.c:699 -msgid "is waiting on max total jobs" +#: src/stored/reserve.c:1084 +#, c-format +msgid "3910 JobId=%u Logic error!!!! %s device %s Should not get here.\n" msgstr "" -#: src/dird/ua_status.c:702 -msgid "is waiting for its start time" +#: src/stored/reserve.c:1087 +msgid "Logic error!!!! Should not get here.\n" msgstr "" -#: src/dird/ua_status.c:705 -msgid "is waiting for higher priority jobs to finish" +#: src/stored/reserve.c:1090 +#, c-format +msgid "3911 JobId=%u failed reserve %s device %s.\n" msgstr "" -#: src/dird/ua_status.c:708 src/dird/ua_status.c:759 src/lib/util.c:241 -msgid "SD committing Data" +#: src/stored/status.c:85 +msgid "Used Volume status:\n" msgstr "" -#: src/dird/ua_status.c:711 src/dird/ua_status.c:762 src/lib/util.c:244 -msgid "SD despooling Data" +#: src/stored/status.c:103 +msgid "" +"\n" +"SD Resources:\n" msgstr "" -#: src/dird/ua_status.c:714 src/dird/ua_status.c:765 src/lib/util.c:247 -msgid "SD despooling Attributes" +#: src/stored/status.c:139 +msgid "" +"\n" +"Device status:\n" msgstr "" -#: src/dird/ua_status.c:717 src/dird/ua_status.c:768 src/lib/util.c:250 -msgid "Dir inserting Attributes" +#: src/stored/status.c:143 +#, c-format +msgid "Autochanger \"%s\" with devices:\n" msgstr "" -#: src/dird/ua_status.c:722 +#: src/stored/status.c:163 #, c-format -msgid "is in unknown state %c" +msgid "" +"\n" +"Device %s is %s:\n" +" Volume: %s\n" +" Pool: %s\n" +" Media type: %s\n" msgstr "" -#: src/dird/ua_status.c:736 -msgid "is waiting for a mount request" +#: src/stored/status.c:168 +msgid "waiting for" msgstr "" -#: src/dird/ua_status.c:743 -msgid "is waiting for an appendable Volume" +#: src/stored/status.c:168 +msgid "mounted with" msgstr "" -#: src/dird/ua_status.c:751 -msgid "is waiting for Client to connect to Storage daemon" +#: src/stored/status.c:170 +msgid "*unknown*" msgstr "" -#: src/dird/ua_status.c:753 +#: src/stored/status.c:174 #, c-format -msgid "is waiting for Client %s to connect to Storage %s" +msgid "" +"\n" +"Device %s open but no Bacula volume is currently mounted.\n" msgstr "" -#: src/dird/ua_status.c:784 +#: src/stored/status.c:185 #, c-format -msgid "%6d\t%-6s\t%-20s\t%s\t%s\n" +msgid " Total Bytes=%s Blocks=%s Bytes/block=%s\n" msgstr "" -#: src/dird/ua_status.c:788 +#: src/stored/status.c:200 #, c-format -msgid "%6d %-6s %-20s %s\n" +msgid " Total Bytes Read=%s Blocks Read=%s Bytes/block=%s\n" msgstr "" -#: src/dird/ua_status.c:792 +#: src/stored/status.c:206 #, c-format -msgid " %-30s\n" -msgstr "" - -#: src/dird/ua_status.c:812 -msgid "No Terminated Jobs.\n" +msgid " Positioned at File=%s Block=%s\n" msgstr "" -#: src/dird/ua_status.c:818 src/stored/status.c:572 src/filed/status.c:330 +#: src/stored/status.c:213 +#, c-format msgid "" "\n" -"Terminated Jobs:\n" +"Device %s is not open.\n" msgstr "" -#: src/dird/ua_status.c:819 src/stored/status.c:579 src/filed/status.c:340 -msgid " JobId Level Files Bytes Status Finished Name \n" +#: src/stored/status.c:217 +#, c-format +msgid "" +"\n" +"Device \"%s\" is not open or does not exist.\n" msgstr "" -#: src/dird/ua_status.c:820 -msgid "====================================================================\n" +#: src/stored/status.c:234 src/dird/ua_status.c:294 +#, c-format +msgid "%s Version: %s (%s) %s %s %s\n" msgstr "" -#: src/dird/ua_status.c:852 src/stored/status.c:601 src/lib/util.c:180 -#: src/filed/status.c:363 -msgid "Created" +#: src/stored/status.c:241 +#, c-format +msgid "Daemon started %s. Jobs: run=%d, running=%d.\n" msgstr "" -#: src/dird/ua_status.c:856 src/stored/status.c:605 src/lib/util.c:196 -#: src/lib/util.c:331 src/lib/util.c:478 src/filed/status.c:367 -msgid "Error" +#: src/stored/status.c:244 src/dird/ua_status.c:300 src/filed/status.c:136 +#, c-format +msgid " Heap: heap=%s smbytes=%s max_bytes=%s bufs=%s max_bufs=%s\n" msgstr "" -#: src/dird/ua_status.c:859 src/stored/status.c:608 src/filed/status.c:370 -msgid "Diffs" +#: src/stored/status.c:279 +msgid "" +"No DEVICE structure.\n" +"\n" msgstr "" -#: src/dird/ua_status.c:865 src/stored/status.c:614 src/stored/btape.c:1523 -#: src/lib/util.c:189 src/lib/util.c:324 src/filed/status.c:376 -#: src/wx-console/wxbconfigpanel.cpp:209 -msgid "OK" +#: src/stored/status.c:285 +msgid " Device is BLOCKED. User unmounted.\n" msgstr "" -#: src/dird/ua_status.c:868 src/stored/status.c:617 src/lib/util.c:202 -#: src/lib/util.c:327 -msgid "OK -- with warnings" +#: src/stored/status.c:289 +msgid " Device is BLOCKED. User unmounted during wait for media/mount.\n" msgstr "" -#: src/dird/ua_status.c:871 src/stored/status.c:620 src/filed/status.c:379 -msgid "Other" +#: src/stored/status.c:300 +#, c-format +msgid "" +" Device is BLOCKED waiting for mount of volume \"%s\",\n" +" Pool: %s\n" +" Media type: %s\n" msgstr "" -#: src/dird/ua_status.c:875 src/stored/status.c:632 src/filed/status.c:391 +#: src/stored/status.c:309 #, c-format -msgid "%6d\t%-6s\t%8s\t%10s\t%-7s\t%-8s\t%s\n" +msgid "" +" Device is BLOCKED waiting to create a volume for:\n" +" Pool: %s\n" +" Media type: %s\n" msgstr "" -#: src/dird/ua_status.c:883 src/stored/status.c:640 src/filed/status.c:399 -#, c-format -msgid "%6d %-6s %8s %10s %-7s %-8s %s\n" +#: src/stored/status.c:321 +msgid " Device is BLOCKED waiting for media.\n" msgstr "" -#: src/dird/ua_status.c:892 -msgid "\n" +#: src/stored/status.c:327 +msgid " Device is being initialized.\n" msgstr "" -#: src/dird/ua_input.c:103 -msgid "Enter slot" +#: src/stored/status.c:331 +msgid " Device is blocked labeling a Volume.\n" msgstr "" -#: src/dird/ua_input.c:107 src/dird/ua_input.c:113 +#: src/stored/status.c:340 #, c-format -msgid "Expected a positive integer, got: %s\n" +msgid " Slot %d %s loaded in drive %d.\n" msgstr "" -#: src/dird/ua_input.c:170 -msgid "Invalid response. You must answer yes or no.\n" +#: src/stored/status.c:344 +#, c-format +msgid " Drive %d is not loaded.\n" msgstr "" -#: src/dird/ua_input.c:193 -msgid "Invalid Enabled value, it must be yes, no, archived, 0, 1, or 2\n" +#: src/stored/status.c:379 +msgid "Device state:\n" msgstr "" -#: src/dird/ua_input.c:220 +#: src/stored/status.c:395 #, c-format -msgid "Illegal character \"%c\" in a comment.\n" -msgstr "" - -#: src/dird/ua_input.c:227 -msgid "Comment too long.\n" +msgid " num_writers=%d reserves=%d block=%d\n" msgstr "" -#: src/dird/ua_input.c:233 -msgid "Comment must be at least one character long.\n" +#: src/stored/status.c:399 +msgid "Attached JobsIds: " msgstr "" -#: src/dird/pythondir.c:121 src/stored/pythonsd.c:101 -#: src/stored/pythonsd.c:166 src/filed/pythonfd.c:94 src/filed/pythonfd.c:148 -#: src/filed/pythonfd.c:212 -msgid "Job pointer not found." +#: src/stored/status.c:419 +#, c-format +msgid " Archive name: %s Device name: %s\n" msgstr "" -#: src/dird/pythondir.c:153 -msgid "Pool record not found." +#: src/stored/status.c:422 +#, c-format +msgid " File=%u block=%u\n" msgstr "" -#: src/dird/pythondir.c:209 src/stored/pythonsd.c:143 src/filed/pythonfd.c:125 +#: src/stored/status.c:424 #, c-format -msgid "Attribute %s not found." +msgid " Min block=%u Max block=%u\n" msgstr "" -#: src/dird/pythondir.c:252 src/dird/pythondir.c:258 src/stored/pythonsd.c:183 -#: src/filed/pythonfd.c:167 -msgid "Read-only attribute" +#: src/stored/status.c:440 src/dird/ua_status.c:818 src/filed/status.c:188 +msgid "" +"\n" +"Running Jobs:\n" msgstr "" -#: src/dird/pythondir.c:284 -msgid "Priority must be 1-100" +#: src/stored/status.c:445 +#, c-format +msgid "%s Job %s waiting for Client connection.\n" msgstr "" -#: src/dird/pythondir.c:289 -msgid "Job Level can be set only during JobInit" +#: src/stored/status.c:461 +#, c-format +msgid "" +"Reading: %s %s job %s JobId=%d Volume=\"%s\"\n" +" pool=\"%s\" device=%s\n" msgstr "" -#: src/dird/pythondir.c:303 -msgid "Bad JobLevel string" +#: src/stored/status.c:474 +#, c-format +msgid "" +"Writing: %s %s job %s JobId=%d Volume=\"%s\"\n" +" pool=\"%s\" device=%s\n" msgstr "" -#: src/dird/job.c:62 +#: src/stored/status.c:485 #, c-format -msgid "Could not init job queue: ERR=%s\n" +msgid " spooling=%d despooling=%d despool_wait=%d\n" msgstr "" -#: src/dird/job.c:94 +#: src/stored/status.c:501 #, c-format -msgid "Could not add job queue: ERR=%s\n" +msgid " Files=%s Bytes=%s AveBytes/sec=%s LastBytes/sec=%s\n" msgstr "" -#: src/dird/job.c:183 src/dird/job.c:433 src/dird/job.c:435 src/dird/job.c:485 -#: src/dird/job.c:487 src/dird/job.c:1129 src/dird/job.c:1170 -#: src/dird/job.c:1179 -msgid "Job resource" +#: src/stored/status.c:513 +#, c-format +msgid " FDReadSeqNo=%s in_msg=%u out_msg=%d fd=%d\n" msgstr "" -#: src/dird/job.c:230 src/dird/job.c:349 -#, c-format -msgid "Unimplemented job type: %d\n" +#: src/stored/status.c:519 +msgid " FDSocket closed\n" msgstr "" -#: src/dird/job.c:272 -msgid "Job canceled because max start delay time exceeded.\n" +#: src/stored/status.c:528 src/dird/ua_select.c:1211 src/filed/status.c:278 +msgid "No Jobs running.\n" +msgstr "Geen Jobs in uitvoering.\n" + +#: src/stored/status.c:540 +msgid "" +"\n" +"Jobs waiting to reserve a drive:\n" msgstr "" -#: src/dird/job.c:277 -msgid "Job canceled because max run sched time exceeded.\n" +#: src/stored/status.c:604 +#, c-format +msgid "3900 No arg in .status command: %s\n" msgstr "" -#: src/dird/job.c:403 +#: src/stored/status.c:652 #, c-format -msgid "JobId %s, Job %s marked to be canceled.\n" +msgid "3900 Unknown arg in .status command: %s\n" msgstr "" -#: src/dird/job.c:413 -msgid "Failed to connect to File daemon.\n" +#: src/stored/status.c:667 +msgid "Bacula Storage: Idle" msgstr "" -#: src/dird/job.c:548 -msgid "Max wait time exceeded. Job canceled.\n" +#: src/stored/status.c:678 +msgid "Bacula Storage: Running" msgstr "" -#: src/dird/job.c:553 -msgid "Max run time exceeded. Job canceled.\n" +#: src/stored/status.c:692 +msgid "Bacula Storage: Last Job Canceled" msgstr "" -#: src/dird/job.c:558 -msgid "Max run sched time exceeded. Job canceled.\n" +#: src/stored/status.c:696 +msgid "Bacula Storage: Last Job Failed" msgstr "" -#: src/dird/job.c:680 -#, c-format -msgid "Pool \"%s\" not in database. ERR=%s" +#: src/stored/status.c:700 +msgid "Bacula Storage: Last Job had Warnings" msgstr "" -#: src/dird/job.c:684 +#: src/stored/sd_plugins.c:220 src/dird/dir_plugins.c:169 +#: src/filed/fd_plugins.c:1125 #, c-format -msgid "Created database record for Pool \"%s\".\n" +msgid "Loaded plugin: %s\n" msgstr "" -#: src/dird/job.c:766 src/dird/job.c:809 +#: src/stored/sd_plugins.c:240 src/dird/dir_plugins.c:189 +#: src/filed/fd_plugins.c:1146 #, c-format -msgid "JobId %d already running. Duplicate job not allowed.\n" +msgid "Plugin magic wrong. Plugin=%s wanted=%s got=%s\n" msgstr "" -#: src/dird/job.c:797 +#: src/stored/sd_plugins.c:248 src/dird/dir_plugins.c:197 +#: src/filed/fd_plugins.c:1154 #, c-format -msgid "Cancelling duplicate JobId=%d.\n" +msgid "Plugin version incorrect. Plugin=%s wanted=%d got=%d\n" msgstr "" -#: src/dird/job.c:828 src/dird/job.c:1116 -msgid "Run pool override" +#: src/stored/sd_plugins.c:257 src/dird/dir_plugins.c:206 +#: src/filed/fd_plugins.c:1162 +#, c-format +msgid "Plugin license incompatible. Plugin=%s license=%s\n" msgstr "" -#: src/dird/job.c:839 -msgid "Run FullPool override" +#: src/stored/sd_plugins.c:265 src/dird/dir_plugins.c:214 +#: src/filed/fd_plugins.c:1170 +#, c-format +msgid "Plugin size incorrect. Plugin=%s wanted=%d got=%d\n" msgstr "" -#: src/dird/job.c:841 -msgid "Job FullPool override" +#: src/lib/sellist.c:57 +msgid "Negative numbers not permitted.\n" msgstr "" -#: src/dird/job.c:850 -msgid "Run IncPool override" +#: src/lib/sellist.c:64 src/dird/ua_label.c:98 +msgid "Range end is not integer.\n" msgstr "" -#: src/dird/job.c:852 -msgid "Job IncPool override" +#: src/lib/sellist.c:69 src/dird/ua_label.c:103 +msgid "Range start is not an integer.\n" msgstr "" -#: src/dird/job.c:861 -msgid "Run DiffPool override" +#: src/lib/sellist.c:75 src/dird/ua_label.c:109 +msgid "Range end not bigger than start.\n" msgstr "" -#: src/dird/job.c:863 -msgid "Job DiffPool override" +#: src/lib/sellist.c:83 +#, fuzzy +msgid "User cancel requested.\n" +msgstr "Terugzetten geannuleerd." + +#: src/lib/sellist.c:93 src/dird/ua_label.c:115 +msgid "Input value is not an integer.\n" msgstr "" -#: src/dird/job.c:893 src/stored/bscan.c:1056 -#, c-format -msgid "Could not create Client record. ERR=%s\n" +#: src/lib/sellist.c:105 +msgid "Selection items must be be greater than zero.\n" msgstr "" -#: src/dird/job.c:929 -msgid "FileSet MD5 digest not found.\n" +#: src/lib/sellist.c:109 +#, fuzzy +msgid "Selection item too large.\n" +msgstr "Selecteer Pool" + +#: src/lib/sellist.c:211 +msgid "No input string given.\n" msgstr "" -#: src/dird/job.c:934 +#: src/lib/plugins.c:105 #, c-format -msgid "Could not create FileSet \"%s\" record. ERR=%s\n" +msgid "Failed to open Plugin directory %s: ERR=%s\n" msgstr "" -#: src/dird/job.c:976 +#: src/lib/plugins.c:122 #, c-format -msgid "Error updating job record. %s" +msgid "Failed to find any plugins in %s\n" msgstr "" -#: src/dird/job.c:1121 -msgid "Run storage override" +#: src/lib/plugins.c:156 +#, c-format +msgid "dlopen plugin %s failed: ERR=%s\n" msgstr "" -#: src/dird/job.c:1189 -msgid "Client resource" +#: src/lib/plugins.c:167 +#, c-format +msgid "Lookup of loadPlugin in plugin %s failed: ERR=%s\n" msgstr "" -#: src/dird/job.c:1406 +#: src/lib/plugins.c:176 #, c-format -msgid "Could not start clone job: \"%s\".\n" +msgid "Lookup of unloadPlugin in plugin %s failed: ERR=%s\n" msgstr "" -#: src/dird/job.c:1409 +#: src/lib/bnet.c:127 #, c-format -msgid "Clone JobId %d started.\n" +msgid "Attr spool write error. wrote=%d wanted=%d bytes. ERR=%s\n" msgstr "" -#: src/dird/authenticate.c:83 src/dird/authenticate.c:84 -#: src/tray-monitor/authenticate.c:132 -#: src/qt-console/tray-monitor/authenticate.cpp:131 -#, c-format -msgid "Error sending Hello to Storage daemon. ERR=%s\n" +#: src/lib/bnet.c:212 src/lib/bnet.c:253 +msgid "TLS connection initialization failed.\n" msgstr "" -#: src/dird/authenticate.c:113 -msgid "Director and Storage daemon passwords or names not the same.\n" +#: src/lib/bnet.c:220 +msgid "TLS Negotiation failed.\n" msgstr "" -#: src/dird/authenticate.c:115 -#, c-format +#: src/lib/bnet.c:226 src/lib/bnet.c:268 msgid "" -"Director unable to authenticate with Storage daemon at \"%s:%d\". Possible " -"causes:\n" -"Passwords or names not the same or\n" -"Maximum Concurrent Jobs exceeded on the SD or\n" -"SD networking messed up (restart daemon).\n" -"Please see " +"TLS certificate verification failed. Peer certificate did not match a " +"required commonName\n" msgstr "" -#: src/dird/authenticate.c:127 src/wx-console/authenticate.c:127 -#: src/console/authenticate.c:122 +#: src/lib/bnet.c:277 +#, c-format msgid "" -"Authorization problem: Remote server did not advertise required TLS " -"support.\n" +"TLS host certificate verification failed. Host name \"%s\" did not match " +"presented certificate\n" msgstr "" -#: src/dird/authenticate.c:134 src/stored/authenticate.c:146 -#: src/stored/authenticate.c:257 src/wx-console/authenticate.c:133 -#: src/console/authenticate.c:129 src/filed/authenticate.c:160 -#: src/filed/authenticate.c:279 -msgid "Authorization problem: Remote server requires TLS.\n" +#: src/lib/bnet.c:294 +msgid "TLS enabled but not configured.\n" msgstr "" -#: src/dird/authenticate.c:143 -#, c-format -msgid "TLS negotiation failed with SD at \"%s:%d\"\n" +#: src/lib/bnet.c:300 +msgid "TLS enable but not configured.\n" msgstr "" -#: src/dird/authenticate.c:155 -#, c-format -msgid "bdird set configuration file to file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -t test - read configuration and exit\n" -" -? print this message.\n" -"\n" +#: src/lib/util.c:187 src/lib/util.c:312 src/dird/ua_status.c:1096 +#: src/lib/status.h:118 +msgid "OK -- with warnings" msgstr "" -#: src/tray-monitor/tray-monitor.c:270 -#: src/qt-console/tray-monitor/tray-monitor.cpp:216 -#, c-format -msgid "" -"Error: %d Monitor resources defined in %s. You must define one and only one " -"Monitor resource.\n" +#: src/lib/util.c:190 src/lib/util.c:322 +msgid "Canceled" msgstr "" -#: src/tray-monitor/tray-monitor.c:301 -#: src/qt-console/tray-monitor/tray-monitor.cpp:248 -#, c-format -msgid "" -"No Client, Storage or Director resource defined in %s\n" -"Without that I don't how to get status from the File, Storage or Director " -"Daemon :-(\n" +#: src/lib/util.c:193 +msgid "Verify differences" msgstr "" -#: src/tray-monitor/tray-monitor.c:323 -#: src/qt-console/tray-monitor/tray-monitor.cpp:263 -#, c-format -msgid "" -"Invalid refresh interval defined in %s\n" -"This value must be greater or equal to 1 second and less or equal to 10 " -"minutes (read value: %d).\n" +#: src/lib/util.c:196 +msgid "Waiting on FD" msgstr "" -#: src/tray-monitor/tray-monitor.c:330 -msgid "Bacula daemon status monitor" +#: src/lib/util.c:199 +msgid "Wait on SD" msgstr "" -#: src/tray-monitor/tray-monitor.c:339 -msgid "Open status window..." +#: src/lib/util.c:202 +msgid "Wait for new Volume" msgstr "" -#: src/tray-monitor/tray-monitor.c:345 -msgid "Exit" +#: src/lib/util.c:205 +msgid "Waiting for mount" msgstr "" -#: src/tray-monitor/tray-monitor.c:357 -msgid "Bacula tray monitor" +#: src/lib/util.c:208 +msgid "Waiting for Storage resource" msgstr "" -#: src/tray-monitor/tray-monitor.c:382 -msgid " (DIR)" +#: src/lib/util.c:211 +msgid "Waiting for Job resource" msgstr "" -#: src/tray-monitor/tray-monitor.c:386 -msgid " (FD)" +#: src/lib/util.c:214 +msgid "Waiting for Client resource" msgstr "" -#: src/tray-monitor/tray-monitor.c:390 -msgid " (SD)" +#: src/lib/util.c:217 +msgid "Waiting on Max Jobs" msgstr "" -#: src/tray-monitor/tray-monitor.c:403 -msgid "Unknown status." +#: src/lib/util.c:220 +msgid "Waiting for Start Time" msgstr "" -#: src/tray-monitor/tray-monitor.c:477 -msgid "Refresh interval in seconds: " +#: src/lib/util.c:223 +msgid "Waiting on Priority" msgstr "" -#: src/tray-monitor/tray-monitor.c:485 -msgid "Refresh now" +#: src/lib/util.c:226 src/dird/ua_status.c:931 src/dird/ua_status.c:982 +msgid "SD committing Data" msgstr "" -#: src/tray-monitor/tray-monitor.c:489 -msgid "About" +#: src/lib/util.c:229 src/dird/ua_status.c:934 src/dird/ua_status.c:985 +msgid "SD despooling Data" msgstr "" -#: src/tray-monitor/tray-monitor.c:493 -msgid "Close" +#: src/lib/util.c:232 src/dird/ua_status.c:937 src/dird/ua_status.c:988 +msgid "SD despooling Attributes" msgstr "" -#: src/tray-monitor/tray-monitor.c:513 -#, c-format -msgid "Disconnecting from Director %s:%d\n" +#: src/lib/util.c:235 src/dird/ua_status.c:940 src/dird/ua_status.c:991 +msgid "Dir inserting Attributes" msgstr "" -#: src/tray-monitor/tray-monitor.c:516 +#: src/lib/util.c:242 #, c-format -msgid "Disconnecting from Client %s:%d\n" +msgid "Unknown Job termination status=%d" msgstr "" -#: src/tray-monitor/tray-monitor.c:519 -#, c-format -msgid "Disconnecting from Storage %s:%d\n" +#: src/lib/util.c:258 +msgid "Completed successfully" msgstr "" -#: src/tray-monitor/tray-monitor.c:560 src/tray-monitor/tray-monitor.c:571 -msgid "Bacula Tray Monitor" +#: src/lib/util.c:261 +msgid "Completed with warnings" msgstr "" -#: src/tray-monitor/tray-monitor.c:562 src/tray-monitor/tray-monitor.c:573 -msgid "Written by Nicolas Boichat\n" +#: src/lib/util.c:264 +msgid "Terminated with errors" msgstr "" -#: src/tray-monitor/tray-monitor.c:563 src/tray-monitor/tray-monitor.c:574 -msgid "Version" +#: src/lib/util.c:267 +msgid "Fatal error" msgstr "" -#: src/tray-monitor/tray-monitor.c:656 -#: src/qt-console/tray-monitor/tray-monitor.cpp:331 -#, c-format -msgid "Error, currentitem is not a Client or a Storage..\n" +#: src/lib/util.c:270 +msgid "Created, not yet running" msgstr "" -#: src/tray-monitor/tray-monitor.c:730 -#, c-format -msgid "" -"Current job: %s\n" -"Last job: %s" +#: src/lib/util.c:273 +msgid "Canceled by user" msgstr "" -#: src/tray-monitor/tray-monitor.c:742 -#, c-format -msgid " (%d errors)" +#: src/lib/util.c:276 +msgid "Verify found differences" msgstr "" -#: src/tray-monitor/tray-monitor.c:745 -#, c-format -msgid " (%d error)" +#: src/lib/util.c:279 +msgid "Waiting for File daemon" msgstr "" -#: src/tray-monitor/tray-monitor.c:783 -msgid "No current job." +#: src/lib/util.c:282 +msgid "Waiting for Storage daemon" msgstr "" -#: src/tray-monitor/tray-monitor.c:786 -msgid "No last job." +#: src/lib/util.c:285 +msgid "Waiting for higher priority jobs" msgstr "" -#: src/tray-monitor/tray-monitor.c:794 -msgid "Job status: Created" +#: src/lib/util.c:288 +msgid "Batch inserting file records" msgstr "" -#: src/tray-monitor/tray-monitor.c:799 -msgid "Job status: Running" +#: src/lib/util.c:319 +msgid "Fatal Error" msgstr "" -#: src/tray-monitor/tray-monitor.c:803 -msgid "Job status: Blocked" +#: src/lib/util.c:325 +msgid "Differences" msgstr "" -#: src/tray-monitor/tray-monitor.c:808 -msgid "Job status: Terminated" +#: src/lib/util.c:328 +msgid "Unknown term code" msgstr "" -#: src/tray-monitor/tray-monitor.c:813 -msgid "Job status: Terminated in error" +#: src/lib/util.c:344 src/lib/jcr.c:220 +msgid "Backup" msgstr "" -#: src/tray-monitor/tray-monitor.c:819 -msgid "Job status: Error" +#: src/lib/util.c:347 +msgid "Migrated Job" msgstr "" -#: src/tray-monitor/tray-monitor.c:823 -msgid "Job status: Fatal error" +#: src/lib/util.c:350 +msgid "Verify" msgstr "" -#: src/tray-monitor/tray-monitor.c:828 -msgid "Job status: Verify differences" +#: src/lib/util.c:353 +msgid "Restore" msgstr "" -#: src/tray-monitor/tray-monitor.c:833 -msgid "Job status: Canceled" +#: src/lib/util.c:356 +msgid "Console" msgstr "" -#: src/tray-monitor/tray-monitor.c:838 -msgid "Job status: Waiting on File daemon" +#: src/lib/util.c:359 +msgid "System or Console" msgstr "" -#: src/tray-monitor/tray-monitor.c:843 -msgid "Job status: Waiting on the Storage daemon" +#: src/lib/util.c:362 +msgid "Admin" msgstr "" -#: src/tray-monitor/tray-monitor.c:848 -msgid "Job status: Waiting for new media" +#: src/lib/util.c:365 src/lib/util.c:455 +msgid "Archive" msgstr "" -#: src/tray-monitor/tray-monitor.c:853 -msgid "Job status: Waiting for Mount" +#: src/lib/util.c:368 +msgid "Job Copy" msgstr "" -#: src/tray-monitor/tray-monitor.c:858 -msgid "Job status: Waiting for storage resource" +#: src/lib/util.c:371 +msgid "Copy" msgstr "" -#: src/tray-monitor/tray-monitor.c:863 -msgid "Job status: Waiting for job resource" +#: src/lib/util.c:374 +msgid "Migrate" msgstr "" -#: src/tray-monitor/tray-monitor.c:868 -msgid "Job status: Waiting for Client resource" +#: src/lib/util.c:377 +msgid "Scan" msgstr "" -#: src/tray-monitor/tray-monitor.c:873 -msgid "Job status: Waiting for maximum jobs" +#: src/lib/util.c:381 +msgid "Unknown Type" msgstr "" -#: src/tray-monitor/tray-monitor.c:878 -msgid "Job status: Waiting for start time" +#: src/lib/util.c:391 +msgid "Truncate" msgstr "" -#: src/tray-monitor/tray-monitor.c:883 -msgid "Job status: Waiting for higher priority jobs to finish" +#: src/lib/util.c:394 src/filed/restore.c:1164 +msgid "None" msgstr "" -#: src/tray-monitor/tray-monitor.c:888 -#, c-format -msgid "Unknown job status %c." +#: src/lib/util.c:408 +msgid "Base" msgstr "" -#: src/tray-monitor/tray-monitor.c:889 -#, c-format -msgid "Job status: Unknown(%c)" +#: src/lib/util.c:411 src/lib/util.c:457 src/dird/ua_run.c:1147 +msgid "Full" msgstr "" -#: src/tray-monitor/tray-monitor.c:896 -#, c-format -msgid "Bad scan : '%s' %d\n" +#: src/lib/util.c:414 src/dird/ua_run.c:1148 +msgid "Incremental" msgstr "" -#: src/tray-monitor/tray-monitor.c:936 src/console/console.c:1143 -#, c-format -msgid "Connecting to Director %s:%d\n" +#: src/lib/util.c:417 src/dird/ua_run.c:1149 +msgid "Differential" msgstr "" -#: src/tray-monitor/tray-monitor.c:937 -#: src/qt-console/tray-monitor/tray-monitor.cpp:359 -#: src/qt-console/bcomm/dircomm.cpp:103 -#, c-format -msgid "Connecting to Director %s:%d" +#: src/lib/util.c:420 src/dird/ua_run.c:1150 +msgid "Since" msgstr "" -#: src/tray-monitor/tray-monitor.c:938 src/wx-console/console_thread.cpp:428 -#: src/qt-console/tray-monitor/tray-monitor.cpp:361 -#: src/qt-console/bcomm/dircomm.cpp:173 -msgid "Director daemon" +#: src/lib/util.c:423 src/dird/ua_run.c:1177 +msgid "Verify Catalog" msgstr "" -#: src/tray-monitor/tray-monitor.c:943 -#, c-format -msgid "Connecting to Client %s:%d\n" +#: src/lib/util.c:426 +msgid "Verify Init Catalog" msgstr "" -#: src/tray-monitor/tray-monitor.c:944 -#: src/qt-console/tray-monitor/tray-monitor.cpp:366 -#, c-format -msgid "Connecting to Client %s:%d" +#: src/lib/util.c:429 src/dird/ua_run.c:1178 +msgid "Verify Volume to Catalog" msgstr "" -#: src/tray-monitor/tray-monitor.c:945 -#: src/qt-console/tray-monitor/tray-monitor.cpp:368 -msgid "File daemon" +#: src/lib/util.c:432 src/dird/ua_run.c:1179 +msgid "Verify Disk to Catalog" msgstr "" -#: src/tray-monitor/tray-monitor.c:950 -#, c-format -msgid "Connecting to Storage %s:%d\n" +#: src/lib/util.c:435 +msgid "Verify Data" msgstr "" -#: src/tray-monitor/tray-monitor.c:951 -#: src/qt-console/tray-monitor/tray-monitor.cpp:373 -#, c-format -msgid "Connecting to Storage %s:%d" +#: src/lib/util.c:438 +msgid "Virtual Full" msgstr "" -#: src/tray-monitor/tray-monitor.c:956 src/tray-monitor/tray-monitor.c:994 -#: src/qt-console/tray-monitor/tray-monitor.cpp:379 -#: src/qt-console/tray-monitor/tray-monitor.cpp:409 -#, c-format -msgid "Error, currentitem is not a Client, a Storage or a Director..\n" +#: src/lib/util.c:444 +msgid "Unknown Job Level" msgstr "" -#: src/tray-monitor/tray-monitor.c:962 -msgid "Cannot connect to daemon.\n" +#: src/lib/util.c:454 +msgid "Append" msgstr "" -#: src/tray-monitor/tray-monitor.c:963 -#: src/qt-console/tray-monitor/tray-monitor.cpp:384 -msgid "Cannot connect to daemon." +#: src/lib/util.c:456 +msgid "Disabled" msgstr "" -#: src/tray-monitor/tray-monitor.c:975 -#: src/qt-console/tray-monitor/tray-monitor.cpp:393 -#, c-format -msgid "Authentication error : %s" +#: src/lib/util.c:458 +msgid "Used" msgstr "" -#: src/tray-monitor/tray-monitor.c:982 -msgid "Opened connection with Director daemon.\n" +#: src/lib/util.c:459 +msgid "Cleaning" msgstr "" -#: src/tray-monitor/tray-monitor.c:983 -#: src/qt-console/tray-monitor/tray-monitor.cpp:400 -msgid "Opened connection with Director daemon." +#: src/lib/util.c:460 +msgid "Purged" msgstr "" -#: src/tray-monitor/tray-monitor.c:986 -msgid "Opened connection with File daemon.\n" +#: src/lib/util.c:461 +msgid "Recycle" msgstr "" -#: src/tray-monitor/tray-monitor.c:987 -#: src/qt-console/tray-monitor/tray-monitor.cpp:403 -msgid "Opened connection with File daemon." +#: src/lib/util.c:462 +msgid "Read-Only" msgstr "" -#: src/tray-monitor/tray-monitor.c:990 -msgid "Opened connection with Storage daemon.\n" +#: src/lib/util.c:474 +msgid "Invalid volume status" msgstr "" -#: src/tray-monitor/tray-monitor.c:991 -#: src/qt-console/tray-monitor/tray-monitor.cpp:406 -msgid "Opened connection with Storage daemon." +#: src/lib/util.c:736 src/lib/util.c:746 src/lib/util.c:754 src/lib/util.c:761 +#: src/lib/util.c:768 src/lib/util.c:782 src/lib/util.c:792 src/lib/util.c:805 +#: src/lib/util.c:816 src/filed/restore.c:1180 +msgid "*none*" msgstr "" -#: src/tray-monitor/tray-monitor.c:1028 -msgid "<< Error: BNET_SUB_PROMPT signal received. >>\n" +#: src/lib/util.c:854 +msgid "Working directory not defined. Cannot continue.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:1033 src/wx-console/console_thread.cpp:494 -msgid "<< Heartbeat signal received, answered. >>\n" +#: src/lib/util.c:857 +#, c-format +msgid "Working Directory: \"%s\" not found. Cannot continue.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:1037 +#: src/lib/util.c:861 #, c-format -msgid "<< Unexpected signal received : %s >>\n" +msgid "Working Directory: \"%s\" is not a directory. Cannot continue.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:1042 -msgid "\n" +#: src/lib/devlock.c:318 src/lib/save/devlock.c:337 +msgid "writeunlock called too many times.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:1046 -#: src/qt-console/tray-monitor/tray-monitor.cpp:457 -msgid "Error : BNET_HARDEOF or BNET_ERROR" +#: src/lib/devlock.c:323 src/lib/save/devlock.c:342 +msgid "writeunlock by non-owner.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:1052 -msgid "\n" +#: src/lib/devlock.c:489 src/lib/save/devlock.c:508 src/lib/rwlock.c:425 +#, c-format +msgid "Thread %d found unchanged elements %d times\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:1056 -#: src/qt-console/tray-monitor/tray-monitor.cpp:466 -msgid "Error : Connection closed." +#: src/lib/devlock.c:559 src/lib/save/devlock.c:578 src/lib/rwlock.c:495 +#, c-format +msgid "%02d: interval %d, writes %d, reads %d\n" msgstr "" -#: src/tray-monitor/authenticate.c:88 -#: src/qt-console/tray-monitor/authenticate.cpp:87 -msgid "" -"Director authorization problem.\n" -"Most likely the passwords do not agree.\n" -"Please see " +#: src/lib/devlock.c:569 src/lib/save/devlock.c:588 src/lib/rwlock.c:505 +#, c-format +msgid "data %02d: value %d, %d writes\n" msgstr "" -#: src/tray-monitor/authenticate.c:97 src/console/authenticate.c:152 -#: src/qt-console/tray-monitor/authenticate.cpp:96 +#: src/lib/devlock.c:574 src/lib/save/devlock.c:593 src/lib/rwlock.c:510 #, c-format -msgid "Bad response to Hello command: ERR=%s\n" +msgid "Total: %d thread writes, %d data writes\n" msgstr "" -#: src/tray-monitor/authenticate.c:104 src/wx-console/authenticate.c:157 -#: src/console/authenticate.c:159 -#: src/qt-console/tray-monitor/authenticate.cpp:103 -msgid "Director rejected Hello command\n" +#: src/lib/devlock.c:646 src/lib/save/devlock.c:665 src/lib/rwlock.c:582 +msgid "Try write lock" msgstr "" -#: src/tray-monitor/authenticate.c:138 -#: src/qt-console/tray-monitor/authenticate.cpp:137 -msgid "" -"Director and Storage daemon passwords or names not the same.\n" -"Please see " +#: src/lib/devlock.c:652 src/lib/save/devlock.c:671 src/lib/rwlock.c:588 +msgid "Try read lock" msgstr "" -#: src/tray-monitor/authenticate.c:145 -#: src/qt-console/tray-monitor/authenticate.cpp:144 -#, c-format -msgid "bdird\n" -" -b specify a bootstrap file\n" -" -c specify a Storage configuration file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -e exclude list\n" -" -i include list\n" -" -j list jobs\n" -" -k list blocks\n" -" (no j or k option) list saved files\n" -" -L dump label\n" -" -p proceed inspite of errors\n" -" -v be verbose\n" -" -V specify Volume names (separated by |)\n" -" -? print this message\n" -"\n" +msgid "pthread key create failed: ERR=%s\n" msgstr "" -#: src/stored/bls.c:149 src/stored/bextract.c:146 +#: src/lib/jcr.c:331 #, c-format -msgid "Could not open exclude file: %s, ERR=%s\n" +msgid "pthread_once failed. ERR=%s\n" msgstr "" -#: src/stored/bls.c:164 src/stored/bextract.c:161 +#: src/lib/jcr.c:338 #, c-format -msgid "Could not open include file: %s, ERR=%s\n" +msgid "Could not init msg_queue mutex. ERR=%s\n" msgstr "" -#: src/stored/bls.c:211 -msgid "No archive name specified\n" +#: src/lib/jcr.c:392 +msgid "NULL jcr.\n" msgstr "" -#: src/stored/bls.c:247 +#: src/lib/jcr.c:496 #, c-format -msgid "" -"\n" -"Warning, this Volume is a continuation of Volume %s\n" +msgid "JCR use_count=%d JobId=%d\n" msgstr "" -#: src/stored/bls.c:290 +#: src/lib/jcr.c:601 #, c-format -msgid "Got EOM at file %u on device %s, Volume \"%s\"\n" +msgid "pthread_setspecific failed: ERR=%s\n" msgstr "" -#: src/stored/bls.c:301 +#: src/lib/jcr.c:1082 #, c-format -msgid "Mounted Volume \"%s\".\n" +msgid "" +"Watchdog sending kill after %d secs to thread stalled reading Storage " +"daemon.\n" msgstr "" -#: src/stored/bls.c:303 +#: src/lib/jcr.c:1094 #, c-format -msgid "End of file %u on device %s, Volume \"%s\"\n" +msgid "" +"Watchdog sending kill after %d secs to thread stalled reading File daemon.\n" msgstr "" -#: src/stored/bls.c:327 +#: src/lib/jcr.c:1106 #, c-format msgid "" -"File:blk=%u:%u blk_num=%u blen=%u First rec FI=%s SessId=%u SessTim=%u Strm=" -"%s rlen=%d\n" +"Watchdog sending kill after %d secs to thread stalled reading Director.\n" msgstr "" -#: src/stored/bls.c:336 +#: src/lib/lex.c:77 #, c-format -msgid "Block: %d size=%d\n" -msgstr "" - -#: src/stored/bls.c:386 src/stored/bextract.c:328 src/stored/bscan.c:688 -msgid "Cannot continue.\n" +msgid "Problem probably begins at line %d.\n" msgstr "" -#: src/stored/bls.c:388 -msgid "Attrib unpack error!\n" +#: src/lib/lex.c:82 +#, c-format +msgid "" +"Config error: %s\n" +" : line %d, col %d of file %s\n" +"%s\n" +"%s" msgstr "" -#: src/stored/bls.c:399 +#: src/lib/lex.c:86 #, c-format -msgid "FileIndex=%d VolSessionId=%d VolSessionTime=%d Stream=%d DataLen=%d\n" +msgid "Config error: %s\n" msgstr "" -#: src/stored/bls.c:425 src/stored/read_record.c:414 src/stored/bcopy.c:330 -msgid "Fresh Volume Label" +#: src/lib/lex.c:115 +msgid "Close of NULL file\n" msgstr "" -#: src/stored/bls.c:428 src/stored/read_record.c:417 src/stored/bcopy.c:333 -msgid "Volume Label" +#: src/lib/lex.c:212 +msgid "" +"get_char: called after EOF. You may have a open double quote without the " +"closing double quote.\n" msgstr "" -#: src/stored/bls.c:432 src/stored/label.c:1028 src/stored/bcopy.c:337 -msgid "Begin Job Session" +#: src/lib/lex.c:254 +#, c-format +msgid "Config token too long, file: %s, line %d, begins at line %d\n" msgstr "" -#: src/stored/bls.c:437 src/stored/label.c:1031 src/stored/bcopy.c:341 -msgid "End Job Session" +#: src/lib/lex.c:278 +msgid "none" msgstr "" -#: src/stored/bls.c:441 src/stored/bcopy.c:346 -msgid "End of Medium" +#: src/lib/lex.c:279 +msgid "comment" msgstr "" -#: src/stored/bls.c:444 -msgid "End of Physical Medium" +#: src/lib/lex.c:280 +msgid "number" msgstr "" -#: src/stored/bls.c:447 -msgid "Start of object" +#: src/lib/lex.c:281 +msgid "ip_addr" msgstr "" -#: src/stored/bls.c:450 -msgid "End of object" +#: src/lib/lex.c:282 +msgid "identifier" msgstr "" -#: src/stored/bls.c:453 src/stored/label.c:1040 src/stored/bcopy.c:349 -msgid "Unknown" +#: src/lib/lex.c:283 +msgid "string" msgstr "" -#: src/stored/bls.c:460 src/stored/read_record.c:435 src/stored/bcopy.c:355 -#, c-format -msgid "%s Record: VolSessionId=%d VolSessionTime=%d JobId=%d DataLen=%d\n" +#: src/lib/lex.c:284 +msgid "quoted_string" msgstr "" -#: src/stored/bls.c:479 src/stored/bextract.c:612 src/stored/bcopy.c:373 -#: src/stored/bscan.c:1374 src/stored/btape.c:3050 -#, c-format -msgid "Mount Volume \"%s\" on device %s and press return when ready: " +#: src/lib/lex.c:285 +msgid "include" msgstr "" -#: src/stored/dircmd.c:155 -#, c-format -msgid "Connection request from %s failed.\n" +#: src/lib/lex.c:286 +msgid "include_quoted_string" msgstr "" -#: src/stored/dircmd.c:166 -#, c-format -msgid "Invalid connection from %s. Len=%d\n" +#: src/lib/lex.c:287 +msgid "UTF-8 Byte Order Mark" msgstr "" -#: src/stored/dircmd.c:210 src/filed/authenticate.c:208 -msgid "Unable to authenticate Director\n" +#: src/lib/lex.c:288 +msgid "UTF-16le Byte Order Mark" msgstr "" -#: src/stored/dircmd.c:299 +#: src/lib/lex.c:326 src/lib/lex.c:332 src/lib/lex.c:343 src/lib/lex.c:349 #, c-format -msgid "3991 Bad setdebug command: %s\n" +msgid "expected a positive integer number, got: %s" msgstr "" -#: src/stored/dircmd.c:326 -msgid "3903 Error scanning cancel command.\n" +#: src/lib/lex.c:465 +msgid "" +"This config file appears to be in an unsupported Unicode format (UTF-16be). " +"Please resave as UTF-8\n" msgstr "" -#: src/stored/dircmd.c:330 +#: src/lib/lex.c:611 src/lib/lex.c:639 #, c-format -msgid "3904 Job %s not found.\n" +msgid "Cannot open included config file %s: %s\n" msgstr "" -#: src/stored/dircmd.c:358 +#: src/lib/lex.c:698 src/lib/lex.c:755 #, c-format -msgid "3000 JobId=%ld Job=\"%s\" marked to be %s.\n" +msgid "expected an integer or a range, got %s: %s" msgstr "" -#: src/stored/dircmd.c:437 src/stored/dircmd.c:812 src/stored/dircmd.c:904 -#: src/stored/dircmd.c:1015 src/stored/dircmd.c:1137 src/stored/dircmd.c:1179 +#: src/lib/lex.c:712 src/lib/lex.c:720 src/lib/lex.c:731 src/lib/lex.c:739 #, c-format -msgid "3999 Device \"%s\" not found or could not be opened.\n" +msgid "expected an integer number, got %s: %s" msgstr "" -#: src/stored/dircmd.c:442 +#: src/lib/lex.c:769 #, c-format -msgid "3903 Error scanning label command: %s\n" +msgid "expected a name, got %s: %s" msgstr "" -#: src/stored/dircmd.c:492 +#: src/lib/lex.c:773 #, c-format -msgid "3910 Unable to open device \"%s\": ERR=%s\n" +msgid "name %s length %d too long, max is %d\n" msgstr "" -#: src/stored/dircmd.c:509 +#: src/lib/lex.c:781 #, c-format -msgid "3920 Cannot label Volume because it is already labeled: \"%s\"\n" +msgid "expected a string, got %s: %s" msgstr "" -#: src/stored/dircmd.c:516 -msgid "3921 Wrong volume mounted.\n" +#: src/lib/bpipe.c:365 src/lib/bpipe.c:448 +msgid "Program killed by Bacula (timeout)\n" msgstr "" -#: src/stored/dircmd.c:520 -msgid "3922 Cannot relabel an ANSI/IBM labeled Volume.\n" +#: src/lib/btimers.c:253 +msgid "stop_btimer called with NULL btimer_id\n" msgstr "" -#: src/stored/dircmd.c:528 +#: src/lib/bsys.c:133 #, c-format -msgid "3912 Failed to label Volume: ERR=%s\n" +msgid "safe_unlink could not compile regex pattern \"%s\" ERR=%s\n" msgstr "" -#: src/stored/dircmd.c:538 +#: src/lib/bsys.c:333 src/lib/bsys.c:350 src/lib/bsys.c:374 src/lib/bsys.c:387 #, c-format -msgid "3914 Failed to label Volume (no media): ERR=%s\n" +msgid "Out of memory: ERR=%s\n" +msgstr "" + +#: src/lib/bsys.c:429 +msgid "Buffer overflow.\n" +msgstr "" + +#: src/lib/bsys.c:495 +msgid "Bad errno" msgstr "" -#: src/stored/dircmd.c:541 +#: src/lib/bsys.c:510 #, c-format -msgid "3913 Cannot label Volume. Unknown status %d from read_volume_label()\n" +msgid "Memset for %d bytes at %s:%d\n" msgstr "" -#: src/stored/dircmd.c:578 +#: src/lib/bsys.c:540 #, c-format -msgid "3001 Mounted Volume: %s\n" +msgid "Cannot open pid file. %s ERR=%s\n" msgstr "" -#: src/stored/dircmd.c:582 src/stored/dircmd.c:1215 +#: src/lib/bsys.c:555 #, c-format msgid "" -"3902 Cannot mount Volume on Storage Device \"%s\" because:\n" -"%s" +"%s is already running. pid=%d\n" +"Check file %s\n" msgstr "" -#: src/stored/dircmd.c:696 -msgid "Specified slot ignored. " +#: src/lib/bsys.c:569 +#, c-format +msgid "Could not open pid file. %s ERR=%s\n" msgstr "" -#: src/stored/dircmd.c:712 src/stored/dircmd.c:770 +#: src/lib/bsys.c:680 #, c-format -msgid "3901 Unable to open device \"%s\": ERR=%s\n" +msgid "Could not create state file. %s ERR=%s\n" msgstr "" -#: src/stored/dircmd.c:732 src/stored/dircmd.c:761 +#: src/lib/bsys.c:699 #, c-format -msgid "3001 Device \"%s\" is mounted with Volume \"%s\"\n" +msgid "Write final hdr error: ERR=%s\n" msgstr "" -#: src/stored/dircmd.c:735 src/stored/dircmd.c:764 src/stored/dircmd.c:779 +#: src/lib/bsock.c:111 #, c-format msgid "" -"3905 Device \"%s\" open but no Bacula volume is mounted.\n" -"If this is not a blank tape, try unmounting and remounting the Volume.\n" +"Could not connect to %s on %s:%d. ERR=%s\n" +"Retrying ...\n" msgstr "" -#: src/stored/dircmd.c:745 +#: src/lib/bsock.c:117 #, c-format -msgid "3001 Device \"%s\" is doing acquire.\n" +msgid "Unable to connect to %s on %s:%d. ERR=%s\n" msgstr "" -#: src/stored/dircmd.c:750 src/stored/dircmd.c:875 +#: src/lib/bsock.c:193 #, c-format -msgid "3903 Device \"%s\" is being labeled.\n" +msgid "gethostbyname() for host \"%s\" failed: ERR=%s\n" msgstr "" -#: src/stored/dircmd.c:776 +#: src/lib/bsock.c:225 src/lib/bsock.c:227 #, c-format -msgid "3001 Device \"%s\" is already mounted with Volume \"%s\"\n" +msgid "Socket open error. proto=%d port=%d. ERR=%s\n" msgstr "" -#: src/stored/dircmd.c:788 +#: src/lib/bsock.c:240 src/lib/bsock.c:242 #, c-format -msgid "3002 Device \"%s\" is mounted.\n" +msgid "Source address bind error. proto=%d. ERR=%s\n" msgstr "" -#: src/stored/dircmd.c:790 src/stored/dircmd.c:847 src/stored/dircmd.c:863 -#: src/stored/dircmd.c:895 +#: src/lib/bsock.c:254 src/lib/bsock.c:293 src/lib/bnet_server.c:212 #, c-format -msgid "3907 %s" +msgid "Cannot set SO_KEEPALIVE on socket: %s\n" msgstr "" -#: src/stored/dircmd.c:793 +#: src/lib/bsock.c:262 #, c-format -msgid "3906 File device \"%s\" is always mounted.\n" +msgid "Cannot set TCP_KEEPIDLE on socket: %s\n" msgstr "" -#: src/stored/dircmd.c:802 +#: src/lib/bsock.c:327 #, c-format -msgid "3930 Device \"%s\" is being released.\n" +msgid "Could not init bsock mutex. ERR=%s\n" msgstr "" -#: src/stored/dircmd.c:806 -#, c-format -msgid "3905 Unknown wait state %d\n" +#: src/lib/bsock.c:364 +msgid "Socket is closed\n" msgstr "" -#: src/stored/dircmd.c:816 +#: src/lib/bsock.c:370 #, c-format -msgid "3909 Error scanning mount command: %s\n" +msgid "Socket has errors=%d on call to %s:%s:%d\n" msgstr "" -#: src/stored/dircmd.c:844 src/stored/dircmd.c:897 +#: src/lib/bsock.c:377 #, c-format -msgid "3002 Device \"%s\" unmounted.\n" +msgid "Socket is terminated=%d on call to %s:%s:%d\n" msgstr "" -#: src/stored/dircmd.c:851 +#: src/lib/bsock.c:385 #, c-format -msgid "3901 Device \"%s\" is already unmounted.\n" +msgid "Socket has insane msglen=%d on call to %s:%s:%d\n" msgstr "" -#: src/stored/dircmd.c:866 +#: src/lib/bsock.c:426 #, c-format -msgid "3001 Device \"%s\" unmounted.\n" +msgid "Write error sending %d bytes to %s:%s:%d: ERR=%s\n" msgstr "" -#: src/stored/dircmd.c:871 +#: src/lib/bsock.c:432 #, c-format -msgid "3902 Device \"%s\" is busy in acquire.\n" +msgid "Wrote %d bytes to %s:%s:%d, but only %d accepted.\n" msgstr "" -#: src/stored/dircmd.c:909 +#: src/lib/bsock.c:527 src/lib/bsock.c:588 #, c-format -msgid "3907 Error scanning unmount command: %s\n" +msgid "Read expected %d got %d from %s:%s:%d\n" msgstr "" -#: src/stored/dircmd.c:937 -msgid "3916 Error scanning action_on_purge command\n" +#: src/lib/bsock.c:547 +#, c-format +msgid "Packet size=%d too big from \"%s:%s:%d. Terminating connection.\n" msgstr "" -#: src/stored/dircmd.c:980 +#: src/lib/bsock.c:577 #, c-format -msgid "3921 Device \"%s\" already released.\n" +msgid "Read error from %s:%s:%d: ERR=%s\n" msgstr "" -#: src/stored/dircmd.c:987 +#: src/lib/bsock.c:651 #, c-format -msgid "3922 Device \"%s\" waiting for sysop.\n" +msgid "fread attr spool error. Wanted=%d got=%d bytes. ERR=%s\n" msgstr "" -#: src/stored/dircmd.c:993 -#, c-format -msgid "3922 Device \"%s\" waiting for mount.\n" +#: src/lib/bsock.c:669 +msgid "fread attr spool I/O error.\n" msgstr "" -#: src/stored/dircmd.c:997 -#, c-format -msgid "3923 Device \"%s\" is busy in acquire.\n" +#: src/lib/bsock.c:730 +msgid "Could not malloc BSOCK data buffer\n" msgstr "" -#: src/stored/dircmd.c:1001 +#: src/lib/bsock.c:748 src/lib/bsock.c:767 #, c-format -msgid "3914 Device \"%s\" is being labeled.\n" +msgid "sockopt error: %s\n" msgstr "" -#: src/stored/dircmd.c:1009 +#: src/lib/bsock.c:754 src/lib/bsock.c:773 #, c-format -msgid "3022 Device \"%s\" released.\n" +msgid "Warning network buffer = %d bytes not max size.\n" msgstr "" -#: src/stored/dircmd.c:1020 +#: src/lib/bsock.c:793 src/lib/bsock.c:827 #, c-format -msgid "3927 Error scanning release command: %s\n" +msgid "fcntl F_GETFL error. ERR=%s\n" msgstr "" -#: src/stored/dircmd.c:1049 src/filed/job.c:1535 +#: src/lib/bsock.c:799 src/lib/bsock.c:833 src/lib/bsock.c:865 #, c-format -msgid "Could not create bootstrap file %s: ERR=%s\n" +msgid "fcntl F_SETFL error. ERR=%s\n" msgstr "" -#: src/stored/dircmd.c:1062 -msgid "Error parsing bootstrap file.\n" +#: src/lib/bsock.c:1065 src/qt-console/bcomm/dircomm_auth.cpp:107 +#, c-format +msgid "Director authorization problem at \"%s:%d\"\n" msgstr "" -#: src/stored/dircmd.c:1124 +#: src/lib/bsock.c:1072 src/qt-console/bcomm/dircomm_auth.cpp:114 #, c-format -msgid "3998 Device \"%s\" is not an autochanger.\n" +msgid "" +"Authorization problem: Remote server at \"%s:%d\" did not advertise required " +"TLS support.\n" msgstr "" -#: src/stored/dircmd.c:1141 +#: src/lib/bsock.c:1080 src/qt-console/bcomm/dircomm_auth.cpp:122 #, c-format -msgid "3908 Error scanning autochanger drives/list/slots command: %s\n" +msgid "" +"Authorization problem with Director at \"%s:%d\": Remote server requires " +"TLS.\n" msgstr "" -#: src/stored/dircmd.c:1183 +#: src/lib/bsock.c:1092 src/qt-console/bcomm/dircomm_auth.cpp:133 #, c-format -msgid "3909 Error scanning readlabel command: %s\n" +msgid "TLS negotiation failed with Director at \"%s:%d\"\n" msgstr "" -#: src/stored/dircmd.c:1211 +#: src/lib/bsock.c:1102 src/qt-console/bcomm/dircomm_auth.cpp:145 #, c-format -msgid "3001 Volume=%s Slot=%d\n" +msgid "" +"Bad response to Hello command: ERR=%s\n" +"The Director at \"%s:%d\" is probably not running.\n" msgstr "" -#: src/stored/dircmd.c:1243 +#: src/lib/bsock.c:1111 src/qt-console/bcomm/dircomm_auth.cpp:154 #, c-format -msgid "3931 Device \"%s\" is BLOCKED. user unmounted.\n" +msgid "Director at \"%s:%d\" rejected Hello command\n" msgstr "" -#: src/stored/dircmd.c:1247 +#: src/lib/bsock.c:1121 src/qt-console/bcomm/dircomm_auth.cpp:169 #, c-format msgid "" -"3932 Device \"%s\" is BLOCKED. user unmounted during wait for media/mount.\n" +"Authorization problem with Director at \"%s:%d\"\n" +"Most likely the passwords do not agree.\n" +"If you are using TLS, there may have been a certificate validation error " +"during the TLS handshake.\n" +"Please see " msgstr "" -#: src/stored/dircmd.c:1251 -#, c-format -msgid "3933 Device \"%s\" is BLOCKED waiting for media.\n" +#: src/lib/parse_conf.c:165 +msgid "***UNKNOWN***" msgstr "" -#: src/stored/dircmd.c:1255 +#: src/lib/parse_conf.c:213 src/dird/dird_conf.c:1431 +#: src/qt-console/tray-monitor/tray_conf.cpp:282 #, c-format -msgid "3934 Device \"%s\" is being initialized.\n" +msgid "Too many items in %s resource\n" msgstr "" -#: src/stored/dircmd.c:1259 +#: src/lib/parse_conf.c:266 src/lib/parse_conf.c:287 #, c-format -msgid "3935 Device \"%s\" is blocked labeling a Volume.\n" +msgid "expected an =, got: %s" msgstr "" -#: src/stored/dircmd.c:1263 +#: src/lib/parse_conf.c:296 #, c-format -msgid "3935 Device \"%s\" is blocked for unknown reason.\n" +msgid "Unknown item code: %d\n" msgstr "" -#: src/stored/dircmd.c:1268 +#: src/lib/parse_conf.c:336 #, c-format -msgid "3936 Device \"%s\" is busy reading.\n" +msgid "message type: %s not found" msgstr "" -#: src/stored/dircmd.c:1271 +#: src/lib/parse_conf.c:374 #, c-format -msgid "3937 Device \"%s\" is busy with writers=%d reserved=%d.\n" +msgid "Attempt to redefine name \"%s\" to \"%s\"." msgstr "" -#: src/stored/parse_bsr.c:122 src/stored/parse_bsr.c:126 +#: src/lib/parse_conf.c:466 src/dird/dird_conf.c:1896 #, c-format -msgid "" -"Bootstrap file error: %s\n" -" : Line %d, col %d of file %s\n" -"%s\n" +msgid "Could not find config Resource %s referenced on line %d : %s\n" msgstr "" -#: src/stored/parse_bsr.c:148 +#: src/lib/parse_conf.c:471 #, c-format -msgid "Cannot open bootstrap file %s: %s\n" +msgid "Attempt to redefine resource \"%s\" referenced on line %d : %s\n" msgstr "" -#: src/stored/parse_bsr.c:279 +#: src/lib/parse_conf.c:507 #, c-format -msgid "MediaType %s in bsr at inappropriate place.\n" +msgid "Too many %s directives. Max. is %d. line %d: %s\n" msgstr "" -#: src/stored/parse_bsr.c:311 +#: src/lib/parse_conf.c:518 #, c-format -msgid "Device \"%s\" in bsr at inappropriate place.\n" +msgid "Could not find config Resource \"%s\" referenced on line %d : %s\n" msgstr "" -#: src/stored/parse_bsr.c:484 +#: src/lib/parse_conf.c:581 #, c-format -msgid "REGEX '%s' compile error. ERR=%s\n" +msgid "Missing config Resource \"%s\" referenced on line %d : %s\n" msgstr "" -#: src/stored/parse_bsr.c:494 -msgid "JobType not yet implemented\n" +#: src/lib/parse_conf.c:653 +#, c-format +msgid "expected a size number, got: %s" msgstr "" -#: src/stored/parse_bsr.c:502 -msgid "JobLevel not yet implemented\n" +#: src/lib/parse_conf.c:658 +#, c-format +msgid "expected a speed number, got: %s" msgstr "" -#: src/stored/parse_bsr.c:719 +#: src/lib/parse_conf.c:669 #, c-format -msgid "Slot %d in bsr at inappropriate place.\n" +msgid "expected a %s, got: %s" msgstr "" -#: src/stored/parse_bsr.c:743 -#, c-format -msgid "VolFile : %u-%u\n" +#: src/lib/parse_conf.c:670 +msgid "size" msgstr "" -#: src/stored/parse_bsr.c:751 -#, c-format -msgid "VolBlock : %u-%u\n" +#: src/lib/parse_conf.c:670 +msgid "speed" msgstr "" -#: src/stored/parse_bsr.c:759 +#: src/lib/parse_conf.c:724 src/lib/parse_conf.c:730 src/dird/run_conf.c:315 #, c-format -msgid "VolAddr : %llu-%llu\n" +msgid "expected a time period, got: %s" msgstr "" -#: src/stored/parse_bsr.c:768 +#: src/lib/parse_conf.c:749 src/lib/parse_conf.c:765 src/lib/ini.c:590 +#: src/dird/dird_conf.c:1874 src/dird/dird_conf.c:1990 #, c-format -msgid "FileIndex : %u\n" +msgid "Expect %s, got: %s" msgstr "" -#: src/stored/parse_bsr.c:770 +#: src/lib/parse_conf.c:791 #, c-format -msgid "FileIndex : %u-%u\n" +msgid "Expected a Tape Label keyword, got: %s" msgstr "" -#: src/stored/parse_bsr.c:780 +#: src/lib/parse_conf.c:874 #, c-format -msgid "JobId : %u\n" +msgid "Unable to initialize resource lock. ERR=%s\n" msgstr "" -#: src/stored/parse_bsr.c:782 -#, c-format -msgid "JobId : %u-%u\n" +#: src/lib/parse_conf.c:882 +msgid "Config filename too long.\n" msgstr "" -#: src/stored/parse_bsr.c:792 +#: src/lib/parse_conf.c:905 #, c-format -msgid "SessId : %u\n" +msgid "Cannot open config file \"%s\": %s\n" msgstr "" -#: src/stored/parse_bsr.c:794 -#, c-format -msgid "SessId : %u-%u\n" +#: src/lib/parse_conf.c:922 +msgid "" +"Currently we cannot handle UTF-16 source files. Please convert the conf file " +"to UTF-8\n" msgstr "" -#: src/stored/parse_bsr.c:803 +#: src/lib/parse_conf.c:926 #, c-format -msgid "VolumeName : %s\n" +msgid "Expected a Resource name identifier, got: %s" msgstr "" -#: src/stored/parse_bsr.c:804 +#: src/lib/parse_conf.c:942 #, c-format -msgid " MediaType : %s\n" +msgid "expected resource name, got: %s" msgstr "" -#: src/stored/parse_bsr.c:805 +#: src/lib/parse_conf.c:953 #, c-format -msgid " Device : %s\n" +msgid "not in resource definition: %s" msgstr "" -#: src/stored/parse_bsr.c:806 +#: src/lib/parse_conf.c:964 src/dird/inc_conf.c:388 src/dird/inc_conf.c:732 +#: src/dird/dird_conf.c:2050 #, c-format -msgid " Slot : %d\n" +msgid "expected an equals, got: %s" msgstr "" -#: src/stored/parse_bsr.c:815 +#: src/lib/parse_conf.c:978 #, c-format -msgid "Client : %s\n" +msgid "" +"Keyword \"%s\" not permitted in this resource.\n" +"Perhaps you left the trailing brace off of the previous resource." msgstr "" -#: src/stored/parse_bsr.c:823 +#: src/lib/parse_conf.c:989 +msgid "Name not specified for resource" +msgstr "" + +#: src/lib/parse_conf.c:999 #, c-format -msgid "Job : %s\n" +msgid "unexpected token %d %s in resource definition" msgstr "" -#: src/stored/parse_bsr.c:831 +#: src/lib/parse_conf.c:1005 #, c-format -msgid "SessTime : %u\n" +msgid "Unknown parser state %d\n" msgstr "" -#: src/stored/parse_bsr.c:842 -msgid "BSR is NULL\n" +#: src/lib/parse_conf.c:1010 +msgid "End of conf file reached with unclosed resource." msgstr "" -#: src/stored/parse_bsr.c:846 +#: src/lib/daemon.c:52 #, c-format -msgid "Next : 0x%x\n" +msgid "Cannot fork to become daemon: ERR=%s\n" msgstr "" -#: src/stored/parse_bsr.c:847 +#: src/lib/lockmgr.c:53 #, c-format -msgid "Root bsr : 0x%x\n" +msgid "ASSERT failed at %s:%i: %s\n" msgstr "" -#: src/stored/parse_bsr.c:859 +#: src/lib/lockmgr.c:58 #, c-format -msgid "count : %u\n" +msgid "ASSERT failed at %s:%i: %s \n" msgstr "" -#: src/stored/parse_bsr.c:860 +#: src/lib/lockmgr.c:64 #, c-format -msgid "found : %u\n" +msgid "ASSERT failed at %s:%i: %s (%s)\n" msgstr "" -#: src/stored/parse_bsr.c:863 +#: src/lib/lockmgr.c:95 #, c-format -msgid "done : %s\n" +msgid "Mutex lock failure. ERR=%s\n" msgstr "" -#: src/stored/parse_bsr.c:864 +#: src/lib/lockmgr.c:105 #, c-format -msgid "positioning : %d\n" +msgid "Mutex unlock failure. ERR=%s\n" msgstr "" -#: src/stored/parse_bsr.c:865 +#: src/lib/lockmgr.c:768 #, c-format -msgid "fast_reject : %d\n" +msgid "pthread_create failed: ERR=%s\n" msgstr "" -#: src/stored/ansi_label.c:96 +#: src/lib/message.c:417 src/lib/message.c:427 #, c-format -msgid "Read error on device %s in ANSI label. ERR=%s\n" +msgid "Could not open console message file %s: ERR=%s\n" msgstr "" -#: src/stored/ansi_label.c:106 -msgid "Insane! End of tape while reading ANSI label.\n" +#: src/lib/message.c:432 +#, c-format +msgid "Could not get con mutex: ERR=%s\n" msgstr "" -#: src/stored/ansi_label.c:132 -msgid "No VOL1 label while reading ANSI/IBM label.\n" +#: src/lib/message.c:537 +msgid "Bacula Message" msgstr "" -#: src/stored/ansi_label.c:155 +#: src/lib/message.c:541 #, c-format -msgid "Wanted ANSI Volume \"%s\" got \"%s\"\n" +msgid "open mail pipe %s failed: ERR=%s\n" msgstr "" -#: src/stored/ansi_label.c:166 -msgid "No HDR1 label while reading ANSI label.\n" +#: src/lib/message.c:632 +msgid "open mail pipe failed.\n" msgstr "" -#: src/stored/ansi_label.c:172 +#: src/lib/message.c:645 #, c-format -msgid "ANSI/IBM Volume \"%s\" does not belong to Bacula.\n" -msgstr "" - -#: src/stored/ansi_label.c:184 -msgid "No HDR2 label while reading ANSI/IBM label.\n" +msgid "close error: ERR=%s\n" msgstr "" -#: src/stored/ansi_label.c:199 -msgid "Unknown or bad ANSI/IBM label record.\n" +#: src/lib/message.c:656 +#, c-format +msgid "Mail prog: %s" msgstr "" -#: src/stored/ansi_label.c:207 -msgid "Too many records in while reading ANSI/IBM label.\n" +#: src/lib/message.c:665 +#, c-format +msgid "" +"Mail program terminated in error.\n" +"CMD=%s\n" +"ERR=%s\n" msgstr "" -#: src/stored/ansi_label.c:307 +#: src/lib/message.c:770 #, c-format -msgid "ANSI Volume label name \"%s\" longer than 6 chars.\n" +msgid "fopen %s failed: ERR=%s\n" msgstr "" -#: src/stored/ansi_label.c:333 -#, c-format -msgid "Could not write ANSI VOL1 label. Wanted size=%d got=%d ERR=%s\n" +#: src/lib/message.c:892 src/lib/message.c:895 +msgid "Msg delivery error: Unable to store data in database.\n" msgstr "" -#: src/stored/ansi_label.c:371 src/stored/ansi_label.c:400 +#: src/lib/message.c:947 #, c-format -msgid "Could not write ANSI HDR1 label. ERR=%s\n" +msgid "" +"Msg delivery error: Operator mail program terminated in error.\n" +"CMD=%s\n" +"ERR=%s\n" msgstr "" -#: src/stored/ansi_label.c:376 src/stored/ansi_label.c:407 -msgid "Could not write ANSI HDR1 label.\n" +#: src/lib/message.c:968 +#, c-format +msgid "Msg delivery error: fopen %s failed: ERR=%s\n" msgstr "" -#: src/stored/ansi_label.c:412 +#: src/lib/message.c:1287 #, c-format -msgid "Error writing EOF to tape. ERR=%s" +msgid "%s: ABORTING due to ERROR in %s:%d\n" msgstr "" -#: src/stored/ansi_label.c:417 -msgid "write_ansi_ibm_label called for non-ANSI/IBM type\n" +#: src/lib/message.c:1291 +#, c-format +msgid "%s: ERROR TERMINATION at %s:%d\n" msgstr "" -#: src/stored/append.c:68 -msgid "DCR is NULL!!!\n" +#: src/lib/message.c:1296 +#, c-format +msgid "%s: Fatal Error because: " msgstr "" -#: src/stored/append.c:73 -msgid "DEVICE is NULL!!!\n" +#: src/lib/message.c:1298 +#, c-format +msgid "%s: Fatal Error at %s:%d because:\n" msgstr "" -#: src/stored/append.c:83 -msgid "Unable to set network buffer size.\n" +#: src/lib/message.c:1302 +#, c-format +msgid "%s: ERROR: " msgstr "" -#: src/stored/append.c:95 src/stored/append.c:104 src/stored/append.c:116 -#: src/stored/askdir.c:340 src/stored/askdir.c:341 -msgid "NULL Volume name. This shouldn't happen!!!\n" +#: src/lib/message.c:1304 +#, c-format +msgid "%s: ERROR in %s:%d " msgstr "" -#: src/stored/append.c:110 src/stored/btape.c:2235 +#: src/lib/message.c:1307 #, c-format -msgid "Write session label failed. ERR=%s\n" +msgid "%s: Warning: " msgstr "" -#: src/stored/append.c:122 +#: src/lib/message.c:1310 #, c-format -msgid "Network send error to FD. ERR=%s\n" +msgid "%s: Security violation: " msgstr "" -#: src/stored/append.c:159 +#: src/lib/message.c:1398 #, c-format -msgid "Error reading data header from FD. ERR=%s\n" +msgid "%s ABORTING due to ERROR\n" msgstr "" -#: src/stored/append.c:167 +#: src/lib/message.c:1401 #, c-format -msgid "Malformed data header from FD: %s\n" +msgid "%s ERROR TERMINATION\n" msgstr "" -#: src/stored/append.c:187 +#: src/lib/message.c:1404 #, c-format -msgid "FI=%d from FD not positive or sequential=%d\n" +msgid "%s JobId %u: Fatal error: " msgstr "" -#: src/stored/append.c:235 +#: src/lib/message.c:1413 #, c-format -msgid "Network error reading from FD. ERR=%s\n" +msgid "%s JobId %u: Error: " msgstr "" -#: src/stored/append.c:265 src/stored/btape.c:2354 +#: src/lib/message.c:1419 #, c-format -msgid "Error writing end session label. ERR=%s\n" +msgid "%s JobId %u: Warning: " msgstr "" -#: src/stored/append.c:277 src/stored/mac.c:126 src/stored/mac.c:261 -#: src/stored/spool.c:300 +#: src/lib/message.c:1425 #, c-format -msgid "Fatal append error on device %s: ERR=%s\n" +msgid "%s JobId %u: Security violation: " msgstr "" -#: src/stored/append.c:279 src/stored/mac.c:128 -msgid "Set ok=FALSE after write_block_to_device.\n" +#: src/lib/message.c:1696 +msgid "Debug lock information" msgstr "" -#: src/stored/append.c:308 src/stored/mac.c:151 -#, c-format -msgid "Elapsed time=%02d:%02d:%02d, Transfer rate=%s Bytes/second\n" +#: src/lib/message.c:1697 +msgid "Debug network information" msgstr "" -#: src/stored/append.c:345 -#, c-format -msgid "Error updating file attributes. ERR=%s\n" +#: src/lib/message.c:1698 +msgid "Debug plugin information" msgstr "" -#: src/stored/vol_mgr.c:93 -#, c-format -msgid "Unable to initialize volume list lock. ERR=%s\n" +#: src/lib/message.c:1699 +msgid "Debug volume information" msgstr "" -#: src/stored/label.c:93 -#, c-format -msgid "Couldn't rewind device %s: ERR=%s\n" +#: src/lib/message.c:1700 +msgid "Debug SQL queries" msgstr "" -#: src/stored/label.c:110 src/stored/label.c:202 -#, c-format -msgid "Wrong Volume mounted on device %s: Wanted %s have %s\n" +#: src/lib/message.c:1701 +msgid "Debug BVFS queries" msgstr "" -#: src/stored/label.c:113 src/stored/label.c:190 -#, c-format -msgid "Too many tries: %s" +#: src/lib/message.c:1702 +msgid "Debug memory allocation" msgstr "" -#: src/stored/label.c:130 -#, c-format -msgid "" -"Requested Volume \"%s\" on %s is not a Bacula labeled Volume, because: ERR=%s" +#: src/lib/message.c:1703 +msgid "Debug scheduler information" msgstr "" -#: src/stored/label.c:135 -msgid "Could not read Volume label from block.\n" +#: src/lib/message.c:1704 +msgid "Debug protocol information" msgstr "" -#: src/stored/label.c:138 -#, c-format -msgid "Could not unserialize Volume label: ERR=%s\n" +#: src/lib/message.c:1705 +msgid "Debug all information" msgstr "" -#: src/stored/label.c:143 -#, c-format -msgid "Volume Header Id bad: %s\n" +#: src/lib/edit.c:476 +msgid "Empty name not allowed.\n" msgstr "" -#: src/stored/label.c:175 +#: src/lib/edit.c:486 #, c-format -msgid "Volume on %s has wrong Bacula version. Wanted %d got %d\n" +msgid "Illegal character \"%c\" in name.\n" msgstr "" -#: src/stored/label.c:186 -#, c-format -msgid "Volume on %s has bad Bacula label type: %x\n" +#: src/lib/edit.c:493 +msgid "Name too long.\n" msgstr "" -#: src/stored/label.c:236 src/stored/label.c:397 src/stored/mount.c:463 -#, c-format -msgid "Could not reserve volume %s on %s\n" +#: src/lib/edit.c:499 src/dird/ua_label.c:656 src/dird/ua_cmds.c:345 +msgid "Volume name must be at least one character long.\n" msgstr "" -#: src/stored/label.c:277 +#: src/lib/tls.c:78 #, c-format -msgid "Cannot write Volume label to block for device %s\n" +msgid "" +"Error with certificate at depth: %d, issuer = %s, subject = %s, ERR=%d:%s\n" msgstr "" -#: src/stored/label.c:328 src/stored/label.c:426 src/stored/mount.c:218 -#, c-format -msgid "Open device %s Volume \"%s\" failed: ERR=%s\n" +#: src/lib/tls.c:115 +msgid "Error initializing SSL context" msgstr "" -#: src/stored/label.c:451 -#, c-format -msgid "Rewind error on device %s: ERR=%s\n" +#: src/lib/tls.c:136 +msgid "Error loading certificate verification stores" msgstr "" -#: src/stored/label.c:458 -#, c-format -msgid "Truncate error on device %s: ERR=%s\n" +#: src/lib/tls.c:141 +msgid "" +"Either a certificate file or a directory must be specified as a verification " +"store\n" msgstr "" -#: src/stored/label.c:464 -#, c-format -msgid "Failed to re-open DVD after truncate on device %s: ERR=%s\n" +#: src/lib/tls.c:152 +msgid "Error loading certificate file" msgstr "" -#: src/stored/label.c:487 -#, c-format -msgid "Unable to write device %s: ERR=%s\n" +#: src/lib/tls.c:160 +msgid "Error loading private key" msgstr "" -#: src/stored/label.c:518 -#, c-format -msgid "Recycled volume \"%s\" on device %s, all previous data lost.\n" +#: src/lib/tls.c:168 +msgid "Unable to open DH parameters file" msgstr "" -#: src/stored/label.c:521 -#, c-format -msgid "Wrote label to prelabeled Volume \"%s\" on device %s\n" +#: src/lib/tls.c:174 +msgid "Unable to load DH parameters from specified file" msgstr "" -#: src/stored/label.c:721 -#, c-format -msgid "Bad Volume session label = %d\n" +#: src/lib/tls.c:178 +msgid "Failed to set TLS Diffie-Hellman parameters" msgstr "" -#: src/stored/label.c:776 -#, c-format -msgid "Expecting Volume Label, got FI=%s Stream=%s len=%d\n" +#: src/lib/tls.c:188 +msgid "Error setting cipher list, no valid ciphers available\n" msgstr "" -#: src/stored/label.c:903 -#, c-format -msgid "Unknown %d" +#: src/lib/tls.c:247 +msgid "Peer failed to present a TLS certificate\n" msgstr "" -#: src/stored/label.c:907 +#: src/lib/tls.c:292 src/lib/tls.c:293 #, c-format -msgid "" -"\n" -"Volume Label:\n" -"Id : %sVerNo : %d\n" -"VolName : %s\n" -"PrevVolName : %s\n" -"VolFile : %d\n" -"LabelType : %s\n" -"LabelSize : %d\n" -"PoolName : %s\n" -"MediaType : %s\n" -"PoolType : %s\n" -"HostName : %s\n" +msgid "Peer %s failed to present a TLS certificate\n" msgstr "" -#: src/stored/label.c:929 -#, c-format -msgid "Date label written: %s\n" +#: src/lib/tls.c:408 +msgid "Error creating file descriptor-based BIO" msgstr "" -#: src/stored/label.c:935 -#, c-format -msgid "Date label written: %04d-%02d-%02d at %02d:%02d\n" +#: src/lib/tls.c:419 +msgid "Error creating new SSL object" msgstr "" -#: src/stored/label.c:955 -#, c-format -msgid "" -"\n" -"%s Record:\n" -"JobId : %d\n" -"VerNum : %d\n" -"PoolName : %s\n" -"PoolType : %s\n" -"JobName : %s\n" -"ClientName : %s\n" +#: src/lib/tls.c:483 src/lib/tls.c:506 +msgid "Connect failure" msgstr "" -#: src/stored/label.c:968 -#, c-format -msgid "" -"Job (unique name) : %s\n" -"FileSet : %s\n" -"JobType : %c\n" -"JobLevel : %c\n" +#: src/lib/tls.c:586 src/lib/tls.c:590 +msgid "TLS shutdown failure." msgstr "" -#: src/stored/label.c:977 +#: src/lib/tls.c:645 src/lib/tls.c:671 +msgid "TLS read/write failure." +msgstr "" + +#: src/lib/priv.c:56 #, c-format -msgid "" -"JobFiles : %s\n" -"JobBytes : %s\n" -"StartBlock : %s\n" -"EndBlock : %s\n" -"StartFile : %s\n" -"EndFile : %s\n" -"JobErrors : %s\n" -"JobStatus : %c\n" +msgid "Could not find userid=%s: ERR=%s\n" msgstr "" -#: src/stored/label.c:998 +#: src/lib/priv.c:62 #, c-format -msgid "Date written : %s\n" +msgid "Could not find password entry. ERR=%s\n" msgstr "" -#: src/stored/label.c:1003 +#: src/lib/priv.c:75 #, c-format -msgid "Date written : %04d-%02d-%02d at %02d:%02d\n" +msgid "Could not find group=%s: ERR=%s\n" msgstr "" -#: src/stored/label.c:1022 -msgid "Fresh Volume" +#: src/lib/priv.c:83 +#, c-format +msgid "Could not initgroups for group=%s, userid=%s: ERR=%s\n" msgstr "" -#: src/stored/label.c:1025 -msgid "Volume" +#: src/lib/priv.c:86 +#, c-format +msgid "Could not initgroups for userid=%s: ERR=%s\n" msgstr "" -#: src/stored/label.c:1034 src/stored/read_record.c:428 -msgid "End of Media" +#: src/lib/priv.c:93 +#, c-format +msgid "Could not set group=%s: ERR=%s\n" msgstr "" -#: src/stored/label.c:1037 -msgid "End of Tape" +#: src/lib/priv.c:103 +#, c-format +msgid "prctl failed: ERR=%s\n" msgstr "" -#: src/stored/label.c:1057 src/stored/label.c:1065 src/stored/label.c:1098 +#: src/lib/priv.c:107 #, c-format -msgid "%s Record: File:blk=%u:%u SessId=%d SessTime=%d JobId=%d DataLen=%d\n" +msgid "setreuid failed: ERR=%s\n" msgstr "" -#: src/stored/label.c:1062 -msgid "End of physical tape.\n" +#: src/lib/priv.c:111 +#, c-format +msgid "cap_from_text failed: ERR=%s\n" msgstr "" -#: src/stored/label.c:1077 src/stored/label.c:1086 +#: src/lib/priv.c:115 #, c-format -msgid "%s Record: File:blk=%u:%u SessId=%d SessTime=%d JobId=%d\n" +msgid "cap_set_proc failed: ERR=%s\n" +msgstr "" + +#: src/lib/priv.c:119 +msgid "Keep readall caps not implemented this OS or missing libraries.\n" msgstr "" -#: src/stored/label.c:1079 +#: src/lib/priv.c:123 #, c-format -msgid " Job=%s Date=%s Level=%c Type=%c\n" +msgid "Could not set specified userid: %s\n" msgstr "" -#: src/stored/label.c:1088 +#: src/lib/res.c:53 #, c-format -msgid " Date=%s Level=%c Type=%c Files=%s Bytes=%s Errors=%d Status=%c\n" +msgid "rwl_writelock failure at %s:%d: ERR=%s\n" msgstr "" -#: src/stored/status.c:99 -msgid "Used Volume status:\n" +#: src/lib/res.c:63 +#, c-format +msgid "rwl_writeunlock failure at %s:%d:. ERR=%s\n" msgstr "" -#: src/stored/status.c:117 -msgid "" -"\n" -"SD Resources:\n" +#: src/lib/watchdog.c:84 +#, c-format +msgid "Unable to initialize watchdog lock. ERR=%s\n" msgstr "" -#: src/stored/status.c:153 -msgid "" -"\n" -"Device status:\n" +#: src/lib/watchdog.c:181 +msgid "BUG! register_watchdog called before start_watchdog\n" msgstr "" -#: src/stored/status.c:157 +#: src/lib/watchdog.c:184 #, c-format -msgid "Autochanger \"%s\" with devices:\n" +msgid "BUG! Watchdog %p has NULL callback\n" msgstr "" -#: src/stored/status.c:177 +#: src/lib/watchdog.c:187 #, c-format -msgid "" -"\n" -"Device %s is %s:\n" -" Volume: %s\n" -" Pool: %s\n" -" Media type: %s\n" +msgid "BUG! Watchdog %p has zero interval\n" msgstr "" -#: src/stored/status.c:182 -msgid "waiting for" +#: src/lib/watchdog.c:207 +msgid "BUG! unregister_watchdog_unlocked called before start_watchdog\n" msgstr "" -#: src/stored/status.c:182 -msgid "mounted with" +#: src/lib/watchdog.c:327 +#, c-format +msgid "rwl_writelock failure. ERR=%s\n" msgstr "" -#: src/stored/status.c:184 -msgid "*unknown*" +#: src/lib/watchdog.c:342 +#, c-format +msgid "rwl_writeunlock failure. ERR=%s\n" msgstr "" -#: src/stored/status.c:188 +#: src/lib/ini.c:94 src/lib/ini.c:106 #, c-format msgid "" -"\n" -"Device %s open but no Bacula volume is currently mounted.\n" +"Config file error: %s\n" +" : Line %d, col %d of file %s\n" +"%s\n" msgstr "" -#: src/stored/status.c:199 +#: src/lib/ini.c:297 src/lib/ini.c:372 #, c-format -msgid " Total Bytes=%s Blocks=%s Bytes/block=%s\n" +msgid "Cannot open config file %s: %s\n" msgstr "" -#: src/stored/status.c:214 -#, c-format -msgid " Total Bytes Read=%s Blocks Read=%s Bytes/block=%s\n" +#: src/lib/bget_msg.c:85 +msgid "Status OK\n" msgstr "" -#: src/stored/status.c:220 +#: src/lib/bget_msg.c:89 #, c-format -msgid " Positioned at File=%s Block=%s\n" +msgid "bget_msg: unknown signal %d\n" msgstr "" -#: src/stored/status.c:227 +#: src/lib/address_conf.c:50 #, c-format -msgid "" -"\n" -"Device %s is not open.\n" +msgid "Only ipv4 and ipv6 are supported (%d)\n" msgstr "" -#: src/stored/status.c:231 +#: src/lib/address_conf.c:54 #, c-format -msgid "" -"\n" -"Device \"%s\" is not open or does not exist.\n" +msgid "Only ipv4 is supported (%d)\n" msgstr "" -#: src/stored/status.c:255 +#: src/lib/address_conf.c:169 #, c-format -msgid "Daemon started %s. Jobs: run=%d, running=%d.\n" +msgid "You tried to assign a ipv6 address to an ipv4(%d)\n" msgstr "" -#: src/stored/status.c:293 -msgid "" -"No DEVICE structure.\n" -"\n" -msgstr "" - -#: src/stored/status.c:299 -msgid " Device is BLOCKED. User unmounted.\n" +#: src/lib/address_conf.c:178 +#, c-format +msgid "You tried to assign an ipv4 address to an ipv6(%d)\n" msgstr "" -#: src/stored/status.c:303 -msgid " Device is BLOCKED. User unmounted during wait for media/mount.\n" +#: src/lib/address_conf.c:261 +#, c-format +msgid "Can't add default IPv4 address (%s)\n" msgstr "" -#: src/stored/status.c:313 -#, c-format +#: src/lib/address_conf.c:292 msgid "" -" Device is BLOCKED waiting for mount of volume \"%s\",\n" -" Pool: %s\n" -" Media type: %s\n" +"Old style addresses cannot be mixed with new style. Try removing Port=nnn." msgstr "" -#: src/stored/status.c:322 +#: src/lib/address_conf.c:314 #, c-format -msgid "" -" Device is BLOCKED waiting to create a volume for:\n" -" Pool: %s\n" -" Media type: %s\n" +msgid "Cannot resolve service(%s)" msgstr "" -#: src/stored/status.c:333 -msgid " Device is BLOCKED waiting for media.\n" +#: src/lib/address_conf.c:324 +#, c-format +msgid "Cannot resolve hostname(%s) %s" msgstr "" -#: src/stored/status.c:339 -msgid " Device is being initialized.\n" +#: src/lib/address_conf.c:432 src/lib/address_conf.c:465 +#, c-format +msgid "Expected a block to begin with { but got: %s" msgstr "" -#: src/stored/status.c:343 -msgid " Device is blocked labeling a Volume.\n" +#: src/lib/address_conf.c:437 +msgid "Empty addr block is not allowed" msgstr "" -#: src/stored/status.c:352 +#: src/lib/address_conf.c:441 #, c-format -msgid " Slot %d %s loaded in drive %d.\n" +msgid "Expected a string but got: %s" msgstr "" -#: src/stored/status.c:356 +#: src/lib/address_conf.c:452 #, c-format -msgid " Drive %d is not loaded.\n" +msgid "Expected a string [ip|ipv4|ipv6] but got: %s" msgstr "" -#: src/stored/status.c:371 src/stored/btape.c:688 +#: src/lib/address_conf.c:456 #, c-format -msgid "Configured device capabilities:\n" +msgid "Expected a string [ip|ipv4] but got: %s" msgstr "" -#: src/stored/status.c:389 -msgid "Device state:\n" +#: src/lib/address_conf.c:461 +#, c-format +msgid "Expected an equal = but got: %s" msgstr "" -#: src/stored/status.c:405 +#: src/lib/address_conf.c:472 #, c-format -msgid " num_writers=%d reserves=%d block=%d\n" +msgid "Expected an identifier [addr|port] but got: %s" msgstr "" -#: src/stored/status.c:409 -msgid "Attached Jobs: " +#: src/lib/address_conf.c:477 +msgid "Only one port per address block" msgstr "" -#: src/stored/status.c:427 src/stored/btape.c:720 -#, c-format -msgid "Device parameters:\n" +#: src/lib/address_conf.c:483 +msgid "Only one addr per address block" msgstr "" -#: src/stored/status.c:429 +#: src/lib/address_conf.c:487 #, c-format -msgid " Archive name: %s Device name: %s\n" +msgid "Expected a identifier [addr|port] but got: %s" msgstr "" -#: src/stored/status.c:432 +#: src/lib/address_conf.c:491 #, c-format -msgid " File=%u block=%u\n" +msgid "Expected a equal =, got: %s" msgstr "" -#: src/stored/status.c:434 +#: src/lib/address_conf.c:499 #, c-format -msgid " Min block=%u Max block=%u\n" +msgid "Expected a number or a string but got: %s" msgstr "" -#: src/stored/status.c:455 +#: src/lib/address_conf.c:505 #, c-format -msgid "%s Job %s waiting for Client connection.\n" +msgid "Expected an IP number or a hostname but got: %s" msgstr "" -#: src/stored/status.c:471 -#, c-format -msgid "" -"Reading: %s %s job %s JobId=%d Volume=\"%s\"\n" -" pool=\"%s\" device=%s\n" +#: src/lib/address_conf.c:511 +msgid "State machine missmatch" msgstr "" -#: src/stored/status.c:484 +#: src/lib/address_conf.c:517 #, c-format -msgid "" -"Writing: %s %s job %s JobId=%d Volume=\"%s\"\n" -" pool=\"%s\" device=%s\n" +msgid "Expected a end of block with } but got: %s" msgstr "" -#: src/stored/status.c:495 +#: src/lib/address_conf.c:523 #, c-format -msgid " spooling=%d despooling=%d despool_wait=%d\n" +msgid "Cannot add hostname(%s) and port(%s) to addrlist (%s)" msgstr "" -#: src/stored/status.c:511 +#: src/lib/address_conf.c:529 #, c-format -msgid " Files=%s Bytes=%s AveBytes/sec=%s LastBytes/sec=%s\n" +msgid "Expected an end of block with } but got: %s" msgstr "" -#: src/stored/status.c:523 +#: src/lib/address_conf.c:538 #, c-format -msgid " FDReadSeqNo=%s in_msg=%u out_msg=%d fd=%d\n" +msgid "Expected an IP number or a hostname, got: %s" msgstr "" -#: src/stored/status.c:529 -msgid " FDSocket closed\n" +#: src/lib/address_conf.c:543 src/lib/address_conf.c:557 +#, c-format +msgid "Cannot add port (%s) to (%s)" msgstr "" -#: src/stored/status.c:550 -msgid "" -"\n" -"Jobs waiting to reserve a drive:\n" +#: src/lib/address_conf.c:552 +#, c-format +msgid "Expected a port number or string, got: %s" msgstr "" -#: src/stored/status.c:581 -msgid "===================================================================\n" +#: src/lib/crypto.c:430 +msgid "Unable to open certificate file" msgstr "" -#: src/stored/status.c:663 src/lib/util.c:423 src/filed/status.c:517 -msgid "Base" +#: src/lib/crypto.c:437 +msgid "Unable to read certificate from file" msgstr "" -#: src/stored/status.c:680 src/filed/status.c:534 -msgid "Init Catalog" +#: src/lib/crypto.c:443 +msgid "Unable to extract public key from certificate" msgstr "" -#: src/stored/status.c:683 src/filed/status.c:537 -msgid "Volume to Catalog" +#: src/lib/crypto.c:450 +msgid "" +"Provided certificate does not include the required subjectKeyIdentifier " +"extension." msgstr "" -#: src/stored/status.c:686 src/filed/status.c:540 -msgid "Disk to Catalog" +#: src/lib/crypto.c:457 +#, c-format +msgid "Unsupported key type provided: %d\n" msgstr "" -#: src/stored/status.c:689 src/filed/status.c:543 -msgid "Data" +#: src/lib/crypto.c:494 src/lib/crypto.c:542 +msgid "Unable to open private key file" msgstr "" -#: src/stored/status.c:695 src/lib/util.c:459 src/filed/status.c:549 -msgid "Unknown Job Level" +#: src/lib/crypto.c:524 src/lib/crypto.c:558 +msgid "Unable to read private key from file" msgstr "" -#: src/stored/status.c:763 +#: src/lib/crypto.c:617 #, c-format -msgid "3900 No arg in .status command: %s\n" +msgid "Unsupported digest type: %d\n" msgstr "" -#: src/stored/status.c:811 -#, c-format -msgid "3900 Unknown arg in .status command: %s\n" +#: src/lib/crypto.c:631 +msgid "OpenSSL digest initialization failed" msgstr "" -#: src/stored/status.c:826 -msgid "Bacula Storage: Idle" +#: src/lib/crypto.c:645 +msgid "OpenSSL digest update failed" msgstr "" -#: src/stored/status.c:837 -msgid "Bacula Storage: Running" +#: src/lib/crypto.c:663 +msgid "OpenSSL digest finalize failed" msgstr "" -#: src/stored/status.c:851 -msgid "Bacula Storage: Last Job Canceled" +#: src/lib/crypto.c:761 +msgid "OpenSSL digest_new failed" msgstr "" -#: src/stored/status.c:855 -msgid "Bacula Storage: Last Job Failed" +#: src/lib/crypto.c:767 +msgid "OpenSSL sign get digest failed" msgstr "" -#: src/stored/status.c:859 -msgid "Bacula Storage: Last Job had Warnings" +#: src/lib/crypto.c:806 src/lib/crypto.c:810 +msgid "OpenSSL digest Verify final failed" msgstr "" -#: src/stored/read_record.c:89 -#, c-format -msgid "End of Volume at file %u on device %s, Volume \"%s\"\n" +#: src/lib/crypto.c:815 +msgid "No signers found for crypto verify.\n" msgstr "" -#: src/stored/read_record.c:93 -msgid "End of all volumes.\n" +#: src/lib/crypto.c:876 +msgid "Signature creation failed" msgstr "" -#: src/stored/read_record.c:137 -msgid "part" +#: src/lib/crypto.c:954 +msgid "Signature decoding failed" msgstr "" -#: src/stored/read_record.c:140 -msgid "file" +#: src/lib/crypto.c:1031 +msgid "Unsupported cipher type specified\n" msgstr "" -#: src/stored/read_record.c:143 -#, c-format -msgid "End of %s %u on device %s, Volume \"%s\"\n" +#: src/lib/crypto.c:1180 +msgid "CryptoData decoding failed" msgstr "" -#: src/stored/read_record.c:158 -msgid "Did fsr in attemp to skip bad record.\n" +#: src/lib/crypto.c:1224 +msgid "Failure decrypting the session key" msgstr "" -#: src/stored/read_record.c:397 +#: src/lib/crypto.c:1275 #, c-format -msgid "Forward spacing Volume \"%s\" to file:block %u:%u.\n" +msgid "Unsupported contentEncryptionAlgorithm: %d\n" msgstr "" -#: src/stored/read_record.c:421 -msgid "Begin Session" +#: src/lib/crypto.c:1285 src/lib/crypto.c:1291 +msgid "OpenSSL cipher context initialization failed" msgstr "" -#: src/stored/read_record.c:425 -msgid "End Session" +#: src/lib/crypto.c:1298 +msgid "Encryption session provided an invalid symmetric key" msgstr "" -#: src/stored/read_record.c:431 -#, c-format -msgid "Unknown code %d\n" +#: src/lib/crypto.c:1304 +msgid "Encryption session provided an invalid IV" msgstr "" -#: src/stored/bextract.c:80 -#, c-format -msgid "" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: bextract \n" -" -b specify a bootstrap file\n" -" -c specify a Storage configuration file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -e exclude list\n" -" -i include list\n" -" -p proceed inspite of I/O errors\n" -" -v verbose\n" -" -V specify Volume names (separated by |)\n" -" -? print this message\n" -"\n" +#: src/lib/crypto.c:1310 +msgid "OpenSSL cipher context key/IV initialization failed" msgstr "" -#: src/stored/bextract.c:196 src/stored/bcopy.c:161 src/stored/bscan.c:248 -#: src/tools/bvfs_test.c:201 src/tools/bbatch.c:190 src/tools/ing_test.c:185 -#: src/tools/cats_test.c:321 -msgid "Wrong number of arguments: \n" +#: src/lib/crypto.c:1380 +#, c-format +msgid "Unable to init OpenSSL threading: ERR=%s\n" msgstr "" -#: src/stored/bextract.c:218 -#, c-format -msgid "%d Program Name and/or Program Data Stream records ignored.\n" +#: src/lib/crypto.c:1393 +msgid "Failed to seed OpenSSL PRNG\n" msgstr "" -#: src/stored/bextract.c:222 -#, c-format -msgid "%d Win32 data or Win32 gzip data stream records. Ignored.\n" +#: src/lib/crypto.c:1419 +msgid "Failed to save OpenSSL PRNG\n" msgstr "" -#: src/stored/bextract.c:249 +#: src/lib/crypto.c:1480 #, c-format -msgid "Cannot stat %s. It must exist. ERR=%s\n" +msgid "Unsupported digest type=%d specified\n" msgstr "" -#: src/stored/bextract.c:253 +#: src/lib/crypto.c:1500 #, c-format -msgid "%s must be a directory.\n" +msgid "SHA1Update() returned an error: %d\n" msgstr "" -#: src/stored/bextract.c:274 -#, c-format -msgid "%u files restored.\n" +#: src/lib/crypto.c:1643 +msgid "No error" msgstr "" -#: src/stored/bextract.c:284 src/stored/bextract.c:290 -#: src/filed/restore.c:1480 -#, c-format -msgid "Write error on %s: %s\n" +#: src/lib/crypto.c:1645 +msgid "Signer not found" msgstr "" -#: src/stored/bextract.c:321 src/stored/bextract.c:587 -msgid "Logic error output file should be open but is not.\n" +#: src/lib/crypto.c:1647 +msgid "Recipient not found" msgstr "" -#: src/stored/bextract.c:335 src/filed/restore.c:569 -#, c-format -msgid "%s stream not supported on this Client.\n" +#: src/lib/crypto.c:1649 +msgid "Unsupported digest algorithm" msgstr "" -#: src/stored/bextract.c:345 -#, c-format -msgid "%s was deleted.\n" +#: src/lib/crypto.c:1651 +msgid "Unsupported encryption algorithm" msgstr "" -#: src/stored/bextract.c:393 -#, c-format -msgid "Seek error on %s: %s\n" +#: src/lib/crypto.c:1653 +msgid "Signature is invalid" msgstr "" -#: src/stored/bextract.c:429 src/stored/bextract.c:494 -#: src/filed/restore.c:1335 -#, c-format -msgid "Seek to %s error on %s: ERR=%s\n" +#: src/lib/crypto.c:1655 +msgid "Decryption error" msgstr "" -#: src/stored/bextract.c:448 -#, c-format -msgid "Uncompression error. ERR=%d\n" +#: src/lib/crypto.c:1658 +msgid "Internal error" msgstr "" -#: src/stored/bextract.c:462 src/filed/restore.c:1450 -msgid "GZIP data stream found, but GZIP not configured!\n" +#: src/lib/crypto.c:1660 +msgid "Unknown error" msgstr "" -#: src/stored/bextract.c:517 src/filed/restore.c:1376 +#: src/lib/attr.c:69 #, c-format -msgid "Compressed header version error. version=0x%x\n" +msgid "Error scanning attributes: %s\n" msgstr "" -#: src/stored/bextract.c:522 src/filed/restore.c:1381 -#, c-format -msgid "Compressed header size error. comp_len=%d, msglen=%d\n" +#: src/lib/signal.c:56 +msgid "Invalid signal number" msgstr "" -#: src/stored/bextract.c:544 +#: src/lib/signal.c:146 src/lib/signal.c:148 #, c-format -msgid "LZO uncompression error. ERR=%d\n" +msgid "Bacula interrupted by signal %d: %s\n" msgstr "" -#: src/stored/bextract.c:556 src/filed/restore.c:1414 +#: src/lib/signal.c:164 #, c-format -msgid "Compression algorithm 0x%x found, but not supported!\n" +msgid "Kaboom! %s, %s got signal %d - %s at %s. Attempting traceback.\n" msgstr "" -#: src/stored/bextract.c:578 -msgid "Got Program Name or Data Stream. Ignored.\n" +#: src/lib/signal.c:166 +#, c-format +msgid "Kaboom! exepath=%s\n" msgstr "" -#: src/stored/bextract.c:592 src/filed/restore.c:328 src/filed/restore.c:1033 +#: src/lib/signal.c:207 #, c-format -msgid "Unknown stream=%d ignored. This shouldn't happen!\n" +msgid "Fork error: ERR=%s\n" msgstr "" -#: src/stored/bcopy.c:74 +#: src/lib/signal.c:215 #, c-format -msgid "" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: bcopy [-d debug_level] \n" -" -b bootstrap specify a bootstrap file\n" -" -c specify a Storage configuration file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -i specify input Volume names (separated by |)\n" -" -o specify output Volume names (separated by |)\n" -" -p proceed inspite of errors\n" -" -v verbose\n" -" -w specify working directory (default /tmp)\n" -" -? print this message\n" -"\n" +msgid "Calling: %s %s %s %s\n" msgstr "" -#: src/stored/bcopy.c:202 src/stored/device.c:298 src/stored/btape.c:473 +#: src/lib/signal.c:219 #, c-format -msgid "dev open failed: %s\n" +msgid "execv: %s failed: ERR=%s\n" msgstr "" -#: src/stored/bcopy.c:217 -msgid "Write of last block failed.\n" +#: src/lib/signal.c:241 +#, c-format +msgid "It looks like the traceback worked...\n" msgstr "" -#: src/stored/bcopy.c:221 +#: src/lib/signal.c:243 #, c-format -msgid "%u Jobs copied. %u records copied.\n" +msgid "The btraceback call returned %d\n" msgstr "" -#: src/stored/bcopy.c:238 src/stored/bscan.c:428 +#: src/lib/signal.c:303 #, c-format -msgid "Record: SessId=%u SessTim=%u FileIndex=%d Stream=%d len=%u\n" +msgid "BA_NSIG too small (%d) should be (%d)\n" msgstr "" -#: src/stored/bcopy.c:254 -msgid "Volume is prelabeled. This volume cannot be copied.\n" +#: src/lib/signal.c:309 +msgid "UNKNOWN SIGNAL" msgstr "" -#: src/stored/bcopy.c:257 -msgid "Volume label not copied.\n" +#: src/lib/signal.c:310 +msgid "Hangup" msgstr "" -#: src/stored/bcopy.c:263 -msgid "Copy skipped. Record does not match BSR filter.\n" +#: src/lib/signal.c:311 +msgid "Interrupt" msgstr "" -#: src/stored/bcopy.c:280 src/stored/bcopy.c:288 src/stored/bcopy.c:316 -#: src/stored/btape.c:2756 -#, c-format -msgid "Cannot fixup device error. %s\n" +#: src/lib/signal.c:312 +msgid "Quit" msgstr "" -#: src/stored/bcopy.c:294 -msgid "EOM label not copied.\n" +#: src/lib/signal.c:313 +msgid "Illegal instruction" msgstr "" -#: src/stored/bcopy.c:297 -msgid "EOT label not copied.\n" +#: src/lib/signal.c:314 +msgid "Trace/Breakpoint trap" msgstr "" -#: src/stored/dvd.c:111 -msgid "No FreeSpace command defined.\n" +#: src/lib/signal.c:315 +msgid "Abort" msgstr "" -#: src/stored/dvd.c:145 -#, c-format -msgid "Cannot run free space command. Results=%s ERR=%s\n" +#: src/lib/signal.c:317 +msgid "EMT instruction (Emulation Trap)" msgstr "" -#: src/stored/dvd.c:261 -#, c-format -msgid "Error writing part %d to the DVD: ERR=%s\n" +#: src/lib/signal.c:320 +msgid "IOT trap" msgstr "" -#: src/stored/dvd.c:263 -#, c-format -msgid "Error while writing current part to the DVD: %s" +#: src/lib/signal.c:322 +msgid "BUS error" msgstr "" -#: src/stored/dvd.c:273 -#, c-format -msgid "Part %d (%lld bytes) written to DVD.\n" +#: src/lib/signal.c:323 +msgid "Floating-point exception" msgstr "" -#: src/stored/dvd.c:292 -#, c-format -msgid "Remaining free space %s on %s\n" +#: src/lib/signal.c:324 +msgid "Kill, unblockable" msgstr "" -#: src/stored/dvd.c:358 -#, c-format -msgid "Next Volume part already exists on DVD. Cannot continue: %s\n" +#: src/lib/signal.c:325 +msgid "User-defined signal 1" msgstr "" -#: src/stored/dvd.c:563 -#, c-format -msgid "" -"Error writing. Current part less than total number of parts (%d/%d, device=" -"%s)\n" +#: src/lib/signal.c:326 +msgid "Segmentation violation" msgstr "" -#: src/stored/dvd.c:570 -#, c-format -msgid "Unable to write last on %s: ERR=%s\n" +#: src/lib/signal.c:327 +msgid "User-defined signal 2" msgstr "" -#: src/stored/butil.c:59 -msgid "Nohdr," +#: src/lib/signal.c:328 +msgid "Broken pipe" msgstr "" -#: src/stored/butil.c:62 -msgid "partial," +#: src/lib/signal.c:329 +msgid "Alarm clock" msgstr "" -#: src/stored/butil.c:65 -msgid "empty," +#: src/lib/signal.c:330 +msgid "Termination" msgstr "" -#: src/stored/butil.c:68 -msgid "Nomatch," +#: src/lib/signal.c:332 +msgid "Stack fault" msgstr "" -#: src/stored/butil.c:71 -msgid "cont," +#: src/lib/signal.c:334 +msgid "Child status has changed" msgstr "" -#: src/stored/butil.c:148 -msgid "Volume name or names is too long. Please use a .bsr file.\n" +#: src/lib/signal.c:335 +msgid "Continue" msgstr "" -#: src/stored/butil.c:168 -#, c-format -msgid "Cannot find device \"%s\" in config file %s.\n" +#: src/lib/signal.c:336 +msgid "Stop, unblockable" msgstr "" -#: src/stored/butil.c:175 -#, c-format -msgid "Cannot init device %s\n" +#: src/lib/signal.c:337 +msgid "Keyboard stop" msgstr "" -#: src/stored/butil.c:195 -#, c-format -msgid "Cannot open %s\n" +#: src/lib/signal.c:338 +msgid "Background read from tty" msgstr "" -#: src/stored/butil.c:282 -#, c-format -msgid "Could not find device \"%s\" in config file %s.\n" +#: src/lib/signal.c:339 +msgid "Background write to tty" msgstr "" -#: src/stored/butil.c:287 -#, c-format -msgid "Using device: \"%s\" for reading.\n" +#: src/lib/signal.c:340 +msgid "Urgent condition on socket" msgstr "" -#: src/stored/butil.c:290 -#, c-format -msgid "Using device: \"%s\" for writing.\n" +#: src/lib/signal.c:341 +msgid "CPU limit exceeded" msgstr "" -#: src/stored/butil.c:306 -msgid "Unexpected End of Data\n" +#: src/lib/signal.c:342 +msgid "File size limit exceeded" msgstr "" -#: src/stored/butil.c:308 -msgid "Unexpected End of Tape\n" +#: src/lib/signal.c:343 +msgid "Virtual alarm clock" msgstr "" -#: src/stored/butil.c:310 -msgid "Unexpected End of File\n" +#: src/lib/signal.c:344 +msgid "Profiling alarm clock" msgstr "" -#: src/stored/butil.c:312 -msgid "Tape Door is Open\n" +#: src/lib/signal.c:345 +msgid "Window size change" msgstr "" -#: src/stored/butil.c:314 -msgid "Unexpected Tape is Off-line\n" +#: src/lib/signal.c:346 +msgid "I/O now possible" msgstr "" -#: src/stored/acquire.c:74 -#, c-format -msgid "Acquire read: num_writers=%d not zero. Job %d canceled.\n" +#: src/lib/signal.c:348 +msgid "Power failure restart" msgstr "" -#: src/stored/acquire.c:83 -#, c-format -msgid "No volumes specified for reading. Job %s canceled.\n" +#: src/lib/signal.c:351 +msgid "No runnable lwp" msgstr "" -#: src/stored/acquire.c:92 -#, c-format -msgid "Logic error: no next volume to read. Numvol=%d Curvol=%d\n" +#: src/lib/signal.c:354 +msgid "SIGLWP special signal used by thread library" msgstr "" -#: src/stored/acquire.c:118 -#, c-format -msgid "" -"Changing read device. Want Media Type=\"%s\" have=\"%s\"\n" -" device=%s\n" +#: src/lib/signal.c:357 +msgid "Checkpoint Freeze" msgstr "" -#: src/stored/acquire.c:162 -#, c-format -msgid "Media Type change. New read device %s chosen.\n" +#: src/lib/signal.c:360 +msgid "Checkpoint Thaw" msgstr "" -#: src/stored/acquire.c:174 -#, c-format -msgid "No suitable device found to read Volume \"%s\"\n" +#: src/lib/signal.c:363 +msgid "Thread Cancellation" msgstr "" -#: src/stored/acquire.c:213 -#, c-format -msgid "Job %s canceled.\n" +#: src/lib/signal.c:366 +msgid "Resource Lost (e.g. record-lock lost)" msgstr "" -#: src/stored/acquire.c:231 -#, c-format -msgid "Read open device %s Volume \"%s\" failed: ERR=%s\n" +#: src/lib/berrno.c:51 +msgid "Child exited normally." msgstr "" -#: src/stored/acquire.c:321 -#, c-format -msgid "Too many errors trying to mount device %s for reading.\n" +#: src/lib/berrno.c:58 +msgid "Unknown error during program execvp" msgstr "" -#: src/stored/acquire.c:329 +#: src/lib/berrno.c:61 #, c-format -msgid "Ready to read from volume \"%s\" on device %s.\n" +msgid "Child exited with code %d" msgstr "" -#: src/stored/acquire.c:381 +#: src/lib/berrno.c:69 #, c-format -msgid "Want to append, but device %s is busy reading.\n" +msgid "Child died from signal %d: %s" msgstr "" -#: src/stored/acquire.c:414 -#, c-format -msgid "Could not ready device %s for append.\n" +#: src/lib/berrno.c:75 +msgid "Invalid errno. No error message possible." msgstr "" -#: src/stored/acquire.c:501 src/stored/spool.c:321 src/stored/block.c:386 -#: src/stored/block.c:769 src/stored/block.c:847 -#, c-format -msgid "Could not create JobMedia record for Volume=\"%s\" Job=%s\n" +#: src/lib/rwlock.c:295 +msgid "rwl_writeunlock called too many times.\n" msgstr "" -#: src/stored/acquire.c:552 -#, c-format -msgid "Alert: %s" +#: src/lib/rwlock.c:300 +msgid "rwl_writeunlock by non-owner.\n" msgstr "" -#: src/stored/acquire.c:560 +#: src/lib/mem_pool.c:101 #, c-format -msgid "3997 Bad alert command: %s: ERR=%s.\n" +msgid "MemPool index %d larger than max %d\n" msgstr "" -#: src/stored/acquire.c:629 src/stored/dev.c:270 src/stored/dev.c:311 -#: src/lib/openssl.c:122 src/lib/openssl.c:181 +#: src/lib/mem_pool.c:119 src/lib/mem_pool.c:139 src/lib/mem_pool.c:175 +#: src/lib/mem_pool.c:248 src/lib/mem_pool.c:268 src/lib/mem_pool.c:303 +#: src/lib/mem_pool.c:614 #, c-format -msgid "Unable to init mutex: ERR=%s\n" +msgid "Out of memory requesting %d bytes\n" msgstr "" -#: src/stored/acquire.c:635 -#, fuzzy, c-format -msgid "Unable to init r_mutex: ERR=%s\n" -msgstr "Kan job cond variabele niet initialiseren: ERR=%s\n" - -#: src/stored/askdir.c:179 -msgid "Network error on bnet_recv in req_vol_info.\n" +#: src/lib/mem_pool.c:156 +msgid "obuf is NULL\n" msgstr "" -#: src/stored/askdir.c:197 +#: src/lib/bnet_server.c:103 #, c-format -msgid "Error getting Volume info: %s" +msgid "Cannot open stream socket. ERR=%s. Current %s All %s\n" msgstr "" -#: src/stored/askdir.c:376 +#: src/lib/bnet_server.c:116 #, c-format -msgid "Didn't get vol info vol=%s: ERR=%s" +msgid "Cannot set SO_REUSEADDR on socket: %s\n" msgstr "" -#: src/stored/askdir.c:432 +#: src/lib/bnet_server.c:125 #, c-format -msgid "Error creating JobMedia record: ERR=%s\n" +msgid "Cannot bind port %d: ERR=%s: Retrying ...\n" msgstr "" -#: src/stored/askdir.c:439 +#: src/lib/bnet_server.c:133 src/lib/bnet_server.c:141 #, c-format -msgid "Error creating JobMedia record: %s\n" +msgid "Cannot bind port %d: ERR=%s.\n" msgstr "" -#: src/stored/askdir.c:522 +#: src/lib/bnet_server.c:148 +#, fuzzy +msgid "No addr/port found to listen on.\n" +msgstr "Geen Volumes gevonden om terug te zetten.\n" + +#: src/lib/bnet_server.c:154 #, c-format -msgid "Job %s canceled while waiting for mount on Storage Device \"%s\".\n" +msgid "Could not init client queue: ERR=%s\n" msgstr "" -#: src/stored/askdir.c:533 +#: src/lib/bnet_server.c:173 #, c-format -msgid "" -"Job %s is waiting. Cannot find any appendable volumes.\n" -"Please use the \"label\" command to create a new Volume for:\n" -" Storage: %s\n" -" Pool: %s\n" -" Media type: %s\n" +msgid "Error in select: %s\n" msgstr "" -#: src/stored/askdir.c:558 src/stored/askdir.c:658 +#: src/lib/bnet_server.c:196 #, c-format -msgid "Max time exceeded waiting to mount Storage Device %s for Job %s\n" +msgid "Connection from %s:%d refused by hosts.access\n" msgstr "" -#: src/stored/askdir.c:568 -msgid "pthread error in mount_next_volume.\n" +#: src/lib/bnet_server.c:224 +msgid "Could not create client BSOCK.\n" msgstr "" -#: src/stored/askdir.c:601 -msgid "Cannot request another volume: no volume name given.\n" +#: src/lib/bnet_server.c:231 +#, c-format +msgid "Could not add job to client queue: ERR=%s\n" msgstr "" -#: src/stored/askdir.c:607 +#: src/lib/bnet_server.c:248 #, c-format -msgid "Job %s canceled while waiting for mount on Storage Device %s.\n" +msgid "Could not destroy client queue: ERR=%s\n" msgstr "" -#: src/stored/askdir.c:624 +#: src/lib/runscript.c:224 #, c-format -msgid "" -"Please mount append Volume \"%s\" or label a new one for:\n" -" Job: %s\n" -" Storage: %s\n" -" Pool: %s\n" -" Media type: %s\n" +msgid "%s: run %s \"%s\"\n" msgstr "" -#: src/stored/askdir.c:630 +#: src/lib/runscript.c:233 #, c-format -msgid "" -"Please mount read Volume \"%s\" for:\n" -" Job: %s\n" -" Storage: %s\n" -" Pool: %s\n" -" Media type: %s\n" +msgid "Runscript: %s could not execute. ERR=%s\n" msgstr "" -#: src/stored/askdir.c:668 -msgid "pthread error in mount_volume\n" +#: src/lib/runscript.c:242 +#, c-format +msgid "%s: %s\n" msgstr "" -#: src/stored/record.c:75 +#: src/lib/runscript.c:247 #, c-format -msgid "unknown: %d" +msgid "Runscript: %s returned non-zero status=%d. ERR=%s\n" msgstr "" -#: src/stored/record.c:392 -msgid "Damaged buffer\n" +#: src/lib/runscript.c:285 src/dird/dird_conf.c:752 +msgid " --> RunScript\n" msgstr "" -#: src/stored/record.c:670 +#: src/lib/runscript.c:286 src/dird/dird_conf.c:753 #, c-format -msgid "Sanity check failed. maxlen=%d datalen=%d. Block discarded.\n" -msgstr "" - -#: src/stored/read.c:65 -msgid "No Volume names found for restore.\n" +msgid " --> Command=%s\n" msgstr "" -#: src/stored/read.c:120 +#: src/lib/runscript.c:287 src/dird/dird_conf.c:754 #, c-format -msgid ">filed: Error Hdr=%s\n" +msgid " --> Target=%s\n" msgstr "" -#: src/stored/read.c:121 src/stored/read.c:136 +#: src/lib/runscript.c:288 src/dird/dird_conf.c:755 #, c-format -msgid "Error sending to File daemon. ERR=%s\n" +msgid " --> RunOnSuccess=%u\n" msgstr "" -#: src/stored/read.c:135 +#: src/lib/runscript.c:289 src/dird/dird_conf.c:756 #, c-format -msgid "Error sending to FD. ERR=%s\n" +msgid " --> RunOnFailure=%u\n" msgstr "" -#: src/stored/autochanger.c:65 +#: src/lib/runscript.c:290 src/dird/dird_conf.c:757 #, c-format -msgid "No Changer Name given for device %s. Cannot continue.\n" +msgid " --> FailJobOnError=%u\n" msgstr "" -#: src/stored/autochanger.c:71 +#: src/lib/runscript.c:291 src/dird/dird_conf.c:758 #, c-format -msgid "No Changer Command given for device %s. Cannot continue.\n" +msgid " --> RunWhen=%u\n" msgstr "" -#: src/stored/autochanger.c:139 -#, c-format -msgid "No slot defined in catalog (slot=%d) for Volume \"%s\" on %s.\n" +#: src/lib/cram-md5.c:97 src/lib/cram-md5.c:125 +msgid "1999 Authorization failed.\n" msgstr "" -#: src/stored/autochanger.c:141 -msgid "Cartridge change or \"update slots\" may be required.\n" +#: src/lib/smartall.c:133 src/lib/smartall.c:244 src/lib/smartall.c:259 +msgid "Out of memory\n" msgstr "" -#: src/stored/autochanger.c:147 -#, c-format -msgid "No \"Changer Device\" for %s. Manual load of Volume may be required.\n" +#: src/lib/smartall.c:138 +msgid "Too much memory used." msgstr "" -#: src/stored/autochanger.c:154 +#: src/lib/smartall.c:168 #, c-format -msgid "No \"Changer Command\" for %s. Manual load of Volume may be requird.\n" +msgid "Attempt to free NULL called from %s:%d\n" msgstr "" -#: src/stored/autochanger.c:185 +#: src/lib/smartall.c:182 #, c-format -msgid "3304 Issuing autochanger \"load slot %d, drive %d\" command.\n" +msgid "double free from %s:%d\n" msgstr "" -#: src/stored/autochanger.c:193 +#: src/lib/smartall.c:190 #, c-format -msgid "3305 Autochanger \"load slot %d, drive %d\", status is OK.\n" +msgid "qp->qnext->qprev != qp called from %s:%d\n" msgstr "" -#: src/stored/autochanger.c:206 +#: src/lib/smartall.c:194 #, c-format -msgid "" -"3992 Bad autochanger \"load slot %d, drive %d\": ERR=%s.\n" -"Results=%s\n" +msgid "qp->qprev->qnext != qp called from %s:%d\n" msgstr "" -#: src/stored/autochanger.c:268 +#: src/lib/smartall.c:203 #, c-format -msgid "3301 Issuing autochanger \"loaded? drive %d\" command.\n" +msgid "Overrun buffer: len=%d addr=%p allocated: %s:%d called from %s:%d\n" msgstr "" -#: src/stored/autochanger.c:280 +#: src/lib/smartall.c:281 #, c-format -msgid "3302 Autochanger \"loaded? drive %d\", result is Slot %d.\n" +msgid "sm_realloc size: %d\n" msgstr "" -#: src/stored/autochanger.c:287 +#: src/lib/smartall.c:319 #, c-format -msgid "3302 Autochanger \"loaded? drive %d\", result: nothing loaded.\n" +msgid "sm_realloc %d at %p from %s:%d\n" msgstr "" -#: src/stored/autochanger.c:299 +#: src/lib/smartall.c:379 #, c-format msgid "" -"3991 Bad autochanger \"loaded? drive %d\" command: ERR=%s.\n" -"Results=%s\n" +"\n" +"Orphaned buffers exist. Dump terminated following\n" +" discovery of bad links in chain of orphaned buffers.\n" +" Buffer address with bad links: %p\n" msgstr "" -#: src/stored/autochanger.c:316 +#: src/lib/smartall.c:424 #, c-format -msgid "Lock failure on autochanger. ERR=%s\n" +msgid "Damaged buffer found. Called from %s:%d\n" msgstr "" -#: src/stored/autochanger.c:330 +#: src/lib/smartall.c:457 #, c-format -msgid "Unlock failure on autochanger. ERR=%s\n" +msgid "" +"\n" +"Damaged buffers found at %s:%d\n" msgstr "" -#: src/stored/autochanger.c:374 src/stored/autochanger.c:523 -#, c-format -msgid "3307 Issuing autochanger \"unload slot %d, drive %d\" command.\n" +#: src/lib/smartall.c:460 +msgid " discovery of bad prev link.\n" msgstr "" -#: src/stored/autochanger.c:387 -#, c-format -msgid "" -"3995 Bad autochanger \"unload slot %d, drive %d\": ERR=%s\n" -"Results=%s\n" +#: src/lib/smartall.c:463 +msgid " discovery of bad next link.\n" msgstr "" -#: src/stored/autochanger.c:473 -#, c-format -msgid "Volume \"%s\" wanted on %s is in use by device %s\n" +#: src/lib/smartall.c:466 +msgid " discovery of data overrun.\n" msgstr "" -#: src/stored/autochanger.c:541 -#, c-format -msgid "3997 Bad autochanger \"unload slot %d, drive %d\": ERR=%s.\n" +#: src/lib/smartall.c:469 +msgid " NULL pointer.\n" msgstr "" -#: src/stored/autochanger.c:585 +#: src/lib/smartall.c:475 #, c-format -msgid "3993 Device %s not an autochanger device.\n" +msgid " Buffer address: %p\n" msgstr "" -#: src/stored/autochanger.c:612 +#: src/lib/smartall.c:482 #, c-format -msgid "3306 Issuing autochanger \"%s\" command.\n" -msgstr "" - -#: src/stored/autochanger.c:615 -msgid "3996 Open bpipe failed.\n" +msgid "Damaged buffer: %6u bytes allocated at line %d of %s %s\n" msgstr "" -#: src/stored/autochanger.c:642 src/console/console.c:1458 +#: src/dird/job.c:50 #, c-format -msgid "Autochanger error: ERR=%s\n" +msgid "Could not init job queue: ERR=%s\n" msgstr "" -#: src/stored/stored.c:87 +#: src/dird/job.c:82 #, c-format -msgid "" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: bacula-sd [options] [-c config_file] [config_file]\n" -" -c use as configuration file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -f run in foreground (for debugging)\n" -" -g set groupid to group\n" -" -m print kaboom output (for debugging)\n" -" -p proceed despite I/O errors\n" -" -s no signals (for debugging)\n" -" -t test - read config and exit\n" -" -u userid to \n" -" -v verbose user messages\n" -" -? print this message.\n" -"\n" +msgid "Could not add job queue: ERR=%s\n" msgstr "" -#: src/stored/stored.c:136 src/stored/btape.c:178 +#: src/dird/job.c:121 src/dird/ua_output.c:714 src/dird/xua_output.c:869 +#: src/tools/cats_test.c:363 #, c-format -msgid "Tape block size (%d) not multiple of system size (%d)\n" +msgid "Could not open database \"%s\".\n" msgstr "" -#: src/stored/stored.c:140 src/stored/btape.c:182 -#, c-format -msgid "Tape block size (%d) is not a power of 2\n" +#: src/dird/job.c:135 src/dird/job.c:139 src/dird/job.c:145 +#: src/dird/ua_status.c:367 src/dird/ua_dotcmds.c:831 src/dird/ua_cmds.c:836 +#: src/dird/ua_cmds.c:1589 +msgid "unknown source" msgstr "" -#: src/stored/stored.c:268 -msgid "Volume Session Time is ZERO!\n" +#: src/dird/job.c:175 src/dird/job.c:397 src/dird/job.c:399 src/dird/job.c:599 +#: src/dird/job.c:601 src/dird/job.c:1303 src/dird/job.c:1345 +#: src/dird/job.c:1355 +msgid "Job resource" msgstr "" -#: src/stored/stored.c:277 -#, c-format -msgid "Unable to create thread. ERR=%s\n" +#: src/dird/job.c:177 src/dird/job.c:1038 src/dird/job.c:1300 +#: src/dird/job.c:1347 src/dird/job.c:1363 src/dird/vbackup.c:77 +#: src/dird/mac.c:208 src/dird/mac.c:209 src/dird/backup.c:91 +msgid "Pool resource" msgstr "" -#: src/stored/stored.c:310 src/stored/bscan.c:262 +#: src/dird/job.c:222 src/dird/job.c:339 #, c-format -msgid "No Storage resource defined in %s. Cannot continue.\n" +msgid "Unimplemented job type: %d\n" msgstr "" -#: src/stored/stored.c:316 -#, c-format -msgid "Only one Storage resource permitted in %s\n" +#: src/dird/job.c:263 +msgid "Job canceled because max start delay time exceeded.\n" msgstr "" -#: src/stored/stored.c:321 -#, c-format -msgid "No Director resource defined in %s. Cannot continue.\n" +#: src/dird/job.c:268 +msgid "Job canceled because max run sched time exceeded.\n" msgstr "" -#: src/stored/stored.c:326 -#, c-format -msgid "No Device resource defined in %s. Cannot continue.\n" +#: src/dird/job.c:378 +msgid "Failed to connect to File daemon.\n" msgstr "" -#: src/stored/stored.c:334 -#, c-format -msgid "No Messages resource defined in %s. Cannot continue.\n" -msgstr "" +#: src/dird/job.c:412 +#, fuzzy +msgid "Failed to select Storage daemon.\n" +msgstr "Kan de geselecteerde opslag niet vinden." -#: src/stored/stored.c:341 src/stored/bscan.c:270 -#, c-format -msgid "No Working Directory defined in %s. Cannot continue.\n" +#: src/dird/job.c:417 src/dird/ua_dotcmds.c:837 src/dird/ua_cmds.c:842 +#: src/dird/ua_cmds.c:1600 src/dird/msgchan.c:69 +msgid "Failed to connect to Storage daemon.\n" msgstr "" -#: src/stored/stored.c:363 -#, c-format -msgid "\"TLS Certificate\" file not defined for Storage \"%s\" in %s.\n" -msgstr "" +#: src/dird/job.c:512 +#, fuzzy +msgid "canceled" +msgstr "Backup geannuleerd" -#: src/stored/stored.c:369 +#: src/dird/job.c:526 #, c-format -msgid "\"TLS Key\" file not defined for Storage \"%s\" in %s.\n" +msgid "JobId %s, Job %s marked to be %s.\n" msgstr "" -#: src/stored/stored.c:375 -#, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Storage \"%s\" in %s. At least one CA certificate store is required when " -"using \"TLS Verify Peer\".\n" +#: src/dird/job.c:661 +msgid "Max wait time exceeded. Job canceled.\n" msgstr "" -#: src/stored/stored.c:568 -#, c-format -msgid "Could not initialize %s\n" +#: src/dird/job.c:666 +msgid "Max run time exceeded. Job canceled.\n" msgstr "" -#: src/stored/stored.c:582 -#, c-format -msgid "Could not open device %s\n" +#: src/dird/job.c:671 +msgid "Max run sched time exceeded. Job canceled.\n" msgstr "" -#: src/stored/stored.c:596 +#: src/dird/job.c:793 #, c-format -msgid "Could not mount device %s\n" +msgid "Pool \"%s\" not in database. ERR=%s" msgstr "" -#: src/stored/device.c:120 +#: src/dird/job.c:797 #, c-format -msgid "End of medium on Volume \"%s\" Bytes=%s Blocks=%s at %s.\n" +msgid "Created database record for Pool \"%s\".\n" msgstr "" -#: src/stored/device.c:139 +#: src/dird/job.c:879 src/dird/job.c:923 #, c-format -msgid "New volume \"%s\" mounted on device %s at %s.\n" +msgid "JobId %d already running. Duplicate job not allowed.\n" msgstr "" -#: src/stored/device.c:151 +#: src/dird/job.c:911 #, c-format -msgid "write_block_to_device Volume label failed. ERR=%s" +msgid "Cancelling duplicate JobId=%d.\n" msgstr "" -#: src/stored/device.c:186 -#, c-format -msgid "write_block_to_device overflow block failed. ERR=%s" +#: src/dird/job.c:946 src/dird/job.c:947 +msgid "Run NextPool override" msgstr "" -#: src/stored/device.c:191 -#, c-format -msgid "Catastrophic error. Cannot write overflow block to device %s. ERR=%s" +#: src/dird/job.c:948 +msgid "Storage from Run NextPool override" msgstr "" -#: src/stored/device.c:327 src/stored/dev.c:512 -#, c-format -msgid "Unable to open device %s: ERR=%s\n" -msgstr "" +#: src/dird/job.c:952 src/dird/job.c:953 src/dird/job.c:1357 +#, fuzzy +msgid "Job's NextPool resource" +msgstr "Selecteer Pool" -#: src/stored/device.c:329 -#, c-format -msgid "Unable to open archive %s: ERR=%s\n" -msgstr "" +#: src/dird/job.c:954 +#, fuzzy +msgid "Storage from Job's NextPool resource" +msgstr "Selecteer Pool" -#: src/stored/fd_cmds.c:166 -#, c-format -msgid "Command error with FD, hanging up. %s\n" +#: src/dird/job.c:962 src/dird/job.c:963 +msgid "Job Pool's NextPool resource" msgstr "" -#: src/stored/fd_cmds.c:169 -msgid "Command error with FD, hanging up.\n" +#: src/dird/job.c:964 +msgid "Storage from Pool's NextPool resource" msgstr "" -#: src/stored/fd_cmds.c:180 -#, c-format -msgid "FD command not found: %s\n" +#: src/dird/job.c:995 +msgid "Run Pool override" msgstr "" -#: src/stored/fd_cmds.c:206 -msgid "Append data error.\n" +#: src/dird/job.c:1006 +msgid "Run FullPool override" msgstr "" -#: src/stored/fd_cmds.c:211 -msgid "Attempt to append on non-open session.\n" +#: src/dird/job.c:1008 +msgid "Job FullPool override" msgstr "" -#: src/stored/fd_cmds.c:223 src/stored/fd_cmds.c:266 -msgid "Attempt to close non-open session.\n" +#: src/dird/job.c:1017 +msgid "Run IncPool override" msgstr "" -#: src/stored/fd_cmds.c:241 -msgid "Attempt to open already open session.\n" +#: src/dird/job.c:1019 +msgid "Job IncPool override" msgstr "" -#: src/stored/fd_cmds.c:295 -msgid "Attempt to read on non-open session.\n" +#: src/dird/job.c:1028 +msgid "Run DiffPool override" msgstr "" -#: src/stored/fd_cmds.c:313 src/stored/fd_cmds.c:322 -msgid "Attempt to open read on non-open session.\n" +#: src/dird/job.c:1030 +msgid "Job DiffPool override" msgstr "" -#: src/stored/mount.c:98 -#, c-format -msgid "Too many errors trying to mount device %s.\n" -msgstr "" - -#: src/stored/mount.c:106 -#, c-format -msgid "Job %d canceled.\n" +#: src/dird/job.c:1097 +msgid "FileSet MD5 digest not found.\n" msgstr "" -#: src/stored/mount.c:282 +#: src/dird/job.c:1102 #, c-format -msgid "Volume \"%s\" previously written, moving to end of data.\n" +msgid "Could not create FileSet \"%s\" record. ERR=%s\n" msgstr "" -#: src/stored/mount.c:288 +#: src/dird/job.c:1144 #, c-format -msgid "Unable to position to end of data on device %s: ERR=%s\n" +msgid "Error updating job record. %s" msgstr "" -#: src/stored/mount.c:411 src/stored/mount.c:737 -#, c-format -msgid "Volume \"%s\" not on device %s.\n" +#: src/dird/job.c:1290 +msgid "Run pool override" msgstr "" -#: src/stored/mount.c:444 -#, c-format -msgid "" -"Director wanted Volume \"%s\".\n" -" Current Volume \"%s\" not acceptable because:\n" -" %s" +#: src/dird/job.c:1295 +msgid "Run storage override" msgstr "" -#: src/stored/mount.c:603 -#, c-format -msgid "Ready to append to end of Volume \"%s\" part=%d size=%s\n" +#: src/dird/job.c:1366 +msgid "Client resource" msgstr "" -#: src/stored/mount.c:607 -#, c-format -msgid "" -"Bacula cannot write on DVD Volume \"%s\" because: The sizes do not match! " -"Volume=%s Catalog=%s\n" +#: src/dird/job.c:1422 src/dird/ua_run.c:392 +msgid "No storage specified.\n" msgstr "" -#: src/stored/mount.c:621 +#: src/dird/job.c:1583 #, c-format -msgid "Ready to append to end of Volume \"%s\" at file=%d.\n" +msgid "Could not start clone job: \"%s\".\n" msgstr "" -#: src/stored/mount.c:624 +#: src/dird/job.c:1586 #, c-format -msgid "" -"For Volume \"%s\":\n" -"The number of files mismatch! Volume=%u Catalog=%u\n" -"Correcting Catalog\n" -msgstr "" - -#: src/stored/mount.c:631 src/stored/mount.c:659 -msgid "Error updating Catalog\n" +msgid "Clone JobId %d started.\n" msgstr "" -#: src/stored/mount.c:636 -#, c-format -msgid "" -"Bacula cannot write on tape Volume \"%s\" because:\n" -"The number of files mismatch! Volume=%u Catalog=%u\n" +#: src/dird/vbackup.c:64 src/dird/mac.c:97 +msgid "Could not get or create a Pool record.\n" msgstr "" -#: src/stored/mount.c:647 +#: src/dird/vbackup.c:121 #, c-format -msgid "Ready to append to end of Volume \"%s\" size=%s\n" +msgid "Start Virtual Backup JobId %s, Job=%s\n" msgstr "" -#: src/stored/mount.c:651 -#, c-format +#: src/dird/vbackup.c:125 msgid "" -"For Volume \"%s\":\n" -"The sizes do not match! Volume=%s Catalog=%s\n" -"Correcting Catalog\n" +"This Job is not an Accurate backup so is not equivalent to a Full backup.\n" msgstr "" -#: src/stored/mount.c:664 +#: src/dird/vbackup.c:141 src/dird/ua_dotcmds.c:749 src/dird/ua_restore.c:778 +#: src/dird/ua_restore.c:821 #, c-format -msgid "" -"Bacula cannot write on disk Volume \"%s\" because: The sizes do not match! " -"Volume=%s Catalog=%s\n" +msgid "Unable to get Job record for JobId=%s: ERR=%s\n" msgstr "" -#: src/stored/mount.c:727 +#: src/dird/vbackup.c:145 src/dird/ua_restore.c:782 #, c-format -msgid "Labeled new Volume \"%s\" on device %s.\n" +msgid "Selecting jobs to build the Full state at %s\n" msgstr "" -#: src/stored/mount.c:732 -#, c-format -msgid "Device %s not configured to autolabel Volumes.\n" +#: src/dird/vbackup.c:171 +msgid "No valid Jobs found from user selection.\n" msgstr "" -#: src/stored/mount.c:751 +#: src/dird/vbackup.c:175 #, c-format -msgid "Marking Volume \"%s\" in Error in Catalog.\n" +msgid "Using user supplied JobIds=%s\n" msgstr "" -#: src/stored/mount.c:768 -#, c-format -msgid "" -"Autochanger Volume \"%s\" not found in slot %d.\n" -" Setting InChanger to zero in catalog.\n" +#: src/dird/vbackup.c:194 +msgid "No previous Full found in list, using Differential level\n" msgstr "" -#: src/stored/mount.c:787 -msgid "Hey!!!!! WroteVol non-zero !!!!!\n" +#: src/dird/vbackup.c:199 +msgid "No previous Full found in list, using Incremental level\n" msgstr "" -#: src/stored/mount.c:834 -#, c-format -msgid "" -"Invalid tape position on volume \"%s\" on device %s. Expected %d, got %d\n" +#: src/dird/vbackup.c:212 +msgid "No previous Jobs found.\n" msgstr "" -#: src/stored/mount.c:875 src/stored/btape.c:3122 +#: src/dird/vbackup.c:235 #, c-format -msgid "Cannot open Dev=%s, Vol=%s\n" +msgid "Error getting Job record for previous Job: ERR=%s" msgstr "" -#: src/stored/mac.c:81 -msgid "Read and write devices not properly initialized.\n" +#: src/dird/vbackup.c:241 src/dird/mac.c:112 +msgid "Could not get or create the FileSet record.\n" msgstr "" -#: src/stored/mac.c:87 +#: src/dird/vbackup.c:361 src/dird/admin.c:78 src/dird/mac.c:688 +#: src/dird/backup.c:749 #, c-format -msgid "No Volume names found for %s.\n" +msgid "Error getting Job record for Job report: ERR=%s" msgstr "" -#: src/stored/pythonsd.c:160 src/filed/pythonfd.c:142 +#: src/dird/vbackup.c:368 src/dird/backup.c:756 #, c-format -msgid "Cannot delete attribute %s" +msgid "Error getting Client record for Job report: ERR=%s" msgstr "" -#: src/stored/pythonsd.c:193 src/filed/pythonfd.c:160 src/filed/pythonfd.c:176 +#: src/dird/vbackup.c:374 src/dird/mac.c:718 src/dird/backup.c:762 #, c-format -msgid "Cannot find attribute %s" -msgstr "" - -#: src/stored/pythonsd.c:208 -msgid "Error in ParseTuple\n" -msgstr "" - -#: src/stored/pythonsd.c:224 -msgid "Parse tuple error in job_write\n" +msgid "Error getting Media record for Volume \"%s\": ERR=%s" msgstr "" -#: src/stored/pythonsd.c:261 +#: src/dird/vbackup.c:411 src/dird/restore.c:614 src/dird/admin.c:98 +#: src/dird/backup.c:802 #, c-format -msgid "Error in Python method %s\n" -msgstr "" - -#: src/stored/spool.c:83 -msgid "Spooling statistics:\n" +msgid "Inappropriate term code: %c\n" msgstr "" -#: src/stored/spool.c:86 +#: src/dird/vbackup.c:448 #, c-format msgid "" -"Data spooling: %u active jobs, %s bytes; %u total jobs, %s max bytes/job.\n" +"%s %s %s (%s):\n" +" Build OS: %s %s %s\n" +" JobId: %d\n" +" Job: %s\n" +" Backup Level: Virtual Full\n" +" Client: \"%s\" %s\n" +" FileSet: \"%s\" %s\n" +" Pool: \"%s\" (From %s)\n" +" Catalog: \"%s\" (From %s)\n" +" Storage: \"%s\" (From %s)\n" +" Scheduled time: %s\n" +" Start time: %s\n" +" End time: %s\n" +" Elapsed time: %s\n" +" Priority: %d\n" +" SD Files Written: %s\n" +" SD Bytes Written: %s (%sB)\n" +" Rate: %.1f KB/s\n" +" Volume name(s): %s\n" +" Volume Session Id: %d\n" +" Volume Session Time: %d\n" +" Last Volume Bytes: %s (%sB)\n" +" SD Errors: %d\n" +" SD termination status: %s\n" +" Termination: %s\n" +"\n" msgstr "" -#: src/stored/spool.c:94 -#, c-format -msgid "Attr spooling: %u active jobs, %s bytes; %u total jobs, %s max bytes.\n" +#: src/dird/ua_output.c:57 src/dird/ua_output.c:81 src/dird/xua_output.c:56 +#: src/dird/xua_output.c:80 +msgid "ON or OFF keyword missing.\n" msgstr "" -#: src/stored/spool.c:112 -msgid "Spooling data ...\n" +#: src/dird/ua_output.c:101 src/dird/xua_output.c:100 +msgid "Disabled Jobs:\n" msgstr "" -#: src/stored/spool.c:138 -#, c-format -msgid "Bad return from despool WroteVol=%d\n" +#: src/dird/ua_output.c:107 src/dird/xua_output.c:106 +msgid "No disabled Jobs.\n" msgstr "" -#: src/stored/spool.c:171 -#, c-format -msgid "Open data spool file %s failed: ERR=%s\n" +#: src/dird/ua_output.c:151 +msgid "disabled" msgstr "" -#: src/stored/spool.c:225 -msgid "Despooling zero bytes. Your disk is probably FULL!\n" +#: src/dird/ua_output.c:199 src/dird/xua_output.c:204 +msgid "Keywords for the show command are:\n" msgstr "" -#: src/stored/spool.c:234 +#: src/dird/ua_output.c:205 src/dird/xua_output.c:211 #, c-format -msgid "Committing spooled data to Volume \"%s\". Despooling %s bytes ...\n" +msgid "%s resource %s not found.\n" msgstr "" -#: src/stored/spool.c:239 +#: src/dird/ua_output.c:208 src/dird/xua_output.c:215 #, c-format -msgid "Writing spooled data to Volume. Despooling %s bytes ...\n" +msgid "Resource %s not found\n" msgstr "" -#: src/stored/spool.c:339 -#, c-format -msgid "" -"Despooling elapsed time = %02d:%02d:%02d, Transfer rate = %s Bytes/second\n" +#: src/dird/ua_output.c:278 src/dird/xua_output.c:356 +msgid "Hey! DB is NULL\n" msgstr "" -#: src/stored/spool.c:348 src/stored/spool.c:549 src/stored/spool.c:595 +#: src/dird/ua_output.c:435 src/dird/xua_output.c:590 #, c-format -msgid "Ftruncate spool file failed: ERR=%s\n" +msgid "Jobid %d used %d Volume(s): %s\n" msgstr "" -#: src/stored/spool.c:407 -#, c-format -msgid "Spool header read error. ERR=%s\n" +#: src/dird/ua_output.c:454 src/dird/xua_output.c:609 +msgid "No Pool specified.\n" msgstr "" -#: src/stored/spool.c:410 +#: src/dird/ua_output.c:465 src/dird/ua_select.c:531 src/dird/xua_output.c:620 +#: src/dird/ua_update.c:424 #, c-format -msgid "Spool read error. Wanted %u bytes, got %d\n" +msgid "Error obtaining pool ids. ERR=%s\n" msgstr "" -#: src/stored/spool.c:411 +#: src/dird/ua_output.c:475 src/dird/xua_output.c:630 #, c-format -msgid "Spool header read error. Wanted %u bytes, got %d\n" +msgid "Pool: %s\n" msgstr "" -#: src/stored/spool.c:418 src/stored/spool.c:419 -#, c-format -msgid "Spool block too big. Max %u bytes, got %u\n" +#: src/dird/ua_output.c:491 src/dird/xua_output.c:646 +msgid "Ignoring invalid value for days. Max is 50.\n" msgstr "" -#: src/stored/spool.c:425 src/stored/spool.c:426 +#: src/dird/ua_output.c:513 src/dird/xua_output.c:668 #, c-format -msgid "Spool data read error. Wanted %u bytes, got %d\n" +msgid "Unknown list keyword: %s\n" msgstr "" -#: src/stored/spool.c:480 +#: src/dird/ua_output.c:538 src/dird/xua_output.c:693 #, c-format -msgid "" -"User specified Job spool size reached: JobSpoolSize=%s MaxJobSpoolSize=%s\n" +msgid "%s is not a job name.\n" msgstr "" -#: src/stored/spool.c:485 +#: src/dird/ua_output.c:552 src/dird/xua_output.c:707 #, c-format -msgid "" -"User specified Device spool size reached: DevSpoolSize=%s MaxDevSpoolSize=" -"%s\n" -msgstr "" - -#: src/stored/spool.c:492 -msgid "Bad return from despool in write_block.\n" -msgstr "" - -#: src/stored/spool.c:500 -msgid "Spooling data again ...\n" +msgid "Could not find Pool for Job %s\n" msgstr "" -#: src/stored/spool.c:532 +#: src/dird/ua_output.c:565 src/dird/xua_output.c:720 #, c-format -msgid "Error writing header to spool file. ERR=%s\n" +msgid "Could not find next Volume for Job %s (Pool=%s, Level=%s).\n" msgstr "" -#: src/stored/spool.c:537 +#: src/dird/ua_output.c:569 src/dird/xua_output.c:724 #, c-format msgid "" -"Error writing header to spool file. Disk probably full. Attempting recovery. " -"Wanted to write=%d got=%d\n" -msgstr "" - -#: src/stored/spool.c:555 src/stored/spool.c:601 -msgid "Fatal despooling error." -msgstr "" - -#: src/stored/spool.c:563 -msgid "Retrying after header spooling error failed.\n" +"The next Volume to be used by Job \"%s\" (Pool=%s, Level=%s) will be %s\n" msgstr "" -#: src/stored/spool.c:579 +#: src/dird/ua_output.c:582 src/dird/xua_output.c:737 #, c-format -msgid "Error writing data to spool file. ERR=%s\n" -msgstr "" - -#: src/stored/spool.c:612 -msgid "Retrying after data spooling error failed.\n" -msgstr "" - -#: src/stored/spool.c:682 -msgid "Network error on BlastAttributes.\n" +msgid "Could not find next Volume for Job %s.\n" msgstr "" -#: src/stored/spool.c:706 src/stored/spool.c:730 +#: src/dird/ua_output.c:727 src/dird/xua_output.c:882 #, c-format -msgid "Fseek on attributes file failed: ERR=%s\n" +msgid "Pool %s not in database. %s" msgstr "" -#: src/stored/spool.c:718 +#: src/dird/ua_output.c:735 src/dird/xua_output.c:890 #, c-format -msgid "Truncate on attributes file failed: ERR=%s\n" +msgid "Pool %s created in database.\n" msgstr "" -#: src/stored/spool.c:742 -#, c-format -msgid "Sending spooled attrs to the Director. Despooling %s bytes ...\n" +#: src/dird/ua_output.c:788 src/dird/xua_output.c:943 +msgid "You have no messages.\n" msgstr "" -#: src/stored/spool.c:768 -#, c-format -msgid "fopen attr spool file %s failed: ERR=%s\n" +#: src/dird/ua_output.c:868 src/dird/xua_output.c:1023 +msgid "Message too long to display.\n" msgstr "" -#: src/stored/lock.c:405 +#: src/dird/jobq.c:62 #, c-format -msgid "pthread_cond_wait failure. ERR=%s\n" -msgstr "" - -#: src/stored/lock.c:504 -msgid "unknown blocked code" +msgid "pthread_attr_init: ERR=%s\n" msgstr "" -#: src/stored/stored_conf.c:241 +#: src/dird/jobq.c:71 #, c-format -msgid "Expected a Device Type keyword, got: %s" +msgid "pthread_mutex_init: ERR=%s\n" msgstr "" -#: src/stored/stored_conf.c:255 +#: src/dird/jobq.c:77 #, c-format -msgid "" -"Maximum Block Size configured value %u is greater than allowed maximum: %u" +msgid "pthread_cond_init: ERR=%s\n" msgstr "" -#: src/stored/stored_conf.c:269 +#: src/dird/jobq.c:119 #, c-format -msgid "Warning: no \"%s\" resource (%d) defined.\n" +msgid "pthread_cond_broadcast: ERR=%s\n" msgstr "" -#: src/stored/stored_conf.c:272 +#: src/dird/jobq.c:127 #, c-format -msgid "dump_resource type=%d\n" +msgid "pthread_cond_wait: ERR=%s\n" msgstr "" -#: src/stored/stored_conf.c:388 +#: src/dird/jobq.c:168 #, c-format -msgid "Warning: unknown resource type %d\n" -msgstr "" +msgid "Job %s waiting %d seconds for scheduled start time.\n" +msgstr "Job %s wacht %d seconde voor de start tijd.\n" -#: src/stored/stored_conf.c:555 src/stored/stored_conf.c:645 -#: src/stored/stored_conf.c:680 src/wx-console/console_conf.c:164 -#: src/wx-console/console_conf.c:239 src/wx-console/console_conf.c:284 -#: src/wx-console/console_conf.c:311 src/console/console_conf.c:157 -#: src/console/console_conf.c:233 src/console/console_conf.c:278 -#: src/console/console_conf.c:305 src/filed/filed_conf.c:333 -#: src/filed/filed_conf.c:398 src/filed/filed_conf.c:428 -#: src/qt-console/bat_conf.cpp:161 src/qt-console/bat_conf.cpp:239 -#: src/qt-console/bat_conf.cpp:287 src/qt-console/bat_conf.cpp:317 +#: src/dird/jobq.c:230 #, c-format -msgid "Unknown resource type %d\n" +msgid "pthread_thread_create: ERR=%s\n" msgstr "" -#: src/stored/stored_conf.c:584 +#: src/dird/jobq.c:340 #, c-format -msgid "\"%s\" item is required in \"%s\" resource, but not found.\n" +msgid "pthread_cond_signal: ERR=%s\n" msgstr "" -#: src/stored/stored_conf.c:590 +#: src/dird/jobq.c:351 #, c-format -msgid "Too many items in \"%s\" resource\n" +msgid "pthread_create: ERR=%s\n" msgstr "" -#: src/stored/stored_conf.c:624 +#: src/dird/jobq.c:635 #, c-format -msgid "Cannot find AutoChanger resource %s\n" -msgstr "" +msgid "Rescheduled Job %s at %s to re-run in %d seconds (%s).\n" +msgstr "Opnieuw ingeplande Job %s in %s start opnieuw in %d seconden (%s).\n" -#: src/stored/stored_conf.c:640 -#, c-format -msgid "Unable to init lock: ERR=%s\n" -msgstr "" +#: src/dird/jobq.c:694 src/dird/jobq.c:699 +msgid "previous Job" +msgstr "vorige Job" -#: src/stored/stored_conf.c:698 +#: src/dird/jobq.c:736 #, c-format msgid "" -"Attempt to define second \"%s\" resource named \"%s\" is not permitted.\n" -msgstr "" - -#: src/stored/dev.c:127 -#, c-format -msgid "Unable to stat device %s: ERR=%s\n" +"Job canceled. Attempt to read and write same device.\n" +" Read storage \"%s\" (From %s) -- Write storage \"%s\" (From %s)\n" msgstr "" +"Job geannuleerd. Er wordt van hetzelfde device gelezen en naar geschreven.\n" +" Lezen van opslag \"%s\" (Van %s) -- Schrijven naar opslag \"%s\" (Van " +"%s)\n" -#: src/stored/dev.c:145 +#: src/dird/ua_select.c:42 #, c-format -msgid "" -"%s is an unknown device type. Must be tape or directory\n" -" or have RequiresMount=yes for DVD. st_mode=%x\n" -msgstr "" +msgid "The current %s retention period is: %s\n" +msgstr "De huidige %s retention periode: %s\n" -#: src/stored/dev.c:155 -msgid "DVD support is now deprecated\n" -msgstr "" +#: src/dird/ua_select.c:47 +msgid "Continue? (yes/mod/no): " +msgstr "Doorgaan? (ja, wijz, nee):" -#: src/stored/dev.c:231 -#, c-format -msgid "Unable to stat mount point %s: ERR=%s\n" +#: src/dird/ua_select.c:50 src/dird/ua_run.c:614 +msgid "mod" msgstr "" -#: src/stored/dev.c:236 -msgid "" -"Mount and unmount commands must defined for a device which requires mount.\n" -msgstr "" +#: src/dird/ua_select.c:51 +msgid "Enter new retention period: " +msgstr "Geef nieuwe retention periode:" -#: src/stored/dev.c:247 -#, c-format -msgid "Min block size > max on device %s\n" -msgstr "" +#: src/dird/ua_select.c:55 +msgid "Invalid period.\n" +msgstr "Onjuiste periode.\n" -#: src/stored/dev.c:251 -#, c-format -msgid "Block size %u on device %s is too large, using default %u\n" -msgstr "" +#: src/dird/ua_select.c:131 src/dird/ua_run.c:555 +msgid "You have the following choices:\n" +msgstr "U heeft de volgende keuzes:\n" -#: src/stored/dev.c:256 -#, c-format -msgid "Max block size %u not multiple of device %s block size=%d.\n" +#: src/dird/ua_select.c:154 +msgid "The defined Storage resources are:\n" +msgstr "De gedefinieerde Opslag media zijn:\n" + +#: src/dird/ua_select.c:166 src/dird/ua_dotcmds.c:944 src/dird/ua_run.c:619 +#: src/dird/ua_cmds.c:1093 +msgid "Storage" +msgstr "Opslag" + +#: src/dird/ua_select.c:166 +msgid "Select Storage resource" +msgstr "Selecteer opslag medium" + +#: src/dird/ua_select.c:181 src/dird/ua_restore.c:1296 +msgid "The defined FileSet resources are:\n" +msgstr "De gedefinieerde Fileset media zijn:\n" + +#: src/dird/ua_select.c:189 src/dird/ua_restore.c:1300 src/dird/ua_run.c:621 +msgid "FileSet" msgstr "" -#: src/stored/dev.c:260 -#, c-format -msgid "Max Vol Size < 8 * Max Block Size for device %s\n" +#: src/dird/ua_select.c:189 src/dird/ua_restore.c:1300 +msgid "Select FileSet resource" +msgstr "Selecteer FileSet bron" + +#: src/dird/ua_select.c:219 src/dird/ua_cmds.c:2062 +msgid "Could not find a Catalog resource\n" +msgstr "Kan Catalog medium niet vinden\n" + +#: src/dird/ua_select.c:222 +msgid "You must specify a \"use \" command before continuing.\n" msgstr "" +"U diente een \"use \" te specificeren alvorens te kunnen " +"doorgaan.\n" -#: src/stored/dev.c:276 src/stored/dev.c:282 -#, c-format -msgid "Unable to init cond variable: ERR=%s\n" +#: src/dird/ua_select.c:228 +msgid "The defined Catalog resources are:\n" +msgstr "De gedefinieerde Catalog media zijn:\n" + +#: src/dird/ua_select.c:236 +msgid "Catalog" msgstr "" -#: src/stored/dev.c:288 -#, fuzzy, c-format -msgid "Unable to init spool mutex: ERR=%s\n" -msgstr "Kan job cond variabele niet initialiseren: ERR=%s\n" +#: src/dird/ua_select.c:236 +msgid "Select Catalog resource" +msgstr "Selecteer Catalog media" -#: src/stored/dev.c:294 -#, fuzzy, c-format -msgid "Unable to init acquire mutex: ERR=%s\n" -msgstr "Kan job cond variabele niet initialiseren: ERR=%s\n" +#: src/dird/ua_select.c:254 src/dird/ua_select.c:280 +msgid "The defined Job resources are:\n" +msgstr "De gedefinieerde job resources zijn:\n" -#: src/stored/dev.c:300 -#, fuzzy, c-format -msgid "Unable to init read acquire mutex: ERR=%s\n" -msgstr "Kan job cond variabele niet initialiseren: ERR=%s\n" +#: src/dird/ua_select.c:265 src/dird/ua_select.c:288 src/dird/ua_select.c:329 +#: src/dird/ua_select.c:1341 src/dird/ua_run.c:620 src/dird/dird_conf.c:675 +#: src/dird/ua_prune.c:598 +msgid "Job" +msgstr "Job" -#: src/stored/dev.c:416 -msgid "Illegal mode given to open dev.\n" -msgstr "" +#: src/dird/ua_select.c:265 src/dird/ua_select.c:288 +msgid "Select Job resource" +msgstr "Selecteer Job media:" -#: src/stored/dev.c:551 +#: src/dird/ua_select.c:307 #, c-format -msgid "Could not open file device %s. No Volume name given.\n" +msgid "Error: Restore Job resource \"%s\" does not exist.\n" msgstr "" -#: src/stored/dev.c:574 -#, c-format -msgid "Could not open: %s, ERR=%s\n" +#: src/dird/ua_select.c:321 +msgid "The defined Restore Job resources are:\n" msgstr "" -#: src/stored/dev.c:639 -#, c-format -msgid "No tape loaded or drive offline on %s.\n" -msgstr "" +#: src/dird/ua_select.c:329 +msgid "Select Restore Job" +msgstr "Selecteer Job om terug te zetten" -#: src/stored/dev.c:649 -#, c-format -msgid "Rewind error on %s. ERR=%s.\n" -msgstr "" +#: src/dird/ua_select.c:346 +msgid "The defined Client resources are:\n" +msgstr "De gedefinieerde Clients zijn:\n" + +#: src/dird/ua_select.c:354 src/dird/ua_select.c:463 src/dird/ua_dotcmds.c:945 +#: src/dird/ua_run.c:625 src/dird/ua_cmds.c:1094 +msgid "Client" +msgstr "Client" + +#: src/dird/ua_select.c:354 +msgid "Select Client (File daemon) resource" +msgstr "Selecteer een Client (File daemon)" -#: src/stored/dev.c:659 src/stored/dev.c:737 src/stored/dev.c:878 -#: src/stored/dev.c:1469 +#: src/dird/ua_select.c:381 #, c-format -msgid "lseek error on %s. ERR=%s.\n" -msgstr "" +msgid "Error: Client resource %s does not exist.\n" +msgstr "Fout: Client %s bestaat niet.\n" -#: src/stored/dev.c:708 +#: src/dird/ua_select.c:406 #, c-format -msgid "Bad call to eod. Device %s not open\n" -msgstr "" +msgid "Could not find Client %s: ERR=%s" +msgstr "Kan Client niet vinden %s: ERR=%s" -#: src/stored/dev.c:775 +#: src/dird/ua_select.c:416 src/dird/ua_select.c:470 #, c-format -msgid "ioctl MTEOM error on %s. ERR=%s.\n" -msgstr "" +msgid "Could not find Client \"%s\": ERR=%s" +msgstr "Kan Client niet vinden \"%s\": ERR=%s" -#: src/stored/dev.c:785 src/stored/dev.c:919 +#: src/dird/ua_select.c:445 #, c-format -msgid "ioctl MTIOCGET error on %s. ERR=%s.\n" +msgid "Error obtaining client ids. ERR=%s\n" msgstr "" -#: src/stored/dev.c:865 -msgid "Bad device call. Device not open\n" +#: src/dird/ua_select.c:449 +msgid "No clients defined. You must run a job before using this command.\n" msgstr "" -#: src/stored/dev.c:877 +#: src/dird/ua_select.c:453 +msgid "Defined Clients:\n" +msgstr "Gedefinieerde Clients:\n" + +#: src/dird/ua_select.c:463 +msgid "Select the Client" +msgstr "Selecteer Client" + +#: src/dird/ua_select.c:496 src/dird/ua_select.c:520 src/dird/ua_select.c:565 #, c-format -msgid "Seek error: ERR=%s\n" +msgid "Could not find Pool \"%s\": ERR=%s" msgstr "" -#: src/stored/dev.c:914 -msgid " Bacula status:" +#: src/dird/ua_select.c:535 +msgid "No pools defined. Use the \"create\" command to create one.\n" msgstr "" -#: src/stored/dev.c:915 src/stored/dev.c:998 src/stored/dev.c:1000 +#: src/dird/ua_select.c:539 +msgid "Defined Pools:\n" +msgstr "Gedefinieerde Pools:\n" + +#: src/dird/ua_select.c:541 src/dird/ua_select.c:561 src/dird/ua_update.c:353 +#: src/baconfig.h:76 +msgid "*None*" +msgstr "*Geen*" + +#: src/dird/ua_select.c:552 src/dird/ua_select.c:665 src/dird/ua_run.c:633 +#: src/dird/ua_update.c:604 +msgid "Pool" +msgstr "Pool" + +#: src/dird/ua_select.c:552 +msgid "Select the Pool" +msgstr "Selecteer Pool" + +#: src/dird/ua_select.c:590 #, c-format -msgid " file=%d block=%d\n" -msgstr "" +msgid "No access to Pool \"%s\"\n" +msgstr "Geen toegang tot Pool \"%s\"\n" -#: src/stored/dev.c:923 -msgid " Device status:" -msgstr "" +#: src/dird/ua_select.c:622 +msgid "Enter *MediaId or Volume name: " +msgstr "Voer *MediaId of Volume naam in:" -#: src/stored/dev.c:1022 -msgid "Bad call to load_dev. Device not open\n" +#: src/dird/ua_select.c:657 +msgid "The defined Pool resources are:\n" msgstr "" -#: src/stored/dev.c:1033 src/stored/dev.c:1046 +#: src/dird/ua_select.c:665 +msgid "Select Pool resource" +msgstr "Selecteer Pool" + +#: src/dird/ua_select.c:689 src/dird/ua_restore.c:553 #, c-format -msgid "ioctl MTLOAD error on %s. ERR=%s.\n" +msgid "Error: Pool resource \"%s\" does not exist.\n" msgstr "" -#: src/stored/dev.c:1077 +#: src/dird/ua_select.c:700 +msgid "Enter the JobId to select: " +msgstr "Voer de gekozen Job in:" + +#: src/dird/ua_select.c:738 #, c-format -msgid "ioctl MTOFFL error on %s. ERR=%s.\n" -msgstr "" +msgid "Could not find Job \"%s\": ERR=%s" +msgstr "Kan Job niet vinden \"%s\": ERR=%s" -#: src/stored/dev.c:1118 -msgid "Bad call to fsf. Device not open\n" +#: src/dird/ua_select.c:829 src/dird/ua_select.c:925 +#, c-format +msgid "Automatically selected %s: %s\n" msgstr "" -#: src/stored/dev.c:1129 src/stored/dev.c:1256 +#: src/dird/ua_select.c:840 src/dird/ua_select.c:936 #, c-format -msgid "Device %s at End of Tape.\n" +msgid "" +"Your request has multiple choices for \"%s\". Selection is not possible in " +"batch mode.\n" msgstr "" -#: src/stored/dev.c:1160 src/stored/dev.c:1236 +#: src/dird/ua_select.c:858 src/dird/ua_select.c:918 #, c-format -msgid "ioctl MTFSF error on %s. ERR=%s.\n" +msgid "Selection list for \"%s\" is empty!\n" msgstr "" -#: src/stored/dev.c:1207 src/stored/btape.c:1977 +#: src/dird/ua_select.c:864 #, c-format -msgid "read error on %s. ERR=%s.\n" +msgid "Automatically selected: %s\n" msgstr "" -#: src/stored/dev.c:1285 -msgid "Bad call to bsf. Device not open\n" +#: src/dird/ua_select.c:876 +msgid "Selection aborted, nothing done.\n" msgstr "" -#: src/stored/dev.c:1291 +#: src/dird/ua_select.c:881 src/dird/ua_select.c:969 #, c-format -msgid "Device %s cannot BSF because it is not a tape.\n" -msgstr "" +msgid "Please enter a number between 1 and %d\n" +msgstr "Voer een nummer in tussen 1 en %d\n" -#: src/stored/dev.c:1308 -#, c-format -msgid "ioctl MTBSF error on %s. ERR=%s.\n" +#: src/dird/ua_select.c:1020 +msgid "Storage name given twice.\n" msgstr "" -#: src/stored/dev.c:1327 -msgid "Bad call to fsr. Device not open\n" +#: src/dird/ua_select.c:1037 +#, c-format +msgid "Expecting jobid=nn command, got: %s\n" msgstr "" -#: src/stored/dev.c:1337 +#: src/dird/ua_select.c:1041 #, c-format -msgid "ioctl MTFSR not permitted on %s.\n" -msgstr "" +msgid "JobId %s is not running.\n" +msgstr "JobID %s is niet in uitvoering.\n" -#: src/stored/dev.c:1365 +#: src/dird/ua_select.c:1051 #, c-format -msgid "ioctl MTFSR %d error on %s. ERR=%s.\n" +msgid "Expecting job=xxx, got: %s.\n" msgstr "" -#: src/stored/dev.c:1383 -msgid "Bad call to bsr_dev. Device not open\n" -msgstr "" +#: src/dird/ua_select.c:1055 +#, c-format +msgid "Job \"%s\" is not running.\n" +msgstr "Job \"%s\" is niet in uitvoering.\n" -#: src/stored/dev.c:1393 +#: src/dird/ua_select.c:1063 #, c-format -msgid "ioctl MTBSR not permitted on %s.\n" +msgid "Expecting ujobid=xxx, got: %s.\n" msgstr "" -#: src/stored/dev.c:1407 +#: src/dird/ua_select.c:1084 #, c-format -msgid "ioctl MTBSR error on %s. ERR=%s.\n" +msgid "Storage resource \"%s\": not found\n" msgstr "" -#: src/stored/dev.c:1458 -msgid "Bad call to reposition. Device not open\n" -msgstr "" +#: src/dird/ua_select.c:1116 +msgid "Enter autochanger drive[0]: " +msgstr "Voer autochanger drive[0] in: " -#: src/stored/dev.c:1537 -msgid "Bad call to weof_dev. Device not open\n" -msgstr "" +#: src/dird/ua_select.c:1137 +msgid "Enter autochanger slot: " +msgstr "Voer autochanger slot in:" -#: src/stored/dev.c:1547 -msgid "Attempt to WEOF on non-appendable Volume\n" +#: src/dird/ua_select.c:1167 +msgid "Media Types defined in conf file:\n" msgstr "" -#: src/stored/dev.c:1565 +#: src/dird/ua_select.c:1173 +msgid "Media Type" +msgstr "Type media" + +#: src/dird/ua_select.c:1173 +msgid "Select the Media Type" +msgstr "Selecteer media type" + +#: src/dird/ua_select.c:1213 +msgid "None of your jobs are running.\n" +msgstr "Geen van uw opdrachten zijn in uitvoering.\n" + +#: src/dird/ua_select.c:1251 #, c-format -msgid "ioctl MTWEOF error on %s. ERR=%s.\n" +msgid "Unauthorized command from this console for JobId=%d.\n" msgstr "" -#: src/stored/dev.c:1664 +#: src/dird/ua_select.c:1257 #, c-format -msgid "unknown func code %d" +msgid "Warning Job JobId=%d is not running. Continuing anyway...\n" msgstr "" -#: src/stored/dev.c:1670 +#: src/dird/ua_select.c:1280 src/dird/ua_select.c:1350 +#, fuzzy, c-format +msgid "Confirm %s of %d Job%s (yes/no): " +msgstr "Bevestig annulering (yes/no)" + +#: src/dird/ua_select.c:1293 src/dird/ua_select.c:1307 #, c-format -msgid "I/O function \"%s\" not supported on this device.\n" +msgid "Warning Job %s is not running. Continuing anyway ...\n" msgstr "" -#: src/stored/dev.c:1844 +#: src/dird/ua_select.c:1329 +#, fuzzy +msgid "Select Job(s):\n" +msgstr "Selecteer Job:\n" + +#: src/dird/ua_select.c:1335 #, c-format -msgid "Unable to truncate device %s. ERR=%s\n" +msgid "JobId=%s Job=%s" msgstr "" -#: src/stored/dev.c:1861 +#: src/dird/ua_select.c:1339 +#, fuzzy, c-format +msgid "Choose Job list to %s" +msgstr "Voer de gekozen Job in:" + +#: src/dird/ua_select.c:1359 src/dird/ua_select.c:1366 src/dird/ua_cmds.c:804 +#: src/dird/ua_cmds.c:1199 #, c-format -msgid "Unable to stat device %s. ERR=%s\n" -msgstr "" +msgid "Job \"%s\" not found.\n" +msgstr "Job \"%s\" niet gevonden.\n" -#: src/stored/dev.c:1875 +#: src/dird/run_conf.c:205 #, c-format -msgid "Device %s doesn't support ftruncate(). Recreating file %s.\n" +msgid "Expected an equals, got: %s" msgstr "" -#: src/stored/dev.c:1887 +#: src/dird/run_conf.c:218 src/dird/run_conf.c:230 src/dird/run_conf.c:330 #, c-format -msgid "Could not reopen: %s, ERR=%s\n" +msgid "Expect a YES or NO, got: %s" msgstr "" -#: src/stored/dev.c:2010 src/stored/dev.c:2081 +#: src/dird/run_conf.c:245 #, c-format -msgid "Device %s cannot be %smounted. ERR=%s\n" +msgid "Job level field: %s not found in run record" msgstr "" -#: src/stored/dev.c:2481 +#: src/dird/run_conf.c:265 #, c-format -msgid "Unable to set eotmodel on device %s: ERR=%s\n" +msgid "Could not find specified Pool Resource: %s" msgstr "" -#: src/stored/bscan.c:118 +#: src/dird/run_conf.c:293 #, c-format -msgid "" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: bscan [ options ] \n" -" -b bootstrap specify a bootstrap file\n" -" -c specify configuration file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -m update media info in database\n" -" -D specify the driver database name (default NULL)\n" -" -n specify the database name (default bacula)\n" -" -u specify database user name (default bacula)\n" -" -P specify database password (default none)\n" -" -h specify database host (default NULL)\n" -" -t specify database port (default 0)\n" -" -p proceed inspite of I/O errors\n" -" -r list records\n" -" -s synchronize or store in database\n" -" -S show scan progress periodically\n" -" -v verbose\n" -" -V specify Volume names (separated by |)\n" -" -w specify working directory (default from conf file)\n" -" -? print this message\n" -"\n" +msgid "Could not find specified Storage Resource: %s" msgstr "" -#: src/stored/bscan.c:278 +#: src/dird/run_conf.c:305 #, c-format -msgid "Working Directory: %s not found. Cannot continue.\n" +msgid "Could not find specified Messages Resource: %s" msgstr "" -#: src/stored/bscan.c:282 +#: src/dird/run_conf.c:334 #, c-format -msgid "Working Directory: %s is not a directory. Cannot continue.\n" +msgid "Expected a keyword name, got: %s" msgstr "" -#: src/stored/bscan.c:296 src/stored/bscan.c:372 -#, c-format -msgid "First Volume Size = %s\n" +#: src/dird/run_conf.c:373 +msgid "Day number out of range (1-31)" msgstr "" -#: src/stored/bscan.c:302 src/tools/bvfs_test.c:215 src/tools/bbatch.c:201 -#: src/tools/bbatch.c:250 src/tools/ing_test.c:191 -msgid "Could not init Bacula database\n" +#: src/dird/run_conf.c:390 src/dird/run_conf.c:552 +msgid "Week number out of range (0-53)" msgstr "" -#: src/stored/bscan.c:309 src/tools/bvfs_test.c:224 src/tools/bbatch.c:257 -#: src/tools/ing_test.c:200 +#: src/dird/run_conf.c:406 #, c-format -msgid "Using Database: %s, User: %s\n" +msgid "Job type field: %s in run record not found" msgstr "" -#: src/stored/bscan.c:343 +#: src/dird/run_conf.c:413 #, c-format -msgid "Create JobMedia for Job %s\n" +msgid "Unexpected token: %d:%s" msgstr "" -#: src/stored/bscan.c:353 -#, c-format -msgid "Could not create JobMedia record for Volume=%s Job=%s\n" +#: src/dird/run_conf.c:457 +msgid "Time must be preceded by keyword AT." msgstr "" -#: src/stored/bscan.c:420 -#, c-format -msgid "done: %d%%\n" +#: src/dird/run_conf.c:466 +msgid "Time logic error.\n" msgstr "" -#: src/stored/bscan.c:444 -msgid "Volume is prelabeled. This tape cannot be scanned.\n" +#: src/dird/run_conf.c:481 src/dird/run_conf.c:500 +msgid "Bad time specification." msgstr "" -#: src/stored/bscan.c:456 -#, c-format -msgid "Pool record for %s found in DB.\n" +#: src/dird/run_conf.c:521 +msgid "Range logic error.\n" msgstr "" -#: src/stored/bscan.c:460 -#, c-format -msgid "VOL_LABEL: Pool record not found for Pool: %s\n" +#: src/dird/run_conf.c:530 +msgid "Bad day range specification." msgstr "" -#: src/stored/bscan.c:466 -#, c-format -msgid "VOL_LABEL: PoolType mismatch. DB=%s Vol=%s\n" +#: src/dird/run_conf.c:577 +msgid "Invalid month, week or position day range" msgstr "" -#: src/stored/bscan.c:470 -#, c-format -msgid "Pool type \"%s\" is OK.\n" +#: src/dird/run_conf.c:592 +msgid "Invalid month, weekday or position range" msgstr "" -#: src/stored/bscan.c:480 -#, c-format -msgid "Media record for %s found in DB.\n" +#: src/dird/run_conf.c:651 +msgid "Unexpected run state\n" msgstr "" -#: src/stored/bscan.c:487 +#: src/dird/restore.c:132 src/dird/msgchan.c:508 #, c-format -msgid "VOL_LABEL: Media record not found for Volume: %s\n" +msgid "Could not open bootstrap file %s: ERR=%s\n" msgstr "" -#: src/stored/bscan.c:494 +#: src/dird/restore.c:180 src/dird/restore.c:271 #, c-format -msgid "VOL_LABEL: MediaType mismatch. DB=%s Vol=%s\n" +msgid "Could not get storage resource '%s'.\n" msgstr "" -#: src/stored/bscan.c:498 +#: src/dird/restore.c:307 #, c-format -msgid "Media type \"%s\" is OK.\n" +msgid "Could not acquire read storage lock for \"%s\"" msgstr "" -#: src/stored/bscan.c:508 -#, c-format -msgid "VOL_LABEL: OK for Volume: %s\n" +#: src/dird/restore.c:407 src/dird/verify.c:275 src/dird/backup.c:512 +msgid "The File daemon does not support SDCallsClient.\n" msgstr "" -#: src/stored/bscan.c:515 -#, c-format -msgid "%d \"errors\" ignored before first Start of Session record.\n" +#: src/dird/restore.c:525 +msgid "" +"Cannot restore without a bootstrap file.\n" +"You probably ran a restore job directly. All restore jobs must\n" +"be run using the restore command.\n" msgstr "" -#: src/stored/bscan.c:526 +#: src/dird/restore.c:533 #, c-format -msgid "SOS_LABEL: Found Job record for JobId: %d\n" +msgid "Start Restore Job %s\n" msgstr "" -#: src/stored/bscan.c:531 -#, c-format -msgid "SOS_LABEL: Job record not found for JobId: %d\n" +#: src/dird/restore.c:584 +msgid "Restore OK -- warning file count mismatch" msgstr "" -#: src/stored/bscan.c:571 -#, c-format -msgid "SOS_LABEL: VolSessId mismatch for JobId=%u. DB=%d Vol=%d\n" +#: src/dird/restore.c:586 +msgid "Restore OK" msgstr "" -#: src/stored/bscan.c:577 -#, c-format -msgid "SOS_LABEL: VolSessTime mismatch for JobId=%u. DB=%d Vol=%d\n" +#: src/dird/restore.c:590 +msgid "Restore OK -- with warnings" msgstr "" -#: src/stored/bscan.c:583 -#, c-format -msgid "SOS_LABEL: PoolId mismatch for JobId=%u. DB=%d Vol=%d\n" +#: src/dird/restore.c:594 +msgid "*** Restore Error ***" msgstr "" -#: src/stored/bscan.c:601 src/stored/bscan.c:1161 -#, c-format -msgid "Could not find SessId=%d SessTime=%d for EOS record.\n" +#: src/dird/restore.c:604 +msgid "Restore Canceled" msgstr "" -#: src/stored/bscan.c:647 +#: src/dird/restore.c:631 #, c-format -msgid "Could not update job record. ERR=%s\n" +msgid "" +"%s %s %s (%s):\n" +" Build OS: %s %s %s\n" +" JobId: %d\n" +" Job: %s\n" +" Restore Client: %s\n" +" Start time: %s\n" +" End time: %s\n" +" Files Expected: %s\n" +" Files Restored: %s\n" +" Bytes Restored: %s\n" +" Rate: %.1f KB/s\n" +" FD Errors: %d\n" +" FD termination status: %s\n" +" SD termination status: %s\n" +" Termination: %s\n" +"\n" msgstr "" -#: src/stored/bscan.c:658 +#: src/dird/admin.c:53 #, c-format -msgid "End of all Volumes. VolFiles=%u VolBlocks=%u VolBytes=%s\n" +msgid "Start Admin JobId %d, Job=%s\n" msgstr "" -#: src/stored/bscan.c:670 -#, c-format -msgid "Could not find Job for SessId=%d SessTime=%d record.\n" +#: src/dird/admin.c:86 +msgid "Admin OK" msgstr "" -#: src/stored/bscan.c:701 -#, c-format -msgid "%s file records. At file:blk=%s:%s bytes=%s\n" +#: src/dird/admin.c:90 +msgid "*** Admin Error ***" +msgstr "*** Admin Fout ***" + +#: src/dird/admin.c:94 +msgid "Admin Canceled" +msgstr "Admin geannuleerd" + +#: src/dird/admin.c:106 src/lib/status.h:171 src/lib/status.h:182 +#: src/lib/status.h:196 src/lib/status.h:200 src/lib/status.h:204 +msgid "Bacula " msgstr "" -#: src/stored/bscan.c:766 -#, c-format -msgid "Got MD5 record: %s\n" +#: src/dird/ua_status.c:170 +msgid "Status available for:\n" msgstr "" -#: src/stored/bscan.c:774 -#, c-format -msgid "Got SHA1 record: %s\n" +#: src/dird/ua_status.c:177 +msgid "Select daemon type for status" msgstr "" -#: src/stored/bscan.c:782 +#: src/dird/ua_status.c:297 #, c-format -msgid "Got SHA256 record: %s\n" +msgid "Daemon started %s. Jobs: run=%d, running=%d mode=%d,%d\n" msgstr "" -#: src/stored/bscan.c:790 +#: src/dird/ua_status.c:353 #, c-format -msgid "Got SHA512 record: %s\n" +msgid "No authorization for Storage \"%s\"\n" msgstr "" -#: src/stored/bscan.c:798 src/stored/bscan.c:805 -msgid "Got signed digest record\n" +#: src/dird/ua_status.c:363 +msgid "Restricted Client or Job does not permit access to Storage daemons\n" msgstr "" -#: src/stored/bscan.c:811 +#: src/dird/ua_status.c:370 src/dird/ua_dotcmds.c:834 src/dird/ua_cmds.c:839 #, c-format -msgid "Got Prog Names Stream: %s\n" +msgid "Connecting to Storage daemon %s at %s:%d\n" msgstr "" -#: src/stored/bscan.c:817 -msgid "Got Prog Data Stream record.\n" +#: src/dird/ua_status.c:373 +#, c-format +msgid "" +"\n" +"Failed to connect to Storage daemon %s.\n" +"====\n" msgstr "" -#: src/stored/bscan.c:862 +#: src/dird/ua_status.c:405 src/dird/ua_cmds.c:1186 src/dird/ua_cmds.c:1994 #, c-format -msgid "Unknown stream type!!! stream=%d len=%i\n" +msgid "No authorization for Client \"%s\"\n" msgstr "" -#: src/stored/bscan.c:930 +#: src/dird/ua_status.c:418 src/dird/ua_dotcmds.c:859 src/dird/ua_cmds.c:662 +#: src/dird/ua_cmds.c:875 src/dird/ua_cmds.c:1307 #, c-format -msgid "Could not create File Attributes record. ERR=%s\n" +msgid "Connecting to Client %s at %s:%d\n" msgstr "" -#: src/stored/bscan.c:936 +#: src/dird/ua_status.c:421 #, c-format -msgid "Created File record: %s\n" +msgid "" +"Failed to connect to Client %s.\n" +"====\n" msgstr "" -#: src/stored/bscan.c:981 -#, c-format -msgid "Could not create media record. ERR=%s\n" +#: src/dird/ua_status.c:426 +msgid "Connected to file daemon\n" msgstr "" -#: src/stored/bscan.c:985 src/stored/bscan.c:1006 -#, c-format -msgid "Could not update media record. ERR=%s\n" +#: src/dird/ua_status.c:445 src/dird/ua_status.c:454 +msgid "" +"\n" +"Scheduled Jobs:\n" msgstr "" -#: src/stored/bscan.c:989 -#, c-format -msgid "Created Media record for Volume: %s\n" +#: src/dird/ua_status.c:446 +msgid "" +"Level Type Pri Scheduled Job Name Volume\n" msgstr "" -#: src/stored/bscan.c:1010 -#, c-format -msgid "Updated Media record at end of Volume: %s\n" +#: src/dird/ua_status.c:447 +msgid "===================================================================================\n" msgstr "" -#: src/stored/bscan.c:1027 -#, c-format -msgid "Could not create pool record. ERR=%s\n" +#: src/dird/ua_status.c:455 +msgid "" +"Level Type Pri Scheduled Job Name Schedule\n" msgstr "" -#: src/stored/bscan.c:1031 -#, c-format -msgid "Created Pool record for Pool: %s\n" +#: src/dird/ua_status.c:456 +msgid "=====================================================================================\n" msgstr "" -#: src/stored/bscan.c:1050 +#: src/dird/ua_status.c:513 src/dird/ua_status.c:678 #, c-format -msgid "Could not get Client record. ERR=%s\n" +msgid "%-14s\t%-8s\t%3d\t%-18s\t%-18s\t%s\n" msgstr "" -#: src/stored/bscan.c:1060 +#: src/dird/ua_status.c:517 src/dird/ua_status.c:682 #, c-format -msgid "Created Client record for Client: %s\n" +msgid "%-14s %-8s %3d %-18s %-18s %s\n" msgstr "" -#: src/stored/bscan.c:1077 -#, c-format -msgid "Fileset \"%s\" already exists.\n" +#: src/dird/ua_status.c:553 src/dird/ua_status.c:748 +msgid "Ignoring invalid value for days. Max is 500.\n" msgstr "" -#: src/stored/bscan.c:1081 -#, c-format -msgid "Could not create FileSet record \"%s\". ERR=%s\n" +#: src/dird/ua_status.c:564 +msgid "Ignoring invalid value for limit. Max is 2000.\n" msgstr "" -#: src/stored/bscan.c:1086 -#, c-format -msgid "Created FileSet record \"%s\"\n" +#: src/dird/ua_status.c:575 +msgid "Ignoring invalid time.\n" msgstr "" -#: src/stored/bscan.c:1133 -#, c-format -msgid "Could not create JobId record. ERR=%s\n" +#: src/dird/ua_status.c:697 src/dird/ua_status.c:801 +msgid "No Scheduled Jobs.\n" msgstr "" -#: src/stored/bscan.c:1139 +#: src/dird/ua_status.c:826 #, c-format -msgid "Could not update job start record. ERR=%s\n" +msgid "Console connected at %s\n" msgstr "" -#: src/stored/bscan.c:1142 -#, c-format -msgid "Created new JobId=%u record for original JobId=%u\n" +#: src/dird/ua_status.c:837 +msgid "" +"No Jobs running.\n" +"====\n" msgstr "" -#: src/stored/bscan.c:1195 -#, c-format -msgid "Could not update JobId=%u record. ERR=%s\n" +#: src/dird/ua_status.c:844 +msgid " JobId Type Level Files Bytes Name Status\n" msgstr "" -#: src/stored/bscan.c:1200 -#, c-format -msgid "Updated Job termination record for JobId=%u Level=%s TermStat=%c\n" +#: src/dird/ua_status.c:845 +msgid "======================================================================\n" msgstr "" -#: src/stored/bscan.c:1225 -#, c-format -msgid "Job Termination code: %d" +#: src/dird/ua_status.c:854 +msgid "is waiting execution" msgstr "" -#: src/stored/bscan.c:1230 -#, c-format -msgid "" -"%s\n" -"JobId: %d\n" -"Job: %s\n" -"FileSet: %s\n" -"Backup Level: %s\n" -"Client: %s\n" -"Start time: %s\n" -"End time: %s\n" -"Files Written: %s\n" -"Bytes Written: %s\n" -"Volume Session Id: %d\n" -"Volume Session Time: %d\n" -"Last Volume Bytes: %s\n" -"Termination: %s\n" -"\n" +#: src/dird/ua_status.c:857 +msgid "is running" msgstr "" -#: src/stored/bscan.c:1288 -#, c-format -msgid "Could not create JobMedia record. ERR=%s\n" +#: src/dird/ua_status.c:860 +msgid "is blocked" msgstr "" -#: src/stored/bscan.c:1292 -#, c-format -msgid "Created JobMedia record JobId %d, MediaId %d\n" +#: src/dird/ua_status.c:863 +msgid "has terminated" msgstr "" -#: src/stored/bscan.c:1308 -#, c-format -msgid "Could not find SessId=%d SessTime=%d for MD5/SHA1 record.\n" +#: src/dird/ua_status.c:866 +msgid "has terminated with warnings" msgstr "" -#: src/stored/bscan.c:1322 -#, c-format -msgid "Could not add MD5/SHA1 to File record. ERR=%s\n" +#: src/dird/ua_status.c:869 +msgid "has erred" msgstr "" -#: src/stored/bscan.c:1327 -msgid "Updated MD5/SHA1 record\n" +#: src/dird/ua_status.c:872 +msgid "has errors" msgstr "" -#: src/stored/job.c:234 -#, c-format -msgid "FD connect failed: Job name not found: %s\n" +#: src/dird/ua_status.c:875 +msgid "has a fatal error" msgstr "" -#: src/stored/job.c:244 -#, c-format -msgid "Hey!!!! JobId %u Job %s already authenticated.\n" +#: src/dird/ua_status.c:878 +msgid "has verify differences" msgstr "" -#: src/stored/job.c:261 -msgid "Unable to authenticate File daemon\n" +#: src/dird/ua_status.c:881 +msgid "has been canceled" msgstr "" -#: src/stored/job.c:390 -msgid "In free_jcr(), but still attached to device!!!!\n" +#: src/dird/ua_status.c:886 +msgid "is waiting on Client" msgstr "" -#: src/stored/btape.c:185 +#: src/dird/ua_status.c:888 #, c-format -msgid "" -"\n" -"\n" -"!!!! Warning large disk addressing disabled. boffset_t=%d should be 8 or " -"more !!!!!\n" -"\n" -"\n" +msgid "is waiting on Client %s" msgstr "" -#: src/stored/btape.c:192 +#: src/dird/ua_status.c:896 src/dird/ua_status.c:898 #, c-format -msgid "32 bit printf/scanf problem. i=%d x32=%u y32=%u\n" +msgid "is waiting on Storage \"%s\"" msgstr "" -#: src/stored/btape.c:201 -msgid "64 bit printf/scanf problem. i=%d x64=%" +#: src/dird/ua_status.c:900 +msgid "is waiting on Storage" msgstr "" -#: src/stored/btape.c:206 -#, c-format -msgid "Tape block granularity is %d bytes.\n" +#: src/dird/ua_status.c:906 +msgid "is waiting on max Storage jobs" msgstr "" -#: src/stored/btape.c:279 -msgid "No archive name specified.\n" +#: src/dird/ua_status.c:909 +msgid "is waiting on max Client jobs" msgstr "" -#: src/stored/btape.c:283 -msgid "Improper number of arguments specified.\n" +#: src/dird/ua_status.c:912 +msgid "is waiting on max Job jobs" msgstr "" -#: src/stored/btape.c:297 -msgid "btape does not work with DVD storage.\n" +#: src/dird/ua_status.c:915 +msgid "is waiting on max total jobs" msgstr "" -#: src/stored/btape.c:302 -msgid "btape only works with tape storage.\n" +#: src/dird/ua_status.c:919 +#, fuzzy, c-format +msgid "is waiting for its start time (%s)" +msgstr "Job %s wacht %d seconde voor de start tijd.\n" + +#: src/dird/ua_status.c:925 +msgid "is waiting for higher priority jobs to finish" msgstr "" -#: src/stored/btape.c:383 -#, c-format -msgid "Total Volume bytes=%sB. Total Write rate = %sB/s\n" +#: src/dird/ua_status.c:928 +msgid "is waiting for a Shared Storage device" msgstr "" -#: src/stored/btape.c:409 +#: src/dird/ua_status.c:945 #, c-format -msgid "Volume bytes=%sB. Write rate = %sB/s\n" +msgid "is in unknown state %c" msgstr "" -#: src/stored/btape.c:477 -#, c-format -msgid "open device %s: OK\n" +#: src/dird/ua_status.c:959 +msgid "is waiting for a mount request" msgstr "" -#: src/stored/btape.c:500 -msgid "Enter Volume Name: " +#: src/dird/ua_status.c:966 +msgid "is waiting for an appendable Volume" +msgstr "" + +#: src/dird/ua_status.c:974 +msgid "is waiting for Client to connect to Storage daemon" msgstr "" -#: src/stored/btape.c:507 +#: src/dird/ua_status.c:976 #, c-format -msgid "Device open failed. ERR=%s\n" +msgid "is waiting for Client %s to connect to Storage %s" msgstr "" -#: src/stored/btape.c:512 +#: src/dird/ua_status.c:1007 #, c-format -msgid "Wrote Volume label for volume \"%s\".\n" +msgid "%6d\t%-6s\t%-20s\t%s\t%s\n" msgstr "" -#: src/stored/btape.c:526 -msgid "Volume has no label.\n" +#: src/dird/ua_status.c:1015 +#, c-format +msgid "%6d %-4s %-3s %10s %10s %-17s %s\n" msgstr "" -#: src/stored/btape.c:529 -msgid "Volume label read correctly.\n" -msgstr "" - -#: src/stored/btape.c:532 -#, c-format -msgid "I/O error on device: ERR=%s" -msgstr "" - -#: src/stored/btape.c:535 -msgid "Volume name error\n" +#: src/dird/ua_status.c:1040 +msgid "No Terminated Jobs.\n" msgstr "" -#: src/stored/btape.c:538 -#, c-format -msgid "Error creating label. ERR=%s" +#: src/dird/ua_status.c:1046 src/lib/status.h:73 +msgid "" +"\n" +"Terminated Jobs:\n" msgstr "" -#: src/stored/btape.c:541 -msgid "Volume version error.\n" +#: src/dird/ua_status.c:1047 src/lib/status.h:80 +msgid " JobId Level Files Bytes Status Finished Name \n" msgstr "" -#: src/stored/btape.c:544 -msgid "Bad Volume label type.\n" +#: src/dird/ua_status.c:1048 +msgid "====================================================================\n" msgstr "" -#: src/stored/btape.c:547 -msgid "Unknown error.\n" +#: src/dird/ua_status.c:1087 src/lib/status.h:109 +msgid "Diffs" msgstr "" -#: src/stored/btape.c:565 -#, c-format -msgid "Bad status from load. ERR=%s\n" +#: src/dird/ua_status.c:1090 src/dird/ua_restore.c:443 src/lib/status.h:112 +msgid "Cancel" msgstr "" -#: src/stored/btape.c:567 -#, c-format -msgid "Loaded %s\n" +#: src/dird/ua_status.c:1099 src/lib/status.h:122 +msgid "Other" msgstr "" -#: src/stored/btape.c:576 src/stored/btape.c:1139 src/stored/btape.c:1212 -#: src/stored/btape.c:1292 src/stored/btape.c:1563 +#: src/dird/ua_status.c:1103 src/lib/status.h:134 #, c-format -msgid "Bad status from rewind. ERR=%s\n" +msgid "%6d\t%-6s\t%8s\t%10s\t%-7s\t%-8s\t%s\n" msgstr "" -#: src/stored/btape.c:579 src/stored/btape.c:1571 +#: src/dird/ua_status.c:1111 src/lib/status.h:142 #, c-format -msgid "Rewound %s\n" +msgid "%6d %-6s %8s %10s %-7s %-8s %s\n" msgstr "" -#: src/stored/btape.c:605 src/stored/btape.c:1575 -#, c-format -msgid "Bad status from weof. ERR=%s\n" +#: src/dird/ua_status.c:1121 +msgid "\n" msgstr "" -#: src/stored/btape.c:609 +#: src/dird/next_vol.c:163 #, c-format -msgid "Wrote 1 EOF to %s\n" +msgid "Purging oldest volume \"%s\"\n" msgstr "" -#: src/stored/btape.c:612 +#: src/dird/next_vol.c:169 #, c-format -msgid "Wrote %d EOFs to %s\n" +msgid "Pruning oldest volume \"%s\"\n" msgstr "" -#: src/stored/btape.c:630 -msgid "Moved to end of medium.\n" +#: src/dird/next_vol.c:188 +msgid "We seem to be looping trying to find the next volume. I give up.\n" msgstr "" -#: src/stored/btape.c:657 +#: src/dird/next_vol.c:215 #, c-format -msgid "Bad status from bsf. ERR=%s\n" +msgid "Max Volume bytes=%s exceeded. Marking Volume \"%s\" as Full.\n" msgstr "" -#: src/stored/btape.c:659 +#: src/dird/next_vol.c:223 #, c-format -msgid "Backspaced %d file%s.\n" +msgid "Volume used once. Marking Volume \"%s\" as Used.\n" msgstr "" -#: src/stored/btape.c:676 +#: src/dird/next_vol.c:230 #, c-format -msgid "Bad status from bsr. ERR=%s\n" +msgid "Max Volume jobs=%s exceeded. Marking Volume \"%s\" as Used.\n" msgstr "" -#: src/stored/btape.c:678 +#: src/dird/next_vol.c:240 #, c-format -msgid "Backspaced %d record%s.\n" +msgid "Max Volume files=%s exceeded. Marking Volume \"%s\" as Used.\n" msgstr "" -#: src/stored/btape.c:706 +#: src/dird/next_vol.c:251 #, c-format -msgid "Device status:\n" +msgid "" +"Max configured use duration=%s sec. exceeded. Marking Volume \"%s\" as " +"Used.\n" msgstr "" -#: src/stored/btape.c:725 +#: src/dird/next_vol.c:264 #, c-format -msgid "Status:\n" +msgid "Catalog error updating volume \"%s\". ERR=%s" msgstr "" -#: src/stored/btape.c:740 -msgid "" -"Test writing larger and larger records.\n" -"This is a torture test for records.\n" -"I am going to write\n" -"larger and larger records. It will stop when the record size\n" -"plus the header exceeds the block size (by default about 64K)\n" +#: src/dird/next_vol.c:286 +msgid "volume has expired" msgstr "" -#: src/stored/btape.c:746 -msgid "Do you want to continue? (y/n): " +#: src/dird/next_vol.c:304 src/dird/next_vol.c:348 +#, c-format +msgid "Recycled current volume \"%s\"\n" msgstr "" -#: src/stored/btape.c:748 src/stored/btape.c:2200 -msgid "Command aborted.\n" +#: src/dird/next_vol.c:309 +msgid "and recycling of current volume failed" msgstr "" -#: src/stored/btape.c:765 -#, c-format -msgid "Block %d i=%d\n" +#: src/dird/next_vol.c:315 +msgid "but should be Append, Purged or Recycle" msgstr "" -#: src/stored/btape.c:792 -msgid "Skipping read backwards test because BSR turned off.\n" +#: src/dird/next_vol.c:324 +msgid "volume has recycling disabled" msgstr "" -#: src/stored/btape.c:796 +#: src/dird/next_vol.c:351 msgid "" -"\n" -"=== Write, backup, and re-read test ===\n" -"\n" -"I'm going to write three records and an EOF\n" -"then backup over the EOF and re-read the last record.\n" -"Bacula does this after writing the last block on the\n" -"tape to verify that the block was written correctly.\n" -"\n" -"This is not an *essential* feature ...\n" -"\n" +"but should be Append, Purged or Recycle (recycling of the current volume " +"failed)" msgstr "" -#: src/stored/btape.c:809 src/stored/btape.c:820 src/stored/btape.c:831 -#: src/stored/btape.c:1149 src/stored/btape.c:1165 src/stored/btape.c:1907 -#: src/stored/btape.c:2823 -msgid "Error writing record to block.\n" +#: src/dird/next_vol.c:355 +msgid "" +"but should be Append, Purged or Recycle (cannot automatically recycle " +"current volume, as it still contains unpruned data or the Volume Retention " +"time has not expired.)" msgstr "" -#: src/stored/btape.c:813 src/stored/btape.c:824 src/stored/btape.c:835 -#: src/stored/btape.c:1153 src/stored/btape.c:1169 src/stored/btape.c:1911 -#: src/stored/btape.c:2827 -msgid "Error writing block to device.\n" +#: src/dird/next_vol.c:415 +#, c-format +msgid "Unable to get Pool record: ERR=%s" msgstr "" -#: src/stored/btape.c:816 +#: src/dird/next_vol.c:422 #, c-format -msgid "Wrote first record of %d bytes.\n" +msgid "Unable add Scratch Volume, Pool \"%s\" full MaxVols=%d\n" msgstr "" -#: src/stored/btape.c:827 +#: src/dird/next_vol.c:442 #, c-format -msgid "Wrote second record of %d bytes.\n" +msgid "Failed to move Scratch Volume. ERR=%s\n" msgstr "" -#: src/stored/btape.c:838 +#: src/dird/next_vol.c:447 #, c-format -msgid "Wrote third record of %d bytes.\n" +msgid "Using Volume \"%s\" from 'Scratch' pool.\n" msgstr "" -#: src/stored/btape.c:845 src/stored/btape.c:850 +#: src/dird/authenticate.c:77 src/dird/authenticate.c:78 +#: src/qt-console/tray-monitor/authenticate.cpp:119 #, c-format -msgid "Backspace file failed! ERR=%s\n" +msgid "Error sending Hello to Storage daemon. ERR=%s\n" msgstr "" -#: src/stored/btape.c:854 -msgid "Backspaced over EOF OK.\n" +#: src/dird/authenticate.c:107 +msgid "Director and Storage daemon passwords or names not the same.\n" msgstr "" -#: src/stored/btape.c:856 +#: src/dird/authenticate.c:109 #, c-format -msgid "Backspace record failed! ERR=%s\n" +msgid "" +"Director unable to authenticate with Storage daemon at \"%s:%d\". Possible " +"causes:\n" +"Passwords or names not the same or\n" +"Maximum Concurrent Jobs exceeded on the SD or\n" +"SD networking messed up (restart daemon).\n" +"Please see " msgstr "" -#: src/stored/btape.c:859 -msgid "Backspace record OK.\n" +#: src/dird/authenticate.c:137 +#, c-format +msgid "TLS negotiation failed with SD at \"%s:%d\"\n" msgstr "" -#: src/stored/btape.c:862 src/stored/btape.c:868 +#: src/dird/authenticate.c:149 #, c-format -msgid "Read block failed! ERR=%s\n" +msgid "bdird \n" -" -b specify bootstrap file\n" -" -c set configuration file to file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -p proceed inspite of I/O errors\n" -" -s turn off signals\n" -" -v be verbose\n" -" -? print this message.\n" -"\n" +msgid "Previous Job resource not found for \"%s\".\n" msgstr "" -#: src/stored/btape.c:3047 -#, c-format -msgid "Mount second Volume on device %s and press return when ready: " +#: src/dird/mac.c:183 +msgid "setup job failed.\n" msgstr "" -#: src/stored/btape.c:3075 +#: src/dird/mac.c:239 #, c-format -msgid "Mount blank Volume on device %s and press return when ready: " +msgid "Pool for JobId %s not in database. ERR=%s\n" msgstr "" -#: src/stored/btape.c:3095 +#: src/dird/mac.c:247 #, c-format -msgid "End of Volume \"%s\" %d records.\n" +msgid "Pool resource \"%s\" not found.\n" msgstr "" -#: src/stored/btape.c:3109 +#: src/dird/mac.c:333 #, c-format -msgid "Read block=%u, VolBytes=%s rate=%sB/s\n" +msgid "JobId %s already %s probably by another Job. %s stopped.\n" msgstr "" -#: src/stored/authenticate.c:61 +#: src/dird/mac.c:343 #, c-format -msgid "I only authenticate Directors, not %d\n" +msgid "Start %s JobId %s, Job=%s\n" msgstr "" -#: src/stored/authenticate.c:67 src/filed/authenticate.c:76 -#, c-format -msgid "Bad Hello command from Director at %s. Len=%d.\n" +#: src/dird/mac.c:485 +msgid "The Storage daemon does not support SDCallsClient.\n" msgstr "" -#: src/stored/authenticate.c:78 src/filed/authenticate.c:88 -#, c-format -msgid "Bad Hello command from Director at %s: %s\n" +#: src/dird/mac.c:590 +msgid "Could not start migration/copy job.\n" msgstr "" -#: src/stored/authenticate.c:92 +#: src/dird/mac.c:592 #, c-format -msgid "" -"Connection from unknown Director %s at %s rejected.\n" -"Please see " -msgstr "" - -#: src/stored/authenticate.c:129 -msgid "" -"Incorrect password given by Director.\n" -"Please see " +msgid "%s JobId %d started.\n" msgstr "" -#: src/stored/authenticate.c:137 src/stored/authenticate.c:248 -#: src/filed/authenticate.c:151 src/filed/authenticate.c:270 -msgid "" -"Authorization problem: Remote server did not advertize required TLS " -"support.\n" +#: src/dird/mac.c:726 +#, c-format +msgid "%s OK -- with warnings" msgstr "" -#: src/stored/authenticate.c:155 +#: src/dird/mac.c:728 #, c-format -msgid "TLS negotiation failed with DIR at \"%s:%d\"\n" +msgid "%s OK" msgstr "" -#: src/stored/authenticate.c:191 +#: src/dird/mac.c:733 #, c-format -msgid "Unable to authenticate Director at %s.\n" +msgid "*** %s Error ***" msgstr "" -#: src/stored/authenticate.c:239 src/stored/authenticate.c:279 +#: src/dird/mac.c:749 #, c-format -msgid "" -"Incorrect authorization key from File daemon at %s rejected.\n" -"Please see " +msgid "%s Canceled" msgstr "" -#: src/stored/authenticate.c:266 +#: src/dird/mac.c:764 #, c-format -msgid "TLS negotiation failed with FD at \"%s:%d\"\n" +msgid "Inappropriate %s term code" msgstr "" -#: src/stored/wait.c:133 +#: src/dird/mac.c:774 #, c-format -msgid "pthread timedwait error. ERR=%s\n" +msgid "%s -- no files to %s" msgstr "" -#: src/stored/wait.c:239 +#: src/dird/mac.c:790 src/dird/backup.c:853 #, c-format -msgid "JobId=%s, Job %s waiting to reserve a device.\n" +msgid "%s (%sB)" msgstr "" -#: src/stored/block.c:102 +#: src/dird/mac.c:794 #, c-format msgid "" -"Dump block %s %x: size=%d BlkNum=%d\n" -" Hdrcksum=%x cksum=%x\n" +"%s %s %s (%s):\n" +" Build OS: %s %s %s\n" +" Prev Backup JobId: %s\n" +" Prev Backup Job: %s\n" +" New Backup JobId: %s\n" +" Current JobId: %s\n" +" Current Job: %s\n" +" Backup Level: %s%s\n" +" Client: %s\n" +" FileSet: \"%s\" %s\n" +" Read Pool: \"%s\" (From %s)\n" +" Read Storage: \"%s\" (From %s)\n" +" Write Pool: \"%s\" (From %s)\n" +" Write Storage: \"%s\" (From %s)\n" +" Catalog: \"%s\" (From %s)\n" +" Start time: %s\n" +" End time: %s\n" +" Elapsed time: %s\n" +" Priority: %d\n" +" SD Files Written: %s\n" +" SD Bytes Written: %s (%sB)\n" +" Rate: %.1f KB/s\n" +" Volume name(s): %s\n" +" Volume Session Id: %d\n" +" Volume Session Time: %d\n" +" Last Volume Bytes: %s\n" +" SD Errors: %d\n" +" SD termination status: %s\n" +" Termination: %s\n" +"\n" msgstr "" -#: src/stored/block.c:115 +#: src/dird/mac.c:869 src/dird/mac.c:872 #, c-format -msgid " Rec: VId=%u VT=%u FI=%s Strm=%s len=%d p=%x\n" +msgid "No Next Pool specification found in Pool \"%s\".\n" msgstr "" -#: src/stored/block.c:171 +#: src/dird/mac.c:879 #, c-format -msgid "%d block read errors not printed.\n" +msgid "No Storage specification found in Next Pool \"%s\".\n" +msgstr "" + +#: src/dird/autoprune.c:64 +msgid "" +"End auto prune.\n" +"\n" +msgstr "" + +#: src/dird/ua_restore.c:138 +msgid "\"RegexWhere\" specification not authorized.\n" msgstr "" -#: src/stored/block.c:264 src/stored/block.c:280 src/stored/block.c:290 -#, c-format -msgid "" -"Volume data error at %u:%u! Wanted ID: \"%s\", got \"%s\". Buffer " -"discarded.\n" +#: src/dird/ua_restore.c:145 +msgid "\"where\" specification not authorized.\n" msgstr "" -#: src/stored/block.c:305 -#, c-format +#: src/dird/ua_restore.c:163 msgid "" -"Volume data error at %u:%u! Block length %u is insane (too large), probably " -"due to a bad archive.\n" +"No Restore Job Resource found in bacula-dir.conf.\n" +"You must create at least one before running this command.\n" msgstr "" -#: src/stored/block.c:331 -#, c-format -msgid "" -"Volume data error at %u:%u!\n" -"Block checksum mismatch in block=%u len=%d: calc=%x blk=%x\n" +#: src/dird/ua_restore.c:180 +msgid "Restore not done.\n" msgstr "" -#: src/stored/block.c:452 -#, c-format -msgid "Cannot write block. Device at EOM. dev=%s\n" +#: src/dird/ua_restore.c:191 +msgid "Unable to construct a valid BSR. Cannot continue.\n" msgstr "" -#: src/stored/block.c:458 -#, c-format -msgid "Attempt to write on read-only Volume. dev=%s\n" +#: src/dird/ua_restore.c:195 src/dird/ua_restore.c:207 +msgid "No files selected to be restored.\n" msgstr "" -#: src/stored/block.c:464 -#, c-format -msgid "Attempt to write on closed device=%s\n" +#: src/dird/ua_restore.c:201 +msgid "" +"\n" +"1 file selected to be restored.\n" +"\n" msgstr "" -#: src/stored/block.c:513 +#: src/dird/ua_restore.c:203 #, c-format -msgid "User defined maximum volume capacity %s exceeded on device %s.\n" +msgid "" +"\n" +"%s files selected to be restored.\n" +"\n" msgstr "" -#: src/stored/block.c:528 -#, c-format -msgid "Unable to write EOF. ERR=%s\n" +#: src/dird/ua_restore.c:222 +msgid "No Client resource found!\n" msgstr "" -#: src/stored/block.c:554 src/stored/block.c:588 -msgid "Write block header zeroed.\n" +#: src/dird/ua_restore.c:330 +msgid "The restore will use the following job(s) as Base\n" msgstr "" -#: src/stored/block.c:580 +#: src/dird/ua_restore.c:351 #, c-format -msgid "Block checksum changed during write: before=%ud after=%ud\n" +msgid "Missing value for keyword: %s\n" msgstr "" -#: src/stored/block.c:607 -#, c-format -msgid "Write error at %u:%u on device %s. ERR=%s.\n" +#: src/dird/ua_restore.c:431 +msgid "List last 20 Jobs run" msgstr "" -#: src/stored/block.c:614 -#, c-format -msgid "End of Volume \"%s\" at %u:%u on device %s. Write of %u bytes got %d.\n" +#: src/dird/ua_restore.c:432 +msgid "List Jobs where a given File is saved" msgstr "" -#: src/stored/block.c:695 src/stored/block.c:701 -#, c-format -msgid "Backspace file at EOT failed. ERR=%s\n" +#: src/dird/ua_restore.c:433 +msgid "Enter list of comma separated JobIds to select" msgstr "" -#: src/stored/block.c:708 -#, c-format -msgid "Backspace record at EOT failed. ERR=%s\n" +#: src/dird/ua_restore.c:434 +msgid "Enter SQL list command" msgstr "" -#: src/stored/block.c:725 -#, c-format -msgid "Re-read last block at EOT failed. ERR=%s" +#: src/dird/ua_restore.c:435 +msgid "Select the most recent backup for a client" msgstr "" -#: src/stored/block.c:735 -#, c-format -msgid "" -"Re-read of last block: block numbers differ by more than one.\n" -"Probable tape misconfiguration and data loss. Read block=%u Want block=%u.\n" +#: src/dird/ua_restore.c:436 +msgid "Select backup for a client before a specified time" msgstr "" -#: src/stored/block.c:740 -#, c-format -msgid "" -"Re-read of last block OK, but block numbers differ. Read block=%u Want block=" -"%u.\n" +#: src/dird/ua_restore.c:437 +msgid "Enter a list of files to restore" msgstr "" -#: src/stored/block.c:744 -msgid "Re-read of last block succeeded.\n" +#: src/dird/ua_restore.c:438 +msgid "Enter a list of files to restore before a specified time" msgstr "" -#: src/stored/block.c:777 -#, c-format -msgid "" -"Error writing final EOF to tape. This Volume may not be readable.\n" -"%s" +#: src/dird/ua_restore.c:439 +msgid "Find the JobIds of the most recent backup for a client" msgstr "" -#: src/stored/block.c:791 -#, c-format -msgid "" -"Error writing final part to DVD. This Volume may not be readable.\n" -"%s" +#: src/dird/ua_restore.c:440 +msgid "Find the JobIds for a backup for a client before a specified time" msgstr "" -#: src/stored/block.c:801 -#, fuzzy -msgid "Error sending Volume info to Director.\n" -msgstr "Geen Volumes gevonden om terug te zetten.\n" +#: src/dird/ua_restore.c:441 +msgid "Enter a list of directories to restore for found JobIds" +msgstr "" -#: src/stored/block.c:896 -#, c-format -msgid "" -"Error while writing, current part number is less than the total number of " -"parts (%d/%d, device=%s)\n" +#: src/dird/ua_restore.c:442 +msgid "Select full restore to a specified Job date" msgstr "" -#: src/stored/block.c:904 +#: src/dird/ua_restore.c:489 #, c-format -msgid "Unable to open device next part %s: ERR=%s\n" +msgid "Unknown keyword: %s\n" msgstr "" -#: src/stored/block.c:924 +#: src/dird/ua_restore.c:518 src/dird/ua_update.c:936 #, c-format -msgid "" -"End of Volume \"%s\" at %u:%u on device %s (part_size=%s, free_space=%s, " -"free_space_errno=%d, errmsg=%s).\n" +msgid "Improper date format: %s\n" msgstr "" -#: src/stored/block.c:937 +#: src/dird/ua_restore.c:558 #, c-format -msgid "" -"End of Volume \"%s\" at %u:%u on device %s (part_size=%s, free_space=%s, " -"free_space_errno=%d).\n" +msgid "Error: Pool resource \"%s\" access not allowed.\n" msgstr "" -#: src/stored/block.c:980 -#, fuzzy -msgid "Job failed or canceled.\n" -msgstr "Terugzetten geannuleerd.\n" +#: src/dird/ua_restore.c:574 +msgid "" +"\n" +"First you select one or more JobIds that contain files\n" +"to be restored. You will be presented several methods\n" +"of specifying the JobIds. Then you will be allowed to\n" +"select which files from those JobIds are to be restored.\n" +"\n" +msgstr "" -#: src/stored/block.c:986 -msgid "Attempt to read past end of tape or file.\n" +#: src/dird/ua_restore.c:587 +msgid "To select the JobIds, you have the following choices:\n" msgstr "" -#: src/stored/block.c:995 -#, c-format -msgid "Attempt to read closed device: fd=%d at file:blk %u:%u on device %s\n" +#: src/dird/ua_restore.c:592 +msgid "Select item: " msgstr "" -#: src/stored/block.c:1005 -#, c-format -msgid "Block buffer size looping problem on device %s\n" +#: src/dird/ua_restore.c:597 src/dird/ua_restore.c:632 +msgid "SQL query not authorized.\n" msgstr "" -#: src/stored/block.c:1017 -#, c-format -msgid "Unable to open device part=%d %s: ERR=%s\n" +#: src/dird/ua_restore.c:610 +msgid "Enter Filename (no path):" msgstr "" -#: src/stored/block.c:1044 -#, c-format -msgid "Read error on fd=%d at file:blk %u:%u on device %s. ERR=%s.\n" +#: src/dird/ua_restore.c:625 src/dird/ua_restore.c:733 +msgid "Enter JobId(s), comma separated, to restore: " msgstr "" -#: src/stored/block.c:1057 -#, c-format -msgid "Read zero bytes at %u:%u on device %s.\n" +#: src/dird/ua_restore.c:635 +msgid "Enter SQL list command: " msgstr "" -#: src/stored/block.c:1081 -#, c-format +#: src/dird/ua_restore.c:669 src/dird/ua_restore.c:692 msgid "" -"Volume data error at %u:%u! Very short block of %d bytes on device %s " -"discarded.\n" +"Enter file names with paths, or < to enter a filename\n" +"containing a list of file names with paths, and terminate\n" +"them with a blank line.\n" msgstr "" -#: src/stored/block.c:1107 -#, c-format -msgid "Block length %u is greater than buffer %u. Attempting recovery.\n" +#: src/dird/ua_restore.c:673 src/dird/ua_restore.c:696 +msgid "Enter full filename: " msgstr "" -#: src/stored/block.c:1127 +#: src/dird/ua_restore.c:731 #, c-format -msgid "Setting block buffer size to %u bytes.\n" +msgid "You have already selected the following JobIds: %s\n" msgstr "" -#: src/stored/block.c:1142 -#, c-format +#: src/dird/ua_restore.c:749 msgid "" -"Volume data error at %u:%u! Short block of %d bytes on device %s discarded.\n" +"Enter full directory names or start the name\n" +"with a < to indicate it is a filename containing a list\n" +"of directories and terminate them with a blank line.\n" msgstr "" -#: src/lib/plugins.c:117 -#, c-format -msgid "Failed to open Plugin directory %s: ERR=%s\n" +#: src/dird/ua_restore.c:753 +msgid "Enter directory name: " msgstr "" -#: src/lib/plugins.c:134 -#, c-format -msgid "Failed to find any plugins in %s\n" +#: src/dird/ua_restore.c:769 +msgid "Enter JobId to get the state to restore: " msgstr "" -#: src/lib/plugins.c:168 -#, c-format -msgid "dlopen plugin %s failed: ERR=%s\n" +#: src/dird/ua_restore.c:808 +msgid "Invalid JobId in list.\n" msgstr "" -#: src/lib/plugins.c:179 +#: src/dird/ua_restore.c:827 #, c-format -msgid "Lookup of loadPlugin in plugin %s failed: ERR=%s\n" +msgid "Access to JobId=%s (Job \"%s\") not authorized. Not selected.\n" msgstr "" -#: src/lib/plugins.c:188 -#, c-format -msgid "Lookup of unloadPlugin in plugin %s failed: ERR=%s\n" +#: src/dird/ua_restore.c:840 +msgid "No Jobs selected.\n" msgstr "" -#: src/lib/pythonlib.c:116 -msgid "Could not initialize Python\n" +#: src/dird/ua_restore.c:845 +#, c-format +msgid "You have selected the following JobIds: %s\n" msgstr "" -#: src/lib/pythonlib.c:121 +#: src/dird/ua_restore.c:847 #, c-format -msgid "Could not Run Python string %s\n" +msgid "You have selected the following JobId: %s\n" msgstr "" -#: src/lib/pythonlib.c:133 -msgid "Could not initialize Python Job type.\n" +#: src/dird/ua_restore.c:857 +msgid "" +"The restored files will the most current backup\n" +"BEFORE the date you specify below.\n" +"\n" msgstr "" -#: src/lib/pythonlib.c:138 -#, c-format -msgid "Could not import Python script %s/%s. Python disabled.\n" +#: src/dird/ua_restore.c:860 +msgid "Enter date as YYYY-MM-DD HH:MM:SS :" msgstr "" -#: src/lib/pythonlib.c:240 -msgid "Could not create Python Job Object.\n" +#: src/dird/ua_restore.c:866 +msgid "Improper date format.\n" msgstr "" -#: src/lib/pythonlib.c:253 src/lib/pythonlib.c:277 +#: src/dird/ua_restore.c:887 #, c-format -msgid "Python function \"%s\" not found.\n" +msgid "Cannot open file %s: ERR=%s\n" msgstr "" -#: src/lib/pythonlib.c:292 +#: src/dird/ua_restore.c:895 src/dird/ua_restore.c:899 #, c-format -msgid "Unknown Python daemon event %s\n" +msgid "Error occurred on line %d of file \"%s\"\n" msgstr "" -#: src/lib/pythonlib.c:317 +#: src/dird/ua_restore.c:943 src/dird/ua_restore.c:971 #, c-format -msgid "Unable to initialize the Python lock. ERR=%s\n" +msgid "No database record found for: %s\n" msgstr "" -#: src/lib/watchdog.c:96 -#, c-format -msgid "Unable to initialize watchdog lock. ERR=%s\n" +#: src/dird/ua_restore.c:959 +msgid "No JobId specified cannot continue.\n" msgstr "" -#: src/lib/watchdog.c:193 -msgid "BUG! register_watchdog called before start_watchdog\n" +#: src/dird/ua_restore.c:992 +#, c-format +msgid "No table found: %s\n" msgstr "" -#: src/lib/watchdog.c:196 -#, c-format -msgid "BUG! Watchdog %p has NULL callback\n" +#: src/dird/ua_restore.c:1050 +msgid "" +"\n" +"\n" +"For one or more of the JobIds selected, no files were found,\n" +"so file selection is not possible.\n" +"Most likely your retention policy pruned the files.\n" msgstr "" -#: src/lib/watchdog.c:199 -#, c-format -msgid "BUG! Watchdog %p has zero interval\n" +#: src/dird/ua_restore.c:1053 +msgid "" +"\n" +"Do you want to restore all the files? (yes|no): " msgstr "" -#: src/lib/watchdog.c:219 -msgid "BUG! unregister_watchdog_unlocked called before start_watchdog\n" +#: src/dird/ua_restore.c:1056 +msgid "" +"\n" +"Regexp matching files to restore? (empty to abort): " msgstr "" -#: src/lib/watchdog.c:339 +#: src/dird/ua_restore.c:1072 #, c-format -msgid "rwl_writelock failure. ERR=%s\n" +msgid "Regex compile error: %s\n" msgstr "" -#: src/lib/watchdog.c:354 +#: src/dird/ua_restore.c:1137 #, c-format -msgid "rwl_writeunlock failure. ERR=%s\n" +msgid "" +"\n" +"Building directory tree for JobId(s) %s ... " msgstr "" -#: src/lib/attr.c:81 +#: src/dird/ua_restore.c:1207 #, c-format -msgid "Error scanning attributes: %s\n" +msgid "" +"\n" +"%s files inserted into the tree and marked for extraction.\n" msgstr "" -#: src/lib/smartall.c:145 src/lib/smartall.c:256 src/lib/smartall.c:271 -msgid "Out of memory\n" +#: src/dird/ua_restore.c:1210 +#, c-format +msgid "" +"\n" +"%s files inserted into the tree.\n" msgstr "" -#: src/lib/smartall.c:150 -msgid "Too much memory used." +#: src/dird/ua_restore.c:1285 +#, c-format +msgid "Error getting FileSet \"%s\": ERR=%s\n" msgstr "" -#: src/lib/smartall.c:180 +#: src/dird/ua_restore.c:1290 #, c-format -msgid "Attempt to free NULL called from %s:%d\n" +msgid "FileSet argument: %s\n" msgstr "" -#: src/lib/smartall.c:194 +#: src/dird/ua_restore.c:1302 #, c-format -msgid "double free from %s:%d\n" +msgid "No FileSet found for client \"%s\".\n" msgstr "" -#: src/lib/smartall.c:202 +#: src/dird/ua_restore.c:1308 #, c-format -msgid "qp->qnext->qprev != qp called from %s:%d\n" +msgid "Error getting FileSet record: %s\n" msgstr "" -#: src/lib/smartall.c:206 -#, c-format -msgid "qp->qprev->qnext != qp called from %s:%d\n" +#: src/dird/ua_restore.c:1309 +msgid "" +"This probably means you modified the FileSet.\n" +"Continuing anyway.\n" msgstr "" -#: src/lib/smartall.c:215 +#: src/dird/ua_restore.c:1324 #, c-format -msgid "Overrun buffer: len=%d addr=%p allocated: %s:%d called from %s:%d\n" +msgid "Pool \"%s\" not found, using any pool.\n" msgstr "" -#: src/lib/smartall.c:293 +#: src/dird/ua_restore.c:1351 src/dird/ua_restore.c:1367 #, c-format -msgid "sm_realloc size: %d\n" +msgid "No Full backup before %s found.\n" msgstr "" -#: src/lib/smartall.c:331 -#, c-format -msgid "sm_realloc %d at %p from %s:%d\n" +#: src/dird/ua_restore.c:1396 +msgid "No jobs found.\n" msgstr "" -#: src/lib/smartall.c:391 +#: src/dird/ua_restore.c:1531 #, c-format msgid "" "\n" -"Orphaned buffers exist. Dump terminated following\n" -" discovery of bad links in chain of orphaned buffers.\n" -" Buffer address with bad links: %p\n" +"Warning Storage is overridden by \"%s\" on the command line.\n" msgstr "" -#: src/lib/smartall.c:436 -#, c-format -msgid "Damaged buffer found. Called from %s:%d\n" -msgstr "" - -#: src/lib/smartall.c:469 +#: src/dird/ua_restore.c:1536 #, c-format msgid "" +"This may not work because of two different MediaTypes:\n" +" Storage MediaType=\"%s\"\n" +" Volume MediaType=\"%s\".\n" "\n" -"Damaged buffers found at %s:%d\n" -msgstr "" - -#: src/lib/smartall.c:472 -msgid " discovery of bad prev link.\n" msgstr "" -#: src/lib/smartall.c:475 -msgid " discovery of bad next link.\n" +#: src/dird/ua_restore.c:1555 +#, c-format +msgid "Using Storage \"%s\" from MediaType \"%s\".\n" msgstr "" -#: src/lib/smartall.c:478 -msgid " discovery of data overrun.\n" +#: src/dird/ua_restore.c:1558 +#, c-format +msgid "Storage \"%s\" not found, using Storage \"%s\" from MediaType \"%s\".\n" msgstr "" -#: src/lib/smartall.c:481 -msgid " NULL pointer.\n" +#: src/dird/ua_restore.c:1567 +#, c-format +msgid "" +"\n" +"Unable to find Storage resource for\n" +"MediaType \"%s\", needed by the Jobs you selected.\n" msgstr "" -#: src/lib/smartall.c:487 +#: src/dird/bsr.c:161 #, c-format -msgid " Buffer address: %p\n" +msgid "Unable to get Job record. ERR=%s\n" msgstr "" -#: src/lib/smartall.c:494 +#: src/dird/bsr.c:172 #, c-format -msgid "Damaged buffer: %6u bytes allocated at line %d of %s %s\n" +msgid "Unable to get Job Volume Parameters. ERR=%s\n" msgstr "" -#: src/lib/sellist.c:69 -msgid "Negative numbers not permitted.\n" +#: src/dird/bsr.c:220 +#, c-format +msgid "Unable to create bootstrap file %s. ERR=%s\n" msgstr "" -#: src/lib/sellist.c:106 -msgid "Selection items must be be greater than zero.\n" +#: src/dird/bsr.c:229 +msgid "No files found to read. No bootstrap file written.\n" msgstr "" -#: src/lib/sellist.c:110 -#, fuzzy -msgid "Selection item too large.\n" -msgstr "Selecteer Pool" +#: src/dird/bsr.c:233 +msgid "Error writing bsr file.\n" +msgstr "Fout bij schrijven van bsr bestand.\n" -#: src/lib/sellist.c:167 -msgid "No input string given.\n" +#: src/dird/bsr.c:238 +#, c-format +msgid "Bootstrap records written to %s\n" msgstr "" -#: src/lib/rwlock.c:307 -msgid "rwl_writeunlock called too many times.\n" +#: src/dird/bsr.c:286 +msgid "" +"The Job will require the following (*=>InChanger):\n" +" Volume(s) Storage(s) SD Device(s)\n" +"===========================================================================\n" msgstr "" -#: src/lib/rwlock.c:312 -msgid "rwl_writeunlock by non-owner.\n" +#: src/dird/bsr.c:306 +msgid "No Volumes found to restore.\n" +msgstr "Geen Volumes gevonden om terug te zetten.\n" + +#: src/dird/bsr.c:308 +#, fuzzy +msgid "" +"\n" +"Volumes marked with \"*\" are in the Autochanger.\n" msgstr "" +"\n" +"Volumes gemarkeerd met \"*\" staan online.\n" -#: src/lib/rwlock.c:437 src/lib/save/devlock.c:501 src/lib/devlock.c:501 -#, c-format -msgid "Thread %d found unchanged elements %d times\n" +#: src/dird/fd_cmds.c:89 +msgid "Client: " msgstr "" -#: src/lib/rwlock.c:507 src/lib/save/devlock.c:571 src/lib/devlock.c:571 +#: src/dird/fd_cmds.c:125 #, c-format -msgid "%02d: interval %d, writes %d, reads %d\n" +msgid "File daemon \"%s\" rejected Job command: %s\n" msgstr "" -#: src/lib/rwlock.c:517 src/lib/save/devlock.c:581 src/lib/devlock.c:581 +#: src/dird/fd_cmds.c:138 #, c-format -msgid "data %02d: value %d, %d writes\n" +msgid "Error updating Client record. ERR=%s\n" msgstr "" -#: src/lib/rwlock.c:522 src/lib/save/devlock.c:586 src/lib/devlock.c:586 +#: src/dird/fd_cmds.c:143 #, c-format -msgid "Total: %d thread writes, %d data writes\n" +msgid "FD gave bad response to JobId command: %s\n" msgstr "" -#: src/lib/rwlock.c:594 src/lib/save/devlock.c:658 src/lib/devlock.c:658 -msgid "Try write lock" +#: src/dird/fd_cmds.c:172 src/dird/fd_cmds.c:260 +msgid ", since=" msgstr "" -#: src/lib/rwlock.c:600 src/lib/save/devlock.c:664 src/lib/devlock.c:664 -msgid "Try read lock" +#: src/dird/fd_cmds.c:237 +msgid "No prior or suitable Full backup found in catalog. Doing FULL backup.\n" msgstr "" -#: src/lib/rwlock.c:656 src/lib/save/devlock.c:720 src/lib/devlock.c:720 -msgid "Create thread" +#: src/dird/fd_cmds.c:238 src/dird/fd_cmds.c:244 src/dird/fd_cmds.c:253 +#, c-format +msgid " (upgraded from %s)" msgstr "" -#: src/lib/rwlock.c:666 src/lib/save/devlock.c:730 src/lib/devlock.c:730 -msgid "Join thread" +#: src/dird/fd_cmds.c:243 +msgid "" +"No prior or suitable Differential backup found in catalog. Doing " +"Differential backup.\n" msgstr "" -#: src/lib/rwlock.c:668 src/lib/save/devlock.c:732 src/lib/devlock.c:732 +#: src/dird/fd_cmds.c:251 #, c-format -msgid "%02d: interval %d, updates %d, r_collisions %d, w_collisions %d\n" +msgid "Prior failed job found in catalog. Upgrading to %s.\n" msgstr "" -#: src/lib/rwlock.c:680 src/lib/save/devlock.c:744 src/lib/devlock.c:744 +#: src/dird/fd_cmds.c:329 #, c-format -msgid "data %02d: value %d, %d updates\n" +msgid "Unimplemented backup level %d %c\n" msgstr "" -#: src/lib/bget_msg.c:97 -msgid "Status OK\n" +#: src/dird/fd_cmds.c:402 +msgid "" +"FD compression disabled for this Job because AllowCompress=No in Storage " +"resource.\n" msgstr "" -#: src/lib/bget_msg.c:101 +#: src/dird/fd_cmds.c:501 src/filed/job.c:1014 #, c-format -msgid "bget_msg: unknown signal %d\n" +msgid "Cannot run program: %s. ERR=%s\n" msgstr "" -#: src/lib/bsock.c:131 -#, c-format -msgid "" -"Could not connect to %s on %s:%d. ERR=%s\n" -"Retrying ...\n" +#: src/dird/fd_cmds.c:512 src/dird/fd_cmds.c:537 src/dird/fd_cmds.c:551 +msgid ">filed: write error on socket\n" msgstr "" -#: src/lib/bsock.c:137 +#: src/dird/fd_cmds.c:518 #, c-format -msgid "Unable to connect to %s on %s:%d. ERR=%s\n" +msgid "Error running program: %s. ERR=%s\n" msgstr "" -#: src/lib/bsock.c:207 +#: src/dird/fd_cmds.c:527 #, c-format -msgid "bnet_host2ipaddrs() for host \"%s\" failed: ERR=%s\n" +msgid "Cannot open included file: %s. ERR=%s\n" msgstr "" -#: src/lib/bsock.c:260 +#: src/dird/fd_cmds.c:672 #, c-format -msgid "Socket open error. proto=%d port=%d. ERR=%s\n" +msgid "Client \"%s\" RunScript failed.\n" msgstr "" -#: src/lib/bsock.c:273 +#: src/dird/fd_cmds.c:695 #, c-format -msgid "Source address bind error. proto=%d. ERR=%s\n" +msgid "" +"Client \"%s\" may not be used to restore this job. Please upgrade your " +"client.\n" msgstr "" -#: src/lib/bsock.c:284 src/lib/bsock.c:320 src/lib/bnet_server.c:218 -#, c-format -msgid "Cannot set SO_KEEPALIVE on socket: %s\n" +#: src/dird/fd_cmds.c:776 +msgid "RestoreObject failed.\n" msgstr "" -#: src/lib/bsock.c:292 +#: src/dird/fd_cmds.c:816 #, c-format -msgid "Cannot set TCP_KEEPIDLE on socket: %s\n" +msgid "" +" %s\n" msgstr "" -#: src/lib/crypto.c:643 -msgid "OpenSSL digest initialization failed" +#: src/dird/ua_run.c:1132 +msgid "Cannot use your regexp.\n" msgstr "" -#: src/lib/crypto.c:657 -msgid "OpenSSL digest update failed" +#: src/dird/ua_run.c:1145 src/dird/ua_run.c:1175 +msgid "Levels:\n" msgstr "" -#: src/lib/crypto.c:675 -msgid "OpenSSL digest finalize failed" +#: src/dird/ua_run.c:1151 +msgid "VirtualFull" msgstr "" -#: src/lib/crypto.c:773 -msgid "OpenSSL digest_new failed" +#: src/dird/ua_run.c:1152 src/dird/ua_run.c:1181 +msgid "Select level" msgstr "" -#: src/lib/crypto.c:779 -msgid "OpenSSL sign get digest failed" +#: src/dird/ua_run.c:1176 +msgid "Initialize Catalog" msgstr "" -#: src/lib/crypto.c:818 src/lib/crypto.c:822 -msgid "OpenSSL digest Verify final failed" +#: src/dird/ua_run.c:1180 +msgid "Verify Volume Data (not yet implemented)" msgstr "" -#: src/lib/crypto.c:827 -msgid "No signers found for crypto verify.\n" +#: src/dird/ua_run.c:1201 +msgid "Level not appropriate for this Job. Cannot be changed.\n" msgstr "" -#: src/lib/crypto.c:888 -msgid "Signature creation failed" +#: src/dird/ua_run.c:1232 +#, c-format +msgid "" +"Run Admin Job\n" +"JobName: %s\n" +"FileSet: %s\n" +"Client: %s\n" +"Storage: %s\n" +"When: %s\n" +"Priority: %d\n" msgstr "" -#: src/lib/crypto.c:966 -msgid "Signature decoding failed" +#: src/dird/ua_run.c:1286 +#, c-format +msgid "" +"Run Backup job\n" +"JobName: %s\n" +"Level: %s\n" +"Client: %s\n" +"FileSet: %s\n" +"Pool: %s (From %s)\n" +"%sStorage: %s (From %s)\n" +"When: %s\n" +"Priority: %d\n" msgstr "" -#: src/lib/crypto.c:1043 -msgid "Unsupported cipher type specified\n" +#: src/dird/ua_run.c:1315 +#, c-format +msgid "Could not get job record for selected JobId. ERR=%s" msgstr "" -#: src/lib/crypto.c:1192 -msgid "CryptoData decoding failed" +#: src/dird/ua_run.c:1354 +#, c-format +msgid "" +"Run Verify Job\n" +"JobName: %s\n" +"Level: %s\n" +"Client: %s\n" +"FileSet: %s\n" +"Pool: %s (From %s)\n" +"Storage: %s (From %s)\n" +"Verify Job: %s\n" +"Verify List: %s\n" +"When: %s\n" +"Priority: %d\n" msgstr "" -#: src/lib/crypto.c:1236 -msgid "Failure decrypting the session key" +#: src/dird/ua_run.c:1383 +msgid "Please enter a JobId for restore: " msgstr "" -#: src/lib/crypto.c:1287 +#: src/dird/ua_run.c:1421 #, c-format -msgid "Unsupported contentEncryptionAlgorithm: %d\n" +msgid "" +"Run Restore job\n" +"JobName: %s\n" +"Bootstrap: %s\n" +"RegexWhere: %s\n" +"Replace: %s\n" +"FileSet: %s\n" +"Backup Client: %s\n" +"Restore Client: %s\n" +"Storage: %s\n" +"When: %s\n" +"Catalog: %s\n" +"Priority: %d\n" msgstr "" -#: src/lib/crypto.c:1297 src/lib/crypto.c:1303 -msgid "OpenSSL cipher context initialization failed" +#: src/dird/ua_run.c:1473 +#, c-format +msgid "" +"Run Restore job\n" +"JobName: %s\n" +"Bootstrap: %s\n" +"Where: %s\n" +"Replace: %s\n" +"FileSet: %s\n" +"Backup Client: %s\n" +"Restore Client: %s\n" +"Storage: %s\n" +"When: %s\n" +"Catalog: %s\n" +"Priority: %d\n" msgstr "" -#: src/lib/crypto.c:1310 -msgid "Encryption session provided an invalid symmetric key" +#: src/dird/ua_run.c:1502 +#, c-format +msgid "" +"Run Restore job\n" +"JobName: %s\n" +"Bootstrap: %s\n" msgstr "" -#: src/lib/crypto.c:1316 -msgid "Encryption session provided an invalid IV" +#: src/dird/ua_run.c:1510 +#, c-format +msgid "RegexWhere: %s\n" msgstr "" -#: src/lib/crypto.c:1322 -msgid "OpenSSL cipher context key/IV initialization failed" +#: src/dird/ua_run.c:1513 +#, c-format +msgid "Where: %s\n" msgstr "" -#: src/lib/crypto.c:1392 +#: src/dird/ua_run.c:1517 #, c-format -msgid "Unable to init OpenSSL threading: ERR=%s\n" +msgid "" +"Replace: %s\n" +"Client: %s\n" +"Storage: %s\n" +"JobId: %s\n" +"When: %s\n" +"Catalog: %s\n" +"Priority: %d\n" msgstr "" -#: src/lib/crypto.c:1405 -msgid "Failed to seed OpenSSL PRNG\n" +#: src/dird/ua_run.c:1572 +msgid "Run Copy job\n" msgstr "" -#: src/lib/crypto.c:1431 -msgid "Failed to save OpenSSL PRNG\n" +#: src/dird/ua_run.c:1574 +msgid "Run Migration job\n" msgstr "" -#: src/lib/crypto.c:1492 +#: src/dird/ua_run.c:1606 #, c-format -msgid "Unsupported digest type=%d specified\n" +msgid "Unknown Job Type=%d\n" msgstr "" -#: src/lib/crypto.c:1512 +#: src/dird/ua_run.c:1680 #, c-format -msgid "SHA1Update() returned an error: %d\n" +msgid "Value missing for keyword %s\n" msgstr "" -#: src/lib/crypto.c:1655 -msgid "No error" +#: src/dird/ua_run.c:1690 +msgid "JobId specified twice.\n" msgstr "" -#: src/lib/crypto.c:1657 -msgid "Signer not found" +#: src/dird/ua_run.c:1699 src/dird/ua_run.c:1839 +msgid "Client specified twice.\n" msgstr "" -#: src/lib/crypto.c:1659 -msgid "Recipient not found" +#: src/dird/ua_run.c:1707 +msgid "FileSet specified twice.\n" msgstr "" -#: src/lib/crypto.c:1661 -msgid "Unsupported digest algorithm" +#: src/dird/ua_run.c:1715 +msgid "Level specified twice.\n" msgstr "" -#: src/lib/crypto.c:1663 -msgid "Unsupported encryption algorithm" +#: src/dird/ua_run.c:1724 +msgid "Storage specified twice.\n" msgstr "" -#: src/lib/crypto.c:1665 -msgid "Signature is invalid" +#: src/dird/ua_run.c:1732 +msgid "RegexWhere or Where specified twice.\n" msgstr "" -#: src/lib/crypto.c:1667 -msgid "Decryption error" +#: src/dird/ua_run.c:1737 +msgid "No authorization for \"regexwhere\" specification.\n" msgstr "" -#: src/lib/crypto.c:1670 -msgid "Internal error" +#: src/dird/ua_run.c:1744 +msgid "Where or RegexWhere specified twice.\n" msgstr "" -#: src/lib/crypto.c:1672 -msgid "Unknown error" +#: src/dird/ua_run.c:1749 +msgid "No authoriztion for \"where\" specification.\n" msgstr "" -#: src/lib/cram-md5.c:109 src/lib/cram-md5.c:137 -msgid "1999 Authorization failed.\n" +#: src/dird/ua_run.c:1756 +msgid "Bootstrap specified twice.\n" msgstr "" -#: src/lib/priv.c:68 -#, c-format -msgid "Could not find userid=%s: ERR=%s\n" +#: src/dird/ua_run.c:1764 +msgid "Replace specified twice.\n" msgstr "" -#: src/lib/priv.c:74 -#, c-format -msgid "Could not find password entry. ERR=%s\n" +#: src/dird/ua_run.c:1772 +msgid "When specified twice.\n" msgstr "" -#: src/lib/priv.c:87 -#, c-format -msgid "Could not find group=%s: ERR=%s\n" +#: src/dird/ua_run.c:1780 +msgid "Priority specified twice.\n" msgstr "" -#: src/lib/priv.c:95 -#, c-format -msgid "Could not initgroups for group=%s, userid=%s: ERR=%s\n" +#: src/dird/ua_run.c:1785 +msgid "Priority must be positive nonzero setting it to 10.\n" msgstr "" -#: src/lib/priv.c:98 -#, c-format -msgid "Could not initgroups for userid=%s: ERR=%s\n" +#: src/dird/ua_run.c:1795 +msgid "Verify Job specified twice.\n" msgstr "" -#: src/lib/priv.c:105 -#, c-format -msgid "Could not set group=%s: ERR=%s\n" +#: src/dird/ua_run.c:1823 +msgid "Migration Job specified twice.\n" msgstr "" -#: src/lib/priv.c:115 -#, c-format -msgid "prctl failed: ERR=%s\n" +#: src/dird/ua_run.c:1831 +msgid "Pool specified twice.\n" msgstr "" -#: src/lib/priv.c:119 -#, c-format -msgid "setreuid failed: ERR=%s\n" +#: src/dird/ua_run.c:1847 +msgid "Restore Client specified twice.\n" msgstr "" -#: src/lib/priv.c:123 -#, c-format -msgid "cap_from_text failed: ERR=%s\n" +#: src/dird/ua_run.c:1854 +msgid "Plugin Options not yet implemented.\n" msgstr "" -#: src/lib/priv.c:127 -#, c-format -msgid "cap_set_proc failed: ERR=%s\n" +#: src/dird/ua_run.c:1857 +msgid "Plugin Options specified twice.\n" msgstr "" -#: src/lib/priv.c:131 -msgid "Keep readall caps not implemented this OS or missing libraries.\n" +#: src/dird/ua_run.c:1862 +msgid "No authoriztion for \"PluginOptions\" specification.\n" msgstr "" -#: src/lib/priv.c:135 -#, c-format -msgid "Could not set specified userid: %s\n" +#: src/dird/ua_run.c:1869 +msgid "Spool flag specified twice.\n" msgstr "" -#: src/lib/openssl.c:143 src/lib/openssl.c:214 -#, c-format -msgid "Unable to destroy mutex: ERR=%s\n" +#: src/dird/ua_run.c:1876 +msgid "Invalid spooldata flag.\n" +msgstr "" + +#: src/dird/ua_run.c:1885 +msgid "IgnoreDuplicateCheck flag specified twice.\n" msgstr "" -#: src/lib/util.c:183 -msgid "Running" +#: src/dird/ua_run.c:1892 +msgid "Invalid ignoreduplicatecheck flag.\n" msgstr "" -#: src/lib/util.c:186 -msgid "Blocked" +#: src/dird/ua_run.c:1897 +msgid "Accurate flag specified twice.\n" msgstr "" -#: src/lib/util.c:192 -msgid "Error: incomplete job" +#: src/dird/ua_run.c:1904 +msgid "Invalid accurate flag.\n" msgstr "" -#: src/lib/util.c:199 -msgid "Non-fatal error" +#: src/dird/ua_run.c:1909 +msgid "Job name specified twice.\n" msgstr "" -#: src/lib/util.c:205 src/lib/util.c:337 -msgid "Canceled" +#: src/dird/ua_run.c:1917 +msgid "Media Type specified twice.\n" msgstr "" -#: src/lib/util.c:208 -msgid "Verify differences" +#: src/dird/ua_run.c:1925 +msgid "NextPool specified twice.\n" msgstr "" -#: src/lib/util.c:211 -msgid "Waiting on FD" +#: src/dird/ua_run.c:1950 +#, c-format +msgid "Invalid keyword: %s\n" msgstr "" -#: src/lib/util.c:214 -msgid "Wait on SD" +#: src/dird/ua_run.c:1965 +#, c-format +msgid "Catalog \"%s\" not found\n" msgstr "" -#: src/lib/util.c:217 -msgid "Wait for new Volume" +#: src/dird/ua_run.c:1969 +#, c-format +msgid "No authorization. Catalog \"%s\".\n" msgstr "" -#: src/lib/util.c:220 -msgid "Waiting for mount" +#: src/dird/ua_run.c:2003 +#, c-format +msgid "Verify Job \"%s\" not found.\n" msgstr "" -#: src/lib/util.c:223 -msgid "Waiting for Storage resource" +#: src/dird/ua_run.c:2013 +#, c-format +msgid "Migration Job \"%s\" not found.\n" msgstr "" -#: src/lib/util.c:226 -msgid "Waiting for Job resource" +#: src/dird/ua_label.c:92 +msgid "Negative numbers not permitted\n" msgstr "" -#: src/lib/util.c:229 -msgid "Waiting for Client resource" +#: src/dird/ua_label.c:121 +msgid "Values must be be greater than zero.\n" msgstr "" -#: src/lib/util.c:232 -msgid "Waiting on Max Jobs" +#: src/dird/ua_label.c:125 +msgid "Slot too large.\n" msgstr "" -#: src/lib/util.c:235 -msgid "Waiting for Start Time" +#: src/dird/ua_label.c:195 src/dird/ua_label.c:518 src/dird/ua_label.c:1198 +msgid "No slots in changer to scan.\n" msgstr "" -#: src/lib/util.c:238 -msgid "Waiting on Priority" +#: src/dird/ua_label.c:207 src/dird/ua_label.c:529 +msgid "No Volumes found to label, or no barcodes.\n" msgstr "" -#: src/lib/util.c:257 +#: src/dird/ua_label.c:217 src/dird/ua_label.c:1219 #, c-format -msgid "Unknown Job termination status=%d" +msgid "Slot %d greater than max %d ignored.\n" msgstr "" -#: src/lib/util.c:273 -msgid "Completed successfully" +#: src/dird/ua_label.c:255 +#, c-format +msgid "No VolName for Slot=%d InChanger set to zero.\n" msgstr "" -#: src/lib/util.c:276 -msgid "Completed with warnings" +#: src/dird/ua_label.c:276 +#, c-format +msgid "Catalog record for Volume \"%s\" updated to reference slot %d.\n" msgstr "" -#: src/lib/util.c:279 -msgid "Terminated with errors" +#: src/dird/ua_label.c:280 +#, c-format +msgid "Catalog record for Volume \"%s\" is up to date.\n" msgstr "" -#: src/lib/util.c:282 -msgid "Fatal error" +#: src/dird/ua_label.c:286 +#, c-format +msgid "Volume \"%s\" not found in catalog. Slot=%d InChanger set to zero.\n" msgstr "" -#: src/lib/util.c:285 -msgid "Created, not yet running" +#: src/dird/ua_label.c:383 +#, c-format +msgid "" +"Volume \"%s\" has VolStatus %s. It must be Purged or Recycled before " +"relabeling.\n" msgstr "" -#: src/lib/util.c:288 -msgid "Canceled by user" +#: src/dird/ua_label.c:399 +msgid "Enter new Volume name: " msgstr "" -#: src/lib/util.c:291 -msgid "Verify found differences" +#: src/dird/ua_label.c:412 +#, c-format +msgid "Media record for new Volume \"%s\" already exists.\n" msgstr "" -#: src/lib/util.c:294 -msgid "Waiting for File daemon" +#: src/dird/ua_label.c:430 +msgid "Enter slot (0 or Enter for none): " msgstr "" -#: src/lib/util.c:297 -msgid "Waiting for Storage daemon" +#: src/dird/ua_label.c:458 +#, c-format +msgid "Delete of Volume \"%s\" failed. ERR=%s" msgstr "" -#: src/lib/util.c:300 -msgid "Waiting for higher priority jobs" +#: src/dird/ua_label.c:461 +#, c-format +msgid "Old volume \"%s\" deleted from catalog.\n" msgstr "" -#: src/lib/util.c:303 -msgid "Batch inserting file records" +#: src/dird/ua_label.c:472 +#, c-format +msgid "Requesting to mount %s ...\n" msgstr "" -#: src/lib/util.c:334 -msgid "Fatal Error" +#: src/dird/ua_label.c:494 +msgid "Do not forget to mount the drive!!!\n" msgstr "" -#: src/lib/util.c:340 -msgid "Differences" +#: src/dird/ua_label.c:534 +msgid "" +"The following Volumes will be labeled:\n" +"Slot Volume\n" +"==============\n" msgstr "" -#: src/lib/util.c:343 -msgid "Unknown term code" +#: src/dird/ua_label.c:543 +msgid "Do you want to label these Volumes? (yes|no): " msgstr "" -#: src/lib/util.c:359 src/lib/jcr.c:232 -msgid "Backup" +#: src/dird/ua_label.c:563 +#, c-format +msgid "Media record for Slot %d Volume \"%s\" already exists.\n" msgstr "" -#: src/lib/util.c:362 -msgid "Migrated Job" +#: src/dird/ua_label.c:569 +#, c-format +msgid "Error setting InChanger: ERR=%s" msgstr "" -#: src/lib/util.c:365 -msgid "Verify" +#: src/dird/ua_label.c:592 +#, c-format +msgid "Maximum pool Volumes=%d reached.\n" msgstr "" -#: src/lib/util.c:368 src/wx-console/wxbrestorepanel.cpp:404 -#: src/wx-console/wxbrestorepanel.cpp:2000 -msgid "Restore" +#: src/dird/ua_label.c:600 +#, c-format +msgid "Catalog record for cleaning tape \"%s\" successfully created.\n" msgstr "" -#: src/lib/util.c:371 src/wx-console/wxbmainframe.cpp:276 -msgid "Console" +#: src/dird/ua_label.c:607 +#, c-format +msgid "Catalog error on cleaning tape: %s" msgstr "" -#: src/lib/util.c:374 -msgid "System or Console" +#: src/dird/ua_label.c:643 +#, c-format +msgid "Illegal character \"%c\" in a volume name.\n" msgstr "" -#: src/lib/util.c:377 -msgid "Admin" +#: src/dird/ua_label.c:650 src/dird/ua_cmds.c:341 +msgid "Volume name too long.\n" msgstr "" -#: src/lib/util.c:380 src/lib/util.c:470 -msgid "Archive" +#: src/dird/ua_label.c:690 +#, c-format +msgid "Sending relabel command from \"%s\" to \"%s\" ...\n" msgstr "" -#: src/lib/util.c:383 -msgid "Job Copy" +#: src/dird/ua_label.c:697 +#, c-format +msgid "Sending label command for Volume \"%s\" Slot %d ...\n" msgstr "" -#: src/lib/util.c:386 -msgid "Copy" +#: src/dird/ua_label.c:738 +#, c-format +msgid "Catalog record for Volume \"%s\", Slot %d successfully created.\n" msgstr "" -#: src/lib/util.c:389 -msgid "Migrate" +#: src/dird/ua_label.c:751 +#, c-format +msgid "Label command failed for Volume %s.\n" msgstr "" -#: src/lib/util.c:392 -msgid "Scan" +#: src/dird/ua_label.c:765 +msgid "Could not open SD socket.\n" msgstr "" -#: src/lib/util.c:396 -msgid "Unknown Type" +#: src/dird/ua_label.c:837 src/dird/ua_label.c:847 +#, c-format +msgid "Invalid Slot number: %s\n" msgstr "" -#: src/lib/util.c:406 -msgid "Truncate" +#: src/dird/ua_label.c:856 +#, c-format +msgid "Invalid Volume name: %s\n" msgstr "" -#: src/lib/util.c:409 src/filed/restore.c:1164 -msgid "None" +#: src/dird/ua_label.c:950 +#, c-format +msgid "Device \"%s\" has %d slots.\n" msgstr "" -#: src/lib/util.c:441 -msgid "Verify Init Catalog" +#: src/dird/ua_label.c:996 +#, c-format +msgid "Pool \"%s\" resource not found for volume \"%s\"!\n" msgstr "" -#: src/lib/util.c:450 -msgid "Verify Data" +#: src/dird/ua_label.c:1210 +msgid "No Volumes found, or no barcodes.\n" msgstr "" -#: src/lib/util.c:453 -msgid "Virtual Full" +#: src/dird/ua_label.c:1213 +msgid "" +" Slot | Volume Name | Status | Media Type | " +"Pool |\n" msgstr "" -#: src/lib/util.c:469 -msgid "Append" +#: src/dird/ua_label.c:1214 +msgid "" +"------+------------------+-----------+----------------------" +"+--------------------|\n" msgstr "" -#: src/lib/util.c:471 -msgid "Disabled" +#: src/dird/ua_cmds.c:95 +msgid "Add media to a pool" msgstr "" -#: src/lib/util.c:473 -msgid "Used" +#: src/dird/ua_cmds.c:96 +msgid "Autodisplay console messages" msgstr "" -#: src/lib/util.c:474 -msgid "Cleaning" +#: src/dird/ua_cmds.c:97 +msgid "Automount after label" msgstr "" -#: src/lib/util.c:475 -msgid "Purged" +#: src/dird/ua_cmds.c:98 +msgid "Cancel a job" msgstr "" -#: src/lib/util.c:476 -msgid "Recycle" +#: src/dird/ua_cmds.c:99 +msgid "Create DB Pool from resource" msgstr "" -#: src/lib/util.c:477 -msgid "Read-Only" +#: src/dird/ua_cmds.c:100 +msgid "Delete volume, pool or job" msgstr "" -#: src/lib/util.c:489 -msgid "Invalid volume status" +#: src/dird/ua_cmds.c:101 +msgid "Disable a job, attributes batch process" msgstr "" -#: src/lib/util.c:753 src/lib/util.c:763 src/lib/util.c:771 src/lib/util.c:778 -#: src/lib/util.c:785 src/lib/util.c:799 src/lib/util.c:809 src/lib/util.c:822 -#: src/lib/util.c:833 src/filed/restore.c:1180 -msgid "*none*" +#: src/dird/ua_cmds.c:102 +msgid "Enable a job, attributes batch process" msgstr "" -#: src/lib/util.c:867 -msgid "Working directory not defined. Cannot continue.\n" +#: src/dird/ua_cmds.c:103 +msgid "Performs FileSet estimate, listing gives full listing" msgstr "" -#: src/lib/util.c:870 -#, c-format -msgid "Working Directory: \"%s\" not found. Cannot continue.\n" +#: src/dird/ua_cmds.c:106 src/dird/ua_cmds.c:130 +msgid "Terminate Bconsole session" msgstr "" -#: src/lib/util.c:874 -#, c-format -msgid "Working Directory: \"%s\" is not a directory. Cannot continue.\n" +#: src/dird/ua_cmds.c:107 +msgid "Non-interactive gui mode" msgstr "" -#: src/lib/save/devlock.c:330 src/lib/devlock.c:330 -msgid "writeunlock called too many times.\n" +#: src/dird/ua_cmds.c:108 +msgid "Print help on specific command" msgstr "" -#: src/lib/save/devlock.c:335 src/lib/devlock.c:335 -msgid "writeunlock by non-owner.\n" +#: src/dird/ua_cmds.c:113 +msgid "Label a tape" msgstr "" -#: src/lib/daemon.c:65 -#, c-format -msgid "Cannot fork to become daemon: ERR=%s\n" +#: src/dird/ua_cmds.c:114 +msgid "List objects from catalog" msgstr "" -#: src/lib/tls.c:90 -#, c-format -msgid "" -"Error with certificate at depth: %d, issuer = %s, subject = %s, ERR=%d:%s\n" +#: src/dird/ua_cmds.c:118 +msgid "Full or long list like list command" msgstr "" -#: src/lib/tls.c:127 -msgid "Error initializing SSL context" +#: src/dird/ua_cmds.c:121 +msgid "Display pending messages" msgstr "" -#: src/lib/tls.c:148 -msgid "Error loading certificate verification stores" +#: src/dird/ua_cmds.c:122 +msgid "Print current memory usage" msgstr "" -#: src/lib/tls.c:153 -msgid "" -"Either a certificate file or a directory must be specified as a verification " -"store\n" +#: src/dird/ua_cmds.c:123 +msgid "Mount storage" msgstr "" -#: src/lib/tls.c:164 -msgid "Error loading certificate file" +#: src/dird/ua_cmds.c:126 +msgid "Prune expired records from catalog" msgstr "" -#: src/lib/tls.c:172 -msgid "Error loading private key" +#: src/dird/ua_cmds.c:129 +msgid "Purge records from catalog" msgstr "" -#: src/lib/tls.c:180 -msgid "Unable to open DH parameters file" +#: src/dird/ua_cmds.c:131 +msgid "Query catalog" msgstr "" -#: src/lib/tls.c:186 -msgid "Unable to load DH parameters from specified file" +#: src/dird/ua_cmds.c:132 +msgid "Restore files" msgstr "" -#: src/lib/tls.c:190 -msgid "Failed to set TLS Diffie-Hellman parameters" +#: src/dird/ua_cmds.c:137 +msgid "Relabel a tape" msgstr "" -#: src/lib/tls.c:200 -msgid "Error setting cipher list, no valid ciphers available\n" +#: src/dird/ua_cmds.c:140 +msgid "Release storage" msgstr "" -#: src/lib/tls.c:259 -msgid "Peer failed to present a TLS certificate\n" +#: src/dird/ua_cmds.c:141 +msgid "Reload conf file" msgstr "" -#: src/lib/tls.c:304 -#, c-format -msgid "Peer %s failed to present a TLS certificate\n" +#: src/dird/ua_cmds.c:142 +msgid "Run a job" msgstr "" -#: src/lib/tls.c:416 -msgid "Error creating file descriptor-based BIO" +#: src/dird/ua_cmds.c:147 +msgid "Report status" msgstr "" -#: src/lib/tls.c:427 -msgid "Error creating new SSL object" -msgstr "" +#: src/dird/ua_cmds.c:150 +#, fuzzy +msgid "Stop a job" +msgstr "Uitvoeren herstel opdracht" -#: src/lib/tls.c:491 src/lib/tls.c:514 -msgid "Connect failure" +#: src/dird/ua_cmds.c:151 +msgid "Sets debug level" msgstr "" -#: src/lib/tls.c:594 src/lib/tls.c:598 -msgid "TLS shutdown failure." +#: src/dird/ua_cmds.c:154 +msgid "Sets bandwidth" msgstr "" -#: src/lib/tls.c:653 src/lib/tls.c:679 -msgid "TLS read/write failure." +#: src/dird/ua_cmds.c:157 +msgid "Sets new client address -- if authorized" msgstr "" -#: src/lib/jcr.c:234 -msgid "Verifying" +#: src/dird/ua_cmds.c:158 +msgid "Show resource records" msgstr "" -#: src/lib/jcr.c:236 -msgid "Restoring" +#: src/dird/ua_cmds.c:161 +msgid "Use SQL to query catalog" msgstr "" -#: src/lib/jcr.c:238 -msgid "Archiving" +#: src/dird/ua_cmds.c:162 +msgid "Print current time" msgstr "" -#: src/lib/jcr.c:240 -msgid "Copying" +#: src/dird/ua_cmds.c:163 +msgid "Turn on/off trace to file" msgstr "" -#: src/lib/jcr.c:242 -msgid "Migration" +#: src/dird/ua_cmds.c:164 +msgid "Truncate one or more Volumes" msgstr "" -#: src/lib/jcr.c:244 -msgid "Scanning" +#: src/dird/ua_cmds.c:165 +msgid "Unmount storage" msgstr "" -#: src/lib/jcr.c:246 -msgid "Unknown operation" +#: src/dird/ua_cmds.c:168 +msgid "Umount - for old-time Unix guys, see unmount" msgstr "" -#: src/lib/jcr.c:255 -msgid "backup" +#: src/dird/ua_cmds.c:171 +msgid "Update volume, pool or stats" msgstr "" - -#: src/lib/jcr.c:257 -msgid "verified" + +#: src/dird/ua_cmds.c:178 +msgid "Use catalog xxx" msgstr "" -#: src/lib/jcr.c:257 -msgid "verify" +#: src/dird/ua_cmds.c:179 +msgid "Does variable expansion" msgstr "" -#: src/lib/jcr.c:259 -msgid "restored" +#: src/dird/ua_cmds.c:180 +msgid "Print Director version" msgstr "" -#: src/lib/jcr.c:259 -msgid "restore" +#: src/dird/ua_cmds.c:181 +msgid "Wait until no jobs are running" msgstr "" -#: src/lib/jcr.c:261 -msgid "archived" +#: src/dird/ua_cmds.c:234 +#, c-format +msgid "%s: is an invalid command.\n" msgstr "" -#: src/lib/jcr.c:261 -msgid "archive" +#: src/dird/ua_cmds.c:275 +msgid "" +"You probably don't want to be using this command since it\n" +"creates database records without labeling the Volumes.\n" +"You probably want to use the \"label\" command.\n" +"\n" msgstr "" -#: src/lib/jcr.c:263 -msgid "copied" +#: src/dird/ua_cmds.c:293 +#, c-format +msgid "Pool already has maximum volumes=%d\n" msgstr "" -#: src/lib/jcr.c:263 -msgid "copy" +#: src/dird/ua_cmds.c:294 +msgid "Enter new maximum (zero for unlimited): " msgstr "" -#: src/lib/jcr.c:265 -msgid "migrated" +#: src/dird/ua_cmds.c:314 +#, c-format +msgid "Enter number of Volumes to create. 0=>fixed name. Max=%d: " msgstr "" -#: src/lib/jcr.c:265 -msgid "migrate" +#: src/dird/ua_cmds.c:320 +#, c-format +msgid "The number must be between 0 and %d\n" msgstr "" -#: src/lib/jcr.c:267 -msgid "scanned" +#: src/dird/ua_cmds.c:328 +msgid "Enter Volume name: " msgstr "" -#: src/lib/jcr.c:267 -msgid "scan" +#: src/dird/ua_cmds.c:332 +msgid "Enter base volume name: " msgstr "" -#: src/lib/jcr.c:269 -msgid "unknown action" +#: src/dird/ua_cmds.c:356 +msgid "Enter the starting number: " msgstr "" -#: src/lib/jcr.c:343 -#, c-format -msgid "pthread_once failed. ERR=%s\n" +#: src/dird/ua_cmds.c:361 +msgid "Start number must be greater than zero.\n" msgstr "" -#: src/lib/jcr.c:350 -#, c-format -msgid "Could not init msg_queue mutex. ERR=%s\n" +#: src/dird/ua_cmds.c:372 +msgid "Enter slot (0 for none): " msgstr "" -#: src/lib/jcr.c:403 -msgid "NULL jcr.\n" +#: src/dird/ua_cmds.c:376 +msgid "InChanger? yes/no: " msgstr "" -#: src/lib/jcr.c:509 +#: src/dird/ua_cmds.c:404 #, c-format -msgid "JCR use_count=%d JobId=%d\n" +msgid "%d Volumes created in pool %s\n" msgstr "" -#: src/lib/jcr.c:619 -#, c-format -msgid "pthread_setspecific failed: ERR=%s\n" +#: src/dird/ua_cmds.c:420 src/dird/ua_cmds.c:1131 +msgid "Turn on or off? " msgstr "" -#: src/lib/jcr.c:1103 +#: src/dird/ua_cmds.c:547 #, c-format msgid "" -"Watchdog sending kill after %d secs to thread stalled reading Storage " -"daemon.\n" +"Can't set %s RecyclePool to %s, %s is not in database.\n" +"Try to update it with 'update pool=%s'\n" msgstr "" -#: src/lib/jcr.c:1115 +#: src/dird/ua_cmds.c:565 #, c-format msgid "" -"Watchdog sending kill after %d secs to thread stalled reading File daemon.\n" +"Can't set %s ScratchPool to %s, %s is not in database.\n" +"Try to update it with 'update pool=%s'\n" msgstr "" -#: src/lib/jcr.c:1127 +#: src/dird/ua_cmds.c:632 #, c-format msgid "" -"Watchdog sending kill after %d secs to thread stalled reading Director.\n" +"Error: Pool %s already exists.\n" +"Use update to change it.\n" msgstr "" -#: src/lib/res.c:65 +#: src/dird/ua_cmds.c:643 #, c-format -msgid "rwl_writelock failure at %s:%d: ERR=%s\n" +msgid "Pool %s created.\n" msgstr "" -#: src/lib/res.c:75 +#: src/dird/ua_cmds.c:671 +#, fuzzy +msgid "Failed to set bandwidth limit to Client.\n" +msgstr "Kan de geselecteerde client niet vinden." + +#: src/dird/ua_cmds.c:674 #, c-format -msgid "rwl_writeunlock failure at %s:%d:. ERR=%s\n" +msgid "2000 OK Limiting bandwidth to %lldkb/s %s\n" msgstr "" -#: src/lib/parse_conf.c:177 -msgid "***UNKNOWN***" +#: src/dird/ua_cmds.c:675 +msgid "on running and future jobs" msgstr "" -#: src/lib/parse_conf.c:278 src/lib/parse_conf.c:299 -#, c-format -msgid "expected an =, got: %s" +#: src/dird/ua_cmds.c:697 +msgid "Set Bandwidth choice:\n" msgstr "" -#: src/lib/parse_conf.c:308 -#, c-format -msgid "Unknown item code: %d\n" +#: src/dird/ua_cmds.c:698 +msgid "Running Job" msgstr "" -#: src/lib/parse_conf.c:348 -#, c-format -msgid "message type: %s not found" +#: src/dird/ua_cmds.c:699 +msgid "Running and future Jobs for a Client" msgstr "" -#: src/lib/parse_conf.c:386 -#, c-format -msgid "Attempt to redefine name \"%s\" to \"%s\"." +#: src/dird/ua_cmds.c:700 +msgid "Choose where to limit the bandwidth" msgstr "" -#: src/lib/parse_conf.c:483 -#, c-format -msgid "Attempt to redefine resource \"%s\" referenced on line %d : %s\n" +#: src/dird/ua_cmds.c:712 +msgid "Enter new bandwidth limit kb/s: " msgstr "" -#: src/lib/parse_conf.c:519 -#, c-format -msgid "Too many %s directives. Max. is %d. line %d: %s\n" +#: src/dird/ua_cmds.c:749 src/dird/ua_cmds.c:809 +msgid "Unauthorized command from this console.\n" msgstr "" -#: src/lib/parse_conf.c:530 +#: src/dird/ua_cmds.c:766 #, c-format -msgid "Could not find config Resource \"%s\" referenced on line %d : %s\n" +msgid "Client \"%s\" address set to %s\n" msgstr "" -#: src/lib/parse_conf.c:593 +#: src/dird/ua_cmds.c:780 #, c-format -msgid "Missing config Resource \"%s\" referenced on line %d : %s\n" +msgid "Job Attributes Insertion %sabled\n" msgstr "" -#: src/lib/parse_conf.c:665 +#: src/dird/ua_cmds.c:813 #, c-format -msgid "expected a size number, got: %s" +msgid "Job \"%s\" %sabled\n" msgstr "" -#: src/lib/parse_conf.c:670 -#, c-format -msgid "expected a speed number, got: %s" +#: src/dird/ua_cmds.c:1005 +msgid "Enter new debug level: " msgstr "" -#: src/lib/parse_conf.c:681 +#: src/dird/ua_cmds.c:1018 #, c-format -msgid "expected a %s, got: %s" +msgid "Incorrect tags found on command line %s\n" msgstr "" -#: src/lib/parse_conf.c:682 -msgid "size" +#: src/dird/ua_cmds.c:1095 +msgid "All" msgstr "" -#: src/lib/parse_conf.c:682 -msgid "speed" +#: src/dird/ua_cmds.c:1096 +msgid "Select daemon type to set debug level" msgstr "" -#: src/lib/parse_conf.c:803 -#, c-format -msgid "Expected a Tape Label keyword, got: %s" +#: src/dird/ua_cmds.c:1191 +msgid "Client name missing.\n" msgstr "" -#: src/lib/parse_conf.c:886 +#: src/dird/ua_cmds.c:1203 src/dird/ua_cmds.c:1270 src/dird/ua_cmds.c:2016 #, c-format -msgid "Unable to initialize resource lock. ERR=%s\n" +msgid "No authorization for Job \"%s\"\n" msgstr "" -#: src/lib/parse_conf.c:894 -msgid "Config filename too long.\n" +#: src/dird/ua_cmds.c:1208 +msgid "Job name missing.\n" msgstr "" -#: src/lib/parse_conf.c:917 +#: src/dird/ua_cmds.c:1217 #, c-format -msgid "Cannot open config file \"%s\": %s\n" +msgid "Fileset \"%s\" not found.\n" msgstr "" -#: src/lib/parse_conf.c:934 -msgid "" -"Currently we cannot handle UTF-16 source files. Please convert the conf file " -"to UTF-8\n" +#: src/dird/ua_cmds.c:1221 +#, c-format +msgid "No authorization for FileSet \"%s\"\n" msgstr "" -#: src/lib/parse_conf.c:938 -#, c-format -msgid "Expected a Resource name identifier, got: %s" +#: src/dird/ua_cmds.c:1226 +msgid "Fileset name missing.\n" msgstr "" -#: src/lib/parse_conf.c:954 -#, c-format -msgid "expected resource name, got: %s" +#: src/dird/ua_cmds.c:1241 +msgid "Level value missing.\n" msgstr "" -#: src/lib/parse_conf.c:965 -#, c-format -msgid "not in resource definition: %s" +#: src/dird/ua_cmds.c:1248 +msgid "Invalid value for accurate. It must be yes or no.\n" msgstr "" -#: src/lib/parse_conf.c:990 -#, c-format -msgid "" -"Keyword \"%s\" not permitted in this resource.\n" -"Perhaps you left the trailing brace off of the previous resource." +#: src/dird/ua_cmds.c:1253 +msgid "Accurate value missing.\n" msgstr "" -#: src/lib/parse_conf.c:1001 -msgid "Name not specified for resource" +#: src/dird/ua_cmds.c:1266 +msgid "No job specified.\n" msgstr "" -#: src/lib/parse_conf.c:1011 -#, c-format -msgid "unexpected token %d %s in resource definition" +#: src/dird/ua_cmds.c:1326 +msgid "Error sending include list.\n" msgstr "" -#: src/lib/parse_conf.c:1017 -#, c-format -msgid "Unknown parser state %d\n" +#: src/dird/ua_cmds.c:1331 +msgid "Error sending exclude list.\n" msgstr "" -#: src/lib/parse_conf.c:1022 -msgid "End of conf file reached with unclosed resource." +#: src/dird/ua_cmds.c:1422 +msgid "" +"In general it is not a good idea to delete either a\n" +"Pool or a Volume since they may contain data.\n" +"\n" msgstr "" -#: src/lib/mem_pool.c:112 -#, c-format -msgid "MemPool index %d larger than max %d\n" +#: src/dird/ua_cmds.c:1425 +msgid "Choose catalog item to delete" msgstr "" -#: src/lib/mem_pool.c:130 src/lib/mem_pool.c:150 src/lib/mem_pool.c:186 -#: src/lib/mem_pool.c:257 src/lib/mem_pool.c:277 src/lib/mem_pool.c:312 -#: src/lib/mem_pool.c:623 -#, c-format -msgid "Out of memory requesting %d bytes\n" +#: src/dird/ua_cmds.c:1436 +msgid "Nothing done.\n" msgstr "" -#: src/lib/mem_pool.c:167 -msgid "obuf is NULL\n" +#: src/dird/ua_cmds.c:1464 +#, c-format +msgid "Are you sure you want to delete %d JobIds ? (yes/no): " msgstr "" -#: src/lib/berrno.c:63 -msgid "Child exited normally." +#: src/dird/ua_cmds.c:1474 +msgid "Enter JobId to delete: " msgstr "" -#: src/lib/berrno.c:70 -msgid "Unknown error during program execvp" +#: src/dird/ua_cmds.c:1492 +#, c-format +msgid "Jobid %s and associated records deleted from the catalog.\n" msgstr "" -#: src/lib/berrno.c:73 +#: src/dird/ua_cmds.c:1507 #, c-format -msgid "Child exited with code %d" +msgid "" +"\n" +"This command will delete volume %s\n" +"and all Jobs saved on that volume from the Catalog\n" msgstr "" -#: src/lib/berrno.c:81 +#: src/dird/ua_cmds.c:1514 #, c-format -msgid "Child died from signal %d: %s" +msgid "Are you sure you want to delete Volume \"%s\"? (yes/no): " msgstr "" -#: src/lib/berrno.c:87 -msgid "Invalid errno. No error message possible." +#: src/dird/ua_cmds.c:1527 +msgid "Can't list jobs on this volume\n" +msgstr "" + +#: src/dird/ua_cmds.c:1552 +#, c-format +msgid "Are you sure you want to delete Pool \"%s\"? (yes/no): " msgstr "" -#: src/lib/bnet.c:134 +#: src/dird/ua_cmds.c:1666 #, c-format -msgid "Attr spool write error. ERR=%s\n" +msgid "Using Catalog name=%s DB=%s\n" msgstr "" -#: src/lib/bnet.c:279 src/lib/bnet.c:320 -msgid "TLS connection initialization failed.\n" +#: src/dird/ua_cmds.c:1734 +msgid "ERR: Can't open db\n" msgstr "" -#: src/lib/bnet.c:287 -msgid "TLS Negotiation failed.\n" +#: src/dird/ua_cmds.c:1781 +msgid "Wait on mount timed out\n" msgstr "" -#: src/lib/bnet.c:293 src/lib/bnet.c:335 +#: src/dird/ua_cmds.c:1791 +msgid "ERR: Job was not found\n" +msgstr "" + +#: src/dird/ua_cmds.c:1867 msgid "" -"TLS certificate verification failed. Peer certificate did not match a " -"required commonName\n" +" Command Description\n" +" ======= ===========\n" msgstr "" -#: src/lib/bnet.c:342 +#: src/dird/ua_cmds.c:1871 #, c-format msgid "" -"TLS host certificate verification failed. Host name \"%s\" did not match " -"presented certificate\n" +" %-13s %s\n" +"\n" +"Arguments:\n" +"\t%s\n" msgstr "" -#: src/lib/bnet.c:359 -msgid "TLS enabled but not configured.\n" +#: src/dird/ua_cmds.c:1876 +#, c-format +msgid " %-13s %s\n" msgstr "" -#: src/lib/bnet.c:365 -msgid "TLS enable but not configured.\n" +#: src/dird/ua_cmds.c:1880 +#, c-format +msgid "" +"\n" +"Can't find %s command.\n" +"\n" msgstr "" -#: src/lib/bnet.c:481 -msgid "No problem." +#: src/dird/ua_cmds.c:1882 +msgid "" +"\n" +"When at a prompt, entering a period cancels the command.\n" +"\n" msgstr "" -#: src/lib/bnet.c:484 -msgid "Authoritative answer for host not found." +#: src/dird/ua_cmds.c:1918 src/filed/status.c:77 +#, c-format +msgid "%s Version: %s (%s) %s %s %s %s\n" msgstr "" -#: src/lib/bnet.c:487 -msgid "Non-authoritative for host not found, or ServerFail." +#: src/dird/ua_cmds.c:1977 src/dird/ua_cmds.c:2004 src/dird/ua_cmds.c:2026 +#, c-format +msgid "No authorization for Catalog \"%s\"\n" msgstr "" -#: src/lib/bnet.c:490 -msgid "Non-recoverable errors, FORMERR, REFUSED, or NOTIMP." +#: src/dird/ua_cmds.c:2083 +#, c-format +msgid "Could not open catalog database \"%s\".\n" msgstr "" -#: src/lib/bnet.c:493 -msgid "Valid name, no data record of resquested type." +#: src/dird/ua_cmds.c:2102 +#, c-format +msgid "Using Catalog \"%s\"\n" msgstr "" -#: src/lib/bnet.c:496 -msgid "Unknown error." +#: src/dird/backup.c:94 +msgid "No Storage specification found in Job or Pool.\n" msgstr "" -#: src/lib/bnet.c:755 +#: src/dird/backup.c:254 #, c-format -msgid "Unknown sig %d" +msgid "Using BaseJobId(s): %s\n" msgstr "" -#: src/lib/signal.c:67 -msgid "Invalid signal number" +#: src/dird/backup.c:264 +msgid "Cannot find previous jobids.\n" +msgstr "" + +#: src/dird/backup.c:278 +msgid "Sending Accurate information to the FD.\n" msgstr "" -#: src/lib/signal.c:152 src/lib/signal.c:154 +#: src/dird/backup.c:435 #, c-format -msgid "Bacula interrupted by signal %d: %s\n" +msgid "Start Backup JobId %s, Job=%s\n" msgstr "" -#: src/lib/signal.c:167 +#: src/dird/backup.c:640 #, c-format -msgid "Kaboom! %s, %s got signal %d - %s. Attempting traceback.\n" +msgid "Unexpected Client Job message: %s\n" msgstr "" -#: src/lib/signal.c:169 +#: src/dird/backup.c:653 #, c-format -msgid "Kaboom! exepath=%s\n" +msgid "Network error with FD during %s: ERR=%s\n" msgstr "" -#: src/lib/signal.c:210 +#: src/dird/backup.c:687 +msgid "No Job status returned from FD.\n" +msgstr "" + +#: src/dird/backup.c:847 #, c-format -msgid "Fork error: ERR=%s\n" +msgid " Base files/Used files: %lld/%lld (%.2f%%)\n" +msgstr "" + +#: src/dird/backup.c:858 +#, c-format +msgid "" +"%s %s %s (%s):\n" +" Build OS: %s %s %s\n" +" JobId: %d\n" +" Job: %s\n" +" Backup Level: %s%s\n" +" Client: \"%s\" %s\n" +" FileSet: \"%s\" %s\n" +" Pool: \"%s\" (From %s)\n" +" Catalog: \"%s\" (From %s)\n" +" Storage: \"%s\" (From %s)\n" +" Scheduled time: %s\n" +" Start time: %s\n" +" End time: %s\n" +" Elapsed time: %s\n" +" Priority: %d\n" +" FD Files Written: %s\n" +" SD Files Written: %s\n" +" FD Bytes Written: %s (%sB)\n" +" SD Bytes Written: %s (%sB)\n" +" Rate: %.1f KB/s\n" +" Software Compression: %s\n" +"%s VSS: %s\n" +" Encryption: %s\n" +" Accurate: %s\n" +" Volume name(s): %s\n" +" Volume Session Id: %d\n" +" Volume Session Time: %d\n" +" Last Volume Bytes: %s\n" +" Non-fatal FD errors: %d\n" +" SD Errors: %d\n" +" FD termination status: %s\n" +" SD termination status: %s\n" +" Termination: %s\n" +"\n" msgstr "" -#: src/lib/signal.c:218 +#: src/dird/backup.c:959 #, c-format -msgid "Calling: %s %s %s %s\n" +msgid "Could not get Job Volume Parameters to update Bootstrap file. ERR=%s\n" msgstr "" -#: src/lib/signal.c:222 +#: src/dird/backup.c:995 #, c-format -msgid "execv: %s failed: ERR=%s\n" +msgid "" +"Could not open WriteBootstrap file:\n" +"%s: ERR=%s\n" msgstr "" -#: src/lib/signal.c:244 -#, c-format -msgid "It looks like the traceback worked...\n" +#: src/dird/ua_tree.c:62 +msgid "add dir/file to be restored recursively, wildcards allowed" msgstr "" -#: src/lib/signal.c:246 -#, c-format -msgid "The btraceback call returned %d\n" +#: src/dird/ua_tree.c:63 +msgid "change current directory" msgstr "" -#: src/lib/signal.c:306 -#, c-format -msgid "BA_NSIG too small (%d) should be (%d)\n" +#: src/dird/ua_tree.c:64 +msgid "count marked files in and below the cd" msgstr "" -#: src/lib/signal.c:312 -msgid "UNKNOWN SIGNAL" +#: src/dird/ua_tree.c:65 +msgid "delete dir/file to be restored recursively in dir" msgstr "" -#: src/lib/signal.c:313 -msgid "Hangup" +#: src/dird/ua_tree.c:66 src/dird/ua_tree.c:67 +msgid "long list current directory, wildcards allowed" msgstr "" -#: src/lib/signal.c:314 -msgid "Interrupt" +#: src/dird/ua_tree.c:68 +msgid "leave file selection mode" msgstr "" -#: src/lib/signal.c:315 -msgid "Quit" +#: src/dird/ua_tree.c:69 +msgid "estimate restore size" msgstr "" -#: src/lib/signal.c:316 -msgid "Illegal instruction" +#: src/dird/ua_tree.c:70 +msgid "same as done command" msgstr "" -#: src/lib/signal.c:317 -msgid "Trace/Breakpoint trap" +#: src/dird/ua_tree.c:71 +msgid "find files, wildcards allowed" msgstr "" -#: src/lib/signal.c:318 -msgid "Abort" +#: src/dird/ua_tree.c:72 src/dird/ua_tree.c:85 src/dird/ua_tree.c:86 +msgid "print help" msgstr "" -#: src/lib/signal.c:320 -msgid "EMT instruction (Emulation Trap)" +#: src/dird/ua_tree.c:73 src/dird/ua_tree.c:74 +msgid "list current directory, wildcards allowed" msgstr "" -#: src/lib/signal.c:323 -msgid "IOT trap" +#: src/dird/ua_tree.c:75 +msgid "list subdir in current directory, wildcards allowed" msgstr "" -#: src/lib/signal.c:325 -msgid "BUS error" +#: src/dird/ua_tree.c:76 +msgid "list the marked files in and below the cd" msgstr "" -#: src/lib/signal.c:326 -msgid "Floating-point exception" +#: src/dird/ua_tree.c:77 +msgid "list the marked files in" msgstr "" -#: src/lib/signal.c:327 -msgid "Kill, unblockable" +#: src/dird/ua_tree.c:78 +msgid "mark dir/file to be restored recursively, wildcards allowed" msgstr "" -#: src/lib/signal.c:328 -msgid "User-defined signal 1" +#: src/dird/ua_tree.c:79 +msgid "mark directory name to be restored (no files)" msgstr "" -#: src/lib/signal.c:329 -msgid "Segmentation violation" +#: src/dird/ua_tree.c:80 src/dird/ua_tree.c:81 +msgid "print current working directory" msgstr "" -#: src/lib/signal.c:330 -msgid "User-defined signal 2" +#: src/dird/ua_tree.c:82 +msgid "unmark dir/file to be restored recursively in dir" msgstr "" -#: src/lib/signal.c:331 -msgid "Broken pipe" +#: src/dird/ua_tree.c:83 +msgid "unmark directory name only no recursion" msgstr "" -#: src/lib/signal.c:332 -msgid "Alarm clock" +#: src/dird/ua_tree.c:84 +msgid "quit and do not do restore" msgstr "" -#: src/lib/signal.c:333 -msgid "Termination" +#: src/dird/ua_tree.c:106 +msgid "" +"\n" +"You are now entering file selection mode where you add (mark) and\n" +"remove (unmark) files to be restored. No files are initially added, unless\n" +"you used the \"all\" keyword on the command line.\n" +"Enter \"done\" to leave this mode.\n" +"\n" msgstr "" -#: src/lib/signal.c:335 -msgid "Stack fault" +#: src/dird/ua_tree.c:117 src/dird/ua_tree.c:847 +#, c-format +msgid "cwd is: %s\n" msgstr "" -#: src/lib/signal.c:337 -msgid "Child status has changed" +#: src/dird/ua_tree.c:126 src/dird/ua_tree.c:145 +#, c-format +msgid "Invalid command \"%s\". Enter \"done\" to exit.\n" msgstr "" -#: src/lib/signal.c:338 -msgid "Continue" +#: src/dird/ua_tree.c:217 +#, c-format +msgid "" +"Something is wrong with the Delta sequence of %s, skiping new parts. Current " +"sequence is %d\n" msgstr "" -#: src/lib/signal.c:339 -msgid "Stop, unblockable" +#: src/dird/ua_tree.c:389 src/dird/ua_tree.c:401 src/dird/ua_tree.c:418 +msgid "No files marked.\n" msgstr "" -#: src/lib/signal.c:340 -msgid "Keyboard stop" +#: src/dird/ua_tree.c:403 +msgid "1 file marked.\n" msgstr "" -#: src/lib/signal.c:341 -msgid "Background read from tty" +#: src/dird/ua_tree.c:405 +#, c-format +msgid "%s files marked.\n" msgstr "" -#: src/lib/signal.c:342 -msgid "Background write to tty" +#: src/dird/ua_tree.c:433 +msgid "No directories marked.\n" msgstr "" -#: src/lib/signal.c:343 -msgid "Urgent condition on socket" +#: src/dird/ua_tree.c:435 +msgid "1 directory marked.\n" msgstr "" -#: src/lib/signal.c:344 -msgid "CPU limit exceeded" +#: src/dird/ua_tree.c:437 +#, c-format +msgid "%s directories marked.\n" msgstr "" -#: src/lib/signal.c:345 -msgid "File size limit exceeded" +#: src/dird/ua_tree.c:458 +#, c-format +msgid "%s total files/dirs. %s marked to be restored.\n" msgstr "" -#: src/lib/signal.c:346 -msgid "Virtual alarm clock" +#: src/dird/ua_tree.c:469 +msgid "No file specification given.\n" msgstr "" -#: src/lib/signal.c:347 -msgid "Profiling alarm clock" +#: src/dird/ua_tree.c:690 +#, c-format +msgid "Node %s has no children.\n" msgstr "" -#: src/lib/signal.c:348 -msgid "Window size change" +#: src/dird/ua_tree.c:783 +#, c-format +msgid "%d total files; %d marked to be restored; %s bytes.\n" msgstr "" -#: src/lib/signal.c:349 -msgid "I/O now possible" +#: src/dird/ua_tree.c:817 +msgid "Too few or too many arguments. Try using double quotes.\n" msgstr "" -#: src/lib/signal.c:351 -msgid "Power failure restart" +#: src/dird/ua_tree.c:830 +msgid "Invalid path given.\n" msgstr "" -#: src/lib/signal.c:354 -msgid "No runnable lwp" +#: src/dird/ua_tree.c:866 src/dird/ua_tree.c:878 +msgid "No files unmarked.\n" msgstr "" -#: src/lib/signal.c:357 -msgid "SIGLWP special signal used by thread library" +#: src/dird/ua_tree.c:880 +msgid "1 file unmarked.\n" msgstr "" -#: src/lib/signal.c:360 -msgid "Checkpoint Freeze" +#: src/dird/ua_tree.c:883 +#, c-format +msgid "%s files unmarked.\n" msgstr "" -#: src/lib/signal.c:363 -msgid "Checkpoint Thaw" +#: src/dird/ua_tree.c:894 src/dird/ua_tree.c:911 +msgid "No directories unmarked.\n" msgstr "" -#: src/lib/signal.c:366 -msgid "Thread Cancellation" +#: src/dird/ua_tree.c:913 +msgid "1 directory unmarked.\n" msgstr "" -#: src/lib/signal.c:369 -msgid "Resource Lost (e.g. record-lock lost)" +#: src/dird/ua_tree.c:915 +#, c-format +msgid "%d directories unmarked.\n" msgstr "" -#: src/lib/ini.c:106 src/lib/ini.c:118 +#: src/dird/inc_conf.c:299 #, c-format -msgid "" -"Config file error: %s\n" -" : Line %d, col %d of file %s\n" -"%s\n" +msgid "Expected a strip path positive integer, got:%s:" msgstr "" -#: src/lib/ini.c:308 src/lib/ini.c:383 +#: src/dird/inc_conf.c:319 #, c-format -msgid "Cannot open config file %s: %s\n" +msgid "Expected a FileSet option keyword, got:%s:" msgstr "" -#: src/lib/btimers.c:265 -msgid "stop_btimer called with NULL btimer_id\n" +#: src/dird/inc_conf.c:352 +msgid "Old style Include/Exclude not supported\n" msgstr "" -#: src/lib/bsys.c:72 +#: src/dird/inc_conf.c:380 src/dird/inc_conf.c:726 src/dird/dird_conf.c:2044 #, c-format -msgid "safe_unlink could not compile regex pattern \"%s\" ERR=%s\n" +msgid "Expecting keyword, got: %s\n" msgstr "" -#: src/lib/bsys.c:261 src/lib/bsys.c:278 src/lib/bsys.c:302 src/lib/bsys.c:315 +#: src/dird/inc_conf.c:398 src/dird/inc_conf.c:741 src/dird/dird_conf.c:2061 #, c-format -msgid "Out of memory: ERR=%s\n" -msgstr "" - -#: src/lib/bsys.c:357 -msgid "Buffer overflow.\n" -msgstr "" - -#: src/lib/bsys.c:423 -msgid "Bad errno" +msgid "Keyword %s not permitted in this resource" msgstr "" -#: src/lib/bsys.c:438 +#: src/dird/inc_conf.c:451 #, c-format -msgid "Memset for %d bytes at %s:%d\n" +msgid "Regex compile error. ERR=%s\n" msgstr "" -#: src/lib/bsys.c:468 +#: src/dird/inc_conf.c:472 #, c-format -msgid "Cannot open pid file. %s ERR=%s\n" +msgid "Expected a regex string, got: %s\n" msgstr "" -#: src/lib/bsys.c:483 +#: src/dird/inc_conf.c:546 #, c-format -msgid "" -"%s is already running. pid=%d\n" -"Check file %s\n" +msgid "Expected a wild-card string, got: %s\n" msgstr "" -#: src/lib/bsys.c:497 +#: src/dird/inc_conf.c:569 #, c-format -msgid "Could not open pid file. %s ERR=%s\n" +msgid "Expected an fstype string, got: %s\n" msgstr "" -#: src/lib/bsys.c:608 -#, c-format -msgid "Could not create state file. %s ERR=%s\n" +#: src/dird/inc_conf.c:580 +msgid "ExcludeDirContaining directive not permitted in Exclude.\n" msgstr "" -#: src/lib/bsys.c:627 +#: src/dird/inc_conf.c:607 #, c-format -msgid "Write final hdr error: ERR=%s\n" +msgid "Expected an drivetype string, got: %s\n" msgstr "" -#: src/lib/runscript.c:236 +#: src/dird/inc_conf.c:631 src/dird/inc_conf.c:674 #, c-format -msgid "%s: run %s \"%s\"\n" +msgid "Backslash found. Use forward slashes or quote the string.: %s\n" msgstr "" -#: src/lib/runscript.c:245 +#: src/dird/inc_conf.c:646 src/dird/inc_conf.c:689 #, c-format -msgid "Runscript: %s could not execute. ERR=%s\n" +msgid "Expected a filename, got: %s" msgstr "" -#: src/lib/runscript.c:254 -#, c-format -msgid "%s: %s\n" +#: src/dird/inc_conf.c:663 +msgid "Plugin directive not permitted in Exclude\n" msgstr "" -#: src/lib/runscript.c:259 -#, c-format -msgid "Runscript: %s returned non-zero status=%d. ERR=%s\n" +#: src/dird/inc_conf.c:706 +msgid "Options section not permitted in Exclude\n" msgstr "" -#: src/lib/lex.c:91 src/wx-console/console_thread.cpp:212 +#: src/dird/inc_conf.c:711 src/dird/dird_conf.c:2030 #, c-format -msgid "Problem probably begins at line %d.\n" +msgid "Expecting open brace. Got %s" msgstr "" -#: src/lib/lex.c:96 src/wx-console/console_thread.cpp:217 +#: src/dird/inc_conf.c:766 #, c-format -msgid "" -"Config error: %s\n" -" : line %d, col %d of file %s\n" -"%s\n" -"%s" +msgid "Expected a FileSet keyword, got: %s" msgstr "" -#: src/lib/lex.c:100 +#: src/dird/recycle.c:57 #, c-format -msgid "Config error: %s\n" -msgstr "" - -#: src/lib/lex.c:129 -msgid "Close of NULL file\n" -msgstr "" - -#: src/lib/lex.c:226 -msgid "" -"get_char: called after EOF. You may have a open double quote without the " -"closing double quote.\n" +msgid "Recycled volume \"%s\"\n" msgstr "" -#: src/lib/lex.c:268 +#: src/dird/ua_server.c:56 #, c-format -msgid "Config token too long, file: %s, line %d, begins at line %d\n" -msgstr "" - -#: src/lib/lex.c:292 -msgid "none" -msgstr "" - -#: src/lib/lex.c:293 -msgid "comment" -msgstr "" - -#: src/lib/lex.c:294 -msgid "number" -msgstr "" - -#: src/lib/lex.c:295 -msgid "ip_addr" -msgstr "" - -#: src/lib/lex.c:296 -msgid "identifier" -msgstr "" - -#: src/lib/lex.c:297 -msgid "string" +msgid "Cannot create UA thread: %s\n" msgstr "" -#: src/lib/lex.c:298 -msgid "quoted_string" -msgstr "" +#: src/dird/ua_server.c:146 +msgid "You have messages.\n" +msgstr "U heeft berichten.\n" -#: src/lib/lex.c:299 -msgid "include" -msgstr "" +#: src/dird/newvol.c:77 +#, c-format +msgid "Illegal character in Volume name \"%s\"\n" +msgstr "Onjuist karakter in Volume naam \"%s\"\n" -#: src/lib/lex.c:300 -msgid "include_quoted_string" -msgstr "" +#: src/dird/newvol.c:90 +#, fuzzy, c-format +msgid "Created new Volume=\"%s\", Pool=\"%s\", MediaType=\"%s\" in catalog.\n" +msgstr "Nieuw volume \"%s\" aangemaakt in catalogus.\n" -#: src/lib/lex.c:301 -msgid "UTF-8 Byte Order Mark" +#: src/dird/newvol.c:119 +#, c-format +msgid "SQL failed, but ignored. ERR=%s\n" msgstr "" -#: src/lib/lex.c:302 -msgid "UTF-16le Byte Order Mark" +#: src/dird/newvol.c:129 +#, c-format +msgid "Wanted to create Volume \"%s\", but it already exists. Trying again.\n" msgstr "" +"Geprobeerd om \"%s\" aan te maken, maar deze bestaat al. Probeer opnieuw.\n" -#: src/lib/lex.c:340 src/lib/lex.c:346 src/lib/lex.c:357 src/lib/lex.c:363 +#: src/dird/newvol.c:138 +msgid "Too many failures. Giving up creating Volume name.\n" +msgstr "Teveel mislukte pogingen. Aanmaken volume naam gestopt.\n" + +#: src/dird/msgchan.c:66 #, c-format -msgid "expected a positive integer number, got: %s" +msgid "Connecting to Storage daemon %s at %s:%d ...\n" msgstr "" -#: src/lib/lex.c:479 -msgid "" -"This config file appears to be in an unsupported Unicode format (UTF-16be). " -"Please resave as UTF-8\n" +#: src/dird/msgchan.c:230 +#, c-format +msgid "Storage daemon rejected Job command: %s\n" msgstr "" -#: src/lib/lex.c:625 src/lib/lex.c:653 +#: src/dird/msgchan.c:238 #, c-format -msgid "Cannot open included config file %s: %s\n" +msgid " " msgstr "" -#: src/lib/var.c:2686 -msgid "invalid regex in search and replace operation" +#: src/dird/dird_conf.c:584 +#, c-format +msgid "Console: name=%s SSL=%d\n" msgstr "" -#: src/lib/var.c:2687 -msgid "missing parameter in command" +#: src/dird/dird_conf.c:589 +#, c-format +msgid "Counter: name=%s min=%d max=%d cur=%d wrapcntr=%s\n" msgstr "" -#: src/lib/var.c:2688 -msgid "empty search string in search and replace operation" +#: src/dird/dird_conf.c:594 +#, c-format +msgid "Counter: name=%s min=%d max=%d\n" msgstr "" -#: src/lib/var.c:2689 -msgid "start offset missing in cut operation" +#: src/dird/dird_conf.c:608 +#, c-format +msgid "Client: name=%s address=%s FDport=%d MaxJobs=%u\n" msgstr "" -#: src/lib/var.c:2690 -msgid "offsets in cut operation delimited by unknown character" +#: src/dird/dird_conf.c:611 +#, c-format +msgid " JobRetention=%s FileRetention=%s AutoPrune=%d\n" msgstr "" -#: src/lib/var.c:2691 -msgid "range out of bounds in cut operation" +#: src/dird/dird_conf.c:619 src/dird/dird_conf.c:691 +#, c-format +msgid " MaximumBandwidth=%lld\n" msgstr "" -#: src/lib/var.c:2692 -msgid "offset out of bounds in cut operation" +#: src/dird/dird_conf.c:631 +#, c-format +msgid "" +"Device: name=%s ok=%d num_writers=%d max_writers=%d\n" +" reserved=%d open=%d append=%d read=%d labeled=%d offline=%d autochgr=" +"%d\n" +" poolid=%s volname=%s MediaType=%s\n" msgstr "" -#: src/lib/var.c:2693 -msgid "logic error in cut operation" +#: src/dird/dird_conf.c:645 +#, c-format +msgid "" +"Storage: name=%s address=%s SDport=%d MaxJobs=%u\n" +" DeviceName=%s MediaType=%s StorageId=%s\n" msgstr "" -#: src/lib/var.c:2694 -msgid "malformatted transpose operation" +#: src/dird/dird_conf.c:661 +#, c-format +msgid "" +"Catalog: name=%s address=%s DBport=%d db_name=%s\n" +" db_driver=%s db_user=%s MutliDBConn=%d\n" msgstr "" -#: src/lib/var.c:2695 -msgid "source and target class mismatch in transpose operation" +#: src/dird/dird_conf.c:674 +#, c-format +msgid "%s: name=%s JobType=%d level=%s Priority=%d Enabled=%d\n" msgstr "" -#: src/lib/var.c:2696 -msgid "empty character class in transpose operation" +#: src/dird/dird_conf.c:675 +msgid "JobDefs" msgstr "" -#: src/lib/var.c:2697 -msgid "incorrect character class in transpose operation" +#: src/dird/dird_conf.c:679 +#, c-format +msgid "" +" MaxJobs=%u Resched=%d Times=%d Interval=%s Spool=%d WritePartAfterJob=" +"%d\n" msgstr "" -#: src/lib/var.c:2698 -msgid "malformatted padding operation" +#: src/dird/dird_conf.c:685 +#, c-format +msgid " SpoolSize=%s\n" msgstr "" -#: src/lib/var.c:2699 -msgid "width parameter missing in padding operation" +#: src/dird/dird_conf.c:688 +#, c-format +msgid " Accurate=%d\n" msgstr "" -#: src/lib/var.c:2700 -msgid "fill string missing in padding operation" +#: src/dird/dird_conf.c:695 +#, c-format +msgid " SelectionType=%d\n" msgstr "" -#: src/lib/var.c:2701 -msgid "unknown quoted pair in search and replace operation" +#: src/dird/dird_conf.c:710 +#, c-format +msgid " --> Where=%s\n" msgstr "" -#: src/lib/var.c:2702 -msgid "sub-matching reference out of range" +#: src/dird/dird_conf.c:713 +#, c-format +msgid " --> RegexWhere=%s\n" msgstr "" -#: src/lib/var.c:2703 -msgid "invalid argument" +#: src/dird/dird_conf.c:716 +#, c-format +msgid " --> Bootstrap=%s\n" msgstr "" -#: src/lib/var.c:2704 -msgid "incomplete quoted pair" +#: src/dird/dird_conf.c:719 +#, c-format +msgid " --> WriteBootstrap=%s\n" msgstr "" -#: src/lib/var.c:2705 -msgid "lookup function does not support variable arrays" +#: src/dird/dird_conf.c:722 +#, c-format +msgid " --> PluginOptions=%s\n" msgstr "" -#: src/lib/var.c:2706 -msgid "index of array variable contains an invalid character" +#: src/dird/dird_conf.c:725 +#, c-format +msgid " --> MaxRunTime=%u\n" msgstr "" -#: src/lib/var.c:2707 -msgid "index of array variable is incomplete" +#: src/dird/dird_conf.c:728 +#, c-format +msgid " --> MaxWaitTime=%u\n" msgstr "" -#: src/lib/var.c:2708 -msgid "bracket expression in array variable's index not closed" +#: src/dird/dird_conf.c:731 +#, c-format +msgid " --> MaxStartDelay=%u\n" msgstr "" -#: src/lib/var.c:2709 -msgid "division by zero error in index specification" +#: src/dird/dird_conf.c:734 +#, c-format +msgid " --> MaxRunSchedTime=%u\n" msgstr "" -#: src/lib/var.c:2710 -msgid "unterminated loop construct" +#: src/dird/dird_conf.c:746 +#, c-format +msgid " --> Base %s\n" msgstr "" -#: src/lib/var.c:2711 -msgid "invalid character in loop limits" +#: src/dird/dird_conf.c:784 +#, c-format +msgid " --> Run=%s\n" msgstr "" -#: src/lib/var.c:2712 -msgid "malformed operation argument list" +#: src/dird/dird_conf.c:788 +#, c-format +msgid " --> SelectionPattern=%s\n" msgstr "" -#: src/lib/var.c:2713 -msgid "undefined operation" +#: src/dird/dird_conf.c:802 +#, c-format +msgid "FileSet: name=%s\n" msgstr "" -#: src/lib/var.c:2714 -msgid "formatting failure" +#: src/dird/dird_conf.c:896 src/dird/dird_conf.c:981 +#, c-format +msgid "Schedule: name=%s\n" msgstr "" -#: src/lib/var.c:2723 -msgid "unknown error" +#: src/dird/dird_conf.c:901 +#, c-format +msgid " --> Run Level=%s\n" msgstr "" -#: src/lib/address_conf.c:62 +#: src/dird/dird_conf.c:903 #, c-format -msgid "Only ipv4 and ipv6 are supported (%d)\n" +msgid " MaxRunSchedTime=%u\n" msgstr "" -#: src/lib/address_conf.c:66 +#: src/dird/dird_conf.c:906 #, c-format -msgid "Only ipv4 is supported (%d)\n" +msgid " Priority=%u\n" msgstr "" -#: src/lib/address_conf.c:175 -#, c-format -msgid "It was tried to assign a ipv6 address to a ipv4(%d)\n" +#: src/dird/dird_conf.c:908 +msgid " hour=" msgstr "" -#: src/lib/address_conf.c:184 -#, c-format -msgid "It was tried to assign a ipv4 address to a ipv6(%d)\n" +#: src/dird/dird_conf.c:917 +msgid " mday=" msgstr "" -#: src/lib/address_conf.c:263 -#, c-format -msgid "Can't add default address (%s)\n" +#: src/dird/dird_conf.c:926 +msgid " month=" msgstr "" -#: src/lib/address_conf.c:292 -msgid "the old style addresses cannot be mixed with new style" +#: src/dird/dird_conf.c:935 +msgid " wday=" msgstr "" -#: src/lib/address_conf.c:313 -#, c-format -msgid "can't resolve service(%s)" +#: src/dird/dird_conf.c:944 +msgid " wom=" msgstr "" -#: src/lib/address_conf.c:322 +#: src/dird/dird_conf.c:953 +msgid " woy=" +msgstr "" + +#: src/dird/dird_conf.c:962 #, c-format -msgid "can't resolve hostname(%s) %s" +msgid " mins=%d\n" msgstr "" -#: src/lib/address_conf.c:412 src/lib/address_conf.c:443 +#: src/dird/dird_conf.c:964 src/dird/dird_conf.c:968 src/dird/dird_conf.c:972 +msgid " --> " +msgstr "" + +#: src/dird/dird_conf.c:989 #, c-format -msgid "Expected a block begin { , got: %s" +msgid "Pool: name=%s PoolType=%s\n" msgstr "" -#: src/lib/address_conf.c:417 -msgid "Empty addr block is not allowed" +#: src/dird/dird_conf.c:991 +#, c-format +msgid " use_cat=%d use_once=%d cat_files=%d\n" msgstr "" -#: src/lib/address_conf.c:421 +#: src/dird/dird_conf.c:994 #, c-format -msgid "Expected a string, got: %s" +msgid " max_vols=%d auto_prune=%d VolRetention=%s\n" msgstr "" -#: src/lib/address_conf.c:430 +#: src/dird/dird_conf.c:997 #, c-format -msgid "Expected a string [ip|ipv4|ipv6], got: %s" +msgid " VolUse=%s recycle=%d LabelFormat=%s\n" msgstr "" -#: src/lib/address_conf.c:434 +#: src/dird/dird_conf.c:1001 #, c-format -msgid "Expected a string [ip|ipv4], got: %s" +msgid " CleaningPrefix=%s LabelType=%d\n" msgstr "" -#: src/lib/address_conf.c:439 src/lib/address_conf.c:469 +#: src/dird/dird_conf.c:1003 #, c-format -msgid "Expected a equal =, got: %s" +msgid " RecyleOldest=%d PurgeOldest=%d ActionOnPurge=%d\n" msgstr "" -#: src/lib/address_conf.c:450 src/lib/address_conf.c:465 +#: src/dird/dird_conf.c:1007 #, c-format -msgid "Expected a identifier [addr|port], got: %s" +msgid " MaxVolJobs=%d MaxVolFiles=%d MaxVolBytes=%s\n" msgstr "" -#: src/lib/address_conf.c:455 -msgid "Only one port per address block" +#: src/dird/dird_conf.c:1011 +#, c-format +msgid " MigTime=%s MigHiBytes=%s MigLoBytes=%s\n" msgstr "" -#: src/lib/address_conf.c:461 -msgid "Only one addr per address block" +#: src/dird/dird_conf.c:1015 +#, c-format +msgid " JobRetention=%s FileRetention=%s\n" msgstr "" -#: src/lib/address_conf.c:477 +#: src/dird/dird_conf.c:1019 #, c-format -msgid "Expected a number or a string, got: %s" +msgid " NextPool=%s\n" msgstr "" -#: src/lib/address_conf.c:483 src/lib/address_conf.c:516 +#: src/dird/dird_conf.c:1022 #, c-format -msgid "Expected an IP number or a hostname, got: %s" +msgid " RecyclePool=%s\n" msgstr "" -#: src/lib/address_conf.c:489 -msgid "State machine missmatch" +#: src/dird/dird_conf.c:1025 +#, c-format +msgid " ScratchPool=%s\n" msgstr "" -#: src/lib/address_conf.c:495 src/lib/address_conf.c:507 +#: src/dird/dird_conf.c:1028 #, c-format -msgid "Expected a end of block }, got: %s" +msgid " Catalog=%s\n" msgstr "" -#: src/lib/address_conf.c:501 +#: src/dird/dird_conf.c:1048 #, c-format -msgid "Can't add hostname(%s) and port(%s) to addrlist (%s)" +msgid "Messages: name=%s\n" msgstr "" -#: src/lib/address_conf.c:521 src/lib/address_conf.c:535 +#: src/dird/dird_conf.c:1050 #, c-format -msgid "can't add port (%s) to (%s)" +msgid " mailcmd=%s\n" msgstr "" -#: src/lib/address_conf.c:530 +#: src/dird/dird_conf.c:1052 #, c-format -msgid "Expected a port number or string, got: %s" +msgid " opcmd=%s\n" msgstr "" -#: src/lib/edit.c:478 -msgid "Empty name not allowed.\n" +#: src/dird/dird_conf.c:1056 src/qt-console/tray-monitor/tray_conf.cpp:187 +#, c-format +msgid "Unknown resource type %d in dump_resource.\n" msgstr "" -#: src/lib/edit.c:488 +#: src/dird/dird_conf.c:1393 src/qt-console/tray-monitor/tray_conf.cpp:245 #, c-format -msgid "Illegal character \"%c\" in name.\n" +msgid "Unknown resource type %d in free_resource.\n" msgstr "" -#: src/lib/edit.c:495 -msgid "Name too long.\n" +#: src/dird/dird_conf.c:1471 +#, c-format +msgid "Cannot find Pool resource %s\n" msgstr "" -#: src/findlib/savecwd.c:60 +#: src/dird/dird_conf.c:1482 #, c-format -msgid "Cannot open current directory: ERR=%s\n" +msgid "Cannot find Console resource %s\n" msgstr "" -#: src/findlib/savecwd.c:71 +#: src/dird/dird_conf.c:1504 #, c-format -msgid "Cannot get current directory: ERR=%s\n" +msgid "Cannot find Job resource %s\n" msgstr "" -#: src/findlib/savecwd.c:95 src/findlib/savecwd.c:106 +#: src/dird/dird_conf.c:1555 #, c-format -msgid "Cannot reset current directory: ERR=%s\n" +msgid "Cannot find Counter resource %s\n" msgstr "" -#: src/findlib/mkpath.c:137 +#: src/dird/dird_conf.c:1563 src/filed/filed_conf.c:465 #, c-format -msgid "Cannot create directory %s: ERR=%s\n" +msgid "Cannot find Client resource %s\n" msgstr "" -#: src/findlib/mkpath.c:141 src/findlib/mkpath.c:202 +#: src/dird/dird_conf.c:1576 #, c-format -msgid "%s exists but is not a directory.\n" +msgid "Cannot find Schedule resource %s\n" msgstr "" -#: src/findlib/mkpath.c:164 +#: src/dird/dird_conf.c:1581 src/dird/dird_conf.c:1641 +#: src/qt-console/tray-monitor/tray_conf.cpp:302 +#: src/qt-console/tray-monitor/tray_conf.cpp:340 #, c-format -msgid "Cannot change owner and/or group of %s: ERR=%s\n" +msgid "Unknown resource type %d in save_resource.\n" msgstr "" -#: src/findlib/mkpath.c:169 +#: src/dird/dird_conf.c:1656 #, c-format -msgid "Cannot change permissions of %s: ERR=%s\n" +msgid "Name item is required in %s resource, but not found.\n" msgstr "" -#: src/findlib/mkpath.c:239 +#: src/dird/dird_conf.c:1669 #, c-format -msgid "%c: is not a valid drive.\n" +msgid "Inserting %s res: %s index=%d pass=%d\n" msgstr "" -#: src/findlib/mkpath.c:283 -msgid "Too many subdirectories. Some permissions not reset.\n" +#: src/dird/dird_conf.c:1682 +#, c-format +msgid "Expected one of: %s, got: %s" msgstr "" -#: src/findlib/attribs.c:483 +#: src/dird/dird_conf.c:1754 #, c-format -msgid "File size of restored file %s not correct. Original %s, restored %s.\n" +msgid "Expected a Migration Job Type keyword, got: %s" msgstr "" -#: src/findlib/attribs.c:509 src/findlib/attribs.c:516 +#: src/dird/dird_conf.c:1780 #, c-format -msgid "Unable to set file owner %s: ERR=%s\n" +msgid "Expected a Job Type keyword, got: %s" msgstr "" -#: src/findlib/attribs.c:522 +#: src/dird/dird_conf.c:1804 #, c-format -msgid "Unable to set file modes %s: ERR=%s\n" +msgid "Expected a Job Level keyword, got: %s" msgstr "" -#: src/findlib/attribs.c:532 +#: src/dird/dird_conf.c:1824 #, c-format -msgid "Unable to set file times %s: ERR=%s\n" +msgid "Expected a Restore replacement option, got: %s" msgstr "" -#: src/findlib/attribs.c:546 +#: src/dird/ua_query.c:61 src/findlib/file_create.c:265 +#: src/findlib/file_create.c:353 #, c-format -msgid "Unable to set file flags %s: ERR=%s\n" +msgid "Could not open %s: ERR=%s\n" msgstr "" -#: src/findlib/attribs.c:799 -#, c-format -msgid "Error in %s file %s: ERR=%s\n" +#: src/dird/ua_query.c:66 +msgid "Available queries:\n" msgstr "" -#: src/findlib/attribs.c:816 -#, c-format -msgid "Error in %s: ERR=%s\n" +#: src/dird/ua_query.c:73 +msgid "Choose a query" msgstr "" -#: src/findlib/enable_priv.c:92 -msgid "AdjustTokenPrivileges set " +#: src/dird/ua_query.c:87 +msgid "Could not find query.\n" msgstr "" -#: src/findlib/create_file.c:124 -#, c-format -msgid "File skipped. Not newer: %s\n" +#: src/dird/ua_query.c:105 +msgid "Too many prompts in query, max is 9.\n" msgstr "" -#: src/findlib/create_file.c:131 +#: src/dird/ua_query.c:208 #, c-format -msgid "File skipped. Not older: %s\n" +msgid "Warning prompt %d missing.\n" msgstr "" -#: src/findlib/create_file.c:141 -#, c-format -msgid "File skipped. Already exists: %s\n" +#: src/dird/ua_query.c:253 +msgid "" +"Entering SQL query mode.\n" +"Terminate each query with a semicolon.\n" +"Terminate query mode with a blank line.\n" msgstr "" -#: src/findlib/create_file.c:167 -#, c-format -msgid "File %s already exists and could not be replaced. ERR=%s.\n" +#: src/dird/ua_query.c:256 src/dird/ua_query.c:272 +msgid "Enter SQL query: " msgstr "" -#: src/findlib/create_file.c:218 src/findlib/create_file.c:282 -#: src/findlib/create_file.c:378 -#, c-format -msgid "bpkt already open fid=%d\n" +#: src/dird/ua_query.c:274 +msgid "Add to SQL query: " msgstr "" -#: src/findlib/create_file.c:226 src/filed/fd_plugins.c:1009 -#, c-format -msgid "Could not create %s: ERR=%s\n" +#: src/dird/ua_query.c:277 +msgid "End query mode.\n" msgstr "" -#: src/findlib/create_file.c:241 -#, c-format -msgid "Cannot make fifo %s: ERR=%s\n" +#: src/dird/dird.c:124 +#, fuzzy, c-format +msgid "" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: bacula-dir [-f -s] [-c config_file] [-d debug_level] [config_file]\n" +" -c set configuration file to file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -f run in foreground (for debugging)\n" +" -g groupid\n" +" -m print kaboom output (for debugging)\n" +" -r run now\n" +" -s no signals\n" +" -t test - read configuration and exit\n" +" -u userid\n" +" -v verbose user messages\n" +" -? print this message.\n" +"\n" msgstr "" +"\n" +"Versie: %s (%s) %s %s %s\n" +"\n" +"Specificatie: tray-monitor [-c configuratiebestand] [-d debug_level]\n" +" -c gebruik configuratiebestand\n" +" -d instellen debug level op \n" +" -dt weergeven tijd in debug output\n" +" -t test - lees configuratie en stop\n" +" -? geef deze melding.\n" +"\n" -#: src/findlib/create_file.c:259 -#, c-format -msgid "Cannot make node %s: ERR=%s\n" +#: src/dird/dird.c:503 +msgid "Too many open reload requests. Request ignored.\n" msgstr "" -#: src/findlib/create_file.c:304 -#, c-format -msgid "Could not symlink %s -> %s: ERR=%s\n" +#: src/dird/dird.c:518 +msgid "Out of reload table entries. Giving up.\n" msgstr "" -#: src/findlib/create_file.c:329 src/findlib/create_file.c:342 -#, c-format -msgid "Could not restore file flags for file %s: ERR=%s\n" +#: src/dird/dird.c:521 +msgid "Resetting previous configuration.\n" msgstr "" -#: src/findlib/create_file.c:333 src/findlib/create_file.c:350 +#: src/dird/dird.c:585 #, c-format -msgid "Could not hard link %s -> %s: ERR=%s\n" +msgid "" +"No Director resource defined in %s\n" +"Without that I don't know who I am :-(\n" msgstr "" -#: src/findlib/create_file.c:346 +#: src/dird/dird.c:593 src/filed/filed.c:328 #, c-format -msgid "Could not reset file flags for file %s: ERR=%s\n" +msgid "No Messages resource defined in %s\n" msgstr "" -#: src/findlib/create_file.c:401 +#: src/dird/dird.c:598 #, c-format -msgid "Original file %s have been deleted: type=%d\n" +msgid "Only one Director resource permitted in %s\n" msgstr "" -#: src/findlib/create_file.c:413 +#: src/dird/dird.c:655 #, c-format -msgid "Original file %s not saved: type=%d\n" +msgid "No Job records defined in %s\n" msgstr "" -#: src/findlib/create_file.c:416 +#: src/dird/dird.c:713 src/dird/dird.c:726 #, c-format -msgid "Unknown file type %d; not restored: %s\n" +msgid "Hey something is wrong. p=0x%lu\n" msgstr "" -#: src/findlib/create_file.c:460 +#: src/dird/dird.c:787 #, c-format -msgid "Zero length filename: %s\n" +msgid "\"%s\" directive in Job \"%s\" resource is required, but not found.\n" msgstr "" -#: src/findlib/bfile.c:97 -msgid "Unix attributes" +#: src/dird/dird.c:794 +msgid "Too many items in Job resource\n" msgstr "" -#: src/findlib/bfile.c:99 -msgid "File data" +#: src/dird/dird.c:798 +#, c-format +msgid "No storage specified in Job \"%s\" nor in Pool.\n" msgstr "" -#: src/findlib/bfile.c:101 -msgid "MD5 digest" +#: src/dird/dird.c:822 +#, c-format +msgid "\"TLS Certificate\" file not defined for Console \"%s\" in %s.\n" msgstr "" -#: src/findlib/bfile.c:103 -msgid "GZIP data" +#: src/dird/dird.c:828 +#, c-format +msgid "\"TLS Key\" file not defined for Console \"%s\" in %s.\n" msgstr "" -#: src/findlib/bfile.c:105 -msgid "Compressed data" +#: src/dird/dird.c:835 +#, c-format +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Console \"%s\" in %s. At least one CA certificate store is required when " +"using \"TLS Verify Peer\".\n" msgstr "" -#: src/findlib/bfile.c:107 -msgid "Extended attributes" +#: src/dird/dird.c:852 src/dird/dird.c:892 src/filed/filed.c:391 +#, c-format +msgid "Failed to initialize TLS context for File daemon \"%s\" in %s.\n" msgstr "" -#: src/findlib/bfile.c:109 -msgid "Sparse data" +#: src/dird/dird.c:875 +#, c-format +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"File daemon \"%s\" in %s.\n" msgstr "" -#: src/findlib/bfile.c:111 -msgid "GZIP sparse data" +#: src/dird/dird.c:916 +#, c-format +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Storage \"%s\" in %s.\n" msgstr "" -#: src/findlib/bfile.c:113 -msgid "Compressed sparse data" +#: src/dird/dird.c:971 src/dird/dird.c:973 +#, c-format +msgid "Could not open Catalog \"%s\", database \"%s\".\n" msgstr "" -#: src/findlib/bfile.c:115 -msgid "Program names" +#: src/dird/dird.c:976 src/tools/cats_test.c:365 +#, c-format +msgid "%s" msgstr "" -#: src/findlib/bfile.c:117 -msgid "Program data" +#: src/dird/dird.c:1055 +#, c-format +msgid "Could not create storage record for %s\n" msgstr "" -#: src/findlib/bfile.c:119 -msgid "SHA1 digest" +#: src/dird/dird.c:1063 +#, c-format +msgid "Could not update storage record for %s\n" msgstr "" -#: src/findlib/bfile.c:121 -msgid "Win32 data" +#: src/dird/ua_purge.c:84 +msgid "" +"\n" +"This command can be DANGEROUS!!!\n" +"\n" +"It purges (deletes) all Files from a Job,\n" +"JobId, Client or Volume; or it purges (deletes)\n" +"all Jobs from a Client or Volume without regard\n" +"to retention periods. Normally you should use the\n" +"PRUNE command, which respects retention periods.\n" msgstr "" -#: src/findlib/bfile.c:123 -msgid "Win32 GZIP data" +#: src/dird/ua_purge.c:152 +msgid "Choose item to purge" msgstr "" -#: src/findlib/bfile.c:125 -msgid "Win32 compressed data" +#: src/dird/ua_purge.c:199 +#, c-format +msgid "Begin purging files for Client \"%s\"\n" msgstr "" -#: src/findlib/bfile.c:127 -msgid "MacOS Fork data" +#: src/dird/ua_purge.c:208 src/dird/ua_purge.c:258 +#, c-format +msgid "No Files found for client %s to purge from %s catalog.\n" msgstr "" -#: src/findlib/bfile.c:129 -msgid "HFS+ attribs" +#: src/dird/ua_purge.c:211 +#, c-format +msgid "Files for %d Jobs for client \"%s\" purged from %s catalog.\n" msgstr "" -#: src/findlib/bfile.c:131 -msgid "Standard Unix ACL attribs" +#: src/dird/ua_purge.c:249 +#, c-format +msgid "Begin purging jobs from Client \"%s\"\n" msgstr "" -#: src/findlib/bfile.c:133 -msgid "Default Unix ACL attribs" +#: src/dird/ua_purge.c:261 +#, c-format +msgid "%d Jobs for client %s purged from %s catalog.\n" msgstr "" -#: src/findlib/bfile.c:135 -msgid "SHA256 digest" +#: src/dird/ua_purge.c:459 +#, c-format +msgid "" +"\n" +"Volume \"%s\" has VolStatus \"%s\" and cannot be purged.\n" +"The VolStatus must be: Append, Full, Used, or Error to be purged.\n" msgstr "" -#: src/findlib/bfile.c:137 -msgid "SHA512 digest" +#: src/dird/ua_purge.c:487 +#, c-format +msgid "%d File%s on Volume \"%s\" purged from catalog.\n" msgstr "" -#: src/findlib/bfile.c:139 -msgid "Signed digest" +#: src/dird/ua_purge.c:537 +#, c-format +msgid "" +"There are no more Jobs associated with Volume \"%s\". Marking it purged.\n" msgstr "" -#: src/findlib/bfile.c:141 -msgid "Encrypted File data" +#: src/dird/ua_purge.c:606 +msgid "Can't update volume size in the catalog\n" msgstr "" -#: src/findlib/bfile.c:143 -msgid "Encrypted Win32 data" +#: src/dird/ua_purge.c:608 +#, c-format +msgid "The volume \"%s\" has been truncated\n" msgstr "" -#: src/findlib/bfile.c:145 -msgid "Encrypted session data" +#: src/dird/ua_purge.c:610 +#, c-format +msgid "Unable to truncate volume \"%s\"\n" msgstr "" -#: src/findlib/bfile.c:147 -msgid "Encrypted GZIP data" +#: src/dird/ua_purge.c:703 +#, c-format +msgid "No Volumes found to perform %s action.\n" msgstr "" -#: src/findlib/bfile.c:149 -msgid "Encrypted compressed data" +#: src/dird/ua_purge.c:771 +#, c-format +msgid "Unable move recycled Volume in full Pool \"%s\" MaxVols=%d\n" msgstr "" -#: src/findlib/bfile.c:151 -msgid "Encrypted Win32 GZIP data" +#: src/dird/ua_purge.c:785 +#, c-format +msgid "All records pruned from Volume \"%s\"; marking it \"Purged\"\n" msgstr "" -#: src/findlib/bfile.c:153 -msgid "Encrypted Win32 Compressed data" +#: src/dird/ua_purge.c:790 +#, c-format +msgid "Cannot purge Volume with VolStatus=%s\n" msgstr "" -#: src/findlib/bfile.c:155 -msgid "Encrypted MacOS fork data" +#: src/dird/ua_prune.c:116 +msgid "Choose item to prune" msgstr "" -#: src/findlib/bfile.c:157 -msgid "AIX Specific ACL attribs" +#: src/dird/ua_prune.c:172 +#, c-format +msgid "Cannot prune Volume \"%s\" because it is archived.\n" msgstr "" -#: src/findlib/bfile.c:159 -msgid "Darwin Specific ACL attribs" +#: src/dird/ua_prune.c:214 +msgid "Pruned Jobs from JobHisto catalog.\n" msgstr "" -#: src/findlib/bfile.c:161 -msgid "FreeBSD Specific Default ACL attribs" +#: src/dird/ua_prune.c:302 +msgid "Begin pruning Files.\n" msgstr "" -#: src/findlib/bfile.c:163 -msgid "FreeBSD Specific Access ACL attribs" +#: src/dird/ua_prune.c:317 +msgid "No Files found to prune.\n" msgstr "" -#: src/findlib/bfile.c:165 -msgid "HPUX Specific ACL attribs" +#: src/dird/ua_prune.c:340 +#, c-format +msgid "Pruned Files from %s Jobs for client %s from catalog.\n" msgstr "" -#: src/findlib/bfile.c:167 -msgid "Irix Specific Default ACL attribs" +#: src/dird/ua_prune.c:486 +#, c-format +msgid "Begin pruning Jobs older than %s.\n" msgstr "" -#: src/findlib/bfile.c:169 -msgid "Irix Specific Access ACL attribs" +#: src/dird/ua_prune.c:597 +#, c-format +msgid "Pruned %d %s for client %s from catalog.\n" msgstr "" -#: src/findlib/bfile.c:171 -msgid "Linux Specific Default ACL attribs" +#: src/dird/ua_prune.c:598 +msgid "Jobs" msgstr "" -#: src/findlib/bfile.c:173 -msgid "Linux Specific Access ACL attribs" +#: src/dird/ua_prune.c:600 +msgid "No Jobs found to prune.\n" msgstr "" -#: src/findlib/bfile.c:175 -msgid "TRU64 Specific Default ACL attribs" +#: src/dird/ua_prune.c:661 +msgid "Expecting limit argument as integer\n" msgstr "" -#: src/findlib/bfile.c:177 -msgid "TRU64 Specific Access ACL attribs" +#: src/dird/ua_prune.c:675 +#, c-format +msgid "Volume \"%s\"" msgstr "" -#: src/findlib/bfile.c:179 -msgid "Solaris Specific POSIX ACL attribs" +#: src/dird/ua_update.c:85 +msgid "Update choice:\n" msgstr "" -#: src/findlib/bfile.c:181 -msgid "Solaris Specific NFSv4/ZFS ACL attribs" +#: src/dird/ua_update.c:86 +msgid "Volume parameters" msgstr "" -#: src/findlib/bfile.c:183 -msgid "AFS Specific ACL attribs" +#: src/dird/ua_update.c:87 +msgid "Pool from resource" msgstr "" -#: src/findlib/bfile.c:185 -msgid "AIX Specific POSIX ACL attribs" +#: src/dird/ua_update.c:88 +msgid "Slots from autochanger" msgstr "" -#: src/findlib/bfile.c:187 -msgid "AIX Specific NFSv4 ACL attribs" +#: src/dird/ua_update.c:89 +msgid "Long term statistics" msgstr "" -#: src/findlib/bfile.c:189 -msgid "FreeBSD Specific NFSv4/ZFS ACL attribs" +#: src/dird/ua_update.c:90 +msgid "item" msgstr "" -#: src/findlib/bfile.c:191 -msgid "GNU Hurd Specific Default ACL attribs" +#: src/dird/ua_update.c:90 +msgid "Choose catalog item to update" msgstr "" -#: src/findlib/bfile.c:193 -msgid "GNU Hurd Specific Access ACL attribs" +#: src/dird/ua_update.c:133 +#, c-format +msgid "Invalid VolStatus specified: %s\n" msgstr "" -#: src/findlib/bfile.c:195 -msgid "GNU Hurd Specific Extended attribs" +#: src/dird/ua_update.c:142 +#, c-format +msgid "New Volume status is: %s\n" msgstr "" -#: src/findlib/bfile.c:197 -msgid "IRIX Specific Extended attribs" +#: src/dird/ua_update.c:152 +#, c-format +msgid "Invalid retention period specified: %s\n" msgstr "" -#: src/findlib/bfile.c:199 -msgid "TRU64 Specific Extended attribs" +#: src/dird/ua_update.c:160 +#, c-format +msgid "New retention period is: %s\n" msgstr "" -#: src/findlib/bfile.c:201 -msgid "AIX Specific Extended attribs" +#: src/dird/ua_update.c:171 +#, c-format +msgid "Invalid use duration specified: %s\n" msgstr "" -#: src/findlib/bfile.c:203 -msgid "OpenBSD Specific Extended attribs" +#: src/dird/ua_update.c:179 +#, c-format +msgid "New use duration is: %s\n" msgstr "" -#: src/findlib/bfile.c:205 -msgid "Solaris Specific Extensible attribs or System Extended attribs" +#: src/dird/ua_update.c:193 +#, c-format +msgid "New max jobs is: %s\n" msgstr "" -#: src/findlib/bfile.c:207 -msgid "Solaris Specific Extended attribs" +#: src/dird/ua_update.c:206 +#, c-format +msgid "New max files is: %s\n" msgstr "" -#: src/findlib/bfile.c:209 -msgid "Darwin Specific Extended attribs" +#: src/dird/ua_update.c:217 +#, c-format +msgid "Invalid max. bytes specification: %s\n" msgstr "" -#: src/findlib/bfile.c:211 -msgid "FreeBSD Specific Extended attribs" +#: src/dird/ua_update.c:225 +#, c-format +msgid "New Max bytes is: %s\n" msgstr "" -#: src/findlib/bfile.c:213 -msgid "Linux Specific Extended attribs" +#: src/dird/ua_update.c:236 src/dird/ua_update.c:256 +msgid "Invalid value. It must be yes or no.\n" msgstr "" -#: src/findlib/bfile.c:215 -msgid "NetBSD Specific Extended attribs" +#: src/dird/ua_update.c:244 +#, c-format +msgid "New Recycle flag is: %s\n" msgstr "" -#: src/findlib/find.c:237 +#: src/dird/ua_update.c:264 #, c-format -msgid "Plugin: \"%s\" not found.\n" +msgid "New InChanger flag is: %s\n" msgstr "" -#: src/findlib/match.c:210 src/tools/testfind.c:654 src/filed/job.c:1460 +#: src/dird/ua_update.c:282 #, c-format -msgid "Unknown include/exclude option: %c\n" +msgid "Invalid slot, it must be between 0 and MaxVols=%d\n" msgstr "" -#: src/findlib/find_one.c:227 +#: src/dird/ua_update.c:292 src/dird/ua_update.c:716 #, c-format -msgid " NODUMP flag set - will not process %s\n" +msgid "Error updating media record Slot: ERR=%s" msgstr "" -#: src/findlib/find_one.c:248 +#: src/dird/ua_update.c:294 #, c-format -msgid "Cannot stat file %s: ERR=%s\n" +msgid "New Slot is: %d\n" msgstr "" -#: src/findlib/find_one.c:253 +#: src/dird/ua_update.c:319 #, c-format -msgid "%s mtime changed during backup.\n" +msgid "New Pool is: %s\n" msgstr "" -#: src/findlib/find_one.c:260 +#: src/dird/ua_update.c:362 #, c-format -msgid "%s ctime changed during backup.\n" +msgid "New RecyclePool is: %s\n" msgstr "" -#: src/findlib/find_one.c:268 src/findlib/find_one.c:276 +#: src/dird/ua_update.c:382 #, c-format -msgid "%s size changed during backup.\n" +msgid "Error updating Volume record: ERR=%s" msgstr "" -#: src/findlib/find_one.c:403 +#: src/dird/ua_update.c:384 #, c-format -msgid "Top level directory \"%s\" has unlisted fstype \"%s\"\n" +msgid "Volume defaults updated from \"%s\" Pool record.\n" msgstr "" -#: src/findlib/find_one.c:418 +#: src/dird/ua_update.c:407 src/dird/ua_update.c:439 #, c-format -msgid "Top level directory \"%s\" has an unlisted drive type \"%s\"\n" +msgid "Error updating Volume records: ERR=%s" msgstr "" -#: src/cats/sql_create.c:101 +#: src/dird/ua_update.c:409 src/dird/ua_update.c:441 #, c-format -msgid "Create DB Job record %s failed. ERR=%s\n" +msgid "All Volume defaults updated from \"%s\" Pool record.\n" msgstr "" -#: src/cats/sql_create.c:145 +#: src/dird/ua_update.c:431 #, c-format -msgid "Create JobMedia record %s failed: ERR=%s\n" +msgid "Updating all pools, but skipped PoolId=%d. ERR=%s\n" msgstr "" -#: src/cats/sql_create.c:154 +#: src/dird/ua_update.c:457 #, c-format -msgid "Update Media record %s failed: ERR=%s\n" +msgid "Error updating media record Enabled: ERR=%s" msgstr "" -#: src/cats/sql_create.c:189 +#: src/dird/ua_update.c:460 #, c-format -msgid "pool record %s already exists\n" +msgid "New Enabled is: %d\n" msgstr "" -#: src/cats/sql_create.c:221 +#: src/dird/ua_update.c:475 #, c-format -msgid "Create db Pool record %s failed: ERR=%s\n" +msgid "Error updating media record ActionOnPurge: ERR=%s" msgstr "" -#: src/cats/sql_create.c:254 +#: src/dird/ua_update.c:478 #, c-format -msgid "Device record %s already exists\n" +msgid "New ActionOnPurge is: %s\n" msgstr "" -#: src/cats/sql_create.c:271 -#, c-format -msgid "Create db Device record %s failed: ERR=%s\n" +#: src/dird/ua_update.c:594 +msgid "Volume Status" msgstr "" -#: src/cats/sql_create.c:306 -#, c-format -msgid "More than one Storage record!: %d\n" +#: src/dird/ua_update.c:595 +msgid "Volume Retention Period" msgstr "" -#: src/cats/sql_create.c:311 -#, c-format -msgid "error fetching Storage row: %s\n" +#: src/dird/ua_update.c:596 +msgid "Volume Use Duration" msgstr "" -#: src/cats/sql_create.c:332 -#, c-format -msgid "Create DB Storage record %s failed. ERR=%s\n" +#: src/dird/ua_update.c:597 +msgid "Maximum Volume Jobs" msgstr "" -#: src/cats/sql_create.c:366 -#, c-format -msgid "mediatype record %s already exists\n" +#: src/dird/ua_update.c:598 +msgid "Maximum Volume Files" msgstr "" -#: src/cats/sql_create.c:383 -#, c-format -msgid "Create db mediatype record %s failed: ERR=%s\n" +#: src/dird/ua_update.c:599 +msgid "Maximum Volume Bytes" msgstr "" -#: src/cats/sql_create.c:424 -#, c-format -msgid "Volume \"%s\" already exists.\n" +#: src/dird/ua_update.c:600 +msgid "Recycle Flag" msgstr "" -#: src/cats/sql_create.c:470 -#, c-format -msgid "Create DB Media record %s failed. ERR=%s\n" +#: src/dird/ua_update.c:601 +msgid "Slot" msgstr "" -#: src/cats/sql_create.c:521 -#, c-format -msgid "More than one Client!: %d\n" +#: src/dird/ua_update.c:602 +msgid "InChanger Flag" msgstr "" -#: src/cats/sql_create.c:526 -#, c-format -msgid "error fetching Client row: %s\n" +#: src/dird/ua_update.c:603 +msgid "Volume Files" msgstr "" -#: src/cats/sql_create.c:554 -#, c-format -msgid "Create DB Client record %s failed. ERR=%s\n" +#: src/dird/ua_update.c:605 +msgid "Volume from Pool" msgstr "" -#: src/cats/sql_create.c:589 src/cats/sql_get.c:251 -#, c-format -msgid "More than one Path!: %s for path: %s\n" +#: src/dird/ua_update.c:606 +msgid "All Volumes from Pool" msgstr "" -#: src/cats/sql_create.c:596 src/cats/sql_get.c:205 src/cats/sql_get.c:258 -#: src/cats/sql_get.c:640 src/cats/sql_get.c:722 src/cats/sql_get.c:1039 -#: src/cats/sql.c:340 src/cats/sql.c:347 src/cats/postgresql.c:165 -#, c-format -msgid "error fetching row: %s\n" +#: src/dird/ua_update.c:607 +msgid "All Volumes from all Pools" msgstr "" -#: src/cats/sql_create.c:621 -#, c-format -msgid "Create db Path record %s failed. ERR=%s\n" +#: src/dird/ua_update.c:608 +msgid "Enabled" msgstr "" -#: src/cats/sql_create.c:666 -#, c-format -msgid "Create DB Counters record %s failed. ERR=%s\n" +#: src/dird/ua_update.c:609 +msgid "RecyclePool" msgstr "" -#: src/cats/sql_create.c:704 -#, c-format -msgid "More than one FileSet!: %d\n" +#: src/dird/ua_update.c:610 +msgid "Action On Purge" +msgstr "" + +#: src/dird/ua_update.c:611 +msgid "Done" msgstr "" -#: src/cats/sql_create.c:709 +#: src/dird/ua_update.c:620 #, c-format -msgid "error fetching FileSet row: ERR=%s\n" +msgid "Updating Volume \"%s\"\n" msgstr "" -#: src/cats/sql_create.c:740 +#: src/dird/ua_update.c:625 #, c-format -msgid "Create DB FileSet record %s failed. ERR=%s\n" +msgid "Current Volume status is: %s\n" +msgstr "" + +#: src/dird/ua_update.c:626 +msgid "Possible Values are:\n" +msgstr "" + +#: src/dird/ua_update.c:637 +msgid "Choose new Volume Status" msgstr "" -#: src/cats/sql_create.c:989 +#: src/dird/ua_update.c:643 #, c-format -msgid "Create db File record %s failed. ERR=%s" +msgid "Current retention period is: %s\n" +msgstr "" + +#: src/dird/ua_update.c:645 +msgid "Enter Volume Retention period: " msgstr "" -#: src/cats/sql_create.c:1015 +#: src/dird/ua_update.c:652 #, c-format -msgid "More than one Filename! %s for file: %s\n" +msgid "Current use duration is: %s\n" +msgstr "" + +#: src/dird/ua_update.c:654 +msgid "Enter Volume Use Duration: " msgstr "" -#: src/cats/sql_create.c:1021 +#: src/dird/ua_update.c:661 #, c-format -msgid "Error fetching row for file=%s: ERR=%s\n" +msgid "Current max jobs is: %u\n" +msgstr "" + +#: src/dird/ua_update.c:662 +msgid "Enter new Maximum Jobs: " msgstr "" -#: src/cats/sql_create.c:1038 +#: src/dird/ua_update.c:669 #, c-format -msgid "Create db Filename record %s failed. ERR=%s\n" +msgid "Current max files is: %u\n" msgstr "" -#: src/cats/sql_create.c:1058 +#: src/dird/ua_update.c:670 +msgid "Enter new Maximum Files: " +msgstr "" + +#: src/dird/ua_update.c:677 #, c-format -msgid "Attempt to put non-attributes into catalog. Stream=%d\n" +msgid "Current value is: %s\n" msgstr "" -#: src/cats/sql_create.c:1074 -msgid "Cannot Copy/Migrate job using BaseJob.\n" +#: src/dird/ua_update.c:678 +msgid "Enter new Maximum Bytes: " msgstr "" -#: src/cats/sql_create.c:1166 src/cats/sql_get.c:1136 -msgid "ERR=JobIds are empty\n" +#: src/dird/ua_update.c:686 +#, c-format +msgid "Current recycle flag is: %s\n" +msgstr "" + +#: src/dird/ua_update.c:688 +msgid "Enter new Recycle status: " msgstr "" -#: src/cats/sql_create.c:1219 +#: src/dird/ua_update.c:695 #, c-format -msgid "Create db Object record %s failed. ERR=%s" +msgid "Current Slot is: %d\n" +msgstr "" + +#: src/dird/ua_update.c:696 +msgid "Enter new Slot: " msgstr "" -#: src/cats/sql_get.c:151 +#: src/dird/ua_update.c:703 #, c-format -msgid "Error fetching row: %s\n" +msgid "Current InChanger flag is: %d\n" msgstr "" -#: src/cats/sql_get.c:158 +#: src/dird/ua_update.c:704 #, c-format -msgid "get_file_record want 1 got rows=%d PathId=%s FilenameId=%s\n" +msgid "Set InChanger flag for Volume \"%s\": yes/no: " msgstr "" -#: src/cats/sql_get.c:166 +#: src/dird/ua_update.c:718 #, c-format -msgid "File record for PathId=%s FilenameId=%s not found.\n" +msgid "New InChanger flag is: %d\n" msgstr "" -#: src/cats/sql_get.c:172 -msgid "File record not found in Catalog.\n" +#: src/dird/ua_update.c:725 +msgid "" +"Warning changing Volume Files can result\n" +"in loss of data on your Volume\n" +"\n" msgstr "" -#: src/cats/sql_get.c:199 +#: src/dird/ua_update.c:727 #, c-format -msgid "More than one Filename!: %s for file: %s\n" +msgid "Current Volume Files is: %u\n" msgstr "" -#: src/cats/sql_get.c:209 -#, c-format -msgid "Get DB Filename record %s found bad record: %d\n" +#: src/dird/ua_update.c:728 +msgid "Enter new number of Files for Volume: " +msgstr "" + +#: src/dird/ua_update.c:733 +msgid "Normally, you should only increase Volume Files by one!\n" +msgstr "" + +#: src/dird/ua_update.c:734 +msgid "Increase Volume Files? (yes/no): " msgstr "" -#: src/cats/sql_get.c:215 +#: src/dird/ua_update.c:744 #, c-format -msgid "Filename record: %s not found.\n" +msgid "New Volume Files is: %u\n" msgstr "" -#: src/cats/sql_get.c:219 +#: src/dird/ua_update.c:756 #, c-format -msgid "Filename record: %s not found in Catalog.\n" +msgid "Current Pool is: %s\n" msgstr "" -#: src/cats/sql_get.c:262 -#, c-format -msgid "Get DB path record %s found bad record: %s\n" +#: src/dird/ua_update.c:757 +msgid "Enter new Pool name: " msgstr "" -#: src/cats/sql_get.c:275 +#: src/dird/ua_update.c:778 #, c-format -msgid "Path record: %s not found.\n" +msgid "Current Enabled is: %d\n" msgstr "" -#: src/cats/sql_get.c:279 -#, c-format -msgid "Path record: %s not found in Catalog.\n" +#: src/dird/ua_update.c:779 +msgid "Enter new Enabled: " msgstr "" -#: src/cats/sql_get.c:318 +#: src/dird/ua_update.c:789 #, c-format -msgid "No Job found for JobId %s\n" +msgid "Current RecyclePool is: %s\n" msgstr "" -#: src/cats/sql_get.c:391 src/cats/sql_get.c:448 -#, c-format -msgid "No volumes found for JobId=%d\n" +#: src/dird/ua_update.c:791 +msgid "No current RecyclePool\n" msgstr "" -#: src/cats/sql_get.c:397 src/cats/sql_get.c:459 +#: src/dird/ua_update.c:801 #, c-format -msgid "Error fetching row %d: ERR=%s\n" +msgid "Current ActionOnPurge is: %s\n" msgstr "" -#: src/cats/sql_get.c:411 -#, c-format -msgid "No Volume for JobId %d found in Catalog.\n" +#: src/dird/ua_update.c:803 +msgid "Enter new ActionOnPurge (one of: Truncate, None): " msgstr "" -#: src/cats/sql_get.c:552 -#, c-format -msgid "Pool id select failed: ERR=%s\n" +#: src/dird/ua_update.c:811 +msgid "Selection terminated.\n" msgstr "" -#: src/cats/sql_get.c:589 +#: src/dird/ua_update.c:831 #, c-format -msgid "Client id select failed: ERR=%s\n" +msgid "Updating %i job(s).\n" msgstr "" -#: src/cats/sql_get.c:635 +#: src/dird/ua_update.c:863 #, c-format -msgid "More than one Pool!: %s\n" +msgid "db_update_pool_record returned %d. ERR=%s\n" msgstr "" -#: src/cats/sql_get.c:679 -msgid "Pool record not found in Catalog.\n" +#: src/dird/ua_update.c:870 +msgid "Pool DB record updated from resource.\n" msgstr "" -#: src/cats/sql_get.c:717 -#, c-format -msgid "More than one Client!: %s\n" +#: src/dird/ua_update.c:897 +msgid "Expect JobId keyword, not found.\n" msgstr "" -#: src/cats/sql_get.c:734 src/cats/sql_get.c:738 -msgid "Client record not found in Catalog.\n" +#: src/dird/ua_update.c:922 +msgid "Neither Client nor StartTime specified.\n" msgstr "" -#: src/cats/sql_get.c:765 +#: src/dird/catreq.c:121 src/dird/catreq.c:364 #, c-format -msgid "More than one Counter!: %d\n" +msgid "1990 Invalid Catalog Request: %s" msgstr "" -#: src/cats/sql_get.c:770 +#: src/dird/catreq.c:122 #, c-format -msgid "error fetching Counter row: %s\n" +msgid "Invalid Catalog request; DB not open: %s" msgstr "" -#: src/cats/sql_get.c:790 +#: src/dird/catreq.c:143 #, c-format -msgid "Counter record: %s not found in Catalog.\n" +msgid "Pool \"%s\" not found for SD find media request.\n" msgstr "" -#: src/cats/sql_get.c:830 -#, c-format -msgid "Error got %s FileSets but expected only one!\n" +#: src/dird/catreq.c:152 +msgid "1901 No Media.\n" msgstr "" -#: src/cats/sql_get.c:835 -#, c-format -msgid "FileSet record \"%s\" not found.\n" +#: src/dird/catreq.c:184 +msgid "not in Pool" msgstr "" -#: src/cats/sql_get.c:845 -msgid "FileSet record not found in Catalog.\n" +#: src/dird/catreq.c:186 +msgid "not correct MediaType" msgstr "" -#: src/cats/sql_get.c:941 -#, c-format -msgid "Media id select failed: ERR=%s\n" +#: src/dird/catreq.c:196 +msgid "is not Enabled" msgstr "" -#: src/cats/sql_get.c:979 +#: src/dird/catreq.c:205 #, c-format -msgid "query dbids failed: ERR=%s\n" +msgid "1998 Volume \"%s\" catalog status is %s, %s.\n" msgstr "" -#: src/cats/sql_get.c:1034 +#: src/dird/catreq.c:210 #, c-format -msgid "More than one Volume!: %s\n" +msgid "1997 Volume \"%s\" not in catalog.\n" msgstr "" -#: src/cats/sql_get.c:1090 +#: src/dird/catreq.c:236 #, c-format -msgid "Media record MediaId=%s not found.\n" +msgid "Unable to get Media record for Volume %s: ERR=%s\n" msgstr "" -#: src/cats/sql_get.c:1093 +#: src/dird/catreq.c:238 #, c-format -msgid "Media record for Volume \"%s\" not found.\n" +msgid "1991 Catalog Request for vol=%s failed: %s" msgstr "" -#: src/cats/sql_get.c:1100 +#: src/dird/catreq.c:265 #, c-format -msgid "Media record for MediaId=%u not found in Catalog.\n" +msgid "Attempt to set Volume Files from %u to %u for Volume \"%s\". Ignored.\n" msgstr "" -#: src/cats/sql_get.c:1103 +#: src/dird/catreq.c:321 #, c-format -msgid "Media record for Vol=%s not found in Catalog.\n" +msgid "Catalog error updating Media record. %s" msgstr "" -#: src/cats/sql_find.c:98 src/cats/sql_find.c:127 src/cats/sql_find.c:182 -#, c-format -msgid "" -"Query error for start time request: ERR=%s\n" -"CMD=%s\n" +#: src/dird/catreq.c:323 +msgid "1993 Update Media error\n" msgstr "" -#: src/cats/sql_find.c:104 src/cats/sql_find.c:188 -msgid "No prior Full backup Job record found.\n" +#: src/dird/catreq.c:350 +#, c-format +msgid "Catalog error creating JobMedia record. %s" msgstr "" -#: src/cats/sql_find.c:116 -#, c-format -msgid "Unknown level=%d\n" +#: src/dird/catreq.c:352 +msgid "1992 Create JobMedia error\n" msgstr "" -#: src/cats/sql_find.c:133 +#: src/dird/catreq.c:365 #, c-format -msgid "" -"No Job record found: ERR=%s\n" -"CMD=%s\n" +msgid "Invalid Catalog request: %s" msgstr "" -#: src/cats/sql_find.c:291 +#: src/dird/catreq.c:452 #, c-format -msgid "Unknown Job level=%d\n" +msgid "Attribute create error: ERR=%s" msgstr "" -#: src/cats/sql_find.c:301 +#: src/dird/catreq.c:549 #, c-format -msgid "No Job found for: %s.\n" +msgid "Restore object create error. %s" msgstr "" -#: src/cats/sql_find.c:312 +#: src/dird/catreq.c:556 #, c-format -msgid "No Job found for: %s\n" +msgid "%s not same File=%d as attributes=%d\n" msgstr "" -#: src/cats/sql_find.c:393 +#: src/dird/catreq.c:583 #, c-format -msgid "Request for Volume item %d greater than max %d or less than 1\n" +msgid "Catalog error updating file digest. Unsupported digest stream type: %d" msgstr "" -#: src/cats/sql_find.c:408 +#: src/dird/catreq.c:598 #, c-format -msgid "No Volume record found for item %d.\n" +msgid "attribute create error. %s" msgstr "" -#: src/cats/sqlite.c:166 src/cats/ingres.c:255 src/cats/postgresql.c:210 -#: src/cats/dbi.c:228 src/cats/mysql.c:164 +#: src/dird/catreq.c:604 #, c-format -msgid "Unable to initialize DB lock. ERR=%s\n" +msgid "Catalog error updating file digest. %s" msgstr "" -#: src/cats/sqlite.c:181 +#: src/dird/catreq.c:627 #, c-format -msgid "Database %s does not exist, please create it.\n" +msgid "1994 Invalid Catalog Update: %s" msgstr "" -#: src/cats/sqlite.c:203 +#: src/dird/catreq.c:628 #, c-format -msgid "Unable to open Database=%s. ERR=%s\n" +msgid "Invalid Catalog Update; DB not open: %s" msgstr "" -#: src/cats/sqlite.c:204 -msgid "unknown" +#: src/dird/catreq.c:684 src/dird/catreq.c:699 +#, c-format +msgid "fread attr spool error. ERR=%s\n" msgstr "" -#: src/cats/sqlite.c:462 src/cats/ingres.c:496 src/cats/postgresql.c:506 -#: src/cats/postgresql.c:553 src/cats/dbi.c:631 src/cats/cats.c:149 -#: src/cats/mysql.c:393 +#: src/findlib/match.c:198 src/filed/job.c:1615 src/tools/testfind.c:642 #, c-format -msgid "Query failed: %s: ERR=%s\n" +msgid "Unknown include/exclude option: %c\n" msgstr "" -#: src/cats/ingres.c:87 -msgid "Failed to allocate space for query filter.\n" +#: src/findlib/bfile.c:85 +msgid "Unix attributes" msgstr "" -#: src/cats/ingres.c:108 -msgid "Failed to allocate space for query filters.\n" +#: src/findlib/bfile.c:87 +msgid "File data" msgstr "" -#: src/cats/ingres.c:267 -#, c-format -msgid "" -"Unable to connect to Ingres server.\n" -"Database=%s User=%s\n" -"It is probably not running or your password is incorrect.\n" +#: src/findlib/bfile.c:89 +msgid "MD5 digest" msgstr "" -#: src/cats/ingres.c:1087 -msgid "A user name for Ingres must be supplied.\n" +#: src/findlib/bfile.c:91 +msgid "GZIP data" msgstr "" -#: src/cats/sql.c:184 -#, c-format -msgid "" -"Potential performance problem:\n" -"max_connections=%d set for %s database \"%s\" should be larger than " -"Director's MaxConcurrentJobs=%d\n" +#: src/findlib/bfile.c:93 +msgid "Compressed data" msgstr "" -#: src/cats/sql.c:229 -#, c-format -msgid "" -"query %s failed:\n" -"%s\n" +#: src/findlib/bfile.c:95 +msgid "Extended attributes" msgstr "" -#: src/cats/sql.c:251 -#, c-format -msgid "" -"insert %s failed:\n" -"%s\n" +#: src/findlib/bfile.c:97 +msgid "Sparse data" msgstr "" -#: src/cats/sql.c:261 -#, c-format -msgid "Insertion problem: affected_rows=%s\n" +#: src/findlib/bfile.c:99 +msgid "GZIP sparse data" msgstr "" -#: src/cats/sql.c:282 -#, c-format -msgid "" -"update %s failed:\n" -"%s\n" +#: src/findlib/bfile.c:101 +msgid "Compressed sparse data" msgstr "" -#: src/cats/sql.c:292 -#, c-format -msgid "Update failed: affected_rows=%s for %s\n" +#: src/findlib/bfile.c:103 +msgid "Program names" msgstr "" -#: src/cats/sql.c:314 -#, c-format -msgid "" -"delete %s failed:\n" -"%s\n" +#: src/findlib/bfile.c:105 +msgid "Program data" msgstr "" -#: src/cats/sql.c:408 -#, c-format -msgid "Path length is zero. File=%s\n" +#: src/findlib/bfile.c:107 +msgid "SHA1 digest" msgstr "" -#: src/cats/sql.c:603 -msgid "No results to list.\n" +#: src/findlib/bfile.c:109 +msgid "Win32 data" msgstr "" -#: src/cats/sql.c:721 -#, fuzzy -msgid "Could not init database batch connection\n" -msgstr "Data parser kon niet geregistreerd worden!" - -#: src/cats/sql.c:727 -#, c-format -msgid "Could not open database \"%s\": ERR=%s\n" +#: src/findlib/bfile.c:111 +msgid "Win32 GZIP data" msgstr "" -#: src/cats/postgresql.c:181 -#, c-format -msgid "Encoding error for database \"%s\". Wanted SQL_ASCII, got %s\n" +#: src/findlib/bfile.c:113 +msgid "Win32 compressed data" msgstr "" -#: src/cats/postgresql.c:246 -#, c-format -msgid "" -"Unable to connect to PostgreSQL server. Database=%s User=%s\n" -"Possible causes: SQL server not running; password incorrect; max_connections " -"exceeded.\n" +#: src/findlib/bfile.c:115 +msgid "MacOS Fork data" msgstr "" -#: src/cats/postgresql.c:350 -msgid "PQescapeStringConn returned non-zero.\n" +#: src/findlib/bfile.c:117 +msgid "HFS+ attribs" msgstr "" -#: src/cats/postgresql.c:368 -msgid "PQescapeByteaConn returned NULL.\n" +#: src/findlib/bfile.c:119 +msgid "Standard Unix ACL attribs" msgstr "" -#: src/cats/postgresql.c:399 -msgid "PQunescapeByteaConn returned NULL.\n" +#: src/findlib/bfile.c:121 +msgid "Default Unix ACL attribs" msgstr "" -#: src/cats/postgresql.c:813 -#, c-format -msgid "error fetching currval: %s\n" +#: src/findlib/bfile.c:123 +msgid "SHA256 digest" msgstr "" -#: src/cats/postgresql.c:1004 src/cats/dbi.c:1277 -#, c-format -msgid "error starting batch mode: %s" +#: src/findlib/bfile.c:125 +msgid "SHA512 digest" msgstr "" -#: src/cats/postgresql.c:1034 src/cats/postgresql.c:1041 -#, c-format -msgid "error ending batch mode: %s" +#: src/findlib/bfile.c:127 +msgid "Signed digest" msgstr "" -#: src/cats/postgresql.c:1088 -#, c-format -msgid "error copying in batch mode: %s" +#: src/findlib/bfile.c:129 +msgid "Encrypted File data" msgstr "" -#: src/cats/postgresql.c:1110 -msgid "A user name for PostgreSQL must be supplied.\n" +#: src/findlib/bfile.c:131 +msgid "Encrypted Win32 data" msgstr "" -#: src/cats/sql_list.c:59 -#, c-format -msgid "Query failed: %s\n" +#: src/findlib/bfile.c:133 +msgid "Encrypted session data" msgstr "" -#: src/cats/sql_list.c:275 -msgid "These JobIds have copies as follows:\n" +#: src/findlib/bfile.c:135 +msgid "Encrypted GZIP data" msgstr "" -#: src/cats/sql_list.c:277 -msgid "The catalog contains copies as follows:\n" +#: src/findlib/bfile.c:137 +msgid "Encrypted compressed data" msgstr "" -#: src/cats/dbi.c:117 -#, c-format -msgid "Unknown database type: %s\n" +#: src/findlib/bfile.c:139 +msgid "Encrypted Win32 GZIP data" msgstr "" -#: src/cats/dbi.c:242 -#, c-format -msgid "" -"Unable to locate the DBD drivers to DBI interface in: \n" -"db_driverdir=%s. It is probaly not found any drivers\n" +#: src/findlib/bfile.c:141 +msgid "Encrypted Win32 Compressed data" msgstr "" -#: src/cats/dbi.c:299 -#, c-format -msgid "" -"Unable to connect to DBI interface. Type=%s Database=%s User=%s\n" -"Possible causes: SQL server not running; password incorrect; max_connections " -"exceeded.\n" +#: src/findlib/bfile.c:143 +msgid "Encrypted MacOS fork data" msgstr "" -#: src/cats/dbi.c:1439 -#, c-format -msgid "error inserting batch mode: %s" +#: src/findlib/bfile.c:145 +msgid "Plugin Name" msgstr "" -#: src/cats/dbi.c:1456 -msgid "Driver type not specified in Catalog resource.\n" +#: src/findlib/bfile.c:147 +msgid "Plugin Data" msgstr "" -#: src/cats/dbi.c:1460 -msgid "Invalid driver type, must be \"dbi:\"\n" -msgstr "" +#: src/findlib/bfile.c:149 +#, fuzzy +msgid "Restore Object" +msgstr "Uitvoeren herstel opdracht" -#: src/cats/dbi.c:1464 -msgid "A user name for DBI must be supplied.\n" +#: src/findlib/bfile.c:151 +msgid "AIX Specific ACL attribs" msgstr "" -#: src/cats/cats_dummy.c:39 -msgid "Please replace this dummy libbaccats library with a proper one.\n" +#: src/findlib/bfile.c:153 +msgid "Darwin Specific ACL attribs" msgstr "" -#: src/cats/sql_delete.c:80 -#, c-format -msgid "No pool record %s exists\n" +#: src/findlib/bfile.c:155 +msgid "FreeBSD Specific Default ACL attribs" msgstr "" -#: src/cats/sql_delete.c:85 -#, c-format -msgid "Expecting one pool record, got %d\n" +#: src/findlib/bfile.c:157 +msgid "FreeBSD Specific Access ACL attribs" msgstr "" -#: src/cats/sql_delete.c:91 -#, c-format -msgid "Error fetching row %s\n" +#: src/findlib/bfile.c:159 +msgid "HPUX Specific ACL attribs" msgstr "" -#: src/cats/mysql.c:207 -#, c-format -msgid "" -"Unable to connect to MySQL server.\n" -"Database=%s User=%s\n" -"MySQL connect failed either server not running or your authorization is " -"incorrect.\n" +#: src/findlib/bfile.c:161 +msgid "Irix Specific Default ACL attribs" msgstr "" -#: src/cats/mysql.c:692 -msgid "A user name for MySQL must be supplied.\n" +#: src/findlib/bfile.c:163 +msgid "Irix Specific Access ACL attribs" msgstr "" -#: src/wx-console/console_conf.c:147 src/console/console_conf.c:140 -#: src/qt-console/bat_conf.cpp:141 -#, c-format -msgid "No record for %d %s\n" +#: src/findlib/bfile.c:165 +msgid "Linux Specific Default ACL attribs" msgstr "" -#: src/wx-console/console_conf.c:156 src/console/console_conf.c:149 -#, c-format -msgid "Console: name=%s rcfile=%s histfile=%s\n" +#: src/findlib/bfile.c:167 +msgid "Linux Specific Access ACL attribs" msgstr "" -#: src/wx-console/console_conf.c:160 src/console/console_conf.c:153 -#: src/qt-console/bat_conf.cpp:150 -#, c-format -msgid "Director: name=%s address=%s DIRport=%d\n" +#: src/findlib/bfile.c:169 +msgid "TRU64 Specific Default ACL attribs" msgstr "" -#: src/wx-console/authenticate.c:142 src/console/authenticate.c:138 -msgid "TLS negotiation failed\n" +#: src/findlib/bfile.c:171 +msgid "TRU64 Specific Access ACL attribs" msgstr "" -#: src/wx-console/authenticate.c:150 -msgid "Bad response to Hello command: ERR=" +#: src/findlib/bfile.c:173 +msgid "Solaris Specific POSIX ACL attribs" msgstr "" -#: src/wx-console/authenticate.c:167 src/console/authenticate.c:169 -msgid "" -"Director authorization problem.\n" -"Most likely the passwords do not agree.\n" -"If you are using TLS, there may have been a certificate validation error " -"during the TLS handshake.\n" -"Please see " +#: src/findlib/bfile.c:175 +msgid "Solaris Specific NFSv4/ZFS ACL attribs" msgstr "" -#: src/console/console.c:126 -#, c-format -msgid "" -"\n" -"Version: " +#: src/findlib/bfile.c:177 +msgid "AFS Specific ACL attribs" msgstr "" -#: src/console/console.c:178 -msgid "input from file" +#: src/findlib/bfile.c:179 +msgid "AIX Specific POSIX ACL attribs" msgstr "" -#: src/console/console.c:179 -msgid "output to file" +#: src/findlib/bfile.c:181 +msgid "AIX Specific NFSv4 ACL attribs" msgstr "" -#: src/console/console.c:180 -msgid "quit" +#: src/findlib/bfile.c:183 +msgid "FreeBSD Specific NFSv4/ZFS ACL attribs" msgstr "" -#: src/console/console.c:181 -msgid "output to file and terminal" +#: src/findlib/bfile.c:185 +msgid "GNU Hurd Specific Default ACL attribs" msgstr "" -#: src/console/console.c:182 -msgid "sleep specified time" +#: src/findlib/bfile.c:187 +msgid "GNU Hurd Specific Access ACL attribs" msgstr "" -#: src/console/console.c:183 -msgid "print current time" +#: src/findlib/bfile.c:189 +msgid "GNU Hurd Specific Extended attribs" msgstr "" -#: src/console/console.c:184 -msgid "print Console's version" +#: src/findlib/bfile.c:191 +msgid "IRIX Specific Extended attribs" msgstr "" -#: src/console/console.c:185 -msgid "echo command string" +#: src/findlib/bfile.c:193 +msgid "TRU64 Specific Extended attribs" msgstr "" -#: src/console/console.c:186 -msgid "execute an external command" +#: src/findlib/bfile.c:195 +msgid "AIX Specific Extended attribs" msgstr "" -#: src/console/console.c:187 -msgid "exit = quit" +#: src/findlib/bfile.c:197 +msgid "OpenBSD Specific Extended attribs" msgstr "" -#: src/console/console.c:188 -msgid "zed_keys = use zed keys instead of bash keys" +#: src/findlib/bfile.c:199 +msgid "Solaris Specific Extensible attribs or System Extended attribs" msgstr "" -#: src/console/console.c:189 -msgid "help listing" +#: src/findlib/bfile.c:201 +msgid "Solaris Specific Extended attribs" msgstr "" -#: src/console/console.c:191 -msgid "set command separator" +#: src/findlib/bfile.c:203 +msgid "Darwin Specific Extended attribs" msgstr "" -#: src/console/console.c:225 -msgid ": is an invalid command\n" +#: src/findlib/bfile.c:205 +msgid "FreeBSD Specific Extended attribs" msgstr "" -#: src/console/console.c:675 -msgid "Illegal separator character.\n" +#: src/findlib/bfile.c:207 +msgid "Linux Specific Extended attribs" msgstr "" -#: src/console/console.c:708 -msgid "Command logic problem\n" +#: src/findlib/bfile.c:209 +msgid "NetBSD Specific Extended attribs" msgstr "" -#: src/console/console.c:925 +#: src/findlib/makepath.c:141 #, c-format -msgid "Can't find %s in Director list\n" +msgid "Cannot create directory %s: ERR=%s\n" msgstr "" -#: src/console/console.c:933 -msgid "Available Directors:\n" +#: src/findlib/makepath.c:145 src/findlib/makepath.c:219 +#, c-format +msgid "%s exists but is not a directory.\n" msgstr "" -#: src/console/console.c:937 +#: src/findlib/makepath.c:155 #, c-format -msgid "%2d: %s at %s:%d\n" +msgid "Security problem!! We created directory %s, but it is a link.\n" msgstr "" -#: src/console/console.c:941 -msgid "Select Director by entering a number: " +#: src/findlib/makepath.c:181 +#, c-format +msgid "Cannot change owner and/or group of %s: ERR=%s\n" msgstr "" -#: src/console/console.c:948 +#: src/findlib/makepath.c:186 #, c-format -msgid "%s is not a number. You must enter a number between 1 and %d\n" +msgid "Cannot change permissions of %s: ERR=%s\n" msgstr "" -#: src/console/console.c:955 +#: src/findlib/makepath.c:256 #, c-format -msgid "You must enter a number between 1 and %d\n" +msgid "%c: is not a valid drive.\n" msgstr "" -#: src/console/console.c:1160 src/wx-console/console_thread.cpp:399 -#: src/qt-console/bcomm/dircomm.cpp:131 -#, c-format -msgid "Failed to initialize TLS context for Console \"%s\".\n" +#: src/findlib/makepath.c:300 +msgid "Too many subdirectories. Some permissions not reset.\n" msgstr "" -#: src/console/console.c:1180 src/wx-console/console_thread.cpp:420 -#: src/qt-console/bcomm/dircomm.cpp:154 +#: src/findlib/file_create.c:102 #, c-format -msgid "Failed to initialize TLS context for Director \"%s\".\n" +msgid "File skipped. Not newer: %s\n" msgstr "" -#: src/console/console.c:1210 -msgid "Enter a period to cancel a command.\n" +#: src/findlib/file_create.c:109 +#, c-format +msgid "File skipped. Not older: %s\n" msgstr "" -#: src/console/console.c:1304 src/qt-console/main.cpp:232 +#: src/findlib/file_create.c:119 #, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Director \"%s\" in %s. At least one CA certificate store is required.\n" +msgid "File skipped. Already exists: %s\n" msgstr "" -#: src/console/console.c:1313 src/qt-console/main.cpp:241 +#: src/findlib/file_create.c:145 #, c-format -msgid "" -"No Director resource defined in %s\n" -"Without that I don't how to speak to the Director :-(\n" +msgid "File %s already exists and could not be replaced. ERR=%s.\n" msgstr "" -#: src/console/console.c:1333 src/qt-console/main.cpp:262 +#: src/findlib/file_create.c:196 src/findlib/file_create.c:259 +#: src/findlib/file_create.c:348 #, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Console \"%s\" in %s.\n" +msgid "bpkt already open fid=%d\n" msgstr "" -#: src/console/console.c:1359 -msgid "Too many arguments on input command.\n" +#: src/findlib/file_create.c:204 src/filed/fd_plugins.c:1004 +#, c-format +msgid "Could not create %s: ERR=%s\n" msgstr "" -#: src/console/console.c:1363 -msgid "First argument to input command must be a filename.\n" +#: src/findlib/file_create.c:218 +#, c-format +msgid "Cannot make fifo %s: ERR=%s\n" msgstr "" -#: src/console/console.c:1369 +#: src/findlib/file_create.c:236 #, c-format -msgid "Cannot open file %s for input. ERR=%s\n" +msgid "Cannot make node %s: ERR=%s\n" msgstr "" -#: src/console/console.c:1401 -msgid "Too many arguments on output/tee command.\n" +#: src/findlib/file_create.c:281 +#, c-format +msgid "Could not symlink %s -> %s: ERR=%s\n" msgstr "" -#: src/console/console.c:1418 +#: src/findlib/file_create.c:304 src/findlib/file_create.c:317 #, c-format -msgid "Cannot open file %s for output. ERR=%s\n" +msgid "Could not restore file flags for file %s: ERR=%s\n" msgstr "" -#: src/console/console.c:1437 -msgid "Too many arguments. Enclose command in double quotes.\n" +#: src/findlib/file_create.c:308 src/findlib/file_create.c:325 +#, c-format +msgid "Could not hard link %s -> %s: ERR=%s\n" msgstr "" -#: src/console/console.c:1446 +#: src/findlib/file_create.c:321 #, c-format -msgid "Cannot popen(\"%s\", \"r\"): ERR=%s\n" +msgid "Could not reset file flags for file %s: ERR=%s\n" msgstr "" -#: src/tools/testls.c:59 +#: src/findlib/file_create.c:363 #, c-format -msgid "" -"\n" -"Usage: testls [-d debug_level] [-] [pattern1 ...]\n" -" -a print extended attributes (Win32 debug)\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -e specify file of exclude patterns\n" -" -i specify file of include patterns\n" -" -q quiet, don't print filenames (debug)\n" -" - read pattern(s) from stdin\n" -" -? print this message.\n" -"\n" -"Patterns are file inclusion -- normally directories.\n" -"Debug level >= 1 prints each file found.\n" -"Debug level >= 10 prints path/file for catalog.\n" -"Errors always printed.\n" -"Files/paths truncated is number with len > 255.\n" -"Truncation is only in catalog.\n" -"\n" +msgid "Original file %s have been deleted: type=%d\n" msgstr "" -#: src/tools/testls.c:155 +#: src/findlib/file_create.c:375 #, c-format -msgid "Could not open include file: %s\n" +msgid "Original file %s not saved: type=%d\n" msgstr "" -#: src/tools/testls.c:168 +#: src/findlib/file_create.c:378 #, c-format -msgid "Could not open exclude file: %s\n" +msgid "Unknown file type %d; not restored: %s\n" msgstr "" -#: src/tools/testls.c:182 +#: src/findlib/file_create.c:413 #, c-format -msgid "Files seen = %d\n" +msgid "Zero length filename: %s\n" msgstr "" -#: src/tools/testls.c:215 src/tools/testfind.c:322 +#: src/findlib/find.c:186 #, c-format -msgid "Err: Could not access %s: %s\n" +msgid "Plugin: \"%s\" not found.\n" msgstr "" -#: src/tools/testls.c:218 src/tools/testfind.c:325 +#: src/findlib/file_attrs.c:96 src/findlib/file_attrs.c:138 #, c-format -msgid "Err: Could not follow ff->link %s: %s\n" +msgid "Unable to set file modes %s: ERR=%s\n" msgstr "" -#: src/tools/testls.c:221 src/tools/testfind.c:328 +#: src/findlib/file_attrs.c:106 src/findlib/file_attrs.c:132 +#: src/findlib/file_attrs.c:589 #, c-format -msgid "Err: Could not stat %s: %s\n" +msgid "Unable to set file owner %s: ERR=%s\n" msgstr "" -#: src/tools/testls.c:224 src/tools/testfind.c:331 +#: src/findlib/file_attrs.c:125 src/findlib/file_attrs.c:150 #, c-format -msgid "Skip: File not saved. No change. %s\n" +msgid "Unable to set file times %s: ERR=%s\n" msgstr "" -#: src/tools/testls.c:227 src/tools/testfind.c:334 +#: src/findlib/file_attrs.c:566 #, c-format -msgid "Err: Attempt to backup archive. Not saved. %s\n" +msgid "File size of restored file %s not correct. Original %s, restored %s.\n" msgstr "" -#: src/tools/testls.c:230 +#: src/findlib/file_attrs.c:609 #, c-format -msgid "Recursion turned off. Directory not entered. %s\n" +msgid "Unable to set file flags %s: ERR=%s\n" msgstr "" -#: src/tools/testls.c:233 +#: src/findlib/find_one.c:215 #, c-format -msgid "Skip: File system change prohibited. Directory not entered. %s\n" +msgid " NODUMP flag set - will not process %s\n" msgstr "" -#: src/tools/testls.c:236 src/tools/testfind.c:337 +#: src/findlib/find_one.c:236 #, c-format -msgid "Err: Could not open directory %s: %s\n" +msgid "Cannot stat file %s: ERR=%s\n" msgstr "" -#: src/tools/testls.c:239 src/tools/testfind.c:340 +#: src/findlib/find_one.c:241 #, c-format -msgid "Err: Unknown file ff->type %d: %s\n" +msgid "%s mtime changed during backup.\n" msgstr "" -#: src/tools/bvfs_test.c:56 src/tools/ing_test.c:57 +#: src/findlib/find_one.c:248 #, c-format -msgid "" -"\n" -"Version: %s (%s)\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -n specify the database name (default bacula)\n" -" -u specify database user name (default bacula)\n" -" -P specify database host (default NULL)\n" -" -w specify working directory\n" -" -j specify jobids\n" -" -p specify path\n" -" -f specify file\n" -" -l maximum tuple to fetch\n" -" -T truncate cache table before starting\n" -" -v verbose\n" -" -? print this message\n" -"\n" +msgid "%s ctime changed during backup.\n" msgstr "" -#: src/tools/bbatch.c:79 +#: src/findlib/find_one.c:255 #, c-format -msgid "" -"\n" -"Version: %s (%s)\n" -"Example : bbatch -w /path/to/workdir -h localhost -f dat1 -f dat -f datx\n" -" will start 3 thread and load dat1, dat and datx in your catalog\n" -"See bbatch.c to generate datafile\n" -"\n" -"Usage: bbatch [ options ] -w working/dir -f datafile\n" -" -b with batch mode\n" -" -B without batch mode\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -n specify the database name (default bacula)\n" -" -u specify database user name (default bacula)\n" -" -P specify database host (default NULL)\n" -" -w specify working directory\n" -" -r call restore code with given jobids\n" -" -v verbose\n" -" -f specify data file\n" -" -? print this message\n" -"\n" +msgid "%s size of %lld changed during backup to %lld.n" msgstr "" -#: src/tools/bbatch.c:211 +#: src/findlib/find_one.c:383 #, c-format -msgid "Computing file list for jobid=%s files=%lld secs=%d\n" +msgid "Top level directory \"%s\" has unlisted fstype \"%s\"\n" msgstr "" -#: src/tools/bbatch.c:315 +#: src/findlib/find_one.c:398 #, c-format -msgid "Error opening datafile %s\n" +msgid "Top level directory \"%s\" has an unlisted drive type \"%s\"\n" msgstr "" -#: src/tools/bbatch.c:325 -msgid "Error while inserting file\n" +#: src/filed/job.c:294 +#, fuzzy, c-format +msgid "Command: \"%s\" is disabled.\n" +msgstr "Opdracht mislukt." + +#: src/filed/job.c:440 +msgid "SD connect failed: Bad Hello command\n" msgstr "" -#: src/tools/ing_test.c:231 src/tools/ing_test.c:264 src/tools/ing_test.c:302 -msgid "Stmt went wrong\n" +#: src/filed/job.c:448 +#, c-format +msgid "SD connect failed: Job name not found: %s\n" msgstr "" -#: src/tools/ing_test.c:320 -msgid "CREATE-Stmt went wrong\n" +#: src/filed/job.c:501 +#, c-format +msgid "Bad command from %s. Len=%d.\n" msgstr "" -#: src/tools/ing_test.c:325 -msgid "DROP-Stmt went wrong\n" +#: src/filed/job.c:555 +msgid "2902 Error scanning cancel command.\n" msgstr "" -#: src/tools/fstype.c:48 +#: src/filed/job.c:559 src/filed/job.c:598 #, c-format -msgid "" -"\n" -"Usage: fstype [-v] path ...\n" -"\n" -" Print the file system type a given file/directory is on.\n" -" The following options are supported:\n" -"\n" -" -v print both path and file system type.\n" -" -? print this message.\n" -"\n" +msgid "2901 Job %s not found.\n" msgstr "" -#: src/tools/fstype.c:102 src/tools/drivetype.c:78 +#: src/filed/job.c:569 #, c-format -msgid "%s: unknown\n" +msgid "2001 Job \"%s\" marked to be %s.\n" msgstr "" -#: src/tools/bregex.c:153 src/tools/bwild.c:122 src/tools/bregtest.c:137 +#: src/filed/job.c:592 #, c-format -msgid "Could not open data file: %s\n" +msgid "2991 Bad setbandwidth command: %s\n" msgstr "" -#: src/tools/drivetype.c:47 +#: src/filed/job.c:645 #, c-format -msgid "" -"\n" -"Usage: drivetype [-v] path ...\n" -"\n" -" Print the drive type a given file/directory is on.\n" -" The following options are supported:\n" -"\n" -" -l print local fixed hard drive\n" -" -a display information on all drives\n" -" -v print both path and file system type.\n" -" -? print this message.\n" -"\n" +msgid "2991 Bad setdebug command: %s\n" msgstr "" -#: src/tools/testfind.c:70 +#: src/filed/job.c:678 #, c-format -msgid "" -"\n" -"Usage: testfind [-d debug_level] [-] [pattern1 ...]\n" -" -a print extended attributes (Win32 debug)\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -c specify config file containing FileSet resources\n" -" -f specify which FileSet to use\n" -" -? print this message.\n" -"\n" -"Patterns are used for file inclusion -- normally directories.\n" -"Debug level >= 1 prints each file found.\n" -"Debug level >= 10 prints path/file for catalog.\n" -"Errors are always printed.\n" -"Files/paths truncated is the number of files/paths with len > 255.\n" -"Truncation is only in the catalog.\n" -"\n" +msgid "Bad estimate command: %s" +msgstr "" + +#: src/filed/job.c:679 +msgid "2992 Bad estimate command.\n" msgstr "" -#: src/tools/testfind.c:235 +#: src/filed/job.c:702 #, c-format -msgid "" -"\n" -"Total files : %d\n" -"Max file length: %d\n" -"Max path length: %d\n" -"Files truncated: %d\n" -"Paths truncated: %d\n" -"Hard links : %d\n" +msgid "Bad Job Command: %s" msgstr "" -#: src/tools/testfind.c:278 +#: src/filed/job.c:737 #, c-format -msgid "Reg: %s\n" +msgid "Bad RunBeforeJob command: %s\n" msgstr "" -#: src/tools/testfind.c:300 -msgid "\t[will not descend: recursion turned off]" +#: src/filed/job.c:738 src/filed/job.c:757 +msgid "2905 Bad RunBeforeJob command.\n" msgstr "" -#: src/tools/testfind.c:302 -msgid "\t[will not descend: file system change not allowed]" +#: src/filed/job.c:768 +msgid "2905 Bad RunBeforeNow command.\n" msgstr "" -#: src/tools/testfind.c:304 -msgid "\t[will not descend: disallowed file system]" +#: src/filed/job.c:787 +#, c-format +msgid "Bad RunAfter command: %s\n" msgstr "" -#: src/tools/testfind.c:306 -msgid "\t[will not descend: disallowed drive type]" +#: src/filed/job.c:788 +msgid "2905 Bad RunAfterJob command.\n" msgstr "" -#: src/tools/testfind.c:390 +#: src/filed/job.c:824 #, c-format -msgid "===== Filename truncated to 255 chars: %s\n" +msgid "Bad RunScript command: %s\n" msgstr "" -#: src/tools/testfind.c:407 -#, c-format -msgid "========== Path name truncated to 255 chars: %s\n" +#: src/filed/job.c:825 +msgid "2905 Bad RunScript command.\n" msgstr "" -#: src/tools/testfind.c:416 +#: src/filed/job.c:880 #, c-format -msgid "========== Path length is zero. File=%s\n" +msgid "Bad RestoreObject command: %s\n" +msgstr "" + +#: src/filed/job.c:945 +msgid "2909 Bad RestoreObject command.\n" msgstr "" -#: src/tools/testfind.c:419 +#: src/filed/job.c:984 #, c-format -msgid "Path: %s\n" +msgid "Plugin Directory not defined. Cannot use plugin: \"%s\"\n" msgstr "" -#: src/tools/cats_test.c:60 +#: src/filed/job.c:1026 #, c-format -msgid "" -"\n" -"Version: %s (%s)\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -n specify the database name (default bacula)\n" -" -u specify database user name (default bacula)\n" -" -P specify database host (default NULL)\n" -" -w specify working directory\n" -" -p specify path\n" -" -f specify file\n" -" -l maximum tuple to fetch\n" -" -q print only errors\n" -" -v verbose\n" -" -? print this message\n" -"\n" +msgid "Error running program: %s. stat=%d: ERR=%s\n" msgstr "" -#: src/tools/cats_test.c:376 +#: src/filed/job.c:1037 #, c-format -msgid "Could not open, database \"%s\".\n" +msgid "Cannot open FileSet input file: %s. ERR=%s\n" msgstr "" -#: src/tools/bsmtp.c:151 +#: src/filed/job.c:1191 #, c-format -msgid "Fatal malformed reply from %s: %s\n" +msgid "REGEX %s compile error. ERR=%s\n" msgstr "" -#: src/tools/bsmtp.c:159 +#: src/filed/job.c:1342 #, c-format -msgid "Fatal fgets error: ERR=%s\n" +msgid "Invalid FileSet command: %s\n" msgstr "" -#: src/tools/bsmtp.c:192 +#: src/filed/job.c:1749 #, c-format msgid "" -"\n" -"Usage: %s [-f from] [-h mailhost] [-s subject] [-c copy] [recipient ...]\n" -" -4 forces bsmtp to use IPv4 addresses only.\n" -" -6 forces bsmtp to use IPv6 addresses only.\n" -" -8 set charset to UTF-8\n" -" -a use any ip protocol for address resolution\n" -" -c set the Cc: field\n" -" -d set debug level to \n" -" -dt print a timestamp in debug output\n" -" -f set the From: field\n" -" -h use mailhost:port as the SMTP server\n" -" -s set the Subject: field\n" -" -r set the Reply-To: field\n" -" -l set the maximum number of lines to send (default: " -"unlimited)\n" -" -? print this message.\n" -"\n" +"DIR and FD clocks differ by %lld seconds, FD automatically compensating.\n" msgstr "" -#: src/tools/bsmtp.c:379 -msgid "Fatal error: no recipient given.\n" +#: src/filed/job.c:1758 +#, c-format +msgid "Unknown backup level: %s\n" msgstr "" -#: src/tools/bsmtp.c:407 +#: src/filed/job.c:1771 #, c-format -msgid "Fatal gethostname error: ERR=%s\n" +msgid "Bad level command: %s\n" msgstr "" -#: src/tools/bsmtp.c:418 +#: src/filed/job.c:1793 #, c-format -msgid "Fatal getaddrinfo for myself failed \"%s\": ERR=%s\n" +msgid "Bad session command: %s" msgstr "" -#: src/tools/bsmtp.c:426 -#, c-format -msgid "Fatal gethostbyname for myself failed \"%s\": ERR=%s\n" +#: src/filed/job.c:1922 +#, fuzzy +msgid "Failed connect from Storage daemon. SD bsock=NULL.\n" +msgstr "Kan de geselecteerde opslag niet vinden." + +#: src/filed/job.c:1967 +msgid "ACL support not configured for your machine.\n" +msgstr "" + +#: src/filed/job.c:1971 +msgid "XATTR support not configured for your machine.\n" +msgstr "" + +#: src/filed/job.c:1980 +msgid "Cannot contact Storage daemon\n" msgstr "" -#: src/tools/bsmtp.c:486 src/tools/bsmtp.c:521 +#: src/filed/job.c:1999 #, c-format -msgid "Error unknown mail host \"%s\": ERR=%s\n" +msgid "Bad response to append open: %s\n" msgstr "" -#: src/tools/bsmtp.c:489 src/tools/bsmtp.c:524 -msgid "Retrying connection using \"localhost\".\n" +#: src/filed/job.c:2004 +msgid "Bad response from stored to open command\n" msgstr "" -#: src/tools/bsmtp.c:514 -#, fuzzy, c-format -msgid "Failed to connect to mailhost %s\n" -msgstr "Verbinden met de director mislukt\n" +#: src/filed/job.c:2069 +msgid "Append Close with SD failed.\n" +msgstr "" -#: src/tools/bsmtp.c:532 +#: src/filed/job.c:2073 #, c-format -msgid "Fatal error: Unknown address family for smtp host: %d\n" +msgid "Bad status %d %c returned from Storage Daemon.\n" msgstr "" -#: src/tools/bsmtp.c:541 src/tools/bsmtp.c:546 +#: src/filed/job.c:2095 #, c-format -msgid "Fatal socket error: ERR=%s\n" +msgid "2994 Bad verify command: %s\n" msgstr "" -#: src/tools/bsmtp.c:551 +#: src/filed/job.c:2110 src/filed/job.c:2151 #, c-format -msgid "Fatal connect error to %s: ERR=%s\n" +msgid "2994 Bad verify level: %s\n" msgstr "" -#: src/tools/bsmtp.c:560 +#: src/filed/job.c:2222 #, c-format -msgid "Fatal _open_osfhandle error: ERR=%s\n" +msgid "Bad replace command. CMD=%s\n" msgstr "" -#: src/tools/bsmtp.c:567 src/tools/bsmtp.c:571 src/tools/bsmtp.c:580 -#: src/tools/bsmtp.c:584 +#: src/filed/job.c:2248 #, c-format -msgid "Fatal fdopen error: ERR=%s\n" +msgid "Bad where regexp. where=%s\n" +msgstr "" + +#: src/filed/job.c:2344 +msgid "Improper calling sequence.\n" msgstr "" -#: src/tools/bsmtp.c:576 +#: src/filed/job.c:2364 #, c-format -msgid "Fatal dup error: ERR=%s\n" +msgid "Bad response to SD read open: %s\n" msgstr "" -#: src/tools/dbcheck.c:195 -msgid "" -"Warning skipping the additional parameters for working directory/dbname/user/" -"password/host.\n" +#: src/filed/job.c:2369 +msgid "Bad response from stored to read open command\n" msgstr "" -#: src/tools/dbcheck.c:212 +#: src/filed/job.c:2431 #, c-format -msgid "Error can not find the Catalog name[%s] in the given config file [%s]\n" +msgid "Comm error with SD. bad response to %s. ERR=%s\n" msgstr "" -#: src/tools/dbcheck.c:214 +#: src/filed/job.c:2434 #, c-format -msgid "Error there is no Catalog section in the given config file [%s]\n" +msgid "Bad response from SD to %s command. Wanted %s, got %s\n" msgstr "" -#: src/tools/dbcheck.c:223 -msgid "Error no Director resource defined.\n" +#: src/filed/filed_conf.c:196 src/filed/filed_conf.c:220 +#, c-format +msgid "Expected a Cipher Type keyword, got: %s" msgstr "" -#: src/tools/dbcheck.c:247 -msgid "Wrong number of arguments.\n" +#: src/filed/accurate.c:189 +#, c-format +msgid "Space saved with Base jobs: %lld MB\n" msgstr "" -#: src/tools/dbcheck.c:252 -msgid "Working directory not supplied.\n" +#: src/filed/accurate.c:388 +#, c-format +msgid "Cannot verify checksum for %s\n" msgstr "" -#: src/tools/dbcheck.c:288 -msgid "Database port must be a numeric value.\n" +#: src/filed/accurate.c:417 src/filed/verify.c:235 src/filed/backup.c:505 +#, c-format +msgid "%s digest initialization failed\n" msgstr "" -#: src/tools/dbcheck.c:291 -msgid "Database port must be a int value.\n" +#: src/filed/accurate.c:496 +msgid "2991 Bad accurate command\n" msgstr "" -#: src/tools/dbcheck.c:365 +#: src/filed/fd_plugins.c:545 src/filed/fd_plugins.c:689 #, c-format -msgid "Hello, this is the database check/correct program.\n" +msgid "Command plugin \"%s\": no type in startBackupFile packet.\n" msgstr "" -#: src/tools/dbcheck.c:367 +#: src/filed/fd_plugins.c:558 #, c-format -msgid "Modify database is on." +msgid "Command plugin \"%s\": no object_name in startBackupFile packet.\n" msgstr "" -#: src/tools/dbcheck.c:369 +#: src/filed/fd_plugins.c:571 src/filed/fd_plugins.c:696 #, c-format -msgid "Modify database is off." +msgid "Command plugin \"%s\": no fname in startBackupFile packet.\n" msgstr "" -#: src/tools/dbcheck.c:371 src/tools/dbcheck.c:432 -#, c-format -msgid " Verbose is on.\n" +#: src/filed/fd_plugins.c:770 +msgid "Plugin save packet not found.\n" msgstr "" -#: src/tools/dbcheck.c:373 src/tools/dbcheck.c:434 +#: src/filed/fd_plugins.c:784 src/filed/fd_plugins.c:800 src/filed/xattr.c:85 +#: src/filed/xattr.c:100 src/filed/xattr.c:108 src/filed/backup.c:1000 +#: src/filed/backup.c:1199 src/filed/backup.c:1236 src/filed/backup.c:1249 +#: src/filed/backup.c:1324 src/filed/backup.c:1423 src/filed/acl.c:96 +#: src/filed/acl.c:111 src/filed/acl.c:119 #, c-format -msgid " Verbose is off.\n" +msgid "Network send error to SD. ERR=%s\n" msgstr "" -#: src/tools/dbcheck.c:375 +#: src/filed/fd_plugins.c:905 #, c-format -msgid "Please select the function you want to perform.\n" +msgid "Plugin=%s not found.\n" msgstr "" -#: src/tools/dbcheck.c:379 +#: src/filed/fd_plugins.c:972 #, c-format -msgid "" -"\n" -" 1) Toggle modify database flag\n" -" 2) Toggle verbose flag\n" -" 3) Repair bad Filename records\n" -" 4) Repair bad Path records\n" -" 5) Eliminate duplicate Filename records\n" -" 6) Eliminate duplicate Path records\n" -" 7) Eliminate orphaned Jobmedia records\n" -" 8) Eliminate orphaned File records\n" -" 9) Eliminate orphaned Path records\n" -" 10) Eliminate orphaned Filename records\n" -" 11) Eliminate orphaned FileSet records\n" -" 12) Eliminate orphaned Client records\n" -" 13) Eliminate orphaned Job records\n" -" 14) Eliminate all Admin records\n" -" 15) Eliminate all Restore records\n" -" 16) All (3-15)\n" -" 17) Quit\n" +msgid "Plugin createFile call failed. Stat=%d file=%s\n" msgstr "" -#: src/tools/dbcheck.c:398 +#: src/filed/fd_plugins.c:977 #, c-format -msgid "" -"\n" -" 1) Toggle modify database flag\n" -" 2) Toggle verbose flag\n" -" 3) Check for bad Filename records\n" -" 4) Check for bad Path records\n" -" 5) Check for duplicate Filename records\n" -" 6) Check for duplicate Path records\n" -" 7) Check for orphaned Jobmedia records\n" -" 8) Check for orphaned File records\n" -" 9) Check for orphaned Path records\n" -" 10) Check for orphaned Filename records\n" -" 11) Check for orphaned FileSet records\n" -" 12) Check for orphaned Client records\n" -" 13) Check for orphaned Job records\n" -" 14) Check for all Admin records\n" -" 15) Check for all Restore records\n" -" 16) All (3-15)\n" -" 17) Quit\n" +msgid "Plugin createFile call failed. Returned CF_ERROR file=%s\n" msgstr "" -#: src/tools/dbcheck.c:418 -msgid "Select function number: " +#: src/filed/fd_plugins.c:1863 +msgid "Command plugin: no fname in baculaCheckChanges packet.\n" msgstr "" -#: src/tools/dbcheck.c:425 +#: src/filed/restore.c:102 #, c-format -msgid "Database will be modified.\n" +msgid "Size of data or stream of %s not correct. Original %s, restored %s.\n" msgstr "" -#: src/tools/dbcheck.c:427 +#: src/filed/restore.c:122 #, c-format -msgid "Database will NOT be modified.\n" +msgid "Invalid length of Finder Info (got %d, not 32)\n" msgstr "" -#: src/tools/dbcheck.c:518 +#: src/filed/restore.c:127 #, c-format -msgid "JobId=%s Name=\"%s\" StartTime=%s\n" +msgid "Could not set Finder Info on %s\n" msgstr "" -#: src/tools/dbcheck.c:525 +#: src/filed/restore.c:406 +msgid "LZO init failed\n" +msgstr "Initialiseren LZO mislukt\n" + +#: src/filed/restore.c:474 src/filed/verify_vol.c:85 #, c-format -msgid "Orphaned JobMediaId=%s JobId=%s Volume=\"%s\"\n" +msgid "Record header scan error: %s\n" msgstr "" -#: src/tools/dbcheck.c:532 +#: src/filed/restore.c:486 src/filed/verify_vol.c:94 #, c-format -msgid "Orphaned FileId=%s JobId=%s Volume=\"%s\"\n" +msgid "Data record error. ERR=%s\n" msgstr "" -#: src/tools/dbcheck.c:539 +#: src/filed/restore.c:490 src/filed/verify_vol.c:98 #, c-format -msgid "Orphaned FileSetId=%s FileSet=\"%s\" MD5=%s\n" +msgid "Actual data size %d not same as header %d\n" +msgstr "" + +#: src/filed/restore.c:651 +msgid "Unexpected cryptographic session data stream.\n" +msgstr "" + +#: src/filed/restore.c:661 +msgid "" +"No private decryption keys have been defined to decrypt encrypted backup " +"data.\n" +msgstr "" + +#: src/filed/restore.c:672 +msgid "Could not create digest.\n" +msgstr "" + +#: src/filed/restore.c:690 +msgid "Missing private key required to decrypt encrypted backup data.\n" +msgstr "" + +#: src/filed/restore.c:693 +msgid "Decrypt of the session key failed.\n" +msgstr "" + +#: src/filed/restore.c:696 +msgid "Signer not found. Decryption failed.\n" +msgstr "" + +#: src/filed/restore.c:699 +msgid "Unsupported digest algorithm. Decrypt failed.\n" +msgstr "" + +#: src/filed/restore.c:702 +msgid "Unsupported encryption algorithm. Decrypt failed.\n" msgstr "" -#: src/tools/dbcheck.c:546 +#: src/filed/restore.c:706 #, c-format -msgid "Orphaned ClientId=%s Name=\"%s\"\n" +msgid "" +"An error=%d occurred while decoding encrypted session data stream: ERR=%s\n" msgstr "" -#: src/tools/dbcheck.c:599 +#: src/filed/restore.c:774 src/filed/restore.c:828 #, c-format -msgid "Deleting: %s\n" +msgid "Missing encryption session data stream for %s\n" msgstr "" -#: src/tools/dbcheck.c:671 +#: src/filed/restore.c:782 src/filed/restore.c:835 #, c-format -msgid "Checking for duplicate Filename entries.\n" +msgid "Failed to initialize decryption context for %s\n" msgstr "" -#: src/tools/dbcheck.c:682 +#: src/filed/restore.c:847 #, c-format -msgid "Found %d duplicate Filename records.\n" +msgid "Cannot open resource fork for %s.\n" msgstr "" -#: src/tools/dbcheck.c:683 -msgid "Print the list? (yes/no): " +#: src/filed/restore.c:992 +msgid "Unexpected cryptographic signature data stream.\n" msgstr "" -#: src/tools/dbcheck.c:706 src/tools/dbcheck.c:771 +#: src/filed/restore.c:1000 #, c-format -msgid "Found %d for: %s\n" +msgid "Failed to decode message signature for %s\n" msgstr "" -#: src/tools/dbcheck.c:736 +#: src/filed/restore.c:1064 #, c-format -msgid "Checking for duplicate Path entries.\n" +msgid "Encountered %ld acl errors while doing restore\n" msgstr "" -#: src/tools/dbcheck.c:747 +#: src/filed/restore.c:1068 #, c-format -msgid "Found %d duplicate Path records.\n" -msgstr "" - -#: src/tools/dbcheck.c:748 src/tools/dbcheck.c:810 src/tools/dbcheck.c:856 -#: src/tools/dbcheck.c:924 src/tools/dbcheck.c:982 src/tools/dbcheck.c:1025 -#: src/tools/dbcheck.c:1067 src/tools/dbcheck.c:1109 src/tools/dbcheck.c:1146 -#: src/tools/dbcheck.c:1179 src/tools/dbcheck.c:1213 src/tools/dbcheck.c:1280 -msgid "Print them? (yes/no): " +msgid "Encountered %ld xattr errors while doing restore\n" msgstr "" -#: src/tools/dbcheck.c:801 +#: src/filed/restore.c:1072 #, c-format -msgid "Checking for orphaned JobMedia entries.\n" +msgid "" +"%d non-supported data streams and %d non-supported attrib streams ignored.\n" msgstr "" -#: src/tools/dbcheck.c:809 +#: src/filed/restore.c:1076 #, c-format -msgid "Found %d orphaned JobMedia records.\n" +msgid "%d non-supported resource fork streams ignored.\n" msgstr "" -#: src/tools/dbcheck.c:827 +#: src/filed/restore.c:1079 #, c-format -msgid "Deleting %d orphaned JobMedia records.\n" +msgid "%d non-supported Finder Info streams ignored.\n" msgstr "" -#: src/tools/dbcheck.c:844 +#: src/filed/restore.c:1082 #, c-format -msgid "Checking for orphaned File entries. This may take some time!\n" +msgid "%d non-supported acl streams ignored.\n" msgstr "" -#: src/tools/dbcheck.c:855 +#: src/filed/restore.c:1085 #, c-format -msgid "Found %d orphaned File records.\n" +msgid "%d non-supported crypto streams ignored.\n" msgstr "" -#: src/tools/dbcheck.c:872 +#: src/filed/restore.c:1088 #, c-format -msgid "Deleting %d orphaned File records.\n" +msgid "%d non-supported xattr streams ignored.\n" msgstr "" -#: src/tools/dbcheck.c:891 -#, c-format -msgid "Pruning orphaned Path entries isn't possible when using BVFS.\n" -msgstr "" +#: src/filed/restore.c:1168 +msgid "Zlib errno" +msgstr "Zlib foutnr." -#: src/tools/dbcheck.c:900 src/tools/dbcheck.c:958 -msgid "Create temporary index? (yes/no): " -msgstr "" +#: src/filed/restore.c:1170 +msgid "Zlib stream error" +msgstr "Zlib datastroom fout" + +#: src/filed/restore.c:1172 +msgid "Zlib data error" +msgstr "Zlib data fout" + +#: src/filed/restore.c:1174 +msgid "Zlib memory error" +msgstr "Zlib geheugen fout" + +#: src/filed/restore.c:1176 +msgid "Zlib buffer error" +msgstr "Zlib buffer fout" + +#: src/filed/restore.c:1178 +msgid "Zlib version error" +msgstr "Zlib versie fout" -#: src/tools/dbcheck.c:912 +#: src/filed/restore.c:1218 #, c-format -msgid "Checking for orphaned Path entries. This may take some time!\n" +msgid "Missing cryptographic signature for %s\n" msgstr "" -#: src/tools/dbcheck.c:923 +#: src/filed/restore.c:1251 src/filed/restore.c:1280 #, c-format -msgid "Found %d orphaned Path records.\n" +msgid "Signature validation failed for file %s: ERR=%s\n" msgstr "" -#: src/tools/dbcheck.c:936 +#: src/filed/restore.c:1268 #, c-format -msgid "Deleting %d orphaned Path records.\n" +msgid "Digest one file failed for file: %s\n" msgstr "" -#: src/tools/dbcheck.c:970 +#: src/filed/restore.c:1307 #, c-format -msgid "Checking for orphaned Filename entries. This may take some time!\n" +msgid "Signature validation failed for %s: %s\n" msgstr "" -#: src/tools/dbcheck.c:981 +#: src/filed/restore.c:1404 #, c-format -msgid "Found %d orphaned Filename records.\n" +msgid "LZO uncompression error on file %s. ERR=%d\n" msgstr "" -#: src/tools/dbcheck.c:994 +#: src/filed/restore.c:1441 #, c-format -msgid "Deleting %d orphaned Filename records.\n" +msgid "Uncompression error on file %s. ERR=%s\n" msgstr "" -#: src/tools/dbcheck.c:1014 +#: src/filed/restore.c:1476 #, c-format -msgid "Checking for orphaned FileSet entries. This takes some time!\n" +msgid "Write error in Win32 Block Decomposition on %s: %s\n" msgstr "" -#: src/tools/dbcheck.c:1024 +#: src/filed/restore.c:1501 #, c-format -msgid "Found %d orphaned FileSet records.\n" +msgid "Wrong write size error at %lld block=%d wanted=%d wrote=%d\n" msgstr "" -#: src/tools/dbcheck.c:1039 +#: src/filed/restore.c:1505 #, c-format -msgid "Deleting %d orphaned FileSet records.\n" +msgid "" +"Write write error at %lld block=%d write_len=%d lerror=%d on %s: ERR=%s\n" msgstr "" -#: src/tools/dbcheck.c:1048 -#, c-format -msgid "Checking for orphaned Client entries.\n" +#: src/filed/restore.c:1565 +msgid "Decryption error\n" msgstr "" -#: src/tools/dbcheck.c:1066 -#, c-format -msgid "Found %d orphaned Client records.\n" +#: src/filed/restore.c:1658 +msgid "Logic error: output file should be open\n" msgstr "" -#: src/tools/dbcheck.c:1081 -#, c-format -msgid "Deleting %d orphaned Client records.\n" +#: src/filed/restore.c:1696 +msgid "Logic error: output file should not be open\n" msgstr "" -#: src/tools/dbcheck.c:1090 +#: src/filed/restore.c:1730 #, c-format -msgid "Checking for orphaned Job entries.\n" +msgid "Decryption error. buf_len=%d decrypt_len=%d on file %s\n" msgstr "" -#: src/tools/dbcheck.c:1108 -#, c-format -msgid "Found %d orphaned Job records.\n" +#: src/filed/restore.c:1851 +msgid "Open File Manager paused\n" msgstr "" -#: src/tools/dbcheck.c:1123 -#, c-format -msgid "Deleting %d orphaned Job records.\n" +#: src/filed/restore.c:1855 +msgid "FAILED to pause Open File Manager\n" msgstr "" -#: src/tools/dbcheck.c:1125 +#: src/filed/restore.c:1863 #, c-format -msgid "Deleting JobMedia records of orphaned Job records.\n" +msgid "Running as '%s'. Privmask=%#08x\n" msgstr "" -#: src/tools/dbcheck.c:1127 -#, c-format -msgid "Deleting Log records of orphaned Job records.\n" +#: src/filed/restore.c:1865 +msgid "Failed to retrieve current UserName\n" +msgstr "" + +#: src/filed/verify_vol.c:51 +msgid "Storage command not issued before Verify.\n" msgstr "" -#: src/tools/dbcheck.c:1136 +#: src/filed/verify_vol.c:131 #, c-format -msgid "Checking for Admin Job entries.\n" +msgid "Error scanning record header: %s\n" msgstr "" -#: src/tools/dbcheck.c:1145 +#: src/filed/verify_vol.c:194 src/filed/verify.c:202 #, c-format -msgid "Found %d Admin Job records.\n" +msgid "Network error in send to Director: ERR=%s\n" msgstr "" -#: src/tools/dbcheck.c:1160 +#: src/filed/authenticate.c:63 #, c-format -msgid "Deleting %d Admin Job records.\n" +msgid "I only authenticate directors, not %d\n" msgstr "" -#: src/tools/dbcheck.c:1169 +#: src/filed/authenticate.c:88 #, c-format -msgid "Checking for Restore Job entries.\n" +msgid "Connection from unknown Director %s at %s rejected.\n" msgstr "" -#: src/tools/dbcheck.c:1178 +#: src/filed/authenticate.c:132 #, c-format -msgid "Found %d Restore Job records.\n" +msgid "Incorrect password given by Director at %s.\n" msgstr "" -#: src/tools/dbcheck.c:1193 +#: src/filed/verify.c:45 #, c-format -msgid "Deleting %d Restore Job records.\n" +msgid "Cannot malloc %d network read buffer\n" msgstr "" -#: src/tools/dbcheck.c:1203 +#: src/filed/verify.c:115 #, c-format -msgid "Checking for Filenames with a trailing slash\n" +msgid " Could not access %s: ERR=%s\n" msgstr "" -#: src/tools/dbcheck.c:1212 +#: src/filed/verify.c:122 #, c-format -msgid "Found %d bad Filename records.\n" +msgid " Could not follow link %s: ERR=%s\n" msgstr "" -#: src/tools/dbcheck.c:1230 src/tools/dbcheck.c:1296 +#: src/filed/verify.c:129 #, c-format -msgid "Reparing %d bad Filename records.\n" +msgid " Could not stat %s: ERR=%s\n" msgstr "" -#: src/tools/dbcheck.c:1270 +#: src/filed/verify.c:135 src/filed/backup.c:449 #, c-format -msgid "Checking for Paths without a trailing slash\n" +msgid " Unchanged file skipped: %s\n" msgstr "" -#: src/tools/dbcheck.c:1279 +#: src/filed/verify.c:138 #, c-format -msgid "Found %d bad Path records.\n" +msgid " Archive file skipped: %s\n" msgstr "" -#: src/tools/dbcheck.c:1442 +#: src/filed/verify.c:141 #, c-format -msgid "" -"Ok. Index over the %s column already exists and dbcheck will work faster.\n" +msgid " Recursion turned off. Directory skipped: %s\n" msgstr "" -#: src/tools/dbcheck.c:1445 +#: src/filed/verify.c:145 #, c-format -msgid "" -"Note. Index over the %s column not found, that can greatly slow down " -"dbcheck.\n" +msgid " File system change prohibited. Directory skipped: %s\n" msgstr "" -#: src/tools/dbcheck.c:1460 +#: src/filed/verify.c:153 #, c-format -msgid "Create temporary index... This may take some time!\n" +msgid " Could not open directory %s: ERR=%s\n" msgstr "" -#: src/tools/dbcheck.c:1468 +#: src/filed/verify.c:158 #, c-format -msgid "Temporary index created.\n" +msgid " Unknown file type %d: %s\n" msgstr "" -#: src/tools/dbcheck.c:1483 +#: src/filed/verify.c:297 #, c-format -msgid "Drop temporary index.\n" +msgid " Cannot open %s: ERR=%s.\n" msgstr "" -#: src/tools/dbcheck.c:1493 +#: src/filed/verify.c:311 #, c-format -msgid "Temporary index %s deleted.\n" +msgid " Cannot open resource fork for %s: ERR=%s.\n" msgstr "" -#: src/filed/verify.c:57 +#: src/filed/verify.c:374 #, c-format -msgid "Cannot malloc %d network read buffer\n" +msgid "Error reading file %s: ERR=%s\n" msgstr "" -#: src/filed/verify.c:127 +#: src/filed/xattr.c:233 #, c-format -msgid " Could not access %s: ERR=%s\n" +msgid "Illegal xattr stream, no XATTR_MAGIC on file \"%s\"\n" msgstr "" -#: src/filed/verify.c:134 +#: src/filed/xattr.c:247 #, c-format -msgid " Could not follow link %s: ERR=%s\n" +msgid "Illegal xattr stream, xattr name length <= 0 on file \"%s\"\n" msgstr "" -#: src/filed/verify.c:141 +#: src/filed/xattr.c:369 src/filed/xattr.c:405 #, c-format -msgid " Could not stat %s: ERR=%s\n" +msgid "llistea error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/verify.c:147 src/filed/backup.c:450 +#: src/filed/xattr.c:455 src/filed/xattr.c:509 #, c-format -msgid " Unchanged file skipped: %s\n" +msgid "lgetea error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/verify.c:150 +#: src/filed/xattr.c:545 src/filed/xattr.c:867 src/filed/xattr.c:1342 +#: src/filed/xattr.c:1810 src/filed/xattr.c:2167 src/filed/xattr.c:2959 #, c-format -msgid " Archive file skipped: %s\n" +msgid "Xattr stream on file \"%s\" exceeds maximum size of %d bytes\n" msgstr "" -#: src/filed/verify.c:153 +#: src/filed/xattr.c:565 src/filed/xattr.c:893 src/filed/xattr.c:1362 +#: src/filed/xattr.c:1840 src/filed/xattr.c:2184 #, c-format -msgid " Recursion turned off. Directory skipped: %s\n" +msgid "Failed to serialize extended attributes on file \"%s\"\n" msgstr "" -#: src/filed/verify.c:157 +#: src/filed/xattr.c:632 #, c-format -msgid " File system change prohibited. Directory skipped: %s\n" +msgid "lsetea error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/verify.c:165 +#: src/filed/xattr.c:720 src/filed/xattr.c:758 src/filed/xattr.c:822 +#: src/filed/xattr.c:834 #, c-format -msgid " Could not open directory %s: ERR=%s\n" +msgid "attr_list error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/verify.c:170 +#: src/filed/xattr.c:958 #, c-format -msgid " Unknown file type %d: %s\n" +msgid "Received illegal xattr named %s on file \"%s\"\n" msgstr "" -#: src/filed/verify.c:214 src/filed/verify_vol.c:206 +#: src/filed/xattr.c:991 src/filed/xattr.c:1001 #, c-format -msgid "Network error in send to Director: ERR=%s\n" +msgid "attr_set error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/verify.c:247 src/filed/accurate.c:429 src/filed/backup.c:506 +#: src/filed/xattr.c:1151 src/filed/xattr.c:1186 #, c-format -msgid "%s digest initialization failed\n" +msgid "llistxattr error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/verify.c:309 +#: src/filed/xattr.c:1254 src/filed/xattr.c:1306 #, c-format -msgid " Cannot open %s: ERR=%s.\n" +msgid "lgetxattr error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/verify.c:323 +#: src/filed/xattr.c:1425 #, c-format -msgid " Cannot open resource fork for %s: ERR=%s.\n" +msgid "lsetxattr error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/verify.c:386 +#: src/filed/xattr.c:1583 src/filed/xattr.c:1618 #, c-format -msgid "Error reading file %s: ERR=%s\n" +msgid "extattr_list_link error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/accurate.c:201 +#: src/filed/xattr.c:1638 #, c-format -msgid "Space saved with Base jobs: %lld MB\n" +msgid "Failed to convert %d into namespace on file \"%s\"\n" msgstr "" -#: src/filed/accurate.c:400 +#: src/filed/xattr.c:1718 src/filed/xattr.c:1773 #, c-format -msgid "Cannot verify checksum for %s\n" +msgid "extattr_get_link error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/accurate.c:508 -msgid "2991 Bad accurate command\n" +#: src/filed/xattr.c:1897 +#, c-format +msgid "Failed to split %s into namespace and name part on file \"%s\"\n" msgstr "" -#: src/filed/status.c:89 +#: src/filed/xattr.c:1910 #, c-format -msgid "Daemon started %s. Jobs: run=%d running=%d.\n" +msgid "Failed to convert %s into namespace on file \"%s\"\n" msgstr "" -#: src/filed/status.c:149 +#: src/filed/xattr.c:1931 #, c-format -msgid " Sizeof: boffset_t=%d size_t=%d debug=%d trace=%d " +msgid "extattr_set_link error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/status.c:194 +#: src/filed/xattr.c:2034 src/filed/xattr.c:2059 #, c-format -msgid "Director connected at: %s\n" +msgid "getproplist error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/status.c:196 +#: src/filed/xattr.c:2253 #, c-format -msgid "JobId %d Job %s is running.\n" +msgid "Unable create proper proplist to restore xattrs on file \"%s\"\n" msgstr "" -#: src/filed/status.c:199 +#: src/filed/xattr.c:2282 #, c-format -msgid " %s%s %s Job started: %s\n" +msgid "setproplist error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/status.c:212 +#: src/filed/xattr.c:2600 src/filed/xattr.c:2653 #, c-format -msgid " Files=%s Bytes=%s Bytes/sec=%s Errors=%d\n" +msgid "Unable to get acl on xattr %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/status.c:218 +#: src/filed/xattr.c:2670 #, c-format -msgid " Files Examined=%s\n" +msgid "Unable to get acl text on xattr %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/status.c:223 +#: src/filed/xattr.c:2744 #, c-format -msgid " Processing file: %s\n" +msgid "Unable to get status on xattr %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/status.c:234 -msgid " SDSocket closed.\n" +#: src/filed/xattr.c:2877 +#, c-format +msgid "Unable to open xattr %s on \"%s\": ERR=%s\n" msgstr "" -#: src/filed/status.c:244 src/filed/status.c:335 src/filed/status.c:409 -msgid "====\n" +#: src/filed/xattr.c:2900 +#, c-format +msgid "Unable to read symlin %s on \"%s\": ERR=%s\n" msgstr "" -#: src/filed/status.c:306 -msgid " SDSocket=closed\n" +#: src/filed/xattr.c:2975 +#, c-format +msgid "Unable to read content of xattr %s on file \"%s\"\n" msgstr "" -#: src/filed/status.c:463 src/filed/status.c:496 +#: src/filed/xattr.c:3015 #, c-format -msgid "Bad .status command: %s\n" +msgid "Unable to chdir to xattr space of file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/status.c:464 -msgid "2900 Bad .status command, missing argument.\n" +#: src/filed/xattr.c:3072 src/filed/xattr.c:3321 +#, c-format +msgid "Unable to open file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/status.c:497 -msgid "2900 Bad .status command, wrong argument.\n" +#: src/filed/xattr.c:3100 src/filed/xattr.c:3382 +#, c-format +msgid "Unable to open xattr space %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/status.c:565 -msgid "Bacula Client: Idle" +#: src/filed/xattr.c:3116 src/filed/xattr.c:3346 +#, c-format +msgid "Unable to chdir to xattr space on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/status.c:576 -msgid "Bacula Client: Running" +#: src/filed/xattr.c:3137 +#, c-format +msgid "Unable to list the xattr space on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/status.c:590 -msgid "Bacula Client: Last Job Canceled" +#: src/filed/xattr.c:3229 +#, c-format +msgid "Unable to convert acl from text on file \"%s\"\n" msgstr "" -#: src/filed/status.c:594 -msgid "Bacula Client: Last Job Failed" +#: src/filed/xattr.c:3239 src/filed/xattr.c:3262 +#, c-format +msgid "Unable to restore acl of xattr %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/status.c:598 -msgid "Bacula Client: Last Job had Warnings" +#: src/filed/xattr.c:3335 +#, c-format +msgid "Unable to open xattr space on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/xattr.c:97 src/filed/xattr.c:112 src/filed/xattr.c:120 -#: src/filed/fd_plugins.c:789 src/filed/fd_plugins.c:805 src/filed/acl.c:108 -#: src/filed/acl.c:123 src/filed/acl.c:131 src/filed/backup.c:999 -#: src/filed/backup.c:1199 src/filed/backup.c:1236 src/filed/backup.c:1249 -#: src/filed/backup.c:1325 src/filed/backup.c:1424 +#: src/filed/xattr.c:3365 src/filed/xattr.c:3527 #, c-format -msgid "Network send error to SD. ERR=%s\n" +msgid "Unable to open xattr %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/xattr.c:245 +#: src/filed/xattr.c:3399 #, c-format -msgid "Illegal xattr stream, no XATTR_MAGIC on file \"%s\"\n" +msgid "Unable to chdir to xattr space %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/xattr.c:259 +#: src/filed/xattr.c:3439 #, c-format -msgid "Illegal xattr stream, xattr name length <= 0 on file \"%s\"\n" +msgid "Unable to mkfifo xattr %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/xattr.c:381 src/filed/xattr.c:417 +#: src/filed/xattr.c:3457 #, c-format -msgid "llistea error on file \"%s\": ERR=%s\n" +msgid "Unable to mknod xattr %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/xattr.c:467 src/filed/xattr.c:520 +#: src/filed/xattr.c:3475 #, c-format -msgid "lgetea error on file \"%s\": ERR=%s\n" +msgid "Unable to mkdir xattr %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/xattr.c:556 src/filed/xattr.c:877 src/filed/xattr.c:1352 -#: src/filed/xattr.c:1820 src/filed/xattr.c:2176 src/filed/xattr.c:2968 +#: src/filed/xattr.c:3495 #, c-format -msgid "Xattr stream on file \"%s\" exceeds maximum size of %d bytes\n" +msgid "Unable to link xattr %s to %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/xattr.c:576 src/filed/xattr.c:903 src/filed/xattr.c:1372 -#: src/filed/xattr.c:1850 src/filed/xattr.c:2193 +#: src/filed/xattr.c:3548 #, c-format -msgid "Failed to serialize extended attributes on file \"%s\"\n" +msgid "" +"Unable to restore data of xattr %s on file \"%s\": Not all data available in " +"xattr stream\n" msgstr "" -#: src/filed/xattr.c:643 +#: src/filed/xattr.c:3561 #, c-format -msgid "lsetea error on file \"%s\": ERR=%s\n" +msgid "Unable to restore data of xattr %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/xattr.c:731 src/filed/xattr.c:769 src/filed/xattr.c:832 -#: src/filed/xattr.c:844 +#: src/filed/xattr.c:3584 #, c-format -msgid "attr_list error on file \"%s\": ERR=%s\n" +msgid "Unable to symlink xattr %s to %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/xattr.c:968 +#: src/filed/xattr.c:3620 #, c-format -msgid "Received illegal xattr named %s on file \"%s\"\n" +msgid "Unable to restore owner of xattr %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/xattr.c:1001 src/filed/xattr.c:1011 +#: src/filed/xattr.c:3648 #, c-format -msgid "attr_set error on file \"%s\": ERR=%s\n" +msgid "Unable to restore filetimes of xattr %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/xattr.c:1161 src/filed/xattr.c:1196 +#: src/filed/xattr.c:3664 #, c-format -msgid "llistxattr error on file \"%s\": ERR=%s\n" +msgid "Illegal xattr stream, failed to parse xattr stream on file \"%s\"\n" msgstr "" -#: src/filed/xattr.c:1264 src/filed/xattr.c:1316 +#: src/filed/xattr.c:3725 #, c-format -msgid "lgetxattr error on file \"%s\": ERR=%s\n" +msgid "Failed to restore extensible attributes on file \"%s\"\n" msgstr "" -#: src/filed/xattr.c:1435 +#: src/filed/xattr.c:3738 #, c-format -msgid "lsetxattr error on file \"%s\": ERR=%s\n" +msgid "Failed to restore extended attributes on file \"%s\"\n" msgstr "" -#: src/filed/xattr.c:1593 src/filed/xattr.c:1628 +#: src/filed/xattr.c:3832 src/filed/acl.c:2253 #, c-format -msgid "extattr_list_link error on file \"%s\": ERR=%s\n" +msgid "Unable to stat file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/xattr.c:1648 +#: src/filed/xattr.c:3882 #, c-format -msgid "Failed to convert %d into namespace on file \"%s\"\n" +msgid "" +"Can't restore Extended Attributes of %s - incompatible xattr stream " +"encountered - %d\n" msgstr "" -#: src/filed/xattr.c:1728 src/filed/xattr.c:1783 -#, c-format -msgid "extattr_get_link error on file \"%s\": ERR=%s\n" +#: src/filed/backup.c:90 +msgid "Cannot set buffer size FD->SD.\n" msgstr "" -#: src/filed/xattr.c:1907 +#: src/filed/backup.c:182 #, c-format -msgid "Failed to split %s into namespace and name part on file \"%s\"\n" +msgid "Encountered %ld acl errors while doing backup\n" msgstr "" -#: src/filed/xattr.c:1920 +#: src/filed/backup.c:186 #, c-format -msgid "Failed to convert %s into namespace on file \"%s\"\n" +msgid "Encountered %ld xattr errors while doing backup\n" msgstr "" -#: src/filed/xattr.c:1941 -#, c-format -msgid "extattr_set_link error on file \"%s\": ERR=%s\n" +#: src/filed/backup.c:253 +msgid "Unsupported cipher on this system.\n" msgstr "" -#: src/filed/xattr.c:2044 src/filed/xattr.c:2069 -#, c-format -msgid "getproplist error on file \"%s\": ERR=%s\n" +#: src/filed/backup.c:259 src/filed/backup.c:268 +msgid "An error occurred while encrypting the stream.\n" msgstr "" -#: src/filed/xattr.c:2262 +#: src/filed/backup.c:386 #, c-format -msgid "Unable create proper proplist to restore xattrs on file \"%s\"\n" +msgid " Recursion turned off. Will not descend from %s into %s\n" msgstr "" -#: src/filed/xattr.c:2291 +#: src/filed/backup.c:393 #, c-format -msgid "setproplist error on file \"%s\": ERR=%s\n" +msgid " %s is a different filesystem. Will not descend from %s into it.\n" msgstr "" -#: src/filed/xattr.c:2609 src/filed/xattr.c:2662 +#: src/filed/backup.c:399 #, c-format -msgid "Unable to get acl on xattr %s on file \"%s\": ERR=%s\n" +msgid " Disallowed filesystem. Will not descend from %s into %s\n" msgstr "" -#: src/filed/xattr.c:2679 +#: src/filed/backup.c:404 #, c-format -msgid "Unable to get acl text on xattr %s on file \"%s\": ERR=%s\n" +msgid " Disallowed drive type. Will not descend into %s\n" msgstr "" -#: src/filed/xattr.c:2753 +#: src/filed/backup.c:415 #, c-format -msgid "Unable to get status on xattr %s on file \"%s\": ERR=%s\n" +msgid " Socket file skipped: %s\n" msgstr "" -#: src/filed/xattr.c:2886 +#: src/filed/backup.c:428 #, c-format -msgid "Unable to open xattr %s on \"%s\": ERR=%s\n" +msgid " Could not access \"%s\": ERR=%s\n" msgstr "" -#: src/filed/xattr.c:2909 +#: src/filed/backup.c:435 #, c-format -msgid "Unable to read symlin %s on \"%s\": ERR=%s\n" +msgid " Could not follow link \"%s\": ERR=%s\n" msgstr "" -#: src/filed/xattr.c:2984 +#: src/filed/backup.c:442 #, c-format -msgid "Unable to read content of xattr %s on file \"%s\"\n" +msgid " Could not stat \"%s\": ERR=%s\n" msgstr "" -#: src/filed/xattr.c:3024 +#: src/filed/backup.c:452 #, c-format -msgid "Unable to chdir to xattr space of file \"%s\": ERR=%s\n" +msgid " Archive file not saved: %s\n" msgstr "" -#: src/filed/xattr.c:3081 src/filed/xattr.c:3330 +#: src/filed/backup.c:456 #, c-format -msgid "Unable to open file \"%s\": ERR=%s\n" +msgid " Could not open directory \"%s\": ERR=%s\n" msgstr "" -#: src/filed/xattr.c:3109 src/filed/xattr.c:3391 +#: src/filed/backup.c:465 #, c-format -msgid "Unable to open xattr space %s on file \"%s\": ERR=%s\n" +msgid " Unknown file type %d; not saved: %s\n" msgstr "" -#: src/filed/xattr.c:3125 src/filed/xattr.c:3355 +#: src/filed/backup.c:521 #, c-format -msgid "Unable to chdir to xattr space on file \"%s\": ERR=%s\n" +msgid "%s signature digest initialization failed\n" msgstr "" -#: src/filed/xattr.c:3146 +#: src/filed/backup.c:629 #, c-format -msgid "Unable to list the xattr space on file \"%s\": ERR=%s\n" +msgid " Cannot open \"%s\": ERR=%s.\n" msgstr "" -#: src/filed/xattr.c:3238 +#: src/filed/backup.c:666 #, c-format -msgid "Unable to convert acl from text on file \"%s\"\n" +msgid " Cannot open resource fork for \"%s\": ERR=%s.\n" msgstr "" -#: src/filed/xattr.c:3248 src/filed/xattr.c:3271 -#, c-format -msgid "Unable to restore acl of xattr %s on file \"%s\": ERR=%s\n" +#: src/filed/backup.c:762 +msgid "Failed to allocate memory for crypto signature.\n" msgstr "" -#: src/filed/xattr.c:3344 -#, c-format -msgid "Unable to open xattr space on file \"%s\": ERR=%s\n" +#: src/filed/backup.c:767 +msgid "An error occurred while adding signer the stream.\n" msgstr "" -#: src/filed/xattr.c:3374 src/filed/xattr.c:3536 -#, c-format -msgid "Unable to open xattr %s on file \"%s\": ERR=%s\n" +#: src/filed/backup.c:773 src/filed/backup.c:788 +msgid "An error occurred while signing the stream.\n" msgstr "" -#: src/filed/xattr.c:3408 -#, c-format -msgid "Unable to chdir to xattr space %s on file \"%s\": ERR=%s\n" +#: src/filed/backup.c:812 +msgid "An error occurred finalizing signing the stream.\n" msgstr "" -#: src/filed/xattr.c:3448 +#: src/filed/backup.c:931 #, c-format -msgid "Unable to mkfifo xattr %s on file \"%s\": ERR=%s\n" +msgid "Compression deflateParams error: %d\n" msgstr "" -#: src/filed/xattr.c:3466 -#, c-format -msgid "Unable to mknod xattr %s on file \"%s\": ERR=%s\n" +#: src/filed/backup.c:968 +msgid "Encrypting sparse or offset data not supported.\n" msgstr "" -#: src/filed/xattr.c:3484 -#, c-format -msgid "Unable to mkdir xattr %s on file \"%s\": ERR=%s\n" +#: src/filed/backup.c:975 +msgid "Failed to initialize encryption context.\n" msgstr "" -#: src/filed/xattr.c:3504 +#: src/filed/backup.c:1086 #, c-format -msgid "Unable to link xattr %s to %s on file \"%s\": ERR=%s\n" +msgid "Compression deflate error: %d\n" msgstr "" -#: src/filed/xattr.c:3557 +#: src/filed/backup.c:1093 #, c-format -msgid "" -"Unable to restore data of xattr %s on file \"%s\": Not all data available in " -"xattr stream\n" +msgid "Compression deflateReset error: %d\n" msgstr "" -#: src/filed/xattr.c:3570 +#: src/filed/backup.c:1126 #, c-format -msgid "Unable to restore data of xattr %s on file \"%s\": ERR=%s\n" -msgstr "" +msgid "Compression LZO error: %d\n" +msgstr "Compressie LZO fout: %d\n" + +#: src/filed/backup.c:1171 src/filed/backup.c:1187 +msgid "Encryption error\n" +msgstr "Fout in versleuteling \n" -#: src/filed/xattr.c:3593 +#: src/filed/backup.c:1213 #, c-format -msgid "Unable to symlink xattr %s to %s on file \"%s\": ERR=%s\n" -msgstr "" +msgid "Read error on file %s. ERR=%s\n" +msgstr "Lees fout op bestand %s. FOUT=%s\n" -#: src/filed/xattr.c:3629 +#: src/filed/backup.c:1216 #, c-format -msgid "Unable to restore owner of xattr %s on file \"%s\": ERR=%s\n" +msgid "Too many errors. JobErrors=%d.\n" +msgstr "Te veel fouten. OpdrachtFouten=%d.\n" + +#: src/filed/backup.c:1226 +msgid "Encryption padding error\n" msgstr "" -#: src/filed/xattr.c:3657 -#, c-format -msgid "Unable to restore filetimes of xattr %s on file \"%s\": ERR=%s\n" +#: src/filed/backup.c:1290 +msgid "Invalid file flags, no supported data stream type.\n" msgstr "" -#: src/filed/xattr.c:3673 +#: src/filed/backup.c:1548 #, c-format -msgid "Illegal xattr stream, failed to parse xattr stream on file \"%s\"\n" +msgid "VSS Writer (BackupComplete): %s\n" msgstr "" -#: src/filed/xattr.c:3734 +#: src/filed/acl.c:217 src/filed/acl.c:242 #, c-format -msgid "Failed to restore extensible attributes on file \"%s\"\n" +msgid "aclx_get error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/xattr.c:3747 +#: src/filed/acl.c:268 #, c-format -msgid "Failed to restore extended attributes on file \"%s\"\n" +msgid "Unknown acl type encountered on file \"%s\": %ld\n" msgstr "" -#: src/filed/xattr.c:3841 src/filed/acl.c:2265 +#: src/filed/acl.c:292 src/filed/acl.c:301 #, c-format -msgid "Unable to stat file \"%s\": ERR=%s\n" +msgid "Failed to convert acl into text on file \"%s\"\n" msgstr "" -#: src/filed/xattr.c:3891 +#: src/filed/acl.c:374 #, c-format msgid "" -"Can't restore Extended Attributes of %s - incompatible xattr stream " -"encountered - %d\n" +"Trying to restore POSIX acl on file \"%s\" on filesystem without AIXC acl " +"support\n" msgstr "" -#: src/filed/fd_plugins.c:550 src/filed/fd_plugins.c:694 +#: src/filed/acl.c:382 #, c-format -msgid "Command plugin \"%s\": no type in startBackupFile packet.\n" +msgid "" +"Trying to restore NFSv4 acl on file \"%s\" on filesystem without NFS4 acl " +"support\n" msgstr "" -#: src/filed/fd_plugins.c:563 +#: src/filed/acl.c:430 src/filed/acl.c:440 #, c-format -msgid "Command plugin \"%s\": no object_name in startBackupFile packet.\n" +msgid "aclx_scanStr error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/fd_plugins.c:576 src/filed/fd_plugins.c:701 +#: src/filed/acl.c:466 #, c-format -msgid "Command plugin \"%s\": no fname in startBackupFile packet.\n" +msgid "aclx_put error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/fd_plugins.c:775 -msgid "Plugin save packet not found.\n" +#: src/filed/acl.c:811 +#, c-format +msgid "acl_to_text error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/fd_plugins.c:910 +#: src/filed/acl.c:841 #, c-format -msgid "Plugin=%s not found.\n" +msgid "acl_get_file error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/fd_plugins.c:977 +#: src/filed/acl.c:894 #, c-format -msgid "Plugin createFile call failed. Stat=%d file=%s\n" +msgid "" +"acl_delete_def_file error on file \"%s\": filesystem doesn't support ACLs\n" msgstr "" -#: src/filed/fd_plugins.c:982 +#: src/filed/acl.c:900 #, c-format -msgid "Plugin createFile call failed. Returned CF_ERROR file=%s\n" +msgid "acl_delete_def_file error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/fd_plugins.c:1859 -msgid "Command plugin: no fname in baculaCheckChanges packet.\n" +#: src/filed/acl.c:911 +#, c-format +msgid "acl_from_text error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/filed.c:76 +#: src/filed/acl.c:927 #, c-format -msgid "" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: bacula-fd [-f -s] [-c config_file] [-d debug_level]\n" -" -c use as configuration file\n" -" -d set debug level to \n" -" -dt print a timestamp in debug output\n" -" -f run in foreground (for debugging)\n" -" -g groupid\n" -" -k keep readall capabilities\n" -" -m print kaboom output (for debugging)\n" -" -s no signals (for debugging)\n" -" -t test configuration file and exit\n" -" -u userid\n" -" -v verbose user messages\n" -" -? print this message.\n" -"\n" +msgid "acl_valid error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/filed.c:199 -msgid "-k option has no meaning without -u option.\n" +#: src/filed/acl.c:959 +#, c-format +msgid "acl_set_file error on file \"%s\": filesystem doesn't support ACLs\n" msgstr "" -#: src/filed/filed.c:337 +#: src/filed/acl.c:968 #, c-format -msgid "" -"No File daemon resource defined in %s\n" -"Without that I don't know who I am :-(\n" +msgid "acl_set_file error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/filed.c:342 +#: src/filed/acl.c:1075 src/filed/acl.c:1104 src/filed/acl.c:1218 +#: src/filed/acl.c:1726 src/filed/acl.c:1833 #, c-format -msgid "Only one Client resource permitted in %s\n" +msgid "pathconf error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/filed.c:366 +#: src/filed/acl.c:1234 #, c-format msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"File daemon in %s.\n" +"Trying to restore acl on file \"%s\" on filesystem without %s acl support\n" msgstr "" -#: src/filed/filed.c:390 -msgid "PKI encryption/signing enabled but not compiled into Bacula.\n" +#: src/filed/acl.c:1519 +#, c-format +msgid "getacl error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/filed.c:401 +#: src/filed/acl.c:1554 #, c-format -msgid "" -"\"PKI Key Pair\" must be defined for File daemon \"%s\" in %s if either " -"\"PKI Sign\" or \"PKI Encrypt\" are enabled.\n" +msgid "acltostr error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/filed.c:413 src/filed/filed.c:444 src/filed/filed.c:485 -msgid "Failed to allocate a new keypair object.\n" +#: src/filed/acl.c:1576 src/filed/acl.c:1586 +#, c-format +msgid "strtoacl error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/filed.c:417 +#: src/filed/acl.c:1615 #, c-format -msgid "Failed to load public certificate for File daemon \"%s\" in %s.\n" +msgid "setacl error on file \"%s\": filesystem doesn't support ACLs\n" msgstr "" -#: src/filed/filed.c:423 +#: src/filed/acl.c:1623 #, c-format -msgid "Failed to load private key for File daemon \"%s\" in %s.\n" +msgid "setacl error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/filed.c:453 +#: src/filed/acl.c:1748 #, c-format -msgid "Failed to load private key from file %s for File daemon \"%s\" in %s.\n" +msgid "acl_get error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/filed.c:460 +#: src/filed/acl.c:1822 #, c-format msgid "" -"Failed to load trusted signer certificate from file %s for File daemon \"%s" -"\" in %s.\n" +"Trying to restore acl on file \"%s\" on filesystem without acl support\n" msgstr "" -#: src/filed/filed.c:491 +#: src/filed/acl.c:1851 #, c-format msgid "" -"Failed to load master key certificate from file %s for File daemon \"%s\" in " -"%s.\n" +"Trying to restore POSIX acl on file \"%s\" on filesystem without aclent acl " +"support\n" msgstr "" -#: src/filed/filed.c:507 +#: src/filed/acl.c:1862 #, c-format -msgid "No Director resource defined in %s\n" +msgid "" +"Trying to restore NFSv4 acl on file \"%s\" on filesystem without ace acl " +"support\n" msgstr "" -#: src/filed/acl.c:229 src/filed/acl.c:254 +#: src/filed/acl.c:1878 #, c-format -msgid "aclx_get error on file \"%s\": ERR=%s\n" +msgid "acl_fromtext error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/acl.c:280 +#: src/filed/acl.c:1892 src/filed/acl.c:1900 #, c-format -msgid "Unknown acl type encountered on file \"%s\": %ld\n" +msgid "wrong encoding of acl type in acl stream on file \"%s\"\n" msgstr "" -#: src/filed/acl.c:304 src/filed/acl.c:313 +#: src/filed/acl.c:1925 #, c-format -msgid "Failed to convert acl into text on file \"%s\"\n" +msgid "acl_set error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/acl.c:386 +#: src/filed/acl.c:2011 #, c-format -msgid "" -"Trying to restore POSIX acl on file \"%s\" on filesystem without AIXC acl " -"support\n" +msgid "acltotext error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/acl.c:394 +#: src/filed/acl.c:2034 #, c-format -msgid "" -"Trying to restore NFSv4 acl on file \"%s\" on filesystem without NFS4 acl " -"support\n" +msgid "aclfromtext error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/acl.c:442 src/filed/acl.c:452 +#: src/filed/acl.c:2054 #, c-format -msgid "aclx_scanStr error on file \"%s\": ERR=%s\n" +msgid "acl(SETACL) error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/acl.c:478 +#: src/filed/acl.c:2120 +#, fuzzy, c-format +msgid "pioctl VIOCGETAL error on file \"%s\": ERR=%s\n" +msgstr "Lees fout op bestand %s. FOUT=%s\n" + +#: src/filed/acl.c:2148 +#, fuzzy, c-format +msgid "pioctl VIOCSETAL error on file \"%s\": ERR=%s\n" +msgstr "Lees fout op bestand %s. FOUT=%s\n" + +#: src/filed/acl.c:2351 #, c-format -msgid "aclx_put error on file \"%s\": ERR=%s\n" +msgid "Can't restore ACLs of %s - incompatible acl stream encountered - %d\n" +msgstr "" + +#: src/filed/filed.c:52 +#, fuzzy, c-format +msgid "" +"\n" +"%sVersion: %s (%s)\n" +"\n" +"Usage: bacula-fd [-f -s] [-c config_file] [-d debug_level]\n" +" -c use as configuration file\n" +" -d [,] set debug level to , debug tags to \n" +" -dt print a timestamp in debug output\n" +" -f run in foreground (for debugging)\n" +" -g groupid\n" +" -k keep readall capabilities\n" +" -m print kaboom output (for debugging)\n" +" -s no signals (for debugging)\n" +" -t test configuration file and exit\n" +" -T set trace on\n" +" -u userid\n" +" -v verbose user messages\n" +" -? print this message.\n" +"\n" +msgstr "" +"\n" +"Versie: %s (%s) %s %s %s\n" +"\n" +"Specificatie: tray-monitor [-c configuratiebestand] [-d debug_level]\n" +" -c gebruik configuratiebestand\n" +" -d instellen debug level op \n" +" -dt weergeven tijd in debug output\n" +" -t test - lees configuratie en stop\n" +" -? geef deze melding.\n" +"\n" + +#: src/filed/filed.c:185 +msgid "-k option has no meaning without -u option.\n" msgstr "" -#: src/filed/acl.c:823 +#: src/filed/filed.c:315 #, c-format -msgid "acl_to_text error on file \"%s\": ERR=%s\n" +msgid "" +"No File daemon resource defined in %s\n" +"Without that I don't know who I am :-(\n" msgstr "" -#: src/filed/acl.c:853 +#: src/filed/filed.c:320 #, c-format -msgid "acl_get_file error on file \"%s\": ERR=%s\n" +msgid "Only one Client resource permitted in %s\n" msgstr "" -#: src/filed/acl.c:906 +#: src/filed/filed.c:348 src/filed/filed.c:547 +#, fuzzy, c-format +msgid "Disable Command \"%s\" not found.\n" +msgstr "Job \"%s\" niet gevonden.\n" + +#: src/filed/filed.c:375 #, c-format msgid "" -"acl_delete_def_file error on file \"%s\": filesystem doesn't support ACLs\n" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"File daemon in %s.\n" msgstr "" -#: src/filed/acl.c:912 -#, c-format -msgid "acl_delete_def_file error on file \"%s\": ERR=%s\n" +#: src/filed/filed.c:399 +msgid "PKI encryption/signing enabled but not compiled into Bacula.\n" msgstr "" -#: src/filed/acl.c:923 +#: src/filed/filed.c:410 #, c-format -msgid "acl_from_text error on file \"%s\": ERR=%s\n" +msgid "" +"\"PKI Key Pair\" must be defined for File daemon \"%s\" in %s if either " +"\"PKI Sign\" or \"PKI Encrypt\" are enabled.\n" msgstr "" -#: src/filed/acl.c:939 -#, c-format -msgid "acl_valid error on file \"%s\": ERR=%s\n" +#: src/filed/filed.c:422 src/filed/filed.c:453 src/filed/filed.c:503 +msgid "Failed to allocate a new keypair object.\n" msgstr "" -#: src/filed/acl.c:971 +#: src/filed/filed.c:426 #, c-format -msgid "acl_set_file error on file \"%s\": filesystem doesn't support ACLs\n" +msgid "Failed to load public certificate for File daemon \"%s\" in %s.\n" msgstr "" -#: src/filed/acl.c:980 +#: src/filed/filed.c:432 #, c-format -msgid "acl_set_file error on file \"%s\": ERR=%s\n" +msgid "Failed to load private key for File daemon \"%s\" in %s.\n" msgstr "" -#: src/filed/acl.c:1087 src/filed/acl.c:1116 src/filed/acl.c:1230 -#: src/filed/acl.c:1738 src/filed/acl.c:1845 +#: src/filed/filed.c:462 #, c-format -msgid "pathconf error on file \"%s\": ERR=%s\n" +msgid "Failed to load private key from file %s for File daemon \"%s\" in %s.\n" msgstr "" -#: src/filed/acl.c:1246 +#: src/filed/filed.c:469 #, c-format msgid "" -"Trying to restore acl on file \"%s\" on filesystem without %s acl support\n" +"Failed to load trusted signer certificate from file %s for File daemon \"%s" +"\" in %s.\n" msgstr "" -#: src/filed/acl.c:1531 +#: src/filed/filed.c:509 #, c-format -msgid "getacl error on file \"%s\": ERR=%s\n" +msgid "" +"Failed to load master key certificate from file %s for File daemon \"%s\" in " +"%s.\n" msgstr "" -#: src/filed/acl.c:1566 +#: src/filed/filed.c:525 #, c-format -msgid "acltostr error on file \"%s\": ERR=%s\n" +msgid "No Director resource defined in %s\n" msgstr "" -#: src/filed/acl.c:1588 src/filed/acl.c:1598 +#: src/filed/status.c:82 #, c-format -msgid "strtoacl error on file \"%s\": ERR=%s\n" +msgid "Daemon started %s. Jobs: run=%d running=%d.\n" msgstr "" -#: src/filed/acl.c:1627 +#: src/filed/status.c:143 #, c-format -msgid "setacl error on file \"%s\": filesystem doesn't support ACLs\n" +msgid "" +" Sizes: boffset_t=%d size_t=%d debug=%s trace=%d mode=%d,%d bwlimit=%skB/s\n" msgstr "" -#: src/filed/acl.c:1635 +#: src/filed/status.c:199 #, c-format -msgid "setacl error on file \"%s\": ERR=%s\n" +msgid "Director connected at: %s\n" msgstr "" -#: src/filed/acl.c:1760 +#: src/filed/status.c:201 #, c-format -msgid "acl_get error on file \"%s\": ERR=%s\n" +msgid "JobId %d Job %s is running.\n" msgstr "" -#: src/filed/acl.c:1834 +#: src/filed/status.c:204 #, c-format -msgid "" -"Trying to restore acl on file \"%s\" on filesystem without acl support\n" +msgid " %s%s %s Job started: %s\n" msgstr "" -#: src/filed/acl.c:1863 +#: src/filed/status.c:232 #, c-format msgid "" -"Trying to restore POSIX acl on file \"%s\" on filesystem without aclent acl " -"support\n" +" Files=%s Bytes=%s AveBytes/sec=%s LastBytes/sec=%s Errors=%d\n" +" Bwlimit=%s\n" msgstr "" -#: src/filed/acl.c:1874 +#: src/filed/status.c:242 #, c-format -msgid "" -"Trying to restore NFSv4 acl on file \"%s\" on filesystem without ace acl " -"support\n" +msgid " Files: Restored=%s Expected=%s Completed=%d%%\n" msgstr "" -#: src/filed/acl.c:1890 +#: src/filed/status.c:247 #, c-format -msgid "acl_fromtext error on file \"%s\": ERR=%s\n" +msgid " Files: Examined=%s Backed up=%s\n" msgstr "" -#: src/filed/acl.c:1904 src/filed/acl.c:1912 +#: src/filed/status.c:260 #, c-format -msgid "wrong encoding of acl type in acl stream on file \"%s\"\n" +msgid " Processing file: %s\n" msgstr "" -#: src/filed/acl.c:1937 -#, c-format -msgid "acl_set error on file \"%s\": ERR=%s\n" +#: src/filed/status.c:271 +msgid " SDSocket closed.\n" msgstr "" -#: src/filed/acl.c:2023 -#, c-format -msgid "acltotext error on file \"%s\": ERR=%s\n" +#: src/filed/status.c:281 +msgid "====\n" msgstr "" -#: src/filed/acl.c:2046 -#, c-format -msgid "aclfromtext error on file \"%s\": ERR=%s\n" +#: src/filed/status.c:343 +msgid " SDSocket=closed\n" msgstr "" -#: src/filed/acl.c:2066 +#: src/filed/status.c:393 src/filed/status.c:427 #, c-format -msgid "acl(SETACL) error on file \"%s\": ERR=%s\n" +msgid "Bad .status command: %s\n" msgstr "" -#: src/filed/acl.c:2132 -#, fuzzy, c-format -msgid "pioctl VIOCGETAL error on file \"%s\": ERR=%s\n" -msgstr "Lees fout op bestand %s. FOUT=%s\n" - -#: src/filed/acl.c:2160 -#, fuzzy, c-format -msgid "pioctl VIOCSETAL error on file \"%s\": ERR=%s\n" -msgstr "Lees fout op bestand %s. FOUT=%s\n" - -#: src/filed/acl.c:2363 -#, c-format -msgid "Can't restore ACLs of %s - incompatible acl stream encountered - %d\n" +#: src/filed/status.c:394 +msgid "2900 Bad .status command, missing argument.\n" msgstr "" -#: src/filed/verify_vol.c:63 -msgid "Storage command not issued before Verify.\n" +#: src/filed/status.c:428 +msgid "2900 Bad .status command, wrong argument.\n" msgstr "" -#: src/filed/verify_vol.c:97 src/filed/restore.c:486 +#: src/tools/bregex.c:141 src/tools/bregtest.c:125 src/tools/bwild.c:110 #, c-format -msgid "Record header scan error: %s\n" +msgid "Could not open data file: %s\n" msgstr "" -#: src/filed/verify_vol.c:106 src/filed/restore.c:498 +#: src/tools/bbatch.c:67 #, c-format -msgid "Data record error. ERR=%s\n" +msgid "" +"\n" +"Version: %s (%s)\n" +"Example : bbatch -w /path/to/workdir -h localhost -f dat1 -f dat -f datx\n" +" will start 3 thread and load dat1, dat and datx in your catalog\n" +"See bbatch.c to generate datafile\n" +"\n" +"Usage: bbatch [ options ] -w working/dir -f datafile\n" +" -b with batch mode\n" +" -B without batch mode\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -n specify the database name (default bacula)\n" +" -u specify database user name (default bacula)\n" +" -P specify database host (default NULL)\n" +" -w specify working directory\n" +" -r call restore code with given jobids\n" +" -v verbose\n" +" -f specify data file\n" +" -? print this message\n" +"\n" msgstr "" -#: src/filed/verify_vol.c:110 src/filed/restore.c:502 +#: src/tools/bbatch.c:199 #, c-format -msgid "Actual data size %d not same as header %d\n" +msgid "Computing file list for jobid=%s files=%lld secs=%d\n" msgstr "" -#: src/filed/verify_vol.c:143 +#: src/tools/bbatch.c:303 #, c-format -msgid "Error scanning record header: %s\n" +msgid "Error opening datafile %s\n" msgstr "" -#: src/filed/backup.c:102 -msgid "Cannot set buffer size FD->SD.\n" +#: src/tools/bbatch.c:313 +msgid "Error while inserting file\n" msgstr "" -#: src/filed/backup.c:194 +#: src/tools/drivetype.c:35 #, c-format -msgid "Encountered %ld acl errors while doing backup\n" +msgid "" +"\n" +"Usage: drivetype [-v] path ...\n" +"\n" +" Print the drive type a given file/directory is on.\n" +" The following options are supported:\n" +"\n" +" -l print local fixed hard drive\n" +" -a display information on all drives\n" +" -v print both path and file system type.\n" +" -? print this message.\n" +"\n" msgstr "" -#: src/filed/backup.c:198 +#: src/tools/drivetype.c:66 src/tools/fstype.c:90 #, c-format -msgid "Encountered %ld xattr errors while doing backup\n" -msgstr "" - -#: src/filed/backup.c:267 src/filed/backup.c:276 -msgid "An error occurred while encrypting the stream.\n" +msgid "%s: unknown\n" msgstr "" -#: src/filed/backup.c:387 +#: src/tools/bsmtp.c:139 #, c-format -msgid " Recursion turned off. Will not descend from %s into %s\n" +msgid "Fatal malformed reply from %s: %s\n" msgstr "" -#: src/filed/backup.c:394 +#: src/tools/bsmtp.c:147 #, c-format -msgid " %s is a different filesystem. Will not descend from %s into it.\n" +msgid "Fatal fgets error: ERR=%s\n" msgstr "" -#: src/filed/backup.c:400 +#: src/tools/bsmtp.c:180 #, c-format -msgid " Disallowed filesystem. Will not descend from %s into %s\n" +msgid "" +"\n" +"Usage: %s [-f from] [-h mailhost] [-s subject] [-c copy] [recipient ...]\n" +" -4 forces bsmtp to use IPv4 addresses only.\n" +" -6 forces bsmtp to use IPv6 addresses only.\n" +" -8 set charset to UTF-8\n" +" -a use any ip protocol for address resolution\n" +" -c set the Cc: field\n" +" -d set debug level to \n" +" -dt print a timestamp in debug output\n" +" -f set the From: field\n" +" -h use mailhost:port as the SMTP server\n" +" -s set the Subject: field\n" +" -r set the Reply-To: field\n" +" -l set the maximum number of lines to send (default: " +"unlimited)\n" +" -? print this message.\n" +"\n" msgstr "" -#: src/filed/backup.c:405 -#, c-format -msgid " Disallowed drive type. Will not descend into %s\n" +#: src/tools/bsmtp.c:367 +msgid "Fatal error: no recipient given.\n" msgstr "" -#: src/filed/backup.c:416 +#: src/tools/bsmtp.c:395 #, c-format -msgid " Socket file skipped: %s\n" +msgid "Fatal gethostname error: ERR=%s\n" msgstr "" -#: src/filed/backup.c:429 +#: src/tools/bsmtp.c:406 #, c-format -msgid " Could not access \"%s\": ERR=%s\n" +msgid "Fatal getaddrinfo for myself failed \"%s\": ERR=%s\n" msgstr "" -#: src/filed/backup.c:436 +#: src/tools/bsmtp.c:414 #, c-format -msgid " Could not follow link \"%s\": ERR=%s\n" +msgid "Fatal gethostbyname for myself failed \"%s\": ERR=%s\n" msgstr "" -#: src/filed/backup.c:443 +#: src/tools/bsmtp.c:474 src/tools/bsmtp.c:509 #, c-format -msgid " Could not stat \"%s\": ERR=%s\n" +msgid "Error unknown mail host \"%s\": ERR=%s\n" msgstr "" -#: src/filed/backup.c:453 -#, c-format -msgid " Archive file not saved: %s\n" +#: src/tools/bsmtp.c:477 src/tools/bsmtp.c:512 +msgid "Retrying connection using \"localhost\".\n" msgstr "" -#: src/filed/backup.c:457 +#: src/tools/bsmtp.c:502 +#, fuzzy, c-format +msgid "Failed to connect to mailhost %s\n" +msgstr "Verbinden met de director mislukt\n" + +#: src/tools/bsmtp.c:520 #, c-format -msgid " Could not open directory \"%s\": ERR=%s\n" +msgid "Fatal error: Unknown address family for smtp host: %d\n" msgstr "" -#: src/filed/backup.c:466 +#: src/tools/bsmtp.c:529 src/tools/bsmtp.c:534 #, c-format -msgid " Unknown file type %d; not saved: %s\n" +msgid "Fatal socket error: ERR=%s\n" msgstr "" -#: src/filed/backup.c:522 +#: src/tools/bsmtp.c:539 #, c-format -msgid "%s signature digest initialization failed\n" +msgid "Fatal connect error to %s: ERR=%s\n" msgstr "" -#: src/filed/backup.c:630 +#: src/tools/bsmtp.c:548 #, c-format -msgid " Cannot open \"%s\": ERR=%s.\n" +msgid "Fatal _open_osfhandle error: ERR=%s\n" msgstr "" -#: src/filed/backup.c:667 +#: src/tools/bsmtp.c:555 src/tools/bsmtp.c:559 src/tools/bsmtp.c:568 +#: src/tools/bsmtp.c:572 #, c-format -msgid " Cannot open resource fork for \"%s\": ERR=%s.\n" +msgid "Fatal fdopen error: ERR=%s\n" msgstr "" -#: src/filed/backup.c:763 -msgid "Failed to allocate memory for crypto signature.\n" +#: src/tools/bsmtp.c:564 +#, c-format +msgid "Fatal dup error: ERR=%s\n" msgstr "" -#: src/filed/backup.c:768 src/filed/backup.c:774 src/filed/backup.c:789 -msgid "An error occurred while signing the stream.\n" +#: src/tools/dbcheck.c:183 +msgid "" +"Warning skipping the additional parameters for working directory/dbname/user/" +"password/host.\n" msgstr "" -#: src/filed/backup.c:813 -msgid "An error occurred finalizing signing the stream.\n" +#: src/tools/dbcheck.c:200 +#, c-format +msgid "Error can not find the Catalog name[%s] in the given config file [%s]\n" msgstr "" -#: src/filed/backup.c:931 +#: src/tools/dbcheck.c:202 #, c-format -msgid "Compression deflateParams error: %d\n" +msgid "Error there is no Catalog section in the given config file [%s]\n" msgstr "" -#: src/filed/backup.c:968 -msgid "Encrypting sparse or offset data not supported.\n" +#: src/tools/dbcheck.c:211 +msgid "Error no Director resource defined.\n" msgstr "" -#: src/filed/backup.c:975 -msgid "Failed to initialize encryption context.\n" +#: src/tools/dbcheck.c:235 +msgid "Wrong number of arguments.\n" msgstr "" -#: src/filed/backup.c:1085 -#, c-format -msgid "Compression deflate error: %d\n" +#: src/tools/dbcheck.c:240 +msgid "Working directory not supplied.\n" msgstr "" -#: src/filed/backup.c:1092 -#, c-format -msgid "Compression deflateReset error: %d\n" +#: src/tools/dbcheck.c:276 +msgid "Database port must be a numeric value.\n" msgstr "" -#: src/filed/backup.c:1126 -#, c-format -msgid "Compression LZO error: %d\n" -msgstr "Compressie LZO fout: %d\n" - -#: src/filed/backup.c:1171 src/filed/backup.c:1187 -msgid "Encryption error\n" -msgstr "Fout in versleuteling \n" - -#: src/filed/backup.c:1213 -#, c-format -msgid "Read error on file %s. ERR=%s\n" -msgstr "Lees fout op bestand %s. FOUT=%s\n" +#: src/tools/dbcheck.c:279 +msgid "Database port must be a int value.\n" +msgstr "" -#: src/filed/backup.c:1216 +#: src/tools/dbcheck.c:353 #, c-format -msgid "Too many errors. JobErrors=%d.\n" -msgstr "Te veel fouten. OpdrachtFouten=%d.\n" - -#: src/filed/backup.c:1226 -msgid "Encryption padding error\n" +msgid "Hello, this is the database check/correct program.\n" msgstr "" -#: src/filed/backup.c:1290 -msgid "Invalid file flags, no supported data stream type.\n" +#: src/tools/dbcheck.c:355 +#, c-format +msgid "Modify database is on." msgstr "" -#: src/filed/backup.c:1549 +#: src/tools/dbcheck.c:357 #, c-format -msgid "VSS Writer (BackupComplete): %s\n" +msgid "Modify database is off." msgstr "" -#: src/filed/restore.c:114 +#: src/tools/dbcheck.c:359 src/tools/dbcheck.c:420 #, c-format -msgid "Size of data or stream of %s not correct. Original %s, restored %s.\n" +msgid " Verbose is on.\n" msgstr "" -#: src/filed/restore.c:134 +#: src/tools/dbcheck.c:361 src/tools/dbcheck.c:422 #, c-format -msgid "Invalid length of Finder Info (got %d, not 32)\n" +msgid " Verbose is off.\n" msgstr "" -#: src/filed/restore.c:139 +#: src/tools/dbcheck.c:363 #, c-format -msgid "Could not set Finder Info on %s\n" +msgid "Please select the function you want to perform.\n" msgstr "" -#: src/filed/restore.c:418 -msgid "LZO init failed\n" -msgstr "Initialiseren LZO mislukt\n" - -#: src/filed/restore.c:660 -msgid "Unexpected cryptographic session data stream.\n" +#: src/tools/dbcheck.c:367 +#, c-format +msgid "" +"\n" +" 1) Toggle modify database flag\n" +" 2) Toggle verbose flag\n" +" 3) Repair bad Filename records\n" +" 4) Repair bad Path records\n" +" 5) Eliminate duplicate Filename records\n" +" 6) Eliminate duplicate Path records\n" +" 7) Eliminate orphaned Jobmedia records\n" +" 8) Eliminate orphaned File records\n" +" 9) Eliminate orphaned Path records\n" +" 10) Eliminate orphaned Filename records\n" +" 11) Eliminate orphaned FileSet records\n" +" 12) Eliminate orphaned Client records\n" +" 13) Eliminate orphaned Job records\n" +" 14) Eliminate all Admin records\n" +" 15) Eliminate all Restore records\n" +" 16) All (3-15)\n" +" 17) Quit\n" msgstr "" -#: src/filed/restore.c:670 +#: src/tools/dbcheck.c:386 +#, c-format msgid "" -"No private decryption keys have been defined to decrypt encrypted backup " -"data.\n" -msgstr "" - -#: src/filed/restore.c:681 -msgid "Could not create digest.\n" -msgstr "" - -#: src/filed/restore.c:699 -msgid "Missing private key required to decrypt encrypted backup data.\n" +"\n" +" 1) Toggle modify database flag\n" +" 2) Toggle verbose flag\n" +" 3) Check for bad Filename records\n" +" 4) Check for bad Path records\n" +" 5) Check for duplicate Filename records\n" +" 6) Check for duplicate Path records\n" +" 7) Check for orphaned Jobmedia records\n" +" 8) Check for orphaned File records\n" +" 9) Check for orphaned Path records\n" +" 10) Check for orphaned Filename records\n" +" 11) Check for orphaned FileSet records\n" +" 12) Check for orphaned Client records\n" +" 13) Check for orphaned Job records\n" +" 14) Check for all Admin records\n" +" 15) Check for all Restore records\n" +" 16) All (3-15)\n" +" 17) Quit\n" msgstr "" -#: src/filed/restore.c:702 -msgid "Decrypt of the session key failed.\n" +#: src/tools/dbcheck.c:406 +msgid "Select function number: " msgstr "" -#: src/filed/restore.c:708 +#: src/tools/dbcheck.c:413 #, c-format -msgid "An error occurred while decoding encrypted session data stream: %s\n" +msgid "Database will be modified.\n" msgstr "" -#: src/filed/restore.c:775 src/filed/restore.c:828 +#: src/tools/dbcheck.c:415 #, c-format -msgid "Missing encryption session data stream for %s\n" +msgid "Database will NOT be modified.\n" msgstr "" -#: src/filed/restore.c:783 src/filed/restore.c:835 +#: src/tools/dbcheck.c:506 #, c-format -msgid "Failed to initialize decryption context for %s\n" +msgid "JobId=%s Name=\"%s\" StartTime=%s\n" msgstr "" -#: src/filed/restore.c:847 +#: src/tools/dbcheck.c:513 #, c-format -msgid "Cannot open resource fork for %s.\n" +msgid "Orphaned JobMediaId=%s JobId=%s Volume=\"%s\"\n" msgstr "" -#: src/filed/restore.c:992 -msgid "Unexpected cryptographic signature data stream.\n" +#: src/tools/dbcheck.c:520 +#, c-format +msgid "Orphaned FileId=%s JobId=%s Volume=\"%s\"\n" msgstr "" -#: src/filed/restore.c:1000 +#: src/tools/dbcheck.c:527 #, c-format -msgid "Failed to decode message signature for %s\n" +msgid "Orphaned FileSetId=%s FileSet=\"%s\" MD5=%s\n" msgstr "" -#: src/filed/restore.c:1064 +#: src/tools/dbcheck.c:534 #, c-format -msgid "Encountered %ld acl errors while doing restore\n" +msgid "Orphaned ClientId=%s Name=\"%s\"\n" msgstr "" -#: src/filed/restore.c:1068 +#: src/tools/dbcheck.c:587 #, c-format -msgid "Encountered %ld xattr errors while doing restore\n" +msgid "Deleting: %s\n" msgstr "" -#: src/filed/restore.c:1072 +#: src/tools/dbcheck.c:659 #, c-format -msgid "" -"%d non-supported data streams and %d non-supported attrib streams ignored.\n" +msgid "Checking for duplicate Filename entries.\n" msgstr "" -#: src/filed/restore.c:1076 +#: src/tools/dbcheck.c:670 #, c-format -msgid "%d non-supported resource fork streams ignored.\n" +msgid "Found %d duplicate Filename records.\n" msgstr "" -#: src/filed/restore.c:1079 -#, c-format -msgid "%d non-supported Finder Info streams ignored.\n" +#: src/tools/dbcheck.c:671 +msgid "Print the list? (yes/no): " msgstr "" -#: src/filed/restore.c:1082 +#: src/tools/dbcheck.c:694 src/tools/dbcheck.c:759 #, c-format -msgid "%d non-supported acl streams ignored.\n" +msgid "Found %d for: %s\n" msgstr "" -#: src/filed/restore.c:1085 +#: src/tools/dbcheck.c:724 #, c-format -msgid "%d non-supported crypto streams ignored.\n" +msgid "Checking for duplicate Path entries.\n" msgstr "" -#: src/filed/restore.c:1088 +#: src/tools/dbcheck.c:735 #, c-format -msgid "%d non-supported xattr streams ignored.\n" +msgid "Found %d duplicate Path records.\n" msgstr "" -#: src/filed/restore.c:1168 -msgid "Zlib errno" -msgstr "Zlib foutnr." - -#: src/filed/restore.c:1170 -msgid "Zlib stream error" -msgstr "Zlib datastroom fout" - -#: src/filed/restore.c:1172 -msgid "Zlib data error" -msgstr "Zlib data fout" - -#: src/filed/restore.c:1174 -msgid "Zlib memory error" -msgstr "Zlib geheugen fout" - -#: src/filed/restore.c:1176 -msgid "Zlib buffer error" -msgstr "Zlib buffer fout" - -#: src/filed/restore.c:1178 -msgid "Zlib version error" -msgstr "Zlib versie fout" +#: src/tools/dbcheck.c:736 src/tools/dbcheck.c:798 src/tools/dbcheck.c:844 +#: src/tools/dbcheck.c:912 src/tools/dbcheck.c:970 src/tools/dbcheck.c:1013 +#: src/tools/dbcheck.c:1055 src/tools/dbcheck.c:1097 src/tools/dbcheck.c:1134 +#: src/tools/dbcheck.c:1167 src/tools/dbcheck.c:1201 src/tools/dbcheck.c:1268 +msgid "Print them? (yes/no): " +msgstr "" -#: src/filed/restore.c:1218 +#: src/tools/dbcheck.c:789 #, c-format -msgid "Missing cryptographic signature for %s\n" +msgid "Checking for orphaned JobMedia entries.\n" msgstr "" -#: src/filed/restore.c:1251 src/filed/restore.c:1280 +#: src/tools/dbcheck.c:797 #, c-format -msgid "Signature validation failed for file %s: ERR=%s\n" +msgid "Found %d orphaned JobMedia records.\n" msgstr "" -#: src/filed/restore.c:1268 +#: src/tools/dbcheck.c:815 #, c-format -msgid "Digest one file failed for file: %s\n" +msgid "Deleting %d orphaned JobMedia records.\n" msgstr "" -#: src/filed/restore.c:1307 +#: src/tools/dbcheck.c:832 #, c-format -msgid "Signature validation failed for %s: %s\n" +msgid "Checking for orphaned File entries. This may take some time!\n" msgstr "" -#: src/filed/restore.c:1404 +#: src/tools/dbcheck.c:843 #, c-format -msgid "LZO uncompression error on file %s. ERR=%d\n" +msgid "Found %d orphaned File records.\n" msgstr "" -#: src/filed/restore.c:1441 +#: src/tools/dbcheck.c:860 #, c-format -msgid "Uncompression error on file %s. ERR=%s\n" +msgid "Deleting %d orphaned File records.\n" msgstr "" -#: src/filed/restore.c:1474 +#: src/tools/dbcheck.c:879 #, c-format -msgid "Write error in Win32 Block Decomposition on %s: %s\n" +msgid "Pruning orphaned Path entries isn't possible when using BVFS.\n" msgstr "" -#: src/filed/restore.c:1533 -msgid "Decryption error\n" +#: src/tools/dbcheck.c:888 src/tools/dbcheck.c:946 +msgid "Create temporary index? (yes/no): " msgstr "" -#: src/filed/restore.c:1626 -msgid "Logic error: output file should be open\n" +#: src/tools/dbcheck.c:900 +#, c-format +msgid "Checking for orphaned Path entries. This may take some time!\n" msgstr "" -#: src/filed/restore.c:1664 -msgid "Logic error: output file should not be open\n" +#: src/tools/dbcheck.c:911 +#, c-format +msgid "Found %d orphaned Path records.\n" msgstr "" -#: src/filed/restore.c:1698 +#: src/tools/dbcheck.c:924 #, c-format -msgid "Decryption error. buf_len=%d decrypt_len=%d on file %s\n" +msgid "Deleting %d orphaned Path records.\n" msgstr "" -#: src/filed/restore.c:1819 -msgid "Open File Manager paused\n" +#: src/tools/dbcheck.c:958 +#, c-format +msgid "Checking for orphaned Filename entries. This may take some time!\n" msgstr "" -#: src/filed/restore.c:1823 -msgid "FAILED to pause Open File Manager\n" +#: src/tools/dbcheck.c:969 +#, c-format +msgid "Found %d orphaned Filename records.\n" msgstr "" -#: src/filed/restore.c:1831 +#: src/tools/dbcheck.c:982 #, c-format -msgid "Running as '%s'. Privmask=%#08x\n" +msgid "Deleting %d orphaned Filename records.\n" msgstr "" -#: src/filed/restore.c:1833 -msgid "Failed to retrieve current UserName\n" +#: src/tools/dbcheck.c:1002 +#, c-format +msgid "Checking for orphaned FileSet entries. This takes some time!\n" msgstr "" -#: src/filed/job.c:456 +#: src/tools/dbcheck.c:1012 #, c-format -msgid "2901 Job %s not found.\n" +msgid "Found %d orphaned FileSet records.\n" msgstr "" -#: src/filed/job.c:466 +#: src/tools/dbcheck.c:1027 #, c-format -msgid "2001 Job %s marked to be canceled.\n" +msgid "Deleting %d orphaned FileSet records.\n" msgstr "" -#: src/filed/job.c:469 -msgid "2902 Error scanning cancel command.\n" +#: src/tools/dbcheck.c:1036 +#, c-format +msgid "Checking for orphaned Client entries.\n" msgstr "" -#: src/filed/job.c:492 +#: src/tools/dbcheck.c:1054 #, c-format -msgid "2991 Bad setdebug command: %s\n" +msgid "Found %d orphaned Client records.\n" msgstr "" -#: src/filed/job.c:515 +#: src/tools/dbcheck.c:1069 #, c-format -msgid "Bad estimate command: %s" +msgid "Deleting %d orphaned Client records.\n" msgstr "" -#: src/filed/job.c:516 -msgid "2992 Bad estimate command.\n" +#: src/tools/dbcheck.c:1078 +#, c-format +msgid "Checking for orphaned Job entries.\n" msgstr "" -#: src/filed/job.c:539 +#: src/tools/dbcheck.c:1096 #, c-format -msgid "Bad Job Command: %s" +msgid "Found %d orphaned Job records.\n" msgstr "" -#: src/filed/job.c:578 +#: src/tools/dbcheck.c:1111 #, c-format -msgid "Bad RunBeforeJob command: %s\n" +msgid "Deleting %d orphaned Job records.\n" msgstr "" -#: src/filed/job.c:579 src/filed/job.c:598 -msgid "2905 Bad RunBeforeJob command.\n" +#: src/tools/dbcheck.c:1113 +#, c-format +msgid "Deleting JobMedia records of orphaned Job records.\n" msgstr "" -#: src/filed/job.c:609 -msgid "2905 Bad RunBeforeNow command.\n" +#: src/tools/dbcheck.c:1115 +#, c-format +msgid "Deleting Log records of orphaned Job records.\n" msgstr "" -#: src/filed/job.c:628 +#: src/tools/dbcheck.c:1124 #, c-format -msgid "Bad RunAfter command: %s\n" +msgid "Checking for Admin Job entries.\n" msgstr "" -#: src/filed/job.c:629 -msgid "2905 Bad RunAfterJob command.\n" +#: src/tools/dbcheck.c:1133 +#, c-format +msgid "Found %d Admin Job records.\n" msgstr "" -#: src/filed/job.c:665 +#: src/tools/dbcheck.c:1148 #, c-format -msgid "Bad RunScript command: %s\n" +msgid "Deleting %d Admin Job records.\n" msgstr "" -#: src/filed/job.c:666 -msgid "2905 Bad RunScript command.\n" +#: src/tools/dbcheck.c:1157 +#, c-format +msgid "Checking for Restore Job entries.\n" msgstr "" -#: src/filed/job.c:720 +#: src/tools/dbcheck.c:1166 #, c-format -msgid "Bad RestoreObject command: %s\n" +msgid "Found %d Restore Job records.\n" msgstr "" -#: src/filed/job.c:785 -msgid "2909 Bad RestoreObject command.\n" +#: src/tools/dbcheck.c:1181 +#, c-format +msgid "Deleting %d Restore Job records.\n" msgstr "" -#: src/filed/job.c:824 +#: src/tools/dbcheck.c:1191 #, c-format -msgid "Plugin Directory not defined. Cannot use plugin: \"%s\"\n" +msgid "Checking for Filenames with a trailing slash\n" msgstr "" -#: src/filed/job.c:866 +#: src/tools/dbcheck.c:1200 #, c-format -msgid "Error running program: %s. stat=%d: ERR=%s\n" +msgid "Found %d bad Filename records.\n" msgstr "" -#: src/filed/job.c:877 +#: src/tools/dbcheck.c:1218 src/tools/dbcheck.c:1284 #, c-format -msgid "Cannot open FileSet input file: %s. ERR=%s\n" +msgid "Reparing %d bad Filename records.\n" msgstr "" -#: src/filed/job.c:1031 +#: src/tools/dbcheck.c:1258 #, c-format -msgid "REGEX %s compile error. ERR=%s\n" +msgid "Checking for Paths without a trailing slash\n" msgstr "" -#: src/filed/job.c:1182 +#: src/tools/dbcheck.c:1267 #, c-format -msgid "Invalid FileSet command: %s\n" +msgid "Found %d bad Path records.\n" msgstr "" -#: src/filed/job.c:1655 +#: src/tools/dbcheck.c:1430 #, c-format msgid "" -"DIR and FD clocks differ by %lld seconds, FD automatically compensating.\n" +"Ok. Index over the %s column already exists and dbcheck will work faster.\n" msgstr "" -#: src/filed/job.c:1664 +#: src/tools/dbcheck.c:1433 #, c-format -msgid "Unknown backup level: %s\n" +msgid "" +"Note. Index over the %s column not found, that can greatly slow down " +"dbcheck.\n" msgstr "" -#: src/filed/job.c:1677 +#: src/tools/dbcheck.c:1448 #, c-format -msgid "Bad level command: %s\n" +msgid "Create temporary index... This may take some time!\n" msgstr "" -#: src/filed/job.c:1699 +#: src/tools/dbcheck.c:1456 #, c-format -msgid "Bad session command: %s" +msgid "Temporary index created.\n" msgstr "" -#: src/filed/job.c:1760 +#: src/tools/dbcheck.c:1471 #, c-format -msgid "Bad storage command: %s" +msgid "Drop temporary index.\n" msgstr "" -#: src/filed/job.c:1781 +#: src/tools/dbcheck.c:1481 #, c-format -msgid "Failed to connect to Storage daemon: %s:%d\n" +msgid "Temporary index %s deleted.\n" msgstr "" -#: src/filed/job.c:1793 -msgid "Failed to authenticate Storage daemon.\n" +#: src/tools/bvfs_test.c:44 src/tools/ing_test.c:45 +#, c-format +msgid "" +"\n" +"Version: %s (%s)\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -n specify the database name (default bacula)\n" +" -u specify database user name (default bacula)\n" +" -P specify database host (default NULL)\n" +" -w specify working directory\n" +" -j specify jobids\n" +" -p specify path\n" +" -f specify file\n" +" -l maximum tuple to fetch\n" +" -T truncate cache table before starting\n" +" -v verbose\n" +" -? print this message\n" +"\n" msgstr "" -#: src/filed/job.c:1840 -msgid "ACL support not configured for your machine.\n" +#: src/tools/testls.c:47 +#, c-format +msgid "" +"\n" +"Usage: testls [-d debug_level] [-] [pattern1 ...]\n" +" -a print extended attributes (Win32 debug)\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -e specify file of exclude patterns\n" +" -i specify file of include patterns\n" +" -q quiet, don't print filenames (debug)\n" +" - read pattern(s) from stdin\n" +" -? print this message.\n" +"\n" +"Patterns are file inclusion -- normally directories.\n" +"Debug level >= 1 prints each file found.\n" +"Debug level >= 10 prints path/file for catalog.\n" +"Errors always printed.\n" +"Files/paths truncated is number with len > 255.\n" +"Truncation is only in catalog.\n" +"\n" msgstr "" -#: src/filed/job.c:1844 -msgid "XATTR support not configured for your machine.\n" +#: src/tools/testls.c:143 +#, c-format +msgid "Could not open include file: %s\n" msgstr "" -#: src/filed/job.c:1853 -msgid "Cannot contact Storage daemon\n" +#: src/tools/testls.c:156 +#, c-format +msgid "Could not open exclude file: %s\n" msgstr "" -#: src/filed/job.c:1872 +#: src/tools/testls.c:170 #, c-format -msgid "Bad response to append open: %s\n" +msgid "Files seen = %d\n" msgstr "" -#: src/filed/job.c:1877 -msgid "Bad response from stored to open command\n" +#: src/tools/testls.c:203 src/tools/testfind.c:310 +#, c-format +msgid "Err: Could not access %s: %s\n" msgstr "" -#: src/filed/job.c:1909 +#: src/tools/testls.c:206 src/tools/testfind.c:313 #, c-format -msgid "Generate VSS snapshots. Driver=\"%s\", Drive(s)=\"%s\"\n" +msgid "Err: Could not follow ff->link %s: %s\n" msgstr "" -#: src/filed/job.c:1912 +#: src/tools/testls.c:209 src/tools/testfind.c:316 #, c-format -msgid "CreateSGenerate VSS snapshots failed. ERR=%s\n" +msgid "Err: Could not stat %s: %s\n" msgstr "" -#: src/filed/job.c:1919 +#: src/tools/testls.c:212 src/tools/testfind.c:319 #, c-format -msgid "Generate VSS snapshot of drive \"%c:\\\" failed.\n" +msgid "Skip: File not saved. No change. %s\n" msgstr "" -#: src/filed/job.c:1925 +#: src/tools/testls.c:215 src/tools/testfind.c:322 #, c-format -msgid "VSS Writer (PrepareForBackup): %s\n" +msgid "Err: Attempt to backup archive. Not saved. %s\n" msgstr "" -#: src/filed/job.c:1930 -msgid "No drive letters found for generating VSS snapshots.\n" +#: src/tools/testls.c:218 +#, c-format +msgid "Recursion turned off. Directory not entered. %s\n" msgstr "" -#: src/filed/job.c:1934 +#: src/tools/testls.c:221 #, c-format -msgid "VSS was not initialized properly. ERR=%s\n" +msgid "Skip: File system change prohibited. Directory not entered. %s\n" msgstr "" -#: src/filed/job.c:1985 -msgid "Append Close with SD failed.\n" +#: src/tools/testls.c:224 src/tools/testfind.c:325 +#, c-format +msgid "Err: Could not open directory %s: %s\n" msgstr "" -#: src/filed/job.c:1989 +#: src/tools/testls.c:227 src/tools/testfind.c:328 #, c-format -msgid "Bad status %d returned from Storage Daemon.\n" +msgid "Err: Unknown file ff->type %d: %s\n" msgstr "" -#: src/filed/job.c:2019 +#: src/tools/testfind.c:58 #, c-format -msgid "2994 Bad verify command: %s\n" +msgid "" +"\n" +"Usage: testfind [-d debug_level] [-] [pattern1 ...]\n" +" -a print extended attributes (Win32 debug)\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -c specify config file containing FileSet resources\n" +" -f specify which FileSet to use\n" +" -? print this message.\n" +"\n" +"Patterns are used for file inclusion -- normally directories.\n" +"Debug level >= 1 prints each file found.\n" +"Debug level >= 10 prints path/file for catalog.\n" +"Errors are always printed.\n" +"Files/paths truncated is the number of files/paths with len > 255.\n" +"Truncation is only in the catalog.\n" +"\n" msgstr "" -#: src/filed/job.c:2034 src/filed/job.c:2075 +#: src/tools/testfind.c:223 #, c-format -msgid "2994 Bad verify level: %s\n" +msgid "" +"\n" +"Total files : %d\n" +"Max file length: %d\n" +"Max path length: %d\n" +"Files truncated: %d\n" +"Paths truncated: %d\n" +"Hard links : %d\n" msgstr "" -#: src/filed/job.c:2146 +#: src/tools/testfind.c:266 #, c-format -msgid "Bad replace command. CMD=%s\n" +msgid "Reg: %s\n" msgstr "" -#: src/filed/job.c:2169 -#, c-format -msgid "Bad where regexp. where=%s\n" +#: src/tools/testfind.c:288 +msgid "\t[will not descend: recursion turned off]" msgstr "" -#: src/filed/job.c:2207 -#, c-format -msgid "VSS was not initialized properly. VSS support is disabled. ERR=%s\n" +#: src/tools/testfind.c:290 +msgid "\t[will not descend: file system change not allowed]" msgstr "" -#: src/filed/job.c:2252 -#, c-format -msgid "VSS Writer (RestoreComplete): %s\n" +#: src/tools/testfind.c:292 +msgid "\t[will not descend: disallowed file system]" msgstr "" -#: src/filed/job.c:2302 -msgid "Improper calling sequence.\n" +#: src/tools/testfind.c:294 +msgid "\t[will not descend: disallowed drive type]" msgstr "" -#: src/filed/job.c:2322 +#: src/tools/testfind.c:378 #, c-format -msgid "Bad response to SD read open: %s\n" +msgid "===== Filename truncated to 255 chars: %s\n" msgstr "" -#: src/filed/job.c:2327 -msgid "Bad response from stored to read open command\n" +#: src/tools/testfind.c:395 +#, c-format +msgid "========== Path name truncated to 255 chars: %s\n" msgstr "" -#: src/filed/job.c:2391 +#: src/tools/testfind.c:404 #, c-format -msgid "Comm error with SD. bad response to %s. ERR=%s\n" +msgid "========== Path length is zero. File=%s\n" msgstr "" -#: src/filed/job.c:2394 +#: src/tools/testfind.c:407 #, c-format -msgid "Bad response to %s command. Wanted %s, got %s\n" +msgid "Path: %s\n" msgstr "" -#: src/filed/authenticate.c:68 +#: src/tools/fstype.c:36 #, c-format -msgid "I only authenticate directors, not %d\n" +msgid "" +"\n" +"Usage: fstype [-v] path ...\n" +"\n" +" Print the file system type a given file/directory is on.\n" +" The following options are supported:\n" +"\n" +" -v print both path and file system type.\n" +" -? print this message.\n" +"\n" msgstr "" -#: src/filed/authenticate.c:100 +#: src/tools/cats_test.c:48 #, c-format -msgid "Connection from unknown Director %s at %s rejected.\n" +msgid "" +"\n" +"Version: %s (%s)\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -n specify the database name (default bacula)\n" +" -u specify database user name (default bacula)\n" +" -P specify database host (default NULL)\n" +" -w specify working directory\n" +" -p specify path\n" +" -f specify file\n" +" -l maximum tuple to fetch\n" +" -q print only errors\n" +" -v verbose\n" +" -? print this message\n" +"\n" msgstr "" -#: src/filed/authenticate.c:144 +#: src/tools/cats_test.c:364 #, c-format -msgid "Incorrect password given by Director at %s.\n" +msgid "Could not open, database \"%s\".\n" msgstr "" -#: src/filed/authenticate.c:263 -msgid "" -"Authorization key rejected by Storage daemon.\n" -"Please see " +#: src/tools/ing_test.c:219 src/tools/ing_test.c:252 src/tools/ing_test.c:290 +msgid "Stmt went wrong\n" +msgstr "" + +#: src/tools/ing_test.c:308 +msgid "CREATE-Stmt went wrong\n" +msgstr "" + +#: src/tools/ing_test.c:313 +msgid "DROP-Stmt went wrong\n" msgstr "" #: examples/nagios/check_bacula/check_bacula.c:59 @@ -17044,1083 +16728,731 @@ msgstr "" "\n" "Versie: " -#: src/baconfig.h:72 src/baconfig.h:73 src/baconfig.h:78 src/baconfig.h:79 -#, c-format -msgid "Failed ASSERT: %s\n" -msgstr "" - -#: src/win32/compat/compat.cpp:2721 -msgid "" -"\n" -"\n" -"Bacula ERROR: " -msgstr "" -"\n" -"\n" -"Bacula FOUT: " - -#: src/win32/libwin32/service.cpp:107 -msgid "RegisterServiceCtlHandler failed" +#: src/lib/status.h:82 +msgid "===================================================================\n" msgstr "" -#: src/win32/libwin32/service.cpp:108 -msgid "Failure contacting the Service Handler" +#: src/baconfig.h:60 src/baconfig.h:61 src/baconfig.h:66 src/baconfig.h:67 +#, c-format +msgid "Failed ASSERT: %s\n" msgstr "" -#: src/win32/libwin32/service.cpp:119 -msgid "Service start report failed" -msgstr "" +#: src/qt-console/bcomm/dircomm.cpp:79 +#, c-format +msgid "Already connected\"%s\".\n" +msgstr "Al verbonden\"%s\".\n" -#: src/win32/libwin32/service.cpp:172 -msgid "StartServiceCtrlDispatcher failed." +#: src/qt-console/bcomm/dircomm.cpp:90 +#: src/qt-console/tray-monitor/tray-monitor.cpp:347 +#, c-format +msgid "Connecting to Director %s:%d" msgstr "" -#: src/win32/libwin32/service.cpp:179 -msgid "KERNEL32.DLL not found: Bacula service not started" -msgstr "KERNEL32.DLL niet gevonden. Bacula service niet gestart" - -#: src/win32/libwin32/service.cpp:189 -msgid "Registry service not found: Bacula service not started" +#: src/qt-console/bcomm/dircomm.cpp:92 +#, c-format +msgid "" +"Connecting to Director %s:%d\n" +"\n" msgstr "" +"Verbinden met Director %s:%d\n" +"\n" -#: src/win32/libwin32/service.cpp:191 -msgid "Registry service entry point not found" +#: src/qt-console/bcomm/dircomm.cpp:163 +#: src/qt-console/tray-monitor/tray-monitor.cpp:349 +msgid "Director daemon" msgstr "" -#: src/win32/libwin32/service.cpp:212 -msgid "Report Service failure" -msgstr "" +#: src/qt-console/bcomm/dircomm.cpp:201 +msgid "Initializing ..." +msgstr "Initialiseren ..." -#: src/win32/libwin32/service.cpp:243 -msgid "Unable to install the service" -msgstr "Kan de service niet installeren" +#: src/qt-console/bcomm/dircomm.cpp:217 src/qt-console/console/console.cpp:130 +msgid "Connected" +msgstr "Verbonden" -#: src/win32/libwin32/service.cpp:251 -msgid "Service command length too long" -msgstr "Lengte service commando te lang" +#: src/qt-console/bcomm/dircomm.cpp:341 +msgid "Command completed ..." +msgstr "Opdracht gereed ..." -#: src/win32/libwin32/service.cpp:252 -msgid "Service command length too long. Service not registered." -msgstr "Lengte service commando te lang. Service niet geregistreerd" +#: src/qt-console/bcomm/dircomm.cpp:348 src/qt-console/console/console.cpp:367 +msgid "Processing command ..." +msgstr "Opdracht aan het uitvoeren ..." -#: src/win32/libwin32/service.cpp:265 -msgid "" -"The Service Control Manager could not be contacted - the service was not " -"installed" -msgstr "" +#: src/qt-console/bcomm/dircomm.cpp:355 +msgid "At main prompt waiting for input ..." +msgstr "Wacht op invoer op opdrachtregel in hoofdscherm ..." -#: src/win32/libwin32/service.cpp:288 src/win32/libwin32/service.cpp:317 -#: src/win32/libwin32/service.cpp:365 src/win32/libwin32/service.cpp:373 -#: src/win32/libwin32/service.cpp:377 -msgid "The Bacula service: " -msgstr "De Bacula service:" +#: src/qt-console/bcomm/dircomm.cpp:362 src/qt-console/bcomm/dircomm.cpp:375 +msgid "At prompt waiting for input ..." +msgstr "Wacht op invoer op opdrachtregel ..." -#: src/win32/libwin32/service.cpp:295 -msgid "" -"Provides file backup and restore services. Bacula -- the network backup " -"solution." -msgstr "" +#: src/qt-console/bcomm/dircomm.cpp:383 +msgid "Command failed." +msgstr "Opdracht mislukt." -#: src/win32/libwin32/service.cpp:306 -msgid "Cannot write System Registry for " -msgstr "" +#: src/qt-console/bcomm/dircomm.cpp:455 +msgid "Director disconnected." +msgstr "Director niet verbonden." -#: src/win32/libwin32/service.cpp:307 -msgid "" -"The System Registry could not be updated - the Bacula service was not " -"installed" +#: src/qt-console/tray-monitor/tray_conf.cpp:165 +#, c-format +msgid "Monitor: name=%s FDtimeout=%s SDtimeout=%s\n" msgstr "" -#: src/win32/libwin32/service.cpp:316 -msgid "Cannot add Bacula key to System Registry" -msgstr "Kan Bacula sleutel niet aan Systeem Register toevoegen" - -#: src/win32/libwin32/service.cpp:327 -msgid "The " -msgstr "De" - -#: src/win32/libwin32/service.cpp:385 -msgid "An existing Bacula service: " -msgstr "Een bestaande Bacula service:" - -#: src/win32/libwin32/service.cpp:394 -msgid "" -"The service Manager could not be contacted - the Bacula service was not " -"removed" +#: src/qt-console/tray-monitor/tray_conf.cpp:171 +#, c-format +msgid "Director: name=%s address=%s FDport=%d\n" msgstr "" -#: src/win32/libwin32/service.cpp:407 -msgid "" -"Could not find registry entry.\n" -"Service probably not registerd - the Bacula service was not removed" +#: src/qt-console/tray-monitor/tray_conf.cpp:175 +#, c-format +msgid "Client: name=%s address=%s FDport=%d\n" msgstr "" -#: src/win32/libwin32/service.cpp:414 -msgid "Could not delete Registry key for " +#: src/qt-console/tray-monitor/tray_conf.cpp:179 +#, c-format +msgid "Storage: name=%s address=%s SDport=%d\n" msgstr "" -#: src/win32/libwin32/service.cpp:425 -msgid "Bacula could not be contacted, probably not running" -msgstr "Bacula kan niet worden bereikt, waarschijnlijk niet opgestart" - -#: src/win32/libwin32/service.cpp:433 -msgid "The Bacula service has been removed" -msgstr "De Bacula service is verwijderd" - -#: src/win32/libwin32/service.cpp:474 -msgid "SetServiceStatus failed" +#: src/qt-console/tray-monitor/tray_conf.cpp:183 +#: src/qt-console/bat_conf.cpp:145 +#, c-format +msgid "ConsoleFont: name=%s font face=%s\n" msgstr "" -#: src/win32/libwin32/service.cpp:500 +#: src/qt-console/tray-monitor/tray-monitor.cpp:55 #, c-format msgid "" "\n" +"Version: %s (%s) %s %s %s\n" +"\n" +"Usage: tray-monitor [-c config_file] [-d debug_level]\n" +" -c set configuration file to file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -t test - read configuration and exit\n" +" -? print this message.\n" "\n" -"%s error: %ld at %s:%d" msgstr "" "\n" +"Versie: %s (%s) %s %s %s\n" +"\n" +"Specificatie: tray-monitor [-c configuratiebestand] [-d debug_level]\n" +" -c gebruik configuratiebestand\n" +" -d instellen debug level op \n" +" -dt weergeven tijd in debug output\n" +" -t test - lees configuratie en stop\n" +" -? geef deze melding.\n" "\n" -"%s fout: %ld op %s:%d" -#: src/win32/libwin32/service.cpp:576 +#: src/qt-console/tray-monitor/tray-monitor.cpp:204 #, c-format -msgid "Locked by: %s, duration: %ld seconds\n" +msgid "" +"Error: %d Monitor resources defined in %s. You must define one and only one " +"Monitor resource.\n" msgstr "" -#: src/win32/libwin32/service.cpp:580 +#: src/qt-console/tray-monitor/tray-monitor.cpp:236 #, c-format -msgid "No longer locked\n" -msgstr "" - -#: src/win32/libwin32/service.cpp:584 -msgid "Could not lock database" -msgstr "" - -#: src/win32/libwin32/main.cpp:245 -msgid "Bad Command Line Option" -msgstr "Onjuiste opdrachtregel optie" - -#: src/wx-console/wxbconfigfileeditor.cpp:65 -#, fuzzy -msgid "Config file editor" -msgstr "Configuratiebestand" - -#: src/wx-console/wxbconfigfileeditor.cpp:75 -#, fuzzy -msgid "# Bacula bwx-console Configuration File\n" -msgstr "Corrigeer configuratie bestand aub.\n" - -#: src/wx-console/wxbconfigfileeditor.cpp:111 -msgid "Save and close" -msgstr "Opslaan en afsluiten" - -#: src/wx-console/wxbconfigfileeditor.cpp:112 -msgid "Close without saving" -msgstr "" - -#: src/wx-console/wxbconfigfileeditor.cpp:139 -#, fuzzy, c-format -msgid "Unable to write to %s\n" -msgstr "Kan de service niet installeren" - -#: src/wx-console/wxbconfigfileeditor.cpp:140 -msgid "Error while saving" -msgstr "" - -#: src/wx-console/wxbrestorepanel.cpp:234 -#: src/wx-console/wxbrestorepanel.cpp:1947 -#: src/wx-console/wxbrestorepanel.cpp:1976 -#, fuzzy -msgid "Enter restore mode" -msgstr "Terugzetten afbreken" - -#: src/wx-console/wxbrestorepanel.cpp:237 -msgid "Cancel restore" -msgstr "Terugzetten afbreken" - -#: src/wx-console/wxbrestorepanel.cpp:263 -#: src/wx-console/wxbrestorepanel.cpp:317 -msgid "Add" -msgstr "Toevoegen" - -#: src/wx-console/wxbrestorepanel.cpp:265 -#: src/wx-console/wxbrestorepanel.cpp:319 -msgid "Remove" -msgstr "Verwijderen" - -#: src/wx-console/wxbrestorepanel.cpp:267 -#: src/wx-console/wxbrestorepanel.cpp:321 -msgid "Refresh" -msgstr "Verversen" - -#: src/wx-console/wxbrestorepanel.cpp:286 -msgid "M" -msgstr "M" - -#: src/wx-console/wxbrestorepanel.cpp:290 -msgid "Filename" -msgstr "Bestandsnaam" - -#: src/wx-console/wxbrestorepanel.cpp:294 -msgid "Size" -msgstr "Omvang" - -#: src/wx-console/wxbrestorepanel.cpp:298 -msgid "Date" -msgstr "Datum" - -#: src/wx-console/wxbrestorepanel.cpp:302 -msgid "Perm." -msgstr "Perm." - -#: src/wx-console/wxbrestorepanel.cpp:306 -msgid "User" -msgstr "Gebruiker" - -#: src/wx-console/wxbrestorepanel.cpp:310 -msgid "Group" -msgstr "Groep" - -#: src/wx-console/wxbrestorepanel.cpp:335 -#: src/wx-console/wxbrestorepanel.cpp:348 -#: src/wx-console/wxbrestorepanel.cpp:503 -#: src/wx-console/wxbrestorepanel.cpp:513 -#: src/wx-console/wxbrestorepanel.cpp:516 -#: src/wx-console/wxbrestorepanel.cpp:1811 -#: src/wx-console/wxbrestorepanel.cpp:1897 -msgid "Job Name" -msgstr "Naam opdracht:" - -#: src/wx-console/wxbrestorepanel.cpp:337 -#: src/wx-console/wxbrestorepanel.cpp:353 -#: src/wx-console/wxbrestorepanel.cpp:455 -#: src/wx-console/wxbrestorepanel.cpp:456 -#: src/wx-console/wxbrestorepanel.cpp:466 -#: src/wx-console/wxbrestorepanel.cpp:467 -#: src/wx-console/wxbrestorepanel.cpp:1153 -#: src/wx-console/wxbrestorepanel.cpp:1156 -#: src/wx-console/wxbrestorepanel.cpp:1239 -#: src/wx-console/wxbrestorepanel.cpp:1849 -#: src/wx-console/wxbrestorepanel.cpp:1851 -#: src/wx-console/wxbrestorepanel.cpp:1912 -#, fuzzy -msgid "Fileset" -msgstr "Bestandsnaam" - -#: src/wx-console/wxbrestorepanel.cpp:340 -#: src/wx-console/wxbrestorepanel.cpp:1233 -#: src/wx-console/wxbrestorepanel.cpp:1249 -#: src/wx-console/wxbrestorepanel.cpp:1251 -#: src/wx-console/wxbrestorepanel.cpp:1259 -#: src/wx-console/wxbrestorepanel.cpp:1261 -#: src/wx-console/wxbrestorepanel.cpp:1280 -#: src/wx-console/wxbrestorepanel.cpp:1287 -#: src/wx-console/wxbrestorepanel.cpp:1839 -#: src/wx-console/wxbrestorepanel.cpp:1850 -#: src/wx-console/wxbrestorepanel.cpp:1971 -msgid "Before" -msgstr "" - -#: src/wx-console/wxbrestorepanel.cpp:342 -msgid "Please configure parameters concerning files to restore :" -msgstr "Configureer parameters voor het terugzetten van bestanden aub :" - -#: src/wx-console/wxbrestorepanel.cpp:351 -#: src/wx-console/wxbrestorepanel.cpp:1905 -msgid "always" -msgstr "altijd" - -#: src/wx-console/wxbrestorepanel.cpp:351 -msgid "if newer" -msgstr "indien nieuwer" - -#: src/wx-console/wxbrestorepanel.cpp:351 -msgid "if older" -msgstr "indien ouder" - -#: src/wx-console/wxbrestorepanel.cpp:351 -#: src/wx-console/wxbrestorepanel.cpp:1908 -msgid "never" -msgstr "nooit" - -#: src/wx-console/wxbrestorepanel.cpp:359 -#, fuzzy -msgid "Please configure parameters concerning files restoration :" -msgstr "Configureer parameters voor het terugzetten van bestanden aub :" - -#: src/wx-console/wxbrestorepanel.cpp:427 -msgid "Getting parameters list." -msgstr "" - -#: src/wx-console/wxbrestorepanel.cpp:435 -#, fuzzy -msgid "Error : no clients returned by the director." -msgstr "Verbonden met de director." - -#: src/wx-console/wxbrestorepanel.cpp:459 -msgid "Error : no filesets returned by the director." +msgid "" +"No Client, Storage or Director resource defined in %s\n" +"Without that I don't how to get status from the File, Storage or Director " +"Daemon :-(\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:483 -#, fuzzy -msgid "Error : no storage returned by the director." -msgstr "Verbonden met de director." - -#: src/wx-console/wxbrestorepanel.cpp:506 -#: src/wx-console/wxbrestorepanel.cpp:530 -#, fuzzy -msgid "Error : no jobs returned by the director." -msgstr "Verbonden met de director." - -#: src/wx-console/wxbrestorepanel.cpp:516 -#, fuzzy -msgid "RestoreFiles" -msgstr "Terugzetten geannuleerd." - -#: src/wx-console/wxbrestorepanel.cpp:551 -msgid "Please configure your restore parameters." +#: src/qt-console/tray-monitor/tray-monitor.cpp:251 +#, c-format +msgid "" +"Invalid refresh interval defined in %s\n" +"This value must be greater or equal to 1 second and less or equal to 10 " +"minutes (read value: %d).\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:556 -#, fuzzy -msgid "Please select a client." -msgstr "Kan de geselecteerde client niet vinden." - -#: src/wx-console/wxbrestorepanel.cpp:560 -#, fuzzy -msgid "Please select a restore date." -msgstr "Kiest u een director (1-%d): " - -#: src/wx-console/wxbrestorepanel.cpp:565 -msgid "Building restore tree..." +#: src/qt-console/tray-monitor/tray-monitor.cpp:319 +#, c-format +msgid "Error, currentitem is not a Client or a Storage..\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:613 -msgid "Error while starting restore: " +#: src/qt-console/tray-monitor/tray-monitor.cpp:354 +#, c-format +msgid "Connecting to Client %s:%d" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:705 -msgid "" -"Right click on a file or on a directory, or double-click on its mark to add " -"it to the restore list." +#: src/qt-console/tray-monitor/tray-monitor.cpp:356 +msgid "File daemon" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:720 src/wx-console/wxbmainframe.cpp:685 -#, fuzzy -msgid "Unexpected question has been received.\n" -msgstr "<< Onverwacht signaal ontvangen : " - -#: src/wx-console/wxbrestorepanel.cpp:742 -#: src/wx-console/wxbrestorepanel.cpp:764 -#, fuzzy -msgid "bwx-console: unexpected restore question." -msgstr "bwx-console: onverwachte director's opdracht" - -#: src/wx-console/wxbrestorepanel.cpp:775 -#, fuzzy -msgid " files selected to be restored." -msgstr "Geen Volumes gevonden om terug te zetten.\n" - -#: src/wx-console/wxbrestorepanel.cpp:780 -#, fuzzy -msgid " file selected to be restored." -msgstr "Selecteer Job media:" - -#: src/wx-console/wxbrestorepanel.cpp:787 -#, fuzzy, c-format -msgid "Please configure your restore (%ld files selected to be restored)..." -msgstr "Configureer parameters voor het terugzetten van bestanden aub :" - -#: src/wx-console/wxbrestorepanel.cpp:797 -#, fuzzy -msgid "Restore failed : no file selected.\n" -msgstr "Kan de geselecteerde client niet vinden." +#: src/qt-console/tray-monitor/tray-monitor.cpp:361 +#, c-format +msgid "Connecting to Storage %s:%d" +msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:798 -#, fuzzy -msgid "Restore failed : no file selected." -msgstr "Kan de geselecteerde client niet vinden." +#: src/qt-console/tray-monitor/tray-monitor.cpp:367 +#: src/qt-console/tray-monitor/tray-monitor.cpp:397 +#, c-format +msgid "Error, currentitem is not a Client, a Storage or a Director..\n" +msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:808 -#, fuzzy -msgid "Restoring, please wait..." -msgstr "Terugzetten..." +#: src/qt-console/tray-monitor/tray-monitor.cpp:372 +msgid "Cannot connect to daemon." +msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:821 -msgid "Job queued. JobId=" +#: src/qt-console/tray-monitor/tray-monitor.cpp:381 +#, c-format +msgid "Authentication error : %s" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:823 -msgid "Restore queued, jobid=" +#: src/qt-console/tray-monitor/tray-monitor.cpp:388 +msgid "Opened connection with Director daemon." msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:827 -msgid "Job failed." -msgstr "Job mislukt." +#: src/qt-console/tray-monitor/tray-monitor.cpp:391 +msgid "Opened connection with File daemon." +msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:828 -msgid "Restore failed, please look at messages.\n" +#: src/qt-console/tray-monitor/tray-monitor.cpp:394 +msgid "Opened connection with Storage daemon." msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:829 -msgid "Restore failed, please look at messages in console." +#: src/qt-console/tray-monitor/tray-monitor.cpp:445 +msgid "Error : BNET_HARDEOF or BNET_ERROR" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:835 -#: src/wx-console/wxbrestorepanel.cpp:836 -msgid "Failed to retrieve jobid.\n" +#: src/qt-console/tray-monitor/tray-monitor.cpp:454 +msgid "Error : Connection closed." msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:862 +#: src/qt-console/tray-monitor/authenticate.cpp:75 msgid "" -"Restore is scheduled to run. bwx-console will not wait for its completion.\n" +"Director authorization problem.\n" +"Most likely the passwords do not agree.\n" +"Please see " msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:863 +#: src/qt-console/tray-monitor/authenticate.cpp:125 msgid "" -"Restore is scheduled to run. bwx-console will not wait for its completion." +"Director and Storage daemon passwords or names not the same.\n" +"Please see " msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:889 -msgid "Restore job created, but not yet running." +#: src/qt-console/tray-monitor/authenticate.cpp:132 +#, c-format +msgid "bdird set configuration file to file\n" +" -dnn set debug level to nn\n" +" -s no signals\n" +" -t test - read configuration and exit\n" +" -? print this message.\n" +"\n" msgstr "" +"\n" +"Versie: %s (%s) %s %s %s\n" +"\n" +"Specificatie: bat [-s] [-c configuratiebestand] [-d debug_level] " +"[configuratiebestand]\n" +" -c gebruik configuratiebestand\n" +" -d instellen debug level op \n" +" -s geen signaleringen\n" +" -t test - lees configuratie en stop\n" +" -? geef deze melding.\n" +"\n" -#: src/wx-console/wxbrestorepanel.cpp:910 -msgid "Restore job reported a non-fatal error." -msgstr "" +#: src/qt-console/bat_conf.cpp:142 +#, c-format +msgid "Console: name=%s\n" +msgstr "Console: naam=%s\n" -#: src/wx-console/wxbrestorepanel.cpp:914 -msgid "Restore job reported a fatal error." -msgstr "" +#~ msgid "" +#~ "Cancel: %s\n" +#~ "\n" +#~ "%s" +#~ msgstr "" +#~ "Anuleer: %s\n" +#~ "\n" +#~ "%s" -#: src/wx-console/wxbrestorepanel.cpp:919 -#, fuzzy -msgid "Restore job cancelled by user." -msgstr "Terugzetten geannuleerd." +#~ msgid "Confirm cancel?" +#~ msgstr "Bevestig annulering?" -#: src/wx-console/wxbrestorepanel.cpp:920 -#, fuzzy -msgid "Restore job cancelled by user.\n" -msgstr "Terugzetten geannuleerd." +#~ msgid "" +#~ "\n" +#~ "\n" +#~ "Bacula ERROR: " +#~ msgstr "" +#~ "\n" +#~ "\n" +#~ "Bacula FOUT: " -#: src/wx-console/wxbrestorepanel.cpp:925 -msgid "Restore job is waiting on File daemon." -msgstr "" +#~ msgid "KERNEL32.DLL not found: Bacula service not started" +#~ msgstr "KERNEL32.DLL niet gevonden. Bacula service niet gestart" -#: src/wx-console/wxbrestorepanel.cpp:929 -msgid "Restore job is waiting for new media." -msgstr "" +#~ msgid "Unable to install the service" +#~ msgstr "Kan de service niet installeren" -#: src/wx-console/wxbrestorepanel.cpp:933 -msgid "Restore job is waiting for storage resource." -msgstr "" +#~ msgid "Service command length too long" +#~ msgstr "Lengte service commando te lang" -#: src/wx-console/wxbrestorepanel.cpp:937 -msgid "Restore job is waiting for job resource." -msgstr "" +#~ msgid "Service command length too long. Service not registered." +#~ msgstr "Lengte service commando te lang. Service niet geregistreerd" -#: src/wx-console/wxbrestorepanel.cpp:941 -msgid "Restore job is waiting for Client resource." -msgstr "" +#~ msgid "The Bacula service: " +#~ msgstr "De Bacula service:" -#: src/wx-console/wxbrestorepanel.cpp:945 -msgid "Restore job is waiting for maximum jobs." -msgstr "" +#~ msgid "Cannot add Bacula key to System Registry" +#~ msgstr "Kan Bacula sleutel niet aan Systeem Register toevoegen" -#: src/wx-console/wxbrestorepanel.cpp:949 -#, fuzzy -msgid "Restore job is waiting for start time." -msgstr "Job %s wacht %d seconde voor de start tijd.\n" +#~ msgid "The " +#~ msgstr "De" -#: src/wx-console/wxbrestorepanel.cpp:953 -msgid "Restore job is waiting for higher priority jobs to finish." -msgstr "" +#~ msgid "An existing Bacula service: " +#~ msgstr "Een bestaande Bacula service:" -#: src/wx-console/wxbrestorepanel.cpp:1002 -msgid "" -"The restore job has not been started within one minute, bwx-console will not " -"wait for its completion anymore.\n" -msgstr "" +#~ msgid "Bacula could not be contacted, probably not running" +#~ msgstr "Bacula kan niet worden bereikt, waarschijnlijk niet opgestart" -#: src/wx-console/wxbrestorepanel.cpp:1003 -msgid "" -"The restore job has not been started within one minute, bwx-console will not " -"wait for its completion anymore." -msgstr "" +#~ msgid "The Bacula service has been removed" +#~ msgstr "De Bacula service is verwijderd" -#: src/wx-console/wxbrestorepanel.cpp:1013 -msgid "Restore done successfully.\n" -msgstr "Terugzetten succesvol.\n" +#~ msgid "" +#~ "\n" +#~ "\n" +#~ "%s error: %ld at %s:%d" +#~ msgstr "" +#~ "\n" +#~ "\n" +#~ "%s fout: %ld op %s:%d" -#: src/wx-console/wxbrestorepanel.cpp:1014 -msgid "Restore done successfully." -msgstr "Terugzetten succesvol." +#, fuzzy +#~ msgid "Config file editor" +#~ msgstr "Configuratiebestand" -#: src/wx-console/wxbrestorepanel.cpp:1086 #, fuzzy -msgid "Applying restore configuration changes..." -msgstr "Corrigeer configuratie bestand aub.\n" +#~ msgid "# Bacula bwx-console Configuration File\n" +#~ msgstr "Corrigeer configuratie bestand aub.\n" -#: src/wx-console/wxbrestorepanel.cpp:1138 -msgid "Failed to find the selected client." -msgstr "Kan de geselecteerde client niet vinden." +#~ msgid "Save and close" +#~ msgstr "Opslaan en afsluiten" -#: src/wx-console/wxbrestorepanel.cpp:1158 -msgid "Failed to find the selected fileset." -msgstr "Kan de geselecteerde fileset niet vinden." +#, fuzzy +#~ msgid "Unable to write to %s\n" +#~ msgstr "Kan de service niet installeren" -#: src/wx-console/wxbrestorepanel.cpp:1178 -msgid "Failed to find the selected storage." -msgstr "Kan de geselecteerde opslag niet vinden." +#, fuzzy +#~ msgid "Enter restore mode" +#~ msgstr "Terugzetten afbreken" -#: src/wx-console/wxbrestorepanel.cpp:1199 -#: src/wx-console/wxbrestorepanel.cpp:1886 -msgid "Run Restore job" -msgstr "Uitvoeren herstel opdracht" +#~ msgid "Cancel restore" +#~ msgstr "Terugzetten afbreken" -#: src/wx-console/wxbrestorepanel.cpp:1216 -msgid "Restore configuration changes were applied." -msgstr "" +#~ msgid "Add" +#~ msgstr "Toevoegen" -#: src/wx-console/wxbrestorepanel.cpp:1225 -#, fuzzy -msgid "Restore cancelled.\n" -msgstr "Terugzetten geannuleerd." +#~ msgid "Remove" +#~ msgstr "Verwijderen" -#: src/wx-console/wxbrestorepanel.cpp:1226 -msgid "Restore cancelled." -msgstr "Terugzetten geannuleerd." +#~ msgid "Refresh" +#~ msgstr "Verversen" -#: src/wx-console/wxbrestorepanel.cpp:1248 -msgid "No results to list." -msgstr "Geen resultaten gevonden om te tonen." +#~ msgid "M" +#~ msgstr "M" -#: src/wx-console/wxbrestorepanel.cpp:1250 -msgid "No backup found for this client." -msgstr "Geen backup gevonden voor deze client." +#~ msgid "Filename" +#~ msgstr "Bestandsnaam" -#: src/wx-console/wxbrestorepanel.cpp:1257 -msgid "ERROR" -msgstr "FOUT" +#~ msgid "Size" +#~ msgstr "Omvang" + +#~ msgid "Date" +#~ msgstr "Datum" + +#~ msgid "Perm." +#~ msgstr "Perm." + +#~ msgid "User" +#~ msgstr "Gebruiker" + +#~ msgid "Group" +#~ msgstr "Groep" + +#~ msgid "Job Name" +#~ msgstr "Naam opdracht:" -#: src/wx-console/wxbrestorepanel.cpp:1258 #, fuzzy -msgid "Query failed" -msgstr "Job mislukt." +#~ msgid "Fileset" +#~ msgstr "Bestandsnaam" -#: src/wx-console/wxbrestorepanel.cpp:1260 -msgid "Cannot get previous backups list, see console." -msgstr "Kan vorige backuplijst niet ophalen, zie console." +#~ msgid "Please configure parameters concerning files to restore :" +#~ msgstr "Configureer parameters voor het terugzetten van bestanden aub :" -#: src/wx-console/wxbrestorepanel.cpp:1896 -msgid "JobName:" -msgstr "JobNaam:" +#~ msgid "always" +#~ msgstr "altijd" -#: src/wx-console/wxbrestorepanel.cpp:1898 -msgid "Bootstrap:" -msgstr "" +#~ msgid "if newer" +#~ msgstr "indien nieuwer" -#: src/wx-console/wxbrestorepanel.cpp:1900 -msgid "Where:" -msgstr "" +#~ msgid "if older" +#~ msgstr "indien ouder" -#: src/wx-console/wxbrestorepanel.cpp:1903 -msgid "Replace:" -msgstr "" +#~ msgid "never" +#~ msgstr "nooit" -#: src/wx-console/wxbrestorepanel.cpp:1906 #, fuzzy -msgid "ifnewer" -msgstr "indien nieuwer" +#~ msgid "Please configure parameters concerning files restoration :" +#~ msgstr "Configureer parameters voor het terugzetten van bestanden aub :" -#: src/wx-console/wxbrestorepanel.cpp:1907 #, fuzzy -msgid "ifolder" -msgstr "indien ouder" +#~ msgid "Error : no clients returned by the director." +#~ msgstr "Verbonden met de director." -#: src/wx-console/wxbrestorepanel.cpp:1911 #, fuzzy -msgid "FileSet:" -msgstr "Bestandsnaam" +#~ msgid "Error : no storage returned by the director." +#~ msgstr "Verbonden met de director." -#: src/wx-console/wxbrestorepanel.cpp:1913 #, fuzzy -msgid "Client:" -msgstr "Client" +#~ msgid "Error : no jobs returned by the director." +#~ msgstr "Verbonden met de director." -#: src/wx-console/wxbrestorepanel.cpp:1915 #, fuzzy -msgid "Storage:" -msgstr "Opslag" +#~ msgid "RestoreFiles" +#~ msgstr "Terugzetten geannuleerd." -#: src/wx-console/wxbrestorepanel.cpp:1917 -msgid "When:" -msgstr "" +#, fuzzy +#~ msgid "Please select a client." +#~ msgstr "Kan de geselecteerde client niet vinden." -#: src/wx-console/wxbrestorepanel.cpp:1920 -msgid "Priority:" -msgstr "" +#, fuzzy +#~ msgid "Please select a restore date." +#~ msgstr "Kiest u een director (1-%d): " -#: src/wx-console/wxbrestorepanel.cpp:2028 -msgid "Restoring..." -msgstr "Terugzetten..." +#, fuzzy +#~ msgid "Unexpected question has been received.\n" +#~ msgstr "<< Onverwacht signaal ontvangen : " -#: src/wx-console/console_thread.cpp:125 -#, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Director \"%s\" in config file.\n" -"At least one CA certificate store is required.\n" -msgstr "" +#, fuzzy +#~ msgid "bwx-console: unexpected restore question." +#~ msgstr "bwx-console: onverwachte director's opdracht" -#: src/wx-console/console_thread.cpp:132 -msgid "" -"No Director resource defined in config file.\n" -"Without that I don't how to speak to the Director :-(\n" -msgstr "" +#, fuzzy +#~ msgid " files selected to be restored." +#~ msgstr "Geen Volumes gevonden om terug te zetten.\n" -#: src/wx-console/console_thread.cpp:151 -#, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Console \"%s\" in config file.\n" -msgstr "" +#, fuzzy +#~ msgid " file selected to be restored." +#~ msgstr "Selecteer Job media:" -#: src/wx-console/console_thread.cpp:173 -msgid "Error while initializing windows sockets...\n" -msgstr "" +#, fuzzy +#~ msgid "Please configure your restore (%ld files selected to be restored)..." +#~ msgstr "Configureer parameters voor het terugzetten van bestanden aub :" -#: src/wx-console/console_thread.cpp:189 -msgid "Error while cleaning up windows sockets...\n" -msgstr "" +#, fuzzy +#~ msgid "Restore failed : no file selected.\n" +#~ msgstr "Kan de geselecteerde client niet vinden." -#: src/wx-console/console_thread.cpp:228 -msgid "Error while initializing library." -msgstr "" +#, fuzzy +#~ msgid "Restore failed : no file selected." +#~ msgstr "Kan de geselecteerde client niet vinden." -#: src/wx-console/console_thread.cpp:256 -msgid "Cryptographic library initialization failed.\n" -msgstr "" +#, fuzzy +#~ msgid "Restoring, please wait..." +#~ msgstr "Terugzetten..." -#: src/wx-console/console_thread.cpp:260 -msgid "Please correct configuration file.\n" -msgstr "Corrigeer configuratie bestand aub.\n" +#~ msgid "Job failed." +#~ msgstr "Job mislukt." -#: src/wx-console/console_thread.cpp:302 -msgid "Error : Library not initialized\n" -msgstr "" +#, fuzzy +#~ msgid "Restore job terminated successfully." +#~ msgstr "Terugzetten succesvol." -#: src/wx-console/console_thread.cpp:313 #, fuzzy -msgid "Error : No configuration file loaded\n" -msgstr "Wijzigen configuratiebestand" +#~ msgid "Restore job terminated successfully.\n" +#~ msgstr "Terugzetten succesvol.\n" -#: src/wx-console/console_thread.cpp:323 -msgid "Connecting...\n" -msgstr "Verbinding maken ...\n" +#, fuzzy +#~ msgid "Restore job cancelled by user." +#~ msgstr "Terugzetten geannuleerd." -#: src/wx-console/console_thread.cpp:339 -msgid "Error : No director defined in config file.\n" -msgstr "Fout : Geen director gevonden in uw configuratie.\n" +#, fuzzy +#~ msgid "Restore job cancelled by user.\n" +#~ msgstr "Terugzetten geannuleerd." -#: src/wx-console/console_thread.cpp:351 -msgid "Multiple directors found in your config file.\n" -msgstr "Meerdere directors gevonden in uw configuratiebestand.\n" +#~ msgid "Restore done successfully.\n" +#~ msgstr "Terugzetten succesvol.\n" -#: src/wx-console/console_thread.cpp:360 -#, c-format -msgid "Please choose a director (1-%d): " -msgstr "Kiest u een director (1-%d): " +#~ msgid "Restore done successfully." +#~ msgstr "Terugzetten succesvol." -#: src/wx-console/console_thread.cpp:389 -#, c-format -msgid "Passphrase for Console \"%s\" TLS private key: " -msgstr "" +#, fuzzy +#~ msgid "Applying restore configuration changes..." +#~ msgstr "Corrigeer configuratie bestand aub.\n" -#: src/wx-console/console_thread.cpp:410 -#, c-format -msgid "Passphrase for Director \"%s\" TLS private key: " -msgstr "" +#~ msgid "Failed to find the selected client." +#~ msgstr "Kan de geselecteerde client niet vinden." -#: src/wx-console/console_thread.cpp:432 -#, fuzzy -msgid "Failed to connect to the director\n" -msgstr "Verbinding naar director opnieuw opzetten" +#~ msgid "Failed to find the selected fileset." +#~ msgstr "Kan de geselecteerde fileset niet vinden." -#: src/wx-console/console_thread.cpp:442 -msgid "Connected\n" -msgstr "Verbonden\n" +#~ msgid "Restore cancelled." +#~ msgstr "Terugzetten geannuleerd." -#: src/wx-console/console_thread.cpp:499 -msgid "<< Unexpected signal received : " -msgstr "<< Onverwacht signaal ontvangen : " +#~ msgid "No results to list." +#~ msgstr "Geen resultaten gevonden om te tonen." -#: src/wx-console/console_thread.cpp:519 -msgid "Connection terminated\n" -msgstr "Verbinding verbroken\n" +#~ msgid "No backup found for this client." +#~ msgstr "Geen backup gevonden voor deze client." -#: src/wx-console/wxbconfigpanel.cpp:213 -msgid "Apply" -msgstr "Toepassen" +#~ msgid "ERROR" +#~ msgstr "FOUT" -#: src/wx-console/wxbhistorytextctrl.cpp:82 -#: src/wx-console/wxbhistorytextctrl.cpp:153 -#: src/wx-console/wxbmainframe.cpp:291 -msgid "Type your command below:" -msgstr "Voer uw opdracht hieronder in:" +#, fuzzy +#~ msgid "Query failed" +#~ msgstr "Job mislukt." -#: src/wx-console/wxbhistorytextctrl.cpp:117 -msgid "Unknown command." -msgstr "Onbekende opdracht." +#~ msgid "Cannot get previous backups list, see console." +#~ msgstr "Kan vorige backuplijst niet ophalen, zie console." -#: src/wx-console/wxbhistorytextctrl.cpp:126 -msgid "Possible completions: " -msgstr "" +#~ msgid "JobName:" +#~ msgstr "JobNaam:" -#: src/wx-console/main.cpp:119 #, fuzzy -msgid "Bacula bwx-console" -msgstr "Over Bacula bwx-console" +#~ msgid "ifnewer" +#~ msgstr "indien nieuwer" -#: src/wx-console/main.cpp:124 src/wx-console/wxbmainframe.cpp:267 -#, c-format -msgid "Welcome to bacula bwx-console %s (%s)!\n" -msgstr "Welkom bij het bacula bwx-console %s (%s)!\n" +#, fuzzy +#~ msgid "ifolder" +#~ msgstr "indien ouder" -#: src/wx-console/wxbmainframe.cpp:246 -msgid "&About...\tF1" -msgstr "&Over...\tF1" +#, fuzzy +#~ msgid "FileSet:" +#~ msgstr "Bestandsnaam" -#: src/wx-console/wxbmainframe.cpp:246 -msgid "Show about dialog" -msgstr "Toon het Over scherm" +#, fuzzy +#~ msgid "Client:" +#~ msgstr "Client" -#: src/wx-console/wxbmainframe.cpp:248 src/wx-console/wxbmainframe.cpp:619 -msgid "Connect" -msgstr "Verbonden" +#, fuzzy +#~ msgid "Storage:" +#~ msgstr "Opslag" -#: src/wx-console/wxbmainframe.cpp:248 src/wx-console/wxbmainframe.cpp:620 -msgid "Connect to the director" -msgstr "Verbinden met director" +#~ msgid "Restoring..." +#~ msgstr "Terugzetten..." -#: src/wx-console/wxbmainframe.cpp:249 -msgid "Disconnect" -msgstr "Verbroken" +#~ msgid "Please correct configuration file.\n" +#~ msgstr "Corrigeer configuratie bestand aub.\n" -#: src/wx-console/wxbmainframe.cpp:249 -msgid "Disconnect of the director" -msgstr "Verbroken van de director" +#, fuzzy +#~ msgid "Error : No configuration file loaded\n" +#~ msgstr "Wijzigen configuratiebestand" -#: src/wx-console/wxbmainframe.cpp:251 -msgid "Change of configuration file" -msgstr "Wijziging van configuratiebestand" +#~ msgid "Connecting...\n" +#~ msgstr "Verbinding maken ...\n" -#: src/wx-console/wxbmainframe.cpp:251 -msgid "Change your default configuration file" -msgstr "Wijzig standaard configuratiebestand" +#~ msgid "Error : No director defined in config file.\n" +#~ msgstr "Fout : Geen director gevonden in uw configuratie.\n" -#: src/wx-console/wxbmainframe.cpp:252 -msgid "Edit your configuration file" -msgstr "Wijzigen configuratiebestand" +#~ msgid "Multiple directors found in your config file.\n" +#~ msgstr "Meerdere directors gevonden in uw configuratiebestand.\n" -#: src/wx-console/wxbmainframe.cpp:254 -msgid "E&xit\tAlt-X" -msgstr "&Verlaat\tAlt-X" +#~ msgid "Please choose a director (1-%d): " +#~ msgstr "Kiest u een director (1-%d): " -#: src/wx-console/wxbmainframe.cpp:254 -msgid "Quit this program" -msgstr "Verlaat dit programma" +#, fuzzy +#~ msgid "Failed to connect to the director\n" +#~ msgstr "Verbinding naar director opnieuw opzetten" -#: src/wx-console/wxbmainframe.cpp:258 -msgid "&File" -msgstr "&Bestand" +#~ msgid "Connected\n" +#~ msgstr "Verbonden\n" -#: src/wx-console/wxbmainframe.cpp:259 -msgid "&Help" -msgstr "&Help" +#~ msgid "<< Unexpected signal received : " +#~ msgstr "<< Onverwacht signaal ontvangen : " -#: src/wx-console/wxbmainframe.cpp:283 -msgid "" -"Warning : Unicode is disabled because you are using wxWidgets for GTK+ 1.2.\n" -msgstr "" -"Waarschuwing : Unicode is niet actief omdat u wxWidgets for GTK+ 1.2 " -"gebruikt.\n" +#~ msgid "Connection terminated\n" +#~ msgstr "Verbinding verbroken\n" -#: src/wx-console/wxbmainframe.cpp:287 -msgid "" -"Warning : There is a problem with wxWidgets for GTK+ 2.0 without Unicode " -"support when handling non-ASCII filenames: Every non-ASCII character in such " -"filenames will be replaced by an interrogation mark.\n" -"If this behaviour disturbs you, please build bwx-console against a Unicode " -"version of wxWidgets for GTK+ 2.0.\n" -"---\n" -msgstr "" +#~ msgid "Apply" +#~ msgstr "Toepassen" -#: src/wx-console/wxbmainframe.cpp:298 -msgid "Send" -msgstr "Versturen" +#~ msgid "Type your command below:" +#~ msgstr "Voer uw opdracht hieronder in:" -#: src/wx-console/wxbmainframe.cpp:375 src/wx-console/wxbmainframe.cpp:387 -msgid "Error while parsing command line arguments, using defaults.\n" -msgstr "" -"Fout bij verwerken van opdrachtregel variabelen, maak nu gebruik van " -"standaard instelling.\n" +#~ msgid "Unknown command." +#~ msgstr "Onbekende opdracht." -#: src/wx-console/wxbmainframe.cpp:376 src/wx-console/wxbmainframe.cpp:388 -msgid "Usage: bwx-console [-c configfile] [-w tmp]\n" -msgstr "Specificatie: bwx-console [-c configuratiebestand] [-w tmp]\n" +#, fuzzy +#~ msgid "Bacula bwx-console" +#~ msgstr "Over Bacula bwx-console" -#: src/wx-console/wxbmainframe.cpp:417 -#, c-format -msgid "" -"It seems that it is the first time you run bwx-console.\n" -"This file (%s) has been choosen as default configuration file.\n" -"Do you want to edit it? (if you click No you will have to select another " -"file)" -msgstr "" -"Waarschijnlijk gebruikt u bwx-console voor de eerste keer.\n" -"Dit bestand (%s) is ingesteld als uw standaard configuratiebestand.\n" -"Wilt u dit wijzigen? (Als u Nee selecteert dan moet u een ander bestand " -"selecteren)" +#~ msgid "Welcome to bacula bwx-console %s (%s)!\n" +#~ msgstr "Welkom bij het bacula bwx-console %s (%s)!\n" -#: src/wx-console/wxbmainframe.cpp:419 -msgid "First run" -msgstr "Eerste run" +#~ msgid "&About...\tF1" +#~ msgstr "&Over...\tF1" -#: src/wx-console/wxbmainframe.cpp:436 -#, c-format -msgid "" -"Unable to read %s\n" -"Error: %s\n" -"Do you want to choose another one? (Press no to edit this file)" -msgstr "" -"Kan %s\n" -" niet lezenFout: %s\n" -"Wilt u een andere kiezen? (Toets nee om het bestand te wijzigen)" +#~ msgid "Show about dialog" +#~ msgstr "Toon het Over scherm" -#: src/wx-console/wxbmainframe.cpp:438 -msgid "Unable to read configuration file" -msgstr "Kan configuratiebestand niet lezen" +#~ msgid "Connect" +#~ msgstr "Verbonden" -#: src/wx-console/wxbmainframe.cpp:450 -msgid "Please choose a configuration file to use" -msgstr "Kies een configuratiebestand om te gebruiken" +#~ msgid "Connect to the director" +#~ msgstr "Verbinden met director" -#: src/wx-console/wxbmainframe.cpp:463 -msgid "This configuration file has been successfully read, use it as default?" -msgstr "Configuratiebestand met succes gelezen. Als standaard gebruiken?" +#~ msgid "Disconnect" +#~ msgstr "Verbroken" -#: src/wx-console/wxbmainframe.cpp:464 -msgid "Configuration file read successfully" -msgstr "Configuratiebestand met succes gelezen" +#~ msgid "Disconnect of the director" +#~ msgstr "Verbroken van de director" -#: src/wx-console/wxbmainframe.cpp:474 -#, c-format -msgid "Using this configuration file: %s\n" -msgstr "Dit configuratiebestand wordt gebruikt: %s\n" +#~ msgid "Change of configuration file" +#~ msgstr "Wijziging van configuratiebestand" -#: src/wx-console/wxbmainframe.cpp:479 -msgid "Connecting to the director..." -msgstr "Verbinden met director ..." +#~ msgid "Change your default configuration file" +#~ msgstr "Wijzig standaard configuratiebestand" -#: src/wx-console/wxbmainframe.cpp:494 -msgid "Failed to unregister a data parser !" -msgstr "Data parser kon niet geregistreerd worden!" +#~ msgid "Edit your configuration file" +#~ msgstr "Wijzigen configuratiebestand" -#: src/wx-console/wxbmainframe.cpp:502 -msgid "Quitting.\n" -msgstr "Bezig met afsluiten.\n" +#~ msgid "E&xit\tAlt-X" +#~ msgstr "&Verlaat\tAlt-X" -#: src/wx-console/wxbmainframe.cpp:517 -msgid "" -"Welcome to Bacula bwx-console.\n" -"Written by Nicolas Boichat \n" -"Copyright (C), 2005-2007 Free Software Foundation Europe, e.V.\n" -msgstr "" -"Welkom bij Bacula bwx-console.\n" -"Geschreven door Nicolas Boichat \n" -"Copyright (C), 2005-2007 Free Software Foundation Europe, e.V.\n" +#~ msgid "Quit this program" +#~ msgstr "Verlaat dit programma" -#: src/wx-console/wxbmainframe.cpp:521 -msgid "About Bacula bwx-console" -msgstr "Over Bacula bwx-console" +#~ msgid "&File" +#~ msgstr "&Bestand" -#: src/wx-console/wxbmainframe.cpp:527 -msgid "Please choose your default configuration file" -msgstr "Kies aub uw standaard configuratiebestand" +#~ msgid "&Help" +#~ msgstr "&Help" -#: src/wx-console/wxbmainframe.cpp:531 -msgid "Use this configuration file as default?" -msgstr "Dit configuratiebestand als standaard gebruiken?" +#~ msgid "" +#~ "Warning : Unicode is disabled because you are using wxWidgets for GTK+ " +#~ "1.2.\n" +#~ msgstr "" +#~ "Waarschuwing : Unicode is niet actief omdat u wxWidgets for GTK+ 1.2 " +#~ "gebruikt.\n" -#: src/wx-console/wxbmainframe.cpp:532 -msgid "Configuration file" -msgstr "Configuratiebestand" +#~ msgid "Send" +#~ msgstr "Versturen" -#: src/wx-console/wxbmainframe.cpp:603 -msgid "Console thread terminated." -msgstr "Console taak beeindigd." +#~ msgid "Error while parsing command line arguments, using defaults.\n" +#~ msgstr "" +#~ "Fout bij verwerken van opdrachtregel variabelen, maak nu gebruik van " +#~ "standaard instelling.\n" -#: src/wx-console/wxbmainframe.cpp:611 -msgid "Connection to the director lost. Quit program?" -msgstr "Verbinding met de director verbroken. Programma stoppen?" +#~ msgid "Usage: bwx-console [-c configfile] [-w tmp]\n" +#~ msgstr "Specificatie: bwx-console [-c configuratiebestand] [-w tmp]\n" -#: src/wx-console/wxbmainframe.cpp:612 -msgid "Connection lost" -msgstr "Verbinding verloren" +#~ msgid "" +#~ "It seems that it is the first time you run bwx-console.\n" +#~ "This file (%s) has been choosen as default configuration file.\n" +#~ "Do you want to edit it? (if you click No you will have to select another " +#~ "file)" +#~ msgstr "" +#~ "Waarschijnlijk gebruikt u bwx-console voor de eerste keer.\n" +#~ "Dit bestand (%s) is ingesteld als uw standaard configuratiebestand.\n" +#~ "Wilt u dit wijzigen? (Als u Nee selecteert dan moet u een ander bestand " +#~ "selecteren)" -#: src/wx-console/wxbmainframe.cpp:628 -msgid "Connected to the director." -msgstr "Verbonden met de director." +#~ msgid "First run" +#~ msgstr "Eerste run" -#: src/wx-console/wxbmainframe.cpp:651 -msgid "Reconnect" -msgstr "Opnieuw verbinden" +#~ msgid "" +#~ "Unable to read %s\n" +#~ "Error: %s\n" +#~ "Do you want to choose another one? (Press no to edit this file)" +#~ msgstr "" +#~ "Kan %s\n" +#~ " niet lezenFout: %s\n" +#~ "Wilt u een andere kiezen? (Toets nee om het bestand te wijzigen)" -#: src/wx-console/wxbmainframe.cpp:652 -msgid "Reconnect to the director" -msgstr "Verbinding naar director opnieuw opzetten" +#~ msgid "Unable to read configuration file" +#~ msgstr "Kan configuratiebestand niet lezen" -#: src/wx-console/wxbmainframe.cpp:666 -msgid "Disconnected of the director." -msgstr "Verbinding verbroken met director" +#~ msgid "Please choose a configuration file to use" +#~ msgstr "Kies een configuratiebestand om te gebruiken" -#: src/wx-console/wxbmainframe.cpp:708 src/wx-console/wxbmainframe.cpp:725 -msgid "bwx-console: unexpected director's question." -msgstr "bwx-console: onverwachte director's opdracht" +#~ msgid "" +#~ "This configuration file has been successfully read, use it as default?" +#~ msgstr "Configuratiebestand met succes gelezen. Als standaard gebruiken?" -#: src/qt-console/tray-monitor/tray-monitor.cpp:67 -#, c-format -msgid "" -"\n" -"Version: %s (%s) %s %s %s\n" -"\n" -"Usage: tray-monitor [-c config_file] [-d debug_level]\n" -" -c set configuration file to file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -t test - read configuration and exit\n" -" -? print this message.\n" -"\n" -msgstr "" -"\n" -"Versie: %s (%s) %s %s %s\n" -"\n" -"Specificatie: tray-monitor [-c configuratiebestand] [-d debug_level]\n" -" -c gebruik configuratiebestand\n" -" -d instellen debug level op \n" -" -dt weergeven tijd in debug output\n" -" -t test - lees configuratie en stop\n" -" -? geef deze melding.\n" -"\n" +#~ msgid "Configuration file read successfully" +#~ msgstr "Configuratiebestand met succes gelezen" -#: src/qt-console/bcomm/dircomm.cpp:92 -#, c-format -msgid "Already connected\"%s\".\n" -msgstr "Al verbonden\"%s\".\n" +#~ msgid "Using this configuration file: %s\n" +#~ msgstr "Dit configuratiebestand wordt gebruikt: %s\n" -#: src/qt-console/bcomm/dircomm.cpp:105 -#, c-format -msgid "" -"Connecting to Director %s:%d\n" -"\n" -msgstr "" -"Verbinden met Director %s:%d\n" -"\n" +#~ msgid "Connecting to the director..." +#~ msgstr "Verbinden met director ..." -#: src/qt-console/bcomm/dircomm.cpp:208 -msgid "Initializing ..." -msgstr "Initialiseren ..." +#~ msgid "Failed to unregister a data parser !" +#~ msgstr "Data parser kon niet geregistreerd worden!" -#: src/qt-console/bcomm/dircomm.cpp:224 src/qt-console/console/console.cpp:142 -msgid "Connected" -msgstr "Verbonden" +#~ msgid "Quitting.\n" +#~ msgstr "Bezig met afsluiten.\n" -#: src/qt-console/bcomm/dircomm.cpp:348 -msgid "Command completed ..." -msgstr "Opdracht gereed ..." +#~ msgid "" +#~ "Welcome to Bacula bwx-console.\n" +#~ "Written by Nicolas Boichat \n" +#~ "Copyright (C), 2005-2007 Free Software Foundation Europe, e.V.\n" +#~ msgstr "" +#~ "Welkom bij Bacula bwx-console.\n" +#~ "Geschreven door Nicolas Boichat \n" +#~ "Copyright (C), 2005-2007 Free Software Foundation Europe, e.V.\n" -#: src/qt-console/bcomm/dircomm.cpp:355 src/qt-console/console/console.cpp:379 -msgid "Processing command ..." -msgstr "Opdracht aan het uitvoeren ..." +#~ msgid "About Bacula bwx-console" +#~ msgstr "Over Bacula bwx-console" -#: src/qt-console/bcomm/dircomm.cpp:362 -msgid "At main prompt waiting for input ..." -msgstr "Wacht op invoer op opdrachtregel in hoofdscherm ..." +#~ msgid "Please choose your default configuration file" +#~ msgstr "Kies aub uw standaard configuratiebestand" -#: src/qt-console/bcomm/dircomm.cpp:369 src/qt-console/bcomm/dircomm.cpp:382 -msgid "At prompt waiting for input ..." -msgstr "Wacht op invoer op opdrachtregel ..." +#~ msgid "Use this configuration file as default?" +#~ msgstr "Dit configuratiebestand als standaard gebruiken?" -#: src/qt-console/bcomm/dircomm.cpp:390 -msgid "Command failed." -msgstr "Opdracht mislukt." +#~ msgid "Configuration file" +#~ msgstr "Configuratiebestand" -#: src/qt-console/bcomm/dircomm.cpp:463 -msgid "Director disconnected." -msgstr "Director niet verbonden." +#~ msgid "Console thread terminated." +#~ msgstr "Console taak beeindigd." -#: src/qt-console/bat_conf.cpp:154 -#, c-format -msgid "Console: name=%s\n" -msgstr "Console: naam=%s\n" +#~ msgid "Connection to the director lost. Quit program?" +#~ msgstr "Verbinding met de director verbroken. Programma stoppen?" -#: src/qt-console/main.cpp:191 -#, c-format -msgid "" -"\n" -"Version: %s (%s) %s %s %s\n" -"\n" -"Usage: bat [-s] [-c config_file] [-d debug_level] [config_file]\n" -" -c set configuration file to file\n" -" -dnn set debug level to nn\n" -" -s no signals\n" -" -t test - read configuration and exit\n" -" -? print this message.\n" -"\n" -msgstr "" -"\n" -"Versie: %s (%s) %s %s %s\n" -"\n" -"Specificatie: bat [-s] [-c configuratiebestand] [-d debug_level] " -"[configuratiebestand]\n" -" -c gebruik configuratiebestand\n" -" -d instellen debug level op \n" -" -s geen signaleringen\n" -" -t test - lees configuratie en stop\n" -" -? geef deze melding.\n" -"\n" +#~ msgid "Connection lost" +#~ msgstr "Verbinding verloren" -#, fuzzy -#~ msgid "Restart a job" -#~ msgstr "Uitvoeren herstel opdracht" +#~ msgid "Connected to the director." +#~ msgstr "Verbonden met de director." -#, fuzzy -#~ msgid "Failed to set bandwidth limit to Client.\n" -#~ msgstr "Kan de geselecteerde client niet vinden." +#~ msgid "Reconnect" +#~ msgstr "Opnieuw verbinden" + +#~ msgid "Reconnect to the director" +#~ msgstr "Verbinding naar director opnieuw opzetten" + +#~ msgid "Disconnected of the director." +#~ msgstr "Verbinding verbroken met director" + +#~ msgid "bwx-console: unexpected director's question." +#~ msgstr "bwx-console: onverwachte director's opdracht" #, fuzzy #~ msgid "Unable to create component file %s. ERR=%s\n" @@ -18137,15 +17469,3 @@ msgstr "" #, fuzzy #~ msgid "ComponentInfo failed.\n" #~ msgstr "Opdracht mislukt." - -#, fuzzy -#~ msgid "Enter the JobId list to select: " -#~ msgstr "Voer de gekozen Job in:" - -#, fuzzy -#~ msgid "canceled" -#~ msgstr "Backup geannuleerd" - -#, fuzzy -#~ msgid "Unable to stat ControlDevice %s: ERR=%s\n" -#~ msgstr "Kan job cond variabele niet initialiseren: ERR=%s\n" diff --git a/bacula/po/sv.po b/bacula/po/sv.po index 4d9f9cbf05..9bbc437280 100644 --- a/bacula/po/sv.po +++ b/bacula/po/sv.po @@ -1,5 +1,5 @@ # Swedish translations for PACKAGE package. -# Copyright (C) 2007 Kern Sibbald +# Copyright (C) 2007-2014 Kern Sibbald # This file is distributed under the same license as the PACKAGE package. # Kern Sibbald , 2007. # @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Bacula 2.1.x\n" "Report-Msgid-Bugs-To: bacula-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2013-02-19 18:26+0100\n" +"POT-Creation-Date: 2014-03-23 22:51+0100\n" "PO-Revision-Date: 2007-06-22 19:18+0200\n" "Last-Translator: Kern Sibbald \n" "Language-Team: Swedish \n" @@ -17,17983 +17,16878 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/dird/jobq.c:74 -#, c-format -msgid "pthread_attr_init: ERR=%s\n" +#: src/console/authenticate.c:117 src/dird/authenticate.c:121 +msgid "" +"Authorization problem: Remote server did not advertise required TLS " +"support.\n" msgstr "" -#: src/dird/jobq.c:83 -#, c-format -msgid "pthread_mutex_init: ERR=%s\n" +#: src/console/authenticate.c:124 src/stored/authenticate.c:154 +#: src/stored/authenticate.c:267 src/stored/authenticate.c:376 +#: src/dird/authenticate.c:128 src/filed/authenticate.c:148 +#: src/filed/authenticate.c:276 +msgid "Authorization problem: Remote server requires TLS.\n" msgstr "" -#: src/dird/jobq.c:89 -#, c-format -msgid "pthread_cond_init: ERR=%s\n" +#: src/console/authenticate.c:133 +msgid "TLS negotiation failed\n" msgstr "" -#: src/dird/jobq.c:131 +#: src/console/authenticate.c:147 +#: src/qt-console/tray-monitor/authenticate.cpp:84 #, c-format -msgid "pthread_cond_broadcast: ERR=%s\n" +msgid "Bad response to Hello command: ERR=%s\n" msgstr "" -#: src/dird/jobq.c:139 -#, c-format -msgid "pthread_cond_wait: ERR=%s\n" +#: src/console/authenticate.c:154 +#: src/qt-console/tray-monitor/authenticate.cpp:91 +msgid "Director rejected Hello command\n" msgstr "" -#: src/dird/jobq.c:180 -#, c-format -msgid "Job %s waiting %d seconds for scheduled start time.\n" +#: src/console/authenticate.c:166 +msgid "" +"Director authorization problem.\n" +"Most likely the passwords do not agree.\n" +"If you are using TLS, there may have been a certificate validation error " +"during the TLS handshake.\n" +"Please see " msgstr "" -#: src/dird/jobq.c:220 src/dird/job.c:113 src/stored/dircmd.c:200 -#: src/stored/stored.c:560 +#: src/console/console_conf.c:128 src/qt-console/bat_conf.cpp:129 #, c-format -msgid "Unable to init job cond variable: ERR=%s\n" +msgid "No record for %d %s\n" msgstr "" -#: src/dird/jobq.c:242 +#: src/console/console_conf.c:137 #, c-format -msgid "pthread_thread_create: ERR=%s\n" +msgid "Console: name=%s rcfile=%s histfile=%s\n" msgstr "" -#: src/dird/jobq.c:352 +#: src/console/console_conf.c:141 src/qt-console/bat_conf.cpp:138 #, c-format -msgid "pthread_cond_signal: ERR=%s\n" +msgid "Director: name=%s address=%s DIRport=%d\n" msgstr "" -#: src/dird/jobq.c:363 +#: src/console/console_conf.c:145 src/console/console_conf.c:221 +#: src/console/console_conf.c:266 src/console/console_conf.c:293 +#: src/stored/stored_conf.c:538 src/stored/stored_conf.c:628 +#: src/stored/stored_conf.c:663 src/filed/filed_conf.c:411 +#: src/filed/filed_conf.c:476 src/filed/filed_conf.c:506 +#: src/qt-console/bat_conf.cpp:149 src/qt-console/bat_conf.cpp:227 +#: src/qt-console/bat_conf.cpp:275 src/qt-console/bat_conf.cpp:305 #, c-format -msgid "pthread_create: ERR=%s\n" +msgid "Unknown resource type %d\n" msgstr "" -#: src/dird/jobq.c:647 +#: src/console/console_conf.c:247 src/dird/dird_conf.c:1425 +#: src/dird/dird_conf.c:1440 src/filed/filed_conf.c:439 +#: src/qt-console/tray-monitor/tray_conf.cpp:276 +#: src/qt-console/bat_conf.cpp:253 #, c-format -msgid "Rescheduled Job %s at %s to re-run in %d seconds (%s).\n" -msgstr "" - -#: src/dird/jobq.c:703 src/dird/jobq.c:708 -msgid "previous Job" +msgid "%s item is required in %s resource, but not found.\n" msgstr "" -#: src/dird/jobq.c:745 +#: src/console/console_conf.c:310 src/dird/dird_conf.c:1664 +#: src/filed/filed_conf.c:524 src/qt-console/tray-monitor/tray_conf.cpp:360 +#: src/qt-console/bat_conf.cpp:322 #, c-format -msgid "" -"Job canceled. Attempt to read and write same device.\n" -" Read storage \"%s\" (From %s) -- Write storage \"%s\" (From %s)\n" +msgid "Attempt to define second %s resource named \"%s\" is not permitted.\n" msgstr "" -#: src/dird/ua_select.c:54 +#: src/console/console.c:114 #, c-format -msgid "The current %s retention period is: %s\n" -msgstr "" - -#: src/dird/ua_select.c:59 -msgid "Continue? (yes/mod/no): " +msgid "" +"\n" +"Version: " msgstr "" -#: src/dird/ua_select.c:62 src/dird/ua_run.c:219 -msgid "mod" +#: src/console/console.c:166 +msgid "input from file" msgstr "" -#: src/dird/ua_select.c:63 -msgid "Enter new retention period: " +#: src/console/console.c:167 +msgid "output to file" msgstr "" -#: src/dird/ua_select.c:67 -msgid "Invalid period.\n" +#: src/console/console.c:168 +msgid "quit" msgstr "" -#: src/dird/ua_select.c:143 -msgid "You have the following choices:\n" +#: src/console/console.c:169 +msgid "output to file and terminal" msgstr "" -#: src/dird/ua_select.c:159 -msgid "The defined Storage resources are:\n" +#: src/console/console.c:170 +msgid "sleep specified time" msgstr "" -#: src/dird/ua_select.c:167 src/dird/ua_dotcmds.c:734 src/dird/ua_cmds.c:995 -#: src/dird/ua_run.c:224 src/wx-console/wxbrestorepanel.cpp:339 -#: src/wx-console/wxbrestorepanel.cpp:355 -#: src/wx-console/wxbrestorepanel.cpp:479 -#: src/wx-console/wxbrestorepanel.cpp:480 -#: src/wx-console/wxbrestorepanel.cpp:490 -#: src/wx-console/wxbrestorepanel.cpp:491 -#: src/wx-console/wxbrestorepanel.cpp:1173 -#: src/wx-console/wxbrestorepanel.cpp:1176 -#: src/wx-console/wxbrestorepanel.cpp:1845 -#: src/wx-console/wxbrestorepanel.cpp:1916 -msgid "Storage" +#: src/console/console.c:171 +msgid "print current time" msgstr "" -#: src/dird/ua_select.c:167 -msgid "Select Storage resource" +#: src/console/console.c:172 +msgid "print Console's version" msgstr "" -#: src/dird/ua_select.c:182 src/dird/ua_restore.c:1296 -msgid "The defined FileSet resources are:\n" +#: src/console/console.c:173 +msgid "echo command string" msgstr "" -#: src/dird/ua_select.c:190 src/dird/ua_restore.c:1300 src/dird/ua_run.c:226 -msgid "FileSet" +#: src/console/console.c:174 +msgid "execute an external command" msgstr "" -#: src/dird/ua_select.c:190 src/dird/ua_restore.c:1300 -msgid "Select FileSet resource" +#: src/console/console.c:175 +msgid "exit = quit" msgstr "" -#: src/dird/ua_select.c:220 src/dird/ua_cmds.c:2029 -msgid "Could not find a Catalog resource\n" +#: src/console/console.c:176 +msgid "zed_keys = use zed keys instead of bash keys" msgstr "" -#: src/dird/ua_select.c:223 -msgid "You must specify a \"use \" command before continuing.\n" +#: src/console/console.c:177 +msgid "help listing" msgstr "" -#: src/dird/ua_select.c:229 -msgid "The defined Catalog resources are:\n" +#: src/console/console.c:179 +msgid "set command separator" msgstr "" -#: src/dird/ua_select.c:237 -msgid "Catalog" +#: src/console/console.c:213 +msgid ": is an invalid command\n" msgstr "" -#: src/dird/ua_select.c:237 -msgid "Select Catalog resource" +#: src/console/console.c:663 +msgid "Illegal separator character.\n" msgstr "" -#: src/dird/ua_select.c:255 src/dird/ua_select.c:281 -msgid "The defined Job resources are:\n" +#: src/console/console.c:696 +msgid "Command logic problem\n" msgstr "" -#: src/dird/ua_select.c:266 src/dird/ua_select.c:289 src/dird/ua_select.c:330 -#: src/dird/ua_select.c:1186 src/dird/dird_conf.c:670 src/dird/ua_prune.c:601 -#: src/dird/ua_run.c:225 -msgid "Job" +#: src/console/console.c:911 +#, c-format +msgid "Can't find %s in Director list\n" msgstr "" -#: src/dird/ua_select.c:266 src/dird/ua_select.c:289 -msgid "Select Job resource" +#: src/console/console.c:919 +msgid "Available Directors:\n" msgstr "" -#: src/dird/ua_select.c:308 +#: src/console/console.c:923 #, c-format -msgid "Error: Restore Job resource \"%s\" does not exist.\n" -msgstr "" - -#: src/dird/ua_select.c:322 -msgid "The defined Restore Job resources are:\n" +msgid "%2d: %s at %s:%d\n" msgstr "" -#: src/dird/ua_select.c:330 -msgid "Select Restore Job" +#: src/console/console.c:927 +msgid "Select Director by entering a number: " msgstr "" -#: src/dird/ua_select.c:347 -msgid "The defined Client resources are:\n" +#: src/console/console.c:934 +#, c-format +msgid "%s is not a number. You must enter a number between 1 and %d\n" msgstr "" -#: src/dird/ua_select.c:355 src/dird/ua_select.c:464 src/dird/ua_dotcmds.c:735 -#: src/dird/ua_cmds.c:996 src/dird/ua_run.c:230 -#: src/wx-console/wxbrestorepanel.cpp:336 -#: src/wx-console/wxbrestorepanel.cpp:354 -#: src/wx-console/wxbrestorepanel.cpp:431 -#: src/wx-console/wxbrestorepanel.cpp:432 -#: src/wx-console/wxbrestorepanel.cpp:442 -#: src/wx-console/wxbrestorepanel.cpp:443 -#: src/wx-console/wxbrestorepanel.cpp:700 -#: src/wx-console/wxbrestorepanel.cpp:1133 -#: src/wx-console/wxbrestorepanel.cpp:1136 -#: src/wx-console/wxbrestorepanel.cpp:1238 -#: src/wx-console/wxbrestorepanel.cpp:1838 -#: src/wx-console/wxbrestorepanel.cpp:1840 -#: src/wx-console/wxbrestorepanel.cpp:1914 -#: src/wx-console/wxbrestorepanel.cpp:1970 -msgid "Client" +#: src/console/console.c:941 +#, c-format +msgid "You must enter a number between 1 and %d\n" msgstr "" -#: src/dird/ua_select.c:355 -msgid "Select Client (File daemon) resource" +#: src/console/console.c:1095 src/stored/stored.c:215 src/dird/dird.c:267 +#: src/filed/filed.c:204 src/qt-console/main.cpp:154 +msgid "Cryptography library initialization failed.\n" msgstr "" -#: src/dird/ua_select.c:382 +#: src/console/console.c:1099 src/stored/stored.c:219 src/dird/dird.c:271 +#: src/dird/dird.c:299 src/dird/dird.c:517 src/dird/dird.c:520 +#: src/filed/filed.c:209 src/qt-console/main.cpp:158 #, c-format -msgid "Error: Client resource %s does not exist.\n" +msgid "Please correct configuration file: %s\n" msgstr "" -#: src/dird/ua_select.c:407 +#: src/console/console.c:1129 #, c-format -msgid "Could not find Client %s: ERR=%s" +msgid "Connecting to Director %s:%d\n" msgstr "" -#: src/dird/ua_select.c:417 src/dird/ua_select.c:471 +#: src/console/console.c:1146 src/qt-console/bcomm/dircomm.cpp:118 #, c-format -msgid "Could not find Client \"%s\": ERR=%s" +msgid "Failed to initialize TLS context for Console \"%s\".\n" msgstr "" -#: src/dird/ua_select.c:446 +#: src/console/console.c:1166 src/qt-console/bcomm/dircomm.cpp:141 #, c-format -msgid "Error obtaining client ids. ERR=%s\n" -msgstr "" - -#: src/dird/ua_select.c:450 -msgid "No clients defined. You must run a job before using this command.\n" +msgid "Failed to initialize TLS context for Director \"%s\".\n" msgstr "" -#: src/dird/ua_select.c:454 -msgid "Defined Clients:\n" +#: src/console/console.c:1198 +msgid "Enter a period to cancel a command.\n" msgstr "" -#: src/dird/ua_select.c:464 -msgid "Select the Client" +#: src/console/console.c:1284 src/console/console.c:1314 +#: src/stored/stored.c:342 src/dird/dird.c:607 src/dird/dird.c:813 +#: src/dird/dird.c:868 src/dird/dird.c:907 src/filed/filed.c:366 +#: src/filed/filed.c:566 src/qt-console/main.cpp:213 +#: src/qt-console/main.cpp:243 +msgid "TLS required but not configured in Bacula.\n" msgstr "" -#: src/dird/ua_select.c:497 src/dird/ua_select.c:521 src/dird/ua_select.c:566 +#: src/console/console.c:1292 src/qt-console/main.cpp:221 #, c-format -msgid "Could not find Pool \"%s\": ERR=%s" +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Director \"%s\" in %s. At least one CA certificate store is required.\n" msgstr "" -#: src/dird/ua_select.c:532 src/dird/ua_output.c:476 src/dird/ua_update.c:436 +#: src/console/console.c:1301 src/qt-console/main.cpp:230 #, c-format -msgid "Error obtaining pool ids. ERR=%s\n" +msgid "" +"No Director resource defined in %s\n" +"Without that I don't how to speak to the Director :-(\n" msgstr "" -#: src/dird/ua_select.c:536 -msgid "No pools defined. Use the \"create\" command to create one.\n" +#: src/console/console.c:1321 src/qt-console/main.cpp:251 +#, c-format +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Console \"%s\" in %s.\n" msgstr "" -#: src/dird/ua_select.c:540 -msgid "Defined Pools:\n" +#: src/console/console.c:1347 +msgid "Too many arguments on input command.\n" msgstr "" -#: src/dird/ua_select.c:542 src/dird/ua_select.c:562 src/dird/ua_update.c:365 -#: src/baconfig.h:88 -msgid "*None*" +#: src/console/console.c:1351 +msgid "First argument to input command must be a filename.\n" msgstr "" -#: src/dird/ua_select.c:553 src/dird/ua_select.c:666 src/dird/ua_update.c:616 -#: src/dird/ua_run.c:238 src/wx-console/wxbrestorepanel.cpp:338 -#: src/wx-console/wxbrestorepanel.cpp:527 -#: src/wx-console/wxbrestorepanel.cpp:537 -#: src/wx-console/wxbrestorepanel.cpp:1834 -msgid "Pool" +#: src/console/console.c:1357 +#, c-format +msgid "Cannot open file %s for input. ERR=%s\n" msgstr "" -#: src/dird/ua_select.c:553 -msgid "Select the Pool" +#: src/console/console.c:1389 +msgid "Too many arguments on output/tee command.\n" msgstr "" -#: src/dird/ua_select.c:591 +#: src/console/console.c:1406 #, c-format -msgid "No access to Pool \"%s\"\n" +msgid "Cannot open file %s for output. ERR=%s\n" msgstr "" -#: src/dird/ua_select.c:623 -msgid "Enter *MediaId or Volume name: " +#: src/console/console.c:1425 +msgid "Too many arguments. Enclose command in double quotes.\n" msgstr "" -#: src/dird/ua_select.c:658 -msgid "The defined Pool resources are:\n" +#: src/console/console.c:1434 +#, c-format +msgid "Cannot popen(\"%s\", \"r\"): ERR=%s\n" msgstr "" -#: src/dird/ua_select.c:666 -msgid "Select Pool resource" +#: src/console/console.c:1446 src/stored/autochanger.c:665 +#, c-format +msgid "Autochanger error: ERR=%s\n" msgstr "" -#: src/dird/ua_select.c:690 src/dird/ua_restore.c:555 +#: src/cats/sql_list.c:46 #, c-format -msgid "Error: Pool resource \"%s\" does not exist.\n" +msgid "Query failed: %s\n" msgstr "" -#: src/dird/ua_select.c:701 -msgid "Enter the JobId to select: " +#: src/cats/sql_list.c:262 +msgid "These JobIds have copies as follows:\n" msgstr "" -#: src/dird/ua_select.c:739 -#, c-format -msgid "Could not find Job \"%s\": ERR=%s" +#: src/cats/sql_list.c:264 +msgid "The catalog contains copies as follows:\n" msgstr "" -#: src/dird/ua_select.c:819 +#: src/cats/sql_get.c:139 #, c-format -msgid "Automatically selected %s: %s\n" +msgid "Error fetching row: %s\n" msgstr "" -#: src/dird/ua_select.c:830 +#: src/cats/sql_get.c:146 #, c-format -msgid "" -"Your request has multiple choices for \"%s\". Selection is not possible in " -"batch mode.\n" +msgid "get_file_record want 1 got rows=%d PathId=%s FilenameId=%s\n" msgstr "" -#: src/dird/ua_select.c:848 +#: src/cats/sql_get.c:154 #, c-format -msgid "Selection list for \"%s\" is empty!\n" +msgid "File record for PathId=%s FilenameId=%s not found.\n" msgstr "" -#: src/dird/ua_select.c:854 -#, c-format -msgid "Automatically selected: %s\n" +#: src/cats/sql_get.c:160 +msgid "File record not found in Catalog.\n" msgstr "" -#: src/dird/ua_select.c:866 -msgid "Selection aborted, nothing done.\n" +#: src/cats/sql_get.c:187 +#, c-format +msgid "More than one Filename!: %s for file: %s\n" msgstr "" -#: src/dird/ua_select.c:871 +#: src/cats/sql_get.c:193 src/cats/sql_get.c:246 src/cats/sql_get.c:623 +#: src/cats/sql_get.c:724 src/cats/sql_get.c:1043 src/cats/sql.c:341 +#: src/cats/sql.c:348 src/cats/sql_create.c:584 src/cats/postgresql.c:153 #, c-format -msgid "Please enter a number between 1 and %d\n" +msgid "error fetching row: %s\n" msgstr "" -#: src/dird/ua_select.c:920 -msgid "Storage name given twice.\n" +#: src/cats/sql_get.c:197 +#, c-format +msgid "Get DB Filename record %s found bad record: %d\n" msgstr "" -#: src/dird/ua_select.c:937 +#: src/cats/sql_get.c:203 #, c-format -msgid "Expecting jobid=nn command, got: %s\n" +msgid "Filename record: %s not found.\n" msgstr "" -#: src/dird/ua_select.c:941 +#: src/cats/sql_get.c:207 #, c-format -msgid "JobId %s is not running.\n" +msgid "Filename record: %s not found in Catalog.\n" msgstr "" -#: src/dird/ua_select.c:951 +#: src/cats/sql_get.c:239 src/cats/sql_create.c:577 #, c-format -msgid "Expecting job=xxx, got: %s.\n" +msgid "More than one Path!: %s for path: %s\n" msgstr "" -#: src/dird/ua_select.c:955 src/dird/ua_select.c:967 +#: src/cats/sql_get.c:250 #, c-format -msgid "Job \"%s\" is not running.\n" +msgid "Get DB path record %s found bad record: %s\n" msgstr "" -#: src/dird/ua_select.c:963 +#: src/cats/sql_get.c:263 #, c-format -msgid "Expecting ujobid=xxx, got: %s.\n" +msgid "Path record: %s not found.\n" msgstr "" -#: src/dird/ua_select.c:983 +#: src/cats/sql_get.c:267 #, c-format -msgid "Storage resource \"%s\": not found\n" +msgid "Path record: %s not found in Catalog.\n" msgstr "" -#: src/dird/ua_select.c:1015 -msgid "Enter autochanger drive[0]: " +#: src/cats/sql_get.c:306 +#, c-format +msgid "No Job found for JobId %s\n" msgstr "" -#: src/dird/ua_select.c:1036 -msgid "Enter autochanger slot: " +#: src/cats/sql_get.c:379 src/cats/sql_get.c:436 +#, c-format +msgid "No volumes found for JobId=%d\n" msgstr "" -#: src/dird/ua_select.c:1066 -msgid "Media Types defined in conf file:\n" +#: src/cats/sql_get.c:385 src/cats/sql_get.c:447 +#, c-format +msgid "Error fetching row %d: ERR=%s\n" msgstr "" -#: src/dird/ua_select.c:1072 -msgid "Media Type" +#: src/cats/sql_get.c:399 +#, c-format +msgid "No Volume for JobId %d found in Catalog.\n" msgstr "" -#: src/dird/ua_select.c:1072 -msgid "Select the Media Type" +#: src/cats/sql_get.c:540 +#, c-format +msgid "Pool id select failed: ERR=%s\n" msgstr "" -#: src/dird/ua_select.c:1111 +#: src/cats/sql_get.c:577 #, c-format -msgid "JobId %s is not running. Use Job name to %s inactive jobs.\n" +msgid "Client id select failed: ERR=%s\n" msgstr "" -#: src/dird/ua_select.c:1120 src/dird/ua_select.c:1130 +#: src/cats/sql_get.c:618 #, c-format -msgid "Warning Job %s is not running. Continuing anyway ...\n" +msgid "More than one Pool!: %s\n" msgstr "" -#: src/dird/ua_select.c:1140 src/dird/ua_cmds.c:692 src/dird/ua_cmds.c:738 -msgid "Unauthorized command from this console.\n" +#: src/cats/sql_get.c:681 +msgid "Pool record not found in Catalog.\n" msgstr "" -#: src/dird/ua_select.c:1165 src/stored/status.c:538 src/filed/status.c:241 -msgid "No Jobs running.\n" +#: src/cats/sql_get.c:719 +#, c-format +msgid "More than one Client!: %s\n" msgstr "" -#: src/dird/ua_select.c:1167 -msgid "None of your jobs are running.\n" +#: src/cats/sql_get.c:736 src/cats/sql_get.c:740 +msgid "Client record not found in Catalog.\n" msgstr "" -#: src/dird/ua_select.c:1172 -msgid "Select Job:\n" +#: src/cats/sql_get.c:767 +#, c-format +msgid "More than one Counter!: %d\n" msgstr "" -#: src/dird/ua_select.c:1181 +#: src/cats/sql_get.c:772 #, c-format -msgid "JobId=%s Job=%s" +msgid "error fetching Counter row: %s\n" msgstr "" -#: src/dird/ua_select.c:1185 +#: src/cats/sql_get.c:792 #, c-format -msgid "Choose Job to %s" +msgid "Counter record: %s not found in Catalog.\n" msgstr "" -#: src/dird/ua_select.c:1192 +#: src/cats/sql_get.c:832 #, c-format -msgid "" -"Cancel: %s\n" -"\n" -"%s" +msgid "Error got %s FileSets but expected only one!\n" msgstr "" -#: src/dird/ua_select.c:1193 -msgid "Confirm cancel?" +#: src/cats/sql_get.c:837 +#, c-format +msgid "FileSet record \"%s\" not found.\n" msgstr "" -#: src/dird/ua_select.c:1199 -msgid "Confirm cancel (yes/no): " +#: src/cats/sql_get.c:847 +msgid "FileSet record not found in Catalog.\n" msgstr "" -#: src/dird/ua_select.c:1208 src/dird/ua_cmds.c:733 src/dird/ua_cmds.c:1100 +#: src/cats/sql_get.c:943 #, c-format -msgid "Job \"%s\" not found.\n" +msgid "Media id select failed: ERR=%s\n" msgstr "" -#: src/dird/bsr.c:173 +#: src/cats/sql_get.c:981 #, c-format -msgid "Unable to get Job record. ERR=%s\n" +msgid "query dbids failed: ERR=%s\n" msgstr "" -#: src/dird/bsr.c:184 +#: src/cats/sql_get.c:1038 #, c-format -msgid "Unable to get Job Volume Parameters. ERR=%s\n" +msgid "More than one Volume!: %s\n" msgstr "" -#: src/dird/bsr.c:232 +#: src/cats/sql_get.c:1094 #, c-format -msgid "Unable to create bootstrap file %s. ERR=%s\n" +msgid "Media record MediaId=%s not found.\n" msgstr "" -#: src/dird/bsr.c:241 -msgid "No files found to read. No bootstrap file written.\n" +#: src/cats/sql_get.c:1097 +#, c-format +msgid "Media record for Volume \"%s\" not found.\n" msgstr "" -#: src/dird/bsr.c:245 -msgid "Error writing bsr file.\n" +#: src/cats/sql_get.c:1104 +#, c-format +msgid "Media record for MediaId=%u not found in Catalog.\n" msgstr "" -#: src/dird/bsr.c:250 +#: src/cats/sql_get.c:1107 #, c-format -msgid "Bootstrap records written to %s\n" +msgid "Media record for Vol=%s not found in Catalog.\n" msgstr "" -#: src/dird/bsr.c:298 -msgid "" -"The job will require the following\n" -" Volume(s) Storage(s) SD Device(s)\n" -"===========================================================================\n" +#: src/cats/sql_get.c:1140 src/cats/sql_create.c:1183 +msgid "ERR=JobIds are empty\n" msgstr "" -#: src/dird/bsr.c:317 -msgid "No Volumes found to restore.\n" +#: src/cats/sql_find.c:86 src/cats/sql_find.c:115 src/cats/sql_find.c:170 +#, c-format +msgid "" +"Query error for start time request: ERR=%s\n" +"CMD=%s\n" msgstr "" -#: src/dird/bsr.c:319 -msgid "" -"\n" -"Volumes marked with \"*\" are online.\n" +#: src/cats/sql_find.c:92 src/cats/sql_find.c:176 +msgid "No prior Full backup Job record found.\n" msgstr "" -#: src/dird/ua_server.c:69 +#: src/cats/sql_find.c:104 #, c-format -msgid "Cannot create UA thread: %s\n" +msgid "Unknown level=%d\n" msgstr "" -#: src/dird/ua_server.c:159 -msgid "You have messages.\n" -msgstr "" - -#: src/dird/verify.c:86 src/dird/verify.c:318 +#: src/cats/sql_find.c:121 #, c-format -msgid "Unimplemented Verify level %d(%c)\n" -msgstr "" - -#: src/dird/verify.c:148 msgid "" -"Unable to find JobId of previous InitCatalog Job.\n" -"Please run a Verify with Level=InitCatalog before\n" -"running the current Job.\n" +"No Job record found: ERR=%s\n" +"CMD=%s\n" msgstr "" -#: src/dird/verify.c:153 -msgid "Unable to find JobId of previous Job for this client.\n" +#: src/cats/sql_find.c:279 +#, c-format +msgid "Unknown Job level=%d\n" msgstr "" -#: src/dird/verify.c:170 +#: src/cats/sql_find.c:289 #, c-format -msgid "Could not get job record for previous Job. ERR=%s" +msgid "No Job found for: %s.\n" msgstr "" -#: src/dird/verify.c:176 +#: src/cats/sql_find.c:300 #, c-format -msgid "Last Job %d did not terminate normally. JobStatus=%c\n" +msgid "No Job found for: %s\n" msgstr "" -#: src/dird/verify.c:180 +#: src/cats/sql_find.c:386 #, c-format -msgid "Verifying against JobId=%d Job=%s\n" +msgid "Request for Volume item %d greater than max %d or less than 1\n" msgstr "" -#: src/dird/verify.c:219 +#: src/cats/sql_find.c:401 #, c-format -msgid "Start Verify JobId=%s Level=%s Job=%s\n" +msgid "No Volume record found for item %d.\n" msgstr "" -#: src/dird/verify.c:305 -msgid "Deprecated feature ... use bootstrap.\n" +#: src/cats/cats_dummy.c:27 +msgid "Please replace this null libbaccats library with a proper one.\n" msgstr "" -#: src/dird/verify.c:372 +#: src/cats/sql.c:185 #, c-format -msgid "Unimplemented verify level %d\n" -msgstr "" - -#: src/dird/verify.c:421 -msgid "Verify OK" +msgid "" +"Potential performance problem:\n" +"max_connections=%d set for %s database \"%s\" should be larger than " +"Director's MaxConcurrentJobs=%d\n" msgstr "" -#: src/dird/verify.c:425 -msgid "*** Verify Error ***" +#: src/cats/sql.c:230 +#, c-format +msgid "" +"query %s failed:\n" +"%s\n" msgstr "" -#: src/dird/verify.c:429 -msgid "Verify warnings" +#: src/cats/sql.c:252 +#, c-format +msgid "" +"insert %s failed:\n" +"%s\n" msgstr "" -#: src/dird/verify.c:432 -msgid "Verify Canceled" +#: src/cats/sql.c:262 +#, c-format +msgid "Insertion problem: affected_rows=%s\n" msgstr "" -#: src/dird/verify.c:435 -msgid "Verify Differences" +#: src/cats/sql.c:283 +#, c-format +msgid "" +"update %s failed:\n" +"%s\n" msgstr "" -#: src/dird/verify.c:440 +#: src/cats/sql.c:293 #, c-format -msgid "Inappropriate term code: %d %c\n" +msgid "Update failed: affected_rows=%s for %s\n" msgstr "" -#: src/dird/verify.c:454 +#: src/cats/sql.c:315 #, c-format msgid "" -"%s %s %s (%s):\n" -" Build OS: %s %s %s\n" -" JobId: %d\n" -" Job: %s\n" -" FileSet: %s\n" -" Verify Level: %s\n" -" Client: %s\n" -" Verify JobId: %d\n" -" Verify Job: %s\n" -" Start time: %s\n" -" End time: %s\n" -" Files Expected: %s\n" -" Files Examined: %s\n" -" Non-fatal FD errors: %d\n" -" FD termination status: %s\n" -" SD termination status: %s\n" -" Termination: %s\n" -"\n" +"delete %s failed:\n" +"%s\n" msgstr "" -#: src/dird/verify.c:489 +#: src/cats/sql.c:409 #, c-format -msgid "" -"%s %s %s (%s):\n" -" Build: %s %s %s\n" -" JobId: %d\n" -" Job: %s\n" -" FileSet: %s\n" -" Verify Level: %s\n" -" Client: %s\n" -" Verify JobId: %d\n" -" Verify Job: %s\n" -" Start time: %s\n" -" End time: %s\n" -" Files Examined: %s\n" -" Non-fatal FD errors: %d\n" -" FD termination status: %s\n" -" Termination: %s\n" -"\n" +msgid "Path length is zero. File=%s\n" msgstr "" -#: src/dird/verify.c:567 +#: src/cats/sql.c:604 +msgid "No results to list.\n" +msgstr "" + +#: src/cats/sql.c:722 +msgid "Could not init database batch connection\n" +msgstr "" + +#: src/cats/sql.c:728 #, c-format -msgid "" -"bird set configuration file to file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -f run in foreground (for debugging)\n" -" -g groupid\n" -" -m print kaboom output (for debugging)\n" -" -r run now\n" -" -s no signals\n" -" -t test - read configuration and exit\n" -" -u userid\n" -" -v verbose user messages\n" -" -? print this message.\n" -"\n" +msgid "Error fetching row for file=%s: ERR=%s\n" msgstr "" -#: src/dird/dird.c:296 src/stored/stored.c:227 src/console/console.c:1109 -#: src/filed/filed.c:218 src/qt-console/main.cpp:165 -msgid "Cryptography library initialization failed.\n" +#: src/cats/sql_create.c:1048 +#, c-format +msgid "Create db Filename record %s failed. ERR=%s\n" msgstr "" -#: src/dird/dird.c:300 src/dird/dird.c:328 src/dird/dird.c:560 -#: src/dird/dird.c:563 src/stored/stored.c:231 src/console/console.c:1113 -#: src/filed/filed.c:223 src/qt-console/main.cpp:169 +#: src/cats/sql_create.c:1068 #, c-format -msgid "Please correct configuration file: %s\n" +msgid "Attempt to put non-attributes into catalog. Stream=%d\n" msgstr "" -#: src/dird/dird.c:546 -msgid "Too many open reload requests. Request ignored.\n" +#: src/cats/sql_create.c:1084 +msgid "Cannot Copy/Migrate job using BaseJob.\n" msgstr "" -#: src/dird/dird.c:561 -msgid "Out of reload table entries. Giving up.\n" +#: src/cats/sql_create.c:1236 +#, c-format +msgid "Create db Object record %s failed. ERR=%s" msgstr "" -#: src/dird/dird.c:564 -msgid "Resetting previous configuration.\n" +#: src/cats/mysql.c:152 src/cats/postgresql.c:198 src/cats/sqlite.c:154 +#, c-format +msgid "Unable to initialize DB lock. ERR=%s\n" msgstr "" -#: src/dird/dird.c:628 +#: src/cats/mysql.c:195 #, c-format msgid "" -"No Director resource defined in %s\n" -"Without that I don't know who I am :-(\n" +"Unable to connect to MySQL server.\n" +"Database=%s User=%s\n" +"MySQL connect failed either server not running or your authorization is " +"incorrect.\n" msgstr "" -#: src/dird/dird.c:636 src/filed/filed.c:350 +#: src/cats/mysql.c:359 src/cats/postgresql.c:442 src/cats/sqlite.c:374 +#: src/dird/fd_cmds.c:836 src/dird/fd_cmds.c:896 #, c-format -msgid "No Messages resource defined in %s\n" +msgid "Attribute create error. %s" msgstr "" -#: src/dird/dird.c:641 +#: src/cats/mysql.c:381 src/cats/cats.c:121 src/cats/postgresql.c:494 +#: src/cats/postgresql.c:541 src/cats/sqlite.c:449 #, c-format -msgid "Only one Director resource permitted in %s\n" +msgid "Query failed: %s: ERR=%s\n" msgstr "" -#: src/dird/dird.c:650 src/dird/dird.c:856 src/dird/dird.c:911 -#: src/dird/dird.c:950 src/stored/stored.c:354 src/console/console.c:1296 -#: src/console/console.c:1326 src/filed/filed.c:357 src/filed/filed.c:516 -#: src/wx-console/console_thread.cpp:118 src/wx-console/console_thread.cpp:144 -#: src/qt-console/main.cpp:224 src/qt-console/main.cpp:254 -msgid "TLS required but not configured in Bacula.\n" +#: src/cats/mysql.c:680 +msgid "A user name for MySQL must be supplied.\n" msgstr "" -#: src/dird/dird.c:658 src/stored/stored.c:410 src/filed/filed.c:526 +#: src/cats/postgresql.c:169 #, c-format -msgid "\"TLS Certificate\" file not defined for Director \"%s\" in %s.\n" +msgid "Encoding error for database \"%s\". Wanted SQL_ASCII, got %s\n" msgstr "" -#: src/dird/dird.c:664 src/stored/stored.c:416 src/filed/filed.c:532 +#: src/cats/postgresql.c:234 #, c-format -msgid "\"TLS Key\" file not defined for Director \"%s\" in %s.\n" +msgid "" +"Unable to connect to PostgreSQL server. Database=%s User=%s\n" +"Possible causes: SQL server not running; password incorrect; max_connections " +"exceeded.\n" msgstr "" -#: src/dird/dird.c:671 src/stored/stored.c:422 src/filed/filed.c:538 -#, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Director \"%s\" in %s. At least one CA certificate store is required when " -"using \"TLS Verify Peer\".\n" +#: src/cats/postgresql.c:338 +msgid "PQescapeStringConn returned non-zero.\n" msgstr "" -#: src/dird/dird.c:690 src/stored/stored.c:441 src/filed/filed.c:557 -#, c-format -msgid "Failed to initialize TLS context for Director \"%s\" in %s.\n" +#: src/cats/postgresql.c:356 +msgid "PQescapeByteaConn returned NULL.\n" msgstr "" -#: src/dird/dird.c:698 -#, c-format -msgid "No Job records defined in %s\n" +#: src/cats/postgresql.c:387 +msgid "PQunescapeByteaConn returned NULL.\n" msgstr "" -#: src/dird/dird.c:756 src/dird/dird.c:769 +#: src/cats/postgresql.c:801 #, c-format -msgid "Hey something is wrong. p=0x%lu\n" +msgid "error fetching currval: %s\n" msgstr "" -#: src/dird/dird.c:830 +#: src/cats/postgresql.c:992 #, c-format -msgid "\"%s\" directive in Job \"%s\" resource is required, but not found.\n" +msgid "error starting batch mode: %s" msgstr "" -#: src/dird/dird.c:837 -msgid "Too many items in Job resource\n" +#: src/cats/postgresql.c:1022 src/cats/postgresql.c:1029 +#, c-format +msgid "error ending batch mode: %s" msgstr "" -#: src/dird/dird.c:841 +#: src/cats/postgresql.c:1079 #, c-format -msgid "No storage specified in Job \"%s\" nor in Pool.\n" +msgid "error copying in batch mode: %s" msgstr "" -#: src/dird/dird.c:865 -#, c-format -msgid "\"TLS Certificate\" file not defined for Console \"%s\" in %s.\n" +#: src/cats/postgresql.c:1101 +msgid "A user name for PostgreSQL must be supplied.\n" msgstr "" -#: src/dird/dird.c:871 +#: src/cats/sqlite.c:169 #, c-format -msgid "\"TLS Key\" file not defined for Console \"%s\" in %s.\n" +msgid "Database %s does not exist, please create it.\n" msgstr "" -#: src/dird/dird.c:878 +#: src/cats/sqlite.c:191 #, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Console \"%s\" in %s. At least one CA certificate store is required when " -"using \"TLS Verify Peer\".\n" +msgid "Unable to open Database=%s. ERR=%s\n" msgstr "" -#: src/dird/dird.c:895 src/dird/dird.c:935 src/filed/filed.c:382 -#, c-format -msgid "Failed to initialize TLS context for File daemon \"%s\" in %s.\n" +#: src/cats/sqlite.c:192 +msgid "unknown" msgstr "" -#: src/dird/dird.c:918 +#: src/cats/sql_delete.c:65 #, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"File daemon \"%s\" in %s.\n" +msgid "No pool record %s exists\n" msgstr "" -#: src/dird/dird.c:959 +#: src/cats/sql_delete.c:70 #, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Storage \"%s\" in %s.\n" +msgid "Expecting one pool record, got %d\n" msgstr "" -#: src/dird/dird.c:975 src/stored/stored.c:394 +#: src/cats/sql_delete.c:76 #, c-format -msgid "Failed to initialize TLS context for Storage \"%s\" in %s.\n" +msgid "Error fetching row %s\n" msgstr "" -#: src/dird/dird.c:1014 src/dird/dird.c:1016 -#, c-format -msgid "Could not open Catalog \"%s\", database \"%s\".\n" +#: src/stored/job.c:190 +msgid "Client socket not open. Could not connect to Client.\n" msgstr "" -#: src/dird/dird.c:1019 src/tools/cats_test.c:377 +#: src/stored/job.c:205 src/stored/job.c:207 #, c-format -msgid "%s" +msgid "Recv request to Client failed. ERR=%s\n" msgstr "" -#: src/dird/dird.c:1098 +#: src/stored/job.c:213 src/stored/job.c:214 #, c-format -msgid "Could not create storage record for %s\n" +msgid "Bad Hello from Client: %s.\n" msgstr "" -#: src/dird/dird.c:1106 -#, c-format -msgid "Could not update storage record for %s\n" +#: src/stored/job.c:228 src/stored/job.c:311 +msgid "Unable to authenticate File daemon\n" msgstr "" -#: src/dird/dird.c:1181 src/dird/migrate.c:1072 src/stored/stored.c:491 +#: src/stored/job.c:282 #, c-format -msgid "Could not compile regex pattern \"%s\" ERR=%s\n" +msgid "FD connect failed: Job name not found: %s\n" msgstr "" -#: src/dird/inc_conf.c:312 +#: src/stored/job.c:291 #, c-format -msgid "Expected a strip path positive integer, got:%s:" +msgid "Hey!!!! JobId %u Job %s already authenticated.\n" msgstr "" -#: src/dird/inc_conf.c:332 -#, c-format -msgid "Expected a FileSet option keyword, got:%s:" +#: src/stored/job.c:441 +msgid "In free_jcr(), but still attached to device!!!!\n" msgstr "" -#: src/dird/inc_conf.c:365 -msgid "Old style Include/Exclude not supported\n" +#: src/stored/vbackup.c:67 +msgid "Read and write devices not properly initialized.\n" msgstr "" -#: src/dird/inc_conf.c:393 src/dird/inc_conf.c:739 src/dird/dird_conf.c:2022 +#: src/stored/vbackup.c:73 #, c-format -msgid "Expecting keyword, got: %s\n" +msgid "No Volume names found for %s.\n" msgstr "" -#: src/dird/inc_conf.c:401 src/dird/inc_conf.c:745 src/dird/dird_conf.c:2028 -#: src/lib/parse_conf.c:976 +#: src/stored/vbackup.c:114 src/stored/vbackup.c:248 src/stored/append.c:261 +#: src/stored/spool.c:262 #, c-format -msgid "expected an equals, got: %s" +msgid "Fatal append error on device %s: ERR=%s\n" msgstr "" -#: src/dird/inc_conf.c:411 src/dird/inc_conf.c:754 src/dird/dird_conf.c:2039 -#, c-format -msgid "Keyword %s not permitted in this resource" +#: src/stored/vbackup.c:116 src/stored/append.c:263 +msgid "Set ok=FALSE after write_block_to_device.\n" msgstr "" -#: src/dird/inc_conf.c:464 +#: src/stored/vbackup.c:139 src/stored/append.c:287 src/stored/read.c:92 #, c-format -msgid "Regex compile error. ERR=%s\n" +msgid "Elapsed time=%02d:%02d:%02d, Transfer rate=%s Bytes/second\n" msgstr "" -#: src/dird/inc_conf.c:485 -#, c-format -msgid "Expected a regex string, got: %s\n" +#: src/stored/append.c:49 +msgid "DCR is NULL!!!\n" msgstr "" -#: src/dird/inc_conf.c:559 -#, c-format -msgid "Expected a wild-card string, got: %s\n" +#: src/stored/append.c:55 +msgid "DEVICE is NULL!!!\n" msgstr "" -#: src/dird/inc_conf.c:582 -#, c-format -msgid "Expected an fstype string, got: %s\n" +#: src/stored/append.c:66 +msgid "Unable to set network buffer size.\n" msgstr "" -#: src/dird/inc_conf.c:593 -msgid "ExcludeDirContaining directive not permitted in Exclude.\n" +#: src/stored/append.c:80 src/stored/append.c:90 src/stored/append.c:103 +#: src/stored/askdir.c:355 src/stored/askdir.c:356 +msgid "NULL Volume name. This shouldn't happen!!!\n" msgstr "" -#: src/dird/inc_conf.c:620 +#: src/stored/append.c:96 src/stored/btape.c:2232 #, c-format -msgid "Expected an drivetype string, got: %s\n" +msgid "Write session label failed. ERR=%s\n" msgstr "" -#: src/dird/inc_conf.c:644 src/dird/inc_conf.c:687 +#: src/stored/append.c:109 #, c-format -msgid "Backslash found. Use forward slashes or quote the string.: %s\n" +msgid "Network send error to FD. ERR=%s\n" msgstr "" -#: src/dird/inc_conf.c:659 src/dird/inc_conf.c:702 +#: src/stored/append.c:148 #, c-format -msgid "Expected a filename, got: %s" -msgstr "" - -#: src/dird/inc_conf.c:676 -msgid "Plugin directive not permitted in Exclude\n" +msgid "Error reading data header from FD. n=%d msglen=%d ERR=%s\n" msgstr "" -#: src/dird/inc_conf.c:719 -msgid "Options section not permitted in Exclude\n" +#: src/stored/append.c:155 +#, c-format +msgid "Malformed data header from FD: %s\n" msgstr "" -#: src/dird/inc_conf.c:724 src/dird/dird_conf.c:2008 +#: src/stored/append.c:174 #, c-format -msgid "Expecting open brace. Got %s" +msgid "FI=%d from FD not positive or last_FI=%d\n" msgstr "" -#: src/dird/inc_conf.c:779 +#: src/stored/append.c:222 #, c-format -msgid "Expected a FileSet keyword, got: %s" +msgid "Network error reading from FD. ERR=%s\n" msgstr "" -#: src/dird/ua_query.c:73 src/findlib/create_file.c:288 -#: src/findlib/create_file.c:391 +#: src/stored/append.c:251 src/stored/btape.c:2351 #, c-format -msgid "Could not open %s: ERR=%s\n" +msgid "Error writing end session label. ERR=%s\n" msgstr "" -#: src/dird/ua_query.c:78 -msgid "Available queries:\n" +#: src/stored/append.c:324 +#, c-format +msgid "Error updating file attributes. ERR=%s\n" msgstr "" -#: src/dird/ua_query.c:85 -msgid "Choose a query" +#: src/stored/mount.c:87 +#, c-format +msgid "Too many errors trying to mount %s device %s.\n" msgstr "" -#: src/dird/ua_query.c:99 -msgid "Could not find query.\n" +#: src/stored/mount.c:95 +#, c-format +msgid "Job %d canceled.\n" msgstr "" -#: src/dird/ua_query.c:117 -msgid "Too many prompts in query, max is 9.\n" +#: src/stored/mount.c:211 +#, c-format +msgid "Open of %s device %s Volume \"%s\" failed: ERR=%s\n" msgstr "" -#: src/dird/ua_query.c:220 +#: src/stored/mount.c:276 #, c-format -msgid "Warning prompt %d missing.\n" +msgid "Volume \"%s\" previously written, moving to end of data.\n" msgstr "" -#: src/dird/ua_query.c:265 -msgid "" -"Entering SQL query mode.\n" -"Terminate each query with a semicolon.\n" -"Terminate query mode with a blank line.\n" +#: src/stored/mount.c:282 +#, c-format +msgid "Unable to position to end of data on %s device %s: ERR=%s\n" msgstr "" -#: src/dird/ua_query.c:268 src/dird/ua_query.c:284 -msgid "Enter SQL query: " +#: src/stored/mount.c:420 src/stored/mount.c:781 +#, c-format +msgid "Volume \"%s\" not on %s device %s.\n" msgstr "" -#: src/dird/ua_query.c:286 -msgid "Add to SQL query: " +#: src/stored/mount.c:453 +#, c-format +msgid "" +"Director wanted Volume \"%s\".\n" +" Current Volume \"%s\" not acceptable because:\n" +" %s" msgstr "" -#: src/dird/ua_query.c:289 -msgid "End query mode.\n" +#: src/stored/mount.c:473 src/stored/label.c:232 src/stored/label.c:383 +#, c-format +msgid "Could not reserve volume %s on %s device %s\n" msgstr "" -#: src/dird/newvol.c:90 +#: src/stored/mount.c:631 #, c-format -msgid "Illegal character in Volume name \"%s\"\n" +msgid "Ready to append to end of Volume \"%s\" part=%d size=%s\n" msgstr "" -#: src/dird/newvol.c:104 +#: src/stored/mount.c:635 #, c-format -msgid "Created new Volume \"%s\" in catalog.\n" +msgid "" +"Bacula cannot write on DVD Volume \"%s\" because: The sizes do not match! " +"Volume=%s Catalog=%s\n" msgstr "" -#: src/dird/newvol.c:131 +#: src/stored/mount.c:649 #, c-format -msgid "SQL failed, but ignored. ERR=%s\n" +msgid "Ready to append to end of Volume \"%s\" at file=%d.\n" msgstr "" -#: src/dird/newvol.c:141 +#: src/stored/mount.c:652 #, c-format -msgid "Wanted to create Volume \"%s\", but it already exists. Trying again.\n" +msgid "" +"For Volume \"%s\":\n" +"The number of files mismatch! Volume=%u Catalog=%u\n" +"Correcting Catalog\n" msgstr "" -#: src/dird/newvol.c:150 -msgid "Too many failures. Giving up creating Volume name.\n" +#: src/stored/mount.c:659 src/stored/mount.c:694 +msgid "Error updating Catalog\n" msgstr "" -#: src/dird/expand.c:255 +#: src/stored/mount.c:664 #, c-format -msgid "Count not update counter %s: ERR=%s\n" +msgid "" +"Bacula cannot write on tape Volume \"%s\" because:\n" +"The number of files mismatch! Volume=%u Catalog=%u\n" msgstr "" -#: src/dird/expand.c:427 +#: src/stored/mount.c:679 #, c-format -msgid "Cannot create var context: ERR=%s\n" +msgid "Ready to append to end of Volume \"%s\" size=%s\n" msgstr "" -#: src/dird/expand.c:432 +#: src/stored/mount.c:684 #, c-format -msgid "Cannot set var callback: ERR=%s\n" +msgid "" +"For Volume \"%s\":\n" +" The sizes do not match! Volume=%s Catalog=%s\n" +" Correcting Catalog\n" msgstr "" -#: src/dird/expand.c:438 +#: src/stored/mount.c:699 #, c-format -msgid "Cannot set var operate: ERR=%s\n" +msgid "" +"Bacula cannot write on disk Volume \"%s\" because: The sizes do not match! " +"Volume=%s Catalog=%s\n" msgstr "" -#: src/dird/expand.c:444 src/dird/expand.c:459 +#: src/stored/mount.c:765 #, c-format -msgid "Cannot unescape string: ERR=%s\n" +msgid "Labeled new Volume \"%s\" on %s device %s.\n" msgstr "" -#: src/dird/expand.c:452 +#: src/stored/mount.c:776 #, c-format -msgid "Cannot expand expression \"%s\": ERR=%s\n" +msgid "%s device %s not configured to autolabel Volumes.\n" msgstr "" -#: src/dird/expand.c:470 +#: src/stored/mount.c:798 #, c-format -msgid "Cannot destroy var context: ERR=%s\n" +msgid "Marking Volume \"%s\" in Error in Catalog.\n" msgstr "" -#: src/dird/recycle.c:69 +#: src/stored/mount.c:815 #, c-format -msgid "Recycled volume \"%s\"\n" -msgstr "" - -#: src/dird/ua_purge.c:90 msgid "" -"\n" -"This command can be DANGEROUS!!!\n" -"\n" -"It purges (deletes) all Files from a Job,\n" -"JobId, Client or Volume; or it purges (deletes)\n" -"all Jobs from a Client or Volume without regard\n" -"to retention periods. Normally you should use the\n" -"PRUNE command, which respects retention periods.\n" +"Autochanger Volume \"%s\" not found in slot %d.\n" +" Setting InChanger to zero in catalog.\n" msgstr "" -#: src/dird/ua_purge.c:157 -msgid "Choose item to purge" +#: src/stored/mount.c:834 +msgid "Hey!!!!! WroteVol non-zero !!!!!\n" msgstr "" -#: src/dird/ua_purge.c:204 +#: src/stored/mount.c:884 #, c-format -msgid "Begin purging files for Client \"%s\"\n" +msgid "" +"Invalid tape position on volume \"%s\" on device %s. Expected %d, got %d\n" msgstr "" -#: src/dird/ua_purge.c:213 src/dird/ua_purge.c:263 +#: src/stored/mount.c:925 #, c-format -msgid "No Files found for client %s to purge from %s catalog.\n" +msgid "Cannot open %s Dev=%s, Vol=%s for reading.\n" +msgstr "" + +#: src/stored/askdir.c:168 +msgid "Network error on bnet_recv in req_vol_info.\n" msgstr "" -#: src/dird/ua_purge.c:216 +#: src/stored/askdir.c:191 #, c-format -msgid "Files for %d Jobs for client \"%s\" purged from %s catalog.\n" +msgid "Error getting Volume info: %s" msgstr "" -#: src/dird/ua_purge.c:254 +#: src/stored/askdir.c:396 #, c-format -msgid "Begin purging jobs from Client \"%s\"\n" +msgid "Didn't get vol info vol=%s: ERR=%s" msgstr "" -#: src/dird/ua_purge.c:266 +#: src/stored/askdir.c:461 #, c-format -msgid "%d Jobs for client %s purged from %s catalog.\n" +msgid "Error creating JobMedia record: ERR=%s\n" msgstr "" -#: src/dird/ua_purge.c:464 +#: src/stored/askdir.c:468 #, c-format -msgid "" -"\n" -"Volume \"%s\" has VolStatus \"%s\" and cannot be purged.\n" -"The VolStatus must be: Append, Full, Used, or Error to be purged.\n" +msgid "Error creating JobMedia record: %s\n" msgstr "" -#: src/dird/ua_purge.c:492 +#: src/stored/askdir.c:556 #, c-format -msgid "%d File%s on Volume \"%s\" purged from catalog.\n" +msgid "Job %s canceled while waiting for mount on Storage Device \"%s\".\n" msgstr "" -#: src/dird/ua_purge.c:541 +#: src/stored/askdir.c:568 #, c-format msgid "" -"There are no more Jobs associated with Volume \"%s\". Marking it purged.\n" +"Job %s is waiting. Cannot find any appendable volumes.\n" +"Please use the \"label\" command to create a new Volume for:\n" +" Storage: %s\n" +" Pool: %s\n" +" Media type: %s\n" msgstr "" -#: src/dird/ua_purge.c:556 src/dird/ua_label.c:774 +#: src/stored/askdir.c:593 src/stored/askdir.c:694 #, c-format -msgid "Connecting to Storage daemon %s at %s:%d ...\n" +msgid "Max time exceeded waiting to mount Storage Device %s for Job %s\n" msgstr "" -#: src/dird/ua_purge.c:559 src/dird/ua_dotcmds.c:625 src/dird/ua_cmds.c:771 -#: src/dird/ua_cmds.c:1577 src/dird/ua_label.c:777 src/dird/job.c:448 -msgid "Failed to connect to Storage daemon.\n" +#: src/stored/askdir.c:603 +msgid "pthread error in mount_next_volume.\n" msgstr "" -#: src/dird/ua_purge.c:623 -msgid "Can't update volume size in the catalog\n" +#: src/stored/askdir.c:636 +msgid "Cannot request another volume: no volume name given.\n" msgstr "" -#: src/dird/ua_purge.c:625 +#: src/stored/askdir.c:642 #, c-format -msgid "The volume \"%s\" has been truncated\n" +msgid "Job %s canceled while waiting for mount on Storage Device %s.\n" msgstr "" -#: src/dird/ua_purge.c:627 +#: src/stored/askdir.c:659 #, c-format -msgid "Unable to truncate volume \"%s\"\n" +msgid "" +"%sPlease mount append Volume \"%s\" or label a new one for:\n" +" Job: %s\n" +" Storage: %s\n" +" Pool: %s\n" +" Media type: %s\n" msgstr "" -#: src/dird/ua_purge.c:713 +#: src/stored/askdir.c:665 #, c-format -msgid "No Volumes found to perform %s action.\n" +msgid "" +"%sPlease mount read Volume \"%s\" for:\n" +" Job: %s\n" +" Storage: %s\n" +" Pool: %s\n" +" Media type: %s\n" msgstr "" -#: src/dird/ua_purge.c:786 -#, c-format -msgid "Unable move recycled Volume in full Pool \"%s\" MaxVols=%d\n" +#: src/stored/askdir.c:672 +msgid "" +"\n" +"\n" +"WARNING: device is full! Please add more disk space then ...\n" +"\n" msgstr "" -#: src/dird/ua_purge.c:800 -#, c-format -msgid "All records pruned from Volume \"%s\"; marking it \"Purged\"\n" +#: src/stored/askdir.c:704 +msgid "pthread error in mount_volume\n" msgstr "" -#: src/dird/ua_purge.c:805 +#: src/stored/stored.c:75 #, c-format -msgid "Cannot purge Volume with VolStatus=%s\n" +msgid "" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: bacula-sd [options] [-c config_file] [config_file]\n" +" -c use as configuration file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -f run in foreground (for debugging)\n" +" -g set groupid to group\n" +" -m print kaboom output (for debugging)\n" +" -p proceed despite I/O errors\n" +" -s no signals (for debugging)\n" +" -t test - read config and exit\n" +" -u userid to \n" +" -v verbose user messages\n" +" -? print this message.\n" +"\n" msgstr "" -#: src/dird/vbackup.c:76 src/dird/migrate.c:114 -msgid "Could not get or create a Pool record.\n" +#: src/stored/stored.c:124 src/stored/btape.c:167 +#, c-format +msgid "Tape block size (%d) not multiple of system size (%d)\n" msgstr "" -#: src/dird/vbackup.c:89 src/dird/migrate.c:227 src/dird/migrate.c:228 -#: src/dird/backup.c:93 src/dird/job.c:185 src/dird/job.c:871 -#: src/dird/job.c:1126 src/dird/job.c:1172 src/dird/job.c:1186 -msgid "Pool resource" +#: src/stored/stored.c:128 src/stored/btape.c:171 +#, c-format +msgid "Tape block size (%d) is not a power of 2\n" msgstr "" -#: src/dird/vbackup.c:116 src/dird/migrate.c:285 -msgid "Job Pool's NextPool resource" +#: src/stored/stored.c:256 +msgid "Volume Session Time is ZERO!\n" msgstr "" -#: src/dird/vbackup.c:147 +#: src/stored/stored.c:265 #, c-format -msgid "Start Virtual Backup JobId %s, Job=%s\n" +msgid "Unable to create thread. ERR=%s\n" msgstr "" -#: src/dird/vbackup.c:151 -msgid "" -"This Job is not an Accurate backup so is not equivalent to a Full backup.\n" +#: src/stored/stored.c:298 src/stored/butil.c:76 +#, c-format +msgid "No Storage resource defined in %s. Cannot continue.\n" msgstr "" -#: src/dird/vbackup.c:158 -msgid "No previous Jobs found.\n" +#: src/stored/stored.c:304 +#, c-format +msgid "Only one Storage resource permitted in %s\n" msgstr "" -#: src/dird/vbackup.c:180 +#: src/stored/stored.c:309 #, c-format -msgid "Error getting Job record for previous Job: ERR=%s" +msgid "No Director resource defined in %s. Cannot continue.\n" msgstr "" -#: src/dird/vbackup.c:186 src/dird/migrate.c:131 -msgid "Could not get or create the FileSet record.\n" +#: src/stored/stored.c:314 +#, c-format +msgid "No Device resource defined in %s. Cannot continue.\n" msgstr "" -#: src/dird/vbackup.c:313 src/dird/backup.c:635 +#: src/stored/stored.c:322 #, c-format -msgid "Error getting Client record for Job report: ERR=%s" +msgid "No Messages resource defined in %s. Cannot continue.\n" msgstr "" -#: src/dird/vbackup.c:319 src/dird/migrate.c:1257 src/dird/backup.c:641 +#: src/stored/stored.c:329 src/stored/bscan.c:256 #, c-format -msgid "Error getting Media record for Volume \"%s\": ERR=%s" +msgid "No Working Directory defined in %s. Cannot continue.\n" msgstr "" -#: src/dird/vbackup.c:329 src/dird/backup.c:651 src/dird/backup.c:660 -#: src/stored/bscan.c:1214 -msgid "Backup OK -- with warnings" +#: src/stored/stored.c:351 +#, c-format +msgid "\"TLS Certificate\" file not defined for Storage \"%s\" in %s.\n" msgstr "" -#: src/dird/vbackup.c:331 src/dird/backup.c:653 src/stored/bscan.c:1211 -msgid "Backup OK" +#: src/stored/stored.c:357 +#, c-format +msgid "\"TLS Key\" file not defined for Storage \"%s\" in %s.\n" msgstr "" -#: src/dird/vbackup.c:336 src/dird/backup.c:664 src/stored/bscan.c:1218 -msgid "*** Backup Error ***" -msgstr "" - -#: src/dird/vbackup.c:346 src/dird/backup.c:674 src/stored/bscan.c:1221 -msgid "Backup Canceled" -msgstr "" - -#: src/dird/vbackup.c:393 +#: src/stored/stored.c:363 #, c-format msgid "" -"%s %s %s (%s):\n" -" Build OS: %s %s %s\n" -" JobId: %d\n" -" Job: %s\n" -" Backup Level: Virtual Full\n" -" Client: \"%s\" %s\n" -" FileSet: \"%s\" %s\n" -" Pool: \"%s\" (From %s)\n" -" Catalog: \"%s\" (From %s)\n" -" Storage: \"%s\" (From %s)\n" -" Scheduled time: %s\n" -" Start time: %s\n" -" End time: %s\n" -" Elapsed time: %s\n" -" Priority: %d\n" -" SD Files Written: %s\n" -" SD Bytes Written: %s (%sB)\n" -" Rate: %.1f KB/s\n" -" Volume name(s): %s\n" -" Volume Session Id: %d\n" -" Volume Session Time: %d\n" -" Last Volume Bytes: %s (%sB)\n" -" SD Errors: %d\n" -" SD termination status: %s\n" -" Termination: %s\n" -"\n" -msgstr "" - -#: src/dird/ua_output.c:69 src/dird/ua_output.c:93 -msgid "ON or OFF keyword missing.\n" -msgstr "" - -#: src/dird/ua_output.c:113 -msgid "Disabled Jobs:\n" -msgstr "" - -#: src/dird/ua_output.c:119 -msgid "No disabled Jobs.\n" -msgstr "" - -#: src/dird/ua_output.c:163 -msgid "disabled" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Storage \"%s\" in %s. At least one CA certificate store is required when " +"using \"TLS Verify Peer\".\n" msgstr "" -#: src/dird/ua_output.c:211 -msgid "Keywords for the show command are:\n" +#: src/stored/stored.c:382 src/dird/dird.c:932 +#, c-format +msgid "Failed to initialize TLS context for Storage \"%s\" in %s.\n" msgstr "" -#: src/dird/ua_output.c:217 +#: src/stored/stored.c:398 src/dird/dird.c:615 src/filed/filed.c:576 #, c-format -msgid "%s resource %s not found.\n" +msgid "\"TLS Certificate\" file not defined for Director \"%s\" in %s.\n" msgstr "" -#: src/dird/ua_output.c:220 +#: src/stored/stored.c:404 src/dird/dird.c:621 src/filed/filed.c:582 #, c-format -msgid "Resource %s not found\n" +msgid "\"TLS Key\" file not defined for Director \"%s\" in %s.\n" msgstr "" -#: src/dird/ua_output.c:290 -msgid "Hey! DB is NULL\n" +#: src/stored/stored.c:410 src/dird/dird.c:628 src/filed/filed.c:588 +#, c-format +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Director \"%s\" in %s. At least one CA certificate store is required when " +"using \"TLS Verify Peer\".\n" msgstr "" -#: src/dird/ua_output.c:447 +#: src/stored/stored.c:429 src/dird/dird.c:647 src/filed/filed.c:607 #, c-format -msgid "Jobid %d used %d Volume(s): %s\n" +msgid "Failed to initialize TLS context for Director \"%s\" in %s.\n" msgstr "" -#: src/dird/ua_output.c:465 -msgid "No Pool specified.\n" +#: src/stored/stored.c:479 src/dird/mac_sql.c:547 src/dird/dird.c:1138 +#, c-format +msgid "Could not compile regex pattern \"%s\" ERR=%s\n" msgstr "" -#: src/dird/ua_output.c:486 +#: src/stored/stored.c:548 src/stored/dircmd.c:204 src/dird/job.c:101 +#: src/dird/jobq.c:208 src/filed/job.c:257 #, c-format -msgid "Pool: %s\n" +msgid "Unable to init job cond variable: ERR=%s\n" msgstr "" -#: src/dird/ua_output.c:502 -msgid "Ignoring invalid value for days. Max is 50.\n" +#: src/stored/stored.c:556 +#, c-format +msgid "Could not initialize %s\n" msgstr "" -#: src/dird/ua_output.c:524 +#: src/stored/stored.c:570 #, c-format -msgid "Unknown list keyword: %s\n" +msgid "Could not open device %s\n" msgstr "" -#: src/dird/ua_output.c:549 +#: src/stored/stored.c:584 #, c-format -msgid "%s is not a job name.\n" +msgid "Could not mount device %s\n" msgstr "" -#: src/dird/ua_output.c:563 +#: src/stored/btape.c:174 #, c-format -msgid "Could not find Pool for Job %s\n" +msgid "" +"\n" +"\n" +"!!!! Warning large disk addressing disabled. boffset_t=%d should be 8 or " +"more !!!!!\n" +"\n" +"\n" msgstr "" -#: src/dird/ua_output.c:576 +#: src/stored/btape.c:181 #, c-format -msgid "Could not find next Volume for Job %s (Pool=%s, Level=%s).\n" +msgid "32 bit printf/scanf problem. i=%d x32=%u y32=%u\n" msgstr "" -#: src/dird/ua_output.c:580 -#, c-format -msgid "" -"The next Volume to be used by Job \"%s\" (Pool=%s, Level=%s) will be %s\n" +#: src/stored/btape.c:190 +msgid "64 bit printf/scanf problem. i=%d x64=%" msgstr "" -#: src/dird/ua_output.c:593 +#: src/stored/btape.c:195 #, c-format -msgid "Could not find next Volume for Job %s.\n" +msgid "Tape block granularity is %d bytes.\n" msgstr "" -#: src/dird/ua_output.c:720 src/dird/job.c:133 src/tools/cats_test.c:375 -#, c-format -msgid "Could not open database \"%s\".\n" +#: src/stored/btape.c:270 +msgid "No archive name specified.\n" msgstr "" -#: src/dird/ua_output.c:733 -#, c-format -msgid "Pool %s not in database. %s" +#: src/stored/btape.c:274 +msgid "Improper number of arguments specified.\n" msgstr "" -#: src/dird/ua_output.c:741 -#, c-format -msgid "Pool %s created in database.\n" +#: src/stored/btape.c:288 +msgid "btape does not work with DVD storage.\n" msgstr "" -#: src/dird/ua_output.c:794 -msgid "You have no messages.\n" +#: src/stored/btape.c:293 +msgid "btape only works with tape storage.\n" msgstr "" -#: src/dird/ua_output.c:874 -msgid "Message too long to display.\n" +#: src/stored/btape.c:377 +#, c-format +msgid "Total Volume bytes=%sB. Total Write rate = %sB/s\n" msgstr "" -#: src/dird/ua_dotcmds.c:155 src/dird/ua_cmds.c:236 +#: src/stored/btape.c:403 #, c-format -msgid "Can't use %s command in a runscript" +msgid "Volume bytes=%sB. Write rate = %sB/s\n" msgstr "" -#: src/dird/ua_dotcmds.c:175 -msgid ": is an invalid command.\n" +#: src/stored/btape.c:467 src/stored/device.c:303 src/stored/bcopy.c:194 +#, c-format +msgid "dev open failed: %s\n" msgstr "" -#: src/dird/ua_dotcmds.c:553 src/dird/ua_restore.c:780 -#: src/dird/ua_restore.c:823 +#: src/stored/btape.c:471 #, c-format -msgid "Unable to get Job record for JobId=%s: ERR=%s\n" +msgid "open device %s: OK\n" msgstr "" -#: src/dird/ua_dotcmds.c:619 src/dird/ua_cmds.c:765 src/dird/ua_cmds.c:1566 -#: src/dird/ua_status.c:352 src/dird/job.c:147 src/dird/job.c:153 -#: src/dird/job.c:1160 src/dird/job.c:1164 -msgid "unknown source" +#: src/stored/btape.c:494 +msgid "Enter Volume Name: " msgstr "" -#: src/dird/ua_dotcmds.c:622 src/dird/ua_cmds.c:768 src/dird/ua_status.c:355 +#: src/stored/btape.c:501 #, c-format -msgid "Connecting to Storage daemon %s at %s:%d\n" +msgid "Device open failed. ERR=%s\n" msgstr "" -#: src/dird/ua_dotcmds.c:628 src/dird/ua_cmds.c:774 src/dird/ua_status.c:366 -msgid "Connected to storage daemon\n" +#: src/stored/btape.c:506 +#, c-format +msgid "Wrote Volume label for volume \"%s\".\n" msgstr "" -#: src/dird/ua_dotcmds.c:648 src/dird/ua_cmds.c:803 src/dird/ua_cmds.c:1208 -#: src/dird/ua_status.c:397 -#, c-format -msgid "Connecting to Client %s at %s:%d\n" +#: src/stored/btape.c:520 +msgid "Volume has no label.\n" msgstr "" -#: src/dird/ua_dotcmds.c:651 src/dird/ua_cmds.c:806 src/dird/ua_cmds.c:1211 -msgid "Failed to connect to Client.\n" +#: src/stored/btape.c:523 +msgid "Volume label read correctly.\n" msgstr "" -#: src/dird/ua_dotcmds.c:694 src/dird/ua_dotcmds.c:788 +#: src/stored/btape.c:526 #, c-format -msgid "Unknown command: %s\n" +msgid "I/O error on device: ERR=%s" msgstr "" -#: src/dird/ua_dotcmds.c:732 src/dird/ua_cmds.c:993 -msgid "Available daemons are: \n" +#: src/stored/btape.c:529 +#, c-format +msgid "Volume type error: ERR=%s\n" msgstr "" -#: src/dird/ua_dotcmds.c:733 src/dird/ua_cmds.c:994 -msgid "Director" +#: src/stored/btape.c:532 +msgid "Volume name error\n" msgstr "" -#: src/dird/ua_dotcmds.c:736 -msgid "Select daemon type to make die" +#: src/stored/btape.c:535 +#, c-format +msgid "Error creating label. ERR=%s" msgstr "" -#: src/dird/ua_dotcmds.c:762 -msgid "The Director will generate a deadlock.\n" +#: src/stored/btape.c:538 +msgid "Volume version error.\n" msgstr "" -#: src/dird/ua_dotcmds.c:766 -msgid "The Director will segment fault.\n" +#: src/stored/btape.c:541 +msgid "Bad Volume label type.\n" msgstr "" -#: src/dird/ua_dotcmds.c:955 -msgid "Access to specified Client or FileSet not allowed.\n" +#: src/stored/btape.c:544 +msgid "Unknown error.\n" msgstr "" -#: src/dird/ua_dotcmds.c:960 src/dird/ua_dotcmds.c:1004 -#: src/dird/ua_restore.c:941 src/dird/ua_restore.c:969 -#: src/dird/ua_restore.c:990 +#: src/stored/btape.c:562 #, c-format -msgid "Query failed: %s. ERR=%s\n" +msgid "Bad status from load. ERR=%s\n" msgstr "" -#: src/dird/ua_dotcmds.c:999 -msgid "query keyword not found.\n" +#: src/stored/btape.c:564 +#, c-format +msgid "Loaded %s\n" msgstr "" -#: src/dird/ua_dotcmds.c:1026 +#: src/stored/btape.c:573 src/stored/btape.c:1136 src/stored/btape.c:1209 +#: src/stored/btape.c:1289 src/stored/btape.c:1560 #, c-format -msgid "List MediaType failed: ERR=%s\n" +msgid "Bad status from rewind. ERR=%s\n" msgstr "" -#: src/dird/ua_dotcmds.c:1040 +#: src/stored/btape.c:576 src/stored/btape.c:1568 #, c-format -msgid "List Media failed: ERR=%s\n" +msgid "Rewound %s\n" msgstr "" -#: src/dird/ua_dotcmds.c:1054 +#: src/stored/btape.c:602 src/stored/btape.c:1572 #, c-format -msgid "List Location failed: ERR=%s\n" +msgid "Bad status from weof. ERR=%s\n" msgstr "" -#: src/dird/next_vol.c:166 +#: src/stored/btape.c:606 #, c-format -msgid "Purging oldest volume \"%s\"\n" +msgid "Wrote 1 EOF to %s\n" msgstr "" -#: src/dird/next_vol.c:172 +#: src/stored/btape.c:609 #, c-format -msgid "Pruning oldest volume \"%s\"\n" +msgid "Wrote %d EOFs to %s\n" msgstr "" -#: src/dird/next_vol.c:191 -msgid "We seem to be looping trying to find the next volume. I give up.\n" +#: src/stored/btape.c:627 +msgid "Moved to end of medium.\n" msgstr "" -#: src/dird/next_vol.c:218 +#: src/stored/btape.c:654 #, c-format -msgid "Max Volume bytes=%s exceeded. Marking Volume \"%s\" as Full.\n" +msgid "Bad status from bsf. ERR=%s\n" msgstr "" -#: src/dird/next_vol.c:226 +#: src/stored/btape.c:656 #, c-format -msgid "Volume used once. Marking Volume \"%s\" as Used.\n" +msgid "Backspaced %d file%s.\n" msgstr "" -#: src/dird/next_vol.c:233 +#: src/stored/btape.c:673 #, c-format -msgid "Max Volume jobs=%s exceeded. Marking Volume \"%s\" as Used.\n" +msgid "Bad status from bsr. ERR=%s\n" msgstr "" -#: src/dird/next_vol.c:243 +#: src/stored/btape.c:675 #, c-format -msgid "Max Volume files=%s exceeded. Marking Volume \"%s\" as Used.\n" +msgid "Backspaced %d record%s.\n" msgstr "" -#: src/dird/next_vol.c:254 +#: src/stored/btape.c:685 src/stored/status.c:361 #, c-format -msgid "" -"Max configured use duration=%s sec. exceeded. Marking Volume \"%s\" as " -"Used.\n" +msgid "Configured device capabilities:\n" msgstr "" -#: src/dird/next_vol.c:267 +#: src/stored/btape.c:703 #, c-format -msgid "Catalog error updating volume \"%s\". ERR=%s" +msgid "Device status:\n" msgstr "" -#: src/dird/next_vol.c:289 -msgid "volume has expired" +#: src/stored/btape.c:717 src/stored/status.c:417 +#, c-format +msgid "Device parameters:\n" msgstr "" -#: src/dird/next_vol.c:307 src/dird/next_vol.c:351 +#: src/stored/btape.c:722 #, c-format -msgid "Recycled current volume \"%s\"\n" +msgid "Status:\n" msgstr "" -#: src/dird/next_vol.c:312 -msgid "and recycling of current volume failed" +#: src/stored/btape.c:737 +msgid "" +"Test writing larger and larger records.\n" +"This is a torture test for records.\n" +"I am going to write\n" +"larger and larger records. It will stop when the record size\n" +"plus the header exceeds the block size (by default about 64K)\n" msgstr "" -#: src/dird/next_vol.c:318 -msgid "but should be Append, Purged or Recycle" +#: src/stored/btape.c:743 +msgid "Do you want to continue? (y/n): " msgstr "" -#: src/dird/next_vol.c:327 -msgid "volume has recycling disabled" +#: src/stored/btape.c:745 src/stored/btape.c:2197 +msgid "Command aborted.\n" msgstr "" -#: src/dird/next_vol.c:354 -msgid "" -"but should be Append, Purged or Recycle (recycling of the current volume " -"failed)" +#: src/stored/btape.c:762 +#, c-format +msgid "Block %d i=%d\n" +msgstr "" + +#: src/stored/btape.c:789 +msgid "Skipping read backwards test because BSR turned off.\n" msgstr "" -#: src/dird/next_vol.c:358 +#: src/stored/btape.c:793 msgid "" -"but should be Append, Purged or Recycle (cannot automatically recycle " -"current volume, as it still contains unpruned data or the Volume Retention " -"time has not expired.)" +"\n" +"=== Write, backup, and re-read test ===\n" +"\n" +"I'm going to write three records and an EOF\n" +"then backup over the EOF and re-read the last record.\n" +"Bacula does this after writing the last block on the\n" +"tape to verify that the block was written correctly.\n" +"\n" +"This is not an *essential* feature ...\n" +"\n" msgstr "" -#: src/dird/next_vol.c:421 -#, c-format -msgid "Unable to get Pool record: ERR=%s" +#: src/stored/btape.c:806 src/stored/btape.c:817 src/stored/btape.c:828 +#: src/stored/btape.c:1146 src/stored/btape.c:1162 src/stored/btape.c:1904 +#: src/stored/btape.c:2821 +msgid "Error writing record to block.\n" msgstr "" -#: src/dird/next_vol.c:428 -#, c-format -msgid "Unable add Scratch Volume, Pool \"%s\" full MaxVols=%d\n" +#: src/stored/btape.c:810 src/stored/btape.c:821 src/stored/btape.c:832 +#: src/stored/btape.c:1150 src/stored/btape.c:1166 src/stored/btape.c:1908 +#: src/stored/btape.c:2825 +msgid "Error writing block to device.\n" msgstr "" -#: src/dird/next_vol.c:448 +#: src/stored/btape.c:813 #, c-format -msgid "Failed to move Scratch Volume. ERR=%s\n" +msgid "Wrote first record of %d bytes.\n" msgstr "" -#: src/dird/next_vol.c:453 +#: src/stored/btape.c:824 #, c-format -msgid "Using Volume \"%s\" from 'Scratch' pool.\n" +msgid "Wrote second record of %d bytes.\n" msgstr "" -#: src/dird/ua_cmds.c:120 -msgid "Add media to a pool" +#: src/stored/btape.c:835 +#, c-format +msgid "Wrote third record of %d bytes.\n" msgstr "" -#: src/dird/ua_cmds.c:121 -msgid "Autodisplay console messages" +#: src/stored/btape.c:842 src/stored/btape.c:847 +#, c-format +msgid "Backspace file failed! ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:122 -msgid "Automount after label" +#: src/stored/btape.c:851 +msgid "Backspaced over EOF OK.\n" msgstr "" -#: src/dird/ua_cmds.c:123 -msgid "Cancel a job" +#: src/stored/btape.c:853 +#, c-format +msgid "Backspace record failed! ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:124 -msgid "Create DB Pool from resource" +#: src/stored/btape.c:856 +msgid "Backspace record OK.\n" msgstr "" -#: src/dird/ua_cmds.c:125 -msgid "Delete volume, pool or job" +#: src/stored/btape.c:859 src/stored/btape.c:865 +#, c-format +msgid "Read block failed! ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:126 -msgid "Disable a job" +#: src/stored/btape.c:870 +msgid "Bad data in record. Test failed!\n" msgstr "" -#: src/dird/ua_cmds.c:127 -msgid "Enable a job" +#: src/stored/btape.c:874 +msgid "" +"\n" +"Block re-read correct. Test succeeded!\n" msgstr "" -#: src/dird/ua_cmds.c:128 -msgid "Performs FileSet estimate, listing gives full listing" +#: src/stored/btape.c:875 +msgid "" +"=== End Write, backup, and re-read test ===\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:131 src/dird/ua_cmds.c:155 -msgid "Terminate Bconsole session" -msgstr "" - -#: src/dird/ua_cmds.c:132 -msgid "Non-interactive gui mode" -msgstr "" - -#: src/dird/ua_cmds.c:133 -msgid "Print help on specific command" +#: src/stored/btape.c:882 +msgid "" +"This is not terribly serious since Bacula only uses\n" +"this function to verify the last block written to the\n" +"tape. Bacula will skip the last block verification\n" +"if you add:\n" +"\n" +"Backward Space Record = No\n" +"\n" +"to your Storage daemon's Device resource definition.\n" msgstr "" -#: src/dird/ua_cmds.c:138 -msgid "Label a tape" +#: src/stored/btape.c:904 +#, c-format +msgid "Begin writing %i files of %sB with raw blocks of %u bytes.\n" msgstr "" -#: src/dird/ua_cmds.c:139 -msgid "List objects from catalog" +#: src/stored/btape.c:925 src/stored/btape.c:2877 +#, c-format +msgid "Write failed at block %u. stat=%d ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:142 -msgid "Full or long list like list command" +#: src/stored/btape.c:959 +#, c-format +msgid "Begin writing %i files of %sB with blocks of %u bytes.\n" msgstr "" -#: src/dird/ua_cmds.c:145 -msgid "Display pending messages" +#: src/stored/btape.c:968 +msgid "" +"\n" +"Error writing record to block.\n" msgstr "" -#: src/dird/ua_cmds.c:146 -msgid "Print current memory usage" +#: src/stored/btape.c:972 +msgid "" +"\n" +"Error writing block to device.\n" msgstr "" -#: src/dird/ua_cmds.c:147 -msgid "Mount storage" +#: src/stored/btape.c:1027 +msgid "The file_size is too big, stop this test with Ctrl-c.\n" msgstr "" -#: src/dird/ua_cmds.c:150 -msgid "Prune expired records from catalog" +#: src/stored/btape.c:1055 +msgid "Test with zero data, should give the maximum throughput.\n" msgstr "" -#: src/dird/ua_cmds.c:153 -msgid "Purge records from catalog" +#: src/stored/btape.c:1067 src/stored/btape.c:1093 +msgid "Test with random data, should give the minimum throughput.\n" msgstr "" -#: src/dird/ua_cmds.c:154 -msgid "Python control commands" +#: src/stored/btape.c:1082 +msgid "Test with zero data and bacula block structure.\n" msgstr "" -#: src/dird/ua_cmds.c:156 -msgid "Query catalog" +#: src/stored/btape.c:1122 +#, c-format +msgid "" +"\n" +"=== Write, rewind, and re-read test ===\n" +"\n" +"I'm going to write %d records and an EOF\n" +"then write %d records and an EOF, then rewind,\n" +"and re-read the data to verify that it is correct.\n" +"\n" +"This is an *essential* feature ...\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:157 -msgid "Restore files" +#: src/stored/btape.c:1154 src/stored/btape.c:1170 +#, c-format +msgid "Wrote %d blocks of %d bytes.\n" msgstr "" -#: src/dird/ua_cmds.c:162 -msgid "Relabel a tape" +#: src/stored/btape.c:1212 src/stored/btape.c:1292 +msgid "Rewind OK.\n" msgstr "" -#: src/dird/ua_cmds.c:165 -msgid "Release storage" +#: src/stored/btape.c:1225 src/stored/btape.c:1344 +msgid "Got EOF on tape.\n" msgstr "" -#: src/dird/ua_cmds.c:166 -msgid "Reload conf file" +#: src/stored/btape.c:1230 +#, c-format +msgid "Read block %d failed! ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:167 -msgid "Run a job" +#: src/stored/btape.c:1236 +#, c-format +msgid "Read record failed. Block %d! ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:171 -msgid "Report status" +#: src/stored/btape.c:1242 src/stored/btape.c:1374 +#, c-format +msgid "Bad data in record. Expected %d, got %d at byte %d. Test failed!\n" msgstr "" -#: src/dird/ua_cmds.c:174 -msgid "Sets debug level" +#: src/stored/btape.c:1249 +#, c-format +msgid "%d blocks re-read correctly.\n" msgstr "" -#: src/dird/ua_cmds.c:177 -msgid "Sets new client address -- if authorized" +#: src/stored/btape.c:1252 src/stored/btape.c:1381 +msgid "" +"=== Test Succeeded. End Write, rewind, and re-read test ===\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:178 -msgid "Show resource records" +#: src/stored/btape.c:1280 +msgid "Block position test\n" msgstr "" -#: src/dird/ua_cmds.c:181 -msgid "Use SQL to query catalog" +#: src/stored/btape.c:1335 +#, c-format +msgid "Reposition to file:block %d:%d\n" msgstr "" -#: src/dird/ua_cmds.c:182 -msgid "Print current time" +#: src/stored/btape.c:1337 +msgid "Reposition error.\n" msgstr "" -#: src/dird/ua_cmds.c:183 -msgid "Turn on/off trace to file" +#: src/stored/btape.c:1350 +#, c-format +msgid "" +"Read block %d failed! file=%d blk=%d. ERR=%s\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:184 -msgid "Unmount storage" +#: src/stored/btape.c:1352 +msgid "" +"This may be because the tape drive block size is not\n" +" set to variable blocking as normally used by Bacula.\n" +" Please see the Tape Testing chapter in the manual and \n" +" look for using mt with defblksize and setoptions\n" +"If your tape drive block size is correct, then perhaps\n" +" your SCSI driver is *really* stupid and does not\n" +" correctly report the file:block after a FSF. In this\n" +" case try setting:\n" +" Fast Forward Space File = no\n" +" in your Device resource.\n" msgstr "" -#: src/dird/ua_cmds.c:187 -msgid "Umount - for old-time Unix guys, see unmount" +#: src/stored/btape.c:1368 +#, c-format +msgid "Read record failed! ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:190 -msgid "Update volume, pool or stats" +#: src/stored/btape.c:1379 +#, c-format +msgid "Block %d re-read correctly.\n" msgstr "" -#: src/dird/ua_cmds.c:196 -msgid "Use catalog xxx" +#: src/stored/btape.c:1400 +msgid "" +"\n" +"\n" +"=== Append files test ===\n" +"\n" +"This test is essential to Bacula.\n" +"\n" +"I'm going to write one record in file 0,\n" +" two records in file 1,\n" +" and three records in file 2\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:197 -msgid "Does variable expansion" +#: src/stored/btape.c:1424 +msgid "Now moving to end of medium.\n" msgstr "" -#: src/dird/ua_cmds.c:198 -msgid "Print Director version" +#: src/stored/btape.c:1426 src/stored/btape.c:1655 +#, c-format +msgid "We should be in file 3. I am at file %d. %s\n" msgstr "" -#: src/dird/ua_cmds.c:199 -msgid "Wait until no jobs are running" +#: src/stored/btape.c:1427 src/stored/btape.c:1445 src/stored/btape.c:1644 +#: src/stored/btape.c:1656 src/stored/btape.c:1669 src/stored/btape.c:1686 +msgid "This is correct!" msgstr "" -#: src/dird/ua_cmds.c:247 -#, c-format -msgid "%s: is an invalid command.\n" +#: src/stored/btape.c:1427 src/stored/btape.c:1445 src/stored/btape.c:1644 +#: src/stored/btape.c:1656 src/stored/btape.c:1669 src/stored/btape.c:1686 +msgid "This is NOT correct!!!!" msgstr "" -#: src/dird/ua_cmds.c:288 +#: src/stored/btape.c:1433 msgid "" -"You probably don't want to be using this command since it\n" -"creates database records without labeling the Volumes.\n" -"You probably want to use the \"label\" command.\n" +"\n" +"Now the important part, I am going to attempt to append to the tape.\n" "\n" msgstr "" -#: src/dird/ua_cmds.c:306 -#, c-format -msgid "Pool already has maximum volumes=%d\n" +#: src/stored/btape.c:1440 +msgid "" +"Done appending, there should be no I/O errors\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:307 -msgid "Enter new maximum (zero for unlimited): " +#: src/stored/btape.c:1441 +msgid "Doing Bacula scan of blocks:\n" msgstr "" -#: src/dird/ua_cmds.c:327 -#, c-format -msgid "Enter number of Volumes to create. 0=>fixed name. Max=%d: " +#: src/stored/btape.c:1443 +msgid "End scanning the tape.\n" msgstr "" -#: src/dird/ua_cmds.c:333 +#: src/stored/btape.c:1444 src/stored/btape.c:1668 #, c-format -msgid "The number must be between 0 and %d\n" -msgstr "" - -#: src/dird/ua_cmds.c:341 -msgid "Enter Volume name: " -msgstr "" - -#: src/dird/ua_cmds.c:345 -msgid "Enter base volume name: " -msgstr "" - -#: src/dird/ua_cmds.c:354 src/dird/ua_label.c:663 -msgid "Volume name too long.\n" +msgid "We should be in file 4. I am at file %d. %s\n" msgstr "" -#: src/dird/ua_cmds.c:358 src/dird/ua_label.c:669 src/lib/edit.c:501 -msgid "Volume name must be at least one character long.\n" +#: src/stored/btape.c:1469 +msgid "" +"\n" +"Autochanger enabled, but no name or no command device specified.\n" msgstr "" -#: src/dird/ua_cmds.c:369 -msgid "Enter the starting number: " +#: src/stored/btape.c:1473 +msgid "" +"\n" +"Ah, I see you have an autochanger configured.\n" +"To test the autochanger you must have a blank tape\n" +" that I can write on in Slot 1.\n" msgstr "" -#: src/dird/ua_cmds.c:374 -msgid "Start number must be greater than zero.\n" +#: src/stored/btape.c:1476 +msgid "" +"\n" +"Do you wish to continue with the Autochanger test? (y/n): " msgstr "" -#: src/dird/ua_cmds.c:385 -msgid "Enter slot (0 for none): " +#: src/stored/btape.c:1483 +msgid "" +"\n" +"\n" +"=== Autochanger test ===\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:389 -msgid "InChanger? yes/no: " +#: src/stored/btape.c:1492 +msgid "3301 Issuing autochanger \"loaded\" command.\n" msgstr "" -#: src/dird/ua_cmds.c:414 +#: src/stored/btape.c:1501 #, c-format -msgid "%d Volumes created in pool %s\n" +msgid "3991 Bad autochanger command: %s\n" msgstr "" -#: src/dird/ua_cmds.c:430 src/dird/ua_cmds.c:1032 -msgid "Turn on or off? " +#: src/stored/btape.c:1502 +#, c-format +msgid "3991 result=\"%s\": ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:544 +#: src/stored/btape.c:1506 #, c-format -msgid "" -"Can't set %s RecyclePool to %s, %s is not in database.\n" -"Try to update it with 'update pool=%s'\n" +msgid "Slot %d loaded. I am going to unload it.\n" msgstr "" -#: src/dird/ua_cmds.c:562 -#, c-format -msgid "" -"Can't set %s ScratchPool to %s, %s is not in database.\n" -"Try to update it with 'update pool=%s'\n" +#: src/stored/btape.c:1508 +msgid "Nothing loaded in the drive. OK.\n" msgstr "" -#: src/dird/ua_cmds.c:631 +#: src/stored/btape.c:1515 #, c-format -msgid "" -"Error: Pool %s already exists.\n" -"Use update to change it.\n" +msgid "3302 Issuing autochanger \"unload %d %d\" command.\n" msgstr "" -#: src/dird/ua_cmds.c:642 +#: src/stored/btape.c:1520 #, c-format -msgid "Pool %s created.\n" +msgid "unload status=%s %d\n" msgstr "" -#: src/dird/ua_cmds.c:672 -msgid "Python interpreter restarted.\n" +#: src/stored/btape.c:1520 src/lib/util.c:177 src/lib/util.c:309 +#: src/dird/ua_status.c:1093 src/lib/status.h:115 +msgid "OK" msgstr "" -#: src/dird/ua_cmds.c:675 src/dird/ua_cmds.c:1337 -msgid "Nothing done.\n" +#: src/stored/btape.c:1520 +msgid "Bad" msgstr "" -#: src/dird/ua_cmds.c:699 src/dird/ua_cmds.c:1083 src/dird/ua_run.c:1588 +#: src/stored/btape.c:1523 #, c-format -msgid "Client \"%s\" not found.\n" +msgid "3992 Bad autochanger command: %s\n" msgstr "" -#: src/dird/ua_cmds.c:708 +#: src/stored/btape.c:1524 #, c-format -msgid "Client \"%s\" address set to %s\n" +msgid "3992 result=\"%s\": ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:742 +#: src/stored/btape.c:1534 #, c-format -msgid "Job \"%s\" %sabled\n" -msgstr "" - -#: src/dird/ua_cmds.c:920 -msgid "Enter new debug level: " +msgid "3303 Issuing autochanger \"load %d %d\" command.\n" msgstr "" -#: src/dird/ua_cmds.c:997 -msgid "All" +#: src/stored/btape.c:1542 +#, c-format +msgid "3303 Autochanger \"load %d %d\" status is OK.\n" msgstr "" -#: src/dird/ua_cmds.c:998 -msgid "Select daemon type to set debug level" +#: src/stored/btape.c:1546 +#, c-format +msgid "3993 Bad autochanger command: %s\n" msgstr "" -#: src/dird/ua_cmds.c:1087 src/dird/ua_cmds.c:1972 +#: src/stored/btape.c:1547 #, c-format -msgid "No authorization for Client \"%s\"\n" +msgid "3993 result=\"%s\": ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:1092 -msgid "Client name missing.\n" +#: src/stored/btape.c:1562 +msgid "" +"\n" +"The test failed, probably because you need to put\n" +"a longer sleep time in the mtx-script in the load) case.\n" +"Adding a 30 second sleep and trying again ...\n" msgstr "" -#: src/dird/ua_cmds.c:1104 src/dird/ua_cmds.c:1171 src/dird/ua_cmds.c:1994 +#: src/stored/btape.c:1575 #, c-format -msgid "No authorization for Job \"%s\"\n" -msgstr "" - -#: src/dird/ua_cmds.c:1109 -msgid "Job name missing.\n" +msgid "Wrote EOF to %s\n" msgstr "" -#: src/dird/ua_cmds.c:1118 +#: src/stored/btape.c:1579 #, c-format -msgid "Fileset \"%s\" not found.\n" +msgid "" +"\n" +"The test worked this time. Please add:\n" +"\n" +" sleep %d\n" +"\n" +"to your mtx-changer script in the load) case.\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:1122 -#, c-format -msgid "No authorization for FileSet \"%s\"\n" +#: src/stored/btape.c:1584 +msgid "" +"\n" +"The test autochanger worked!!\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:1127 -msgid "Fileset name missing.\n" +#: src/stored/btape.c:1595 +msgid "You must correct this error or the Autochanger will not work.\n" msgstr "" -#: src/dird/ua_cmds.c:1138 src/dird/ua_run.c:550 -#, c-format -msgid "Level \"%s\" not valid.\n" -msgstr "" - -#: src/dird/ua_cmds.c:1142 -msgid "Level value missing.\n" -msgstr "" - -#: src/dird/ua_cmds.c:1149 -msgid "Invalid value for accurate. It must be yes or no.\n" -msgstr "" - -#: src/dird/ua_cmds.c:1154 -msgid "Accurate value missing.\n" -msgstr "" - -#: src/dird/ua_cmds.c:1167 -msgid "No job specified.\n" -msgstr "" - -#: src/dird/ua_cmds.c:1227 -msgid "Error sending include list.\n" -msgstr "" - -#: src/dird/ua_cmds.c:1232 -msgid "Error sending exclude list.\n" -msgstr "" - -#: src/dird/ua_cmds.c:1323 -msgid "" -"In general it is not a good idea to delete either a\n" -"Pool or a Volume since they may contain data.\n" -"\n" -msgstr "" - -#: src/dird/ua_cmds.c:1326 -msgid "Choose catalog item to delete" -msgstr "" - -#: src/dird/ua_cmds.c:1376 src/dird/ua_cmds.c:1391 src/dird/ua_cmds.c:1401 -#, c-format -msgid "Illegal JobId %s ignored\n" -msgstr "" - -#: src/dird/ua_cmds.c:1404 -msgid "Enter JobId to delete: " -msgstr "" - -#: src/dird/ua_cmds.c:1440 -#, c-format -msgid "Are you sure you want to delete %d JobIds ? (yes/no): " -msgstr "" - -#: src/dird/ua_cmds.c:1450 -#, c-format -msgid "Illegal JobId range %s - %s should define increasing JobIds, ignored\n" -msgstr "" - -#: src/dird/ua_cmds.c:1454 -#, c-format -msgid "Illegal JobId range %s - %s, ignored\n" -msgstr "" - -#: src/dird/ua_cmds.c:1469 -#, c-format -msgid "Jobid %s and associated records deleted from the catalog.\n" -msgstr "" - -#: src/dird/ua_cmds.c:1484 -#, c-format -msgid "" -"\n" -"This command will delete volume %s\n" -"and all Jobs saved on that volume from the Catalog\n" -msgstr "" - -#: src/dird/ua_cmds.c:1491 -#, c-format -msgid "Are you sure you want to delete Volume \"%s\"? (yes/no): " -msgstr "" - -#: src/dird/ua_cmds.c:1504 -msgid "Can't list jobs on this volume\n" -msgstr "" - -#: src/dird/ua_cmds.c:1529 -#, c-format -msgid "Are you sure you want to delete Pool \"%s\"? (yes/no): " -msgstr "" - -#: src/dird/ua_cmds.c:1644 -#, c-format -msgid "Using Catalog name=%s DB=%s\n" -msgstr "" - -#: src/dird/ua_cmds.c:1712 -msgid "ERR: Can't open db\n" -msgstr "" - -#: src/dird/ua_cmds.c:1759 -msgid "Wait on mount timed out\n" -msgstr "" - -#: src/dird/ua_cmds.c:1769 -msgid "ERR: Job was not found\n" -msgstr "" - -#: src/dird/ua_cmds.c:1845 -msgid "" -" Command Description\n" -" ======= ===========\n" -msgstr "" - -#: src/dird/ua_cmds.c:1849 -#, c-format -msgid "" -" %-13s %s\n" -"\n" -"Arguments:\n" -"\t%s\n" -msgstr "" - -#: src/dird/ua_cmds.c:1854 -#, c-format -msgid " %-13s %s\n" -msgstr "" - -#: src/dird/ua_cmds.c:1858 -#, c-format -msgid "" -"\n" -"Can't find %s command.\n" -"\n" -msgstr "" - -#: src/dird/ua_cmds.c:1860 -msgid "" -"\n" -"When at a prompt, entering a period cancels the command.\n" -"\n" -msgstr "" - -#: src/dird/ua_cmds.c:1896 src/filed/status.c:85 -#, c-format -msgid "%s Version: %s (%s) %s %s %s %s\n" -msgstr "" - -#: src/dird/ua_cmds.c:1955 src/dird/ua_cmds.c:1982 src/dird/ua_cmds.c:2004 -#, c-format -msgid "No authorization for Catalog \"%s\"\n" -msgstr "" - -#: src/dird/ua_cmds.c:2049 -#, c-format -msgid "Could not open catalog database \"%s\".\n" -msgstr "" - -#: src/dird/ua_cmds.c:2059 -#, c-format -msgid "Using Catalog \"%s\"\n" -msgstr "" - -#: src/dird/ua_tree.c:74 -msgid "add dir/file to be restored recursively, wildcards allowed" -msgstr "" - -#: src/dird/ua_tree.c:75 -msgid "change current directory" -msgstr "" - -#: src/dird/ua_tree.c:76 -msgid "count marked files in and below the cd" -msgstr "" - -#: src/dird/ua_tree.c:77 -msgid "delete dir/file to be restored recursively in dir" -msgstr "" - -#: src/dird/ua_tree.c:78 src/dird/ua_tree.c:79 -msgid "long list current directory, wildcards allowed" -msgstr "" - -#: src/dird/ua_tree.c:80 -msgid "leave file selection mode" -msgstr "" - -#: src/dird/ua_tree.c:81 -msgid "estimate restore size" -msgstr "" - -#: src/dird/ua_tree.c:82 -msgid "same as done command" -msgstr "" - -#: src/dird/ua_tree.c:83 -msgid "find files, wildcards allowed" -msgstr "" - -#: src/dird/ua_tree.c:84 src/dird/ua_tree.c:97 src/dird/ua_tree.c:98 -msgid "print help" -msgstr "" - -#: src/dird/ua_tree.c:85 src/dird/ua_tree.c:86 -msgid "list current directory, wildcards allowed" -msgstr "" - -#: src/dird/ua_tree.c:87 -msgid "list subdir in current directory, wildcards allowed" -msgstr "" - -#: src/dird/ua_tree.c:88 -msgid "list the marked files in and below the cd" -msgstr "" - -#: src/dird/ua_tree.c:89 -msgid "list the marked files in" -msgstr "" - -#: src/dird/ua_tree.c:90 -msgid "mark dir/file to be restored recursively, wildcards allowed" -msgstr "" - -#: src/dird/ua_tree.c:91 -msgid "mark directory name to be restored (no files)" -msgstr "" - -#: src/dird/ua_tree.c:92 src/dird/ua_tree.c:93 -msgid "print current working directory" -msgstr "" - -#: src/dird/ua_tree.c:94 -msgid "unmark dir/file to be restored recursively in dir" -msgstr "" - -#: src/dird/ua_tree.c:95 -msgid "unmark directory name only no recursion" -msgstr "" - -#: src/dird/ua_tree.c:96 -msgid "quit and do not do restore" -msgstr "" - -#: src/dird/ua_tree.c:118 -msgid "" -"\n" -"You are now entering file selection mode where you add (mark) and\n" -"remove (unmark) files to be restored. No files are initially added, unless\n" -"you used the \"all\" keyword on the command line.\n" -"Enter \"done\" to leave this mode.\n" -"\n" -msgstr "" - -#: src/dird/ua_tree.c:129 src/dird/ua_tree.c:831 -#, c-format -msgid "cwd is: %s\n" -msgstr "" - -#: src/dird/ua_tree.c:138 src/dird/ua_tree.c:157 -#, c-format -msgid "Invalid command \"%s\". Enter \"done\" to exit.\n" -msgstr "" - -#: src/dird/ua_tree.c:227 -#, c-format -msgid "" -"Something is wrong with the Delta sequence of %s, skiping new parts. Current " -"sequence is %d\n" -msgstr "" - -#: src/dird/ua_tree.c:373 src/dird/ua_tree.c:385 src/dird/ua_tree.c:402 -msgid "No files marked.\n" -msgstr "" - -#: src/dird/ua_tree.c:387 -msgid "1 file marked.\n" -msgstr "" - -#: src/dird/ua_tree.c:389 -#, c-format -msgid "%s files marked.\n" -msgstr "" - -#: src/dird/ua_tree.c:417 -msgid "No directories marked.\n" -msgstr "" - -#: src/dird/ua_tree.c:419 -msgid "1 directory marked.\n" -msgstr "" - -#: src/dird/ua_tree.c:421 -#, c-format -msgid "%s directories marked.\n" -msgstr "" - -#: src/dird/ua_tree.c:442 -#, c-format -msgid "%s total files/dirs. %s marked to be restored.\n" -msgstr "" - -#: src/dird/ua_tree.c:453 -msgid "No file specification given.\n" -msgstr "" - -#: src/dird/ua_tree.c:674 -#, c-format -msgid "Node %s has no children.\n" -msgstr "" - -#: src/dird/ua_tree.c:767 -#, c-format -msgid "%d total files; %d marked to be restored; %s bytes.\n" -msgstr "" - -#: src/dird/ua_tree.c:778 src/stored/btape.c:2949 -#, c-format -msgid "" -" Command Description\n" -" ======= ===========\n" -msgstr "" - -#: src/dird/ua_tree.c:801 -msgid "Too few or too many arguments. Try using double quotes.\n" -msgstr "" - -#: src/dird/ua_tree.c:814 -msgid "Invalid path given.\n" -msgstr "" - -#: src/dird/ua_tree.c:850 src/dird/ua_tree.c:862 -msgid "No files unmarked.\n" -msgstr "" - -#: src/dird/ua_tree.c:864 -msgid "1 file unmarked.\n" -msgstr "" - -#: src/dird/ua_tree.c:867 -#, c-format -msgid "%s files unmarked.\n" -msgstr "" - -#: src/dird/ua_tree.c:878 src/dird/ua_tree.c:895 -msgid "No directories unmarked.\n" -msgstr "" - -#: src/dird/ua_tree.c:897 -msgid "1 directory unmarked.\n" -msgstr "" - -#: src/dird/ua_tree.c:899 -#, c-format -msgid "%d directories unmarked.\n" -msgstr "" - -#: src/dird/dird_conf.c:567 src/tray-monitor/tray_conf.c:168 -#: src/qt-console/tray-monitor/tray_conf.cpp:168 -#, c-format -msgid "No %s resource defined\n" -msgstr "" - -#: src/dird/dird_conf.c:576 -#, c-format -msgid "Director: name=%s MaxJobs=%d FDtimeout=%s SDtimeout=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:581 -#, c-format -msgid " query_file=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:584 src/dird/dird_conf.c:604 src/dird/dird_conf.c:621 -#: src/dird/dird_conf.c:689 src/dird/dird_conf.c:693 src/dird/dird_conf.c:697 -#: src/dird/dird_conf.c:730 src/dird/dird_conf.c:753 src/dird/dird_conf.c:757 -#: src/dird/dird_conf.c:761 src/dird/dird_conf.c:765 src/dird/dird_conf.c:769 -#: src/dird/dird_conf.c:782 src/dird/dird_conf.c:1018 -#: src/dird/dird_conf.c:1025 -msgid " --> " -msgstr "" - -#: src/dird/dird_conf.c:589 -#, c-format -msgid "Console: name=%s SSL=%d\n" -msgstr "" - -#: src/dird/dird_conf.c:594 -#, c-format -msgid "Counter: name=%s min=%d max=%d cur=%d wrapcntr=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:599 -#, c-format -msgid "Counter: name=%s min=%d max=%d\n" -msgstr "" - -#: src/dird/dird_conf.c:613 -#, c-format -msgid "Client: name=%s address=%s FDport=%d MaxJobs=%u\n" -msgstr "" - -#: src/dird/dird_conf.c:616 -#, c-format -msgid " JobRetention=%s FileRetention=%s AutoPrune=%d\n" -msgstr "" - -#: src/dird/dird_conf.c:629 -#, c-format -msgid "" -"Device: name=%s ok=%d num_writers=%d max_writers=%d\n" -" reserved=%d open=%d append=%d read=%d labeled=%d offline=%d autochgr=" -"%d\n" -" poolid=%s volname=%s MediaType=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:643 -#, c-format -msgid "" -"Storage: name=%s address=%s SDport=%d MaxJobs=%u\n" -" DeviceName=%s MediaType=%s StorageId=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:656 -#, c-format -msgid "" -"Catalog: name=%s address=%s DBport=%d db_name=%s\n" -" db_driver=%s db_user=%s MutliDBConn=%d\n" -msgstr "" - -#: src/dird/dird_conf.c:669 -#, c-format -msgid "%s: name=%s JobType=%d level=%s Priority=%d Enabled=%d\n" -msgstr "" - -#: src/dird/dird_conf.c:670 -msgid "JobDefs" -msgstr "" - -#: src/dird/dird_conf.c:674 -#, c-format -msgid "" -" MaxJobs=%u Resched=%d Times=%d Interval=%s Spool=%d WritePartAfterJob=" -"%d\n" -msgstr "" - -#: src/dird/dird_conf.c:680 -#, c-format -msgid " SpoolSize=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:683 -#, c-format -msgid " Accurate=%d\n" -msgstr "" - -#: src/dird/dird_conf.c:686 -#, c-format -msgid " SelectionType=%d\n" -msgstr "" - -#: src/dird/dird_conf.c:701 -#, c-format -msgid " --> Where=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:704 -#, c-format -msgid " --> RegexWhere=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:707 -#, c-format -msgid " --> Bootstrap=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:710 -#, c-format -msgid " --> WriteBootstrap=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:713 -#, c-format -msgid " --> PluginOptions=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:716 -#, c-format -msgid " --> MaxRunTime=%u\n" -msgstr "" - -#: src/dird/dird_conf.c:719 -#, c-format -msgid " --> MaxWaitTime=%u\n" -msgstr "" - -#: src/dird/dird_conf.c:722 -#, c-format -msgid " --> MaxStartDelay=%u\n" -msgstr "" - -#: src/dird/dird_conf.c:725 -#, c-format -msgid " --> MaxRunSchedTime=%u\n" -msgstr "" - -#: src/dird/dird_conf.c:737 -#, c-format -msgid " --> Base %s\n" -msgstr "" - -#: src/dird/dird_conf.c:743 src/lib/runscript.c:297 -msgid " --> RunScript\n" -msgstr "" - -#: src/dird/dird_conf.c:744 src/lib/runscript.c:298 -#, c-format -msgid " --> Command=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:745 src/lib/runscript.c:299 -#, c-format -msgid " --> Target=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:746 src/lib/runscript.c:300 -#, c-format -msgid " --> RunOnSuccess=%u\n" -msgstr "" - -#: src/dird/dird_conf.c:747 src/lib/runscript.c:301 -#, c-format -msgid " --> RunOnFailure=%u\n" -msgstr "" - -#: src/dird/dird_conf.c:748 src/lib/runscript.c:302 -#, c-format -msgid " --> FailJobOnError=%u\n" -msgstr "" - -#: src/dird/dird_conf.c:749 src/lib/runscript.c:303 -#, c-format -msgid " --> RunWhen=%u\n" -msgstr "" - -#: src/dird/dird_conf.c:775 -#, c-format -msgid " --> Run=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:779 -#, c-format -msgid " --> SelectionPattern=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:793 -#, c-format -msgid "FileSet: name=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:887 src/dird/dird_conf.c:966 -#, c-format -msgid "Schedule: name=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:892 -#, c-format -msgid " --> Run Level=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:893 -msgid " hour=" -msgstr "" - -#: src/dird/dird_conf.c:902 -msgid " mday=" -msgstr "" - -#: src/dird/dird_conf.c:911 -msgid " month=" -msgstr "" - -#: src/dird/dird_conf.c:920 -msgid " wday=" -msgstr "" - -#: src/dird/dird_conf.c:929 -msgid " wom=" -msgstr "" - -#: src/dird/dird_conf.c:938 -msgid " woy=" -msgstr "" - -#: src/dird/dird_conf.c:947 -#, c-format -msgid " mins=%d\n" -msgstr "" - -#: src/dird/dird_conf.c:949 src/dird/dird_conf.c:953 src/dird/dird_conf.c:957 -msgid " --> " -msgstr "" - -#: src/dird/dird_conf.c:974 -#, c-format -msgid "Pool: name=%s PoolType=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:976 -#, c-format -msgid " use_cat=%d use_once=%d cat_files=%d\n" -msgstr "" - -#: src/dird/dird_conf.c:979 -#, c-format -msgid " max_vols=%d auto_prune=%d VolRetention=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:982 -#, c-format -msgid " VolUse=%s recycle=%d LabelFormat=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:986 -#, c-format -msgid " CleaningPrefix=%s LabelType=%d\n" -msgstr "" - -#: src/dird/dird_conf.c:988 -#, c-format -msgid " RecyleOldest=%d PurgeOldest=%d ActionOnPurge=%d\n" -msgstr "" - -#: src/dird/dird_conf.c:992 -#, c-format -msgid " MaxVolJobs=%d MaxVolFiles=%d MaxVolBytes=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:996 -#, c-format -msgid " MigTime=%s MigHiBytes=%s MigLoBytes=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:1000 -#, c-format -msgid " JobRetention=%s FileRetention=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:1004 -#, c-format -msgid " NextPool=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:1007 -#, c-format -msgid " RecyclePool=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:1010 -#, c-format -msgid " ScratchPool=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:1013 -#, c-format -msgid " Catalog=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:1033 -#, c-format -msgid "Messages: name=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:1035 -#, c-format -msgid " mailcmd=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:1037 -#, c-format -msgid " opcmd=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:1041 src/tray-monitor/tray_conf.c:199 -#: src/qt-console/tray-monitor/tray_conf.cpp:199 -#, c-format -msgid "Unknown resource type %d in dump_resource.\n" -msgstr "" - -#: src/dird/dird_conf.c:1372 src/tray-monitor/tray_conf.c:257 -#: src/qt-console/tray-monitor/tray_conf.cpp:257 -#, c-format -msgid "Unknown resource type %d in free_resource.\n" -msgstr "" - -#: src/dird/dird_conf.c:1404 src/dird/dird_conf.c:1419 -#: src/tray-monitor/tray_conf.c:288 src/wx-console/console_conf.c:265 -#: src/console/console_conf.c:259 src/filed/filed_conf.c:361 -#: src/qt-console/tray-monitor/tray_conf.cpp:288 -#: src/qt-console/bat_conf.cpp:265 -#, c-format -msgid "%s item is required in %s resource, but not found.\n" -msgstr "" - -#: src/dird/dird_conf.c:1410 src/tray-monitor/tray_conf.c:294 -#: src/lib/parse_conf.c:225 src/qt-console/tray-monitor/tray_conf.cpp:294 -#, c-format -msgid "Too many items in %s resource\n" -msgstr "" - -#: src/dird/dird_conf.c:1450 -#, c-format -msgid "Cannot find Pool resource %s\n" -msgstr "" - -#: src/dird/dird_conf.c:1461 -#, c-format -msgid "Cannot find Console resource %s\n" -msgstr "" - -#: src/dird/dird_conf.c:1467 src/stored/stored_conf.c:611 -#: src/filed/filed_conf.c:381 -#, c-format -msgid "Cannot find Director resource %s\n" -msgstr "" - -#: src/dird/dird_conf.c:1474 src/stored/stored_conf.c:617 -#, c-format -msgid "Cannot find Storage resource %s\n" -msgstr "" - -#: src/dird/dird_conf.c:1483 -#, c-format -msgid "Cannot find Job resource %s\n" -msgstr "" - -#: src/dird/dird_conf.c:1533 -#, c-format -msgid "Cannot find Counter resource %s\n" -msgstr "" - -#: src/dird/dird_conf.c:1541 src/filed/filed_conf.c:387 -#, c-format -msgid "Cannot find Client resource %s\n" -msgstr "" - -#: src/dird/dird_conf.c:1554 -#, c-format -msgid "Cannot find Schedule resource %s\n" -msgstr "" - -#: src/dird/dird_conf.c:1559 src/dird/dird_conf.c:1619 -#: src/tray-monitor/tray_conf.c:314 src/tray-monitor/tray_conf.c:352 -#: src/qt-console/tray-monitor/tray_conf.cpp:314 -#: src/qt-console/tray-monitor/tray_conf.cpp:352 -#, c-format -msgid "Unknown resource type %d in save_resource.\n" -msgstr "" - -#: src/dird/dird_conf.c:1634 -#, c-format -msgid "Name item is required in %s resource, but not found.\n" -msgstr "" - -#: src/dird/dird_conf.c:1642 src/tray-monitor/tray_conf.c:372 -#: src/wx-console/console_conf.c:328 src/console/console_conf.c:322 -#: src/filed/filed_conf.c:446 src/qt-console/tray-monitor/tray_conf.cpp:372 -#: src/qt-console/bat_conf.cpp:334 -#, c-format -msgid "Attempt to define second %s resource named \"%s\" is not permitted.\n" -msgstr "" - -#: src/dird/dird_conf.c:1647 -#, c-format -msgid "Inserting %s res: %s index=%d pass=%d\n" -msgstr "" - -#: src/dird/dird_conf.c:1660 -#, c-format -msgid "Expected one of: %s, got: %s" -msgstr "" - -#: src/dird/dird_conf.c:1732 -#, c-format -msgid "Expected a Migration Job Type keyword, got: %s" -msgstr "" - -#: src/dird/dird_conf.c:1758 -#, c-format -msgid "Expected a Job Type keyword, got: %s" -msgstr "" - -#: src/dird/dird_conf.c:1782 -#, c-format -msgid "Expected a Job Level keyword, got: %s" -msgstr "" - -#: src/dird/dird_conf.c:1802 -#, c-format -msgid "Expected a Restore replacement option, got: %s" -msgstr "" - -#: src/dird/dird_conf.c:1852 src/dird/dird_conf.c:1968 -#: src/lib/parse_conf.c:761 src/lib/parse_conf.c:777 src/lib/ini.c:593 -#, c-format -msgid "Expect %s, got: %s" -msgstr "" - -#: src/dird/dird_conf.c:1874 src/lib/parse_conf.c:478 -#, c-format -msgid "Could not find config Resource %s referenced on line %d : %s\n" -msgstr "" - -#: src/dird/getmsg.c:176 -#, c-format -msgid "bget_dirmsg: unknown bnet signal %d\n" -msgstr "" - -#: src/dird/getmsg.c:194 src/dird/getmsg.c:200 src/dird/getmsg.c:213 -#: src/dird/getmsg.c:247 src/dird/getmsg.c:269 src/dird/getmsg.c:295 -#, c-format -msgid "Malformed message: %s\n" -msgstr "" - -#: src/dird/getmsg.c:367 -#, c-format -msgid "Bad response to %s command: wanted %s, got %s\n" -msgstr "" - -#: src/dird/getmsg.c:372 -#, c-format -msgid "Socket error on %s command: ERR=%s\n" -msgstr "" - -#: src/dird/ua_restore.c:148 -msgid "\"RegexWhere\" specification not authorized.\n" -msgstr "" - -#: src/dird/ua_restore.c:155 -msgid "\"where\" specification not authorized.\n" -msgstr "" - -#: src/dird/ua_restore.c:177 -msgid "" -"No Restore Job Resource found in bacula-dir.conf.\n" -"You must create at least one before running this command.\n" -msgstr "" - -#: src/dird/ua_restore.c:194 -msgid "Restore not done.\n" -msgstr "" - -#: src/dird/ua_restore.c:205 -msgid "Unable to construct a valid BSR. Cannot continue.\n" -msgstr "" - -#: src/dird/ua_restore.c:209 src/dird/ua_restore.c:221 -msgid "No files selected to be restored.\n" -msgstr "" - -#: src/dird/ua_restore.c:215 -msgid "" -"\n" -"1 file selected to be restored.\n" -"\n" -msgstr "" - -#: src/dird/ua_restore.c:217 -#, c-format +#: src/stored/btape.c:1613 msgid "" "\n" -"%s files selected to be restored.\n" "\n" -msgstr "" - -#: src/dird/ua_restore.c:236 -msgid "No Client resource found!\n" -msgstr "" - -#: src/dird/ua_restore.c:333 -msgid "The restore will use the following job(s) as Base\n" -msgstr "" - -#: src/dird/ua_restore.c:354 -#, c-format -msgid "Missing value for keyword: %s\n" -msgstr "" - -#: src/dird/ua_restore.c:434 -msgid "List last 20 Jobs run" -msgstr "" - -#: src/dird/ua_restore.c:435 -msgid "List Jobs where a given File is saved" -msgstr "" - -#: src/dird/ua_restore.c:436 -msgid "Enter list of comma separated JobIds to select" -msgstr "" - -#: src/dird/ua_restore.c:437 -msgid "Enter SQL list command" -msgstr "" - -#: src/dird/ua_restore.c:438 -msgid "Select the most recent backup for a client" -msgstr "" - -#: src/dird/ua_restore.c:439 -msgid "Select backup for a client before a specified time" -msgstr "" - -#: src/dird/ua_restore.c:440 -msgid "Enter a list of files to restore" -msgstr "" - -#: src/dird/ua_restore.c:441 -msgid "Enter a list of files to restore before a specified time" -msgstr "" - -#: src/dird/ua_restore.c:442 -msgid "Find the JobIds of the most recent backup for a client" -msgstr "" - -#: src/dird/ua_restore.c:443 -msgid "Find the JobIds for a backup for a client before a specified time" -msgstr "" - -#: src/dird/ua_restore.c:444 -msgid "Enter a list of directories to restore for found JobIds" -msgstr "" - -#: src/dird/ua_restore.c:445 -msgid "Select full restore to a specified Job date" -msgstr "" - -#: src/dird/ua_restore.c:446 src/dird/ua_status.c:862 src/stored/status.c:611 -#: src/filed/status.c:373 src/wx-console/wxbconfigpanel.cpp:220 -msgid "Cancel" -msgstr "" - -#: src/dird/ua_restore.c:491 -#, c-format -msgid "Unknown keyword: %s\n" -msgstr "" - -#: src/dird/ua_restore.c:520 src/dird/ua_update.c:957 -#, c-format -msgid "Improper date format: %s\n" -msgstr "" - -#: src/dird/ua_restore.c:560 -#, c-format -msgid "Error: Pool resource \"%s\" access not allowed.\n" -msgstr "" - -#: src/dird/ua_restore.c:576 -msgid "" +"=== Forward space files test ===\n" "\n" -"First you select one or more JobIds that contain files\n" -"to be restored. You will be presented several methods\n" -"of specifying the JobIds. Then you will be allowed to\n" -"select which files from those JobIds are to be restored.\n" +"This test is essential to Bacula.\n" "\n" -msgstr "" - -#: src/dird/ua_restore.c:589 -msgid "To select the JobIds, you have the following choices:\n" -msgstr "" - -#: src/dird/ua_restore.c:594 -msgid "Select item: " -msgstr "" - -#: src/dird/ua_restore.c:599 src/dird/ua_restore.c:634 -msgid "SQL query not authorized.\n" -msgstr "" - -#: src/dird/ua_restore.c:612 -msgid "Enter Filename (no path):" -msgstr "" - -#: src/dird/ua_restore.c:627 src/dird/ua_restore.c:735 -msgid "Enter JobId(s), comma separated, to restore: " -msgstr "" - -#: src/dird/ua_restore.c:637 -msgid "Enter SQL list command: " -msgstr "" - -#: src/dird/ua_restore.c:671 src/dird/ua_restore.c:694 -msgid "" -"Enter file names with paths, or < to enter a filename\n" -"containing a list of file names with paths, and terminate\n" -"them with a blank line.\n" -msgstr "" - -#: src/dird/ua_restore.c:675 src/dird/ua_restore.c:698 -msgid "Enter full filename: " -msgstr "" - -#: src/dird/ua_restore.c:733 -#, c-format -msgid "You have already selected the following JobIds: %s\n" -msgstr "" - -#: src/dird/ua_restore.c:751 -msgid "" -"Enter full directory names or start the name\n" -"with a < to indicate it is a filename containing a list\n" -"of directories and terminate them with a blank line.\n" -msgstr "" - -#: src/dird/ua_restore.c:755 -msgid "Enter directory name: " -msgstr "" - -#: src/dird/ua_restore.c:771 -msgid "Enter JobId to get the state to restore: " -msgstr "" - -#: src/dird/ua_restore.c:784 -#, c-format -msgid "Selecting jobs to build the Full state at %s\n" -msgstr "" - -#: src/dird/ua_restore.c:810 -msgid "Invalid JobId in list.\n" -msgstr "" - -#: src/dird/ua_restore.c:829 -#, c-format -msgid "Access to JobId=%s (Job \"%s\") not authorized. Not selected.\n" -msgstr "" - -#: src/dird/ua_restore.c:842 -msgid "No Jobs selected.\n" -msgstr "" - -#: src/dird/ua_restore.c:847 -#, c-format -msgid "You have selected the following JobIds: %s\n" -msgstr "" - -#: src/dird/ua_restore.c:849 -#, c-format -msgid "You have selected the following JobId: %s\n" -msgstr "" - -#: src/dird/ua_restore.c:859 -msgid "" -"The restored files will the most current backup\n" -"BEFORE the date you specify below.\n" +"I'm going to write five files then test forward spacing\n" "\n" msgstr "" -#: src/dird/ua_restore.c:862 -msgid "Enter date as YYYY-MM-DD HH:MM:SS :" -msgstr "" - -#: src/dird/ua_restore.c:868 -msgid "Improper date format.\n" -msgstr "" - -#: src/dird/ua_restore.c:889 -#, c-format -msgid "Cannot open file %s: ERR=%s\n" -msgstr "" - -#: src/dird/ua_restore.c:897 src/dird/ua_restore.c:901 -#, c-format -msgid "Error occurred on line %d of file \"%s\"\n" -msgstr "" - -#: src/dird/ua_restore.c:945 src/dird/ua_restore.c:973 -#, c-format -msgid "No database record found for: %s\n" -msgstr "" - -#: src/dird/ua_restore.c:961 -msgid "No JobId specified cannot continue.\n" +#: src/stored/btape.c:1638 +msgid "Now forward spacing 1 file.\n" msgstr "" -#: src/dird/ua_restore.c:994 +#: src/stored/btape.c:1640 src/stored/btape.c:1652 src/stored/btape.c:1665 +#: src/stored/btape.c:1683 src/stored/btape.c:1859 #, c-format -msgid "No table found: %s\n" -msgstr "" - -#: src/dird/ua_restore.c:1052 -msgid "" -"\n" -"\n" -"For one or more of the JobIds selected, no files were found,\n" -"so file selection is not possible.\n" -"Most likely your retention policy pruned the files.\n" -msgstr "" - -#: src/dird/ua_restore.c:1055 -msgid "" -"\n" -"Do you want to restore all the files? (yes|no): " -msgstr "" - -#: src/dird/ua_restore.c:1058 -msgid "" -"\n" -"Regexp matching files to restore? (empty to abort): " +msgid "Bad status from fsr. ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:1074 +#: src/stored/btape.c:1643 #, c-format -msgid "Regex compile error: %s\n" +msgid "We should be in file 1. I am at file %d. %s\n" msgstr "" -#: src/dird/ua_restore.c:1137 -#, c-format -msgid "" -"\n" -"Building directory tree for JobId(s) %s ... " +#: src/stored/btape.c:1650 +msgid "Now forward spacing 2 files.\n" msgstr "" -#: src/dird/ua_restore.c:1207 -#, c-format -msgid "" -"\n" -"%s files inserted into the tree and marked for extraction.\n" +#: src/stored/btape.c:1663 +msgid "Now forward spacing 4 files.\n" msgstr "" -#: src/dird/ua_restore.c:1210 -#, c-format +#: src/stored/btape.c:1675 msgid "" -"\n" -"%s files inserted into the tree.\n" -msgstr "" - -#: src/dird/ua_restore.c:1285 -#, c-format -msgid "Error getting FileSet \"%s\": ERR=%s\n" -msgstr "" - -#: src/dird/ua_restore.c:1290 -#, c-format -msgid "FileSet argument: %s\n" +"The test worked this time. Please add:\n" +"\n" +" Fast Forward Space File = no\n" +"\n" +"to your Device resource for this drive.\n" msgstr "" -#: src/dird/ua_restore.c:1302 -#, c-format -msgid "No FileSet found for client \"%s\".\n" +#: src/stored/btape.c:1681 +msgid "Now forward spacing 1 more file.\n" msgstr "" -#: src/dird/ua_restore.c:1308 +#: src/stored/btape.c:1685 #, c-format -msgid "Error getting FileSet record: %s\n" +msgid "We should be in file 5. I am at file %d. %s\n" msgstr "" -#: src/dird/ua_restore.c:1309 +#: src/stored/btape.c:1690 msgid "" -"This probably means you modified the FileSet.\n" -"Continuing anyway.\n" +"\n" +"=== End Forward space files test ===\n" +"\n" msgstr "" -#: src/dird/ua_restore.c:1324 -#, c-format -msgid "Pool \"%s\" not found, using any pool.\n" +#: src/stored/btape.c:1694 +msgid "" +"\n" +"The forward space file test failed.\n" msgstr "" -#: src/dird/ua_restore.c:1351 src/dird/ua_restore.c:1367 -#, c-format -msgid "No Full backup before %s found.\n" +#: src/stored/btape.c:1696 +msgid "" +"You have Fast Forward Space File enabled.\n" +"I am turning it off then retrying the test.\n" msgstr "" -#: src/dird/ua_restore.c:1396 -msgid "No jobs found.\n" +#: src/stored/btape.c:1702 +msgid "" +"You must correct this error or Bacula will not work.\n" +"Some systems, e.g. OpenBSD, require you to set\n" +" Use MTIOCGET= no\n" +"in your device resource. Use with caution.\n" msgstr "" -#: src/dird/ua_restore.c:1517 -#, c-format -msgid "Warning default storage overridden by \"%s\" on command line.\n" +#: src/stored/btape.c:1736 +msgid "" +"\n" +"Append test failed. Attempting again.\n" +"Setting \"Hardware End of Medium = no\n" +" and \"Fast Forward Space File = no\n" +"and retrying append test.\n" +"\n" msgstr "" -#: src/dird/ua_restore.c:1534 -#, c-format -msgid "Using Storage \"%s\" from MediaType \"%s\".\n" +#: src/stored/btape.c:1744 +msgid "" +"\n" +"\n" +"It looks like the test worked this time, please add:\n" +"\n" +" Hardware End of Medium = No\n" +"\n" +" Fast Forward Space File = No\n" +"to your Device resource in the Storage conf file.\n" msgstr "" -#: src/dird/ua_restore.c:1537 -#, c-format -msgid "Storage \"%s\" not found, using Storage \"%s\" from MediaType \"%s\".\n" +#: src/stored/btape.c:1751 +msgid "" +"\n" +"\n" +"That appears *NOT* to have corrected the problem.\n" msgstr "" -#: src/dird/ua_restore.c:1546 -#, c-format +#: src/stored/btape.c:1756 msgid "" "\n" -"Unable to find Storage resource for\n" -"MediaType \"%s\", needed by the Jobs you selected.\n" +"\n" +"It looks like the append failed. Attempting again.\n" +"Setting \"BSF at EOM = yes\" and retrying append test.\n" msgstr "" -#: src/dird/fd_cmds.c:95 -msgid "Client: " +#: src/stored/btape.c:1761 +msgid "" +"\n" +"\n" +"It looks like the test worked this time, please add:\n" +"\n" +" Hardware End of Medium = No\n" +" Fast Forward Space File = No\n" +" BSF at EOM = yes\n" +"\n" +"to your Device resource in the Storage conf file.\n" msgstr "" -#: src/dird/fd_cmds.c:137 -#, c-format -msgid "File daemon \"%s\" rejected Job command: %s\n" +#: src/stored/btape.c:1772 +msgid "" +"\n" +"Append test failed.\n" +"\n" +"\n" +"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n" +"Unable to correct the problem. You MUST fix this\n" +"problem before Bacula can use your tape drive correctly\n" +"\n" +"Perhaps running Bacula in fixed block mode will work.\n" +"Do so by setting:\n" +"\n" +"Minimum Block Size = nnn\n" +"Maximum Block Size = nnn\n" +"\n" +"in your Storage daemon's Device definition.\n" +"nnn must match your tape driver's block size, which\n" +"can be determined by reading your tape manufacturers\n" +"information, and the information on your kernel dirver.\n" +"Fixed block sizes, however, are not normally an ideal solution.\n" +"\n" +"Some systems, e.g. OpenBSD, require you to set\n" +" Use MTIOCGET= no\n" +"in your device resource. Use with caution.\n" msgstr "" -#: src/dird/fd_cmds.c:150 -#, c-format -msgid "Error updating Client record. ERR=%s\n" +#: src/stored/btape.c:1794 +msgid "" +"\n" +"The above Bacula scan should have output identical to what follows.\n" +"Please double check it ...\n" +"=== Sample correct output ===\n" +"1 block of 64448 bytes in file 1\n" +"End of File mark.\n" +"2 blocks of 64448 bytes in file 2\n" +"End of File mark.\n" +"3 blocks of 64448 bytes in file 3\n" +"End of File mark.\n" +"1 block of 64448 bytes in file 4\n" +"End of File mark.\n" +"Total files=4, blocks=7, bytes = 451,136\n" +"=== End sample correct output ===\n" +"\n" +"If the above scan output is not identical to the\n" +"sample output, you MUST correct the problem\n" +"or Bacula will not be able to write multiple Jobs to \n" +"the tape.\n" +"\n" msgstr "" -#: src/dird/fd_cmds.c:155 +#: src/stored/btape.c:1837 #, c-format -msgid "FD gave bad response to JobId command: %s\n" -msgstr "" - -#: src/dird/fd_cmds.c:184 src/dird/fd_cmds.c:272 -msgid ", since=" +msgid "Bad status from fsf. ERR=%s\n" msgstr "" -#: src/dird/fd_cmds.c:249 -msgid "No prior or suitable Full backup found in catalog. Doing FULL backup.\n" +#: src/stored/btape.c:1841 +msgid "Forward spaced 1 file.\n" msgstr "" -#: src/dird/fd_cmds.c:250 src/dird/fd_cmds.c:256 src/dird/fd_cmds.c:265 +#: src/stored/btape.c:1844 #, c-format -msgid " (upgraded from %s)" +msgid "Forward spaced %d files.\n" msgstr "" -#: src/dird/fd_cmds.c:255 -msgid "" -"No prior or suitable Differential backup found in catalog. Doing " -"Differential backup.\n" +#: src/stored/btape.c:1863 +msgid "Forward spaced 1 record.\n" msgstr "" -#: src/dird/fd_cmds.c:263 +#: src/stored/btape.c:1866 #, c-format -msgid "Prior failed job found in catalog. Upgrading to %s.\n" +msgid "Forward spaced %d records.\n" msgstr "" -#: src/dird/fd_cmds.c:328 +#: src/stored/btape.c:1911 #, c-format -msgid "Unimplemented backup level %d %c\n" +msgid "Wrote one record of %d bytes.\n" msgstr "" -#: src/dird/fd_cmds.c:401 -msgid "" -"FD compression disabled for this Job because AllowCompress=No in Storage " -"resource.\n" +#: src/stored/btape.c:1913 +msgid "Wrote block to device.\n" msgstr "" -#: src/dird/fd_cmds.c:500 src/filed/job.c:854 -#, c-format -msgid "Cannot run program: %s. ERR=%s\n" +#: src/stored/btape.c:1927 +msgid "Enter length to read: " msgstr "" -#: src/dird/fd_cmds.c:511 src/dird/fd_cmds.c:536 src/dird/fd_cmds.c:550 -msgid ">filed: write error on socket\n" +#: src/stored/btape.c:1932 +msgid "Bad length entered, using default of 1024 bytes.\n" msgstr "" -#: src/dird/fd_cmds.c:517 +#: src/stored/btape.c:1941 #, c-format -msgid "Error running program: %s. ERR=%s\n" +msgid "Read of %d bytes gives stat=%d. ERR=%s\n" msgstr "" -#: src/dird/fd_cmds.c:526 +#: src/stored/btape.c:1964 src/stored/btape.c:2013 #, c-format -msgid "Cannot open included file: %s. ERR=%s\n" +msgid "End of tape\n" msgstr "" -#: src/dird/fd_cmds.c:672 +#: src/stored/btape.c:1969 #, c-format -msgid "Client \"%s\" RunScript failed.\n" +msgid "Starting scan at file %u\n" msgstr "" -#: src/dird/fd_cmds.c:695 +#: src/stored/btape.c:1974 src/stored/tape_dev.c:613 #, c-format -msgid "" -"Client \"%s\" may not be used to restore this job. Please upgrade your " -"client.\n" +msgid "read error on %s. ERR=%s.\n" msgstr "" -#: src/dird/fd_cmds.c:770 -msgid "RestoreObject failed.\n" +#: src/stored/btape.c:1976 +#, c-format +msgid "Bad status from read %d. ERR=%s\n" msgstr "" -#: src/dird/fd_cmds.c:806 +#: src/stored/btape.c:1979 src/stored/btape.c:1993 src/stored/btape.c:2057 +#: src/stored/btape.c:2069 src/stored/btape.c:2082 src/stored/btape.c:2098 #, c-format -msgid "" -" \n" +" -b specify bootstrap file\n" +" -c set configuration file to file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -p proceed inspite of I/O errors\n" +" -s turn off signals\n" +" -v be verbose\n" +" -? print this message.\n" +"\n" msgstr "" -#: src/dird/ua_update.c:229 +#: src/stored/btape.c:3045 #, c-format -msgid "Invalid max. bytes specification: %s\n" +msgid "Mount second Volume on device %s and press return when ready: " msgstr "" -#: src/dird/ua_update.c:237 +#: src/stored/btape.c:3048 src/stored/bls.c:478 src/stored/bextract.c:609 +#: src/stored/bscan.c:1354 src/stored/bcopy.c:365 #, c-format -msgid "New Max bytes is: %s\n" -msgstr "" - -#: src/dird/ua_update.c:248 src/dird/ua_update.c:268 -msgid "Invalid value. It must be yes or no.\n" +msgid "Mount Volume \"%s\" on device %s and press return when ready: " msgstr "" -#: src/dird/ua_update.c:256 +#: src/stored/btape.c:3073 #, c-format -msgid "New Recycle flag is: %s\n" -msgstr "" - -#: src/dird/ua_update.c:257 src/dird/ua_update.c:277 src/dird/ua_update.c:699 -#: src/dird/ua_run.c:180 src/dird/backup.c:788 src/dird/backup.c:789 -#: src/dird/backup.c:790 src/dird/ua_input.c:131 src/stored/parse_bsr.c:863 -#: src/tools/dbcheck.c:1352 -msgid "yes" -msgstr "" - -#: src/dird/ua_update.c:257 src/dird/ua_update.c:277 src/dird/ua_update.c:699 -#: src/dird/ua_run.c:200 src/dird/backup.c:788 src/dird/backup.c:789 -#: src/dird/backup.c:790 src/dird/ua_input.c:135 src/stored/parse_bsr.c:863 -msgid "no" +msgid "Mount blank Volume on device %s and press return when ready: " msgstr "" -#: src/dird/ua_update.c:276 +#: src/stored/btape.c:3093 #, c-format -msgid "New InChanger flag is: %s\n" +msgid "End of Volume \"%s\" %d records.\n" msgstr "" -#: src/dird/ua_update.c:294 +#: src/stored/btape.c:3107 #, c-format -msgid "Invalid slot, it must be between 0 and MaxVols=%d\n" +msgid "Read block=%u, VolBytes=%s rate=%sB/s\n" msgstr "" -#: src/dird/ua_update.c:304 src/dird/ua_update.c:728 +#: src/stored/btape.c:3120 #, c-format -msgid "Error updating media record Slot: ERR=%s" +msgid "Cannot open Dev=%s, Vol=%s\n" msgstr "" -#: src/dird/ua_update.c:306 +#: src/stored/record_read.c:164 src/stored/record.c:658 #, c-format -msgid "New Slot is: %d\n" +msgid "Sanity check failed. maxlen=%d datalen=%d. Block discarded.\n" msgstr "" -#: src/dird/ua_update.c:331 -#, c-format -msgid "New Pool is: %s\n" +#: src/stored/spool.c:71 +msgid "Spooling statistics:\n" msgstr "" -#: src/dird/ua_update.c:374 +#: src/stored/spool.c:74 #, c-format -msgid "New RecyclePool is: %s\n" +msgid "" +"Data spooling: %u active jobs, %s bytes; %u total jobs, %s max bytes/job.\n" msgstr "" -#: src/dird/ua_update.c:394 +#: src/stored/spool.c:82 #, c-format -msgid "Error updating Volume record: ERR=%s" +msgid "Attr spooling: %u active jobs, %s bytes; %u total jobs, %s max bytes.\n" msgstr "" -#: src/dird/ua_update.c:396 -#, c-format -msgid "Volume defaults updated from \"%s\" Pool record.\n" +#: src/stored/spool.c:100 +msgid "Spooling data ...\n" msgstr "" -#: src/dird/ua_update.c:419 src/dird/ua_update.c:451 +#: src/stored/spool.c:126 #, c-format -msgid "Error updating Volume records: ERR=%s" +msgid "Bad return from despool WroteVol=%d\n" msgstr "" -#: src/dird/ua_update.c:421 src/dird/ua_update.c:453 +#: src/stored/spool.c:159 #, c-format -msgid "All Volume defaults updated from \"%s\" Pool record.\n" +msgid "Open data spool file %s failed: ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:443 -#, c-format -msgid "Updating all pools, but skipped PoolId=%d. ERR=%s\n" +#: src/stored/spool.c:187 +msgid "Despooling zero bytes. Your disk is probably FULL!\n" msgstr "" -#: src/dird/ua_update.c:469 +#: src/stored/spool.c:196 #, c-format -msgid "Error updating media record Enabled: ERR=%s" +msgid "Committing spooled data to Volume \"%s\". Despooling %s bytes ...\n" msgstr "" -#: src/dird/ua_update.c:472 +#: src/stored/spool.c:201 #, c-format -msgid "New Enabled is: %d\n" +msgid "Writing spooled data to Volume. Despooling %s bytes ...\n" msgstr "" -#: src/dird/ua_update.c:487 +#: src/stored/spool.c:272 src/stored/acquire.c:517 src/stored/block_util.c:552 +#: src/stored/block_util.c:622 src/stored/block_util.c:652 #, c-format -msgid "Error updating media record ActionOnPurge: ERR=%s" +msgid "Could not create JobMedia record for Volume=\"%s\" Job=%s\n" msgstr "" -#: src/dird/ua_update.c:490 +#: src/stored/spool.c:290 #, c-format -msgid "New ActionOnPurge is: %s\n" -msgstr "" - -#: src/dird/ua_update.c:605 src/dird/ua_run.c:222 -msgid "Parameters to modify:\n" +msgid "" +"Despooling elapsed time = %02d:%02d:%02d, Transfer rate = %s Bytes/second\n" msgstr "" -#: src/dird/ua_update.c:606 -msgid "Volume Status" +#: src/stored/spool.c:299 src/stored/spool.c:500 src/stored/spool.c:546 +#, c-format +msgid "Ftruncate spool file failed: ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:607 -msgid "Volume Retention Period" +#: src/stored/spool.c:358 +#, c-format +msgid "Spool header read error. ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:608 -msgid "Volume Use Duration" +#: src/stored/spool.c:361 +#, c-format +msgid "Spool read error. Wanted %u bytes, got %d\n" msgstr "" -#: src/dird/ua_update.c:609 -msgid "Maximum Volume Jobs" +#: src/stored/spool.c:362 +#, c-format +msgid "Spool header read error. Wanted %u bytes, got %d\n" msgstr "" -#: src/dird/ua_update.c:610 -msgid "Maximum Volume Files" +#: src/stored/spool.c:369 src/stored/spool.c:370 +#, c-format +msgid "Spool block too big. Max %u bytes, got %u\n" msgstr "" -#: src/dird/ua_update.c:611 -msgid "Maximum Volume Bytes" +#: src/stored/spool.c:376 src/stored/spool.c:377 +#, c-format +msgid "Spool data read error. Wanted %u bytes, got %d\n" msgstr "" -#: src/dird/ua_update.c:612 -msgid "Recycle Flag" +#: src/stored/spool.c:431 +#, c-format +msgid "" +"User specified Job spool size reached: JobSpoolSize=%s MaxJobSpoolSize=%s\n" msgstr "" -#: src/dird/ua_update.c:613 -msgid "Slot" +#: src/stored/spool.c:436 +#, c-format +msgid "" +"User specified Device spool size reached: DevSpoolSize=%s MaxDevSpoolSize=" +"%s\n" msgstr "" -#: src/dird/ua_update.c:614 -msgid "InChanger Flag" +#: src/stored/spool.c:443 +msgid "Bad return from despool in write_block.\n" msgstr "" -#: src/dird/ua_update.c:615 -msgid "Volume Files" +#: src/stored/spool.c:451 +msgid "Spooling data again ...\n" msgstr "" -#: src/dird/ua_update.c:617 -msgid "Volume from Pool" +#: src/stored/spool.c:483 +#, c-format +msgid "Error writing header to spool file. ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:618 -msgid "All Volumes from Pool" +#: src/stored/spool.c:488 +#, c-format +msgid "" +"Error writing header to spool file. Disk probably full. Attempting recovery. " +"Wanted to write=%d got=%d\n" msgstr "" -#: src/dird/ua_update.c:619 -msgid "All Volumes from all Pools" +#: src/stored/spool.c:506 src/stored/spool.c:552 +msgid "Fatal despooling error." msgstr "" -#: src/dird/ua_update.c:620 -msgid "Enabled" +#: src/stored/spool.c:514 +msgid "Retrying after header spooling error failed.\n" msgstr "" -#: src/dird/ua_update.c:621 -msgid "RecyclePool" +#: src/stored/spool.c:530 +#, c-format +msgid "Error writing data to spool file. ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:622 -msgid "Action On Purge" +#: src/stored/spool.c:563 +msgid "Retrying after data spooling error failed.\n" msgstr "" -#: src/dird/ua_update.c:623 -msgid "Done" +#: src/stored/spool.c:650 +msgid "Network error on BlastAttributes.\n" msgstr "" -#: src/dird/ua_update.c:624 src/dird/ua_run.c:252 src/dird/ua_run.c:600 -msgid "Select parameter to modify" +#: src/stored/spool.c:674 src/stored/spool.c:682 +#, c-format +msgid "Fseek on attributes file failed: ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:632 +#: src/stored/spool.c:694 #, c-format -msgid "Updating Volume \"%s\"\n" +msgid "Sending spooled attrs to the Director. Despooling %s bytes ...\n" msgstr "" -#: src/dird/ua_update.c:637 +#: src/stored/spool.c:720 #, c-format -msgid "Current Volume status is: %s\n" +msgid "fopen attr spool file %s failed: ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:638 -msgid "Possible Values are:\n" +#: src/stored/record.c:63 src/stored/record_util.c:61 +#, c-format +msgid "unknown: %d" msgstr "" -#: src/dird/ua_update.c:649 -msgid "Choose new Volume Status" +#: src/stored/record.c:380 +msgid "Damaged buffer\n" msgstr "" -#: src/dird/ua_update.c:655 +#: src/stored/bls.c:68 #, c-format -msgid "Current retention period is: %s\n" +msgid "" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: bls [options] \n" +" -b specify a bootstrap file\n" +" -c specify a Storage configuration file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -e exclude list\n" +" -i include list\n" +" -j list jobs\n" +" -k list blocks\n" +" (no j or k option) list saved files\n" +" -L dump label\n" +" -p proceed inspite of errors\n" +" -v be verbose\n" +" -V specify Volume names (separated by |)\n" +" -? print this message\n" +"\n" msgstr "" -#: src/dird/ua_update.c:657 -msgid "Enter Volume Retention period: " +#: src/stored/bls.c:138 src/stored/bextract.c:141 +#, c-format +msgid "Could not open exclude file: %s, ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:664 +#: src/stored/bls.c:153 src/stored/bextract.c:156 #, c-format -msgid "Current use duration is: %s\n" +msgid "Could not open include file: %s, ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:666 -msgid "Enter Volume Use Duration: " +#: src/stored/bls.c:200 +msgid "No archive name specified\n" msgstr "" -#: src/dird/ua_update.c:673 +#: src/stored/bls.c:238 #, c-format -msgid "Current max jobs is: %u\n" +msgid "" +"\n" +"Warning, this Volume is a continuation of Volume %s\n" msgstr "" -#: src/dird/ua_update.c:674 -msgid "Enter new Maximum Jobs: " +#: src/stored/bls.c:281 +#, c-format +msgid "Got EOM at file %u on device %s, Volume \"%s\"\n" msgstr "" -#: src/dird/ua_update.c:681 +#: src/stored/bls.c:292 #, c-format -msgid "Current max files is: %u\n" +msgid "Mounted Volume \"%s\".\n" msgstr "" -#: src/dird/ua_update.c:682 -msgid "Enter new Maximum Files: " +#: src/stored/bls.c:294 +#, c-format +msgid "End of file %u on device %s, Volume \"%s\"\n" msgstr "" -#: src/dird/ua_update.c:689 +#: src/stored/bls.c:318 #, c-format -msgid "Current value is: %s\n" +msgid "" +"File:blk=%u:%u blk_num=%u blen=%u First rec FI=%s SessId=%u SessTim=%u Strm=" +"%s rlen=%d\n" msgstr "" -#: src/dird/ua_update.c:690 -msgid "Enter new Maximum Bytes: " +#: src/stored/bls.c:327 +#, c-format +msgid "Block: %d size=%d\n" msgstr "" -#: src/dird/ua_update.c:698 -#, c-format -msgid "Current recycle flag is: %s\n" +#: src/stored/bls.c:385 src/stored/bextract.c:325 src/stored/bscan.c:674 +msgid "Cannot continue.\n" msgstr "" -#: src/dird/ua_update.c:700 -msgid "Enter new Recycle status: " +#: src/stored/bls.c:387 +msgid "Attrib unpack error!\n" msgstr "" -#: src/dird/ua_update.c:707 +#: src/stored/bls.c:398 #, c-format -msgid "Current Slot is: %d\n" +msgid "FileIndex=%d VolSessionId=%d VolSessionTime=%d Stream=%d DataLen=%d\n" msgstr "" -#: src/dird/ua_update.c:708 -msgid "Enter new Slot: " +#: src/stored/bls.c:424 src/stored/bcopy.c:322 src/stored/read_records.c:387 +msgid "Fresh Volume Label" msgstr "" -#: src/dird/ua_update.c:715 -#, c-format -msgid "Current InChanger flag is: %d\n" +#: src/stored/bls.c:427 src/stored/bcopy.c:325 src/stored/read_records.c:390 +msgid "Volume Label" msgstr "" -#: src/dird/ua_update.c:716 -#, c-format -msgid "Set InChanger flag for Volume \"%s\": yes/no: " +#: src/stored/bls.c:431 src/stored/label.c:1128 src/stored/bcopy.c:329 +msgid "Begin Job Session" msgstr "" -#: src/dird/ua_update.c:730 -#, c-format -msgid "New InChanger flag is: %d\n" +#: src/stored/bls.c:436 src/stored/label.c:1131 src/stored/bcopy.c:333 +msgid "End Job Session" msgstr "" -#: src/dird/ua_update.c:737 -msgid "" -"Warning changing Volume Files can result\n" -"in loss of data on your Volume\n" -"\n" +#: src/stored/bls.c:440 src/stored/bcopy.c:338 +msgid "End of Medium" msgstr "" -#: src/dird/ua_update.c:739 -#, c-format -msgid "Current Volume Files is: %u\n" +#: src/stored/bls.c:443 +msgid "End of Physical Medium" msgstr "" -#: src/dird/ua_update.c:740 -msgid "Enter new number of Files for Volume: " +#: src/stored/bls.c:446 +msgid "Start of object" msgstr "" -#: src/dird/ua_update.c:745 -msgid "Normally, you should only increase Volume Files by one!\n" +#: src/stored/bls.c:449 +msgid "End of object" msgstr "" -#: src/dird/ua_update.c:746 -msgid "Increase Volume Files? (yes/no): " +#: src/stored/bls.c:452 src/stored/label.c:1140 src/stored/bcopy.c:341 +msgid "Unknown" msgstr "" -#: src/dird/ua_update.c:756 +#: src/stored/bls.c:459 src/stored/bcopy.c:347 src/stored/read_records.c:408 #, c-format -msgid "New Volume Files is: %u\n" +msgid "%s Record: VolSessionId=%d VolSessionTime=%d JobId=%d DataLen=%d\n" msgstr "" -#: src/dird/ua_update.c:768 +#: src/stored/wait.c:121 #, c-format -msgid "Current Pool is: %s\n" -msgstr "" - -#: src/dird/ua_update.c:769 -msgid "Enter new Pool name: " +msgid "pthread timedwait error. ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:790 +#: src/stored/wait.c:227 #, c-format -msgid "Current Enabled is: %d\n" +msgid "JobId=%s, Job %s waiting to reserve a device.\n" msgstr "" -#: src/dird/ua_update.c:791 -msgid "Enter new Enabled: " +#: src/stored/wait.c:273 +#, c-format +msgid "JobId=%s, Job %s waiting device %s.\n" msgstr "" -#: src/dird/ua_update.c:810 +#: src/stored/device.c:120 #, c-format -msgid "Current RecyclePool is: %s\n" +msgid "End of medium on Volume \"%s\" Bytes=%s Blocks=%s at %s.\n" msgstr "" -#: src/dird/ua_update.c:812 -msgid "No current RecyclePool\n" +#: src/stored/device.c:146 +#, c-format +msgid "New volume \"%s\" mounted on device %s at %s.\n" msgstr "" -#: src/dird/ua_update.c:822 +#: src/stored/device.c:158 #, c-format -msgid "Current ActionOnPurge is: %s\n" +msgid "write_block_to_device Volume label failed. ERR=%s" msgstr "" -#: src/dird/ua_update.c:824 -msgid "Enter new ActionOnPurge (one of: Truncate, None): " +#: src/stored/device.c:177 +#, c-format +msgid "write_block_to_device overflow block failed. ERR=%s" msgstr "" -#: src/dird/ua_update.c:832 -msgid "Selection terminated.\n" +#: src/stored/device.c:182 +#, c-format +msgid "Catastrophic error. Cannot write overflow block to device %s. ERR=%s" msgstr "" -#: src/dird/ua_update.c:852 +#: src/stored/device.c:332 src/stored/tape_dev.c:160 #, c-format -msgid "Updating %i job(s).\n" +msgid "Unable to open device %s: ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:884 +#: src/stored/device.c:334 #, c-format -msgid "db_update_pool_record returned %d. ERR=%s\n" +msgid "Unable to open archive %s: ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:891 -msgid "Pool DB record updated from resource.\n" +#: src/stored/authenticate.c:65 +#, c-format +msgid "I only authenticate Directors, not %d\n" msgstr "" -#: src/dird/ua_update.c:918 -msgid "Expect JobId keyword, not found.\n" +#: src/stored/authenticate.c:71 +#, c-format +msgid "Bad Hello command from Director at %s. Len=%d.\n" msgstr "" -#: src/dird/ua_update.c:943 -msgid "Neither Client nor StartTime specified.\n" +#: src/stored/authenticate.c:85 src/filed/authenticate.c:76 +#, c-format +msgid "Bad Hello command from Director at %s: %s\n" msgstr "" -#: src/dird/migrate.c:149 src/dird/migrate.c:163 +#: src/stored/authenticate.c:100 #, c-format -msgid "No previous Job found to %s.\n" +msgid "" +"Connection from unknown Director %s at %s rejected.\n" +"Please see " msgstr "" -#: src/dird/migrate.c:155 -msgid "Create bootstrap file failed.\n" +#: src/stored/authenticate.c:137 +msgid "" +"Incorrect password given by Director.\n" +"Please see " msgstr "" -#: src/dird/migrate.c:165 -#, c-format -msgid "Previous Job has no data to %s.\n" +#: src/stored/authenticate.c:145 src/stored/authenticate.c:258 +#: src/stored/authenticate.c:367 src/filed/authenticate.c:139 +#: src/filed/authenticate.c:267 +msgid "" +"Authorization problem: Remote server did not advertize required TLS " +"support.\n" msgstr "" -#: src/dird/migrate.c:182 +#: src/stored/authenticate.c:163 #, c-format -msgid "Job resource not found for \"%s\".\n" +msgid "TLS negotiation failed with DIR at \"%s:%d\"\n" msgstr "" -#: src/dird/migrate.c:186 +#: src/stored/authenticate.c:199 #, c-format -msgid "Previous Job resource not found for \"%s\".\n" -msgstr "" - -#: src/dird/migrate.c:203 -msgid "setup job failed.\n" +msgid "Unable to authenticate Director at %s.\n" msgstr "" -#: src/dird/migrate.c:258 +#: src/stored/authenticate.c:249 src/stored/authenticate.c:289 #, c-format -msgid "Pool for JobId %s not in database. ERR=%s\n" +msgid "" +"Incorrect authorization key from File daemon at %s rejected.\n" +"Please see " msgstr "" -#: src/dird/migrate.c:266 +#: src/stored/authenticate.c:276 #, c-format -msgid "Pool resource \"%s\" not found.\n" +msgid "TLS negotiation failed with FD at \"%s:%d\"\n" msgstr "" -#: src/dird/migrate.c:316 src/dird/migrate.c:898 -#, c-format -msgid "Could not get job record for JobId %s to %s. ERR=%s" +#: src/stored/authenticate.c:358 src/filed/authenticate.c:258 +msgid "" +"Authorization key rejected by Storage daemon.\n" +"Please see " msgstr "" -#: src/dird/migrate.c:327 -#, c-format -msgid "JobId %s already %s probably by another Job. %s stopped.\n" +#: src/stored/authenticate.c:385 src/dird/authenticate.c:400 +#: src/filed/authenticate.c:157 src/filed/authenticate.c:285 +msgid "TLS negotiation failed.\n" msgstr "" -#: src/dird/migrate.c:337 +#: src/stored/block.c:133 #, c-format -msgid "Start %s JobId %s, Job=%s\n" +msgid "Cannot write block. Device at EOM. dev=%s\n" msgstr "" -#: src/dird/migrate.c:712 +#: src/stored/block.c:138 #, c-format -msgid "No %s SQL selection pattern specified.\n" +msgid "Attempt to write on read-only Volume. dev=%s\n" msgstr "" -#: src/dird/migrate.c:719 src/dird/migrate.c:738 src/dird/migrate.c:759 -#: src/dird/migrate.c:795 src/dird/migrate.c:822 src/dird/migrate.c:956 -#: src/dird/migrate.c:989 src/dird/migrate.c:1118 +#: src/stored/block.c:144 #, c-format -msgid "SQL failed. ERR=%s\n" +msgid "Attempt to write on closed device=%s\n" msgstr "" -#: src/dird/migrate.c:742 src/dird/migrate.c:749 src/dird/migrate.c:763 -#: src/dird/migrate.c:826 +#: src/stored/block.c:177 #, c-format -msgid "No Volumes found to %s.\n" +msgid "Unable to write EOF. ERR=%s\n" msgstr "" -#: src/dird/migrate.c:777 src/dird/migrate.c:866 src/dird/migrate.c:886 -msgid "Invalid JobId found.\n" +#: src/stored/block.c:199 src/stored/block.c:235 +msgid "Write block header zeroed.\n" msgstr "" -#: src/dird/migrate.c:837 +#: src/stored/block.c:227 #, c-format -msgid "Unknown %s Selection Type.\n" +msgid "Block checksum changed during write: before=%ud after=%ud\n" msgstr "" -#: src/dird/migrate.c:848 src/dird/migrate.c:869 src/dird/migrate.c:889 +#: src/stored/block.c:254 #, c-format -msgid "No JobIds found to %s.\n" +msgid "Write error at %u:%u on device %s. ERR=%s.\n" msgstr "" -#: src/dird/migrate.c:852 +#: src/stored/block.c:262 #, c-format -msgid "The following %u JobId%s chosen to be %s: %s\n" +msgid "End of Volume \"%s\" at %u:%u on device %s. Write of %u bytes got %d.\n" msgstr "" -#: src/dird/migrate.c:853 -msgid " was" +#: src/stored/block.c:366 +msgid "Job failed or canceled.\n" msgstr "" -#: src/dird/migrate.c:853 -msgid "s were" +#: src/stored/block.c:372 +msgid "Attempt to read past end of tape or file.\n" msgstr "" -#: src/dird/migrate.c:905 +#: src/stored/block.c:380 #, c-format -msgid "%s using JobId=%s Job=%s\n" -msgstr "" - -#: src/dird/migrate.c:939 -msgid "Could not start migration job.\n" +msgid "Attempt to read closed device: fd=%d at file:blk %u:%u on device %s\n" msgstr "" -#: src/dird/migrate.c:941 +#: src/stored/block.c:392 #, c-format -msgid "%s JobId %d started.\n" +msgid "Block buffer size looping problem on device %s\n" msgstr "" -#: src/dird/migrate.c:960 +#: src/stored/block.c:425 src/stored/block.c:439 #, c-format -msgid "No %s found to %s.\n" +msgid "The Volume=%s on device=%s appears to be unlabeled.\n" msgstr "" -#: src/dird/migrate.c:964 +#: src/stored/block.c:428 #, c-format -msgid "SQL error. Expected 1 MediaId got %d\n" +msgid "Read error on fd=%d at file:blk %u:%u on device %s. ERR=%s.\n" msgstr "" -#: src/dird/migrate.c:993 src/dird/migrate.c:1123 +#: src/stored/block.c:442 #, c-format -msgid "No %ss found to %s.\n" -msgstr "" - -#: src/dird/migrate.c:1015 -msgid "Selection Type 'pooluncopiedjobs' only applies to Copy Jobs" +msgid "Read zero bytes Vol=%s at %lld on device %s.\n" msgstr "" -#: src/dird/migrate.c:1024 +#: src/stored/block.c:471 #, c-format -msgid "SQL to get uncopied jobs failed. ERR=%s\n" +msgid "" +"Volume data error at %u:%u! Very short block of %d bytes on device %s " +"discarded.\n" msgstr "" -#: src/dird/migrate.c:1047 +#: src/stored/block.c:498 #, c-format -msgid "No %s %s selection pattern specified.\n" +msgid "Block length %u is greater than buffer %u. Attempting recovery.\n" msgstr "" -#: src/dird/migrate.c:1058 +#: src/stored/block.c:518 #, c-format -msgid "SQL to get %s failed. ERR=%s\n" +msgid "Setting block buffer size to %u bytes.\n" msgstr "" -#: src/dird/migrate.c:1063 +#: src/stored/block.c:533 #, c-format -msgid "Query of Pool \"%s\" returned no Jobs to %s.\n" +msgid "" +"Volume data error at %u:%u! Short block of %d bytes on device %s discarded.\n" msgstr "" -#: src/dird/migrate.c:1101 +#: src/stored/label.c:87 #, c-format -msgid "Regex pattern matched no Jobs to %s.\n" +msgid "Couldn't rewind %s device %s: ERR=%s\n" msgstr "" -#: src/dird/migrate.c:1265 +#: src/stored/label.c:105 src/stored/label.c:198 #, c-format -msgid "%s OK -- with warnings" +msgid "Wrong Volume mounted on %s device %s: Wanted %s have %s\n" msgstr "" -#: src/dird/migrate.c:1267 +#: src/stored/label.c:108 src/stored/label.c:186 #, c-format -msgid "%s OK" +msgid "Too many tries: %s" msgstr "" -#: src/dird/migrate.c:1272 +#: src/stored/label.c:125 #, c-format -msgid "*** %s Error ***" +msgid "" +"Requested Volume \"%s\" on %s device %s is not a Bacula labeled Volume, " +"because: ERR=%s" msgstr "" -#: src/dird/migrate.c:1282 -#, c-format -msgid "%s Canceled" +#: src/stored/label.c:130 +msgid "Could not read Volume label from block.\n" msgstr "" -#: src/dird/migrate.c:1291 +#: src/stored/label.c:133 #, c-format -msgid "Inappropriate %s term code" +msgid "Could not unserialize Volume label: ERR=%s\n" msgstr "" -#: src/dird/migrate.c:1301 +#: src/stored/label.c:138 #, c-format -msgid "%s -- no files to %s" +msgid "Volume Header Id bad: %s\n" msgstr "" -#: src/dird/migrate.c:1316 +#: src/stored/label.c:171 #, c-format -msgid "" -"%s %s %s (%s):\n" -" Build OS: %s %s %s\n" -" Prev Backup JobId: %s\n" -" Prev Backup Job: %s\n" -" New Backup JobId: %s\n" -" Current JobId: %s\n" -" Current Job: %s\n" -" Backup Level: %s%s\n" -" Client: %s\n" -" FileSet: \"%s\" %s\n" -" Read Pool: \"%s\" (From %s)\n" -" Read Storage: \"%s\" (From %s)\n" -" Write Pool: \"%s\" (From %s)\n" -" Write Storage: \"%s\" (From %s)\n" -" Catalog: \"%s\" (From %s)\n" -" Start time: %s\n" -" End time: %s\n" -" Elapsed time: %s\n" -" Priority: %d\n" -" SD Files Written: %s\n" -" SD Bytes Written: %s (%sB)\n" -" Rate: %.1f KB/s\n" -" Volume name(s): %s\n" -" Volume Session Id: %d\n" -" Volume Session Time: %d\n" -" Last Volume Bytes: %s (%sB)\n" -" SD Errors: %d\n" -" SD termination status: %s\n" -" Termination: %s\n" -"\n" +msgid "Volume on %s device %s has wrong Bacula version. Wanted %d got %d\n" msgstr "" -#: src/dird/migrate.c:1427 +#: src/stored/label.c:182 #, c-format -msgid "No Next Pool specification found in Pool \"%s\".\n" +msgid "Volume on %s device %s has bad Bacula label type: %x\n" msgstr "" -#: src/dird/migrate.c:1433 +#: src/stored/label.c:301 #, c-format -msgid "No Storage specification found in Next Pool \"%s\".\n" -msgstr "" - -#: src/dird/migrate.c:1439 -msgid "Storage from Pool's NextPool resource" +msgid "Cannot write Volume label to block for %s device %s\n" msgstr "" -#: src/dird/ua_prune.c:127 -msgid "Choose item to prune" +#: src/stored/label.c:361 src/stored/label.c:486 +#, c-format +msgid "Open %s device %s Volume \"%s\" failed: ERR=%s\n" msgstr "" -#: src/dird/ua_prune.c:175 +#: src/stored/label.c:500 #, c-format -msgid "Cannot prune Volume \"%s\" because it is archived.\n" +msgid "Rewind error on %s device %s: ERR=%s\n" msgstr "" -#: src/dird/ua_prune.c:217 -msgid "Pruned Jobs from JobHisto catalog.\n" +#: src/stored/label.c:508 +#, c-format +msgid "Truncate error on %s device %s: ERR=%s\n" msgstr "" -#: src/dird/ua_prune.c:305 -msgid "Begin pruning Files.\n" +#: src/stored/label.c:515 +#, c-format +msgid "Failed to re-open DVD after truncate on %s device %s: ERR=%s\n" msgstr "" -#: src/dird/ua_prune.c:320 -msgid "No Files found to prune.\n" +#: src/stored/label.c:560 +#, c-format +msgid "Unable to write %s device %s: ERR=%s\n" msgstr "" -#: src/dird/ua_prune.c:343 +#: src/stored/label.c:594 #, c-format -msgid "Pruned Files from %s Jobs for client %s from catalog.\n" +msgid "Recycled volume \"%s\" on %s device %s, all previous data lost.\n" msgstr "" -#: src/dird/ua_prune.c:489 +#: src/stored/label.c:597 #, c-format -msgid "Begin pruning Jobs older than %s.\n" +msgid "Wrote label to prelabeled Volume \"%s\" on %s device %s\n" msgstr "" -#: src/dird/ua_prune.c:600 +#: src/stored/label.c:806 #, c-format -msgid "Pruned %d %s for client %s from catalog.\n" +msgid "Bad Volume session label request=%d\n" msgstr "" -#: src/dird/ua_prune.c:601 -msgid "Jobs" +#: src/stored/label.c:870 +#, c-format +msgid "Expecting Volume Label, got FI=%s Stream=%s len=%d\n" msgstr "" -#: src/dird/ua_prune.c:603 -msgid "No Jobs found to prune.\n" +#: src/stored/label.c:1003 +#, c-format +msgid "Unknown %d" msgstr "" -#: src/dird/autoprune.c:75 +#: src/stored/label.c:1007 +#, c-format msgid "" -"End auto prune.\n" "\n" +"Volume Label:\n" +"Id : %sVerNo : %d\n" +"VolName : %s\n" +"PrevVolName : %s\n" +"VolFile : %d\n" +"LabelType : %s\n" +"LabelSize : %d\n" +"PoolName : %s\n" +"MediaType : %s\n" +"PoolType : %s\n" +"HostName : %s\n" msgstr "" -#: src/dird/ua_run.c:154 -msgid "OK to run? (yes/mod/no): " -msgstr "" - -#: src/dird/ua_run.c:193 -msgid "Job failed.\n" +#: src/stored/label.c:1029 +#, c-format +msgid "Date label written: %s\n" msgstr "" -#: src/dird/ua_run.c:196 +#: src/stored/label.c:1035 #, c-format -msgid "Job queued. JobId=%s\n" +msgid "Date label written: %04d-%02d-%02d at %02d:%02d\n" msgstr "" -#: src/dird/ua_run.c:203 +#: src/stored/label.c:1055 #, c-format msgid "" "\n" -"Bad response: %s. You must answer yes, mod, or no.\n" -"\n" -msgstr "" - -#: src/dird/ua_run.c:207 -msgid "Job not run.\n" +"%s Record:\n" +"JobId : %d\n" +"VerNum : %d\n" +"PoolName : %s\n" +"PoolType : %s\n" +"JobName : %s\n" +"ClientName : %s\n" msgstr "" -#: src/dird/ua_run.c:223 -msgid "Level" +#: src/stored/label.c:1068 +#, c-format +msgid "" +"Job (unique name) : %s\n" +"FileSet : %s\n" +"JobType : %c\n" +"JobLevel : %c\n" msgstr "" -#: src/dird/ua_run.c:228 -msgid "Restore Client" +#: src/stored/label.c:1077 +#, c-format +msgid "" +"JobFiles : %s\n" +"JobBytes : %s\n" +"StartBlock : %s\n" +"EndBlock : %s\n" +"StartFile : %s\n" +"EndFile : %s\n" +"JobErrors : %s\n" +"JobStatus : %c\n" msgstr "" -#: src/dird/ua_run.c:232 src/wx-console/wxbrestorepanel.cpp:356 -#: src/wx-console/wxbrestorepanel.cpp:854 -#: src/wx-console/wxbrestorepanel.cpp:1918 -msgid "When" +#: src/stored/label.c:1098 +#, c-format +msgid "Date written : %s\n" msgstr "" -#: src/dird/ua_run.c:233 src/wx-console/wxbrestorepanel.cpp:357 -#: src/wx-console/wxbrestorepanel.cpp:1128 -#: src/wx-console/wxbrestorepanel.cpp:1921 -msgid "Priority" +#: src/stored/label.c:1103 +#, c-format +msgid "Date written : %04d-%02d-%02d at %02d:%02d\n" msgstr "" -#: src/dird/ua_run.c:240 -msgid "Verify Job" +#: src/stored/label.c:1122 +msgid "Fresh Volume" msgstr "" -#: src/dird/ua_run.c:243 src/wx-console/wxbrestorepanel.cpp:349 -#: src/wx-console/wxbrestorepanel.cpp:1899 -msgid "Bootstrap" +#: src/stored/label.c:1125 +msgid "Volume" msgstr "" -#: src/dird/ua_run.c:244 src/wx-console/wxbrestorepanel.cpp:350 -#: src/wx-console/wxbrestorepanel.cpp:1104 -#: src/wx-console/wxbrestorepanel.cpp:1901 -msgid "Where" +#: src/stored/label.c:1134 src/stored/read_records.c:401 +msgid "End of Media" msgstr "" -#: src/dird/ua_run.c:245 -msgid "File Relocation" +#: src/stored/label.c:1137 +msgid "End of Tape" msgstr "" -#: src/dird/ua_run.c:246 src/wx-console/wxbrestorepanel.cpp:352 -#: src/wx-console/wxbrestorepanel.cpp:1112 -#: src/wx-console/wxbrestorepanel.cpp:1905 -#: src/wx-console/wxbrestorepanel.cpp:1906 -#: src/wx-console/wxbrestorepanel.cpp:1907 -#: src/wx-console/wxbrestorepanel.cpp:1908 -#: src/wx-console/wxbrestorepanel.cpp:1909 -msgid "Replace" +#: src/stored/label.c:1157 src/stored/label.c:1165 src/stored/label.c:1198 +#, c-format +msgid "%s Record: File:blk=%u:%u SessId=%d SessTime=%d JobId=%d DataLen=%d\n" msgstr "" -#: src/dird/ua_run.c:247 -msgid "JobId" +#: src/stored/label.c:1162 +msgid "Bacula \"End of Tape\" label found.\n" msgstr "" -#: src/dird/ua_run.c:250 -msgid "Plugin Options" +#: src/stored/label.c:1177 src/stored/label.c:1186 +#, c-format +msgid "%s Record: File:blk=%u:%u SessId=%d SessTime=%d JobId=%d\n" msgstr "" -#: src/dird/ua_run.c:261 src/dird/ua_run.c:1569 -msgid "user selection" +#: src/stored/label.c:1179 +#, c-format +msgid " Job=%s Date=%s Level=%c Type=%c\n" msgstr "" -#: src/dird/ua_run.c:293 -msgid "" -"Please enter desired start time as YYYY-MM-DD HH:MM:SS (return for now): " +#: src/stored/label.c:1188 +#, c-format +msgid " Date=%s Level=%c Type=%c Files=%s Bytes=%s Errors=%d Status=%c\n" msgstr "" -#: src/dird/ua_run.c:301 src/dird/ua_run.c:477 -msgid "Invalid time, using current time.\n" +#: src/stored/acquire.c:60 +#, c-format +msgid "Acquire read: num_writers=%d not zero. Job %d canceled.\n" msgstr "" -#: src/dird/ua_run.c:308 -msgid "Enter new Priority: " +#: src/stored/acquire.c:69 +#, c-format +msgid "No volumes specified for reading. Job %s canceled.\n" msgstr "" -#: src/dird/ua_run.c:312 -msgid "Priority must be a positive integer.\n" +#: src/stored/acquire.c:78 +#, c-format +msgid "Logic error: no next volume to read. Numvol=%d Curvol=%d\n" msgstr "" -#: src/dird/ua_run.c:333 -msgid "Please enter the Bootstrap file name: " +#: src/stored/acquire.c:85 src/stored/acquire.c:162 src/stored/acquire.c:436 +msgid "generate_plugin_event(bsdEventDeviceOpen) Failed\n" msgstr "" -#: src/dird/ua_run.c:345 +#: src/stored/acquire.c:109 #, c-format -msgid "Warning cannot open %s: ERR=%s\n" -msgstr "" - -#: src/dird/ua_run.c:364 -msgid "Please enter the full path prefix for restore (/ for none): " +msgid "" +"Changing read device. Want Media Type=\"%s\" have=\"%s\"\n" +" %s device=%s\n" msgstr "" -#: src/dird/ua_run.c:386 -msgid "Replace:\n" +#: src/stored/acquire.c:157 +#, c-format +msgid "Media Type change. New read %s device %s chosen.\n" msgstr "" -#: src/dird/ua_run.c:390 -msgid "Select replace option" +#: src/stored/acquire.c:174 +#, c-format +msgid "No suitable device found to read Volume \"%s\"\n" msgstr "" -#: src/dird/ua_run.c:401 -msgid "" -"You must set the bootstrap file to NULL to be able to specify a JobId.\n" +#: src/stored/acquire.c:213 +#, c-format +msgid "Job %s canceled.\n" msgstr "" -#: src/dird/ua_run.c:406 -msgid "Please Plugin Options string: " +#: src/stored/acquire.c:231 +#, c-format +msgid "Read open %s device %s Volume \"%s\" failed: ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:444 src/dird/ua_run.c:453 -msgid "User input" +#: src/stored/acquire.c:324 +#, c-format +msgid "Too many errors trying to mount %s device %s for reading.\n" msgstr "" -#: src/dird/ua_run.c:507 +#: src/stored/acquire.c:332 #, c-format -msgid "Invalid replace option: %s\n" +msgid "Ready to read from volume \"%s\" on %s device %s.\n" msgstr "" -#: src/dird/ua_run.c:589 +#: src/stored/acquire.c:421 #, c-format -msgid "strip_prefix=%s add_prefix=%s add_suffix=%s\n" +msgid "Could not ready %s device %s for append.\n" msgstr "" -#: src/dird/ua_run.c:592 -msgid "This will replace your current Where value\n" +#: src/stored/acquire.c:570 +#, c-format +msgid "Alert: %s" msgstr "" -#: src/dird/ua_run.c:593 -msgid "Strip prefix" +#: src/stored/acquire.c:578 +#, c-format +msgid "3997 Bad alert command: %s: ERR=%s.\n" msgstr "" -#: src/dird/ua_run.c:594 -msgid "Add prefix" +#: src/stored/bextract.c:75 +#, c-format +msgid "" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: bextract \n" +" -b specify a bootstrap file\n" +" -c specify a Storage configuration file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -e exclude list\n" +" -i include list\n" +" -p proceed inspite of I/O errors\n" +" -v verbose\n" +" -V specify Volume names (separated by |)\n" +" -? print this message\n" +"\n" msgstr "" -#: src/dird/ua_run.c:595 -msgid "Add file suffix" +#: src/stored/bextract.c:191 src/stored/bscan.c:239 src/stored/bcopy.c:151 +#: src/tools/bbatch.c:178 src/tools/bvfs_test.c:189 src/tools/cats_test.c:309 +#: src/tools/ing_test.c:173 +msgid "Wrong number of arguments: \n" msgstr "" -#: src/dird/ua_run.c:596 -msgid "Enter a regexp" +#: src/stored/bextract.c:215 +#, c-format +msgid "%d Program Name and/or Program Data Stream records ignored.\n" msgstr "" -#: src/dird/ua_run.c:597 -msgid "Test filename manipulation" +#: src/stored/bextract.c:219 +#, c-format +msgid "%d Win32 data or Win32 gzip data stream records. Ignored.\n" msgstr "" -#: src/dird/ua_run.c:598 -msgid "Use this ?" +#: src/stored/bextract.c:246 +#, c-format +msgid "Cannot stat %s. It must exist. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:603 -msgid "Please enter the path prefix to strip: " +#: src/stored/bextract.c:250 +#, c-format +msgid "%s must be a directory.\n" msgstr "" -#: src/dird/ua_run.c:611 -msgid "Please enter the path prefix to add (/ for none): " +#: src/stored/bextract.c:271 +#, c-format +msgid "%u files restored.\n" msgstr "" -#: src/dird/ua_run.c:622 -msgid "Please enter the file suffix to add: " +#: src/stored/bextract.c:281 src/stored/bextract.c:287 +#, c-format +msgid "Write error on %s: %s\n" msgstr "" -#: src/dird/ua_run.c:629 -msgid "Please enter a valid regexp (!from!to!): " +#: src/stored/bextract.c:318 src/stored/bextract.c:584 +msgid "Logic error output file should be open but is not.\n" msgstr "" -#: src/dird/ua_run.c:642 +#: src/stored/bextract.c:332 src/filed/restore.c:560 #, c-format -msgid "regexwhere=%s\n" +msgid "%s stream not supported on this Client.\n" msgstr "" -#: src/dird/ua_run.c:648 +#: src/stored/bextract.c:342 #, c-format -msgid "strip_prefix=%s add_prefix=%s add_suffix=%s result=%s\n" -msgstr "" - -#: src/dird/ua_run.c:655 -msgid "Cannot use your regexp\n" +msgid "%s was deleted.\n" msgstr "" -#: src/dird/ua_run.c:658 -msgid "Enter a period (.) to stop this test\n" +#: src/stored/bextract.c:390 +#, c-format +msgid "Seek error on %s: %s\n" msgstr "" -#: src/dird/ua_run.c:659 -msgid "Please enter filename to test: " +#: src/stored/bextract.c:426 src/stored/bextract.c:491 +#: src/filed/restore.c:1335 +#, c-format +msgid "Seek to %s error on %s: ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:661 +#: src/stored/bextract.c:445 #, c-format -msgid "%s -> %s\n" +msgid "Uncompression error. ERR=%d\n" msgstr "" -#: src/dird/ua_run.c:705 -msgid "Cannot use your regexp.\n" +#: src/stored/bextract.c:459 src/filed/restore.c:1450 +msgid "GZIP data stream found, but GZIP not configured!\n" msgstr "" -#: src/dird/ua_run.c:718 src/dird/ua_run.c:748 -msgid "Levels:\n" +#: src/stored/bextract.c:514 src/filed/restore.c:1376 +#, c-format +msgid "Compressed header version error. version=0x%x\n" msgstr "" -#: src/dird/ua_run.c:720 src/stored/status.c:665 src/lib/util.c:426 -#: src/lib/util.c:472 src/filed/status.c:519 -msgid "Full" +#: src/stored/bextract.c:519 src/filed/restore.c:1381 +#, c-format +msgid "Compressed header size error. comp_len=%d, msglen=%d\n" msgstr "" -#: src/dird/ua_run.c:721 src/stored/status.c:668 src/lib/util.c:429 -#: src/filed/status.c:522 -msgid "Incremental" +#: src/stored/bextract.c:541 +#, c-format +msgid "LZO uncompression error. ERR=%d\n" msgstr "" -#: src/dird/ua_run.c:722 src/stored/status.c:671 src/lib/util.c:432 -#: src/filed/status.c:525 -msgid "Differential" +#: src/stored/bextract.c:553 src/filed/restore.c:1414 +#, c-format +msgid "Compression algorithm 0x%x found, but not supported!\n" msgstr "" -#: src/dird/ua_run.c:723 src/stored/status.c:674 src/lib/util.c:435 -#: src/filed/status.c:528 -msgid "Since" +#: src/stored/bextract.c:575 +msgid "Got Program Name or Data Stream. Ignored.\n" msgstr "" -#: src/dird/ua_run.c:724 -msgid "VirtualFull" +#: src/stored/bextract.c:589 src/filed/restore.c:316 src/filed/restore.c:1033 +#, c-format +msgid "Unknown stream=%d ignored. This shouldn't happen!\n" msgstr "" -#: src/dird/ua_run.c:725 src/dird/ua_run.c:754 -msgid "Select level" +#: src/stored/bscan.c:108 +#, c-format +msgid "" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: bscan [ options ] \n" +" -b bootstrap specify a bootstrap file\n" +" -c specify configuration file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -m update media info in database\n" +" -D specify the driver database name (default NULL)\n" +" -n specify the database name (default bacula)\n" +" -u specify database user name (default bacula)\n" +" -P specify database password (default none)\n" +" -h specify database host (default NULL)\n" +" -t specify database port (default 0)\n" +" -p proceed inspite of I/O errors\n" +" -r list records\n" +" -s synchronize or store in database\n" +" -S show scan progress periodically\n" +" -v verbose\n" +" -V specify Volume names (separated by |)\n" +" -w specify working directory (default from conf file)\n" +" -? print this message\n" +"\n" msgstr "" -#: src/dird/ua_run.c:749 -msgid "Initialize Catalog" +#: src/stored/bscan.c:264 +#, c-format +msgid "Working Directory: %s not found. Cannot continue.\n" msgstr "" -#: src/dird/ua_run.c:750 src/stored/status.c:677 src/lib/util.c:438 -#: src/filed/status.c:531 -msgid "Verify Catalog" +#: src/stored/bscan.c:268 +#, c-format +msgid "Working Directory: %s is not a directory. Cannot continue.\n" msgstr "" -#: src/dird/ua_run.c:751 src/lib/util.c:444 -msgid "Verify Volume to Catalog" +#: src/stored/bscan.c:282 src/stored/bscan.c:358 +#, c-format +msgid "First Volume Size = %s\n" msgstr "" -#: src/dird/ua_run.c:752 src/lib/util.c:447 -msgid "Verify Disk to Catalog" +#: src/stored/bscan.c:288 src/tools/bbatch.c:189 src/tools/bbatch.c:238 +#: src/tools/bvfs_test.c:203 src/tools/ing_test.c:179 +msgid "Could not init Bacula database\n" msgstr "" -#: src/dird/ua_run.c:753 -msgid "Verify Volume Data (not yet implemented)" +#: src/stored/bscan.c:295 src/tools/bbatch.c:245 src/tools/bvfs_test.c:212 +#: src/tools/ing_test.c:188 +#, c-format +msgid "Using Database: %s, User: %s\n" msgstr "" -#: src/dird/ua_run.c:774 -msgid "Level not appropriate for this Job. Cannot be changed.\n" +#: src/stored/bscan.c:329 +#, c-format +msgid "Create JobMedia for Job %s\n" msgstr "" -#: src/dird/ua_run.c:805 +#: src/stored/bscan.c:339 #, c-format -msgid "" -"Run Admin Job\n" -"JobName: %s\n" -"FileSet: %s\n" -"Client: %s\n" -"Storage: %s\n" -"When: %s\n" -"Priority: %d\n" +msgid "Could not create JobMedia record for Volume=%s Job=%s\n" msgstr "" -#: src/dird/ua_run.c:849 +#: src/stored/bscan.c:406 #, c-format -msgid "" -"Run Backup job\n" -"JobName: %s\n" -"Level: %s\n" -"Client: %s\n" -"FileSet: %s\n" -"Pool: %s (From %s)\n" -"Storage: %s (From %s)\n" -"When: %s\n" -"Priority: %d\n" -"%s%s%s" +msgid "done: %d%%\n" msgstr "" -#: src/dird/ua_run.c:880 +#: src/stored/bscan.c:414 src/stored/bcopy.c:230 #, c-format -msgid "Could not get job record for selected JobId. ERR=%s" +msgid "Record: SessId=%u SessTim=%u FileIndex=%d Stream=%d len=%u\n" msgstr "" -#: src/dird/ua_run.c:919 +#: src/stored/bscan.c:430 +msgid "Volume is prelabeled. This tape cannot be scanned.\n" +msgstr "" + +#: src/stored/bscan.c:442 #, c-format -msgid "" -"Run Verify Job\n" -"JobName: %s\n" -"Level: %s\n" -"Client: %s\n" -"FileSet: %s\n" -"Pool: %s (From %s)\n" -"Storage: %s (From %s)\n" -"Verify Job: %s\n" -"Verify List: %s\n" -"When: %s\n" -"Priority: %d\n" +msgid "Pool record for %s found in DB.\n" msgstr "" -#: src/dird/ua_run.c:948 -msgid "Please enter a JobId for restore: " +#: src/stored/bscan.c:446 +#, c-format +msgid "VOL_LABEL: Pool record not found for Pool: %s\n" msgstr "" -#: src/dird/ua_run.c:988 +#: src/stored/bscan.c:452 #, c-format -msgid "" -"Run Restore job\n" -"JobName: %s\n" -"Bootstrap: %s\n" -"RegexWhere: %s\n" -"Replace: %s\n" -"FileSet: %s\n" -"Backup Client: %s\n" -"Restore Client: %s\n" -"Storage: %s\n" -"When: %s\n" -"Catalog: %s\n" -"Priority: %d\n" -"Plugin Options: %s\n" +msgid "VOL_LABEL: PoolType mismatch. DB=%s Vol=%s\n" msgstr "" -#: src/dird/ua_run.c:1044 +#: src/stored/bscan.c:456 #, c-format -msgid "" -"Run Restore job\n" -"JobName: %s\n" -"Bootstrap: %s\n" -"Where: %s\n" -"Replace: %s\n" -"FileSet: %s\n" -"Backup Client: %s\n" -"Restore Client: %s\n" -"Storage: %s\n" -"When: %s\n" -"Catalog: %s\n" -"Priority: %d\n" -"Plugin Options: %s\n" +msgid "Pool type \"%s\" is OK.\n" msgstr "" -#: src/dird/ua_run.c:1075 +#: src/stored/bscan.c:466 #, c-format -msgid "" -"Run Restore job\n" -"JobName: %s\n" -"Bootstrap: %s\n" +msgid "Media record for %s found in DB.\n" msgstr "" -#: src/dird/ua_run.c:1083 +#: src/stored/bscan.c:473 #, c-format -msgid "RegexWhere: %s\n" +msgid "VOL_LABEL: Media record not found for Volume: %s\n" msgstr "" -#: src/dird/ua_run.c:1086 +#: src/stored/bscan.c:480 #, c-format -msgid "Where: %s\n" +msgid "VOL_LABEL: MediaType mismatch. DB=%s Vol=%s\n" msgstr "" -#: src/dird/ua_run.c:1090 +#: src/stored/bscan.c:484 #, c-format -msgid "" -"Replace: %s\n" -"Client: %s\n" -"Storage: %s\n" -"JobId: %s\n" -"When: %s\n" -"Catalog: %s\n" -"Priority: %d\n" -"Plugin Options: %s\n" +msgid "Media type \"%s\" is OK.\n" msgstr "" -#: src/dird/ua_run.c:1145 -msgid "Run Copy job\n" +#: src/stored/bscan.c:494 +#, c-format +msgid "VOL_LABEL: OK for Volume: %s\n" msgstr "" -#: src/dird/ua_run.c:1147 -msgid "Run Migration job\n" +#: src/stored/bscan.c:501 +#, c-format +msgid "%d \"errors\" ignored before first Start of Session record.\n" msgstr "" -#: src/dird/ua_run.c:1176 +#: src/stored/bscan.c:512 #, c-format -msgid "Unknown Job Type=%d\n" +msgid "SOS_LABEL: Found Job record for JobId: %d\n" msgstr "" -#: src/dird/ua_run.c:1245 +#: src/stored/bscan.c:517 #, c-format -msgid "Value missing for keyword %s\n" +msgid "SOS_LABEL: Job record not found for JobId: %d\n" msgstr "" -#: src/dird/ua_run.c:1252 -msgid "Job name specified twice.\n" +#: src/stored/bscan.c:557 +#, c-format +msgid "SOS_LABEL: VolSessId mismatch for JobId=%u. DB=%d Vol=%d\n" msgstr "" -#: src/dird/ua_run.c:1260 -msgid "JobId specified twice.\n" +#: src/stored/bscan.c:563 +#, c-format +msgid "SOS_LABEL: VolSessTime mismatch for JobId=%u. DB=%d Vol=%d\n" msgstr "" -#: src/dird/ua_run.c:1269 src/dird/ua_run.c:1409 -msgid "Client specified twice.\n" +#: src/stored/bscan.c:569 +#, c-format +msgid "SOS_LABEL: PoolId mismatch for JobId=%u. DB=%d Vol=%d\n" msgstr "" -#: src/dird/ua_run.c:1277 -msgid "FileSet specified twice.\n" +#: src/stored/bscan.c:587 src/stored/bscan.c:1141 +#, c-format +msgid "Could not find SessId=%d SessTime=%d for EOS record.\n" msgstr "" -#: src/dird/ua_run.c:1285 -msgid "Level specified twice.\n" +#: src/stored/bscan.c:633 +#, c-format +msgid "Could not update job record. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:1294 -msgid "Storage specified twice.\n" +#: src/stored/bscan.c:644 +#, c-format +msgid "End of all Volumes. VolFiles=%u VolBlocks=%u VolBytes=%s\n" msgstr "" -#: src/dird/ua_run.c:1302 -msgid "RegexWhere or Where specified twice.\n" +#: src/stored/bscan.c:656 +#, c-format +msgid "Could not find Job for SessId=%d SessTime=%d record.\n" msgstr "" -#: src/dird/ua_run.c:1307 -msgid "No authorization for \"regexwhere\" specification.\n" +#: src/stored/bscan.c:687 +#, c-format +msgid "%s file records. At file:blk=%s:%s bytes=%s\n" msgstr "" -#: src/dird/ua_run.c:1314 -msgid "Where or RegexWhere specified twice.\n" +#: src/stored/bscan.c:752 +#, c-format +msgid "Got MD5 record: %s\n" msgstr "" -#: src/dird/ua_run.c:1319 -msgid "No authoriztion for \"where\" specification.\n" +#: src/stored/bscan.c:760 +#, c-format +msgid "Got SHA1 record: %s\n" msgstr "" -#: src/dird/ua_run.c:1326 -msgid "Bootstrap specified twice.\n" +#: src/stored/bscan.c:768 +#, c-format +msgid "Got SHA256 record: %s\n" msgstr "" -#: src/dird/ua_run.c:1334 -msgid "Replace specified twice.\n" +#: src/stored/bscan.c:776 +#, c-format +msgid "Got SHA512 record: %s\n" msgstr "" -#: src/dird/ua_run.c:1342 -msgid "When specified twice.\n" +#: src/stored/bscan.c:784 src/stored/bscan.c:791 +msgid "Got signed digest record\n" msgstr "" -#: src/dird/ua_run.c:1350 -msgid "Priority specified twice.\n" +#: src/stored/bscan.c:797 +#, c-format +msgid "Got Prog Names Stream: %s\n" msgstr "" -#: src/dird/ua_run.c:1355 -msgid "Priority must be positive nonzero setting it to 10.\n" +#: src/stored/bscan.c:803 +msgid "Got Prog Data Stream record.\n" msgstr "" -#: src/dird/ua_run.c:1365 -msgid "Verify Job specified twice.\n" +#: src/stored/bscan.c:848 +#, c-format +msgid "Unknown stream type!!! stream=%d len=%i\n" msgstr "" -#: src/dird/ua_run.c:1393 -msgid "Migration Job specified twice.\n" +#: src/stored/bscan.c:910 +#, c-format +msgid "Could not create File Attributes record. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:1401 -msgid "Pool specified twice.\n" +#: src/stored/bscan.c:916 +#, c-format +msgid "Created File record: %s\n" msgstr "" -#: src/dird/ua_run.c:1417 -msgid "Restore Client specified twice.\n" +#: src/stored/bscan.c:961 +#, c-format +msgid "Could not create media record. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:1424 -msgid "Plugin Options not yet implemented.\n" +#: src/stored/bscan.c:965 src/stored/bscan.c:986 +#, c-format +msgid "Could not update media record. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:1427 -msgid "Plugin Options specified twice.\n" +#: src/stored/bscan.c:969 +#, c-format +msgid "Created Media record for Volume: %s\n" msgstr "" -#: src/dird/ua_run.c:1432 -msgid "No authoriztion for \"PluginOptions\" specification.\n" +#: src/stored/bscan.c:990 +#, c-format +msgid "Updated Media record at end of Volume: %s\n" msgstr "" -#: src/dird/ua_run.c:1439 -msgid "Spool flag specified twice.\n" +#: src/stored/bscan.c:1007 +#, c-format +msgid "Could not create pool record. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:1446 -msgid "Invalid spooldata flag.\n" +#: src/stored/bscan.c:1011 +#, c-format +msgid "Created Pool record for Pool: %s\n" msgstr "" -#: src/dird/ua_run.c:1455 -msgid "IgnoreDuplicateCheck flag specified twice.\n" +#: src/stored/bscan.c:1030 +#, c-format +msgid "Could not get Client record. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:1462 -msgid "Invalid ignoreduplicatecheck flag.\n" +#: src/stored/bscan.c:1036 src/dird/job.c:1060 +#, c-format +msgid "Could not create Client record. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:1467 -msgid "Accurate flag specified twice.\n" +#: src/stored/bscan.c:1040 +#, c-format +msgid "Created Client record for Client: %s\n" msgstr "" -#: src/dird/ua_run.c:1474 -msgid "Invalid accurate flag.\n" +#: src/stored/bscan.c:1057 +#, c-format +msgid "Fileset \"%s\" already exists.\n" msgstr "" -#: src/dird/ua_run.c:1495 +#: src/stored/bscan.c:1061 #, c-format -msgid "Invalid keyword: %s\n" +msgid "Could not create FileSet record \"%s\". ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:1510 +#: src/stored/bscan.c:1066 #, c-format -msgid "Catalog \"%s\" not found\n" +msgid "Created FileSet record \"%s\"\n" msgstr "" -#: src/dird/ua_run.c:1514 +#: src/stored/bscan.c:1113 #, c-format -msgid "No authorization. Catalog \"%s\".\n" +msgid "Could not create JobId record. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:1525 +#: src/stored/bscan.c:1119 #, c-format -msgid "Job \"%s\" not found\n" +msgid "Could not update job start record. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:1532 -msgid "A job name must be specified.\n" +#: src/stored/bscan.c:1122 +#, c-format +msgid "Created new JobId=%u record for original JobId=%u\n" msgstr "" -#: src/dird/ua_run.c:1538 +#: src/stored/bscan.c:1175 #, c-format -msgid "No authorization. Job \"%s\".\n" +msgid "Could not update JobId=%u record. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:1546 +#: src/stored/bscan.c:1180 #, c-format -msgid "Pool \"%s\" not found.\n" +msgid "Updated Job termination record for JobId=%u Level=%s TermStat=%c\n" msgstr "" -#: src/dird/ua_run.c:1556 -#, c-format -msgid "No authorization. Pool \"%s\".\n" +#: src/stored/bscan.c:1191 src/dird/vbackup.c:386 src/dird/backup.c:774 +msgid "Backup OK" msgstr "" -#: src/dird/ua_run.c:1566 -#, c-format -msgid "Storage \"%s\" not found.\n" +#: src/stored/bscan.c:1194 src/dird/vbackup.c:384 src/dird/backup.c:772 +#: src/dird/backup.c:778 +msgid "Backup OK -- with warnings" msgstr "" -#: src/dird/ua_run.c:1575 src/dird/job.c:1245 -msgid "No storage specified.\n" +#: src/stored/bscan.c:1198 src/dird/vbackup.c:391 src/dird/backup.c:782 +msgid "*** Backup Error ***" msgstr "" -#: src/dird/ua_run.c:1578 +#: src/stored/bscan.c:1201 src/dird/vbackup.c:401 src/dird/backup.c:792 +msgid "Backup Canceled" +msgstr "" + +#: src/stored/bscan.c:1205 #, c-format -msgid "No authorization. Storage \"%s\".\n" +msgid "Job Termination code: %d" msgstr "" -#: src/dird/ua_run.c:1598 src/dird/ua_run.c:1618 +#: src/stored/bscan.c:1210 #, c-format -msgid "No authorization. Client \"%s\".\n" +msgid "" +"%s\n" +"JobId: %d\n" +"Job: %s\n" +"FileSet: %s\n" +"Backup Level: %s\n" +"Client: %s\n" +"Start time: %s\n" +"End time: %s\n" +"Files Written: %s\n" +"Bytes Written: %s\n" +"Volume Session Id: %d\n" +"Volume Session Time: %d\n" +"Last Volume Bytes: %s\n" +"Termination: %s\n" +"\n" msgstr "" -#: src/dird/ua_run.c:1608 +#: src/stored/bscan.c:1268 #, c-format -msgid "Restore Client \"%s\" not found.\n" +msgid "Could not create JobMedia record. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:1627 +#: src/stored/bscan.c:1272 #, c-format -msgid "FileSet \"%s\" not found.\n" +msgid "Created JobMedia record JobId %d, MediaId %d\n" msgstr "" -#: src/dird/ua_run.c:1636 +#: src/stored/bscan.c:1288 #, c-format -msgid "No authorization. FileSet \"%s\".\n" +msgid "Could not find SessId=%d SessTime=%d for MD5/SHA1 record.\n" msgstr "" -#: src/dird/ua_run.c:1644 +#: src/stored/bscan.c:1302 #, c-format -msgid "Verify Job \"%s\" not found.\n" +msgid "Could not add MD5/SHA1 to File record. ERR=%s\n" +msgstr "" + +#: src/stored/bscan.c:1307 +msgid "Updated MD5/SHA1 record\n" msgstr "" -#: src/dird/ua_run.c:1654 +#: src/stored/stored_conf.c:224 #, c-format -msgid "Migration Job \"%s\" not found.\n" +msgid "Expected a Device Type keyword, got: %s" msgstr "" -#: src/dird/dir_plugins.c:181 src/stored/sd_plugins.c:194 -#: src/filed/fd_plugins.c:1130 +#: src/stored/stored_conf.c:238 #, c-format -msgid "Loaded plugin: %s\n" +msgid "" +"Maximum Block Size configured value %u is greater than allowed maximum: %u" msgstr "" -#: src/dird/dir_plugins.c:201 src/stored/sd_plugins.c:214 -#: src/filed/fd_plugins.c:1151 +#: src/stored/stored_conf.c:252 #, c-format -msgid "Plugin magic wrong. Plugin=%s wanted=%s got=%s\n" +msgid "Warning: no \"%s\" resource (%d) defined.\n" msgstr "" -#: src/dird/dir_plugins.c:209 src/stored/sd_plugins.c:222 -#: src/filed/fd_plugins.c:1159 +#: src/stored/stored_conf.c:255 #, c-format -msgid "Plugin version incorrect. Plugin=%s wanted=%d got=%d\n" +msgid "dump_resource type=%d\n" msgstr "" -#: src/dird/dir_plugins.c:218 src/stored/sd_plugins.c:231 -#: src/filed/fd_plugins.c:1167 +#: src/stored/stored_conf.c:371 #, c-format -msgid "Plugin license incompatible. Plugin=%s license=%s\n" +msgid "Warning: unknown resource type %d\n" msgstr "" -#: src/dird/dir_plugins.c:226 src/stored/sd_plugins.c:239 -#: src/filed/fd_plugins.c:1175 +#: src/stored/stored_conf.c:567 #, c-format -msgid "Plugin size incorrect. Plugin=%s wanted=%d got=%d\n" +msgid "\"%s\" item is required in \"%s\" resource, but not found.\n" msgstr "" -#: src/dird/backup.c:96 -msgid "No Storage specification found in Job or Pool.\n" +#: src/stored/stored_conf.c:573 +#, c-format +msgid "Too many items in \"%s\" resource\n" msgstr "" -#: src/dird/backup.c:256 +#: src/stored/stored_conf.c:594 src/dird/dird_conf.c:1488 +#: src/filed/filed_conf.c:459 #, c-format -msgid "Using BaseJobId(s): %s\n" +msgid "Cannot find Director resource %s\n" msgstr "" -#: src/dird/backup.c:266 -msgid "Cannot find previous jobids.\n" +#: src/stored/stored_conf.c:600 src/dird/dird_conf.c:1495 +#, c-format +msgid "Cannot find Storage resource %s\n" msgstr "" -#: src/dird/backup.c:275 -msgid "Sending Accurate information.\n" +#: src/stored/stored_conf.c:607 +#, c-format +msgid "Cannot find AutoChanger resource %s\n" msgstr "" -#: src/dird/backup.c:328 +#: src/stored/stored_conf.c:623 #, c-format -msgid "Start Backup JobId %s, Job=%s\n" +msgid "Unable to init lock: ERR=%s\n" msgstr "" -#: src/dird/backup.c:521 +#: src/stored/stored_conf.c:681 #, c-format -msgid "Unexpected Client Job message: %s\n" +msgid "" +"Attempt to define second \"%s\" resource named \"%s\" is not permitted.\n" msgstr "" -#: src/dird/backup.c:534 +#: src/stored/dircmd.c:157 #, c-format -msgid "Network error with FD during %s: ERR=%s\n" +msgid "Connection request from %s failed.\n" msgstr "" -#: src/dird/backup.c:569 -msgid "No Job status returned from FD.\n" +#: src/stored/dircmd.c:168 +#, c-format +msgid "Invalid connection from %s. Len=%d\n" msgstr "" -#: src/dird/backup.c:657 -msgid "Backup failed -- incomplete" +#: src/stored/dircmd.c:215 src/filed/authenticate.c:196 +msgid "Unable to authenticate Director\n" msgstr "" -#: src/dird/backup.c:730 +#: src/stored/dircmd.c:308 #, c-format -msgid "" -"%s %s %s (%s):\n" -" Build OS: %s %s %s\n" -" JobId: %d\n" -" Job: %s\n" -" Backup Level: %s%s\n" -" Client: \"%s\" %s\n" -" FileSet: \"%s\" %s\n" -" Pool: \"%s\" (From %s)\n" -" Catalog: \"%s\" (From %s)\n" -" Storage: \"%s\" (From %s)\n" -" Scheduled time: %s\n" -" Start time: %s\n" -" End time: %s\n" -" Elapsed time: %s\n" -" Priority: %d\n" -" FD Files Written: %s\n" -" SD Files Written: %s\n" -" FD Bytes Written: %s (%sB)\n" -" SD Bytes Written: %s (%sB)\n" -" Rate: %.1f KB/s\n" -" Software Compression: %s\n" -"%s VSS: %s\n" -" Encryption: %s\n" -" Accurate: %s\n" -" Volume name(s): %s\n" -" Volume Session Id: %d\n" -" Volume Session Time: %d\n" -" Last Volume Bytes: %s (%sB)\n" -" Non-fatal FD errors: %d\n" -" SD Errors: %d\n" -" FD termination status: %s\n" -" SD termination status: %s\n" -" Termination: %s\n" -"\n" +msgid "Bad client command: %s" msgstr "" -#: src/dird/backup.c:832 -#, c-format -msgid "Could not get Job Volume Parameters to update Bootstrap file. ERR=%s\n" +#: src/stored/dircmd.c:318 +msgid "Client daemon" msgstr "" -#: src/dird/backup.c:868 +#: src/stored/dircmd.c:321 #, c-format -msgid "" -"Could not open WriteBootstrap file:\n" -"%s: ERR=%s\n" +msgid "Failed to connect to Client daemon: %s:%d\n" msgstr "" -#: src/dird/restore.c:137 src/dird/msgchan.c:476 +#: src/stored/dircmd.c:358 src/filed/job.c:1855 #, c-format -msgid "Could not open bootstrap file %s: ERR=%s\n" +msgid "Bad storage command: %s" msgstr "" -#: src/dird/restore.c:185 src/dird/restore.c:276 -#, c-format -msgid "Could not get storage resource '%s'.\n" +#: src/stored/dircmd.c:377 src/dird/msgchan.c:121 src/filed/job.c:1880 +#: src/qt-console/tray-monitor/tray-monitor.cpp:363 +msgid "Storage daemon" msgstr "" -#: src/dird/restore.c:314 +#: src/stored/dircmd.c:380 src/filed/job.c:1883 #, c-format -msgid "Could not acquire read storage lock for \"%s\"" +msgid "Failed to connect to Storage daemon: %s:%d\n" msgstr "" -#: src/dird/restore.c:505 -msgid "" -"Cannot restore without a bootstrap file.\n" -"You probably ran a restore job directly. All restore jobs must\n" -"be run using the restore command.\n" +#: src/stored/dircmd.c:397 +msgid "In storage_cmd port==0, no prior Storage connection.\n" msgstr "" -#: src/dird/restore.c:513 +#: src/stored/dircmd.c:445 #, c-format -msgid "Start Restore Job %s\n" +msgid "3991 Bad setdebug command: %s\n" msgstr "" -#: src/dird/restore.c:564 -msgid "Restore OK -- warning file count mismatch" +#: src/stored/dircmd.c:479 +msgid "3903 Error scanning cancel command.\n" msgstr "" -#: src/dird/restore.c:566 -msgid "Restore OK" +#: src/stored/dircmd.c:483 +#, c-format +msgid "3904 Job %s not found.\n" msgstr "" -#: src/dird/restore.c:570 -msgid "Restore OK -- with warnings" +#: src/stored/dircmd.c:511 +#, c-format +msgid "3000 JobId=%ld Job=\"%s\" marked to be %s.\n" msgstr "" -#: src/dird/restore.c:574 -msgid "*** Restore Error ***" +#: src/stored/dircmd.c:590 src/stored/dircmd.c:971 src/stored/dircmd.c:1066 +#: src/stored/dircmd.c:1177 src/stored/dircmd.c:1299 src/stored/dircmd.c:1341 +#, c-format +msgid "3999 Device \"%s\" not found or could not be opened.\n" msgstr "" -#: src/dird/restore.c:584 -msgid "Restore Canceled" +#: src/stored/dircmd.c:595 +#, c-format +msgid "3903 Error scanning label command: %s\n" msgstr "" -#: src/dird/restore.c:611 +#: src/stored/dircmd.c:644 #, c-format -msgid "" -"%s %s %s (%s):\n" -" Build OS: %s %s %s\n" -" JobId: %d\n" -" Job: %s\n" -" Restore Client: %s\n" -" Start time: %s\n" -" End time: %s\n" -" Files Expected: %s\n" -" Files Restored: %s\n" -" Bytes Restored: %s\n" -" Rate: %.1f KB/s\n" -" FD Errors: %d\n" -" FD termination status: %s\n" -" SD termination status: %s\n" -" Termination: %s\n" -"\n" +msgid "3910 Unable to open device \"%s\": ERR=%s\n" msgstr "" -#: src/dird/ua_status.c:174 -msgid "Status available for:\n" +#: src/stored/dircmd.c:661 +#, c-format +msgid "3920 Cannot label Volume because it is already labeled: \"%s\"\n" msgstr "" -#: src/dird/ua_status.c:180 -msgid "Select daemon type for status" +#: src/stored/dircmd.c:668 +msgid "3921 Wrong volume mounted.\n" msgstr "" -#: src/dird/ua_status.c:294 src/stored/status.c:248 +#: src/stored/dircmd.c:672 +msgid "3922 Cannot relabel an ANSI/IBM labeled Volume.\n" +msgstr "" + +#: src/stored/dircmd.c:680 #, c-format -msgid "%s Version: %s (%s) %s %s %s\n" +msgid "3912 Failed to label Volume: ERR=%s\n" msgstr "" -#: src/dird/ua_status.c:297 +#: src/stored/dircmd.c:690 #, c-format -msgid "Daemon started %s. Jobs: run=%d, running=%d mode=%d,%d\n" +msgid "3915 Failed to label Volume: ERR=%s\n" msgstr "" -#: src/dird/ua_status.c:300 src/stored/status.c:258 src/filed/status.c:142 +#: src/stored/dircmd.c:693 #, c-format -msgid " Heap: heap=%s smbytes=%s max_bytes=%s bufs=%s max_bufs=%s\n" +msgid "3914 Failed to label Volume (no media): ERR=%s\n" msgstr "" -#: src/dird/ua_status.c:358 +#: src/stored/dircmd.c:696 #, c-format -msgid "" -"\n" -"Failed to connect to Storage daemon %s.\n" -"====\n" +msgid "3913 Cannot label Volume. Unknown status %d from read_volume_label()\n" msgstr "" -#: src/dird/ua_status.c:400 +#: src/stored/dircmd.c:733 #, c-format -msgid "" -"Failed to connect to Client %s.\n" -"====\n" +msgid "3001 Mounted Volume: %s\n" msgstr "" -#: src/dird/ua_status.c:408 -msgid "Connected to file daemon\n" +#: src/stored/dircmd.c:737 src/stored/dircmd.c:1377 +#, c-format +msgid "" +"3902 Cannot mount Volume on Storage Device \"%s\" because:\n" +"%s" msgstr "" -#: src/dird/ua_status.c:428 +#: src/stored/dircmd.c:768 src/stored/reserve.c:646 +#, c-format msgid "" "\n" -"Scheduled Jobs:\n" +" Device \"%s\" requested by DIR could not be opened or does not exist.\n" msgstr "" -#: src/dird/ua_status.c:429 +#: src/stored/dircmd.c:790 src/stored/reserve.c:642 +#, c-format msgid "" -"Level Type Pri Scheduled Name Volume\n" +"\n" +" Device \"%s\" in changer \"%s\" requested by DIR could not be opened or " +"does not exist.\n" msgstr "" -#: src/dird/ua_status.c:430 -msgid "===================================================================================\n" +#: src/stored/dircmd.c:854 +msgid "Specified slot ignored. " msgstr "" -#: src/dird/ua_status.c:486 +#: src/stored/dircmd.c:871 src/stored/dircmd.c:929 #, c-format -msgid "%-14s\t%-8s\t%3d\t%-18s\t%-18s\t%s\n" +msgid "3901 Unable to open device \"%s\": ERR=%s\n" msgstr "" -#: src/dird/ua_status.c:490 +#: src/stored/dircmd.c:891 src/stored/dircmd.c:920 #, c-format -msgid "%-14s %-8s %3d %-18s %-18s %s\n" +msgid "3001 Device \"%s\" is mounted with Volume \"%s\"\n" msgstr "" -#: src/dird/ua_status.c:544 -msgid "Ignoring invalid value for days. Max is 500.\n" +#: src/stored/dircmd.c:894 src/stored/dircmd.c:923 src/stored/dircmd.c:938 +#, c-format +msgid "" +"3905 Device \"%s\" open but no Bacula volume is mounted.\n" +"If this is not a blank tape, try unmounting and remounting the Volume.\n" msgstr "" -#: src/dird/ua_status.c:587 -msgid "No Scheduled Jobs.\n" +#: src/stored/dircmd.c:904 +#, c-format +msgid "3001 Device \"%s\" is doing acquire.\n" msgstr "" -#: src/dird/ua_status.c:604 src/stored/status.c:450 src/filed/status.c:183 -msgid "" -"\n" -"Running Jobs:\n" +#: src/stored/dircmd.c:909 src/stored/dircmd.c:1037 +#, c-format +msgid "3903 Device \"%s\" is being labeled.\n" msgstr "" -#: src/dird/ua_status.c:612 +#: src/stored/dircmd.c:935 #, c-format -msgid "Console connected at %s\n" +msgid "3001 Device \"%s\" is already mounted with Volume \"%s\"\n" msgstr "" -#: src/dird/ua_status.c:622 -msgid "" -"No Jobs running.\n" -"====\n" +#: src/stored/dircmd.c:947 +#, c-format +msgid "3002 Device \"%s\" is mounted.\n" msgstr "" -#: src/dird/ua_status.c:628 -msgid " JobId Level Name Status\n" +#: src/stored/dircmd.c:949 src/stored/dircmd.c:1006 src/stored/dircmd.c:1025 +#: src/stored/dircmd.c:1057 +#, c-format +msgid "3907 %s" msgstr "" -#: src/dird/ua_status.c:629 src/filed/status.c:342 -msgid "======================================================================\n" +#: src/stored/dircmd.c:952 +#, c-format +msgid "3906 File device \"%s\" is always mounted.\n" msgstr "" -#: src/dird/ua_status.c:638 -msgid "is waiting execution" +#: src/stored/dircmd.c:961 +#, c-format +msgid "3930 Device \"%s\" is being released.\n" msgstr "" -#: src/dird/ua_status.c:641 -msgid "is running" +#: src/stored/dircmd.c:965 +#, c-format +msgid "3905 Unknown wait state %d\n" msgstr "" -#: src/dird/ua_status.c:644 -msgid "is blocked" +#: src/stored/dircmd.c:975 +#, c-format +msgid "3909 Error scanning mount command: %s\n" msgstr "" -#: src/dird/ua_status.c:647 -msgid "has terminated" +#: src/stored/dircmd.c:1003 src/stored/dircmd.c:1059 +#, c-format +msgid "3002 Device \"%s\" unmounted.\n" msgstr "" -#: src/dird/ua_status.c:650 -msgid "has terminated with warnings" +#: src/stored/dircmd.c:1010 +#, c-format +msgid "3901 Device \"%s\" is already unmounted.\n" msgstr "" -#: src/dird/ua_status.c:653 -msgid "has erred" +#: src/stored/dircmd.c:1028 +#, c-format +msgid "3001 Device \"%s\" unmounted.\n" msgstr "" -#: src/dird/ua_status.c:656 -msgid "has errors" +#: src/stored/dircmd.c:1033 +#, c-format +msgid "3902 Device \"%s\" is busy in acquire.\n" msgstr "" -#: src/dird/ua_status.c:659 -msgid "has a fatal error" +#: src/stored/dircmd.c:1071 +#, c-format +msgid "3907 Error scanning unmount command: %s\n" msgstr "" -#: src/dird/ua_status.c:662 -msgid "has verify differences" +#: src/stored/dircmd.c:1099 +msgid "3916 Error scanning action_on_purge command\n" msgstr "" -#: src/dird/ua_status.c:665 -msgid "has been canceled" +#: src/stored/dircmd.c:1142 +#, c-format +msgid "3921 Device \"%s\" already released.\n" msgstr "" -#: src/dird/ua_status.c:670 -msgid "is waiting on Client" +#: src/stored/dircmd.c:1149 +#, c-format +msgid "3922 Device \"%s\" waiting for sysop.\n" msgstr "" -#: src/dird/ua_status.c:672 +#: src/stored/dircmd.c:1155 #, c-format -msgid "is waiting on Client %s" +msgid "3922 Device \"%s\" waiting for mount.\n" msgstr "" -#: src/dird/ua_status.c:680 src/dird/ua_status.c:682 +#: src/stored/dircmd.c:1159 #, c-format -msgid "is waiting on Storage \"%s\"" +msgid "3923 Device \"%s\" is busy in acquire.\n" msgstr "" -#: src/dird/ua_status.c:684 -msgid "is waiting on Storage" +#: src/stored/dircmd.c:1163 +#, c-format +msgid "3914 Device \"%s\" is being labeled.\n" msgstr "" -#: src/dird/ua_status.c:690 -msgid "is waiting on max Storage jobs" +#: src/stored/dircmd.c:1171 +#, c-format +msgid "3022 Device \"%s\" released.\n" msgstr "" -#: src/dird/ua_status.c:693 -msgid "is waiting on max Client jobs" +#: src/stored/dircmd.c:1182 +#, c-format +msgid "3927 Error scanning release command: %s\n" msgstr "" -#: src/dird/ua_status.c:696 -msgid "is waiting on max Job jobs" +#: src/stored/dircmd.c:1211 +#, c-format +msgid "Could not create bootstrap file %s: ERR=%s\n" msgstr "" -#: src/dird/ua_status.c:699 -msgid "is waiting on max total jobs" +#: src/stored/dircmd.c:1224 +msgid "Error parsing bootstrap file.\n" msgstr "" -#: src/dird/ua_status.c:702 -msgid "is waiting for its start time" +#: src/stored/dircmd.c:1286 +#, c-format +msgid "3998 Device \"%s\" is not an autochanger.\n" msgstr "" -#: src/dird/ua_status.c:705 -msgid "is waiting for higher priority jobs to finish" +#: src/stored/dircmd.c:1303 +#, c-format +msgid "3908 Error scanning autochanger drives/list/slots command: %s\n" msgstr "" -#: src/dird/ua_status.c:708 src/dird/ua_status.c:759 src/lib/util.c:241 -msgid "SD committing Data" +#: src/stored/dircmd.c:1345 +#, c-format +msgid "3909 Error scanning readlabel command: %s\n" msgstr "" -#: src/dird/ua_status.c:711 src/dird/ua_status.c:762 src/lib/util.c:244 -msgid "SD despooling Data" +#: src/stored/dircmd.c:1373 +#, c-format +msgid "3001 Volume=%s Slot=%d\n" msgstr "" -#: src/dird/ua_status.c:714 src/dird/ua_status.c:765 src/lib/util.c:247 -msgid "SD despooling Attributes" +#: src/stored/dircmd.c:1405 +#, c-format +msgid "3931 Device \"%s\" is BLOCKED. user unmounted.\n" msgstr "" -#: src/dird/ua_status.c:717 src/dird/ua_status.c:768 src/lib/util.c:250 -msgid "Dir inserting Attributes" +#: src/stored/dircmd.c:1409 +#, c-format +msgid "" +"3932 Device \"%s\" is BLOCKED. user unmounted during wait for media/mount.\n" msgstr "" -#: src/dird/ua_status.c:722 +#: src/stored/dircmd.c:1413 #, c-format -msgid "is in unknown state %c" +msgid "3933 Device \"%s\" is BLOCKED waiting for media.\n" msgstr "" -#: src/dird/ua_status.c:736 -msgid "is waiting for a mount request" +#: src/stored/dircmd.c:1417 +#, c-format +msgid "3934 Device \"%s\" is being initialized.\n" msgstr "" -#: src/dird/ua_status.c:743 -msgid "is waiting for an appendable Volume" +#: src/stored/dircmd.c:1421 +#, c-format +msgid "3935 Device \"%s\" is blocked labeling a Volume.\n" msgstr "" -#: src/dird/ua_status.c:751 -msgid "is waiting for Client to connect to Storage daemon" +#: src/stored/dircmd.c:1425 +#, c-format +msgid "3935 Device \"%s\" is blocked for unknown reason.\n" msgstr "" -#: src/dird/ua_status.c:753 +#: src/stored/dircmd.c:1430 #, c-format -msgid "is waiting for Client %s to connect to Storage %s" +msgid "3936 Device \"%s\" is busy reading.\n" msgstr "" -#: src/dird/ua_status.c:784 +#: src/stored/dircmd.c:1433 #, c-format -msgid "%6d\t%-6s\t%-20s\t%s\t%s\n" +msgid "3937 Device \"%s\" is busy with writers=%d reserved=%d.\n" msgstr "" -#: src/dird/ua_status.c:788 +#: src/stored/dev.c:129 #, c-format -msgid "%6d %-6s %-20s %s\n" +msgid "Unable to stat device %s: ERR=%s\n" msgstr "" -#: src/dird/ua_status.c:792 +#: src/stored/dev.c:147 #, c-format -msgid " %-30s\n" +msgid "" +"%s is an unknown device type. Must be tape or directory\n" +" or have RequiresMount=yes for DVD. st_mode=%x\n" msgstr "" -#: src/dird/ua_status.c:812 -msgid "No Terminated Jobs.\n" +#: src/stored/dev.c:157 +msgid "DVD support is now deprecated.\n" msgstr "" -#: src/dird/ua_status.c:818 src/stored/status.c:572 src/filed/status.c:330 -msgid "" -"\n" -"Terminated Jobs:\n" +#: src/stored/dev.c:160 +msgid "Aligned device not supported. Please use \"DeviceType = File\"\n" msgstr "" -#: src/dird/ua_status.c:819 src/stored/status.c:579 src/filed/status.c:340 -msgid " JobId Level Files Bytes Status Finished Name \n" +#: src/stored/dev.c:256 +#, c-format +msgid "Unable to stat mount point %s: ERR=%s\n" msgstr "" -#: src/dird/ua_status.c:820 -msgid "====================================================================\n" +#: src/stored/dev.c:261 +msgid "" +"Mount and unmount commands must defined for a device which requires mount.\n" msgstr "" -#: src/dird/ua_status.c:852 src/stored/status.c:601 src/lib/util.c:180 -#: src/filed/status.c:363 -msgid "Created" +#: src/stored/dev.c:272 +#, c-format +msgid "Min block size > max on device %s\n" msgstr "" -#: src/dird/ua_status.c:856 src/stored/status.c:605 src/lib/util.c:196 -#: src/lib/util.c:331 src/lib/util.c:478 src/filed/status.c:367 -msgid "Error" +#: src/stored/dev.c:276 +#, c-format +msgid "Block size %u on device %s is too large, using default %u\n" msgstr "" -#: src/dird/ua_status.c:859 src/stored/status.c:608 src/filed/status.c:370 -msgid "Diffs" +#: src/stored/dev.c:281 +#, c-format +msgid "Max block size %u not multiple of device %s block size=%d.\n" msgstr "" -#: src/dird/ua_status.c:865 src/stored/status.c:614 src/stored/btape.c:1523 -#: src/lib/util.c:189 src/lib/util.c:324 src/filed/status.c:376 -#: src/wx-console/wxbconfigpanel.cpp:209 -msgid "OK" +#: src/stored/dev.c:285 +#, c-format +msgid "Max Vol Size < 8 * Max Block Size for device %s\n" msgstr "" -#: src/dird/ua_status.c:868 src/stored/status.c:617 src/lib/util.c:202 -#: src/lib/util.c:327 -msgid "OK -- with warnings" +#: src/stored/dev.c:295 src/stored/dev.c:347 src/lib/openssl.c:110 +#: src/lib/openssl.c:169 +#, c-format +msgid "Unable to init mutex: ERR=%s\n" msgstr "" -#: src/dird/ua_status.c:871 src/stored/status.c:620 src/filed/status.c:379 -msgid "Other" +#: src/stored/dev.c:301 src/stored/dev.c:307 +#, c-format +msgid "Unable to init cond variable: ERR=%s\n" msgstr "" -#: src/dird/ua_status.c:875 src/stored/status.c:632 src/filed/status.c:391 +#: src/stored/dev.c:313 #, c-format -msgid "%6d\t%-6s\t%8s\t%10s\t%-7s\t%-8s\t%s\n" +msgid "Unable to init spool mutex: ERR=%s\n" msgstr "" -#: src/dird/ua_status.c:883 src/stored/status.c:640 src/filed/status.c:399 +#: src/stored/dev.c:319 #, c-format -msgid "%6d %-6s %8s %10s %-7s %-8s %s\n" +msgid "Unable to init acquire mutex: ERR=%s\n" msgstr "" -#: src/dird/ua_status.c:892 -msgid "\n" +#: src/stored/dev.c:325 +#, c-format +msgid "Unable to init read acquire mutex: ERR=%s\n" msgstr "" -#: src/dird/ua_input.c:103 -msgid "Enter slot" +#: src/stored/dev.c:331 +#, c-format +msgid "Unable to init volcat mutex: ERR=%s\n" msgstr "" -#: src/dird/ua_input.c:107 src/dird/ua_input.c:113 +#: src/stored/dev.c:337 #, c-format -msgid "Expected a positive integer, got: %s\n" +msgid "Unable to init dcrs mutex: ERR=%s\n" msgstr "" -#: src/dird/ua_input.c:170 -msgid "Invalid response. You must answer yes or no.\n" +#: src/stored/dev.c:426 +msgid "Illegal mode given to open dev.\n" msgstr "" -#: src/dird/ua_input.c:193 -msgid "Invalid Enabled value, it must be yes, no, archived, 0, 1, or 2\n" +#: src/stored/dev.c:478 +msgid "Bad device call. Device not open\n" msgstr "" -#: src/dird/ua_input.c:220 +#: src/stored/dev.c:490 #, c-format -msgid "Illegal character \"%c\" in a comment.\n" +msgid "Seek error: ERR=%s\n" msgstr "" -#: src/dird/ua_input.c:227 -msgid "Comment too long.\n" +#: src/stored/dev.c:491 src/stored/tape_dev.c:293 src/stored/file_dev.c:73 +#: src/stored/file_dev.c:100 +#, c-format +msgid "lseek error on %s. ERR=%s.\n" msgstr "" -#: src/dird/ua_input.c:233 -msgid "Comment must be at least one character long.\n" +#: src/stored/fd_cmds.c:193 +#, c-format +msgid "Command error with FD, hanging up. ERR=%s\n" msgstr "" -#: src/dird/pythondir.c:121 src/stored/pythonsd.c:101 -#: src/stored/pythonsd.c:166 src/filed/pythonfd.c:94 src/filed/pythonfd.c:148 -#: src/filed/pythonfd.c:212 -msgid "Job pointer not found." +#: src/stored/fd_cmds.c:196 +msgid "Command error with FD, hanging up.\n" msgstr "" -#: src/dird/pythondir.c:153 -msgid "Pool record not found." +#: src/stored/fd_cmds.c:207 +#, c-format +msgid "FD command not found: %s\n" msgstr "" -#: src/dird/pythondir.c:209 src/stored/pythonsd.c:143 src/filed/pythonfd.c:125 -#, c-format -msgid "Attribute %s not found." +#: src/stored/fd_cmds.c:238 +msgid "Attempt to append on non-open session.\n" msgstr "" -#: src/dird/pythondir.c:252 src/dird/pythondir.c:258 src/stored/pythonsd.c:183 -#: src/filed/pythonfd.c:167 -msgid "Read-only attribute" +#: src/stored/fd_cmds.c:250 src/stored/fd_cmds.c:293 +msgid "Attempt to close non-open session.\n" msgstr "" -#: src/dird/pythondir.c:284 -msgid "Priority must be 1-100" +#: src/stored/fd_cmds.c:268 +msgid "Attempt to open already open session.\n" msgstr "" -#: src/dird/pythondir.c:289 -msgid "Job Level can be set only during JobInit" +#: src/stored/fd_cmds.c:322 +msgid "Attempt to read on non-open session.\n" msgstr "" -#: src/dird/pythondir.c:303 -msgid "Bad JobLevel string" +#: src/stored/fd_cmds.c:340 src/stored/fd_cmds.c:349 +msgid "Attempt to open read on non-open session.\n" msgstr "" -#: src/dird/job.c:62 +#: src/stored/fd_cmds.c:412 src/dird/getmsg.c:365 #, c-format -msgid "Could not init job queue: ERR=%s\n" +msgid "Bad response to %s command: wanted %s, got %s\n" msgstr "" -#: src/dird/job.c:94 +#: src/stored/fd_cmds.c:416 src/dird/getmsg.c:370 #, c-format -msgid "Could not add job queue: ERR=%s\n" +msgid "Socket error on %s command: ERR=%s\n" msgstr "" -#: src/dird/job.c:183 src/dird/job.c:433 src/dird/job.c:435 src/dird/job.c:485 -#: src/dird/job.c:487 src/dird/job.c:1129 src/dird/job.c:1170 -#: src/dird/job.c:1179 -msgid "Job resource" +#: src/stored/block_util.c:88 +#, c-format +msgid "" +"Dump block %s %p: size=%d BlkNum=%d\n" +" Hdrcksum=%x cksum=%x\n" msgstr "" -#: src/dird/job.c:230 src/dird/job.c:349 +#: src/stored/block_util.c:103 #, c-format -msgid "Unimplemented job type: %d\n" +msgid " Rec: VId=%u VT=%u FI=%s Strm=%s len=%d reclen=%d\n" msgstr "" -#: src/dird/job.c:272 -msgid "Job canceled because max start delay time exceeded.\n" +#: src/stored/block_util.c:165 +#, c-format +msgid "%d block read errors not printed.\n" msgstr "" -#: src/dird/job.c:277 -msgid "Job canceled because max run sched time exceeded.\n" +#: src/stored/block_util.c:281 src/stored/block_util.c:297 +#: src/stored/block_util.c:307 +#, c-format +msgid "" +"Volume data error at %u:%u! Wanted ID: \"%s\", got \"%s\". Buffer " +"discarded.\n" msgstr "" -#: src/dird/job.c:403 +#: src/stored/block_util.c:322 #, c-format -msgid "JobId %s, Job %s marked to be canceled.\n" +msgid "" +"Volume data error at %u:%u! Block length %u is insane (too large), probably " +"due to a bad archive.\n" msgstr "" -#: src/dird/job.c:413 -msgid "Failed to connect to File daemon.\n" +#: src/stored/block_util.c:349 +#, c-format +msgid "" +"Volume data error at %u:%u!\n" +"Block checksum mismatch in block=%u len=%d: calc=%x blk=%x\n" msgstr "" -#: src/dird/job.c:548 -msgid "Max wait time exceeded. Job canceled.\n" +#: src/stored/block_util.c:435 +#, c-format +msgid "" +"User defined maximum volume size %s will be exceeded on device %s.\n" +" Marking Volume \"%s\" as Full.\n" msgstr "" -#: src/dird/job.c:553 -msgid "Max run time exceeded. Job canceled.\n" +#: src/stored/block_util.c:472 src/stored/block_util.c:478 +#, c-format +msgid "Backspace file at EOT failed. ERR=%s\n" msgstr "" -#: src/dird/job.c:558 -msgid "Max run sched time exceeded. Job canceled.\n" +#: src/stored/block_util.c:485 +#, c-format +msgid "Backspace record at EOT failed. ERR=%s\n" msgstr "" -#: src/dird/job.c:680 +#: src/stored/block_util.c:502 #, c-format -msgid "Pool \"%s\" not in database. ERR=%s" +msgid "Re-read last block at EOT failed. ERR=%s" msgstr "" -#: src/dird/job.c:684 +#: src/stored/block_util.c:512 #, c-format -msgid "Created database record for Pool \"%s\".\n" +msgid "" +"Re-read of last block: block numbers differ by more than one.\n" +"Probable tape misconfiguration and data loss. Read block=%u Want block=%u.\n" msgstr "" -#: src/dird/job.c:766 src/dird/job.c:809 +#: src/stored/block_util.c:517 #, c-format -msgid "JobId %d already running. Duplicate job not allowed.\n" +msgid "" +"Re-read of last block OK, but block numbers differ. Read block=%u Want block=" +"%u.\n" msgstr "" -#: src/dird/job.c:797 +#: src/stored/block_util.c:521 +msgid "Re-read of last block succeeded.\n" +msgstr "" + +#: src/stored/block_util.c:560 #, c-format -msgid "Cancelling duplicate JobId=%d.\n" +msgid "" +"Error writing final EOF to tape. This Volume may not be readable.\n" +"%s" msgstr "" -#: src/dird/job.c:828 src/dird/job.c:1116 -msgid "Run pool override" +#: src/stored/block_util.c:578 +msgid "Error sending Volume info to Director.\n" msgstr "" -#: src/dird/job.c:839 -msgid "Run FullPool override" +#: src/stored/bcopy.c:64 +#, c-format +msgid "" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: bcopy [-d debug_level] \n" +" -b bootstrap specify a bootstrap file\n" +" -c specify a Storage configuration file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -i specify input Volume names (separated by |)\n" +" -o specify output Volume names (separated by |)\n" +" -p proceed inspite of errors\n" +" -v verbose\n" +" -w specify working directory (default /tmp)\n" +" -? print this message\n" +"\n" msgstr "" -#: src/dird/job.c:841 -msgid "Job FullPool override" +#: src/stored/bcopy.c:209 +msgid "Write of last block failed.\n" msgstr "" -#: src/dird/job.c:850 -msgid "Run IncPool override" +#: src/stored/bcopy.c:213 +#, c-format +msgid "%u Jobs copied. %u records copied.\n" msgstr "" -#: src/dird/job.c:852 -msgid "Job IncPool override" +#: src/stored/bcopy.c:246 +msgid "Volume is prelabeled. This volume cannot be copied.\n" msgstr "" -#: src/dird/job.c:861 -msgid "Run DiffPool override" +#: src/stored/bcopy.c:249 +msgid "Volume label not copied.\n" msgstr "" -#: src/dird/job.c:863 -msgid "Job DiffPool override" +#: src/stored/bcopy.c:255 +msgid "Copy skipped. Record does not match BSR filter.\n" msgstr "" -#: src/dird/job.c:893 src/stored/bscan.c:1056 -#, c-format -msgid "Could not create Client record. ERR=%s\n" +#: src/stored/bcopy.c:286 +msgid "EOM label not copied.\n" msgstr "" -#: src/dird/job.c:929 -msgid "FileSet MD5 digest not found.\n" +#: src/stored/bcopy.c:289 +msgid "EOT label not copied.\n" msgstr "" -#: src/dird/job.c:934 +#: src/stored/tape_dev.c:226 #, c-format -msgid "Could not create FileSet \"%s\" record. ERR=%s\n" +msgid "No tape loaded or drive offline on %s.\n" msgstr "" -#: src/dird/job.c:976 +#: src/stored/tape_dev.c:236 #, c-format -msgid "Error updating job record. %s" -msgstr "" - -#: src/dird/job.c:1121 -msgid "Run storage override" -msgstr "" - -#: src/dird/job.c:1189 -msgid "Client resource" +msgid "Rewind error on %s. ERR=%s.\n" msgstr "" -#: src/dird/job.c:1406 +#: src/stored/tape_dev.c:261 #, c-format -msgid "Could not start clone job: \"%s\".\n" +msgid "Bad call to eod. Device %s not open\n" msgstr "" -#: src/dird/job.c:1409 +#: src/stored/tape_dev.c:333 #, c-format -msgid "Clone JobId %d started.\n" +msgid "ioctl MTEOM error on %s. ERR=%s.\n" msgstr "" -#: src/dird/authenticate.c:83 src/dird/authenticate.c:84 -#: src/tray-monitor/authenticate.c:132 -#: src/qt-console/tray-monitor/authenticate.cpp:131 +#: src/stored/tape_dev.c:344 src/stored/os.c:184 #, c-format -msgid "Error sending Hello to Storage daemon. ERR=%s\n" +msgid "ioctl MTIOCGET error on %s. ERR=%s.\n" msgstr "" -#: src/dird/authenticate.c:113 -msgid "Director and Storage daemon passwords or names not the same.\n" +#: src/stored/tape_dev.c:428 +msgid "Bad call to load_dev. Device not open\n" msgstr "" -#: src/dird/authenticate.c:115 +#: src/stored/tape_dev.c:439 src/stored/tape_dev.c:452 #, c-format -msgid "" -"Director unable to authenticate with Storage daemon at \"%s:%d\". Possible " -"causes:\n" -"Passwords or names not the same or\n" -"Maximum Concurrent Jobs exceeded on the SD or\n" -"SD networking messed up (restart daemon).\n" -"Please see " +msgid "ioctl MTLOAD error on %s. ERR=%s.\n" msgstr "" -#: src/dird/authenticate.c:127 src/wx-console/authenticate.c:127 -#: src/console/authenticate.c:122 -msgid "" -"Authorization problem: Remote server did not advertise required TLS " -"support.\n" +#: src/stored/tape_dev.c:483 +#, c-format +msgid "ioctl MTOFFL error on %s. ERR=%s.\n" msgstr "" -#: src/dird/authenticate.c:134 src/stored/authenticate.c:146 -#: src/stored/authenticate.c:257 src/wx-console/authenticate.c:133 -#: src/console/authenticate.c:129 src/filed/authenticate.c:160 -#: src/filed/authenticate.c:279 -msgid "Authorization problem: Remote server requires TLS.\n" +#: src/stored/tape_dev.c:524 +msgid "Bad call to fsf. Device not open\n" msgstr "" -#: src/dird/authenticate.c:143 +#: src/stored/tape_dev.c:535 src/stored/tape_dev.c:662 #, c-format -msgid "TLS negotiation failed with SD at \"%s:%d\"\n" +msgid "Device %s at End of Tape.\n" msgstr "" -#: src/dird/authenticate.c:155 +#: src/stored/tape_dev.c:566 src/stored/tape_dev.c:642 #, c-format -msgid "bdird set configuration file to file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -t test - read configuration and exit\n" -" -? print this message.\n" -"\n" +msgid "Unable to stat device %s. ERR=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:270 -#: src/qt-console/tray-monitor/tray-monitor.cpp:216 +#: src/stored/file_dev.c:235 #, c-format -msgid "" -"Error: %d Monitor resources defined in %s. You must define one and only one " -"Monitor resource.\n" +msgid "Device %s doesn't support ftruncate(). Recreating file %s.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:301 -#: src/qt-console/tray-monitor/tray-monitor.cpp:248 +#: src/stored/file_dev.c:247 #, c-format -msgid "" -"No Client, Storage or Director resource defined in %s\n" -"Without that I don't how to get status from the File, Storage or Director " -"Daemon :-(\n" +msgid "Could not reopen: %s, ERR=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:323 -#: src/qt-console/tray-monitor/tray-monitor.cpp:263 +#: src/stored/lock.c:231 src/stored/lock.c:259 #, c-format -msgid "" -"Invalid refresh interval defined in %s\n" -"This value must be greater or equal to 1 second and less or equal to 10 " -"minutes (read value: %d).\n" -msgstr "" - -#: src/tray-monitor/tray-monitor.c:330 -msgid "Bacula daemon status monitor" -msgstr "" - -#: src/tray-monitor/tray-monitor.c:339 -msgid "Open status window..." +msgid "pthread_cond_wait failure. ERR=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:345 -msgid "Exit" +#: src/stored/lock.c:475 +msgid "unknown blocked code" msgstr "" -#: src/tray-monitor/tray-monitor.c:357 -msgid "Bacula tray monitor" +#: src/stored/read.c:55 +msgid "No Volume names found for restore.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:382 -msgid " (DIR)" +#: src/stored/read.c:132 src/stored/read.c:250 +#, c-format +msgid ">filed: Error Hdr=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:386 -msgid " (FD)" +#: src/stored/read.c:133 src/stored/read.c:166 src/stored/read.c:223 +#: src/stored/read.c:251 src/stored/read.c:266 +#, c-format +msgid "Error sending to File daemon. ERR=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:390 -msgid " (SD)" +#: src/stored/read.c:165 src/stored/read.c:265 +#, c-format +msgid "Error sending to FD. ERR=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:403 -msgid "Unknown status." +#: src/stored/autochanger.c:62 +#, c-format +msgid "No Changer Name given for device %s. Cannot continue.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:477 -msgid "Refresh interval in seconds: " +#: src/stored/autochanger.c:68 +#, c-format +msgid "No Changer Command given for device %s. Cannot continue.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:485 -msgid "Refresh now" +#: src/stored/autochanger.c:137 +#, c-format +msgid "No slot defined in catalog (slot=%d) for Volume \"%s\" on %s.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:489 -msgid "About" +#: src/stored/autochanger.c:139 +msgid "Cartridge change or \"update slots\" may be required.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:493 -msgid "Close" +#: src/stored/autochanger.c:145 +#, c-format +msgid "No \"Changer Device\" for %s. Manual load of Volume may be required.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:513 +#: src/stored/autochanger.c:152 #, c-format -msgid "Disconnecting from Director %s:%d\n" +msgid "No \"Changer Command\" for %s. Manual load of Volume may be requird.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:516 +#: src/stored/autochanger.c:186 #, c-format -msgid "Disconnecting from Client %s:%d\n" +msgid "3304 Issuing autochanger \"load slot %d, drive %d\" command.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:519 +#: src/stored/autochanger.c:194 #, c-format -msgid "Disconnecting from Storage %s:%d\n" +msgid "3305 Autochanger \"load slot %d, drive %d\", status is OK.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:560 src/tray-monitor/tray-monitor.c:571 -msgid "Bacula Tray Monitor" +#: src/stored/autochanger.c:207 +#, c-format +msgid "" +"3992 Bad autochanger \"load slot %d, drive %d\": ERR=%s.\n" +"Results=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:562 src/tray-monitor/tray-monitor.c:573 -msgid "Written by Nicolas Boichat\n" +#: src/stored/autochanger.c:270 +#, c-format +msgid "3301 Issuing autochanger \"loaded? drive %d\" command.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:563 src/tray-monitor/tray-monitor.c:574 -msgid "Version" +#: src/stored/autochanger.c:282 +#, c-format +msgid "3302 Autochanger \"loaded? drive %d\", result is Slot %d.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:656 -#: src/qt-console/tray-monitor/tray-monitor.cpp:331 +#: src/stored/autochanger.c:289 #, c-format -msgid "Error, currentitem is not a Client or a Storage..\n" +msgid "3302 Autochanger \"loaded? drive %d\", result: nothing loaded.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:730 +#: src/stored/autochanger.c:301 #, c-format msgid "" -"Current job: %s\n" -"Last job: %s" +"3991 Bad autochanger \"loaded? drive %d\" command: ERR=%s.\n" +"Results=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:742 +#: src/stored/autochanger.c:321 #, c-format -msgid " (%d errors)" +msgid "Lock failure on autochanger. ERR=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:745 +#: src/stored/autochanger.c:335 #, c-format -msgid " (%d error)" -msgstr "" - -#: src/tray-monitor/tray-monitor.c:783 -msgid "No current job." -msgstr "" - -#: src/tray-monitor/tray-monitor.c:786 -msgid "No last job." +msgid "Unlock failure on autochanger. ERR=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:794 -msgid "Job status: Created" +#: src/stored/autochanger.c:382 src/stored/autochanger.c:548 +#, c-format +msgid "3307 Issuing autochanger \"unload slot %d, drive %d\" command.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:799 -msgid "Job status: Running" +#: src/stored/autochanger.c:395 +#, c-format +msgid "" +"3995 Bad autochanger \"unload slot %d, drive %d\": ERR=%s\n" +"Results=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:803 -msgid "Job status: Blocked" +#: src/stored/autochanger.c:498 +#, c-format +msgid "Volume \"%s\" wanted on %s is in use by device %s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:808 -msgid "Job status: Terminated" +#: src/stored/autochanger.c:565 +#, c-format +msgid "3997 Bad autochanger \"unload slot %d, drive %d\": ERR=%s.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:813 -msgid "Job status: Terminated in error" +#: src/stored/autochanger.c:608 +#, c-format +msgid "3993 Device %s not an autochanger device.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:819 -msgid "Job status: Error" +#: src/stored/autochanger.c:635 +#, c-format +msgid "3306 Issuing autochanger \"%s\" command.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:823 -msgid "Job status: Fatal error" +#: src/stored/autochanger.c:638 +msgid "3996 Open bpipe failed.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:828 -msgid "Job status: Verify differences" +#: src/stored/os.c:125 +#, c-format +msgid "Unable to set eotmodel on device %s: ERR=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:833 -msgid "Job status: Canceled" +#: src/stored/os.c:179 +msgid " Bacula status:" msgstr "" -#: src/tray-monitor/tray-monitor.c:838 -msgid "Job status: Waiting on File daemon" +#: src/stored/os.c:180 src/stored/os.c:263 src/stored/os.c:265 +#, c-format +msgid " file=%d block=%d\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:843 -msgid "Job status: Waiting on the Storage daemon" +#: src/stored/os.c:188 +msgid " Device status:" msgstr "" -#: src/tray-monitor/tray-monitor.c:848 -msgid "Job status: Waiting for new media" +#: src/stored/os.c:364 +#, c-format +msgid "unknown func code %d" msgstr "" -#: src/tray-monitor/tray-monitor.c:853 -msgid "Job status: Waiting for Mount" +#: src/stored/os.c:370 +#, c-format +msgid "I/O function \"%s\" not supported on this device.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:858 -msgid "Job status: Waiting for storage resource" +#: src/stored/read_records.c:77 +#, c-format +msgid "End of Volume at file %u on device %s, Volume \"%s\"\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:863 -msgid "Job status: Waiting for job resource" +#: src/stored/read_records.c:81 +msgid "End of all volumes.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:868 -msgid "Job status: Waiting for Client resource" +#: src/stored/read_records.c:131 +msgid "Did fsr in attemp to skip bad record.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:873 -msgid "Job status: Waiting for maximum jobs" +#: src/stored/read_records.c:370 +#, c-format +msgid "Forward spacing Volume \"%s\" to file:block %u:%u.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:878 -msgid "Job status: Waiting for start time" +#: src/stored/read_records.c:394 +msgid "Begin Session" msgstr "" -#: src/tray-monitor/tray-monitor.c:883 -msgid "Job status: Waiting for higher priority jobs to finish" +#: src/stored/read_records.c:398 +msgid "End Session" msgstr "" -#: src/tray-monitor/tray-monitor.c:888 +#: src/stored/read_records.c:404 #, c-format -msgid "Unknown job status %c." +msgid "Unknown code %d\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:889 +#: src/stored/parse_bsr.c:115 #, c-format -msgid "Job status: Unknown(%c)" +msgid "Cannot open bootstrap file %s: %s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:896 +#: src/stored/parse_bsr.c:219 #, c-format -msgid "Bad scan : '%s' %d\n" +msgid "Device \"%s\" in bsr at inappropriate place.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:936 src/console/console.c:1143 +#: src/stored/parse_bsr.c:282 #, c-format -msgid "Connecting to Director %s:%d\n" +msgid "REGEX '%s' compile error. ERR=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:937 -#: src/qt-console/tray-monitor/tray-monitor.cpp:359 -#: src/qt-console/bcomm/dircomm.cpp:103 -#, c-format -msgid "Connecting to Director %s:%d" +#: src/stored/parse_bsr.c:325 +msgid "JobType not yet implemented\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:938 src/wx-console/console_thread.cpp:428 -#: src/qt-console/tray-monitor/tray-monitor.cpp:361 -#: src/qt-console/bcomm/dircomm.cpp:173 -msgid "Director daemon" +#: src/stored/parse_bsr.c:333 +msgid "JobLevel not yet implemented\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:943 +#: src/stored/parse_bsr.c:378 #, c-format -msgid "Connecting to Client %s:%d\n" +msgid "MediaType %s in bsr at inappropriate place.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:944 -#: src/qt-console/tray-monitor/tray-monitor.cpp:366 +#: src/stored/parse_bsr.c:683 #, c-format -msgid "Connecting to Client %s:%d" +msgid "Slot %d in bsr at inappropriate place.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:945 -#: src/qt-console/tray-monitor/tray-monitor.cpp:368 -msgid "File daemon" +#: src/stored/parse_bsr.c:707 +#, c-format +msgid "VolFile : %u-%u\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:950 +#: src/stored/parse_bsr.c:715 #, c-format -msgid "Connecting to Storage %s:%d\n" +msgid "VolBlock : %u-%u\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:951 -#: src/qt-console/tray-monitor/tray-monitor.cpp:373 +#: src/stored/parse_bsr.c:723 #, c-format -msgid "Connecting to Storage %s:%d" +msgid "VolAddr : %llu-%llu\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:956 src/tray-monitor/tray-monitor.c:994 -#: src/qt-console/tray-monitor/tray-monitor.cpp:379 -#: src/qt-console/tray-monitor/tray-monitor.cpp:409 +#: src/stored/parse_bsr.c:732 #, c-format -msgid "Error, currentitem is not a Client, a Storage or a Director..\n" +msgid "FileIndex : %u\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:962 -msgid "Cannot connect to daemon.\n" +#: src/stored/parse_bsr.c:734 +#, c-format +msgid "FileIndex : %u-%u\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:963 -#: src/qt-console/tray-monitor/tray-monitor.cpp:384 -msgid "Cannot connect to daemon." +#: src/stored/parse_bsr.c:744 +#, c-format +msgid "JobId : %u\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:975 -#: src/qt-console/tray-monitor/tray-monitor.cpp:393 +#: src/stored/parse_bsr.c:746 #, c-format -msgid "Authentication error : %s" +msgid "JobId : %u-%u\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:982 -msgid "Opened connection with Director daemon.\n" +#: src/stored/parse_bsr.c:756 +#, c-format +msgid "SessId : %u\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:983 -#: src/qt-console/tray-monitor/tray-monitor.cpp:400 -msgid "Opened connection with Director daemon." +#: src/stored/parse_bsr.c:758 +#, c-format +msgid "SessId : %u-%u\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:986 -msgid "Opened connection with File daemon.\n" +#: src/stored/parse_bsr.c:767 +#, c-format +msgid "VolumeName : %s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:987 -#: src/qt-console/tray-monitor/tray-monitor.cpp:403 -msgid "Opened connection with File daemon." +#: src/stored/parse_bsr.c:768 +#, c-format +msgid " MediaType : %s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:990 -msgid "Opened connection with Storage daemon.\n" +#: src/stored/parse_bsr.c:769 +#, c-format +msgid " Device : %s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:991 -#: src/qt-console/tray-monitor/tray-monitor.cpp:406 -msgid "Opened connection with Storage daemon." +#: src/stored/parse_bsr.c:770 +#, c-format +msgid " Slot : %d\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:1028 -msgid "<< Error: BNET_SUB_PROMPT signal received. >>\n" +#: src/stored/parse_bsr.c:779 +#, c-format +msgid "Client : %s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:1033 src/wx-console/console_thread.cpp:494 -msgid "<< Heartbeat signal received, answered. >>\n" +#: src/stored/parse_bsr.c:787 +#, c-format +msgid "Job : %s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:1037 +#: src/stored/parse_bsr.c:795 #, c-format -msgid "<< Unexpected signal received : %s >>\n" +msgid "SessTime : %u\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:1042 -msgid "\n" +#: src/stored/parse_bsr.c:806 +msgid "BSR is NULL\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:1046 -#: src/qt-console/tray-monitor/tray-monitor.cpp:457 -msgid "Error : BNET_HARDEOF or BNET_ERROR" +#: src/stored/parse_bsr.c:810 +#, c-format +msgid "Next : 0x%x\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:1052 -msgid "\n" +#: src/stored/parse_bsr.c:811 +#, c-format +msgid "Root bsr : 0x%x\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:1056 -#: src/qt-console/tray-monitor/tray-monitor.cpp:466 -msgid "Error : Connection closed." +#: src/stored/parse_bsr.c:823 +#, c-format +msgid "count : %u\n" msgstr "" -#: src/tray-monitor/authenticate.c:88 -#: src/qt-console/tray-monitor/authenticate.cpp:87 -msgid "" -"Director authorization problem.\n" -"Most likely the passwords do not agree.\n" -"Please see " +#: src/stored/parse_bsr.c:824 +#, c-format +msgid "found : %u\n" msgstr "" -#: src/tray-monitor/authenticate.c:97 src/console/authenticate.c:152 -#: src/qt-console/tray-monitor/authenticate.cpp:96 +#: src/stored/parse_bsr.c:827 #, c-format -msgid "Bad response to Hello command: ERR=%s\n" +msgid "done : %s\n" msgstr "" -#: src/tray-monitor/authenticate.c:104 src/wx-console/authenticate.c:157 -#: src/console/authenticate.c:159 -#: src/qt-console/tray-monitor/authenticate.cpp:103 -msgid "Director rejected Hello command\n" +#: src/stored/parse_bsr.c:827 src/dird/ua_run.c:173 src/dird/backup.c:916 +#: src/dird/backup.c:917 src/dird/backup.c:918 src/dird/ua_input.c:141 +#: src/dird/ua_update.c:245 src/dird/ua_update.c:265 src/dird/ua_update.c:687 +#: src/tools/dbcheck.c:1340 +msgid "yes" msgstr "" -#: src/tray-monitor/authenticate.c:138 -#: src/qt-console/tray-monitor/authenticate.cpp:137 -msgid "" -"Director and Storage daemon passwords or names not the same.\n" -"Please see " +#: src/stored/parse_bsr.c:827 src/dird/ua_run.c:176 src/dird/backup.c:916 +#: src/dird/backup.c:917 src/dird/backup.c:918 src/dird/ua_input.c:145 +#: src/dird/ua_update.c:245 src/dird/ua_update.c:265 src/dird/ua_update.c:687 +msgid "no" msgstr "" -#: src/tray-monitor/authenticate.c:145 -#: src/qt-console/tray-monitor/authenticate.cpp:144 +#: src/stored/parse_bsr.c:828 #, c-format -msgid "bdird\n" -" -b specify a bootstrap file\n" -" -c specify a Storage configuration file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -e exclude list\n" -" -i include list\n" -" -j list jobs\n" -" -k list blocks\n" -" (no j or k option) list saved files\n" -" -L dump label\n" -" -p proceed inspite of errors\n" -" -v be verbose\n" -" -V specify Volume names (separated by |)\n" -" -? print this message\n" -"\n" +"SD Resources:\n" msgstr "" -#: src/stored/bls.c:149 src/stored/bextract.c:146 -#, c-format -msgid "Could not open exclude file: %s, ERR=%s\n" +#: src/stored/status.c:139 +msgid "" +"\n" +"Device status:\n" msgstr "" -#: src/stored/bls.c:164 src/stored/bextract.c:161 +#: src/stored/status.c:143 #, c-format -msgid "Could not open include file: %s, ERR=%s\n" -msgstr "" - -#: src/stored/bls.c:211 -msgid "No archive name specified\n" +msgid "Autochanger \"%s\" with devices:\n" msgstr "" -#: src/stored/bls.c:247 +#: src/stored/status.c:163 #, c-format msgid "" "\n" -"Warning, this Volume is a continuation of Volume %s\n" +"Device %s is %s:\n" +" Volume: %s\n" +" Pool: %s\n" +" Media type: %s\n" msgstr "" -#: src/stored/bls.c:290 -#, c-format -msgid "Got EOM at file %u on device %s, Volume \"%s\"\n" +#: src/stored/status.c:168 +msgid "waiting for" msgstr "" -#: src/stored/bls.c:301 -#, c-format -msgid "Mounted Volume \"%s\".\n" +#: src/stored/status.c:168 +msgid "mounted with" msgstr "" -#: src/stored/bls.c:303 -#, c-format -msgid "End of file %u on device %s, Volume \"%s\"\n" +#: src/stored/status.c:170 +msgid "*unknown*" msgstr "" -#: src/stored/bls.c:327 +#: src/stored/status.c:174 #, c-format msgid "" -"File:blk=%u:%u blk_num=%u blen=%u First rec FI=%s SessId=%u SessTim=%u Strm=" -"%s rlen=%d\n" +"\n" +"Device %s open but no Bacula volume is currently mounted.\n" msgstr "" -#: src/stored/bls.c:336 +#: src/stored/status.c:185 #, c-format -msgid "Block: %d size=%d\n" -msgstr "" - -#: src/stored/bls.c:386 src/stored/bextract.c:328 src/stored/bscan.c:688 -msgid "Cannot continue.\n" -msgstr "" - -#: src/stored/bls.c:388 -msgid "Attrib unpack error!\n" +msgid " Total Bytes=%s Blocks=%s Bytes/block=%s\n" msgstr "" -#: src/stored/bls.c:399 +#: src/stored/status.c:200 #, c-format -msgid "FileIndex=%d VolSessionId=%d VolSessionTime=%d Stream=%d DataLen=%d\n" +msgid " Total Bytes Read=%s Blocks Read=%s Bytes/block=%s\n" msgstr "" -#: src/stored/bls.c:425 src/stored/read_record.c:414 src/stored/bcopy.c:330 -msgid "Fresh Volume Label" +#: src/stored/status.c:206 +#, c-format +msgid " Positioned at File=%s Block=%s\n" msgstr "" -#: src/stored/bls.c:428 src/stored/read_record.c:417 src/stored/bcopy.c:333 -msgid "Volume Label" +#: src/stored/status.c:213 +#, c-format +msgid "" +"\n" +"Device %s is not open.\n" msgstr "" -#: src/stored/bls.c:432 src/stored/label.c:1028 src/stored/bcopy.c:337 -msgid "Begin Job Session" +#: src/stored/status.c:217 +#, c-format +msgid "" +"\n" +"Device \"%s\" is not open or does not exist.\n" msgstr "" -#: src/stored/bls.c:437 src/stored/label.c:1031 src/stored/bcopy.c:341 -msgid "End Job Session" +#: src/stored/status.c:234 src/dird/ua_status.c:294 +#, c-format +msgid "%s Version: %s (%s) %s %s %s\n" msgstr "" -#: src/stored/bls.c:441 src/stored/bcopy.c:346 -msgid "End of Medium" +#: src/stored/status.c:241 +#, c-format +msgid "Daemon started %s. Jobs: run=%d, running=%d.\n" msgstr "" -#: src/stored/bls.c:444 -msgid "End of Physical Medium" +#: src/stored/status.c:244 src/dird/ua_status.c:300 src/filed/status.c:136 +#, c-format +msgid " Heap: heap=%s smbytes=%s max_bytes=%s bufs=%s max_bufs=%s\n" msgstr "" -#: src/stored/bls.c:447 -msgid "Start of object" +#: src/stored/status.c:279 +msgid "" +"No DEVICE structure.\n" +"\n" msgstr "" -#: src/stored/bls.c:450 -msgid "End of object" +#: src/stored/status.c:285 +msgid " Device is BLOCKED. User unmounted.\n" msgstr "" -#: src/stored/bls.c:453 src/stored/label.c:1040 src/stored/bcopy.c:349 -msgid "Unknown" +#: src/stored/status.c:289 +msgid " Device is BLOCKED. User unmounted during wait for media/mount.\n" msgstr "" -#: src/stored/bls.c:460 src/stored/read_record.c:435 src/stored/bcopy.c:355 +#: src/stored/status.c:300 #, c-format -msgid "%s Record: VolSessionId=%d VolSessionTime=%d JobId=%d DataLen=%d\n" +msgid "" +" Device is BLOCKED waiting for mount of volume \"%s\",\n" +" Pool: %s\n" +" Media type: %s\n" msgstr "" -#: src/stored/bls.c:479 src/stored/bextract.c:612 src/stored/bcopy.c:373 -#: src/stored/bscan.c:1374 src/stored/btape.c:3050 +#: src/stored/status.c:309 #, c-format -msgid "Mount Volume \"%s\" on device %s and press return when ready: " +msgid "" +" Device is BLOCKED waiting to create a volume for:\n" +" Pool: %s\n" +" Media type: %s\n" msgstr "" -#: src/stored/dircmd.c:155 -#, c-format -msgid "Connection request from %s failed.\n" +#: src/stored/status.c:321 +msgid " Device is BLOCKED waiting for media.\n" msgstr "" -#: src/stored/dircmd.c:166 -#, c-format -msgid "Invalid connection from %s. Len=%d\n" +#: src/stored/status.c:327 +msgid " Device is being initialized.\n" msgstr "" -#: src/stored/dircmd.c:210 src/filed/authenticate.c:208 -msgid "Unable to authenticate Director\n" +#: src/stored/status.c:331 +msgid " Device is blocked labeling a Volume.\n" msgstr "" -#: src/stored/dircmd.c:299 +#: src/stored/status.c:340 #, c-format -msgid "3991 Bad setdebug command: %s\n" +msgid " Slot %d %s loaded in drive %d.\n" msgstr "" -#: src/stored/dircmd.c:326 -msgid "3903 Error scanning cancel command.\n" +#: src/stored/status.c:344 +#, c-format +msgid " Drive %d is not loaded.\n" msgstr "" -#: src/stored/dircmd.c:330 -#, c-format -msgid "3904 Job %s not found.\n" +#: src/stored/status.c:379 +msgid "Device state:\n" msgstr "" -#: src/stored/dircmd.c:358 +#: src/stored/status.c:395 #, c-format -msgid "3000 JobId=%ld Job=\"%s\" marked to be %s.\n" +msgid " num_writers=%d reserves=%d block=%d\n" msgstr "" -#: src/stored/dircmd.c:437 src/stored/dircmd.c:812 src/stored/dircmd.c:904 -#: src/stored/dircmd.c:1015 src/stored/dircmd.c:1137 src/stored/dircmd.c:1179 -#, c-format -msgid "3999 Device \"%s\" not found or could not be opened.\n" +#: src/stored/status.c:399 +msgid "Attached JobsIds: " msgstr "" -#: src/stored/dircmd.c:442 +#: src/stored/status.c:419 #, c-format -msgid "3903 Error scanning label command: %s\n" +msgid " Archive name: %s Device name: %s\n" msgstr "" -#: src/stored/dircmd.c:492 +#: src/stored/status.c:422 #, c-format -msgid "3910 Unable to open device \"%s\": ERR=%s\n" +msgid " File=%u block=%u\n" msgstr "" -#: src/stored/dircmd.c:509 +#: src/stored/status.c:424 #, c-format -msgid "3920 Cannot label Volume because it is already labeled: \"%s\"\n" +msgid " Min block=%u Max block=%u\n" msgstr "" -#: src/stored/dircmd.c:516 -msgid "3921 Wrong volume mounted.\n" +#: src/stored/status.c:440 src/dird/ua_status.c:818 src/filed/status.c:188 +msgid "" +"\n" +"Running Jobs:\n" msgstr "" -#: src/stored/dircmd.c:520 -msgid "3922 Cannot relabel an ANSI/IBM labeled Volume.\n" +#: src/stored/status.c:445 +#, c-format +msgid "%s Job %s waiting for Client connection.\n" msgstr "" -#: src/stored/dircmd.c:528 +#: src/stored/status.c:461 #, c-format -msgid "3912 Failed to label Volume: ERR=%s\n" +msgid "" +"Reading: %s %s job %s JobId=%d Volume=\"%s\"\n" +" pool=\"%s\" device=%s\n" msgstr "" -#: src/stored/dircmd.c:538 +#: src/stored/status.c:474 #, c-format -msgid "3914 Failed to label Volume (no media): ERR=%s\n" +msgid "" +"Writing: %s %s job %s JobId=%d Volume=\"%s\"\n" +" pool=\"%s\" device=%s\n" msgstr "" -#: src/stored/dircmd.c:541 +#: src/stored/status.c:485 #, c-format -msgid "3913 Cannot label Volume. Unknown status %d from read_volume_label()\n" +msgid " spooling=%d despooling=%d despool_wait=%d\n" msgstr "" -#: src/stored/dircmd.c:578 +#: src/stored/status.c:501 #, c-format -msgid "3001 Mounted Volume: %s\n" +msgid " Files=%s Bytes=%s AveBytes/sec=%s LastBytes/sec=%s\n" msgstr "" -#: src/stored/dircmd.c:582 src/stored/dircmd.c:1215 +#: src/stored/status.c:513 #, c-format -msgid "" -"3902 Cannot mount Volume on Storage Device \"%s\" because:\n" -"%s" +msgid " FDReadSeqNo=%s in_msg=%u out_msg=%d fd=%d\n" msgstr "" -#: src/stored/dircmd.c:696 -msgid "Specified slot ignored. " +#: src/stored/status.c:519 +msgid " FDSocket closed\n" msgstr "" -#: src/stored/dircmd.c:712 src/stored/dircmd.c:770 -#, c-format -msgid "3901 Unable to open device \"%s\": ERR=%s\n" +#: src/stored/status.c:528 src/dird/ua_select.c:1211 src/filed/status.c:278 +msgid "No Jobs running.\n" msgstr "" -#: src/stored/dircmd.c:732 src/stored/dircmd.c:761 -#, c-format -msgid "3001 Device \"%s\" is mounted with Volume \"%s\"\n" +#: src/stored/status.c:540 +msgid "" +"\n" +"Jobs waiting to reserve a drive:\n" msgstr "" -#: src/stored/dircmd.c:735 src/stored/dircmd.c:764 src/stored/dircmd.c:779 +#: src/stored/status.c:604 #, c-format -msgid "" -"3905 Device \"%s\" open but no Bacula volume is mounted.\n" -"If this is not a blank tape, try unmounting and remounting the Volume.\n" +msgid "3900 No arg in .status command: %s\n" msgstr "" -#: src/stored/dircmd.c:745 +#: src/stored/status.c:652 #, c-format -msgid "3001 Device \"%s\" is doing acquire.\n" +msgid "3900 Unknown arg in .status command: %s\n" msgstr "" -#: src/stored/dircmd.c:750 src/stored/dircmd.c:875 -#, c-format -msgid "3903 Device \"%s\" is being labeled.\n" +#: src/stored/status.c:667 +msgid "Bacula Storage: Idle" msgstr "" -#: src/stored/dircmd.c:776 -#, c-format -msgid "3001 Device \"%s\" is already mounted with Volume \"%s\"\n" +#: src/stored/status.c:678 +msgid "Bacula Storage: Running" msgstr "" -#: src/stored/dircmd.c:788 -#, c-format -msgid "3002 Device \"%s\" is mounted.\n" +#: src/stored/status.c:692 +msgid "Bacula Storage: Last Job Canceled" msgstr "" -#: src/stored/dircmd.c:790 src/stored/dircmd.c:847 src/stored/dircmd.c:863 -#: src/stored/dircmd.c:895 -#, c-format -msgid "3907 %s" +#: src/stored/status.c:696 +msgid "Bacula Storage: Last Job Failed" msgstr "" -#: src/stored/dircmd.c:793 -#, c-format -msgid "3906 File device \"%s\" is always mounted.\n" +#: src/stored/status.c:700 +msgid "Bacula Storage: Last Job had Warnings" msgstr "" -#: src/stored/dircmd.c:802 +#: src/stored/sd_plugins.c:220 src/dird/dir_plugins.c:169 +#: src/filed/fd_plugins.c:1125 #, c-format -msgid "3930 Device \"%s\" is being released.\n" +msgid "Loaded plugin: %s\n" msgstr "" -#: src/stored/dircmd.c:806 +#: src/stored/sd_plugins.c:240 src/dird/dir_plugins.c:189 +#: src/filed/fd_plugins.c:1146 #, c-format -msgid "3905 Unknown wait state %d\n" +msgid "Plugin magic wrong. Plugin=%s wanted=%s got=%s\n" msgstr "" -#: src/stored/dircmd.c:816 +#: src/stored/sd_plugins.c:248 src/dird/dir_plugins.c:197 +#: src/filed/fd_plugins.c:1154 #, c-format -msgid "3909 Error scanning mount command: %s\n" +msgid "Plugin version incorrect. Plugin=%s wanted=%d got=%d\n" msgstr "" -#: src/stored/dircmd.c:844 src/stored/dircmd.c:897 +#: src/stored/sd_plugins.c:257 src/dird/dir_plugins.c:206 +#: src/filed/fd_plugins.c:1162 #, c-format -msgid "3002 Device \"%s\" unmounted.\n" +msgid "Plugin license incompatible. Plugin=%s license=%s\n" msgstr "" -#: src/stored/dircmd.c:851 +#: src/stored/sd_plugins.c:265 src/dird/dir_plugins.c:214 +#: src/filed/fd_plugins.c:1170 #, c-format -msgid "3901 Device \"%s\" is already unmounted.\n" +msgid "Plugin size incorrect. Plugin=%s wanted=%d got=%d\n" msgstr "" -#: src/stored/dircmd.c:866 -#, c-format -msgid "3001 Device \"%s\" unmounted.\n" +#: src/lib/sellist.c:57 +msgid "Negative numbers not permitted.\n" msgstr "" -#: src/stored/dircmd.c:871 -#, c-format -msgid "3902 Device \"%s\" is busy in acquire.\n" +#: src/lib/sellist.c:64 src/dird/ua_label.c:98 +msgid "Range end is not integer.\n" msgstr "" -#: src/stored/dircmd.c:909 -#, c-format -msgid "3907 Error scanning unmount command: %s\n" +#: src/lib/sellist.c:69 src/dird/ua_label.c:103 +msgid "Range start is not an integer.\n" msgstr "" -#: src/stored/dircmd.c:937 -msgid "3916 Error scanning action_on_purge command\n" +#: src/lib/sellist.c:75 src/dird/ua_label.c:109 +msgid "Range end not bigger than start.\n" msgstr "" -#: src/stored/dircmd.c:980 -#, c-format -msgid "3921 Device \"%s\" already released.\n" +#: src/lib/sellist.c:83 +msgid "User cancel requested.\n" msgstr "" -#: src/stored/dircmd.c:987 -#, c-format -msgid "3922 Device \"%s\" waiting for sysop.\n" +#: src/lib/sellist.c:93 src/dird/ua_label.c:115 +msgid "Input value is not an integer.\n" msgstr "" -#: src/stored/dircmd.c:993 -#, c-format -msgid "3922 Device \"%s\" waiting for mount.\n" +#: src/lib/sellist.c:105 +msgid "Selection items must be be greater than zero.\n" msgstr "" -#: src/stored/dircmd.c:997 -#, c-format -msgid "3923 Device \"%s\" is busy in acquire.\n" +#: src/lib/sellist.c:109 +msgid "Selection item too large.\n" msgstr "" -#: src/stored/dircmd.c:1001 -#, c-format -msgid "3914 Device \"%s\" is being labeled.\n" +#: src/lib/sellist.c:211 +msgid "No input string given.\n" msgstr "" -#: src/stored/dircmd.c:1009 +#: src/lib/plugins.c:105 #, c-format -msgid "3022 Device \"%s\" released.\n" +msgid "Failed to open Plugin directory %s: ERR=%s\n" msgstr "" -#: src/stored/dircmd.c:1020 +#: src/lib/plugins.c:122 #, c-format -msgid "3927 Error scanning release command: %s\n" +msgid "Failed to find any plugins in %s\n" msgstr "" -#: src/stored/dircmd.c:1049 src/filed/job.c:1535 +#: src/lib/plugins.c:156 #, c-format -msgid "Could not create bootstrap file %s: ERR=%s\n" +msgid "dlopen plugin %s failed: ERR=%s\n" msgstr "" -#: src/stored/dircmd.c:1062 -msgid "Error parsing bootstrap file.\n" +#: src/lib/plugins.c:167 +#, c-format +msgid "Lookup of loadPlugin in plugin %s failed: ERR=%s\n" msgstr "" -#: src/stored/dircmd.c:1124 +#: src/lib/plugins.c:176 #, c-format -msgid "3998 Device \"%s\" is not an autochanger.\n" +msgid "Lookup of unloadPlugin in plugin %s failed: ERR=%s\n" msgstr "" -#: src/stored/dircmd.c:1141 +#: src/lib/bnet.c:127 #, c-format -msgid "3908 Error scanning autochanger drives/list/slots command: %s\n" +msgid "Attr spool write error. wrote=%d wanted=%d bytes. ERR=%s\n" msgstr "" -#: src/stored/dircmd.c:1183 -#, c-format -msgid "3909 Error scanning readlabel command: %s\n" +#: src/lib/bnet.c:212 src/lib/bnet.c:253 +msgid "TLS connection initialization failed.\n" msgstr "" -#: src/stored/dircmd.c:1211 -#, c-format -msgid "3001 Volume=%s Slot=%d\n" +#: src/lib/bnet.c:220 +msgid "TLS Negotiation failed.\n" msgstr "" -#: src/stored/dircmd.c:1243 -#, c-format -msgid "3931 Device \"%s\" is BLOCKED. user unmounted.\n" +#: src/lib/bnet.c:226 src/lib/bnet.c:268 +msgid "" +"TLS certificate verification failed. Peer certificate did not match a " +"required commonName\n" msgstr "" -#: src/stored/dircmd.c:1247 +#: src/lib/bnet.c:277 #, c-format msgid "" -"3932 Device \"%s\" is BLOCKED. user unmounted during wait for media/mount.\n" +"TLS host certificate verification failed. Host name \"%s\" did not match " +"presented certificate\n" msgstr "" -#: src/stored/dircmd.c:1251 -#, c-format -msgid "3933 Device \"%s\" is BLOCKED waiting for media.\n" +#: src/lib/bnet.c:294 +msgid "TLS enabled but not configured.\n" msgstr "" -#: src/stored/dircmd.c:1255 -#, c-format -msgid "3934 Device \"%s\" is being initialized.\n" +#: src/lib/bnet.c:300 +msgid "TLS enable but not configured.\n" msgstr "" -#: src/stored/dircmd.c:1259 -#, c-format -msgid "3935 Device \"%s\" is blocked labeling a Volume.\n" +#: src/lib/bnet.c:397 +msgid "No problem." msgstr "" -#: src/stored/dircmd.c:1263 -#, c-format -msgid "3935 Device \"%s\" is blocked for unknown reason.\n" +#: src/lib/bnet.c:400 +msgid "Authoritative answer for host not found." msgstr "" -#: src/stored/dircmd.c:1268 -#, c-format -msgid "3936 Device \"%s\" is busy reading.\n" +#: src/lib/bnet.c:403 +msgid "Non-authoritative for host not found, or ServerFail." msgstr "" -#: src/stored/dircmd.c:1271 -#, c-format -msgid "3937 Device \"%s\" is busy with writers=%d reserved=%d.\n" +#: src/lib/bnet.c:406 +msgid "Non-recoverable errors, FORMERR, REFUSED, or NOTIMP." msgstr "" -#: src/stored/parse_bsr.c:122 src/stored/parse_bsr.c:126 -#, c-format -msgid "" -"Bootstrap file error: %s\n" -" : Line %d, col %d of file %s\n" -"%s\n" +#: src/lib/bnet.c:409 +msgid "Valid name, no data record of resquested type." msgstr "" -#: src/stored/parse_bsr.c:148 -#, c-format -msgid "Cannot open bootstrap file %s: %s\n" +#: src/lib/bnet.c:412 +msgid "Unknown error." msgstr "" -#: src/stored/parse_bsr.c:279 +#: src/lib/bnet.c:554 #, c-format -msgid "MediaType %s in bsr at inappropriate place.\n" +msgid "Unknown sig %d" msgstr "" -#: src/stored/parse_bsr.c:311 +#: src/lib/openssl.c:131 src/lib/openssl.c:202 #, c-format -msgid "Device \"%s\" in bsr at inappropriate place.\n" +msgid "Unable to destroy mutex: ERR=%s\n" msgstr "" -#: src/stored/parse_bsr.c:484 -#, c-format -msgid "REGEX '%s' compile error. ERR=%s\n" +#: src/lib/var.c:2657 +msgid "everything ok" msgstr "" -#: src/stored/parse_bsr.c:494 -msgid "JobType not yet implemented\n" +#: src/lib/var.c:2658 +msgid "incomplete named character" msgstr "" -#: src/stored/parse_bsr.c:502 -msgid "JobLevel not yet implemented\n" +#: src/lib/var.c:2659 +msgid "incomplete hexadecimal value" msgstr "" -#: src/stored/parse_bsr.c:719 -#, c-format -msgid "Slot %d in bsr at inappropriate place.\n" +#: src/lib/var.c:2660 +msgid "invalid hexadecimal value" msgstr "" -#: src/stored/parse_bsr.c:743 -#, c-format -msgid "VolFile : %u-%u\n" +#: src/lib/var.c:2661 +msgid "octal value too large" msgstr "" -#: src/stored/parse_bsr.c:751 -#, c-format -msgid "VolBlock : %u-%u\n" +#: src/lib/var.c:2662 +msgid "invalid octal value" msgstr "" -#: src/stored/parse_bsr.c:759 -#, c-format -msgid "VolAddr : %llu-%llu\n" +#: src/lib/var.c:2663 +msgid "incomplete octal value" msgstr "" -#: src/stored/parse_bsr.c:768 -#, c-format -msgid "FileIndex : %u\n" +#: src/lib/var.c:2664 +msgid "incomplete grouped hexadecimal value" msgstr "" -#: src/stored/parse_bsr.c:770 -#, c-format -msgid "FileIndex : %u-%u\n" +#: src/lib/var.c:2665 +msgid "incorrect character class specification" msgstr "" -#: src/stored/parse_bsr.c:780 -#, c-format -msgid "JobId : %u\n" +#: src/lib/var.c:2666 +msgid "invalid expansion configuration" msgstr "" -#: src/stored/parse_bsr.c:782 -#, c-format -msgid "JobId : %u-%u\n" +#: src/lib/var.c:2667 +msgid "out of memory" msgstr "" -#: src/stored/parse_bsr.c:792 -#, c-format -msgid "SessId : %u\n" +#: src/lib/var.c:2668 +msgid "incomplete variable specification" msgstr "" -#: src/stored/parse_bsr.c:794 -#, c-format -msgid "SessId : %u-%u\n" +#: src/lib/var.c:2669 +msgid "undefined variable" msgstr "" -#: src/stored/parse_bsr.c:803 -#, c-format -msgid "VolumeName : %s\n" +#: src/lib/var.c:2670 +msgid "input is neither text nor variable" msgstr "" -#: src/stored/parse_bsr.c:804 -#, c-format -msgid " MediaType : %s\n" +#: src/lib/var.c:2671 +msgid "unknown command character in variable" msgstr "" -#: src/stored/parse_bsr.c:805 -#, c-format -msgid " Device : %s\n" +#: src/lib/var.c:2672 +msgid "malformatted search and replace operation" msgstr "" -#: src/stored/parse_bsr.c:806 -#, c-format -msgid " Slot : %d\n" +#: src/lib/var.c:2673 +msgid "unknown flag in search and replace operation" msgstr "" -#: src/stored/parse_bsr.c:815 -#, c-format -msgid "Client : %s\n" +#: src/lib/var.c:2674 +msgid "invalid regex in search and replace operation" msgstr "" -#: src/stored/parse_bsr.c:823 -#, c-format -msgid "Job : %s\n" +#: src/lib/var.c:2675 +msgid "missing parameter in command" msgstr "" -#: src/stored/parse_bsr.c:831 -#, c-format -msgid "SessTime : %u\n" +#: src/lib/var.c:2676 +msgid "empty search string in search and replace operation" +msgstr "" + +#: src/lib/var.c:2677 +msgid "start offset missing in cut operation" msgstr "" -#: src/stored/parse_bsr.c:842 -msgid "BSR is NULL\n" +#: src/lib/var.c:2678 +msgid "offsets in cut operation delimited by unknown character" msgstr "" -#: src/stored/parse_bsr.c:846 -#, c-format -msgid "Next : 0x%x\n" +#: src/lib/var.c:2679 +msgid "range out of bounds in cut operation" msgstr "" -#: src/stored/parse_bsr.c:847 -#, c-format -msgid "Root bsr : 0x%x\n" +#: src/lib/var.c:2680 +msgid "offset out of bounds in cut operation" msgstr "" -#: src/stored/parse_bsr.c:859 -#, c-format -msgid "count : %u\n" +#: src/lib/var.c:2681 +msgid "logic error in cut operation" msgstr "" -#: src/stored/parse_bsr.c:860 -#, c-format -msgid "found : %u\n" +#: src/lib/var.c:2682 +msgid "malformatted transpose operation" msgstr "" -#: src/stored/parse_bsr.c:863 -#, c-format -msgid "done : %s\n" +#: src/lib/var.c:2683 +msgid "source and target class mismatch in transpose operation" msgstr "" -#: src/stored/parse_bsr.c:864 -#, c-format -msgid "positioning : %d\n" +#: src/lib/var.c:2684 +msgid "empty character class in transpose operation" msgstr "" -#: src/stored/parse_bsr.c:865 -#, c-format -msgid "fast_reject : %d\n" +#: src/lib/var.c:2685 +msgid "incorrect character class in transpose operation" msgstr "" -#: src/stored/ansi_label.c:96 -#, c-format -msgid "Read error on device %s in ANSI label. ERR=%s\n" +#: src/lib/var.c:2686 +msgid "malformatted padding operation" msgstr "" -#: src/stored/ansi_label.c:106 -msgid "Insane! End of tape while reading ANSI label.\n" +#: src/lib/var.c:2687 +msgid "width parameter missing in padding operation" msgstr "" -#: src/stored/ansi_label.c:132 -msgid "No VOL1 label while reading ANSI/IBM label.\n" +#: src/lib/var.c:2688 +msgid "fill string missing in padding operation" msgstr "" -#: src/stored/ansi_label.c:155 -#, c-format -msgid "Wanted ANSI Volume \"%s\" got \"%s\"\n" +#: src/lib/var.c:2689 +msgid "unknown quoted pair in search and replace operation" msgstr "" -#: src/stored/ansi_label.c:166 -msgid "No HDR1 label while reading ANSI label.\n" +#: src/lib/var.c:2690 +msgid "sub-matching reference out of range" msgstr "" -#: src/stored/ansi_label.c:172 -#, c-format -msgid "ANSI/IBM Volume \"%s\" does not belong to Bacula.\n" +#: src/lib/var.c:2691 +msgid "invalid argument" msgstr "" -#: src/stored/ansi_label.c:184 -msgid "No HDR2 label while reading ANSI/IBM label.\n" +#: src/lib/var.c:2692 +msgid "incomplete quoted pair" msgstr "" -#: src/stored/ansi_label.c:199 -msgid "Unknown or bad ANSI/IBM label record.\n" +#: src/lib/var.c:2693 +msgid "lookup function does not support variable arrays" msgstr "" -#: src/stored/ansi_label.c:207 -msgid "Too many records in while reading ANSI/IBM label.\n" +#: src/lib/var.c:2694 +msgid "index of array variable contains an invalid character" msgstr "" -#: src/stored/ansi_label.c:307 -#, c-format -msgid "ANSI Volume label name \"%s\" longer than 6 chars.\n" +#: src/lib/var.c:2695 +msgid "index of array variable is incomplete" msgstr "" -#: src/stored/ansi_label.c:333 -#, c-format -msgid "Could not write ANSI VOL1 label. Wanted size=%d got=%d ERR=%s\n" +#: src/lib/var.c:2696 +msgid "bracket expression in array variable's index not closed" msgstr "" -#: src/stored/ansi_label.c:371 src/stored/ansi_label.c:400 -#, c-format -msgid "Could not write ANSI HDR1 label. ERR=%s\n" +#: src/lib/var.c:2697 +msgid "division by zero error in index specification" msgstr "" -#: src/stored/ansi_label.c:376 src/stored/ansi_label.c:407 -msgid "Could not write ANSI HDR1 label.\n" +#: src/lib/var.c:2698 +msgid "unterminated loop construct" msgstr "" -#: src/stored/ansi_label.c:412 -#, c-format -msgid "Error writing EOF to tape. ERR=%s" +#: src/lib/var.c:2699 +msgid "invalid character in loop limits" msgstr "" -#: src/stored/ansi_label.c:417 -msgid "write_ansi_ibm_label called for non-ANSI/IBM type\n" +#: src/lib/var.c:2700 +msgid "malformed operation argument list" msgstr "" -#: src/stored/append.c:68 -msgid "DCR is NULL!!!\n" +#: src/lib/var.c:2701 +msgid "undefined operation" msgstr "" -#: src/stored/append.c:73 -msgid "DEVICE is NULL!!!\n" +#: src/lib/var.c:2702 +msgid "formatting failure" msgstr "" -#: src/stored/append.c:83 -msgid "Unable to set network buffer size.\n" +#: src/lib/var.c:2711 +msgid "unknown error" msgstr "" -#: src/stored/append.c:95 src/stored/append.c:104 src/stored/append.c:116 -#: src/stored/askdir.c:340 src/stored/askdir.c:341 -msgid "NULL Volume name. This shouldn't happen!!!\n" +#: src/lib/util.c:168 src/dird/ua_status.c:1080 src/lib/status.h:102 +msgid "Created" msgstr "" -#: src/stored/append.c:110 src/stored/btape.c:2235 -#, c-format -msgid "Write session label failed. ERR=%s\n" +#: src/lib/util.c:171 +msgid "Running" msgstr "" -#: src/stored/append.c:122 -#, c-format -msgid "Network send error to FD. ERR=%s\n" +#: src/lib/util.c:174 +msgid "Blocked" msgstr "" -#: src/stored/append.c:159 -#, c-format -msgid "Error reading data header from FD. ERR=%s\n" +#: src/lib/util.c:181 src/lib/util.c:316 src/lib/util.c:463 +#: src/dird/ua_status.c:1084 src/lib/status.h:106 +msgid "Error" msgstr "" -#: src/stored/append.c:167 -#, c-format -msgid "Malformed data header from FD: %s\n" +#: src/lib/util.c:184 +msgid "Non-fatal error" msgstr "" -#: src/stored/append.c:187 -#, c-format -msgid "FI=%d from FD not positive or sequential=%d\n" +#: src/lib/util.c:187 src/lib/util.c:312 src/dird/ua_status.c:1096 +#: src/lib/status.h:118 +msgid "OK -- with warnings" msgstr "" -#: src/stored/append.c:235 -#, c-format -msgid "Network error reading from FD. ERR=%s\n" +#: src/lib/util.c:190 src/lib/util.c:322 +msgid "Canceled" msgstr "" -#: src/stored/append.c:265 src/stored/btape.c:2354 -#, c-format -msgid "Error writing end session label. ERR=%s\n" +#: src/lib/util.c:193 +msgid "Verify differences" msgstr "" -#: src/stored/append.c:277 src/stored/mac.c:126 src/stored/mac.c:261 -#: src/stored/spool.c:300 -#, c-format -msgid "Fatal append error on device %s: ERR=%s\n" +#: src/lib/util.c:196 +msgid "Waiting on FD" msgstr "" -#: src/stored/append.c:279 src/stored/mac.c:128 -msgid "Set ok=FALSE after write_block_to_device.\n" +#: src/lib/util.c:199 +msgid "Wait on SD" msgstr "" -#: src/stored/append.c:308 src/stored/mac.c:151 -#, c-format -msgid "Elapsed time=%02d:%02d:%02d, Transfer rate=%s Bytes/second\n" +#: src/lib/util.c:202 +msgid "Wait for new Volume" msgstr "" -#: src/stored/append.c:345 -#, c-format -msgid "Error updating file attributes. ERR=%s\n" +#: src/lib/util.c:205 +msgid "Waiting for mount" msgstr "" -#: src/stored/vol_mgr.c:93 -#, c-format -msgid "Unable to initialize volume list lock. ERR=%s\n" +#: src/lib/util.c:208 +msgid "Waiting for Storage resource" msgstr "" -#: src/stored/label.c:93 -#, c-format -msgid "Couldn't rewind device %s: ERR=%s\n" +#: src/lib/util.c:211 +msgid "Waiting for Job resource" msgstr "" -#: src/stored/label.c:110 src/stored/label.c:202 -#, c-format -msgid "Wrong Volume mounted on device %s: Wanted %s have %s\n" +#: src/lib/util.c:214 +msgid "Waiting for Client resource" msgstr "" -#: src/stored/label.c:113 src/stored/label.c:190 -#, c-format -msgid "Too many tries: %s" +#: src/lib/util.c:217 +msgid "Waiting on Max Jobs" msgstr "" -#: src/stored/label.c:130 -#, c-format -msgid "" -"Requested Volume \"%s\" on %s is not a Bacula labeled Volume, because: ERR=%s" +#: src/lib/util.c:220 +msgid "Waiting for Start Time" msgstr "" -#: src/stored/label.c:135 -msgid "Could not read Volume label from block.\n" +#: src/lib/util.c:223 +msgid "Waiting on Priority" msgstr "" -#: src/stored/label.c:138 -#, c-format -msgid "Could not unserialize Volume label: ERR=%s\n" +#: src/lib/util.c:226 src/dird/ua_status.c:931 src/dird/ua_status.c:982 +msgid "SD committing Data" msgstr "" -#: src/stored/label.c:143 -#, c-format -msgid "Volume Header Id bad: %s\n" +#: src/lib/util.c:229 src/dird/ua_status.c:934 src/dird/ua_status.c:985 +msgid "SD despooling Data" msgstr "" -#: src/stored/label.c:175 -#, c-format -msgid "Volume on %s has wrong Bacula version. Wanted %d got %d\n" +#: src/lib/util.c:232 src/dird/ua_status.c:937 src/dird/ua_status.c:988 +msgid "SD despooling Attributes" msgstr "" -#: src/stored/label.c:186 -#, c-format -msgid "Volume on %s has bad Bacula label type: %x\n" +#: src/lib/util.c:235 src/dird/ua_status.c:940 src/dird/ua_status.c:991 +msgid "Dir inserting Attributes" msgstr "" -#: src/stored/label.c:236 src/stored/label.c:397 src/stored/mount.c:463 +#: src/lib/util.c:242 #, c-format -msgid "Could not reserve volume %s on %s\n" +msgid "Unknown Job termination status=%d" msgstr "" -#: src/stored/label.c:277 -#, c-format -msgid "Cannot write Volume label to block for device %s\n" +#: src/lib/util.c:258 +msgid "Completed successfully" msgstr "" -#: src/stored/label.c:328 src/stored/label.c:426 src/stored/mount.c:218 -#, c-format -msgid "Open device %s Volume \"%s\" failed: ERR=%s\n" +#: src/lib/util.c:261 +msgid "Completed with warnings" msgstr "" -#: src/stored/label.c:451 -#, c-format -msgid "Rewind error on device %s: ERR=%s\n" +#: src/lib/util.c:264 +msgid "Terminated with errors" msgstr "" -#: src/stored/label.c:458 -#, c-format -msgid "Truncate error on device %s: ERR=%s\n" +#: src/lib/util.c:267 +msgid "Fatal error" msgstr "" -#: src/stored/label.c:464 -#, c-format -msgid "Failed to re-open DVD after truncate on device %s: ERR=%s\n" +#: src/lib/util.c:270 +msgid "Created, not yet running" msgstr "" -#: src/stored/label.c:487 -#, c-format -msgid "Unable to write device %s: ERR=%s\n" +#: src/lib/util.c:273 +msgid "Canceled by user" msgstr "" -#: src/stored/label.c:518 -#, c-format -msgid "Recycled volume \"%s\" on device %s, all previous data lost.\n" +#: src/lib/util.c:276 +msgid "Verify found differences" msgstr "" -#: src/stored/label.c:521 -#, c-format -msgid "Wrote label to prelabeled Volume \"%s\" on device %s\n" +#: src/lib/util.c:279 +msgid "Waiting for File daemon" msgstr "" -#: src/stored/label.c:721 -#, c-format -msgid "Bad Volume session label = %d\n" +#: src/lib/util.c:282 +msgid "Waiting for Storage daemon" msgstr "" -#: src/stored/label.c:776 -#, c-format -msgid "Expecting Volume Label, got FI=%s Stream=%s len=%d\n" +#: src/lib/util.c:285 +msgid "Waiting for higher priority jobs" msgstr "" -#: src/stored/label.c:903 -#, c-format -msgid "Unknown %d" +#: src/lib/util.c:288 +msgid "Batch inserting file records" msgstr "" -#: src/stored/label.c:907 -#, c-format -msgid "" -"\n" -"Volume Label:\n" -"Id : %sVerNo : %d\n" -"VolName : %s\n" -"PrevVolName : %s\n" -"VolFile : %d\n" -"LabelType : %s\n" -"LabelSize : %d\n" -"PoolName : %s\n" -"MediaType : %s\n" -"PoolType : %s\n" -"HostName : %s\n" +#: src/lib/util.c:319 +msgid "Fatal Error" msgstr "" -#: src/stored/label.c:929 -#, c-format -msgid "Date label written: %s\n" +#: src/lib/util.c:325 +msgid "Differences" msgstr "" -#: src/stored/label.c:935 -#, c-format -msgid "Date label written: %04d-%02d-%02d at %02d:%02d\n" +#: src/lib/util.c:328 +msgid "Unknown term code" msgstr "" -#: src/stored/label.c:955 -#, c-format -msgid "" -"\n" -"%s Record:\n" -"JobId : %d\n" -"VerNum : %d\n" -"PoolName : %s\n" -"PoolType : %s\n" -"JobName : %s\n" -"ClientName : %s\n" +#: src/lib/util.c:344 src/lib/jcr.c:220 +msgid "Backup" msgstr "" -#: src/stored/label.c:968 -#, c-format -msgid "" -"Job (unique name) : %s\n" -"FileSet : %s\n" -"JobType : %c\n" -"JobLevel : %c\n" +#: src/lib/util.c:347 +msgid "Migrated Job" msgstr "" -#: src/stored/label.c:977 -#, c-format -msgid "" -"JobFiles : %s\n" -"JobBytes : %s\n" -"StartBlock : %s\n" -"EndBlock : %s\n" -"StartFile : %s\n" -"EndFile : %s\n" -"JobErrors : %s\n" -"JobStatus : %c\n" +#: src/lib/util.c:350 +msgid "Verify" msgstr "" -#: src/stored/label.c:998 -#, c-format -msgid "Date written : %s\n" +#: src/lib/util.c:353 +msgid "Restore" msgstr "" -#: src/stored/label.c:1003 -#, c-format -msgid "Date written : %04d-%02d-%02d at %02d:%02d\n" +#: src/lib/util.c:356 +msgid "Console" msgstr "" -#: src/stored/label.c:1022 -msgid "Fresh Volume" +#: src/lib/util.c:359 +msgid "System or Console" msgstr "" -#: src/stored/label.c:1025 -msgid "Volume" +#: src/lib/util.c:362 +msgid "Admin" msgstr "" -#: src/stored/label.c:1034 src/stored/read_record.c:428 -msgid "End of Media" +#: src/lib/util.c:365 src/lib/util.c:455 +msgid "Archive" msgstr "" -#: src/stored/label.c:1037 -msgid "End of Tape" +#: src/lib/util.c:368 +msgid "Job Copy" msgstr "" -#: src/stored/label.c:1057 src/stored/label.c:1065 src/stored/label.c:1098 -#, c-format -msgid "%s Record: File:blk=%u:%u SessId=%d SessTime=%d JobId=%d DataLen=%d\n" +#: src/lib/util.c:371 +msgid "Copy" msgstr "" -#: src/stored/label.c:1062 -msgid "End of physical tape.\n" +#: src/lib/util.c:374 +msgid "Migrate" msgstr "" -#: src/stored/label.c:1077 src/stored/label.c:1086 -#, c-format -msgid "%s Record: File:blk=%u:%u SessId=%d SessTime=%d JobId=%d\n" +#: src/lib/util.c:377 +msgid "Scan" msgstr "" -#: src/stored/label.c:1079 -#, c-format -msgid " Job=%s Date=%s Level=%c Type=%c\n" +#: src/lib/util.c:381 +msgid "Unknown Type" msgstr "" -#: src/stored/label.c:1088 -#, c-format -msgid " Date=%s Level=%c Type=%c Files=%s Bytes=%s Errors=%d Status=%c\n" +#: src/lib/util.c:391 +msgid "Truncate" msgstr "" -#: src/stored/status.c:99 -msgid "Used Volume status:\n" +#: src/lib/util.c:394 src/filed/restore.c:1164 +msgid "None" msgstr "" -#: src/stored/status.c:117 -msgid "" -"\n" -"SD Resources:\n" +#: src/lib/util.c:408 +msgid "Base" msgstr "" -#: src/stored/status.c:153 -msgid "" -"\n" -"Device status:\n" +#: src/lib/util.c:411 src/lib/util.c:457 src/dird/ua_run.c:1147 +msgid "Full" msgstr "" -#: src/stored/status.c:157 -#, c-format -msgid "Autochanger \"%s\" with devices:\n" +#: src/lib/util.c:414 src/dird/ua_run.c:1148 +msgid "Incremental" msgstr "" -#: src/stored/status.c:177 -#, c-format -msgid "" -"\n" -"Device %s is %s:\n" -" Volume: %s\n" -" Pool: %s\n" -" Media type: %s\n" +#: src/lib/util.c:417 src/dird/ua_run.c:1149 +msgid "Differential" msgstr "" -#: src/stored/status.c:182 -msgid "waiting for" +#: src/lib/util.c:420 src/dird/ua_run.c:1150 +msgid "Since" msgstr "" -#: src/stored/status.c:182 -msgid "mounted with" +#: src/lib/util.c:423 src/dird/ua_run.c:1177 +msgid "Verify Catalog" msgstr "" -#: src/stored/status.c:184 -msgid "*unknown*" +#: src/lib/util.c:426 +msgid "Verify Init Catalog" msgstr "" -#: src/stored/status.c:188 -#, c-format -msgid "" -"\n" -"Device %s open but no Bacula volume is currently mounted.\n" +#: src/lib/util.c:429 src/dird/ua_run.c:1178 +msgid "Verify Volume to Catalog" msgstr "" -#: src/stored/status.c:199 -#, c-format -msgid " Total Bytes=%s Blocks=%s Bytes/block=%s\n" +#: src/lib/util.c:432 src/dird/ua_run.c:1179 +msgid "Verify Disk to Catalog" msgstr "" -#: src/stored/status.c:214 -#, c-format -msgid " Total Bytes Read=%s Blocks Read=%s Bytes/block=%s\n" +#: src/lib/util.c:435 +msgid "Verify Data" msgstr "" -#: src/stored/status.c:220 -#, c-format -msgid " Positioned at File=%s Block=%s\n" +#: src/lib/util.c:438 +msgid "Virtual Full" msgstr "" -#: src/stored/status.c:227 -#, c-format -msgid "" -"\n" -"Device %s is not open.\n" +#: src/lib/util.c:444 +msgid "Unknown Job Level" msgstr "" -#: src/stored/status.c:231 -#, c-format -msgid "" -"\n" -"Device \"%s\" is not open or does not exist.\n" +#: src/lib/util.c:454 +msgid "Append" msgstr "" -#: src/stored/status.c:255 -#, c-format -msgid "Daemon started %s. Jobs: run=%d, running=%d.\n" +#: src/lib/util.c:456 +msgid "Disabled" msgstr "" -#: src/stored/status.c:293 -msgid "" -"No DEVICE structure.\n" -"\n" +#: src/lib/util.c:458 +msgid "Used" msgstr "" -#: src/stored/status.c:299 -msgid " Device is BLOCKED. User unmounted.\n" +#: src/lib/util.c:459 +msgid "Cleaning" msgstr "" -#: src/stored/status.c:303 -msgid " Device is BLOCKED. User unmounted during wait for media/mount.\n" +#: src/lib/util.c:460 +msgid "Purged" msgstr "" -#: src/stored/status.c:313 -#, c-format -msgid "" -" Device is BLOCKED waiting for mount of volume \"%s\",\n" -" Pool: %s\n" -" Media type: %s\n" +#: src/lib/util.c:461 +msgid "Recycle" msgstr "" -#: src/stored/status.c:322 -#, c-format -msgid "" -" Device is BLOCKED waiting to create a volume for:\n" -" Pool: %s\n" -" Media type: %s\n" +#: src/lib/util.c:462 +msgid "Read-Only" msgstr "" -#: src/stored/status.c:333 -msgid " Device is BLOCKED waiting for media.\n" +#: src/lib/util.c:474 +msgid "Invalid volume status" msgstr "" -#: src/stored/status.c:339 -msgid " Device is being initialized.\n" +#: src/lib/util.c:736 src/lib/util.c:746 src/lib/util.c:754 src/lib/util.c:761 +#: src/lib/util.c:768 src/lib/util.c:782 src/lib/util.c:792 src/lib/util.c:805 +#: src/lib/util.c:816 src/filed/restore.c:1180 +msgid "*none*" msgstr "" -#: src/stored/status.c:343 -msgid " Device is blocked labeling a Volume.\n" +#: src/lib/util.c:854 +msgid "Working directory not defined. Cannot continue.\n" msgstr "" -#: src/stored/status.c:352 +#: src/lib/util.c:857 #, c-format -msgid " Slot %d %s loaded in drive %d.\n" +msgid "Working Directory: \"%s\" not found. Cannot continue.\n" msgstr "" -#: src/stored/status.c:356 +#: src/lib/util.c:861 #, c-format -msgid " Drive %d is not loaded.\n" +msgid "Working Directory: \"%s\" is not a directory. Cannot continue.\n" msgstr "" -#: src/stored/status.c:371 src/stored/btape.c:688 -#, c-format -msgid "Configured device capabilities:\n" +#: src/lib/devlock.c:318 src/lib/save/devlock.c:337 +msgid "writeunlock called too many times.\n" msgstr "" -#: src/stored/status.c:389 -msgid "Device state:\n" +#: src/lib/devlock.c:323 src/lib/save/devlock.c:342 +msgid "writeunlock by non-owner.\n" msgstr "" -#: src/stored/status.c:405 +#: src/lib/devlock.c:489 src/lib/save/devlock.c:508 src/lib/rwlock.c:425 #, c-format -msgid " num_writers=%d reserves=%d block=%d\n" -msgstr "" - -#: src/stored/status.c:409 -msgid "Attached Jobs: " +msgid "Thread %d found unchanged elements %d times\n" msgstr "" -#: src/stored/status.c:427 src/stored/btape.c:720 +#: src/lib/devlock.c:559 src/lib/save/devlock.c:578 src/lib/rwlock.c:495 #, c-format -msgid "Device parameters:\n" +msgid "%02d: interval %d, writes %d, reads %d\n" msgstr "" -#: src/stored/status.c:429 +#: src/lib/devlock.c:569 src/lib/save/devlock.c:588 src/lib/rwlock.c:505 #, c-format -msgid " Archive name: %s Device name: %s\n" +msgid "data %02d: value %d, %d writes\n" msgstr "" -#: src/stored/status.c:432 +#: src/lib/devlock.c:574 src/lib/save/devlock.c:593 src/lib/rwlock.c:510 #, c-format -msgid " File=%u block=%u\n" +msgid "Total: %d thread writes, %d data writes\n" msgstr "" -#: src/stored/status.c:434 -#, c-format -msgid " Min block=%u Max block=%u\n" +#: src/lib/devlock.c:646 src/lib/save/devlock.c:665 src/lib/rwlock.c:582 +msgid "Try write lock" msgstr "" -#: src/stored/status.c:455 -#, c-format -msgid "%s Job %s waiting for Client connection.\n" +#: src/lib/devlock.c:652 src/lib/save/devlock.c:671 src/lib/rwlock.c:588 +msgid "Try read lock" msgstr "" -#: src/stored/status.c:471 -#, c-format -msgid "" -"Reading: %s %s job %s JobId=%d Volume=\"%s\"\n" -" pool=\"%s\" device=%s\n" +#: src/lib/devlock.c:708 src/lib/save/devlock.c:727 src/lib/rwlock.c:644 +msgid "Create thread" msgstr "" -#: src/stored/status.c:484 -#, c-format -msgid "" -"Writing: %s %s job %s JobId=%d Volume=\"%s\"\n" -" pool=\"%s\" device=%s\n" +#: src/lib/devlock.c:718 src/lib/save/devlock.c:737 src/lib/rwlock.c:654 +msgid "Join thread" msgstr "" -#: src/stored/status.c:495 +#: src/lib/devlock.c:720 src/lib/save/devlock.c:739 src/lib/rwlock.c:656 #, c-format -msgid " spooling=%d despooling=%d despool_wait=%d\n" +msgid "%02d: interval %d, updates %d, r_collisions %d, w_collisions %d\n" msgstr "" -#: src/stored/status.c:511 +#: src/lib/devlock.c:732 src/lib/save/devlock.c:751 src/lib/rwlock.c:668 #, c-format -msgid " Files=%s Bytes=%s AveBytes/sec=%s LastBytes/sec=%s\n" +msgid "data %02d: value %d, %d updates\n" msgstr "" -#: src/stored/status.c:523 -#, c-format -msgid " FDReadSeqNo=%s in_msg=%u out_msg=%d fd=%d\n" +#: src/lib/jcr.c:222 +msgid "Verifying" msgstr "" -#: src/stored/status.c:529 -msgid " FDSocket closed\n" +#: src/lib/jcr.c:224 +msgid "Restoring" msgstr "" -#: src/stored/status.c:550 -msgid "" -"\n" -"Jobs waiting to reserve a drive:\n" +#: src/lib/jcr.c:226 +msgid "Archiving" msgstr "" -#: src/stored/status.c:581 -msgid "===================================================================\n" +#: src/lib/jcr.c:228 +msgid "Copying" msgstr "" -#: src/stored/status.c:663 src/lib/util.c:423 src/filed/status.c:517 -msgid "Base" +#: src/lib/jcr.c:230 +msgid "Migration" msgstr "" -#: src/stored/status.c:680 src/filed/status.c:534 -msgid "Init Catalog" +#: src/lib/jcr.c:232 +msgid "Scanning" msgstr "" -#: src/stored/status.c:683 src/filed/status.c:537 -msgid "Volume to Catalog" +#: src/lib/jcr.c:234 +msgid "Unknown operation" msgstr "" -#: src/stored/status.c:686 src/filed/status.c:540 -msgid "Disk to Catalog" +#: src/lib/jcr.c:243 +msgid "backup" msgstr "" -#: src/stored/status.c:689 src/filed/status.c:543 -msgid "Data" +#: src/lib/jcr.c:245 +msgid "verified" msgstr "" -#: src/stored/status.c:695 src/lib/util.c:459 src/filed/status.c:549 -msgid "Unknown Job Level" +#: src/lib/jcr.c:245 +msgid "verify" msgstr "" -#: src/stored/status.c:763 -#, c-format -msgid "3900 No arg in .status command: %s\n" +#: src/lib/jcr.c:247 +msgid "restored" msgstr "" -#: src/stored/status.c:811 -#, c-format -msgid "3900 Unknown arg in .status command: %s\n" +#: src/lib/jcr.c:247 +msgid "restore" msgstr "" -#: src/stored/status.c:826 -msgid "Bacula Storage: Idle" +#: src/lib/jcr.c:249 +msgid "archived" msgstr "" -#: src/stored/status.c:837 -msgid "Bacula Storage: Running" +#: src/lib/jcr.c:249 +msgid "archive" msgstr "" -#: src/stored/status.c:851 -msgid "Bacula Storage: Last Job Canceled" +#: src/lib/jcr.c:251 +msgid "copied" msgstr "" -#: src/stored/status.c:855 -msgid "Bacula Storage: Last Job Failed" +#: src/lib/jcr.c:251 +msgid "copy" msgstr "" -#: src/stored/status.c:859 -msgid "Bacula Storage: Last Job had Warnings" +#: src/lib/jcr.c:253 +msgid "migrated" msgstr "" -#: src/stored/read_record.c:89 -#, c-format -msgid "End of Volume at file %u on device %s, Volume \"%s\"\n" +#: src/lib/jcr.c:253 +msgid "migrate" msgstr "" -#: src/stored/read_record.c:93 -msgid "End of all volumes.\n" +#: src/lib/jcr.c:255 +msgid "scanned" msgstr "" -#: src/stored/read_record.c:137 -msgid "part" +#: src/lib/jcr.c:255 +msgid "scan" msgstr "" -#: src/stored/read_record.c:140 -msgid "file" +#: src/lib/jcr.c:257 +msgid "unknown action" msgstr "" -#: src/stored/read_record.c:143 +#: src/lib/jcr.c:309 src/lib/lockmgr.c:301 src/lib/lockmgr.c:756 +#: src/lib/lockmgr.c:784 #, c-format -msgid "End of %s %u on device %s, Volume \"%s\"\n" +msgid "pthread key create failed: ERR=%s\n" msgstr "" -#: src/stored/read_record.c:158 -msgid "Did fsr in attemp to skip bad record.\n" +#: src/lib/jcr.c:331 +#, c-format +msgid "pthread_once failed. ERR=%s\n" msgstr "" -#: src/stored/read_record.c:397 +#: src/lib/jcr.c:338 #, c-format -msgid "Forward spacing Volume \"%s\" to file:block %u:%u.\n" +msgid "Could not init msg_queue mutex. ERR=%s\n" msgstr "" -#: src/stored/read_record.c:421 -msgid "Begin Session" +#: src/lib/jcr.c:392 +msgid "NULL jcr.\n" msgstr "" -#: src/stored/read_record.c:425 -msgid "End Session" +#: src/lib/jcr.c:496 +#, c-format +msgid "JCR use_count=%d JobId=%d\n" msgstr "" -#: src/stored/read_record.c:431 +#: src/lib/jcr.c:601 #, c-format -msgid "Unknown code %d\n" +msgid "pthread_setspecific failed: ERR=%s\n" msgstr "" -#: src/stored/bextract.c:80 +#: src/lib/jcr.c:1082 #, c-format msgid "" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: bextract \n" -" -b specify a bootstrap file\n" -" -c specify a Storage configuration file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -e exclude list\n" -" -i include list\n" -" -p proceed inspite of I/O errors\n" -" -v verbose\n" -" -V specify Volume names (separated by |)\n" -" -? print this message\n" -"\n" +"Watchdog sending kill after %d secs to thread stalled reading Storage " +"daemon.\n" msgstr "" -#: src/stored/bextract.c:196 src/stored/bcopy.c:161 src/stored/bscan.c:248 -#: src/tools/bvfs_test.c:201 src/tools/bbatch.c:190 src/tools/ing_test.c:185 -#: src/tools/cats_test.c:321 -msgid "Wrong number of arguments: \n" +#: src/lib/jcr.c:1094 +#, c-format +msgid "" +"Watchdog sending kill after %d secs to thread stalled reading File daemon.\n" msgstr "" -#: src/stored/bextract.c:218 +#: src/lib/jcr.c:1106 #, c-format -msgid "%d Program Name and/or Program Data Stream records ignored.\n" +msgid "" +"Watchdog sending kill after %d secs to thread stalled reading Director.\n" msgstr "" -#: src/stored/bextract.c:222 +#: src/lib/lex.c:77 #, c-format -msgid "%d Win32 data or Win32 gzip data stream records. Ignored.\n" +msgid "Problem probably begins at line %d.\n" msgstr "" -#: src/stored/bextract.c:249 +#: src/lib/lex.c:82 #, c-format -msgid "Cannot stat %s. It must exist. ERR=%s\n" +msgid "" +"Config error: %s\n" +" : line %d, col %d of file %s\n" +"%s\n" +"%s" msgstr "" -#: src/stored/bextract.c:253 +#: src/lib/lex.c:86 #, c-format -msgid "%s must be a directory.\n" +msgid "Config error: %s\n" msgstr "" -#: src/stored/bextract.c:274 -#, c-format -msgid "%u files restored.\n" +#: src/lib/lex.c:115 +msgid "Close of NULL file\n" +msgstr "" + +#: src/lib/lex.c:212 +msgid "" +"get_char: called after EOF. You may have a open double quote without the " +"closing double quote.\n" msgstr "" -#: src/stored/bextract.c:284 src/stored/bextract.c:290 -#: src/filed/restore.c:1480 +#: src/lib/lex.c:254 #, c-format -msgid "Write error on %s: %s\n" +msgid "Config token too long, file: %s, line %d, begins at line %d\n" msgstr "" -#: src/stored/bextract.c:321 src/stored/bextract.c:587 -msgid "Logic error output file should be open but is not.\n" +#: src/lib/lex.c:278 +msgid "none" msgstr "" -#: src/stored/bextract.c:335 src/filed/restore.c:569 -#, c-format -msgid "%s stream not supported on this Client.\n" +#: src/lib/lex.c:279 +msgid "comment" msgstr "" -#: src/stored/bextract.c:345 -#, c-format -msgid "%s was deleted.\n" +#: src/lib/lex.c:280 +msgid "number" msgstr "" -#: src/stored/bextract.c:393 -#, c-format -msgid "Seek error on %s: %s\n" +#: src/lib/lex.c:281 +msgid "ip_addr" msgstr "" -#: src/stored/bextract.c:429 src/stored/bextract.c:494 -#: src/filed/restore.c:1335 -#, c-format -msgid "Seek to %s error on %s: ERR=%s\n" +#: src/lib/lex.c:282 +msgid "identifier" msgstr "" -#: src/stored/bextract.c:448 -#, c-format -msgid "Uncompression error. ERR=%d\n" +#: src/lib/lex.c:283 +msgid "string" msgstr "" -#: src/stored/bextract.c:462 src/filed/restore.c:1450 -msgid "GZIP data stream found, but GZIP not configured!\n" +#: src/lib/lex.c:284 +msgid "quoted_string" msgstr "" -#: src/stored/bextract.c:517 src/filed/restore.c:1376 -#, c-format -msgid "Compressed header version error. version=0x%x\n" +#: src/lib/lex.c:285 +msgid "include" msgstr "" -#: src/stored/bextract.c:522 src/filed/restore.c:1381 -#, c-format -msgid "Compressed header size error. comp_len=%d, msglen=%d\n" +#: src/lib/lex.c:286 +msgid "include_quoted_string" msgstr "" -#: src/stored/bextract.c:544 -#, c-format -msgid "LZO uncompression error. ERR=%d\n" +#: src/lib/lex.c:287 +msgid "UTF-8 Byte Order Mark" +msgstr "" + +#: src/lib/lex.c:288 +msgid "UTF-16le Byte Order Mark" msgstr "" -#: src/stored/bextract.c:556 src/filed/restore.c:1414 +#: src/lib/lex.c:326 src/lib/lex.c:332 src/lib/lex.c:343 src/lib/lex.c:349 #, c-format -msgid "Compression algorithm 0x%x found, but not supported!\n" +msgid "expected a positive integer number, got: %s" msgstr "" -#: src/stored/bextract.c:578 -msgid "Got Program Name or Data Stream. Ignored.\n" +#: src/lib/lex.c:465 +msgid "" +"This config file appears to be in an unsupported Unicode format (UTF-16be). " +"Please resave as UTF-8\n" msgstr "" -#: src/stored/bextract.c:592 src/filed/restore.c:328 src/filed/restore.c:1033 +#: src/lib/lex.c:611 src/lib/lex.c:639 #, c-format -msgid "Unknown stream=%d ignored. This shouldn't happen!\n" +msgid "Cannot open included config file %s: %s\n" msgstr "" -#: src/stored/bcopy.c:74 +#: src/lib/lex.c:698 src/lib/lex.c:755 #, c-format -msgid "" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: bcopy [-d debug_level] \n" -" -b bootstrap specify a bootstrap file\n" -" -c specify a Storage configuration file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -i specify input Volume names (separated by |)\n" -" -o specify output Volume names (separated by |)\n" -" -p proceed inspite of errors\n" -" -v verbose\n" -" -w specify working directory (default /tmp)\n" -" -? print this message\n" -"\n" +msgid "expected an integer or a range, got %s: %s" msgstr "" -#: src/stored/bcopy.c:202 src/stored/device.c:298 src/stored/btape.c:473 +#: src/lib/lex.c:712 src/lib/lex.c:720 src/lib/lex.c:731 src/lib/lex.c:739 #, c-format -msgid "dev open failed: %s\n" +msgid "expected an integer number, got %s: %s" msgstr "" -#: src/stored/bcopy.c:217 -msgid "Write of last block failed.\n" +#: src/lib/lex.c:769 +#, c-format +msgid "expected a name, got %s: %s" msgstr "" -#: src/stored/bcopy.c:221 +#: src/lib/lex.c:773 #, c-format -msgid "%u Jobs copied. %u records copied.\n" +msgid "name %s length %d too long, max is %d\n" msgstr "" -#: src/stored/bcopy.c:238 src/stored/bscan.c:428 +#: src/lib/lex.c:781 #, c-format -msgid "Record: SessId=%u SessTim=%u FileIndex=%d Stream=%d len=%u\n" +msgid "expected a string, got %s: %s" msgstr "" -#: src/stored/bcopy.c:254 -msgid "Volume is prelabeled. This volume cannot be copied.\n" +#: src/lib/bpipe.c:365 src/lib/bpipe.c:448 +msgid "Program killed by Bacula (timeout)\n" msgstr "" -#: src/stored/bcopy.c:257 -msgid "Volume label not copied.\n" +#: src/lib/btimers.c:253 +msgid "stop_btimer called with NULL btimer_id\n" msgstr "" -#: src/stored/bcopy.c:263 -msgid "Copy skipped. Record does not match BSR filter.\n" +#: src/lib/bsys.c:133 +#, c-format +msgid "safe_unlink could not compile regex pattern \"%s\" ERR=%s\n" msgstr "" -#: src/stored/bcopy.c:280 src/stored/bcopy.c:288 src/stored/bcopy.c:316 -#: src/stored/btape.c:2756 +#: src/lib/bsys.c:333 src/lib/bsys.c:350 src/lib/bsys.c:374 src/lib/bsys.c:387 #, c-format -msgid "Cannot fixup device error. %s\n" +msgid "Out of memory: ERR=%s\n" msgstr "" -#: src/stored/bcopy.c:294 -msgid "EOM label not copied.\n" +#: src/lib/bsys.c:429 +msgid "Buffer overflow.\n" msgstr "" -#: src/stored/bcopy.c:297 -msgid "EOT label not copied.\n" +#: src/lib/bsys.c:495 +msgid "Bad errno" msgstr "" -#: src/stored/dvd.c:111 -msgid "No FreeSpace command defined.\n" +#: src/lib/bsys.c:510 +#, c-format +msgid "Memset for %d bytes at %s:%d\n" msgstr "" -#: src/stored/dvd.c:145 +#: src/lib/bsys.c:540 #, c-format -msgid "Cannot run free space command. Results=%s ERR=%s\n" +msgid "Cannot open pid file. %s ERR=%s\n" msgstr "" -#: src/stored/dvd.c:261 +#: src/lib/bsys.c:555 #, c-format -msgid "Error writing part %d to the DVD: ERR=%s\n" +msgid "" +"%s is already running. pid=%d\n" +"Check file %s\n" msgstr "" -#: src/stored/dvd.c:263 +#: src/lib/bsys.c:569 #, c-format -msgid "Error while writing current part to the DVD: %s" +msgid "Could not open pid file. %s ERR=%s\n" msgstr "" -#: src/stored/dvd.c:273 +#: src/lib/bsys.c:680 #, c-format -msgid "Part %d (%lld bytes) written to DVD.\n" +msgid "Could not create state file. %s ERR=%s\n" msgstr "" -#: src/stored/dvd.c:292 +#: src/lib/bsys.c:699 #, c-format -msgid "Remaining free space %s on %s\n" +msgid "Write final hdr error: ERR=%s\n" msgstr "" -#: src/stored/dvd.c:358 +#: src/lib/bsock.c:111 #, c-format -msgid "Next Volume part already exists on DVD. Cannot continue: %s\n" +msgid "" +"Could not connect to %s on %s:%d. ERR=%s\n" +"Retrying ...\n" msgstr "" -#: src/stored/dvd.c:563 +#: src/lib/bsock.c:117 #, c-format -msgid "" -"Error writing. Current part less than total number of parts (%d/%d, device=" -"%s)\n" +msgid "Unable to connect to %s on %s:%d. ERR=%s\n" msgstr "" -#: src/stored/dvd.c:570 +#: src/lib/bsock.c:193 #, c-format -msgid "Unable to write last on %s: ERR=%s\n" +msgid "gethostbyname() for host \"%s\" failed: ERR=%s\n" msgstr "" -#: src/stored/butil.c:59 -msgid "Nohdr," +#: src/lib/bsock.c:225 src/lib/bsock.c:227 +#, c-format +msgid "Socket open error. proto=%d port=%d. ERR=%s\n" msgstr "" -#: src/stored/butil.c:62 -msgid "partial," +#: src/lib/bsock.c:240 src/lib/bsock.c:242 +#, c-format +msgid "Source address bind error. proto=%d. ERR=%s\n" msgstr "" -#: src/stored/butil.c:65 -msgid "empty," +#: src/lib/bsock.c:254 src/lib/bsock.c:293 src/lib/bnet_server.c:212 +#, c-format +msgid "Cannot set SO_KEEPALIVE on socket: %s\n" msgstr "" -#: src/stored/butil.c:68 -msgid "Nomatch," +#: src/lib/bsock.c:262 +#, c-format +msgid "Cannot set TCP_KEEPIDLE on socket: %s\n" msgstr "" -#: src/stored/butil.c:71 -msgid "cont," +#: src/lib/bsock.c:327 +#, c-format +msgid "Could not init bsock mutex. ERR=%s\n" msgstr "" -#: src/stored/butil.c:148 -msgid "Volume name or names is too long. Please use a .bsr file.\n" +#: src/lib/bsock.c:364 +msgid "Socket is closed\n" msgstr "" -#: src/stored/butil.c:168 +#: src/lib/bsock.c:370 #, c-format -msgid "Cannot find device \"%s\" in config file %s.\n" +msgid "Socket has errors=%d on call to %s:%s:%d\n" msgstr "" -#: src/stored/butil.c:175 +#: src/lib/bsock.c:377 #, c-format -msgid "Cannot init device %s\n" +msgid "Socket is terminated=%d on call to %s:%s:%d\n" msgstr "" -#: src/stored/butil.c:195 +#: src/lib/bsock.c:385 #, c-format -msgid "Cannot open %s\n" +msgid "Socket has insane msglen=%d on call to %s:%s:%d\n" msgstr "" -#: src/stored/butil.c:282 +#: src/lib/bsock.c:426 #, c-format -msgid "Could not find device \"%s\" in config file %s.\n" +msgid "Write error sending %d bytes to %s:%s:%d: ERR=%s\n" msgstr "" -#: src/stored/butil.c:287 +#: src/lib/bsock.c:432 #, c-format -msgid "Using device: \"%s\" for reading.\n" +msgid "Wrote %d bytes to %s:%s:%d, but only %d accepted.\n" msgstr "" -#: src/stored/butil.c:290 +#: src/lib/bsock.c:527 src/lib/bsock.c:588 #, c-format -msgid "Using device: \"%s\" for writing.\n" +msgid "Read expected %d got %d from %s:%s:%d\n" msgstr "" -#: src/stored/butil.c:306 -msgid "Unexpected End of Data\n" +#: src/lib/bsock.c:547 +#, c-format +msgid "Packet size=%d too big from \"%s:%s:%d. Terminating connection.\n" msgstr "" -#: src/stored/butil.c:308 -msgid "Unexpected End of Tape\n" +#: src/lib/bsock.c:577 +#, c-format +msgid "Read error from %s:%s:%d: ERR=%s\n" msgstr "" -#: src/stored/butil.c:310 -msgid "Unexpected End of File\n" +#: src/lib/bsock.c:651 +#, c-format +msgid "fread attr spool error. Wanted=%d got=%d bytes. ERR=%s\n" msgstr "" -#: src/stored/butil.c:312 -msgid "Tape Door is Open\n" +#: src/lib/bsock.c:669 +msgid "fread attr spool I/O error.\n" msgstr "" -#: src/stored/butil.c:314 -msgid "Unexpected Tape is Off-line\n" +#: src/lib/bsock.c:730 +msgid "Could not malloc BSOCK data buffer\n" msgstr "" -#: src/stored/acquire.c:74 +#: src/lib/bsock.c:748 src/lib/bsock.c:767 #, c-format -msgid "Acquire read: num_writers=%d not zero. Job %d canceled.\n" +msgid "sockopt error: %s\n" msgstr "" -#: src/stored/acquire.c:83 +#: src/lib/bsock.c:754 src/lib/bsock.c:773 #, c-format -msgid "No volumes specified for reading. Job %s canceled.\n" +msgid "Warning network buffer = %d bytes not max size.\n" msgstr "" -#: src/stored/acquire.c:92 +#: src/lib/bsock.c:793 src/lib/bsock.c:827 #, c-format -msgid "Logic error: no next volume to read. Numvol=%d Curvol=%d\n" +msgid "fcntl F_GETFL error. ERR=%s\n" msgstr "" -#: src/stored/acquire.c:118 +#: src/lib/bsock.c:799 src/lib/bsock.c:833 src/lib/bsock.c:865 #, c-format -msgid "" -"Changing read device. Want Media Type=\"%s\" have=\"%s\"\n" -" device=%s\n" +msgid "fcntl F_SETFL error. ERR=%s\n" msgstr "" -#: src/stored/acquire.c:162 +#: src/lib/bsock.c:1065 src/qt-console/bcomm/dircomm_auth.cpp:107 #, c-format -msgid "Media Type change. New read device %s chosen.\n" +msgid "Director authorization problem at \"%s:%d\"\n" msgstr "" -#: src/stored/acquire.c:174 +#: src/lib/bsock.c:1072 src/qt-console/bcomm/dircomm_auth.cpp:114 #, c-format -msgid "No suitable device found to read Volume \"%s\"\n" +msgid "" +"Authorization problem: Remote server at \"%s:%d\" did not advertise required " +"TLS support.\n" msgstr "" -#: src/stored/acquire.c:213 +#: src/lib/bsock.c:1080 src/qt-console/bcomm/dircomm_auth.cpp:122 #, c-format -msgid "Job %s canceled.\n" +msgid "" +"Authorization problem with Director at \"%s:%d\": Remote server requires " +"TLS.\n" msgstr "" -#: src/stored/acquire.c:231 +#: src/lib/bsock.c:1092 src/qt-console/bcomm/dircomm_auth.cpp:133 #, c-format -msgid "Read open device %s Volume \"%s\" failed: ERR=%s\n" +msgid "TLS negotiation failed with Director at \"%s:%d\"\n" msgstr "" -#: src/stored/acquire.c:321 +#: src/lib/bsock.c:1102 src/qt-console/bcomm/dircomm_auth.cpp:145 #, c-format -msgid "Too many errors trying to mount device %s for reading.\n" +msgid "" +"Bad response to Hello command: ERR=%s\n" +"The Director at \"%s:%d\" is probably not running.\n" msgstr "" -#: src/stored/acquire.c:329 +#: src/lib/bsock.c:1111 src/qt-console/bcomm/dircomm_auth.cpp:154 #, c-format -msgid "Ready to read from volume \"%s\" on device %s.\n" +msgid "Director at \"%s:%d\" rejected Hello command\n" msgstr "" -#: src/stored/acquire.c:381 +#: src/lib/bsock.c:1121 src/qt-console/bcomm/dircomm_auth.cpp:169 #, c-format -msgid "Want to append, but device %s is busy reading.\n" +msgid "" +"Authorization problem with Director at \"%s:%d\"\n" +"Most likely the passwords do not agree.\n" +"If you are using TLS, there may have been a certificate validation error " +"during the TLS handshake.\n" +"Please see " msgstr "" -#: src/stored/acquire.c:414 -#, c-format -msgid "Could not ready device %s for append.\n" +#: src/lib/parse_conf.c:165 +msgid "***UNKNOWN***" msgstr "" -#: src/stored/acquire.c:501 src/stored/spool.c:321 src/stored/block.c:386 -#: src/stored/block.c:769 src/stored/block.c:847 +#: src/lib/parse_conf.c:213 src/dird/dird_conf.c:1431 +#: src/qt-console/tray-monitor/tray_conf.cpp:282 #, c-format -msgid "Could not create JobMedia record for Volume=\"%s\" Job=%s\n" +msgid "Too many items in %s resource\n" msgstr "" -#: src/stored/acquire.c:552 +#: src/lib/parse_conf.c:266 src/lib/parse_conf.c:287 #, c-format -msgid "Alert: %s" +msgid "expected an =, got: %s" msgstr "" -#: src/stored/acquire.c:560 +#: src/lib/parse_conf.c:296 #, c-format -msgid "3997 Bad alert command: %s: ERR=%s.\n" +msgid "Unknown item code: %d\n" msgstr "" -#: src/stored/acquire.c:629 src/stored/dev.c:270 src/stored/dev.c:311 -#: src/lib/openssl.c:122 src/lib/openssl.c:181 +#: src/lib/parse_conf.c:336 #, c-format -msgid "Unable to init mutex: ERR=%s\n" +msgid "message type: %s not found" msgstr "" -#: src/stored/acquire.c:635 +#: src/lib/parse_conf.c:374 #, c-format -msgid "Unable to init r_mutex: ERR=%s\n" +msgid "Attempt to redefine name \"%s\" to \"%s\"." msgstr "" -#: src/stored/askdir.c:179 -msgid "Network error on bnet_recv in req_vol_info.\n" +#: src/lib/parse_conf.c:466 src/dird/dird_conf.c:1896 +#, c-format +msgid "Could not find config Resource %s referenced on line %d : %s\n" msgstr "" -#: src/stored/askdir.c:197 +#: src/lib/parse_conf.c:471 #, c-format -msgid "Error getting Volume info: %s" +msgid "Attempt to redefine resource \"%s\" referenced on line %d : %s\n" msgstr "" -#: src/stored/askdir.c:376 +#: src/lib/parse_conf.c:507 #, c-format -msgid "Didn't get vol info vol=%s: ERR=%s" +msgid "Too many %s directives. Max. is %d. line %d: %s\n" msgstr "" -#: src/stored/askdir.c:432 +#: src/lib/parse_conf.c:518 #, c-format -msgid "Error creating JobMedia record: ERR=%s\n" +msgid "Could not find config Resource \"%s\" referenced on line %d : %s\n" msgstr "" -#: src/stored/askdir.c:439 +#: src/lib/parse_conf.c:581 #, c-format -msgid "Error creating JobMedia record: %s\n" +msgid "Missing config Resource \"%s\" referenced on line %d : %s\n" msgstr "" -#: src/stored/askdir.c:522 +#: src/lib/parse_conf.c:653 #, c-format -msgid "Job %s canceled while waiting for mount on Storage Device \"%s\".\n" +msgid "expected a size number, got: %s" msgstr "" -#: src/stored/askdir.c:533 +#: src/lib/parse_conf.c:658 #, c-format -msgid "" -"Job %s is waiting. Cannot find any appendable volumes.\n" -"Please use the \"label\" command to create a new Volume for:\n" -" Storage: %s\n" -" Pool: %s\n" -" Media type: %s\n" +msgid "expected a speed number, got: %s" msgstr "" -#: src/stored/askdir.c:558 src/stored/askdir.c:658 +#: src/lib/parse_conf.c:669 #, c-format -msgid "Max time exceeded waiting to mount Storage Device %s for Job %s\n" +msgid "expected a %s, got: %s" msgstr "" -#: src/stored/askdir.c:568 -msgid "pthread error in mount_next_volume.\n" +#: src/lib/parse_conf.c:670 +msgid "size" msgstr "" -#: src/stored/askdir.c:601 -msgid "Cannot request another volume: no volume name given.\n" +#: src/lib/parse_conf.c:670 +msgid "speed" msgstr "" -#: src/stored/askdir.c:607 +#: src/lib/parse_conf.c:724 src/lib/parse_conf.c:730 src/dird/run_conf.c:315 #, c-format -msgid "Job %s canceled while waiting for mount on Storage Device %s.\n" +msgid "expected a time period, got: %s" msgstr "" -#: src/stored/askdir.c:624 +#: src/lib/parse_conf.c:749 src/lib/parse_conf.c:765 src/lib/ini.c:590 +#: src/dird/dird_conf.c:1874 src/dird/dird_conf.c:1990 #, c-format -msgid "" -"Please mount append Volume \"%s\" or label a new one for:\n" -" Job: %s\n" -" Storage: %s\n" -" Pool: %s\n" -" Media type: %s\n" +msgid "Expect %s, got: %s" msgstr "" -#: src/stored/askdir.c:630 +#: src/lib/parse_conf.c:791 #, c-format -msgid "" -"Please mount read Volume \"%s\" for:\n" -" Job: %s\n" -" Storage: %s\n" -" Pool: %s\n" -" Media type: %s\n" -msgstr "" - -#: src/stored/askdir.c:668 -msgid "pthread error in mount_volume\n" +msgid "Expected a Tape Label keyword, got: %s" msgstr "" -#: src/stored/record.c:75 +#: src/lib/parse_conf.c:874 #, c-format -msgid "unknown: %d" +msgid "Unable to initialize resource lock. ERR=%s\n" msgstr "" -#: src/stored/record.c:392 -msgid "Damaged buffer\n" +#: src/lib/parse_conf.c:882 +msgid "Config filename too long.\n" msgstr "" -#: src/stored/record.c:670 +#: src/lib/parse_conf.c:905 #, c-format -msgid "Sanity check failed. maxlen=%d datalen=%d. Block discarded.\n" +msgid "Cannot open config file \"%s\": %s\n" msgstr "" -#: src/stored/read.c:65 -msgid "No Volume names found for restore.\n" +#: src/lib/parse_conf.c:922 +msgid "" +"Currently we cannot handle UTF-16 source files. Please convert the conf file " +"to UTF-8\n" msgstr "" -#: src/stored/read.c:120 +#: src/lib/parse_conf.c:926 #, c-format -msgid ">filed: Error Hdr=%s\n" +msgid "Expected a Resource name identifier, got: %s" msgstr "" -#: src/stored/read.c:121 src/stored/read.c:136 +#: src/lib/parse_conf.c:942 #, c-format -msgid "Error sending to File daemon. ERR=%s\n" +msgid "expected resource name, got: %s" msgstr "" -#: src/stored/read.c:135 +#: src/lib/parse_conf.c:953 #, c-format -msgid "Error sending to FD. ERR=%s\n" +msgid "not in resource definition: %s" msgstr "" -#: src/stored/autochanger.c:65 +#: src/lib/parse_conf.c:964 src/dird/inc_conf.c:388 src/dird/inc_conf.c:732 +#: src/dird/dird_conf.c:2050 #, c-format -msgid "No Changer Name given for device %s. Cannot continue.\n" +msgid "expected an equals, got: %s" msgstr "" -#: src/stored/autochanger.c:71 +#: src/lib/parse_conf.c:978 #, c-format -msgid "No Changer Command given for device %s. Cannot continue.\n" +msgid "" +"Keyword \"%s\" not permitted in this resource.\n" +"Perhaps you left the trailing brace off of the previous resource." msgstr "" -#: src/stored/autochanger.c:139 -#, c-format -msgid "No slot defined in catalog (slot=%d) for Volume \"%s\" on %s.\n" +#: src/lib/parse_conf.c:989 +msgid "Name not specified for resource" msgstr "" -#: src/stored/autochanger.c:141 -msgid "Cartridge change or \"update slots\" may be required.\n" +#: src/lib/parse_conf.c:999 +#, c-format +msgid "unexpected token %d %s in resource definition" msgstr "" -#: src/stored/autochanger.c:147 +#: src/lib/parse_conf.c:1005 #, c-format -msgid "No \"Changer Device\" for %s. Manual load of Volume may be required.\n" +msgid "Unknown parser state %d\n" msgstr "" -#: src/stored/autochanger.c:154 +#: src/lib/parse_conf.c:1010 +msgid "End of conf file reached with unclosed resource." +msgstr "" + +#: src/lib/daemon.c:52 #, c-format -msgid "No \"Changer Command\" for %s. Manual load of Volume may be requird.\n" +msgid "Cannot fork to become daemon: ERR=%s\n" msgstr "" -#: src/stored/autochanger.c:185 +#: src/lib/lockmgr.c:53 #, c-format -msgid "3304 Issuing autochanger \"load slot %d, drive %d\" command.\n" +msgid "ASSERT failed at %s:%i: %s\n" msgstr "" -#: src/stored/autochanger.c:193 +#: src/lib/lockmgr.c:58 #, c-format -msgid "3305 Autochanger \"load slot %d, drive %d\", status is OK.\n" +msgid "ASSERT failed at %s:%i: %s \n" msgstr "" -#: src/stored/autochanger.c:206 +#: src/lib/lockmgr.c:64 #, c-format -msgid "" -"3992 Bad autochanger \"load slot %d, drive %d\": ERR=%s.\n" -"Results=%s\n" +msgid "ASSERT failed at %s:%i: %s (%s)\n" msgstr "" -#: src/stored/autochanger.c:268 +#: src/lib/lockmgr.c:95 #, c-format -msgid "3301 Issuing autochanger \"loaded? drive %d\" command.\n" +msgid "Mutex lock failure. ERR=%s\n" msgstr "" -#: src/stored/autochanger.c:280 +#: src/lib/lockmgr.c:105 #, c-format -msgid "3302 Autochanger \"loaded? drive %d\", result is Slot %d.\n" +msgid "Mutex unlock failure. ERR=%s\n" msgstr "" -#: src/stored/autochanger.c:287 +#: src/lib/lockmgr.c:768 #, c-format -msgid "3302 Autochanger \"loaded? drive %d\", result: nothing loaded.\n" +msgid "pthread_create failed: ERR=%s\n" msgstr "" -#: src/stored/autochanger.c:299 +#: src/lib/message.c:417 src/lib/message.c:427 #, c-format -msgid "" -"3991 Bad autochanger \"loaded? drive %d\" command: ERR=%s.\n" -"Results=%s\n" +msgid "Could not open console message file %s: ERR=%s\n" msgstr "" -#: src/stored/autochanger.c:316 +#: src/lib/message.c:432 #, c-format -msgid "Lock failure on autochanger. ERR=%s\n" +msgid "Could not get con mutex: ERR=%s\n" msgstr "" -#: src/stored/autochanger.c:330 -#, c-format -msgid "Unlock failure on autochanger. ERR=%s\n" +#: src/lib/message.c:537 +msgid "Bacula Message" msgstr "" -#: src/stored/autochanger.c:374 src/stored/autochanger.c:523 +#: src/lib/message.c:541 #, c-format -msgid "3307 Issuing autochanger \"unload slot %d, drive %d\" command.\n" +msgid "open mail pipe %s failed: ERR=%s\n" msgstr "" -#: src/stored/autochanger.c:387 -#, c-format -msgid "" -"3995 Bad autochanger \"unload slot %d, drive %d\": ERR=%s\n" -"Results=%s\n" +#: src/lib/message.c:632 +msgid "open mail pipe failed.\n" msgstr "" -#: src/stored/autochanger.c:473 +#: src/lib/message.c:645 #, c-format -msgid "Volume \"%s\" wanted on %s is in use by device %s\n" +msgid "close error: ERR=%s\n" msgstr "" -#: src/stored/autochanger.c:541 +#: src/lib/message.c:656 #, c-format -msgid "3997 Bad autochanger \"unload slot %d, drive %d\": ERR=%s.\n" +msgid "Mail prog: %s" msgstr "" -#: src/stored/autochanger.c:585 +#: src/lib/message.c:665 #, c-format -msgid "3993 Device %s not an autochanger device.\n" +msgid "" +"Mail program terminated in error.\n" +"CMD=%s\n" +"ERR=%s\n" msgstr "" -#: src/stored/autochanger.c:612 +#: src/lib/message.c:770 #, c-format -msgid "3306 Issuing autochanger \"%s\" command.\n" +msgid "fopen %s failed: ERR=%s\n" msgstr "" -#: src/stored/autochanger.c:615 -msgid "3996 Open bpipe failed.\n" +#: src/lib/message.c:892 src/lib/message.c:895 +msgid "Msg delivery error: Unable to store data in database.\n" msgstr "" -#: src/stored/autochanger.c:642 src/console/console.c:1458 +#: src/lib/message.c:947 #, c-format -msgid "Autochanger error: ERR=%s\n" +msgid "" +"Msg delivery error: Operator mail program terminated in error.\n" +"CMD=%s\n" +"ERR=%s\n" msgstr "" -#: src/stored/stored.c:87 +#: src/lib/message.c:968 #, c-format -msgid "" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: bacula-sd [options] [-c config_file] [config_file]\n" -" -c use as configuration file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -f run in foreground (for debugging)\n" -" -g set groupid to group\n" -" -m print kaboom output (for debugging)\n" -" -p proceed despite I/O errors\n" -" -s no signals (for debugging)\n" -" -t test - read config and exit\n" -" -u userid to \n" -" -v verbose user messages\n" -" -? print this message.\n" -"\n" +msgid "Msg delivery error: fopen %s failed: ERR=%s\n" msgstr "" -#: src/stored/stored.c:136 src/stored/btape.c:178 +#: src/lib/message.c:1287 #, c-format -msgid "Tape block size (%d) not multiple of system size (%d)\n" +msgid "%s: ABORTING due to ERROR in %s:%d\n" msgstr "" -#: src/stored/stored.c:140 src/stored/btape.c:182 +#: src/lib/message.c:1291 #, c-format -msgid "Tape block size (%d) is not a power of 2\n" +msgid "%s: ERROR TERMINATION at %s:%d\n" msgstr "" -#: src/stored/stored.c:268 -msgid "Volume Session Time is ZERO!\n" +#: src/lib/message.c:1296 +#, c-format +msgid "%s: Fatal Error because: " msgstr "" -#: src/stored/stored.c:277 +#: src/lib/message.c:1298 #, c-format -msgid "Unable to create thread. ERR=%s\n" +msgid "%s: Fatal Error at %s:%d because:\n" msgstr "" -#: src/stored/stored.c:310 src/stored/bscan.c:262 +#: src/lib/message.c:1302 #, c-format -msgid "No Storage resource defined in %s. Cannot continue.\n" +msgid "%s: ERROR: " msgstr "" -#: src/stored/stored.c:316 +#: src/lib/message.c:1304 #, c-format -msgid "Only one Storage resource permitted in %s\n" +msgid "%s: ERROR in %s:%d " msgstr "" -#: src/stored/stored.c:321 +#: src/lib/message.c:1307 #, c-format -msgid "No Director resource defined in %s. Cannot continue.\n" +msgid "%s: Warning: " msgstr "" -#: src/stored/stored.c:326 +#: src/lib/message.c:1310 #, c-format -msgid "No Device resource defined in %s. Cannot continue.\n" +msgid "%s: Security violation: " msgstr "" -#: src/stored/stored.c:334 +#: src/lib/message.c:1398 #, c-format -msgid "No Messages resource defined in %s. Cannot continue.\n" +msgid "%s ABORTING due to ERROR\n" msgstr "" -#: src/stored/stored.c:341 src/stored/bscan.c:270 +#: src/lib/message.c:1401 #, c-format -msgid "No Working Directory defined in %s. Cannot continue.\n" +msgid "%s ERROR TERMINATION\n" msgstr "" -#: src/stored/stored.c:363 +#: src/lib/message.c:1404 #, c-format -msgid "\"TLS Certificate\" file not defined for Storage \"%s\" in %s.\n" +msgid "%s JobId %u: Fatal error: " msgstr "" -#: src/stored/stored.c:369 +#: src/lib/message.c:1413 #, c-format -msgid "\"TLS Key\" file not defined for Storage \"%s\" in %s.\n" +msgid "%s JobId %u: Error: " msgstr "" -#: src/stored/stored.c:375 +#: src/lib/message.c:1419 #, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Storage \"%s\" in %s. At least one CA certificate store is required when " -"using \"TLS Verify Peer\".\n" +msgid "%s JobId %u: Warning: " msgstr "" -#: src/stored/stored.c:568 +#: src/lib/message.c:1425 #, c-format -msgid "Could not initialize %s\n" +msgid "%s JobId %u: Security violation: " msgstr "" -#: src/stored/stored.c:582 -#, c-format -msgid "Could not open device %s\n" +#: src/lib/message.c:1696 +msgid "Debug lock information" msgstr "" -#: src/stored/stored.c:596 -#, c-format -msgid "Could not mount device %s\n" +#: src/lib/message.c:1697 +msgid "Debug network information" msgstr "" -#: src/stored/device.c:120 -#, c-format -msgid "End of medium on Volume \"%s\" Bytes=%s Blocks=%s at %s.\n" +#: src/lib/message.c:1698 +msgid "Debug plugin information" msgstr "" -#: src/stored/device.c:139 -#, c-format -msgid "New volume \"%s\" mounted on device %s at %s.\n" +#: src/lib/message.c:1699 +msgid "Debug volume information" msgstr "" -#: src/stored/device.c:151 -#, c-format -msgid "write_block_to_device Volume label failed. ERR=%s" +#: src/lib/message.c:1700 +msgid "Debug SQL queries" msgstr "" -#: src/stored/device.c:186 -#, c-format -msgid "write_block_to_device overflow block failed. ERR=%s" +#: src/lib/message.c:1701 +msgid "Debug BVFS queries" msgstr "" -#: src/stored/device.c:191 -#, c-format -msgid "Catastrophic error. Cannot write overflow block to device %s. ERR=%s" +#: src/lib/message.c:1702 +msgid "Debug memory allocation" msgstr "" -#: src/stored/device.c:327 src/stored/dev.c:512 -#, c-format -msgid "Unable to open device %s: ERR=%s\n" +#: src/lib/message.c:1703 +msgid "Debug scheduler information" msgstr "" -#: src/stored/device.c:329 -#, c-format -msgid "Unable to open archive %s: ERR=%s\n" +#: src/lib/message.c:1704 +msgid "Debug protocol information" msgstr "" -#: src/stored/fd_cmds.c:166 -#, c-format -msgid "Command error with FD, hanging up. %s\n" +#: src/lib/message.c:1705 +msgid "Debug all information" msgstr "" -#: src/stored/fd_cmds.c:169 -msgid "Command error with FD, hanging up.\n" +#: src/lib/edit.c:476 +msgid "Empty name not allowed.\n" msgstr "" -#: src/stored/fd_cmds.c:180 +#: src/lib/edit.c:486 #, c-format -msgid "FD command not found: %s\n" +msgid "Illegal character \"%c\" in name.\n" msgstr "" -#: src/stored/fd_cmds.c:206 -msgid "Append data error.\n" +#: src/lib/edit.c:493 +msgid "Name too long.\n" msgstr "" -#: src/stored/fd_cmds.c:211 -msgid "Attempt to append on non-open session.\n" +#: src/lib/edit.c:499 src/dird/ua_label.c:656 src/dird/ua_cmds.c:345 +msgid "Volume name must be at least one character long.\n" msgstr "" -#: src/stored/fd_cmds.c:223 src/stored/fd_cmds.c:266 -msgid "Attempt to close non-open session.\n" +#: src/lib/tls.c:78 +#, c-format +msgid "" +"Error with certificate at depth: %d, issuer = %s, subject = %s, ERR=%d:%s\n" msgstr "" -#: src/stored/fd_cmds.c:241 -msgid "Attempt to open already open session.\n" +#: src/lib/tls.c:115 +msgid "Error initializing SSL context" msgstr "" -#: src/stored/fd_cmds.c:295 -msgid "Attempt to read on non-open session.\n" +#: src/lib/tls.c:136 +msgid "Error loading certificate verification stores" msgstr "" -#: src/stored/fd_cmds.c:313 src/stored/fd_cmds.c:322 -msgid "Attempt to open read on non-open session.\n" +#: src/lib/tls.c:141 +msgid "" +"Either a certificate file or a directory must be specified as a verification " +"store\n" msgstr "" -#: src/stored/mount.c:98 -#, c-format -msgid "Too many errors trying to mount device %s.\n" +#: src/lib/tls.c:152 +msgid "Error loading certificate file" msgstr "" -#: src/stored/mount.c:106 -#, c-format -msgid "Job %d canceled.\n" +#: src/lib/tls.c:160 +msgid "Error loading private key" msgstr "" -#: src/stored/mount.c:282 -#, c-format -msgid "Volume \"%s\" previously written, moving to end of data.\n" +#: src/lib/tls.c:168 +msgid "Unable to open DH parameters file" msgstr "" -#: src/stored/mount.c:288 -#, c-format -msgid "Unable to position to end of data on device %s: ERR=%s\n" +#: src/lib/tls.c:174 +msgid "Unable to load DH parameters from specified file" msgstr "" -#: src/stored/mount.c:411 src/stored/mount.c:737 -#, c-format -msgid "Volume \"%s\" not on device %s.\n" +#: src/lib/tls.c:178 +msgid "Failed to set TLS Diffie-Hellman parameters" msgstr "" -#: src/stored/mount.c:444 -#, c-format -msgid "" -"Director wanted Volume \"%s\".\n" -" Current Volume \"%s\" not acceptable because:\n" -" %s" +#: src/lib/tls.c:188 +msgid "Error setting cipher list, no valid ciphers available\n" msgstr "" -#: src/stored/mount.c:603 -#, c-format -msgid "Ready to append to end of Volume \"%s\" part=%d size=%s\n" +#: src/lib/tls.c:247 +msgid "Peer failed to present a TLS certificate\n" msgstr "" -#: src/stored/mount.c:607 +#: src/lib/tls.c:292 src/lib/tls.c:293 #, c-format -msgid "" -"Bacula cannot write on DVD Volume \"%s\" because: The sizes do not match! " -"Volume=%s Catalog=%s\n" +msgid "Peer %s failed to present a TLS certificate\n" msgstr "" -#: src/stored/mount.c:621 -#, c-format -msgid "Ready to append to end of Volume \"%s\" at file=%d.\n" +#: src/lib/tls.c:408 +msgid "Error creating file descriptor-based BIO" msgstr "" -#: src/stored/mount.c:624 -#, c-format -msgid "" -"For Volume \"%s\":\n" -"The number of files mismatch! Volume=%u Catalog=%u\n" -"Correcting Catalog\n" +#: src/lib/tls.c:419 +msgid "Error creating new SSL object" msgstr "" -#: src/stored/mount.c:631 src/stored/mount.c:659 -msgid "Error updating Catalog\n" +#: src/lib/tls.c:483 src/lib/tls.c:506 +msgid "Connect failure" msgstr "" -#: src/stored/mount.c:636 -#, c-format -msgid "" -"Bacula cannot write on tape Volume \"%s\" because:\n" -"The number of files mismatch! Volume=%u Catalog=%u\n" +#: src/lib/tls.c:586 src/lib/tls.c:590 +msgid "TLS shutdown failure." msgstr "" -#: src/stored/mount.c:647 -#, c-format -msgid "Ready to append to end of Volume \"%s\" size=%s\n" +#: src/lib/tls.c:645 src/lib/tls.c:671 +msgid "TLS read/write failure." msgstr "" -#: src/stored/mount.c:651 +#: src/lib/priv.c:56 #, c-format -msgid "" -"For Volume \"%s\":\n" -"The sizes do not match! Volume=%s Catalog=%s\n" -"Correcting Catalog\n" +msgid "Could not find userid=%s: ERR=%s\n" msgstr "" -#: src/stored/mount.c:664 +#: src/lib/priv.c:62 #, c-format -msgid "" -"Bacula cannot write on disk Volume \"%s\" because: The sizes do not match! " -"Volume=%s Catalog=%s\n" +msgid "Could not find password entry. ERR=%s\n" msgstr "" -#: src/stored/mount.c:727 +#: src/lib/priv.c:75 #, c-format -msgid "Labeled new Volume \"%s\" on device %s.\n" +msgid "Could not find group=%s: ERR=%s\n" msgstr "" -#: src/stored/mount.c:732 +#: src/lib/priv.c:83 #, c-format -msgid "Device %s not configured to autolabel Volumes.\n" +msgid "Could not initgroups for group=%s, userid=%s: ERR=%s\n" msgstr "" -#: src/stored/mount.c:751 +#: src/lib/priv.c:86 #, c-format -msgid "Marking Volume \"%s\" in Error in Catalog.\n" +msgid "Could not initgroups for userid=%s: ERR=%s\n" msgstr "" -#: src/stored/mount.c:768 +#: src/lib/priv.c:93 #, c-format -msgid "" -"Autochanger Volume \"%s\" not found in slot %d.\n" -" Setting InChanger to zero in catalog.\n" -msgstr "" - -#: src/stored/mount.c:787 -msgid "Hey!!!!! WroteVol non-zero !!!!!\n" +msgid "Could not set group=%s: ERR=%s\n" msgstr "" -#: src/stored/mount.c:834 +#: src/lib/priv.c:103 #, c-format -msgid "" -"Invalid tape position on volume \"%s\" on device %s. Expected %d, got %d\n" +msgid "prctl failed: ERR=%s\n" msgstr "" -#: src/stored/mount.c:875 src/stored/btape.c:3122 +#: src/lib/priv.c:107 #, c-format -msgid "Cannot open Dev=%s, Vol=%s\n" +msgid "setreuid failed: ERR=%s\n" msgstr "" -#: src/stored/mac.c:81 -msgid "Read and write devices not properly initialized.\n" +#: src/lib/priv.c:111 +#, c-format +msgid "cap_from_text failed: ERR=%s\n" msgstr "" -#: src/stored/mac.c:87 +#: src/lib/priv.c:115 #, c-format -msgid "No Volume names found for %s.\n" +msgid "cap_set_proc failed: ERR=%s\n" msgstr "" -#: src/stored/pythonsd.c:160 src/filed/pythonfd.c:142 -#, c-format -msgid "Cannot delete attribute %s" +#: src/lib/priv.c:119 +msgid "Keep readall caps not implemented this OS or missing libraries.\n" msgstr "" -#: src/stored/pythonsd.c:193 src/filed/pythonfd.c:160 src/filed/pythonfd.c:176 +#: src/lib/priv.c:123 #, c-format -msgid "Cannot find attribute %s" +msgid "Could not set specified userid: %s\n" msgstr "" -#: src/stored/pythonsd.c:208 -msgid "Error in ParseTuple\n" +#: src/lib/res.c:53 +#, c-format +msgid "rwl_writelock failure at %s:%d: ERR=%s\n" msgstr "" -#: src/stored/pythonsd.c:224 -msgid "Parse tuple error in job_write\n" +#: src/lib/res.c:63 +#, c-format +msgid "rwl_writeunlock failure at %s:%d:. ERR=%s\n" msgstr "" -#: src/stored/pythonsd.c:261 +#: src/lib/watchdog.c:84 #, c-format -msgid "Error in Python method %s\n" +msgid "Unable to initialize watchdog lock. ERR=%s\n" msgstr "" -#: src/stored/spool.c:83 -msgid "Spooling statistics:\n" +#: src/lib/watchdog.c:181 +msgid "BUG! register_watchdog called before start_watchdog\n" msgstr "" -#: src/stored/spool.c:86 +#: src/lib/watchdog.c:184 #, c-format -msgid "" -"Data spooling: %u active jobs, %s bytes; %u total jobs, %s max bytes/job.\n" +msgid "BUG! Watchdog %p has NULL callback\n" msgstr "" -#: src/stored/spool.c:94 +#: src/lib/watchdog.c:187 #, c-format -msgid "Attr spooling: %u active jobs, %s bytes; %u total jobs, %s max bytes.\n" +msgid "BUG! Watchdog %p has zero interval\n" msgstr "" -#: src/stored/spool.c:112 -msgid "Spooling data ...\n" +#: src/lib/watchdog.c:207 +msgid "BUG! unregister_watchdog_unlocked called before start_watchdog\n" msgstr "" -#: src/stored/spool.c:138 +#: src/lib/watchdog.c:327 #, c-format -msgid "Bad return from despool WroteVol=%d\n" +msgid "rwl_writelock failure. ERR=%s\n" msgstr "" -#: src/stored/spool.c:171 +#: src/lib/watchdog.c:342 #, c-format -msgid "Open data spool file %s failed: ERR=%s\n" +msgid "rwl_writeunlock failure. ERR=%s\n" msgstr "" -#: src/stored/spool.c:225 -msgid "Despooling zero bytes. Your disk is probably FULL!\n" +#: src/lib/ini.c:94 src/lib/ini.c:106 +#, c-format +msgid "" +"Config file error: %s\n" +" : Line %d, col %d of file %s\n" +"%s\n" msgstr "" -#: src/stored/spool.c:234 +#: src/lib/ini.c:297 src/lib/ini.c:372 #, c-format -msgid "Committing spooled data to Volume \"%s\". Despooling %s bytes ...\n" +msgid "Cannot open config file %s: %s\n" msgstr "" -#: src/stored/spool.c:239 -#, c-format -msgid "Writing spooled data to Volume. Despooling %s bytes ...\n" +#: src/lib/bget_msg.c:85 +msgid "Status OK\n" msgstr "" -#: src/stored/spool.c:339 +#: src/lib/bget_msg.c:89 #, c-format -msgid "" -"Despooling elapsed time = %02d:%02d:%02d, Transfer rate = %s Bytes/second\n" +msgid "bget_msg: unknown signal %d\n" msgstr "" -#: src/stored/spool.c:348 src/stored/spool.c:549 src/stored/spool.c:595 +#: src/lib/address_conf.c:50 #, c-format -msgid "Ftruncate spool file failed: ERR=%s\n" +msgid "Only ipv4 and ipv6 are supported (%d)\n" msgstr "" -#: src/stored/spool.c:407 +#: src/lib/address_conf.c:54 #, c-format -msgid "Spool header read error. ERR=%s\n" +msgid "Only ipv4 is supported (%d)\n" msgstr "" -#: src/stored/spool.c:410 +#: src/lib/address_conf.c:169 #, c-format -msgid "Spool read error. Wanted %u bytes, got %d\n" +msgid "You tried to assign a ipv6 address to an ipv4(%d)\n" msgstr "" -#: src/stored/spool.c:411 +#: src/lib/address_conf.c:178 #, c-format -msgid "Spool header read error. Wanted %u bytes, got %d\n" +msgid "You tried to assign an ipv4 address to an ipv6(%d)\n" msgstr "" -#: src/stored/spool.c:418 src/stored/spool.c:419 +#: src/lib/address_conf.c:261 #, c-format -msgid "Spool block too big. Max %u bytes, got %u\n" +msgid "Can't add default IPv4 address (%s)\n" +msgstr "" + +#: src/lib/address_conf.c:292 +msgid "" +"Old style addresses cannot be mixed with new style. Try removing Port=nnn." msgstr "" -#: src/stored/spool.c:425 src/stored/spool.c:426 +#: src/lib/address_conf.c:314 #, c-format -msgid "Spool data read error. Wanted %u bytes, got %d\n" +msgid "Cannot resolve service(%s)" msgstr "" -#: src/stored/spool.c:480 +#: src/lib/address_conf.c:324 #, c-format -msgid "" -"User specified Job spool size reached: JobSpoolSize=%s MaxJobSpoolSize=%s\n" +msgid "Cannot resolve hostname(%s) %s" msgstr "" -#: src/stored/spool.c:485 +#: src/lib/address_conf.c:432 src/lib/address_conf.c:465 #, c-format -msgid "" -"User specified Device spool size reached: DevSpoolSize=%s MaxDevSpoolSize=" -"%s\n" -msgstr "" - -#: src/stored/spool.c:492 -msgid "Bad return from despool in write_block.\n" +msgid "Expected a block to begin with { but got: %s" msgstr "" -#: src/stored/spool.c:500 -msgid "Spooling data again ...\n" +#: src/lib/address_conf.c:437 +msgid "Empty addr block is not allowed" msgstr "" -#: src/stored/spool.c:532 +#: src/lib/address_conf.c:441 #, c-format -msgid "Error writing header to spool file. ERR=%s\n" +msgid "Expected a string but got: %s" msgstr "" -#: src/stored/spool.c:537 +#: src/lib/address_conf.c:452 #, c-format -msgid "" -"Error writing header to spool file. Disk probably full. Attempting recovery. " -"Wanted to write=%d got=%d\n" +msgid "Expected a string [ip|ipv4|ipv6] but got: %s" msgstr "" -#: src/stored/spool.c:555 src/stored/spool.c:601 -msgid "Fatal despooling error." +#: src/lib/address_conf.c:456 +#, c-format +msgid "Expected a string [ip|ipv4] but got: %s" msgstr "" -#: src/stored/spool.c:563 -msgid "Retrying after header spooling error failed.\n" +#: src/lib/address_conf.c:461 +#, c-format +msgid "Expected an equal = but got: %s" msgstr "" -#: src/stored/spool.c:579 +#: src/lib/address_conf.c:472 #, c-format -msgid "Error writing data to spool file. ERR=%s\n" +msgid "Expected an identifier [addr|port] but got: %s" msgstr "" -#: src/stored/spool.c:612 -msgid "Retrying after data spooling error failed.\n" +#: src/lib/address_conf.c:477 +msgid "Only one port per address block" msgstr "" -#: src/stored/spool.c:682 -msgid "Network error on BlastAttributes.\n" +#: src/lib/address_conf.c:483 +msgid "Only one addr per address block" msgstr "" -#: src/stored/spool.c:706 src/stored/spool.c:730 +#: src/lib/address_conf.c:487 #, c-format -msgid "Fseek on attributes file failed: ERR=%s\n" +msgid "Expected a identifier [addr|port] but got: %s" msgstr "" -#: src/stored/spool.c:718 +#: src/lib/address_conf.c:491 #, c-format -msgid "Truncate on attributes file failed: ERR=%s\n" +msgid "Expected a equal =, got: %s" msgstr "" -#: src/stored/spool.c:742 +#: src/lib/address_conf.c:499 #, c-format -msgid "Sending spooled attrs to the Director. Despooling %s bytes ...\n" +msgid "Expected a number or a string but got: %s" msgstr "" -#: src/stored/spool.c:768 +#: src/lib/address_conf.c:505 #, c-format -msgid "fopen attr spool file %s failed: ERR=%s\n" +msgid "Expected an IP number or a hostname but got: %s" msgstr "" -#: src/stored/lock.c:405 -#, c-format -msgid "pthread_cond_wait failure. ERR=%s\n" +#: src/lib/address_conf.c:511 +msgid "State machine missmatch" msgstr "" -#: src/stored/lock.c:504 -msgid "unknown blocked code" +#: src/lib/address_conf.c:517 +#, c-format +msgid "Expected a end of block with } but got: %s" msgstr "" -#: src/stored/stored_conf.c:241 +#: src/lib/address_conf.c:523 #, c-format -msgid "Expected a Device Type keyword, got: %s" +msgid "Cannot add hostname(%s) and port(%s) to addrlist (%s)" msgstr "" -#: src/stored/stored_conf.c:255 +#: src/lib/address_conf.c:529 #, c-format -msgid "" -"Maximum Block Size configured value %u is greater than allowed maximum: %u" +msgid "Expected an end of block with } but got: %s" msgstr "" -#: src/stored/stored_conf.c:269 +#: src/lib/address_conf.c:538 #, c-format -msgid "Warning: no \"%s\" resource (%d) defined.\n" +msgid "Expected an IP number or a hostname, got: %s" msgstr "" -#: src/stored/stored_conf.c:272 +#: src/lib/address_conf.c:543 src/lib/address_conf.c:557 #, c-format -msgid "dump_resource type=%d\n" +msgid "Cannot add port (%s) to (%s)" msgstr "" -#: src/stored/stored_conf.c:388 +#: src/lib/address_conf.c:552 #, c-format -msgid "Warning: unknown resource type %d\n" +msgid "Expected a port number or string, got: %s" msgstr "" -#: src/stored/stored_conf.c:555 src/stored/stored_conf.c:645 -#: src/stored/stored_conf.c:680 src/wx-console/console_conf.c:164 -#: src/wx-console/console_conf.c:239 src/wx-console/console_conf.c:284 -#: src/wx-console/console_conf.c:311 src/console/console_conf.c:157 -#: src/console/console_conf.c:233 src/console/console_conf.c:278 -#: src/console/console_conf.c:305 src/filed/filed_conf.c:333 -#: src/filed/filed_conf.c:398 src/filed/filed_conf.c:428 -#: src/qt-console/bat_conf.cpp:161 src/qt-console/bat_conf.cpp:239 -#: src/qt-console/bat_conf.cpp:287 src/qt-console/bat_conf.cpp:317 -#, c-format -msgid "Unknown resource type %d\n" +#: src/lib/crypto.c:430 +msgid "Unable to open certificate file" msgstr "" -#: src/stored/stored_conf.c:584 -#, c-format -msgid "\"%s\" item is required in \"%s\" resource, but not found.\n" +#: src/lib/crypto.c:437 +msgid "Unable to read certificate from file" msgstr "" -#: src/stored/stored_conf.c:590 -#, c-format -msgid "Too many items in \"%s\" resource\n" +#: src/lib/crypto.c:443 +msgid "Unable to extract public key from certificate" msgstr "" -#: src/stored/stored_conf.c:624 -#, c-format -msgid "Cannot find AutoChanger resource %s\n" +#: src/lib/crypto.c:450 +msgid "" +"Provided certificate does not include the required subjectKeyIdentifier " +"extension." msgstr "" -#: src/stored/stored_conf.c:640 +#: src/lib/crypto.c:457 #, c-format -msgid "Unable to init lock: ERR=%s\n" +msgid "Unsupported key type provided: %d\n" msgstr "" -#: src/stored/stored_conf.c:698 -#, c-format -msgid "" -"Attempt to define second \"%s\" resource named \"%s\" is not permitted.\n" +#: src/lib/crypto.c:494 src/lib/crypto.c:542 +msgid "Unable to open private key file" msgstr "" -#: src/stored/dev.c:127 -#, c-format -msgid "Unable to stat device %s: ERR=%s\n" +#: src/lib/crypto.c:524 src/lib/crypto.c:558 +msgid "Unable to read private key from file" msgstr "" -#: src/stored/dev.c:145 +#: src/lib/crypto.c:617 #, c-format -msgid "" -"%s is an unknown device type. Must be tape or directory\n" -" or have RequiresMount=yes for DVD. st_mode=%x\n" +msgid "Unsupported digest type: %d\n" msgstr "" -#: src/stored/dev.c:155 -msgid "DVD support is now deprecated\n" +#: src/lib/crypto.c:631 +msgid "OpenSSL digest initialization failed" msgstr "" -#: src/stored/dev.c:231 -#, c-format -msgid "Unable to stat mount point %s: ERR=%s\n" +#: src/lib/crypto.c:645 +msgid "OpenSSL digest update failed" msgstr "" -#: src/stored/dev.c:236 -msgid "" -"Mount and unmount commands must defined for a device which requires mount.\n" +#: src/lib/crypto.c:663 +msgid "OpenSSL digest finalize failed" msgstr "" -#: src/stored/dev.c:247 -#, c-format -msgid "Min block size > max on device %s\n" +#: src/lib/crypto.c:761 +msgid "OpenSSL digest_new failed" msgstr "" -#: src/stored/dev.c:251 -#, c-format -msgid "Block size %u on device %s is too large, using default %u\n" +#: src/lib/crypto.c:767 +msgid "OpenSSL sign get digest failed" msgstr "" -#: src/stored/dev.c:256 -#, c-format -msgid "Max block size %u not multiple of device %s block size=%d.\n" +#: src/lib/crypto.c:806 src/lib/crypto.c:810 +msgid "OpenSSL digest Verify final failed" msgstr "" -#: src/stored/dev.c:260 -#, c-format -msgid "Max Vol Size < 8 * Max Block Size for device %s\n" +#: src/lib/crypto.c:815 +msgid "No signers found for crypto verify.\n" msgstr "" -#: src/stored/dev.c:276 src/stored/dev.c:282 -#, c-format -msgid "Unable to init cond variable: ERR=%s\n" +#: src/lib/crypto.c:876 +msgid "Signature creation failed" msgstr "" -#: src/stored/dev.c:288 -#, c-format -msgid "Unable to init spool mutex: ERR=%s\n" +#: src/lib/crypto.c:954 +msgid "Signature decoding failed" msgstr "" -#: src/stored/dev.c:294 -#, c-format -msgid "Unable to init acquire mutex: ERR=%s\n" +#: src/lib/crypto.c:1031 +msgid "Unsupported cipher type specified\n" msgstr "" -#: src/stored/dev.c:300 -#, c-format -msgid "Unable to init read acquire mutex: ERR=%s\n" +#: src/lib/crypto.c:1180 +msgid "CryptoData decoding failed" msgstr "" -#: src/stored/dev.c:416 -msgid "Illegal mode given to open dev.\n" +#: src/lib/crypto.c:1224 +msgid "Failure decrypting the session key" msgstr "" -#: src/stored/dev.c:551 +#: src/lib/crypto.c:1275 #, c-format -msgid "Could not open file device %s. No Volume name given.\n" +msgid "Unsupported contentEncryptionAlgorithm: %d\n" msgstr "" -#: src/stored/dev.c:574 -#, c-format -msgid "Could not open: %s, ERR=%s\n" +#: src/lib/crypto.c:1285 src/lib/crypto.c:1291 +msgid "OpenSSL cipher context initialization failed" msgstr "" -#: src/stored/dev.c:639 -#, c-format -msgid "No tape loaded or drive offline on %s.\n" +#: src/lib/crypto.c:1298 +msgid "Encryption session provided an invalid symmetric key" msgstr "" -#: src/stored/dev.c:649 -#, c-format -msgid "Rewind error on %s. ERR=%s.\n" +#: src/lib/crypto.c:1304 +msgid "Encryption session provided an invalid IV" msgstr "" -#: src/stored/dev.c:659 src/stored/dev.c:737 src/stored/dev.c:878 -#: src/stored/dev.c:1469 -#, c-format -msgid "lseek error on %s. ERR=%s.\n" +#: src/lib/crypto.c:1310 +msgid "OpenSSL cipher context key/IV initialization failed" msgstr "" -#: src/stored/dev.c:708 +#: src/lib/crypto.c:1380 #, c-format -msgid "Bad call to eod. Device %s not open\n" +msgid "Unable to init OpenSSL threading: ERR=%s\n" +msgstr "" + +#: src/lib/crypto.c:1393 +msgid "Failed to seed OpenSSL PRNG\n" +msgstr "" + +#: src/lib/crypto.c:1419 +msgid "Failed to save OpenSSL PRNG\n" msgstr "" -#: src/stored/dev.c:775 +#: src/lib/crypto.c:1480 #, c-format -msgid "ioctl MTEOM error on %s. ERR=%s.\n" +msgid "Unsupported digest type=%d specified\n" msgstr "" -#: src/stored/dev.c:785 src/stored/dev.c:919 +#: src/lib/crypto.c:1500 #, c-format -msgid "ioctl MTIOCGET error on %s. ERR=%s.\n" +msgid "SHA1Update() returned an error: %d\n" msgstr "" -#: src/stored/dev.c:865 -msgid "Bad device call. Device not open\n" +#: src/lib/crypto.c:1643 +msgid "No error" msgstr "" -#: src/stored/dev.c:877 -#, c-format -msgid "Seek error: ERR=%s\n" +#: src/lib/crypto.c:1645 +msgid "Signer not found" msgstr "" -#: src/stored/dev.c:914 -msgid " Bacula status:" +#: src/lib/crypto.c:1647 +msgid "Recipient not found" msgstr "" -#: src/stored/dev.c:915 src/stored/dev.c:998 src/stored/dev.c:1000 -#, c-format -msgid " file=%d block=%d\n" +#: src/lib/crypto.c:1649 +msgid "Unsupported digest algorithm" msgstr "" -#: src/stored/dev.c:923 -msgid " Device status:" +#: src/lib/crypto.c:1651 +msgid "Unsupported encryption algorithm" msgstr "" -#: src/stored/dev.c:1022 -msgid "Bad call to load_dev. Device not open\n" +#: src/lib/crypto.c:1653 +msgid "Signature is invalid" msgstr "" -#: src/stored/dev.c:1033 src/stored/dev.c:1046 -#, c-format -msgid "ioctl MTLOAD error on %s. ERR=%s.\n" +#: src/lib/crypto.c:1655 +msgid "Decryption error" msgstr "" -#: src/stored/dev.c:1077 -#, c-format -msgid "ioctl MTOFFL error on %s. ERR=%s.\n" +#: src/lib/crypto.c:1658 +msgid "Internal error" msgstr "" -#: src/stored/dev.c:1118 -msgid "Bad call to fsf. Device not open\n" +#: src/lib/crypto.c:1660 +msgid "Unknown error" msgstr "" -#: src/stored/dev.c:1129 src/stored/dev.c:1256 +#: src/lib/attr.c:69 #, c-format -msgid "Device %s at End of Tape.\n" +msgid "Error scanning attributes: %s\n" msgstr "" -#: src/stored/dev.c:1160 src/stored/dev.c:1236 -#, c-format -msgid "ioctl MTFSF error on %s. ERR=%s.\n" +#: src/lib/signal.c:56 +msgid "Invalid signal number" msgstr "" -#: src/stored/dev.c:1207 src/stored/btape.c:1977 +#: src/lib/signal.c:146 src/lib/signal.c:148 #, c-format -msgid "read error on %s. ERR=%s.\n" +msgid "Bacula interrupted by signal %d: %s\n" msgstr "" -#: src/stored/dev.c:1285 -msgid "Bad call to bsf. Device not open\n" +#: src/lib/signal.c:164 +#, c-format +msgid "Kaboom! %s, %s got signal %d - %s at %s. Attempting traceback.\n" msgstr "" -#: src/stored/dev.c:1291 +#: src/lib/signal.c:166 #, c-format -msgid "Device %s cannot BSF because it is not a tape.\n" +msgid "Kaboom! exepath=%s\n" msgstr "" -#: src/stored/dev.c:1308 +#: src/lib/signal.c:207 #, c-format -msgid "ioctl MTBSF error on %s. ERR=%s.\n" +msgid "Fork error: ERR=%s\n" msgstr "" -#: src/stored/dev.c:1327 -msgid "Bad call to fsr. Device not open\n" +#: src/lib/signal.c:215 +#, c-format +msgid "Calling: %s %s %s %s\n" msgstr "" -#: src/stored/dev.c:1337 +#: src/lib/signal.c:219 #, c-format -msgid "ioctl MTFSR not permitted on %s.\n" +msgid "execv: %s failed: ERR=%s\n" msgstr "" -#: src/stored/dev.c:1365 +#: src/lib/signal.c:241 #, c-format -msgid "ioctl MTFSR %d error on %s. ERR=%s.\n" +msgid "It looks like the traceback worked...\n" msgstr "" -#: src/stored/dev.c:1383 -msgid "Bad call to bsr_dev. Device not open\n" +#: src/lib/signal.c:243 +#, c-format +msgid "The btraceback call returned %d\n" msgstr "" -#: src/stored/dev.c:1393 +#: src/lib/signal.c:303 #, c-format -msgid "ioctl MTBSR not permitted on %s.\n" +msgid "BA_NSIG too small (%d) should be (%d)\n" msgstr "" -#: src/stored/dev.c:1407 -#, c-format -msgid "ioctl MTBSR error on %s. ERR=%s.\n" +#: src/lib/signal.c:309 +msgid "UNKNOWN SIGNAL" msgstr "" -#: src/stored/dev.c:1458 -msgid "Bad call to reposition. Device not open\n" +#: src/lib/signal.c:310 +msgid "Hangup" msgstr "" -#: src/stored/dev.c:1537 -msgid "Bad call to weof_dev. Device not open\n" +#: src/lib/signal.c:311 +msgid "Interrupt" msgstr "" -#: src/stored/dev.c:1547 -msgid "Attempt to WEOF on non-appendable Volume\n" +#: src/lib/signal.c:312 +msgid "Quit" msgstr "" -#: src/stored/dev.c:1565 -#, c-format -msgid "ioctl MTWEOF error on %s. ERR=%s.\n" +#: src/lib/signal.c:313 +msgid "Illegal instruction" msgstr "" -#: src/stored/dev.c:1664 -#, c-format -msgid "unknown func code %d" +#: src/lib/signal.c:314 +msgid "Trace/Breakpoint trap" msgstr "" -#: src/stored/dev.c:1670 -#, c-format -msgid "I/O function \"%s\" not supported on this device.\n" +#: src/lib/signal.c:315 +msgid "Abort" msgstr "" -#: src/stored/dev.c:1844 -#, c-format -msgid "Unable to truncate device %s. ERR=%s\n" +#: src/lib/signal.c:317 +msgid "EMT instruction (Emulation Trap)" msgstr "" -#: src/stored/dev.c:1861 -#, c-format -msgid "Unable to stat device %s. ERR=%s\n" +#: src/lib/signal.c:320 +msgid "IOT trap" msgstr "" -#: src/stored/dev.c:1875 -#, c-format -msgid "Device %s doesn't support ftruncate(). Recreating file %s.\n" +#: src/lib/signal.c:322 +msgid "BUS error" msgstr "" -#: src/stored/dev.c:1887 -#, c-format -msgid "Could not reopen: %s, ERR=%s\n" +#: src/lib/signal.c:323 +msgid "Floating-point exception" msgstr "" -#: src/stored/dev.c:2010 src/stored/dev.c:2081 -#, c-format -msgid "Device %s cannot be %smounted. ERR=%s\n" +#: src/lib/signal.c:324 +msgid "Kill, unblockable" msgstr "" -#: src/stored/dev.c:2481 -#, c-format -msgid "Unable to set eotmodel on device %s: ERR=%s\n" +#: src/lib/signal.c:325 +msgid "User-defined signal 1" msgstr "" -#: src/stored/bscan.c:118 -#, c-format -msgid "" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: bscan [ options ] \n" -" -b bootstrap specify a bootstrap file\n" -" -c specify configuration file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -m update media info in database\n" -" -D specify the driver database name (default NULL)\n" -" -n specify the database name (default bacula)\n" -" -u specify database user name (default bacula)\n" -" -P specify database password (default none)\n" -" -h specify database host (default NULL)\n" -" -t specify database port (default 0)\n" -" -p proceed inspite of I/O errors\n" -" -r list records\n" -" -s synchronize or store in database\n" -" -S show scan progress periodically\n" -" -v verbose\n" -" -V specify Volume names (separated by |)\n" -" -w specify working directory (default from conf file)\n" -" -? print this message\n" -"\n" +#: src/lib/signal.c:326 +msgid "Segmentation violation" +msgstr "" + +#: src/lib/signal.c:327 +msgid "User-defined signal 2" msgstr "" -#: src/stored/bscan.c:278 -#, c-format -msgid "Working Directory: %s not found. Cannot continue.\n" +#: src/lib/signal.c:328 +msgid "Broken pipe" msgstr "" -#: src/stored/bscan.c:282 -#, c-format -msgid "Working Directory: %s is not a directory. Cannot continue.\n" +#: src/lib/signal.c:329 +msgid "Alarm clock" msgstr "" -#: src/stored/bscan.c:296 src/stored/bscan.c:372 -#, c-format -msgid "First Volume Size = %s\n" +#: src/lib/signal.c:330 +msgid "Termination" msgstr "" -#: src/stored/bscan.c:302 src/tools/bvfs_test.c:215 src/tools/bbatch.c:201 -#: src/tools/bbatch.c:250 src/tools/ing_test.c:191 -msgid "Could not init Bacula database\n" +#: src/lib/signal.c:332 +msgid "Stack fault" msgstr "" -#: src/stored/bscan.c:309 src/tools/bvfs_test.c:224 src/tools/bbatch.c:257 -#: src/tools/ing_test.c:200 -#, c-format -msgid "Using Database: %s, User: %s\n" +#: src/lib/signal.c:334 +msgid "Child status has changed" msgstr "" -#: src/stored/bscan.c:343 -#, c-format -msgid "Create JobMedia for Job %s\n" +#: src/lib/signal.c:335 +msgid "Continue" msgstr "" -#: src/stored/bscan.c:353 -#, c-format -msgid "Could not create JobMedia record for Volume=%s Job=%s\n" +#: src/lib/signal.c:336 +msgid "Stop, unblockable" msgstr "" -#: src/stored/bscan.c:420 -#, c-format -msgid "done: %d%%\n" +#: src/lib/signal.c:337 +msgid "Keyboard stop" msgstr "" -#: src/stored/bscan.c:444 -msgid "Volume is prelabeled. This tape cannot be scanned.\n" +#: src/lib/signal.c:338 +msgid "Background read from tty" msgstr "" -#: src/stored/bscan.c:456 -#, c-format -msgid "Pool record for %s found in DB.\n" +#: src/lib/signal.c:339 +msgid "Background write to tty" msgstr "" -#: src/stored/bscan.c:460 -#, c-format -msgid "VOL_LABEL: Pool record not found for Pool: %s\n" +#: src/lib/signal.c:340 +msgid "Urgent condition on socket" msgstr "" -#: src/stored/bscan.c:466 -#, c-format -msgid "VOL_LABEL: PoolType mismatch. DB=%s Vol=%s\n" +#: src/lib/signal.c:341 +msgid "CPU limit exceeded" msgstr "" -#: src/stored/bscan.c:470 -#, c-format -msgid "Pool type \"%s\" is OK.\n" +#: src/lib/signal.c:342 +msgid "File size limit exceeded" msgstr "" -#: src/stored/bscan.c:480 -#, c-format -msgid "Media record for %s found in DB.\n" +#: src/lib/signal.c:343 +msgid "Virtual alarm clock" msgstr "" -#: src/stored/bscan.c:487 -#, c-format -msgid "VOL_LABEL: Media record not found for Volume: %s\n" +#: src/lib/signal.c:344 +msgid "Profiling alarm clock" msgstr "" -#: src/stored/bscan.c:494 -#, c-format -msgid "VOL_LABEL: MediaType mismatch. DB=%s Vol=%s\n" +#: src/lib/signal.c:345 +msgid "Window size change" msgstr "" -#: src/stored/bscan.c:498 -#, c-format -msgid "Media type \"%s\" is OK.\n" +#: src/lib/signal.c:346 +msgid "I/O now possible" msgstr "" -#: src/stored/bscan.c:508 -#, c-format -msgid "VOL_LABEL: OK for Volume: %s\n" +#: src/lib/signal.c:348 +msgid "Power failure restart" msgstr "" -#: src/stored/bscan.c:515 -#, c-format -msgid "%d \"errors\" ignored before first Start of Session record.\n" +#: src/lib/signal.c:351 +msgid "No runnable lwp" msgstr "" -#: src/stored/bscan.c:526 -#, c-format -msgid "SOS_LABEL: Found Job record for JobId: %d\n" +#: src/lib/signal.c:354 +msgid "SIGLWP special signal used by thread library" msgstr "" -#: src/stored/bscan.c:531 -#, c-format -msgid "SOS_LABEL: Job record not found for JobId: %d\n" +#: src/lib/signal.c:357 +msgid "Checkpoint Freeze" msgstr "" -#: src/stored/bscan.c:571 -#, c-format -msgid "SOS_LABEL: VolSessId mismatch for JobId=%u. DB=%d Vol=%d\n" +#: src/lib/signal.c:360 +msgid "Checkpoint Thaw" msgstr "" -#: src/stored/bscan.c:577 -#, c-format -msgid "SOS_LABEL: VolSessTime mismatch for JobId=%u. DB=%d Vol=%d\n" +#: src/lib/signal.c:363 +msgid "Thread Cancellation" msgstr "" -#: src/stored/bscan.c:583 -#, c-format -msgid "SOS_LABEL: PoolId mismatch for JobId=%u. DB=%d Vol=%d\n" +#: src/lib/signal.c:366 +msgid "Resource Lost (e.g. record-lock lost)" msgstr "" -#: src/stored/bscan.c:601 src/stored/bscan.c:1161 -#, c-format -msgid "Could not find SessId=%d SessTime=%d for EOS record.\n" +#: src/lib/berrno.c:51 +msgid "Child exited normally." msgstr "" -#: src/stored/bscan.c:647 -#, c-format -msgid "Could not update job record. ERR=%s\n" +#: src/lib/berrno.c:58 +msgid "Unknown error during program execvp" msgstr "" -#: src/stored/bscan.c:658 +#: src/lib/berrno.c:61 #, c-format -msgid "End of all Volumes. VolFiles=%u VolBlocks=%u VolBytes=%s\n" +msgid "Child exited with code %d" msgstr "" -#: src/stored/bscan.c:670 +#: src/lib/berrno.c:69 #, c-format -msgid "Could not find Job for SessId=%d SessTime=%d record.\n" +msgid "Child died from signal %d: %s" msgstr "" -#: src/stored/bscan.c:701 -#, c-format -msgid "%s file records. At file:blk=%s:%s bytes=%s\n" +#: src/lib/berrno.c:75 +msgid "Invalid errno. No error message possible." msgstr "" -#: src/stored/bscan.c:766 -#, c-format -msgid "Got MD5 record: %s\n" +#: src/lib/rwlock.c:295 +msgid "rwl_writeunlock called too many times.\n" msgstr "" -#: src/stored/bscan.c:774 -#, c-format -msgid "Got SHA1 record: %s\n" +#: src/lib/rwlock.c:300 +msgid "rwl_writeunlock by non-owner.\n" msgstr "" -#: src/stored/bscan.c:782 +#: src/lib/mem_pool.c:101 #, c-format -msgid "Got SHA256 record: %s\n" +msgid "MemPool index %d larger than max %d\n" msgstr "" -#: src/stored/bscan.c:790 +#: src/lib/mem_pool.c:119 src/lib/mem_pool.c:139 src/lib/mem_pool.c:175 +#: src/lib/mem_pool.c:248 src/lib/mem_pool.c:268 src/lib/mem_pool.c:303 +#: src/lib/mem_pool.c:614 #, c-format -msgid "Got SHA512 record: %s\n" +msgid "Out of memory requesting %d bytes\n" msgstr "" -#: src/stored/bscan.c:798 src/stored/bscan.c:805 -msgid "Got signed digest record\n" +#: src/lib/mem_pool.c:156 +msgid "obuf is NULL\n" msgstr "" -#: src/stored/bscan.c:811 +#: src/lib/bnet_server.c:103 #, c-format -msgid "Got Prog Names Stream: %s\n" +msgid "Cannot open stream socket. ERR=%s. Current %s All %s\n" msgstr "" -#: src/stored/bscan.c:817 -msgid "Got Prog Data Stream record.\n" +#: src/lib/bnet_server.c:116 +#, c-format +msgid "Cannot set SO_REUSEADDR on socket: %s\n" msgstr "" -#: src/stored/bscan.c:862 +#: src/lib/bnet_server.c:125 #, c-format -msgid "Unknown stream type!!! stream=%d len=%i\n" +msgid "Cannot bind port %d: ERR=%s: Retrying ...\n" msgstr "" -#: src/stored/bscan.c:930 +#: src/lib/bnet_server.c:133 src/lib/bnet_server.c:141 #, c-format -msgid "Could not create File Attributes record. ERR=%s\n" +msgid "Cannot bind port %d: ERR=%s.\n" msgstr "" -#: src/stored/bscan.c:936 -#, c-format -msgid "Created File record: %s\n" +#: src/lib/bnet_server.c:148 +msgid "No addr/port found to listen on.\n" msgstr "" -#: src/stored/bscan.c:981 +#: src/lib/bnet_server.c:154 #, c-format -msgid "Could not create media record. ERR=%s\n" +msgid "Could not init client queue: ERR=%s\n" msgstr "" -#: src/stored/bscan.c:985 src/stored/bscan.c:1006 +#: src/lib/bnet_server.c:173 #, c-format -msgid "Could not update media record. ERR=%s\n" +msgid "Error in select: %s\n" msgstr "" -#: src/stored/bscan.c:989 +#: src/lib/bnet_server.c:196 #, c-format -msgid "Created Media record for Volume: %s\n" +msgid "Connection from %s:%d refused by hosts.access\n" msgstr "" -#: src/stored/bscan.c:1010 -#, c-format -msgid "Updated Media record at end of Volume: %s\n" +#: src/lib/bnet_server.c:224 +msgid "Could not create client BSOCK.\n" msgstr "" -#: src/stored/bscan.c:1027 +#: src/lib/bnet_server.c:231 #, c-format -msgid "Could not create pool record. ERR=%s\n" +msgid "Could not add job to client queue: ERR=%s\n" msgstr "" -#: src/stored/bscan.c:1031 +#: src/lib/bnet_server.c:248 #, c-format -msgid "Created Pool record for Pool: %s\n" +msgid "Could not destroy client queue: ERR=%s\n" msgstr "" -#: src/stored/bscan.c:1050 +#: src/lib/runscript.c:224 #, c-format -msgid "Could not get Client record. ERR=%s\n" +msgid "%s: run %s \"%s\"\n" msgstr "" -#: src/stored/bscan.c:1060 +#: src/lib/runscript.c:233 #, c-format -msgid "Created Client record for Client: %s\n" +msgid "Runscript: %s could not execute. ERR=%s\n" msgstr "" -#: src/stored/bscan.c:1077 +#: src/lib/runscript.c:242 #, c-format -msgid "Fileset \"%s\" already exists.\n" +msgid "%s: %s\n" msgstr "" -#: src/stored/bscan.c:1081 +#: src/lib/runscript.c:247 #, c-format -msgid "Could not create FileSet record \"%s\". ERR=%s\n" +msgid "Runscript: %s returned non-zero status=%d. ERR=%s\n" msgstr "" -#: src/stored/bscan.c:1086 -#, c-format -msgid "Created FileSet record \"%s\"\n" +#: src/lib/runscript.c:285 src/dird/dird_conf.c:752 +msgid " --> RunScript\n" msgstr "" -#: src/stored/bscan.c:1133 +#: src/lib/runscript.c:286 src/dird/dird_conf.c:753 #, c-format -msgid "Could not create JobId record. ERR=%s\n" +msgid " --> Command=%s\n" msgstr "" -#: src/stored/bscan.c:1139 +#: src/lib/runscript.c:287 src/dird/dird_conf.c:754 #, c-format -msgid "Could not update job start record. ERR=%s\n" +msgid " --> Target=%s\n" msgstr "" -#: src/stored/bscan.c:1142 +#: src/lib/runscript.c:288 src/dird/dird_conf.c:755 #, c-format -msgid "Created new JobId=%u record for original JobId=%u\n" +msgid " --> RunOnSuccess=%u\n" msgstr "" -#: src/stored/bscan.c:1195 +#: src/lib/runscript.c:289 src/dird/dird_conf.c:756 #, c-format -msgid "Could not update JobId=%u record. ERR=%s\n" +msgid " --> RunOnFailure=%u\n" msgstr "" -#: src/stored/bscan.c:1200 +#: src/lib/runscript.c:290 src/dird/dird_conf.c:757 #, c-format -msgid "Updated Job termination record for JobId=%u Level=%s TermStat=%c\n" +msgid " --> FailJobOnError=%u\n" msgstr "" -#: src/stored/bscan.c:1225 +#: src/lib/runscript.c:291 src/dird/dird_conf.c:758 #, c-format -msgid "Job Termination code: %d" +msgid " --> RunWhen=%u\n" msgstr "" -#: src/stored/bscan.c:1230 -#, c-format -msgid "" -"%s\n" -"JobId: %d\n" -"Job: %s\n" -"FileSet: %s\n" -"Backup Level: %s\n" -"Client: %s\n" -"Start time: %s\n" -"End time: %s\n" -"Files Written: %s\n" -"Bytes Written: %s\n" -"Volume Session Id: %d\n" -"Volume Session Time: %d\n" -"Last Volume Bytes: %s\n" -"Termination: %s\n" -"\n" +#: src/lib/cram-md5.c:97 src/lib/cram-md5.c:125 +msgid "1999 Authorization failed.\n" msgstr "" -#: src/stored/bscan.c:1288 -#, c-format -msgid "Could not create JobMedia record. ERR=%s\n" +#: src/lib/smartall.c:133 src/lib/smartall.c:244 src/lib/smartall.c:259 +msgid "Out of memory\n" msgstr "" -#: src/stored/bscan.c:1292 -#, c-format -msgid "Created JobMedia record JobId %d, MediaId %d\n" +#: src/lib/smartall.c:138 +msgid "Too much memory used." msgstr "" -#: src/stored/bscan.c:1308 +#: src/lib/smartall.c:168 #, c-format -msgid "Could not find SessId=%d SessTime=%d for MD5/SHA1 record.\n" +msgid "Attempt to free NULL called from %s:%d\n" msgstr "" -#: src/stored/bscan.c:1322 +#: src/lib/smartall.c:182 #, c-format -msgid "Could not add MD5/SHA1 to File record. ERR=%s\n" +msgid "double free from %s:%d\n" msgstr "" -#: src/stored/bscan.c:1327 -msgid "Updated MD5/SHA1 record\n" +#: src/lib/smartall.c:190 +#, c-format +msgid "qp->qnext->qprev != qp called from %s:%d\n" msgstr "" -#: src/stored/job.c:234 +#: src/lib/smartall.c:194 #, c-format -msgid "FD connect failed: Job name not found: %s\n" +msgid "qp->qprev->qnext != qp called from %s:%d\n" msgstr "" -#: src/stored/job.c:244 +#: src/lib/smartall.c:203 #, c-format -msgid "Hey!!!! JobId %u Job %s already authenticated.\n" +msgid "Overrun buffer: len=%d addr=%p allocated: %s:%d called from %s:%d\n" msgstr "" -#: src/stored/job.c:261 -msgid "Unable to authenticate File daemon\n" +#: src/lib/smartall.c:281 +#, c-format +msgid "sm_realloc size: %d\n" msgstr "" -#: src/stored/job.c:390 -msgid "In free_jcr(), but still attached to device!!!!\n" +#: src/lib/smartall.c:319 +#, c-format +msgid "sm_realloc %d at %p from %s:%d\n" msgstr "" -#: src/stored/btape.c:185 +#: src/lib/smartall.c:379 #, c-format msgid "" "\n" -"\n" -"!!!! Warning large disk addressing disabled. boffset_t=%d should be 8 or " -"more !!!!!\n" -"\n" -"\n" +"Orphaned buffers exist. Dump terminated following\n" +" discovery of bad links in chain of orphaned buffers.\n" +" Buffer address with bad links: %p\n" msgstr "" -#: src/stored/btape.c:192 +#: src/lib/smartall.c:424 #, c-format -msgid "32 bit printf/scanf problem. i=%d x32=%u y32=%u\n" -msgstr "" - -#: src/stored/btape.c:201 -msgid "64 bit printf/scanf problem. i=%d x64=%" +msgid "Damaged buffer found. Called from %s:%d\n" msgstr "" -#: src/stored/btape.c:206 +#: src/lib/smartall.c:457 #, c-format -msgid "Tape block granularity is %d bytes.\n" +msgid "" +"\n" +"Damaged buffers found at %s:%d\n" msgstr "" -#: src/stored/btape.c:279 -msgid "No archive name specified.\n" +#: src/lib/smartall.c:460 +msgid " discovery of bad prev link.\n" msgstr "" -#: src/stored/btape.c:283 -msgid "Improper number of arguments specified.\n" +#: src/lib/smartall.c:463 +msgid " discovery of bad next link.\n" msgstr "" -#: src/stored/btape.c:297 -msgid "btape does not work with DVD storage.\n" +#: src/lib/smartall.c:466 +msgid " discovery of data overrun.\n" msgstr "" -#: src/stored/btape.c:302 -msgid "btape only works with tape storage.\n" +#: src/lib/smartall.c:469 +msgid " NULL pointer.\n" msgstr "" -#: src/stored/btape.c:383 +#: src/lib/smartall.c:475 #, c-format -msgid "Total Volume bytes=%sB. Total Write rate = %sB/s\n" +msgid " Buffer address: %p\n" msgstr "" -#: src/stored/btape.c:409 +#: src/lib/smartall.c:482 #, c-format -msgid "Volume bytes=%sB. Write rate = %sB/s\n" +msgid "Damaged buffer: %6u bytes allocated at line %d of %s %s\n" msgstr "" -#: src/stored/btape.c:477 +#: src/dird/job.c:50 #, c-format -msgid "open device %s: OK\n" -msgstr "" - -#: src/stored/btape.c:500 -msgid "Enter Volume Name: " +msgid "Could not init job queue: ERR=%s\n" msgstr "" -#: src/stored/btape.c:507 +#: src/dird/job.c:82 #, c-format -msgid "Device open failed. ERR=%s\n" +msgid "Could not add job queue: ERR=%s\n" msgstr "" -#: src/stored/btape.c:512 +#: src/dird/job.c:121 src/dird/ua_output.c:714 src/dird/xua_output.c:869 +#: src/tools/cats_test.c:363 #, c-format -msgid "Wrote Volume label for volume \"%s\".\n" +msgid "Could not open database \"%s\".\n" msgstr "" -#: src/stored/btape.c:526 -msgid "Volume has no label.\n" +#: src/dird/job.c:135 src/dird/job.c:139 src/dird/job.c:145 +#: src/dird/ua_status.c:367 src/dird/ua_dotcmds.c:831 src/dird/ua_cmds.c:836 +#: src/dird/ua_cmds.c:1589 +msgid "unknown source" +msgstr "" + +#: src/dird/job.c:175 src/dird/job.c:397 src/dird/job.c:399 src/dird/job.c:599 +#: src/dird/job.c:601 src/dird/job.c:1303 src/dird/job.c:1345 +#: src/dird/job.c:1355 +msgid "Job resource" msgstr "" -#: src/stored/btape.c:529 -msgid "Volume label read correctly.\n" +#: src/dird/job.c:177 src/dird/job.c:1038 src/dird/job.c:1300 +#: src/dird/job.c:1347 src/dird/job.c:1363 src/dird/vbackup.c:77 +#: src/dird/mac.c:208 src/dird/mac.c:209 src/dird/backup.c:91 +msgid "Pool resource" msgstr "" -#: src/stored/btape.c:532 +#: src/dird/job.c:222 src/dird/job.c:339 #, c-format -msgid "I/O error on device: ERR=%s" +msgid "Unimplemented job type: %d\n" msgstr "" -#: src/stored/btape.c:535 -msgid "Volume name error\n" +#: src/dird/job.c:263 +msgid "Job canceled because max start delay time exceeded.\n" msgstr "" -#: src/stored/btape.c:538 -#, c-format -msgid "Error creating label. ERR=%s" +#: src/dird/job.c:268 +msgid "Job canceled because max run sched time exceeded.\n" msgstr "" -#: src/stored/btape.c:541 -msgid "Volume version error.\n" +#: src/dird/job.c:378 +msgid "Failed to connect to File daemon.\n" msgstr "" -#: src/stored/btape.c:544 -msgid "Bad Volume label type.\n" +#: src/dird/job.c:412 +msgid "Failed to select Storage daemon.\n" msgstr "" -#: src/stored/btape.c:547 -msgid "Unknown error.\n" +#: src/dird/job.c:417 src/dird/ua_dotcmds.c:837 src/dird/ua_cmds.c:842 +#: src/dird/ua_cmds.c:1600 src/dird/msgchan.c:69 +msgid "Failed to connect to Storage daemon.\n" msgstr "" -#: src/stored/btape.c:565 -#, c-format -msgid "Bad status from load. ERR=%s\n" +#: src/dird/job.c:512 +msgid "canceled" msgstr "" -#: src/stored/btape.c:567 +#: src/dird/job.c:526 #, c-format -msgid "Loaded %s\n" +msgid "JobId %s, Job %s marked to be %s.\n" msgstr "" -#: src/stored/btape.c:576 src/stored/btape.c:1139 src/stored/btape.c:1212 -#: src/stored/btape.c:1292 src/stored/btape.c:1563 -#, c-format -msgid "Bad status from rewind. ERR=%s\n" +#: src/dird/job.c:661 +msgid "Max wait time exceeded. Job canceled.\n" msgstr "" -#: src/stored/btape.c:579 src/stored/btape.c:1571 -#, c-format -msgid "Rewound %s\n" +#: src/dird/job.c:666 +msgid "Max run time exceeded. Job canceled.\n" msgstr "" -#: src/stored/btape.c:605 src/stored/btape.c:1575 -#, c-format -msgid "Bad status from weof. ERR=%s\n" +#: src/dird/job.c:671 +msgid "Max run sched time exceeded. Job canceled.\n" msgstr "" -#: src/stored/btape.c:609 +#: src/dird/job.c:793 #, c-format -msgid "Wrote 1 EOF to %s\n" +msgid "Pool \"%s\" not in database. ERR=%s" msgstr "" -#: src/stored/btape.c:612 +#: src/dird/job.c:797 #, c-format -msgid "Wrote %d EOFs to %s\n" +msgid "Created database record for Pool \"%s\".\n" msgstr "" -#: src/stored/btape.c:630 -msgid "Moved to end of medium.\n" +#: src/dird/job.c:879 src/dird/job.c:923 +#, c-format +msgid "JobId %d already running. Duplicate job not allowed.\n" msgstr "" -#: src/stored/btape.c:657 +#: src/dird/job.c:911 #, c-format -msgid "Bad status from bsf. ERR=%s\n" +msgid "Cancelling duplicate JobId=%d.\n" msgstr "" -#: src/stored/btape.c:659 -#, c-format -msgid "Backspaced %d file%s.\n" +#: src/dird/job.c:946 src/dird/job.c:947 +msgid "Run NextPool override" msgstr "" -#: src/stored/btape.c:676 -#, c-format -msgid "Bad status from bsr. ERR=%s\n" +#: src/dird/job.c:948 +msgid "Storage from Run NextPool override" msgstr "" -#: src/stored/btape.c:678 -#, c-format -msgid "Backspaced %d record%s.\n" +#: src/dird/job.c:952 src/dird/job.c:953 src/dird/job.c:1357 +msgid "Job's NextPool resource" msgstr "" -#: src/stored/btape.c:706 -#, c-format -msgid "Device status:\n" +#: src/dird/job.c:954 +msgid "Storage from Job's NextPool resource" msgstr "" -#: src/stored/btape.c:725 -#, c-format -msgid "Status:\n" +#: src/dird/job.c:962 src/dird/job.c:963 +msgid "Job Pool's NextPool resource" msgstr "" -#: src/stored/btape.c:740 -msgid "" -"Test writing larger and larger records.\n" -"This is a torture test for records.\n" -"I am going to write\n" -"larger and larger records. It will stop when the record size\n" -"plus the header exceeds the block size (by default about 64K)\n" +#: src/dird/job.c:964 +msgid "Storage from Pool's NextPool resource" msgstr "" -#: src/stored/btape.c:746 -msgid "Do you want to continue? (y/n): " +#: src/dird/job.c:995 +msgid "Run Pool override" msgstr "" -#: src/stored/btape.c:748 src/stored/btape.c:2200 -msgid "Command aborted.\n" +#: src/dird/job.c:1006 +msgid "Run FullPool override" msgstr "" -#: src/stored/btape.c:765 -#, c-format -msgid "Block %d i=%d\n" +#: src/dird/job.c:1008 +msgid "Job FullPool override" msgstr "" -#: src/stored/btape.c:792 -msgid "Skipping read backwards test because BSR turned off.\n" +#: src/dird/job.c:1017 +msgid "Run IncPool override" msgstr "" -#: src/stored/btape.c:796 -msgid "" -"\n" -"=== Write, backup, and re-read test ===\n" -"\n" -"I'm going to write three records and an EOF\n" -"then backup over the EOF and re-read the last record.\n" -"Bacula does this after writing the last block on the\n" -"tape to verify that the block was written correctly.\n" -"\n" -"This is not an *essential* feature ...\n" -"\n" +#: src/dird/job.c:1019 +msgid "Job IncPool override" msgstr "" -#: src/stored/btape.c:809 src/stored/btape.c:820 src/stored/btape.c:831 -#: src/stored/btape.c:1149 src/stored/btape.c:1165 src/stored/btape.c:1907 -#: src/stored/btape.c:2823 -msgid "Error writing record to block.\n" +#: src/dird/job.c:1028 +msgid "Run DiffPool override" msgstr "" -#: src/stored/btape.c:813 src/stored/btape.c:824 src/stored/btape.c:835 -#: src/stored/btape.c:1153 src/stored/btape.c:1169 src/stored/btape.c:1911 -#: src/stored/btape.c:2827 -msgid "Error writing block to device.\n" +#: src/dird/job.c:1030 +msgid "Job DiffPool override" msgstr "" -#: src/stored/btape.c:816 -#, c-format -msgid "Wrote first record of %d bytes.\n" +#: src/dird/job.c:1097 +msgid "FileSet MD5 digest not found.\n" msgstr "" -#: src/stored/btape.c:827 +#: src/dird/job.c:1102 #, c-format -msgid "Wrote second record of %d bytes.\n" +msgid "Could not create FileSet \"%s\" record. ERR=%s\n" msgstr "" -#: src/stored/btape.c:838 +#: src/dird/job.c:1144 #, c-format -msgid "Wrote third record of %d bytes.\n" +msgid "Error updating job record. %s" msgstr "" -#: src/stored/btape.c:845 src/stored/btape.c:850 -#, c-format -msgid "Backspace file failed! ERR=%s\n" +#: src/dird/job.c:1290 +msgid "Run pool override" msgstr "" -#: src/stored/btape.c:854 -msgid "Backspaced over EOF OK.\n" +#: src/dird/job.c:1295 +msgid "Run storage override" msgstr "" -#: src/stored/btape.c:856 -#, c-format -msgid "Backspace record failed! ERR=%s\n" +#: src/dird/job.c:1366 +msgid "Client resource" msgstr "" -#: src/stored/btape.c:859 -msgid "Backspace record OK.\n" +#: src/dird/job.c:1422 src/dird/ua_run.c:392 +msgid "No storage specified.\n" msgstr "" -#: src/stored/btape.c:862 src/stored/btape.c:868 +#: src/dird/job.c:1583 #, c-format -msgid "Read block failed! ERR=%s\n" +msgid "Could not start clone job: \"%s\".\n" msgstr "" -#: src/stored/btape.c:873 -msgid "Bad data in record. Test failed!\n" +#: src/dird/job.c:1586 +#, c-format +msgid "Clone JobId %d started.\n" msgstr "" -#: src/stored/btape.c:877 -msgid "" -"\n" -"Block re-read correct. Test succeeded!\n" +#: src/dird/vbackup.c:64 src/dird/mac.c:97 +msgid "Could not get or create a Pool record.\n" msgstr "" -#: src/stored/btape.c:878 -msgid "" -"=== End Write, backup, and re-read test ===\n" -"\n" +#: src/dird/vbackup.c:121 +#, c-format +msgid "Start Virtual Backup JobId %s, Job=%s\n" msgstr "" -#: src/stored/btape.c:885 +#: src/dird/vbackup.c:125 msgid "" -"This is not terribly serious since Bacula only uses\n" -"this function to verify the last block written to the\n" -"tape. Bacula will skip the last block verification\n" -"if you add:\n" -"\n" -"Backward Space Record = No\n" -"\n" -"to your Storage daemon's Device resource definition.\n" +"This Job is not an Accurate backup so is not equivalent to a Full backup.\n" msgstr "" -#: src/stored/btape.c:907 +#: src/dird/vbackup.c:141 src/dird/ua_dotcmds.c:749 src/dird/ua_restore.c:778 +#: src/dird/ua_restore.c:821 #, c-format -msgid "Begin writing %i files of %sB with raw blocks of %u bytes.\n" +msgid "Unable to get Job record for JobId=%s: ERR=%s\n" msgstr "" -#: src/stored/btape.c:928 src/stored/btape.c:2879 +#: src/dird/vbackup.c:145 src/dird/ua_restore.c:782 #, c-format -msgid "Write failed at block %u. stat=%d ERR=%s\n" +msgid "Selecting jobs to build the Full state at %s\n" msgstr "" -#: src/stored/btape.c:962 -#, c-format -msgid "Begin writing %i files of %sB with blocks of %u bytes.\n" +#: src/dird/vbackup.c:171 +msgid "No valid Jobs found from user selection.\n" msgstr "" -#: src/stored/btape.c:971 -msgid "" -"\n" -"Error writing record to block.\n" +#: src/dird/vbackup.c:175 +#, c-format +msgid "Using user supplied JobIds=%s\n" msgstr "" -#: src/stored/btape.c:975 -msgid "" -"\n" -"Error writing block to device.\n" +#: src/dird/vbackup.c:194 +msgid "No previous Full found in list, using Differential level\n" msgstr "" -#: src/stored/btape.c:1030 -msgid "The file_size is too big, stop this test with Ctrl-c.\n" +#: src/dird/vbackup.c:199 +msgid "No previous Full found in list, using Incremental level\n" msgstr "" -#: src/stored/btape.c:1058 -msgid "Test with zero data, should give the maximum throughput.\n" +#: src/dird/vbackup.c:212 +msgid "No previous Jobs found.\n" msgstr "" -#: src/stored/btape.c:1070 src/stored/btape.c:1096 -msgid "Test with random data, should give the minimum throughput.\n" +#: src/dird/vbackup.c:235 +#, c-format +msgid "Error getting Job record for previous Job: ERR=%s" msgstr "" -#: src/stored/btape.c:1085 -msgid "Test with zero data and bacula block structure.\n" +#: src/dird/vbackup.c:241 src/dird/mac.c:112 +msgid "Could not get or create the FileSet record.\n" msgstr "" -#: src/stored/btape.c:1125 +#: src/dird/vbackup.c:361 src/dird/admin.c:78 src/dird/mac.c:688 +#: src/dird/backup.c:749 #, c-format -msgid "" -"\n" -"=== Write, rewind, and re-read test ===\n" -"\n" -"I'm going to write %d records and an EOF\n" -"then write %d records and an EOF, then rewind,\n" -"and re-read the data to verify that it is correct.\n" -"\n" -"This is an *essential* feature ...\n" -"\n" +msgid "Error getting Job record for Job report: ERR=%s" msgstr "" -#: src/stored/btape.c:1157 src/stored/btape.c:1173 +#: src/dird/vbackup.c:368 src/dird/backup.c:756 #, c-format -msgid "Wrote %d blocks of %d bytes.\n" -msgstr "" - -#: src/stored/btape.c:1215 src/stored/btape.c:1295 -msgid "Rewind OK.\n" +msgid "Error getting Client record for Job report: ERR=%s" msgstr "" -#: src/stored/btape.c:1228 src/stored/btape.c:1347 -msgid "Got EOF on tape.\n" +#: src/dird/vbackup.c:374 src/dird/mac.c:718 src/dird/backup.c:762 +#, c-format +msgid "Error getting Media record for Volume \"%s\": ERR=%s" msgstr "" -#: src/stored/btape.c:1233 +#: src/dird/vbackup.c:411 src/dird/restore.c:614 src/dird/admin.c:98 +#: src/dird/backup.c:802 #, c-format -msgid "Read block %d failed! ERR=%s\n" +msgid "Inappropriate term code: %c\n" msgstr "" -#: src/stored/btape.c:1239 +#: src/dird/vbackup.c:448 #, c-format -msgid "Read record failed. Block %d! ERR=%s\n" +msgid "" +"%s %s %s (%s):\n" +" Build OS: %s %s %s\n" +" JobId: %d\n" +" Job: %s\n" +" Backup Level: Virtual Full\n" +" Client: \"%s\" %s\n" +" FileSet: \"%s\" %s\n" +" Pool: \"%s\" (From %s)\n" +" Catalog: \"%s\" (From %s)\n" +" Storage: \"%s\" (From %s)\n" +" Scheduled time: %s\n" +" Start time: %s\n" +" End time: %s\n" +" Elapsed time: %s\n" +" Priority: %d\n" +" SD Files Written: %s\n" +" SD Bytes Written: %s (%sB)\n" +" Rate: %.1f KB/s\n" +" Volume name(s): %s\n" +" Volume Session Id: %d\n" +" Volume Session Time: %d\n" +" Last Volume Bytes: %s (%sB)\n" +" SD Errors: %d\n" +" SD termination status: %s\n" +" Termination: %s\n" +"\n" msgstr "" -#: src/stored/btape.c:1245 src/stored/btape.c:1377 -#, c-format -msgid "Bad data in record. Expected %d, got %d at byte %d. Test failed!\n" +#: src/dird/ua_output.c:57 src/dird/ua_output.c:81 src/dird/xua_output.c:56 +#: src/dird/xua_output.c:80 +msgid "ON or OFF keyword missing.\n" msgstr "" -#: src/stored/btape.c:1252 -#, c-format -msgid "%d blocks re-read correctly.\n" +#: src/dird/ua_output.c:101 src/dird/xua_output.c:100 +msgid "Disabled Jobs:\n" msgstr "" -#: src/stored/btape.c:1255 src/stored/btape.c:1384 -msgid "" -"=== Test Succeeded. End Write, rewind, and re-read test ===\n" -"\n" +#: src/dird/ua_output.c:107 src/dird/xua_output.c:106 +msgid "No disabled Jobs.\n" msgstr "" -#: src/stored/btape.c:1283 -msgid "Block position test\n" +#: src/dird/ua_output.c:151 +msgid "disabled" msgstr "" -#: src/stored/btape.c:1338 -#, c-format -msgid "Reposition to file:block %d:%d\n" +#: src/dird/ua_output.c:199 src/dird/xua_output.c:204 +msgid "Keywords for the show command are:\n" msgstr "" -#: src/stored/btape.c:1340 -msgid "Reposition error.\n" +#: src/dird/ua_output.c:205 src/dird/xua_output.c:211 +#, c-format +msgid "%s resource %s not found.\n" msgstr "" -#: src/stored/btape.c:1353 +#: src/dird/ua_output.c:208 src/dird/xua_output.c:215 #, c-format -msgid "" -"Read block %d failed! file=%d blk=%d. ERR=%s\n" -"\n" +msgid "Resource %s not found\n" msgstr "" -#: src/stored/btape.c:1355 -msgid "" -"This may be because the tape drive block size is not\n" -" set to variable blocking as normally used by Bacula.\n" -" Please see the Tape Testing chapter in the manual and \n" -" look for using mt with defblksize and setoptions\n" -"If your tape drive block size is correct, then perhaps\n" -" your SCSI driver is *really* stupid and does not\n" -" correctly report the file:block after a FSF. In this\n" -" case try setting:\n" -" Fast Forward Space File = no\n" -" in your Device resource.\n" +#: src/dird/ua_output.c:278 src/dird/xua_output.c:356 +msgid "Hey! DB is NULL\n" msgstr "" -#: src/stored/btape.c:1371 +#: src/dird/ua_output.c:435 src/dird/xua_output.c:590 #, c-format -msgid "Read record failed! ERR=%s\n" +msgid "Jobid %d used %d Volume(s): %s\n" +msgstr "" + +#: src/dird/ua_output.c:454 src/dird/xua_output.c:609 +msgid "No Pool specified.\n" msgstr "" -#: src/stored/btape.c:1382 +#: src/dird/ua_output.c:465 src/dird/ua_select.c:531 src/dird/xua_output.c:620 +#: src/dird/ua_update.c:424 #, c-format -msgid "Block %d re-read correctly.\n" +msgid "Error obtaining pool ids. ERR=%s\n" msgstr "" -#: src/stored/btape.c:1403 -msgid "" -"\n" -"\n" -"=== Append files test ===\n" -"\n" -"This test is essential to Bacula.\n" -"\n" -"I'm going to write one record in file 0,\n" -" two records in file 1,\n" -" and three records in file 2\n" -"\n" +#: src/dird/ua_output.c:475 src/dird/xua_output.c:630 +#, c-format +msgid "Pool: %s\n" msgstr "" -#: src/stored/btape.c:1427 -msgid "Now moving to end of medium.\n" +#: src/dird/ua_output.c:491 src/dird/xua_output.c:646 +msgid "Ignoring invalid value for days. Max is 50.\n" msgstr "" -#: src/stored/btape.c:1429 src/stored/btape.c:1658 +#: src/dird/ua_output.c:513 src/dird/xua_output.c:668 #, c-format -msgid "We should be in file 3. I am at file %d. %s\n" +msgid "Unknown list keyword: %s\n" msgstr "" -#: src/stored/btape.c:1430 src/stored/btape.c:1448 src/stored/btape.c:1647 -#: src/stored/btape.c:1659 src/stored/btape.c:1672 src/stored/btape.c:1689 -msgid "This is correct!" +#: src/dird/ua_output.c:538 src/dird/xua_output.c:693 +#, c-format +msgid "%s is not a job name.\n" msgstr "" -#: src/stored/btape.c:1430 src/stored/btape.c:1448 src/stored/btape.c:1647 -#: src/stored/btape.c:1659 src/stored/btape.c:1672 src/stored/btape.c:1689 -msgid "This is NOT correct!!!!" +#: src/dird/ua_output.c:552 src/dird/xua_output.c:707 +#, c-format +msgid "Could not find Pool for Job %s\n" msgstr "" -#: src/stored/btape.c:1436 -msgid "" -"\n" -"Now the important part, I am going to attempt to append to the tape.\n" -"\n" +#: src/dird/ua_output.c:565 src/dird/xua_output.c:720 +#, c-format +msgid "Could not find next Volume for Job %s (Pool=%s, Level=%s).\n" msgstr "" -#: src/stored/btape.c:1443 +#: src/dird/ua_output.c:569 src/dird/xua_output.c:724 +#, c-format msgid "" -"Done appending, there should be no I/O errors\n" -"\n" +"The next Volume to be used by Job \"%s\" (Pool=%s, Level=%s) will be %s\n" msgstr "" -#: src/stored/btape.c:1444 -msgid "Doing Bacula scan of blocks:\n" +#: src/dird/ua_output.c:582 src/dird/xua_output.c:737 +#, c-format +msgid "Could not find next Volume for Job %s.\n" msgstr "" -#: src/stored/btape.c:1446 -msgid "End scanning the tape.\n" +#: src/dird/ua_output.c:727 src/dird/xua_output.c:882 +#, c-format +msgid "Pool %s not in database. %s" msgstr "" -#: src/stored/btape.c:1447 src/stored/btape.c:1671 +#: src/dird/ua_output.c:735 src/dird/xua_output.c:890 #, c-format -msgid "We should be in file 4. I am at file %d. %s\n" +msgid "Pool %s created in database.\n" msgstr "" -#: src/stored/btape.c:1472 -msgid "" -"\n" -"Autochanger enabled, but no name or no command device specified.\n" +#: src/dird/ua_output.c:788 src/dird/xua_output.c:943 +msgid "You have no messages.\n" msgstr "" -#: src/stored/btape.c:1476 -msgid "" -"\n" -"Ah, I see you have an autochanger configured.\n" -"To test the autochanger you must have a blank tape\n" -" that I can write on in Slot 1.\n" +#: src/dird/ua_output.c:868 src/dird/xua_output.c:1023 +msgid "Message too long to display.\n" msgstr "" -#: src/stored/btape.c:1479 -msgid "" -"\n" -"Do you wish to continue with the Autochanger test? (y/n): " +#: src/dird/jobq.c:62 +#, c-format +msgid "pthread_attr_init: ERR=%s\n" msgstr "" -#: src/stored/btape.c:1486 -msgid "" -"\n" -"\n" -"=== Autochanger test ===\n" -"\n" +#: src/dird/jobq.c:71 +#, c-format +msgid "pthread_mutex_init: ERR=%s\n" msgstr "" -#: src/stored/btape.c:1495 -msgid "3301 Issuing autochanger \"loaded\" command.\n" +#: src/dird/jobq.c:77 +#, c-format +msgid "pthread_cond_init: ERR=%s\n" msgstr "" -#: src/stored/btape.c:1504 +#: src/dird/jobq.c:119 #, c-format -msgid "3991 Bad autochanger command: %s\n" +msgid "pthread_cond_broadcast: ERR=%s\n" msgstr "" -#: src/stored/btape.c:1505 +#: src/dird/jobq.c:127 #, c-format -msgid "3991 result=\"%s\": ERR=%s\n" +msgid "pthread_cond_wait: ERR=%s\n" msgstr "" -#: src/stored/btape.c:1509 +#: src/dird/jobq.c:168 #, c-format -msgid "Slot %d loaded. I am going to unload it.\n" +msgid "Job %s waiting %d seconds for scheduled start time.\n" msgstr "" -#: src/stored/btape.c:1511 -msgid "Nothing loaded in the drive. OK.\n" +#: src/dird/jobq.c:230 +#, c-format +msgid "pthread_thread_create: ERR=%s\n" msgstr "" -#: src/stored/btape.c:1518 +#: src/dird/jobq.c:340 #, c-format -msgid "3302 Issuing autochanger \"unload %d %d\" command.\n" +msgid "pthread_cond_signal: ERR=%s\n" msgstr "" -#: src/stored/btape.c:1523 +#: src/dird/jobq.c:351 #, c-format -msgid "unload status=%s %d\n" +msgid "pthread_create: ERR=%s\n" msgstr "" -#: src/stored/btape.c:1523 -msgid "Bad" +#: src/dird/jobq.c:635 +#, c-format +msgid "Rescheduled Job %s at %s to re-run in %d seconds (%s).\n" msgstr "" -#: src/stored/btape.c:1526 -#, c-format -msgid "3992 Bad autochanger command: %s\n" +#: src/dird/jobq.c:694 src/dird/jobq.c:699 +msgid "previous Job" msgstr "" -#: src/stored/btape.c:1527 +#: src/dird/jobq.c:736 #, c-format -msgid "3992 result=\"%s\": ERR=%s\n" +msgid "" +"Job canceled. Attempt to read and write same device.\n" +" Read storage \"%s\" (From %s) -- Write storage \"%s\" (From %s)\n" msgstr "" -#: src/stored/btape.c:1537 +#: src/dird/ua_select.c:42 #, c-format -msgid "3303 Issuing autochanger \"load %d %d\" command.\n" +msgid "The current %s retention period is: %s\n" msgstr "" -#: src/stored/btape.c:1545 -#, c-format -msgid "3303 Autochanger \"load %d %d\" status is OK.\n" +#: src/dird/ua_select.c:47 +msgid "Continue? (yes/mod/no): " msgstr "" -#: src/stored/btape.c:1549 -#, c-format -msgid "3993 Bad autochanger command: %s\n" +#: src/dird/ua_select.c:50 src/dird/ua_run.c:614 +msgid "mod" msgstr "" -#: src/stored/btape.c:1550 -#, c-format -msgid "3993 result=\"%s\": ERR=%s\n" +#: src/dird/ua_select.c:51 +msgid "Enter new retention period: " msgstr "" -#: src/stored/btape.c:1565 -msgid "" -"\n" -"The test failed, probably because you need to put\n" -"a longer sleep time in the mtx-script in the load) case.\n" -"Adding a 30 second sleep and trying again ...\n" +#: src/dird/ua_select.c:55 +msgid "Invalid period.\n" msgstr "" -#: src/stored/btape.c:1578 -#, c-format -msgid "Wrote EOF to %s\n" +#: src/dird/ua_select.c:131 src/dird/ua_run.c:555 +msgid "You have the following choices:\n" msgstr "" -#: src/stored/btape.c:1582 -#, c-format -msgid "" -"\n" -"The test worked this time. Please add:\n" -"\n" -" sleep %d\n" -"\n" -"to your mtx-changer script in the load) case.\n" -"\n" +#: src/dird/ua_select.c:154 +msgid "The defined Storage resources are:\n" msgstr "" -#: src/stored/btape.c:1587 -msgid "" -"\n" -"The test autochanger worked!!\n" -"\n" +#: src/dird/ua_select.c:166 src/dird/ua_dotcmds.c:944 src/dird/ua_run.c:619 +#: src/dird/ua_cmds.c:1093 +msgid "Storage" msgstr "" -#: src/stored/btape.c:1598 -msgid "You must correct this error or the Autochanger will not work.\n" +#: src/dird/ua_select.c:166 +msgid "Select Storage resource" msgstr "" -#: src/stored/btape.c:1616 -msgid "" -"\n" -"\n" -"=== Forward space files test ===\n" -"\n" -"This test is essential to Bacula.\n" -"\n" -"I'm going to write five files then test forward spacing\n" -"\n" +#: src/dird/ua_select.c:181 src/dird/ua_restore.c:1296 +msgid "The defined FileSet resources are:\n" msgstr "" -#: src/stored/btape.c:1641 -msgid "Now forward spacing 1 file.\n" +#: src/dird/ua_select.c:189 src/dird/ua_restore.c:1300 src/dird/ua_run.c:621 +msgid "FileSet" msgstr "" -#: src/stored/btape.c:1643 src/stored/btape.c:1655 src/stored/btape.c:1668 -#: src/stored/btape.c:1686 src/stored/btape.c:1862 -#, c-format -msgid "Bad status from fsr. ERR=%s\n" +#: src/dird/ua_select.c:189 src/dird/ua_restore.c:1300 +msgid "Select FileSet resource" msgstr "" -#: src/stored/btape.c:1646 -#, c-format -msgid "We should be in file 1. I am at file %d. %s\n" +#: src/dird/ua_select.c:219 src/dird/ua_cmds.c:2062 +msgid "Could not find a Catalog resource\n" msgstr "" -#: src/stored/btape.c:1653 -msgid "Now forward spacing 2 files.\n" +#: src/dird/ua_select.c:222 +msgid "You must specify a \"use \" command before continuing.\n" msgstr "" -#: src/stored/btape.c:1666 -msgid "Now forward spacing 4 files.\n" +#: src/dird/ua_select.c:228 +msgid "The defined Catalog resources are:\n" msgstr "" -#: src/stored/btape.c:1678 -msgid "" -"The test worked this time. Please add:\n" -"\n" -" Fast Forward Space File = no\n" -"\n" -"to your Device resource for this drive.\n" +#: src/dird/ua_select.c:236 +msgid "Catalog" msgstr "" -#: src/stored/btape.c:1684 -msgid "Now forward spacing 1 more file.\n" +#: src/dird/ua_select.c:236 +msgid "Select Catalog resource" msgstr "" -#: src/stored/btape.c:1688 -#, c-format -msgid "We should be in file 5. I am at file %d. %s\n" +#: src/dird/ua_select.c:254 src/dird/ua_select.c:280 +msgid "The defined Job resources are:\n" msgstr "" -#: src/stored/btape.c:1693 -msgid "" -"\n" -"=== End Forward space files test ===\n" -"\n" +#: src/dird/ua_select.c:265 src/dird/ua_select.c:288 src/dird/ua_select.c:329 +#: src/dird/ua_select.c:1341 src/dird/ua_run.c:620 src/dird/dird_conf.c:675 +#: src/dird/ua_prune.c:598 +msgid "Job" msgstr "" -#: src/stored/btape.c:1697 -msgid "" -"\n" -"The forward space file test failed.\n" +#: src/dird/ua_select.c:265 src/dird/ua_select.c:288 +msgid "Select Job resource" msgstr "" -#: src/stored/btape.c:1699 -msgid "" -"You have Fast Forward Space File enabled.\n" -"I am turning it off then retrying the test.\n" +#: src/dird/ua_select.c:307 +#, c-format +msgid "Error: Restore Job resource \"%s\" does not exist.\n" msgstr "" -#: src/stored/btape.c:1705 -msgid "" -"You must correct this error or Bacula will not work.\n" -"Some systems, e.g. OpenBSD, require you to set\n" -" Use MTIOCGET= no\n" -"in your device resource. Use with caution.\n" +#: src/dird/ua_select.c:321 +msgid "The defined Restore Job resources are:\n" msgstr "" -#: src/stored/btape.c:1739 -msgid "" -"\n" -"Append test failed. Attempting again.\n" -"Setting \"Hardware End of Medium = no\n" -" and \"Fast Forward Space File = no\n" -"and retrying append test.\n" -"\n" +#: src/dird/ua_select.c:329 +msgid "Select Restore Job" msgstr "" -#: src/stored/btape.c:1747 -msgid "" -"\n" -"\n" -"It looks like the test worked this time, please add:\n" -"\n" -" Hardware End of Medium = No\n" -"\n" -" Fast Forward Space File = No\n" -"to your Device resource in the Storage conf file.\n" +#: src/dird/ua_select.c:346 +msgid "The defined Client resources are:\n" msgstr "" -#: src/stored/btape.c:1754 -msgid "" -"\n" -"\n" -"That appears *NOT* to have corrected the problem.\n" +#: src/dird/ua_select.c:354 src/dird/ua_select.c:463 src/dird/ua_dotcmds.c:945 +#: src/dird/ua_run.c:625 src/dird/ua_cmds.c:1094 +msgid "Client" msgstr "" -#: src/stored/btape.c:1759 -msgid "" -"\n" -"\n" -"It looks like the append failed. Attempting again.\n" -"Setting \"BSF at EOM = yes\" and retrying append test.\n" +#: src/dird/ua_select.c:354 +msgid "Select Client (File daemon) resource" msgstr "" -#: src/stored/btape.c:1764 -msgid "" -"\n" -"\n" -"It looks like the test worked this time, please add:\n" -"\n" -" Hardware End of Medium = No\n" -" Fast Forward Space File = No\n" -" BSF at EOM = yes\n" -"\n" -"to your Device resource in the Storage conf file.\n" +#: src/dird/ua_select.c:381 +#, c-format +msgid "Error: Client resource %s does not exist.\n" msgstr "" -#: src/stored/btape.c:1775 -msgid "" -"\n" -"Append test failed.\n" -"\n" -"\n" -"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n" -"Unable to correct the problem. You MUST fix this\n" -"problem before Bacula can use your tape drive correctly\n" -"\n" -"Perhaps running Bacula in fixed block mode will work.\n" -"Do so by setting:\n" -"\n" -"Minimum Block Size = nnn\n" -"Maximum Block Size = nnn\n" -"\n" -"in your Storage daemon's Device definition.\n" -"nnn must match your tape driver's block size, which\n" -"can be determined by reading your tape manufacturers\n" -"information, and the information on your kernel dirver.\n" -"Fixed block sizes, however, are not normally an ideal solution.\n" -"\n" -"Some systems, e.g. OpenBSD, require you to set\n" -" Use MTIOCGET= no\n" -"in your device resource. Use with caution.\n" +#: src/dird/ua_select.c:406 +#, c-format +msgid "Could not find Client %s: ERR=%s" msgstr "" -#: src/stored/btape.c:1797 -msgid "" -"\n" -"The above Bacula scan should have output identical to what follows.\n" -"Please double check it ...\n" -"=== Sample correct output ===\n" -"1 block of 64448 bytes in file 1\n" -"End of File mark.\n" -"2 blocks of 64448 bytes in file 2\n" -"End of File mark.\n" -"3 blocks of 64448 bytes in file 3\n" -"End of File mark.\n" -"1 block of 64448 bytes in file 4\n" -"End of File mark.\n" -"Total files=4, blocks=7, bytes = 451,136\n" -"=== End sample correct output ===\n" -"\n" -"If the above scan output is not identical to the\n" -"sample output, you MUST correct the problem\n" -"or Bacula will not be able to write multiple Jobs to \n" -"the tape.\n" -"\n" +#: src/dird/ua_select.c:416 src/dird/ua_select.c:470 +#, c-format +msgid "Could not find Client \"%s\": ERR=%s" msgstr "" -#: src/stored/btape.c:1840 +#: src/dird/ua_select.c:445 #, c-format -msgid "Bad status from fsf. ERR=%s\n" +msgid "Error obtaining client ids. ERR=%s\n" msgstr "" -#: src/stored/btape.c:1844 -msgid "Forward spaced 1 file.\n" +#: src/dird/ua_select.c:449 +msgid "No clients defined. You must run a job before using this command.\n" msgstr "" -#: src/stored/btape.c:1847 -#, c-format -msgid "Forward spaced %d files.\n" +#: src/dird/ua_select.c:453 +msgid "Defined Clients:\n" msgstr "" -#: src/stored/btape.c:1866 -msgid "Forward spaced 1 record.\n" +#: src/dird/ua_select.c:463 +msgid "Select the Client" msgstr "" -#: src/stored/btape.c:1869 +#: src/dird/ua_select.c:496 src/dird/ua_select.c:520 src/dird/ua_select.c:565 #, c-format -msgid "Forward spaced %d records.\n" +msgid "Could not find Pool \"%s\": ERR=%s" +msgstr "" + +#: src/dird/ua_select.c:535 +msgid "No pools defined. Use the \"create\" command to create one.\n" +msgstr "" + +#: src/dird/ua_select.c:539 +msgid "Defined Pools:\n" +msgstr "" + +#: src/dird/ua_select.c:541 src/dird/ua_select.c:561 src/dird/ua_update.c:353 +#: src/baconfig.h:76 +msgid "*None*" +msgstr "" + +#: src/dird/ua_select.c:552 src/dird/ua_select.c:665 src/dird/ua_run.c:633 +#: src/dird/ua_update.c:604 +msgid "Pool" +msgstr "" + +#: src/dird/ua_select.c:552 +msgid "Select the Pool" msgstr "" -#: src/stored/btape.c:1914 +#: src/dird/ua_select.c:590 #, c-format -msgid "Wrote one record of %d bytes.\n" +msgid "No access to Pool \"%s\"\n" msgstr "" -#: src/stored/btape.c:1916 -msgid "Wrote block to device.\n" +#: src/dird/ua_select.c:622 +msgid "Enter *MediaId or Volume name: " msgstr "" -#: src/stored/btape.c:1930 -msgid "Enter length to read: " +#: src/dird/ua_select.c:657 +msgid "The defined Pool resources are:\n" msgstr "" -#: src/stored/btape.c:1935 -msgid "Bad length entered, using default of 1024 bytes.\n" +#: src/dird/ua_select.c:665 +msgid "Select Pool resource" msgstr "" -#: src/stored/btape.c:1944 +#: src/dird/ua_select.c:689 src/dird/ua_restore.c:553 #, c-format -msgid "Read of %d bytes gives stat=%d. ERR=%s\n" +msgid "Error: Pool resource \"%s\" does not exist.\n" +msgstr "" + +#: src/dird/ua_select.c:700 +msgid "Enter the JobId to select: " msgstr "" -#: src/stored/btape.c:1967 src/stored/btape.c:2016 +#: src/dird/ua_select.c:738 #, c-format -msgid "End of tape\n" +msgid "Could not find Job \"%s\": ERR=%s" msgstr "" -#: src/stored/btape.c:1972 +#: src/dird/ua_select.c:829 src/dird/ua_select.c:925 #, c-format -msgid "Starting scan at file %u\n" +msgid "Automatically selected %s: %s\n" msgstr "" -#: src/stored/btape.c:1979 +#: src/dird/ua_select.c:840 src/dird/ua_select.c:936 #, c-format -msgid "Bad status from read %d. ERR=%s\n" +msgid "" +"Your request has multiple choices for \"%s\". Selection is not possible in " +"batch mode.\n" msgstr "" -#: src/stored/btape.c:1982 src/stored/btape.c:1996 src/stored/btape.c:2060 -#: src/stored/btape.c:2072 src/stored/btape.c:2085 src/stored/btape.c:2101 +#: src/dird/ua_select.c:858 src/dird/ua_select.c:918 #, c-format -msgid "1 block of %d bytes in file %d\n" +msgid "Selection list for \"%s\" is empty!\n" msgstr "" -#: src/stored/btape.c:1985 src/stored/btape.c:1999 src/stored/btape.c:2063 -#: src/stored/btape.c:2075 src/stored/btape.c:2088 src/stored/btape.c:2104 +#: src/dird/ua_select.c:864 #, c-format -msgid "%d blocks of %d bytes in file %d\n" +msgid "Automatically selected: %s\n" msgstr "" -#: src/stored/btape.c:2007 src/stored/btape.c:2079 +#: src/dird/ua_select.c:876 +msgid "Selection aborted, nothing done.\n" +msgstr "" + +#: src/dird/ua_select.c:881 src/dird/ua_select.c:969 #, c-format -msgid "End of File mark.\n" +msgid "Please enter a number between 1 and %d\n" +msgstr "" + +#: src/dird/ua_select.c:1020 +msgid "Storage name given twice.\n" msgstr "" -#: src/stored/btape.c:2028 src/stored/btape.c:2132 +#: src/dird/ua_select.c:1037 #, c-format -msgid "Total files=%d, blocks=%d, bytes = %s\n" +msgid "Expecting jobid=nn command, got: %s\n" msgstr "" -#: src/stored/btape.c:2092 +#: src/dird/ua_select.c:1041 #, c-format -msgid "Short block read.\n" +msgid "JobId %s is not running.\n" msgstr "" -#: src/stored/btape.c:2095 +#: src/dird/ua_select.c:1051 #, c-format -msgid "Error reading block. ERR=%s\n" +msgid "Expecting job=xxx, got: %s.\n" msgstr "" -#: src/stored/btape.c:2119 +#: src/dird/ua_select.c:1055 #, c-format -msgid "" -"Block=%u file,blk=%u,%u blen=%u First rec FI=%s SessId=%u SessTim=%u Strm=%s " -"rlen=%d\n" +msgid "Job \"%s\" is not running.\n" msgstr "" -#: src/stored/btape.c:2141 +#: src/dird/ua_select.c:1063 #, c-format -msgid "Device status: %u. ERR=%s\n" +msgid "Expecting ujobid=xxx, got: %s.\n" msgstr "" -#: src/stored/btape.c:2173 +#: src/dird/ua_select.c:1084 #, c-format -msgid "" -"\n" -"This command simulates Bacula writing to a tape.\n" -"It requires either one or two blank tapes, which it\n" -"will label and write.\n" -"\n" -"If you have an autochanger configured, it will use\n" -"the tapes that are in slots 1 and 2, otherwise, you will\n" -"be prompted to insert the tapes when necessary.\n" -"\n" -"It will print a status approximately\n" -"every 322 MB, and write an EOF every %s. If you have\n" -"selected the simple test option, after writing the first tape\n" -"it will rewind it and re-read the last block written.\n" -"\n" -"If you have selected the multiple tape test, when the first tape\n" -"fills, it will ask for a second, and after writing a few more \n" -"blocks, it will stop. Then it will begin re-reading the\n" -"two tapes.\n" -"\n" -"This may take a long time -- hours! ...\n" -"\n" +msgid "Storage resource \"%s\": not found\n" msgstr "" -#: src/stored/btape.c:2191 -msgid "" -"Do you want to run the simplified test (s) with one tape\n" -"or the complete multiple tape (m) test: (s/m) " +#: src/dird/ua_select.c:1116 +msgid "Enter autochanger drive[0]: " msgstr "" -#: src/stored/btape.c:2194 -msgid "Simple test (single tape) selected.\n" +#: src/dird/ua_select.c:1137 +msgid "Enter autochanger slot: " msgstr "" -#: src/stored/btape.c:2197 -msgid "Multiple tape test selected.\n" +#: src/dird/ua_select.c:1167 +msgid "Media Types defined in conf file:\n" msgstr "" -#: src/stored/btape.c:2239 -msgid "Wrote Start of Session label.\n" +#: src/dird/ua_select.c:1173 +msgid "Media Type" msgstr "" -#: src/stored/btape.c:2258 -#, c-format -msgid "%s Begin writing Bacula records to tape ...\n" +#: src/dird/ua_select.c:1173 +msgid "Select the Media Type" msgstr "" -#: src/stored/btape.c:2260 +#: src/dird/ua_select.c:1213 +msgid "None of your jobs are running.\n" +msgstr "" + +#: src/dird/ua_select.c:1251 #, c-format -msgid "%s Begin writing Bacula records to first tape ...\n" +msgid "Unauthorized command from this console for JobId=%d.\n" msgstr "" -#: src/stored/btape.c:2286 -msgid "Flush block failed.\n" +#: src/dird/ua_select.c:1257 +#, c-format +msgid "Warning Job JobId=%d is not running. Continuing anyway...\n" msgstr "" -#: src/stored/btape.c:2300 +#: src/dird/ua_select.c:1280 src/dird/ua_select.c:1350 #, c-format -msgid "Wrote block=%u, file,blk=%u,%u VolBytes=%s rate=%sB/s\n" +msgid "Confirm %s of %d Job%s (yes/no): " msgstr "" -#: src/stored/btape.c:2311 +#: src/dird/ua_select.c:1293 src/dird/ua_select.c:1307 #, c-format -msgid "%s Flush block, write EOF\n" +msgid "Warning Job %s is not running. Continuing anyway ...\n" msgstr "" -#: src/stored/btape.c:2320 -msgid "Wrote 1000 blocks on second tape. Done.\n" +#: src/dird/ua_select.c:1329 +msgid "Select Job(s):\n" msgstr "" -#: src/stored/btape.c:2325 -msgid "Not OK\n" +#: src/dird/ua_select.c:1335 +#, c-format +msgid "JobId=%s Job=%s" msgstr "" -#: src/stored/btape.c:2349 -msgid "Job canceled.\n" +#: src/dird/ua_select.c:1339 +#, c-format +msgid "Choose Job list to %s" msgstr "" -#: src/stored/btape.c:2360 -msgid "Set ok=false after write_block_to_device.\n" +#: src/dird/ua_select.c:1359 src/dird/ua_select.c:1366 src/dird/ua_cmds.c:804 +#: src/dird/ua_cmds.c:1199 +#, c-format +msgid "Job \"%s\" not found.\n" msgstr "" -#: src/stored/btape.c:2364 -msgid "Wrote End of Session label.\n" +#: src/dird/run_conf.c:205 +#, c-format +msgid "Expected an equals, got: %s" msgstr "" -#: src/stored/btape.c:2388 +#: src/dird/run_conf.c:218 src/dird/run_conf.c:230 src/dird/run_conf.c:330 #, c-format -msgid "Wrote state file last_block_num1=%d last_block_num2=%d\n" +msgid "Expect a YES or NO, got: %s" msgstr "" -#: src/stored/btape.c:2392 +#: src/dird/run_conf.c:245 #, c-format -msgid "Could not create state file: %s ERR=%s\n" +msgid "Job level field: %s not found in run record" msgstr "" -#: src/stored/btape.c:2403 +#: src/dird/run_conf.c:265 #, c-format -msgid "" -"\n" -"\n" -"%s Done filling tape at %d:%d. Now beginning re-read of tape ...\n" +msgid "Could not find specified Pool Resource: %s" msgstr "" -#: src/stored/btape.c:2406 +#: src/dird/run_conf.c:293 #, c-format -msgid "" -"\n" -"\n" -"%s Done filling tapes at %d:%d. Now beginning re-read of first tape ...\n" +msgid "Could not find specified Storage Resource: %s" msgstr "" -#: src/stored/btape.c:2412 -msgid "do_unfill failed.\n" +#: src/dird/run_conf.c:305 +#, c-format +msgid "Could not find specified Messages Resource: %s" msgstr "" -#: src/stored/btape.c:2417 +#: src/dird/run_conf.c:334 #, c-format -msgid "%s: Error during test.\n" +msgid "Expected a keyword name, got: %s" msgstr "" -#: src/stored/btape.c:2452 -msgid "" -"\n" -"The state file level has changed. You must redo\n" -"the fill command.\n" +#: src/dird/run_conf.c:373 +msgid "Day number out of range (1-31)" +msgstr "" + +#: src/dird/run_conf.c:390 src/dird/run_conf.c:552 +msgid "Week number out of range (0-53)" msgstr "" -#: src/stored/btape.c:2459 +#: src/dird/run_conf.c:406 #, c-format -msgid "" -"\n" -"Could not find the state file: %s ERR=%s\n" -"You must redo the fill command.\n" +msgid "Job type field: %s in run record not found" msgstr "" -#: src/stored/btape.c:2525 -msgid "Mount first tape. Press enter when ready: " +#: src/dird/run_conf.c:413 +#, c-format +msgid "Unexpected token: %d:%s" msgstr "" -#: src/stored/btape.c:2541 -msgid "Rewinding.\n" +#: src/dird/run_conf.c:457 +msgid "Time must be preceded by keyword AT." msgstr "" -#: src/stored/btape.c:2546 -#, c-format -msgid "Reading the first 10000 records from %u:%u.\n" +#: src/dird/run_conf.c:466 +msgid "Time logic error.\n" +msgstr "" + +#: src/dird/run_conf.c:481 src/dird/run_conf.c:500 +msgid "Bad time specification." +msgstr "" + +#: src/dird/run_conf.c:521 +msgid "Range logic error.\n" +msgstr "" + +#: src/dird/run_conf.c:530 +msgid "Bad day range specification." +msgstr "" + +#: src/dird/run_conf.c:577 +msgid "Invalid month, week or position day range" +msgstr "" + +#: src/dird/run_conf.c:592 +msgid "Invalid month, weekday or position range" +msgstr "" + +#: src/dird/run_conf.c:651 +msgid "Unexpected run state\n" msgstr "" -#: src/stored/btape.c:2550 src/stored/btape.c:2618 +#: src/dird/restore.c:132 src/dird/msgchan.c:508 #, c-format -msgid "Reposition from %u:%u to %u:%u\n" +msgid "Could not open bootstrap file %s: ERR=%s\n" msgstr "" -#: src/stored/btape.c:2553 src/stored/btape.c:2605 src/stored/btape.c:2621 +#: src/dird/restore.c:180 src/dird/restore.c:271 #, c-format -msgid "Reposition error. ERR=%s\n" +msgid "Could not get storage resource '%s'.\n" msgstr "" -#: src/stored/btape.c:2556 +#: src/dird/restore.c:307 #, c-format -msgid "Reading block %u.\n" +msgid "Could not acquire read storage lock for \"%s\"" +msgstr "" + +#: src/dird/restore.c:407 src/dird/verify.c:275 src/dird/backup.c:512 +msgid "The File daemon does not support SDCallsClient.\n" +msgstr "" + +#: src/dird/restore.c:525 +msgid "" +"Cannot restore without a bootstrap file.\n" +"You probably ran a restore job directly. All restore jobs must\n" +"be run using the restore command.\n" msgstr "" -#: src/stored/btape.c:2558 src/stored/btape.c:2610 src/stored/btape.c:2626 +#: src/dird/restore.c:533 #, c-format -msgid "Error reading block: ERR=%s\n" +msgid "Start Restore Job %s\n" msgstr "" -#: src/stored/btape.c:2563 +#: src/dird/restore.c:584 +msgid "Restore OK -- warning file count mismatch" +msgstr "" + +#: src/dird/restore.c:586 +msgid "Restore OK" +msgstr "" + +#: src/dird/restore.c:590 +msgid "Restore OK -- with warnings" +msgstr "" + +#: src/dird/restore.c:594 +msgid "*** Restore Error ***" +msgstr "" + +#: src/dird/restore.c:604 +msgid "Restore Canceled" +msgstr "" + +#: src/dird/restore.c:631 +#, c-format msgid "" +"%s %s %s (%s):\n" +" Build OS: %s %s %s\n" +" JobId: %d\n" +" Job: %s\n" +" Restore Client: %s\n" +" Start time: %s\n" +" End time: %s\n" +" Files Expected: %s\n" +" Files Restored: %s\n" +" Bytes Restored: %s\n" +" Rate: %.1f KB/s\n" +" FD Errors: %d\n" +" FD termination status: %s\n" +" SD termination status: %s\n" +" Termination: %s\n" "\n" -"The last block on the tape matches. Test succeeded.\n" -"\n" msgstr "" -#: src/stored/btape.c:2566 -msgid "" -"\n" -"The last block of the first tape matches.\n" -"\n" +#: src/dird/admin.c:53 +#, c-format +msgid "Start Admin JobId %d, Job=%s\n" +msgstr "" + +#: src/dird/admin.c:86 +msgid "Admin OK" +msgstr "" + +#: src/dird/admin.c:90 +msgid "*** Admin Error ***" msgstr "" -#: src/stored/btape.c:2590 -msgid "Mount second tape. Press enter when ready: " +#: src/dird/admin.c:94 +msgid "Admin Canceled" msgstr "" -#: src/stored/btape.c:2603 -#, c-format -msgid "Reposition from %u:%u to 0:1\n" +#: src/dird/admin.c:106 src/lib/status.h:171 src/lib/status.h:182 +#: src/lib/status.h:196 src/lib/status.h:200 src/lib/status.h:204 +msgid "Bacula " msgstr "" -#: src/stored/btape.c:2608 src/stored/btape.c:2624 -#, c-format -msgid "Reading block %d.\n" +#: src/dird/ua_status.c:170 +msgid "Status available for:\n" msgstr "" -#: src/stored/btape.c:2614 -msgid "" -"\n" -"The first block on the second tape matches.\n" -"\n" +#: src/dird/ua_status.c:177 +msgid "Select daemon type for status" msgstr "" -#: src/stored/btape.c:2630 -msgid "" -"\n" -"The last block on the second tape matches. Test succeeded.\n" -"\n" +#: src/dird/ua_status.c:297 +#, c-format +msgid "Daemon started %s. Jobs: run=%d, running=%d mode=%d,%d\n" msgstr "" -#: src/stored/btape.c:2647 +#: src/dird/ua_status.c:353 #, c-format -msgid "10000 records read now at %d:%d\n" +msgid "No authorization for Storage \"%s\"\n" msgstr "" -#: src/stored/btape.c:2673 src/stored/btape.c:2684 src/stored/btape.c:2729 -msgid "Last block written" +#: src/dird/ua_status.c:363 +msgid "Restricted Client or Job does not permit access to Storage daemons\n" msgstr "" -#: src/stored/btape.c:2675 src/stored/btape.c:2685 -msgid "Block read back" +#: src/dird/ua_status.c:370 src/dird/ua_dotcmds.c:834 src/dird/ua_cmds.c:839 +#, c-format +msgid "Connecting to Storage daemon %s at %s:%d\n" msgstr "" -#: src/stored/btape.c:2676 +#: src/dird/ua_status.c:373 #, c-format msgid "" "\n" -"\n" -"The blocks differ at byte %u\n" +"Failed to connect to Storage daemon %s.\n" +"====\n" msgstr "" -#: src/stored/btape.c:2677 -msgid "" -"\n" -"\n" -"!!!! The last block written and the block\n" -"that was read back differ. The test FAILED !!!!\n" -"This must be corrected before you use Bacula\n" -"to write multi-tape Volumes.!!!!\n" +#: src/dird/ua_status.c:405 src/dird/ua_cmds.c:1186 src/dird/ua_cmds.c:1994 +#, c-format +msgid "No authorization for Client \"%s\"\n" msgstr "" -#: src/stored/btape.c:2713 +#: src/dird/ua_status.c:418 src/dird/ua_dotcmds.c:859 src/dird/ua_cmds.c:662 +#: src/dird/ua_cmds.c:875 src/dird/ua_cmds.c:1307 #, c-format -msgid "Last block at: %u:%u this_dev_block_num=%d\n" +msgid "Connecting to Client %s at %s:%d\n" msgstr "" -#: src/stored/btape.c:2727 +#: src/dird/ua_status.c:421 #, c-format -msgid "Block not written: FileIndex=%u blk_block=%u Size=%u\n" +msgid "" +"Failed to connect to Client %s.\n" +"====\n" msgstr "" -#: src/stored/btape.c:2731 -msgid "Block not written" +#: src/dird/ua_status.c:426 +msgid "Connected to file daemon\n" msgstr "" -#: src/stored/btape.c:2746 -#, c-format -msgid "End of tape %d:%d. Volume Bytes=%s. Write rate = %sB/s\n" +#: src/dird/ua_status.c:445 src/dird/ua_status.c:454 +msgid "" +"\n" +"Scheduled Jobs:\n" msgstr "" -#: src/stored/btape.c:2797 -msgid "Test writing blocks of 64512 bytes to tape.\n" +#: src/dird/ua_status.c:446 +msgid "" +"Level Type Pri Scheduled Job Name Volume\n" msgstr "" -#: src/stored/btape.c:2799 -msgid "How many blocks do you want to write? (1000): " +#: src/dird/ua_status.c:447 +msgid "===================================================================================\n" +msgstr "" + +#: src/dird/ua_status.c:455 +msgid "" +"Level Type Pri Scheduled Job Name Schedule\n" msgstr "" -#: src/stored/btape.c:2816 +#: src/dird/ua_status.c:456 +msgid "=====================================================================================\n" +msgstr "" + +#: src/dird/ua_status.c:513 src/dird/ua_status.c:678 #, c-format -msgid "Begin writing %d Bacula blocks to tape ...\n" +msgid "%-14s\t%-8s\t%3d\t%-18s\t%-18s\t%s\n" msgstr "" -#: src/stored/btape.c:2859 +#: src/dird/ua_status.c:517 src/dird/ua_status.c:682 #, c-format -msgid "Begin writing raw blocks of %u bytes.\n" +msgid "%-14s %-8s %3d %-18s %-18s %s\n" msgstr "" -#: src/stored/btape.c:2890 -msgid "test autochanger" +#: src/dird/ua_status.c:553 src/dird/ua_status.c:748 +msgid "Ignoring invalid value for days. Max is 500.\n" msgstr "" -#: src/stored/btape.c:2891 -msgid "backspace file" +#: src/dird/ua_status.c:564 +msgid "Ignoring invalid value for limit. Max is 2000.\n" msgstr "" -#: src/stored/btape.c:2892 -msgid "backspace record" +#: src/dird/ua_status.c:575 +msgid "Ignoring invalid time.\n" msgstr "" -#: src/stored/btape.c:2893 -msgid "list device capabilities" +#: src/dird/ua_status.c:697 src/dird/ua_status.c:801 +msgid "No Scheduled Jobs.\n" msgstr "" -#: src/stored/btape.c:2894 -msgid "clear tape errors" +#: src/dird/ua_status.c:826 +#, c-format +msgid "Console connected at %s\n" msgstr "" -#: src/stored/btape.c:2895 -msgid "go to end of Bacula data for append" +#: src/dird/ua_status.c:837 +msgid "" +"No Jobs running.\n" +"====\n" msgstr "" -#: src/stored/btape.c:2896 -msgid "go to the physical end of medium" +#: src/dird/ua_status.c:844 +msgid " JobId Type Level Files Bytes Name Status\n" msgstr "" -#: src/stored/btape.c:2897 -msgid "fill tape, write onto second volume" +#: src/dird/ua_status.c:845 +msgid "======================================================================\n" msgstr "" -#: src/stored/btape.c:2898 -msgid "read filled tape" +#: src/dird/ua_status.c:854 +msgid "is waiting execution" msgstr "" -#: src/stored/btape.c:2899 -msgid "forward space a file" +#: src/dird/ua_status.c:857 +msgid "is running" msgstr "" -#: src/stored/btape.c:2900 -msgid "forward space a record" +#: src/dird/ua_status.c:860 +msgid "is blocked" msgstr "" -#: src/stored/btape.c:2901 -msgid "print this command" +#: src/dird/ua_status.c:863 +msgid "has terminated" msgstr "" -#: src/stored/btape.c:2902 -msgid "write a Bacula label to the tape" +#: src/dird/ua_status.c:866 +msgid "has terminated with warnings" msgstr "" -#: src/stored/btape.c:2903 -msgid "load a tape" +#: src/dird/ua_status.c:869 +msgid "has erred" msgstr "" -#: src/stored/btape.c:2904 -msgid "quit btape" +#: src/dird/ua_status.c:872 +msgid "has errors" msgstr "" -#: src/stored/btape.c:2905 -msgid "use write() to fill tape" +#: src/dird/ua_status.c:875 +msgid "has a fatal error" msgstr "" -#: src/stored/btape.c:2906 -msgid "read and print the Bacula tape label" +#: src/dird/ua_status.c:878 +msgid "has verify differences" msgstr "" -#: src/stored/btape.c:2907 -msgid "test record handling functions" +#: src/dird/ua_status.c:881 +msgid "has been canceled" msgstr "" -#: src/stored/btape.c:2908 -msgid "rewind the tape" +#: src/dird/ua_status.c:886 +msgid "is waiting on Client" msgstr "" -#: src/stored/btape.c:2909 -msgid "read() tape block by block to EOT and report" +#: src/dird/ua_status.c:888 +#, c-format +msgid "is waiting on Client %s" msgstr "" -#: src/stored/btape.c:2910 -msgid "Bacula read block by block to EOT and report" +#: src/dird/ua_status.c:896 src/dird/ua_status.c:898 +#, c-format +msgid "is waiting on Storage \"%s\"" msgstr "" -#: src/stored/btape.c:2911 -msgid "" -"[file_size=n(GB)|nb_file=3|skip_zero|skip_random|skip_raw|skip_block] report " -"drive speed" +#: src/dird/ua_status.c:900 +msgid "is waiting on Storage" msgstr "" -#: src/stored/btape.c:2912 -msgid "print tape status" +#: src/dird/ua_status.c:906 +msgid "is waiting on max Storage jobs" msgstr "" -#: src/stored/btape.c:2913 -msgid "General test Bacula tape functions" +#: src/dird/ua_status.c:909 +msgid "is waiting on max Client jobs" msgstr "" -#: src/stored/btape.c:2914 -msgid "write an EOF on the tape" +#: src/dird/ua_status.c:912 +msgid "is waiting on max Job jobs" msgstr "" -#: src/stored/btape.c:2915 -msgid "write a single Bacula block" +#: src/dird/ua_status.c:915 +msgid "is waiting on max total jobs" msgstr "" -#: src/stored/btape.c:2916 -msgid "read a single record" +#: src/dird/ua_status.c:919 +#, c-format +msgid "is waiting for its start time (%s)" msgstr "" -#: src/stored/btape.c:2917 -msgid "read a single Bacula block" +#: src/dird/ua_status.c:925 +msgid "is waiting for higher priority jobs to finish" msgstr "" -#: src/stored/btape.c:2918 -msgid "quick fill command" +#: src/dird/ua_status.c:928 +msgid "is waiting for a Shared Storage device" msgstr "" -#: src/stored/btape.c:2939 +#: src/dird/ua_status.c:945 #, c-format -msgid "\"%s\" is an invalid command\n" +msgid "is in unknown state %c" msgstr "" -#: src/stored/btape.c:2948 -#, c-format -msgid "Interactive commands:\n" +#: src/dird/ua_status.c:959 +msgid "is waiting for a mount request" msgstr "" -#: src/stored/btape.c:2959 -#, c-format -msgid "" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: btape \n" -" -b specify bootstrap file\n" -" -c set configuration file to file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -p proceed inspite of I/O errors\n" -" -s turn off signals\n" -" -v be verbose\n" -" -? print this message.\n" -"\n" +#: src/dird/ua_status.c:966 +msgid "is waiting for an appendable Volume" msgstr "" -#: src/stored/btape.c:3047 -#, c-format -msgid "Mount second Volume on device %s and press return when ready: " +#: src/dird/ua_status.c:974 +msgid "is waiting for Client to connect to Storage daemon" msgstr "" -#: src/stored/btape.c:3075 +#: src/dird/ua_status.c:976 #, c-format -msgid "Mount blank Volume on device %s and press return when ready: " +msgid "is waiting for Client %s to connect to Storage %s" msgstr "" -#: src/stored/btape.c:3095 +#: src/dird/ua_status.c:1007 #, c-format -msgid "End of Volume \"%s\" %d records.\n" +msgid "%6d\t%-6s\t%-20s\t%s\t%s\n" msgstr "" -#: src/stored/btape.c:3109 +#: src/dird/ua_status.c:1015 #, c-format -msgid "Read block=%u, VolBytes=%s rate=%sB/s\n" +msgid "%6d %-4s %-3s %10s %10s %-17s %s\n" msgstr "" -#: src/stored/authenticate.c:61 -#, c-format -msgid "I only authenticate Directors, not %d\n" +#: src/dird/ua_status.c:1040 +msgid "No Terminated Jobs.\n" msgstr "" -#: src/stored/authenticate.c:67 src/filed/authenticate.c:76 -#, c-format -msgid "Bad Hello command from Director at %s. Len=%d.\n" +#: src/dird/ua_status.c:1046 src/lib/status.h:73 +msgid "" +"\n" +"Terminated Jobs:\n" msgstr "" -#: src/stored/authenticate.c:78 src/filed/authenticate.c:88 -#, c-format -msgid "Bad Hello command from Director at %s: %s\n" +#: src/dird/ua_status.c:1047 src/lib/status.h:80 +msgid " JobId Level Files Bytes Status Finished Name \n" msgstr "" -#: src/stored/authenticate.c:92 -#, c-format -msgid "" -"Connection from unknown Director %s at %s rejected.\n" -"Please see " +#: src/dird/ua_status.c:1048 +msgid "====================================================================\n" msgstr "" -#: src/stored/authenticate.c:129 -msgid "" -"Incorrect password given by Director.\n" -"Please see " +#: src/dird/ua_status.c:1087 src/lib/status.h:109 +msgid "Diffs" msgstr "" -#: src/stored/authenticate.c:137 src/stored/authenticate.c:248 -#: src/filed/authenticate.c:151 src/filed/authenticate.c:270 -msgid "" -"Authorization problem: Remote server did not advertize required TLS " -"support.\n" +#: src/dird/ua_status.c:1090 src/dird/ua_restore.c:443 src/lib/status.h:112 +msgid "Cancel" msgstr "" -#: src/stored/authenticate.c:155 -#, c-format -msgid "TLS negotiation failed with DIR at \"%s:%d\"\n" +#: src/dird/ua_status.c:1099 src/lib/status.h:122 +msgid "Other" msgstr "" -#: src/stored/authenticate.c:191 +#: src/dird/ua_status.c:1103 src/lib/status.h:134 #, c-format -msgid "Unable to authenticate Director at %s.\n" +msgid "%6d\t%-6s\t%8s\t%10s\t%-7s\t%-8s\t%s\n" msgstr "" -#: src/stored/authenticate.c:239 src/stored/authenticate.c:279 +#: src/dird/ua_status.c:1111 src/lib/status.h:142 #, c-format -msgid "" -"Incorrect authorization key from File daemon at %s rejected.\n" -"Please see " +msgid "%6d %-6s %8s %10s %-7s %-8s %s\n" msgstr "" -#: src/stored/authenticate.c:266 -#, c-format -msgid "TLS negotiation failed with FD at \"%s:%d\"\n" +#: src/dird/ua_status.c:1121 +msgid "\n" msgstr "" -#: src/stored/wait.c:133 +#: src/dird/next_vol.c:163 #, c-format -msgid "pthread timedwait error. ERR=%s\n" +msgid "Purging oldest volume \"%s\"\n" msgstr "" -#: src/stored/wait.c:239 +#: src/dird/next_vol.c:169 #, c-format -msgid "JobId=%s, Job %s waiting to reserve a device.\n" +msgid "Pruning oldest volume \"%s\"\n" msgstr "" -#: src/stored/block.c:102 -#, c-format -msgid "" -"Dump block %s %x: size=%d BlkNum=%d\n" -" Hdrcksum=%x cksum=%x\n" +#: src/dird/next_vol.c:188 +msgid "We seem to be looping trying to find the next volume. I give up.\n" msgstr "" -#: src/stored/block.c:115 +#: src/dird/next_vol.c:215 #, c-format -msgid " Rec: VId=%u VT=%u FI=%s Strm=%s len=%d p=%x\n" +msgid "Max Volume bytes=%s exceeded. Marking Volume \"%s\" as Full.\n" msgstr "" -#: src/stored/block.c:171 +#: src/dird/next_vol.c:223 #, c-format -msgid "%d block read errors not printed.\n" +msgid "Volume used once. Marking Volume \"%s\" as Used.\n" msgstr "" -#: src/stored/block.c:264 src/stored/block.c:280 src/stored/block.c:290 +#: src/dird/next_vol.c:230 #, c-format -msgid "" -"Volume data error at %u:%u! Wanted ID: \"%s\", got \"%s\". Buffer " -"discarded.\n" +msgid "Max Volume jobs=%s exceeded. Marking Volume \"%s\" as Used.\n" msgstr "" -#: src/stored/block.c:305 +#: src/dird/next_vol.c:240 #, c-format -msgid "" -"Volume data error at %u:%u! Block length %u is insane (too large), probably " -"due to a bad archive.\n" +msgid "Max Volume files=%s exceeded. Marking Volume \"%s\" as Used.\n" msgstr "" -#: src/stored/block.c:331 +#: src/dird/next_vol.c:251 #, c-format msgid "" -"Volume data error at %u:%u!\n" -"Block checksum mismatch in block=%u len=%d: calc=%x blk=%x\n" +"Max configured use duration=%s sec. exceeded. Marking Volume \"%s\" as " +"Used.\n" msgstr "" -#: src/stored/block.c:452 +#: src/dird/next_vol.c:264 #, c-format -msgid "Cannot write block. Device at EOM. dev=%s\n" +msgid "Catalog error updating volume \"%s\". ERR=%s" msgstr "" -#: src/stored/block.c:458 -#, c-format -msgid "Attempt to write on read-only Volume. dev=%s\n" +#: src/dird/next_vol.c:286 +msgid "volume has expired" msgstr "" -#: src/stored/block.c:464 +#: src/dird/next_vol.c:304 src/dird/next_vol.c:348 #, c-format -msgid "Attempt to write on closed device=%s\n" +msgid "Recycled current volume \"%s\"\n" +msgstr "" + +#: src/dird/next_vol.c:309 +msgid "and recycling of current volume failed" msgstr "" -#: src/stored/block.c:513 -#, c-format -msgid "User defined maximum volume capacity %s exceeded on device %s.\n" +#: src/dird/next_vol.c:315 +msgid "but should be Append, Purged or Recycle" msgstr "" -#: src/stored/block.c:528 -#, c-format -msgid "Unable to write EOF. ERR=%s\n" +#: src/dird/next_vol.c:324 +msgid "volume has recycling disabled" msgstr "" -#: src/stored/block.c:554 src/stored/block.c:588 -msgid "Write block header zeroed.\n" +#: src/dird/next_vol.c:351 +msgid "" +"but should be Append, Purged or Recycle (recycling of the current volume " +"failed)" msgstr "" -#: src/stored/block.c:580 -#, c-format -msgid "Block checksum changed during write: before=%ud after=%ud\n" +#: src/dird/next_vol.c:355 +msgid "" +"but should be Append, Purged or Recycle (cannot automatically recycle " +"current volume, as it still contains unpruned data or the Volume Retention " +"time has not expired.)" msgstr "" -#: src/stored/block.c:607 +#: src/dird/next_vol.c:415 #, c-format -msgid "Write error at %u:%u on device %s. ERR=%s.\n" +msgid "Unable to get Pool record: ERR=%s" msgstr "" -#: src/stored/block.c:614 +#: src/dird/next_vol.c:422 #, c-format -msgid "End of Volume \"%s\" at %u:%u on device %s. Write of %u bytes got %d.\n" +msgid "Unable add Scratch Volume, Pool \"%s\" full MaxVols=%d\n" msgstr "" -#: src/stored/block.c:695 src/stored/block.c:701 +#: src/dird/next_vol.c:442 #, c-format -msgid "Backspace file at EOT failed. ERR=%s\n" +msgid "Failed to move Scratch Volume. ERR=%s\n" msgstr "" -#: src/stored/block.c:708 +#: src/dird/next_vol.c:447 #, c-format -msgid "Backspace record at EOT failed. ERR=%s\n" +msgid "Using Volume \"%s\" from 'Scratch' pool.\n" msgstr "" -#: src/stored/block.c:725 +#: src/dird/authenticate.c:77 src/dird/authenticate.c:78 +#: src/qt-console/tray-monitor/authenticate.cpp:119 #, c-format -msgid "Re-read last block at EOT failed. ERR=%s" +msgid "Error sending Hello to Storage daemon. ERR=%s\n" msgstr "" -#: src/stored/block.c:735 -#, c-format -msgid "" -"Re-read of last block: block numbers differ by more than one.\n" -"Probable tape misconfiguration and data loss. Read block=%u Want block=%u.\n" +#: src/dird/authenticate.c:107 +msgid "Director and Storage daemon passwords or names not the same.\n" msgstr "" -#: src/stored/block.c:740 +#: src/dird/authenticate.c:109 #, c-format msgid "" -"Re-read of last block OK, but block numbers differ. Read block=%u Want block=" -"%u.\n" -msgstr "" - -#: src/stored/block.c:744 -msgid "Re-read of last block succeeded.\n" +"Director unable to authenticate with Storage daemon at \"%s:%d\". Possible " +"causes:\n" +"Passwords or names not the same or\n" +"Maximum Concurrent Jobs exceeded on the SD or\n" +"SD networking messed up (restart daemon).\n" +"Please see " msgstr "" -#: src/stored/block.c:777 +#: src/dird/authenticate.c:137 #, c-format -msgid "" -"Error writing final EOF to tape. This Volume may not be readable.\n" -"%s" +msgid "TLS negotiation failed with SD at \"%s:%d\"\n" msgstr "" -#: src/stored/block.c:791 +#: src/dird/authenticate.c:149 #, c-format -msgid "" -"Error writing final part to DVD. This Volume may not be readable.\n" -"%s" +msgid "bdirdqnext->qprev != qp called from %s:%d\n" +msgid " st_mode differ. Cat: %x File: %x\n" msgstr "" -#: src/lib/smartall.c:206 +#: src/dird/verify.c:654 #, c-format -msgid "qp->qprev->qnext != qp called from %s:%d\n" +msgid " st_nlink differ. Cat: %d File: %d\n" msgstr "" -#: src/lib/smartall.c:215 +#: src/dird/verify.c:662 #, c-format -msgid "Overrun buffer: len=%d addr=%p allocated: %s:%d called from %s:%d\n" +msgid " st_uid differ. Cat: %u File: %u\n" msgstr "" -#: src/lib/smartall.c:293 +#: src/dird/verify.c:670 #, c-format -msgid "sm_realloc size: %d\n" +msgid " st_gid differ. Cat: %u File: %u\n" msgstr "" -#: src/lib/smartall.c:331 +#: src/dird/verify.c:678 #, c-format -msgid "sm_realloc %d at %p from %s:%d\n" +msgid " st_size differ. Cat: %s File: %s\n" msgstr "" -#: src/lib/smartall.c:391 -#, c-format -msgid "" -"\n" -"Orphaned buffers exist. Dump terminated following\n" -" discovery of bad links in chain of orphaned buffers.\n" -" Buffer address with bad links: %p\n" +#: src/dird/verify.c:687 +msgid " st_atime differs\n" msgstr "" -#: src/lib/smartall.c:436 -#, c-format -msgid "Damaged buffer found. Called from %s:%d\n" +#: src/dird/verify.c:694 +msgid " st_mtime differs\n" msgstr "" -#: src/lib/smartall.c:469 -#, c-format -msgid "" -"\n" -"Damaged buffers found at %s:%d\n" +#: src/dird/verify.c:701 +msgid " st_ctime differs\n" msgstr "" -#: src/lib/smartall.c:472 -msgid " discovery of bad prev link.\n" +#: src/dird/verify.c:708 +#, c-format +msgid " st_size decrease. Cat: %s File: %s\n" msgstr "" -#: src/lib/smartall.c:475 -msgid " discovery of bad next link.\n" +#: src/dird/verify.c:738 +#, c-format +msgid "MD5/SHA1 index %d not same as attributes %d\n" msgstr "" -#: src/lib/smartall.c:478 -msgid " discovery of data overrun.\n" +#: src/dird/verify.c:746 +#, c-format +msgid " %s differs. File=%s Cat=%s\n" msgstr "" -#: src/lib/smartall.c:481 -msgid " NULL pointer.\n" +#: src/dird/verify.c:757 +#, c-format +msgid "bdirdInChanger):\n" +" Volume(s) Storage(s) SD Device(s)\n" +"===========================================================================\n" msgstr "" -#: src/lib/util.c:205 src/lib/util.c:337 -msgid "Canceled" +#: src/dird/bsr.c:306 +msgid "No Volumes found to restore.\n" msgstr "" -#: src/lib/util.c:208 -msgid "Verify differences" +#: src/dird/bsr.c:308 +msgid "" +"\n" +"Volumes marked with \"*\" are in the Autochanger.\n" msgstr "" -#: src/lib/util.c:211 -msgid "Waiting on FD" +#: src/dird/fd_cmds.c:89 +msgid "Client: " msgstr "" -#: src/lib/util.c:214 -msgid "Wait on SD" +#: src/dird/fd_cmds.c:125 +#, c-format +msgid "File daemon \"%s\" rejected Job command: %s\n" msgstr "" -#: src/lib/util.c:217 -msgid "Wait for new Volume" +#: src/dird/fd_cmds.c:138 +#, c-format +msgid "Error updating Client record. ERR=%s\n" msgstr "" -#: src/lib/util.c:220 -msgid "Waiting for mount" +#: src/dird/fd_cmds.c:143 +#, c-format +msgid "FD gave bad response to JobId command: %s\n" msgstr "" -#: src/lib/util.c:223 -msgid "Waiting for Storage resource" +#: src/dird/fd_cmds.c:172 src/dird/fd_cmds.c:260 +msgid ", since=" msgstr "" -#: src/lib/util.c:226 -msgid "Waiting for Job resource" +#: src/dird/fd_cmds.c:237 +msgid "No prior or suitable Full backup found in catalog. Doing FULL backup.\n" msgstr "" -#: src/lib/util.c:229 -msgid "Waiting for Client resource" +#: src/dird/fd_cmds.c:238 src/dird/fd_cmds.c:244 src/dird/fd_cmds.c:253 +#, c-format +msgid " (upgraded from %s)" msgstr "" -#: src/lib/util.c:232 -msgid "Waiting on Max Jobs" +#: src/dird/fd_cmds.c:243 +msgid "" +"No prior or suitable Differential backup found in catalog. Doing " +"Differential backup.\n" msgstr "" -#: src/lib/util.c:235 -msgid "Waiting for Start Time" +#: src/dird/fd_cmds.c:251 +#, c-format +msgid "Prior failed job found in catalog. Upgrading to %s.\n" msgstr "" -#: src/lib/util.c:238 -msgid "Waiting on Priority" +#: src/dird/fd_cmds.c:329 +#, c-format +msgid "Unimplemented backup level %d %c\n" +msgstr "" + +#: src/dird/fd_cmds.c:402 +msgid "" +"FD compression disabled for this Job because AllowCompress=No in Storage " +"resource.\n" msgstr "" -#: src/lib/util.c:257 +#: src/dird/fd_cmds.c:501 src/filed/job.c:1014 #, c-format -msgid "Unknown Job termination status=%d" +msgid "Cannot run program: %s. ERR=%s\n" msgstr "" -#: src/lib/util.c:273 -msgid "Completed successfully" +#: src/dird/fd_cmds.c:512 src/dird/fd_cmds.c:537 src/dird/fd_cmds.c:551 +msgid ">filed: write error on socket\n" msgstr "" -#: src/lib/util.c:276 -msgid "Completed with warnings" +#: src/dird/fd_cmds.c:518 +#, c-format +msgid "Error running program: %s. ERR=%s\n" msgstr "" -#: src/lib/util.c:279 -msgid "Terminated with errors" +#: src/dird/fd_cmds.c:527 +#, c-format +msgid "Cannot open included file: %s. ERR=%s\n" msgstr "" -#: src/lib/util.c:282 -msgid "Fatal error" +#: src/dird/fd_cmds.c:672 +#, c-format +msgid "Client \"%s\" RunScript failed.\n" msgstr "" -#: src/lib/util.c:285 -msgid "Created, not yet running" +#: src/dird/fd_cmds.c:695 +#, c-format +msgid "" +"Client \"%s\" may not be used to restore this job. Please upgrade your " +"client.\n" msgstr "" -#: src/lib/util.c:288 -msgid "Canceled by user" +#: src/dird/fd_cmds.c:776 +msgid "RestoreObject failed.\n" msgstr "" -#: src/lib/util.c:291 -msgid "Verify found differences" +#: src/dird/fd_cmds.c:816 +#, c-format +msgid "" +" %s\n" msgstr "" -#: src/lib/res.c:65 -#, c-format -msgid "rwl_writelock failure at %s:%d: ERR=%s\n" +#: src/dird/ua_run.c:1132 +msgid "Cannot use your regexp.\n" msgstr "" -#: src/lib/res.c:75 -#, c-format -msgid "rwl_writeunlock failure at %s:%d:. ERR=%s\n" +#: src/dird/ua_run.c:1145 src/dird/ua_run.c:1175 +msgid "Levels:\n" msgstr "" -#: src/lib/parse_conf.c:177 -msgid "***UNKNOWN***" +#: src/dird/ua_run.c:1151 +msgid "VirtualFull" msgstr "" -#: src/lib/parse_conf.c:278 src/lib/parse_conf.c:299 -#, c-format -msgid "expected an =, got: %s" +#: src/dird/ua_run.c:1152 src/dird/ua_run.c:1181 +msgid "Select level" msgstr "" -#: src/lib/parse_conf.c:308 -#, c-format -msgid "Unknown item code: %d\n" +#: src/dird/ua_run.c:1176 +msgid "Initialize Catalog" msgstr "" -#: src/lib/parse_conf.c:348 -#, c-format -msgid "message type: %s not found" +#: src/dird/ua_run.c:1180 +msgid "Verify Volume Data (not yet implemented)" msgstr "" -#: src/lib/parse_conf.c:386 -#, c-format -msgid "Attempt to redefine name \"%s\" to \"%s\"." +#: src/dird/ua_run.c:1201 +msgid "Level not appropriate for this Job. Cannot be changed.\n" msgstr "" -#: src/lib/parse_conf.c:483 +#: src/dird/ua_run.c:1232 #, c-format -msgid "Attempt to redefine resource \"%s\" referenced on line %d : %s\n" +msgid "" +"Run Admin Job\n" +"JobName: %s\n" +"FileSet: %s\n" +"Client: %s\n" +"Storage: %s\n" +"When: %s\n" +"Priority: %d\n" msgstr "" -#: src/lib/parse_conf.c:519 +#: src/dird/ua_run.c:1286 #, c-format -msgid "Too many %s directives. Max. is %d. line %d: %s\n" +msgid "" +"Run Backup job\n" +"JobName: %s\n" +"Level: %s\n" +"Client: %s\n" +"FileSet: %s\n" +"Pool: %s (From %s)\n" +"%sStorage: %s (From %s)\n" +"When: %s\n" +"Priority: %d\n" msgstr "" -#: src/lib/parse_conf.c:530 +#: src/dird/ua_run.c:1315 #, c-format -msgid "Could not find config Resource \"%s\" referenced on line %d : %s\n" +msgid "Could not get job record for selected JobId. ERR=%s" msgstr "" -#: src/lib/parse_conf.c:593 +#: src/dird/ua_run.c:1354 #, c-format -msgid "Missing config Resource \"%s\" referenced on line %d : %s\n" +msgid "" +"Run Verify Job\n" +"JobName: %s\n" +"Level: %s\n" +"Client: %s\n" +"FileSet: %s\n" +"Pool: %s (From %s)\n" +"Storage: %s (From %s)\n" +"Verify Job: %s\n" +"Verify List: %s\n" +"When: %s\n" +"Priority: %d\n" msgstr "" -#: src/lib/parse_conf.c:665 -#, c-format -msgid "expected a size number, got: %s" +#: src/dird/ua_run.c:1383 +msgid "Please enter a JobId for restore: " msgstr "" -#: src/lib/parse_conf.c:670 +#: src/dird/ua_run.c:1421 #, c-format -msgid "expected a speed number, got: %s" +msgid "" +"Run Restore job\n" +"JobName: %s\n" +"Bootstrap: %s\n" +"RegexWhere: %s\n" +"Replace: %s\n" +"FileSet: %s\n" +"Backup Client: %s\n" +"Restore Client: %s\n" +"Storage: %s\n" +"When: %s\n" +"Catalog: %s\n" +"Priority: %d\n" msgstr "" -#: src/lib/parse_conf.c:681 +#: src/dird/ua_run.c:1473 #, c-format -msgid "expected a %s, got: %s" -msgstr "" - -#: src/lib/parse_conf.c:682 -msgid "size" +msgid "" +"Run Restore job\n" +"JobName: %s\n" +"Bootstrap: %s\n" +"Where: %s\n" +"Replace: %s\n" +"FileSet: %s\n" +"Backup Client: %s\n" +"Restore Client: %s\n" +"Storage: %s\n" +"When: %s\n" +"Catalog: %s\n" +"Priority: %d\n" msgstr "" -#: src/lib/parse_conf.c:682 -msgid "speed" +#: src/dird/ua_run.c:1502 +#, c-format +msgid "" +"Run Restore job\n" +"JobName: %s\n" +"Bootstrap: %s\n" msgstr "" -#: src/lib/parse_conf.c:803 +#: src/dird/ua_run.c:1510 #, c-format -msgid "Expected a Tape Label keyword, got: %s" +msgid "RegexWhere: %s\n" msgstr "" -#: src/lib/parse_conf.c:886 +#: src/dird/ua_run.c:1513 #, c-format -msgid "Unable to initialize resource lock. ERR=%s\n" +msgid "Where: %s\n" msgstr "" -#: src/lib/parse_conf.c:894 -msgid "Config filename too long.\n" +#: src/dird/ua_run.c:1517 +#, c-format +msgid "" +"Replace: %s\n" +"Client: %s\n" +"Storage: %s\n" +"JobId: %s\n" +"When: %s\n" +"Catalog: %s\n" +"Priority: %d\n" msgstr "" -#: src/lib/parse_conf.c:917 -#, c-format -msgid "Cannot open config file \"%s\": %s\n" +#: src/dird/ua_run.c:1572 +msgid "Run Copy job\n" msgstr "" -#: src/lib/parse_conf.c:934 -msgid "" -"Currently we cannot handle UTF-16 source files. Please convert the conf file " -"to UTF-8\n" +#: src/dird/ua_run.c:1574 +msgid "Run Migration job\n" msgstr "" -#: src/lib/parse_conf.c:938 +#: src/dird/ua_run.c:1606 #, c-format -msgid "Expected a Resource name identifier, got: %s" +msgid "Unknown Job Type=%d\n" msgstr "" -#: src/lib/parse_conf.c:954 +#: src/dird/ua_run.c:1680 #, c-format -msgid "expected resource name, got: %s" +msgid "Value missing for keyword %s\n" msgstr "" -#: src/lib/parse_conf.c:965 -#, c-format -msgid "not in resource definition: %s" +#: src/dird/ua_run.c:1690 +msgid "JobId specified twice.\n" msgstr "" -#: src/lib/parse_conf.c:990 -#, c-format -msgid "" -"Keyword \"%s\" not permitted in this resource.\n" -"Perhaps you left the trailing brace off of the previous resource." +#: src/dird/ua_run.c:1699 src/dird/ua_run.c:1839 +msgid "Client specified twice.\n" msgstr "" -#: src/lib/parse_conf.c:1001 -msgid "Name not specified for resource" +#: src/dird/ua_run.c:1707 +msgid "FileSet specified twice.\n" msgstr "" -#: src/lib/parse_conf.c:1011 -#, c-format -msgid "unexpected token %d %s in resource definition" +#: src/dird/ua_run.c:1715 +msgid "Level specified twice.\n" msgstr "" -#: src/lib/parse_conf.c:1017 -#, c-format -msgid "Unknown parser state %d\n" +#: src/dird/ua_run.c:1724 +msgid "Storage specified twice.\n" msgstr "" -#: src/lib/parse_conf.c:1022 -msgid "End of conf file reached with unclosed resource." +#: src/dird/ua_run.c:1732 +msgid "RegexWhere or Where specified twice.\n" msgstr "" -#: src/lib/mem_pool.c:112 -#, c-format -msgid "MemPool index %d larger than max %d\n" +#: src/dird/ua_run.c:1737 +msgid "No authorization for \"regexwhere\" specification.\n" msgstr "" -#: src/lib/mem_pool.c:130 src/lib/mem_pool.c:150 src/lib/mem_pool.c:186 -#: src/lib/mem_pool.c:257 src/lib/mem_pool.c:277 src/lib/mem_pool.c:312 -#: src/lib/mem_pool.c:623 -#, c-format -msgid "Out of memory requesting %d bytes\n" +#: src/dird/ua_run.c:1744 +msgid "Where or RegexWhere specified twice.\n" msgstr "" -#: src/lib/mem_pool.c:167 -msgid "obuf is NULL\n" +#: src/dird/ua_run.c:1749 +msgid "No authoriztion for \"where\" specification.\n" msgstr "" -#: src/lib/berrno.c:63 -msgid "Child exited normally." +#: src/dird/ua_run.c:1756 +msgid "Bootstrap specified twice.\n" msgstr "" -#: src/lib/berrno.c:70 -msgid "Unknown error during program execvp" +#: src/dird/ua_run.c:1764 +msgid "Replace specified twice.\n" msgstr "" -#: src/lib/berrno.c:73 -#, c-format -msgid "Child exited with code %d" +#: src/dird/ua_run.c:1772 +msgid "When specified twice.\n" msgstr "" -#: src/lib/berrno.c:81 -#, c-format -msgid "Child died from signal %d: %s" +#: src/dird/ua_run.c:1780 +msgid "Priority specified twice.\n" msgstr "" -#: src/lib/berrno.c:87 -msgid "Invalid errno. No error message possible." +#: src/dird/ua_run.c:1785 +msgid "Priority must be positive nonzero setting it to 10.\n" msgstr "" -#: src/lib/bnet.c:134 -#, c-format -msgid "Attr spool write error. ERR=%s\n" +#: src/dird/ua_run.c:1795 +msgid "Verify Job specified twice.\n" msgstr "" -#: src/lib/bnet.c:279 src/lib/bnet.c:320 -msgid "TLS connection initialization failed.\n" +#: src/dird/ua_run.c:1823 +msgid "Migration Job specified twice.\n" msgstr "" -#: src/lib/bnet.c:287 -msgid "TLS Negotiation failed.\n" +#: src/dird/ua_run.c:1831 +msgid "Pool specified twice.\n" msgstr "" -#: src/lib/bnet.c:293 src/lib/bnet.c:335 -msgid "" -"TLS certificate verification failed. Peer certificate did not match a " -"required commonName\n" +#: src/dird/ua_run.c:1847 +msgid "Restore Client specified twice.\n" msgstr "" -#: src/lib/bnet.c:342 -#, c-format -msgid "" -"TLS host certificate verification failed. Host name \"%s\" did not match " -"presented certificate\n" +#: src/dird/ua_run.c:1854 +msgid "Plugin Options not yet implemented.\n" msgstr "" -#: src/lib/bnet.c:359 -msgid "TLS enabled but not configured.\n" +#: src/dird/ua_run.c:1857 +msgid "Plugin Options specified twice.\n" msgstr "" -#: src/lib/bnet.c:365 -msgid "TLS enable but not configured.\n" +#: src/dird/ua_run.c:1862 +msgid "No authoriztion for \"PluginOptions\" specification.\n" msgstr "" -#: src/lib/bnet.c:481 -msgid "No problem." +#: src/dird/ua_run.c:1869 +msgid "Spool flag specified twice.\n" msgstr "" -#: src/lib/bnet.c:484 -msgid "Authoritative answer for host not found." +#: src/dird/ua_run.c:1876 +msgid "Invalid spooldata flag.\n" msgstr "" -#: src/lib/bnet.c:487 -msgid "Non-authoritative for host not found, or ServerFail." +#: src/dird/ua_run.c:1885 +msgid "IgnoreDuplicateCheck flag specified twice.\n" msgstr "" -#: src/lib/bnet.c:490 -msgid "Non-recoverable errors, FORMERR, REFUSED, or NOTIMP." +#: src/dird/ua_run.c:1892 +msgid "Invalid ignoreduplicatecheck flag.\n" msgstr "" -#: src/lib/bnet.c:493 -msgid "Valid name, no data record of resquested type." +#: src/dird/ua_run.c:1897 +msgid "Accurate flag specified twice.\n" msgstr "" -#: src/lib/bnet.c:496 -msgid "Unknown error." +#: src/dird/ua_run.c:1904 +msgid "Invalid accurate flag.\n" msgstr "" -#: src/lib/bnet.c:755 -#, c-format -msgid "Unknown sig %d" +#: src/dird/ua_run.c:1909 +msgid "Job name specified twice.\n" msgstr "" -#: src/lib/signal.c:67 -msgid "Invalid signal number" +#: src/dird/ua_run.c:1917 +msgid "Media Type specified twice.\n" msgstr "" -#: src/lib/signal.c:152 src/lib/signal.c:154 -#, c-format -msgid "Bacula interrupted by signal %d: %s\n" +#: src/dird/ua_run.c:1925 +msgid "NextPool specified twice.\n" msgstr "" -#: src/lib/signal.c:167 +#: src/dird/ua_run.c:1950 #, c-format -msgid "Kaboom! %s, %s got signal %d - %s. Attempting traceback.\n" +msgid "Invalid keyword: %s\n" msgstr "" -#: src/lib/signal.c:169 +#: src/dird/ua_run.c:1965 #, c-format -msgid "Kaboom! exepath=%s\n" +msgid "Catalog \"%s\" not found\n" msgstr "" -#: src/lib/signal.c:210 +#: src/dird/ua_run.c:1969 #, c-format -msgid "Fork error: ERR=%s\n" +msgid "No authorization. Catalog \"%s\".\n" msgstr "" -#: src/lib/signal.c:218 +#: src/dird/ua_run.c:2003 #, c-format -msgid "Calling: %s %s %s %s\n" +msgid "Verify Job \"%s\" not found.\n" msgstr "" -#: src/lib/signal.c:222 +#: src/dird/ua_run.c:2013 #, c-format -msgid "execv: %s failed: ERR=%s\n" +msgid "Migration Job \"%s\" not found.\n" msgstr "" -#: src/lib/signal.c:244 -#, c-format -msgid "It looks like the traceback worked...\n" +#: src/dird/ua_label.c:92 +msgid "Negative numbers not permitted\n" msgstr "" -#: src/lib/signal.c:246 -#, c-format -msgid "The btraceback call returned %d\n" +#: src/dird/ua_label.c:121 +msgid "Values must be be greater than zero.\n" msgstr "" -#: src/lib/signal.c:306 -#, c-format -msgid "BA_NSIG too small (%d) should be (%d)\n" +#: src/dird/ua_label.c:125 +msgid "Slot too large.\n" msgstr "" -#: src/lib/signal.c:312 -msgid "UNKNOWN SIGNAL" +#: src/dird/ua_label.c:195 src/dird/ua_label.c:518 src/dird/ua_label.c:1198 +msgid "No slots in changer to scan.\n" msgstr "" -#: src/lib/signal.c:313 -msgid "Hangup" +#: src/dird/ua_label.c:207 src/dird/ua_label.c:529 +msgid "No Volumes found to label, or no barcodes.\n" msgstr "" -#: src/lib/signal.c:314 -msgid "Interrupt" +#: src/dird/ua_label.c:217 src/dird/ua_label.c:1219 +#, c-format +msgid "Slot %d greater than max %d ignored.\n" msgstr "" -#: src/lib/signal.c:315 -msgid "Quit" +#: src/dird/ua_label.c:255 +#, c-format +msgid "No VolName for Slot=%d InChanger set to zero.\n" msgstr "" -#: src/lib/signal.c:316 -msgid "Illegal instruction" +#: src/dird/ua_label.c:276 +#, c-format +msgid "Catalog record for Volume \"%s\" updated to reference slot %d.\n" msgstr "" -#: src/lib/signal.c:317 -msgid "Trace/Breakpoint trap" +#: src/dird/ua_label.c:280 +#, c-format +msgid "Catalog record for Volume \"%s\" is up to date.\n" msgstr "" -#: src/lib/signal.c:318 -msgid "Abort" +#: src/dird/ua_label.c:286 +#, c-format +msgid "Volume \"%s\" not found in catalog. Slot=%d InChanger set to zero.\n" msgstr "" -#: src/lib/signal.c:320 -msgid "EMT instruction (Emulation Trap)" +#: src/dird/ua_label.c:383 +#, c-format +msgid "" +"Volume \"%s\" has VolStatus %s. It must be Purged or Recycled before " +"relabeling.\n" msgstr "" -#: src/lib/signal.c:323 -msgid "IOT trap" +#: src/dird/ua_label.c:399 +msgid "Enter new Volume name: " msgstr "" -#: src/lib/signal.c:325 -msgid "BUS error" +#: src/dird/ua_label.c:412 +#, c-format +msgid "Media record for new Volume \"%s\" already exists.\n" msgstr "" -#: src/lib/signal.c:326 -msgid "Floating-point exception" +#: src/dird/ua_label.c:430 +msgid "Enter slot (0 or Enter for none): " msgstr "" -#: src/lib/signal.c:327 -msgid "Kill, unblockable" +#: src/dird/ua_label.c:458 +#, c-format +msgid "Delete of Volume \"%s\" failed. ERR=%s" msgstr "" -#: src/lib/signal.c:328 -msgid "User-defined signal 1" +#: src/dird/ua_label.c:461 +#, c-format +msgid "Old volume \"%s\" deleted from catalog.\n" msgstr "" -#: src/lib/signal.c:329 -msgid "Segmentation violation" +#: src/dird/ua_label.c:472 +#, c-format +msgid "Requesting to mount %s ...\n" msgstr "" -#: src/lib/signal.c:330 -msgid "User-defined signal 2" +#: src/dird/ua_label.c:494 +msgid "Do not forget to mount the drive!!!\n" msgstr "" -#: src/lib/signal.c:331 -msgid "Broken pipe" +#: src/dird/ua_label.c:534 +msgid "" +"The following Volumes will be labeled:\n" +"Slot Volume\n" +"==============\n" msgstr "" -#: src/lib/signal.c:332 -msgid "Alarm clock" +#: src/dird/ua_label.c:543 +msgid "Do you want to label these Volumes? (yes|no): " msgstr "" -#: src/lib/signal.c:333 -msgid "Termination" +#: src/dird/ua_label.c:563 +#, c-format +msgid "Media record for Slot %d Volume \"%s\" already exists.\n" msgstr "" -#: src/lib/signal.c:335 -msgid "Stack fault" +#: src/dird/ua_label.c:569 +#, c-format +msgid "Error setting InChanger: ERR=%s" msgstr "" -#: src/lib/signal.c:337 -msgid "Child status has changed" +#: src/dird/ua_label.c:592 +#, c-format +msgid "Maximum pool Volumes=%d reached.\n" msgstr "" -#: src/lib/signal.c:338 -msgid "Continue" +#: src/dird/ua_label.c:600 +#, c-format +msgid "Catalog record for cleaning tape \"%s\" successfully created.\n" msgstr "" -#: src/lib/signal.c:339 -msgid "Stop, unblockable" +#: src/dird/ua_label.c:607 +#, c-format +msgid "Catalog error on cleaning tape: %s" msgstr "" -#: src/lib/signal.c:340 -msgid "Keyboard stop" +#: src/dird/ua_label.c:643 +#, c-format +msgid "Illegal character \"%c\" in a volume name.\n" msgstr "" -#: src/lib/signal.c:341 -msgid "Background read from tty" +#: src/dird/ua_label.c:650 src/dird/ua_cmds.c:341 +msgid "Volume name too long.\n" msgstr "" -#: src/lib/signal.c:342 -msgid "Background write to tty" +#: src/dird/ua_label.c:690 +#, c-format +msgid "Sending relabel command from \"%s\" to \"%s\" ...\n" msgstr "" -#: src/lib/signal.c:343 -msgid "Urgent condition on socket" +#: src/dird/ua_label.c:697 +#, c-format +msgid "Sending label command for Volume \"%s\" Slot %d ...\n" msgstr "" -#: src/lib/signal.c:344 -msgid "CPU limit exceeded" +#: src/dird/ua_label.c:738 +#, c-format +msgid "Catalog record for Volume \"%s\", Slot %d successfully created.\n" msgstr "" -#: src/lib/signal.c:345 -msgid "File size limit exceeded" +#: src/dird/ua_label.c:751 +#, c-format +msgid "Label command failed for Volume %s.\n" msgstr "" -#: src/lib/signal.c:346 -msgid "Virtual alarm clock" +#: src/dird/ua_label.c:765 +msgid "Could not open SD socket.\n" msgstr "" -#: src/lib/signal.c:347 -msgid "Profiling alarm clock" +#: src/dird/ua_label.c:837 src/dird/ua_label.c:847 +#, c-format +msgid "Invalid Slot number: %s\n" msgstr "" -#: src/lib/signal.c:348 -msgid "Window size change" +#: src/dird/ua_label.c:856 +#, c-format +msgid "Invalid Volume name: %s\n" msgstr "" -#: src/lib/signal.c:349 -msgid "I/O now possible" +#: src/dird/ua_label.c:950 +#, c-format +msgid "Device \"%s\" has %d slots.\n" msgstr "" -#: src/lib/signal.c:351 -msgid "Power failure restart" +#: src/dird/ua_label.c:996 +#, c-format +msgid "Pool \"%s\" resource not found for volume \"%s\"!\n" msgstr "" -#: src/lib/signal.c:354 -msgid "No runnable lwp" +#: src/dird/ua_label.c:1210 +msgid "No Volumes found, or no barcodes.\n" msgstr "" -#: src/lib/signal.c:357 -msgid "SIGLWP special signal used by thread library" +#: src/dird/ua_label.c:1213 +msgid "" +" Slot | Volume Name | Status | Media Type | " +"Pool |\n" msgstr "" -#: src/lib/signal.c:360 -msgid "Checkpoint Freeze" +#: src/dird/ua_label.c:1214 +msgid "" +"------+------------------+-----------+----------------------" +"+--------------------|\n" msgstr "" -#: src/lib/signal.c:363 -msgid "Checkpoint Thaw" +#: src/dird/ua_cmds.c:95 +msgid "Add media to a pool" msgstr "" -#: src/lib/signal.c:366 -msgid "Thread Cancellation" +#: src/dird/ua_cmds.c:96 +msgid "Autodisplay console messages" msgstr "" -#: src/lib/signal.c:369 -msgid "Resource Lost (e.g. record-lock lost)" +#: src/dird/ua_cmds.c:97 +msgid "Automount after label" msgstr "" -#: src/lib/ini.c:106 src/lib/ini.c:118 -#, c-format -msgid "" -"Config file error: %s\n" -" : Line %d, col %d of file %s\n" -"%s\n" +#: src/dird/ua_cmds.c:98 +msgid "Cancel a job" msgstr "" -#: src/lib/ini.c:308 src/lib/ini.c:383 -#, c-format -msgid "Cannot open config file %s: %s\n" +#: src/dird/ua_cmds.c:99 +msgid "Create DB Pool from resource" msgstr "" -#: src/lib/btimers.c:265 -msgid "stop_btimer called with NULL btimer_id\n" +#: src/dird/ua_cmds.c:100 +msgid "Delete volume, pool or job" msgstr "" -#: src/lib/bsys.c:72 -#, c-format -msgid "safe_unlink could not compile regex pattern \"%s\" ERR=%s\n" +#: src/dird/ua_cmds.c:101 +msgid "Disable a job, attributes batch process" msgstr "" -#: src/lib/bsys.c:261 src/lib/bsys.c:278 src/lib/bsys.c:302 src/lib/bsys.c:315 -#, c-format -msgid "Out of memory: ERR=%s\n" +#: src/dird/ua_cmds.c:102 +msgid "Enable a job, attributes batch process" msgstr "" -#: src/lib/bsys.c:357 -msgid "Buffer overflow.\n" +#: src/dird/ua_cmds.c:103 +msgid "Performs FileSet estimate, listing gives full listing" msgstr "" -#: src/lib/bsys.c:423 -msgid "Bad errno" +#: src/dird/ua_cmds.c:106 src/dird/ua_cmds.c:130 +msgid "Terminate Bconsole session" msgstr "" -#: src/lib/bsys.c:438 -#, c-format -msgid "Memset for %d bytes at %s:%d\n" +#: src/dird/ua_cmds.c:107 +msgid "Non-interactive gui mode" msgstr "" -#: src/lib/bsys.c:468 -#, c-format -msgid "Cannot open pid file. %s ERR=%s\n" +#: src/dird/ua_cmds.c:108 +msgid "Print help on specific command" msgstr "" -#: src/lib/bsys.c:483 -#, c-format -msgid "" -"%s is already running. pid=%d\n" -"Check file %s\n" +#: src/dird/ua_cmds.c:113 +msgid "Label a tape" msgstr "" -#: src/lib/bsys.c:497 -#, c-format -msgid "Could not open pid file. %s ERR=%s\n" +#: src/dird/ua_cmds.c:114 +msgid "List objects from catalog" msgstr "" -#: src/lib/bsys.c:608 -#, c-format -msgid "Could not create state file. %s ERR=%s\n" +#: src/dird/ua_cmds.c:118 +msgid "Full or long list like list command" msgstr "" -#: src/lib/bsys.c:627 -#, c-format -msgid "Write final hdr error: ERR=%s\n" +#: src/dird/ua_cmds.c:121 +msgid "Display pending messages" msgstr "" -#: src/lib/runscript.c:236 -#, c-format -msgid "%s: run %s \"%s\"\n" +#: src/dird/ua_cmds.c:122 +msgid "Print current memory usage" msgstr "" -#: src/lib/runscript.c:245 -#, c-format -msgid "Runscript: %s could not execute. ERR=%s\n" +#: src/dird/ua_cmds.c:123 +msgid "Mount storage" msgstr "" -#: src/lib/runscript.c:254 -#, c-format -msgid "%s: %s\n" +#: src/dird/ua_cmds.c:126 +msgid "Prune expired records from catalog" msgstr "" -#: src/lib/runscript.c:259 -#, c-format -msgid "Runscript: %s returned non-zero status=%d. ERR=%s\n" +#: src/dird/ua_cmds.c:129 +msgid "Purge records from catalog" msgstr "" -#: src/lib/lex.c:91 src/wx-console/console_thread.cpp:212 -#, c-format -msgid "Problem probably begins at line %d.\n" +#: src/dird/ua_cmds.c:131 +msgid "Query catalog" msgstr "" -#: src/lib/lex.c:96 src/wx-console/console_thread.cpp:217 -#, c-format -msgid "" -"Config error: %s\n" -" : line %d, col %d of file %s\n" -"%s\n" -"%s" +#: src/dird/ua_cmds.c:132 +msgid "Restore files" msgstr "" -#: src/lib/lex.c:100 -#, c-format -msgid "Config error: %s\n" +#: src/dird/ua_cmds.c:137 +msgid "Relabel a tape" msgstr "" -#: src/lib/lex.c:129 -msgid "Close of NULL file\n" +#: src/dird/ua_cmds.c:140 +msgid "Release storage" msgstr "" -#: src/lib/lex.c:226 -msgid "" -"get_char: called after EOF. You may have a open double quote without the " -"closing double quote.\n" +#: src/dird/ua_cmds.c:141 +msgid "Reload conf file" msgstr "" -#: src/lib/lex.c:268 -#, c-format -msgid "Config token too long, file: %s, line %d, begins at line %d\n" +#: src/dird/ua_cmds.c:142 +msgid "Run a job" msgstr "" -#: src/lib/lex.c:292 -msgid "none" +#: src/dird/ua_cmds.c:147 +msgid "Report status" msgstr "" -#: src/lib/lex.c:293 -msgid "comment" +#: src/dird/ua_cmds.c:150 +msgid "Stop a job" msgstr "" -#: src/lib/lex.c:294 -msgid "number" +#: src/dird/ua_cmds.c:151 +msgid "Sets debug level" msgstr "" -#: src/lib/lex.c:295 -msgid "ip_addr" +#: src/dird/ua_cmds.c:154 +msgid "Sets bandwidth" msgstr "" -#: src/lib/lex.c:296 -msgid "identifier" +#: src/dird/ua_cmds.c:157 +msgid "Sets new client address -- if authorized" msgstr "" -#: src/lib/lex.c:297 -msgid "string" +#: src/dird/ua_cmds.c:158 +msgid "Show resource records" msgstr "" -#: src/lib/lex.c:298 -msgid "quoted_string" +#: src/dird/ua_cmds.c:161 +msgid "Use SQL to query catalog" msgstr "" -#: src/lib/lex.c:299 -msgid "include" +#: src/dird/ua_cmds.c:162 +msgid "Print current time" msgstr "" -#: src/lib/lex.c:300 -msgid "include_quoted_string" +#: src/dird/ua_cmds.c:163 +msgid "Turn on/off trace to file" msgstr "" -#: src/lib/lex.c:301 -msgid "UTF-8 Byte Order Mark" +#: src/dird/ua_cmds.c:164 +msgid "Truncate one or more Volumes" msgstr "" -#: src/lib/lex.c:302 -msgid "UTF-16le Byte Order Mark" +#: src/dird/ua_cmds.c:165 +msgid "Unmount storage" msgstr "" -#: src/lib/lex.c:340 src/lib/lex.c:346 src/lib/lex.c:357 src/lib/lex.c:363 -#, c-format -msgid "expected a positive integer number, got: %s" +#: src/dird/ua_cmds.c:168 +msgid "Umount - for old-time Unix guys, see unmount" msgstr "" -#: src/lib/lex.c:479 -msgid "" -"This config file appears to be in an unsupported Unicode format (UTF-16be). " -"Please resave as UTF-8\n" +#: src/dird/ua_cmds.c:171 +msgid "Update volume, pool or stats" msgstr "" -#: src/lib/lex.c:625 src/lib/lex.c:653 -#, c-format -msgid "Cannot open included config file %s: %s\n" +#: src/dird/ua_cmds.c:178 +msgid "Use catalog xxx" msgstr "" -#: src/lib/lex.c:712 src/lib/lex.c:769 -#, c-format -msgid "expected an integer or a range, got %s: %s" +#: src/dird/ua_cmds.c:179 +msgid "Does variable expansion" msgstr "" -#: src/lib/lex.c:726 src/lib/lex.c:734 src/lib/lex.c:745 src/lib/lex.c:753 -#, c-format -msgid "expected an integer number, got %s: %s" +#: src/dird/ua_cmds.c:180 +msgid "Print Director version" msgstr "" -#: src/lib/lex.c:783 -#, c-format -msgid "expected a name, got %s: %s" +#: src/dird/ua_cmds.c:181 +msgid "Wait until no jobs are running" msgstr "" -#: src/lib/lex.c:787 +#: src/dird/ua_cmds.c:234 #, c-format -msgid "name %s length %d too long, max is %d\n" +msgid "%s: is an invalid command.\n" msgstr "" -#: src/lib/lex.c:795 -#, c-format -msgid "expected a string, got %s: %s" +#: src/dird/ua_cmds.c:275 +msgid "" +"You probably don't want to be using this command since it\n" +"creates database records without labeling the Volumes.\n" +"You probably want to use the \"label\" command.\n" +"\n" msgstr "" -#: src/lib/var.c:2669 -msgid "everything ok" +#: src/dird/ua_cmds.c:293 +#, c-format +msgid "Pool already has maximum volumes=%d\n" msgstr "" -#: src/lib/var.c:2670 -msgid "incomplete named character" +#: src/dird/ua_cmds.c:294 +msgid "Enter new maximum (zero for unlimited): " msgstr "" -#: src/lib/var.c:2671 -msgid "incomplete hexadecimal value" +#: src/dird/ua_cmds.c:314 +#, c-format +msgid "Enter number of Volumes to create. 0=>fixed name. Max=%d: " msgstr "" -#: src/lib/var.c:2672 -msgid "invalid hexadecimal value" +#: src/dird/ua_cmds.c:320 +#, c-format +msgid "The number must be between 0 and %d\n" msgstr "" -#: src/lib/var.c:2673 -msgid "octal value too large" +#: src/dird/ua_cmds.c:328 +msgid "Enter Volume name: " msgstr "" -#: src/lib/var.c:2674 -msgid "invalid octal value" +#: src/dird/ua_cmds.c:332 +msgid "Enter base volume name: " msgstr "" - -#: src/lib/var.c:2675 -msgid "incomplete octal value" + +#: src/dird/ua_cmds.c:356 +msgid "Enter the starting number: " msgstr "" -#: src/lib/var.c:2676 -msgid "incomplete grouped hexadecimal value" +#: src/dird/ua_cmds.c:361 +msgid "Start number must be greater than zero.\n" msgstr "" -#: src/lib/var.c:2677 -msgid "incorrect character class specification" +#: src/dird/ua_cmds.c:372 +msgid "Enter slot (0 for none): " msgstr "" -#: src/lib/var.c:2678 -msgid "invalid expansion configuration" +#: src/dird/ua_cmds.c:376 +msgid "InChanger? yes/no: " msgstr "" -#: src/lib/var.c:2679 -msgid "out of memory" +#: src/dird/ua_cmds.c:404 +#, c-format +msgid "%d Volumes created in pool %s\n" msgstr "" -#: src/lib/var.c:2680 -msgid "incomplete variable specification" +#: src/dird/ua_cmds.c:420 src/dird/ua_cmds.c:1131 +msgid "Turn on or off? " msgstr "" -#: src/lib/var.c:2681 -msgid "undefined variable" +#: src/dird/ua_cmds.c:547 +#, c-format +msgid "" +"Can't set %s RecyclePool to %s, %s is not in database.\n" +"Try to update it with 'update pool=%s'\n" msgstr "" -#: src/lib/var.c:2682 -msgid "input is neither text nor variable" +#: src/dird/ua_cmds.c:565 +#, c-format +msgid "" +"Can't set %s ScratchPool to %s, %s is not in database.\n" +"Try to update it with 'update pool=%s'\n" msgstr "" -#: src/lib/var.c:2683 -msgid "unknown command character in variable" +#: src/dird/ua_cmds.c:632 +#, c-format +msgid "" +"Error: Pool %s already exists.\n" +"Use update to change it.\n" msgstr "" -#: src/lib/var.c:2684 -msgid "malformatted search and replace operation" +#: src/dird/ua_cmds.c:643 +#, c-format +msgid "Pool %s created.\n" msgstr "" -#: src/lib/var.c:2685 -msgid "unknown flag in search and replace operation" +#: src/dird/ua_cmds.c:671 +msgid "Failed to set bandwidth limit to Client.\n" msgstr "" -#: src/lib/var.c:2686 -msgid "invalid regex in search and replace operation" +#: src/dird/ua_cmds.c:674 +#, c-format +msgid "2000 OK Limiting bandwidth to %lldkb/s %s\n" msgstr "" -#: src/lib/var.c:2687 -msgid "missing parameter in command" +#: src/dird/ua_cmds.c:675 +msgid "on running and future jobs" msgstr "" -#: src/lib/var.c:2688 -msgid "empty search string in search and replace operation" +#: src/dird/ua_cmds.c:697 +msgid "Set Bandwidth choice:\n" msgstr "" -#: src/lib/var.c:2689 -msgid "start offset missing in cut operation" +#: src/dird/ua_cmds.c:698 +msgid "Running Job" msgstr "" -#: src/lib/var.c:2690 -msgid "offsets in cut operation delimited by unknown character" +#: src/dird/ua_cmds.c:699 +msgid "Running and future Jobs for a Client" msgstr "" -#: src/lib/var.c:2691 -msgid "range out of bounds in cut operation" +#: src/dird/ua_cmds.c:700 +msgid "Choose where to limit the bandwidth" msgstr "" -#: src/lib/var.c:2692 -msgid "offset out of bounds in cut operation" +#: src/dird/ua_cmds.c:712 +msgid "Enter new bandwidth limit kb/s: " msgstr "" -#: src/lib/var.c:2693 -msgid "logic error in cut operation" +#: src/dird/ua_cmds.c:749 src/dird/ua_cmds.c:809 +msgid "Unauthorized command from this console.\n" msgstr "" -#: src/lib/var.c:2694 -msgid "malformatted transpose operation" +#: src/dird/ua_cmds.c:766 +#, c-format +msgid "Client \"%s\" address set to %s\n" msgstr "" -#: src/lib/var.c:2695 -msgid "source and target class mismatch in transpose operation" +#: src/dird/ua_cmds.c:780 +#, c-format +msgid "Job Attributes Insertion %sabled\n" msgstr "" -#: src/lib/var.c:2696 -msgid "empty character class in transpose operation" +#: src/dird/ua_cmds.c:813 +#, c-format +msgid "Job \"%s\" %sabled\n" msgstr "" -#: src/lib/var.c:2697 -msgid "incorrect character class in transpose operation" +#: src/dird/ua_cmds.c:1005 +msgid "Enter new debug level: " msgstr "" -#: src/lib/var.c:2698 -msgid "malformatted padding operation" +#: src/dird/ua_cmds.c:1018 +#, c-format +msgid "Incorrect tags found on command line %s\n" msgstr "" -#: src/lib/var.c:2699 -msgid "width parameter missing in padding operation" +#: src/dird/ua_cmds.c:1095 +msgid "All" msgstr "" -#: src/lib/var.c:2700 -msgid "fill string missing in padding operation" +#: src/dird/ua_cmds.c:1096 +msgid "Select daemon type to set debug level" msgstr "" -#: src/lib/var.c:2701 -msgid "unknown quoted pair in search and replace operation" +#: src/dird/ua_cmds.c:1191 +msgid "Client name missing.\n" msgstr "" -#: src/lib/var.c:2702 -msgid "sub-matching reference out of range" +#: src/dird/ua_cmds.c:1203 src/dird/ua_cmds.c:1270 src/dird/ua_cmds.c:2016 +#, c-format +msgid "No authorization for Job \"%s\"\n" msgstr "" -#: src/lib/var.c:2703 -msgid "invalid argument" +#: src/dird/ua_cmds.c:1208 +msgid "Job name missing.\n" msgstr "" -#: src/lib/var.c:2704 -msgid "incomplete quoted pair" +#: src/dird/ua_cmds.c:1217 +#, c-format +msgid "Fileset \"%s\" not found.\n" msgstr "" -#: src/lib/var.c:2705 -msgid "lookup function does not support variable arrays" +#: src/dird/ua_cmds.c:1221 +#, c-format +msgid "No authorization for FileSet \"%s\"\n" msgstr "" -#: src/lib/var.c:2706 -msgid "index of array variable contains an invalid character" +#: src/dird/ua_cmds.c:1226 +msgid "Fileset name missing.\n" msgstr "" -#: src/lib/var.c:2707 -msgid "index of array variable is incomplete" +#: src/dird/ua_cmds.c:1241 +msgid "Level value missing.\n" msgstr "" -#: src/lib/var.c:2708 -msgid "bracket expression in array variable's index not closed" +#: src/dird/ua_cmds.c:1248 +msgid "Invalid value for accurate. It must be yes or no.\n" msgstr "" -#: src/lib/var.c:2709 -msgid "division by zero error in index specification" +#: src/dird/ua_cmds.c:1253 +msgid "Accurate value missing.\n" msgstr "" -#: src/lib/var.c:2710 -msgid "unterminated loop construct" +#: src/dird/ua_cmds.c:1266 +msgid "No job specified.\n" msgstr "" -#: src/lib/var.c:2711 -msgid "invalid character in loop limits" +#: src/dird/ua_cmds.c:1326 +msgid "Error sending include list.\n" msgstr "" -#: src/lib/var.c:2712 -msgid "malformed operation argument list" +#: src/dird/ua_cmds.c:1331 +msgid "Error sending exclude list.\n" msgstr "" -#: src/lib/var.c:2713 -msgid "undefined operation" +#: src/dird/ua_cmds.c:1422 +msgid "" +"In general it is not a good idea to delete either a\n" +"Pool or a Volume since they may contain data.\n" +"\n" msgstr "" -#: src/lib/var.c:2714 -msgid "formatting failure" +#: src/dird/ua_cmds.c:1425 +msgid "Choose catalog item to delete" msgstr "" -#: src/lib/var.c:2723 -msgid "unknown error" +#: src/dird/ua_cmds.c:1436 +msgid "Nothing done.\n" msgstr "" -#: src/lib/address_conf.c:62 +#: src/dird/ua_cmds.c:1464 #, c-format -msgid "Only ipv4 and ipv6 are supported (%d)\n" +msgid "Are you sure you want to delete %d JobIds ? (yes/no): " msgstr "" -#: src/lib/address_conf.c:66 -#, c-format -msgid "Only ipv4 is supported (%d)\n" +#: src/dird/ua_cmds.c:1474 +msgid "Enter JobId to delete: " msgstr "" -#: src/lib/address_conf.c:175 +#: src/dird/ua_cmds.c:1492 #, c-format -msgid "It was tried to assign a ipv6 address to a ipv4(%d)\n" +msgid "Jobid %s and associated records deleted from the catalog.\n" msgstr "" -#: src/lib/address_conf.c:184 +#: src/dird/ua_cmds.c:1507 #, c-format -msgid "It was tried to assign a ipv4 address to a ipv6(%d)\n" +msgid "" +"\n" +"This command will delete volume %s\n" +"and all Jobs saved on that volume from the Catalog\n" msgstr "" -#: src/lib/address_conf.c:263 +#: src/dird/ua_cmds.c:1514 #, c-format -msgid "Can't add default address (%s)\n" +msgid "Are you sure you want to delete Volume \"%s\"? (yes/no): " msgstr "" -#: src/lib/address_conf.c:292 -msgid "the old style addresses cannot be mixed with new style" +#: src/dird/ua_cmds.c:1527 +msgid "Can't list jobs on this volume\n" msgstr "" -#: src/lib/address_conf.c:313 +#: src/dird/ua_cmds.c:1552 #, c-format -msgid "can't resolve service(%s)" +msgid "Are you sure you want to delete Pool \"%s\"? (yes/no): " msgstr "" -#: src/lib/address_conf.c:322 +#: src/dird/ua_cmds.c:1666 #, c-format -msgid "can't resolve hostname(%s) %s" +msgid "Using Catalog name=%s DB=%s\n" msgstr "" -#: src/lib/address_conf.c:412 src/lib/address_conf.c:443 -#, c-format -msgid "Expected a block begin { , got: %s" +#: src/dird/ua_cmds.c:1734 +msgid "ERR: Can't open db\n" msgstr "" -#: src/lib/address_conf.c:417 -msgid "Empty addr block is not allowed" +#: src/dird/ua_cmds.c:1781 +msgid "Wait on mount timed out\n" msgstr "" -#: src/lib/address_conf.c:421 -#, c-format -msgid "Expected a string, got: %s" +#: src/dird/ua_cmds.c:1791 +msgid "ERR: Job was not found\n" msgstr "" -#: src/lib/address_conf.c:430 -#, c-format -msgid "Expected a string [ip|ipv4|ipv6], got: %s" +#: src/dird/ua_cmds.c:1867 +msgid "" +" Command Description\n" +" ======= ===========\n" msgstr "" -#: src/lib/address_conf.c:434 +#: src/dird/ua_cmds.c:1871 #, c-format -msgid "Expected a string [ip|ipv4], got: %s" +msgid "" +" %-13s %s\n" +"\n" +"Arguments:\n" +"\t%s\n" msgstr "" -#: src/lib/address_conf.c:439 src/lib/address_conf.c:469 +#: src/dird/ua_cmds.c:1876 #, c-format -msgid "Expected a equal =, got: %s" +msgid " %-13s %s\n" msgstr "" -#: src/lib/address_conf.c:450 src/lib/address_conf.c:465 +#: src/dird/ua_cmds.c:1880 #, c-format -msgid "Expected a identifier [addr|port], got: %s" +msgid "" +"\n" +"Can't find %s command.\n" +"\n" msgstr "" -#: src/lib/address_conf.c:455 -msgid "Only one port per address block" +#: src/dird/ua_cmds.c:1882 +msgid "" +"\n" +"When at a prompt, entering a period cancels the command.\n" +"\n" msgstr "" -#: src/lib/address_conf.c:461 -msgid "Only one addr per address block" +#: src/dird/ua_cmds.c:1918 src/filed/status.c:77 +#, c-format +msgid "%s Version: %s (%s) %s %s %s %s\n" msgstr "" -#: src/lib/address_conf.c:477 +#: src/dird/ua_cmds.c:1977 src/dird/ua_cmds.c:2004 src/dird/ua_cmds.c:2026 #, c-format -msgid "Expected a number or a string, got: %s" +msgid "No authorization for Catalog \"%s\"\n" msgstr "" -#: src/lib/address_conf.c:483 src/lib/address_conf.c:516 +#: src/dird/ua_cmds.c:2083 #, c-format -msgid "Expected an IP number or a hostname, got: %s" +msgid "Could not open catalog database \"%s\".\n" msgstr "" -#: src/lib/address_conf.c:489 -msgid "State machine missmatch" +#: src/dird/ua_cmds.c:2102 +#, c-format +msgid "Using Catalog \"%s\"\n" msgstr "" -#: src/lib/address_conf.c:495 src/lib/address_conf.c:507 -#, c-format -msgid "Expected a end of block }, got: %s" +#: src/dird/backup.c:94 +msgid "No Storage specification found in Job or Pool.\n" msgstr "" -#: src/lib/address_conf.c:501 +#: src/dird/backup.c:254 #, c-format -msgid "Can't add hostname(%s) and port(%s) to addrlist (%s)" +msgid "Using BaseJobId(s): %s\n" msgstr "" -#: src/lib/address_conf.c:521 src/lib/address_conf.c:535 -#, c-format -msgid "can't add port (%s) to (%s)" +#: src/dird/backup.c:264 +msgid "Cannot find previous jobids.\n" msgstr "" -#: src/lib/address_conf.c:530 +#: src/dird/backup.c:278 +msgid "Sending Accurate information to the FD.\n" +msgstr "" + +#: src/dird/backup.c:435 #, c-format -msgid "Expected a port number or string, got: %s" +msgid "Start Backup JobId %s, Job=%s\n" msgstr "" -#: src/lib/edit.c:478 -msgid "Empty name not allowed.\n" +#: src/dird/backup.c:640 +#, c-format +msgid "Unexpected Client Job message: %s\n" msgstr "" -#: src/lib/edit.c:488 +#: src/dird/backup.c:653 #, c-format -msgid "Illegal character \"%c\" in name.\n" +msgid "Network error with FD during %s: ERR=%s\n" msgstr "" -#: src/lib/edit.c:495 -msgid "Name too long.\n" +#: src/dird/backup.c:687 +msgid "No Job status returned from FD.\n" msgstr "" -#: src/findlib/savecwd.c:60 +#: src/dird/backup.c:847 #, c-format -msgid "Cannot open current directory: ERR=%s\n" +msgid " Base files/Used files: %lld/%lld (%.2f%%)\n" msgstr "" -#: src/findlib/savecwd.c:71 +#: src/dird/backup.c:858 #, c-format -msgid "Cannot get current directory: ERR=%s\n" +msgid "" +"%s %s %s (%s):\n" +" Build OS: %s %s %s\n" +" JobId: %d\n" +" Job: %s\n" +" Backup Level: %s%s\n" +" Client: \"%s\" %s\n" +" FileSet: \"%s\" %s\n" +" Pool: \"%s\" (From %s)\n" +" Catalog: \"%s\" (From %s)\n" +" Storage: \"%s\" (From %s)\n" +" Scheduled time: %s\n" +" Start time: %s\n" +" End time: %s\n" +" Elapsed time: %s\n" +" Priority: %d\n" +" FD Files Written: %s\n" +" SD Files Written: %s\n" +" FD Bytes Written: %s (%sB)\n" +" SD Bytes Written: %s (%sB)\n" +" Rate: %.1f KB/s\n" +" Software Compression: %s\n" +"%s VSS: %s\n" +" Encryption: %s\n" +" Accurate: %s\n" +" Volume name(s): %s\n" +" Volume Session Id: %d\n" +" Volume Session Time: %d\n" +" Last Volume Bytes: %s\n" +" Non-fatal FD errors: %d\n" +" SD Errors: %d\n" +" FD termination status: %s\n" +" SD termination status: %s\n" +" Termination: %s\n" +"\n" msgstr "" -#: src/findlib/savecwd.c:95 src/findlib/savecwd.c:106 +#: src/dird/backup.c:959 #, c-format -msgid "Cannot reset current directory: ERR=%s\n" +msgid "Could not get Job Volume Parameters to update Bootstrap file. ERR=%s\n" msgstr "" -#: src/findlib/mkpath.c:137 +#: src/dird/backup.c:995 #, c-format -msgid "Cannot create directory %s: ERR=%s\n" +msgid "" +"Could not open WriteBootstrap file:\n" +"%s: ERR=%s\n" msgstr "" -#: src/findlib/mkpath.c:141 src/findlib/mkpath.c:202 -#, c-format -msgid "%s exists but is not a directory.\n" +#: src/dird/ua_tree.c:62 +msgid "add dir/file to be restored recursively, wildcards allowed" msgstr "" -#: src/findlib/mkpath.c:164 -#, c-format -msgid "Cannot change owner and/or group of %s: ERR=%s\n" +#: src/dird/ua_tree.c:63 +msgid "change current directory" msgstr "" -#: src/findlib/mkpath.c:169 -#, c-format -msgid "Cannot change permissions of %s: ERR=%s\n" +#: src/dird/ua_tree.c:64 +msgid "count marked files in and below the cd" msgstr "" -#: src/findlib/mkpath.c:239 -#, c-format -msgid "%c: is not a valid drive.\n" +#: src/dird/ua_tree.c:65 +msgid "delete dir/file to be restored recursively in dir" msgstr "" -#: src/findlib/mkpath.c:283 -msgid "Too many subdirectories. Some permissions not reset.\n" +#: src/dird/ua_tree.c:66 src/dird/ua_tree.c:67 +msgid "long list current directory, wildcards allowed" msgstr "" -#: src/findlib/attribs.c:483 -#, c-format -msgid "File size of restored file %s not correct. Original %s, restored %s.\n" +#: src/dird/ua_tree.c:68 +msgid "leave file selection mode" +msgstr "" + +#: src/dird/ua_tree.c:69 +msgid "estimate restore size" +msgstr "" + +#: src/dird/ua_tree.c:70 +msgid "same as done command" +msgstr "" + +#: src/dird/ua_tree.c:71 +msgid "find files, wildcards allowed" msgstr "" -#: src/findlib/attribs.c:509 src/findlib/attribs.c:516 -#, c-format -msgid "Unable to set file owner %s: ERR=%s\n" +#: src/dird/ua_tree.c:72 src/dird/ua_tree.c:85 src/dird/ua_tree.c:86 +msgid "print help" msgstr "" -#: src/findlib/attribs.c:522 -#, c-format -msgid "Unable to set file modes %s: ERR=%s\n" +#: src/dird/ua_tree.c:73 src/dird/ua_tree.c:74 +msgid "list current directory, wildcards allowed" msgstr "" -#: src/findlib/attribs.c:532 -#, c-format -msgid "Unable to set file times %s: ERR=%s\n" +#: src/dird/ua_tree.c:75 +msgid "list subdir in current directory, wildcards allowed" msgstr "" -#: src/findlib/attribs.c:546 -#, c-format -msgid "Unable to set file flags %s: ERR=%s\n" +#: src/dird/ua_tree.c:76 +msgid "list the marked files in and below the cd" msgstr "" -#: src/findlib/attribs.c:799 -#, c-format -msgid "Error in %s file %s: ERR=%s\n" +#: src/dird/ua_tree.c:77 +msgid "list the marked files in" msgstr "" -#: src/findlib/attribs.c:816 -#, c-format -msgid "Error in %s: ERR=%s\n" +#: src/dird/ua_tree.c:78 +msgid "mark dir/file to be restored recursively, wildcards allowed" msgstr "" -#: src/findlib/enable_priv.c:92 -msgid "AdjustTokenPrivileges set " +#: src/dird/ua_tree.c:79 +msgid "mark directory name to be restored (no files)" msgstr "" -#: src/findlib/create_file.c:124 -#, c-format -msgid "File skipped. Not newer: %s\n" +#: src/dird/ua_tree.c:80 src/dird/ua_tree.c:81 +msgid "print current working directory" msgstr "" -#: src/findlib/create_file.c:131 -#, c-format -msgid "File skipped. Not older: %s\n" +#: src/dird/ua_tree.c:82 +msgid "unmark dir/file to be restored recursively in dir" msgstr "" -#: src/findlib/create_file.c:141 -#, c-format -msgid "File skipped. Already exists: %s\n" +#: src/dird/ua_tree.c:83 +msgid "unmark directory name only no recursion" msgstr "" -#: src/findlib/create_file.c:167 -#, c-format -msgid "File %s already exists and could not be replaced. ERR=%s.\n" +#: src/dird/ua_tree.c:84 +msgid "quit and do not do restore" msgstr "" -#: src/findlib/create_file.c:218 src/findlib/create_file.c:282 -#: src/findlib/create_file.c:378 -#, c-format -msgid "bpkt already open fid=%d\n" +#: src/dird/ua_tree.c:106 +msgid "" +"\n" +"You are now entering file selection mode where you add (mark) and\n" +"remove (unmark) files to be restored. No files are initially added, unless\n" +"you used the \"all\" keyword on the command line.\n" +"Enter \"done\" to leave this mode.\n" +"\n" msgstr "" -#: src/findlib/create_file.c:226 src/filed/fd_plugins.c:1009 +#: src/dird/ua_tree.c:117 src/dird/ua_tree.c:847 #, c-format -msgid "Could not create %s: ERR=%s\n" +msgid "cwd is: %s\n" msgstr "" -#: src/findlib/create_file.c:241 +#: src/dird/ua_tree.c:126 src/dird/ua_tree.c:145 #, c-format -msgid "Cannot make fifo %s: ERR=%s\n" +msgid "Invalid command \"%s\". Enter \"done\" to exit.\n" msgstr "" -#: src/findlib/create_file.c:259 +#: src/dird/ua_tree.c:217 #, c-format -msgid "Cannot make node %s: ERR=%s\n" +msgid "" +"Something is wrong with the Delta sequence of %s, skiping new parts. Current " +"sequence is %d\n" msgstr "" -#: src/findlib/create_file.c:304 -#, c-format -msgid "Could not symlink %s -> %s: ERR=%s\n" +#: src/dird/ua_tree.c:389 src/dird/ua_tree.c:401 src/dird/ua_tree.c:418 +msgid "No files marked.\n" msgstr "" -#: src/findlib/create_file.c:329 src/findlib/create_file.c:342 -#, c-format -msgid "Could not restore file flags for file %s: ERR=%s\n" +#: src/dird/ua_tree.c:403 +msgid "1 file marked.\n" msgstr "" -#: src/findlib/create_file.c:333 src/findlib/create_file.c:350 +#: src/dird/ua_tree.c:405 #, c-format -msgid "Could not hard link %s -> %s: ERR=%s\n" +msgid "%s files marked.\n" msgstr "" -#: src/findlib/create_file.c:346 -#, c-format -msgid "Could not reset file flags for file %s: ERR=%s\n" +#: src/dird/ua_tree.c:433 +msgid "No directories marked.\n" msgstr "" -#: src/findlib/create_file.c:401 -#, c-format -msgid "Original file %s have been deleted: type=%d\n" +#: src/dird/ua_tree.c:435 +msgid "1 directory marked.\n" msgstr "" -#: src/findlib/create_file.c:413 +#: src/dird/ua_tree.c:437 #, c-format -msgid "Original file %s not saved: type=%d\n" +msgid "%s directories marked.\n" msgstr "" -#: src/findlib/create_file.c:416 +#: src/dird/ua_tree.c:458 #, c-format -msgid "Unknown file type %d; not restored: %s\n" +msgid "%s total files/dirs. %s marked to be restored.\n" msgstr "" -#: src/findlib/create_file.c:460 -#, c-format -msgid "Zero length filename: %s\n" +#: src/dird/ua_tree.c:469 +msgid "No file specification given.\n" msgstr "" -#: src/findlib/bfile.c:97 -msgid "Unix attributes" +#: src/dird/ua_tree.c:690 +#, c-format +msgid "Node %s has no children.\n" msgstr "" -#: src/findlib/bfile.c:99 -msgid "File data" +#: src/dird/ua_tree.c:783 +#, c-format +msgid "%d total files; %d marked to be restored; %s bytes.\n" msgstr "" -#: src/findlib/bfile.c:101 -msgid "MD5 digest" +#: src/dird/ua_tree.c:817 +msgid "Too few or too many arguments. Try using double quotes.\n" msgstr "" -#: src/findlib/bfile.c:103 -msgid "GZIP data" +#: src/dird/ua_tree.c:830 +msgid "Invalid path given.\n" msgstr "" -#: src/findlib/bfile.c:105 -msgid "Compressed data" +#: src/dird/ua_tree.c:866 src/dird/ua_tree.c:878 +msgid "No files unmarked.\n" msgstr "" -#: src/findlib/bfile.c:107 -msgid "Extended attributes" +#: src/dird/ua_tree.c:880 +msgid "1 file unmarked.\n" msgstr "" -#: src/findlib/bfile.c:109 -msgid "Sparse data" +#: src/dird/ua_tree.c:883 +#, c-format +msgid "%s files unmarked.\n" msgstr "" -#: src/findlib/bfile.c:111 -msgid "GZIP sparse data" +#: src/dird/ua_tree.c:894 src/dird/ua_tree.c:911 +msgid "No directories unmarked.\n" msgstr "" -#: src/findlib/bfile.c:113 -msgid "Compressed sparse data" +#: src/dird/ua_tree.c:913 +msgid "1 directory unmarked.\n" msgstr "" -#: src/findlib/bfile.c:115 -msgid "Program names" +#: src/dird/ua_tree.c:915 +#, c-format +msgid "%d directories unmarked.\n" msgstr "" -#: src/findlib/bfile.c:117 -msgid "Program data" +#: src/dird/inc_conf.c:299 +#, c-format +msgid "Expected a strip path positive integer, got:%s:" msgstr "" -#: src/findlib/bfile.c:119 -msgid "SHA1 digest" +#: src/dird/inc_conf.c:319 +#, c-format +msgid "Expected a FileSet option keyword, got:%s:" msgstr "" -#: src/findlib/bfile.c:121 -msgid "Win32 data" +#: src/dird/inc_conf.c:352 +msgid "Old style Include/Exclude not supported\n" msgstr "" -#: src/findlib/bfile.c:123 -msgid "Win32 GZIP data" +#: src/dird/inc_conf.c:380 src/dird/inc_conf.c:726 src/dird/dird_conf.c:2044 +#, c-format +msgid "Expecting keyword, got: %s\n" msgstr "" -#: src/findlib/bfile.c:125 -msgid "Win32 compressed data" +#: src/dird/inc_conf.c:398 src/dird/inc_conf.c:741 src/dird/dird_conf.c:2061 +#, c-format +msgid "Keyword %s not permitted in this resource" msgstr "" -#: src/findlib/bfile.c:127 -msgid "MacOS Fork data" +#: src/dird/inc_conf.c:451 +#, c-format +msgid "Regex compile error. ERR=%s\n" msgstr "" -#: src/findlib/bfile.c:129 -msgid "HFS+ attribs" +#: src/dird/inc_conf.c:472 +#, c-format +msgid "Expected a regex string, got: %s\n" msgstr "" -#: src/findlib/bfile.c:131 -msgid "Standard Unix ACL attribs" +#: src/dird/inc_conf.c:546 +#, c-format +msgid "Expected a wild-card string, got: %s\n" msgstr "" -#: src/findlib/bfile.c:133 -msgid "Default Unix ACL attribs" +#: src/dird/inc_conf.c:569 +#, c-format +msgid "Expected an fstype string, got: %s\n" msgstr "" -#: src/findlib/bfile.c:135 -msgid "SHA256 digest" +#: src/dird/inc_conf.c:580 +msgid "ExcludeDirContaining directive not permitted in Exclude.\n" msgstr "" -#: src/findlib/bfile.c:137 -msgid "SHA512 digest" +#: src/dird/inc_conf.c:607 +#, c-format +msgid "Expected an drivetype string, got: %s\n" msgstr "" -#: src/findlib/bfile.c:139 -msgid "Signed digest" +#: src/dird/inc_conf.c:631 src/dird/inc_conf.c:674 +#, c-format +msgid "Backslash found. Use forward slashes or quote the string.: %s\n" msgstr "" -#: src/findlib/bfile.c:141 -msgid "Encrypted File data" +#: src/dird/inc_conf.c:646 src/dird/inc_conf.c:689 +#, c-format +msgid "Expected a filename, got: %s" msgstr "" -#: src/findlib/bfile.c:143 -msgid "Encrypted Win32 data" +#: src/dird/inc_conf.c:663 +msgid "Plugin directive not permitted in Exclude\n" msgstr "" -#: src/findlib/bfile.c:145 -msgid "Encrypted session data" +#: src/dird/inc_conf.c:706 +msgid "Options section not permitted in Exclude\n" msgstr "" -#: src/findlib/bfile.c:147 -msgid "Encrypted GZIP data" +#: src/dird/inc_conf.c:711 src/dird/dird_conf.c:2030 +#, c-format +msgid "Expecting open brace. Got %s" msgstr "" -#: src/findlib/bfile.c:149 -msgid "Encrypted compressed data" +#: src/dird/inc_conf.c:766 +#, c-format +msgid "Expected a FileSet keyword, got: %s" msgstr "" -#: src/findlib/bfile.c:151 -msgid "Encrypted Win32 GZIP data" +#: src/dird/recycle.c:57 +#, c-format +msgid "Recycled volume \"%s\"\n" msgstr "" -#: src/findlib/bfile.c:153 -msgid "Encrypted Win32 Compressed data" +#: src/dird/ua_server.c:56 +#, c-format +msgid "Cannot create UA thread: %s\n" msgstr "" -#: src/findlib/bfile.c:155 -msgid "Encrypted MacOS fork data" +#: src/dird/ua_server.c:146 +msgid "You have messages.\n" msgstr "" -#: src/findlib/bfile.c:157 -msgid "AIX Specific ACL attribs" +#: src/dird/newvol.c:77 +#, c-format +msgid "Illegal character in Volume name \"%s\"\n" msgstr "" -#: src/findlib/bfile.c:159 -msgid "Darwin Specific ACL attribs" +#: src/dird/newvol.c:90 +#, c-format +msgid "Created new Volume=\"%s\", Pool=\"%s\", MediaType=\"%s\" in catalog.\n" msgstr "" -#: src/findlib/bfile.c:161 -msgid "FreeBSD Specific Default ACL attribs" +#: src/dird/newvol.c:119 +#, c-format +msgid "SQL failed, but ignored. ERR=%s\n" msgstr "" -#: src/findlib/bfile.c:163 -msgid "FreeBSD Specific Access ACL attribs" +#: src/dird/newvol.c:129 +#, c-format +msgid "Wanted to create Volume \"%s\", but it already exists. Trying again.\n" msgstr "" -#: src/findlib/bfile.c:165 -msgid "HPUX Specific ACL attribs" +#: src/dird/newvol.c:138 +msgid "Too many failures. Giving up creating Volume name.\n" msgstr "" -#: src/findlib/bfile.c:167 -msgid "Irix Specific Default ACL attribs" +#: src/dird/msgchan.c:66 +#, c-format +msgid "Connecting to Storage daemon %s at %s:%d ...\n" msgstr "" -#: src/findlib/bfile.c:169 -msgid "Irix Specific Access ACL attribs" +#: src/dird/msgchan.c:230 +#, c-format +msgid "Storage daemon rejected Job command: %s\n" msgstr "" -#: src/findlib/bfile.c:171 -msgid "Linux Specific Default ACL attribs" +#: src/dird/msgchan.c:238 +#, c-format +msgid " " msgstr "" -#: src/findlib/find.c:237 +#: src/dird/dird_conf.c:584 #, c-format -msgid "Plugin: \"%s\" not found.\n" +msgid "Console: name=%s SSL=%d\n" msgstr "" -#: src/findlib/match.c:210 src/tools/testfind.c:654 src/filed/job.c:1460 +#: src/dird/dird_conf.c:589 #, c-format -msgid "Unknown include/exclude option: %c\n" +msgid "Counter: name=%s min=%d max=%d cur=%d wrapcntr=%s\n" msgstr "" -#: src/findlib/find_one.c:227 +#: src/dird/dird_conf.c:594 #, c-format -msgid " NODUMP flag set - will not process %s\n" +msgid "Counter: name=%s min=%d max=%d\n" msgstr "" -#: src/findlib/find_one.c:248 +#: src/dird/dird_conf.c:608 #, c-format -msgid "Cannot stat file %s: ERR=%s\n" +msgid "Client: name=%s address=%s FDport=%d MaxJobs=%u\n" msgstr "" -#: src/findlib/find_one.c:253 +#: src/dird/dird_conf.c:611 #, c-format -msgid "%s mtime changed during backup.\n" +msgid " JobRetention=%s FileRetention=%s AutoPrune=%d\n" msgstr "" -#: src/findlib/find_one.c:260 +#: src/dird/dird_conf.c:619 src/dird/dird_conf.c:691 #, c-format -msgid "%s ctime changed during backup.\n" +msgid " MaximumBandwidth=%lld\n" msgstr "" -#: src/findlib/find_one.c:268 src/findlib/find_one.c:276 +#: src/dird/dird_conf.c:631 #, c-format -msgid "%s size changed during backup.\n" +msgid "" +"Device: name=%s ok=%d num_writers=%d max_writers=%d\n" +" reserved=%d open=%d append=%d read=%d labeled=%d offline=%d autochgr=" +"%d\n" +" poolid=%s volname=%s MediaType=%s\n" msgstr "" -#: src/findlib/find_one.c:403 +#: src/dird/dird_conf.c:645 #, c-format -msgid "Top level directory \"%s\" has unlisted fstype \"%s\"\n" +msgid "" +"Storage: name=%s address=%s SDport=%d MaxJobs=%u\n" +" DeviceName=%s MediaType=%s StorageId=%s\n" msgstr "" -#: src/findlib/find_one.c:418 +#: src/dird/dird_conf.c:661 #, c-format -msgid "Top level directory \"%s\" has an unlisted drive type \"%s\"\n" +msgid "" +"Catalog: name=%s address=%s DBport=%d db_name=%s\n" +" db_driver=%s db_user=%s MutliDBConn=%d\n" msgstr "" -#: src/cats/sql_create.c:101 +#: src/dird/dird_conf.c:674 #, c-format -msgid "Create DB Job record %s failed. ERR=%s\n" +msgid "%s: name=%s JobType=%d level=%s Priority=%d Enabled=%d\n" msgstr "" -#: src/cats/sql_create.c:145 -#, c-format -msgid "Create JobMedia record %s failed: ERR=%s\n" +#: src/dird/dird_conf.c:675 +msgid "JobDefs" msgstr "" -#: src/cats/sql_create.c:154 +#: src/dird/dird_conf.c:679 #, c-format -msgid "Update Media record %s failed: ERR=%s\n" +msgid "" +" MaxJobs=%u Resched=%d Times=%d Interval=%s Spool=%d WritePartAfterJob=" +"%d\n" msgstr "" -#: src/cats/sql_create.c:189 +#: src/dird/dird_conf.c:685 #, c-format -msgid "pool record %s already exists\n" +msgid " SpoolSize=%s\n" msgstr "" -#: src/cats/sql_create.c:221 +#: src/dird/dird_conf.c:688 #, c-format -msgid "Create db Pool record %s failed: ERR=%s\n" +msgid " Accurate=%d\n" msgstr "" -#: src/cats/sql_create.c:254 +#: src/dird/dird_conf.c:695 #, c-format -msgid "Device record %s already exists\n" +msgid " SelectionType=%d\n" msgstr "" -#: src/cats/sql_create.c:271 +#: src/dird/dird_conf.c:710 #, c-format -msgid "Create db Device record %s failed: ERR=%s\n" +msgid " --> Where=%s\n" msgstr "" -#: src/cats/sql_create.c:306 +#: src/dird/dird_conf.c:713 #, c-format -msgid "More than one Storage record!: %d\n" +msgid " --> RegexWhere=%s\n" msgstr "" -#: src/cats/sql_create.c:311 +#: src/dird/dird_conf.c:716 #, c-format -msgid "error fetching Storage row: %s\n" +msgid " --> Bootstrap=%s\n" msgstr "" -#: src/cats/sql_create.c:332 +#: src/dird/dird_conf.c:719 #, c-format -msgid "Create DB Storage record %s failed. ERR=%s\n" +msgid " --> WriteBootstrap=%s\n" msgstr "" -#: src/cats/sql_create.c:366 +#: src/dird/dird_conf.c:722 #, c-format -msgid "mediatype record %s already exists\n" +msgid " --> PluginOptions=%s\n" msgstr "" -#: src/cats/sql_create.c:383 +#: src/dird/dird_conf.c:725 #, c-format -msgid "Create db mediatype record %s failed: ERR=%s\n" +msgid " --> MaxRunTime=%u\n" msgstr "" -#: src/cats/sql_create.c:424 +#: src/dird/dird_conf.c:728 #, c-format -msgid "Volume \"%s\" already exists.\n" +msgid " --> MaxWaitTime=%u\n" msgstr "" -#: src/cats/sql_create.c:470 +#: src/dird/dird_conf.c:731 #, c-format -msgid "Create DB Media record %s failed. ERR=%s\n" +msgid " --> MaxStartDelay=%u\n" msgstr "" -#: src/cats/sql_create.c:521 +#: src/dird/dird_conf.c:734 #, c-format -msgid "More than one Client!: %d\n" +msgid " --> MaxRunSchedTime=%u\n" msgstr "" -#: src/cats/sql_create.c:526 +#: src/dird/dird_conf.c:746 #, c-format -msgid "error fetching Client row: %s\n" +msgid " --> Base %s\n" msgstr "" -#: src/cats/sql_create.c:554 +#: src/dird/dird_conf.c:784 #, c-format -msgid "Create DB Client record %s failed. ERR=%s\n" +msgid " --> Run=%s\n" msgstr "" -#: src/cats/sql_create.c:589 src/cats/sql_get.c:251 +#: src/dird/dird_conf.c:788 #, c-format -msgid "More than one Path!: %s for path: %s\n" +msgid " --> SelectionPattern=%s\n" msgstr "" -#: src/cats/sql_create.c:596 src/cats/sql_get.c:205 src/cats/sql_get.c:258 -#: src/cats/sql_get.c:640 src/cats/sql_get.c:722 src/cats/sql_get.c:1039 -#: src/cats/sql.c:340 src/cats/sql.c:347 src/cats/postgresql.c:165 +#: src/dird/dird_conf.c:802 #, c-format -msgid "error fetching row: %s\n" +msgid "FileSet: name=%s\n" msgstr "" -#: src/cats/sql_create.c:621 +#: src/dird/dird_conf.c:896 src/dird/dird_conf.c:981 #, c-format -msgid "Create db Path record %s failed. ERR=%s\n" +msgid "Schedule: name=%s\n" msgstr "" -#: src/cats/sql_create.c:666 +#: src/dird/dird_conf.c:901 #, c-format -msgid "Create DB Counters record %s failed. ERR=%s\n" +msgid " --> Run Level=%s\n" msgstr "" -#: src/cats/sql_create.c:704 +#: src/dird/dird_conf.c:903 #, c-format -msgid "More than one FileSet!: %d\n" +msgid " MaxRunSchedTime=%u\n" msgstr "" -#: src/cats/sql_create.c:709 +#: src/dird/dird_conf.c:906 #, c-format -msgid "error fetching FileSet row: ERR=%s\n" +msgid " Priority=%u\n" msgstr "" -#: src/cats/sql_create.c:740 -#, c-format -msgid "Create DB FileSet record %s failed. ERR=%s\n" +#: src/dird/dird_conf.c:908 +msgid " hour=" msgstr "" -#: src/cats/sql_create.c:989 -#, c-format -msgid "Create db File record %s failed. ERR=%s" +#: src/dird/dird_conf.c:917 +msgid " mday=" msgstr "" -#: src/cats/sql_create.c:1015 -#, c-format -msgid "More than one Filename! %s for file: %s\n" +#: src/dird/dird_conf.c:926 +msgid " month=" msgstr "" -#: src/cats/sql_create.c:1021 -#, c-format -msgid "Error fetching row for file=%s: ERR=%s\n" +#: src/dird/dird_conf.c:935 +msgid " wday=" msgstr "" -#: src/cats/sql_create.c:1038 -#, c-format -msgid "Create db Filename record %s failed. ERR=%s\n" +#: src/dird/dird_conf.c:944 +msgid " wom=" msgstr "" -#: src/cats/sql_create.c:1058 -#, c-format -msgid "Attempt to put non-attributes into catalog. Stream=%d\n" +#: src/dird/dird_conf.c:953 +msgid " woy=" msgstr "" -#: src/cats/sql_create.c:1074 -msgid "Cannot Copy/Migrate job using BaseJob.\n" +#: src/dird/dird_conf.c:962 +#, c-format +msgid " mins=%d\n" msgstr "" -#: src/cats/sql_create.c:1166 src/cats/sql_get.c:1136 -msgid "ERR=JobIds are empty\n" +#: src/dird/dird_conf.c:964 src/dird/dird_conf.c:968 src/dird/dird_conf.c:972 +msgid " --> " msgstr "" -#: src/cats/sql_create.c:1219 +#: src/dird/dird_conf.c:989 #, c-format -msgid "Create db Object record %s failed. ERR=%s" +msgid "Pool: name=%s PoolType=%s\n" msgstr "" -#: src/cats/sql_get.c:151 +#: src/dird/dird_conf.c:991 #, c-format -msgid "Error fetching row: %s\n" +msgid " use_cat=%d use_once=%d cat_files=%d\n" msgstr "" -#: src/cats/sql_get.c:158 +#: src/dird/dird_conf.c:994 #, c-format -msgid "get_file_record want 1 got rows=%d PathId=%s FilenameId=%s\n" +msgid " max_vols=%d auto_prune=%d VolRetention=%s\n" msgstr "" -#: src/cats/sql_get.c:166 +#: src/dird/dird_conf.c:997 #, c-format -msgid "File record for PathId=%s FilenameId=%s not found.\n" +msgid " VolUse=%s recycle=%d LabelFormat=%s\n" msgstr "" -#: src/cats/sql_get.c:172 -msgid "File record not found in Catalog.\n" +#: src/dird/dird_conf.c:1001 +#, c-format +msgid " CleaningPrefix=%s LabelType=%d\n" msgstr "" -#: src/cats/sql_get.c:199 +#: src/dird/dird_conf.c:1003 #, c-format -msgid "More than one Filename!: %s for file: %s\n" +msgid " RecyleOldest=%d PurgeOldest=%d ActionOnPurge=%d\n" msgstr "" -#: src/cats/sql_get.c:209 +#: src/dird/dird_conf.c:1007 #, c-format -msgid "Get DB Filename record %s found bad record: %d\n" +msgid " MaxVolJobs=%d MaxVolFiles=%d MaxVolBytes=%s\n" msgstr "" -#: src/cats/sql_get.c:215 +#: src/dird/dird_conf.c:1011 #, c-format -msgid "Filename record: %s not found.\n" +msgid " MigTime=%s MigHiBytes=%s MigLoBytes=%s\n" msgstr "" -#: src/cats/sql_get.c:219 +#: src/dird/dird_conf.c:1015 #, c-format -msgid "Filename record: %s not found in Catalog.\n" +msgid " JobRetention=%s FileRetention=%s\n" msgstr "" -#: src/cats/sql_get.c:262 +#: src/dird/dird_conf.c:1019 #, c-format -msgid "Get DB path record %s found bad record: %s\n" +msgid " NextPool=%s\n" msgstr "" -#: src/cats/sql_get.c:275 +#: src/dird/dird_conf.c:1022 #, c-format -msgid "Path record: %s not found.\n" +msgid " RecyclePool=%s\n" msgstr "" -#: src/cats/sql_get.c:279 +#: src/dird/dird_conf.c:1025 #, c-format -msgid "Path record: %s not found in Catalog.\n" +msgid " ScratchPool=%s\n" msgstr "" -#: src/cats/sql_get.c:318 +#: src/dird/dird_conf.c:1028 #, c-format -msgid "No Job found for JobId %s\n" +msgid " Catalog=%s\n" msgstr "" -#: src/cats/sql_get.c:391 src/cats/sql_get.c:448 +#: src/dird/dird_conf.c:1048 #, c-format -msgid "No volumes found for JobId=%d\n" +msgid "Messages: name=%s\n" msgstr "" -#: src/cats/sql_get.c:397 src/cats/sql_get.c:459 +#: src/dird/dird_conf.c:1050 #, c-format -msgid "Error fetching row %d: ERR=%s\n" +msgid " mailcmd=%s\n" msgstr "" -#: src/cats/sql_get.c:411 +#: src/dird/dird_conf.c:1052 #, c-format -msgid "No Volume for JobId %d found in Catalog.\n" +msgid " opcmd=%s\n" msgstr "" -#: src/cats/sql_get.c:552 +#: src/dird/dird_conf.c:1056 src/qt-console/tray-monitor/tray_conf.cpp:187 #, c-format -msgid "Pool id select failed: ERR=%s\n" +msgid "Unknown resource type %d in dump_resource.\n" msgstr "" -#: src/cats/sql_get.c:589 +#: src/dird/dird_conf.c:1393 src/qt-console/tray-monitor/tray_conf.cpp:245 #, c-format -msgid "Client id select failed: ERR=%s\n" +msgid "Unknown resource type %d in free_resource.\n" msgstr "" -#: src/cats/sql_get.c:635 +#: src/dird/dird_conf.c:1471 #, c-format -msgid "More than one Pool!: %s\n" +msgid "Cannot find Pool resource %s\n" msgstr "" -#: src/cats/sql_get.c:679 -msgid "Pool record not found in Catalog.\n" +#: src/dird/dird_conf.c:1482 +#, c-format +msgid "Cannot find Console resource %s\n" msgstr "" -#: src/cats/sql_get.c:717 +#: src/dird/dird_conf.c:1504 #, c-format -msgid "More than one Client!: %s\n" +msgid "Cannot find Job resource %s\n" msgstr "" -#: src/cats/sql_get.c:734 src/cats/sql_get.c:738 -msgid "Client record not found in Catalog.\n" +#: src/dird/dird_conf.c:1555 +#, c-format +msgid "Cannot find Counter resource %s\n" msgstr "" -#: src/cats/sql_get.c:765 +#: src/dird/dird_conf.c:1563 src/filed/filed_conf.c:465 #, c-format -msgid "More than one Counter!: %d\n" +msgid "Cannot find Client resource %s\n" msgstr "" -#: src/cats/sql_get.c:770 +#: src/dird/dird_conf.c:1576 #, c-format -msgid "error fetching Counter row: %s\n" +msgid "Cannot find Schedule resource %s\n" msgstr "" -#: src/cats/sql_get.c:790 +#: src/dird/dird_conf.c:1581 src/dird/dird_conf.c:1641 +#: src/qt-console/tray-monitor/tray_conf.cpp:302 +#: src/qt-console/tray-monitor/tray_conf.cpp:340 #, c-format -msgid "Counter record: %s not found in Catalog.\n" +msgid "Unknown resource type %d in save_resource.\n" msgstr "" -#: src/cats/sql_get.c:830 +#: src/dird/dird_conf.c:1656 #, c-format -msgid "Error got %s FileSets but expected only one!\n" +msgid "Name item is required in %s resource, but not found.\n" msgstr "" -#: src/cats/sql_get.c:835 +#: src/dird/dird_conf.c:1669 #, c-format -msgid "FileSet record \"%s\" not found.\n" +msgid "Inserting %s res: %s index=%d pass=%d\n" msgstr "" -#: src/cats/sql_get.c:845 -msgid "FileSet record not found in Catalog.\n" +#: src/dird/dird_conf.c:1682 +#, c-format +msgid "Expected one of: %s, got: %s" msgstr "" -#: src/cats/sql_get.c:941 +#: src/dird/dird_conf.c:1754 #, c-format -msgid "Media id select failed: ERR=%s\n" +msgid "Expected a Migration Job Type keyword, got: %s" msgstr "" -#: src/cats/sql_get.c:979 +#: src/dird/dird_conf.c:1780 #, c-format -msgid "query dbids failed: ERR=%s\n" +msgid "Expected a Job Type keyword, got: %s" msgstr "" -#: src/cats/sql_get.c:1034 +#: src/dird/dird_conf.c:1804 #, c-format -msgid "More than one Volume!: %s\n" +msgid "Expected a Job Level keyword, got: %s" msgstr "" -#: src/cats/sql_get.c:1090 +#: src/dird/dird_conf.c:1824 #, c-format -msgid "Media record MediaId=%s not found.\n" +msgid "Expected a Restore replacement option, got: %s" msgstr "" -#: src/cats/sql_get.c:1093 +#: src/dird/ua_query.c:61 src/findlib/file_create.c:265 +#: src/findlib/file_create.c:353 #, c-format -msgid "Media record for Volume \"%s\" not found.\n" +msgid "Could not open %s: ERR=%s\n" +msgstr "" + +#: src/dird/ua_query.c:66 +msgid "Available queries:\n" +msgstr "" + +#: src/dird/ua_query.c:73 +msgid "Choose a query" msgstr "" -#: src/cats/sql_get.c:1100 +#: src/dird/ua_query.c:87 +msgid "Could not find query.\n" +msgstr "" + +#: src/dird/ua_query.c:105 +msgid "Too many prompts in query, max is 9.\n" +msgstr "" + +#: src/dird/ua_query.c:208 #, c-format -msgid "Media record for MediaId=%u not found in Catalog.\n" +msgid "Warning prompt %d missing.\n" msgstr "" -#: src/cats/sql_get.c:1103 +#: src/dird/ua_query.c:253 +msgid "" +"Entering SQL query mode.\n" +"Terminate each query with a semicolon.\n" +"Terminate query mode with a blank line.\n" +msgstr "" + +#: src/dird/ua_query.c:256 src/dird/ua_query.c:272 +msgid "Enter SQL query: " +msgstr "" + +#: src/dird/ua_query.c:274 +msgid "Add to SQL query: " +msgstr "" + +#: src/dird/ua_query.c:277 +msgid "End query mode.\n" +msgstr "" + +#: src/dird/dird.c:124 #, c-format -msgid "Media record for Vol=%s not found in Catalog.\n" +msgid "" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: bacula-dir [-f -s] [-c config_file] [-d debug_level] [config_file]\n" +" -c set configuration file to file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -f run in foreground (for debugging)\n" +" -g groupid\n" +" -m print kaboom output (for debugging)\n" +" -r run now\n" +" -s no signals\n" +" -t test - read configuration and exit\n" +" -u userid\n" +" -v verbose user messages\n" +" -? print this message.\n" +"\n" msgstr "" -#: src/cats/sql_find.c:98 src/cats/sql_find.c:127 src/cats/sql_find.c:182 -#, c-format -msgid "" -"Query error for start time request: ERR=%s\n" -"CMD=%s\n" +#: src/dird/dird.c:503 +msgid "Too many open reload requests. Request ignored.\n" msgstr "" -#: src/cats/sql_find.c:104 src/cats/sql_find.c:188 -msgid "No prior Full backup Job record found.\n" +#: src/dird/dird.c:518 +msgid "Out of reload table entries. Giving up.\n" msgstr "" -#: src/cats/sql_find.c:116 -#, c-format -msgid "Unknown level=%d\n" +#: src/dird/dird.c:521 +msgid "Resetting previous configuration.\n" msgstr "" -#: src/cats/sql_find.c:133 +#: src/dird/dird.c:585 #, c-format msgid "" -"No Job record found: ERR=%s\n" -"CMD=%s\n" +"No Director resource defined in %s\n" +"Without that I don't know who I am :-(\n" msgstr "" -#: src/cats/sql_find.c:291 +#: src/dird/dird.c:593 src/filed/filed.c:328 #, c-format -msgid "Unknown Job level=%d\n" +msgid "No Messages resource defined in %s\n" msgstr "" -#: src/cats/sql_find.c:301 +#: src/dird/dird.c:598 #, c-format -msgid "No Job found for: %s.\n" +msgid "Only one Director resource permitted in %s\n" msgstr "" -#: src/cats/sql_find.c:312 +#: src/dird/dird.c:655 #, c-format -msgid "No Job found for: %s\n" +msgid "No Job records defined in %s\n" msgstr "" -#: src/cats/sql_find.c:393 +#: src/dird/dird.c:713 src/dird/dird.c:726 #, c-format -msgid "Request for Volume item %d greater than max %d or less than 1\n" +msgid "Hey something is wrong. p=0x%lu\n" msgstr "" -#: src/cats/sql_find.c:408 +#: src/dird/dird.c:787 #, c-format -msgid "No Volume record found for item %d.\n" +msgid "\"%s\" directive in Job \"%s\" resource is required, but not found.\n" msgstr "" -#: src/cats/sqlite.c:166 src/cats/ingres.c:255 src/cats/postgresql.c:210 -#: src/cats/dbi.c:228 src/cats/mysql.c:164 -#, c-format -msgid "Unable to initialize DB lock. ERR=%s\n" +#: src/dird/dird.c:794 +msgid "Too many items in Job resource\n" msgstr "" -#: src/cats/sqlite.c:181 +#: src/dird/dird.c:798 #, c-format -msgid "Database %s does not exist, please create it.\n" +msgid "No storage specified in Job \"%s\" nor in Pool.\n" msgstr "" -#: src/cats/sqlite.c:203 +#: src/dird/dird.c:822 #, c-format -msgid "Unable to open Database=%s. ERR=%s\n" -msgstr "" - -#: src/cats/sqlite.c:204 -msgid "unknown" +msgid "\"TLS Certificate\" file not defined for Console \"%s\" in %s.\n" msgstr "" -#: src/cats/sqlite.c:462 src/cats/ingres.c:496 src/cats/postgresql.c:506 -#: src/cats/postgresql.c:553 src/cats/dbi.c:631 src/cats/cats.c:149 -#: src/cats/mysql.c:393 +#: src/dird/dird.c:828 #, c-format -msgid "Query failed: %s: ERR=%s\n" +msgid "\"TLS Key\" file not defined for Console \"%s\" in %s.\n" msgstr "" -#: src/cats/ingres.c:87 -msgid "Failed to allocate space for query filter.\n" +#: src/dird/dird.c:835 +#, c-format +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Console \"%s\" in %s. At least one CA certificate store is required when " +"using \"TLS Verify Peer\".\n" msgstr "" -#: src/cats/ingres.c:108 -msgid "Failed to allocate space for query filters.\n" +#: src/dird/dird.c:852 src/dird/dird.c:892 src/filed/filed.c:391 +#, c-format +msgid "Failed to initialize TLS context for File daemon \"%s\" in %s.\n" msgstr "" -#: src/cats/ingres.c:267 +#: src/dird/dird.c:875 #, c-format msgid "" -"Unable to connect to Ingres server.\n" -"Database=%s User=%s\n" -"It is probably not running or your password is incorrect.\n" -msgstr "" - -#: src/cats/ingres.c:1087 -msgid "A user name for Ingres must be supplied.\n" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"File daemon \"%s\" in %s.\n" msgstr "" -#: src/cats/sql.c:184 +#: src/dird/dird.c:916 #, c-format msgid "" -"Potential performance problem:\n" -"max_connections=%d set for %s database \"%s\" should be larger than " -"Director's MaxConcurrentJobs=%d\n" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Storage \"%s\" in %s.\n" msgstr "" -#: src/cats/sql.c:229 +#: src/dird/dird.c:971 src/dird/dird.c:973 #, c-format -msgid "" -"query %s failed:\n" -"%s\n" +msgid "Could not open Catalog \"%s\", database \"%s\".\n" msgstr "" -#: src/cats/sql.c:251 +#: src/dird/dird.c:976 src/tools/cats_test.c:365 #, c-format -msgid "" -"insert %s failed:\n" -"%s\n" +msgid "%s" msgstr "" -#: src/cats/sql.c:261 +#: src/dird/dird.c:1055 #, c-format -msgid "Insertion problem: affected_rows=%s\n" +msgid "Could not create storage record for %s\n" msgstr "" -#: src/cats/sql.c:282 +#: src/dird/dird.c:1063 #, c-format +msgid "Could not update storage record for %s\n" +msgstr "" + +#: src/dird/ua_purge.c:84 msgid "" -"update %s failed:\n" -"%s\n" +"\n" +"This command can be DANGEROUS!!!\n" +"\n" +"It purges (deletes) all Files from a Job,\n" +"JobId, Client or Volume; or it purges (deletes)\n" +"all Jobs from a Client or Volume without regard\n" +"to retention periods. Normally you should use the\n" +"PRUNE command, which respects retention periods.\n" +msgstr "" + +#: src/dird/ua_purge.c:152 +msgid "Choose item to purge" msgstr "" -#: src/cats/sql.c:292 +#: src/dird/ua_purge.c:199 #, c-format -msgid "Update failed: affected_rows=%s for %s\n" +msgid "Begin purging files for Client \"%s\"\n" msgstr "" -#: src/cats/sql.c:314 +#: src/dird/ua_purge.c:208 src/dird/ua_purge.c:258 #, c-format -msgid "" -"delete %s failed:\n" -"%s\n" +msgid "No Files found for client %s to purge from %s catalog.\n" msgstr "" -#: src/cats/sql.c:408 +#: src/dird/ua_purge.c:211 #, c-format -msgid "Path length is zero. File=%s\n" +msgid "Files for %d Jobs for client \"%s\" purged from %s catalog.\n" msgstr "" -#: src/cats/sql.c:603 -msgid "No results to list.\n" +#: src/dird/ua_purge.c:249 +#, c-format +msgid "Begin purging jobs from Client \"%s\"\n" msgstr "" -#: src/cats/sql.c:721 -msgid "Could not init database batch connection\n" +#: src/dird/ua_purge.c:261 +#, c-format +msgid "%d Jobs for client %s purged from %s catalog.\n" msgstr "" -#: src/cats/sql.c:727 +#: src/dird/ua_purge.c:459 #, c-format -msgid "Could not open database \"%s\": ERR=%s\n" +msgid "" +"\n" +"Volume \"%s\" has VolStatus \"%s\" and cannot be purged.\n" +"The VolStatus must be: Append, Full, Used, or Error to be purged.\n" msgstr "" -#: src/cats/postgresql.c:181 +#: src/dird/ua_purge.c:487 #, c-format -msgid "Encoding error for database \"%s\". Wanted SQL_ASCII, got %s\n" +msgid "%d File%s on Volume \"%s\" purged from catalog.\n" msgstr "" -#: src/cats/postgresql.c:246 +#: src/dird/ua_purge.c:537 #, c-format msgid "" -"Unable to connect to PostgreSQL server. Database=%s User=%s\n" -"Possible causes: SQL server not running; password incorrect; max_connections " -"exceeded.\n" +"There are no more Jobs associated with Volume \"%s\". Marking it purged.\n" msgstr "" -#: src/cats/postgresql.c:350 -msgid "PQescapeStringConn returned non-zero.\n" +#: src/dird/ua_purge.c:606 +msgid "Can't update volume size in the catalog\n" msgstr "" -#: src/cats/postgresql.c:368 -msgid "PQescapeByteaConn returned NULL.\n" +#: src/dird/ua_purge.c:608 +#, c-format +msgid "The volume \"%s\" has been truncated\n" msgstr "" -#: src/cats/postgresql.c:399 -msgid "PQunescapeByteaConn returned NULL.\n" +#: src/dird/ua_purge.c:610 +#, c-format +msgid "Unable to truncate volume \"%s\"\n" msgstr "" -#: src/cats/postgresql.c:813 +#: src/dird/ua_purge.c:703 #, c-format -msgid "error fetching currval: %s\n" +msgid "No Volumes found to perform %s action.\n" msgstr "" -#: src/cats/postgresql.c:1004 src/cats/dbi.c:1277 +#: src/dird/ua_purge.c:771 #, c-format -msgid "error starting batch mode: %s" +msgid "Unable move recycled Volume in full Pool \"%s\" MaxVols=%d\n" msgstr "" -#: src/cats/postgresql.c:1034 src/cats/postgresql.c:1041 +#: src/dird/ua_purge.c:785 #, c-format -msgid "error ending batch mode: %s" +msgid "All records pruned from Volume \"%s\"; marking it \"Purged\"\n" msgstr "" -#: src/cats/postgresql.c:1088 +#: src/dird/ua_purge.c:790 #, c-format -msgid "error copying in batch mode: %s" +msgid "Cannot purge Volume with VolStatus=%s\n" msgstr "" -#: src/cats/postgresql.c:1110 -msgid "A user name for PostgreSQL must be supplied.\n" +#: src/dird/ua_prune.c:116 +msgid "Choose item to prune" msgstr "" -#: src/cats/sql_list.c:59 +#: src/dird/ua_prune.c:172 #, c-format -msgid "Query failed: %s\n" +msgid "Cannot prune Volume \"%s\" because it is archived.\n" msgstr "" -#: src/cats/sql_list.c:275 -msgid "These JobIds have copies as follows:\n" +#: src/dird/ua_prune.c:214 +msgid "Pruned Jobs from JobHisto catalog.\n" msgstr "" -#: src/cats/sql_list.c:277 -msgid "The catalog contains copies as follows:\n" +#: src/dird/ua_prune.c:302 +msgid "Begin pruning Files.\n" msgstr "" -#: src/cats/dbi.c:117 -#, c-format -msgid "Unknown database type: %s\n" +#: src/dird/ua_prune.c:317 +msgid "No Files found to prune.\n" msgstr "" -#: src/cats/dbi.c:242 +#: src/dird/ua_prune.c:340 #, c-format -msgid "" -"Unable to locate the DBD drivers to DBI interface in: \n" -"db_driverdir=%s. It is probaly not found any drivers\n" +msgid "Pruned Files from %s Jobs for client %s from catalog.\n" msgstr "" -#: src/cats/dbi.c:299 +#: src/dird/ua_prune.c:486 #, c-format -msgid "" -"Unable to connect to DBI interface. Type=%s Database=%s User=%s\n" -"Possible causes: SQL server not running; password incorrect; max_connections " -"exceeded.\n" +msgid "Begin pruning Jobs older than %s.\n" msgstr "" -#: src/cats/dbi.c:1439 +#: src/dird/ua_prune.c:597 #, c-format -msgid "error inserting batch mode: %s" +msgid "Pruned %d %s for client %s from catalog.\n" msgstr "" -#: src/cats/dbi.c:1456 -msgid "Driver type not specified in Catalog resource.\n" +#: src/dird/ua_prune.c:598 +msgid "Jobs" msgstr "" -#: src/cats/dbi.c:1460 -msgid "Invalid driver type, must be \"dbi:\"\n" +#: src/dird/ua_prune.c:600 +msgid "No Jobs found to prune.\n" msgstr "" -#: src/cats/dbi.c:1464 -msgid "A user name for DBI must be supplied.\n" +#: src/dird/ua_prune.c:661 +msgid "Expecting limit argument as integer\n" msgstr "" -#: src/cats/cats_dummy.c:39 -msgid "Please replace this dummy libbaccats library with a proper one.\n" +#: src/dird/ua_prune.c:675 +#, c-format +msgid "Volume \"%s\"" msgstr "" -#: src/cats/sql_delete.c:80 -#, c-format -msgid "No pool record %s exists\n" +#: src/dird/ua_update.c:85 +msgid "Update choice:\n" msgstr "" -#: src/cats/sql_delete.c:85 -#, c-format -msgid "Expecting one pool record, got %d\n" +#: src/dird/ua_update.c:86 +msgid "Volume parameters" msgstr "" -#: src/cats/sql_delete.c:91 -#, c-format -msgid "Error fetching row %s\n" +#: src/dird/ua_update.c:87 +msgid "Pool from resource" msgstr "" -#: src/cats/mysql.c:207 -#, c-format -msgid "" -"Unable to connect to MySQL server.\n" -"Database=%s User=%s\n" -"MySQL connect failed either server not running or your authorization is " -"incorrect.\n" +#: src/dird/ua_update.c:88 +msgid "Slots from autochanger" msgstr "" -#: src/cats/mysql.c:692 -msgid "A user name for MySQL must be supplied.\n" +#: src/dird/ua_update.c:89 +msgid "Long term statistics" msgstr "" -#: src/wx-console/console_conf.c:147 src/console/console_conf.c:140 -#: src/qt-console/bat_conf.cpp:141 -#, c-format -msgid "No record for %d %s\n" +#: src/dird/ua_update.c:90 +msgid "item" msgstr "" -#: src/wx-console/console_conf.c:156 src/console/console_conf.c:149 -#, c-format -msgid "Console: name=%s rcfile=%s histfile=%s\n" +#: src/dird/ua_update.c:90 +msgid "Choose catalog item to update" msgstr "" -#: src/wx-console/console_conf.c:160 src/console/console_conf.c:153 -#: src/qt-console/bat_conf.cpp:150 +#: src/dird/ua_update.c:133 #, c-format -msgid "Director: name=%s address=%s DIRport=%d\n" +msgid "Invalid VolStatus specified: %s\n" msgstr "" -#: src/wx-console/authenticate.c:142 src/console/authenticate.c:138 -msgid "TLS negotiation failed\n" +#: src/dird/ua_update.c:142 +#, c-format +msgid "New Volume status is: %s\n" msgstr "" -#: src/wx-console/authenticate.c:150 -msgid "Bad response to Hello command: ERR=" +#: src/dird/ua_update.c:152 +#, c-format +msgid "Invalid retention period specified: %s\n" msgstr "" -#: src/wx-console/authenticate.c:167 src/console/authenticate.c:169 -msgid "" -"Director authorization problem.\n" -"Most likely the passwords do not agree.\n" -"If you are using TLS, there may have been a certificate validation error " -"during the TLS handshake.\n" -"Please see " +#: src/dird/ua_update.c:160 +#, c-format +msgid "New retention period is: %s\n" msgstr "" -#: src/console/console.c:126 +#: src/dird/ua_update.c:171 #, c-format -msgid "" -"\n" -"Version: " +msgid "Invalid use duration specified: %s\n" msgstr "" -#: src/console/console.c:178 -msgid "input from file" +#: src/dird/ua_update.c:179 +#, c-format +msgid "New use duration is: %s\n" msgstr "" -#: src/console/console.c:179 -msgid "output to file" +#: src/dird/ua_update.c:193 +#, c-format +msgid "New max jobs is: %s\n" msgstr "" -#: src/console/console.c:180 -msgid "quit" +#: src/dird/ua_update.c:206 +#, c-format +msgid "New max files is: %s\n" msgstr "" -#: src/console/console.c:181 -msgid "output to file and terminal" +#: src/dird/ua_update.c:217 +#, c-format +msgid "Invalid max. bytes specification: %s\n" msgstr "" -#: src/console/console.c:182 -msgid "sleep specified time" +#: src/dird/ua_update.c:225 +#, c-format +msgid "New Max bytes is: %s\n" msgstr "" -#: src/console/console.c:183 -msgid "print current time" +#: src/dird/ua_update.c:236 src/dird/ua_update.c:256 +msgid "Invalid value. It must be yes or no.\n" msgstr "" -#: src/console/console.c:184 -msgid "print Console's version" +#: src/dird/ua_update.c:244 +#, c-format +msgid "New Recycle flag is: %s\n" msgstr "" -#: src/console/console.c:185 -msgid "echo command string" +#: src/dird/ua_update.c:264 +#, c-format +msgid "New InChanger flag is: %s\n" msgstr "" -#: src/console/console.c:186 -msgid "execute an external command" +#: src/dird/ua_update.c:282 +#, c-format +msgid "Invalid slot, it must be between 0 and MaxVols=%d\n" msgstr "" -#: src/console/console.c:187 -msgid "exit = quit" +#: src/dird/ua_update.c:292 src/dird/ua_update.c:716 +#, c-format +msgid "Error updating media record Slot: ERR=%s" msgstr "" -#: src/console/console.c:188 -msgid "zed_keys = use zed keys instead of bash keys" +#: src/dird/ua_update.c:294 +#, c-format +msgid "New Slot is: %d\n" msgstr "" -#: src/console/console.c:189 -msgid "help listing" +#: src/dird/ua_update.c:319 +#, c-format +msgid "New Pool is: %s\n" msgstr "" -#: src/console/console.c:191 -msgid "set command separator" +#: src/dird/ua_update.c:362 +#, c-format +msgid "New RecyclePool is: %s\n" msgstr "" -#: src/console/console.c:225 -msgid ": is an invalid command\n" +#: src/dird/ua_update.c:382 +#, c-format +msgid "Error updating Volume record: ERR=%s" msgstr "" -#: src/console/console.c:675 -msgid "Illegal separator character.\n" +#: src/dird/ua_update.c:384 +#, c-format +msgid "Volume defaults updated from \"%s\" Pool record.\n" msgstr "" -#: src/console/console.c:708 -msgid "Command logic problem\n" +#: src/dird/ua_update.c:407 src/dird/ua_update.c:439 +#, c-format +msgid "Error updating Volume records: ERR=%s" msgstr "" -#: src/console/console.c:925 +#: src/dird/ua_update.c:409 src/dird/ua_update.c:441 #, c-format -msgid "Can't find %s in Director list\n" +msgid "All Volume defaults updated from \"%s\" Pool record.\n" msgstr "" -#: src/console/console.c:933 -msgid "Available Directors:\n" +#: src/dird/ua_update.c:431 +#, c-format +msgid "Updating all pools, but skipped PoolId=%d. ERR=%s\n" msgstr "" -#: src/console/console.c:937 +#: src/dird/ua_update.c:457 #, c-format -msgid "%2d: %s at %s:%d\n" +msgid "Error updating media record Enabled: ERR=%s" msgstr "" -#: src/console/console.c:941 -msgid "Select Director by entering a number: " +#: src/dird/ua_update.c:460 +#, c-format +msgid "New Enabled is: %d\n" msgstr "" -#: src/console/console.c:948 +#: src/dird/ua_update.c:475 #, c-format -msgid "%s is not a number. You must enter a number between 1 and %d\n" +msgid "Error updating media record ActionOnPurge: ERR=%s" msgstr "" -#: src/console/console.c:955 +#: src/dird/ua_update.c:478 #, c-format -msgid "You must enter a number between 1 and %d\n" +msgid "New ActionOnPurge is: %s\n" msgstr "" -#: src/console/console.c:1160 src/wx-console/console_thread.cpp:399 -#: src/qt-console/bcomm/dircomm.cpp:131 -#, c-format -msgid "Failed to initialize TLS context for Console \"%s\".\n" +#: src/dird/ua_update.c:594 +msgid "Volume Status" +msgstr "" + +#: src/dird/ua_update.c:595 +msgid "Volume Retention Period" msgstr "" -#: src/console/console.c:1180 src/wx-console/console_thread.cpp:420 -#: src/qt-console/bcomm/dircomm.cpp:154 -#, c-format -msgid "Failed to initialize TLS context for Director \"%s\".\n" +#: src/dird/ua_update.c:596 +msgid "Volume Use Duration" msgstr "" -#: src/console/console.c:1210 -msgid "Enter a period to cancel a command.\n" +#: src/dird/ua_update.c:597 +msgid "Maximum Volume Jobs" msgstr "" -#: src/console/console.c:1304 src/qt-console/main.cpp:232 -#, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Director \"%s\" in %s. At least one CA certificate store is required.\n" +#: src/dird/ua_update.c:598 +msgid "Maximum Volume Files" msgstr "" -#: src/console/console.c:1313 src/qt-console/main.cpp:241 -#, c-format -msgid "" -"No Director resource defined in %s\n" -"Without that I don't how to speak to the Director :-(\n" +#: src/dird/ua_update.c:599 +msgid "Maximum Volume Bytes" msgstr "" -#: src/console/console.c:1333 src/qt-console/main.cpp:262 -#, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Console \"%s\" in %s.\n" +#: src/dird/ua_update.c:600 +msgid "Recycle Flag" msgstr "" -#: src/console/console.c:1359 -msgid "Too many arguments on input command.\n" +#: src/dird/ua_update.c:601 +msgid "Slot" msgstr "" -#: src/console/console.c:1363 -msgid "First argument to input command must be a filename.\n" +#: src/dird/ua_update.c:602 +msgid "InChanger Flag" msgstr "" -#: src/console/console.c:1369 -#, c-format -msgid "Cannot open file %s for input. ERR=%s\n" +#: src/dird/ua_update.c:603 +msgid "Volume Files" msgstr "" -#: src/console/console.c:1401 -msgid "Too many arguments on output/tee command.\n" +#: src/dird/ua_update.c:605 +msgid "Volume from Pool" msgstr "" -#: src/console/console.c:1418 -#, c-format -msgid "Cannot open file %s for output. ERR=%s\n" +#: src/dird/ua_update.c:606 +msgid "All Volumes from Pool" msgstr "" -#: src/console/console.c:1437 -msgid "Too many arguments. Enclose command in double quotes.\n" +#: src/dird/ua_update.c:607 +msgid "All Volumes from all Pools" msgstr "" -#: src/console/console.c:1446 -#, c-format -msgid "Cannot popen(\"%s\", \"r\"): ERR=%s\n" +#: src/dird/ua_update.c:608 +msgid "Enabled" msgstr "" -#: src/tools/testls.c:59 -#, c-format -msgid "" -"\n" -"Usage: testls [-d debug_level] [-] [pattern1 ...]\n" -" -a print extended attributes (Win32 debug)\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -e specify file of exclude patterns\n" -" -i specify file of include patterns\n" -" -q quiet, don't print filenames (debug)\n" -" - read pattern(s) from stdin\n" -" -? print this message.\n" -"\n" -"Patterns are file inclusion -- normally directories.\n" -"Debug level >= 1 prints each file found.\n" -"Debug level >= 10 prints path/file for catalog.\n" -"Errors always printed.\n" -"Files/paths truncated is number with len > 255.\n" -"Truncation is only in catalog.\n" -"\n" +#: src/dird/ua_update.c:609 +msgid "RecyclePool" msgstr "" -#: src/tools/testls.c:155 -#, c-format -msgid "Could not open include file: %s\n" +#: src/dird/ua_update.c:610 +msgid "Action On Purge" msgstr "" -#: src/tools/testls.c:168 -#, c-format -msgid "Could not open exclude file: %s\n" +#: src/dird/ua_update.c:611 +msgid "Done" msgstr "" -#: src/tools/testls.c:182 +#: src/dird/ua_update.c:620 #, c-format -msgid "Files seen = %d\n" +msgid "Updating Volume \"%s\"\n" msgstr "" -#: src/tools/testls.c:215 src/tools/testfind.c:322 +#: src/dird/ua_update.c:625 #, c-format -msgid "Err: Could not access %s: %s\n" +msgid "Current Volume status is: %s\n" msgstr "" -#: src/tools/testls.c:218 src/tools/testfind.c:325 -#, c-format -msgid "Err: Could not follow ff->link %s: %s\n" +#: src/dird/ua_update.c:626 +msgid "Possible Values are:\n" msgstr "" -#: src/tools/testls.c:221 src/tools/testfind.c:328 -#, c-format -msgid "Err: Could not stat %s: %s\n" +#: src/dird/ua_update.c:637 +msgid "Choose new Volume Status" msgstr "" -#: src/tools/testls.c:224 src/tools/testfind.c:331 +#: src/dird/ua_update.c:643 #, c-format -msgid "Skip: File not saved. No change. %s\n" +msgid "Current retention period is: %s\n" msgstr "" -#: src/tools/testls.c:227 src/tools/testfind.c:334 -#, c-format -msgid "Err: Attempt to backup archive. Not saved. %s\n" +#: src/dird/ua_update.c:645 +msgid "Enter Volume Retention period: " msgstr "" -#: src/tools/testls.c:230 +#: src/dird/ua_update.c:652 #, c-format -msgid "Recursion turned off. Directory not entered. %s\n" +msgid "Current use duration is: %s\n" msgstr "" -#: src/tools/testls.c:233 -#, c-format -msgid "Skip: File system change prohibited. Directory not entered. %s\n" +#: src/dird/ua_update.c:654 +msgid "Enter Volume Use Duration: " msgstr "" -#: src/tools/testls.c:236 src/tools/testfind.c:337 +#: src/dird/ua_update.c:661 #, c-format -msgid "Err: Could not open directory %s: %s\n" +msgid "Current max jobs is: %u\n" msgstr "" -#: src/tools/testls.c:239 src/tools/testfind.c:340 -#, c-format -msgid "Err: Unknown file ff->type %d: %s\n" +#: src/dird/ua_update.c:662 +msgid "Enter new Maximum Jobs: " msgstr "" -#: src/tools/bvfs_test.c:56 src/tools/ing_test.c:57 +#: src/dird/ua_update.c:669 #, c-format -msgid "" -"\n" -"Version: %s (%s)\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -n specify the database name (default bacula)\n" -" -u specify database user name (default bacula)\n" -" -P specify database host (default NULL)\n" -" -w specify working directory\n" -" -j specify jobids\n" -" -p specify path\n" -" -f specify file\n" -" -l maximum tuple to fetch\n" -" -T truncate cache table before starting\n" -" -v verbose\n" -" -? print this message\n" -"\n" +msgid "Current max files is: %u\n" msgstr "" -#: src/tools/bbatch.c:79 -#, c-format -msgid "" -"\n" -"Version: %s (%s)\n" -"Example : bbatch -w /path/to/workdir -h localhost -f dat1 -f dat -f datx\n" -" will start 3 thread and load dat1, dat and datx in your catalog\n" -"See bbatch.c to generate datafile\n" -"\n" -"Usage: bbatch [ options ] -w working/dir -f datafile\n" -" -b with batch mode\n" -" -B without batch mode\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -n specify the database name (default bacula)\n" -" -u specify database user name (default bacula)\n" -" -P specify database host (default NULL)\n" -" -w specify working directory\n" -" -r call restore code with given jobids\n" -" -v verbose\n" -" -f specify data file\n" -" -? print this message\n" -"\n" +#: src/dird/ua_update.c:670 +msgid "Enter new Maximum Files: " msgstr "" -#: src/tools/bbatch.c:211 +#: src/dird/ua_update.c:677 #, c-format -msgid "Computing file list for jobid=%s files=%lld secs=%d\n" +msgid "Current value is: %s\n" msgstr "" -#: src/tools/bbatch.c:315 -#, c-format -msgid "Error opening datafile %s\n" +#: src/dird/ua_update.c:678 +msgid "Enter new Maximum Bytes: " msgstr "" -#: src/tools/bbatch.c:325 -msgid "Error while inserting file\n" +#: src/dird/ua_update.c:686 +#, c-format +msgid "Current recycle flag is: %s\n" msgstr "" -#: src/tools/ing_test.c:231 src/tools/ing_test.c:264 src/tools/ing_test.c:302 -msgid "Stmt went wrong\n" +#: src/dird/ua_update.c:688 +msgid "Enter new Recycle status: " msgstr "" -#: src/tools/ing_test.c:320 -msgid "CREATE-Stmt went wrong\n" +#: src/dird/ua_update.c:695 +#, c-format +msgid "Current Slot is: %d\n" msgstr "" -#: src/tools/ing_test.c:325 -msgid "DROP-Stmt went wrong\n" +#: src/dird/ua_update.c:696 +msgid "Enter new Slot: " msgstr "" -#: src/tools/fstype.c:48 +#: src/dird/ua_update.c:703 #, c-format -msgid "" -"\n" -"Usage: fstype [-v] path ...\n" -"\n" -" Print the file system type a given file/directory is on.\n" -" The following options are supported:\n" -"\n" -" -v print both path and file system type.\n" -" -? print this message.\n" -"\n" +msgid "Current InChanger flag is: %d\n" msgstr "" -#: src/tools/fstype.c:102 src/tools/drivetype.c:78 +#: src/dird/ua_update.c:704 #, c-format -msgid "%s: unknown\n" +msgid "Set InChanger flag for Volume \"%s\": yes/no: " msgstr "" -#: src/tools/bregex.c:153 src/tools/bwild.c:122 src/tools/bregtest.c:137 +#: src/dird/ua_update.c:718 #, c-format -msgid "Could not open data file: %s\n" +msgid "New InChanger flag is: %d\n" msgstr "" -#: src/tools/drivetype.c:47 -#, c-format +#: src/dird/ua_update.c:725 msgid "" -"\n" -"Usage: drivetype [-v] path ...\n" -"\n" -" Print the drive type a given file/directory is on.\n" -" The following options are supported:\n" -"\n" -" -l print local fixed hard drive\n" -" -a display information on all drives\n" -" -v print both path and file system type.\n" -" -? print this message.\n" +"Warning changing Volume Files can result\n" +"in loss of data on your Volume\n" "\n" msgstr "" -#: src/tools/testfind.c:70 +#: src/dird/ua_update.c:727 #, c-format -msgid "" -"\n" -"Usage: testfind [-d debug_level] [-] [pattern1 ...]\n" -" -a print extended attributes (Win32 debug)\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -c specify config file containing FileSet resources\n" -" -f specify which FileSet to use\n" -" -? print this message.\n" -"\n" -"Patterns are used for file inclusion -- normally directories.\n" -"Debug level >= 1 prints each file found.\n" -"Debug level >= 10 prints path/file for catalog.\n" -"Errors are always printed.\n" -"Files/paths truncated is the number of files/paths with len > 255.\n" -"Truncation is only in the catalog.\n" -"\n" +msgid "Current Volume Files is: %u\n" msgstr "" -#: src/tools/testfind.c:235 -#, c-format -msgid "" -"\n" -"Total files : %d\n" -"Max file length: %d\n" -"Max path length: %d\n" -"Files truncated: %d\n" -"Paths truncated: %d\n" -"Hard links : %d\n" +#: src/dird/ua_update.c:728 +msgid "Enter new number of Files for Volume: " msgstr "" -#: src/tools/testfind.c:278 -#, c-format -msgid "Reg: %s\n" +#: src/dird/ua_update.c:733 +msgid "Normally, you should only increase Volume Files by one!\n" msgstr "" -#: src/tools/testfind.c:300 -msgid "\t[will not descend: recursion turned off]" +#: src/dird/ua_update.c:734 +msgid "Increase Volume Files? (yes/no): " msgstr "" -#: src/tools/testfind.c:302 -msgid "\t[will not descend: file system change not allowed]" +#: src/dird/ua_update.c:744 +#, c-format +msgid "New Volume Files is: %u\n" msgstr "" -#: src/tools/testfind.c:304 -msgid "\t[will not descend: disallowed file system]" +#: src/dird/ua_update.c:756 +#, c-format +msgid "Current Pool is: %s\n" msgstr "" -#: src/tools/testfind.c:306 -msgid "\t[will not descend: disallowed drive type]" +#: src/dird/ua_update.c:757 +msgid "Enter new Pool name: " msgstr "" -#: src/tools/testfind.c:390 +#: src/dird/ua_update.c:778 #, c-format -msgid "===== Filename truncated to 255 chars: %s\n" +msgid "Current Enabled is: %d\n" msgstr "" -#: src/tools/testfind.c:407 -#, c-format -msgid "========== Path name truncated to 255 chars: %s\n" +#: src/dird/ua_update.c:779 +msgid "Enter new Enabled: " msgstr "" -#: src/tools/testfind.c:416 +#: src/dird/ua_update.c:789 #, c-format -msgid "========== Path length is zero. File=%s\n" +msgid "Current RecyclePool is: %s\n" msgstr "" -#: src/tools/testfind.c:419 -#, c-format -msgid "Path: %s\n" +#: src/dird/ua_update.c:791 +msgid "No current RecyclePool\n" msgstr "" -#: src/tools/cats_test.c:60 +#: src/dird/ua_update.c:801 #, c-format -msgid "" -"\n" -"Version: %s (%s)\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -n specify the database name (default bacula)\n" -" -u specify database user name (default bacula)\n" -" -P specify database host (default NULL)\n" -" -w specify working directory\n" -" -p specify path\n" -" -f specify file\n" -" -l maximum tuple to fetch\n" -" -q print only errors\n" -" -v verbose\n" -" -? print this message\n" -"\n" +msgid "Current ActionOnPurge is: %s\n" msgstr "" -#: src/tools/cats_test.c:376 -#, c-format -msgid "Could not open, database \"%s\".\n" +#: src/dird/ua_update.c:803 +msgid "Enter new ActionOnPurge (one of: Truncate, None): " msgstr "" -#: src/tools/bsmtp.c:151 -#, c-format -msgid "Fatal malformed reply from %s: %s\n" +#: src/dird/ua_update.c:811 +msgid "Selection terminated.\n" msgstr "" -#: src/tools/bsmtp.c:159 +#: src/dird/ua_update.c:831 #, c-format -msgid "Fatal fgets error: ERR=%s\n" +msgid "Updating %i job(s).\n" msgstr "" -#: src/tools/bsmtp.c:192 +#: src/dird/ua_update.c:863 #, c-format -msgid "" -"\n" -"Usage: %s [-f from] [-h mailhost] [-s subject] [-c copy] [recipient ...]\n" -" -4 forces bsmtp to use IPv4 addresses only.\n" -" -6 forces bsmtp to use IPv6 addresses only.\n" -" -8 set charset to UTF-8\n" -" -a use any ip protocol for address resolution\n" -" -c set the Cc: field\n" -" -d set debug level to \n" -" -dt print a timestamp in debug output\n" -" -f set the From: field\n" -" -h use mailhost:port as the SMTP server\n" -" -s set the Subject: field\n" -" -r set the Reply-To: field\n" -" -l set the maximum number of lines to send (default: " -"unlimited)\n" -" -? print this message.\n" -"\n" +msgid "db_update_pool_record returned %d. ERR=%s\n" msgstr "" -#: src/tools/bsmtp.c:379 -msgid "Fatal error: no recipient given.\n" +#: src/dird/ua_update.c:870 +msgid "Pool DB record updated from resource.\n" msgstr "" -#: src/tools/bsmtp.c:407 -#, c-format -msgid "Fatal gethostname error: ERR=%s\n" +#: src/dird/ua_update.c:897 +msgid "Expect JobId keyword, not found.\n" msgstr "" -#: src/tools/bsmtp.c:418 +#: src/dird/ua_update.c:922 +msgid "Neither Client nor StartTime specified.\n" +msgstr "" + +#: src/dird/catreq.c:121 src/dird/catreq.c:364 #, c-format -msgid "Fatal getaddrinfo for myself failed \"%s\": ERR=%s\n" +msgid "1990 Invalid Catalog Request: %s" msgstr "" -#: src/tools/bsmtp.c:426 +#: src/dird/catreq.c:122 #, c-format -msgid "Fatal gethostbyname for myself failed \"%s\": ERR=%s\n" +msgid "Invalid Catalog request; DB not open: %s" msgstr "" -#: src/tools/bsmtp.c:486 src/tools/bsmtp.c:521 +#: src/dird/catreq.c:143 #, c-format -msgid "Error unknown mail host \"%s\": ERR=%s\n" +msgid "Pool \"%s\" not found for SD find media request.\n" msgstr "" -#: src/tools/bsmtp.c:489 src/tools/bsmtp.c:524 -msgid "Retrying connection using \"localhost\".\n" +#: src/dird/catreq.c:152 +msgid "1901 No Media.\n" msgstr "" -#: src/tools/bsmtp.c:514 -#, c-format -msgid "Failed to connect to mailhost %s\n" +#: src/dird/catreq.c:184 +msgid "not in Pool" msgstr "" -#: src/tools/bsmtp.c:532 -#, c-format -msgid "Fatal error: Unknown address family for smtp host: %d\n" +#: src/dird/catreq.c:186 +msgid "not correct MediaType" msgstr "" -#: src/tools/bsmtp.c:541 src/tools/bsmtp.c:546 -#, c-format -msgid "Fatal socket error: ERR=%s\n" +#: src/dird/catreq.c:196 +msgid "is not Enabled" msgstr "" -#: src/tools/bsmtp.c:551 +#: src/dird/catreq.c:205 #, c-format -msgid "Fatal connect error to %s: ERR=%s\n" +msgid "1998 Volume \"%s\" catalog status is %s, %s.\n" msgstr "" -#: src/tools/bsmtp.c:560 +#: src/dird/catreq.c:210 #, c-format -msgid "Fatal _open_osfhandle error: ERR=%s\n" +msgid "1997 Volume \"%s\" not in catalog.\n" msgstr "" -#: src/tools/bsmtp.c:567 src/tools/bsmtp.c:571 src/tools/bsmtp.c:580 -#: src/tools/bsmtp.c:584 +#: src/dird/catreq.c:236 #, c-format -msgid "Fatal fdopen error: ERR=%s\n" +msgid "Unable to get Media record for Volume %s: ERR=%s\n" msgstr "" -#: src/tools/bsmtp.c:576 +#: src/dird/catreq.c:238 #, c-format -msgid "Fatal dup error: ERR=%s\n" +msgid "1991 Catalog Request for vol=%s failed: %s" msgstr "" -#: src/tools/dbcheck.c:195 -msgid "" -"Warning skipping the additional parameters for working directory/dbname/user/" -"password/host.\n" +#: src/dird/catreq.c:265 +#, c-format +msgid "Attempt to set Volume Files from %u to %u for Volume \"%s\". Ignored.\n" msgstr "" -#: src/tools/dbcheck.c:212 +#: src/dird/catreq.c:321 #, c-format -msgid "Error can not find the Catalog name[%s] in the given config file [%s]\n" +msgid "Catalog error updating Media record. %s" msgstr "" -#: src/tools/dbcheck.c:214 -#, c-format -msgid "Error there is no Catalog section in the given config file [%s]\n" +#: src/dird/catreq.c:323 +msgid "1993 Update Media error\n" msgstr "" -#: src/tools/dbcheck.c:223 -msgid "Error no Director resource defined.\n" +#: src/dird/catreq.c:350 +#, c-format +msgid "Catalog error creating JobMedia record. %s" msgstr "" -#: src/tools/dbcheck.c:247 -msgid "Wrong number of arguments.\n" +#: src/dird/catreq.c:352 +msgid "1992 Create JobMedia error\n" msgstr "" -#: src/tools/dbcheck.c:252 -msgid "Working directory not supplied.\n" +#: src/dird/catreq.c:365 +#, c-format +msgid "Invalid Catalog request: %s" msgstr "" -#: src/tools/dbcheck.c:288 -msgid "Database port must be a numeric value.\n" +#: src/dird/catreq.c:452 +#, c-format +msgid "Attribute create error: ERR=%s" msgstr "" -#: src/tools/dbcheck.c:291 -msgid "Database port must be a int value.\n" +#: src/dird/catreq.c:549 +#, c-format +msgid "Restore object create error. %s" msgstr "" -#: src/tools/dbcheck.c:365 +#: src/dird/catreq.c:556 #, c-format -msgid "Hello, this is the database check/correct program.\n" +msgid "%s not same File=%d as attributes=%d\n" msgstr "" -#: src/tools/dbcheck.c:367 +#: src/dird/catreq.c:583 #, c-format -msgid "Modify database is on." +msgid "Catalog error updating file digest. Unsupported digest stream type: %d" msgstr "" -#: src/tools/dbcheck.c:369 +#: src/dird/catreq.c:598 #, c-format -msgid "Modify database is off." +msgid "attribute create error. %s" msgstr "" -#: src/tools/dbcheck.c:371 src/tools/dbcheck.c:432 +#: src/dird/catreq.c:604 #, c-format -msgid " Verbose is on.\n" +msgid "Catalog error updating file digest. %s" msgstr "" -#: src/tools/dbcheck.c:373 src/tools/dbcheck.c:434 +#: src/dird/catreq.c:627 #, c-format -msgid " Verbose is off.\n" +msgid "1994 Invalid Catalog Update: %s" msgstr "" -#: src/tools/dbcheck.c:375 +#: src/dird/catreq.c:628 #, c-format -msgid "Please select the function you want to perform.\n" +msgid "Invalid Catalog Update; DB not open: %s" msgstr "" -#: src/tools/dbcheck.c:379 +#: src/dird/catreq.c:684 src/dird/catreq.c:699 #, c-format -msgid "" -"\n" -" 1) Toggle modify database flag\n" -" 2) Toggle verbose flag\n" -" 3) Repair bad Filename records\n" -" 4) Repair bad Path records\n" -" 5) Eliminate duplicate Filename records\n" -" 6) Eliminate duplicate Path records\n" -" 7) Eliminate orphaned Jobmedia records\n" -" 8) Eliminate orphaned File records\n" -" 9) Eliminate orphaned Path records\n" -" 10) Eliminate orphaned Filename records\n" -" 11) Eliminate orphaned FileSet records\n" -" 12) Eliminate orphaned Client records\n" -" 13) Eliminate orphaned Job records\n" -" 14) Eliminate all Admin records\n" -" 15) Eliminate all Restore records\n" -" 16) All (3-15)\n" -" 17) Quit\n" +msgid "fread attr spool error. ERR=%s\n" msgstr "" -#: src/tools/dbcheck.c:398 +#: src/findlib/match.c:198 src/filed/job.c:1615 src/tools/testfind.c:642 #, c-format -msgid "" -"\n" -" 1) Toggle modify database flag\n" -" 2) Toggle verbose flag\n" -" 3) Check for bad Filename records\n" -" 4) Check for bad Path records\n" -" 5) Check for duplicate Filename records\n" -" 6) Check for duplicate Path records\n" -" 7) Check for orphaned Jobmedia records\n" -" 8) Check for orphaned File records\n" -" 9) Check for orphaned Path records\n" -" 10) Check for orphaned Filename records\n" -" 11) Check for orphaned FileSet records\n" -" 12) Check for orphaned Client records\n" -" 13) Check for orphaned Job records\n" -" 14) Check for all Admin records\n" -" 15) Check for all Restore records\n" -" 16) All (3-15)\n" -" 17) Quit\n" +msgid "Unknown include/exclude option: %c\n" msgstr "" -#: src/tools/dbcheck.c:418 -msgid "Select function number: " +#: src/findlib/bfile.c:85 +msgid "Unix attributes" msgstr "" -#: src/tools/dbcheck.c:425 -#, c-format -msgid "Database will be modified.\n" +#: src/findlib/bfile.c:87 +msgid "File data" msgstr "" -#: src/tools/dbcheck.c:427 -#, c-format -msgid "Database will NOT be modified.\n" +#: src/findlib/bfile.c:89 +msgid "MD5 digest" msgstr "" -#: src/tools/dbcheck.c:518 -#, c-format -msgid "JobId=%s Name=\"%s\" StartTime=%s\n" +#: src/findlib/bfile.c:91 +msgid "GZIP data" msgstr "" -#: src/tools/dbcheck.c:525 -#, c-format -msgid "Orphaned JobMediaId=%s JobId=%s Volume=\"%s\"\n" +#: src/findlib/bfile.c:93 +msgid "Compressed data" msgstr "" -#: src/tools/dbcheck.c:532 -#, c-format -msgid "Orphaned FileId=%s JobId=%s Volume=\"%s\"\n" +#: src/findlib/bfile.c:95 +msgid "Extended attributes" msgstr "" -#: src/tools/dbcheck.c:539 -#, c-format -msgid "Orphaned FileSetId=%s FileSet=\"%s\" MD5=%s\n" +#: src/findlib/bfile.c:97 +msgid "Sparse data" msgstr "" -#: src/tools/dbcheck.c:546 -#, c-format -msgid "Orphaned ClientId=%s Name=\"%s\"\n" +#: src/findlib/bfile.c:99 +msgid "GZIP sparse data" msgstr "" -#: src/tools/dbcheck.c:599 -#, c-format -msgid "Deleting: %s\n" +#: src/findlib/bfile.c:101 +msgid "Compressed sparse data" msgstr "" -#: src/tools/dbcheck.c:671 -#, c-format -msgid "Checking for duplicate Filename entries.\n" +#: src/findlib/bfile.c:103 +msgid "Program names" msgstr "" -#: src/tools/dbcheck.c:682 -#, c-format -msgid "Found %d duplicate Filename records.\n" +#: src/findlib/bfile.c:105 +msgid "Program data" msgstr "" -#: src/tools/dbcheck.c:683 -msgid "Print the list? (yes/no): " +#: src/findlib/bfile.c:107 +msgid "SHA1 digest" msgstr "" -#: src/tools/dbcheck.c:706 src/tools/dbcheck.c:771 -#, c-format -msgid "Found %d for: %s\n" +#: src/findlib/bfile.c:109 +msgid "Win32 data" msgstr "" -#: src/tools/dbcheck.c:736 -#, c-format -msgid "Checking for duplicate Path entries.\n" +#: src/findlib/bfile.c:111 +msgid "Win32 GZIP data" msgstr "" -#: src/tools/dbcheck.c:747 -#, c-format -msgid "Found %d duplicate Path records.\n" +#: src/findlib/bfile.c:113 +msgid "Win32 compressed data" msgstr "" -#: src/tools/dbcheck.c:748 src/tools/dbcheck.c:810 src/tools/dbcheck.c:856 -#: src/tools/dbcheck.c:924 src/tools/dbcheck.c:982 src/tools/dbcheck.c:1025 -#: src/tools/dbcheck.c:1067 src/tools/dbcheck.c:1109 src/tools/dbcheck.c:1146 -#: src/tools/dbcheck.c:1179 src/tools/dbcheck.c:1213 src/tools/dbcheck.c:1280 -msgid "Print them? (yes/no): " +#: src/findlib/bfile.c:115 +msgid "MacOS Fork data" msgstr "" -#: src/tools/dbcheck.c:801 -#, c-format -msgid "Checking for orphaned JobMedia entries.\n" +#: src/findlib/bfile.c:117 +msgid "HFS+ attribs" msgstr "" -#: src/tools/dbcheck.c:809 -#, c-format -msgid "Found %d orphaned JobMedia records.\n" +#: src/findlib/bfile.c:119 +msgid "Standard Unix ACL attribs" msgstr "" -#: src/tools/dbcheck.c:827 -#, c-format -msgid "Deleting %d orphaned JobMedia records.\n" +#: src/findlib/bfile.c:121 +msgid "Default Unix ACL attribs" msgstr "" -#: src/tools/dbcheck.c:844 -#, c-format -msgid "Checking for orphaned File entries. This may take some time!\n" +#: src/findlib/bfile.c:123 +msgid "SHA256 digest" msgstr "" -#: src/tools/dbcheck.c:855 -#, c-format -msgid "Found %d orphaned File records.\n" +#: src/findlib/bfile.c:125 +msgid "SHA512 digest" msgstr "" -#: src/tools/dbcheck.c:872 -#, c-format -msgid "Deleting %d orphaned File records.\n" +#: src/findlib/bfile.c:127 +msgid "Signed digest" msgstr "" -#: src/tools/dbcheck.c:891 -#, c-format -msgid "Pruning orphaned Path entries isn't possible when using BVFS.\n" +#: src/findlib/bfile.c:129 +msgid "Encrypted File data" msgstr "" -#: src/tools/dbcheck.c:900 src/tools/dbcheck.c:958 -msgid "Create temporary index? (yes/no): " +#: src/findlib/bfile.c:131 +msgid "Encrypted Win32 data" msgstr "" -#: src/tools/dbcheck.c:912 -#, c-format -msgid "Checking for orphaned Path entries. This may take some time!\n" +#: src/findlib/bfile.c:133 +msgid "Encrypted session data" msgstr "" -#: src/tools/dbcheck.c:923 -#, c-format -msgid "Found %d orphaned Path records.\n" +#: src/findlib/bfile.c:135 +msgid "Encrypted GZIP data" msgstr "" -#: src/tools/dbcheck.c:936 -#, c-format -msgid "Deleting %d orphaned Path records.\n" +#: src/findlib/bfile.c:137 +msgid "Encrypted compressed data" msgstr "" -#: src/tools/dbcheck.c:970 -#, c-format -msgid "Checking for orphaned Filename entries. This may take some time!\n" +#: src/findlib/bfile.c:139 +msgid "Encrypted Win32 GZIP data" msgstr "" -#: src/tools/dbcheck.c:981 -#, c-format -msgid "Found %d orphaned Filename records.\n" +#: src/findlib/bfile.c:141 +msgid "Encrypted Win32 Compressed data" +msgstr "" + +#: src/findlib/bfile.c:143 +msgid "Encrypted MacOS fork data" +msgstr "" + +#: src/findlib/bfile.c:145 +msgid "Plugin Name" +msgstr "" + +#: src/findlib/bfile.c:147 +msgid "Plugin Data" +msgstr "" + +#: src/findlib/bfile.c:149 +msgid "Restore Object" msgstr "" -#: src/tools/dbcheck.c:994 -#, c-format -msgid "Deleting %d orphaned Filename records.\n" +#: src/findlib/bfile.c:151 +msgid "AIX Specific ACL attribs" msgstr "" -#: src/tools/dbcheck.c:1014 -#, c-format -msgid "Checking for orphaned FileSet entries. This takes some time!\n" +#: src/findlib/bfile.c:153 +msgid "Darwin Specific ACL attribs" msgstr "" -#: src/tools/dbcheck.c:1024 -#, c-format -msgid "Found %d orphaned FileSet records.\n" +#: src/findlib/bfile.c:155 +msgid "FreeBSD Specific Default ACL attribs" msgstr "" -#: src/tools/dbcheck.c:1039 -#, c-format -msgid "Deleting %d orphaned FileSet records.\n" +#: src/findlib/bfile.c:157 +msgid "FreeBSD Specific Access ACL attribs" msgstr "" -#: src/tools/dbcheck.c:1048 -#, c-format -msgid "Checking for orphaned Client entries.\n" +#: src/findlib/bfile.c:159 +msgid "HPUX Specific ACL attribs" msgstr "" -#: src/tools/dbcheck.c:1066 -#, c-format -msgid "Found %d orphaned Client records.\n" +#: src/findlib/bfile.c:161 +msgid "Irix Specific Default ACL attribs" msgstr "" -#: src/tools/dbcheck.c:1081 -#, c-format -msgid "Deleting %d orphaned Client records.\n" +#: src/findlib/bfile.c:163 +msgid "Irix Specific Access ACL attribs" msgstr "" -#: src/tools/dbcheck.c:1090 -#, c-format -msgid "Checking for orphaned Job entries.\n" +#: src/findlib/bfile.c:165 +msgid "Linux Specific Default ACL attribs" msgstr "" -#: src/tools/dbcheck.c:1108 -#, c-format -msgid "Found %d orphaned Job records.\n" +#: src/findlib/bfile.c:167 +msgid "Linux Specific Access ACL attribs" msgstr "" -#: src/tools/dbcheck.c:1123 -#, c-format -msgid "Deleting %d orphaned Job records.\n" +#: src/findlib/bfile.c:169 +msgid "TRU64 Specific Default ACL attribs" msgstr "" -#: src/tools/dbcheck.c:1125 -#, c-format -msgid "Deleting JobMedia records of orphaned Job records.\n" +#: src/findlib/bfile.c:171 +msgid "TRU64 Specific Access ACL attribs" msgstr "" -#: src/tools/dbcheck.c:1127 -#, c-format -msgid "Deleting Log records of orphaned Job records.\n" +#: src/findlib/bfile.c:173 +msgid "Solaris Specific POSIX ACL attribs" msgstr "" -#: src/tools/dbcheck.c:1136 -#, c-format -msgid "Checking for Admin Job entries.\n" +#: src/findlib/bfile.c:175 +msgid "Solaris Specific NFSv4/ZFS ACL attribs" msgstr "" -#: src/tools/dbcheck.c:1145 -#, c-format -msgid "Found %d Admin Job records.\n" +#: src/findlib/bfile.c:177 +msgid "AFS Specific ACL attribs" msgstr "" -#: src/tools/dbcheck.c:1160 -#, c-format -msgid "Deleting %d Admin Job records.\n" +#: src/findlib/bfile.c:179 +msgid "AIX Specific POSIX ACL attribs" msgstr "" -#: src/tools/dbcheck.c:1169 -#, c-format -msgid "Checking for Restore Job entries.\n" +#: src/findlib/bfile.c:181 +msgid "AIX Specific NFSv4 ACL attribs" msgstr "" -#: src/tools/dbcheck.c:1178 -#, c-format -msgid "Found %d Restore Job records.\n" +#: src/findlib/bfile.c:183 +msgid "FreeBSD Specific NFSv4/ZFS ACL attribs" msgstr "" -#: src/tools/dbcheck.c:1193 -#, c-format -msgid "Deleting %d Restore Job records.\n" +#: src/findlib/bfile.c:185 +msgid "GNU Hurd Specific Default ACL attribs" msgstr "" -#: src/tools/dbcheck.c:1203 -#, c-format -msgid "Checking for Filenames with a trailing slash\n" +#: src/findlib/bfile.c:187 +msgid "GNU Hurd Specific Access ACL attribs" msgstr "" -#: src/tools/dbcheck.c:1212 -#, c-format -msgid "Found %d bad Filename records.\n" +#: src/findlib/bfile.c:189 +msgid "GNU Hurd Specific Extended attribs" msgstr "" -#: src/tools/dbcheck.c:1230 src/tools/dbcheck.c:1296 -#, c-format -msgid "Reparing %d bad Filename records.\n" +#: src/findlib/bfile.c:191 +msgid "IRIX Specific Extended attribs" msgstr "" -#: src/tools/dbcheck.c:1270 -#, c-format -msgid "Checking for Paths without a trailing slash\n" +#: src/findlib/bfile.c:193 +msgid "TRU64 Specific Extended attribs" msgstr "" -#: src/tools/dbcheck.c:1279 -#, c-format -msgid "Found %d bad Path records.\n" +#: src/findlib/bfile.c:195 +msgid "AIX Specific Extended attribs" msgstr "" -#: src/tools/dbcheck.c:1442 -#, c-format -msgid "" -"Ok. Index over the %s column already exists and dbcheck will work faster.\n" +#: src/findlib/bfile.c:197 +msgid "OpenBSD Specific Extended attribs" msgstr "" -#: src/tools/dbcheck.c:1445 -#, c-format -msgid "" -"Note. Index over the %s column not found, that can greatly slow down " -"dbcheck.\n" +#: src/findlib/bfile.c:199 +msgid "Solaris Specific Extensible attribs or System Extended attribs" msgstr "" -#: src/tools/dbcheck.c:1460 -#, c-format -msgid "Create temporary index... This may take some time!\n" +#: src/findlib/bfile.c:201 +msgid "Solaris Specific Extended attribs" msgstr "" -#: src/tools/dbcheck.c:1468 -#, c-format -msgid "Temporary index created.\n" +#: src/findlib/bfile.c:203 +msgid "Darwin Specific Extended attribs" msgstr "" -#: src/tools/dbcheck.c:1483 -#, c-format -msgid "Drop temporary index.\n" +#: src/findlib/bfile.c:205 +msgid "FreeBSD Specific Extended attribs" msgstr "" -#: src/tools/dbcheck.c:1493 -#, c-format -msgid "Temporary index %s deleted.\n" +#: src/findlib/bfile.c:207 +msgid "Linux Specific Extended attribs" msgstr "" -#: src/filed/verify.c:57 -#, c-format -msgid "Cannot malloc %d network read buffer\n" +#: src/findlib/bfile.c:209 +msgid "NetBSD Specific Extended attribs" msgstr "" -#: src/filed/verify.c:127 +#: src/findlib/makepath.c:141 #, c-format -msgid " Could not access %s: ERR=%s\n" +msgid "Cannot create directory %s: ERR=%s\n" msgstr "" -#: src/filed/verify.c:134 +#: src/findlib/makepath.c:145 src/findlib/makepath.c:219 #, c-format -msgid " Could not follow link %s: ERR=%s\n" +msgid "%s exists but is not a directory.\n" msgstr "" -#: src/filed/verify.c:141 +#: src/findlib/makepath.c:155 #, c-format -msgid " Could not stat %s: ERR=%s\n" +msgid "Security problem!! We created directory %s, but it is a link.\n" msgstr "" -#: src/filed/verify.c:147 src/filed/backup.c:450 +#: src/findlib/makepath.c:181 #, c-format -msgid " Unchanged file skipped: %s\n" +msgid "Cannot change owner and/or group of %s: ERR=%s\n" msgstr "" -#: src/filed/verify.c:150 +#: src/findlib/makepath.c:186 #, c-format -msgid " Archive file skipped: %s\n" +msgid "Cannot change permissions of %s: ERR=%s\n" msgstr "" -#: src/filed/verify.c:153 +#: src/findlib/makepath.c:256 #, c-format -msgid " Recursion turned off. Directory skipped: %s\n" +msgid "%c: is not a valid drive.\n" msgstr "" -#: src/filed/verify.c:157 -#, c-format -msgid " File system change prohibited. Directory skipped: %s\n" +#: src/findlib/makepath.c:300 +msgid "Too many subdirectories. Some permissions not reset.\n" msgstr "" -#: src/filed/verify.c:165 +#: src/findlib/file_create.c:102 #, c-format -msgid " Could not open directory %s: ERR=%s\n" +msgid "File skipped. Not newer: %s\n" msgstr "" -#: src/filed/verify.c:170 +#: src/findlib/file_create.c:109 #, c-format -msgid " Unknown file type %d: %s\n" +msgid "File skipped. Not older: %s\n" msgstr "" -#: src/filed/verify.c:214 src/filed/verify_vol.c:206 +#: src/findlib/file_create.c:119 #, c-format -msgid "Network error in send to Director: ERR=%s\n" +msgid "File skipped. Already exists: %s\n" msgstr "" -#: src/filed/verify.c:247 src/filed/accurate.c:429 src/filed/backup.c:506 +#: src/findlib/file_create.c:145 #, c-format -msgid "%s digest initialization failed\n" +msgid "File %s already exists and could not be replaced. ERR=%s.\n" msgstr "" -#: src/filed/verify.c:309 +#: src/findlib/file_create.c:196 src/findlib/file_create.c:259 +#: src/findlib/file_create.c:348 #, c-format -msgid " Cannot open %s: ERR=%s.\n" +msgid "bpkt already open fid=%d\n" msgstr "" -#: src/filed/verify.c:323 +#: src/findlib/file_create.c:204 src/filed/fd_plugins.c:1004 #, c-format -msgid " Cannot open resource fork for %s: ERR=%s.\n" +msgid "Could not create %s: ERR=%s\n" msgstr "" -#: src/filed/verify.c:386 +#: src/findlib/file_create.c:218 #, c-format -msgid "Error reading file %s: ERR=%s\n" +msgid "Cannot make fifo %s: ERR=%s\n" msgstr "" -#: src/filed/accurate.c:201 +#: src/findlib/file_create.c:236 #, c-format -msgid "Space saved with Base jobs: %lld MB\n" +msgid "Cannot make node %s: ERR=%s\n" msgstr "" -#: src/filed/accurate.c:400 +#: src/findlib/file_create.c:281 #, c-format -msgid "Cannot verify checksum for %s\n" -msgstr "" - -#: src/filed/accurate.c:508 -msgid "2991 Bad accurate command\n" +msgid "Could not symlink %s -> %s: ERR=%s\n" msgstr "" -#: src/filed/status.c:89 +#: src/findlib/file_create.c:304 src/findlib/file_create.c:317 #, c-format -msgid "Daemon started %s. Jobs: run=%d running=%d.\n" +msgid "Could not restore file flags for file %s: ERR=%s\n" msgstr "" -#: src/filed/status.c:149 +#: src/findlib/file_create.c:308 src/findlib/file_create.c:325 #, c-format -msgid " Sizeof: boffset_t=%d size_t=%d debug=%d trace=%d " +msgid "Could not hard link %s -> %s: ERR=%s\n" msgstr "" -#: src/filed/status.c:194 +#: src/findlib/file_create.c:321 #, c-format -msgid "Director connected at: %s\n" +msgid "Could not reset file flags for file %s: ERR=%s\n" msgstr "" -#: src/filed/status.c:196 +#: src/findlib/file_create.c:363 #, c-format -msgid "JobId %d Job %s is running.\n" +msgid "Original file %s have been deleted: type=%d\n" msgstr "" -#: src/filed/status.c:199 +#: src/findlib/file_create.c:375 #, c-format -msgid " %s%s %s Job started: %s\n" +msgid "Original file %s not saved: type=%d\n" msgstr "" -#: src/filed/status.c:212 +#: src/findlib/file_create.c:378 #, c-format -msgid " Files=%s Bytes=%s Bytes/sec=%s Errors=%d\n" +msgid "Unknown file type %d; not restored: %s\n" msgstr "" -#: src/filed/status.c:218 +#: src/findlib/file_create.c:413 #, c-format -msgid " Files Examined=%s\n" +msgid "Zero length filename: %s\n" msgstr "" -#: src/filed/status.c:223 +#: src/findlib/find.c:186 #, c-format -msgid " Processing file: %s\n" +msgid "Plugin: \"%s\" not found.\n" msgstr "" -#: src/filed/status.c:234 -msgid " SDSocket closed.\n" +#: src/findlib/file_attrs.c:96 src/findlib/file_attrs.c:138 +#, c-format +msgid "Unable to set file modes %s: ERR=%s\n" msgstr "" -#: src/filed/status.c:244 src/filed/status.c:335 src/filed/status.c:409 -msgid "====\n" +#: src/findlib/file_attrs.c:106 src/findlib/file_attrs.c:132 +#: src/findlib/file_attrs.c:589 +#, c-format +msgid "Unable to set file owner %s: ERR=%s\n" msgstr "" -#: src/filed/status.c:306 -msgid " SDSocket=closed\n" +#: src/findlib/file_attrs.c:125 src/findlib/file_attrs.c:150 +#, c-format +msgid "Unable to set file times %s: ERR=%s\n" msgstr "" -#: src/filed/status.c:463 src/filed/status.c:496 +#: src/findlib/file_attrs.c:566 #, c-format -msgid "Bad .status command: %s\n" +msgid "File size of restored file %s not correct. Original %s, restored %s.\n" msgstr "" -#: src/filed/status.c:464 -msgid "2900 Bad .status command, missing argument.\n" +#: src/findlib/file_attrs.c:609 +#, c-format +msgid "Unable to set file flags %s: ERR=%s\n" msgstr "" -#: src/filed/status.c:497 -msgid "2900 Bad .status command, wrong argument.\n" +#: src/findlib/find_one.c:215 +#, c-format +msgid " NODUMP flag set - will not process %s\n" msgstr "" -#: src/filed/status.c:565 -msgid "Bacula Client: Idle" +#: src/findlib/find_one.c:236 +#, c-format +msgid "Cannot stat file %s: ERR=%s\n" msgstr "" -#: src/filed/status.c:576 -msgid "Bacula Client: Running" +#: src/findlib/find_one.c:241 +#, c-format +msgid "%s mtime changed during backup.\n" msgstr "" -#: src/filed/status.c:590 -msgid "Bacula Client: Last Job Canceled" +#: src/findlib/find_one.c:248 +#, c-format +msgid "%s ctime changed during backup.\n" msgstr "" -#: src/filed/status.c:594 -msgid "Bacula Client: Last Job Failed" +#: src/findlib/find_one.c:255 +#, c-format +msgid "%s size of %lld changed during backup to %lld.n" msgstr "" -#: src/filed/status.c:598 -msgid "Bacula Client: Last Job had Warnings" +#: src/findlib/find_one.c:383 +#, c-format +msgid "Top level directory \"%s\" has unlisted fstype \"%s\"\n" msgstr "" -#: src/filed/xattr.c:97 src/filed/xattr.c:112 src/filed/xattr.c:120 -#: src/filed/fd_plugins.c:789 src/filed/fd_plugins.c:805 src/filed/acl.c:108 -#: src/filed/acl.c:123 src/filed/acl.c:131 src/filed/backup.c:999 -#: src/filed/backup.c:1199 src/filed/backup.c:1236 src/filed/backup.c:1249 -#: src/filed/backup.c:1325 src/filed/backup.c:1424 +#: src/findlib/find_one.c:398 #, c-format -msgid "Network send error to SD. ERR=%s\n" +msgid "Top level directory \"%s\" has an unlisted drive type \"%s\"\n" msgstr "" -#: src/filed/xattr.c:245 +#: src/filed/job.c:294 #, c-format -msgid "Illegal xattr stream, no XATTR_MAGIC on file \"%s\"\n" +msgid "Command: \"%s\" is disabled.\n" msgstr "" -#: src/filed/xattr.c:259 -#, c-format -msgid "Illegal xattr stream, xattr name length <= 0 on file \"%s\"\n" +#: src/filed/job.c:440 +msgid "SD connect failed: Bad Hello command\n" msgstr "" -#: src/filed/xattr.c:381 src/filed/xattr.c:417 +#: src/filed/job.c:448 #, c-format -msgid "llistea error on file \"%s\": ERR=%s\n" +msgid "SD connect failed: Job name not found: %s\n" msgstr "" -#: src/filed/xattr.c:467 src/filed/xattr.c:520 +#: src/filed/job.c:501 #, c-format -msgid "lgetea error on file \"%s\": ERR=%s\n" +msgid "Bad command from %s. Len=%d.\n" msgstr "" -#: src/filed/xattr.c:556 src/filed/xattr.c:877 src/filed/xattr.c:1352 -#: src/filed/xattr.c:1820 src/filed/xattr.c:2176 src/filed/xattr.c:2968 -#, c-format -msgid "Xattr stream on file \"%s\" exceeds maximum size of %d bytes\n" +#: src/filed/job.c:555 +msgid "2902 Error scanning cancel command.\n" msgstr "" -#: src/filed/xattr.c:576 src/filed/xattr.c:903 src/filed/xattr.c:1372 -#: src/filed/xattr.c:1850 src/filed/xattr.c:2193 +#: src/filed/job.c:559 src/filed/job.c:598 #, c-format -msgid "Failed to serialize extended attributes on file \"%s\"\n" +msgid "2901 Job %s not found.\n" msgstr "" -#: src/filed/xattr.c:643 +#: src/filed/job.c:569 #, c-format -msgid "lsetea error on file \"%s\": ERR=%s\n" +msgid "2001 Job \"%s\" marked to be %s.\n" msgstr "" -#: src/filed/xattr.c:731 src/filed/xattr.c:769 src/filed/xattr.c:832 -#: src/filed/xattr.c:844 +#: src/filed/job.c:592 #, c-format -msgid "attr_list error on file \"%s\": ERR=%s\n" +msgid "2991 Bad setbandwidth command: %s\n" msgstr "" -#: src/filed/xattr.c:968 +#: src/filed/job.c:645 #, c-format -msgid "Received illegal xattr named %s on file \"%s\"\n" +msgid "2991 Bad setdebug command: %s\n" msgstr "" -#: src/filed/xattr.c:1001 src/filed/xattr.c:1011 +#: src/filed/job.c:678 #, c-format -msgid "attr_set error on file \"%s\": ERR=%s\n" +msgid "Bad estimate command: %s" msgstr "" -#: src/filed/xattr.c:1161 src/filed/xattr.c:1196 -#, c-format -msgid "llistxattr error on file \"%s\": ERR=%s\n" +#: src/filed/job.c:679 +msgid "2992 Bad estimate command.\n" msgstr "" -#: src/filed/xattr.c:1264 src/filed/xattr.c:1316 +#: src/filed/job.c:702 #, c-format -msgid "lgetxattr error on file \"%s\": ERR=%s\n" +msgid "Bad Job Command: %s" msgstr "" -#: src/filed/xattr.c:1435 +#: src/filed/job.c:737 #, c-format -msgid "lsetxattr error on file \"%s\": ERR=%s\n" +msgid "Bad RunBeforeJob command: %s\n" msgstr "" -#: src/filed/xattr.c:1593 src/filed/xattr.c:1628 -#, c-format -msgid "extattr_list_link error on file \"%s\": ERR=%s\n" +#: src/filed/job.c:738 src/filed/job.c:757 +msgid "2905 Bad RunBeforeJob command.\n" msgstr "" -#: src/filed/xattr.c:1648 -#, c-format -msgid "Failed to convert %d into namespace on file \"%s\"\n" +#: src/filed/job.c:768 +msgid "2905 Bad RunBeforeNow command.\n" msgstr "" -#: src/filed/xattr.c:1728 src/filed/xattr.c:1783 +#: src/filed/job.c:787 #, c-format -msgid "extattr_get_link error on file \"%s\": ERR=%s\n" +msgid "Bad RunAfter command: %s\n" msgstr "" -#: src/filed/xattr.c:1907 -#, c-format -msgid "Failed to split %s into namespace and name part on file \"%s\"\n" +#: src/filed/job.c:788 +msgid "2905 Bad RunAfterJob command.\n" msgstr "" -#: src/filed/xattr.c:1920 +#: src/filed/job.c:824 #, c-format -msgid "Failed to convert %s into namespace on file \"%s\"\n" +msgid "Bad RunScript command: %s\n" msgstr "" -#: src/filed/xattr.c:1941 -#, c-format -msgid "extattr_set_link error on file \"%s\": ERR=%s\n" +#: src/filed/job.c:825 +msgid "2905 Bad RunScript command.\n" msgstr "" -#: src/filed/xattr.c:2044 src/filed/xattr.c:2069 +#: src/filed/job.c:880 #, c-format -msgid "getproplist error on file \"%s\": ERR=%s\n" +msgid "Bad RestoreObject command: %s\n" msgstr "" -#: src/filed/xattr.c:2262 -#, c-format -msgid "Unable create proper proplist to restore xattrs on file \"%s\"\n" +#: src/filed/job.c:945 +msgid "2909 Bad RestoreObject command.\n" msgstr "" -#: src/filed/xattr.c:2291 +#: src/filed/job.c:984 #, c-format -msgid "setproplist error on file \"%s\": ERR=%s\n" +msgid "Plugin Directory not defined. Cannot use plugin: \"%s\"\n" msgstr "" -#: src/filed/xattr.c:2609 src/filed/xattr.c:2662 +#: src/filed/job.c:1026 #, c-format -msgid "Unable to get acl on xattr %s on file \"%s\": ERR=%s\n" +msgid "Error running program: %s. stat=%d: ERR=%s\n" msgstr "" -#: src/filed/xattr.c:2679 +#: src/filed/job.c:1037 #, c-format -msgid "Unable to get acl text on xattr %s on file \"%s\": ERR=%s\n" +msgid "Cannot open FileSet input file: %s. ERR=%s\n" msgstr "" -#: src/filed/xattr.c:2753 +#: src/filed/job.c:1191 #, c-format -msgid "Unable to get status on xattr %s on file \"%s\": ERR=%s\n" +msgid "REGEX %s compile error. ERR=%s\n" msgstr "" -#: src/filed/xattr.c:2886 +#: src/filed/job.c:1342 #, c-format -msgid "Unable to open xattr %s on \"%s\": ERR=%s\n" +msgid "Invalid FileSet command: %s\n" msgstr "" -#: src/filed/xattr.c:2909 +#: src/filed/job.c:1749 #, c-format -msgid "Unable to read symlin %s on \"%s\": ERR=%s\n" +msgid "" +"DIR and FD clocks differ by %lld seconds, FD automatically compensating.\n" msgstr "" -#: src/filed/xattr.c:2984 +#: src/filed/job.c:1758 #, c-format -msgid "Unable to read content of xattr %s on file \"%s\"\n" +msgid "Unknown backup level: %s\n" msgstr "" -#: src/filed/xattr.c:3024 +#: src/filed/job.c:1771 #, c-format -msgid "Unable to chdir to xattr space of file \"%s\": ERR=%s\n" +msgid "Bad level command: %s\n" msgstr "" -#: src/filed/xattr.c:3081 src/filed/xattr.c:3330 +#: src/filed/job.c:1793 #, c-format -msgid "Unable to open file \"%s\": ERR=%s\n" +msgid "Bad session command: %s" msgstr "" -#: src/filed/xattr.c:3109 src/filed/xattr.c:3391 -#, c-format -msgid "Unable to open xattr space %s on file \"%s\": ERR=%s\n" +#: src/filed/job.c:1922 +msgid "Failed connect from Storage daemon. SD bsock=NULL.\n" msgstr "" -#: src/filed/xattr.c:3125 src/filed/xattr.c:3355 -#, c-format -msgid "Unable to chdir to xattr space on file \"%s\": ERR=%s\n" +#: src/filed/job.c:1967 +msgid "ACL support not configured for your machine.\n" msgstr "" -#: src/filed/xattr.c:3146 -#, c-format -msgid "Unable to list the xattr space on file \"%s\": ERR=%s\n" +#: src/filed/job.c:1971 +msgid "XATTR support not configured for your machine.\n" msgstr "" -#: src/filed/xattr.c:3238 -#, c-format -msgid "Unable to convert acl from text on file \"%s\"\n" +#: src/filed/job.c:1980 +msgid "Cannot contact Storage daemon\n" msgstr "" -#: src/filed/xattr.c:3248 src/filed/xattr.c:3271 +#: src/filed/job.c:1999 #, c-format -msgid "Unable to restore acl of xattr %s on file \"%s\": ERR=%s\n" +msgid "Bad response to append open: %s\n" msgstr "" -#: src/filed/xattr.c:3344 -#, c-format -msgid "Unable to open xattr space on file \"%s\": ERR=%s\n" +#: src/filed/job.c:2004 +msgid "Bad response from stored to open command\n" msgstr "" -#: src/filed/xattr.c:3374 src/filed/xattr.c:3536 -#, c-format -msgid "Unable to open xattr %s on file \"%s\": ERR=%s\n" +#: src/filed/job.c:2069 +msgid "Append Close with SD failed.\n" msgstr "" -#: src/filed/xattr.c:3408 +#: src/filed/job.c:2073 #, c-format -msgid "Unable to chdir to xattr space %s on file \"%s\": ERR=%s\n" +msgid "Bad status %d %c returned from Storage Daemon.\n" msgstr "" -#: src/filed/xattr.c:3448 +#: src/filed/job.c:2095 #, c-format -msgid "Unable to mkfifo xattr %s on file \"%s\": ERR=%s\n" +msgid "2994 Bad verify command: %s\n" msgstr "" -#: src/filed/xattr.c:3466 +#: src/filed/job.c:2110 src/filed/job.c:2151 #, c-format -msgid "Unable to mknod xattr %s on file \"%s\": ERR=%s\n" +msgid "2994 Bad verify level: %s\n" msgstr "" -#: src/filed/xattr.c:3484 +#: src/filed/job.c:2222 #, c-format -msgid "Unable to mkdir xattr %s on file \"%s\": ERR=%s\n" +msgid "Bad replace command. CMD=%s\n" msgstr "" -#: src/filed/xattr.c:3504 +#: src/filed/job.c:2248 #, c-format -msgid "Unable to link xattr %s to %s on file \"%s\": ERR=%s\n" +msgid "Bad where regexp. where=%s\n" msgstr "" -#: src/filed/xattr.c:3557 -#, c-format -msgid "" -"Unable to restore data of xattr %s on file \"%s\": Not all data available in " -"xattr stream\n" +#: src/filed/job.c:2344 +msgid "Improper calling sequence.\n" msgstr "" -#: src/filed/xattr.c:3570 +#: src/filed/job.c:2364 #, c-format -msgid "Unable to restore data of xattr %s on file \"%s\": ERR=%s\n" +msgid "Bad response to SD read open: %s\n" msgstr "" -#: src/filed/xattr.c:3593 -#, c-format -msgid "Unable to symlink xattr %s to %s on file \"%s\": ERR=%s\n" +#: src/filed/job.c:2369 +msgid "Bad response from stored to read open command\n" msgstr "" -#: src/filed/xattr.c:3629 +#: src/filed/job.c:2431 #, c-format -msgid "Unable to restore owner of xattr %s on file \"%s\": ERR=%s\n" +msgid "Comm error with SD. bad response to %s. ERR=%s\n" msgstr "" -#: src/filed/xattr.c:3657 +#: src/filed/job.c:2434 #, c-format -msgid "Unable to restore filetimes of xattr %s on file \"%s\": ERR=%s\n" +msgid "Bad response from SD to %s command. Wanted %s, got %s\n" msgstr "" -#: src/filed/xattr.c:3673 +#: src/filed/filed_conf.c:196 src/filed/filed_conf.c:220 #, c-format -msgid "Illegal xattr stream, failed to parse xattr stream on file \"%s\"\n" +msgid "Expected a Cipher Type keyword, got: %s" msgstr "" -#: src/filed/xattr.c:3734 +#: src/filed/accurate.c:189 #, c-format -msgid "Failed to restore extensible attributes on file \"%s\"\n" +msgid "Space saved with Base jobs: %lld MB\n" msgstr "" -#: src/filed/xattr.c:3747 +#: src/filed/accurate.c:388 #, c-format -msgid "Failed to restore extended attributes on file \"%s\"\n" +msgid "Cannot verify checksum for %s\n" msgstr "" -#: src/filed/xattr.c:3841 src/filed/acl.c:2265 +#: src/filed/accurate.c:417 src/filed/verify.c:235 src/filed/backup.c:505 #, c-format -msgid "Unable to stat file \"%s\": ERR=%s\n" +msgid "%s digest initialization failed\n" msgstr "" -#: src/filed/xattr.c:3891 -#, c-format -msgid "" -"Can't restore Extended Attributes of %s - incompatible xattr stream " -"encountered - %d\n" +#: src/filed/accurate.c:496 +msgid "2991 Bad accurate command\n" msgstr "" -#: src/filed/fd_plugins.c:550 src/filed/fd_plugins.c:694 +#: src/filed/fd_plugins.c:545 src/filed/fd_plugins.c:689 #, c-format msgid "Command plugin \"%s\": no type in startBackupFile packet.\n" msgstr "" -#: src/filed/fd_plugins.c:563 +#: src/filed/fd_plugins.c:558 #, c-format msgid "Command plugin \"%s\": no object_name in startBackupFile packet.\n" msgstr "" -#: src/filed/fd_plugins.c:576 src/filed/fd_plugins.c:701 +#: src/filed/fd_plugins.c:571 src/filed/fd_plugins.c:696 #, c-format msgid "Command plugin \"%s\": no fname in startBackupFile packet.\n" msgstr "" -#: src/filed/fd_plugins.c:775 +#: src/filed/fd_plugins.c:770 msgid "Plugin save packet not found.\n" msgstr "" -#: src/filed/fd_plugins.c:910 +#: src/filed/fd_plugins.c:784 src/filed/fd_plugins.c:800 src/filed/xattr.c:85 +#: src/filed/xattr.c:100 src/filed/xattr.c:108 src/filed/backup.c:1000 +#: src/filed/backup.c:1199 src/filed/backup.c:1236 src/filed/backup.c:1249 +#: src/filed/backup.c:1324 src/filed/backup.c:1423 src/filed/acl.c:96 +#: src/filed/acl.c:111 src/filed/acl.c:119 +#, c-format +msgid "Network send error to SD. ERR=%s\n" +msgstr "" + +#: src/filed/fd_plugins.c:905 #, c-format msgid "Plugin=%s not found.\n" msgstr "" -#: src/filed/fd_plugins.c:977 +#: src/filed/fd_plugins.c:972 #, c-format msgid "Plugin createFile call failed. Stat=%d file=%s\n" msgstr "" -#: src/filed/fd_plugins.c:982 +#: src/filed/fd_plugins.c:977 #, c-format msgid "Plugin createFile call failed. Returned CF_ERROR file=%s\n" msgstr "" -#: src/filed/fd_plugins.c:1859 +#: src/filed/fd_plugins.c:1863 msgid "Command plugin: no fname in baculaCheckChanges packet.\n" msgstr "" -#: src/filed/filed.c:76 +#: src/filed/restore.c:102 #, c-format -msgid "" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: bacula-fd [-f -s] [-c config_file] [-d debug_level]\n" -" -c use as configuration file\n" -" -d set debug level to \n" -" -dt print a timestamp in debug output\n" -" -f run in foreground (for debugging)\n" -" -g groupid\n" -" -k keep readall capabilities\n" -" -m print kaboom output (for debugging)\n" -" -s no signals (for debugging)\n" -" -t test configuration file and exit\n" -" -u userid\n" -" -v verbose user messages\n" -" -? print this message.\n" -"\n" +msgid "Size of data or stream of %s not correct. Original %s, restored %s.\n" msgstr "" -#: src/filed/filed.c:199 -msgid "-k option has no meaning without -u option.\n" +#: src/filed/restore.c:122 +#, c-format +msgid "Invalid length of Finder Info (got %d, not 32)\n" msgstr "" -#: src/filed/filed.c:337 +#: src/filed/restore.c:127 #, c-format -msgid "" -"No File daemon resource defined in %s\n" -"Without that I don't know who I am :-(\n" +msgid "Could not set Finder Info on %s\n" msgstr "" -#: src/filed/filed.c:342 -#, c-format -msgid "Only one Client resource permitted in %s\n" +#: src/filed/restore.c:406 +msgid "LZO init failed\n" msgstr "" -#: src/filed/filed.c:366 +#: src/filed/restore.c:474 src/filed/verify_vol.c:85 #, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"File daemon in %s.\n" +msgid "Record header scan error: %s\n" msgstr "" -#: src/filed/filed.c:390 -msgid "PKI encryption/signing enabled but not compiled into Bacula.\n" +#: src/filed/restore.c:486 src/filed/verify_vol.c:94 +#, c-format +msgid "Data record error. ERR=%s\n" msgstr "" -#: src/filed/filed.c:401 +#: src/filed/restore.c:490 src/filed/verify_vol.c:98 #, c-format +msgid "Actual data size %d not same as header %d\n" +msgstr "" + +#: src/filed/restore.c:651 +msgid "Unexpected cryptographic session data stream.\n" +msgstr "" + +#: src/filed/restore.c:661 msgid "" -"\"PKI Key Pair\" must be defined for File daemon \"%s\" in %s if either " -"\"PKI Sign\" or \"PKI Encrypt\" are enabled.\n" +"No private decryption keys have been defined to decrypt encrypted backup " +"data.\n" msgstr "" -#: src/filed/filed.c:413 src/filed/filed.c:444 src/filed/filed.c:485 -msgid "Failed to allocate a new keypair object.\n" +#: src/filed/restore.c:672 +msgid "Could not create digest.\n" msgstr "" -#: src/filed/filed.c:417 -#, c-format -msgid "Failed to load public certificate for File daemon \"%s\" in %s.\n" +#: src/filed/restore.c:690 +msgid "Missing private key required to decrypt encrypted backup data.\n" msgstr "" -#: src/filed/filed.c:423 -#, c-format -msgid "Failed to load private key for File daemon \"%s\" in %s.\n" +#: src/filed/restore.c:693 +msgid "Decrypt of the session key failed.\n" msgstr "" -#: src/filed/filed.c:453 -#, c-format -msgid "Failed to load private key from file %s for File daemon \"%s\" in %s.\n" +#: src/filed/restore.c:696 +msgid "Signer not found. Decryption failed.\n" +msgstr "" + +#: src/filed/restore.c:699 +msgid "Unsupported digest algorithm. Decrypt failed.\n" +msgstr "" + +#: src/filed/restore.c:702 +msgid "Unsupported encryption algorithm. Decrypt failed.\n" msgstr "" -#: src/filed/filed.c:460 +#: src/filed/restore.c:706 #, c-format msgid "" -"Failed to load trusted signer certificate from file %s for File daemon \"%s" -"\" in %s.\n" +"An error=%d occurred while decoding encrypted session data stream: ERR=%s\n" msgstr "" -#: src/filed/filed.c:491 +#: src/filed/restore.c:774 src/filed/restore.c:828 #, c-format -msgid "" -"Failed to load master key certificate from file %s for File daemon \"%s\" in " -"%s.\n" +msgid "Missing encryption session data stream for %s\n" msgstr "" -#: src/filed/filed.c:507 +#: src/filed/restore.c:782 src/filed/restore.c:835 #, c-format -msgid "No Director resource defined in %s\n" +msgid "Failed to initialize decryption context for %s\n" msgstr "" -#: src/filed/acl.c:229 src/filed/acl.c:254 +#: src/filed/restore.c:847 #, c-format -msgid "aclx_get error on file \"%s\": ERR=%s\n" +msgid "Cannot open resource fork for %s.\n" +msgstr "" + +#: src/filed/restore.c:992 +msgid "Unexpected cryptographic signature data stream.\n" msgstr "" -#: src/filed/acl.c:280 +#: src/filed/restore.c:1000 #, c-format -msgid "Unknown acl type encountered on file \"%s\": %ld\n" +msgid "Failed to decode message signature for %s\n" msgstr "" -#: src/filed/acl.c:304 src/filed/acl.c:313 +#: src/filed/restore.c:1064 #, c-format -msgid "Failed to convert acl into text on file \"%s\"\n" +msgid "Encountered %ld acl errors while doing restore\n" msgstr "" -#: src/filed/acl.c:386 +#: src/filed/restore.c:1068 #, c-format -msgid "" -"Trying to restore POSIX acl on file \"%s\" on filesystem without AIXC acl " -"support\n" +msgid "Encountered %ld xattr errors while doing restore\n" msgstr "" -#: src/filed/acl.c:394 +#: src/filed/restore.c:1072 #, c-format msgid "" -"Trying to restore NFSv4 acl on file \"%s\" on filesystem without NFS4 acl " -"support\n" +"%d non-supported data streams and %d non-supported attrib streams ignored.\n" msgstr "" -#: src/filed/acl.c:442 src/filed/acl.c:452 +#: src/filed/restore.c:1076 #, c-format -msgid "aclx_scanStr error on file \"%s\": ERR=%s\n" +msgid "%d non-supported resource fork streams ignored.\n" msgstr "" -#: src/filed/acl.c:478 +#: src/filed/restore.c:1079 #, c-format -msgid "aclx_put error on file \"%s\": ERR=%s\n" +msgid "%d non-supported Finder Info streams ignored.\n" msgstr "" -#: src/filed/acl.c:823 +#: src/filed/restore.c:1082 #, c-format -msgid "acl_to_text error on file \"%s\": ERR=%s\n" +msgid "%d non-supported acl streams ignored.\n" msgstr "" -#: src/filed/acl.c:853 +#: src/filed/restore.c:1085 #, c-format -msgid "acl_get_file error on file \"%s\": ERR=%s\n" +msgid "%d non-supported crypto streams ignored.\n" msgstr "" -#: src/filed/acl.c:906 +#: src/filed/restore.c:1088 #, c-format -msgid "" -"acl_delete_def_file error on file \"%s\": filesystem doesn't support ACLs\n" +msgid "%d non-supported xattr streams ignored.\n" msgstr "" -#: src/filed/acl.c:912 -#, c-format -msgid "acl_delete_def_file error on file \"%s\": ERR=%s\n" +#: src/filed/restore.c:1168 +msgid "Zlib errno" msgstr "" -#: src/filed/acl.c:923 -#, c-format -msgid "acl_from_text error on file \"%s\": ERR=%s\n" +#: src/filed/restore.c:1170 +msgid "Zlib stream error" msgstr "" -#: src/filed/acl.c:939 -#, c-format -msgid "acl_valid error on file \"%s\": ERR=%s\n" +#: src/filed/restore.c:1172 +msgid "Zlib data error" msgstr "" -#: src/filed/acl.c:971 -#, c-format -msgid "acl_set_file error on file \"%s\": filesystem doesn't support ACLs\n" +#: src/filed/restore.c:1174 +msgid "Zlib memory error" msgstr "" -#: src/filed/acl.c:980 -#, c-format -msgid "acl_set_file error on file \"%s\": ERR=%s\n" +#: src/filed/restore.c:1176 +msgid "Zlib buffer error" msgstr "" -#: src/filed/acl.c:1087 src/filed/acl.c:1116 src/filed/acl.c:1230 -#: src/filed/acl.c:1738 src/filed/acl.c:1845 -#, c-format -msgid "pathconf error on file \"%s\": ERR=%s\n" +#: src/filed/restore.c:1178 +msgid "Zlib version error" msgstr "" -#: src/filed/acl.c:1246 +#: src/filed/restore.c:1218 #, c-format -msgid "" -"Trying to restore acl on file \"%s\" on filesystem without %s acl support\n" +msgid "Missing cryptographic signature for %s\n" msgstr "" -#: src/filed/acl.c:1531 +#: src/filed/restore.c:1251 src/filed/restore.c:1280 #, c-format -msgid "getacl error on file \"%s\": ERR=%s\n" +msgid "Signature validation failed for file %s: ERR=%s\n" msgstr "" -#: src/filed/acl.c:1566 +#: src/filed/restore.c:1268 #, c-format -msgid "acltostr error on file \"%s\": ERR=%s\n" +msgid "Digest one file failed for file: %s\n" msgstr "" -#: src/filed/acl.c:1588 src/filed/acl.c:1598 +#: src/filed/restore.c:1307 #, c-format -msgid "strtoacl error on file \"%s\": ERR=%s\n" +msgid "Signature validation failed for %s: %s\n" msgstr "" -#: src/filed/acl.c:1627 +#: src/filed/restore.c:1404 #, c-format -msgid "setacl error on file \"%s\": filesystem doesn't support ACLs\n" +msgid "LZO uncompression error on file %s. ERR=%d\n" msgstr "" -#: src/filed/acl.c:1635 +#: src/filed/restore.c:1441 #, c-format -msgid "setacl error on file \"%s\": ERR=%s\n" +msgid "Uncompression error on file %s. ERR=%s\n" msgstr "" -#: src/filed/acl.c:1760 +#: src/filed/restore.c:1476 #, c-format -msgid "acl_get error on file \"%s\": ERR=%s\n" +msgid "Write error in Win32 Block Decomposition on %s: %s\n" msgstr "" -#: src/filed/acl.c:1834 +#: src/filed/restore.c:1501 #, c-format -msgid "" -"Trying to restore acl on file \"%s\" on filesystem without acl support\n" +msgid "Wrong write size error at %lld block=%d wanted=%d wrote=%d\n" msgstr "" -#: src/filed/acl.c:1863 +#: src/filed/restore.c:1505 #, c-format msgid "" -"Trying to restore POSIX acl on file \"%s\" on filesystem without aclent acl " -"support\n" +"Write write error at %lld block=%d write_len=%d lerror=%d on %s: ERR=%s\n" msgstr "" -#: src/filed/acl.c:1874 -#, c-format -msgid "" -"Trying to restore NFSv4 acl on file \"%s\" on filesystem without ace acl " -"support\n" +#: src/filed/restore.c:1565 +msgid "Decryption error\n" msgstr "" -#: src/filed/acl.c:1890 -#, c-format -msgid "acl_fromtext error on file \"%s\": ERR=%s\n" +#: src/filed/restore.c:1658 +msgid "Logic error: output file should be open\n" msgstr "" -#: src/filed/acl.c:1904 src/filed/acl.c:1912 -#, c-format -msgid "wrong encoding of acl type in acl stream on file \"%s\"\n" +#: src/filed/restore.c:1696 +msgid "Logic error: output file should not be open\n" msgstr "" -#: src/filed/acl.c:1937 +#: src/filed/restore.c:1730 #, c-format -msgid "acl_set error on file \"%s\": ERR=%s\n" +msgid "Decryption error. buf_len=%d decrypt_len=%d on file %s\n" +msgstr "" + +#: src/filed/restore.c:1851 +msgid "Open File Manager paused\n" +msgstr "" + +#: src/filed/restore.c:1855 +msgid "FAILED to pause Open File Manager\n" msgstr "" -#: src/filed/acl.c:2023 +#: src/filed/restore.c:1863 #, c-format -msgid "acltotext error on file \"%s\": ERR=%s\n" +msgid "Running as '%s'. Privmask=%#08x\n" +msgstr "" + +#: src/filed/restore.c:1865 +msgid "Failed to retrieve current UserName\n" +msgstr "" + +#: src/filed/verify_vol.c:51 +msgid "Storage command not issued before Verify.\n" msgstr "" -#: src/filed/acl.c:2046 +#: src/filed/verify_vol.c:131 #, c-format -msgid "aclfromtext error on file \"%s\": ERR=%s\n" +msgid "Error scanning record header: %s\n" msgstr "" -#: src/filed/acl.c:2066 +#: src/filed/verify_vol.c:194 src/filed/verify.c:202 #, c-format -msgid "acl(SETACL) error on file \"%s\": ERR=%s\n" +msgid "Network error in send to Director: ERR=%s\n" msgstr "" -#: src/filed/acl.c:2132 +#: src/filed/authenticate.c:63 #, c-format -msgid "pioctl VIOCGETAL error on file \"%s\": ERR=%s\n" +msgid "I only authenticate directors, not %d\n" msgstr "" -#: src/filed/acl.c:2160 +#: src/filed/authenticate.c:88 #, c-format -msgid "pioctl VIOCSETAL error on file \"%s\": ERR=%s\n" +msgid "Connection from unknown Director %s at %s rejected.\n" msgstr "" -#: src/filed/acl.c:2363 +#: src/filed/authenticate.c:132 #, c-format -msgid "Can't restore ACLs of %s - incompatible acl stream encountered - %d\n" +msgid "Incorrect password given by Director at %s.\n" msgstr "" -#: src/filed/verify_vol.c:63 -msgid "Storage command not issued before Verify.\n" +#: src/filed/verify.c:45 +#, c-format +msgid "Cannot malloc %d network read buffer\n" msgstr "" -#: src/filed/verify_vol.c:97 src/filed/restore.c:486 +#: src/filed/verify.c:115 #, c-format -msgid "Record header scan error: %s\n" +msgid " Could not access %s: ERR=%s\n" msgstr "" -#: src/filed/verify_vol.c:106 src/filed/restore.c:498 +#: src/filed/verify.c:122 #, c-format -msgid "Data record error. ERR=%s\n" +msgid " Could not follow link %s: ERR=%s\n" msgstr "" -#: src/filed/verify_vol.c:110 src/filed/restore.c:502 +#: src/filed/verify.c:129 #, c-format -msgid "Actual data size %d not same as header %d\n" +msgid " Could not stat %s: ERR=%s\n" msgstr "" -#: src/filed/verify_vol.c:143 +#: src/filed/verify.c:135 src/filed/backup.c:449 #, c-format -msgid "Error scanning record header: %s\n" +msgid " Unchanged file skipped: %s\n" msgstr "" -#: src/filed/backup.c:102 -msgid "Cannot set buffer size FD->SD.\n" +#: src/filed/verify.c:138 +#, c-format +msgid " Archive file skipped: %s\n" msgstr "" -#: src/filed/backup.c:194 +#: src/filed/verify.c:141 #, c-format -msgid "Encountered %ld acl errors while doing backup\n" +msgid " Recursion turned off. Directory skipped: %s\n" msgstr "" -#: src/filed/backup.c:198 +#: src/filed/verify.c:145 #, c-format -msgid "Encountered %ld xattr errors while doing backup\n" +msgid " File system change prohibited. Directory skipped: %s\n" msgstr "" -#: src/filed/backup.c:267 src/filed/backup.c:276 -msgid "An error occurred while encrypting the stream.\n" +#: src/filed/verify.c:153 +#, c-format +msgid " Could not open directory %s: ERR=%s\n" msgstr "" -#: src/filed/backup.c:387 +#: src/filed/verify.c:158 #, c-format -msgid " Recursion turned off. Will not descend from %s into %s\n" +msgid " Unknown file type %d: %s\n" msgstr "" -#: src/filed/backup.c:394 +#: src/filed/verify.c:297 #, c-format -msgid " %s is a different filesystem. Will not descend from %s into it.\n" +msgid " Cannot open %s: ERR=%s.\n" msgstr "" -#: src/filed/backup.c:400 +#: src/filed/verify.c:311 #, c-format -msgid " Disallowed filesystem. Will not descend from %s into %s\n" +msgid " Cannot open resource fork for %s: ERR=%s.\n" msgstr "" -#: src/filed/backup.c:405 +#: src/filed/verify.c:374 #, c-format -msgid " Disallowed drive type. Will not descend into %s\n" +msgid "Error reading file %s: ERR=%s\n" msgstr "" -#: src/filed/backup.c:416 +#: src/filed/xattr.c:233 #, c-format -msgid " Socket file skipped: %s\n" +msgid "Illegal xattr stream, no XATTR_MAGIC on file \"%s\"\n" msgstr "" -#: src/filed/backup.c:429 +#: src/filed/xattr.c:247 #, c-format -msgid " Could not access \"%s\": ERR=%s\n" +msgid "Illegal xattr stream, xattr name length <= 0 on file \"%s\"\n" msgstr "" -#: src/filed/backup.c:436 +#: src/filed/xattr.c:369 src/filed/xattr.c:405 #, c-format -msgid " Could not follow link \"%s\": ERR=%s\n" +msgid "llistea error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/backup.c:443 +#: src/filed/xattr.c:455 src/filed/xattr.c:509 #, c-format -msgid " Could not stat \"%s\": ERR=%s\n" +msgid "lgetea error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/backup.c:453 +#: src/filed/xattr.c:545 src/filed/xattr.c:867 src/filed/xattr.c:1342 +#: src/filed/xattr.c:1810 src/filed/xattr.c:2167 src/filed/xattr.c:2959 #, c-format -msgid " Archive file not saved: %s\n" +msgid "Xattr stream on file \"%s\" exceeds maximum size of %d bytes\n" msgstr "" -#: src/filed/backup.c:457 +#: src/filed/xattr.c:565 src/filed/xattr.c:893 src/filed/xattr.c:1362 +#: src/filed/xattr.c:1840 src/filed/xattr.c:2184 #, c-format -msgid " Could not open directory \"%s\": ERR=%s\n" +msgid "Failed to serialize extended attributes on file \"%s\"\n" msgstr "" -#: src/filed/backup.c:466 +#: src/filed/xattr.c:632 #, c-format -msgid " Unknown file type %d; not saved: %s\n" +msgid "lsetea error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/backup.c:522 +#: src/filed/xattr.c:720 src/filed/xattr.c:758 src/filed/xattr.c:822 +#: src/filed/xattr.c:834 #, c-format -msgid "%s signature digest initialization failed\n" +msgid "attr_list error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/backup.c:630 +#: src/filed/xattr.c:958 #, c-format -msgid " Cannot open \"%s\": ERR=%s.\n" +msgid "Received illegal xattr named %s on file \"%s\"\n" msgstr "" -#: src/filed/backup.c:667 +#: src/filed/xattr.c:991 src/filed/xattr.c:1001 #, c-format -msgid " Cannot open resource fork for \"%s\": ERR=%s.\n" +msgid "attr_set error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/backup.c:763 -msgid "Failed to allocate memory for crypto signature.\n" +#: src/filed/xattr.c:1151 src/filed/xattr.c:1186 +#, c-format +msgid "llistxattr error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/backup.c:768 src/filed/backup.c:774 src/filed/backup.c:789 -msgid "An error occurred while signing the stream.\n" +#: src/filed/xattr.c:1254 src/filed/xattr.c:1306 +#, c-format +msgid "lgetxattr error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/backup.c:813 -msgid "An error occurred finalizing signing the stream.\n" +#: src/filed/xattr.c:1425 +#, c-format +msgid "lsetxattr error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/backup.c:931 +#: src/filed/xattr.c:1583 src/filed/xattr.c:1618 #, c-format -msgid "Compression deflateParams error: %d\n" +msgid "extattr_list_link error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/backup.c:968 -msgid "Encrypting sparse or offset data not supported.\n" +#: src/filed/xattr.c:1638 +#, c-format +msgid "Failed to convert %d into namespace on file \"%s\"\n" msgstr "" -#: src/filed/backup.c:975 -msgid "Failed to initialize encryption context.\n" +#: src/filed/xattr.c:1718 src/filed/xattr.c:1773 +#, c-format +msgid "extattr_get_link error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/backup.c:1085 +#: src/filed/xattr.c:1897 #, c-format -msgid "Compression deflate error: %d\n" +msgid "Failed to split %s into namespace and name part on file \"%s\"\n" msgstr "" -#: src/filed/backup.c:1092 +#: src/filed/xattr.c:1910 #, c-format -msgid "Compression deflateReset error: %d\n" +msgid "Failed to convert %s into namespace on file \"%s\"\n" msgstr "" -#: src/filed/backup.c:1126 +#: src/filed/xattr.c:1931 #, c-format -msgid "Compression LZO error: %d\n" +msgid "extattr_set_link error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/backup.c:1171 src/filed/backup.c:1187 -msgid "Encryption error\n" +#: src/filed/xattr.c:2034 src/filed/xattr.c:2059 +#, c-format +msgid "getproplist error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/backup.c:1213 +#: src/filed/xattr.c:2253 #, c-format -msgid "Read error on file %s. ERR=%s\n" +msgid "Unable create proper proplist to restore xattrs on file \"%s\"\n" msgstr "" -#: src/filed/backup.c:1216 +#: src/filed/xattr.c:2282 #, c-format -msgid "Too many errors. JobErrors=%d.\n" +msgid "setproplist error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/backup.c:1226 -msgid "Encryption padding error\n" +#: src/filed/xattr.c:2600 src/filed/xattr.c:2653 +#, c-format +msgid "Unable to get acl on xattr %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/backup.c:1290 -msgid "Invalid file flags, no supported data stream type.\n" +#: src/filed/xattr.c:2670 +#, c-format +msgid "Unable to get acl text on xattr %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/backup.c:1549 +#: src/filed/xattr.c:2744 #, c-format -msgid "VSS Writer (BackupComplete): %s\n" +msgid "Unable to get status on xattr %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:114 +#: src/filed/xattr.c:2877 #, c-format -msgid "Size of data or stream of %s not correct. Original %s, restored %s.\n" +msgid "Unable to open xattr %s on \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:134 +#: src/filed/xattr.c:2900 #, c-format -msgid "Invalid length of Finder Info (got %d, not 32)\n" +msgid "Unable to read symlin %s on \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:139 +#: src/filed/xattr.c:2975 #, c-format -msgid "Could not set Finder Info on %s\n" +msgid "Unable to read content of xattr %s on file \"%s\"\n" msgstr "" -#: src/filed/restore.c:418 -msgid "LZO init failed\n" +#: src/filed/xattr.c:3015 +#, c-format +msgid "Unable to chdir to xattr space of file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:660 -msgid "Unexpected cryptographic session data stream.\n" +#: src/filed/xattr.c:3072 src/filed/xattr.c:3321 +#, c-format +msgid "Unable to open file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:670 -msgid "" -"No private decryption keys have been defined to decrypt encrypted backup " -"data.\n" +#: src/filed/xattr.c:3100 src/filed/xattr.c:3382 +#, c-format +msgid "Unable to open xattr space %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:681 -msgid "Could not create digest.\n" +#: src/filed/xattr.c:3116 src/filed/xattr.c:3346 +#, c-format +msgid "Unable to chdir to xattr space on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:699 -msgid "Missing private key required to decrypt encrypted backup data.\n" +#: src/filed/xattr.c:3137 +#, c-format +msgid "Unable to list the xattr space on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:702 -msgid "Decrypt of the session key failed.\n" +#: src/filed/xattr.c:3229 +#, c-format +msgid "Unable to convert acl from text on file \"%s\"\n" msgstr "" -#: src/filed/restore.c:708 +#: src/filed/xattr.c:3239 src/filed/xattr.c:3262 #, c-format -msgid "An error occurred while decoding encrypted session data stream: %s\n" +msgid "Unable to restore acl of xattr %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:775 src/filed/restore.c:828 +#: src/filed/xattr.c:3335 #, c-format -msgid "Missing encryption session data stream for %s\n" +msgid "Unable to open xattr space on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:783 src/filed/restore.c:835 +#: src/filed/xattr.c:3365 src/filed/xattr.c:3527 #, c-format -msgid "Failed to initialize decryption context for %s\n" +msgid "Unable to open xattr %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:847 +#: src/filed/xattr.c:3399 #, c-format -msgid "Cannot open resource fork for %s.\n" +msgid "Unable to chdir to xattr space %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:992 -msgid "Unexpected cryptographic signature data stream.\n" +#: src/filed/xattr.c:3439 +#, c-format +msgid "Unable to mkfifo xattr %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:1000 +#: src/filed/xattr.c:3457 #, c-format -msgid "Failed to decode message signature for %s\n" +msgid "Unable to mknod xattr %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:1064 +#: src/filed/xattr.c:3475 #, c-format -msgid "Encountered %ld acl errors while doing restore\n" +msgid "Unable to mkdir xattr %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:1068 +#: src/filed/xattr.c:3495 #, c-format -msgid "Encountered %ld xattr errors while doing restore\n" +msgid "Unable to link xattr %s to %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:1072 +#: src/filed/xattr.c:3548 #, c-format msgid "" -"%d non-supported data streams and %d non-supported attrib streams ignored.\n" +"Unable to restore data of xattr %s on file \"%s\": Not all data available in " +"xattr stream\n" msgstr "" -#: src/filed/restore.c:1076 +#: src/filed/xattr.c:3561 #, c-format -msgid "%d non-supported resource fork streams ignored.\n" +msgid "Unable to restore data of xattr %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:1079 +#: src/filed/xattr.c:3584 #, c-format -msgid "%d non-supported Finder Info streams ignored.\n" +msgid "Unable to symlink xattr %s to %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:1082 +#: src/filed/xattr.c:3620 #, c-format -msgid "%d non-supported acl streams ignored.\n" +msgid "Unable to restore owner of xattr %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:1085 +#: src/filed/xattr.c:3648 #, c-format -msgid "%d non-supported crypto streams ignored.\n" +msgid "Unable to restore filetimes of xattr %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:1088 +#: src/filed/xattr.c:3664 #, c-format -msgid "%d non-supported xattr streams ignored.\n" -msgstr "" - -#: src/filed/restore.c:1168 -msgid "Zlib errno" +msgid "Illegal xattr stream, failed to parse xattr stream on file \"%s\"\n" msgstr "" -#: src/filed/restore.c:1170 -msgid "Zlib stream error" +#: src/filed/xattr.c:3725 +#, c-format +msgid "Failed to restore extensible attributes on file \"%s\"\n" msgstr "" -#: src/filed/restore.c:1172 -msgid "Zlib data error" +#: src/filed/xattr.c:3738 +#, c-format +msgid "Failed to restore extended attributes on file \"%s\"\n" msgstr "" -#: src/filed/restore.c:1174 -msgid "Zlib memory error" +#: src/filed/xattr.c:3832 src/filed/acl.c:2253 +#, c-format +msgid "Unable to stat file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:1176 -msgid "Zlib buffer error" +#: src/filed/xattr.c:3882 +#, c-format +msgid "" +"Can't restore Extended Attributes of %s - incompatible xattr stream " +"encountered - %d\n" msgstr "" -#: src/filed/restore.c:1178 -msgid "Zlib version error" +#: src/filed/backup.c:90 +msgid "Cannot set buffer size FD->SD.\n" msgstr "" -#: src/filed/restore.c:1218 +#: src/filed/backup.c:182 #, c-format -msgid "Missing cryptographic signature for %s\n" +msgid "Encountered %ld acl errors while doing backup\n" msgstr "" -#: src/filed/restore.c:1251 src/filed/restore.c:1280 +#: src/filed/backup.c:186 #, c-format -msgid "Signature validation failed for file %s: ERR=%s\n" +msgid "Encountered %ld xattr errors while doing backup\n" msgstr "" -#: src/filed/restore.c:1268 -#, c-format -msgid "Digest one file failed for file: %s\n" +#: src/filed/backup.c:253 +msgid "Unsupported cipher on this system.\n" msgstr "" -#: src/filed/restore.c:1307 -#, c-format -msgid "Signature validation failed for %s: %s\n" +#: src/filed/backup.c:259 src/filed/backup.c:268 +msgid "An error occurred while encrypting the stream.\n" msgstr "" -#: src/filed/restore.c:1404 +#: src/filed/backup.c:386 #, c-format -msgid "LZO uncompression error on file %s. ERR=%d\n" +msgid " Recursion turned off. Will not descend from %s into %s\n" msgstr "" -#: src/filed/restore.c:1441 +#: src/filed/backup.c:393 #, c-format -msgid "Uncompression error on file %s. ERR=%s\n" +msgid " %s is a different filesystem. Will not descend from %s into it.\n" msgstr "" -#: src/filed/restore.c:1474 +#: src/filed/backup.c:399 #, c-format -msgid "Write error in Win32 Block Decomposition on %s: %s\n" +msgid " Disallowed filesystem. Will not descend from %s into %s\n" msgstr "" -#: src/filed/restore.c:1533 -msgid "Decryption error\n" +#: src/filed/backup.c:404 +#, c-format +msgid " Disallowed drive type. Will not descend into %s\n" msgstr "" -#: src/filed/restore.c:1626 -msgid "Logic error: output file should be open\n" +#: src/filed/backup.c:415 +#, c-format +msgid " Socket file skipped: %s\n" msgstr "" -#: src/filed/restore.c:1664 -msgid "Logic error: output file should not be open\n" +#: src/filed/backup.c:428 +#, c-format +msgid " Could not access \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:1698 +#: src/filed/backup.c:435 #, c-format -msgid "Decryption error. buf_len=%d decrypt_len=%d on file %s\n" +msgid " Could not follow link \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:1819 -msgid "Open File Manager paused\n" +#: src/filed/backup.c:442 +#, c-format +msgid " Could not stat \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:1823 -msgid "FAILED to pause Open File Manager\n" +#: src/filed/backup.c:452 +#, c-format +msgid " Archive file not saved: %s\n" msgstr "" -#: src/filed/restore.c:1831 +#: src/filed/backup.c:456 #, c-format -msgid "Running as '%s'. Privmask=%#08x\n" +msgid " Could not open directory \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:1833 -msgid "Failed to retrieve current UserName\n" +#: src/filed/backup.c:465 +#, c-format +msgid " Unknown file type %d; not saved: %s\n" msgstr "" -#: src/filed/job.c:456 +#: src/filed/backup.c:521 #, c-format -msgid "2901 Job %s not found.\n" +msgid "%s signature digest initialization failed\n" msgstr "" -#: src/filed/job.c:466 +#: src/filed/backup.c:629 #, c-format -msgid "2001 Job %s marked to be canceled.\n" +msgid " Cannot open \"%s\": ERR=%s.\n" msgstr "" -#: src/filed/job.c:469 -msgid "2902 Error scanning cancel command.\n" +#: src/filed/backup.c:666 +#, c-format +msgid " Cannot open resource fork for \"%s\": ERR=%s.\n" msgstr "" -#: src/filed/job.c:492 -#, c-format -msgid "2991 Bad setdebug command: %s\n" +#: src/filed/backup.c:762 +msgid "Failed to allocate memory for crypto signature.\n" msgstr "" -#: src/filed/job.c:515 -#, c-format -msgid "Bad estimate command: %s" +#: src/filed/backup.c:767 +msgid "An error occurred while adding signer the stream.\n" msgstr "" -#: src/filed/job.c:516 -msgid "2992 Bad estimate command.\n" +#: src/filed/backup.c:773 src/filed/backup.c:788 +msgid "An error occurred while signing the stream.\n" msgstr "" -#: src/filed/job.c:539 -#, c-format -msgid "Bad Job Command: %s" +#: src/filed/backup.c:812 +msgid "An error occurred finalizing signing the stream.\n" msgstr "" -#: src/filed/job.c:578 +#: src/filed/backup.c:931 #, c-format -msgid "Bad RunBeforeJob command: %s\n" +msgid "Compression deflateParams error: %d\n" msgstr "" -#: src/filed/job.c:579 src/filed/job.c:598 -msgid "2905 Bad RunBeforeJob command.\n" +#: src/filed/backup.c:968 +msgid "Encrypting sparse or offset data not supported.\n" msgstr "" -#: src/filed/job.c:609 -msgid "2905 Bad RunBeforeNow command.\n" +#: src/filed/backup.c:975 +msgid "Failed to initialize encryption context.\n" msgstr "" -#: src/filed/job.c:628 +#: src/filed/backup.c:1086 #, c-format -msgid "Bad RunAfter command: %s\n" +msgid "Compression deflate error: %d\n" msgstr "" -#: src/filed/job.c:629 -msgid "2905 Bad RunAfterJob command.\n" +#: src/filed/backup.c:1093 +#, c-format +msgid "Compression deflateReset error: %d\n" msgstr "" -#: src/filed/job.c:665 +#: src/filed/backup.c:1126 #, c-format -msgid "Bad RunScript command: %s\n" +msgid "Compression LZO error: %d\n" msgstr "" -#: src/filed/job.c:666 -msgid "2905 Bad RunScript command.\n" +#: src/filed/backup.c:1171 src/filed/backup.c:1187 +msgid "Encryption error\n" msgstr "" -#: src/filed/job.c:720 +#: src/filed/backup.c:1213 #, c-format -msgid "Bad RestoreObject command: %s\n" +msgid "Read error on file %s. ERR=%s\n" msgstr "" -#: src/filed/job.c:785 -msgid "2909 Bad RestoreObject command.\n" +#: src/filed/backup.c:1216 +#, c-format +msgid "Too many errors. JobErrors=%d.\n" msgstr "" -#: src/filed/job.c:824 -#, c-format -msgid "Plugin Directory not defined. Cannot use plugin: \"%s\"\n" +#: src/filed/backup.c:1226 +msgid "Encryption padding error\n" msgstr "" -#: src/filed/job.c:866 -#, c-format -msgid "Error running program: %s. stat=%d: ERR=%s\n" +#: src/filed/backup.c:1290 +msgid "Invalid file flags, no supported data stream type.\n" msgstr "" -#: src/filed/job.c:877 +#: src/filed/backup.c:1548 #, c-format -msgid "Cannot open FileSet input file: %s. ERR=%s\n" +msgid "VSS Writer (BackupComplete): %s\n" msgstr "" -#: src/filed/job.c:1031 +#: src/filed/acl.c:217 src/filed/acl.c:242 #, c-format -msgid "REGEX %s compile error. ERR=%s\n" +msgid "aclx_get error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/job.c:1182 +#: src/filed/acl.c:268 #, c-format -msgid "Invalid FileSet command: %s\n" +msgid "Unknown acl type encountered on file \"%s\": %ld\n" msgstr "" -#: src/filed/job.c:1655 +#: src/filed/acl.c:292 src/filed/acl.c:301 #, c-format -msgid "" -"DIR and FD clocks differ by %lld seconds, FD automatically compensating.\n" +msgid "Failed to convert acl into text on file \"%s\"\n" msgstr "" -#: src/filed/job.c:1664 +#: src/filed/acl.c:374 #, c-format -msgid "Unknown backup level: %s\n" +msgid "" +"Trying to restore POSIX acl on file \"%s\" on filesystem without AIXC acl " +"support\n" msgstr "" -#: src/filed/job.c:1677 +#: src/filed/acl.c:382 #, c-format -msgid "Bad level command: %s\n" +msgid "" +"Trying to restore NFSv4 acl on file \"%s\" on filesystem without NFS4 acl " +"support\n" msgstr "" -#: src/filed/job.c:1699 +#: src/filed/acl.c:430 src/filed/acl.c:440 #, c-format -msgid "Bad session command: %s" +msgid "aclx_scanStr error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/job.c:1760 +#: src/filed/acl.c:466 #, c-format -msgid "Bad storage command: %s" +msgid "aclx_put error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/job.c:1781 +#: src/filed/acl.c:811 #, c-format -msgid "Failed to connect to Storage daemon: %s:%d\n" +msgid "acl_to_text error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/job.c:1793 -msgid "Failed to authenticate Storage daemon.\n" +#: src/filed/acl.c:841 +#, c-format +msgid "acl_get_file error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/job.c:1840 -msgid "ACL support not configured for your machine.\n" +#: src/filed/acl.c:894 +#, c-format +msgid "" +"acl_delete_def_file error on file \"%s\": filesystem doesn't support ACLs\n" msgstr "" -#: src/filed/job.c:1844 -msgid "XATTR support not configured for your machine.\n" +#: src/filed/acl.c:900 +#, c-format +msgid "acl_delete_def_file error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/job.c:1853 -msgid "Cannot contact Storage daemon\n" +#: src/filed/acl.c:911 +#, c-format +msgid "acl_from_text error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/job.c:1872 +#: src/filed/acl.c:927 #, c-format -msgid "Bad response to append open: %s\n" +msgid "acl_valid error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/job.c:1877 -msgid "Bad response from stored to open command\n" +#: src/filed/acl.c:959 +#, c-format +msgid "acl_set_file error on file \"%s\": filesystem doesn't support ACLs\n" msgstr "" -#: src/filed/job.c:1909 +#: src/filed/acl.c:968 #, c-format -msgid "Generate VSS snapshots. Driver=\"%s\", Drive(s)=\"%s\"\n" +msgid "acl_set_file error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/job.c:1912 +#: src/filed/acl.c:1075 src/filed/acl.c:1104 src/filed/acl.c:1218 +#: src/filed/acl.c:1726 src/filed/acl.c:1833 #, c-format -msgid "CreateSGenerate VSS snapshots failed. ERR=%s\n" +msgid "pathconf error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/job.c:1919 +#: src/filed/acl.c:1234 #, c-format -msgid "Generate VSS snapshot of drive \"%c:\\\" failed.\n" +msgid "" +"Trying to restore acl on file \"%s\" on filesystem without %s acl support\n" msgstr "" -#: src/filed/job.c:1925 +#: src/filed/acl.c:1519 #, c-format -msgid "VSS Writer (PrepareForBackup): %s\n" +msgid "getacl error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/job.c:1930 -msgid "No drive letters found for generating VSS snapshots.\n" +#: src/filed/acl.c:1554 +#, c-format +msgid "acltostr error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/job.c:1934 +#: src/filed/acl.c:1576 src/filed/acl.c:1586 #, c-format -msgid "VSS was not initialized properly. ERR=%s\n" +msgid "strtoacl error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/job.c:1985 -msgid "Append Close with SD failed.\n" +#: src/filed/acl.c:1615 +#, c-format +msgid "setacl error on file \"%s\": filesystem doesn't support ACLs\n" msgstr "" -#: src/filed/job.c:1989 +#: src/filed/acl.c:1623 #, c-format -msgid "Bad status %d returned from Storage Daemon.\n" +msgid "setacl error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/job.c:2019 +#: src/filed/acl.c:1748 #, c-format -msgid "2994 Bad verify command: %s\n" +msgid "acl_get error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/job.c:2034 src/filed/job.c:2075 +#: src/filed/acl.c:1822 #, c-format -msgid "2994 Bad verify level: %s\n" +msgid "" +"Trying to restore acl on file \"%s\" on filesystem without acl support\n" msgstr "" -#: src/filed/job.c:2146 +#: src/filed/acl.c:1851 #, c-format -msgid "Bad replace command. CMD=%s\n" +msgid "" +"Trying to restore POSIX acl on file \"%s\" on filesystem without aclent acl " +"support\n" msgstr "" -#: src/filed/job.c:2169 +#: src/filed/acl.c:1862 #, c-format -msgid "Bad where regexp. where=%s\n" +msgid "" +"Trying to restore NFSv4 acl on file \"%s\" on filesystem without ace acl " +"support\n" msgstr "" -#: src/filed/job.c:2207 +#: src/filed/acl.c:1878 #, c-format -msgid "VSS was not initialized properly. VSS support is disabled. ERR=%s\n" +msgid "acl_fromtext error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/job.c:2252 +#: src/filed/acl.c:1892 src/filed/acl.c:1900 #, c-format -msgid "VSS Writer (RestoreComplete): %s\n" +msgid "wrong encoding of acl type in acl stream on file \"%s\"\n" msgstr "" -#: src/filed/job.c:2302 -msgid "Improper calling sequence.\n" +#: src/filed/acl.c:1925 +#, c-format +msgid "acl_set error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/job.c:2322 +#: src/filed/acl.c:2011 #, c-format -msgid "Bad response to SD read open: %s\n" +msgid "acltotext error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/job.c:2327 -msgid "Bad response from stored to read open command\n" +#: src/filed/acl.c:2034 +#, c-format +msgid "aclfromtext error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/job.c:2391 +#: src/filed/acl.c:2054 #, c-format -msgid "Comm error with SD. bad response to %s. ERR=%s\n" +msgid "acl(SETACL) error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/job.c:2394 +#: src/filed/acl.c:2120 #, c-format -msgid "Bad response to %s command. Wanted %s, got %s\n" +msgid "pioctl VIOCGETAL error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/authenticate.c:68 +#: src/filed/acl.c:2148 #, c-format -msgid "I only authenticate directors, not %d\n" +msgid "pioctl VIOCSETAL error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/authenticate.c:100 +#: src/filed/acl.c:2351 #, c-format -msgid "Connection from unknown Director %s at %s rejected.\n" +msgid "Can't restore ACLs of %s - incompatible acl stream encountered - %d\n" msgstr "" -#: src/filed/authenticate.c:144 +#: src/filed/filed.c:52 #, c-format -msgid "Incorrect password given by Director at %s.\n" +msgid "" +"\n" +"%sVersion: %s (%s)\n" +"\n" +"Usage: bacula-fd [-f -s] [-c config_file] [-d debug_level]\n" +" -c use as configuration file\n" +" -d [,] set debug level to , debug tags to \n" +" -dt print a timestamp in debug output\n" +" -f run in foreground (for debugging)\n" +" -g groupid\n" +" -k keep readall capabilities\n" +" -m print kaboom output (for debugging)\n" +" -s no signals (for debugging)\n" +" -t test configuration file and exit\n" +" -T set trace on\n" +" -u userid\n" +" -v verbose user messages\n" +" -? print this message.\n" +"\n" msgstr "" -#: src/filed/authenticate.c:263 -msgid "" -"Authorization key rejected by Storage daemon.\n" -"Please see " +#: src/filed/filed.c:185 +msgid "-k option has no meaning without -u option.\n" msgstr "" -#: examples/nagios/check_bacula/check_bacula.c:59 +#: src/filed/filed.c:315 #, c-format msgid "" -"Copyright (C) 2005 Christian Masopust\n" -"Written by Christian Masopust (2005)\n" -"\n" -"Version: " +"No File daemon resource defined in %s\n" +"Without that I don't know who I am :-(\n" msgstr "" -#: src/baconfig.h:72 src/baconfig.h:73 src/baconfig.h:78 src/baconfig.h:79 +#: src/filed/filed.c:320 #, c-format -msgid "Failed ASSERT: %s\n" +msgid "Only one Client resource permitted in %s\n" msgstr "" -#: src/win32/compat/compat.cpp:2721 -msgid "" -"\n" -"\n" -"Bacula ERROR: " +#: src/filed/filed.c:348 src/filed/filed.c:547 +#, c-format +msgid "Disable Command \"%s\" not found.\n" msgstr "" -#: src/win32/libwin32/service.cpp:107 -msgid "RegisterServiceCtlHandler failed" +#: src/filed/filed.c:375 +#, c-format +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"File daemon in %s.\n" msgstr "" -#: src/win32/libwin32/service.cpp:108 -msgid "Failure contacting the Service Handler" +#: src/filed/filed.c:399 +msgid "PKI encryption/signing enabled but not compiled into Bacula.\n" msgstr "" -#: src/win32/libwin32/service.cpp:119 -msgid "Service start report failed" +#: src/filed/filed.c:410 +#, c-format +msgid "" +"\"PKI Key Pair\" must be defined for File daemon \"%s\" in %s if either " +"\"PKI Sign\" or \"PKI Encrypt\" are enabled.\n" msgstr "" -#: src/win32/libwin32/service.cpp:172 -msgid "StartServiceCtrlDispatcher failed." +#: src/filed/filed.c:422 src/filed/filed.c:453 src/filed/filed.c:503 +msgid "Failed to allocate a new keypair object.\n" msgstr "" -#: src/win32/libwin32/service.cpp:179 -msgid "KERNEL32.DLL not found: Bacula service not started" +#: src/filed/filed.c:426 +#, c-format +msgid "Failed to load public certificate for File daemon \"%s\" in %s.\n" msgstr "" -#: src/win32/libwin32/service.cpp:189 -msgid "Registry service not found: Bacula service not started" +#: src/filed/filed.c:432 +#, c-format +msgid "Failed to load private key for File daemon \"%s\" in %s.\n" msgstr "" -#: src/win32/libwin32/service.cpp:191 -msgid "Registry service entry point not found" +#: src/filed/filed.c:462 +#, c-format +msgid "Failed to load private key from file %s for File daemon \"%s\" in %s.\n" msgstr "" -#: src/win32/libwin32/service.cpp:212 -msgid "Report Service failure" +#: src/filed/filed.c:469 +#, c-format +msgid "" +"Failed to load trusted signer certificate from file %s for File daemon \"%s" +"\" in %s.\n" msgstr "" -#: src/win32/libwin32/service.cpp:243 -msgid "Unable to install the service" +#: src/filed/filed.c:509 +#, c-format +msgid "" +"Failed to load master key certificate from file %s for File daemon \"%s\" in " +"%s.\n" msgstr "" -#: src/win32/libwin32/service.cpp:251 -msgid "Service command length too long" +#: src/filed/filed.c:525 +#, c-format +msgid "No Director resource defined in %s\n" msgstr "" -#: src/win32/libwin32/service.cpp:252 -msgid "Service command length too long. Service not registered." +#: src/filed/status.c:82 +#, c-format +msgid "Daemon started %s. Jobs: run=%d running=%d.\n" msgstr "" -#: src/win32/libwin32/service.cpp:265 +#: src/filed/status.c:143 +#, c-format msgid "" -"The Service Control Manager could not be contacted - the service was not " -"installed" +" Sizes: boffset_t=%d size_t=%d debug=%s trace=%d mode=%d,%d bwlimit=%skB/s\n" msgstr "" -#: src/win32/libwin32/service.cpp:288 src/win32/libwin32/service.cpp:317 -#: src/win32/libwin32/service.cpp:365 src/win32/libwin32/service.cpp:373 -#: src/win32/libwin32/service.cpp:377 -msgid "The Bacula service: " +#: src/filed/status.c:199 +#, c-format +msgid "Director connected at: %s\n" msgstr "" -#: src/win32/libwin32/service.cpp:295 -msgid "" -"Provides file backup and restore services. Bacula -- the network backup " -"solution." +#: src/filed/status.c:201 +#, c-format +msgid "JobId %d Job %s is running.\n" msgstr "" -#: src/win32/libwin32/service.cpp:306 -msgid "Cannot write System Registry for " +#: src/filed/status.c:204 +#, c-format +msgid " %s%s %s Job started: %s\n" msgstr "" -#: src/win32/libwin32/service.cpp:307 +#: src/filed/status.c:232 +#, c-format msgid "" -"The System Registry could not be updated - the Bacula service was not " -"installed" +" Files=%s Bytes=%s AveBytes/sec=%s LastBytes/sec=%s Errors=%d\n" +" Bwlimit=%s\n" msgstr "" -#: src/win32/libwin32/service.cpp:316 -msgid "Cannot add Bacula key to System Registry" +#: src/filed/status.c:242 +#, c-format +msgid " Files: Restored=%s Expected=%s Completed=%d%%\n" +msgstr "" + +#: src/filed/status.c:247 +#, c-format +msgid " Files: Examined=%s Backed up=%s\n" msgstr "" -#: src/win32/libwin32/service.cpp:327 -msgid "The " +#: src/filed/status.c:260 +#, c-format +msgid " Processing file: %s\n" msgstr "" -#: src/win32/libwin32/service.cpp:385 -msgid "An existing Bacula service: " +#: src/filed/status.c:271 +msgid " SDSocket closed.\n" msgstr "" -#: src/win32/libwin32/service.cpp:394 -msgid "" -"The service Manager could not be contacted - the Bacula service was not " -"removed" +#: src/filed/status.c:281 +msgid "====\n" msgstr "" -#: src/win32/libwin32/service.cpp:407 -msgid "" -"Could not find registry entry.\n" -"Service probably not registerd - the Bacula service was not removed" +#: src/filed/status.c:343 +msgid " SDSocket=closed\n" msgstr "" -#: src/win32/libwin32/service.cpp:414 -msgid "Could not delete Registry key for " +#: src/filed/status.c:393 src/filed/status.c:427 +#, c-format +msgid "Bad .status command: %s\n" msgstr "" -#: src/win32/libwin32/service.cpp:425 -msgid "Bacula could not be contacted, probably not running" +#: src/filed/status.c:394 +msgid "2900 Bad .status command, missing argument.\n" msgstr "" -#: src/win32/libwin32/service.cpp:433 -msgid "The Bacula service has been removed" +#: src/filed/status.c:428 +msgid "2900 Bad .status command, wrong argument.\n" msgstr "" -#: src/win32/libwin32/service.cpp:474 -msgid "SetServiceStatus failed" +#: src/tools/bregex.c:141 src/tools/bregtest.c:125 src/tools/bwild.c:110 +#, c-format +msgid "Could not open data file: %s\n" msgstr "" -#: src/win32/libwin32/service.cpp:500 +#: src/tools/bbatch.c:67 #, c-format msgid "" "\n" +"Version: %s (%s)\n" +"Example : bbatch -w /path/to/workdir -h localhost -f dat1 -f dat -f datx\n" +" will start 3 thread and load dat1, dat and datx in your catalog\n" +"See bbatch.c to generate datafile\n" +"\n" +"Usage: bbatch [ options ] -w working/dir -f datafile\n" +" -b with batch mode\n" +" -B without batch mode\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -n specify the database name (default bacula)\n" +" -u specify database user name (default bacula)\n" +" -P specify database host (default NULL)\n" +" -w specify working directory\n" +" -r call restore code with given jobids\n" +" -v verbose\n" +" -f specify data file\n" +" -? print this message\n" "\n" -"%s error: %ld at %s:%d" msgstr "" -#: src/win32/libwin32/service.cpp:576 +#: src/tools/bbatch.c:199 #, c-format -msgid "Locked by: %s, duration: %ld seconds\n" +msgid "Computing file list for jobid=%s files=%lld secs=%d\n" msgstr "" -#: src/win32/libwin32/service.cpp:580 +#: src/tools/bbatch.c:303 #, c-format -msgid "No longer locked\n" +msgid "Error opening datafile %s\n" +msgstr "" + +#: src/tools/bbatch.c:313 +msgid "Error while inserting file\n" msgstr "" -#: src/win32/libwin32/service.cpp:584 -msgid "Could not lock database" +#: src/tools/drivetype.c:35 +#, c-format +msgid "" +"\n" +"Usage: drivetype [-v] path ...\n" +"\n" +" Print the drive type a given file/directory is on.\n" +" The following options are supported:\n" +"\n" +" -l print local fixed hard drive\n" +" -a display information on all drives\n" +" -v print both path and file system type.\n" +" -? print this message.\n" +"\n" msgstr "" -#: src/win32/libwin32/main.cpp:245 -msgid "Bad Command Line Option" +#: src/tools/drivetype.c:66 src/tools/fstype.c:90 +#, c-format +msgid "%s: unknown\n" msgstr "" -#: src/wx-console/wxbconfigfileeditor.cpp:65 -msgid "Config file editor" +#: src/tools/bsmtp.c:139 +#, c-format +msgid "Fatal malformed reply from %s: %s\n" msgstr "" -#: src/wx-console/wxbconfigfileeditor.cpp:75 -msgid "# Bacula bwx-console Configuration File\n" +#: src/tools/bsmtp.c:147 +#, c-format +msgid "Fatal fgets error: ERR=%s\n" msgstr "" -#: src/wx-console/wxbconfigfileeditor.cpp:111 -msgid "Save and close" +#: src/tools/bsmtp.c:180 +#, c-format +msgid "" +"\n" +"Usage: %s [-f from] [-h mailhost] [-s subject] [-c copy] [recipient ...]\n" +" -4 forces bsmtp to use IPv4 addresses only.\n" +" -6 forces bsmtp to use IPv6 addresses only.\n" +" -8 set charset to UTF-8\n" +" -a use any ip protocol for address resolution\n" +" -c set the Cc: field\n" +" -d set debug level to \n" +" -dt print a timestamp in debug output\n" +" -f set the From: field\n" +" -h use mailhost:port as the SMTP server\n" +" -s set the Subject: field\n" +" -r set the Reply-To: field\n" +" -l set the maximum number of lines to send (default: " +"unlimited)\n" +" -? print this message.\n" +"\n" msgstr "" -#: src/wx-console/wxbconfigfileeditor.cpp:112 -msgid "Close without saving" +#: src/tools/bsmtp.c:367 +msgid "Fatal error: no recipient given.\n" msgstr "" -#: src/wx-console/wxbconfigfileeditor.cpp:139 +#: src/tools/bsmtp.c:395 #, c-format -msgid "Unable to write to %s\n" -msgstr "" - -#: src/wx-console/wxbconfigfileeditor.cpp:140 -msgid "Error while saving" -msgstr "" - -#: src/wx-console/wxbrestorepanel.cpp:234 -#: src/wx-console/wxbrestorepanel.cpp:1947 -#: src/wx-console/wxbrestorepanel.cpp:1976 -msgid "Enter restore mode" -msgstr "" - -#: src/wx-console/wxbrestorepanel.cpp:237 -msgid "Cancel restore" -msgstr "" - -#: src/wx-console/wxbrestorepanel.cpp:263 -#: src/wx-console/wxbrestorepanel.cpp:317 -msgid "Add" +msgid "Fatal gethostname error: ERR=%s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:265 -#: src/wx-console/wxbrestorepanel.cpp:319 -msgid "Remove" +#: src/tools/bsmtp.c:406 +#, c-format +msgid "Fatal getaddrinfo for myself failed \"%s\": ERR=%s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:267 -#: src/wx-console/wxbrestorepanel.cpp:321 -msgid "Refresh" +#: src/tools/bsmtp.c:414 +#, c-format +msgid "Fatal gethostbyname for myself failed \"%s\": ERR=%s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:286 -msgid "M" +#: src/tools/bsmtp.c:474 src/tools/bsmtp.c:509 +#, c-format +msgid "Error unknown mail host \"%s\": ERR=%s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:290 -msgid "Filename" +#: src/tools/bsmtp.c:477 src/tools/bsmtp.c:512 +msgid "Retrying connection using \"localhost\".\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:294 -msgid "Size" +#: src/tools/bsmtp.c:502 +#, c-format +msgid "Failed to connect to mailhost %s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:298 -msgid "Date" +#: src/tools/bsmtp.c:520 +#, c-format +msgid "Fatal error: Unknown address family for smtp host: %d\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:302 -msgid "Perm." +#: src/tools/bsmtp.c:529 src/tools/bsmtp.c:534 +#, c-format +msgid "Fatal socket error: ERR=%s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:306 -msgid "User" +#: src/tools/bsmtp.c:539 +#, c-format +msgid "Fatal connect error to %s: ERR=%s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:310 -msgid "Group" +#: src/tools/bsmtp.c:548 +#, c-format +msgid "Fatal _open_osfhandle error: ERR=%s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:335 -#: src/wx-console/wxbrestorepanel.cpp:348 -#: src/wx-console/wxbrestorepanel.cpp:503 -#: src/wx-console/wxbrestorepanel.cpp:513 -#: src/wx-console/wxbrestorepanel.cpp:516 -#: src/wx-console/wxbrestorepanel.cpp:1811 -#: src/wx-console/wxbrestorepanel.cpp:1897 -msgid "Job Name" +#: src/tools/bsmtp.c:555 src/tools/bsmtp.c:559 src/tools/bsmtp.c:568 +#: src/tools/bsmtp.c:572 +#, c-format +msgid "Fatal fdopen error: ERR=%s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:337 -#: src/wx-console/wxbrestorepanel.cpp:353 -#: src/wx-console/wxbrestorepanel.cpp:455 -#: src/wx-console/wxbrestorepanel.cpp:456 -#: src/wx-console/wxbrestorepanel.cpp:466 -#: src/wx-console/wxbrestorepanel.cpp:467 -#: src/wx-console/wxbrestorepanel.cpp:1153 -#: src/wx-console/wxbrestorepanel.cpp:1156 -#: src/wx-console/wxbrestorepanel.cpp:1239 -#: src/wx-console/wxbrestorepanel.cpp:1849 -#: src/wx-console/wxbrestorepanel.cpp:1851 -#: src/wx-console/wxbrestorepanel.cpp:1912 -msgid "Fileset" +#: src/tools/bsmtp.c:564 +#, c-format +msgid "Fatal dup error: ERR=%s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:340 -#: src/wx-console/wxbrestorepanel.cpp:1233 -#: src/wx-console/wxbrestorepanel.cpp:1249 -#: src/wx-console/wxbrestorepanel.cpp:1251 -#: src/wx-console/wxbrestorepanel.cpp:1259 -#: src/wx-console/wxbrestorepanel.cpp:1261 -#: src/wx-console/wxbrestorepanel.cpp:1280 -#: src/wx-console/wxbrestorepanel.cpp:1287 -#: src/wx-console/wxbrestorepanel.cpp:1839 -#: src/wx-console/wxbrestorepanel.cpp:1850 -#: src/wx-console/wxbrestorepanel.cpp:1971 -msgid "Before" +#: src/tools/dbcheck.c:183 +msgid "" +"Warning skipping the additional parameters for working directory/dbname/user/" +"password/host.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:342 -msgid "Please configure parameters concerning files to restore :" +#: src/tools/dbcheck.c:200 +#, c-format +msgid "Error can not find the Catalog name[%s] in the given config file [%s]\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:351 -#: src/wx-console/wxbrestorepanel.cpp:1905 -msgid "always" +#: src/tools/dbcheck.c:202 +#, c-format +msgid "Error there is no Catalog section in the given config file [%s]\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:351 -msgid "if newer" +#: src/tools/dbcheck.c:211 +msgid "Error no Director resource defined.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:351 -msgid "if older" +#: src/tools/dbcheck.c:235 +msgid "Wrong number of arguments.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:351 -#: src/wx-console/wxbrestorepanel.cpp:1908 -msgid "never" +#: src/tools/dbcheck.c:240 +msgid "Working directory not supplied.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:359 -msgid "Please configure parameters concerning files restoration :" +#: src/tools/dbcheck.c:276 +msgid "Database port must be a numeric value.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:427 -msgid "Getting parameters list." +#: src/tools/dbcheck.c:279 +msgid "Database port must be a int value.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:435 -msgid "Error : no clients returned by the director." +#: src/tools/dbcheck.c:353 +#, c-format +msgid "Hello, this is the database check/correct program.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:459 -msgid "Error : no filesets returned by the director." +#: src/tools/dbcheck.c:355 +#, c-format +msgid "Modify database is on." msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:483 -msgid "Error : no storage returned by the director." +#: src/tools/dbcheck.c:357 +#, c-format +msgid "Modify database is off." msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:506 -#: src/wx-console/wxbrestorepanel.cpp:530 -msgid "Error : no jobs returned by the director." +#: src/tools/dbcheck.c:359 src/tools/dbcheck.c:420 +#, c-format +msgid " Verbose is on.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:516 -msgid "RestoreFiles" +#: src/tools/dbcheck.c:361 src/tools/dbcheck.c:422 +#, c-format +msgid " Verbose is off.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:551 -msgid "Please configure your restore parameters." +#: src/tools/dbcheck.c:363 +#, c-format +msgid "Please select the function you want to perform.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:556 -msgid "Please select a client." +#: src/tools/dbcheck.c:367 +#, c-format +msgid "" +"\n" +" 1) Toggle modify database flag\n" +" 2) Toggle verbose flag\n" +" 3) Repair bad Filename records\n" +" 4) Repair bad Path records\n" +" 5) Eliminate duplicate Filename records\n" +" 6) Eliminate duplicate Path records\n" +" 7) Eliminate orphaned Jobmedia records\n" +" 8) Eliminate orphaned File records\n" +" 9) Eliminate orphaned Path records\n" +" 10) Eliminate orphaned Filename records\n" +" 11) Eliminate orphaned FileSet records\n" +" 12) Eliminate orphaned Client records\n" +" 13) Eliminate orphaned Job records\n" +" 14) Eliminate all Admin records\n" +" 15) Eliminate all Restore records\n" +" 16) All (3-15)\n" +" 17) Quit\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:560 -msgid "Please select a restore date." +#: src/tools/dbcheck.c:386 +#, c-format +msgid "" +"\n" +" 1) Toggle modify database flag\n" +" 2) Toggle verbose flag\n" +" 3) Check for bad Filename records\n" +" 4) Check for bad Path records\n" +" 5) Check for duplicate Filename records\n" +" 6) Check for duplicate Path records\n" +" 7) Check for orphaned Jobmedia records\n" +" 8) Check for orphaned File records\n" +" 9) Check for orphaned Path records\n" +" 10) Check for orphaned Filename records\n" +" 11) Check for orphaned FileSet records\n" +" 12) Check for orphaned Client records\n" +" 13) Check for orphaned Job records\n" +" 14) Check for all Admin records\n" +" 15) Check for all Restore records\n" +" 16) All (3-15)\n" +" 17) Quit\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:565 -msgid "Building restore tree..." +#: src/tools/dbcheck.c:406 +msgid "Select function number: " msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:613 -msgid "Error while starting restore: " +#: src/tools/dbcheck.c:413 +#, c-format +msgid "Database will be modified.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:705 -msgid "" -"Right click on a file or on a directory, or double-click on its mark to add " -"it to the restore list." +#: src/tools/dbcheck.c:415 +#, c-format +msgid "Database will NOT be modified.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:720 src/wx-console/wxbmainframe.cpp:685 -msgid "Unexpected question has been received.\n" +#: src/tools/dbcheck.c:506 +#, c-format +msgid "JobId=%s Name=\"%s\" StartTime=%s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:742 -#: src/wx-console/wxbrestorepanel.cpp:764 -msgid "bwx-console: unexpected restore question." +#: src/tools/dbcheck.c:513 +#, c-format +msgid "Orphaned JobMediaId=%s JobId=%s Volume=\"%s\"\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:775 -msgid " files selected to be restored." +#: src/tools/dbcheck.c:520 +#, c-format +msgid "Orphaned FileId=%s JobId=%s Volume=\"%s\"\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:780 -msgid " file selected to be restored." +#: src/tools/dbcheck.c:527 +#, c-format +msgid "Orphaned FileSetId=%s FileSet=\"%s\" MD5=%s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:787 +#: src/tools/dbcheck.c:534 #, c-format -msgid "Please configure your restore (%ld files selected to be restored)..." +msgid "Orphaned ClientId=%s Name=\"%s\"\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:797 -msgid "Restore failed : no file selected.\n" +#: src/tools/dbcheck.c:587 +#, c-format +msgid "Deleting: %s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:798 -msgid "Restore failed : no file selected." +#: src/tools/dbcheck.c:659 +#, c-format +msgid "Checking for duplicate Filename entries.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:808 -msgid "Restoring, please wait..." +#: src/tools/dbcheck.c:670 +#, c-format +msgid "Found %d duplicate Filename records.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:821 -msgid "Job queued. JobId=" +#: src/tools/dbcheck.c:671 +msgid "Print the list? (yes/no): " msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:823 -msgid "Restore queued, jobid=" +#: src/tools/dbcheck.c:694 src/tools/dbcheck.c:759 +#, c-format +msgid "Found %d for: %s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:827 -msgid "Job failed." +#: src/tools/dbcheck.c:724 +#, c-format +msgid "Checking for duplicate Path entries.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:828 -msgid "Restore failed, please look at messages.\n" +#: src/tools/dbcheck.c:735 +#, c-format +msgid "Found %d duplicate Path records.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:829 -msgid "Restore failed, please look at messages in console." +#: src/tools/dbcheck.c:736 src/tools/dbcheck.c:798 src/tools/dbcheck.c:844 +#: src/tools/dbcheck.c:912 src/tools/dbcheck.c:970 src/tools/dbcheck.c:1013 +#: src/tools/dbcheck.c:1055 src/tools/dbcheck.c:1097 src/tools/dbcheck.c:1134 +#: src/tools/dbcheck.c:1167 src/tools/dbcheck.c:1201 src/tools/dbcheck.c:1268 +msgid "Print them? (yes/no): " msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:835 -#: src/wx-console/wxbrestorepanel.cpp:836 -msgid "Failed to retrieve jobid.\n" +#: src/tools/dbcheck.c:789 +#, c-format +msgid "Checking for orphaned JobMedia entries.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:862 -msgid "" -"Restore is scheduled to run. bwx-console will not wait for its completion.\n" +#: src/tools/dbcheck.c:797 +#, c-format +msgid "Found %d orphaned JobMedia records.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:863 -msgid "" -"Restore is scheduled to run. bwx-console will not wait for its completion." +#: src/tools/dbcheck.c:815 +#, c-format +msgid "Deleting %d orphaned JobMedia records.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:889 -msgid "Restore job created, but not yet running." +#: src/tools/dbcheck.c:832 +#, c-format +msgid "Checking for orphaned File entries. This may take some time!\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:894 +#: src/tools/dbcheck.c:843 #, c-format -msgid "Restore job running, please wait (%ld of %ld files restored)..." +msgid "Found %d orphaned File records.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:898 -msgid "Restore job terminated successfully." +#: src/tools/dbcheck.c:860 +#, c-format +msgid "Deleting %d orphaned File records.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:899 -msgid "Restore job terminated successfully.\n" +#: src/tools/dbcheck.c:879 +#, c-format +msgid "Pruning orphaned Path entries isn't possible when using BVFS.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:904 -msgid "Restore job terminated in error, see messages in console." +#: src/tools/dbcheck.c:888 src/tools/dbcheck.c:946 +msgid "Create temporary index? (yes/no): " msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:905 -msgid "Restore job terminated in error, see messages.\n" +#: src/tools/dbcheck.c:900 +#, c-format +msgid "Checking for orphaned Path entries. This may take some time!\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:910 -msgid "Restore job reported a non-fatal error." +#: src/tools/dbcheck.c:911 +#, c-format +msgid "Found %d orphaned Path records.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:914 -msgid "Restore job reported a fatal error." +#: src/tools/dbcheck.c:924 +#, c-format +msgid "Deleting %d orphaned Path records.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:919 -msgid "Restore job cancelled by user." +#: src/tools/dbcheck.c:958 +#, c-format +msgid "Checking for orphaned Filename entries. This may take some time!\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:920 -msgid "Restore job cancelled by user.\n" +#: src/tools/dbcheck.c:969 +#, c-format +msgid "Found %d orphaned Filename records.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:925 -msgid "Restore job is waiting on File daemon." +#: src/tools/dbcheck.c:982 +#, c-format +msgid "Deleting %d orphaned Filename records.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:929 -msgid "Restore job is waiting for new media." +#: src/tools/dbcheck.c:1002 +#, c-format +msgid "Checking for orphaned FileSet entries. This takes some time!\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:933 -msgid "Restore job is waiting for storage resource." +#: src/tools/dbcheck.c:1012 +#, c-format +msgid "Found %d orphaned FileSet records.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:937 -msgid "Restore job is waiting for job resource." +#: src/tools/dbcheck.c:1027 +#, c-format +msgid "Deleting %d orphaned FileSet records.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:941 -msgid "Restore job is waiting for Client resource." +#: src/tools/dbcheck.c:1036 +#, c-format +msgid "Checking for orphaned Client entries.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:945 -msgid "Restore job is waiting for maximum jobs." +#: src/tools/dbcheck.c:1054 +#, c-format +msgid "Found %d orphaned Client records.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:949 -msgid "Restore job is waiting for start time." +#: src/tools/dbcheck.c:1069 +#, c-format +msgid "Deleting %d orphaned Client records.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:953 -msgid "Restore job is waiting for higher priority jobs to finish." +#: src/tools/dbcheck.c:1078 +#, c-format +msgid "Checking for orphaned Job entries.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1002 -msgid "" -"The restore job has not been started within one minute, bwx-console will not " -"wait for its completion anymore.\n" +#: src/tools/dbcheck.c:1096 +#, c-format +msgid "Found %d orphaned Job records.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1003 -msgid "" -"The restore job has not been started within one minute, bwx-console will not " -"wait for its completion anymore." +#: src/tools/dbcheck.c:1111 +#, c-format +msgid "Deleting %d orphaned Job records.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1013 -msgid "Restore done successfully.\n" +#: src/tools/dbcheck.c:1113 +#, c-format +msgid "Deleting JobMedia records of orphaned Job records.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1014 -msgid "Restore done successfully." +#: src/tools/dbcheck.c:1115 +#, c-format +msgid "Deleting Log records of orphaned Job records.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1086 -msgid "Applying restore configuration changes..." +#: src/tools/dbcheck.c:1124 +#, c-format +msgid "Checking for Admin Job entries.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1138 -msgid "Failed to find the selected client." +#: src/tools/dbcheck.c:1133 +#, c-format +msgid "Found %d Admin Job records.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1158 -msgid "Failed to find the selected fileset." +#: src/tools/dbcheck.c:1148 +#, c-format +msgid "Deleting %d Admin Job records.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1178 -msgid "Failed to find the selected storage." +#: src/tools/dbcheck.c:1157 +#, c-format +msgid "Checking for Restore Job entries.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1199 -#: src/wx-console/wxbrestorepanel.cpp:1886 -msgid "Run Restore job" +#: src/tools/dbcheck.c:1166 +#, c-format +msgid "Found %d Restore Job records.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1216 -msgid "Restore configuration changes were applied." +#: src/tools/dbcheck.c:1181 +#, c-format +msgid "Deleting %d Restore Job records.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1225 -msgid "Restore cancelled.\n" +#: src/tools/dbcheck.c:1191 +#, c-format +msgid "Checking for Filenames with a trailing slash\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1226 -msgid "Restore cancelled." +#: src/tools/dbcheck.c:1200 +#, c-format +msgid "Found %d bad Filename records.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1248 -msgid "No results to list." +#: src/tools/dbcheck.c:1218 src/tools/dbcheck.c:1284 +#, c-format +msgid "Reparing %d bad Filename records.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1250 -msgid "No backup found for this client." +#: src/tools/dbcheck.c:1258 +#, c-format +msgid "Checking for Paths without a trailing slash\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1257 -msgid "ERROR" +#: src/tools/dbcheck.c:1267 +#, c-format +msgid "Found %d bad Path records.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1258 -msgid "Query failed" +#: src/tools/dbcheck.c:1430 +#, c-format +msgid "" +"Ok. Index over the %s column already exists and dbcheck will work faster.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1260 -msgid "Cannot get previous backups list, see console." +#: src/tools/dbcheck.c:1433 +#, c-format +msgid "" +"Note. Index over the %s column not found, that can greatly slow down " +"dbcheck.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1896 -msgid "JobName:" +#: src/tools/dbcheck.c:1448 +#, c-format +msgid "Create temporary index... This may take some time!\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1898 -msgid "Bootstrap:" +#: src/tools/dbcheck.c:1456 +#, c-format +msgid "Temporary index created.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1900 -msgid "Where:" +#: src/tools/dbcheck.c:1471 +#, c-format +msgid "Drop temporary index.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1903 -msgid "Replace:" +#: src/tools/dbcheck.c:1481 +#, c-format +msgid "Temporary index %s deleted.\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1906 -msgid "ifnewer" +#: src/tools/bvfs_test.c:44 src/tools/ing_test.c:45 +#, c-format +msgid "" +"\n" +"Version: %s (%s)\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -n specify the database name (default bacula)\n" +" -u specify database user name (default bacula)\n" +" -P specify database host (default NULL)\n" +" -w specify working directory\n" +" -j specify jobids\n" +" -p specify path\n" +" -f specify file\n" +" -l maximum tuple to fetch\n" +" -T truncate cache table before starting\n" +" -v verbose\n" +" -? print this message\n" +"\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1907 -msgid "ifolder" +#: src/tools/testls.c:47 +#, c-format +msgid "" +"\n" +"Usage: testls [-d debug_level] [-] [pattern1 ...]\n" +" -a print extended attributes (Win32 debug)\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -e specify file of exclude patterns\n" +" -i specify file of include patterns\n" +" -q quiet, don't print filenames (debug)\n" +" - read pattern(s) from stdin\n" +" -? print this message.\n" +"\n" +"Patterns are file inclusion -- normally directories.\n" +"Debug level >= 1 prints each file found.\n" +"Debug level >= 10 prints path/file for catalog.\n" +"Errors always printed.\n" +"Files/paths truncated is number with len > 255.\n" +"Truncation is only in catalog.\n" +"\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1911 -msgid "FileSet:" +#: src/tools/testls.c:143 +#, c-format +msgid "Could not open include file: %s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1913 -msgid "Client:" +#: src/tools/testls.c:156 +#, c-format +msgid "Could not open exclude file: %s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1915 -msgid "Storage:" +#: src/tools/testls.c:170 +#, c-format +msgid "Files seen = %d\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1917 -msgid "When:" +#: src/tools/testls.c:203 src/tools/testfind.c:310 +#, c-format +msgid "Err: Could not access %s: %s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:1920 -msgid "Priority:" +#: src/tools/testls.c:206 src/tools/testfind.c:313 +#, c-format +msgid "Err: Could not follow ff->link %s: %s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:2028 -msgid "Restoring..." +#: src/tools/testls.c:209 src/tools/testfind.c:316 +#, c-format +msgid "Err: Could not stat %s: %s\n" msgstr "" -#: src/wx-console/console_thread.cpp:125 +#: src/tools/testls.c:212 src/tools/testfind.c:319 #, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Director \"%s\" in config file.\n" -"At least one CA certificate store is required.\n" +msgid "Skip: File not saved. No change. %s\n" msgstr "" -#: src/wx-console/console_thread.cpp:132 -msgid "" -"No Director resource defined in config file.\n" -"Without that I don't how to speak to the Director :-(\n" +#: src/tools/testls.c:215 src/tools/testfind.c:322 +#, c-format +msgid "Err: Attempt to backup archive. Not saved. %s\n" msgstr "" -#: src/wx-console/console_thread.cpp:151 +#: src/tools/testls.c:218 #, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Console \"%s\" in config file.\n" +msgid "Recursion turned off. Directory not entered. %s\n" msgstr "" -#: src/wx-console/console_thread.cpp:173 -msgid "Error while initializing windows sockets...\n" +#: src/tools/testls.c:221 +#, c-format +msgid "Skip: File system change prohibited. Directory not entered. %s\n" msgstr "" -#: src/wx-console/console_thread.cpp:189 -msgid "Error while cleaning up windows sockets...\n" +#: src/tools/testls.c:224 src/tools/testfind.c:325 +#, c-format +msgid "Err: Could not open directory %s: %s\n" msgstr "" -#: src/wx-console/console_thread.cpp:228 -msgid "Error while initializing library." +#: src/tools/testls.c:227 src/tools/testfind.c:328 +#, c-format +msgid "Err: Unknown file ff->type %d: %s\n" msgstr "" -#: src/wx-console/console_thread.cpp:256 -msgid "Cryptographic library initialization failed.\n" +#: src/tools/testfind.c:58 +#, c-format +msgid "" +"\n" +"Usage: testfind [-d debug_level] [-] [pattern1 ...]\n" +" -a print extended attributes (Win32 debug)\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -c specify config file containing FileSet resources\n" +" -f specify which FileSet to use\n" +" -? print this message.\n" +"\n" +"Patterns are used for file inclusion -- normally directories.\n" +"Debug level >= 1 prints each file found.\n" +"Debug level >= 10 prints path/file for catalog.\n" +"Errors are always printed.\n" +"Files/paths truncated is the number of files/paths with len > 255.\n" +"Truncation is only in the catalog.\n" +"\n" msgstr "" -#: src/wx-console/console_thread.cpp:260 -msgid "Please correct configuration file.\n" +#: src/tools/testfind.c:223 +#, c-format +msgid "" +"\n" +"Total files : %d\n" +"Max file length: %d\n" +"Max path length: %d\n" +"Files truncated: %d\n" +"Paths truncated: %d\n" +"Hard links : %d\n" msgstr "" -#: src/wx-console/console_thread.cpp:302 -msgid "Error : Library not initialized\n" +#: src/tools/testfind.c:266 +#, c-format +msgid "Reg: %s\n" msgstr "" -#: src/wx-console/console_thread.cpp:313 -msgid "Error : No configuration file loaded\n" +#: src/tools/testfind.c:288 +msgid "\t[will not descend: recursion turned off]" msgstr "" -#: src/wx-console/console_thread.cpp:323 -msgid "Connecting...\n" +#: src/tools/testfind.c:290 +msgid "\t[will not descend: file system change not allowed]" msgstr "" -#: src/wx-console/console_thread.cpp:339 -msgid "Error : No director defined in config file.\n" +#: src/tools/testfind.c:292 +msgid "\t[will not descend: disallowed file system]" msgstr "" -#: src/wx-console/console_thread.cpp:351 -msgid "Multiple directors found in your config file.\n" +#: src/tools/testfind.c:294 +msgid "\t[will not descend: disallowed drive type]" msgstr "" -#: src/wx-console/console_thread.cpp:360 +#: src/tools/testfind.c:378 #, c-format -msgid "Please choose a director (1-%d): " +msgid "===== Filename truncated to 255 chars: %s\n" msgstr "" -#: src/wx-console/console_thread.cpp:389 +#: src/tools/testfind.c:395 #, c-format -msgid "Passphrase for Console \"%s\" TLS private key: " +msgid "========== Path name truncated to 255 chars: %s\n" msgstr "" -#: src/wx-console/console_thread.cpp:410 +#: src/tools/testfind.c:404 #, c-format -msgid "Passphrase for Director \"%s\" TLS private key: " +msgid "========== Path length is zero. File=%s\n" msgstr "" -#: src/wx-console/console_thread.cpp:432 -msgid "Failed to connect to the director\n" +#: src/tools/testfind.c:407 +#, c-format +msgid "Path: %s\n" msgstr "" -#: src/wx-console/console_thread.cpp:442 -msgid "Connected\n" +#: src/tools/fstype.c:36 +#, c-format +msgid "" +"\n" +"Usage: fstype [-v] path ...\n" +"\n" +" Print the file system type a given file/directory is on.\n" +" The following options are supported:\n" +"\n" +" -v print both path and file system type.\n" +" -? print this message.\n" +"\n" msgstr "" -#: src/wx-console/console_thread.cpp:499 -msgid "<< Unexpected signal received : " +#: src/tools/cats_test.c:48 +#, c-format +msgid "" +"\n" +"Version: %s (%s)\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -n specify the database name (default bacula)\n" +" -u specify database user name (default bacula)\n" +" -P specify database host (default NULL)\n" +" -w specify working directory\n" +" -p specify path\n" +" -f specify file\n" +" -l maximum tuple to fetch\n" +" -q print only errors\n" +" -v verbose\n" +" -? print this message\n" +"\n" msgstr "" -#: src/wx-console/console_thread.cpp:519 -msgid "Connection terminated\n" +#: src/tools/cats_test.c:364 +#, c-format +msgid "Could not open, database \"%s\".\n" msgstr "" -#: src/wx-console/wxbconfigpanel.cpp:213 -msgid "Apply" +#: src/tools/ing_test.c:219 src/tools/ing_test.c:252 src/tools/ing_test.c:290 +msgid "Stmt went wrong\n" msgstr "" -#: src/wx-console/wxbhistorytextctrl.cpp:82 -#: src/wx-console/wxbhistorytextctrl.cpp:153 -#: src/wx-console/wxbmainframe.cpp:291 -msgid "Type your command below:" +#: src/tools/ing_test.c:308 +msgid "CREATE-Stmt went wrong\n" msgstr "" -#: src/wx-console/wxbhistorytextctrl.cpp:117 -msgid "Unknown command." +#: src/tools/ing_test.c:313 +msgid "DROP-Stmt went wrong\n" msgstr "" -#: src/wx-console/wxbhistorytextctrl.cpp:126 -msgid "Possible completions: " +#: examples/nagios/check_bacula/check_bacula.c:59 +#, c-format +msgid "" +"Copyright (C) 2005 Christian Masopust\n" +"Written by Christian Masopust (2005)\n" +"\n" +"Version: " msgstr "" -#: src/wx-console/main.cpp:119 -msgid "Bacula bwx-console" +#: src/lib/status.h:82 +msgid "===================================================================\n" msgstr "" -#: src/wx-console/main.cpp:124 src/wx-console/wxbmainframe.cpp:267 +#: src/baconfig.h:60 src/baconfig.h:61 src/baconfig.h:66 src/baconfig.h:67 #, c-format -msgid "Welcome to bacula bwx-console %s (%s)!\n" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:246 -msgid "&About...\tF1" +msgid "Failed ASSERT: %s\n" msgstr "" -#: src/wx-console/wxbmainframe.cpp:246 -msgid "Show about dialog" +#: src/qt-console/bcomm/dircomm.cpp:79 +#, c-format +msgid "Already connected\"%s\".\n" msgstr "" -#: src/wx-console/wxbmainframe.cpp:248 src/wx-console/wxbmainframe.cpp:619 -msgid "Connect" +#: src/qt-console/bcomm/dircomm.cpp:90 +#: src/qt-console/tray-monitor/tray-monitor.cpp:347 +#, c-format +msgid "Connecting to Director %s:%d" msgstr "" -#: src/wx-console/wxbmainframe.cpp:248 src/wx-console/wxbmainframe.cpp:620 -msgid "Connect to the director" +#: src/qt-console/bcomm/dircomm.cpp:92 +#, c-format +msgid "" +"Connecting to Director %s:%d\n" +"\n" msgstr "" -#: src/wx-console/wxbmainframe.cpp:249 -msgid "Disconnect" +#: src/qt-console/bcomm/dircomm.cpp:163 +#: src/qt-console/tray-monitor/tray-monitor.cpp:349 +msgid "Director daemon" msgstr "" -#: src/wx-console/wxbmainframe.cpp:249 -msgid "Disconnect of the director" +#: src/qt-console/bcomm/dircomm.cpp:201 +msgid "Initializing ..." msgstr "" -#: src/wx-console/wxbmainframe.cpp:251 -msgid "Change of configuration file" +#: src/qt-console/bcomm/dircomm.cpp:217 src/qt-console/console/console.cpp:130 +msgid "Connected" msgstr "" -#: src/wx-console/wxbmainframe.cpp:251 -msgid "Change your default configuration file" +#: src/qt-console/bcomm/dircomm.cpp:341 +msgid "Command completed ..." msgstr "" -#: src/wx-console/wxbmainframe.cpp:252 -msgid "Edit your configuration file" +#: src/qt-console/bcomm/dircomm.cpp:348 src/qt-console/console/console.cpp:367 +msgid "Processing command ..." msgstr "" -#: src/wx-console/wxbmainframe.cpp:254 -msgid "E&xit\tAlt-X" +#: src/qt-console/bcomm/dircomm.cpp:355 +msgid "At main prompt waiting for input ..." msgstr "" -#: src/wx-console/wxbmainframe.cpp:254 -msgid "Quit this program" +#: src/qt-console/bcomm/dircomm.cpp:362 src/qt-console/bcomm/dircomm.cpp:375 +msgid "At prompt waiting for input ..." msgstr "" -#: src/wx-console/wxbmainframe.cpp:258 -msgid "&File" +#: src/qt-console/bcomm/dircomm.cpp:383 +msgid "Command failed." msgstr "" -#: src/wx-console/wxbmainframe.cpp:259 -msgid "&Help" +#: src/qt-console/bcomm/dircomm.cpp:455 +msgid "Director disconnected." msgstr "" -#: src/wx-console/wxbmainframe.cpp:283 -msgid "" -"Warning : Unicode is disabled because you are using wxWidgets for GTK+ 1.2.\n" +#: src/qt-console/tray-monitor/tray_conf.cpp:165 +#, c-format +msgid "Monitor: name=%s FDtimeout=%s SDtimeout=%s\n" msgstr "" -#: src/wx-console/wxbmainframe.cpp:287 -msgid "" -"Warning : There is a problem with wxWidgets for GTK+ 2.0 without Unicode " -"support when handling non-ASCII filenames: Every non-ASCII character in such " -"filenames will be replaced by an interrogation mark.\n" -"If this behaviour disturbs you, please build bwx-console against a Unicode " -"version of wxWidgets for GTK+ 2.0.\n" -"---\n" +#: src/qt-console/tray-monitor/tray_conf.cpp:171 +#, c-format +msgid "Director: name=%s address=%s FDport=%d\n" msgstr "" -#: src/wx-console/wxbmainframe.cpp:298 -msgid "Send" +#: src/qt-console/tray-monitor/tray_conf.cpp:175 +#, c-format +msgid "Client: name=%s address=%s FDport=%d\n" msgstr "" -#: src/wx-console/wxbmainframe.cpp:375 src/wx-console/wxbmainframe.cpp:387 -msgid "Error while parsing command line arguments, using defaults.\n" +#: src/qt-console/tray-monitor/tray_conf.cpp:179 +#, c-format +msgid "Storage: name=%s address=%s SDport=%d\n" msgstr "" -#: src/wx-console/wxbmainframe.cpp:376 src/wx-console/wxbmainframe.cpp:388 -msgid "Usage: bwx-console [-c configfile] [-w tmp]\n" +#: src/qt-console/tray-monitor/tray_conf.cpp:183 +#: src/qt-console/bat_conf.cpp:145 +#, c-format +msgid "ConsoleFont: name=%s font face=%s\n" msgstr "" -#: src/wx-console/wxbmainframe.cpp:417 +#: src/qt-console/tray-monitor/tray-monitor.cpp:55 #, c-format msgid "" -"It seems that it is the first time you run bwx-console.\n" -"This file (%s) has been choosen as default configuration file.\n" -"Do you want to edit it? (if you click No you will have to select another " -"file)" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:419 -msgid "First run" +"\n" +"Version: %s (%s) %s %s %s\n" +"\n" +"Usage: tray-monitor [-c config_file] [-d debug_level]\n" +" -c set configuration file to file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -t test - read configuration and exit\n" +" -? print this message.\n" +"\n" msgstr "" -#: src/wx-console/wxbmainframe.cpp:436 +#: src/qt-console/tray-monitor/tray-monitor.cpp:204 #, c-format msgid "" -"Unable to read %s\n" -"Error: %s\n" -"Do you want to choose another one? (Press no to edit this file)" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:438 -msgid "Unable to read configuration file" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:450 -msgid "Please choose a configuration file to use" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:463 -msgid "This configuration file has been successfully read, use it as default?" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:464 -msgid "Configuration file read successfully" +"Error: %d Monitor resources defined in %s. You must define one and only one " +"Monitor resource.\n" msgstr "" -#: src/wx-console/wxbmainframe.cpp:474 +#: src/qt-console/tray-monitor/tray-monitor.cpp:236 #, c-format -msgid "Using this configuration file: %s\n" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:479 -msgid "Connecting to the director..." -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:494 -msgid "Failed to unregister a data parser !" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:502 -msgid "Quitting.\n" +msgid "" +"No Client, Storage or Director resource defined in %s\n" +"Without that I don't how to get status from the File, Storage or Director " +"Daemon :-(\n" msgstr "" -#: src/wx-console/wxbmainframe.cpp:517 +#: src/qt-console/tray-monitor/tray-monitor.cpp:251 +#, c-format msgid "" -"Welcome to Bacula bwx-console.\n" -"Written by Nicolas Boichat \n" -"Copyright (C), 2005-2007 Free Software Foundation Europe, e.V.\n" +"Invalid refresh interval defined in %s\n" +"This value must be greater or equal to 1 second and less or equal to 10 " +"minutes (read value: %d).\n" msgstr "" -#: src/wx-console/wxbmainframe.cpp:521 -msgid "About Bacula bwx-console" +#: src/qt-console/tray-monitor/tray-monitor.cpp:319 +#, c-format +msgid "Error, currentitem is not a Client or a Storage..\n" msgstr "" -#: src/wx-console/wxbmainframe.cpp:527 -msgid "Please choose your default configuration file" +#: src/qt-console/tray-monitor/tray-monitor.cpp:354 +#, c-format +msgid "Connecting to Client %s:%d" msgstr "" -#: src/wx-console/wxbmainframe.cpp:531 -msgid "Use this configuration file as default?" +#: src/qt-console/tray-monitor/tray-monitor.cpp:356 +msgid "File daemon" msgstr "" -#: src/wx-console/wxbmainframe.cpp:532 -msgid "Configuration file" +#: src/qt-console/tray-monitor/tray-monitor.cpp:361 +#, c-format +msgid "Connecting to Storage %s:%d" msgstr "" -#: src/wx-console/wxbmainframe.cpp:603 -msgid "Console thread terminated." +#: src/qt-console/tray-monitor/tray-monitor.cpp:367 +#: src/qt-console/tray-monitor/tray-monitor.cpp:397 +#, c-format +msgid "Error, currentitem is not a Client, a Storage or a Director..\n" msgstr "" -#: src/wx-console/wxbmainframe.cpp:611 -msgid "Connection to the director lost. Quit program?" +#: src/qt-console/tray-monitor/tray-monitor.cpp:372 +msgid "Cannot connect to daemon." msgstr "" -#: src/wx-console/wxbmainframe.cpp:612 -msgid "Connection lost" +#: src/qt-console/tray-monitor/tray-monitor.cpp:381 +#, c-format +msgid "Authentication error : %s" msgstr "" -#: src/wx-console/wxbmainframe.cpp:628 -msgid "Connected to the director." +#: src/qt-console/tray-monitor/tray-monitor.cpp:388 +msgid "Opened connection with Director daemon." msgstr "" -#: src/wx-console/wxbmainframe.cpp:651 -msgid "Reconnect" +#: src/qt-console/tray-monitor/tray-monitor.cpp:391 +msgid "Opened connection with File daemon." msgstr "" -#: src/wx-console/wxbmainframe.cpp:652 -msgid "Reconnect to the director" +#: src/qt-console/tray-monitor/tray-monitor.cpp:394 +msgid "Opened connection with Storage daemon." msgstr "" -#: src/wx-console/wxbmainframe.cpp:666 -msgid "Disconnected of the director." +#: src/qt-console/tray-monitor/tray-monitor.cpp:445 +msgid "Error : BNET_HARDEOF or BNET_ERROR" msgstr "" -#: src/wx-console/wxbmainframe.cpp:708 src/wx-console/wxbmainframe.cpp:725 -msgid "bwx-console: unexpected director's question." +#: src/qt-console/tray-monitor/tray-monitor.cpp:454 +msgid "Error : Connection closed." msgstr "" -#: src/qt-console/tray-monitor/tray-monitor.cpp:67 -#, c-format +#: src/qt-console/tray-monitor/authenticate.cpp:75 msgid "" -"\n" -"Version: %s (%s) %s %s %s\n" -"\n" -"Usage: tray-monitor [-c config_file] [-d debug_level]\n" -" -c set configuration file to file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -t test - read configuration and exit\n" -" -? print this message.\n" -"\n" -msgstr "" - -#: src/qt-console/bcomm/dircomm.cpp:92 -#, c-format -msgid "Already connected\"%s\".\n" +"Director authorization problem.\n" +"Most likely the passwords do not agree.\n" +"Please see " msgstr "" -#: src/qt-console/bcomm/dircomm.cpp:105 -#, c-format +#: src/qt-console/tray-monitor/authenticate.cpp:125 msgid "" -"Connecting to Director %s:%d\n" -"\n" -msgstr "" - -#: src/qt-console/bcomm/dircomm.cpp:208 -msgid "Initializing ..." -msgstr "" - -#: src/qt-console/bcomm/dircomm.cpp:224 src/qt-console/console/console.cpp:142 -msgid "Connected" -msgstr "" - -#: src/qt-console/bcomm/dircomm.cpp:348 -msgid "Command completed ..." -msgstr "" - -#: src/qt-console/bcomm/dircomm.cpp:355 src/qt-console/console/console.cpp:379 -msgid "Processing command ..." -msgstr "" - -#: src/qt-console/bcomm/dircomm.cpp:362 -msgid "At main prompt waiting for input ..." -msgstr "" - -#: src/qt-console/bcomm/dircomm.cpp:369 src/qt-console/bcomm/dircomm.cpp:382 -msgid "At prompt waiting for input ..." +"Director and Storage daemon passwords or names not the same.\n" +"Please see " msgstr "" -#: src/qt-console/bcomm/dircomm.cpp:390 -msgid "Command failed." +#: src/qt-console/tray-monitor/authenticate.cpp:132 +#, c-format +msgid "bdird, 2010. # msgid "" msgstr "" -"Project-Id-Version: bacula 3.0.3\n" +"Project-Id-Version: bacula 5.0.3\n" "Report-Msgid-Bugs-To: bacula-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2013-02-19 18:26+0100\n" +"POT-Creation-Date: 2014-03-23 22:51+0100\n" "PO-Revision-Date: 2010-01-08 17:32+0300\n" "Last-Translator: Vitaliy Kosharskiy \n" "Language-Team: Ukrainian\n" @@ -19,18191 +19,17451 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: src/dird/jobq.c:74 -#, c-format -msgid "pthread_attr_init: ERR=%s\n" +#: src/console/authenticate.c:117 src/dird/authenticate.c:121 +msgid "" +"Authorization problem: Remote server did not advertise required TLS " +"support.\n" msgstr "" +"Проблеми авторизації: Віддалений сервер не повідомив про необхідність " +"використання TLS.\n" -#: src/dird/jobq.c:83 -#, c-format -msgid "pthread_mutex_init: ERR=%s\n" -msgstr "" +#: src/console/authenticate.c:124 src/stored/authenticate.c:154 +#: src/stored/authenticate.c:267 src/stored/authenticate.c:376 +#: src/dird/authenticate.c:128 src/filed/authenticate.c:148 +#: src/filed/authenticate.c:276 +msgid "Authorization problem: Remote server requires TLS.\n" +msgstr "Проблеми авторизації: Віддалений сервер вимагає використання TLS.\n" -#: src/dird/jobq.c:89 -#, c-format -msgid "pthread_cond_init: ERR=%s\n" -msgstr "" +#: src/console/authenticate.c:133 +msgid "TLS negotiation failed\n" +msgstr "Невдале встановлення з'єднання TLS\n" -#: src/dird/jobq.c:131 +#: src/console/authenticate.c:147 +#: src/qt-console/tray-monitor/authenticate.cpp:84 #, c-format -msgid "pthread_cond_broadcast: ERR=%s\n" -msgstr "" +msgid "Bad response to Hello command: ERR=%s\n" +msgstr "Погана відповідь на команду Hello: ERR=%s\n" -#: src/dird/jobq.c:139 -#, c-format -msgid "pthread_cond_wait: ERR=%s\n" -msgstr "" +#: src/console/authenticate.c:154 +#: src/qt-console/tray-monitor/authenticate.cpp:91 +msgid "Director rejected Hello command\n" +msgstr "Керівник не прийняв команду Hello\n" -#: src/dird/jobq.c:180 -#, c-format -msgid "Job %s waiting %d seconds for scheduled start time.\n" +#: src/console/authenticate.c:166 +#, fuzzy +msgid "" +"Director authorization problem.\n" +"Most likely the passwords do not agree.\n" +"If you are using TLS, there may have been a certificate validation error " +"during the TLS handshake.\n" +"Please see " msgstr "" +"Проблеми авторизації Керівника.\n" +"Швидше за все, проблема у паролях.\n" +"Якщо Ви використовуєте TLS, можливо, невдала перевірка сертифікату під час " +"TLS handshake.\n" +"Для отримання допомоги, будь ласка, перегляньте http://www.bacula.org/en/rel-" +"manual/Bacula_Freque_Asked_Questi.html#SECTION003760000000000000000.\n" -#: src/dird/jobq.c:220 src/dird/job.c:113 src/stored/dircmd.c:200 -#: src/stored/stored.c:560 +#: src/console/console_conf.c:128 src/qt-console/bat_conf.cpp:129 #, c-format -msgid "Unable to init job cond variable: ERR=%s\n" -msgstr "" +msgid "No record for %d %s\n" +msgstr "Відсутні записи для %d %s\n" -#: src/dird/jobq.c:242 +#: src/console/console_conf.c:137 #, c-format -msgid "pthread_thread_create: ERR=%s\n" -msgstr "" +msgid "Console: name=%s rcfile=%s histfile=%s\n" +msgstr "Консоль: назва=%s rcfile=%s histfile=%s\n" -#: src/dird/jobq.c:352 +#: src/console/console_conf.c:141 src/qt-console/bat_conf.cpp:138 #, c-format -msgid "pthread_cond_signal: ERR=%s\n" -msgstr "" +msgid "Director: name=%s address=%s DIRport=%d\n" +msgstr "Керівник: назва=%s адреса=%s DIRport=%d\n" -#: src/dird/jobq.c:363 +#: src/console/console_conf.c:145 src/console/console_conf.c:221 +#: src/console/console_conf.c:266 src/console/console_conf.c:293 +#: src/stored/stored_conf.c:538 src/stored/stored_conf.c:628 +#: src/stored/stored_conf.c:663 src/filed/filed_conf.c:411 +#: src/filed/filed_conf.c:476 src/filed/filed_conf.c:506 +#: src/qt-console/bat_conf.cpp:149 src/qt-console/bat_conf.cpp:227 +#: src/qt-console/bat_conf.cpp:275 src/qt-console/bat_conf.cpp:305 #, c-format -msgid "pthread_create: ERR=%s\n" -msgstr "" +msgid "Unknown resource type %d\n" +msgstr "Невідомий тип ресурсу %d\n" -#: src/dird/jobq.c:647 +#: src/console/console_conf.c:247 src/dird/dird_conf.c:1425 +#: src/dird/dird_conf.c:1440 src/filed/filed_conf.c:439 +#: src/qt-console/tray-monitor/tray_conf.cpp:276 +#: src/qt-console/bat_conf.cpp:253 #, c-format -msgid "Rescheduled Job %s at %s to re-run in %d seconds (%s).\n" -msgstr "" +msgid "%s item is required in %s resource, but not found.\n" +msgstr "Не знайдено необхідний елемент %s для ресурсу %s.\n" -#: src/dird/jobq.c:703 src/dird/jobq.c:708 -msgid "previous Job" -msgstr "" +#: src/console/console_conf.c:310 src/dird/dird_conf.c:1664 +#: src/filed/filed_conf.c:524 src/qt-console/tray-monitor/tray_conf.cpp:360 +#: src/qt-console/bat_conf.cpp:322 +#, c-format +msgid "Attempt to define second %s resource named \"%s\" is not permitted.\n" +msgstr "Спроба визначити другий %s ресурс із назвою \"%s\" не дозволяється.\n" -#: src/dird/jobq.c:745 +#: src/console/console.c:114 #, c-format msgid "" -"Job canceled. Attempt to read and write same device.\n" -" Read storage \"%s\" (From %s) -- Write storage \"%s\" (From %s)\n" +"\n" +"Version: " msgstr "" +"\n" +"Вірсія: " -#: src/dird/ua_select.c:54 -#, c-format -msgid "The current %s retention period is: %s\n" -msgstr "" +#: src/console/console.c:166 +msgid "input from file" +msgstr "введення із файлу" -#: src/dird/ua_select.c:59 -msgid "Continue? (yes/mod/no): " -msgstr "" +#: src/console/console.c:167 +msgid "output to file" +msgstr "вивід до файлу" -#: src/dird/ua_select.c:62 src/dird/ua_run.c:219 -msgid "mod" +#: src/console/console.c:168 +msgid "quit" msgstr "" -#: src/dird/ua_select.c:63 -msgid "Enter new retention period: " -msgstr "" +#: src/console/console.c:169 +msgid "output to file and terminal" +msgstr "вивід до файлу та консолі" -#: src/dird/ua_select.c:67 -msgid "Invalid period.\n" -msgstr "" +#: src/console/console.c:170 +msgid "sleep specified time" +msgstr "зазначений час сну" -#: src/dird/ua_select.c:143 -msgid "You have the following choices:\n" -msgstr "" +#: src/console/console.c:171 +msgid "print current time" +msgstr "вивести поточний час" -#: src/dird/ua_select.c:159 -msgid "The defined Storage resources are:\n" -msgstr "" +#: src/console/console.c:172 +msgid "print Console's version" +msgstr "вивести версію Консолі" -#: src/dird/ua_select.c:167 src/dird/ua_dotcmds.c:734 src/dird/ua_cmds.c:995 -#: src/dird/ua_run.c:224 src/wx-console/wxbrestorepanel.cpp:339 -#: src/wx-console/wxbrestorepanel.cpp:355 -#: src/wx-console/wxbrestorepanel.cpp:479 -#: src/wx-console/wxbrestorepanel.cpp:480 -#: src/wx-console/wxbrestorepanel.cpp:490 -#: src/wx-console/wxbrestorepanel.cpp:491 -#: src/wx-console/wxbrestorepanel.cpp:1173 -#: src/wx-console/wxbrestorepanel.cpp:1176 -#: src/wx-console/wxbrestorepanel.cpp:1845 -#: src/wx-console/wxbrestorepanel.cpp:1916 -msgid "Storage" -msgstr "" +#: src/console/console.c:173 +msgid "echo command string" +msgstr "луна командного рядку" -#: src/dird/ua_select.c:167 -msgid "Select Storage resource" -msgstr "" +#: src/console/console.c:174 +msgid "execute an external command" +msgstr "виконати зовнішню команду" -#: src/dird/ua_select.c:182 src/dird/ua_restore.c:1296 -msgid "The defined FileSet resources are:\n" +#: src/console/console.c:175 +msgid "exit = quit" msgstr "" -#: src/dird/ua_select.c:190 src/dird/ua_restore.c:1300 src/dird/ua_run.c:226 -msgid "FileSet" -msgstr "" +#: src/console/console.c:176 +msgid "zed_keys = use zed keys instead of bash keys" +msgstr "zed_keys = використовувати zed keys замість bash keys" -#: src/dird/ua_select.c:190 src/dird/ua_restore.c:1300 -msgid "Select FileSet resource" -msgstr "" +#: src/console/console.c:177 +msgid "help listing" +msgstr "допомога" -#: src/dird/ua_select.c:220 src/dird/ua_cmds.c:2029 -msgid "Could not find a Catalog resource\n" -msgstr "" +#: src/console/console.c:179 +msgid "set command separator" +msgstr "задати роздільник команд" -#: src/dird/ua_select.c:223 -msgid "You must specify a \"use \" command before continuing.\n" -msgstr "" +#: src/console/console.c:213 +msgid ": is an invalid command\n" +msgstr ": неправильна команда\n" -#: src/dird/ua_select.c:229 -msgid "The defined Catalog resources are:\n" -msgstr "" +#: src/console/console.c:663 +msgid "Illegal separator character.\n" +msgstr "Невірний символ роздільника.\n" -#: src/dird/ua_select.c:237 -msgid "Catalog" -msgstr "" +#: src/console/console.c:696 +msgid "Command logic problem\n" +msgstr "Проблеми логіки команди\n" -#: src/dird/ua_select.c:237 -msgid "Select Catalog resource" -msgstr "" +#: src/console/console.c:911 +#, fuzzy, c-format +msgid "Can't find %s in Director list\n" +msgstr ": неправильна команда\n" -#: src/dird/ua_select.c:255 src/dird/ua_select.c:281 -msgid "The defined Job resources are:\n" -msgstr "" +#: src/console/console.c:919 +msgid "Available Directors:\n" +msgstr "Наявні Керівники:\n" -#: src/dird/ua_select.c:266 src/dird/ua_select.c:289 src/dird/ua_select.c:330 -#: src/dird/ua_select.c:1186 src/dird/dird_conf.c:670 src/dird/ua_prune.c:601 -#: src/dird/ua_run.c:225 -msgid "Job" +#: src/console/console.c:923 +#, c-format +msgid "%2d: %s at %s:%d\n" msgstr "" -#: src/dird/ua_select.c:266 src/dird/ua_select.c:289 -msgid "Select Job resource" -msgstr "" +#: src/console/console.c:927 +msgid "Select Director by entering a number: " +msgstr "Оберіть Керівника, увівши номер: " -#: src/dird/ua_select.c:308 +#: src/console/console.c:934 #, c-format -msgid "Error: Restore Job resource \"%s\" does not exist.\n" -msgstr "" +msgid "%s is not a number. You must enter a number between 1 and %d\n" +msgstr "%s не є номером. Ви повинні увести номер із проміжку 1..%d\n" -#: src/dird/ua_select.c:322 -msgid "The defined Restore Job resources are:\n" -msgstr "" +#: src/console/console.c:941 +#, c-format +msgid "You must enter a number between 1 and %d\n" +msgstr "Ви повинні увести номер із проміжку 1..%d\n" -#: src/dird/ua_select.c:330 -msgid "Select Restore Job" -msgstr "" +#: src/console/console.c:1095 src/stored/stored.c:215 src/dird/dird.c:267 +#: src/filed/filed.c:204 src/qt-console/main.cpp:154 +msgid "Cryptography library initialization failed.\n" +msgstr "Ініціалізація криптографії невдала.\n" -#: src/dird/ua_select.c:347 -msgid "The defined Client resources are:\n" -msgstr "" +#: src/console/console.c:1099 src/stored/stored.c:219 src/dird/dird.c:271 +#: src/dird/dird.c:299 src/dird/dird.c:517 src/dird/dird.c:520 +#: src/filed/filed.c:209 src/qt-console/main.cpp:158 +#, c-format +msgid "Please correct configuration file: %s\n" +msgstr "Будьласка виправте файл конфігурації: %s\n" -#: src/dird/ua_select.c:355 src/dird/ua_select.c:464 src/dird/ua_dotcmds.c:735 -#: src/dird/ua_cmds.c:996 src/dird/ua_run.c:230 -#: src/wx-console/wxbrestorepanel.cpp:336 -#: src/wx-console/wxbrestorepanel.cpp:354 -#: src/wx-console/wxbrestorepanel.cpp:431 -#: src/wx-console/wxbrestorepanel.cpp:432 -#: src/wx-console/wxbrestorepanel.cpp:442 -#: src/wx-console/wxbrestorepanel.cpp:443 -#: src/wx-console/wxbrestorepanel.cpp:700 -#: src/wx-console/wxbrestorepanel.cpp:1133 -#: src/wx-console/wxbrestorepanel.cpp:1136 -#: src/wx-console/wxbrestorepanel.cpp:1238 -#: src/wx-console/wxbrestorepanel.cpp:1838 -#: src/wx-console/wxbrestorepanel.cpp:1840 -#: src/wx-console/wxbrestorepanel.cpp:1914 -#: src/wx-console/wxbrestorepanel.cpp:1970 -msgid "Client" -msgstr "" +#: src/console/console.c:1129 +#, c-format +msgid "Connecting to Director %s:%d\n" +msgstr "Підключаюсь до Керівника %s:%d\n" -#: src/dird/ua_select.c:355 -msgid "Select Client (File daemon) resource" -msgstr "" +#: src/console/console.c:1146 src/qt-console/bcomm/dircomm.cpp:118 +#, c-format +msgid "Failed to initialize TLS context for Console \"%s\".\n" +msgstr "Ініціалізація контексту TLS для Консолі невдала \"%s\".\n" -#: src/dird/ua_select.c:382 +#: src/console/console.c:1166 src/qt-console/bcomm/dircomm.cpp:141 #, c-format -msgid "Error: Client resource %s does not exist.\n" -msgstr "" +msgid "Failed to initialize TLS context for Director \"%s\".\n" +msgstr "Ініціалізація контексту TLS для Керівника невдала \"%s\".\n" + +#: src/console/console.c:1198 +msgid "Enter a period to cancel a command.\n" +msgstr "Уведіть цятку для переривання команди.\n" + +#: src/console/console.c:1284 src/console/console.c:1314 +#: src/stored/stored.c:342 src/dird/dird.c:607 src/dird/dird.c:813 +#: src/dird/dird.c:868 src/dird/dird.c:907 src/filed/filed.c:366 +#: src/filed/filed.c:566 src/qt-console/main.cpp:213 +#: src/qt-console/main.cpp:243 +msgid "TLS required but not configured in Bacula.\n" +msgstr "TLS необхідний, але не налаштовано у Bacula.\n" -#: src/dird/ua_select.c:407 +#: src/console/console.c:1292 src/qt-console/main.cpp:221 #, c-format -msgid "Could not find Client %s: ERR=%s" +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Director \"%s\" in %s. At least one CA certificate store is required.\n" msgstr "" +"Жоден із параметрів \"TLS CA Certificate\" або \"TLS CA Certificate Dir\" не " +"задано для Керівника \"%s\" у %s. Необхідне щонайменше одне сховище для " +"сертифікату CA.\n" -#: src/dird/ua_select.c:417 src/dird/ua_select.c:471 +#: src/console/console.c:1301 src/qt-console/main.cpp:230 #, c-format -msgid "Could not find Client \"%s\": ERR=%s" +msgid "" +"No Director resource defined in %s\n" +"Without that I don't how to speak to the Director :-(\n" msgstr "" +"У %s не задано ресурсу Керівника\n" +"Без цього я не знаю як спілкуватись із Керівником :-(\n" -#: src/dird/ua_select.c:446 +#: src/console/console.c:1321 src/qt-console/main.cpp:251 #, c-format -msgid "Error obtaining client ids. ERR=%s\n" +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Console \"%s\" in %s.\n" msgstr "" +"Жоден із параметрів \"TLS CA Certificate\" або \"TLS CA Certificate Dir\" не " +"задано для Консолі \"%s\" у %s.\n" -#: src/dird/ua_select.c:450 -msgid "No clients defined. You must run a job before using this command.\n" -msgstr "" +#: src/console/console.c:1347 +msgid "Too many arguments on input command.\n" +msgstr "Забагато параметрів команди.\n" -#: src/dird/ua_select.c:454 -msgid "Defined Clients:\n" -msgstr "" +#: src/console/console.c:1351 +msgid "First argument to input command must be a filename.\n" +msgstr "Перший параметр команди повинен бути назвою файлу.\n" -#: src/dird/ua_select.c:464 -msgid "Select the Client" -msgstr "" +#: src/console/console.c:1357 +#, c-format +msgid "Cannot open file %s for input. ERR=%s\n" +msgstr "Не вдається відкрити файл %s для введення. ERR=%s\n" + +#: src/console/console.c:1389 +msgid "Too many arguments on output/tee command.\n" +msgstr "Забагато параметрів на виході команди.\n" -#: src/dird/ua_select.c:497 src/dird/ua_select.c:521 src/dird/ua_select.c:566 +#: src/console/console.c:1406 #, c-format -msgid "Could not find Pool \"%s\": ERR=%s" -msgstr "" +msgid "Cannot open file %s for output. ERR=%s\n" +msgstr "Не вдається відкрити файл %s для виведення. ERR=%s\n" -#: src/dird/ua_select.c:532 src/dird/ua_output.c:476 src/dird/ua_update.c:436 +#: src/console/console.c:1425 +msgid "Too many arguments. Enclose command in double quotes.\n" +msgstr "Забагато параметрів. Оточіть комінду подвійними лапками.\n" + +#: src/console/console.c:1434 #, c-format -msgid "Error obtaining pool ids. ERR=%s\n" +msgid "Cannot popen(\"%s\", \"r\"): ERR=%s\n" msgstr "" -#: src/dird/ua_select.c:536 -msgid "No pools defined. Use the \"create\" command to create one.\n" +#: src/console/console.c:1446 src/stored/autochanger.c:665 +#, c-format +msgid "Autochanger error: ERR=%s\n" msgstr "" -#: src/dird/ua_select.c:540 -msgid "Defined Pools:\n" +#: src/cats/sql_list.c:46 +#, c-format +msgid "Query failed: %s\n" msgstr "" -#: src/dird/ua_select.c:542 src/dird/ua_select.c:562 src/dird/ua_update.c:365 -#: src/baconfig.h:88 -msgid "*None*" +#: src/cats/sql_list.c:262 +msgid "These JobIds have copies as follows:\n" msgstr "" -#: src/dird/ua_select.c:553 src/dird/ua_select.c:666 src/dird/ua_update.c:616 -#: src/dird/ua_run.c:238 src/wx-console/wxbrestorepanel.cpp:338 -#: src/wx-console/wxbrestorepanel.cpp:527 -#: src/wx-console/wxbrestorepanel.cpp:537 -#: src/wx-console/wxbrestorepanel.cpp:1834 -msgid "Pool" +#: src/cats/sql_list.c:264 +msgid "The catalog contains copies as follows:\n" msgstr "" -#: src/dird/ua_select.c:553 -msgid "Select the Pool" +#: src/cats/sql_get.c:139 +#, c-format +msgid "Error fetching row: %s\n" msgstr "" -#: src/dird/ua_select.c:591 +#: src/cats/sql_get.c:146 #, c-format -msgid "No access to Pool \"%s\"\n" +msgid "get_file_record want 1 got rows=%d PathId=%s FilenameId=%s\n" msgstr "" -#: src/dird/ua_select.c:623 -msgid "Enter *MediaId or Volume name: " +#: src/cats/sql_get.c:154 +#, c-format +msgid "File record for PathId=%s FilenameId=%s not found.\n" msgstr "" -#: src/dird/ua_select.c:658 -msgid "The defined Pool resources are:\n" +#: src/cats/sql_get.c:160 +msgid "File record not found in Catalog.\n" msgstr "" -#: src/dird/ua_select.c:666 -msgid "Select Pool resource" +#: src/cats/sql_get.c:187 +#, c-format +msgid "More than one Filename!: %s for file: %s\n" msgstr "" -#: src/dird/ua_select.c:690 src/dird/ua_restore.c:555 +#: src/cats/sql_get.c:193 src/cats/sql_get.c:246 src/cats/sql_get.c:623 +#: src/cats/sql_get.c:724 src/cats/sql_get.c:1043 src/cats/sql.c:341 +#: src/cats/sql.c:348 src/cats/sql_create.c:584 src/cats/postgresql.c:153 #, c-format -msgid "Error: Pool resource \"%s\" does not exist.\n" +msgid "error fetching row: %s\n" msgstr "" -#: src/dird/ua_select.c:701 -msgid "Enter the JobId to select: " +#: src/cats/sql_get.c:197 +#, c-format +msgid "Get DB Filename record %s found bad record: %d\n" msgstr "" -#: src/dird/ua_select.c:739 +#: src/cats/sql_get.c:203 #, c-format -msgid "Could not find Job \"%s\": ERR=%s" +msgid "Filename record: %s not found.\n" msgstr "" -#: src/dird/ua_select.c:819 +#: src/cats/sql_get.c:207 #, c-format -msgid "Automatically selected %s: %s\n" +msgid "Filename record: %s not found in Catalog.\n" msgstr "" -#: src/dird/ua_select.c:830 +#: src/cats/sql_get.c:239 src/cats/sql_create.c:577 #, c-format -msgid "" -"Your request has multiple choices for \"%s\". Selection is not possible in " -"batch mode.\n" +msgid "More than one Path!: %s for path: %s\n" msgstr "" -"Ваш запит до \"%s\" має декілька можливостей вибору. У пакетному режимі " -"вибір не можливий.\n" -#: src/dird/ua_select.c:848 +#: src/cats/sql_get.c:250 #, c-format -msgid "Selection list for \"%s\" is empty!\n" +msgid "Get DB path record %s found bad record: %s\n" msgstr "" -#: src/dird/ua_select.c:854 +#: src/cats/sql_get.c:263 #, c-format -msgid "Automatically selected: %s\n" +msgid "Path record: %s not found.\n" msgstr "" -#: src/dird/ua_select.c:866 -msgid "Selection aborted, nothing done.\n" +#: src/cats/sql_get.c:267 +#, c-format +msgid "Path record: %s not found in Catalog.\n" msgstr "" -#: src/dird/ua_select.c:871 +#: src/cats/sql_get.c:306 #, c-format -msgid "Please enter a number between 1 and %d\n" +msgid "No Job found for JobId %s\n" msgstr "" -#: src/dird/ua_select.c:920 -msgid "Storage name given twice.\n" +#: src/cats/sql_get.c:379 src/cats/sql_get.c:436 +#, c-format +msgid "No volumes found for JobId=%d\n" msgstr "" -#: src/dird/ua_select.c:937 +#: src/cats/sql_get.c:385 src/cats/sql_get.c:447 #, c-format -msgid "Expecting jobid=nn command, got: %s\n" +msgid "Error fetching row %d: ERR=%s\n" msgstr "" -#: src/dird/ua_select.c:941 +#: src/cats/sql_get.c:399 #, c-format -msgid "JobId %s is not running.\n" +msgid "No Volume for JobId %d found in Catalog.\n" msgstr "" -#: src/dird/ua_select.c:951 +#: src/cats/sql_get.c:540 #, c-format -msgid "Expecting job=xxx, got: %s.\n" +msgid "Pool id select failed: ERR=%s\n" msgstr "" -#: src/dird/ua_select.c:955 src/dird/ua_select.c:967 +#: src/cats/sql_get.c:577 #, c-format -msgid "Job \"%s\" is not running.\n" +msgid "Client id select failed: ERR=%s\n" msgstr "" -#: src/dird/ua_select.c:963 +#: src/cats/sql_get.c:618 #, c-format -msgid "Expecting ujobid=xxx, got: %s.\n" +msgid "More than one Pool!: %s\n" msgstr "" -#: src/dird/ua_select.c:983 -#, c-format -msgid "Storage resource \"%s\": not found\n" +#: src/cats/sql_get.c:681 +msgid "Pool record not found in Catalog.\n" msgstr "" -#: src/dird/ua_select.c:1015 -msgid "Enter autochanger drive[0]: " +#: src/cats/sql_get.c:719 +#, c-format +msgid "More than one Client!: %s\n" msgstr "" -#: src/dird/ua_select.c:1036 -msgid "Enter autochanger slot: " +#: src/cats/sql_get.c:736 src/cats/sql_get.c:740 +msgid "Client record not found in Catalog.\n" msgstr "" -#: src/dird/ua_select.c:1066 -msgid "Media Types defined in conf file:\n" +#: src/cats/sql_get.c:767 +#, c-format +msgid "More than one Counter!: %d\n" msgstr "" -#: src/dird/ua_select.c:1072 -msgid "Media Type" +#: src/cats/sql_get.c:772 +#, c-format +msgid "error fetching Counter row: %s\n" msgstr "" -#: src/dird/ua_select.c:1072 -msgid "Select the Media Type" +#: src/cats/sql_get.c:792 +#, c-format +msgid "Counter record: %s not found in Catalog.\n" msgstr "" -#: src/dird/ua_select.c:1111 +#: src/cats/sql_get.c:832 #, c-format -msgid "JobId %s is not running. Use Job name to %s inactive jobs.\n" +msgid "Error got %s FileSets but expected only one!\n" msgstr "" -#: src/dird/ua_select.c:1120 src/dird/ua_select.c:1130 +#: src/cats/sql_get.c:837 #, c-format -msgid "Warning Job %s is not running. Continuing anyway ...\n" +msgid "FileSet record \"%s\" not found.\n" msgstr "" -#: src/dird/ua_select.c:1140 src/dird/ua_cmds.c:692 src/dird/ua_cmds.c:738 -msgid "Unauthorized command from this console.\n" +#: src/cats/sql_get.c:847 +msgid "FileSet record not found in Catalog.\n" msgstr "" -#: src/dird/ua_select.c:1165 src/stored/status.c:538 src/filed/status.c:241 -msgid "No Jobs running.\n" +#: src/cats/sql_get.c:943 +#, c-format +msgid "Media id select failed: ERR=%s\n" msgstr "" -#: src/dird/ua_select.c:1167 -msgid "None of your jobs are running.\n" +#: src/cats/sql_get.c:981 +#, c-format +msgid "query dbids failed: ERR=%s\n" msgstr "" -#: src/dird/ua_select.c:1172 -msgid "Select Job:\n" +#: src/cats/sql_get.c:1038 +#, c-format +msgid "More than one Volume!: %s\n" msgstr "" -#: src/dird/ua_select.c:1181 +#: src/cats/sql_get.c:1094 #, c-format -msgid "JobId=%s Job=%s" +msgid "Media record MediaId=%s not found.\n" msgstr "" -#: src/dird/ua_select.c:1185 -#, fuzzy, c-format -msgid "Choose Job to %s" -msgstr "Оберіть те, що Ви хочете вичистити" +#: src/cats/sql_get.c:1097 +#, c-format +msgid "Media record for Volume \"%s\" not found.\n" +msgstr "" -#: src/dird/ua_select.c:1192 +#: src/cats/sql_get.c:1104 #, c-format -msgid "" -"Cancel: %s\n" -"\n" -"%s" +msgid "Media record for MediaId=%u not found in Catalog.\n" msgstr "" -#: src/dird/ua_select.c:1193 -msgid "Confirm cancel?" +#: src/cats/sql_get.c:1107 +#, c-format +msgid "Media record for Vol=%s not found in Catalog.\n" msgstr "" -#: src/dird/ua_select.c:1199 -msgid "Confirm cancel (yes/no): " +#: src/cats/sql_get.c:1140 src/cats/sql_create.c:1183 +msgid "ERR=JobIds are empty\n" msgstr "" -#: src/dird/ua_select.c:1208 src/dird/ua_cmds.c:733 src/dird/ua_cmds.c:1100 +#: src/cats/sql_find.c:86 src/cats/sql_find.c:115 src/cats/sql_find.c:170 #, c-format -msgid "Job \"%s\" not found.\n" +msgid "" +"Query error for start time request: ERR=%s\n" +"CMD=%s\n" +msgstr "" + +#: src/cats/sql_find.c:92 src/cats/sql_find.c:176 +msgid "No prior Full backup Job record found.\n" msgstr "" -#: src/dird/bsr.c:173 +#: src/cats/sql_find.c:104 #, c-format -msgid "Unable to get Job record. ERR=%s\n" +msgid "Unknown level=%d\n" msgstr "" -#: src/dird/bsr.c:184 +#: src/cats/sql_find.c:121 #, c-format -msgid "Unable to get Job Volume Parameters. ERR=%s\n" +msgid "" +"No Job record found: ERR=%s\n" +"CMD=%s\n" msgstr "" -#: src/dird/bsr.c:232 +#: src/cats/sql_find.c:279 #, c-format -msgid "Unable to create bootstrap file %s. ERR=%s\n" +msgid "Unknown Job level=%d\n" msgstr "" -#: src/dird/bsr.c:241 -msgid "No files found to read. No bootstrap file written.\n" +#: src/cats/sql_find.c:289 +#, c-format +msgid "No Job found for: %s.\n" msgstr "" -#: src/dird/bsr.c:245 -msgid "Error writing bsr file.\n" +#: src/cats/sql_find.c:300 +#, c-format +msgid "No Job found for: %s\n" msgstr "" -#: src/dird/bsr.c:250 +#: src/cats/sql_find.c:386 #, c-format -msgid "Bootstrap records written to %s\n" +msgid "Request for Volume item %d greater than max %d or less than 1\n" msgstr "" -#: src/dird/bsr.c:298 -msgid "" -"The job will require the following\n" -" Volume(s) Storage(s) SD Device(s)\n" -"===========================================================================\n" +#: src/cats/sql_find.c:401 +#, c-format +msgid "No Volume record found for item %d.\n" msgstr "" -#: src/dird/bsr.c:317 -msgid "No Volumes found to restore.\n" +#: src/cats/cats_dummy.c:27 +msgid "Please replace this null libbaccats library with a proper one.\n" msgstr "" -#: src/dird/bsr.c:319 +#: src/cats/sql.c:185 +#, c-format msgid "" -"\n" -"Volumes marked with \"*\" are online.\n" +"Potential performance problem:\n" +"max_connections=%d set for %s database \"%s\" should be larger than " +"Director's MaxConcurrentJobs=%d\n" msgstr "" -#: src/dird/ua_server.c:69 +#: src/cats/sql.c:230 #, c-format -msgid "Cannot create UA thread: %s\n" +msgid "" +"query %s failed:\n" +"%s\n" msgstr "" -#: src/dird/ua_server.c:159 -msgid "You have messages.\n" +#: src/cats/sql.c:252 +#, c-format +msgid "" +"insert %s failed:\n" +"%s\n" msgstr "" -#: src/dird/verify.c:86 src/dird/verify.c:318 +#: src/cats/sql.c:262 #, c-format -msgid "Unimplemented Verify level %d(%c)\n" +msgid "Insertion problem: affected_rows=%s\n" msgstr "" -#: src/dird/verify.c:148 +#: src/cats/sql.c:283 +#, c-format msgid "" -"Unable to find JobId of previous InitCatalog Job.\n" -"Please run a Verify with Level=InitCatalog before\n" -"running the current Job.\n" +"update %s failed:\n" +"%s\n" msgstr "" -#: src/dird/verify.c:153 -msgid "Unable to find JobId of previous Job for this client.\n" +#: src/cats/sql.c:293 +#, c-format +msgid "Update failed: affected_rows=%s for %s\n" msgstr "" -#: src/dird/verify.c:170 +#: src/cats/sql.c:315 #, c-format -msgid "Could not get job record for previous Job. ERR=%s" +msgid "" +"delete %s failed:\n" +"%s\n" msgstr "" -#: src/dird/verify.c:176 +#: src/cats/sql.c:409 #, c-format -msgid "Last Job %d did not terminate normally. JobStatus=%c\n" +msgid "Path length is zero. File=%s\n" +msgstr "" + +#: src/cats/sql.c:604 +msgid "No results to list.\n" msgstr "" -#: src/dird/verify.c:180 +#: src/cats/sql.c:722 +#, fuzzy +msgid "Could not init database batch connection\n" +msgstr "Не вдалось відкрити%s: ERR=%s\n" + +#: src/cats/sql.c:728 #, c-format -msgid "Verifying against JobId=%d Job=%s\n" +msgid "Could not open database \"%s\": ERR=%s\n" msgstr "" -#: src/dird/verify.c:219 +#: src/cats/sql_create.c:89 #, c-format -msgid "Start Verify JobId=%s Level=%s Job=%s\n" +msgid "Create DB Job record %s failed. ERR=%s\n" msgstr "" -#: src/dird/verify.c:305 -msgid "Deprecated feature ... use bootstrap.\n" +#: src/cats/sql_create.c:133 +#, c-format +msgid "Create JobMedia record %s failed: ERR=%s\n" msgstr "" -#: src/dird/verify.c:372 +#: src/cats/sql_create.c:142 #, c-format -msgid "Unimplemented verify level %d\n" +msgid "Update Media record %s failed: ERR=%s\n" msgstr "" -#: src/dird/verify.c:421 -msgid "Verify OK" +#: src/cats/sql_create.c:177 +#, c-format +msgid "pool record %s already exists\n" msgstr "" -#: src/dird/verify.c:425 -msgid "*** Verify Error ***" +#: src/cats/sql_create.c:209 +#, c-format +msgid "Create db Pool record %s failed: ERR=%s\n" msgstr "" -#: src/dird/verify.c:429 -msgid "Verify warnings" +#: src/cats/sql_create.c:242 +#, c-format +msgid "Device record %s already exists\n" msgstr "" -#: src/dird/verify.c:432 -msgid "Verify Canceled" +#: src/cats/sql_create.c:259 +#, c-format +msgid "Create db Device record %s failed: ERR=%s\n" msgstr "" -#: src/dird/verify.c:435 -msgid "Verify Differences" +#: src/cats/sql_create.c:294 +#, c-format +msgid "More than one Storage record!: %d\n" msgstr "" -#: src/dird/verify.c:440 +#: src/cats/sql_create.c:299 #, c-format -msgid "Inappropriate term code: %d %c\n" +msgid "error fetching Storage row: %s\n" msgstr "" -#: src/dird/verify.c:454 +#: src/cats/sql_create.c:320 #, c-format -msgid "" -"%s %s %s (%s):\n" -" Build OS: %s %s %s\n" -" JobId: %d\n" -" Job: %s\n" -" FileSet: %s\n" -" Verify Level: %s\n" -" Client: %s\n" -" Verify JobId: %d\n" -" Verify Job: %s\n" -" Start time: %s\n" -" End time: %s\n" -" Files Expected: %s\n" -" Files Examined: %s\n" -" Non-fatal FD errors: %d\n" -" FD termination status: %s\n" -" SD termination status: %s\n" -" Termination: %s\n" -"\n" +msgid "Create DB Storage record %s failed. ERR=%s\n" msgstr "" -#: src/dird/verify.c:489 +#: src/cats/sql_create.c:354 #, c-format -msgid "" -"%s %s %s (%s):\n" -" Build: %s %s %s\n" -" JobId: %d\n" -" Job: %s\n" -" FileSet: %s\n" -" Verify Level: %s\n" -" Client: %s\n" -" Verify JobId: %d\n" -" Verify Job: %s\n" -" Start time: %s\n" -" End time: %s\n" -" Files Examined: %s\n" -" Non-fatal FD errors: %d\n" -" FD termination status: %s\n" -" Termination: %s\n" -"\n" +msgid "mediatype record %s already exists\n" msgstr "" -#: src/dird/verify.c:567 +#: src/cats/sql_create.c:371 #, c-format -msgid "" -"bird set configuration file to file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -f run in foreground (for debugging)\n" -" -g groupid\n" -" -m print kaboom output (for debugging)\n" -" -r run now\n" -" -s no signals\n" -" -t test - read configuration and exit\n" -" -u userid\n" -" -v verbose user messages\n" -" -? print this message.\n" -"\n" +"Unable to connect to PostgreSQL server. Database=%s User=%s\n" +"Possible causes: SQL server not running; password incorrect; max_connections " +"exceeded.\n" msgstr "" -"\n" -"Версія: %s (%s) %s %s %s\n" -"\n" -"Використання: bat [-s] [-c config_file] [-d debug_level] [config_file]\n" -" -c set configuration file to file\n" -" -dnn set debug level to nn\n" -" -s без сигналів\n" -" -t перевірка - прочитати конфігурацію і вийти\n" -" -? print this message.\n" -"\n" - -#: src/dird/dird.c:296 src/stored/stored.c:227 src/console/console.c:1109 -#: src/filed/filed.c:218 src/qt-console/main.cpp:165 -msgid "Cryptography library initialization failed.\n" -msgstr "Ініціалізація криптографії невдала.\n" - -#: src/dird/dird.c:300 src/dird/dird.c:328 src/dird/dird.c:560 -#: src/dird/dird.c:563 src/stored/stored.c:231 src/console/console.c:1113 -#: src/filed/filed.c:223 src/qt-console/main.cpp:169 -#, c-format -msgid "Please correct configuration file: %s\n" -msgstr "Будьласка виправте файл конфігурації: %s\n" -#: src/dird/dird.c:546 -msgid "Too many open reload requests. Request ignored.\n" +#: src/cats/postgresql.c:338 +msgid "PQescapeStringConn returned non-zero.\n" msgstr "" -#: src/dird/dird.c:561 -msgid "Out of reload table entries. Giving up.\n" +#: src/cats/postgresql.c:356 +msgid "PQescapeByteaConn returned NULL.\n" msgstr "" -#: src/dird/dird.c:564 -msgid "Resetting previous configuration.\n" +#: src/cats/postgresql.c:387 +msgid "PQunescapeByteaConn returned NULL.\n" msgstr "" -#: src/dird/dird.c:628 +#: src/cats/postgresql.c:801 #, c-format -msgid "" -"No Director resource defined in %s\n" -"Without that I don't know who I am :-(\n" +msgid "error fetching currval: %s\n" msgstr "" -#: src/dird/dird.c:636 src/filed/filed.c:350 +#: src/cats/postgresql.c:992 #, c-format -msgid "No Messages resource defined in %s\n" +msgid "error starting batch mode: %s" msgstr "" -#: src/dird/dird.c:641 +#: src/cats/postgresql.c:1022 src/cats/postgresql.c:1029 #, c-format -msgid "Only one Director resource permitted in %s\n" +msgid "error ending batch mode: %s" msgstr "" -#: src/dird/dird.c:650 src/dird/dird.c:856 src/dird/dird.c:911 -#: src/dird/dird.c:950 src/stored/stored.c:354 src/console/console.c:1296 -#: src/console/console.c:1326 src/filed/filed.c:357 src/filed/filed.c:516 -#: src/wx-console/console_thread.cpp:118 src/wx-console/console_thread.cpp:144 -#: src/qt-console/main.cpp:224 src/qt-console/main.cpp:254 -msgid "TLS required but not configured in Bacula.\n" -msgstr "TLS необхідний, але не налаштовано у Bacula.\n" - -#: src/dird/dird.c:658 src/stored/stored.c:410 src/filed/filed.c:526 +#: src/cats/postgresql.c:1079 #, c-format -msgid "\"TLS Certificate\" file not defined for Director \"%s\" in %s.\n" +msgid "error copying in batch mode: %s" msgstr "" -#: src/dird/dird.c:664 src/stored/stored.c:416 src/filed/filed.c:532 -#, c-format -msgid "\"TLS Key\" file not defined for Director \"%s\" in %s.\n" +#: src/cats/postgresql.c:1101 +msgid "A user name for PostgreSQL must be supplied.\n" msgstr "" -#: src/dird/dird.c:671 src/stored/stored.c:422 src/filed/filed.c:538 +#: src/cats/sqlite.c:169 #, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Director \"%s\" in %s. At least one CA certificate store is required when " -"using \"TLS Verify Peer\".\n" +msgid "Database %s does not exist, please create it.\n" msgstr "" -#: src/dird/dird.c:690 src/stored/stored.c:441 src/filed/filed.c:557 +#: src/cats/sqlite.c:191 #, c-format -msgid "Failed to initialize TLS context for Director \"%s\" in %s.\n" +msgid "Unable to open Database=%s. ERR=%s\n" msgstr "" -#: src/dird/dird.c:698 +#: src/cats/sqlite.c:192 +msgid "unknown" +msgstr "" + +#: src/cats/sql_delete.c:65 #, c-format -msgid "No Job records defined in %s\n" +msgid "No pool record %s exists\n" msgstr "" -#: src/dird/dird.c:756 src/dird/dird.c:769 +#: src/cats/sql_delete.c:70 #, c-format -msgid "Hey something is wrong. p=0x%lu\n" +msgid "Expecting one pool record, got %d\n" msgstr "" -#: src/dird/dird.c:830 +#: src/cats/sql_delete.c:76 #, c-format -msgid "\"%s\" directive in Job \"%s\" resource is required, but not found.\n" +msgid "Error fetching row %s\n" msgstr "" -#: src/dird/dird.c:837 -msgid "Too many items in Job resource\n" +#: src/stored/job.c:190 +msgid "Client socket not open. Could not connect to Client.\n" msgstr "" -#: src/dird/dird.c:841 +#: src/stored/job.c:205 src/stored/job.c:207 +#, fuzzy, c-format +msgid "Recv request to Client failed. ERR=%s\n" +msgstr "Помилка у %s файл %s: ERR=%s\n" + +#: src/stored/job.c:213 src/stored/job.c:214 #, c-format -msgid "No storage specified in Job \"%s\" nor in Pool.\n" +msgid "Bad Hello from Client: %s.\n" msgstr "" -#: src/dird/dird.c:865 -#, c-format -msgid "\"TLS Certificate\" file not defined for Console \"%s\" in %s.\n" +#: src/stored/job.c:228 src/stored/job.c:311 +msgid "Unable to authenticate File daemon\n" msgstr "" -#: src/dird/dird.c:871 +#: src/stored/job.c:282 #, c-format -msgid "\"TLS Key\" file not defined for Console \"%s\" in %s.\n" +msgid "FD connect failed: Job name not found: %s\n" msgstr "" -#: src/dird/dird.c:878 +#: src/stored/job.c:291 #, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Console \"%s\" in %s. At least one CA certificate store is required when " -"using \"TLS Verify Peer\".\n" +msgid "Hey!!!! JobId %u Job %s already authenticated.\n" msgstr "" -#: src/dird/dird.c:895 src/dird/dird.c:935 src/filed/filed.c:382 -#, c-format -msgid "Failed to initialize TLS context for File daemon \"%s\" in %s.\n" +#: src/stored/job.c:441 +msgid "In free_jcr(), but still attached to device!!!!\n" msgstr "" -#: src/dird/dird.c:918 -#, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"File daemon \"%s\" in %s.\n" +#: src/stored/vbackup.c:67 +msgid "Read and write devices not properly initialized.\n" msgstr "" -#: src/dird/dird.c:959 +#: src/stored/vbackup.c:73 #, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Storage \"%s\" in %s.\n" +msgid "No Volume names found for %s.\n" msgstr "" -#: src/dird/dird.c:975 src/stored/stored.c:394 +#: src/stored/vbackup.c:114 src/stored/vbackup.c:248 src/stored/append.c:261 +#: src/stored/spool.c:262 #, c-format -msgid "Failed to initialize TLS context for Storage \"%s\" in %s.\n" +msgid "Fatal append error on device %s: ERR=%s\n" msgstr "" -#: src/dird/dird.c:1014 src/dird/dird.c:1016 -#, c-format -msgid "Could not open Catalog \"%s\", database \"%s\".\n" +#: src/stored/vbackup.c:116 src/stored/append.c:263 +msgid "Set ok=FALSE after write_block_to_device.\n" msgstr "" -#: src/dird/dird.c:1019 src/tools/cats_test.c:377 +#: src/stored/vbackup.c:139 src/stored/append.c:287 src/stored/read.c:92 #, c-format -msgid "%s" +msgid "Elapsed time=%02d:%02d:%02d, Transfer rate=%s Bytes/second\n" msgstr "" -#: src/dird/dird.c:1098 -#, fuzzy, c-format -msgid "Could not create storage record for %s\n" -msgstr "Не вдалось відновити прапорці для файлу %s: ERR=%s\n" +#: src/stored/append.c:49 +msgid "DCR is NULL!!!\n" +msgstr "" -#: src/dird/dird.c:1106 -#, fuzzy, c-format -msgid "Could not update storage record for %s\n" -msgstr "Не вдалось відновити прапорці для файлу %s: ERR=%s\n" +#: src/stored/append.c:55 +msgid "DEVICE is NULL!!!\n" +msgstr "" -#: src/dird/dird.c:1181 src/dird/migrate.c:1072 src/stored/stored.c:491 -#, c-format -msgid "Could not compile regex pattern \"%s\" ERR=%s\n" +#: src/stored/append.c:66 +msgid "Unable to set network buffer size.\n" msgstr "" -#: src/dird/inc_conf.c:312 -#, c-format -msgid "Expected a strip path positive integer, got:%s:" +#: src/stored/append.c:80 src/stored/append.c:90 src/stored/append.c:103 +#: src/stored/askdir.c:355 src/stored/askdir.c:356 +msgid "NULL Volume name. This shouldn't happen!!!\n" msgstr "" -#: src/dird/inc_conf.c:332 +#: src/stored/append.c:96 src/stored/btape.c:2232 #, c-format -msgid "Expected a FileSet option keyword, got:%s:" +msgid "Write session label failed. ERR=%s\n" msgstr "" -#: src/dird/inc_conf.c:365 -msgid "Old style Include/Exclude not supported\n" +#: src/stored/append.c:109 +#, c-format +msgid "Network send error to FD. ERR=%s\n" msgstr "" -#: src/dird/inc_conf.c:393 src/dird/inc_conf.c:739 src/dird/dird_conf.c:2022 +#: src/stored/append.c:148 #, c-format -msgid "Expecting keyword, got: %s\n" +msgid "Error reading data header from FD. n=%d msglen=%d ERR=%s\n" msgstr "" -#: src/dird/inc_conf.c:401 src/dird/inc_conf.c:745 src/dird/dird_conf.c:2028 -#: src/lib/parse_conf.c:976 +#: src/stored/append.c:155 #, c-format -msgid "expected an equals, got: %s" +msgid "Malformed data header from FD: %s\n" msgstr "" -#: src/dird/inc_conf.c:411 src/dird/inc_conf.c:754 src/dird/dird_conf.c:2039 +#: src/stored/append.c:174 #, c-format -msgid "Keyword %s not permitted in this resource" +msgid "FI=%d from FD not positive or last_FI=%d\n" msgstr "" -#: src/dird/inc_conf.c:464 +#: src/stored/append.c:222 #, c-format -msgid "Regex compile error. ERR=%s\n" +msgid "Network error reading from FD. ERR=%s\n" msgstr "" -#: src/dird/inc_conf.c:485 +#: src/stored/append.c:251 src/stored/btape.c:2351 +#, fuzzy, c-format +msgid "Error writing end session label. ERR=%s\n" +msgstr "Помилка надсилання Hello до Збирача. ERR=%s\n" + +#: src/stored/append.c:324 #, c-format -msgid "Expected a regex string, got: %s\n" +msgid "Error updating file attributes. ERR=%s\n" msgstr "" -#: src/dird/inc_conf.c:559 +#: src/stored/mount.c:87 #, c-format -msgid "Expected a wild-card string, got: %s\n" +msgid "Too many errors trying to mount %s device %s.\n" msgstr "" -#: src/dird/inc_conf.c:582 +#: src/stored/mount.c:95 #, c-format -msgid "Expected an fstype string, got: %s\n" +msgid "Job %d canceled.\n" msgstr "" -#: src/dird/inc_conf.c:593 -msgid "ExcludeDirContaining directive not permitted in Exclude.\n" -msgstr "" +#: src/stored/mount.c:211 +#, fuzzy, c-format +msgid "Open of %s device %s Volume \"%s\" failed: ERR=%s\n" +msgstr "Помилка у %s файл %s: ERR=%s\n" -#: src/dird/inc_conf.c:620 +#: src/stored/mount.c:276 #, c-format -msgid "Expected an drivetype string, got: %s\n" +msgid "Volume \"%s\" previously written, moving to end of data.\n" msgstr "" -#: src/dird/inc_conf.c:644 src/dird/inc_conf.c:687 +#: src/stored/mount.c:282 +#, fuzzy, c-format +msgid "Unable to position to end of data on %s device %s: ERR=%s\n" +msgstr "Не можливо встановити час файлу %s: ERR=%s\n" + +#: src/stored/mount.c:420 src/stored/mount.c:781 #, c-format -msgid "Backslash found. Use forward slashes or quote the string.: %s\n" +msgid "Volume \"%s\" not on %s device %s.\n" msgstr "" -#: src/dird/inc_conf.c:659 src/dird/inc_conf.c:702 +#: src/stored/mount.c:453 #, c-format -msgid "Expected a filename, got: %s" +msgid "" +"Director wanted Volume \"%s\".\n" +" Current Volume \"%s\" not acceptable because:\n" +" %s" msgstr "" -#: src/dird/inc_conf.c:676 -msgid "Plugin directive not permitted in Exclude\n" -msgstr "" +#: src/stored/mount.c:473 src/stored/label.c:232 src/stored/label.c:383 +#, fuzzy, c-format +msgid "Could not reserve volume %s on %s device %s\n" +msgstr "Не вдалось відновити прапорці для файлу %s: ERR=%s\n" -#: src/dird/inc_conf.c:719 -msgid "Options section not permitted in Exclude\n" +#: src/stored/mount.c:631 +#, c-format +msgid "Ready to append to end of Volume \"%s\" part=%d size=%s\n" msgstr "" -#: src/dird/inc_conf.c:724 src/dird/dird_conf.c:2008 +#: src/stored/mount.c:635 #, c-format -msgid "Expecting open brace. Got %s" +msgid "" +"Bacula cannot write on DVD Volume \"%s\" because: The sizes do not match! " +"Volume=%s Catalog=%s\n" msgstr "" -#: src/dird/inc_conf.c:779 +#: src/stored/mount.c:649 #, c-format -msgid "Expected a FileSet keyword, got: %s" +msgid "Ready to append to end of Volume \"%s\" at file=%d.\n" msgstr "" -#: src/dird/ua_query.c:73 src/findlib/create_file.c:288 -#: src/findlib/create_file.c:391 +#: src/stored/mount.c:652 #, c-format -msgid "Could not open %s: ERR=%s\n" -msgstr "Не вдалось відкрити%s: ERR=%s\n" - -#: src/dird/ua_query.c:78 -msgid "Available queries:\n" +msgid "" +"For Volume \"%s\":\n" +"The number of files mismatch! Volume=%u Catalog=%u\n" +"Correcting Catalog\n" msgstr "" -#: src/dird/ua_query.c:85 -msgid "Choose a query" +#: src/stored/mount.c:659 src/stored/mount.c:694 +msgid "Error updating Catalog\n" msgstr "" -#: src/dird/ua_query.c:99 -msgid "Could not find query.\n" +#: src/stored/mount.c:664 +#, c-format +msgid "" +"Bacula cannot write on tape Volume \"%s\" because:\n" +"The number of files mismatch! Volume=%u Catalog=%u\n" msgstr "" -#: src/dird/ua_query.c:117 -msgid "Too many prompts in query, max is 9.\n" +#: src/stored/mount.c:679 +#, c-format +msgid "Ready to append to end of Volume \"%s\" size=%s\n" msgstr "" -#: src/dird/ua_query.c:220 +#: src/stored/mount.c:684 #, c-format -msgid "Warning prompt %d missing.\n" +msgid "" +"For Volume \"%s\":\n" +" The sizes do not match! Volume=%s Catalog=%s\n" +" Correcting Catalog\n" msgstr "" -#: src/dird/ua_query.c:265 +#: src/stored/mount.c:699 +#, c-format msgid "" -"Entering SQL query mode.\n" -"Terminate each query with a semicolon.\n" -"Terminate query mode with a blank line.\n" +"Bacula cannot write on disk Volume \"%s\" because: The sizes do not match! " +"Volume=%s Catalog=%s\n" msgstr "" -#: src/dird/ua_query.c:268 src/dird/ua_query.c:284 -msgid "Enter SQL query: " -msgstr "" - -#: src/dird/ua_query.c:286 -msgid "Add to SQL query: " -msgstr "" +#: src/stored/mount.c:765 +#, fuzzy, c-format +msgid "Labeled new Volume \"%s\" on %s device %s.\n" +msgstr "У картотеці створено новий Том \"%s\".\n" -#: src/dird/ua_query.c:289 -msgid "End query mode.\n" -msgstr "" +#: src/stored/mount.c:776 +#, fuzzy, c-format +msgid "%s device %s not configured to autolabel Volumes.\n" +msgstr "TLS необхідний, але не налаштовано у Bacula.\n" -#: src/dird/newvol.c:90 +#: src/stored/mount.c:798 #, c-format -msgid "Illegal character in Volume name \"%s\"\n" -msgstr "Заборонені символи у назві Тому \"%s\"\n" +msgid "Marking Volume \"%s\" in Error in Catalog.\n" +msgstr "" -#: src/dird/newvol.c:104 +#: src/stored/mount.c:815 #, c-format -msgid "Created new Volume \"%s\" in catalog.\n" -msgstr "У картотеці створено новий Том \"%s\".\n" +msgid "" +"Autochanger Volume \"%s\" not found in slot %d.\n" +" Setting InChanger to zero in catalog.\n" +msgstr "" -#: src/dird/newvol.c:131 -#, c-format -msgid "SQL failed, but ignored. ERR=%s\n" -msgstr "Проігноровано помилку SQL. ERR=%s\n" +#: src/stored/mount.c:834 +msgid "Hey!!!!! WroteVol non-zero !!!!!\n" +msgstr "" -#: src/dird/newvol.c:141 +#: src/stored/mount.c:884 #, c-format -msgid "Wanted to create Volume \"%s\", but it already exists. Trying again.\n" -msgstr "Спроба створити вже існуючий Том \"%s\". Спробуйте ще раз.\n" +msgid "" +"Invalid tape position on volume \"%s\" on device %s. Expected %d, got %d\n" +msgstr "" -#: src/dird/newvol.c:150 -msgid "Too many failures. Giving up creating Volume name.\n" -msgstr "Занадто багато провалів. Відмова у створенні імені Тому.\n" +#: src/stored/mount.c:925 +#, fuzzy, c-format +msgid "Cannot open %s Dev=%s, Vol=%s for reading.\n" +msgstr "Не вдається відкрити файл %s для введення. ERR=%s\n" -#: src/dird/expand.c:255 -#, c-format -msgid "Count not update counter %s: ERR=%s\n" -msgstr "Лічильник %s не оновлено: ERR=%s\n" +#: src/stored/askdir.c:168 +msgid "Network error on bnet_recv in req_vol_info.\n" +msgstr "" -#: src/dird/expand.c:427 +#: src/stored/askdir.c:191 #, c-format -msgid "Cannot create var context: ERR=%s\n" +msgid "Error getting Volume info: %s" msgstr "" -#: src/dird/expand.c:432 +#: src/stored/askdir.c:396 #, c-format -msgid "Cannot set var callback: ERR=%s\n" +msgid "Didn't get vol info vol=%s: ERR=%s" msgstr "" -#: src/dird/expand.c:438 +#: src/stored/askdir.c:461 #, c-format -msgid "Cannot set var operate: ERR=%s\n" +msgid "Error creating JobMedia record: ERR=%s\n" msgstr "" -#: src/dird/expand.c:444 src/dird/expand.c:459 +#: src/stored/askdir.c:468 #, c-format -msgid "Cannot unescape string: ERR=%s\n" +msgid "Error creating JobMedia record: %s\n" msgstr "" -#: src/dird/expand.c:452 +#: src/stored/askdir.c:556 #, c-format -msgid "Cannot expand expression \"%s\": ERR=%s\n" +msgid "Job %s canceled while waiting for mount on Storage Device \"%s\".\n" msgstr "" -#: src/dird/expand.c:470 +#: src/stored/askdir.c:568 #, c-format -msgid "Cannot destroy var context: ERR=%s\n" +msgid "" +"Job %s is waiting. Cannot find any appendable volumes.\n" +"Please use the \"label\" command to create a new Volume for:\n" +" Storage: %s\n" +" Pool: %s\n" +" Media type: %s\n" msgstr "" -#: src/dird/recycle.c:69 +#: src/stored/askdir.c:593 src/stored/askdir.c:694 #, c-format -msgid "Recycled volume \"%s\"\n" +msgid "Max time exceeded waiting to mount Storage Device %s for Job %s\n" msgstr "" -#: src/dird/ua_purge.c:90 -#, fuzzy -msgid "" -"\n" -"This command can be DANGEROUS!!!\n" -"\n" -"It purges (deletes) all Files from a Job,\n" -"JobId, Client or Volume; or it purges (deletes)\n" -"all Jobs from a Client or Volume without regard\n" -"to retention periods. Normally you should use the\n" -"PRUNE command, which respects retention periods.\n" +#: src/stored/askdir.c:603 +msgid "pthread error in mount_next_volume.\n" msgstr "" -"\n" -"Ця команда НЕБЕЗПЕЧНА!!!\n" -"\n" -"Вона вичистить(знищить) усі Файли із Задачі,\n" -"Номера Задачі, Клієнта або Тома; або вичистить(знищить)\n" -"усі Задачі із Клієнта або Тома не враховуючи\n" -"термінів зберігання. Зазвичай ви повинні використовувати\n" -"команду PRUNE для дотримання термінів зберігання.\n" -#: src/dird/ua_purge.c:157 -msgid "Choose item to purge" -msgstr "Оберіть те, що Ви хочете вичистити" - -#: src/dird/ua_purge.c:204 -#, c-format -msgid "Begin purging files for Client \"%s\"\n" -msgstr "Починається чистка файлів Клієнта \"%s\"\n" - -#: src/dird/ua_purge.c:213 src/dird/ua_purge.c:263 -#, c-format -msgid "No Files found for client %s to purge from %s catalog.\n" +#: src/stored/askdir.c:636 +msgid "Cannot request another volume: no volume name given.\n" msgstr "" -#: src/dird/ua_purge.c:216 +#: src/stored/askdir.c:642 #, c-format -msgid "Files for %d Jobs for client \"%s\" purged from %s catalog.\n" +msgid "Job %s canceled while waiting for mount on Storage Device %s.\n" msgstr "" -#: src/dird/ua_purge.c:254 +#: src/stored/askdir.c:659 #, c-format -msgid "Begin purging jobs from Client \"%s\"\n" +msgid "" +"%sPlease mount append Volume \"%s\" or label a new one for:\n" +" Job: %s\n" +" Storage: %s\n" +" Pool: %s\n" +" Media type: %s\n" msgstr "" -#: src/dird/ua_purge.c:266 +#: src/stored/askdir.c:665 #, c-format -msgid "%d Jobs for client %s purged from %s catalog.\n" +msgid "" +"%sPlease mount read Volume \"%s\" for:\n" +" Job: %s\n" +" Storage: %s\n" +" Pool: %s\n" +" Media type: %s\n" msgstr "" -#: src/dird/ua_purge.c:464 -#, c-format +#: src/stored/askdir.c:672 msgid "" "\n" -"Volume \"%s\" has VolStatus \"%s\" and cannot be purged.\n" -"The VolStatus must be: Append, Full, Used, or Error to be purged.\n" +"\n" +"WARNING: device is full! Please add more disk space then ...\n" +"\n" msgstr "" -#: src/dird/ua_purge.c:492 -#, c-format -msgid "%d File%s on Volume \"%s\" purged from catalog.\n" +#: src/stored/askdir.c:704 +msgid "pthread error in mount_volume\n" msgstr "" -#: src/dird/ua_purge.c:541 -#, c-format +#: src/stored/stored.c:75 +#, fuzzy, c-format msgid "" -"There are no more Jobs associated with Volume \"%s\". Marking it purged.\n" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: bacula-sd [options] [-c config_file] [config_file]\n" +" -c use as configuration file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -f run in foreground (for debugging)\n" +" -g set groupid to group\n" +" -m print kaboom output (for debugging)\n" +" -p proceed despite I/O errors\n" +" -s no signals (for debugging)\n" +" -t test - read config and exit\n" +" -u userid to \n" +" -v verbose user messages\n" +" -? print this message.\n" +"\n" msgstr "" +"\n" +"Версія: %s (%s) %s %s %s\n" +"\n" +"Використання: bat [-s] [-c config_file] [-d debug_level] [config_file]\n" +" -c set configuration file to file\n" +" -dnn set debug level to nn\n" +" -s без сигналів\n" +" -t перевірка - прочитати конфігурацію і вийти\n" +" -? print this message.\n" +"\n" -#: src/dird/ua_purge.c:556 src/dird/ua_label.c:774 +#: src/stored/stored.c:124 src/stored/btape.c:167 #, c-format -msgid "Connecting to Storage daemon %s at %s:%d ...\n" +msgid "Tape block size (%d) not multiple of system size (%d)\n" msgstr "" -#: src/dird/ua_purge.c:559 src/dird/ua_dotcmds.c:625 src/dird/ua_cmds.c:771 -#: src/dird/ua_cmds.c:1577 src/dird/ua_label.c:777 src/dird/job.c:448 -msgid "Failed to connect to Storage daemon.\n" +#: src/stored/stored.c:128 src/stored/btape.c:171 +#, c-format +msgid "Tape block size (%d) is not a power of 2\n" msgstr "" -#: src/dird/ua_purge.c:623 -#, fuzzy -msgid "Can't update volume size in the catalog\n" -msgstr "У картотеці створено новий Том \"%s\".\n" +#: src/stored/stored.c:256 +msgid "Volume Session Time is ZERO!\n" +msgstr "" -#: src/dird/ua_purge.c:625 +#: src/stored/stored.c:265 #, c-format -msgid "The volume \"%s\" has been truncated\n" +msgid "Unable to create thread. ERR=%s\n" msgstr "" -#: src/dird/ua_purge.c:627 +#: src/stored/stored.c:298 src/stored/butil.c:76 #, c-format -msgid "Unable to truncate volume \"%s\"\n" +msgid "No Storage resource defined in %s. Cannot continue.\n" msgstr "" -#: src/dird/ua_purge.c:713 +#: src/stored/stored.c:304 #, c-format -msgid "No Volumes found to perform %s action.\n" +msgid "Only one Storage resource permitted in %s\n" msgstr "" -#: src/dird/ua_purge.c:786 +#: src/stored/stored.c:309 #, c-format -msgid "Unable move recycled Volume in full Pool \"%s\" MaxVols=%d\n" +msgid "No Director resource defined in %s. Cannot continue.\n" msgstr "" -#: src/dird/ua_purge.c:800 +#: src/stored/stored.c:314 #, c-format -msgid "All records pruned from Volume \"%s\"; marking it \"Purged\"\n" +msgid "No Device resource defined in %s. Cannot continue.\n" msgstr "" -#: src/dird/ua_purge.c:805 +#: src/stored/stored.c:322 #, c-format -msgid "Cannot purge Volume with VolStatus=%s\n" +msgid "No Messages resource defined in %s. Cannot continue.\n" msgstr "" -#: src/dird/vbackup.c:76 src/dird/migrate.c:114 -msgid "Could not get or create a Pool record.\n" +#: src/stored/stored.c:329 src/stored/bscan.c:256 +#, c-format +msgid "No Working Directory defined in %s. Cannot continue.\n" msgstr "" -#: src/dird/vbackup.c:89 src/dird/migrate.c:227 src/dird/migrate.c:228 -#: src/dird/backup.c:93 src/dird/job.c:185 src/dird/job.c:871 -#: src/dird/job.c:1126 src/dird/job.c:1172 src/dird/job.c:1186 -msgid "Pool resource" +#: src/stored/stored.c:351 +#, c-format +msgid "\"TLS Certificate\" file not defined for Storage \"%s\" in %s.\n" msgstr "" -#: src/dird/vbackup.c:116 src/dird/migrate.c:285 -msgid "Job Pool's NextPool resource" +#: src/stored/stored.c:357 +#, c-format +msgid "\"TLS Key\" file not defined for Storage \"%s\" in %s.\n" msgstr "" -#: src/dird/vbackup.c:147 +#: src/stored/stored.c:363 #, c-format -msgid "Start Virtual Backup JobId %s, Job=%s\n" +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Storage \"%s\" in %s. At least one CA certificate store is required when " +"using \"TLS Verify Peer\".\n" msgstr "" -#: src/dird/vbackup.c:151 -msgid "" -"This Job is not an Accurate backup so is not equivalent to a Full backup.\n" +#: src/stored/stored.c:382 src/dird/dird.c:932 +#, c-format +msgid "Failed to initialize TLS context for Storage \"%s\" in %s.\n" msgstr "" -#: src/dird/vbackup.c:158 -msgid "No previous Jobs found.\n" +#: src/stored/stored.c:398 src/dird/dird.c:615 src/filed/filed.c:576 +#, c-format +msgid "\"TLS Certificate\" file not defined for Director \"%s\" in %s.\n" msgstr "" -#: src/dird/vbackup.c:180 +#: src/stored/stored.c:404 src/dird/dird.c:621 src/filed/filed.c:582 #, c-format -msgid "Error getting Job record for previous Job: ERR=%s" +msgid "\"TLS Key\" file not defined for Director \"%s\" in %s.\n" msgstr "" -#: src/dird/vbackup.c:186 src/dird/migrate.c:131 -msgid "Could not get or create the FileSet record.\n" +#: src/stored/stored.c:410 src/dird/dird.c:628 src/filed/filed.c:588 +#, c-format +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Director \"%s\" in %s. At least one CA certificate store is required when " +"using \"TLS Verify Peer\".\n" msgstr "" -#: src/dird/vbackup.c:313 src/dird/backup.c:635 +#: src/stored/stored.c:429 src/dird/dird.c:647 src/filed/filed.c:607 #, c-format -msgid "Error getting Client record for Job report: ERR=%s" +msgid "Failed to initialize TLS context for Director \"%s\" in %s.\n" msgstr "" -#: src/dird/vbackup.c:319 src/dird/migrate.c:1257 src/dird/backup.c:641 +#: src/stored/stored.c:479 src/dird/mac_sql.c:547 src/dird/dird.c:1138 #, c-format -msgid "Error getting Media record for Volume \"%s\": ERR=%s" +msgid "Could not compile regex pattern \"%s\" ERR=%s\n" msgstr "" -#: src/dird/vbackup.c:329 src/dird/backup.c:651 src/dird/backup.c:660 -#: src/stored/bscan.c:1214 -msgid "Backup OK -- with warnings" +#: src/stored/stored.c:548 src/stored/dircmd.c:204 src/dird/job.c:101 +#: src/dird/jobq.c:208 src/filed/job.c:257 +#, c-format +msgid "Unable to init job cond variable: ERR=%s\n" msgstr "" -#: src/dird/vbackup.c:331 src/dird/backup.c:653 src/stored/bscan.c:1211 -msgid "Backup OK" +#: src/stored/stored.c:556 +#, c-format +msgid "Could not initialize %s\n" msgstr "" -#: src/dird/vbackup.c:336 src/dird/backup.c:664 src/stored/bscan.c:1218 -msgid "*** Backup Error ***" +#: src/stored/stored.c:570 +#, c-format +msgid "Could not open device %s\n" msgstr "" -#: src/dird/vbackup.c:346 src/dird/backup.c:674 src/stored/bscan.c:1221 -msgid "Backup Canceled" +#: src/stored/stored.c:584 +#, c-format +msgid "Could not mount device %s\n" msgstr "" -#: src/dird/vbackup.c:393 +#: src/stored/btape.c:174 #, c-format msgid "" -"%s %s %s (%s):\n" -" Build OS: %s %s %s\n" -" JobId: %d\n" -" Job: %s\n" -" Backup Level: Virtual Full\n" -" Client: \"%s\" %s\n" -" FileSet: \"%s\" %s\n" -" Pool: \"%s\" (From %s)\n" -" Catalog: \"%s\" (From %s)\n" -" Storage: \"%s\" (From %s)\n" -" Scheduled time: %s\n" -" Start time: %s\n" -" End time: %s\n" -" Elapsed time: %s\n" -" Priority: %d\n" -" SD Files Written: %s\n" -" SD Bytes Written: %s (%sB)\n" -" Rate: %.1f KB/s\n" -" Volume name(s): %s\n" -" Volume Session Id: %d\n" -" Volume Session Time: %d\n" -" Last Volume Bytes: %s (%sB)\n" -" SD Errors: %d\n" -" SD termination status: %s\n" -" Termination: %s\n" +"\n" +"\n" +"!!!! Warning large disk addressing disabled. boffset_t=%d should be 8 or " +"more !!!!!\n" +"\n" "\n" msgstr "" -#: src/dird/ua_output.c:69 src/dird/ua_output.c:93 -msgid "ON or OFF keyword missing.\n" +#: src/stored/btape.c:181 +#, c-format +msgid "32 bit printf/scanf problem. i=%d x32=%u y32=%u\n" msgstr "" -#: src/dird/ua_output.c:113 -msgid "Disabled Jobs:\n" +#: src/stored/btape.c:190 +msgid "64 bit printf/scanf problem. i=%d x64=%" msgstr "" -#: src/dird/ua_output.c:119 -msgid "No disabled Jobs.\n" +#: src/stored/btape.c:195 +#, c-format +msgid "Tape block granularity is %d bytes.\n" msgstr "" -#: src/dird/ua_output.c:163 -msgid "disabled" +#: src/stored/btape.c:270 +msgid "No archive name specified.\n" msgstr "" -#: src/dird/ua_output.c:211 -msgid "Keywords for the show command are:\n" +#: src/stored/btape.c:274 +msgid "Improper number of arguments specified.\n" msgstr "" -#: src/dird/ua_output.c:217 -#, c-format -msgid "%s resource %s not found.\n" +#: src/stored/btape.c:288 +msgid "btape does not work with DVD storage.\n" msgstr "" -#: src/dird/ua_output.c:220 -#, c-format -msgid "Resource %s not found\n" +#: src/stored/btape.c:293 +msgid "btape only works with tape storage.\n" msgstr "" -#: src/dird/ua_output.c:290 -msgid "Hey! DB is NULL\n" +#: src/stored/btape.c:377 +#, c-format +msgid "Total Volume bytes=%sB. Total Write rate = %sB/s\n" msgstr "" -#: src/dird/ua_output.c:447 +#: src/stored/btape.c:403 #, c-format -msgid "Jobid %d used %d Volume(s): %s\n" +msgid "Volume bytes=%sB. Write rate = %sB/s\n" msgstr "" -#: src/dird/ua_output.c:465 -msgid "No Pool specified.\n" +#: src/stored/btape.c:467 src/stored/device.c:303 src/stored/bcopy.c:194 +#, c-format +msgid "dev open failed: %s\n" msgstr "" -#: src/dird/ua_output.c:486 +#: src/stored/btape.c:471 #, c-format -msgid "Pool: %s\n" +msgid "open device %s: OK\n" msgstr "" -#: src/dird/ua_output.c:502 -msgid "Ignoring invalid value for days. Max is 50.\n" +#: src/stored/btape.c:494 +msgid "Enter Volume Name: " msgstr "" -#: src/dird/ua_output.c:524 +#: src/stored/btape.c:501 #, c-format -msgid "Unknown list keyword: %s\n" +msgid "Device open failed. ERR=%s\n" msgstr "" -#: src/dird/ua_output.c:549 +#: src/stored/btape.c:506 #, c-format -msgid "%s is not a job name.\n" +msgid "Wrote Volume label for volume \"%s\".\n" msgstr "" -#: src/dird/ua_output.c:563 -#, c-format -msgid "Could not find Pool for Job %s\n" +#: src/stored/btape.c:520 +msgid "Volume has no label.\n" msgstr "" -#: src/dird/ua_output.c:576 -#, c-format -msgid "Could not find next Volume for Job %s (Pool=%s, Level=%s).\n" +#: src/stored/btape.c:523 +msgid "Volume label read correctly.\n" msgstr "" -#: src/dird/ua_output.c:580 +#: src/stored/btape.c:526 #, c-format -msgid "" -"The next Volume to be used by Job \"%s\" (Pool=%s, Level=%s) will be %s\n" +msgid "I/O error on device: ERR=%s" msgstr "" -#: src/dird/ua_output.c:593 -#, c-format -msgid "Could not find next Volume for Job %s.\n" -msgstr "" +#: src/stored/btape.c:529 +#, fuzzy, c-format +msgid "Volume type error: ERR=%s\n" +msgstr "Не вдалось створити %s: ERR=%s\n" -#: src/dird/ua_output.c:720 src/dird/job.c:133 src/tools/cats_test.c:375 -#, c-format -msgid "Could not open database \"%s\".\n" +#: src/stored/btape.c:532 +msgid "Volume name error\n" msgstr "" -#: src/dird/ua_output.c:733 +#: src/stored/btape.c:535 #, c-format -msgid "Pool %s not in database. %s" +msgid "Error creating label. ERR=%s" msgstr "" -#: src/dird/ua_output.c:741 -#, c-format -msgid "Pool %s created in database.\n" +#: src/stored/btape.c:538 +msgid "Volume version error.\n" msgstr "" -#: src/dird/ua_output.c:794 -msgid "You have no messages.\n" +#: src/stored/btape.c:541 +msgid "Bad Volume label type.\n" msgstr "" -#: src/dird/ua_output.c:874 -msgid "Message too long to display.\n" +#: src/stored/btape.c:544 +msgid "Unknown error.\n" msgstr "" -#: src/dird/ua_dotcmds.c:155 src/dird/ua_cmds.c:236 +#: src/stored/btape.c:562 #, c-format -msgid "Can't use %s command in a runscript" +msgid "Bad status from load. ERR=%s\n" msgstr "" -#: src/dird/ua_dotcmds.c:175 -msgid ": is an invalid command.\n" +#: src/stored/btape.c:564 +#, c-format +msgid "Loaded %s\n" msgstr "" -#: src/dird/ua_dotcmds.c:553 src/dird/ua_restore.c:780 -#: src/dird/ua_restore.c:823 +#: src/stored/btape.c:573 src/stored/btape.c:1136 src/stored/btape.c:1209 +#: src/stored/btape.c:1289 src/stored/btape.c:1560 #, c-format -msgid "Unable to get Job record for JobId=%s: ERR=%s\n" +msgid "Bad status from rewind. ERR=%s\n" msgstr "" -#: src/dird/ua_dotcmds.c:619 src/dird/ua_cmds.c:765 src/dird/ua_cmds.c:1566 -#: src/dird/ua_status.c:352 src/dird/job.c:147 src/dird/job.c:153 -#: src/dird/job.c:1160 src/dird/job.c:1164 -msgid "unknown source" +#: src/stored/btape.c:576 src/stored/btape.c:1568 +#, c-format +msgid "Rewound %s\n" msgstr "" -#: src/dird/ua_dotcmds.c:622 src/dird/ua_cmds.c:768 src/dird/ua_status.c:355 +#: src/stored/btape.c:602 src/stored/btape.c:1572 #, c-format -msgid "Connecting to Storage daemon %s at %s:%d\n" +msgid "Bad status from weof. ERR=%s\n" msgstr "" -#: src/dird/ua_dotcmds.c:628 src/dird/ua_cmds.c:774 src/dird/ua_status.c:366 -msgid "Connected to storage daemon\n" +#: src/stored/btape.c:606 +#, c-format +msgid "Wrote 1 EOF to %s\n" msgstr "" -#: src/dird/ua_dotcmds.c:648 src/dird/ua_cmds.c:803 src/dird/ua_cmds.c:1208 -#: src/dird/ua_status.c:397 +#: src/stored/btape.c:609 #, c-format -msgid "Connecting to Client %s at %s:%d\n" +msgid "Wrote %d EOFs to %s\n" msgstr "" -#: src/dird/ua_dotcmds.c:651 src/dird/ua_cmds.c:806 src/dird/ua_cmds.c:1211 -msgid "Failed to connect to Client.\n" +#: src/stored/btape.c:627 +msgid "Moved to end of medium.\n" msgstr "" -#: src/dird/ua_dotcmds.c:694 src/dird/ua_dotcmds.c:788 +#: src/stored/btape.c:654 #, c-format -msgid "Unknown command: %s\n" +msgid "Bad status from bsf. ERR=%s\n" msgstr "" -#: src/dird/ua_dotcmds.c:732 src/dird/ua_cmds.c:993 -msgid "Available daemons are: \n" +#: src/stored/btape.c:656 +#, c-format +msgid "Backspaced %d file%s.\n" msgstr "" -#: src/dird/ua_dotcmds.c:733 src/dird/ua_cmds.c:994 -msgid "Director" +#: src/stored/btape.c:673 +#, c-format +msgid "Bad status from bsr. ERR=%s\n" msgstr "" -#: src/dird/ua_dotcmds.c:736 -msgid "Select daemon type to make die" +#: src/stored/btape.c:675 +#, c-format +msgid "Backspaced %d record%s.\n" msgstr "" -#: src/dird/ua_dotcmds.c:762 -msgid "The Director will generate a deadlock.\n" +#: src/stored/btape.c:685 src/stored/status.c:361 +#, c-format +msgid "Configured device capabilities:\n" msgstr "" -#: src/dird/ua_dotcmds.c:766 -msgid "The Director will segment fault.\n" +#: src/stored/btape.c:703 +#, c-format +msgid "Device status:\n" msgstr "" -#: src/dird/ua_dotcmds.c:955 -msgid "Access to specified Client or FileSet not allowed.\n" +#: src/stored/btape.c:717 src/stored/status.c:417 +#, c-format +msgid "Device parameters:\n" msgstr "" -#: src/dird/ua_dotcmds.c:960 src/dird/ua_dotcmds.c:1004 -#: src/dird/ua_restore.c:941 src/dird/ua_restore.c:969 -#: src/dird/ua_restore.c:990 +#: src/stored/btape.c:722 #, c-format -msgid "Query failed: %s. ERR=%s\n" +msgid "Status:\n" msgstr "" -#: src/dird/ua_dotcmds.c:999 -msgid "query keyword not found.\n" +#: src/stored/btape.c:737 +msgid "" +"Test writing larger and larger records.\n" +"This is a torture test for records.\n" +"I am going to write\n" +"larger and larger records. It will stop when the record size\n" +"plus the header exceeds the block size (by default about 64K)\n" msgstr "" -#: src/dird/ua_dotcmds.c:1026 -#, c-format -msgid "List MediaType failed: ERR=%s\n" +#: src/stored/btape.c:743 +msgid "Do you want to continue? (y/n): " msgstr "" -#: src/dird/ua_dotcmds.c:1040 -#, c-format -msgid "List Media failed: ERR=%s\n" +#: src/stored/btape.c:745 src/stored/btape.c:2197 +msgid "Command aborted.\n" msgstr "" -#: src/dird/ua_dotcmds.c:1054 -#, fuzzy, c-format -msgid "List Location failed: ERR=%s\n" -msgstr "Невдале встановлення з'єднання TLS\n" - -#: src/dird/next_vol.c:166 +#: src/stored/btape.c:762 #, c-format -msgid "Purging oldest volume \"%s\"\n" +msgid "Block %d i=%d\n" msgstr "" -#: src/dird/next_vol.c:172 -#, c-format -msgid "Pruning oldest volume \"%s\"\n" +#: src/stored/btape.c:789 +msgid "Skipping read backwards test because BSR turned off.\n" msgstr "" -#: src/dird/next_vol.c:191 -msgid "We seem to be looping trying to find the next volume. I give up.\n" +#: src/stored/btape.c:793 +msgid "" +"\n" +"=== Write, backup, and re-read test ===\n" +"\n" +"I'm going to write three records and an EOF\n" +"then backup over the EOF and re-read the last record.\n" +"Bacula does this after writing the last block on the\n" +"tape to verify that the block was written correctly.\n" +"\n" +"This is not an *essential* feature ...\n" +"\n" msgstr "" -#: src/dird/next_vol.c:218 -#, c-format -msgid "Max Volume bytes=%s exceeded. Marking Volume \"%s\" as Full.\n" +#: src/stored/btape.c:806 src/stored/btape.c:817 src/stored/btape.c:828 +#: src/stored/btape.c:1146 src/stored/btape.c:1162 src/stored/btape.c:1904 +#: src/stored/btape.c:2821 +msgid "Error writing record to block.\n" msgstr "" -#: src/dird/next_vol.c:226 -#, c-format -msgid "Volume used once. Marking Volume \"%s\" as Used.\n" +#: src/stored/btape.c:810 src/stored/btape.c:821 src/stored/btape.c:832 +#: src/stored/btape.c:1150 src/stored/btape.c:1166 src/stored/btape.c:1908 +#: src/stored/btape.c:2825 +msgid "Error writing block to device.\n" msgstr "" -#: src/dird/next_vol.c:233 +#: src/stored/btape.c:813 #, c-format -msgid "Max Volume jobs=%s exceeded. Marking Volume \"%s\" as Used.\n" +msgid "Wrote first record of %d bytes.\n" msgstr "" -#: src/dird/next_vol.c:243 +#: src/stored/btape.c:824 #, c-format -msgid "Max Volume files=%s exceeded. Marking Volume \"%s\" as Used.\n" +msgid "Wrote second record of %d bytes.\n" msgstr "" -#: src/dird/next_vol.c:254 +#: src/stored/btape.c:835 #, c-format -msgid "" -"Max configured use duration=%s sec. exceeded. Marking Volume \"%s\" as " -"Used.\n" +msgid "Wrote third record of %d bytes.\n" msgstr "" -#: src/dird/next_vol.c:267 +#: src/stored/btape.c:842 src/stored/btape.c:847 #, c-format -msgid "Catalog error updating volume \"%s\". ERR=%s" +msgid "Backspace file failed! ERR=%s\n" msgstr "" -#: src/dird/next_vol.c:289 -msgid "volume has expired" +#: src/stored/btape.c:851 +msgid "Backspaced over EOF OK.\n" msgstr "" -#: src/dird/next_vol.c:307 src/dird/next_vol.c:351 +#: src/stored/btape.c:853 #, c-format -msgid "Recycled current volume \"%s\"\n" +msgid "Backspace record failed! ERR=%s\n" msgstr "" -#: src/dird/next_vol.c:312 -msgid "and recycling of current volume failed" +#: src/stored/btape.c:856 +msgid "Backspace record OK.\n" msgstr "" -#: src/dird/next_vol.c:318 -msgid "but should be Append, Purged or Recycle" +#: src/stored/btape.c:859 src/stored/btape.c:865 +#, c-format +msgid "Read block failed! ERR=%s\n" msgstr "" -#: src/dird/next_vol.c:327 -msgid "volume has recycling disabled" +#: src/stored/btape.c:870 +msgid "Bad data in record. Test failed!\n" msgstr "" -#: src/dird/next_vol.c:354 +#: src/stored/btape.c:874 msgid "" -"but should be Append, Purged or Recycle (recycling of the current volume " -"failed)" +"\n" +"Block re-read correct. Test succeeded!\n" msgstr "" -#: src/dird/next_vol.c:358 +#: src/stored/btape.c:875 msgid "" -"but should be Append, Purged or Recycle (cannot automatically recycle " -"current volume, as it still contains unpruned data or the Volume Retention " -"time has not expired.)" +"=== End Write, backup, and re-read test ===\n" +"\n" msgstr "" -#: src/dird/next_vol.c:421 -#, c-format -msgid "Unable to get Pool record: ERR=%s" +#: src/stored/btape.c:882 +msgid "" +"This is not terribly serious since Bacula only uses\n" +"this function to verify the last block written to the\n" +"tape. Bacula will skip the last block verification\n" +"if you add:\n" +"\n" +"Backward Space Record = No\n" +"\n" +"to your Storage daemon's Device resource definition.\n" msgstr "" -#: src/dird/next_vol.c:428 +#: src/stored/btape.c:904 #, c-format -msgid "Unable add Scratch Volume, Pool \"%s\" full MaxVols=%d\n" +msgid "Begin writing %i files of %sB with raw blocks of %u bytes.\n" msgstr "" -#: src/dird/next_vol.c:448 +#: src/stored/btape.c:925 src/stored/btape.c:2877 #, c-format -msgid "Failed to move Scratch Volume. ERR=%s\n" +msgid "Write failed at block %u. stat=%d ERR=%s\n" msgstr "" -#: src/dird/next_vol.c:453 +#: src/stored/btape.c:959 #, c-format -msgid "Using Volume \"%s\" from 'Scratch' pool.\n" -msgstr "" - -#: src/dird/ua_cmds.c:120 -msgid "Add media to a pool" +msgid "Begin writing %i files of %sB with blocks of %u bytes.\n" msgstr "" -#: src/dird/ua_cmds.c:121 -msgid "Autodisplay console messages" +#: src/stored/btape.c:968 +msgid "" +"\n" +"Error writing record to block.\n" msgstr "" -#: src/dird/ua_cmds.c:122 -msgid "Automount after label" +#: src/stored/btape.c:972 +msgid "" +"\n" +"Error writing block to device.\n" msgstr "" -#: src/dird/ua_cmds.c:123 -msgid "Cancel a job" +#: src/stored/btape.c:1027 +msgid "The file_size is too big, stop this test with Ctrl-c.\n" msgstr "" -#: src/dird/ua_cmds.c:124 -msgid "Create DB Pool from resource" +#: src/stored/btape.c:1055 +msgid "Test with zero data, should give the maximum throughput.\n" msgstr "" -#: src/dird/ua_cmds.c:125 -msgid "Delete volume, pool or job" +#: src/stored/btape.c:1067 src/stored/btape.c:1093 +msgid "Test with random data, should give the minimum throughput.\n" msgstr "" -#: src/dird/ua_cmds.c:126 -msgid "Disable a job" +#: src/stored/btape.c:1082 +msgid "Test with zero data and bacula block structure.\n" msgstr "" -#: src/dird/ua_cmds.c:127 -msgid "Enable a job" +#: src/stored/btape.c:1122 +#, c-format +msgid "" +"\n" +"=== Write, rewind, and re-read test ===\n" +"\n" +"I'm going to write %d records and an EOF\n" +"then write %d records and an EOF, then rewind,\n" +"and re-read the data to verify that it is correct.\n" +"\n" +"This is an *essential* feature ...\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:128 -msgid "Performs FileSet estimate, listing gives full listing" +#: src/stored/btape.c:1154 src/stored/btape.c:1170 +#, c-format +msgid "Wrote %d blocks of %d bytes.\n" msgstr "" -#: src/dird/ua_cmds.c:131 src/dird/ua_cmds.c:155 -#, fuzzy -msgid "Terminate Bconsole session" -msgstr "вивести версію Консолі" - -#: src/dird/ua_cmds.c:132 -msgid "Non-interactive gui mode" +#: src/stored/btape.c:1212 src/stored/btape.c:1292 +msgid "Rewind OK.\n" msgstr "" -#: src/dird/ua_cmds.c:133 -msgid "Print help on specific command" +#: src/stored/btape.c:1225 src/stored/btape.c:1344 +msgid "Got EOF on tape.\n" msgstr "" -#: src/dird/ua_cmds.c:138 -msgid "Label a tape" +#: src/stored/btape.c:1230 +#, c-format +msgid "Read block %d failed! ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:139 -msgid "List objects from catalog" +#: src/stored/btape.c:1236 +#, c-format +msgid "Read record failed. Block %d! ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:142 -msgid "Full or long list like list command" +#: src/stored/btape.c:1242 src/stored/btape.c:1374 +#, c-format +msgid "Bad data in record. Expected %d, got %d at byte %d. Test failed!\n" msgstr "" -#: src/dird/ua_cmds.c:145 -msgid "Display pending messages" +#: src/stored/btape.c:1249 +#, c-format +msgid "%d blocks re-read correctly.\n" msgstr "" -#: src/dird/ua_cmds.c:146 -#, fuzzy -msgid "Print current memory usage" -msgstr "вивести поточний час" - -#: src/dird/ua_cmds.c:147 -msgid "Mount storage" +#: src/stored/btape.c:1252 src/stored/btape.c:1381 +msgid "" +"=== Test Succeeded. End Write, rewind, and re-read test ===\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:150 -msgid "Prune expired records from catalog" +#: src/stored/btape.c:1280 +msgid "Block position test\n" msgstr "" -#: src/dird/ua_cmds.c:153 -msgid "Purge records from catalog" +#: src/stored/btape.c:1335 +#, c-format +msgid "Reposition to file:block %d:%d\n" msgstr "" -#: src/dird/ua_cmds.c:154 -msgid "Python control commands" +#: src/stored/btape.c:1337 +msgid "Reposition error.\n" msgstr "" -#: src/dird/ua_cmds.c:156 -msgid "Query catalog" -msgstr "" - -#: src/dird/ua_cmds.c:157 -msgid "Restore files" -msgstr "" - -#: src/dird/ua_cmds.c:162 -msgid "Relabel a tape" +#: src/stored/btape.c:1350 +#, c-format +msgid "" +"Read block %d failed! file=%d blk=%d. ERR=%s\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:165 -msgid "Release storage" +#: src/stored/btape.c:1352 +msgid "" +"This may be because the tape drive block size is not\n" +" set to variable blocking as normally used by Bacula.\n" +" Please see the Tape Testing chapter in the manual and \n" +" look for using mt with defblksize and setoptions\n" +"If your tape drive block size is correct, then perhaps\n" +" your SCSI driver is *really* stupid and does not\n" +" correctly report the file:block after a FSF. In this\n" +" case try setting:\n" +" Fast Forward Space File = no\n" +" in your Device resource.\n" msgstr "" -#: src/dird/ua_cmds.c:166 -msgid "Reload conf file" +#: src/stored/btape.c:1368 +#, c-format +msgid "Read record failed! ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:167 -msgid "Run a job" +#: src/stored/btape.c:1379 +#, c-format +msgid "Block %d re-read correctly.\n" msgstr "" -#: src/dird/ua_cmds.c:171 -msgid "Report status" +#: src/stored/btape.c:1400 +msgid "" +"\n" +"\n" +"=== Append files test ===\n" +"\n" +"This test is essential to Bacula.\n" +"\n" +"I'm going to write one record in file 0,\n" +" two records in file 1,\n" +" and three records in file 2\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:174 -msgid "Sets debug level" +#: src/stored/btape.c:1424 +msgid "Now moving to end of medium.\n" msgstr "" -#: src/dird/ua_cmds.c:177 -msgid "Sets new client address -- if authorized" +#: src/stored/btape.c:1426 src/stored/btape.c:1655 +#, c-format +msgid "We should be in file 3. I am at file %d. %s\n" msgstr "" -#: src/dird/ua_cmds.c:178 -#, fuzzy -msgid "Show resource records" -msgstr "Невідомий тип ресурсу %d\n" - -#: src/dird/ua_cmds.c:181 -msgid "Use SQL to query catalog" +#: src/stored/btape.c:1427 src/stored/btape.c:1445 src/stored/btape.c:1644 +#: src/stored/btape.c:1656 src/stored/btape.c:1669 src/stored/btape.c:1686 +msgid "This is correct!" msgstr "" -#: src/dird/ua_cmds.c:182 -#, fuzzy -msgid "Print current time" -msgstr "вивести поточний час" - -#: src/dird/ua_cmds.c:183 -msgid "Turn on/off trace to file" +#: src/stored/btape.c:1427 src/stored/btape.c:1445 src/stored/btape.c:1644 +#: src/stored/btape.c:1656 src/stored/btape.c:1669 src/stored/btape.c:1686 +msgid "This is NOT correct!!!!" msgstr "" -#: src/dird/ua_cmds.c:184 -msgid "Unmount storage" +#: src/stored/btape.c:1433 +msgid "" +"\n" +"Now the important part, I am going to attempt to append to the tape.\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:187 -msgid "Umount - for old-time Unix guys, see unmount" +#: src/stored/btape.c:1440 +msgid "" +"Done appending, there should be no I/O errors\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:190 -msgid "Update volume, pool or stats" +#: src/stored/btape.c:1441 +msgid "Doing Bacula scan of blocks:\n" msgstr "" -#: src/dird/ua_cmds.c:196 -msgid "Use catalog xxx" +#: src/stored/btape.c:1443 +msgid "End scanning the tape.\n" msgstr "" -#: src/dird/ua_cmds.c:197 -msgid "Does variable expansion" +#: src/stored/btape.c:1444 src/stored/btape.c:1668 +#, c-format +msgid "We should be in file 4. I am at file %d. %s\n" msgstr "" -#: src/dird/ua_cmds.c:198 -#, fuzzy -msgid "Print Director version" -msgstr "Керівник" - -#: src/dird/ua_cmds.c:199 -msgid "Wait until no jobs are running" +#: src/stored/btape.c:1469 +msgid "" +"\n" +"Autochanger enabled, but no name or no command device specified.\n" msgstr "" -#: src/dird/ua_cmds.c:247 -#, c-format -msgid "%s: is an invalid command.\n" +#: src/stored/btape.c:1473 +msgid "" +"\n" +"Ah, I see you have an autochanger configured.\n" +"To test the autochanger you must have a blank tape\n" +" that I can write on in Slot 1.\n" msgstr "" -#: src/dird/ua_cmds.c:288 +#: src/stored/btape.c:1476 msgid "" -"You probably don't want to be using this command since it\n" -"creates database records without labeling the Volumes.\n" -"You probably want to use the \"label\" command.\n" "\n" +"Do you wish to continue with the Autochanger test? (y/n): " msgstr "" -#: src/dird/ua_cmds.c:306 -#, c-format -msgid "Pool already has maximum volumes=%d\n" +#: src/stored/btape.c:1483 +msgid "" +"\n" +"\n" +"=== Autochanger test ===\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:307 -msgid "Enter new maximum (zero for unlimited): " +#: src/stored/btape.c:1492 +msgid "3301 Issuing autochanger \"loaded\" command.\n" msgstr "" -#: src/dird/ua_cmds.c:327 +#: src/stored/btape.c:1501 #, c-format -msgid "Enter number of Volumes to create. 0=>fixed name. Max=%d: " +msgid "3991 Bad autochanger command: %s\n" msgstr "" -#: src/dird/ua_cmds.c:333 +#: src/stored/btape.c:1502 #, c-format -msgid "The number must be between 0 and %d\n" -msgstr "" - -#: src/dird/ua_cmds.c:341 -msgid "Enter Volume name: " -msgstr "" - -#: src/dird/ua_cmds.c:345 -msgid "Enter base volume name: " +msgid "3991 result=\"%s\": ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:354 src/dird/ua_label.c:663 -msgid "Volume name too long.\n" +#: src/stored/btape.c:1506 +#, c-format +msgid "Slot %d loaded. I am going to unload it.\n" msgstr "" -#: src/dird/ua_cmds.c:358 src/dird/ua_label.c:669 src/lib/edit.c:501 -msgid "Volume name must be at least one character long.\n" +#: src/stored/btape.c:1508 +msgid "Nothing loaded in the drive. OK.\n" msgstr "" -#: src/dird/ua_cmds.c:369 -msgid "Enter the starting number: " +#: src/stored/btape.c:1515 +#, c-format +msgid "3302 Issuing autochanger \"unload %d %d\" command.\n" msgstr "" -#: src/dird/ua_cmds.c:374 -msgid "Start number must be greater than zero.\n" +#: src/stored/btape.c:1520 +#, c-format +msgid "unload status=%s %d\n" msgstr "" -#: src/dird/ua_cmds.c:385 -msgid "Enter slot (0 for none): " +#: src/stored/btape.c:1520 src/lib/util.c:177 src/lib/util.c:309 +#: src/dird/ua_status.c:1093 src/lib/status.h:115 +msgid "OK" msgstr "" -#: src/dird/ua_cmds.c:389 -msgid "InChanger? yes/no: " +#: src/stored/btape.c:1520 +msgid "Bad" msgstr "" -#: src/dird/ua_cmds.c:414 +#: src/stored/btape.c:1523 #, c-format -msgid "%d Volumes created in pool %s\n" -msgstr "" - -#: src/dird/ua_cmds.c:430 src/dird/ua_cmds.c:1032 -msgid "Turn on or off? " +msgid "3992 Bad autochanger command: %s\n" msgstr "" -#: src/dird/ua_cmds.c:544 +#: src/stored/btape.c:1524 #, c-format -msgid "" -"Can't set %s RecyclePool to %s, %s is not in database.\n" -"Try to update it with 'update pool=%s'\n" +msgid "3992 result=\"%s\": ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:562 +#: src/stored/btape.c:1534 #, c-format -msgid "" -"Can't set %s ScratchPool to %s, %s is not in database.\n" -"Try to update it with 'update pool=%s'\n" +msgid "3303 Issuing autochanger \"load %d %d\" command.\n" msgstr "" -#: src/dird/ua_cmds.c:631 +#: src/stored/btape.c:1542 #, c-format -msgid "" -"Error: Pool %s already exists.\n" -"Use update to change it.\n" +msgid "3303 Autochanger \"load %d %d\" status is OK.\n" msgstr "" -#: src/dird/ua_cmds.c:642 +#: src/stored/btape.c:1546 #, c-format -msgid "Pool %s created.\n" +msgid "3993 Bad autochanger command: %s\n" msgstr "" -#: src/dird/ua_cmds.c:672 -msgid "Python interpreter restarted.\n" +#: src/stored/btape.c:1547 +#, c-format +msgid "3993 result=\"%s\": ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:675 src/dird/ua_cmds.c:1337 -msgid "Nothing done.\n" +#: src/stored/btape.c:1562 +msgid "" +"\n" +"The test failed, probably because you need to put\n" +"a longer sleep time in the mtx-script in the load) case.\n" +"Adding a 30 second sleep and trying again ...\n" msgstr "" -#: src/dird/ua_cmds.c:699 src/dird/ua_cmds.c:1083 src/dird/ua_run.c:1588 +#: src/stored/btape.c:1575 #, c-format -msgid "Client \"%s\" not found.\n" +msgid "Wrote EOF to %s\n" msgstr "" -#: src/dird/ua_cmds.c:708 +#: src/stored/btape.c:1579 #, c-format -msgid "Client \"%s\" address set to %s\n" +msgid "" +"\n" +"The test worked this time. Please add:\n" +"\n" +" sleep %d\n" +"\n" +"to your mtx-changer script in the load) case.\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:742 -#, c-format -msgid "Job \"%s\" %sabled\n" +#: src/stored/btape.c:1584 +msgid "" +"\n" +"The test autochanger worked!!\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:920 -msgid "Enter new debug level: " +#: src/stored/btape.c:1595 +msgid "You must correct this error or the Autochanger will not work.\n" msgstr "" -#: src/dird/ua_cmds.c:997 -msgid "All" +#: src/stored/btape.c:1613 +msgid "" +"\n" +"\n" +"=== Forward space files test ===\n" +"\n" +"This test is essential to Bacula.\n" +"\n" +"I'm going to write five files then test forward spacing\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:998 -msgid "Select daemon type to set debug level" +#: src/stored/btape.c:1638 +msgid "Now forward spacing 1 file.\n" msgstr "" -#: src/dird/ua_cmds.c:1087 src/dird/ua_cmds.c:1972 +#: src/stored/btape.c:1640 src/stored/btape.c:1652 src/stored/btape.c:1665 +#: src/stored/btape.c:1683 src/stored/btape.c:1859 #, c-format -msgid "No authorization for Client \"%s\"\n" -msgstr "" - -#: src/dird/ua_cmds.c:1092 -msgid "Client name missing.\n" +msgid "Bad status from fsr. ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:1104 src/dird/ua_cmds.c:1171 src/dird/ua_cmds.c:1994 +#: src/stored/btape.c:1643 #, c-format -msgid "No authorization for Job \"%s\"\n" +msgid "We should be in file 1. I am at file %d. %s\n" msgstr "" -#: src/dird/ua_cmds.c:1109 -msgid "Job name missing.\n" +#: src/stored/btape.c:1650 +msgid "Now forward spacing 2 files.\n" msgstr "" -#: src/dird/ua_cmds.c:1118 -#, c-format -msgid "Fileset \"%s\" not found.\n" +#: src/stored/btape.c:1663 +msgid "Now forward spacing 4 files.\n" msgstr "" -#: src/dird/ua_cmds.c:1122 -#, c-format -msgid "No authorization for FileSet \"%s\"\n" +#: src/stored/btape.c:1675 +msgid "" +"The test worked this time. Please add:\n" +"\n" +" Fast Forward Space File = no\n" +"\n" +"to your Device resource for this drive.\n" msgstr "" -#: src/dird/ua_cmds.c:1127 -msgid "Fileset name missing.\n" +#: src/stored/btape.c:1681 +msgid "Now forward spacing 1 more file.\n" msgstr "" -#: src/dird/ua_cmds.c:1138 src/dird/ua_run.c:550 +#: src/stored/btape.c:1685 #, c-format -msgid "Level \"%s\" not valid.\n" +msgid "We should be in file 5. I am at file %d. %s\n" msgstr "" -#: src/dird/ua_cmds.c:1142 -msgid "Level value missing.\n" +#: src/stored/btape.c:1690 +msgid "" +"\n" +"=== End Forward space files test ===\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:1149 -msgid "Invalid value for accurate. It must be yes or no.\n" +#: src/stored/btape.c:1694 +msgid "" +"\n" +"The forward space file test failed.\n" msgstr "" -#: src/dird/ua_cmds.c:1154 -msgid "Accurate value missing.\n" +#: src/stored/btape.c:1696 +msgid "" +"You have Fast Forward Space File enabled.\n" +"I am turning it off then retrying the test.\n" msgstr "" -#: src/dird/ua_cmds.c:1167 -msgid "No job specified.\n" +#: src/stored/btape.c:1702 +msgid "" +"You must correct this error or Bacula will not work.\n" +"Some systems, e.g. OpenBSD, require you to set\n" +" Use MTIOCGET= no\n" +"in your device resource. Use with caution.\n" msgstr "" -#: src/dird/ua_cmds.c:1227 -msgid "Error sending include list.\n" +#: src/stored/btape.c:1736 +msgid "" +"\n" +"Append test failed. Attempting again.\n" +"Setting \"Hardware End of Medium = no\n" +" and \"Fast Forward Space File = no\n" +"and retrying append test.\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:1232 -msgid "Error sending exclude list.\n" +#: src/stored/btape.c:1744 +msgid "" +"\n" +"\n" +"It looks like the test worked this time, please add:\n" +"\n" +" Hardware End of Medium = No\n" +"\n" +" Fast Forward Space File = No\n" +"to your Device resource in the Storage conf file.\n" msgstr "" -#: src/dird/ua_cmds.c:1323 +#: src/stored/btape.c:1751 msgid "" -"In general it is not a good idea to delete either a\n" -"Pool or a Volume since they may contain data.\n" "\n" +"\n" +"That appears *NOT* to have corrected the problem.\n" msgstr "" -#: src/dird/ua_cmds.c:1326 -msgid "Choose catalog item to delete" +#: src/stored/btape.c:1756 +msgid "" +"\n" +"\n" +"It looks like the append failed. Attempting again.\n" +"Setting \"BSF at EOM = yes\" and retrying append test.\n" msgstr "" -#: src/dird/ua_cmds.c:1376 src/dird/ua_cmds.c:1391 src/dird/ua_cmds.c:1401 -#, c-format -msgid "Illegal JobId %s ignored\n" +#: src/stored/btape.c:1761 +msgid "" +"\n" +"\n" +"It looks like the test worked this time, please add:\n" +"\n" +" Hardware End of Medium = No\n" +" Fast Forward Space File = No\n" +" BSF at EOM = yes\n" +"\n" +"to your Device resource in the Storage conf file.\n" msgstr "" -#: src/dird/ua_cmds.c:1404 -msgid "Enter JobId to delete: " +#: src/stored/btape.c:1772 +msgid "" +"\n" +"Append test failed.\n" +"\n" +"\n" +"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n" +"Unable to correct the problem. You MUST fix this\n" +"problem before Bacula can use your tape drive correctly\n" +"\n" +"Perhaps running Bacula in fixed block mode will work.\n" +"Do so by setting:\n" +"\n" +"Minimum Block Size = nnn\n" +"Maximum Block Size = nnn\n" +"\n" +"in your Storage daemon's Device definition.\n" +"nnn must match your tape driver's block size, which\n" +"can be determined by reading your tape manufacturers\n" +"information, and the information on your kernel dirver.\n" +"Fixed block sizes, however, are not normally an ideal solution.\n" +"\n" +"Some systems, e.g. OpenBSD, require you to set\n" +" Use MTIOCGET= no\n" +"in your device resource. Use with caution.\n" msgstr "" -#: src/dird/ua_cmds.c:1440 -#, c-format -msgid "Are you sure you want to delete %d JobIds ? (yes/no): " +#: src/stored/btape.c:1794 +msgid "" +"\n" +"The above Bacula scan should have output identical to what follows.\n" +"Please double check it ...\n" +"=== Sample correct output ===\n" +"1 block of 64448 bytes in file 1\n" +"End of File mark.\n" +"2 blocks of 64448 bytes in file 2\n" +"End of File mark.\n" +"3 blocks of 64448 bytes in file 3\n" +"End of File mark.\n" +"1 block of 64448 bytes in file 4\n" +"End of File mark.\n" +"Total files=4, blocks=7, bytes = 451,136\n" +"=== End sample correct output ===\n" +"\n" +"If the above scan output is not identical to the\n" +"sample output, you MUST correct the problem\n" +"or Bacula will not be able to write multiple Jobs to \n" +"the tape.\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:1450 +#: src/stored/btape.c:1837 #, c-format -msgid "Illegal JobId range %s - %s should define increasing JobIds, ignored\n" +msgid "Bad status from fsf. ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:1454 -#, c-format -msgid "Illegal JobId range %s - %s, ignored\n" +#: src/stored/btape.c:1841 +msgid "Forward spaced 1 file.\n" msgstr "" -#: src/dird/ua_cmds.c:1469 +#: src/stored/btape.c:1844 #, c-format -msgid "Jobid %s and associated records deleted from the catalog.\n" +msgid "Forward spaced %d files.\n" msgstr "" -#: src/dird/ua_cmds.c:1484 -#, c-format -msgid "" -"\n" -"This command will delete volume %s\n" -"and all Jobs saved on that volume from the Catalog\n" +#: src/stored/btape.c:1863 +msgid "Forward spaced 1 record.\n" msgstr "" -#: src/dird/ua_cmds.c:1491 +#: src/stored/btape.c:1866 #, c-format -msgid "Are you sure you want to delete Volume \"%s\"? (yes/no): " -msgstr "" - -#: src/dird/ua_cmds.c:1504 -msgid "Can't list jobs on this volume\n" +msgid "Forward spaced %d records.\n" msgstr "" -#: src/dird/ua_cmds.c:1529 +#: src/stored/btape.c:1911 #, c-format -msgid "Are you sure you want to delete Pool \"%s\"? (yes/no): " +msgid "Wrote one record of %d bytes.\n" msgstr "" -#: src/dird/ua_cmds.c:1644 -#, c-format -msgid "Using Catalog name=%s DB=%s\n" +#: src/stored/btape.c:1913 +msgid "Wrote block to device.\n" msgstr "" -#: src/dird/ua_cmds.c:1712 -msgid "ERR: Can't open db\n" +#: src/stored/btape.c:1927 +msgid "Enter length to read: " msgstr "" -#: src/dird/ua_cmds.c:1759 -msgid "Wait on mount timed out\n" +#: src/stored/btape.c:1932 +msgid "Bad length entered, using default of 1024 bytes.\n" msgstr "" -#: src/dird/ua_cmds.c:1769 -msgid "ERR: Job was not found\n" +#: src/stored/btape.c:1941 +#, c-format +msgid "Read of %d bytes gives stat=%d. ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:1845 -msgid "" -" Command Description\n" -" ======= ===========\n" +#: src/stored/btape.c:1964 src/stored/btape.c:2013 +#, c-format +msgid "End of tape\n" msgstr "" -#: src/dird/ua_cmds.c:1849 +#: src/stored/btape.c:1969 #, c-format -msgid "" -" %-13s %s\n" -"\n" -"Arguments:\n" -"\t%s\n" +msgid "Starting scan at file %u\n" msgstr "" -#: src/dird/ua_cmds.c:1854 +#: src/stored/btape.c:1974 src/stored/tape_dev.c:613 #, c-format -msgid " %-13s %s\n" +msgid "read error on %s. ERR=%s.\n" msgstr "" -#: src/dird/ua_cmds.c:1858 -#, fuzzy, c-format -msgid "" -"\n" -"Can't find %s command.\n" -"\n" -msgstr ": неправильна команда\n" - -#: src/dird/ua_cmds.c:1860 -msgid "" -"\n" -"When at a prompt, entering a period cancels the command.\n" -"\n" +#: src/stored/btape.c:1976 +#, c-format +msgid "Bad status from read %d. ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:1896 src/filed/status.c:85 +#: src/stored/btape.c:1979 src/stored/btape.c:1993 src/stored/btape.c:2057 +#: src/stored/btape.c:2069 src/stored/btape.c:2082 src/stored/btape.c:2098 #, c-format -msgid "%s Version: %s (%s) %s %s %s %s\n" +msgid "1 block of %d bytes in file %d\n" msgstr "" -#: src/dird/ua_cmds.c:1955 src/dird/ua_cmds.c:1982 src/dird/ua_cmds.c:2004 +#: src/stored/btape.c:1982 src/stored/btape.c:1996 src/stored/btape.c:2060 +#: src/stored/btape.c:2072 src/stored/btape.c:2085 src/stored/btape.c:2101 #, c-format -msgid "No authorization for Catalog \"%s\"\n" +msgid "%d blocks of %d bytes in file %d\n" msgstr "" -#: src/dird/ua_cmds.c:2049 +#: src/stored/btape.c:2004 src/stored/btape.c:2076 #, c-format -msgid "Could not open catalog database \"%s\".\n" +msgid "End of File mark.\n" msgstr "" -#: src/dird/ua_cmds.c:2059 +#: src/stored/btape.c:2025 src/stored/btape.c:2129 #, c-format -msgid "Using Catalog \"%s\"\n" +msgid "Total files=%d, blocks=%d, bytes = %s\n" msgstr "" -#: src/dird/ua_tree.c:74 -msgid "add dir/file to be restored recursively, wildcards allowed" +#: src/stored/btape.c:2089 +#, c-format +msgid "Short block read.\n" msgstr "" -#: src/dird/ua_tree.c:75 -msgid "change current directory" +#: src/stored/btape.c:2092 +#, c-format +msgid "Error reading block. ERR=%s\n" msgstr "" -#: src/dird/ua_tree.c:76 -msgid "count marked files in and below the cd" +#: src/stored/btape.c:2116 +#, c-format +msgid "" +"Block=%u file,blk=%u,%u blen=%u First rec FI=%s SessId=%u SessTim=%u Strm=%s " +"rlen=%d\n" msgstr "" -#: src/dird/ua_tree.c:77 -msgid "delete dir/file to be restored recursively in dir" +#: src/stored/btape.c:2138 +#, c-format +msgid "Device status: %u. ERR=%s\n" msgstr "" -#: src/dird/ua_tree.c:78 src/dird/ua_tree.c:79 -msgid "long list current directory, wildcards allowed" +#: src/stored/btape.c:2170 +#, c-format +msgid "" +"\n" +"This command simulates Bacula writing to a tape.\n" +"It requires either one or two blank tapes, which it\n" +"will label and write.\n" +"\n" +"If you have an autochanger configured, it will use\n" +"the tapes that are in slots 1 and 2, otherwise, you will\n" +"be prompted to insert the tapes when necessary.\n" +"\n" +"It will print a status approximately\n" +"every 322 MB, and write an EOF every %s. If you have\n" +"selected the simple test option, after writing the first tape\n" +"it will rewind it and re-read the last block written.\n" +"\n" +"If you have selected the multiple tape test, when the first tape\n" +"fills, it will ask for a second, and after writing a few more \n" +"blocks, it will stop. Then it will begin re-reading the\n" +"two tapes.\n" +"\n" +"This may take a long time -- hours! ...\n" +"\n" msgstr "" -#: src/dird/ua_tree.c:80 -msgid "leave file selection mode" +#: src/stored/btape.c:2188 +msgid "" +"Do you want to run the simplified test (s) with one tape\n" +"or the complete multiple tape (m) test: (s/m) " msgstr "" -#: src/dird/ua_tree.c:81 -msgid "estimate restore size" +#: src/stored/btape.c:2191 +msgid "Simple test (single tape) selected.\n" msgstr "" -#: src/dird/ua_tree.c:82 -msgid "same as done command" +#: src/stored/btape.c:2194 +msgid "Multiple tape test selected.\n" msgstr "" -#: src/dird/ua_tree.c:83 -msgid "find files, wildcards allowed" +#: src/stored/btape.c:2236 +msgid "Wrote Start of Session label.\n" msgstr "" -#: src/dird/ua_tree.c:84 src/dird/ua_tree.c:97 src/dird/ua_tree.c:98 -msgid "print help" +#: src/stored/btape.c:2255 +#, c-format +msgid "%s Begin writing Bacula records to tape ...\n" msgstr "" -#: src/dird/ua_tree.c:85 src/dird/ua_tree.c:86 -msgid "list current directory, wildcards allowed" +#: src/stored/btape.c:2257 +#, c-format +msgid "%s Begin writing Bacula records to first tape ...\n" msgstr "" -#: src/dird/ua_tree.c:87 -msgid "list subdir in current directory, wildcards allowed" +#: src/stored/btape.c:2283 +msgid "Flush block failed.\n" msgstr "" -#: src/dird/ua_tree.c:88 -msgid "list the marked files in and below the cd" +#: src/stored/btape.c:2297 +#, c-format +msgid "Wrote block=%u, file,blk=%u,%u VolBytes=%s rate=%sB/s\n" msgstr "" -#: src/dird/ua_tree.c:89 -msgid "list the marked files in" +#: src/stored/btape.c:2308 +#, c-format +msgid "%s Flush block, write EOF\n" msgstr "" -#: src/dird/ua_tree.c:90 -msgid "mark dir/file to be restored recursively, wildcards allowed" +#: src/stored/btape.c:2317 +msgid "Wrote 1000 blocks on second tape. Done.\n" msgstr "" -#: src/dird/ua_tree.c:91 -msgid "mark directory name to be restored (no files)" +#: src/stored/btape.c:2322 +msgid "Not OK\n" msgstr "" -#: src/dird/ua_tree.c:92 src/dird/ua_tree.c:93 -msgid "print current working directory" +#: src/stored/btape.c:2346 +#, fuzzy +msgid "Job canceled.\n" +msgstr "Статус задачі: Відмінена" + +#: src/stored/btape.c:2357 +msgid "Set ok=false after write_block_to_device.\n" msgstr "" -#: src/dird/ua_tree.c:94 -msgid "unmark dir/file to be restored recursively in dir" +#: src/stored/btape.c:2361 +msgid "Wrote End of Session label.\n" msgstr "" -#: src/dird/ua_tree.c:95 -msgid "unmark directory name only no recursion" +#: src/stored/btape.c:2385 +#, c-format +msgid "Wrote state file last_block_num1=%d last_block_num2=%d\n" msgstr "" -#: src/dird/ua_tree.c:96 -msgid "quit and do not do restore" +#: src/stored/btape.c:2389 +#, c-format +msgid "Could not create state file: %s ERR=%s\n" msgstr "" -#: src/dird/ua_tree.c:118 +#: src/stored/btape.c:2400 +#, c-format msgid "" "\n" -"You are now entering file selection mode where you add (mark) and\n" -"remove (unmark) files to be restored. No files are initially added, unless\n" -"you used the \"all\" keyword on the command line.\n" -"Enter \"done\" to leave this mode.\n" "\n" +"%s Done filling tape at %d:%d. Now beginning re-read of tape ...\n" msgstr "" -#: src/dird/ua_tree.c:129 src/dird/ua_tree.c:831 +#: src/stored/btape.c:2403 #, c-format -msgid "cwd is: %s\n" +msgid "" +"\n" +"\n" +"%s Done filling tapes at %d:%d. Now beginning re-read of first tape ...\n" msgstr "" -#: src/dird/ua_tree.c:138 src/dird/ua_tree.c:157 +#: src/stored/btape.c:2409 +#, fuzzy +msgid "do_unfill failed.\n" +msgstr "Помилка команди" + +#: src/stored/btape.c:2414 #, c-format -msgid "Invalid command \"%s\". Enter \"done\" to exit.\n" +msgid "%s: Error during test.\n" +msgstr "" + +#: src/stored/btape.c:2449 +msgid "" +"\n" +"The state file level has changed. You must redo\n" +"the fill command.\n" msgstr "" -#: src/dird/ua_tree.c:227 +#: src/stored/btape.c:2456 #, c-format msgid "" -"Something is wrong with the Delta sequence of %s, skiping new parts. Current " -"sequence is %d\n" +"\n" +"Could not find the state file: %s ERR=%s\n" +"You must redo the fill command.\n" msgstr "" -#: src/dird/ua_tree.c:373 src/dird/ua_tree.c:385 src/dird/ua_tree.c:402 -msgid "No files marked.\n" +#: src/stored/btape.c:2522 +msgid "Mount first tape. Press enter when ready: " msgstr "" -#: src/dird/ua_tree.c:387 -msgid "1 file marked.\n" +#: src/stored/btape.c:2538 +msgid "Rewinding.\n" msgstr "" -#: src/dird/ua_tree.c:389 +#: src/stored/btape.c:2543 #, c-format -msgid "%s files marked.\n" -msgstr "" - -#: src/dird/ua_tree.c:417 -msgid "No directories marked.\n" -msgstr "" - -#: src/dird/ua_tree.c:419 -msgid "1 directory marked.\n" +msgid "Reading the first 10000 records from %u:%u.\n" msgstr "" -#: src/dird/ua_tree.c:421 +#: src/stored/btape.c:2547 src/stored/btape.c:2615 #, c-format -msgid "%s directories marked.\n" +msgid "Reposition from %u:%u to %u:%u\n" msgstr "" -#: src/dird/ua_tree.c:442 +#: src/stored/btape.c:2550 src/stored/btape.c:2602 src/stored/btape.c:2618 #, c-format -msgid "%s total files/dirs. %s marked to be restored.\n" -msgstr "" - -#: src/dird/ua_tree.c:453 -msgid "No file specification given.\n" +msgid "Reposition error. ERR=%s\n" msgstr "" -#: src/dird/ua_tree.c:674 +#: src/stored/btape.c:2553 #, c-format -msgid "Node %s has no children.\n" +msgid "Reading block %u.\n" msgstr "" -#: src/dird/ua_tree.c:767 +#: src/stored/btape.c:2555 src/stored/btape.c:2607 src/stored/btape.c:2623 #, c-format -msgid "%d total files; %d marked to be restored; %s bytes.\n" +msgid "Error reading block: ERR=%s\n" msgstr "" -#: src/dird/ua_tree.c:778 src/stored/btape.c:2949 -#, c-format +#: src/stored/btape.c:2560 msgid "" -" Command Description\n" -" ======= ===========\n" -msgstr "" - -#: src/dird/ua_tree.c:801 -msgid "Too few or too many arguments. Try using double quotes.\n" -msgstr "" - -#: src/dird/ua_tree.c:814 -msgid "Invalid path given.\n" -msgstr "" - -#: src/dird/ua_tree.c:850 src/dird/ua_tree.c:862 -msgid "No files unmarked.\n" -msgstr "" - -#: src/dird/ua_tree.c:864 -msgid "1 file unmarked.\n" -msgstr "" - -#: src/dird/ua_tree.c:867 -#, c-format -msgid "%s files unmarked.\n" -msgstr "" - -#: src/dird/ua_tree.c:878 src/dird/ua_tree.c:895 -msgid "No directories unmarked.\n" +"\n" +"The last block on the tape matches. Test succeeded.\n" +"\n" msgstr "" -#: src/dird/ua_tree.c:897 -msgid "1 directory unmarked.\n" +#: src/stored/btape.c:2563 +msgid "" +"\n" +"The last block of the first tape matches.\n" +"\n" msgstr "" -#: src/dird/ua_tree.c:899 -#, c-format -msgid "%d directories unmarked.\n" +#: src/stored/btape.c:2587 +msgid "Mount second tape. Press enter when ready: " msgstr "" -#: src/dird/dird_conf.c:567 src/tray-monitor/tray_conf.c:168 -#: src/qt-console/tray-monitor/tray_conf.cpp:168 -#, c-format -msgid "No %s resource defined\n" -msgstr "Ресурс %s не визначено\n" - -#: src/dird/dird_conf.c:576 +#: src/stored/btape.c:2600 #, c-format -msgid "Director: name=%s MaxJobs=%d FDtimeout=%s SDtimeout=%s\n" +msgid "Reposition from %u:%u to 0:1\n" msgstr "" -#: src/dird/dird_conf.c:581 +#: src/stored/btape.c:2605 src/stored/btape.c:2621 #, c-format -msgid " query_file=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:584 src/dird/dird_conf.c:604 src/dird/dird_conf.c:621 -#: src/dird/dird_conf.c:689 src/dird/dird_conf.c:693 src/dird/dird_conf.c:697 -#: src/dird/dird_conf.c:730 src/dird/dird_conf.c:753 src/dird/dird_conf.c:757 -#: src/dird/dird_conf.c:761 src/dird/dird_conf.c:765 src/dird/dird_conf.c:769 -#: src/dird/dird_conf.c:782 src/dird/dird_conf.c:1018 -#: src/dird/dird_conf.c:1025 -msgid " --> " +msgid "Reading block %d.\n" msgstr "" -#: src/dird/dird_conf.c:589 -#, c-format -msgid "Console: name=%s SSL=%d\n" +#: src/stored/btape.c:2611 +msgid "" +"\n" +"The first block on the second tape matches.\n" +"\n" msgstr "" -#: src/dird/dird_conf.c:594 -#, c-format -msgid "Counter: name=%s min=%d max=%d cur=%d wrapcntr=%s\n" +#: src/stored/btape.c:2627 +msgid "" +"\n" +"The last block on the second tape matches. Test succeeded.\n" +"\n" msgstr "" -#: src/dird/dird_conf.c:599 +#: src/stored/btape.c:2645 #, c-format -msgid "Counter: name=%s min=%d max=%d\n" +msgid "10000 records read now at %d:%d\n" msgstr "" -#: src/dird/dird_conf.c:613 -#, c-format -msgid "Client: name=%s address=%s FDport=%d MaxJobs=%u\n" +#: src/stored/btape.c:2671 src/stored/btape.c:2682 src/stored/btape.c:2727 +msgid "Last block written" msgstr "" -#: src/dird/dird_conf.c:616 -#, c-format -msgid " JobRetention=%s FileRetention=%s AutoPrune=%d\n" +#: src/stored/btape.c:2673 src/stored/btape.c:2683 +msgid "Block read back" msgstr "" -#: src/dird/dird_conf.c:629 +#: src/stored/btape.c:2674 #, c-format msgid "" -"Device: name=%s ok=%d num_writers=%d max_writers=%d\n" -" reserved=%d open=%d append=%d read=%d labeled=%d offline=%d autochgr=" -"%d\n" -" poolid=%s volname=%s MediaType=%s\n" +"\n" +"\n" +"The blocks differ at byte %u\n" msgstr "" -#: src/dird/dird_conf.c:643 -#, c-format +#: src/stored/btape.c:2675 msgid "" -"Storage: name=%s address=%s SDport=%d MaxJobs=%u\n" -" DeviceName=%s MediaType=%s StorageId=%s\n" +"\n" +"\n" +"!!!! The last block written and the block\n" +"that was read back differ. The test FAILED !!!!\n" +"This must be corrected before you use Bacula\n" +"to write multi-tape Volumes.!!!!\n" msgstr "" -#: src/dird/dird_conf.c:656 +#: src/stored/btape.c:2711 #, c-format -msgid "" -"Catalog: name=%s address=%s DBport=%d db_name=%s\n" -" db_driver=%s db_user=%s MutliDBConn=%d\n" +msgid "Last block at: %u:%u this_dev_block_num=%d\n" msgstr "" -#: src/dird/dird_conf.c:669 +#: src/stored/btape.c:2725 #, c-format -msgid "%s: name=%s JobType=%d level=%s Priority=%d Enabled=%d\n" -msgstr "" - -#: src/dird/dird_conf.c:670 -msgid "JobDefs" +msgid "Block not written: FileIndex=%u blk_block=%u Size=%u\n" msgstr "" -#: src/dird/dird_conf.c:674 -#, c-format -msgid "" -" MaxJobs=%u Resched=%d Times=%d Interval=%s Spool=%d WritePartAfterJob=" -"%d\n" +#: src/stored/btape.c:2729 +msgid "Block not written" msgstr "" -#: src/dird/dird_conf.c:680 +#: src/stored/btape.c:2744 #, c-format -msgid " SpoolSize=%s\n" +msgid "End of tape %d:%d. Volume Bytes=%s. Write rate = %sB/s\n" msgstr "" -#: src/dird/dird_conf.c:683 +#: src/stored/btape.c:2754 src/stored/bcopy.c:272 src/stored/bcopy.c:280 +#: src/stored/bcopy.c:308 #, c-format -msgid " Accurate=%d\n" +msgid "Cannot fixup device error. %s\n" msgstr "" -#: src/dird/dird_conf.c:686 -#, c-format -msgid " SelectionType=%d\n" +#: src/stored/btape.c:2795 +msgid "Test writing blocks of 64512 bytes to tape.\n" msgstr "" -#: src/dird/dird_conf.c:701 -#, c-format -msgid " --> Where=%s\n" +#: src/stored/btape.c:2797 +msgid "How many blocks do you want to write? (1000): " msgstr "" -#: src/dird/dird_conf.c:704 +#: src/stored/btape.c:2814 #, c-format -msgid " --> RegexWhere=%s\n" +msgid "Begin writing %d Bacula blocks to tape ...\n" msgstr "" -#: src/dird/dird_conf.c:707 +#: src/stored/btape.c:2857 #, c-format -msgid " --> Bootstrap=%s\n" +msgid "Begin writing raw blocks of %u bytes.\n" msgstr "" -#: src/dird/dird_conf.c:710 -#, c-format -msgid " --> WriteBootstrap=%s\n" +#: src/stored/btape.c:2888 +msgid "test autochanger" msgstr "" -#: src/dird/dird_conf.c:713 -#, c-format -msgid " --> PluginOptions=%s\n" +#: src/stored/btape.c:2889 +msgid "backspace file" msgstr "" -#: src/dird/dird_conf.c:716 -#, c-format -msgid " --> MaxRunTime=%u\n" +#: src/stored/btape.c:2890 +msgid "backspace record" msgstr "" -#: src/dird/dird_conf.c:719 -#, c-format -msgid " --> MaxWaitTime=%u\n" +#: src/stored/btape.c:2891 +msgid "list device capabilities" msgstr "" -#: src/dird/dird_conf.c:722 -#, c-format -msgid " --> MaxStartDelay=%u\n" +#: src/stored/btape.c:2892 +msgid "clear tape errors" msgstr "" -#: src/dird/dird_conf.c:725 -#, c-format -msgid " --> MaxRunSchedTime=%u\n" +#: src/stored/btape.c:2893 +msgid "go to end of Bacula data for append" msgstr "" -#: src/dird/dird_conf.c:737 -#, c-format -msgid " --> Base %s\n" +#: src/stored/btape.c:2894 +msgid "go to the physical end of medium" msgstr "" -#: src/dird/dird_conf.c:743 src/lib/runscript.c:297 -msgid " --> RunScript\n" +#: src/stored/btape.c:2895 +msgid "fill tape, write onto second volume" msgstr "" -#: src/dird/dird_conf.c:744 src/lib/runscript.c:298 -#, c-format -msgid " --> Command=%s\n" +#: src/stored/btape.c:2896 +msgid "read filled tape" msgstr "" -#: src/dird/dird_conf.c:745 src/lib/runscript.c:299 -#, c-format -msgid " --> Target=%s\n" +#: src/stored/btape.c:2897 +msgid "forward space a file" msgstr "" -#: src/dird/dird_conf.c:746 src/lib/runscript.c:300 -#, c-format -msgid " --> RunOnSuccess=%u\n" +#: src/stored/btape.c:2898 +msgid "forward space a record" msgstr "" -#: src/dird/dird_conf.c:747 src/lib/runscript.c:301 -#, c-format -msgid " --> RunOnFailure=%u\n" +#: src/stored/btape.c:2899 +msgid "print this command" msgstr "" -#: src/dird/dird_conf.c:748 src/lib/runscript.c:302 -#, c-format -msgid " --> FailJobOnError=%u\n" +#: src/stored/btape.c:2900 +msgid "write a Bacula label to the tape" msgstr "" -#: src/dird/dird_conf.c:749 src/lib/runscript.c:303 -#, c-format -msgid " --> RunWhen=%u\n" +#: src/stored/btape.c:2901 +msgid "load a tape" msgstr "" -#: src/dird/dird_conf.c:775 -#, c-format -msgid " --> Run=%s\n" +#: src/stored/btape.c:2902 +msgid "quit btape" msgstr "" -#: src/dird/dird_conf.c:779 -#, c-format -msgid " --> SelectionPattern=%s\n" +#: src/stored/btape.c:2903 +msgid "use write() to fill tape" msgstr "" -#: src/dird/dird_conf.c:793 -#, c-format -msgid "FileSet: name=%s\n" +#: src/stored/btape.c:2904 +msgid "read and print the Bacula tape label" msgstr "" -#: src/dird/dird_conf.c:887 src/dird/dird_conf.c:966 -#, c-format -msgid "Schedule: name=%s\n" +#: src/stored/btape.c:2905 +msgid "test record handling functions" msgstr "" -#: src/dird/dird_conf.c:892 -#, c-format -msgid " --> Run Level=%s\n" +#: src/stored/btape.c:2906 +msgid "rewind the tape" msgstr "" -#: src/dird/dird_conf.c:893 -msgid " hour=" +#: src/stored/btape.c:2907 +msgid "read() tape block by block to EOT and report" msgstr "" -#: src/dird/dird_conf.c:902 -msgid " mday=" +#: src/stored/btape.c:2908 +msgid "Bacula read block by block to EOT and report" msgstr "" -#: src/dird/dird_conf.c:911 -msgid " month=" +#: src/stored/btape.c:2909 +msgid "" +"[file_size=n(GB)|nb_file=3|skip_zero|skip_random|skip_raw|skip_block] report " +"drive speed" msgstr "" -#: src/dird/dird_conf.c:920 -msgid " wday=" +#: src/stored/btape.c:2910 +msgid "print tape status" msgstr "" -#: src/dird/dird_conf.c:929 -msgid " wom=" +#: src/stored/btape.c:2911 +msgid "General test Bacula tape functions" msgstr "" -#: src/dird/dird_conf.c:938 -msgid " woy=" +#: src/stored/btape.c:2912 +msgid "write an EOF on the tape" msgstr "" -#: src/dird/dird_conf.c:947 -#, c-format -msgid " mins=%d\n" +#: src/stored/btape.c:2913 +msgid "write a single Bacula block" msgstr "" -#: src/dird/dird_conf.c:949 src/dird/dird_conf.c:953 src/dird/dird_conf.c:957 -msgid " --> " +#: src/stored/btape.c:2914 +msgid "read a single record" msgstr "" -#: src/dird/dird_conf.c:974 -#, c-format -msgid "Pool: name=%s PoolType=%s\n" +#: src/stored/btape.c:2915 +msgid "read a single Bacula block" msgstr "" -#: src/dird/dird_conf.c:976 -#, c-format -msgid " use_cat=%d use_once=%d cat_files=%d\n" +#: src/stored/btape.c:2916 +msgid "quick fill command" msgstr "" -#: src/dird/dird_conf.c:979 +#: src/stored/btape.c:2937 #, c-format -msgid " max_vols=%d auto_prune=%d VolRetention=%s\n" +msgid "\"%s\" is an invalid command\n" msgstr "" -#: src/dird/dird_conf.c:982 +#: src/stored/btape.c:2946 #, c-format -msgid " VolUse=%s recycle=%d LabelFormat=%s\n" +msgid "Interactive commands:\n" msgstr "" -#: src/dird/dird_conf.c:986 +#: src/stored/btape.c:2947 src/dird/ua_tree.c:794 #, c-format -msgid " CleaningPrefix=%s LabelType=%d\n" +msgid "" +" Command Description\n" +" ======= ===========\n" msgstr "" -#: src/dird/dird_conf.c:988 +#: src/stored/btape.c:2957 #, c-format -msgid " RecyleOldest=%d PurgeOldest=%d ActionOnPurge=%d\n" +msgid "" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: btape \n" +" -b specify bootstrap file\n" +" -c set configuration file to file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -p proceed inspite of I/O errors\n" +" -s turn off signals\n" +" -v be verbose\n" +" -? print this message.\n" +"\n" msgstr "" -#: src/dird/dird_conf.c:992 +#: src/stored/btape.c:3045 #, c-format -msgid " MaxVolJobs=%d MaxVolFiles=%d MaxVolBytes=%s\n" +msgid "Mount second Volume on device %s and press return when ready: " msgstr "" -#: src/dird/dird_conf.c:996 +#: src/stored/btape.c:3048 src/stored/bls.c:478 src/stored/bextract.c:609 +#: src/stored/bscan.c:1354 src/stored/bcopy.c:365 #, c-format -msgid " MigTime=%s MigHiBytes=%s MigLoBytes=%s\n" +msgid "Mount Volume \"%s\" on device %s and press return when ready: " msgstr "" -#: src/dird/dird_conf.c:1000 +#: src/stored/btape.c:3073 #, c-format -msgid " JobRetention=%s FileRetention=%s\n" +msgid "Mount blank Volume on device %s and press return when ready: " msgstr "" -#: src/dird/dird_conf.c:1004 +#: src/stored/btape.c:3093 #, c-format -msgid " NextPool=%s\n" +msgid "End of Volume \"%s\" %d records.\n" msgstr "" -#: src/dird/dird_conf.c:1007 +#: src/stored/btape.c:3107 #, c-format -msgid " RecyclePool=%s\n" +msgid "Read block=%u, VolBytes=%s rate=%sB/s\n" msgstr "" -#: src/dird/dird_conf.c:1010 +#: src/stored/btape.c:3120 #, c-format -msgid " ScratchPool=%s\n" +msgid "Cannot open Dev=%s, Vol=%s\n" msgstr "" -#: src/dird/dird_conf.c:1013 +#: src/stored/record_read.c:164 src/stored/record.c:658 #, c-format -msgid " Catalog=%s\n" +msgid "Sanity check failed. maxlen=%d datalen=%d. Block discarded.\n" msgstr "" -#: src/dird/dird_conf.c:1033 -#, c-format -msgid "Messages: name=%s\n" +#: src/stored/spool.c:71 +msgid "Spooling statistics:\n" msgstr "" -#: src/dird/dird_conf.c:1035 +#: src/stored/spool.c:74 #, c-format -msgid " mailcmd=%s\n" +msgid "" +"Data spooling: %u active jobs, %s bytes; %u total jobs, %s max bytes/job.\n" msgstr "" -#: src/dird/dird_conf.c:1037 +#: src/stored/spool.c:82 #, c-format -msgid " opcmd=%s\n" +msgid "Attr spooling: %u active jobs, %s bytes; %u total jobs, %s max bytes.\n" msgstr "" -#: src/dird/dird_conf.c:1041 src/tray-monitor/tray_conf.c:199 -#: src/qt-console/tray-monitor/tray_conf.cpp:199 -#, c-format -msgid "Unknown resource type %d in dump_resource.\n" -msgstr "Невідомий тип ресурсу %d у dump_resource.\n" +#: src/stored/spool.c:100 +msgid "Spooling data ...\n" +msgstr "" -#: src/dird/dird_conf.c:1372 src/tray-monitor/tray_conf.c:257 -#: src/qt-console/tray-monitor/tray_conf.cpp:257 +#: src/stored/spool.c:126 #, c-format -msgid "Unknown resource type %d in free_resource.\n" -msgstr "Невідомий тип ресурсу %d у free_resource.\n" +msgid "Bad return from despool WroteVol=%d\n" +msgstr "" -#: src/dird/dird_conf.c:1404 src/dird/dird_conf.c:1419 -#: src/tray-monitor/tray_conf.c:288 src/wx-console/console_conf.c:265 -#: src/console/console_conf.c:259 src/filed/filed_conf.c:361 -#: src/qt-console/tray-monitor/tray_conf.cpp:288 -#: src/qt-console/bat_conf.cpp:265 +#: src/stored/spool.c:159 #, c-format -msgid "%s item is required in %s resource, but not found.\n" -msgstr "Не знайдено необхідний елемент %s для ресурсу %s.\n" +msgid "Open data spool file %s failed: ERR=%s\n" +msgstr "" -#: src/dird/dird_conf.c:1410 src/tray-monitor/tray_conf.c:294 -#: src/lib/parse_conf.c:225 src/qt-console/tray-monitor/tray_conf.cpp:294 -#, c-format -msgid "Too many items in %s resource\n" -msgstr "Забагато елементів у ресурсі %s\n" +#: src/stored/spool.c:187 +msgid "Despooling zero bytes. Your disk is probably FULL!\n" +msgstr "" -#: src/dird/dird_conf.c:1450 +#: src/stored/spool.c:196 #, c-format -msgid "Cannot find Pool resource %s\n" +msgid "Committing spooled data to Volume \"%s\". Despooling %s bytes ...\n" msgstr "" -#: src/dird/dird_conf.c:1461 +#: src/stored/spool.c:201 #, c-format -msgid "Cannot find Console resource %s\n" +msgid "Writing spooled data to Volume. Despooling %s bytes ...\n" msgstr "" -#: src/dird/dird_conf.c:1467 src/stored/stored_conf.c:611 -#: src/filed/filed_conf.c:381 +#: src/stored/spool.c:272 src/stored/acquire.c:517 src/stored/block_util.c:552 +#: src/stored/block_util.c:622 src/stored/block_util.c:652 #, c-format -msgid "Cannot find Director resource %s\n" +msgid "Could not create JobMedia record for Volume=\"%s\" Job=%s\n" msgstr "" -#: src/dird/dird_conf.c:1474 src/stored/stored_conf.c:617 +#: src/stored/spool.c:290 #, c-format -msgid "Cannot find Storage resource %s\n" +msgid "" +"Despooling elapsed time = %02d:%02d:%02d, Transfer rate = %s Bytes/second\n" msgstr "" -#: src/dird/dird_conf.c:1483 +#: src/stored/spool.c:299 src/stored/spool.c:500 src/stored/spool.c:546 #, c-format -msgid "Cannot find Job resource %s\n" +msgid "Ftruncate spool file failed: ERR=%s\n" msgstr "" -#: src/dird/dird_conf.c:1533 +#: src/stored/spool.c:358 #, c-format -msgid "Cannot find Counter resource %s\n" +msgid "Spool header read error. ERR=%s\n" msgstr "" -#: src/dird/dird_conf.c:1541 src/filed/filed_conf.c:387 +#: src/stored/spool.c:361 #, c-format -msgid "Cannot find Client resource %s\n" +msgid "Spool read error. Wanted %u bytes, got %d\n" msgstr "" -#: src/dird/dird_conf.c:1554 +#: src/stored/spool.c:362 #, c-format -msgid "Cannot find Schedule resource %s\n" +msgid "Spool header read error. Wanted %u bytes, got %d\n" msgstr "" -#: src/dird/dird_conf.c:1559 src/dird/dird_conf.c:1619 -#: src/tray-monitor/tray_conf.c:314 src/tray-monitor/tray_conf.c:352 -#: src/qt-console/tray-monitor/tray_conf.cpp:314 -#: src/qt-console/tray-monitor/tray_conf.cpp:352 +#: src/stored/spool.c:369 src/stored/spool.c:370 #, c-format -msgid "Unknown resource type %d in save_resource.\n" -msgstr "Невідомий тип ресурсу %d у save_resource.\n" +msgid "Spool block too big. Max %u bytes, got %u\n" +msgstr "" -#: src/dird/dird_conf.c:1634 +#: src/stored/spool.c:376 src/stored/spool.c:377 #, c-format -msgid "Name item is required in %s resource, but not found.\n" +msgid "Spool data read error. Wanted %u bytes, got %d\n" msgstr "" -#: src/dird/dird_conf.c:1642 src/tray-monitor/tray_conf.c:372 -#: src/wx-console/console_conf.c:328 src/console/console_conf.c:322 -#: src/filed/filed_conf.c:446 src/qt-console/tray-monitor/tray_conf.cpp:372 -#: src/qt-console/bat_conf.cpp:334 +#: src/stored/spool.c:431 #, c-format -msgid "Attempt to define second %s resource named \"%s\" is not permitted.\n" -msgstr "Спроба визначити другий %s ресурс із назвою \"%s\" не дозволяється.\n" +msgid "" +"User specified Job spool size reached: JobSpoolSize=%s MaxJobSpoolSize=%s\n" +msgstr "" -#: src/dird/dird_conf.c:1647 +#: src/stored/spool.c:436 #, c-format -msgid "Inserting %s res: %s index=%d pass=%d\n" +msgid "" +"User specified Device spool size reached: DevSpoolSize=%s MaxDevSpoolSize=" +"%s\n" msgstr "" -#: src/dird/dird_conf.c:1660 -#, c-format -msgid "Expected one of: %s, got: %s" +#: src/stored/spool.c:443 +msgid "Bad return from despool in write_block.\n" msgstr "" -#: src/dird/dird_conf.c:1732 -#, c-format -msgid "Expected a Migration Job Type keyword, got: %s" +#: src/stored/spool.c:451 +msgid "Spooling data again ...\n" msgstr "" -#: src/dird/dird_conf.c:1758 +#: src/stored/spool.c:483 #, c-format -msgid "Expected a Job Type keyword, got: %s" +msgid "Error writing header to spool file. ERR=%s\n" msgstr "" -#: src/dird/dird_conf.c:1782 +#: src/stored/spool.c:488 #, c-format -msgid "Expected a Job Level keyword, got: %s" +msgid "" +"Error writing header to spool file. Disk probably full. Attempting recovery. " +"Wanted to write=%d got=%d\n" msgstr "" -#: src/dird/dird_conf.c:1802 -#, c-format -msgid "Expected a Restore replacement option, got: %s" +#: src/stored/spool.c:506 src/stored/spool.c:552 +msgid "Fatal despooling error." msgstr "" -#: src/dird/dird_conf.c:1852 src/dird/dird_conf.c:1968 -#: src/lib/parse_conf.c:761 src/lib/parse_conf.c:777 src/lib/ini.c:593 -#, c-format -msgid "Expect %s, got: %s" +#: src/stored/spool.c:514 +msgid "Retrying after header spooling error failed.\n" msgstr "" -#: src/dird/dird_conf.c:1874 src/lib/parse_conf.c:478 +#: src/stored/spool.c:530 #, c-format -msgid "Could not find config Resource %s referenced on line %d : %s\n" +msgid "Error writing data to spool file. ERR=%s\n" msgstr "" -#: src/dird/getmsg.c:176 -#, c-format -msgid "bget_dirmsg: unknown bnet signal %d\n" +#: src/stored/spool.c:563 +msgid "Retrying after data spooling error failed.\n" msgstr "" -#: src/dird/getmsg.c:194 src/dird/getmsg.c:200 src/dird/getmsg.c:213 -#: src/dird/getmsg.c:247 src/dird/getmsg.c:269 src/dird/getmsg.c:295 +#: src/stored/spool.c:650 +msgid "Network error on BlastAttributes.\n" +msgstr "" + +#: src/stored/spool.c:674 src/stored/spool.c:682 #, c-format -msgid "Malformed message: %s\n" +msgid "Fseek on attributes file failed: ERR=%s\n" msgstr "" -#: src/dird/getmsg.c:367 +#: src/stored/spool.c:694 #, c-format -msgid "Bad response to %s command: wanted %s, got %s\n" +msgid "Sending spooled attrs to the Director. Despooling %s bytes ...\n" msgstr "" -#: src/dird/getmsg.c:372 +#: src/stored/spool.c:720 #, c-format -msgid "Socket error on %s command: ERR=%s\n" +msgid "fopen attr spool file %s failed: ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:148 -msgid "\"RegexWhere\" specification not authorized.\n" +#: src/stored/record.c:63 src/stored/record_util.c:61 +#, c-format +msgid "unknown: %d" msgstr "" -#: src/dird/ua_restore.c:155 -msgid "\"where\" specification not authorized.\n" +#: src/stored/record.c:380 +msgid "Damaged buffer\n" msgstr "" -#: src/dird/ua_restore.c:177 +#: src/stored/bls.c:68 +#, c-format msgid "" -"No Restore Job Resource found in bacula-dir.conf.\n" -"You must create at least one before running this command.\n" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: bls [options] \n" +" -b specify a bootstrap file\n" +" -c specify a Storage configuration file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -e exclude list\n" +" -i include list\n" +" -j list jobs\n" +" -k list blocks\n" +" (no j or k option) list saved files\n" +" -L dump label\n" +" -p proceed inspite of errors\n" +" -v be verbose\n" +" -V specify Volume names (separated by |)\n" +" -? print this message\n" +"\n" msgstr "" -#: src/dird/ua_restore.c:194 -msgid "Restore not done.\n" +#: src/stored/bls.c:138 src/stored/bextract.c:141 +#, c-format +msgid "Could not open exclude file: %s, ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:205 -msgid "Unable to construct a valid BSR. Cannot continue.\n" +#: src/stored/bls.c:153 src/stored/bextract.c:156 +#, c-format +msgid "Could not open include file: %s, ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:209 src/dird/ua_restore.c:221 -msgid "No files selected to be restored.\n" +#: src/stored/bls.c:200 +msgid "No archive name specified\n" msgstr "" -#: src/dird/ua_restore.c:215 +#: src/stored/bls.c:238 +#, c-format msgid "" "\n" -"1 file selected to be restored.\n" -"\n" +"Warning, this Volume is a continuation of Volume %s\n" msgstr "" -#: src/dird/ua_restore.c:217 +#: src/stored/bls.c:281 #, c-format -msgid "" -"\n" -"%s files selected to be restored.\n" -"\n" +msgid "Got EOM at file %u on device %s, Volume \"%s\"\n" msgstr "" -#: src/dird/ua_restore.c:236 -msgid "No Client resource found!\n" +#: src/stored/bls.c:292 +#, c-format +msgid "Mounted Volume \"%s\".\n" msgstr "" -#: src/dird/ua_restore.c:333 -msgid "The restore will use the following job(s) as Base\n" +#: src/stored/bls.c:294 +#, c-format +msgid "End of file %u on device %s, Volume \"%s\"\n" msgstr "" -#: src/dird/ua_restore.c:354 +#: src/stored/bls.c:318 #, c-format -msgid "Missing value for keyword: %s\n" +msgid "" +"File:blk=%u:%u blk_num=%u blen=%u First rec FI=%s SessId=%u SessTim=%u Strm=" +"%s rlen=%d\n" msgstr "" -#: src/dird/ua_restore.c:434 -msgid "List last 20 Jobs run" +#: src/stored/bls.c:327 +#, c-format +msgid "Block: %d size=%d\n" msgstr "" -#: src/dird/ua_restore.c:435 -msgid "List Jobs where a given File is saved" +#: src/stored/bls.c:385 src/stored/bextract.c:325 src/stored/bscan.c:674 +msgid "Cannot continue.\n" msgstr "" -#: src/dird/ua_restore.c:436 -msgid "Enter list of comma separated JobIds to select" +#: src/stored/bls.c:387 +msgid "Attrib unpack error!\n" msgstr "" -#: src/dird/ua_restore.c:437 -msgid "Enter SQL list command" +#: src/stored/bls.c:398 +#, c-format +msgid "FileIndex=%d VolSessionId=%d VolSessionTime=%d Stream=%d DataLen=%d\n" msgstr "" -#: src/dird/ua_restore.c:438 -msgid "Select the most recent backup for a client" +#: src/stored/bls.c:424 src/stored/bcopy.c:322 src/stored/read_records.c:387 +msgid "Fresh Volume Label" msgstr "" -#: src/dird/ua_restore.c:439 -msgid "Select backup for a client before a specified time" +#: src/stored/bls.c:427 src/stored/bcopy.c:325 src/stored/read_records.c:390 +msgid "Volume Label" msgstr "" -#: src/dird/ua_restore.c:440 -msgid "Enter a list of files to restore" +#: src/stored/bls.c:431 src/stored/label.c:1128 src/stored/bcopy.c:329 +msgid "Begin Job Session" msgstr "" -#: src/dird/ua_restore.c:441 -msgid "Enter a list of files to restore before a specified time" +#: src/stored/bls.c:436 src/stored/label.c:1131 src/stored/bcopy.c:333 +msgid "End Job Session" msgstr "" -#: src/dird/ua_restore.c:442 -msgid "Find the JobIds of the most recent backup for a client" +#: src/stored/bls.c:440 src/stored/bcopy.c:338 +msgid "End of Medium" msgstr "" -#: src/dird/ua_restore.c:443 -msgid "Find the JobIds for a backup for a client before a specified time" +#: src/stored/bls.c:443 +msgid "End of Physical Medium" msgstr "" -#: src/dird/ua_restore.c:444 -msgid "Enter a list of directories to restore for found JobIds" +#: src/stored/bls.c:446 +msgid "Start of object" msgstr "" -#: src/dird/ua_restore.c:445 -msgid "Select full restore to a specified Job date" +#: src/stored/bls.c:449 +msgid "End of object" msgstr "" -#: src/dird/ua_restore.c:446 src/dird/ua_status.c:862 src/stored/status.c:611 -#: src/filed/status.c:373 src/wx-console/wxbconfigpanel.cpp:220 -msgid "Cancel" +#: src/stored/bls.c:452 src/stored/label.c:1140 src/stored/bcopy.c:341 +msgid "Unknown" msgstr "" -#: src/dird/ua_restore.c:491 +#: src/stored/bls.c:459 src/stored/bcopy.c:347 src/stored/read_records.c:408 #, c-format -msgid "Unknown keyword: %s\n" +msgid "%s Record: VolSessionId=%d VolSessionTime=%d JobId=%d DataLen=%d\n" msgstr "" -#: src/dird/ua_restore.c:520 src/dird/ua_update.c:957 +#: src/stored/wait.c:121 #, c-format -msgid "Improper date format: %s\n" +msgid "pthread timedwait error. ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:560 +#: src/stored/wait.c:227 #, c-format -msgid "Error: Pool resource \"%s\" access not allowed.\n" +msgid "JobId=%s, Job %s waiting to reserve a device.\n" msgstr "" -#: src/dird/ua_restore.c:576 -msgid "" -"\n" -"First you select one or more JobIds that contain files\n" -"to be restored. You will be presented several methods\n" -"of specifying the JobIds. Then you will be allowed to\n" -"select which files from those JobIds are to be restored.\n" -"\n" +#: src/stored/wait.c:273 +#, c-format +msgid "JobId=%s, Job %s waiting device %s.\n" msgstr "" -#: src/dird/ua_restore.c:589 -msgid "To select the JobIds, you have the following choices:\n" +#: src/stored/device.c:120 +#, c-format +msgid "End of medium on Volume \"%s\" Bytes=%s Blocks=%s at %s.\n" msgstr "" -#: src/dird/ua_restore.c:594 -msgid "Select item: " +#: src/stored/device.c:146 +#, c-format +msgid "New volume \"%s\" mounted on device %s at %s.\n" msgstr "" -#: src/dird/ua_restore.c:599 src/dird/ua_restore.c:634 -msgid "SQL query not authorized.\n" +#: src/stored/device.c:158 +#, c-format +msgid "write_block_to_device Volume label failed. ERR=%s" msgstr "" -#: src/dird/ua_restore.c:612 -msgid "Enter Filename (no path):" +#: src/stored/device.c:177 +#, c-format +msgid "write_block_to_device overflow block failed. ERR=%s" msgstr "" -#: src/dird/ua_restore.c:627 src/dird/ua_restore.c:735 -msgid "Enter JobId(s), comma separated, to restore: " +#: src/stored/device.c:182 +#, c-format +msgid "Catastrophic error. Cannot write overflow block to device %s. ERR=%s" msgstr "" -#: src/dird/ua_restore.c:637 -msgid "Enter SQL list command: " +#: src/stored/device.c:332 src/stored/tape_dev.c:160 +#, c-format +msgid "Unable to open device %s: ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:671 src/dird/ua_restore.c:694 -msgid "" -"Enter file names with paths, or < to enter a filename\n" -"containing a list of file names with paths, and terminate\n" -"them with a blank line.\n" +#: src/stored/device.c:334 +#, c-format +msgid "Unable to open archive %s: ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:675 src/dird/ua_restore.c:698 -msgid "Enter full filename: " +#: src/stored/authenticate.c:65 +#, c-format +msgid "I only authenticate Directors, not %d\n" msgstr "" -#: src/dird/ua_restore.c:733 +#: src/stored/authenticate.c:71 #, c-format -msgid "You have already selected the following JobIds: %s\n" -msgstr "" - -#: src/dird/ua_restore.c:751 -msgid "" -"Enter full directory names or start the name\n" -"with a < to indicate it is a filename containing a list\n" -"of directories and terminate them with a blank line.\n" +msgid "Bad Hello command from Director at %s. Len=%d.\n" msgstr "" -#: src/dird/ua_restore.c:755 -msgid "Enter directory name: " +#: src/stored/authenticate.c:85 src/filed/authenticate.c:76 +#, c-format +msgid "Bad Hello command from Director at %s: %s\n" msgstr "" -#: src/dird/ua_restore.c:771 -msgid "Enter JobId to get the state to restore: " +#: src/stored/authenticate.c:100 +#, c-format +msgid "" +"Connection from unknown Director %s at %s rejected.\n" +"Please see " msgstr "" -#: src/dird/ua_restore.c:784 -#, c-format -msgid "Selecting jobs to build the Full state at %s\n" +#: src/stored/authenticate.c:137 +msgid "" +"Incorrect password given by Director.\n" +"Please see " msgstr "" -#: src/dird/ua_restore.c:810 -msgid "Invalid JobId in list.\n" +#: src/stored/authenticate.c:145 src/stored/authenticate.c:258 +#: src/stored/authenticate.c:367 src/filed/authenticate.c:139 +#: src/filed/authenticate.c:267 +msgid "" +"Authorization problem: Remote server did not advertize required TLS " +"support.\n" msgstr "" -#: src/dird/ua_restore.c:829 +#: src/stored/authenticate.c:163 #, c-format -msgid "Access to JobId=%s (Job \"%s\") not authorized. Not selected.\n" +msgid "TLS negotiation failed with DIR at \"%s:%d\"\n" msgstr "" -#: src/dird/ua_restore.c:842 -msgid "No Jobs selected.\n" +#: src/stored/authenticate.c:199 +#, c-format +msgid "Unable to authenticate Director at %s.\n" msgstr "" -#: src/dird/ua_restore.c:847 +#: src/stored/authenticate.c:249 src/stored/authenticate.c:289 #, c-format -msgid "You have selected the following JobIds: %s\n" +msgid "" +"Incorrect authorization key from File daemon at %s rejected.\n" +"Please see " msgstr "" -#: src/dird/ua_restore.c:849 +#: src/stored/authenticate.c:276 #, c-format -msgid "You have selected the following JobId: %s\n" +msgid "TLS negotiation failed with FD at \"%s:%d\"\n" msgstr "" -#: src/dird/ua_restore.c:859 +#: src/stored/authenticate.c:358 src/filed/authenticate.c:258 msgid "" -"The restored files will the most current backup\n" -"BEFORE the date you specify below.\n" -"\n" +"Authorization key rejected by Storage daemon.\n" +"Please see " msgstr "" -#: src/dird/ua_restore.c:862 -msgid "Enter date as YYYY-MM-DD HH:MM:SS :" +#: src/stored/authenticate.c:385 src/dird/authenticate.c:400 +#: src/filed/authenticate.c:157 src/filed/authenticate.c:285 +msgid "TLS negotiation failed.\n" msgstr "" -#: src/dird/ua_restore.c:868 -msgid "Improper date format.\n" +#: src/stored/block.c:133 +#, c-format +msgid "Cannot write block. Device at EOM. dev=%s\n" msgstr "" -#: src/dird/ua_restore.c:889 +#: src/stored/block.c:138 #, c-format -msgid "Cannot open file %s: ERR=%s\n" +msgid "Attempt to write on read-only Volume. dev=%s\n" msgstr "" -#: src/dird/ua_restore.c:897 src/dird/ua_restore.c:901 +#: src/stored/block.c:144 #, c-format -msgid "Error occurred on line %d of file \"%s\"\n" +msgid "Attempt to write on closed device=%s\n" msgstr "" -#: src/dird/ua_restore.c:945 src/dird/ua_restore.c:973 +#: src/stored/block.c:177 #, c-format -msgid "No database record found for: %s\n" +msgid "Unable to write EOF. ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:961 -msgid "No JobId specified cannot continue.\n" +#: src/stored/block.c:199 src/stored/block.c:235 +msgid "Write block header zeroed.\n" msgstr "" -#: src/dird/ua_restore.c:994 +#: src/stored/block.c:227 #, c-format -msgid "No table found: %s\n" +msgid "Block checksum changed during write: before=%ud after=%ud\n" msgstr "" -#: src/dird/ua_restore.c:1052 -msgid "" -"\n" -"\n" -"For one or more of the JobIds selected, no files were found,\n" -"so file selection is not possible.\n" -"Most likely your retention policy pruned the files.\n" +#: src/stored/block.c:254 +#, c-format +msgid "Write error at %u:%u on device %s. ERR=%s.\n" msgstr "" -#: src/dird/ua_restore.c:1055 -msgid "" -"\n" -"Do you want to restore all the files? (yes|no): " +#: src/stored/block.c:262 +#, c-format +msgid "End of Volume \"%s\" at %u:%u on device %s. Write of %u bytes got %d.\n" msgstr "" -#: src/dird/ua_restore.c:1058 -msgid "" -"\n" -"Regexp matching files to restore? (empty to abort): " +#: src/stored/block.c:366 +#, fuzzy +msgid "Job failed or canceled.\n" +msgstr "Статус задачі: Відмінена" + +#: src/stored/block.c:372 +msgid "Attempt to read past end of tape or file.\n" msgstr "" -#: src/dird/ua_restore.c:1074 +#: src/stored/block.c:380 #, c-format -msgid "Regex compile error: %s\n" +msgid "Attempt to read closed device: fd=%d at file:blk %u:%u on device %s\n" msgstr "" -#: src/dird/ua_restore.c:1137 +#: src/stored/block.c:392 #, c-format -msgid "" -"\n" -"Building directory tree for JobId(s) %s ... " +msgid "Block buffer size looping problem on device %s\n" msgstr "" -#: src/dird/ua_restore.c:1207 +#: src/stored/block.c:425 src/stored/block.c:439 #, c-format -msgid "" -"\n" -"%s files inserted into the tree and marked for extraction.\n" +msgid "The Volume=%s on device=%s appears to be unlabeled.\n" msgstr "" -#: src/dird/ua_restore.c:1210 +#: src/stored/block.c:428 #, c-format -msgid "" -"\n" -"%s files inserted into the tree.\n" +msgid "Read error on fd=%d at file:blk %u:%u on device %s. ERR=%s.\n" msgstr "" -#: src/dird/ua_restore.c:1285 +#: src/stored/block.c:442 #, c-format -msgid "Error getting FileSet \"%s\": ERR=%s\n" +msgid "Read zero bytes Vol=%s at %lld on device %s.\n" msgstr "" -#: src/dird/ua_restore.c:1290 +#: src/stored/block.c:471 #, c-format -msgid "FileSet argument: %s\n" +msgid "" +"Volume data error at %u:%u! Very short block of %d bytes on device %s " +"discarded.\n" msgstr "" -#: src/dird/ua_restore.c:1302 +#: src/stored/block.c:498 #, c-format -msgid "No FileSet found for client \"%s\".\n" +msgid "Block length %u is greater than buffer %u. Attempting recovery.\n" msgstr "" -#: src/dird/ua_restore.c:1308 +#: src/stored/block.c:518 #, c-format -msgid "Error getting FileSet record: %s\n" +msgid "Setting block buffer size to %u bytes.\n" msgstr "" -#: src/dird/ua_restore.c:1309 +#: src/stored/block.c:533 +#, c-format msgid "" -"This probably means you modified the FileSet.\n" -"Continuing anyway.\n" +"Volume data error at %u:%u! Short block of %d bytes on device %s discarded.\n" msgstr "" -#: src/dird/ua_restore.c:1324 -#, c-format -msgid "Pool \"%s\" not found, using any pool.\n" -msgstr "" +#: src/stored/label.c:87 +#, fuzzy, c-format +msgid "Couldn't rewind %s device %s: ERR=%s\n" +msgstr "Не вдалось створити жорстку лінку(hardlink) %s -> %s: ERR=%s\n" -#: src/dird/ua_restore.c:1351 src/dird/ua_restore.c:1367 +#: src/stored/label.c:105 src/stored/label.c:198 #, c-format -msgid "No Full backup before %s found.\n" -msgstr "" - -#: src/dird/ua_restore.c:1396 -msgid "No jobs found.\n" +msgid "Wrong Volume mounted on %s device %s: Wanted %s have %s\n" msgstr "" -#: src/dird/ua_restore.c:1517 +#: src/stored/label.c:108 src/stored/label.c:186 #, c-format -msgid "Warning default storage overridden by \"%s\" on command line.\n" +msgid "Too many tries: %s" msgstr "" -#: src/dird/ua_restore.c:1534 +#: src/stored/label.c:125 #, c-format -msgid "Using Storage \"%s\" from MediaType \"%s\".\n" +msgid "" +"Requested Volume \"%s\" on %s device %s is not a Bacula labeled Volume, " +"because: ERR=%s" msgstr "" -#: src/dird/ua_restore.c:1537 -#, c-format -msgid "Storage \"%s\" not found, using Storage \"%s\" from MediaType \"%s\".\n" +#: src/stored/label.c:130 +msgid "Could not read Volume label from block.\n" msgstr "" -#: src/dird/ua_restore.c:1546 +#: src/stored/label.c:133 #, c-format -msgid "" -"\n" -"Unable to find Storage resource for\n" -"MediaType \"%s\", needed by the Jobs you selected.\n" +msgid "Could not unserialize Volume label: ERR=%s\n" msgstr "" -#: src/dird/fd_cmds.c:95 -msgid "Client: " +#: src/stored/label.c:138 +#, c-format +msgid "Volume Header Id bad: %s\n" msgstr "" -#: src/dird/fd_cmds.c:137 +#: src/stored/label.c:171 #, c-format -msgid "File daemon \"%s\" rejected Job command: %s\n" +msgid "Volume on %s device %s has wrong Bacula version. Wanted %d got %d\n" msgstr "" -#: src/dird/fd_cmds.c:150 +#: src/stored/label.c:182 #, c-format -msgid "Error updating Client record. ERR=%s\n" +msgid "Volume on %s device %s has bad Bacula label type: %x\n" msgstr "" -#: src/dird/fd_cmds.c:155 +#: src/stored/label.c:301 #, c-format -msgid "FD gave bad response to JobId command: %s\n" +msgid "Cannot write Volume label to block for %s device %s\n" msgstr "" -#: src/dird/fd_cmds.c:184 src/dird/fd_cmds.c:272 -msgid ", since=" -msgstr "" +#: src/stored/label.c:361 src/stored/label.c:486 +#, fuzzy, c-format +msgid "Open %s device %s Volume \"%s\" failed: ERR=%s\n" +msgstr "Помилка у %s файл %s: ERR=%s\n" -#: src/dird/fd_cmds.c:249 -msgid "No prior or suitable Full backup found in catalog. Doing FULL backup.\n" -msgstr "" +#: src/stored/label.c:500 +#, fuzzy, c-format +msgid "Rewind error on %s device %s: ERR=%s\n" +msgstr "Помилка у %s файл %s: ERR=%s\n" + +#: src/stored/label.c:508 +#, fuzzy, c-format +msgid "Truncate error on %s device %s: ERR=%s\n" +msgstr "Помилка у %s файл %s: ERR=%s\n" -#: src/dird/fd_cmds.c:250 src/dird/fd_cmds.c:256 src/dird/fd_cmds.c:265 +#: src/stored/label.c:515 #, c-format -msgid " (upgraded from %s)" +msgid "Failed to re-open DVD after truncate on %s device %s: ERR=%s\n" msgstr "" -#: src/dird/fd_cmds.c:255 -msgid "" -"No prior or suitable Differential backup found in catalog. Doing " -"Differential backup.\n" -msgstr "" +#: src/stored/label.c:560 +#, fuzzy, c-format +msgid "Unable to write %s device %s: ERR=%s\n" +msgstr "Не можливо встановити час файлу %s: ERR=%s\n" -#: src/dird/fd_cmds.c:263 +#: src/stored/label.c:594 #, c-format -msgid "Prior failed job found in catalog. Upgrading to %s.\n" +msgid "Recycled volume \"%s\" on %s device %s, all previous data lost.\n" msgstr "" -#: src/dird/fd_cmds.c:328 +#: src/stored/label.c:597 #, c-format -msgid "Unimplemented backup level %d %c\n" +msgid "Wrote label to prelabeled Volume \"%s\" on %s device %s\n" msgstr "" -#: src/dird/fd_cmds.c:401 -msgid "" -"FD compression disabled for this Job because AllowCompress=No in Storage " -"resource.\n" +#: src/stored/label.c:806 +#, c-format +msgid "Bad Volume session label request=%d\n" msgstr "" -#: src/dird/fd_cmds.c:500 src/filed/job.c:854 +#: src/stored/label.c:870 #, c-format -msgid "Cannot run program: %s. ERR=%s\n" +msgid "Expecting Volume Label, got FI=%s Stream=%s len=%d\n" msgstr "" -#: src/dird/fd_cmds.c:511 src/dird/fd_cmds.c:536 src/dird/fd_cmds.c:550 -msgid ">filed: write error on socket\n" +#: src/stored/label.c:1003 +#, c-format +msgid "Unknown %d" msgstr "" -#: src/dird/fd_cmds.c:517 +#: src/stored/label.c:1007 #, c-format -msgid "Error running program: %s. ERR=%s\n" +msgid "" +"\n" +"Volume Label:\n" +"Id : %sVerNo : %d\n" +"VolName : %s\n" +"PrevVolName : %s\n" +"VolFile : %d\n" +"LabelType : %s\n" +"LabelSize : %d\n" +"PoolName : %s\n" +"MediaType : %s\n" +"PoolType : %s\n" +"HostName : %s\n" msgstr "" -#: src/dird/fd_cmds.c:526 +#: src/stored/label.c:1029 #, c-format -msgid "Cannot open included file: %s. ERR=%s\n" +msgid "Date label written: %s\n" msgstr "" -#: src/dird/fd_cmds.c:672 +#: src/stored/label.c:1035 #, c-format -msgid "Client \"%s\" RunScript failed.\n" +msgid "Date label written: %04d-%02d-%02d at %02d:%02d\n" msgstr "" -#: src/dird/fd_cmds.c:695 +#: src/stored/label.c:1055 #, c-format msgid "" -"Client \"%s\" may not be used to restore this job. Please upgrade your " -"client.\n" -msgstr "" - -#: src/dird/fd_cmds.c:770 -msgid "RestoreObject failed.\n" +"\n" +"%s Record:\n" +"JobId : %d\n" +"VerNum : %d\n" +"PoolName : %s\n" +"PoolType : %s\n" +"JobName : %s\n" +"ClientName : %s\n" msgstr "" -#: src/dird/fd_cmds.c:806 +#: src/stored/label.c:1068 #, c-format msgid "" -" \n" +" -b specify a bootstrap file\n" +" -c specify a Storage configuration file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -e exclude list\n" +" -i include list\n" +" -p proceed inspite of I/O errors\n" +" -v verbose\n" +" -V specify Volume names (separated by |)\n" +" -? print this message\n" +"\n" msgstr "" -#: src/dird/ua_label.c:507 -msgid "Do not forget to mount the drive!!!\n" +#: src/stored/bextract.c:191 src/stored/bscan.c:239 src/stored/bcopy.c:151 +#: src/tools/bbatch.c:178 src/tools/bvfs_test.c:189 src/tools/cats_test.c:309 +#: src/tools/ing_test.c:173 +msgid "Wrong number of arguments: \n" msgstr "" -#: src/dird/ua_label.c:547 -msgid "" -"The following Volumes will be labeled:\n" -"Slot Volume\n" -"==============\n" +#: src/stored/bextract.c:215 +#, c-format +msgid "%d Program Name and/or Program Data Stream records ignored.\n" msgstr "" -#: src/dird/ua_label.c:556 -msgid "Do you want to label these Volumes? (yes|no): " +#: src/stored/bextract.c:219 +#, c-format +msgid "%d Win32 data or Win32 gzip data stream records. Ignored.\n" msgstr "" -#: src/dird/ua_label.c:576 +#: src/stored/bextract.c:246 #, c-format -msgid "Media record for Slot %d Volume \"%s\" already exists.\n" +msgid "Cannot stat %s. It must exist. ERR=%s\n" msgstr "" -#: src/dird/ua_label.c:582 +#: src/stored/bextract.c:250 #, c-format -msgid "Error setting InChanger: ERR=%s" +msgid "%s must be a directory.\n" msgstr "" -#: src/dird/ua_label.c:605 +#: src/stored/bextract.c:271 #, c-format -msgid "Maximum pool Volumes=%d reached.\n" +msgid "%u files restored.\n" msgstr "" -#: src/dird/ua_label.c:613 +#: src/stored/bextract.c:281 src/stored/bextract.c:287 #, c-format -msgid "Catalog record for cleaning tape \"%s\" successfully created.\n" +msgid "Write error on %s: %s\n" msgstr "" -#: src/dird/ua_label.c:620 -#, c-format -msgid "Catalog error on cleaning tape: %s" +#: src/stored/bextract.c:318 src/stored/bextract.c:584 +msgid "Logic error output file should be open but is not.\n" msgstr "" -#: src/dird/ua_label.c:656 +#: src/stored/bextract.c:332 src/filed/restore.c:560 #, c-format -msgid "Illegal character \"%c\" in a volume name.\n" +msgid "%s stream not supported on this Client.\n" msgstr "" -#: src/dird/ua_label.c:703 +#: src/stored/bextract.c:342 #, c-format -msgid "Sending relabel command from \"%s\" to \"%s\" ...\n" +msgid "%s was deleted.\n" msgstr "" -#: src/dird/ua_label.c:710 +#: src/stored/bextract.c:390 #, c-format -msgid "Sending label command for Volume \"%s\" Slot %d ...\n" +msgid "Seek error on %s: %s\n" msgstr "" -#: src/dird/ua_label.c:751 +#: src/stored/bextract.c:426 src/stored/bextract.c:491 +#: src/filed/restore.c:1335 #, c-format -msgid "Catalog record for Volume \"%s\", Slot %d successfully created.\n" +msgid "Seek to %s error on %s: ERR=%s\n" msgstr "" -#: src/dird/ua_label.c:764 +#: src/stored/bextract.c:445 #, c-format -msgid "Label command failed for Volume %s.\n" +msgid "Uncompression error. ERR=%d\n" msgstr "" -#: src/dird/ua_label.c:802 -msgid "Could not open SD socket.\n" +#: src/stored/bextract.c:459 src/filed/restore.c:1450 +msgid "GZIP data stream found, but GZIP not configured!\n" msgstr "" -#: src/dird/ua_label.c:874 src/dird/ua_label.c:884 +#: src/stored/bextract.c:514 src/filed/restore.c:1376 #, c-format -msgid "Invalid Slot number: %s\n" +msgid "Compressed header version error. version=0x%x\n" msgstr "" -#: src/dird/ua_label.c:893 +#: src/stored/bextract.c:519 src/filed/restore.c:1381 #, c-format -msgid "Invalid Volume name: %s\n" +msgid "Compressed header size error. comp_len=%d, msglen=%d\n" msgstr "" -#: src/dird/ua_label.c:987 +#: src/stored/bextract.c:541 #, c-format -msgid "Device \"%s\" has %d slots.\n" +msgid "LZO uncompression error. ERR=%d\n" msgstr "" -#: src/dird/ua_label.c:1033 +#: src/stored/bextract.c:553 src/filed/restore.c:1414 #, c-format -msgid "Pool \"%s\" resource not found for volume \"%s\"!\n" +msgid "Compression algorithm 0x%x found, but not supported!\n" msgstr "" -#: src/dird/ua_label.c:1247 -msgid "No Volumes found, or no barcodes.\n" +#: src/stored/bextract.c:575 +msgid "Got Program Name or Data Stream. Ignored.\n" msgstr "" -#: src/dird/ua_label.c:1250 -msgid "" -" Slot | Volume Name | Status | Media Type | " -"Pool |\n" +#: src/stored/bextract.c:589 src/filed/restore.c:316 src/filed/restore.c:1033 +#, c-format +msgid "Unknown stream=%d ignored. This shouldn't happen!\n" msgstr "" -#: src/dird/ua_label.c:1251 +#: src/stored/bscan.c:108 +#, c-format msgid "" -"------+------------------+-----------+----------------------" -"+--------------------|\n" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: bscan [ options ] \n" +" -b bootstrap specify a bootstrap file\n" +" -c specify configuration file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -m update media info in database\n" +" -D specify the driver database name (default NULL)\n" +" -n specify the database name (default bacula)\n" +" -u specify database user name (default bacula)\n" +" -P specify database password (default none)\n" +" -h specify database host (default NULL)\n" +" -t specify database port (default 0)\n" +" -p proceed inspite of I/O errors\n" +" -r list records\n" +" -s synchronize or store in database\n" +" -S show scan progress periodically\n" +" -v verbose\n" +" -V specify Volume names (separated by |)\n" +" -w specify working directory (default from conf file)\n" +" -? print this message\n" +"\n" msgstr "" -#: src/dird/scheduler.c:112 +#: src/stored/bscan.c:264 #, c-format -msgid "Job %s not found\n" +msgid "Working Directory: %s not found. Cannot continue.\n" msgstr "" -#: src/dird/scheduler.c:136 -msgid "Walk queue" +#: src/stored/bscan.c:268 +#, c-format +msgid "Working Directory: %s is not a directory. Cannot continue.\n" msgstr "" -#: src/dird/scheduler.c:146 -msgid "Dequeued job" +#: src/stored/bscan.c:282 src/stored/bscan.c:358 +#, c-format +msgid "First Volume Size = %s\n" msgstr "" -#: src/dird/scheduler.c:149 -msgid "Scheduler logic error\n" +#: src/stored/bscan.c:288 src/tools/bbatch.c:189 src/tools/bbatch.c:238 +#: src/tools/bvfs_test.c:203 src/tools/ing_test.c:179 +msgid "Could not init Bacula database\n" msgstr "" -#: src/dird/scheduler.c:190 -msgid "Run job" +#: src/stored/bscan.c:295 src/tools/bbatch.c:245 src/tools/bvfs_test.c:212 +#: src/tools/ing_test.c:188 +#, c-format +msgid "Using Database: %s, User: %s\n" msgstr "" -#: src/dird/scheduler.c:223 -msgid "run override" +#: src/stored/bscan.c:329 +#, c-format +msgid "Create JobMedia for Job %s\n" msgstr "" -#: src/dird/scheduler.c:413 -msgid "Inserted job" +#: src/stored/bscan.c:339 +#, c-format +msgid "Could not create JobMedia record for Volume=%s Job=%s\n" msgstr "" -#: src/dird/scheduler.c:421 -msgid "Appended job" +#: src/stored/bscan.c:406 +#, c-format +msgid "done: %d%%\n" msgstr "" -#: src/dird/scheduler.c:425 -msgid "Run queue" +#: src/stored/bscan.c:414 src/stored/bcopy.c:230 +#, c-format +msgid "Record: SessId=%u SessTim=%u FileIndex=%d Stream=%d len=%u\n" +msgstr "" + +#: src/stored/bscan.c:430 +msgid "Volume is prelabeled. This tape cannot be scanned.\n" msgstr "" -#: src/dird/run_conf.c:208 +#: src/stored/bscan.c:442 #, c-format -msgid "Expected an equals, got: %s" +msgid "Pool record for %s found in DB.\n" msgstr "" -#: src/dird/run_conf.c:221 src/dird/run_conf.c:233 src/dird/run_conf.c:327 +#: src/stored/bscan.c:446 #, c-format -msgid "Expect a YES or NO, got: %s" +msgid "VOL_LABEL: Pool record not found for Pool: %s\n" msgstr "" -#: src/dird/run_conf.c:247 +#: src/stored/bscan.c:452 #, c-format -msgid "Job level field: %s not found in run record" +msgid "VOL_LABEL: PoolType mismatch. DB=%s Vol=%s\n" msgstr "" -#: src/dird/run_conf.c:265 +#: src/stored/bscan.c:456 #, c-format -msgid "Could not find specified Pool Resource: %s" +msgid "Pool type \"%s\" is OK.\n" msgstr "" -#: src/dird/run_conf.c:290 +#: src/stored/bscan.c:466 #, c-format -msgid "Could not find specified Storage Resource: %s" +msgid "Media record for %s found in DB.\n" msgstr "" -#: src/dird/run_conf.c:302 +#: src/stored/bscan.c:473 #, c-format -msgid "Could not find specified Messages Resource: %s" +msgid "VOL_LABEL: Media record not found for Volume: %s\n" msgstr "" -#: src/dird/run_conf.c:312 src/lib/parse_conf.c:736 src/lib/parse_conf.c:742 +#: src/stored/bscan.c:480 #, c-format -msgid "expected a time period, got: %s" +msgid "VOL_LABEL: MediaType mismatch. DB=%s Vol=%s\n" msgstr "" -#: src/dird/run_conf.c:331 +#: src/stored/bscan.c:484 #, c-format -msgid "Expected a keyword name, got: %s" +msgid "Media type \"%s\" is OK.\n" msgstr "" -#: src/dird/run_conf.c:370 -msgid "Day number out of range (1-31)" +#: src/stored/bscan.c:494 +#, c-format +msgid "VOL_LABEL: OK for Volume: %s\n" msgstr "" -#: src/dird/run_conf.c:387 src/dird/run_conf.c:542 -msgid "Week number out of range (0-53)" +#: src/stored/bscan.c:501 +#, c-format +msgid "%d \"errors\" ignored before first Start of Session record.\n" msgstr "" -#: src/dird/run_conf.c:403 +#: src/stored/bscan.c:512 #, c-format -msgid "Job type field: %s in run record not found" +msgid "SOS_LABEL: Found Job record for JobId: %d\n" msgstr "" -#: src/dird/run_conf.c:410 +#: src/stored/bscan.c:517 #, c-format -msgid "Unexpected token: %d:%s" +msgid "SOS_LABEL: Job record not found for JobId: %d\n" msgstr "" -#: src/dird/run_conf.c:454 -msgid "Time must be preceded by keyword AT." +#: src/stored/bscan.c:557 +#, c-format +msgid "SOS_LABEL: VolSessId mismatch for JobId=%u. DB=%d Vol=%d\n" msgstr "" -#: src/dird/run_conf.c:463 -msgid "Time logic error.\n" +#: src/stored/bscan.c:563 +#, c-format +msgid "SOS_LABEL: VolSessTime mismatch for JobId=%u. DB=%d Vol=%d\n" msgstr "" -#: src/dird/run_conf.c:478 src/dird/run_conf.c:497 -msgid "Bad time specification." +#: src/stored/bscan.c:569 +#, c-format +msgid "SOS_LABEL: PoolId mismatch for JobId=%u. DB=%d Vol=%d\n" msgstr "" -#: src/dird/run_conf.c:511 -msgid "Range logic error.\n" +#: src/stored/bscan.c:587 src/stored/bscan.c:1141 +#, c-format +msgid "Could not find SessId=%d SessTime=%d for EOS record.\n" msgstr "" -#: src/dird/run_conf.c:520 -msgid "Bad day range specification." +#: src/stored/bscan.c:633 +#, c-format +msgid "Could not update job record. ERR=%s\n" msgstr "" -#: src/dird/run_conf.c:567 -msgid "Invalid month, week or position day range" +#: src/stored/bscan.c:644 +#, c-format +msgid "End of all Volumes. VolFiles=%u VolBlocks=%u VolBytes=%s\n" msgstr "" -#: src/dird/run_conf.c:582 -msgid "Invalid month, weekday or position range" +#: src/stored/bscan.c:656 +#, c-format +msgid "Could not find Job for SessId=%d SessTime=%d record.\n" msgstr "" -#: src/dird/run_conf.c:641 -msgid "Unexpected run state\n" +#: src/stored/bscan.c:687 +#, c-format +msgid "%s file records. At file:blk=%s:%s bytes=%s\n" msgstr "" -#: src/dird/ua_update.c:97 -msgid "Update choice:\n" +#: src/stored/bscan.c:752 +#, c-format +msgid "Got MD5 record: %s\n" msgstr "" -#: src/dird/ua_update.c:98 -msgid "Volume parameters" +#: src/stored/bscan.c:760 +#, c-format +msgid "Got SHA1 record: %s\n" msgstr "" -#: src/dird/ua_update.c:99 -msgid "Pool from resource" +#: src/stored/bscan.c:768 +#, c-format +msgid "Got SHA256 record: %s\n" msgstr "" -#: src/dird/ua_update.c:100 -msgid "Slots from autochanger" +#: src/stored/bscan.c:776 +#, c-format +msgid "Got SHA512 record: %s\n" msgstr "" -#: src/dird/ua_update.c:101 -msgid "Long term statistics" +#: src/stored/bscan.c:784 src/stored/bscan.c:791 +msgid "Got signed digest record\n" +msgstr "Отримано підписаний відбиток запису\n" + +#: src/stored/bscan.c:797 +#, c-format +msgid "Got Prog Names Stream: %s\n" msgstr "" -#: src/dird/ua_update.c:102 -msgid "item" +#: src/stored/bscan.c:803 +msgid "Got Prog Data Stream record.\n" msgstr "" -#: src/dird/ua_update.c:102 -msgid "Choose catalog item to update" +#: src/stored/bscan.c:848 +#, c-format +msgid "Unknown stream type!!! stream=%d len=%i\n" msgstr "" -#: src/dird/ua_update.c:145 +#: src/stored/bscan.c:910 #, c-format -msgid "Invalid VolStatus specified: %s\n" +msgid "Could not create File Attributes record. ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:154 +#: src/stored/bscan.c:916 #, c-format -msgid "New Volume status is: %s\n" +msgid "Created File record: %s\n" msgstr "" -#: src/dird/ua_update.c:164 +#: src/stored/bscan.c:961 #, c-format -msgid "Invalid retention period specified: %s\n" +msgid "Could not create media record. ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:172 +#: src/stored/bscan.c:965 src/stored/bscan.c:986 #, c-format -msgid "New retention period is: %s\n" +msgid "Could not update media record. ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:183 +#: src/stored/bscan.c:969 #, c-format -msgid "Invalid use duration specified: %s\n" +msgid "Created Media record for Volume: %s\n" msgstr "" -#: src/dird/ua_update.c:191 +#: src/stored/bscan.c:990 #, c-format -msgid "New use duration is: %s\n" +msgid "Updated Media record at end of Volume: %s\n" msgstr "" -#: src/dird/ua_update.c:205 +#: src/stored/bscan.c:1007 #, c-format -msgid "New max jobs is: %s\n" +msgid "Could not create pool record. ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:218 +#: src/stored/bscan.c:1011 #, c-format -msgid "New max files is: %s\n" +msgid "Created Pool record for Pool: %s\n" msgstr "" -#: src/dird/ua_update.c:229 +#: src/stored/bscan.c:1030 #, c-format -msgid "Invalid max. bytes specification: %s\n" +msgid "Could not get Client record. ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:237 +#: src/stored/bscan.c:1036 src/dird/job.c:1060 #, c-format -msgid "New Max bytes is: %s\n" +msgid "Could not create Client record. ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:248 src/dird/ua_update.c:268 -msgid "Invalid value. It must be yes or no.\n" +#: src/stored/bscan.c:1040 +#, c-format +msgid "Created Client record for Client: %s\n" msgstr "" -#: src/dird/ua_update.c:256 +#: src/stored/bscan.c:1057 #, c-format -msgid "New Recycle flag is: %s\n" +msgid "Fileset \"%s\" already exists.\n" msgstr "" -#: src/dird/ua_update.c:257 src/dird/ua_update.c:277 src/dird/ua_update.c:699 -#: src/dird/ua_run.c:180 src/dird/backup.c:788 src/dird/backup.c:789 -#: src/dird/backup.c:790 src/dird/ua_input.c:131 src/stored/parse_bsr.c:863 -#: src/tools/dbcheck.c:1352 -msgid "yes" +#: src/stored/bscan.c:1061 +#, c-format +msgid "Could not create FileSet record \"%s\". ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:257 src/dird/ua_update.c:277 src/dird/ua_update.c:699 -#: src/dird/ua_run.c:200 src/dird/backup.c:788 src/dird/backup.c:789 -#: src/dird/backup.c:790 src/dird/ua_input.c:135 src/stored/parse_bsr.c:863 -msgid "no" +#: src/stored/bscan.c:1066 +#, c-format +msgid "Created FileSet record \"%s\"\n" msgstr "" -#: src/dird/ua_update.c:276 +#: src/stored/bscan.c:1113 #, c-format -msgid "New InChanger flag is: %s\n" +msgid "Could not create JobId record. ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:294 +#: src/stored/bscan.c:1119 #, c-format -msgid "Invalid slot, it must be between 0 and MaxVols=%d\n" +msgid "Could not update job start record. ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:304 src/dird/ua_update.c:728 +#: src/stored/bscan.c:1122 #, c-format -msgid "Error updating media record Slot: ERR=%s" +msgid "Created new JobId=%u record for original JobId=%u\n" msgstr "" -#: src/dird/ua_update.c:306 +#: src/stored/bscan.c:1175 #, c-format -msgid "New Slot is: %d\n" +msgid "Could not update JobId=%u record. ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:331 +#: src/stored/bscan.c:1180 #, c-format -msgid "New Pool is: %s\n" +msgid "Updated Job termination record for JobId=%u Level=%s TermStat=%c\n" msgstr "" -#: src/dird/ua_update.c:374 -#, c-format -msgid "New RecyclePool is: %s\n" +#: src/stored/bscan.c:1191 src/dird/vbackup.c:386 src/dird/backup.c:774 +msgid "Backup OK" msgstr "" -#: src/dird/ua_update.c:394 -#, c-format -msgid "Error updating Volume record: ERR=%s" +#: src/stored/bscan.c:1194 src/dird/vbackup.c:384 src/dird/backup.c:772 +#: src/dird/backup.c:778 +msgid "Backup OK -- with warnings" msgstr "" -#: src/dird/ua_update.c:396 -#, c-format -msgid "Volume defaults updated from \"%s\" Pool record.\n" +#: src/stored/bscan.c:1198 src/dird/vbackup.c:391 src/dird/backup.c:782 +msgid "*** Backup Error ***" msgstr "" -#: src/dird/ua_update.c:419 src/dird/ua_update.c:451 -#, c-format -msgid "Error updating Volume records: ERR=%s" +#: src/stored/bscan.c:1201 src/dird/vbackup.c:401 src/dird/backup.c:792 +msgid "Backup Canceled" msgstr "" -#: src/dird/ua_update.c:421 src/dird/ua_update.c:453 +#: src/stored/bscan.c:1205 #, c-format -msgid "All Volume defaults updated from \"%s\" Pool record.\n" +msgid "Job Termination code: %d" msgstr "" -#: src/dird/ua_update.c:443 +#: src/stored/bscan.c:1210 #, c-format -msgid "Updating all pools, but skipped PoolId=%d. ERR=%s\n" +msgid "" +"%s\n" +"JobId: %d\n" +"Job: %s\n" +"FileSet: %s\n" +"Backup Level: %s\n" +"Client: %s\n" +"Start time: %s\n" +"End time: %s\n" +"Files Written: %s\n" +"Bytes Written: %s\n" +"Volume Session Id: %d\n" +"Volume Session Time: %d\n" +"Last Volume Bytes: %s\n" +"Termination: %s\n" +"\n" msgstr "" -#: src/dird/ua_update.c:469 +#: src/stored/bscan.c:1268 #, c-format -msgid "Error updating media record Enabled: ERR=%s" +msgid "Could not create JobMedia record. ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:472 +#: src/stored/bscan.c:1272 #, c-format -msgid "New Enabled is: %d\n" +msgid "Created JobMedia record JobId %d, MediaId %d\n" msgstr "" -#: src/dird/ua_update.c:487 +#: src/stored/bscan.c:1288 #, c-format -msgid "Error updating media record ActionOnPurge: ERR=%s" +msgid "Could not find SessId=%d SessTime=%d for MD5/SHA1 record.\n" msgstr "" -#: src/dird/ua_update.c:490 +#: src/stored/bscan.c:1302 #, c-format -msgid "New ActionOnPurge is: %s\n" +msgid "Could not add MD5/SHA1 to File record. ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:605 src/dird/ua_run.c:222 -msgid "Parameters to modify:\n" +#: src/stored/bscan.c:1307 +msgid "Updated MD5/SHA1 record\n" msgstr "" -#: src/dird/ua_update.c:606 -msgid "Volume Status" +#: src/stored/stored_conf.c:224 +#, c-format +msgid "Expected a Device Type keyword, got: %s" msgstr "" -#: src/dird/ua_update.c:607 -msgid "Volume Retention Period" +#: src/stored/stored_conf.c:238 +#, c-format +msgid "" +"Maximum Block Size configured value %u is greater than allowed maximum: %u" msgstr "" -#: src/dird/ua_update.c:608 -msgid "Volume Use Duration" +#: src/stored/stored_conf.c:252 +#, c-format +msgid "Warning: no \"%s\" resource (%d) defined.\n" msgstr "" -#: src/dird/ua_update.c:609 -msgid "Maximum Volume Jobs" +#: src/stored/stored_conf.c:255 +#, c-format +msgid "dump_resource type=%d\n" msgstr "" -#: src/dird/ua_update.c:610 -msgid "Maximum Volume Files" +#: src/stored/stored_conf.c:371 +#, c-format +msgid "Warning: unknown resource type %d\n" msgstr "" -#: src/dird/ua_update.c:611 -msgid "Maximum Volume Bytes" +#: src/stored/stored_conf.c:567 +#, c-format +msgid "\"%s\" item is required in \"%s\" resource, but not found.\n" msgstr "" -#: src/dird/ua_update.c:612 -msgid "Recycle Flag" +#: src/stored/stored_conf.c:573 +#, c-format +msgid "Too many items in \"%s\" resource\n" msgstr "" -#: src/dird/ua_update.c:613 -msgid "Slot" +#: src/stored/stored_conf.c:594 src/dird/dird_conf.c:1488 +#: src/filed/filed_conf.c:459 +#, c-format +msgid "Cannot find Director resource %s\n" msgstr "" -#: src/dird/ua_update.c:614 -msgid "InChanger Flag" +#: src/stored/stored_conf.c:600 src/dird/dird_conf.c:1495 +#, c-format +msgid "Cannot find Storage resource %s\n" msgstr "" -#: src/dird/ua_update.c:615 -msgid "Volume Files" +#: src/stored/stored_conf.c:607 +#, c-format +msgid "Cannot find AutoChanger resource %s\n" msgstr "" -#: src/dird/ua_update.c:617 -msgid "Volume from Pool" -msgstr "" +#: src/stored/stored_conf.c:623 +#, fuzzy, c-format +msgid "Unable to init lock: ERR=%s\n" +msgstr "Не можливо встановити власника файлу %s: ERR=%s\n" -#: src/dird/ua_update.c:618 -msgid "All Volumes from Pool" +#: src/stored/stored_conf.c:681 +#, c-format +msgid "" +"Attempt to define second \"%s\" resource named \"%s\" is not permitted.\n" msgstr "" -#: src/dird/ua_update.c:619 -msgid "All Volumes from all Pools" +#: src/stored/dircmd.c:157 +#, c-format +msgid "Connection request from %s failed.\n" msgstr "" -#: src/dird/ua_update.c:620 -msgid "Enabled" +#: src/stored/dircmd.c:168 +#, c-format +msgid "Invalid connection from %s. Len=%d\n" msgstr "" -#: src/dird/ua_update.c:621 -msgid "RecyclePool" +#: src/stored/dircmd.c:215 src/filed/authenticate.c:196 +msgid "Unable to authenticate Director\n" msgstr "" -#: src/dird/ua_update.c:622 -msgid "Action On Purge" -msgstr "" +#: src/stored/dircmd.c:308 +#, fuzzy, c-format +msgid "Bad client command: %s" +msgstr "Погана відповідь на команду Hello: ERR=%s\n" -#: src/dird/ua_update.c:623 -msgid "Done" -msgstr "" +#: src/stored/dircmd.c:318 +#, fuzzy +msgid "Client daemon" +msgstr "Збирач" -#: src/dird/ua_update.c:624 src/dird/ua_run.c:252 src/dird/ua_run.c:600 -msgid "Select parameter to modify" -msgstr "" +#: src/stored/dircmd.c:321 +#, fuzzy, c-format +msgid "Failed to connect to Client daemon: %s:%d\n" +msgstr "Ініціалізація контексту TLS для Консолі невдала \"%s\".\n" -#: src/dird/ua_update.c:632 +#: src/stored/dircmd.c:358 src/filed/job.c:1855 #, c-format -msgid "Updating Volume \"%s\"\n" +msgid "Bad storage command: %s" msgstr "" -#: src/dird/ua_update.c:637 -#, c-format -msgid "Current Volume status is: %s\n" -msgstr "" +#: src/stored/dircmd.c:377 src/dird/msgchan.c:121 src/filed/job.c:1880 +#: src/qt-console/tray-monitor/tray-monitor.cpp:363 +msgid "Storage daemon" +msgstr "Зберігач" -#: src/dird/ua_update.c:638 -msgid "Possible Values are:\n" +#: src/stored/dircmd.c:380 src/filed/job.c:1883 +#, c-format +msgid "Failed to connect to Storage daemon: %s:%d\n" msgstr "" -#: src/dird/ua_update.c:649 -msgid "Choose new Volume Status" +#: src/stored/dircmd.c:397 +msgid "In storage_cmd port==0, no prior Storage connection.\n" msgstr "" -#: src/dird/ua_update.c:655 +#: src/stored/dircmd.c:445 #, c-format -msgid "Current retention period is: %s\n" +msgid "3991 Bad setdebug command: %s\n" msgstr "" -#: src/dird/ua_update.c:657 -msgid "Enter Volume Retention period: " +#: src/stored/dircmd.c:479 +msgid "3903 Error scanning cancel command.\n" msgstr "" -#: src/dird/ua_update.c:664 +#: src/stored/dircmd.c:483 #, c-format -msgid "Current use duration is: %s\n" -msgstr "" - -#: src/dird/ua_update.c:666 -msgid "Enter Volume Use Duration: " +msgid "3904 Job %s not found.\n" msgstr "" -#: src/dird/ua_update.c:673 +#: src/stored/dircmd.c:511 #, c-format -msgid "Current max jobs is: %u\n" +msgid "3000 JobId=%ld Job=\"%s\" marked to be %s.\n" msgstr "" -#: src/dird/ua_update.c:674 -msgid "Enter new Maximum Jobs: " +#: src/stored/dircmd.c:590 src/stored/dircmd.c:971 src/stored/dircmd.c:1066 +#: src/stored/dircmd.c:1177 src/stored/dircmd.c:1299 src/stored/dircmd.c:1341 +#, c-format +msgid "3999 Device \"%s\" not found or could not be opened.\n" msgstr "" -#: src/dird/ua_update.c:681 +#: src/stored/dircmd.c:595 #, c-format -msgid "Current max files is: %u\n" +msgid "3903 Error scanning label command: %s\n" msgstr "" -#: src/dird/ua_update.c:682 -msgid "Enter new Maximum Files: " -msgstr "" +#: src/stored/dircmd.c:644 +#, fuzzy, c-format +msgid "3910 Unable to open device \"%s\": ERR=%s\n" +msgstr "Не можливо встановити час файлу %s: ERR=%s\n" -#: src/dird/ua_update.c:689 +#: src/stored/dircmd.c:661 #, c-format -msgid "Current value is: %s\n" -msgstr "" - -#: src/dird/ua_update.c:690 -msgid "Enter new Maximum Bytes: " +msgid "3920 Cannot label Volume because it is already labeled: \"%s\"\n" msgstr "" -#: src/dird/ua_update.c:698 -#, c-format -msgid "Current recycle flag is: %s\n" +#: src/stored/dircmd.c:668 +msgid "3921 Wrong volume mounted.\n" msgstr "" -#: src/dird/ua_update.c:700 -msgid "Enter new Recycle status: " +#: src/stored/dircmd.c:672 +msgid "3922 Cannot relabel an ANSI/IBM labeled Volume.\n" msgstr "" -#: src/dird/ua_update.c:707 +#: src/stored/dircmd.c:680 #, c-format -msgid "Current Slot is: %d\n" +msgid "3912 Failed to label Volume: ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:708 -msgid "Enter new Slot: " -msgstr "" +#: src/stored/dircmd.c:690 +#, fuzzy, c-format +msgid "3915 Failed to label Volume: ERR=%s\n" +msgstr "Не можливо встановити час файлу %s: ERR=%s\n" -#: src/dird/ua_update.c:715 +#: src/stored/dircmd.c:693 #, c-format -msgid "Current InChanger flag is: %d\n" +msgid "3914 Failed to label Volume (no media): ERR=%s\n" msgstr "" -#: src/dird/ua_update.c:716 +#: src/stored/dircmd.c:696 #, c-format -msgid "Set InChanger flag for Volume \"%s\": yes/no: " +msgid "3913 Cannot label Volume. Unknown status %d from read_volume_label()\n" msgstr "" -#: src/dird/ua_update.c:730 +#: src/stored/dircmd.c:733 #, c-format -msgid "New InChanger flag is: %d\n" +msgid "3001 Mounted Volume: %s\n" msgstr "" -#: src/dird/ua_update.c:737 +#: src/stored/dircmd.c:737 src/stored/dircmd.c:1377 +#, c-format msgid "" -"Warning changing Volume Files can result\n" -"in loss of data on your Volume\n" -"\n" +"3902 Cannot mount Volume on Storage Device \"%s\" because:\n" +"%s" msgstr "" -#: src/dird/ua_update.c:739 +#: src/stored/dircmd.c:768 src/stored/reserve.c:646 #, c-format -msgid "Current Volume Files is: %u\n" +msgid "" +"\n" +" Device \"%s\" requested by DIR could not be opened or does not exist.\n" msgstr "" -#: src/dird/ua_update.c:740 -msgid "Enter new number of Files for Volume: " +#: src/stored/dircmd.c:790 src/stored/reserve.c:642 +#, c-format +msgid "" +"\n" +" Device \"%s\" in changer \"%s\" requested by DIR could not be opened or " +"does not exist.\n" msgstr "" -#: src/dird/ua_update.c:745 -msgid "Normally, you should only increase Volume Files by one!\n" +#: src/stored/dircmd.c:854 +msgid "Specified slot ignored. " msgstr "" -#: src/dird/ua_update.c:746 -msgid "Increase Volume Files? (yes/no): " -msgstr "" +#: src/stored/dircmd.c:871 src/stored/dircmd.c:929 +#, fuzzy, c-format +msgid "3901 Unable to open device \"%s\": ERR=%s\n" +msgstr "Не можливо встановити час файлу %s: ERR=%s\n" -#: src/dird/ua_update.c:756 +#: src/stored/dircmd.c:891 src/stored/dircmd.c:920 #, c-format -msgid "New Volume Files is: %u\n" +msgid "3001 Device \"%s\" is mounted with Volume \"%s\"\n" msgstr "" -#: src/dird/ua_update.c:768 +#: src/stored/dircmd.c:894 src/stored/dircmd.c:923 src/stored/dircmd.c:938 #, c-format -msgid "Current Pool is: %s\n" +msgid "" +"3905 Device \"%s\" open but no Bacula volume is mounted.\n" +"If this is not a blank tape, try unmounting and remounting the Volume.\n" msgstr "" -#: src/dird/ua_update.c:769 -msgid "Enter new Pool name: " +#: src/stored/dircmd.c:904 +#, c-format +msgid "3001 Device \"%s\" is doing acquire.\n" msgstr "" -#: src/dird/ua_update.c:790 +#: src/stored/dircmd.c:909 src/stored/dircmd.c:1037 #, c-format -msgid "Current Enabled is: %d\n" +msgid "3903 Device \"%s\" is being labeled.\n" msgstr "" -#: src/dird/ua_update.c:791 -msgid "Enter new Enabled: " +#: src/stored/dircmd.c:935 +#, c-format +msgid "3001 Device \"%s\" is already mounted with Volume \"%s\"\n" msgstr "" -#: src/dird/ua_update.c:810 +#: src/stored/dircmd.c:947 #, c-format -msgid "Current RecyclePool is: %s\n" +msgid "3002 Device \"%s\" is mounted.\n" msgstr "" -#: src/dird/ua_update.c:812 -msgid "No current RecyclePool\n" +#: src/stored/dircmd.c:949 src/stored/dircmd.c:1006 src/stored/dircmd.c:1025 +#: src/stored/dircmd.c:1057 +#, c-format +msgid "3907 %s" msgstr "" -#: src/dird/ua_update.c:822 +#: src/stored/dircmd.c:952 #, c-format -msgid "Current ActionOnPurge is: %s\n" +msgid "3906 File device \"%s\" is always mounted.\n" msgstr "" -#: src/dird/ua_update.c:824 -msgid "Enter new ActionOnPurge (one of: Truncate, None): " +#: src/stored/dircmd.c:961 +#, c-format +msgid "3930 Device \"%s\" is being released.\n" msgstr "" -#: src/dird/ua_update.c:832 -msgid "Selection terminated.\n" -msgstr "" +#: src/stored/dircmd.c:965 +#, fuzzy, c-format +msgid "3905 Unknown wait state %d\n" +msgstr "Невідомий статус задачі %c. " -#: src/dird/ua_update.c:852 +#: src/stored/dircmd.c:975 #, c-format -msgid "Updating %i job(s).\n" +msgid "3909 Error scanning mount command: %s\n" msgstr "" -#: src/dird/ua_update.c:884 +#: src/stored/dircmd.c:1003 src/stored/dircmd.c:1059 #, c-format -msgid "db_update_pool_record returned %d. ERR=%s\n" +msgid "3002 Device \"%s\" unmounted.\n" msgstr "" -#: src/dird/ua_update.c:891 -msgid "Pool DB record updated from resource.\n" +#: src/stored/dircmd.c:1010 +#, c-format +msgid "3901 Device \"%s\" is already unmounted.\n" msgstr "" -#: src/dird/ua_update.c:918 -msgid "Expect JobId keyword, not found.\n" +#: src/stored/dircmd.c:1028 +#, c-format +msgid "3001 Device \"%s\" unmounted.\n" msgstr "" -#: src/dird/ua_update.c:943 -msgid "Neither Client nor StartTime specified.\n" +#: src/stored/dircmd.c:1033 +#, c-format +msgid "3902 Device \"%s\" is busy in acquire.\n" msgstr "" -#: src/dird/migrate.c:149 src/dird/migrate.c:163 +#: src/stored/dircmd.c:1071 #, c-format -msgid "No previous Job found to %s.\n" +msgid "3907 Error scanning unmount command: %s\n" msgstr "" -#: src/dird/migrate.c:155 -msgid "Create bootstrap file failed.\n" +#: src/stored/dircmd.c:1099 +msgid "3916 Error scanning action_on_purge command\n" msgstr "" -#: src/dird/migrate.c:165 +#: src/stored/dircmd.c:1142 #, c-format -msgid "Previous Job has no data to %s.\n" +msgid "3921 Device \"%s\" already released.\n" msgstr "" -#: src/dird/migrate.c:182 +#: src/stored/dircmd.c:1149 #, c-format -msgid "Job resource not found for \"%s\".\n" +msgid "3922 Device \"%s\" waiting for sysop.\n" msgstr "" -#: src/dird/migrate.c:186 +#: src/stored/dircmd.c:1155 #, c-format -msgid "Previous Job resource not found for \"%s\".\n" +msgid "3922 Device \"%s\" waiting for mount.\n" msgstr "" -#: src/dird/migrate.c:203 -msgid "setup job failed.\n" +#: src/stored/dircmd.c:1159 +#, c-format +msgid "3923 Device \"%s\" is busy in acquire.\n" msgstr "" -#: src/dird/migrate.c:258 +#: src/stored/dircmd.c:1163 #, c-format -msgid "Pool for JobId %s not in database. ERR=%s\n" +msgid "3914 Device \"%s\" is being labeled.\n" msgstr "" -#: src/dird/migrate.c:266 +#: src/stored/dircmd.c:1171 #, c-format -msgid "Pool resource \"%s\" not found.\n" +msgid "3022 Device \"%s\" released.\n" msgstr "" -#: src/dird/migrate.c:316 src/dird/migrate.c:898 +#: src/stored/dircmd.c:1182 #, c-format -msgid "Could not get job record for JobId %s to %s. ERR=%s" +msgid "3927 Error scanning release command: %s\n" msgstr "" -#: src/dird/migrate.c:327 +#: src/stored/dircmd.c:1211 #, c-format -msgid "JobId %s already %s probably by another Job. %s stopped.\n" +msgid "Could not create bootstrap file %s: ERR=%s\n" msgstr "" -#: src/dird/migrate.c:337 -#, c-format -msgid "Start %s JobId %s, Job=%s\n" +#: src/stored/dircmd.c:1224 +msgid "Error parsing bootstrap file.\n" msgstr "" -#: src/dird/migrate.c:712 +#: src/stored/dircmd.c:1286 #, c-format -msgid "No %s SQL selection pattern specified.\n" +msgid "3998 Device \"%s\" is not an autochanger.\n" msgstr "" -#: src/dird/migrate.c:719 src/dird/migrate.c:738 src/dird/migrate.c:759 -#: src/dird/migrate.c:795 src/dird/migrate.c:822 src/dird/migrate.c:956 -#: src/dird/migrate.c:989 src/dird/migrate.c:1118 +#: src/stored/dircmd.c:1303 #, c-format -msgid "SQL failed. ERR=%s\n" +msgid "3908 Error scanning autochanger drives/list/slots command: %s\n" msgstr "" -#: src/dird/migrate.c:742 src/dird/migrate.c:749 src/dird/migrate.c:763 -#: src/dird/migrate.c:826 +#: src/stored/dircmd.c:1345 #, c-format -msgid "No Volumes found to %s.\n" +msgid "3909 Error scanning readlabel command: %s\n" msgstr "" -#: src/dird/migrate.c:777 src/dird/migrate.c:866 src/dird/migrate.c:886 -msgid "Invalid JobId found.\n" +#: src/stored/dircmd.c:1373 +#, c-format +msgid "3001 Volume=%s Slot=%d\n" msgstr "" -#: src/dird/migrate.c:837 +#: src/stored/dircmd.c:1405 #, c-format -msgid "Unknown %s Selection Type.\n" +msgid "3931 Device \"%s\" is BLOCKED. user unmounted.\n" msgstr "" -#: src/dird/migrate.c:848 src/dird/migrate.c:869 src/dird/migrate.c:889 +#: src/stored/dircmd.c:1409 #, c-format -msgid "No JobIds found to %s.\n" +msgid "" +"3932 Device \"%s\" is BLOCKED. user unmounted during wait for media/mount.\n" msgstr "" -#: src/dird/migrate.c:852 +#: src/stored/dircmd.c:1413 #, c-format -msgid "The following %u JobId%s chosen to be %s: %s\n" +msgid "3933 Device \"%s\" is BLOCKED waiting for media.\n" msgstr "" -#: src/dird/migrate.c:853 -msgid " was" +#: src/stored/dircmd.c:1417 +#, c-format +msgid "3934 Device \"%s\" is being initialized.\n" msgstr "" -#: src/dird/migrate.c:853 -msgid "s were" +#: src/stored/dircmd.c:1421 +#, c-format +msgid "3935 Device \"%s\" is blocked labeling a Volume.\n" msgstr "" -#: src/dird/migrate.c:905 +#: src/stored/dircmd.c:1425 #, c-format -msgid "%s using JobId=%s Job=%s\n" +msgid "3935 Device \"%s\" is blocked for unknown reason.\n" msgstr "" -#: src/dird/migrate.c:939 -msgid "Could not start migration job.\n" +#: src/stored/dircmd.c:1430 +#, c-format +msgid "3936 Device \"%s\" is busy reading.\n" msgstr "" -#: src/dird/migrate.c:941 +#: src/stored/dircmd.c:1433 #, c-format -msgid "%s JobId %d started.\n" +msgid "3937 Device \"%s\" is busy with writers=%d reserved=%d.\n" msgstr "" -#: src/dird/migrate.c:960 +#: src/stored/dev.c:129 #, c-format -msgid "No %s found to %s.\n" +msgid "Unable to stat device %s: ERR=%s\n" msgstr "" -#: src/dird/migrate.c:964 +#: src/stored/dev.c:147 #, c-format -msgid "SQL error. Expected 1 MediaId got %d\n" +msgid "" +"%s is an unknown device type. Must be tape or directory\n" +" or have RequiresMount=yes for DVD. st_mode=%x\n" msgstr "" -#: src/dird/migrate.c:993 src/dird/migrate.c:1123 -#, c-format -msgid "No %ss found to %s.\n" +#: src/stored/dev.c:157 +msgid "DVD support is now deprecated.\n" msgstr "" -#: src/dird/migrate.c:1015 -msgid "Selection Type 'pooluncopiedjobs' only applies to Copy Jobs" +#: src/stored/dev.c:160 +msgid "Aligned device not supported. Please use \"DeviceType = File\"\n" msgstr "" -#: src/dird/migrate.c:1024 +#: src/stored/dev.c:256 #, c-format -msgid "SQL to get uncopied jobs failed. ERR=%s\n" +msgid "Unable to stat mount point %s: ERR=%s\n" msgstr "" -#: src/dird/migrate.c:1047 -#, c-format -msgid "No %s %s selection pattern specified.\n" +#: src/stored/dev.c:261 +msgid "" +"Mount and unmount commands must defined for a device which requires mount.\n" msgstr "" -#: src/dird/migrate.c:1058 +#: src/stored/dev.c:272 #, c-format -msgid "SQL to get %s failed. ERR=%s\n" +msgid "Min block size > max on device %s\n" msgstr "" -#: src/dird/migrate.c:1063 +#: src/stored/dev.c:276 #, c-format -msgid "Query of Pool \"%s\" returned no Jobs to %s.\n" +msgid "Block size %u on device %s is too large, using default %u\n" msgstr "" -#: src/dird/migrate.c:1101 +#: src/stored/dev.c:281 #, c-format -msgid "Regex pattern matched no Jobs to %s.\n" +msgid "Max block size %u not multiple of device %s block size=%d.\n" msgstr "" -#: src/dird/migrate.c:1265 +#: src/stored/dev.c:285 #, c-format -msgid "%s OK -- with warnings" +msgid "Max Vol Size < 8 * Max Block Size for device %s\n" msgstr "" -#: src/dird/migrate.c:1267 +#: src/stored/dev.c:295 src/stored/dev.c:347 src/lib/openssl.c:110 +#: src/lib/openssl.c:169 #, c-format -msgid "%s OK" +msgid "Unable to init mutex: ERR=%s\n" msgstr "" -#: src/dird/migrate.c:1272 +#: src/stored/dev.c:301 src/stored/dev.c:307 #, c-format -msgid "*** %s Error ***" +msgid "Unable to init cond variable: ERR=%s\n" msgstr "" -#: src/dird/migrate.c:1282 -#, c-format -msgid "%s Canceled" +#: src/stored/dev.c:313 +#, fuzzy, c-format +msgid "Unable to init spool mutex: ERR=%s\n" +msgstr "Не можливо встановити власника файлу %s: ERR=%s\n" + +#: src/stored/dev.c:319 +#, fuzzy, c-format +msgid "Unable to init acquire mutex: ERR=%s\n" +msgstr "Не можливо встановити власника файлу %s: ERR=%s\n" + +#: src/stored/dev.c:325 +#, fuzzy, c-format +msgid "Unable to init read acquire mutex: ERR=%s\n" +msgstr "Не можливо встановити власника файлу %s: ERR=%s\n" + +#: src/stored/dev.c:331 +#, fuzzy, c-format +msgid "Unable to init volcat mutex: ERR=%s\n" +msgstr "Не можливо встановити власника файлу %s: ERR=%s\n" + +#: src/stored/dev.c:337 +#, fuzzy, c-format +msgid "Unable to init dcrs mutex: ERR=%s\n" +msgstr "Не можливо встановити власника файлу %s: ERR=%s\n" + +#: src/stored/dev.c:426 +msgid "Illegal mode given to open dev.\n" msgstr "" -#: src/dird/migrate.c:1291 -#, c-format -msgid "Inappropriate %s term code" +#: src/stored/dev.c:478 +msgid "Bad device call. Device not open\n" msgstr "" -#: src/dird/migrate.c:1301 +#: src/stored/dev.c:490 #, c-format -msgid "%s -- no files to %s" +msgid "Seek error: ERR=%s\n" msgstr "" -#: src/dird/migrate.c:1316 +#: src/stored/dev.c:491 src/stored/tape_dev.c:293 src/stored/file_dev.c:73 +#: src/stored/file_dev.c:100 #, c-format -msgid "" -"%s %s %s (%s):\n" -" Build OS: %s %s %s\n" -" Prev Backup JobId: %s\n" -" Prev Backup Job: %s\n" -" New Backup JobId: %s\n" -" Current JobId: %s\n" -" Current Job: %s\n" -" Backup Level: %s%s\n" -" Client: %s\n" -" FileSet: \"%s\" %s\n" -" Read Pool: \"%s\" (From %s)\n" -" Read Storage: \"%s\" (From %s)\n" -" Write Pool: \"%s\" (From %s)\n" -" Write Storage: \"%s\" (From %s)\n" -" Catalog: \"%s\" (From %s)\n" -" Start time: %s\n" -" End time: %s\n" -" Elapsed time: %s\n" -" Priority: %d\n" -" SD Files Written: %s\n" -" SD Bytes Written: %s (%sB)\n" -" Rate: %.1f KB/s\n" -" Volume name(s): %s\n" -" Volume Session Id: %d\n" -" Volume Session Time: %d\n" -" Last Volume Bytes: %s (%sB)\n" -" SD Errors: %d\n" -" SD termination status: %s\n" -" Termination: %s\n" -"\n" +msgid "lseek error on %s. ERR=%s.\n" msgstr "" -#: src/dird/migrate.c:1427 +#: src/stored/fd_cmds.c:193 #, c-format -msgid "No Next Pool specification found in Pool \"%s\".\n" +msgid "Command error with FD, hanging up. ERR=%s\n" msgstr "" -#: src/dird/migrate.c:1433 -#, c-format -msgid "No Storage specification found in Next Pool \"%s\".\n" +#: src/stored/fd_cmds.c:196 +msgid "Command error with FD, hanging up.\n" msgstr "" -#: src/dird/migrate.c:1439 -msgid "Storage from Pool's NextPool resource" +#: src/stored/fd_cmds.c:207 +#, c-format +msgid "FD command not found: %s\n" msgstr "" -#: src/dird/ua_prune.c:127 -msgid "Choose item to prune" +#: src/stored/fd_cmds.c:238 +msgid "Attempt to append on non-open session.\n" msgstr "" -#: src/dird/ua_prune.c:175 -#, c-format -msgid "Cannot prune Volume \"%s\" because it is archived.\n" +#: src/stored/fd_cmds.c:250 src/stored/fd_cmds.c:293 +msgid "Attempt to close non-open session.\n" msgstr "" -#: src/dird/ua_prune.c:217 -msgid "Pruned Jobs from JobHisto catalog.\n" +#: src/stored/fd_cmds.c:268 +msgid "Attempt to open already open session.\n" msgstr "" -#: src/dird/ua_prune.c:305 -#, fuzzy -msgid "Begin pruning Files.\n" -msgstr "Починається чистка файлів Клієнта \"%s\"\n" +#: src/stored/fd_cmds.c:322 +msgid "Attempt to read on non-open session.\n" +msgstr "" -#: src/dird/ua_prune.c:320 -msgid "No Files found to prune.\n" +#: src/stored/fd_cmds.c:340 src/stored/fd_cmds.c:349 +msgid "Attempt to open read on non-open session.\n" msgstr "" -#: src/dird/ua_prune.c:343 +#: src/stored/fd_cmds.c:412 src/dird/getmsg.c:365 #, c-format -msgid "Pruned Files from %s Jobs for client %s from catalog.\n" +msgid "Bad response to %s command: wanted %s, got %s\n" msgstr "" -#: src/dird/ua_prune.c:489 -#, fuzzy, c-format -msgid "Begin pruning Jobs older than %s.\n" -msgstr "Починається чистка файлів Клієнта \"%s\"\n" - -#: src/dird/ua_prune.c:600 +#: src/stored/fd_cmds.c:416 src/dird/getmsg.c:370 #, c-format -msgid "Pruned %d %s for client %s from catalog.\n" +msgid "Socket error on %s command: ERR=%s\n" msgstr "" -#: src/dird/ua_prune.c:601 -msgid "Jobs" +#: src/stored/block_util.c:88 +#, c-format +msgid "" +"Dump block %s %p: size=%d BlkNum=%d\n" +" Hdrcksum=%x cksum=%x\n" msgstr "" -#: src/dird/ua_prune.c:603 -msgid "No Jobs found to prune.\n" +#: src/stored/block_util.c:103 +#, c-format +msgid " Rec: VId=%u VT=%u FI=%s Strm=%s len=%d reclen=%d\n" msgstr "" -#: src/dird/autoprune.c:75 -msgid "" -"End auto prune.\n" -"\n" +#: src/stored/block_util.c:165 +#, c-format +msgid "%d block read errors not printed.\n" msgstr "" -#: src/dird/ua_run.c:154 -msgid "OK to run? (yes/mod/no): " +#: src/stored/block_util.c:281 src/stored/block_util.c:297 +#: src/stored/block_util.c:307 +#, c-format +msgid "" +"Volume data error at %u:%u! Wanted ID: \"%s\", got \"%s\". Buffer " +"discarded.\n" msgstr "" -#: src/dird/ua_run.c:193 -msgid "Job failed.\n" +#: src/stored/block_util.c:322 +#, c-format +msgid "" +"Volume data error at %u:%u! Block length %u is insane (too large), probably " +"due to a bad archive.\n" msgstr "" -#: src/dird/ua_run.c:196 +#: src/stored/block_util.c:349 #, c-format -msgid "Job queued. JobId=%s\n" +msgid "" +"Volume data error at %u:%u!\n" +"Block checksum mismatch in block=%u len=%d: calc=%x blk=%x\n" msgstr "" -#: src/dird/ua_run.c:203 +#: src/stored/block_util.c:435 #, c-format msgid "" -"\n" -"Bad response: %s. You must answer yes, mod, or no.\n" -"\n" +"User defined maximum volume size %s will be exceeded on device %s.\n" +" Marking Volume \"%s\" as Full.\n" msgstr "" -#: src/dird/ua_run.c:207 -msgid "Job not run.\n" +#: src/stored/block_util.c:472 src/stored/block_util.c:478 +#, c-format +msgid "Backspace file at EOT failed. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:223 -msgid "Level" +#: src/stored/block_util.c:485 +#, c-format +msgid "Backspace record at EOT failed. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:228 -msgid "Restore Client" +#: src/stored/block_util.c:502 +#, c-format +msgid "Re-read last block at EOT failed. ERR=%s" msgstr "" -#: src/dird/ua_run.c:232 src/wx-console/wxbrestorepanel.cpp:356 -#: src/wx-console/wxbrestorepanel.cpp:854 -#: src/wx-console/wxbrestorepanel.cpp:1918 -msgid "When" +#: src/stored/block_util.c:512 +#, c-format +msgid "" +"Re-read of last block: block numbers differ by more than one.\n" +"Probable tape misconfiguration and data loss. Read block=%u Want block=%u.\n" msgstr "" -#: src/dird/ua_run.c:233 src/wx-console/wxbrestorepanel.cpp:357 -#: src/wx-console/wxbrestorepanel.cpp:1128 -#: src/wx-console/wxbrestorepanel.cpp:1921 -msgid "Priority" +#: src/stored/block_util.c:517 +#, c-format +msgid "" +"Re-read of last block OK, but block numbers differ. Read block=%u Want block=" +"%u.\n" msgstr "" -#: src/dird/ua_run.c:240 -msgid "Verify Job" +#: src/stored/block_util.c:521 +msgid "Re-read of last block succeeded.\n" msgstr "" -#: src/dird/ua_run.c:243 src/wx-console/wxbrestorepanel.cpp:349 -#: src/wx-console/wxbrestorepanel.cpp:1899 -msgid "Bootstrap" +#: src/stored/block_util.c:560 +#, c-format +msgid "" +"Error writing final EOF to tape. This Volume may not be readable.\n" +"%s" msgstr "" -#: src/dird/ua_run.c:244 src/wx-console/wxbrestorepanel.cpp:350 -#: src/wx-console/wxbrestorepanel.cpp:1104 -#: src/wx-console/wxbrestorepanel.cpp:1901 -msgid "Where" -msgstr "" +#: src/stored/block_util.c:578 +#, fuzzy +msgid "Error sending Volume info to Director.\n" +msgstr "Помилка надсилання Hello до Збирача. ERR=%s\n" -#: src/dird/ua_run.c:245 -msgid "File Relocation" +#: src/stored/bcopy.c:64 +#, c-format +msgid "" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: bcopy [-d debug_level] \n" +" -b bootstrap specify a bootstrap file\n" +" -c specify a Storage configuration file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -i specify input Volume names (separated by |)\n" +" -o specify output Volume names (separated by |)\n" +" -p proceed inspite of errors\n" +" -v verbose\n" +" -w specify working directory (default /tmp)\n" +" -? print this message\n" +"\n" msgstr "" -#: src/dird/ua_run.c:246 src/wx-console/wxbrestorepanel.cpp:352 -#: src/wx-console/wxbrestorepanel.cpp:1112 -#: src/wx-console/wxbrestorepanel.cpp:1905 -#: src/wx-console/wxbrestorepanel.cpp:1906 -#: src/wx-console/wxbrestorepanel.cpp:1907 -#: src/wx-console/wxbrestorepanel.cpp:1908 -#: src/wx-console/wxbrestorepanel.cpp:1909 -msgid "Replace" +#: src/stored/bcopy.c:209 +msgid "Write of last block failed.\n" msgstr "" -#: src/dird/ua_run.c:247 -msgid "JobId" +#: src/stored/bcopy.c:213 +#, c-format +msgid "%u Jobs copied. %u records copied.\n" msgstr "" -#: src/dird/ua_run.c:250 -msgid "Plugin Options" +#: src/stored/bcopy.c:246 +msgid "Volume is prelabeled. This volume cannot be copied.\n" msgstr "" -#: src/dird/ua_run.c:261 src/dird/ua_run.c:1569 -msgid "user selection" +#: src/stored/bcopy.c:249 +msgid "Volume label not copied.\n" msgstr "" -#: src/dird/ua_run.c:293 -msgid "" -"Please enter desired start time as YYYY-MM-DD HH:MM:SS (return for now): " +#: src/stored/bcopy.c:255 +msgid "Copy skipped. Record does not match BSR filter.\n" msgstr "" -#: src/dird/ua_run.c:301 src/dird/ua_run.c:477 -msgid "Invalid time, using current time.\n" +#: src/stored/bcopy.c:286 +msgid "EOM label not copied.\n" msgstr "" -#: src/dird/ua_run.c:308 -msgid "Enter new Priority: " +#: src/stored/bcopy.c:289 +msgid "EOT label not copied.\n" msgstr "" -#: src/dird/ua_run.c:312 -msgid "Priority must be a positive integer.\n" +#: src/stored/tape_dev.c:226 +#, c-format +msgid "No tape loaded or drive offline on %s.\n" msgstr "" -#: src/dird/ua_run.c:333 -msgid "Please enter the Bootstrap file name: " +#: src/stored/tape_dev.c:236 +#, c-format +msgid "Rewind error on %s. ERR=%s.\n" msgstr "" -#: src/dird/ua_run.c:345 +#: src/stored/tape_dev.c:261 #, c-format -msgid "Warning cannot open %s: ERR=%s\n" +msgid "Bad call to eod. Device %s not open\n" msgstr "" -#: src/dird/ua_run.c:364 -msgid "Please enter the full path prefix for restore (/ for none): " +#: src/stored/tape_dev.c:333 +#, c-format +msgid "ioctl MTEOM error on %s. ERR=%s.\n" msgstr "" -#: src/dird/ua_run.c:386 -msgid "Replace:\n" +#: src/stored/tape_dev.c:344 src/stored/os.c:184 +#, c-format +msgid "ioctl MTIOCGET error on %s. ERR=%s.\n" msgstr "" -#: src/dird/ua_run.c:390 -msgid "Select replace option" +#: src/stored/tape_dev.c:428 +msgid "Bad call to load_dev. Device not open\n" msgstr "" -#: src/dird/ua_run.c:401 -msgid "" -"You must set the bootstrap file to NULL to be able to specify a JobId.\n" +#: src/stored/tape_dev.c:439 src/stored/tape_dev.c:452 +#, c-format +msgid "ioctl MTLOAD error on %s. ERR=%s.\n" msgstr "" -#: src/dird/ua_run.c:406 -msgid "Please Plugin Options string: " +#: src/stored/tape_dev.c:483 +#, c-format +msgid "ioctl MTOFFL error on %s. ERR=%s.\n" msgstr "" -#: src/dird/ua_run.c:444 src/dird/ua_run.c:453 -msgid "User input" +#: src/stored/tape_dev.c:524 +msgid "Bad call to fsf. Device not open\n" msgstr "" -#: src/dird/ua_run.c:507 +#: src/stored/tape_dev.c:535 src/stored/tape_dev.c:662 #, c-format -msgid "Invalid replace option: %s\n" +msgid "Device %s at End of Tape.\n" msgstr "" -#: src/dird/ua_run.c:589 +#: src/stored/tape_dev.c:566 src/stored/tape_dev.c:642 #, c-format -msgid "strip_prefix=%s add_prefix=%s add_suffix=%s\n" +msgid "ioctl MTFSF error on %s. ERR=%s.\n" msgstr "" -#: src/dird/ua_run.c:592 -msgid "This will replace your current Where value\n" +#: src/stored/tape_dev.c:691 +msgid "Bad call to bsf. Device not open\n" msgstr "" -#: src/dird/ua_run.c:593 -msgid "Strip prefix" +#: src/stored/tape_dev.c:697 +#, c-format +msgid "Device %s cannot BSF because it is not a tape.\n" msgstr "" -#: src/dird/ua_run.c:594 -msgid "Add prefix" +#: src/stored/tape_dev.c:714 +#, c-format +msgid "ioctl MTBSF error on %s. ERR=%s.\n" msgstr "" -#: src/dird/ua_run.c:595 -msgid "Add file suffix" +#: src/stored/tape_dev.c:733 +msgid "Bad call to fsr. Device not open\n" msgstr "" -#: src/dird/ua_run.c:596 -msgid "Enter a regexp" +#: src/stored/tape_dev.c:743 +#, c-format +msgid "ioctl MTFSR not permitted on %s.\n" msgstr "" -#: src/dird/ua_run.c:597 -msgid "Test filename manipulation" +#: src/stored/tape_dev.c:771 +#, c-format +msgid "ioctl MTFSR %d error on %s. ERR=%s.\n" msgstr "" -#: src/dird/ua_run.c:598 -msgid "Use this ?" +#: src/stored/tape_dev.c:789 +msgid "Bad call to bsr_dev. Device not open\n" msgstr "" -#: src/dird/ua_run.c:603 -msgid "Please enter the path prefix to strip: " +#: src/stored/tape_dev.c:799 +#, c-format +msgid "ioctl MTBSR not permitted on %s.\n" msgstr "" -#: src/dird/ua_run.c:611 -msgid "Please enter the path prefix to add (/ for none): " +#: src/stored/tape_dev.c:813 +#, c-format +msgid "ioctl MTBSR error on %s. ERR=%s.\n" msgstr "" -#: src/dird/ua_run.c:622 -msgid "Please enter the file suffix to add: " +#: src/stored/tape_dev.c:850 src/stored/file_dev.c:90 +msgid "Bad call to reposition. Device not open\n" msgstr "" -#: src/dird/ua_run.c:629 -msgid "Please enter a valid regexp (!from!to!): " +#: src/stored/tape_dev.c:912 +msgid "Bad call to weof_dev. Device not open\n" msgstr "" -#: src/dird/ua_run.c:642 -#, c-format -msgid "regexwhere=%s\n" +#: src/stored/tape_dev.c:922 +msgid "Attempt to WEOF on non-appendable Volume\n" msgstr "" -#: src/dird/ua_run.c:648 +#: src/stored/tape_dev.c:940 #, c-format -msgid "strip_prefix=%s add_prefix=%s add_suffix=%s result=%s\n" +msgid "ioctl MTWEOF error on %s. ERR=%s.\n" msgstr "" -#: src/dird/ua_run.c:655 -msgid "Cannot use your regexp\n" +#: src/stored/tape_dev.c:986 src/stored/file_dev.c:318 +#, c-format +msgid "Device %s cannot be %smounted. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:658 -msgid "Enter a period (.) to stop this test\n" +#: src/stored/butil.c:46 +msgid "Nohdr," msgstr "" -#: src/dird/ua_run.c:659 -msgid "Please enter filename to test: " +#: src/stored/butil.c:49 +msgid "partial," msgstr "" -#: src/dird/ua_run.c:661 -#, c-format -msgid "%s -> %s\n" +#: src/stored/butil.c:52 +msgid "empty," msgstr "" -#: src/dird/ua_run.c:705 -msgid "Cannot use your regexp.\n" +#: src/stored/butil.c:55 +msgid "Nomatch," msgstr "" -#: src/dird/ua_run.c:718 src/dird/ua_run.c:748 -msgid "Levels:\n" +#: src/stored/butil.c:58 +msgid "cont," msgstr "" -#: src/dird/ua_run.c:720 src/stored/status.c:665 src/lib/util.c:426 -#: src/lib/util.c:472 src/filed/status.c:519 -msgid "Full" +#: src/stored/butil.c:148 +msgid "Volume name or names is too long. Please use a .bsr file.\n" msgstr "" -#: src/dird/ua_run.c:721 src/stored/status.c:668 src/lib/util.c:429 -#: src/filed/status.c:522 -msgid "Incremental" +#: src/stored/butil.c:168 +#, c-format +msgid "Cannot find device \"%s\" in config file %s.\n" msgstr "" -#: src/dird/ua_run.c:722 src/stored/status.c:671 src/lib/util.c:432 -#: src/filed/status.c:525 -msgid "Differential" +#: src/stored/butil.c:175 +#, c-format +msgid "Cannot init device %s\n" msgstr "" -#: src/dird/ua_run.c:723 src/stored/status.c:674 src/lib/util.c:435 -#: src/filed/status.c:528 -msgid "Since" +#: src/stored/butil.c:195 +#, c-format +msgid "Cannot open %s\n" msgstr "" -#: src/dird/ua_run.c:724 -msgid "VirtualFull" +#: src/stored/butil.c:282 +#, c-format +msgid "Could not find device \"%s\" in config file %s.\n" msgstr "" -#: src/dird/ua_run.c:725 src/dird/ua_run.c:754 -msgid "Select level" +#: src/stored/butil.c:287 +#, c-format +msgid "Using device: \"%s\" for writing.\n" msgstr "" -#: src/dird/ua_run.c:749 -msgid "Initialize Catalog" +#: src/stored/butil.c:289 +#, c-format +msgid "Using device: \"%s\" for reading.\n" msgstr "" -#: src/dird/ua_run.c:750 src/stored/status.c:677 src/lib/util.c:438 -#: src/filed/status.c:531 -msgid "Verify Catalog" +#: src/stored/butil.c:305 +msgid "Unexpected End of Data\n" msgstr "" -#: src/dird/ua_run.c:751 src/lib/util.c:444 -msgid "Verify Volume to Catalog" +#: src/stored/butil.c:307 +msgid "Unexpected End of Tape\n" msgstr "" -#: src/dird/ua_run.c:752 src/lib/util.c:447 -msgid "Verify Disk to Catalog" +#: src/stored/butil.c:309 +msgid "Unexpected End of File\n" msgstr "" -#: src/dird/ua_run.c:753 -msgid "Verify Volume Data (not yet implemented)" +#: src/stored/butil.c:311 +msgid "Tape Door is Open\n" msgstr "" -#: src/dird/ua_run.c:774 -msgid "Level not appropriate for this Job. Cannot be changed.\n" +#: src/stored/butil.c:313 +msgid "Unexpected Tape is Off-line\n" msgstr "" -#: src/dird/ua_run.c:805 +#: src/stored/ansi_label.c:81 #, c-format -msgid "" -"Run Admin Job\n" -"JobName: %s\n" -"FileSet: %s\n" -"Client: %s\n" -"Storage: %s\n" -"When: %s\n" -"Priority: %d\n" +msgid "Read error on device %s in ANSI label. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:849 -#, c-format -msgid "" -"Run Backup job\n" -"JobName: %s\n" -"Level: %s\n" -"Client: %s\n" -"FileSet: %s\n" -"Pool: %s (From %s)\n" -"Storage: %s (From %s)\n" -"When: %s\n" -"Priority: %d\n" -"%s%s%s" +#: src/stored/ansi_label.c:91 +msgid "Insane! End of tape while reading ANSI label.\n" msgstr "" -#: src/dird/ua_run.c:880 -#, fuzzy, c-format -msgid "Could not get job record for selected JobId. ERR=%s" -msgstr "Не вдалось відновити прапорці для файлу %s: ERR=%s\n" +#: src/stored/ansi_label.c:117 +msgid "No VOL1 label while reading ANSI/IBM label.\n" +msgstr "" -#: src/dird/ua_run.c:919 +#: src/stored/ansi_label.c:140 #, c-format -msgid "" -"Run Verify Job\n" -"JobName: %s\n" -"Level: %s\n" -"Client: %s\n" -"FileSet: %s\n" -"Pool: %s (From %s)\n" -"Storage: %s (From %s)\n" -"Verify Job: %s\n" -"Verify List: %s\n" -"When: %s\n" -"Priority: %d\n" +msgid "Wanted ANSI Volume \"%s\" got \"%s\"\n" msgstr "" -#: src/dird/ua_run.c:948 -msgid "Please enter a JobId for restore: " +#: src/stored/ansi_label.c:151 +msgid "No HDR1 label while reading ANSI label.\n" msgstr "" -#: src/dird/ua_run.c:988 +#: src/stored/ansi_label.c:157 #, c-format -msgid "" -"Run Restore job\n" -"JobName: %s\n" -"Bootstrap: %s\n" -"RegexWhere: %s\n" -"Replace: %s\n" -"FileSet: %s\n" -"Backup Client: %s\n" -"Restore Client: %s\n" -"Storage: %s\n" -"When: %s\n" -"Catalog: %s\n" -"Priority: %d\n" -"Plugin Options: %s\n" +msgid "ANSI/IBM Volume \"%s\" does not belong to Bacula.\n" msgstr "" -#: src/dird/ua_run.c:1044 -#, c-format -msgid "" -"Run Restore job\n" -"JobName: %s\n" -"Bootstrap: %s\n" -"Where: %s\n" -"Replace: %s\n" -"FileSet: %s\n" -"Backup Client: %s\n" -"Restore Client: %s\n" -"Storage: %s\n" -"When: %s\n" -"Catalog: %s\n" -"Priority: %d\n" -"Plugin Options: %s\n" +#: src/stored/ansi_label.c:169 +msgid "No HDR2 label while reading ANSI/IBM label.\n" msgstr "" -#: src/dird/ua_run.c:1075 -#, c-format -msgid "" -"Run Restore job\n" -"JobName: %s\n" -"Bootstrap: %s\n" +#: src/stored/ansi_label.c:184 +msgid "Unknown or bad ANSI/IBM label record.\n" msgstr "" -#: src/dird/ua_run.c:1083 -#, c-format -msgid "RegexWhere: %s\n" +#: src/stored/ansi_label.c:192 +msgid "Too many records in while reading ANSI/IBM label.\n" msgstr "" -#: src/dird/ua_run.c:1086 +#: src/stored/ansi_label.c:292 #, c-format -msgid "Where: %s\n" +msgid "ANSI Volume label name \"%s\" longer than 6 chars.\n" msgstr "" -#: src/dird/ua_run.c:1090 +#: src/stored/ansi_label.c:318 #, c-format -msgid "" -"Replace: %s\n" -"Client: %s\n" -"Storage: %s\n" -"JobId: %s\n" -"When: %s\n" -"Catalog: %s\n" -"Priority: %d\n" -"Plugin Options: %s\n" +msgid "Could not write ANSI VOL1 label. Wanted size=%d got=%d ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:1145 -msgid "Run Copy job\n" +#: src/stored/ansi_label.c:356 src/stored/ansi_label.c:385 +#, c-format +msgid "Could not write ANSI HDR1 label. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:1147 -msgid "Run Migration job\n" +#: src/stored/ansi_label.c:361 src/stored/ansi_label.c:392 +msgid "Could not write ANSI HDR1 label.\n" msgstr "" -#: src/dird/ua_run.c:1176 +#: src/stored/ansi_label.c:397 #, c-format -msgid "Unknown Job Type=%d\n" +msgid "Error writing EOF to tape. ERR=%s" msgstr "" -#: src/dird/ua_run.c:1245 -#, c-format -msgid "Value missing for keyword %s\n" +#: src/stored/ansi_label.c:402 +msgid "write_ansi_ibm_label called for non-ANSI/IBM type\n" msgstr "" -#: src/dird/ua_run.c:1252 -msgid "Job name specified twice.\n" +#: src/stored/vol_mgr.c:80 +#, c-format +msgid "Unable to initialize volume list lock. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:1260 -msgid "JobId specified twice.\n" +#: src/stored/vol_mgr.c:370 +#, c-format +msgid "Could not reserve volume \"%s\", because job canceled.\n" msgstr "" -#: src/dird/ua_run.c:1269 src/dird/ua_run.c:1409 -msgid "Client specified twice.\n" +#: src/stored/vol_mgr.c:381 +#, c-format +msgid "Could not reserve volume \"%s\" for append, because it will be read.\n" msgstr "" -#: src/dird/ua_run.c:1277 -msgid "FileSet specified twice.\n" +#: src/stored/vol_mgr.c:414 +#, c-format +msgid "Cannot free Volume \"%s\", because it is reserved by someone else.\n" msgstr "" -#: src/dird/ua_run.c:1285 -msgid "Level specified twice.\n" +#: src/stored/vol_mgr.c:512 +#, c-format +msgid "Volume %s is busy swapping from %s to %s\n" msgstr "" -#: src/dird/ua_run.c:1294 -msgid "Storage specified twice.\n" +#: src/stored/vol_mgr.c:515 +#, c-format +msgid "Volume %s is busy swapping.\n" msgstr "" -#: src/dird/ua_run.c:1302 -msgid "RegexWhere or Where specified twice.\n" +#: src/stored/vol_mgr.c:519 +#, c-format +msgid "%s device %s is busy.\n" msgstr "" -#: src/dird/ua_run.c:1307 -msgid "No authorization for \"regexwhere\" specification.\n" +#: src/stored/file_dev.c:148 +#, c-format +msgid "Could not open file device %s. No Volume name given.\n" msgstr "" -#: src/dird/ua_run.c:1314 -msgid "Where or RegexWhere specified twice.\n" -msgstr "" +#: src/stored/file_dev.c:171 +#, fuzzy, c-format +msgid "Could not open(%s,%s,0640): ERR=%s\n" +msgstr "Не вдалось відкрити%s: ERR=%s\n" -#: src/dird/ua_run.c:1319 -msgid "No authoriztion for \"where\" specification.\n" +#: src/stored/file_dev.c:204 +#, c-format +msgid "Unable to truncate device %s. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:1326 -msgid "Bootstrap specified twice.\n" +#: src/stored/file_dev.c:221 +#, c-format +msgid "Unable to stat device %s. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:1334 -msgid "Replace specified twice.\n" +#: src/stored/file_dev.c:235 +#, c-format +msgid "Device %s doesn't support ftruncate(). Recreating file %s.\n" msgstr "" -#: src/dird/ua_run.c:1342 -msgid "When specified twice.\n" +#: src/stored/file_dev.c:247 +#, c-format +msgid "Could not reopen: %s, ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:1350 -msgid "Priority specified twice.\n" +#: src/stored/lock.c:231 src/stored/lock.c:259 +#, c-format +msgid "pthread_cond_wait failure. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:1355 -msgid "Priority must be positive nonzero setting it to 10.\n" +#: src/stored/lock.c:475 +msgid "unknown blocked code" msgstr "" -#: src/dird/ua_run.c:1365 -msgid "Verify Job specified twice.\n" +#: src/stored/read.c:55 +msgid "No Volume names found for restore.\n" msgstr "" -#: src/dird/ua_run.c:1393 -msgid "Migration Job specified twice.\n" +#: src/stored/read.c:132 src/stored/read.c:250 +#, c-format +msgid ">filed: Error Hdr=%s\n" msgstr "" -#: src/dird/ua_run.c:1401 -msgid "Pool specified twice.\n" +#: src/stored/read.c:133 src/stored/read.c:166 src/stored/read.c:223 +#: src/stored/read.c:251 src/stored/read.c:266 +#, c-format +msgid "Error sending to File daemon. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:1417 -msgid "Restore Client specified twice.\n" +#: src/stored/read.c:165 src/stored/read.c:265 +#, c-format +msgid "Error sending to FD. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:1424 -msgid "Plugin Options not yet implemented.\n" +#: src/stored/autochanger.c:62 +#, c-format +msgid "No Changer Name given for device %s. Cannot continue.\n" msgstr "" -#: src/dird/ua_run.c:1427 -msgid "Plugin Options specified twice.\n" +#: src/stored/autochanger.c:68 +#, c-format +msgid "No Changer Command given for device %s. Cannot continue.\n" msgstr "" -#: src/dird/ua_run.c:1432 -msgid "No authoriztion for \"PluginOptions\" specification.\n" +#: src/stored/autochanger.c:137 +#, c-format +msgid "No slot defined in catalog (slot=%d) for Volume \"%s\" on %s.\n" msgstr "" -#: src/dird/ua_run.c:1439 -msgid "Spool flag specified twice.\n" +#: src/stored/autochanger.c:139 +msgid "Cartridge change or \"update slots\" may be required.\n" msgstr "" -#: src/dird/ua_run.c:1446 -msgid "Invalid spooldata flag.\n" +#: src/stored/autochanger.c:145 +#, c-format +msgid "No \"Changer Device\" for %s. Manual load of Volume may be required.\n" msgstr "" -#: src/dird/ua_run.c:1455 -msgid "IgnoreDuplicateCheck flag specified twice.\n" +#: src/stored/autochanger.c:152 +#, c-format +msgid "No \"Changer Command\" for %s. Manual load of Volume may be requird.\n" msgstr "" -#: src/dird/ua_run.c:1462 -msgid "Invalid ignoreduplicatecheck flag.\n" +#: src/stored/autochanger.c:186 +#, c-format +msgid "3304 Issuing autochanger \"load slot %d, drive %d\" command.\n" msgstr "" -#: src/dird/ua_run.c:1467 -msgid "Accurate flag specified twice.\n" +#: src/stored/autochanger.c:194 +#, c-format +msgid "3305 Autochanger \"load slot %d, drive %d\", status is OK.\n" msgstr "" -#: src/dird/ua_run.c:1474 -msgid "Invalid accurate flag.\n" +#: src/stored/autochanger.c:207 +#, c-format +msgid "" +"3992 Bad autochanger \"load slot %d, drive %d\": ERR=%s.\n" +"Results=%s\n" msgstr "" -#: src/dird/ua_run.c:1495 +#: src/stored/autochanger.c:270 #, c-format -msgid "Invalid keyword: %s\n" +msgid "3301 Issuing autochanger \"loaded? drive %d\" command.\n" msgstr "" -#: src/dird/ua_run.c:1510 +#: src/stored/autochanger.c:282 #, c-format -msgid "Catalog \"%s\" not found\n" +msgid "3302 Autochanger \"loaded? drive %d\", result is Slot %d.\n" msgstr "" -#: src/dird/ua_run.c:1514 +#: src/stored/autochanger.c:289 #, c-format -msgid "No authorization. Catalog \"%s\".\n" +msgid "3302 Autochanger \"loaded? drive %d\", result: nothing loaded.\n" msgstr "" -#: src/dird/ua_run.c:1525 +#: src/stored/autochanger.c:301 #, c-format -msgid "Job \"%s\" not found\n" +msgid "" +"3991 Bad autochanger \"loaded? drive %d\" command: ERR=%s.\n" +"Results=%s\n" msgstr "" -#: src/dird/ua_run.c:1532 -msgid "A job name must be specified.\n" -msgstr "" +#: src/stored/autochanger.c:321 +#, fuzzy, c-format +msgid "Lock failure on autochanger. ERR=%s\n" +msgstr "Проігноровано помилку SQL. ERR=%s\n" -#: src/dird/ua_run.c:1538 +#: src/stored/autochanger.c:335 #, c-format -msgid "No authorization. Job \"%s\".\n" +msgid "Unlock failure on autochanger. ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:1546 +#: src/stored/autochanger.c:382 src/stored/autochanger.c:548 #, c-format -msgid "Pool \"%s\" not found.\n" +msgid "3307 Issuing autochanger \"unload slot %d, drive %d\" command.\n" msgstr "" -#: src/dird/ua_run.c:1556 +#: src/stored/autochanger.c:395 #, c-format -msgid "No authorization. Pool \"%s\".\n" +msgid "" +"3995 Bad autochanger \"unload slot %d, drive %d\": ERR=%s\n" +"Results=%s\n" msgstr "" -#: src/dird/ua_run.c:1566 +#: src/stored/autochanger.c:498 #, c-format -msgid "Storage \"%s\" not found.\n" -msgstr "" - -#: src/dird/ua_run.c:1575 src/dird/job.c:1245 -msgid "No storage specified.\n" +msgid "Volume \"%s\" wanted on %s is in use by device %s\n" msgstr "" -#: src/dird/ua_run.c:1578 +#: src/stored/autochanger.c:565 #, c-format -msgid "No authorization. Storage \"%s\".\n" +msgid "3997 Bad autochanger \"unload slot %d, drive %d\": ERR=%s.\n" msgstr "" -#: src/dird/ua_run.c:1598 src/dird/ua_run.c:1618 +#: src/stored/autochanger.c:608 #, c-format -msgid "No authorization. Client \"%s\".\n" +msgid "3993 Device %s not an autochanger device.\n" msgstr "" -#: src/dird/ua_run.c:1608 +#: src/stored/autochanger.c:635 #, c-format -msgid "Restore Client \"%s\" not found.\n" +msgid "3306 Issuing autochanger \"%s\" command.\n" msgstr "" -#: src/dird/ua_run.c:1627 -#, c-format -msgid "FileSet \"%s\" not found.\n" +#: src/stored/autochanger.c:638 +msgid "3996 Open bpipe failed.\n" msgstr "" -#: src/dird/ua_run.c:1636 +#: src/stored/os.c:125 #, c-format -msgid "No authorization. FileSet \"%s\".\n" +msgid "Unable to set eotmodel on device %s: ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:1644 -#, c-format -msgid "Verify Job \"%s\" not found.\n" +#: src/stored/os.c:179 +msgid " Bacula status:" msgstr "" -#: src/dird/ua_run.c:1654 +#: src/stored/os.c:180 src/stored/os.c:263 src/stored/os.c:265 #, c-format -msgid "Migration Job \"%s\" not found.\n" +msgid " file=%d block=%d\n" msgstr "" -#: src/dird/dir_plugins.c:181 src/stored/sd_plugins.c:194 -#: src/filed/fd_plugins.c:1130 -#, c-format -msgid "Loaded plugin: %s\n" +#: src/stored/os.c:188 +msgid " Device status:" msgstr "" -#: src/dird/dir_plugins.c:201 src/stored/sd_plugins.c:214 -#: src/filed/fd_plugins.c:1151 +#: src/stored/os.c:364 #, c-format -msgid "Plugin magic wrong. Plugin=%s wanted=%s got=%s\n" +msgid "unknown func code %d" msgstr "" -#: src/dird/dir_plugins.c:209 src/stored/sd_plugins.c:222 -#: src/filed/fd_plugins.c:1159 +#: src/stored/os.c:370 #, c-format -msgid "Plugin version incorrect. Plugin=%s wanted=%d got=%d\n" +msgid "I/O function \"%s\" not supported on this device.\n" msgstr "" -#: src/dird/dir_plugins.c:218 src/stored/sd_plugins.c:231 -#: src/filed/fd_plugins.c:1167 +#: src/stored/read_records.c:77 #, c-format -msgid "Plugin license incompatible. Plugin=%s license=%s\n" +msgid "End of Volume at file %u on device %s, Volume \"%s\"\n" msgstr "" -#: src/dird/dir_plugins.c:226 src/stored/sd_plugins.c:239 -#: src/filed/fd_plugins.c:1175 -#, c-format -msgid "Plugin size incorrect. Plugin=%s wanted=%d got=%d\n" +#: src/stored/read_records.c:81 +msgid "End of all volumes.\n" msgstr "" -#: src/dird/backup.c:96 -msgid "No Storage specification found in Job or Pool.\n" +#: src/stored/read_records.c:131 +msgid "Did fsr in attemp to skip bad record.\n" msgstr "" -#: src/dird/backup.c:256 +#: src/stored/read_records.c:370 #, c-format -msgid "Using BaseJobId(s): %s\n" +msgid "Forward spacing Volume \"%s\" to file:block %u:%u.\n" msgstr "" -#: src/dird/backup.c:266 -msgid "Cannot find previous jobids.\n" +#: src/stored/read_records.c:394 +msgid "Begin Session" msgstr "" -#: src/dird/backup.c:275 -msgid "Sending Accurate information.\n" +#: src/stored/read_records.c:398 +msgid "End Session" msgstr "" -#: src/dird/backup.c:328 +#: src/stored/read_records.c:404 #, c-format -msgid "Start Backup JobId %s, Job=%s\n" +msgid "Unknown code %d\n" msgstr "" -#: src/dird/backup.c:521 +#: src/stored/parse_bsr.c:115 #, c-format -msgid "Unexpected Client Job message: %s\n" +msgid "Cannot open bootstrap file %s: %s\n" msgstr "" -#: src/dird/backup.c:534 +#: src/stored/parse_bsr.c:219 #, c-format -msgid "Network error with FD during %s: ERR=%s\n" +msgid "Device \"%s\" in bsr at inappropriate place.\n" msgstr "" -#: src/dird/backup.c:569 -msgid "No Job status returned from FD.\n" +#: src/stored/parse_bsr.c:282 +#, c-format +msgid "REGEX '%s' compile error. ERR=%s\n" msgstr "" -#: src/dird/backup.c:657 -msgid "Backup failed -- incomplete" +#: src/stored/parse_bsr.c:325 +msgid "JobType not yet implemented\n" msgstr "" -#: src/dird/backup.c:730 -#, c-format -msgid "" -"%s %s %s (%s):\n" -" Build OS: %s %s %s\n" -" JobId: %d\n" -" Job: %s\n" -" Backup Level: %s%s\n" -" Client: \"%s\" %s\n" -" FileSet: \"%s\" %s\n" -" Pool: \"%s\" (From %s)\n" -" Catalog: \"%s\" (From %s)\n" -" Storage: \"%s\" (From %s)\n" -" Scheduled time: %s\n" -" Start time: %s\n" -" End time: %s\n" -" Elapsed time: %s\n" -" Priority: %d\n" -" FD Files Written: %s\n" -" SD Files Written: %s\n" -" FD Bytes Written: %s (%sB)\n" -" SD Bytes Written: %s (%sB)\n" -" Rate: %.1f KB/s\n" -" Software Compression: %s\n" -"%s VSS: %s\n" -" Encryption: %s\n" -" Accurate: %s\n" -" Volume name(s): %s\n" -" Volume Session Id: %d\n" -" Volume Session Time: %d\n" -" Last Volume Bytes: %s (%sB)\n" -" Non-fatal FD errors: %d\n" -" SD Errors: %d\n" -" FD termination status: %s\n" -" SD termination status: %s\n" -" Termination: %s\n" -"\n" +#: src/stored/parse_bsr.c:333 +msgid "JobLevel not yet implemented\n" msgstr "" -#: src/dird/backup.c:832 +#: src/stored/parse_bsr.c:378 #, c-format -msgid "Could not get Job Volume Parameters to update Bootstrap file. ERR=%s\n" +msgid "MediaType %s in bsr at inappropriate place.\n" msgstr "" -#: src/dird/backup.c:868 +#: src/stored/parse_bsr.c:683 #, c-format -msgid "" -"Could not open WriteBootstrap file:\n" -"%s: ERR=%s\n" +msgid "Slot %d in bsr at inappropriate place.\n" msgstr "" -#: src/dird/restore.c:137 src/dird/msgchan.c:476 +#: src/stored/parse_bsr.c:707 #, c-format -msgid "Could not open bootstrap file %s: ERR=%s\n" +msgid "VolFile : %u-%u\n" msgstr "" -#: src/dird/restore.c:185 src/dird/restore.c:276 -#, fuzzy, c-format -msgid "Could not get storage resource '%s'.\n" -msgstr "Не вдалось відновити прапорці для файлу %s: ERR=%s\n" - -#: src/dird/restore.c:314 -#, fuzzy, c-format -msgid "Could not acquire read storage lock for \"%s\"" -msgstr "Не вдалось відновити прапорці для файлу %s: ERR=%s\n" - -#: src/dird/restore.c:505 -msgid "" -"Cannot restore without a bootstrap file.\n" -"You probably ran a restore job directly. All restore jobs must\n" -"be run using the restore command.\n" +#: src/stored/parse_bsr.c:715 +#, c-format +msgid "VolBlock : %u-%u\n" msgstr "" -#: src/dird/restore.c:513 +#: src/stored/parse_bsr.c:723 #, c-format -msgid "Start Restore Job %s\n" +msgid "VolAddr : %llu-%llu\n" msgstr "" -#: src/dird/restore.c:564 -msgid "Restore OK -- warning file count mismatch" +#: src/stored/parse_bsr.c:732 +#, c-format +msgid "FileIndex : %u\n" msgstr "" -#: src/dird/restore.c:566 -msgid "Restore OK" +#: src/stored/parse_bsr.c:734 +#, c-format +msgid "FileIndex : %u-%u\n" msgstr "" -#: src/dird/restore.c:570 -msgid "Restore OK -- with warnings" +#: src/stored/parse_bsr.c:744 +#, c-format +msgid "JobId : %u\n" msgstr "" -#: src/dird/restore.c:574 -msgid "*** Restore Error ***" +#: src/stored/parse_bsr.c:746 +#, c-format +msgid "JobId : %u-%u\n" msgstr "" -#: src/dird/restore.c:584 -msgid "Restore Canceled" +#: src/stored/parse_bsr.c:756 +#, c-format +msgid "SessId : %u\n" msgstr "" -#: src/dird/restore.c:611 +#: src/stored/parse_bsr.c:758 #, c-format -msgid "" -"%s %s %s (%s):\n" -" Build OS: %s %s %s\n" -" JobId: %d\n" -" Job: %s\n" -" Restore Client: %s\n" -" Start time: %s\n" -" End time: %s\n" -" Files Expected: %s\n" -" Files Restored: %s\n" -" Bytes Restored: %s\n" -" Rate: %.1f KB/s\n" -" FD Errors: %d\n" -" FD termination status: %s\n" -" SD termination status: %s\n" -" Termination: %s\n" -"\n" +msgid "SessId : %u-%u\n" msgstr "" -#: src/dird/ua_status.c:174 -msgid "Status available for:\n" +#: src/stored/parse_bsr.c:767 +#, c-format +msgid "VolumeName : %s\n" msgstr "" -#: src/dird/ua_status.c:180 -msgid "Select daemon type for status" +#: src/stored/parse_bsr.c:768 +#, c-format +msgid " MediaType : %s\n" msgstr "" -#: src/dird/ua_status.c:294 src/stored/status.c:248 +#: src/stored/parse_bsr.c:769 #, c-format -msgid "%s Version: %s (%s) %s %s %s\n" +msgid " Device : %s\n" msgstr "" -#: src/dird/ua_status.c:297 +#: src/stored/parse_bsr.c:770 #, c-format -msgid "Daemon started %s. Jobs: run=%d, running=%d mode=%d,%d\n" +msgid " Slot : %d\n" msgstr "" -#: src/dird/ua_status.c:300 src/stored/status.c:258 src/filed/status.c:142 +#: src/stored/parse_bsr.c:779 #, c-format -msgid " Heap: heap=%s smbytes=%s max_bytes=%s bufs=%s max_bufs=%s\n" +msgid "Client : %s\n" msgstr "" -#: src/dird/ua_status.c:358 +#: src/stored/parse_bsr.c:787 #, c-format -msgid "" -"\n" -"Failed to connect to Storage daemon %s.\n" -"====\n" +msgid "Job : %s\n" msgstr "" -#: src/dird/ua_status.c:400 +#: src/stored/parse_bsr.c:795 #, c-format -msgid "" -"Failed to connect to Client %s.\n" -"====\n" +msgid "SessTime : %u\n" msgstr "" -#: src/dird/ua_status.c:408 -msgid "Connected to file daemon\n" +#: src/stored/parse_bsr.c:806 +msgid "BSR is NULL\n" msgstr "" -#: src/dird/ua_status.c:428 -msgid "" -"\n" -"Scheduled Jobs:\n" +#: src/stored/parse_bsr.c:810 +#, c-format +msgid "Next : 0x%x\n" msgstr "" -#: src/dird/ua_status.c:429 -msgid "" -"Level Type Pri Scheduled Name Volume\n" +#: src/stored/parse_bsr.c:811 +#, c-format +msgid "Root bsr : 0x%x\n" msgstr "" -#: src/dird/ua_status.c:430 -msgid "===================================================================================\n" +#: src/stored/parse_bsr.c:823 +#, c-format +msgid "count : %u\n" msgstr "" -#: src/dird/ua_status.c:486 +#: src/stored/parse_bsr.c:824 #, c-format -msgid "%-14s\t%-8s\t%3d\t%-18s\t%-18s\t%s\n" +msgid "found : %u\n" msgstr "" -#: src/dird/ua_status.c:490 +#: src/stored/parse_bsr.c:827 #, c-format -msgid "%-14s %-8s %3d %-18s %-18s %s\n" +msgid "done : %s\n" msgstr "" -#: src/dird/ua_status.c:544 -msgid "Ignoring invalid value for days. Max is 500.\n" +#: src/stored/parse_bsr.c:827 src/dird/ua_run.c:173 src/dird/backup.c:916 +#: src/dird/backup.c:917 src/dird/backup.c:918 src/dird/ua_input.c:141 +#: src/dird/ua_update.c:245 src/dird/ua_update.c:265 src/dird/ua_update.c:687 +#: src/tools/dbcheck.c:1340 +msgid "yes" msgstr "" -#: src/dird/ua_status.c:587 -msgid "No Scheduled Jobs.\n" +#: src/stored/parse_bsr.c:827 src/dird/ua_run.c:176 src/dird/backup.c:916 +#: src/dird/backup.c:917 src/dird/backup.c:918 src/dird/ua_input.c:145 +#: src/dird/ua_update.c:245 src/dird/ua_update.c:265 src/dird/ua_update.c:687 +msgid "no" msgstr "" -#: src/dird/ua_status.c:604 src/stored/status.c:450 src/filed/status.c:183 -msgid "" -"\n" -"Running Jobs:\n" +#: src/stored/parse_bsr.c:828 +#, c-format +msgid "positioning : %d\n" msgstr "" -#: src/dird/ua_status.c:612 +#: src/stored/parse_bsr.c:829 #, c-format -msgid "Console connected at %s\n" +msgid "fast_reject : %d\n" msgstr "" -#: src/dird/ua_status.c:622 +#: src/stored/parse_bsr.c:1053 src/stored/parse_bsr.c:1057 +#, c-format msgid "" -"No Jobs running.\n" -"====\n" -msgstr "" - -#: src/dird/ua_status.c:628 -msgid " JobId Level Name Status\n" +"Bootstrap file error: %s\n" +" : Line %d, col %d of file %s\n" +"%s\n" msgstr "" -#: src/dird/ua_status.c:629 src/filed/status.c:342 -msgid "======================================================================\n" +#: src/stored/reserve.c:64 +#, c-format +msgid "Unable to initialize reservation lock. ERR=%s\n" msgstr "" -#: src/dird/ua_status.c:638 -msgid "is waiting execution" +#: src/stored/reserve.c:144 +#, c-format +msgid "Hey! num_writers=%d!!!!\n" msgstr "" -#: src/dird/ua_status.c:641 -msgid "is running" +#: src/stored/reserve.c:259 +msgid "3939 Could not get dcr\n" msgstr "" -#: src/dird/ua_status.c:644 -msgid "is blocked" +#: src/stored/reserve.c:368 +#, c-format +msgid "Device reservation failed for JobId=%d: %s\n" msgstr "" -#: src/dird/ua_status.c:647 -msgid "has terminated" +#: src/stored/reserve.c:377 +#, c-format +msgid "Failed command: %s\n" msgstr "" -#: src/dird/ua_status.c:650 -msgid "has terminated with warnings" +#: src/stored/reserve.c:662 +#, c-format +msgid "3926 Could not get dcr for device: %s\n" msgstr "" -#: src/dird/ua_status.c:653 -msgid "has erred" +#: src/stored/reserve.c:802 +#, c-format +msgid "3603 JobId=%u %s device %s is busy reading.\n" msgstr "" -#: src/dird/ua_status.c:656 -msgid "has errors" +#: src/stored/reserve.c:811 +#, c-format +msgid "3604 JobId=%u %s device %s is BLOCKED due to user unmount.\n" msgstr "" -#: src/dird/ua_status.c:659 -msgid "has a fatal error" +#: src/stored/reserve.c:859 +#, c-format +msgid "3601 JobId=%u %s device %s is BLOCKED due to user unmount.\n" msgstr "" -#: src/dird/ua_status.c:662 -msgid "has verify differences" +#: src/stored/reserve.c:867 +#, c-format +msgid "" +"3602 JobId=%u %s device %s is busy (already reading/writing). read=%d, " +"writers=%d reserved=%d\n" msgstr "" -#: src/dird/ua_status.c:665 -msgid "has been canceled" +#: src/stored/reserve.c:906 +#, c-format +msgid "3609 JobId=%u Max concurrent jobs=%d exceeded on %s device %s.\n" msgstr "" -#: src/dird/ua_status.c:670 -msgid "is waiting on Client" +#: src/stored/reserve.c:920 +#, c-format +msgid "3611 JobId=%u Volume max jobs=%d exceeded on %s device %s.\n" msgstr "" -#: src/dird/ua_status.c:672 +#: src/stored/reserve.c:945 #, c-format -msgid "is waiting on Client %s" +msgid "" +"3608 JobId=%u wants Pool=\"%s\" but have Pool=\"%s\" nreserve=%d on %s " +"device %s.\n" msgstr "" -#: src/dird/ua_status.c:680 src/dird/ua_status.c:682 -#, fuzzy, c-format -msgid "is waiting on Storage \"%s\"" -msgstr "Від'єднуюсь від Зберігача %s:%d\n" - -#: src/dird/ua_status.c:684 -msgid "is waiting on Storage" +#: src/stored/reserve.c:997 +#, c-format +msgid "3605 JobId=%u wants free drive but %s device %s is busy.\n" msgstr "" -#: src/dird/ua_status.c:690 -msgid "is waiting on max Storage jobs" +#: src/stored/reserve.c:1006 +#, c-format +msgid "3606 JobId=%u prefers mounted drives, but %s device %s has no Volume.\n" msgstr "" -#: src/dird/ua_status.c:693 -msgid "is waiting on max Client jobs" +#: src/stored/reserve.c:1028 +#, c-format +msgid "3607 JobId=%u wants Vol=\"%s\" drive has Vol=\"%s\" on %s device %s.\n" msgstr "" -#: src/dird/ua_status.c:696 -msgid "is waiting on max Job jobs" +#: src/stored/reserve.c:1083 +#, c-format +msgid "Logic error!!!! JobId=%u Should not get here.\n" msgstr "" -#: src/dird/ua_status.c:699 -msgid "is waiting on max total jobs" +#: src/stored/reserve.c:1084 +#, c-format +msgid "3910 JobId=%u Logic error!!!! %s device %s Should not get here.\n" msgstr "" -#: src/dird/ua_status.c:702 -msgid "is waiting for its start time" +#: src/stored/reserve.c:1087 +msgid "Logic error!!!! Should not get here.\n" msgstr "" -#: src/dird/ua_status.c:705 -msgid "is waiting for higher priority jobs to finish" +#: src/stored/reserve.c:1090 +#, c-format +msgid "3911 JobId=%u failed reserve %s device %s.\n" msgstr "" -#: src/dird/ua_status.c:708 src/dird/ua_status.c:759 src/lib/util.c:241 -msgid "SD committing Data" +#: src/stored/status.c:85 +msgid "Used Volume status:\n" msgstr "" -#: src/dird/ua_status.c:711 src/dird/ua_status.c:762 src/lib/util.c:244 -msgid "SD despooling Data" +#: src/stored/status.c:103 +msgid "" +"\n" +"SD Resources:\n" msgstr "" -#: src/dird/ua_status.c:714 src/dird/ua_status.c:765 src/lib/util.c:247 -msgid "SD despooling Attributes" +#: src/stored/status.c:139 +msgid "" +"\n" +"Device status:\n" msgstr "" -#: src/dird/ua_status.c:717 src/dird/ua_status.c:768 src/lib/util.c:250 -msgid "Dir inserting Attributes" +#: src/stored/status.c:143 +#, c-format +msgid "Autochanger \"%s\" with devices:\n" msgstr "" -#: src/dird/ua_status.c:722 +#: src/stored/status.c:163 #, c-format -msgid "is in unknown state %c" +msgid "" +"\n" +"Device %s is %s:\n" +" Volume: %s\n" +" Pool: %s\n" +" Media type: %s\n" msgstr "" -#: src/dird/ua_status.c:736 -msgid "is waiting for a mount request" +#: src/stored/status.c:168 +msgid "waiting for" msgstr "" -#: src/dird/ua_status.c:743 -msgid "is waiting for an appendable Volume" +#: src/stored/status.c:168 +msgid "mounted with" msgstr "" -#: src/dird/ua_status.c:751 -msgid "is waiting for Client to connect to Storage daemon" +#: src/stored/status.c:170 +msgid "*unknown*" msgstr "" -#: src/dird/ua_status.c:753 +#: src/stored/status.c:174 #, c-format -msgid "is waiting for Client %s to connect to Storage %s" +msgid "" +"\n" +"Device %s open but no Bacula volume is currently mounted.\n" msgstr "" -#: src/dird/ua_status.c:784 +#: src/stored/status.c:185 #, c-format -msgid "%6d\t%-6s\t%-20s\t%s\t%s\n" +msgid " Total Bytes=%s Blocks=%s Bytes/block=%s\n" msgstr "" -#: src/dird/ua_status.c:788 +#: src/stored/status.c:200 #, c-format -msgid "%6d %-6s %-20s %s\n" +msgid " Total Bytes Read=%s Blocks Read=%s Bytes/block=%s\n" msgstr "" -#: src/dird/ua_status.c:792 +#: src/stored/status.c:206 #, c-format -msgid " %-30s\n" -msgstr "" - -#: src/dird/ua_status.c:812 -msgid "No Terminated Jobs.\n" +msgid " Positioned at File=%s Block=%s\n" msgstr "" -#: src/dird/ua_status.c:818 src/stored/status.c:572 src/filed/status.c:330 +#: src/stored/status.c:213 +#, c-format msgid "" "\n" -"Terminated Jobs:\n" +"Device %s is not open.\n" msgstr "" -#: src/dird/ua_status.c:819 src/stored/status.c:579 src/filed/status.c:340 -msgid " JobId Level Files Bytes Status Finished Name \n" +#: src/stored/status.c:217 +#, c-format +msgid "" +"\n" +"Device \"%s\" is not open or does not exist.\n" msgstr "" -#: src/dird/ua_status.c:820 -msgid "====================================================================\n" +#: src/stored/status.c:234 src/dird/ua_status.c:294 +#, c-format +msgid "%s Version: %s (%s) %s %s %s\n" msgstr "" -#: src/dird/ua_status.c:852 src/stored/status.c:601 src/lib/util.c:180 -#: src/filed/status.c:363 -msgid "Created" +#: src/stored/status.c:241 +#, c-format +msgid "Daemon started %s. Jobs: run=%d, running=%d.\n" msgstr "" -#: src/dird/ua_status.c:856 src/stored/status.c:605 src/lib/util.c:196 -#: src/lib/util.c:331 src/lib/util.c:478 src/filed/status.c:367 -msgid "Error" +#: src/stored/status.c:244 src/dird/ua_status.c:300 src/filed/status.c:136 +#, c-format +msgid " Heap: heap=%s smbytes=%s max_bytes=%s bufs=%s max_bufs=%s\n" msgstr "" -#: src/dird/ua_status.c:859 src/stored/status.c:608 src/filed/status.c:370 -msgid "Diffs" +#: src/stored/status.c:279 +msgid "" +"No DEVICE structure.\n" +"\n" msgstr "" -#: src/dird/ua_status.c:865 src/stored/status.c:614 src/stored/btape.c:1523 -#: src/lib/util.c:189 src/lib/util.c:324 src/filed/status.c:376 -#: src/wx-console/wxbconfigpanel.cpp:209 -msgid "OK" +#: src/stored/status.c:285 +msgid " Device is BLOCKED. User unmounted.\n" msgstr "" -#: src/dird/ua_status.c:868 src/stored/status.c:617 src/lib/util.c:202 -#: src/lib/util.c:327 -msgid "OK -- with warnings" +#: src/stored/status.c:289 +msgid " Device is BLOCKED. User unmounted during wait for media/mount.\n" msgstr "" -#: src/dird/ua_status.c:871 src/stored/status.c:620 src/filed/status.c:379 -msgid "Other" +#: src/stored/status.c:300 +#, c-format +msgid "" +" Device is BLOCKED waiting for mount of volume \"%s\",\n" +" Pool: %s\n" +" Media type: %s\n" msgstr "" -#: src/dird/ua_status.c:875 src/stored/status.c:632 src/filed/status.c:391 +#: src/stored/status.c:309 #, c-format -msgid "%6d\t%-6s\t%8s\t%10s\t%-7s\t%-8s\t%s\n" +msgid "" +" Device is BLOCKED waiting to create a volume for:\n" +" Pool: %s\n" +" Media type: %s\n" msgstr "" -#: src/dird/ua_status.c:883 src/stored/status.c:640 src/filed/status.c:399 -#, c-format -msgid "%6d %-6s %8s %10s %-7s %-8s %s\n" +#: src/stored/status.c:321 +msgid " Device is BLOCKED waiting for media.\n" msgstr "" -#: src/dird/ua_status.c:892 -msgid "\n" +#: src/stored/status.c:327 +msgid " Device is being initialized.\n" msgstr "" -#: src/dird/ua_input.c:103 -msgid "Enter slot" +#: src/stored/status.c:331 +msgid " Device is blocked labeling a Volume.\n" msgstr "" -#: src/dird/ua_input.c:107 src/dird/ua_input.c:113 +#: src/stored/status.c:340 #, c-format -msgid "Expected a positive integer, got: %s\n" +msgid " Slot %d %s loaded in drive %d.\n" msgstr "" -#: src/dird/ua_input.c:170 -msgid "Invalid response. You must answer yes or no.\n" +#: src/stored/status.c:344 +#, c-format +msgid " Drive %d is not loaded.\n" msgstr "" -#: src/dird/ua_input.c:193 -msgid "Invalid Enabled value, it must be yes, no, archived, 0, 1, or 2\n" +#: src/stored/status.c:379 +msgid "Device state:\n" msgstr "" -#: src/dird/ua_input.c:220 -#, fuzzy, c-format -msgid "Illegal character \"%c\" in a comment.\n" -msgstr "Заборонені символи у назві Тому \"%s\"\n" - -#: src/dird/ua_input.c:227 -msgid "Comment too long.\n" +#: src/stored/status.c:395 +#, c-format +msgid " num_writers=%d reserves=%d block=%d\n" msgstr "" -#: src/dird/ua_input.c:233 -msgid "Comment must be at least one character long.\n" +#: src/stored/status.c:399 +msgid "Attached JobsIds: " msgstr "" -#: src/dird/pythondir.c:121 src/stored/pythonsd.c:101 -#: src/stored/pythonsd.c:166 src/filed/pythonfd.c:94 src/filed/pythonfd.c:148 -#: src/filed/pythonfd.c:212 -msgid "Job pointer not found." +#: src/stored/status.c:419 +#, c-format +msgid " Archive name: %s Device name: %s\n" msgstr "" -#: src/dird/pythondir.c:153 -msgid "Pool record not found." +#: src/stored/status.c:422 +#, c-format +msgid " File=%u block=%u\n" msgstr "" -#: src/dird/pythondir.c:209 src/stored/pythonsd.c:143 src/filed/pythonfd.c:125 +#: src/stored/status.c:424 #, c-format -msgid "Attribute %s not found." +msgid " Min block=%u Max block=%u\n" msgstr "" -#: src/dird/pythondir.c:252 src/dird/pythondir.c:258 src/stored/pythonsd.c:183 -#: src/filed/pythonfd.c:167 -msgid "Read-only attribute" +#: src/stored/status.c:440 src/dird/ua_status.c:818 src/filed/status.c:188 +msgid "" +"\n" +"Running Jobs:\n" msgstr "" -#: src/dird/pythondir.c:284 -msgid "Priority must be 1-100" +#: src/stored/status.c:445 +#, c-format +msgid "%s Job %s waiting for Client connection.\n" msgstr "" -#: src/dird/pythondir.c:289 -msgid "Job Level can be set only during JobInit" +#: src/stored/status.c:461 +#, c-format +msgid "" +"Reading: %s %s job %s JobId=%d Volume=\"%s\"\n" +" pool=\"%s\" device=%s\n" msgstr "" -#: src/dird/pythondir.c:303 -msgid "Bad JobLevel string" +#: src/stored/status.c:474 +#, c-format +msgid "" +"Writing: %s %s job %s JobId=%d Volume=\"%s\"\n" +" pool=\"%s\" device=%s\n" msgstr "" -#: src/dird/job.c:62 +#: src/stored/status.c:485 #, c-format -msgid "Could not init job queue: ERR=%s\n" +msgid " spooling=%d despooling=%d despool_wait=%d\n" msgstr "" -#: src/dird/job.c:94 +#: src/stored/status.c:501 #, c-format -msgid "Could not add job queue: ERR=%s\n" +msgid " Files=%s Bytes=%s AveBytes/sec=%s LastBytes/sec=%s\n" msgstr "" -#: src/dird/job.c:183 src/dird/job.c:433 src/dird/job.c:435 src/dird/job.c:485 -#: src/dird/job.c:487 src/dird/job.c:1129 src/dird/job.c:1170 -#: src/dird/job.c:1179 -msgid "Job resource" +#: src/stored/status.c:513 +#, c-format +msgid " FDReadSeqNo=%s in_msg=%u out_msg=%d fd=%d\n" msgstr "" -#: src/dird/job.c:230 src/dird/job.c:349 -#, c-format -msgid "Unimplemented job type: %d\n" +#: src/stored/status.c:519 +msgid " FDSocket closed\n" msgstr "" -#: src/dird/job.c:272 -msgid "Job canceled because max start delay time exceeded.\n" +#: src/stored/status.c:528 src/dird/ua_select.c:1211 src/filed/status.c:278 +msgid "No Jobs running.\n" msgstr "" -#: src/dird/job.c:277 -msgid "Job canceled because max run sched time exceeded.\n" +#: src/stored/status.c:540 +msgid "" +"\n" +"Jobs waiting to reserve a drive:\n" msgstr "" -#: src/dird/job.c:403 +#: src/stored/status.c:604 #, c-format -msgid "JobId %s, Job %s marked to be canceled.\n" +msgid "3900 No arg in .status command: %s\n" msgstr "" -#: src/dird/job.c:413 -msgid "Failed to connect to File daemon.\n" +#: src/stored/status.c:652 +#, fuzzy, c-format +msgid "3900 Unknown arg in .status command: %s\n" +msgstr "Невідомий статус задачі %c. " + +#: src/stored/status.c:667 +msgid "Bacula Storage: Idle" msgstr "" -#: src/dird/job.c:548 -msgid "Max wait time exceeded. Job canceled.\n" +#: src/stored/status.c:678 +msgid "Bacula Storage: Running" msgstr "" -#: src/dird/job.c:553 -msgid "Max run time exceeded. Job canceled.\n" +#: src/stored/status.c:692 +msgid "Bacula Storage: Last Job Canceled" msgstr "" -#: src/dird/job.c:558 -msgid "Max run sched time exceeded. Job canceled.\n" +#: src/stored/status.c:696 +msgid "Bacula Storage: Last Job Failed" msgstr "" -#: src/dird/job.c:680 +#: src/stored/status.c:700 +msgid "Bacula Storage: Last Job had Warnings" +msgstr "" + +#: src/stored/sd_plugins.c:220 src/dird/dir_plugins.c:169 +#: src/filed/fd_plugins.c:1125 #, c-format -msgid "Pool \"%s\" not in database. ERR=%s" +msgid "Loaded plugin: %s\n" msgstr "" -#: src/dird/job.c:684 +#: src/stored/sd_plugins.c:240 src/dird/dir_plugins.c:189 +#: src/filed/fd_plugins.c:1146 #, c-format -msgid "Created database record for Pool \"%s\".\n" +msgid "Plugin magic wrong. Plugin=%s wanted=%s got=%s\n" msgstr "" -#: src/dird/job.c:766 src/dird/job.c:809 +#: src/stored/sd_plugins.c:248 src/dird/dir_plugins.c:197 +#: src/filed/fd_plugins.c:1154 #, c-format -msgid "JobId %d already running. Duplicate job not allowed.\n" +msgid "Plugin version incorrect. Plugin=%s wanted=%d got=%d\n" msgstr "" -#: src/dird/job.c:797 +#: src/stored/sd_plugins.c:257 src/dird/dir_plugins.c:206 +#: src/filed/fd_plugins.c:1162 #, c-format -msgid "Cancelling duplicate JobId=%d.\n" +msgid "Plugin license incompatible. Plugin=%s license=%s\n" msgstr "" -#: src/dird/job.c:828 src/dird/job.c:1116 -msgid "Run pool override" +#: src/stored/sd_plugins.c:265 src/dird/dir_plugins.c:214 +#: src/filed/fd_plugins.c:1170 +#, c-format +msgid "Plugin size incorrect. Plugin=%s wanted=%d got=%d\n" msgstr "" -#: src/dird/job.c:839 -msgid "Run FullPool override" +#: src/lib/sellist.c:57 +msgid "Negative numbers not permitted.\n" msgstr "" -#: src/dird/job.c:841 -msgid "Job FullPool override" +#: src/lib/sellist.c:64 src/dird/ua_label.c:98 +msgid "Range end is not integer.\n" msgstr "" -#: src/dird/job.c:850 -msgid "Run IncPool override" +#: src/lib/sellist.c:69 src/dird/ua_label.c:103 +msgid "Range start is not an integer.\n" msgstr "" -#: src/dird/job.c:852 -msgid "Job IncPool override" +#: src/lib/sellist.c:75 src/dird/ua_label.c:109 +msgid "Range end not bigger than start.\n" msgstr "" -#: src/dird/job.c:861 -msgid "Run DiffPool override" +#: src/lib/sellist.c:83 +#, fuzzy +msgid "User cancel requested.\n" +msgstr "Статус задачі: Відмінена" + +#: src/lib/sellist.c:93 src/dird/ua_label.c:115 +msgid "Input value is not an integer.\n" msgstr "" -#: src/dird/job.c:863 -msgid "Job DiffPool override" +#: src/lib/sellist.c:105 +msgid "Selection items must be be greater than zero.\n" msgstr "" -#: src/dird/job.c:893 src/stored/bscan.c:1056 -#, c-format -msgid "Could not create Client record. ERR=%s\n" +#: src/lib/sellist.c:109 +msgid "Selection item too large.\n" msgstr "" -#: src/dird/job.c:929 -msgid "FileSet MD5 digest not found.\n" -msgstr "Не знайдено відбиток MD5 Набору Файлів.\n" +#: src/lib/sellist.c:211 +msgid "No input string given.\n" +msgstr "" -#: src/dird/job.c:934 +#: src/lib/plugins.c:105 #, c-format -msgid "Could not create FileSet \"%s\" record. ERR=%s\n" +msgid "Failed to open Plugin directory %s: ERR=%s\n" msgstr "" -#: src/dird/job.c:976 +#: src/lib/plugins.c:122 #, c-format -msgid "Error updating job record. %s" +msgid "Failed to find any plugins in %s\n" msgstr "" -#: src/dird/job.c:1121 -msgid "Run storage override" -msgstr "" +#: src/lib/plugins.c:156 +#, fuzzy, c-format +msgid "dlopen plugin %s failed: ERR=%s\n" +msgstr "Помилка у %s файл %s: ERR=%s\n" -#: src/dird/job.c:1189 -msgid "Client resource" +#: src/lib/plugins.c:167 +#, c-format +msgid "Lookup of loadPlugin in plugin %s failed: ERR=%s\n" msgstr "" -#: src/dird/job.c:1406 +#: src/lib/plugins.c:176 #, c-format -msgid "Could not start clone job: \"%s\".\n" +msgid "Lookup of unloadPlugin in plugin %s failed: ERR=%s\n" msgstr "" -#: src/dird/job.c:1409 +#: src/lib/bnet.c:127 #, c-format -msgid "Clone JobId %d started.\n" +msgid "Attr spool write error. wrote=%d wanted=%d bytes. ERR=%s\n" msgstr "" -#: src/dird/authenticate.c:83 src/dird/authenticate.c:84 -#: src/tray-monitor/authenticate.c:132 -#: src/qt-console/tray-monitor/authenticate.cpp:131 -#, c-format -msgid "Error sending Hello to Storage daemon. ERR=%s\n" -msgstr "Не вдалося надіслати Hello до Зберігача. ERR=%s\n" +#: src/lib/bnet.c:212 src/lib/bnet.c:253 +msgid "TLS connection initialization failed.\n" +msgstr "" -#: src/dird/authenticate.c:113 -msgid "Director and Storage daemon passwords or names not the same.\n" +#: src/lib/bnet.c:220 +msgid "TLS Negotiation failed.\n" msgstr "" -#: src/dird/authenticate.c:115 -#, c-format +#: src/lib/bnet.c:226 src/lib/bnet.c:268 msgid "" -"Director unable to authenticate with Storage daemon at \"%s:%d\". Possible " -"causes:\n" -"Passwords or names not the same or\n" -"Maximum Concurrent Jobs exceeded on the SD or\n" -"SD networking messed up (restart daemon).\n" -"Please see " +"TLS certificate verification failed. Peer certificate did not match a " +"required commonName\n" msgstr "" -#: src/dird/authenticate.c:127 src/wx-console/authenticate.c:127 -#: src/console/authenticate.c:122 +#: src/lib/bnet.c:277 +#, c-format msgid "" -"Authorization problem: Remote server did not advertise required TLS " -"support.\n" +"TLS host certificate verification failed. Host name \"%s\" did not match " +"presented certificate\n" msgstr "" -"Проблеми авторизації: Віддалений сервер не повідомив про необхідність " -"використання TLS.\n" -#: src/dird/authenticate.c:134 src/stored/authenticate.c:146 -#: src/stored/authenticate.c:257 src/wx-console/authenticate.c:133 -#: src/console/authenticate.c:129 src/filed/authenticate.c:160 -#: src/filed/authenticate.c:279 -msgid "Authorization problem: Remote server requires TLS.\n" -msgstr "Проблеми авторизації: Віддалений сервер вимагає використання TLS.\n" +#: src/lib/bnet.c:294 +msgid "TLS enabled but not configured.\n" +msgstr "" -#: src/dird/authenticate.c:143 -#, c-format -msgid "TLS negotiation failed with SD at \"%s:%d\"\n" +#: src/lib/bnet.c:300 +msgid "TLS enable but not configured.\n" msgstr "" -#: src/dird/authenticate.c:155 -#, c-format -msgid "bdird set configuration file to file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -t test - read configuration and exit\n" -" -? print this message.\n" -"\n" +#: src/lib/util.c:171 +msgid "Running" msgstr "" -"Автор Nicolas Boichat (2004)\n" -"\n" -"Версія: %s (%s) %s %s %s\n" -"\n" -"Використання: tray-monitor [-c config_file] [-d debug_level]\n" -" -c задати конфігураційний файл \n" -" -d встановити рівень відлагоджування у \n" -" -dt виводити часову мітку у даних відлагоджування\n" -" -t перевірка - прогитати конфігурацію і завершити\n" -" -? показати це повідомлення.\n" -"\n" -#: src/tray-monitor/tray-monitor.c:270 -#: src/qt-console/tray-monitor/tray-monitor.cpp:216 -#, c-format -msgid "" -"Error: %d Monitor resources defined in %s. You must define one and only one " -"Monitor resource.\n" +#: src/lib/util.c:174 +msgid "Blocked" msgstr "" -"Помилка: %d ресурсів Спостерігача визначено у %s. Ви повинні визначити одині " -"тільки один ресурс Спостерігача.\n" -#: src/tray-monitor/tray-monitor.c:301 -#: src/qt-console/tray-monitor/tray-monitor.cpp:248 -#, c-format -msgid "" -"No Client, Storage or Director resource defined in %s\n" -"Without that I don't how to get status from the File, Storage or Director " -"Daemon :-(\n" +#: src/lib/util.c:181 src/lib/util.c:316 src/lib/util.c:463 +#: src/dird/ua_status.c:1084 src/lib/status.h:106 +msgid "Error" msgstr "" -"У %s не визначено жодного ресурсу Клієнту, Зберігача або Керівника\n" -"Без цього я не знаю як отримати статус Зберігача, Збирача або Керівника\n" -#: src/tray-monitor/tray-monitor.c:323 -#: src/qt-console/tray-monitor/tray-monitor.cpp:263 -#, c-format -msgid "" -"Invalid refresh interval defined in %s\n" -"This value must be greater or equal to 1 second and less or equal to 10 " -"minutes (read value: %d).\n" +#: src/lib/util.c:184 +msgid "Non-fatal error" msgstr "" -"Задано поганий інтервал оновлення у %s\n" -"Це значення повинно бути не меньше 1 секунди та не більше 10 хвилин " -"(теперішнє значення: %d).\n" - -#: src/tray-monitor/tray-monitor.c:330 -msgid "Bacula daemon status monitor" -msgstr "Монітор статусу демонів Bacula" - -#: src/tray-monitor/tray-monitor.c:339 -msgid "Open status window..." -msgstr "Відкрити вікно статусу" - -#: src/tray-monitor/tray-monitor.c:345 -msgid "Exit" -msgstr "Закінчити" -#: src/tray-monitor/tray-monitor.c:357 -msgid "Bacula tray monitor" +#: src/lib/util.c:187 src/lib/util.c:312 src/dird/ua_status.c:1096 +#: src/lib/status.h:118 +msgid "OK -- with warnings" msgstr "" -#: src/tray-monitor/tray-monitor.c:382 -msgid " (DIR)" -msgstr "Керівник" - -#: src/tray-monitor/tray-monitor.c:386 -msgid " (FD)" -msgstr "Збирач" +#: src/lib/util.c:190 src/lib/util.c:322 +msgid "Canceled" +msgstr "" -#: src/tray-monitor/tray-monitor.c:390 -msgid " (SD)" -msgstr "(Зберігач)" +#: src/lib/util.c:193 +msgid "Verify differences" +msgstr "" -#: src/tray-monitor/tray-monitor.c:403 -msgid "Unknown status." -msgstr "Невідомий статус" +#: src/lib/util.c:196 +msgid "Waiting on FD" +msgstr "" -#: src/tray-monitor/tray-monitor.c:477 -msgid "Refresh interval in seconds: " -msgstr "Інтервал оновлення у секундах" +#: src/lib/util.c:199 +msgid "Wait on SD" +msgstr "" -#: src/tray-monitor/tray-monitor.c:485 -msgid "Refresh now" -msgstr "Оновити зараз" +#: src/lib/util.c:202 +msgid "Wait for new Volume" +msgstr "" -#: src/tray-monitor/tray-monitor.c:489 -msgid "About" -msgstr "Про..." +#: src/lib/util.c:205 +msgid "Waiting for mount" +msgstr "" -#: src/tray-monitor/tray-monitor.c:493 -msgid "Close" -msgstr "Зачинити" +#: src/lib/util.c:208 +msgid "Waiting for Storage resource" +msgstr "" -#: src/tray-monitor/tray-monitor.c:513 -#, c-format -msgid "Disconnecting from Director %s:%d\n" -msgstr "Від'єднуюсь від Керівника %s:%d\n" +#: src/lib/util.c:211 +msgid "Waiting for Job resource" +msgstr "" -#: src/tray-monitor/tray-monitor.c:516 -#, c-format -msgid "Disconnecting from Client %s:%d\n" -msgstr "Від'єднуюсь від Клієнта %s:%d\n" +#: src/lib/util.c:214 +msgid "Waiting for Client resource" +msgstr "" -#: src/tray-monitor/tray-monitor.c:519 -#, c-format -msgid "Disconnecting from Storage %s:%d\n" -msgstr "Від'єднуюсь від Зберігача %s:%d\n" +#: src/lib/util.c:217 +msgid "Waiting on Max Jobs" +msgstr "" -#: src/tray-monitor/tray-monitor.c:560 src/tray-monitor/tray-monitor.c:571 -msgid "Bacula Tray Monitor" +#: src/lib/util.c:220 +msgid "Waiting for Start Time" msgstr "" -#: src/tray-monitor/tray-monitor.c:562 src/tray-monitor/tray-monitor.c:573 -msgid "Written by Nicolas Boichat\n" +#: src/lib/util.c:223 +msgid "Waiting on Priority" msgstr "" -#: src/tray-monitor/tray-monitor.c:563 src/tray-monitor/tray-monitor.c:574 -msgid "Version" -msgstr "Версія" +#: src/lib/util.c:226 src/dird/ua_status.c:931 src/dird/ua_status.c:982 +msgid "SD committing Data" +msgstr "" -#: src/tray-monitor/tray-monitor.c:656 -#: src/qt-console/tray-monitor/tray-monitor.cpp:331 -#, c-format -msgid "Error, currentitem is not a Client or a Storage..\n" -msgstr "Помилка. Поточний пункт не є Клієнтом або Зберігачем.\n" +#: src/lib/util.c:229 src/dird/ua_status.c:934 src/dird/ua_status.c:985 +msgid "SD despooling Data" +msgstr "" -#: src/tray-monitor/tray-monitor.c:730 -#, c-format -msgid "" -"Current job: %s\n" -"Last job: %s" +#: src/lib/util.c:232 src/dird/ua_status.c:937 src/dird/ua_status.c:988 +msgid "SD despooling Attributes" msgstr "" -"Поточна задача: %s\n" -"Остання задача: %s" -#: src/tray-monitor/tray-monitor.c:742 -#, c-format -msgid " (%d errors)" -msgstr " (%d помилок)" +#: src/lib/util.c:235 src/dird/ua_status.c:940 src/dird/ua_status.c:991 +msgid "Dir inserting Attributes" +msgstr "" -#: src/tray-monitor/tray-monitor.c:745 +#: src/lib/util.c:242 #, c-format -msgid " (%d error)" -msgstr " (%d помилка)" - -#: src/tray-monitor/tray-monitor.c:783 -msgid "No current job." -msgstr "Задачі відсутні" +msgid "Unknown Job termination status=%d" +msgstr "" -#: src/tray-monitor/tray-monitor.c:786 -msgid "No last job." -msgstr "Останні задачі відсутні" +#: src/lib/util.c:258 +msgid "Completed successfully" +msgstr "" -#: src/tray-monitor/tray-monitor.c:794 -msgid "Job status: Created" -msgstr "Статус задачі: Створена" +#: src/lib/util.c:261 +msgid "Completed with warnings" +msgstr "" -#: src/tray-monitor/tray-monitor.c:799 -msgid "Job status: Running" -msgstr "Статус задачі: Працює" +#: src/lib/util.c:264 +msgid "Terminated with errors" +msgstr "" -#: src/tray-monitor/tray-monitor.c:803 -msgid "Job status: Blocked" -msgstr "Статус задачі: Заблокована" +#: src/lib/util.c:267 +msgid "Fatal error" +msgstr "" -#: src/tray-monitor/tray-monitor.c:808 -msgid "Job status: Terminated" -msgstr "Статус задачі: Виконана" +#: src/lib/util.c:270 +msgid "Created, not yet running" +msgstr "" -#: src/tray-monitor/tray-monitor.c:813 -msgid "Job status: Terminated in error" -msgstr "Статус задачі: Виконана із помилками" +#: src/lib/util.c:273 +msgid "Canceled by user" +msgstr "" -#: src/tray-monitor/tray-monitor.c:819 -msgid "Job status: Error" -msgstr "Статус задачі: Помилка" +#: src/lib/util.c:276 +msgid "Verify found differences" +msgstr "" -#: src/tray-monitor/tray-monitor.c:823 -msgid "Job status: Fatal error" -msgstr "Статус задачі: Ватальна помилка" +#: src/lib/util.c:279 +msgid "Waiting for File daemon" +msgstr "" -#: src/tray-monitor/tray-monitor.c:828 -msgid "Job status: Verify differences" -msgstr "Статус задачі: Паревірка різниць" +#: src/lib/util.c:282 +msgid "Waiting for Storage daemon" +msgstr "" -#: src/tray-monitor/tray-monitor.c:833 -msgid "Job status: Canceled" -msgstr "Статус задачі: Відмінена" +#: src/lib/util.c:285 +msgid "Waiting for higher priority jobs" +msgstr "" -#: src/tray-monitor/tray-monitor.c:838 -msgid "Job status: Waiting on File daemon" -msgstr "Статус задачі: Очікування Збирача" +#: src/lib/util.c:288 +msgid "Batch inserting file records" +msgstr "" -#: src/tray-monitor/tray-monitor.c:843 -msgid "Job status: Waiting on the Storage daemon" -msgstr "Статус задачі: Очікування Зберігача" +#: src/lib/util.c:319 +msgid "Fatal Error" +msgstr "" -#: src/tray-monitor/tray-monitor.c:848 -msgid "Job status: Waiting for new media" -msgstr "Статус задачі: Очікування нового носія" +#: src/lib/util.c:325 +msgid "Differences" +msgstr "" -#: src/tray-monitor/tray-monitor.c:853 -msgid "Job status: Waiting for Mount" -msgstr "Статус задачі: Очікування монтування" +#: src/lib/util.c:328 +msgid "Unknown term code" +msgstr "" -#: src/tray-monitor/tray-monitor.c:858 -msgid "Job status: Waiting for storage resource" -msgstr "Статус задачі: Очікування ресурсу зберігання" +#: src/lib/util.c:344 src/lib/jcr.c:220 +msgid "Backup" +msgstr "" -#: src/tray-monitor/tray-monitor.c:863 -msgid "Job status: Waiting for job resource" -msgstr "Статус задачі: Очікування ресурсу задачі" +#: src/lib/util.c:347 +msgid "Migrated Job" +msgstr "" -#: src/tray-monitor/tray-monitor.c:868 -msgid "Job status: Waiting for Client resource" -msgstr "Статус задачі: Очікування ресурсу Слієнту" +#: src/lib/util.c:350 +msgid "Verify" +msgstr "" -#: src/tray-monitor/tray-monitor.c:873 -msgid "Job status: Waiting for maximum jobs" -msgstr "Статус задачі: Очікування кількості задач" +#: src/lib/util.c:353 +msgid "Restore" +msgstr "" -#: src/tray-monitor/tray-monitor.c:878 -msgid "Job status: Waiting for start time" -msgstr "Статус задачі: Очікування часу початку" +#: src/lib/util.c:356 +msgid "Console" +msgstr "" -#: src/tray-monitor/tray-monitor.c:883 -msgid "Job status: Waiting for higher priority jobs to finish" -msgstr "Статус задачі: Очікування завершення пріоритетніших задач" +#: src/lib/util.c:359 +msgid "System or Console" +msgstr "" -#: src/tray-monitor/tray-monitor.c:888 -#, c-format -msgid "Unknown job status %c." -msgstr "Невідомий статус задачі %c. " +#: src/lib/util.c:362 +msgid "Admin" +msgstr "" -#: src/tray-monitor/tray-monitor.c:889 -#, c-format -msgid "Job status: Unknown(%c)" -msgstr "Статус задачі: Невідомий(%c)" +#: src/lib/util.c:365 src/lib/util.c:455 +msgid "Archive" +msgstr "" -#: src/tray-monitor/tray-monitor.c:896 -#, c-format -msgid "Bad scan : '%s' %d\n" +#: src/lib/util.c:368 +msgid "Job Copy" msgstr "" -#: src/tray-monitor/tray-monitor.c:936 src/console/console.c:1143 -#, c-format -msgid "Connecting to Director %s:%d\n" -msgstr "Підключаюсь до Керівника %s:%d\n" +#: src/lib/util.c:371 +msgid "Copy" +msgstr "" -#: src/tray-monitor/tray-monitor.c:937 -#: src/qt-console/tray-monitor/tray-monitor.cpp:359 -#: src/qt-console/bcomm/dircomm.cpp:103 -#, c-format -msgid "Connecting to Director %s:%d" -msgstr "Приєднуюсь до Керівника %s:%d" +#: src/lib/util.c:374 +msgid "Migrate" +msgstr "" -#: src/tray-monitor/tray-monitor.c:938 src/wx-console/console_thread.cpp:428 -#: src/qt-console/tray-monitor/tray-monitor.cpp:361 -#: src/qt-console/bcomm/dircomm.cpp:173 -msgid "Director daemon" -msgstr "Керівник" +#: src/lib/util.c:377 +msgid "Scan" +msgstr "" -#: src/tray-monitor/tray-monitor.c:943 -#, c-format -msgid "Connecting to Client %s:%d\n" -msgstr "Приєднуюсь до Клієнта %s:%d\n" +#: src/lib/util.c:381 +msgid "Unknown Type" +msgstr "" -#: src/tray-monitor/tray-monitor.c:944 -#: src/qt-console/tray-monitor/tray-monitor.cpp:366 -#, c-format -msgid "Connecting to Client %s:%d" -msgstr "Приєднуюсь до Клієнта %s:%d" +#: src/lib/util.c:391 +msgid "Truncate" +msgstr "" -#: src/tray-monitor/tray-monitor.c:945 -#: src/qt-console/tray-monitor/tray-monitor.cpp:368 -msgid "File daemon" -msgstr "Збирач" +#: src/lib/util.c:394 src/filed/restore.c:1164 +msgid "None" +msgstr "" -#: src/tray-monitor/tray-monitor.c:950 -#, c-format -msgid "Connecting to Storage %s:%d\n" -msgstr "Приєднуюсь до Зберігача %s:%d\n" +#: src/lib/util.c:408 +msgid "Base" +msgstr "" -#: src/tray-monitor/tray-monitor.c:951 -#: src/qt-console/tray-monitor/tray-monitor.cpp:373 -#, c-format -msgid "Connecting to Storage %s:%d" -msgstr "Приєднуюсь до Зберігача %s:%d" +#: src/lib/util.c:411 src/lib/util.c:457 src/dird/ua_run.c:1147 +msgid "Full" +msgstr "" -#: src/tray-monitor/tray-monitor.c:956 src/tray-monitor/tray-monitor.c:994 -#: src/qt-console/tray-monitor/tray-monitor.cpp:379 -#: src/qt-console/tray-monitor/tray-monitor.cpp:409 -#, c-format -msgid "Error, currentitem is not a Client, a Storage or a Director..\n" -msgstr "Помилка. Поточний пункт не є Клієнтом або Зберігачем.\n" +#: src/lib/util.c:414 src/dird/ua_run.c:1148 +msgid "Incremental" +msgstr "" -#: src/tray-monitor/tray-monitor.c:962 -msgid "Cannot connect to daemon.\n" -msgstr "Не можу приєднатись до демону.\n" +#: src/lib/util.c:417 src/dird/ua_run.c:1149 +msgid "Differential" +msgstr "" -#: src/tray-monitor/tray-monitor.c:963 -#: src/qt-console/tray-monitor/tray-monitor.cpp:384 -msgid "Cannot connect to daemon." -msgstr "Не можу приєднатись до демону." +#: src/lib/util.c:420 src/dird/ua_run.c:1150 +msgid "Since" +msgstr "" -#: src/tray-monitor/tray-monitor.c:975 -#: src/qt-console/tray-monitor/tray-monitor.cpp:393 -#, c-format -msgid "Authentication error : %s" -msgstr "Помилка автентифікації : %s" +#: src/lib/util.c:423 src/dird/ua_run.c:1177 +msgid "Verify Catalog" +msgstr "" -#: src/tray-monitor/tray-monitor.c:982 -msgid "Opened connection with Director daemon.\n" -msgstr "Відкриті з'єднання із Керівником.\n" +#: src/lib/util.c:426 +msgid "Verify Init Catalog" +msgstr "" -#: src/tray-monitor/tray-monitor.c:983 -#: src/qt-console/tray-monitor/tray-monitor.cpp:400 -msgid "Opened connection with Director daemon." -msgstr "Відкриті з'єднання із Керівником." +#: src/lib/util.c:429 src/dird/ua_run.c:1178 +msgid "Verify Volume to Catalog" +msgstr "" -#: src/tray-monitor/tray-monitor.c:986 -msgid "Opened connection with File daemon.\n" -msgstr "Відкриті з'єднання із Збирачем.\n" +#: src/lib/util.c:432 src/dird/ua_run.c:1179 +msgid "Verify Disk to Catalog" +msgstr "" -#: src/tray-monitor/tray-monitor.c:987 -#: src/qt-console/tray-monitor/tray-monitor.cpp:403 -msgid "Opened connection with File daemon." -msgstr "Відкриті з'єднання із Збирачем." +#: src/lib/util.c:435 +msgid "Verify Data" +msgstr "" -#: src/tray-monitor/tray-monitor.c:990 -msgid "Opened connection with Storage daemon.\n" -msgstr "Відкриті з'єднання із Зберігачем.\n" +#: src/lib/util.c:438 +msgid "Virtual Full" +msgstr "" -#: src/tray-monitor/tray-monitor.c:991 -#: src/qt-console/tray-monitor/tray-monitor.cpp:406 -msgid "Opened connection with Storage daemon." -msgstr "Відкриті з'єднання із Зберігачем." +#: src/lib/util.c:444 +msgid "Unknown Job Level" +msgstr "" -#: src/tray-monitor/tray-monitor.c:1028 -msgid "<< Error: BNET_SUB_PROMPT signal received. >>\n" +#: src/lib/util.c:454 +msgid "Append" msgstr "" -#: src/tray-monitor/tray-monitor.c:1033 src/wx-console/console_thread.cpp:494 -msgid "<< Heartbeat signal received, answered. >>\n" +#: src/lib/util.c:456 +msgid "Disabled" msgstr "" -#: src/tray-monitor/tray-monitor.c:1037 -#, c-format -msgid "<< Unexpected signal received : %s >>\n" +#: src/lib/util.c:458 +msgid "Used" msgstr "" -#: src/tray-monitor/tray-monitor.c:1042 -msgid "\n" +#: src/lib/util.c:459 +msgid "Cleaning" msgstr "" -#: src/tray-monitor/tray-monitor.c:1046 -#: src/qt-console/tray-monitor/tray-monitor.cpp:457 -msgid "Error : BNET_HARDEOF or BNET_ERROR" +#: src/lib/util.c:460 +msgid "Purged" msgstr "" -#: src/tray-monitor/tray-monitor.c:1052 -msgid "\n" +#: src/lib/util.c:461 +msgid "Recycle" msgstr "" -#: src/tray-monitor/tray-monitor.c:1056 -#: src/qt-console/tray-monitor/tray-monitor.cpp:466 -msgid "Error : Connection closed." -msgstr "Помилка : З'єднання завершено" - -#: src/tray-monitor/authenticate.c:88 -#: src/qt-console/tray-monitor/authenticate.cpp:87 -#, fuzzy -msgid "" -"Director authorization problem.\n" -"Most likely the passwords do not agree.\n" -"Please see " +#: src/lib/util.c:462 +msgid "Read-Only" msgstr "" -"Проблеми під час авторизації Керівником.\n" -"Швидше за все, невірні паролі.\n" -"Для отримання допомоги, будь ласка, перегляньте http://www.bacula.org/en/rel-" -"manual/Bacula_Freque_Asked_Questi.html#SECTION003760000000000000000.\n" -#: src/tray-monitor/authenticate.c:97 src/console/authenticate.c:152 -#: src/qt-console/tray-monitor/authenticate.cpp:96 -#, c-format -msgid "Bad response to Hello command: ERR=%s\n" -msgstr "Погана відповідь на команду Hello: ERR=%s\n" +#: src/lib/util.c:474 +msgid "Invalid volume status" +msgstr "" -#: src/tray-monitor/authenticate.c:104 src/wx-console/authenticate.c:157 -#: src/console/authenticate.c:159 -#: src/qt-console/tray-monitor/authenticate.cpp:103 -msgid "Director rejected Hello command\n" -msgstr "Керівник не прийняв команду Hello\n" +#: src/lib/util.c:736 src/lib/util.c:746 src/lib/util.c:754 src/lib/util.c:761 +#: src/lib/util.c:768 src/lib/util.c:782 src/lib/util.c:792 src/lib/util.c:805 +#: src/lib/util.c:816 src/filed/restore.c:1180 +msgid "*none*" +msgstr "" -#: src/tray-monitor/authenticate.c:138 -#: src/qt-console/tray-monitor/authenticate.cpp:137 -msgid "" -"Director and Storage daemon passwords or names not the same.\n" -"Please see " +#: src/lib/util.c:854 +msgid "Working directory not defined. Cannot continue.\n" msgstr "" -#: src/tray-monitor/authenticate.c:145 -#: src/qt-console/tray-monitor/authenticate.cpp:144 +#: src/lib/util.c:857 #, c-format -msgid "bdird\n" -" -b specify a bootstrap file\n" -" -c specify a Storage configuration file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -e exclude list\n" -" -i include list\n" -" -j list jobs\n" -" -k list blocks\n" -" (no j or k option) list saved files\n" -" -L dump label\n" -" -p proceed inspite of errors\n" -" -v be verbose\n" -" -V specify Volume names (separated by |)\n" -" -? print this message\n" -"\n" +msgid "pthread key create failed: ERR=%s\n" msgstr "" -#: src/stored/bls.c:149 src/stored/bextract.c:146 +#: src/lib/jcr.c:331 #, c-format -msgid "Could not open exclude file: %s, ERR=%s\n" +msgid "pthread_once failed. ERR=%s\n" +msgstr "" + +#: src/lib/jcr.c:338 +#, fuzzy, c-format +msgid "Could not init msg_queue mutex. ERR=%s\n" +msgstr "Не вдалось відкрити%s: ERR=%s\n" + +#: src/lib/jcr.c:392 +msgid "NULL jcr.\n" msgstr "" -#: src/stored/bls.c:164 src/stored/bextract.c:161 +#: src/lib/jcr.c:496 #, c-format -msgid "Could not open include file: %s, ERR=%s\n" +msgid "JCR use_count=%d JobId=%d\n" msgstr "" -#: src/stored/bls.c:211 -msgid "No archive name specified\n" +#: src/lib/jcr.c:601 +#, c-format +msgid "pthread_setspecific failed: ERR=%s\n" msgstr "" -#: src/stored/bls.c:247 +#: src/lib/jcr.c:1082 #, c-format msgid "" -"\n" -"Warning, this Volume is a continuation of Volume %s\n" +"Watchdog sending kill after %d secs to thread stalled reading Storage " +"daemon.\n" msgstr "" -#: src/stored/bls.c:290 +#: src/lib/jcr.c:1094 #, c-format -msgid "Got EOM at file %u on device %s, Volume \"%s\"\n" +msgid "" +"Watchdog sending kill after %d secs to thread stalled reading File daemon.\n" msgstr "" -#: src/stored/bls.c:301 +#: src/lib/jcr.c:1106 #, c-format -msgid "Mounted Volume \"%s\".\n" +msgid "" +"Watchdog sending kill after %d secs to thread stalled reading Director.\n" msgstr "" -#: src/stored/bls.c:303 +#: src/lib/lex.c:77 #, c-format -msgid "End of file %u on device %s, Volume \"%s\"\n" +msgid "Problem probably begins at line %d.\n" msgstr "" -#: src/stored/bls.c:327 +#: src/lib/lex.c:82 #, c-format msgid "" -"File:blk=%u:%u blk_num=%u blen=%u First rec FI=%s SessId=%u SessTim=%u Strm=" -"%s rlen=%d\n" +"Config error: %s\n" +" : line %d, col %d of file %s\n" +"%s\n" +"%s" msgstr "" -#: src/stored/bls.c:336 +#: src/lib/lex.c:86 #, c-format -msgid "Block: %d size=%d\n" +msgid "Config error: %s\n" msgstr "" -#: src/stored/bls.c:386 src/stored/bextract.c:328 src/stored/bscan.c:688 -msgid "Cannot continue.\n" +#: src/lib/lex.c:115 +msgid "Close of NULL file\n" msgstr "" -#: src/stored/bls.c:388 -msgid "Attrib unpack error!\n" +#: src/lib/lex.c:212 +msgid "" +"get_char: called after EOF. You may have a open double quote without the " +"closing double quote.\n" msgstr "" -#: src/stored/bls.c:399 +#: src/lib/lex.c:254 #, c-format -msgid "FileIndex=%d VolSessionId=%d VolSessionTime=%d Stream=%d DataLen=%d\n" +msgid "Config token too long, file: %s, line %d, begins at line %d\n" msgstr "" -#: src/stored/bls.c:425 src/stored/read_record.c:414 src/stored/bcopy.c:330 -msgid "Fresh Volume Label" +#: src/lib/lex.c:278 +msgid "none" msgstr "" -#: src/stored/bls.c:428 src/stored/read_record.c:417 src/stored/bcopy.c:333 -msgid "Volume Label" +#: src/lib/lex.c:279 +msgid "comment" msgstr "" -#: src/stored/bls.c:432 src/stored/label.c:1028 src/stored/bcopy.c:337 -msgid "Begin Job Session" +#: src/lib/lex.c:280 +msgid "number" msgstr "" -#: src/stored/bls.c:437 src/stored/label.c:1031 src/stored/bcopy.c:341 -msgid "End Job Session" +#: src/lib/lex.c:281 +msgid "ip_addr" msgstr "" -#: src/stored/bls.c:441 src/stored/bcopy.c:346 -msgid "End of Medium" +#: src/lib/lex.c:282 +msgid "identifier" msgstr "" -#: src/stored/bls.c:444 -msgid "End of Physical Medium" +#: src/lib/lex.c:283 +msgid "string" msgstr "" -#: src/stored/bls.c:447 -msgid "Start of object" +#: src/lib/lex.c:284 +msgid "quoted_string" msgstr "" -#: src/stored/bls.c:450 -msgid "End of object" +#: src/lib/lex.c:285 +msgid "include" msgstr "" -#: src/stored/bls.c:453 src/stored/label.c:1040 src/stored/bcopy.c:349 -msgid "Unknown" +#: src/lib/lex.c:286 +msgid "include_quoted_string" msgstr "" -#: src/stored/bls.c:460 src/stored/read_record.c:435 src/stored/bcopy.c:355 -#, c-format -msgid "%s Record: VolSessionId=%d VolSessionTime=%d JobId=%d DataLen=%d\n" +#: src/lib/lex.c:287 +msgid "UTF-8 Byte Order Mark" msgstr "" -#: src/stored/bls.c:479 src/stored/bextract.c:612 src/stored/bcopy.c:373 -#: src/stored/bscan.c:1374 src/stored/btape.c:3050 -#, c-format -msgid "Mount Volume \"%s\" on device %s and press return when ready: " +#: src/lib/lex.c:288 +msgid "UTF-16le Byte Order Mark" msgstr "" -#: src/stored/dircmd.c:155 +#: src/lib/lex.c:326 src/lib/lex.c:332 src/lib/lex.c:343 src/lib/lex.c:349 #, c-format -msgid "Connection request from %s failed.\n" +msgid "expected a positive integer number, got: %s" msgstr "" -#: src/stored/dircmd.c:166 -#, c-format -msgid "Invalid connection from %s. Len=%d\n" +#: src/lib/lex.c:465 +msgid "" +"This config file appears to be in an unsupported Unicode format (UTF-16be). " +"Please resave as UTF-8\n" msgstr "" -#: src/stored/dircmd.c:210 src/filed/authenticate.c:208 -msgid "Unable to authenticate Director\n" +#: src/lib/lex.c:611 src/lib/lex.c:639 +#, c-format +msgid "Cannot open included config file %s: %s\n" msgstr "" -#: src/stored/dircmd.c:299 +#: src/lib/lex.c:698 src/lib/lex.c:755 #, c-format -msgid "3991 Bad setdebug command: %s\n" +msgid "expected an integer or a range, got %s: %s" msgstr "" -#: src/stored/dircmd.c:326 -msgid "3903 Error scanning cancel command.\n" +#: src/lib/lex.c:712 src/lib/lex.c:720 src/lib/lex.c:731 src/lib/lex.c:739 +#, c-format +msgid "expected an integer number, got %s: %s" msgstr "" -#: src/stored/dircmd.c:330 +#: src/lib/lex.c:769 #, c-format -msgid "3904 Job %s not found.\n" +msgid "expected a name, got %s: %s" msgstr "" -#: src/stored/dircmd.c:358 +#: src/lib/lex.c:773 #, c-format -msgid "3000 JobId=%ld Job=\"%s\" marked to be %s.\n" +msgid "name %s length %d too long, max is %d\n" msgstr "" -#: src/stored/dircmd.c:437 src/stored/dircmd.c:812 src/stored/dircmd.c:904 -#: src/stored/dircmd.c:1015 src/stored/dircmd.c:1137 src/stored/dircmd.c:1179 +#: src/lib/lex.c:781 #, c-format -msgid "3999 Device \"%s\" not found or could not be opened.\n" +msgid "expected a string, got %s: %s" msgstr "" -#: src/stored/dircmd.c:442 -#, c-format -msgid "3903 Error scanning label command: %s\n" +#: src/lib/bpipe.c:365 src/lib/bpipe.c:448 +msgid "Program killed by Bacula (timeout)\n" +msgstr "" + +#: src/lib/btimers.c:253 +msgid "stop_btimer called with NULL btimer_id\n" msgstr "" -#: src/stored/dircmd.c:492 +#: src/lib/bsys.c:133 #, fuzzy, c-format -msgid "3910 Unable to open device \"%s\": ERR=%s\n" -msgstr "Не можливо встановити час файлу %s: ERR=%s\n" +msgid "safe_unlink could not compile regex pattern \"%s\" ERR=%s\n" +msgstr "Не вдалось створити %s: ERR=%s\n" -#: src/stored/dircmd.c:509 +#: src/lib/bsys.c:333 src/lib/bsys.c:350 src/lib/bsys.c:374 src/lib/bsys.c:387 #, c-format -msgid "3920 Cannot label Volume because it is already labeled: \"%s\"\n" +msgid "Out of memory: ERR=%s\n" msgstr "" -#: src/stored/dircmd.c:516 -msgid "3921 Wrong volume mounted.\n" +#: src/lib/bsys.c:429 +msgid "Buffer overflow.\n" msgstr "" -#: src/stored/dircmd.c:520 -msgid "3922 Cannot relabel an ANSI/IBM labeled Volume.\n" +#: src/lib/bsys.c:495 +msgid "Bad errno" msgstr "" -#: src/stored/dircmd.c:528 +#: src/lib/bsys.c:510 #, c-format -msgid "3912 Failed to label Volume: ERR=%s\n" +msgid "Memset for %d bytes at %s:%d\n" msgstr "" -#: src/stored/dircmd.c:538 +#: src/lib/bsys.c:540 #, c-format -msgid "3914 Failed to label Volume (no media): ERR=%s\n" +msgid "Cannot open pid file. %s ERR=%s\n" msgstr "" -#: src/stored/dircmd.c:541 +#: src/lib/bsys.c:555 #, c-format -msgid "3913 Cannot label Volume. Unknown status %d from read_volume_label()\n" +msgid "" +"%s is already running. pid=%d\n" +"Check file %s\n" msgstr "" -#: src/stored/dircmd.c:578 +#: src/lib/bsys.c:569 #, c-format -msgid "3001 Mounted Volume: %s\n" +msgid "Could not open pid file. %s ERR=%s\n" msgstr "" -#: src/stored/dircmd.c:582 src/stored/dircmd.c:1215 +#: src/lib/bsys.c:680 #, c-format -msgid "" -"3902 Cannot mount Volume on Storage Device \"%s\" because:\n" -"%s" -msgstr "" - -#: src/stored/dircmd.c:696 -msgid "Specified slot ignored. " +msgid "Could not create state file. %s ERR=%s\n" msgstr "" -#: src/stored/dircmd.c:712 src/stored/dircmd.c:770 -#, fuzzy, c-format -msgid "3901 Unable to open device \"%s\": ERR=%s\n" -msgstr "Не можливо встановити час файлу %s: ERR=%s\n" - -#: src/stored/dircmd.c:732 src/stored/dircmd.c:761 +#: src/lib/bsys.c:699 #, c-format -msgid "3001 Device \"%s\" is mounted with Volume \"%s\"\n" +msgid "Write final hdr error: ERR=%s\n" msgstr "" -#: src/stored/dircmd.c:735 src/stored/dircmd.c:764 src/stored/dircmd.c:779 +#: src/lib/bsock.c:111 #, c-format msgid "" -"3905 Device \"%s\" open but no Bacula volume is mounted.\n" -"If this is not a blank tape, try unmounting and remounting the Volume.\n" +"Could not connect to %s on %s:%d. ERR=%s\n" +"Retrying ...\n" msgstr "" -#: src/stored/dircmd.c:745 +#: src/lib/bsock.c:117 #, c-format -msgid "3001 Device \"%s\" is doing acquire.\n" +msgid "Unable to connect to %s on %s:%d. ERR=%s\n" msgstr "" -#: src/stored/dircmd.c:750 src/stored/dircmd.c:875 -#, c-format -msgid "3903 Device \"%s\" is being labeled.\n" -msgstr "" +#: src/lib/bsock.c:193 +#, fuzzy, c-format +msgid "gethostbyname() for host \"%s\" failed: ERR=%s\n" +msgstr "Помилка у %s файл %s: ERR=%s\n" -#: src/stored/dircmd.c:776 +#: src/lib/bsock.c:225 src/lib/bsock.c:227 #, c-format -msgid "3001 Device \"%s\" is already mounted with Volume \"%s\"\n" +msgid "Socket open error. proto=%d port=%d. ERR=%s\n" msgstr "" -#: src/stored/dircmd.c:788 +#: src/lib/bsock.c:240 src/lib/bsock.c:242 #, c-format -msgid "3002 Device \"%s\" is mounted.\n" +msgid "Source address bind error. proto=%d. ERR=%s\n" msgstr "" -#: src/stored/dircmd.c:790 src/stored/dircmd.c:847 src/stored/dircmd.c:863 -#: src/stored/dircmd.c:895 +#: src/lib/bsock.c:254 src/lib/bsock.c:293 src/lib/bnet_server.c:212 #, c-format -msgid "3907 %s" +msgid "Cannot set SO_KEEPALIVE on socket: %s\n" msgstr "" -#: src/stored/dircmd.c:793 +#: src/lib/bsock.c:262 #, c-format -msgid "3906 File device \"%s\" is always mounted.\n" +msgid "Cannot set TCP_KEEPIDLE on socket: %s\n" msgstr "" -#: src/stored/dircmd.c:802 +#: src/lib/bsock.c:327 #, c-format -msgid "3930 Device \"%s\" is being released.\n" +msgid "Could not init bsock mutex. ERR=%s\n" msgstr "" -#: src/stored/dircmd.c:806 -#, fuzzy, c-format -msgid "3905 Unknown wait state %d\n" -msgstr "Невідомий статус задачі %c. " - -#: src/stored/dircmd.c:816 -#, c-format -msgid "3909 Error scanning mount command: %s\n" +#: src/lib/bsock.c:364 +msgid "Socket is closed\n" msgstr "" -#: src/stored/dircmd.c:844 src/stored/dircmd.c:897 +#: src/lib/bsock.c:370 #, c-format -msgid "3002 Device \"%s\" unmounted.\n" +msgid "Socket has errors=%d on call to %s:%s:%d\n" msgstr "" -#: src/stored/dircmd.c:851 +#: src/lib/bsock.c:377 #, c-format -msgid "3901 Device \"%s\" is already unmounted.\n" +msgid "Socket is terminated=%d on call to %s:%s:%d\n" msgstr "" -#: src/stored/dircmd.c:866 +#: src/lib/bsock.c:385 #, c-format -msgid "3001 Device \"%s\" unmounted.\n" +msgid "Socket has insane msglen=%d on call to %s:%s:%d\n" msgstr "" -#: src/stored/dircmd.c:871 +#: src/lib/bsock.c:426 #, c-format -msgid "3902 Device \"%s\" is busy in acquire.\n" +msgid "Write error sending %d bytes to %s:%s:%d: ERR=%s\n" msgstr "" -#: src/stored/dircmd.c:909 +#: src/lib/bsock.c:432 #, c-format -msgid "3907 Error scanning unmount command: %s\n" -msgstr "" - -#: src/stored/dircmd.c:937 -msgid "3916 Error scanning action_on_purge command\n" +msgid "Wrote %d bytes to %s:%s:%d, but only %d accepted.\n" msgstr "" -#: src/stored/dircmd.c:980 +#: src/lib/bsock.c:527 src/lib/bsock.c:588 #, c-format -msgid "3921 Device \"%s\" already released.\n" +msgid "Read expected %d got %d from %s:%s:%d\n" msgstr "" -#: src/stored/dircmd.c:987 +#: src/lib/bsock.c:547 #, c-format -msgid "3922 Device \"%s\" waiting for sysop.\n" +msgid "Packet size=%d too big from \"%s:%s:%d. Terminating connection.\n" msgstr "" -#: src/stored/dircmd.c:993 +#: src/lib/bsock.c:577 #, c-format -msgid "3922 Device \"%s\" waiting for mount.\n" +msgid "Read error from %s:%s:%d: ERR=%s\n" msgstr "" -#: src/stored/dircmd.c:997 +#: src/lib/bsock.c:651 #, c-format -msgid "3923 Device \"%s\" is busy in acquire.\n" +msgid "fread attr spool error. Wanted=%d got=%d bytes. ERR=%s\n" msgstr "" -#: src/stored/dircmd.c:1001 -#, c-format -msgid "3914 Device \"%s\" is being labeled.\n" +#: src/lib/bsock.c:669 +msgid "fread attr spool I/O error.\n" msgstr "" -#: src/stored/dircmd.c:1009 -#, c-format -msgid "3022 Device \"%s\" released.\n" +#: src/lib/bsock.c:730 +msgid "Could not malloc BSOCK data buffer\n" msgstr "" -#: src/stored/dircmd.c:1020 +#: src/lib/bsock.c:748 src/lib/bsock.c:767 #, c-format -msgid "3927 Error scanning release command: %s\n" +msgid "sockopt error: %s\n" msgstr "" -#: src/stored/dircmd.c:1049 src/filed/job.c:1535 +#: src/lib/bsock.c:754 src/lib/bsock.c:773 #, c-format -msgid "Could not create bootstrap file %s: ERR=%s\n" +msgid "Warning network buffer = %d bytes not max size.\n" msgstr "" -#: src/stored/dircmd.c:1062 -msgid "Error parsing bootstrap file.\n" +#: src/lib/bsock.c:793 src/lib/bsock.c:827 +#, c-format +msgid "fcntl F_GETFL error. ERR=%s\n" msgstr "" -#: src/stored/dircmd.c:1124 +#: src/lib/bsock.c:799 src/lib/bsock.c:833 src/lib/bsock.c:865 #, c-format -msgid "3998 Device \"%s\" is not an autochanger.\n" +msgid "fcntl F_SETFL error. ERR=%s\n" msgstr "" -#: src/stored/dircmd.c:1141 +#: src/lib/bsock.c:1065 src/qt-console/bcomm/dircomm_auth.cpp:107 #, c-format -msgid "3908 Error scanning autochanger drives/list/slots command: %s\n" -msgstr "" +msgid "Director authorization problem at \"%s:%d\"\n" +msgstr "Проблеми авторизації Директора \"%s:%d\"\n" -#: src/stored/dircmd.c:1183 +#: src/lib/bsock.c:1072 src/qt-console/bcomm/dircomm_auth.cpp:114 #, c-format -msgid "3909 Error scanning readlabel command: %s\n" +msgid "" +"Authorization problem: Remote server at \"%s:%d\" did not advertise required " +"TLS support.\n" msgstr "" +"Проблеми авторизації: Віддалений сервер \"%s:%d\" не повідомляє про " +"необхідність використання TLS.\n" -#: src/stored/dircmd.c:1211 +#: src/lib/bsock.c:1080 src/qt-console/bcomm/dircomm_auth.cpp:122 #, c-format -msgid "3001 Volume=%s Slot=%d\n" +msgid "" +"Authorization problem with Director at \"%s:%d\": Remote server requires " +"TLS.\n" msgstr "" +"Проблеми авторизації Керівника \"%s:%d\": Віддалений сепвер вимагає TLS.\n" -#: src/stored/dircmd.c:1243 +#: src/lib/bsock.c:1092 src/qt-console/bcomm/dircomm_auth.cpp:133 #, c-format -msgid "3931 Device \"%s\" is BLOCKED. user unmounted.\n" -msgstr "" +msgid "TLS negotiation failed with Director at \"%s:%d\"\n" +msgstr "Встановлення TLS із Керівником невдале \"%s:%d\"\n" -#: src/stored/dircmd.c:1247 +#: src/lib/bsock.c:1102 src/qt-console/bcomm/dircomm_auth.cpp:145 #, c-format msgid "" -"3932 Device \"%s\" is BLOCKED. user unmounted during wait for media/mount.\n" +"Bad response to Hello command: ERR=%s\n" +"The Director at \"%s:%d\" is probably not running.\n" msgstr "" +"Погана відповідь на команду Hello: ERR=%s\n" +"Керівник \"%s:%d\" ймовірно не запущений.\n" -#: src/stored/dircmd.c:1251 +#: src/lib/bsock.c:1111 src/qt-console/bcomm/dircomm_auth.cpp:154 #, c-format -msgid "3933 Device \"%s\" is BLOCKED waiting for media.\n" -msgstr "" +msgid "Director at \"%s:%d\" rejected Hello command\n" +msgstr "Керівник \"%s:%d\" відкинув команду Hello\n" -#: src/stored/dircmd.c:1255 -#, c-format -msgid "3934 Device \"%s\" is being initialized.\n" +#: src/lib/bsock.c:1121 src/qt-console/bcomm/dircomm_auth.cpp:169 +#, fuzzy, c-format +msgid "" +"Authorization problem with Director at \"%s:%d\"\n" +"Most likely the passwords do not agree.\n" +"If you are using TLS, there may have been a certificate validation error " +"during the TLS handshake.\n" +"Please see " msgstr "" +"Проблеми авторизації із Керівником \"%s:%d\"\n" +"Швидше за все, проблема у паролях.\n" +"Якщо Ви використовуєте TLS, можливо, невдала перевірка сертифікату під час " +"TLS handshake.\n" +"Для отримання допомоги, будь ласка, перегляньте http://www.bacula.org/en/rel-" +"manual/Bacula_Freque_Asked_Questi.html#SECTION003760000000000000000.\n" -#: src/stored/dircmd.c:1259 -#, c-format -msgid "3935 Device \"%s\" is blocked labeling a Volume.\n" +#: src/lib/parse_conf.c:165 +msgid "***UNKNOWN***" msgstr "" -#: src/stored/dircmd.c:1263 +#: src/lib/parse_conf.c:213 src/dird/dird_conf.c:1431 +#: src/qt-console/tray-monitor/tray_conf.cpp:282 #, c-format -msgid "3935 Device \"%s\" is blocked for unknown reason.\n" -msgstr "" +msgid "Too many items in %s resource\n" +msgstr "Забагато елементів у ресурсі %s\n" -#: src/stored/dircmd.c:1268 +#: src/lib/parse_conf.c:266 src/lib/parse_conf.c:287 #, c-format -msgid "3936 Device \"%s\" is busy reading.\n" +msgid "expected an =, got: %s" msgstr "" -#: src/stored/dircmd.c:1271 +#: src/lib/parse_conf.c:296 #, c-format -msgid "3937 Device \"%s\" is busy with writers=%d reserved=%d.\n" +msgid "Unknown item code: %d\n" msgstr "" -#: src/stored/parse_bsr.c:122 src/stored/parse_bsr.c:126 +#: src/lib/parse_conf.c:336 #, c-format -msgid "" -"Bootstrap file error: %s\n" -" : Line %d, col %d of file %s\n" -"%s\n" +msgid "message type: %s not found" msgstr "" -#: src/stored/parse_bsr.c:148 +#: src/lib/parse_conf.c:374 #, c-format -msgid "Cannot open bootstrap file %s: %s\n" +msgid "Attempt to redefine name \"%s\" to \"%s\"." msgstr "" -#: src/stored/parse_bsr.c:279 +#: src/lib/parse_conf.c:466 src/dird/dird_conf.c:1896 #, c-format -msgid "MediaType %s in bsr at inappropriate place.\n" +msgid "Could not find config Resource %s referenced on line %d : %s\n" msgstr "" -#: src/stored/parse_bsr.c:311 +#: src/lib/parse_conf.c:471 #, c-format -msgid "Device \"%s\" in bsr at inappropriate place.\n" +msgid "Attempt to redefine resource \"%s\" referenced on line %d : %s\n" msgstr "" -#: src/stored/parse_bsr.c:484 +#: src/lib/parse_conf.c:507 #, c-format -msgid "REGEX '%s' compile error. ERR=%s\n" +msgid "Too many %s directives. Max. is %d. line %d: %s\n" msgstr "" -#: src/stored/parse_bsr.c:494 -msgid "JobType not yet implemented\n" +#: src/lib/parse_conf.c:518 +#, c-format +msgid "Could not find config Resource \"%s\" referenced on line %d : %s\n" msgstr "" -#: src/stored/parse_bsr.c:502 -msgid "JobLevel not yet implemented\n" +#: src/lib/parse_conf.c:581 +#, c-format +msgid "Missing config Resource \"%s\" referenced on line %d : %s\n" msgstr "" -#: src/stored/parse_bsr.c:719 +#: src/lib/parse_conf.c:653 #, c-format -msgid "Slot %d in bsr at inappropriate place.\n" +msgid "expected a size number, got: %s" msgstr "" -#: src/stored/parse_bsr.c:743 +#: src/lib/parse_conf.c:658 #, c-format -msgid "VolFile : %u-%u\n" +msgid "expected a speed number, got: %s" msgstr "" -#: src/stored/parse_bsr.c:751 +#: src/lib/parse_conf.c:669 #, c-format -msgid "VolBlock : %u-%u\n" +msgid "expected a %s, got: %s" msgstr "" -#: src/stored/parse_bsr.c:759 -#, c-format -msgid "VolAddr : %llu-%llu\n" +#: src/lib/parse_conf.c:670 +msgid "size" msgstr "" -#: src/stored/parse_bsr.c:768 -#, c-format -msgid "FileIndex : %u\n" +#: src/lib/parse_conf.c:670 +msgid "speed" msgstr "" -#: src/stored/parse_bsr.c:770 +#: src/lib/parse_conf.c:724 src/lib/parse_conf.c:730 src/dird/run_conf.c:315 #, c-format -msgid "FileIndex : %u-%u\n" +msgid "expected a time period, got: %s" msgstr "" -#: src/stored/parse_bsr.c:780 +#: src/lib/parse_conf.c:749 src/lib/parse_conf.c:765 src/lib/ini.c:590 +#: src/dird/dird_conf.c:1874 src/dird/dird_conf.c:1990 #, c-format -msgid "JobId : %u\n" +msgid "Expect %s, got: %s" msgstr "" -#: src/stored/parse_bsr.c:782 +#: src/lib/parse_conf.c:791 #, c-format -msgid "JobId : %u-%u\n" +msgid "Expected a Tape Label keyword, got: %s" msgstr "" -#: src/stored/parse_bsr.c:792 +#: src/lib/parse_conf.c:874 #, c-format -msgid "SessId : %u\n" +msgid "Unable to initialize resource lock. ERR=%s\n" msgstr "" -#: src/stored/parse_bsr.c:794 -#, c-format -msgid "SessId : %u-%u\n" +#: src/lib/parse_conf.c:882 +msgid "Config filename too long.\n" msgstr "" -#: src/stored/parse_bsr.c:803 +#: src/lib/parse_conf.c:905 #, c-format -msgid "VolumeName : %s\n" +msgid "Cannot open config file \"%s\": %s\n" msgstr "" -#: src/stored/parse_bsr.c:804 -#, c-format -msgid " MediaType : %s\n" +#: src/lib/parse_conf.c:922 +msgid "" +"Currently we cannot handle UTF-16 source files. Please convert the conf file " +"to UTF-8\n" msgstr "" -#: src/stored/parse_bsr.c:805 +#: src/lib/parse_conf.c:926 #, c-format -msgid " Device : %s\n" +msgid "Expected a Resource name identifier, got: %s" msgstr "" -#: src/stored/parse_bsr.c:806 +#: src/lib/parse_conf.c:942 #, c-format -msgid " Slot : %d\n" +msgid "expected resource name, got: %s" msgstr "" -#: src/stored/parse_bsr.c:815 +#: src/lib/parse_conf.c:953 #, c-format -msgid "Client : %s\n" +msgid "not in resource definition: %s" msgstr "" -#: src/stored/parse_bsr.c:823 +#: src/lib/parse_conf.c:964 src/dird/inc_conf.c:388 src/dird/inc_conf.c:732 +#: src/dird/dird_conf.c:2050 #, c-format -msgid "Job : %s\n" +msgid "expected an equals, got: %s" msgstr "" -#: src/stored/parse_bsr.c:831 +#: src/lib/parse_conf.c:978 #, c-format -msgid "SessTime : %u\n" +msgid "" +"Keyword \"%s\" not permitted in this resource.\n" +"Perhaps you left the trailing brace off of the previous resource." msgstr "" -#: src/stored/parse_bsr.c:842 -msgid "BSR is NULL\n" +#: src/lib/parse_conf.c:989 +msgid "Name not specified for resource" msgstr "" -#: src/stored/parse_bsr.c:846 +#: src/lib/parse_conf.c:999 #, c-format -msgid "Next : 0x%x\n" +msgid "unexpected token %d %s in resource definition" msgstr "" -#: src/stored/parse_bsr.c:847 +#: src/lib/parse_conf.c:1005 #, c-format -msgid "Root bsr : 0x%x\n" +msgid "Unknown parser state %d\n" msgstr "" -#: src/stored/parse_bsr.c:859 -#, c-format -msgid "count : %u\n" +#: src/lib/parse_conf.c:1010 +msgid "End of conf file reached with unclosed resource." msgstr "" -#: src/stored/parse_bsr.c:860 +#: src/lib/daemon.c:52 #, c-format -msgid "found : %u\n" +msgid "Cannot fork to become daemon: ERR=%s\n" msgstr "" -#: src/stored/parse_bsr.c:863 +#: src/lib/lockmgr.c:53 #, c-format -msgid "done : %s\n" +msgid "ASSERT failed at %s:%i: %s\n" msgstr "" -#: src/stored/parse_bsr.c:864 +#: src/lib/lockmgr.c:58 #, c-format -msgid "positioning : %d\n" +msgid "ASSERT failed at %s:%i: %s \n" msgstr "" -#: src/stored/parse_bsr.c:865 +#: src/lib/lockmgr.c:64 #, c-format -msgid "fast_reject : %d\n" +msgid "ASSERT failed at %s:%i: %s (%s)\n" msgstr "" -#: src/stored/ansi_label.c:96 +#: src/lib/lockmgr.c:95 #, c-format -msgid "Read error on device %s in ANSI label. ERR=%s\n" +msgid "Mutex lock failure. ERR=%s\n" msgstr "" -#: src/stored/ansi_label.c:106 -msgid "Insane! End of tape while reading ANSI label.\n" +#: src/lib/lockmgr.c:105 +#, c-format +msgid "Mutex unlock failure. ERR=%s\n" msgstr "" -#: src/stored/ansi_label.c:132 -msgid "No VOL1 label while reading ANSI/IBM label.\n" +#: src/lib/lockmgr.c:768 +#, c-format +msgid "pthread_create failed: ERR=%s\n" msgstr "" -#: src/stored/ansi_label.c:155 +#: src/lib/message.c:417 src/lib/message.c:427 #, c-format -msgid "Wanted ANSI Volume \"%s\" got \"%s\"\n" +msgid "Could not open console message file %s: ERR=%s\n" msgstr "" -#: src/stored/ansi_label.c:166 -msgid "No HDR1 label while reading ANSI label.\n" +#: src/lib/message.c:432 +#, c-format +msgid "Could not get con mutex: ERR=%s\n" msgstr "" -#: src/stored/ansi_label.c:172 -#, c-format -msgid "ANSI/IBM Volume \"%s\" does not belong to Bacula.\n" +#: src/lib/message.c:537 +msgid "Bacula Message" msgstr "" -#: src/stored/ansi_label.c:184 -msgid "No HDR2 label while reading ANSI/IBM label.\n" +#: src/lib/message.c:541 +#, c-format +msgid "open mail pipe %s failed: ERR=%s\n" msgstr "" -#: src/stored/ansi_label.c:199 -msgid "Unknown or bad ANSI/IBM label record.\n" +#: src/lib/message.c:632 +msgid "open mail pipe failed.\n" msgstr "" -#: src/stored/ansi_label.c:207 -msgid "Too many records in while reading ANSI/IBM label.\n" +#: src/lib/message.c:645 +#, c-format +msgid "close error: ERR=%s\n" msgstr "" -#: src/stored/ansi_label.c:307 +#: src/lib/message.c:656 #, c-format -msgid "ANSI Volume label name \"%s\" longer than 6 chars.\n" +msgid "Mail prog: %s" msgstr "" -#: src/stored/ansi_label.c:333 +#: src/lib/message.c:665 #, c-format -msgid "Could not write ANSI VOL1 label. Wanted size=%d got=%d ERR=%s\n" +msgid "" +"Mail program terminated in error.\n" +"CMD=%s\n" +"ERR=%s\n" msgstr "" -#: src/stored/ansi_label.c:371 src/stored/ansi_label.c:400 +#: src/lib/message.c:770 #, c-format -msgid "Could not write ANSI HDR1 label. ERR=%s\n" +msgid "fopen %s failed: ERR=%s\n" msgstr "" -#: src/stored/ansi_label.c:376 src/stored/ansi_label.c:407 -msgid "Could not write ANSI HDR1 label.\n" +#: src/lib/message.c:892 src/lib/message.c:895 +msgid "Msg delivery error: Unable to store data in database.\n" msgstr "" -#: src/stored/ansi_label.c:412 +#: src/lib/message.c:947 #, c-format -msgid "Error writing EOF to tape. ERR=%s" -msgstr "" - -#: src/stored/ansi_label.c:417 -msgid "write_ansi_ibm_label called for non-ANSI/IBM type\n" -msgstr "" - -#: src/stored/append.c:68 -msgid "DCR is NULL!!!\n" +msgid "" +"Msg delivery error: Operator mail program terminated in error.\n" +"CMD=%s\n" +"ERR=%s\n" msgstr "" -#: src/stored/append.c:73 -msgid "DEVICE is NULL!!!\n" -msgstr "" +#: src/lib/message.c:968 +#, fuzzy, c-format +msgid "Msg delivery error: fopen %s failed: ERR=%s\n" +msgstr "Помилка у %s файл %s: ERR=%s\n" -#: src/stored/append.c:83 -msgid "Unable to set network buffer size.\n" +#: src/lib/message.c:1287 +#, c-format +msgid "%s: ABORTING due to ERROR in %s:%d\n" msgstr "" -#: src/stored/append.c:95 src/stored/append.c:104 src/stored/append.c:116 -#: src/stored/askdir.c:340 src/stored/askdir.c:341 -msgid "NULL Volume name. This shouldn't happen!!!\n" +#: src/lib/message.c:1291 +#, c-format +msgid "%s: ERROR TERMINATION at %s:%d\n" msgstr "" -#: src/stored/append.c:110 src/stored/btape.c:2235 +#: src/lib/message.c:1296 #, c-format -msgid "Write session label failed. ERR=%s\n" +msgid "%s: Fatal Error because: " msgstr "" -#: src/stored/append.c:122 +#: src/lib/message.c:1298 #, c-format -msgid "Network send error to FD. ERR=%s\n" +msgid "%s: Fatal Error at %s:%d because:\n" msgstr "" -#: src/stored/append.c:159 +#: src/lib/message.c:1302 #, c-format -msgid "Error reading data header from FD. ERR=%s\n" +msgid "%s: ERROR: " msgstr "" -#: src/stored/append.c:167 +#: src/lib/message.c:1304 #, c-format -msgid "Malformed data header from FD: %s\n" +msgid "%s: ERROR in %s:%d " msgstr "" -#: src/stored/append.c:187 +#: src/lib/message.c:1307 #, c-format -msgid "FI=%d from FD not positive or sequential=%d\n" +msgid "%s: Warning: " msgstr "" -#: src/stored/append.c:235 +#: src/lib/message.c:1310 #, c-format -msgid "Network error reading from FD. ERR=%s\n" +msgid "%s: Security violation: " msgstr "" -#: src/stored/append.c:265 src/stored/btape.c:2354 -#, fuzzy, c-format -msgid "Error writing end session label. ERR=%s\n" -msgstr "Помилка надсилання Hello до Збирача. ERR=%s\n" - -#: src/stored/append.c:277 src/stored/mac.c:126 src/stored/mac.c:261 -#: src/stored/spool.c:300 +#: src/lib/message.c:1398 #, c-format -msgid "Fatal append error on device %s: ERR=%s\n" +msgid "%s ABORTING due to ERROR\n" msgstr "" -#: src/stored/append.c:279 src/stored/mac.c:128 -msgid "Set ok=FALSE after write_block_to_device.\n" +#: src/lib/message.c:1401 +#, c-format +msgid "%s ERROR TERMINATION\n" msgstr "" -#: src/stored/append.c:308 src/stored/mac.c:151 +#: src/lib/message.c:1404 #, c-format -msgid "Elapsed time=%02d:%02d:%02d, Transfer rate=%s Bytes/second\n" +msgid "%s JobId %u: Fatal error: " msgstr "" -#: src/stored/append.c:345 +#: src/lib/message.c:1413 #, c-format -msgid "Error updating file attributes. ERR=%s\n" +msgid "%s JobId %u: Error: " msgstr "" -#: src/stored/vol_mgr.c:93 +#: src/lib/message.c:1419 #, c-format -msgid "Unable to initialize volume list lock. ERR=%s\n" +msgid "%s JobId %u: Warning: " msgstr "" -#: src/stored/label.c:93 +#: src/lib/message.c:1425 #, c-format -msgid "Couldn't rewind device %s: ERR=%s\n" +msgid "%s JobId %u: Security violation: " msgstr "" -#: src/stored/label.c:110 src/stored/label.c:202 -#, c-format -msgid "Wrong Volume mounted on device %s: Wanted %s have %s\n" +#: src/lib/message.c:1696 +msgid "Debug lock information" msgstr "" -#: src/stored/label.c:113 src/stored/label.c:190 -#, c-format -msgid "Too many tries: %s" +#: src/lib/message.c:1697 +msgid "Debug network information" msgstr "" -#: src/stored/label.c:130 -#, c-format -msgid "" -"Requested Volume \"%s\" on %s is not a Bacula labeled Volume, because: ERR=%s" +#: src/lib/message.c:1698 +msgid "Debug plugin information" msgstr "" -#: src/stored/label.c:135 -msgid "Could not read Volume label from block.\n" +#: src/lib/message.c:1699 +msgid "Debug volume information" msgstr "" -#: src/stored/label.c:138 -#, c-format -msgid "Could not unserialize Volume label: ERR=%s\n" +#: src/lib/message.c:1700 +msgid "Debug SQL queries" msgstr "" -#: src/stored/label.c:143 -#, c-format -msgid "Volume Header Id bad: %s\n" +#: src/lib/message.c:1701 +msgid "Debug BVFS queries" msgstr "" -#: src/stored/label.c:175 -#, c-format -msgid "Volume on %s has wrong Bacula version. Wanted %d got %d\n" +#: src/lib/message.c:1702 +msgid "Debug memory allocation" msgstr "" -#: src/stored/label.c:186 -#, c-format -msgid "Volume on %s has bad Bacula label type: %x\n" +#: src/lib/message.c:1703 +msgid "Debug scheduler information" msgstr "" -#: src/stored/label.c:236 src/stored/label.c:397 src/stored/mount.c:463 -#, c-format -msgid "Could not reserve volume %s on %s\n" +#: src/lib/message.c:1704 +msgid "Debug protocol information" msgstr "" -#: src/stored/label.c:277 -#, c-format -msgid "Cannot write Volume label to block for device %s\n" +#: src/lib/message.c:1705 +msgid "Debug all information" msgstr "" -#: src/stored/label.c:328 src/stored/label.c:426 src/stored/mount.c:218 -#, c-format -msgid "Open device %s Volume \"%s\" failed: ERR=%s\n" +#: src/lib/edit.c:476 +msgid "Empty name not allowed.\n" msgstr "" -#: src/stored/label.c:451 +#: src/lib/edit.c:486 #, c-format -msgid "Rewind error on device %s: ERR=%s\n" +msgid "Illegal character \"%c\" in name.\n" msgstr "" -#: src/stored/label.c:458 -#, c-format -msgid "Truncate error on device %s: ERR=%s\n" +#: src/lib/edit.c:493 +msgid "Name too long.\n" msgstr "" -#: src/stored/label.c:464 -#, c-format -msgid "Failed to re-open DVD after truncate on device %s: ERR=%s\n" +#: src/lib/edit.c:499 src/dird/ua_label.c:656 src/dird/ua_cmds.c:345 +msgid "Volume name must be at least one character long.\n" msgstr "" -#: src/stored/label.c:487 +#: src/lib/tls.c:78 #, c-format -msgid "Unable to write device %s: ERR=%s\n" +msgid "" +"Error with certificate at depth: %d, issuer = %s, subject = %s, ERR=%d:%s\n" msgstr "" -#: src/stored/label.c:518 -#, c-format -msgid "Recycled volume \"%s\" on device %s, all previous data lost.\n" +#: src/lib/tls.c:115 +msgid "Error initializing SSL context" msgstr "" -#: src/stored/label.c:521 -#, c-format -msgid "Wrote label to prelabeled Volume \"%s\" on device %s\n" +#: src/lib/tls.c:136 +msgid "Error loading certificate verification stores" msgstr "" -#: src/stored/label.c:721 -#, c-format -msgid "Bad Volume session label = %d\n" +#: src/lib/tls.c:141 +msgid "" +"Either a certificate file or a directory must be specified as a verification " +"store\n" msgstr "" -#: src/stored/label.c:776 -#, c-format -msgid "Expecting Volume Label, got FI=%s Stream=%s len=%d\n" +#: src/lib/tls.c:152 +msgid "Error loading certificate file" msgstr "" -#: src/stored/label.c:903 -#, c-format -msgid "Unknown %d" +#: src/lib/tls.c:160 +msgid "Error loading private key" msgstr "" -#: src/stored/label.c:907 -#, c-format -msgid "" -"\n" -"Volume Label:\n" -"Id : %sVerNo : %d\n" -"VolName : %s\n" -"PrevVolName : %s\n" -"VolFile : %d\n" -"LabelType : %s\n" -"LabelSize : %d\n" -"PoolName : %s\n" -"MediaType : %s\n" -"PoolType : %s\n" -"HostName : %s\n" +#: src/lib/tls.c:168 +msgid "Unable to open DH parameters file" msgstr "" -#: src/stored/label.c:929 -#, c-format -msgid "Date label written: %s\n" +#: src/lib/tls.c:174 +msgid "Unable to load DH parameters from specified file" msgstr "" -#: src/stored/label.c:935 -#, c-format -msgid "Date label written: %04d-%02d-%02d at %02d:%02d\n" +#: src/lib/tls.c:178 +msgid "Failed to set TLS Diffie-Hellman parameters" msgstr "" -#: src/stored/label.c:955 -#, c-format -msgid "" -"\n" -"%s Record:\n" -"JobId : %d\n" -"VerNum : %d\n" -"PoolName : %s\n" -"PoolType : %s\n" -"JobName : %s\n" -"ClientName : %s\n" +#: src/lib/tls.c:188 +msgid "Error setting cipher list, no valid ciphers available\n" msgstr "" -#: src/stored/label.c:968 -#, c-format -msgid "" -"Job (unique name) : %s\n" -"FileSet : %s\n" -"JobType : %c\n" -"JobLevel : %c\n" +#: src/lib/tls.c:247 +msgid "Peer failed to present a TLS certificate\n" msgstr "" -#: src/stored/label.c:977 +#: src/lib/tls.c:292 src/lib/tls.c:293 #, c-format -msgid "" -"JobFiles : %s\n" -"JobBytes : %s\n" -"StartBlock : %s\n" -"EndBlock : %s\n" -"StartFile : %s\n" -"EndFile : %s\n" -"JobErrors : %s\n" -"JobStatus : %c\n" +msgid "Peer %s failed to present a TLS certificate\n" msgstr "" -#: src/stored/label.c:998 -#, c-format -msgid "Date written : %s\n" +#: src/lib/tls.c:408 +msgid "Error creating file descriptor-based BIO" msgstr "" -#: src/stored/label.c:1003 -#, c-format -msgid "Date written : %04d-%02d-%02d at %02d:%02d\n" +#: src/lib/tls.c:419 +msgid "Error creating new SSL object" msgstr "" -#: src/stored/label.c:1022 -msgid "Fresh Volume" +#: src/lib/tls.c:483 src/lib/tls.c:506 +msgid "Connect failure" msgstr "" -#: src/stored/label.c:1025 -msgid "Volume" +#: src/lib/tls.c:586 src/lib/tls.c:590 +msgid "TLS shutdown failure." msgstr "" -#: src/stored/label.c:1034 src/stored/read_record.c:428 -msgid "End of Media" +#: src/lib/tls.c:645 src/lib/tls.c:671 +msgid "TLS read/write failure." msgstr "" -#: src/stored/label.c:1037 -msgid "End of Tape" +#: src/lib/priv.c:56 +#, c-format +msgid "Could not find userid=%s: ERR=%s\n" msgstr "" -#: src/stored/label.c:1057 src/stored/label.c:1065 src/stored/label.c:1098 +#: src/lib/priv.c:62 #, c-format -msgid "%s Record: File:blk=%u:%u SessId=%d SessTime=%d JobId=%d DataLen=%d\n" +msgid "Could not find password entry. ERR=%s\n" msgstr "" -#: src/stored/label.c:1062 -msgid "End of physical tape.\n" +#: src/lib/priv.c:75 +#, c-format +msgid "Could not find group=%s: ERR=%s\n" msgstr "" -#: src/stored/label.c:1077 src/stored/label.c:1086 +#: src/lib/priv.c:83 #, c-format -msgid "%s Record: File:blk=%u:%u SessId=%d SessTime=%d JobId=%d\n" +msgid "Could not initgroups for group=%s, userid=%s: ERR=%s\n" msgstr "" -#: src/stored/label.c:1079 +#: src/lib/priv.c:86 #, c-format -msgid " Job=%s Date=%s Level=%c Type=%c\n" +msgid "Could not initgroups for userid=%s: ERR=%s\n" msgstr "" -#: src/stored/label.c:1088 +#: src/lib/priv.c:93 #, c-format -msgid " Date=%s Level=%c Type=%c Files=%s Bytes=%s Errors=%d Status=%c\n" +msgid "Could not set group=%s: ERR=%s\n" msgstr "" -#: src/stored/status.c:99 -msgid "Used Volume status:\n" +#: src/lib/priv.c:103 +#, fuzzy, c-format +msgid "prctl failed: ERR=%s\n" +msgstr "Помилка у %s файл %s: ERR=%s\n" + +#: src/lib/priv.c:107 +#, fuzzy, c-format +msgid "setreuid failed: ERR=%s\n" +msgstr "Помилка у %s файл %s: ERR=%s\n" + +#: src/lib/priv.c:111 +#, c-format +msgid "cap_from_text failed: ERR=%s\n" msgstr "" -#: src/stored/status.c:117 -msgid "" -"\n" -"SD Resources:\n" +#: src/lib/priv.c:115 +#, c-format +msgid "cap_set_proc failed: ERR=%s\n" msgstr "" -#: src/stored/status.c:153 -msgid "" -"\n" -"Device status:\n" +#: src/lib/priv.c:119 +msgid "Keep readall caps not implemented this OS or missing libraries.\n" msgstr "" -#: src/stored/status.c:157 +#: src/lib/priv.c:123 #, c-format -msgid "Autochanger \"%s\" with devices:\n" +msgid "Could not set specified userid: %s\n" msgstr "" -#: src/stored/status.c:177 +#: src/lib/res.c:53 #, c-format -msgid "" -"\n" -"Device %s is %s:\n" -" Volume: %s\n" -" Pool: %s\n" -" Media type: %s\n" +msgid "rwl_writelock failure at %s:%d: ERR=%s\n" msgstr "" -#: src/stored/status.c:182 -msgid "waiting for" +#: src/lib/res.c:63 +#, c-format +msgid "rwl_writeunlock failure at %s:%d:. ERR=%s\n" msgstr "" -#: src/stored/status.c:182 -msgid "mounted with" +#: src/lib/watchdog.c:84 +#, c-format +msgid "Unable to initialize watchdog lock. ERR=%s\n" msgstr "" -#: src/stored/status.c:184 -msgid "*unknown*" +#: src/lib/watchdog.c:181 +msgid "BUG! register_watchdog called before start_watchdog\n" msgstr "" -#: src/stored/status.c:188 +#: src/lib/watchdog.c:184 #, c-format -msgid "" -"\n" -"Device %s open but no Bacula volume is currently mounted.\n" +msgid "BUG! Watchdog %p has NULL callback\n" msgstr "" -#: src/stored/status.c:199 +#: src/lib/watchdog.c:187 #, c-format -msgid " Total Bytes=%s Blocks=%s Bytes/block=%s\n" +msgid "BUG! Watchdog %p has zero interval\n" msgstr "" -#: src/stored/status.c:214 -#, c-format -msgid " Total Bytes Read=%s Blocks Read=%s Bytes/block=%s\n" +#: src/lib/watchdog.c:207 +msgid "BUG! unregister_watchdog_unlocked called before start_watchdog\n" msgstr "" -#: src/stored/status.c:220 +#: src/lib/watchdog.c:327 #, c-format -msgid " Positioned at File=%s Block=%s\n" +msgid "rwl_writelock failure. ERR=%s\n" msgstr "" -#: src/stored/status.c:227 +#: src/lib/watchdog.c:342 #, c-format -msgid "" -"\n" -"Device %s is not open.\n" +msgid "rwl_writeunlock failure. ERR=%s\n" msgstr "" -#: src/stored/status.c:231 +#: src/lib/ini.c:94 src/lib/ini.c:106 #, c-format msgid "" -"\n" -"Device \"%s\" is not open or does not exist.\n" +"Config file error: %s\n" +" : Line %d, col %d of file %s\n" +"%s\n" msgstr "" -#: src/stored/status.c:255 -#, c-format -msgid "Daemon started %s. Jobs: run=%d, running=%d.\n" -msgstr "" +#: src/lib/ini.c:297 src/lib/ini.c:372 +#, fuzzy, c-format +msgid "Cannot open config file %s: %s\n" +msgstr "Не можливо створити чергу(fifo) %s: ERR=%s\n" -#: src/stored/status.c:293 -msgid "" -"No DEVICE structure.\n" -"\n" +#: src/lib/bget_msg.c:85 +msgid "Status OK\n" msgstr "" -#: src/stored/status.c:299 -msgid " Device is BLOCKED. User unmounted.\n" +#: src/lib/bget_msg.c:89 +#, c-format +msgid "bget_msg: unknown signal %d\n" msgstr "" -#: src/stored/status.c:303 -msgid " Device is BLOCKED. User unmounted during wait for media/mount.\n" +#: src/lib/address_conf.c:50 +#, c-format +msgid "Only ipv4 and ipv6 are supported (%d)\n" msgstr "" -#: src/stored/status.c:313 +#: src/lib/address_conf.c:54 #, c-format -msgid "" -" Device is BLOCKED waiting for mount of volume \"%s\",\n" -" Pool: %s\n" -" Media type: %s\n" +msgid "Only ipv4 is supported (%d)\n" msgstr "" -#: src/stored/status.c:322 +#: src/lib/address_conf.c:169 #, c-format -msgid "" -" Device is BLOCKED waiting to create a volume for:\n" -" Pool: %s\n" -" Media type: %s\n" +msgid "You tried to assign a ipv6 address to an ipv4(%d)\n" msgstr "" -#: src/stored/status.c:333 -msgid " Device is BLOCKED waiting for media.\n" +#: src/lib/address_conf.c:178 +#, c-format +msgid "You tried to assign an ipv4 address to an ipv6(%d)\n" msgstr "" -#: src/stored/status.c:339 -msgid " Device is being initialized.\n" +#: src/lib/address_conf.c:261 +#, c-format +msgid "Can't add default IPv4 address (%s)\n" msgstr "" -#: src/stored/status.c:343 -msgid " Device is blocked labeling a Volume.\n" +#: src/lib/address_conf.c:292 +msgid "" +"Old style addresses cannot be mixed with new style. Try removing Port=nnn." msgstr "" -#: src/stored/status.c:352 +#: src/lib/address_conf.c:314 #, c-format -msgid " Slot %d %s loaded in drive %d.\n" +msgid "Cannot resolve service(%s)" msgstr "" -#: src/stored/status.c:356 +#: src/lib/address_conf.c:324 #, c-format -msgid " Drive %d is not loaded.\n" +msgid "Cannot resolve hostname(%s) %s" msgstr "" -#: src/stored/status.c:371 src/stored/btape.c:688 +#: src/lib/address_conf.c:432 src/lib/address_conf.c:465 #, c-format -msgid "Configured device capabilities:\n" +msgid "Expected a block to begin with { but got: %s" msgstr "" -#: src/stored/status.c:389 -msgid "Device state:\n" +#: src/lib/address_conf.c:437 +msgid "Empty addr block is not allowed" msgstr "" -#: src/stored/status.c:405 +#: src/lib/address_conf.c:441 #, c-format -msgid " num_writers=%d reserves=%d block=%d\n" +msgid "Expected a string but got: %s" msgstr "" -#: src/stored/status.c:409 -msgid "Attached Jobs: " +#: src/lib/address_conf.c:452 +#, c-format +msgid "Expected a string [ip|ipv4|ipv6] but got: %s" msgstr "" -#: src/stored/status.c:427 src/stored/btape.c:720 +#: src/lib/address_conf.c:456 #, c-format -msgid "Device parameters:\n" +msgid "Expected a string [ip|ipv4] but got: %s" msgstr "" -#: src/stored/status.c:429 +#: src/lib/address_conf.c:461 #, c-format -msgid " Archive name: %s Device name: %s\n" +msgid "Expected an equal = but got: %s" msgstr "" -#: src/stored/status.c:432 +#: src/lib/address_conf.c:472 #, c-format -msgid " File=%u block=%u\n" +msgid "Expected an identifier [addr|port] but got: %s" msgstr "" -#: src/stored/status.c:434 -#, c-format -msgid " Min block=%u Max block=%u\n" +#: src/lib/address_conf.c:477 +msgid "Only one port per address block" msgstr "" -#: src/stored/status.c:455 -#, c-format -msgid "%s Job %s waiting for Client connection.\n" +#: src/lib/address_conf.c:483 +msgid "Only one addr per address block" msgstr "" -#: src/stored/status.c:471 +#: src/lib/address_conf.c:487 #, c-format -msgid "" -"Reading: %s %s job %s JobId=%d Volume=\"%s\"\n" -" pool=\"%s\" device=%s\n" +msgid "Expected a identifier [addr|port] but got: %s" msgstr "" -#: src/stored/status.c:484 +#: src/lib/address_conf.c:491 #, c-format -msgid "" -"Writing: %s %s job %s JobId=%d Volume=\"%s\"\n" -" pool=\"%s\" device=%s\n" +msgid "Expected a equal =, got: %s" msgstr "" -#: src/stored/status.c:495 +#: src/lib/address_conf.c:499 #, c-format -msgid " spooling=%d despooling=%d despool_wait=%d\n" +msgid "Expected a number or a string but got: %s" msgstr "" -#: src/stored/status.c:511 +#: src/lib/address_conf.c:505 #, c-format -msgid " Files=%s Bytes=%s AveBytes/sec=%s LastBytes/sec=%s\n" +msgid "Expected an IP number or a hostname but got: %s" msgstr "" -#: src/stored/status.c:523 +#: src/lib/address_conf.c:511 +msgid "State machine missmatch" +msgstr "" + +#: src/lib/address_conf.c:517 #, c-format -msgid " FDReadSeqNo=%s in_msg=%u out_msg=%d fd=%d\n" +msgid "Expected a end of block with } but got: %s" msgstr "" -#: src/stored/status.c:529 -msgid " FDSocket closed\n" +#: src/lib/address_conf.c:523 +#, c-format +msgid "Cannot add hostname(%s) and port(%s) to addrlist (%s)" msgstr "" -#: src/stored/status.c:550 -msgid "" -"\n" -"Jobs waiting to reserve a drive:\n" +#: src/lib/address_conf.c:529 +#, c-format +msgid "Expected an end of block with } but got: %s" msgstr "" -#: src/stored/status.c:581 -msgid "===================================================================\n" +#: src/lib/address_conf.c:538 +#, c-format +msgid "Expected an IP number or a hostname, got: %s" msgstr "" -#: src/stored/status.c:663 src/lib/util.c:423 src/filed/status.c:517 -msgid "Base" +#: src/lib/address_conf.c:543 src/lib/address_conf.c:557 +#, c-format +msgid "Cannot add port (%s) to (%s)" msgstr "" -#: src/stored/status.c:680 src/filed/status.c:534 -msgid "Init Catalog" +#: src/lib/address_conf.c:552 +#, c-format +msgid "Expected a port number or string, got: %s" msgstr "" -#: src/stored/status.c:683 src/filed/status.c:537 -msgid "Volume to Catalog" +#: src/lib/crypto.c:430 +msgid "Unable to open certificate file" msgstr "" -#: src/stored/status.c:686 src/filed/status.c:540 -msgid "Disk to Catalog" +#: src/lib/crypto.c:437 +msgid "Unable to read certificate from file" msgstr "" -#: src/stored/status.c:689 src/filed/status.c:543 -msgid "Data" +#: src/lib/crypto.c:443 +msgid "Unable to extract public key from certificate" msgstr "" -#: src/stored/status.c:695 src/lib/util.c:459 src/filed/status.c:549 -msgid "Unknown Job Level" +#: src/lib/crypto.c:450 +msgid "" +"Provided certificate does not include the required subjectKeyIdentifier " +"extension." msgstr "" -#: src/stored/status.c:763 +#: src/lib/crypto.c:457 #, c-format -msgid "3900 No arg in .status command: %s\n" +msgid "Unsupported key type provided: %d\n" msgstr "" -#: src/stored/status.c:811 -#, fuzzy, c-format -msgid "3900 Unknown arg in .status command: %s\n" -msgstr "Невідомий статус задачі %c. " - -#: src/stored/status.c:826 -msgid "Bacula Storage: Idle" +#: src/lib/crypto.c:494 src/lib/crypto.c:542 +msgid "Unable to open private key file" msgstr "" -#: src/stored/status.c:837 -msgid "Bacula Storage: Running" +#: src/lib/crypto.c:524 src/lib/crypto.c:558 +msgid "Unable to read private key from file" msgstr "" -#: src/stored/status.c:851 -msgid "Bacula Storage: Last Job Canceled" +#: src/lib/crypto.c:617 +#, c-format +msgid "Unsupported digest type: %d\n" +msgstr "Цей тип відбитку не підтримується: %d\n" + +#: src/lib/crypto.c:631 +msgid "OpenSSL digest initialization failed" +msgstr "Відбиток" + +#: src/lib/crypto.c:645 +msgid "OpenSSL digest update failed" +msgstr "Відбиток" + +#: src/lib/crypto.c:663 +msgid "OpenSSL digest finalize failed" +msgstr "Відбиток" + +#: src/lib/crypto.c:761 +msgid "OpenSSL digest_new failed" msgstr "" -#: src/stored/status.c:855 -msgid "Bacula Storage: Last Job Failed" +#: src/lib/crypto.c:767 +msgid "OpenSSL sign get digest failed" +msgstr "Відбиток" + +#: src/lib/crypto.c:806 src/lib/crypto.c:810 +msgid "OpenSSL digest Verify final failed" +msgstr "Відбиток" + +#: src/lib/crypto.c:815 +msgid "No signers found for crypto verify.\n" msgstr "" -#: src/stored/status.c:859 -msgid "Bacula Storage: Last Job had Warnings" +#: src/lib/crypto.c:876 +msgid "Signature creation failed" msgstr "" -#: src/stored/read_record.c:89 -#, c-format -msgid "End of Volume at file %u on device %s, Volume \"%s\"\n" +#: src/lib/crypto.c:954 +msgid "Signature decoding failed" msgstr "" -#: src/stored/read_record.c:93 -msgid "End of all volumes.\n" +#: src/lib/crypto.c:1031 +msgid "Unsupported cipher type specified\n" msgstr "" -#: src/stored/read_record.c:137 -msgid "part" +#: src/lib/crypto.c:1180 +msgid "CryptoData decoding failed" msgstr "" -#: src/stored/read_record.c:140 -msgid "file" +#: src/lib/crypto.c:1224 +msgid "Failure decrypting the session key" msgstr "" -#: src/stored/read_record.c:143 +#: src/lib/crypto.c:1275 #, c-format -msgid "End of %s %u on device %s, Volume \"%s\"\n" +msgid "Unsupported contentEncryptionAlgorithm: %d\n" msgstr "" -#: src/stored/read_record.c:158 -msgid "Did fsr in attemp to skip bad record.\n" +#: src/lib/crypto.c:1285 src/lib/crypto.c:1291 +msgid "OpenSSL cipher context initialization failed" msgstr "" -#: src/stored/read_record.c:397 -#, c-format -msgid "Forward spacing Volume \"%s\" to file:block %u:%u.\n" +#: src/lib/crypto.c:1298 +msgid "Encryption session provided an invalid symmetric key" msgstr "" -#: src/stored/read_record.c:421 -msgid "Begin Session" +#: src/lib/crypto.c:1304 +msgid "Encryption session provided an invalid IV" msgstr "" -#: src/stored/read_record.c:425 -msgid "End Session" +#: src/lib/crypto.c:1310 +msgid "OpenSSL cipher context key/IV initialization failed" msgstr "" -#: src/stored/read_record.c:431 +#: src/lib/crypto.c:1380 #, c-format -msgid "Unknown code %d\n" +msgid "Unable to init OpenSSL threading: ERR=%s\n" msgstr "" -#: src/stored/bextract.c:80 -#, c-format -msgid "" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: bextract \n" -" -b specify a bootstrap file\n" -" -c specify a Storage configuration file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -e exclude list\n" -" -i include list\n" -" -p proceed inspite of I/O errors\n" -" -v verbose\n" -" -V specify Volume names (separated by |)\n" -" -? print this message\n" -"\n" +#: src/lib/crypto.c:1393 +msgid "Failed to seed OpenSSL PRNG\n" msgstr "" -#: src/stored/bextract.c:196 src/stored/bcopy.c:161 src/stored/bscan.c:248 -#: src/tools/bvfs_test.c:201 src/tools/bbatch.c:190 src/tools/ing_test.c:185 -#: src/tools/cats_test.c:321 -msgid "Wrong number of arguments: \n" +#: src/lib/crypto.c:1419 +msgid "Failed to save OpenSSL PRNG\n" msgstr "" -#: src/stored/bextract.c:218 +#: src/lib/crypto.c:1480 #, c-format -msgid "%d Program Name and/or Program Data Stream records ignored.\n" -msgstr "" +msgid "Unsupported digest type=%d specified\n" +msgstr "Заданий тип відбитку=%d не підтримується\n" -#: src/stored/bextract.c:222 +#: src/lib/crypto.c:1500 #, c-format -msgid "%d Win32 data or Win32 gzip data stream records. Ignored.\n" +msgid "SHA1Update() returned an error: %d\n" msgstr "" -#: src/stored/bextract.c:249 -#, c-format -msgid "Cannot stat %s. It must exist. ERR=%s\n" +#: src/lib/crypto.c:1643 +msgid "No error" msgstr "" -#: src/stored/bextract.c:253 -#, c-format -msgid "%s must be a directory.\n" +#: src/lib/crypto.c:1645 +msgid "Signer not found" msgstr "" -#: src/stored/bextract.c:274 -#, c-format -msgid "%u files restored.\n" +#: src/lib/crypto.c:1647 +msgid "Recipient not found" msgstr "" -#: src/stored/bextract.c:284 src/stored/bextract.c:290 -#: src/filed/restore.c:1480 -#, c-format -msgid "Write error on %s: %s\n" -msgstr "" +#: src/lib/crypto.c:1649 +msgid "Unsupported digest algorithm" +msgstr "Відбиток" -#: src/stored/bextract.c:321 src/stored/bextract.c:587 -msgid "Logic error output file should be open but is not.\n" +#: src/lib/crypto.c:1651 +msgid "Unsupported encryption algorithm" msgstr "" -#: src/stored/bextract.c:335 src/filed/restore.c:569 -#, c-format -msgid "%s stream not supported on this Client.\n" +#: src/lib/crypto.c:1653 +msgid "Signature is invalid" msgstr "" -#: src/stored/bextract.c:345 -#, c-format -msgid "%s was deleted.\n" +#: src/lib/crypto.c:1655 +msgid "Decryption error" msgstr "" -#: src/stored/bextract.c:393 -#, c-format -msgid "Seek error on %s: %s\n" +#: src/lib/crypto.c:1658 +msgid "Internal error" msgstr "" -#: src/stored/bextract.c:429 src/stored/bextract.c:494 -#: src/filed/restore.c:1335 -#, c-format -msgid "Seek to %s error on %s: ERR=%s\n" +#: src/lib/crypto.c:1660 +msgid "Unknown error" msgstr "" -#: src/stored/bextract.c:448 +#: src/lib/attr.c:69 #, c-format -msgid "Uncompression error. ERR=%d\n" +msgid "Error scanning attributes: %s\n" msgstr "" -#: src/stored/bextract.c:462 src/filed/restore.c:1450 -msgid "GZIP data stream found, but GZIP not configured!\n" +#: src/lib/signal.c:56 +msgid "Invalid signal number" msgstr "" -#: src/stored/bextract.c:517 src/filed/restore.c:1376 +#: src/lib/signal.c:146 src/lib/signal.c:148 #, c-format -msgid "Compressed header version error. version=0x%x\n" +msgid "Bacula interrupted by signal %d: %s\n" msgstr "" -#: src/stored/bextract.c:522 src/filed/restore.c:1381 +#: src/lib/signal.c:164 #, c-format -msgid "Compressed header size error. comp_len=%d, msglen=%d\n" +msgid "Kaboom! %s, %s got signal %d - %s at %s. Attempting traceback.\n" msgstr "" -#: src/stored/bextract.c:544 +#: src/lib/signal.c:166 #, c-format -msgid "LZO uncompression error. ERR=%d\n" +msgid "Kaboom! exepath=%s\n" msgstr "" -#: src/stored/bextract.c:556 src/filed/restore.c:1414 +#: src/lib/signal.c:207 #, c-format -msgid "Compression algorithm 0x%x found, but not supported!\n" -msgstr "" - -#: src/stored/bextract.c:578 -msgid "Got Program Name or Data Stream. Ignored.\n" +msgid "Fork error: ERR=%s\n" msgstr "" -#: src/stored/bextract.c:592 src/filed/restore.c:328 src/filed/restore.c:1033 +#: src/lib/signal.c:215 #, c-format -msgid "Unknown stream=%d ignored. This shouldn't happen!\n" +msgid "Calling: %s %s %s %s\n" msgstr "" -#: src/stored/bcopy.c:74 +#: src/lib/signal.c:219 #, c-format -msgid "" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: bcopy [-d debug_level] \n" -" -b bootstrap specify a bootstrap file\n" -" -c specify a Storage configuration file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -i specify input Volume names (separated by |)\n" -" -o specify output Volume names (separated by |)\n" -" -p proceed inspite of errors\n" -" -v verbose\n" -" -w specify working directory (default /tmp)\n" -" -? print this message\n" -"\n" +msgid "execv: %s failed: ERR=%s\n" msgstr "" -#: src/stored/bcopy.c:202 src/stored/device.c:298 src/stored/btape.c:473 +#: src/lib/signal.c:241 #, c-format -msgid "dev open failed: %s\n" +msgid "It looks like the traceback worked...\n" msgstr "" -#: src/stored/bcopy.c:217 -msgid "Write of last block failed.\n" +#: src/lib/signal.c:243 +#, c-format +msgid "The btraceback call returned %d\n" msgstr "" -#: src/stored/bcopy.c:221 +#: src/lib/signal.c:303 #, c-format -msgid "%u Jobs copied. %u records copied.\n" +msgid "BA_NSIG too small (%d) should be (%d)\n" msgstr "" -#: src/stored/bcopy.c:238 src/stored/bscan.c:428 -#, c-format -msgid "Record: SessId=%u SessTim=%u FileIndex=%d Stream=%d len=%u\n" +#: src/lib/signal.c:309 +msgid "UNKNOWN SIGNAL" msgstr "" -#: src/stored/bcopy.c:254 -msgid "Volume is prelabeled. This volume cannot be copied.\n" +#: src/lib/signal.c:310 +msgid "Hangup" msgstr "" -#: src/stored/bcopy.c:257 -msgid "Volume label not copied.\n" +#: src/lib/signal.c:311 +msgid "Interrupt" msgstr "" -#: src/stored/bcopy.c:263 -msgid "Copy skipped. Record does not match BSR filter.\n" +#: src/lib/signal.c:312 +msgid "Quit" msgstr "" -#: src/stored/bcopy.c:280 src/stored/bcopy.c:288 src/stored/bcopy.c:316 -#: src/stored/btape.c:2756 -#, c-format -msgid "Cannot fixup device error. %s\n" +#: src/lib/signal.c:313 +msgid "Illegal instruction" msgstr "" -#: src/stored/bcopy.c:294 -msgid "EOM label not copied.\n" +#: src/lib/signal.c:314 +msgid "Trace/Breakpoint trap" msgstr "" -#: src/stored/bcopy.c:297 -msgid "EOT label not copied.\n" +#: src/lib/signal.c:315 +msgid "Abort" msgstr "" -#: src/stored/dvd.c:111 -msgid "No FreeSpace command defined.\n" +#: src/lib/signal.c:317 +msgid "EMT instruction (Emulation Trap)" msgstr "" -#: src/stored/dvd.c:145 -#, c-format -msgid "Cannot run free space command. Results=%s ERR=%s\n" +#: src/lib/signal.c:320 +msgid "IOT trap" msgstr "" -#: src/stored/dvd.c:261 -#, c-format -msgid "Error writing part %d to the DVD: ERR=%s\n" +#: src/lib/signal.c:322 +msgid "BUS error" msgstr "" -#: src/stored/dvd.c:263 -#, c-format -msgid "Error while writing current part to the DVD: %s" +#: src/lib/signal.c:323 +msgid "Floating-point exception" msgstr "" -#: src/stored/dvd.c:273 -#, c-format -msgid "Part %d (%lld bytes) written to DVD.\n" +#: src/lib/signal.c:324 +msgid "Kill, unblockable" msgstr "" -#: src/stored/dvd.c:292 -#, c-format -msgid "Remaining free space %s on %s\n" +#: src/lib/signal.c:325 +msgid "User-defined signal 1" msgstr "" -#: src/stored/dvd.c:358 -#, c-format -msgid "Next Volume part already exists on DVD. Cannot continue: %s\n" +#: src/lib/signal.c:326 +msgid "Segmentation violation" msgstr "" -#: src/stored/dvd.c:563 -#, c-format -msgid "" -"Error writing. Current part less than total number of parts (%d/%d, device=" -"%s)\n" +#: src/lib/signal.c:327 +msgid "User-defined signal 2" msgstr "" -#: src/stored/dvd.c:570 -#, c-format -msgid "Unable to write last on %s: ERR=%s\n" +#: src/lib/signal.c:328 +msgid "Broken pipe" msgstr "" -#: src/stored/butil.c:59 -msgid "Nohdr," +#: src/lib/signal.c:329 +msgid "Alarm clock" msgstr "" -#: src/stored/butil.c:62 -msgid "partial," +#: src/lib/signal.c:330 +msgid "Termination" msgstr "" -#: src/stored/butil.c:65 -msgid "empty," +#: src/lib/signal.c:332 +msgid "Stack fault" msgstr "" -#: src/stored/butil.c:68 -msgid "Nomatch," +#: src/lib/signal.c:334 +msgid "Child status has changed" msgstr "" -#: src/stored/butil.c:71 -msgid "cont," +#: src/lib/signal.c:335 +msgid "Continue" msgstr "" -#: src/stored/butil.c:148 -msgid "Volume name or names is too long. Please use a .bsr file.\n" +#: src/lib/signal.c:336 +msgid "Stop, unblockable" msgstr "" -#: src/stored/butil.c:168 -#, c-format -msgid "Cannot find device \"%s\" in config file %s.\n" +#: src/lib/signal.c:337 +msgid "Keyboard stop" msgstr "" -#: src/stored/butil.c:175 -#, c-format -msgid "Cannot init device %s\n" +#: src/lib/signal.c:338 +msgid "Background read from tty" msgstr "" -#: src/stored/butil.c:195 -#, c-format -msgid "Cannot open %s\n" +#: src/lib/signal.c:339 +msgid "Background write to tty" msgstr "" -#: src/stored/butil.c:282 -#, c-format -msgid "Could not find device \"%s\" in config file %s.\n" +#: src/lib/signal.c:340 +msgid "Urgent condition on socket" msgstr "" -#: src/stored/butil.c:287 -#, c-format -msgid "Using device: \"%s\" for reading.\n" +#: src/lib/signal.c:341 +msgid "CPU limit exceeded" msgstr "" -#: src/stored/butil.c:290 -#, c-format -msgid "Using device: \"%s\" for writing.\n" +#: src/lib/signal.c:342 +msgid "File size limit exceeded" msgstr "" -#: src/stored/butil.c:306 -msgid "Unexpected End of Data\n" +#: src/lib/signal.c:343 +msgid "Virtual alarm clock" msgstr "" -#: src/stored/butil.c:308 -msgid "Unexpected End of Tape\n" +#: src/lib/signal.c:344 +msgid "Profiling alarm clock" msgstr "" -#: src/stored/butil.c:310 -msgid "Unexpected End of File\n" +#: src/lib/signal.c:345 +msgid "Window size change" msgstr "" -#: src/stored/butil.c:312 -msgid "Tape Door is Open\n" +#: src/lib/signal.c:346 +msgid "I/O now possible" msgstr "" -#: src/stored/butil.c:314 -msgid "Unexpected Tape is Off-line\n" +#: src/lib/signal.c:348 +msgid "Power failure restart" msgstr "" -#: src/stored/acquire.c:74 -#, c-format -msgid "Acquire read: num_writers=%d not zero. Job %d canceled.\n" +#: src/lib/signal.c:351 +msgid "No runnable lwp" msgstr "" -#: src/stored/acquire.c:83 -#, c-format -msgid "No volumes specified for reading. Job %s canceled.\n" +#: src/lib/signal.c:354 +msgid "SIGLWP special signal used by thread library" msgstr "" -#: src/stored/acquire.c:92 -#, c-format -msgid "Logic error: no next volume to read. Numvol=%d Curvol=%d\n" +#: src/lib/signal.c:357 +msgid "Checkpoint Freeze" msgstr "" -#: src/stored/acquire.c:118 -#, c-format -msgid "" -"Changing read device. Want Media Type=\"%s\" have=\"%s\"\n" -" device=%s\n" +#: src/lib/signal.c:360 +msgid "Checkpoint Thaw" msgstr "" -#: src/stored/acquire.c:162 -#, c-format -msgid "Media Type change. New read device %s chosen.\n" +#: src/lib/signal.c:363 +msgid "Thread Cancellation" msgstr "" -#: src/stored/acquire.c:174 -#, c-format -msgid "No suitable device found to read Volume \"%s\"\n" +#: src/lib/signal.c:366 +msgid "Resource Lost (e.g. record-lock lost)" msgstr "" -#: src/stored/acquire.c:213 -#, c-format -msgid "Job %s canceled.\n" +#: src/lib/berrno.c:51 +msgid "Child exited normally." msgstr "" -#: src/stored/acquire.c:231 -#, c-format -msgid "Read open device %s Volume \"%s\" failed: ERR=%s\n" +#: src/lib/berrno.c:58 +msgid "Unknown error during program execvp" msgstr "" -#: src/stored/acquire.c:321 +#: src/lib/berrno.c:61 #, c-format -msgid "Too many errors trying to mount device %s for reading.\n" +msgid "Child exited with code %d" msgstr "" -#: src/stored/acquire.c:329 +#: src/lib/berrno.c:69 #, c-format -msgid "Ready to read from volume \"%s\" on device %s.\n" +msgid "Child died from signal %d: %s" msgstr "" -#: src/stored/acquire.c:381 -#, c-format -msgid "Want to append, but device %s is busy reading.\n" +#: src/lib/berrno.c:75 +msgid "Invalid errno. No error message possible." msgstr "" -#: src/stored/acquire.c:414 -#, c-format -msgid "Could not ready device %s for append.\n" +#: src/lib/rwlock.c:295 +msgid "rwl_writeunlock called too many times.\n" msgstr "" -#: src/stored/acquire.c:501 src/stored/spool.c:321 src/stored/block.c:386 -#: src/stored/block.c:769 src/stored/block.c:847 -#, c-format -msgid "Could not create JobMedia record for Volume=\"%s\" Job=%s\n" +#: src/lib/rwlock.c:300 +msgid "rwl_writeunlock by non-owner.\n" msgstr "" -#: src/stored/acquire.c:552 +#: src/lib/mem_pool.c:101 #, c-format -msgid "Alert: %s" +msgid "MemPool index %d larger than max %d\n" msgstr "" -#: src/stored/acquire.c:560 +#: src/lib/mem_pool.c:119 src/lib/mem_pool.c:139 src/lib/mem_pool.c:175 +#: src/lib/mem_pool.c:248 src/lib/mem_pool.c:268 src/lib/mem_pool.c:303 +#: src/lib/mem_pool.c:614 #, c-format -msgid "3997 Bad alert command: %s: ERR=%s.\n" +msgid "Out of memory requesting %d bytes\n" msgstr "" -#: src/stored/acquire.c:629 src/stored/dev.c:270 src/stored/dev.c:311 -#: src/lib/openssl.c:122 src/lib/openssl.c:181 -#, c-format -msgid "Unable to init mutex: ERR=%s\n" +#: src/lib/mem_pool.c:156 +msgid "obuf is NULL\n" msgstr "" -#: src/stored/acquire.c:635 -#, fuzzy, c-format -msgid "Unable to init r_mutex: ERR=%s\n" -msgstr "Не можливо встановити власника файлу %s: ERR=%s\n" - -#: src/stored/askdir.c:179 -msgid "Network error on bnet_recv in req_vol_info.\n" +#: src/lib/bnet_server.c:103 +#, c-format +msgid "Cannot open stream socket. ERR=%s. Current %s All %s\n" msgstr "" -#: src/stored/askdir.c:197 +#: src/lib/bnet_server.c:116 #, c-format -msgid "Error getting Volume info: %s" +msgid "Cannot set SO_REUSEADDR on socket: %s\n" msgstr "" -#: src/stored/askdir.c:376 +#: src/lib/bnet_server.c:125 #, c-format -msgid "Didn't get vol info vol=%s: ERR=%s" +msgid "Cannot bind port %d: ERR=%s: Retrying ...\n" msgstr "" -#: src/stored/askdir.c:432 +#: src/lib/bnet_server.c:133 src/lib/bnet_server.c:141 #, c-format -msgid "Error creating JobMedia record: ERR=%s\n" +msgid "Cannot bind port %d: ERR=%s.\n" msgstr "" -#: src/stored/askdir.c:439 -#, c-format -msgid "Error creating JobMedia record: %s\n" +#: src/lib/bnet_server.c:148 +msgid "No addr/port found to listen on.\n" msgstr "" -#: src/stored/askdir.c:522 +#: src/lib/bnet_server.c:154 #, c-format -msgid "Job %s canceled while waiting for mount on Storage Device \"%s\".\n" +msgid "Could not init client queue: ERR=%s\n" msgstr "" -#: src/stored/askdir.c:533 +#: src/lib/bnet_server.c:173 #, c-format -msgid "" -"Job %s is waiting. Cannot find any appendable volumes.\n" -"Please use the \"label\" command to create a new Volume for:\n" -" Storage: %s\n" -" Pool: %s\n" -" Media type: %s\n" +msgid "Error in select: %s\n" msgstr "" -#: src/stored/askdir.c:558 src/stored/askdir.c:658 +#: src/lib/bnet_server.c:196 #, c-format -msgid "Max time exceeded waiting to mount Storage Device %s for Job %s\n" +msgid "Connection from %s:%d refused by hosts.access\n" msgstr "" -#: src/stored/askdir.c:568 -msgid "pthread error in mount_next_volume.\n" +#: src/lib/bnet_server.c:224 +msgid "Could not create client BSOCK.\n" msgstr "" -#: src/stored/askdir.c:601 -msgid "Cannot request another volume: no volume name given.\n" +#: src/lib/bnet_server.c:231 +#, c-format +msgid "Could not add job to client queue: ERR=%s\n" msgstr "" -#: src/stored/askdir.c:607 +#: src/lib/bnet_server.c:248 #, c-format -msgid "Job %s canceled while waiting for mount on Storage Device %s.\n" +msgid "Could not destroy client queue: ERR=%s\n" msgstr "" -#: src/stored/askdir.c:624 +#: src/lib/runscript.c:224 #, c-format -msgid "" -"Please mount append Volume \"%s\" or label a new one for:\n" -" Job: %s\n" -" Storage: %s\n" -" Pool: %s\n" -" Media type: %s\n" +msgid "%s: run %s \"%s\"\n" msgstr "" -#: src/stored/askdir.c:630 +#: src/lib/runscript.c:233 #, c-format -msgid "" -"Please mount read Volume \"%s\" for:\n" -" Job: %s\n" -" Storage: %s\n" -" Pool: %s\n" -" Media type: %s\n" +msgid "Runscript: %s could not execute. ERR=%s\n" msgstr "" -#: src/stored/askdir.c:668 -msgid "pthread error in mount_volume\n" +#: src/lib/runscript.c:242 +#, c-format +msgid "%s: %s\n" msgstr "" -#: src/stored/record.c:75 +#: src/lib/runscript.c:247 #, c-format -msgid "unknown: %d" +msgid "Runscript: %s returned non-zero status=%d. ERR=%s\n" msgstr "" -#: src/stored/record.c:392 -msgid "Damaged buffer\n" +#: src/lib/runscript.c:285 src/dird/dird_conf.c:752 +msgid " --> RunScript\n" msgstr "" -#: src/stored/record.c:670 +#: src/lib/runscript.c:286 src/dird/dird_conf.c:753 #, c-format -msgid "Sanity check failed. maxlen=%d datalen=%d. Block discarded.\n" +msgid " --> Command=%s\n" msgstr "" -#: src/stored/read.c:65 -msgid "No Volume names found for restore.\n" +#: src/lib/runscript.c:287 src/dird/dird_conf.c:754 +#, c-format +msgid " --> Target=%s\n" msgstr "" -#: src/stored/read.c:120 +#: src/lib/runscript.c:288 src/dird/dird_conf.c:755 #, c-format -msgid ">filed: Error Hdr=%s\n" +msgid " --> RunOnSuccess=%u\n" msgstr "" -#: src/stored/read.c:121 src/stored/read.c:136 +#: src/lib/runscript.c:289 src/dird/dird_conf.c:756 #, c-format -msgid "Error sending to File daemon. ERR=%s\n" +msgid " --> RunOnFailure=%u\n" msgstr "" -#: src/stored/read.c:135 +#: src/lib/runscript.c:290 src/dird/dird_conf.c:757 #, c-format -msgid "Error sending to FD. ERR=%s\n" +msgid " --> FailJobOnError=%u\n" msgstr "" -#: src/stored/autochanger.c:65 +#: src/lib/runscript.c:291 src/dird/dird_conf.c:758 #, c-format -msgid "No Changer Name given for device %s. Cannot continue.\n" +msgid " --> RunWhen=%u\n" msgstr "" -#: src/stored/autochanger.c:71 -#, c-format -msgid "No Changer Command given for device %s. Cannot continue.\n" +#: src/lib/cram-md5.c:97 src/lib/cram-md5.c:125 +msgid "1999 Authorization failed.\n" msgstr "" -#: src/stored/autochanger.c:139 -#, c-format -msgid "No slot defined in catalog (slot=%d) for Volume \"%s\" on %s.\n" +#: src/lib/smartall.c:133 src/lib/smartall.c:244 src/lib/smartall.c:259 +msgid "Out of memory\n" msgstr "" -#: src/stored/autochanger.c:141 -msgid "Cartridge change or \"update slots\" may be required.\n" +#: src/lib/smartall.c:138 +msgid "Too much memory used." msgstr "" -#: src/stored/autochanger.c:147 +#: src/lib/smartall.c:168 #, c-format -msgid "No \"Changer Device\" for %s. Manual load of Volume may be required.\n" +msgid "Attempt to free NULL called from %s:%d\n" msgstr "" -#: src/stored/autochanger.c:154 +#: src/lib/smartall.c:182 #, c-format -msgid "No \"Changer Command\" for %s. Manual load of Volume may be requird.\n" +msgid "double free from %s:%d\n" msgstr "" -#: src/stored/autochanger.c:185 +#: src/lib/smartall.c:190 #, c-format -msgid "3304 Issuing autochanger \"load slot %d, drive %d\" command.\n" +msgid "qp->qnext->qprev != qp called from %s:%d\n" msgstr "" -#: src/stored/autochanger.c:193 +#: src/lib/smartall.c:194 #, c-format -msgid "3305 Autochanger \"load slot %d, drive %d\", status is OK.\n" +msgid "qp->qprev->qnext != qp called from %s:%d\n" msgstr "" -#: src/stored/autochanger.c:206 +#: src/lib/smartall.c:203 #, c-format -msgid "" -"3992 Bad autochanger \"load slot %d, drive %d\": ERR=%s.\n" -"Results=%s\n" +msgid "Overrun buffer: len=%d addr=%p allocated: %s:%d called from %s:%d\n" msgstr "" -#: src/stored/autochanger.c:268 +#: src/lib/smartall.c:281 #, c-format -msgid "3301 Issuing autochanger \"loaded? drive %d\" command.\n" +msgid "sm_realloc size: %d\n" msgstr "" -#: src/stored/autochanger.c:280 +#: src/lib/smartall.c:319 #, c-format -msgid "3302 Autochanger \"loaded? drive %d\", result is Slot %d.\n" +msgid "sm_realloc %d at %p from %s:%d\n" msgstr "" -#: src/stored/autochanger.c:287 +#: src/lib/smartall.c:379 #, c-format -msgid "3302 Autochanger \"loaded? drive %d\", result: nothing loaded.\n" +msgid "" +"\n" +"Orphaned buffers exist. Dump terminated following\n" +" discovery of bad links in chain of orphaned buffers.\n" +" Buffer address with bad links: %p\n" +msgstr "" + +#: src/lib/smartall.c:424 +#, c-format +msgid "Damaged buffer found. Called from %s:%d\n" msgstr "" -#: src/stored/autochanger.c:299 +#: src/lib/smartall.c:457 #, c-format msgid "" -"3991 Bad autochanger \"loaded? drive %d\" command: ERR=%s.\n" -"Results=%s\n" +"\n" +"Damaged buffers found at %s:%d\n" msgstr "" -#: src/stored/autochanger.c:316 -#, fuzzy, c-format -msgid "Lock failure on autochanger. ERR=%s\n" -msgstr "Проігноровано помилку SQL. ERR=%s\n" +#: src/lib/smartall.c:460 +msgid " discovery of bad prev link.\n" +msgstr "" -#: src/stored/autochanger.c:330 -#, c-format -msgid "Unlock failure on autochanger. ERR=%s\n" +#: src/lib/smartall.c:463 +msgid " discovery of bad next link.\n" msgstr "" -#: src/stored/autochanger.c:374 src/stored/autochanger.c:523 -#, c-format -msgid "3307 Issuing autochanger \"unload slot %d, drive %d\" command.\n" +#: src/lib/smartall.c:466 +msgid " discovery of data overrun.\n" +msgstr "" + +#: src/lib/smartall.c:469 +msgid " NULL pointer.\n" msgstr "" -#: src/stored/autochanger.c:387 +#: src/lib/smartall.c:475 #, c-format -msgid "" -"3995 Bad autochanger \"unload slot %d, drive %d\": ERR=%s\n" -"Results=%s\n" +msgid " Buffer address: %p\n" msgstr "" -#: src/stored/autochanger.c:473 +#: src/lib/smartall.c:482 #, c-format -msgid "Volume \"%s\" wanted on %s is in use by device %s\n" +msgid "Damaged buffer: %6u bytes allocated at line %d of %s %s\n" msgstr "" -#: src/stored/autochanger.c:541 +#: src/dird/job.c:50 #, c-format -msgid "3997 Bad autochanger \"unload slot %d, drive %d\": ERR=%s.\n" +msgid "Could not init job queue: ERR=%s\n" msgstr "" -#: src/stored/autochanger.c:585 +#: src/dird/job.c:82 #, c-format -msgid "3993 Device %s not an autochanger device.\n" +msgid "Could not add job queue: ERR=%s\n" msgstr "" -#: src/stored/autochanger.c:612 +#: src/dird/job.c:121 src/dird/ua_output.c:714 src/dird/xua_output.c:869 +#: src/tools/cats_test.c:363 #, c-format -msgid "3306 Issuing autochanger \"%s\" command.\n" +msgid "Could not open database \"%s\".\n" msgstr "" -#: src/stored/autochanger.c:615 -msgid "3996 Open bpipe failed.\n" +#: src/dird/job.c:135 src/dird/job.c:139 src/dird/job.c:145 +#: src/dird/ua_status.c:367 src/dird/ua_dotcmds.c:831 src/dird/ua_cmds.c:836 +#: src/dird/ua_cmds.c:1589 +msgid "unknown source" +msgstr "" + +#: src/dird/job.c:175 src/dird/job.c:397 src/dird/job.c:399 src/dird/job.c:599 +#: src/dird/job.c:601 src/dird/job.c:1303 src/dird/job.c:1345 +#: src/dird/job.c:1355 +msgid "Job resource" +msgstr "" + +#: src/dird/job.c:177 src/dird/job.c:1038 src/dird/job.c:1300 +#: src/dird/job.c:1347 src/dird/job.c:1363 src/dird/vbackup.c:77 +#: src/dird/mac.c:208 src/dird/mac.c:209 src/dird/backup.c:91 +msgid "Pool resource" msgstr "" -#: src/stored/autochanger.c:642 src/console/console.c:1458 +#: src/dird/job.c:222 src/dird/job.c:339 #, c-format -msgid "Autochanger error: ERR=%s\n" +msgid "Unimplemented job type: %d\n" msgstr "" -#: src/stored/stored.c:87 -#, fuzzy, c-format -msgid "" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: bacula-sd [options] [-c config_file] [config_file]\n" -" -c use as configuration file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -f run in foreground (for debugging)\n" -" -g set groupid to group\n" -" -m print kaboom output (for debugging)\n" -" -p proceed despite I/O errors\n" -" -s no signals (for debugging)\n" -" -t test - read config and exit\n" -" -u userid to \n" -" -v verbose user messages\n" -" -? print this message.\n" -"\n" +#: src/dird/job.c:263 +msgid "Job canceled because max start delay time exceeded.\n" msgstr "" -"\n" -"Версія: %s (%s) %s %s %s\n" -"\n" -"Використання: bat [-s] [-c config_file] [-d debug_level] [config_file]\n" -" -c set configuration file to file\n" -" -dnn set debug level to nn\n" -" -s без сигналів\n" -" -t перевірка - прочитати конфігурацію і вийти\n" -" -? print this message.\n" -"\n" -#: src/stored/stored.c:136 src/stored/btape.c:178 -#, c-format -msgid "Tape block size (%d) not multiple of system size (%d)\n" +#: src/dird/job.c:268 +msgid "Job canceled because max run sched time exceeded.\n" msgstr "" -#: src/stored/stored.c:140 src/stored/btape.c:182 -#, c-format -msgid "Tape block size (%d) is not a power of 2\n" +#: src/dird/job.c:378 +msgid "Failed to connect to File daemon.\n" msgstr "" -#: src/stored/stored.c:268 -msgid "Volume Session Time is ZERO!\n" -msgstr "" +#: src/dird/job.c:412 +#, fuzzy +msgid "Failed to select Storage daemon.\n" +msgstr "Відкриті з'єднання із Зберігачем.\n" -#: src/stored/stored.c:277 -#, c-format -msgid "Unable to create thread. ERR=%s\n" +#: src/dird/job.c:417 src/dird/ua_dotcmds.c:837 src/dird/ua_cmds.c:842 +#: src/dird/ua_cmds.c:1600 src/dird/msgchan.c:69 +msgid "Failed to connect to Storage daemon.\n" msgstr "" -#: src/stored/stored.c:310 src/stored/bscan.c:262 -#, c-format -msgid "No Storage resource defined in %s. Cannot continue.\n" -msgstr "" +#: src/dird/job.c:512 +#, fuzzy +msgid "canceled" +msgstr "Статус задачі: Відмінена" -#: src/stored/stored.c:316 +#: src/dird/job.c:526 #, c-format -msgid "Only one Storage resource permitted in %s\n" +msgid "JobId %s, Job %s marked to be %s.\n" msgstr "" -#: src/stored/stored.c:321 -#, c-format -msgid "No Director resource defined in %s. Cannot continue.\n" +#: src/dird/job.c:661 +msgid "Max wait time exceeded. Job canceled.\n" msgstr "" -#: src/stored/stored.c:326 -#, c-format -msgid "No Device resource defined in %s. Cannot continue.\n" +#: src/dird/job.c:666 +msgid "Max run time exceeded. Job canceled.\n" msgstr "" -#: src/stored/stored.c:334 -#, c-format -msgid "No Messages resource defined in %s. Cannot continue.\n" +#: src/dird/job.c:671 +msgid "Max run sched time exceeded. Job canceled.\n" msgstr "" -#: src/stored/stored.c:341 src/stored/bscan.c:270 +#: src/dird/job.c:793 #, c-format -msgid "No Working Directory defined in %s. Cannot continue.\n" +msgid "Pool \"%s\" not in database. ERR=%s" msgstr "" -#: src/stored/stored.c:363 +#: src/dird/job.c:797 #, c-format -msgid "\"TLS Certificate\" file not defined for Storage \"%s\" in %s.\n" +msgid "Created database record for Pool \"%s\".\n" msgstr "" -#: src/stored/stored.c:369 +#: src/dird/job.c:879 src/dird/job.c:923 #, c-format -msgid "\"TLS Key\" file not defined for Storage \"%s\" in %s.\n" +msgid "JobId %d already running. Duplicate job not allowed.\n" msgstr "" -#: src/stored/stored.c:375 +#: src/dird/job.c:911 #, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Storage \"%s\" in %s. At least one CA certificate store is required when " -"using \"TLS Verify Peer\".\n" +msgid "Cancelling duplicate JobId=%d.\n" msgstr "" -#: src/stored/stored.c:568 -#, c-format -msgid "Could not initialize %s\n" +#: src/dird/job.c:946 src/dird/job.c:947 +msgid "Run NextPool override" msgstr "" -#: src/stored/stored.c:582 -#, c-format -msgid "Could not open device %s\n" +#: src/dird/job.c:948 +msgid "Storage from Run NextPool override" msgstr "" -#: src/stored/stored.c:596 -#, c-format -msgid "Could not mount device %s\n" +#: src/dird/job.c:952 src/dird/job.c:953 src/dird/job.c:1357 +msgid "Job's NextPool resource" msgstr "" -#: src/stored/device.c:120 -#, c-format -msgid "End of medium on Volume \"%s\" Bytes=%s Blocks=%s at %s.\n" +#: src/dird/job.c:954 +msgid "Storage from Job's NextPool resource" msgstr "" -#: src/stored/device.c:139 -#, c-format -msgid "New volume \"%s\" mounted on device %s at %s.\n" +#: src/dird/job.c:962 src/dird/job.c:963 +msgid "Job Pool's NextPool resource" msgstr "" -#: src/stored/device.c:151 -#, c-format -msgid "write_block_to_device Volume label failed. ERR=%s" +#: src/dird/job.c:964 +msgid "Storage from Pool's NextPool resource" msgstr "" -#: src/stored/device.c:186 -#, c-format -msgid "write_block_to_device overflow block failed. ERR=%s" +#: src/dird/job.c:995 +msgid "Run Pool override" msgstr "" -#: src/stored/device.c:191 -#, c-format -msgid "Catastrophic error. Cannot write overflow block to device %s. ERR=%s" +#: src/dird/job.c:1006 +msgid "Run FullPool override" msgstr "" -#: src/stored/device.c:327 src/stored/dev.c:512 -#, c-format -msgid "Unable to open device %s: ERR=%s\n" +#: src/dird/job.c:1008 +msgid "Job FullPool override" msgstr "" -#: src/stored/device.c:329 -#, c-format -msgid "Unable to open archive %s: ERR=%s\n" +#: src/dird/job.c:1017 +msgid "Run IncPool override" msgstr "" -#: src/stored/fd_cmds.c:166 -#, c-format -msgid "Command error with FD, hanging up. %s\n" +#: src/dird/job.c:1019 +msgid "Job IncPool override" msgstr "" -#: src/stored/fd_cmds.c:169 -msgid "Command error with FD, hanging up.\n" +#: src/dird/job.c:1028 +msgid "Run DiffPool override" msgstr "" -#: src/stored/fd_cmds.c:180 -#, c-format -msgid "FD command not found: %s\n" +#: src/dird/job.c:1030 +msgid "Job DiffPool override" msgstr "" -#: src/stored/fd_cmds.c:206 -msgid "Append data error.\n" -msgstr "" +#: src/dird/job.c:1097 +msgid "FileSet MD5 digest not found.\n" +msgstr "Не знайдено відбиток MD5 Набору Файлів.\n" -#: src/stored/fd_cmds.c:211 -msgid "Attempt to append on non-open session.\n" +#: src/dird/job.c:1102 +#, c-format +msgid "Could not create FileSet \"%s\" record. ERR=%s\n" msgstr "" -#: src/stored/fd_cmds.c:223 src/stored/fd_cmds.c:266 -msgid "Attempt to close non-open session.\n" +#: src/dird/job.c:1144 +#, c-format +msgid "Error updating job record. %s" msgstr "" -#: src/stored/fd_cmds.c:241 -msgid "Attempt to open already open session.\n" +#: src/dird/job.c:1290 +msgid "Run pool override" msgstr "" -#: src/stored/fd_cmds.c:295 -msgid "Attempt to read on non-open session.\n" +#: src/dird/job.c:1295 +msgid "Run storage override" msgstr "" -#: src/stored/fd_cmds.c:313 src/stored/fd_cmds.c:322 -msgid "Attempt to open read on non-open session.\n" +#: src/dird/job.c:1366 +msgid "Client resource" msgstr "" -#: src/stored/mount.c:98 -#, c-format -msgid "Too many errors trying to mount device %s.\n" +#: src/dird/job.c:1422 src/dird/ua_run.c:392 +msgid "No storage specified.\n" msgstr "" -#: src/stored/mount.c:106 +#: src/dird/job.c:1583 #, c-format -msgid "Job %d canceled.\n" +msgid "Could not start clone job: \"%s\".\n" msgstr "" -#: src/stored/mount.c:282 +#: src/dird/job.c:1586 #, c-format -msgid "Volume \"%s\" previously written, moving to end of data.\n" +msgid "Clone JobId %d started.\n" msgstr "" -#: src/stored/mount.c:288 -#, c-format -msgid "Unable to position to end of data on device %s: ERR=%s\n" +#: src/dird/vbackup.c:64 src/dird/mac.c:97 +msgid "Could not get or create a Pool record.\n" msgstr "" -#: src/stored/mount.c:411 src/stored/mount.c:737 +#: src/dird/vbackup.c:121 #, c-format -msgid "Volume \"%s\" not on device %s.\n" +msgid "Start Virtual Backup JobId %s, Job=%s\n" msgstr "" -#: src/stored/mount.c:444 -#, c-format +#: src/dird/vbackup.c:125 msgid "" -"Director wanted Volume \"%s\".\n" -" Current Volume \"%s\" not acceptable because:\n" -" %s" +"This Job is not an Accurate backup so is not equivalent to a Full backup.\n" msgstr "" -#: src/stored/mount.c:603 +#: src/dird/vbackup.c:141 src/dird/ua_dotcmds.c:749 src/dird/ua_restore.c:778 +#: src/dird/ua_restore.c:821 #, c-format -msgid "Ready to append to end of Volume \"%s\" part=%d size=%s\n" +msgid "Unable to get Job record for JobId=%s: ERR=%s\n" msgstr "" -#: src/stored/mount.c:607 +#: src/dird/vbackup.c:145 src/dird/ua_restore.c:782 #, c-format -msgid "" -"Bacula cannot write on DVD Volume \"%s\" because: The sizes do not match! " -"Volume=%s Catalog=%s\n" +msgid "Selecting jobs to build the Full state at %s\n" msgstr "" -#: src/stored/mount.c:621 -#, c-format -msgid "Ready to append to end of Volume \"%s\" at file=%d.\n" +#: src/dird/vbackup.c:171 +msgid "No valid Jobs found from user selection.\n" msgstr "" -#: src/stored/mount.c:624 +#: src/dird/vbackup.c:175 #, c-format -msgid "" -"For Volume \"%s\":\n" -"The number of files mismatch! Volume=%u Catalog=%u\n" -"Correcting Catalog\n" +msgid "Using user supplied JobIds=%s\n" msgstr "" -#: src/stored/mount.c:631 src/stored/mount.c:659 -msgid "Error updating Catalog\n" +#: src/dird/vbackup.c:194 +msgid "No previous Full found in list, using Differential level\n" msgstr "" -#: src/stored/mount.c:636 -#, c-format -msgid "" -"Bacula cannot write on tape Volume \"%s\" because:\n" -"The number of files mismatch! Volume=%u Catalog=%u\n" +#: src/dird/vbackup.c:199 +msgid "No previous Full found in list, using Incremental level\n" msgstr "" -#: src/stored/mount.c:647 -#, c-format -msgid "Ready to append to end of Volume \"%s\" size=%s\n" +#: src/dird/vbackup.c:212 +msgid "No previous Jobs found.\n" msgstr "" -#: src/stored/mount.c:651 +#: src/dird/vbackup.c:235 #, c-format -msgid "" -"For Volume \"%s\":\n" -"The sizes do not match! Volume=%s Catalog=%s\n" -"Correcting Catalog\n" +msgid "Error getting Job record for previous Job: ERR=%s" msgstr "" -#: src/stored/mount.c:664 +#: src/dird/vbackup.c:241 src/dird/mac.c:112 +msgid "Could not get or create the FileSet record.\n" +msgstr "" + +#: src/dird/vbackup.c:361 src/dird/admin.c:78 src/dird/mac.c:688 +#: src/dird/backup.c:749 #, c-format -msgid "" -"Bacula cannot write on disk Volume \"%s\" because: The sizes do not match! " -"Volume=%s Catalog=%s\n" +msgid "Error getting Job record for Job report: ERR=%s" msgstr "" -#: src/stored/mount.c:727 +#: src/dird/vbackup.c:368 src/dird/backup.c:756 #, c-format -msgid "Labeled new Volume \"%s\" on device %s.\n" +msgid "Error getting Client record for Job report: ERR=%s" msgstr "" -#: src/stored/mount.c:732 +#: src/dird/vbackup.c:374 src/dird/mac.c:718 src/dird/backup.c:762 #, c-format -msgid "Device %s not configured to autolabel Volumes.\n" +msgid "Error getting Media record for Volume \"%s\": ERR=%s" msgstr "" -#: src/stored/mount.c:751 +#: src/dird/vbackup.c:411 src/dird/restore.c:614 src/dird/admin.c:98 +#: src/dird/backup.c:802 #, c-format -msgid "Marking Volume \"%s\" in Error in Catalog.\n" +msgid "Inappropriate term code: %c\n" msgstr "" -#: src/stored/mount.c:768 +#: src/dird/vbackup.c:448 #, c-format msgid "" -"Autochanger Volume \"%s\" not found in slot %d.\n" -" Setting InChanger to zero in catalog.\n" +"%s %s %s (%s):\n" +" Build OS: %s %s %s\n" +" JobId: %d\n" +" Job: %s\n" +" Backup Level: Virtual Full\n" +" Client: \"%s\" %s\n" +" FileSet: \"%s\" %s\n" +" Pool: \"%s\" (From %s)\n" +" Catalog: \"%s\" (From %s)\n" +" Storage: \"%s\" (From %s)\n" +" Scheduled time: %s\n" +" Start time: %s\n" +" End time: %s\n" +" Elapsed time: %s\n" +" Priority: %d\n" +" SD Files Written: %s\n" +" SD Bytes Written: %s (%sB)\n" +" Rate: %.1f KB/s\n" +" Volume name(s): %s\n" +" Volume Session Id: %d\n" +" Volume Session Time: %d\n" +" Last Volume Bytes: %s (%sB)\n" +" SD Errors: %d\n" +" SD termination status: %s\n" +" Termination: %s\n" +"\n" msgstr "" -#: src/stored/mount.c:787 -msgid "Hey!!!!! WroteVol non-zero !!!!!\n" +#: src/dird/ua_output.c:57 src/dird/ua_output.c:81 src/dird/xua_output.c:56 +#: src/dird/xua_output.c:80 +msgid "ON or OFF keyword missing.\n" msgstr "" -#: src/stored/mount.c:834 -#, c-format -msgid "" -"Invalid tape position on volume \"%s\" on device %s. Expected %d, got %d\n" +#: src/dird/ua_output.c:101 src/dird/xua_output.c:100 +msgid "Disabled Jobs:\n" msgstr "" -#: src/stored/mount.c:875 src/stored/btape.c:3122 -#, c-format -msgid "Cannot open Dev=%s, Vol=%s\n" +#: src/dird/ua_output.c:107 src/dird/xua_output.c:106 +msgid "No disabled Jobs.\n" msgstr "" -#: src/stored/mac.c:81 -msgid "Read and write devices not properly initialized.\n" +#: src/dird/ua_output.c:151 +msgid "disabled" msgstr "" -#: src/stored/mac.c:87 -#, c-format -msgid "No Volume names found for %s.\n" +#: src/dird/ua_output.c:199 src/dird/xua_output.c:204 +msgid "Keywords for the show command are:\n" msgstr "" -#: src/stored/pythonsd.c:160 src/filed/pythonfd.c:142 +#: src/dird/ua_output.c:205 src/dird/xua_output.c:211 #, c-format -msgid "Cannot delete attribute %s" +msgid "%s resource %s not found.\n" msgstr "" -#: src/stored/pythonsd.c:193 src/filed/pythonfd.c:160 src/filed/pythonfd.c:176 +#: src/dird/ua_output.c:208 src/dird/xua_output.c:215 #, c-format -msgid "Cannot find attribute %s" -msgstr "" - -#: src/stored/pythonsd.c:208 -msgid "Error in ParseTuple\n" +msgid "Resource %s not found\n" msgstr "" -#: src/stored/pythonsd.c:224 -msgid "Parse tuple error in job_write\n" +#: src/dird/ua_output.c:278 src/dird/xua_output.c:356 +msgid "Hey! DB is NULL\n" msgstr "" -#: src/stored/pythonsd.c:261 +#: src/dird/ua_output.c:435 src/dird/xua_output.c:590 #, c-format -msgid "Error in Python method %s\n" +msgid "Jobid %d used %d Volume(s): %s\n" msgstr "" -#: src/stored/spool.c:83 -msgid "Spooling statistics:\n" +#: src/dird/ua_output.c:454 src/dird/xua_output.c:609 +msgid "No Pool specified.\n" msgstr "" -#: src/stored/spool.c:86 +#: src/dird/ua_output.c:465 src/dird/ua_select.c:531 src/dird/xua_output.c:620 +#: src/dird/ua_update.c:424 #, c-format -msgid "" -"Data spooling: %u active jobs, %s bytes; %u total jobs, %s max bytes/job.\n" +msgid "Error obtaining pool ids. ERR=%s\n" msgstr "" -#: src/stored/spool.c:94 +#: src/dird/ua_output.c:475 src/dird/xua_output.c:630 #, c-format -msgid "Attr spooling: %u active jobs, %s bytes; %u total jobs, %s max bytes.\n" +msgid "Pool: %s\n" msgstr "" -#: src/stored/spool.c:112 -msgid "Spooling data ...\n" +#: src/dird/ua_output.c:491 src/dird/xua_output.c:646 +msgid "Ignoring invalid value for days. Max is 50.\n" msgstr "" -#: src/stored/spool.c:138 +#: src/dird/ua_output.c:513 src/dird/xua_output.c:668 #, c-format -msgid "Bad return from despool WroteVol=%d\n" +msgid "Unknown list keyword: %s\n" msgstr "" -#: src/stored/spool.c:171 +#: src/dird/ua_output.c:538 src/dird/xua_output.c:693 #, c-format -msgid "Open data spool file %s failed: ERR=%s\n" -msgstr "" - -#: src/stored/spool.c:225 -msgid "Despooling zero bytes. Your disk is probably FULL!\n" +msgid "%s is not a job name.\n" msgstr "" -#: src/stored/spool.c:234 +#: src/dird/ua_output.c:552 src/dird/xua_output.c:707 #, c-format -msgid "Committing spooled data to Volume \"%s\". Despooling %s bytes ...\n" +msgid "Could not find Pool for Job %s\n" msgstr "" -#: src/stored/spool.c:239 +#: src/dird/ua_output.c:565 src/dird/xua_output.c:720 #, c-format -msgid "Writing spooled data to Volume. Despooling %s bytes ...\n" +msgid "Could not find next Volume for Job %s (Pool=%s, Level=%s).\n" msgstr "" -#: src/stored/spool.c:339 +#: src/dird/ua_output.c:569 src/dird/xua_output.c:724 #, c-format msgid "" -"Despooling elapsed time = %02d:%02d:%02d, Transfer rate = %s Bytes/second\n" +"The next Volume to be used by Job \"%s\" (Pool=%s, Level=%s) will be %s\n" msgstr "" -#: src/stored/spool.c:348 src/stored/spool.c:549 src/stored/spool.c:595 +#: src/dird/ua_output.c:582 src/dird/xua_output.c:737 #, c-format -msgid "Ftruncate spool file failed: ERR=%s\n" +msgid "Could not find next Volume for Job %s.\n" msgstr "" -#: src/stored/spool.c:407 +#: src/dird/ua_output.c:727 src/dird/xua_output.c:882 #, c-format -msgid "Spool header read error. ERR=%s\n" +msgid "Pool %s not in database. %s" msgstr "" -#: src/stored/spool.c:410 +#: src/dird/ua_output.c:735 src/dird/xua_output.c:890 #, c-format -msgid "Spool read error. Wanted %u bytes, got %d\n" +msgid "Pool %s created in database.\n" msgstr "" -#: src/stored/spool.c:411 -#, c-format -msgid "Spool header read error. Wanted %u bytes, got %d\n" +#: src/dird/ua_output.c:788 src/dird/xua_output.c:943 +msgid "You have no messages.\n" msgstr "" -#: src/stored/spool.c:418 src/stored/spool.c:419 -#, c-format -msgid "Spool block too big. Max %u bytes, got %u\n" +#: src/dird/ua_output.c:868 src/dird/xua_output.c:1023 +msgid "Message too long to display.\n" msgstr "" -#: src/stored/spool.c:425 src/stored/spool.c:426 +#: src/dird/jobq.c:62 #, c-format -msgid "Spool data read error. Wanted %u bytes, got %d\n" +msgid "pthread_attr_init: ERR=%s\n" msgstr "" -#: src/stored/spool.c:480 +#: src/dird/jobq.c:71 #, c-format -msgid "" -"User specified Job spool size reached: JobSpoolSize=%s MaxJobSpoolSize=%s\n" +msgid "pthread_mutex_init: ERR=%s\n" msgstr "" -#: src/stored/spool.c:485 +#: src/dird/jobq.c:77 #, c-format -msgid "" -"User specified Device spool size reached: DevSpoolSize=%s MaxDevSpoolSize=" -"%s\n" +msgid "pthread_cond_init: ERR=%s\n" msgstr "" -#: src/stored/spool.c:492 -msgid "Bad return from despool in write_block.\n" +#: src/dird/jobq.c:119 +#, c-format +msgid "pthread_cond_broadcast: ERR=%s\n" msgstr "" -#: src/stored/spool.c:500 -msgid "Spooling data again ...\n" +#: src/dird/jobq.c:127 +#, c-format +msgid "pthread_cond_wait: ERR=%s\n" msgstr "" -#: src/stored/spool.c:532 +#: src/dird/jobq.c:168 #, c-format -msgid "Error writing header to spool file. ERR=%s\n" +msgid "Job %s waiting %d seconds for scheduled start time.\n" msgstr "" -#: src/stored/spool.c:537 +#: src/dird/jobq.c:230 #, c-format -msgid "" -"Error writing header to spool file. Disk probably full. Attempting recovery. " -"Wanted to write=%d got=%d\n" +msgid "pthread_thread_create: ERR=%s\n" msgstr "" -#: src/stored/spool.c:555 src/stored/spool.c:601 -msgid "Fatal despooling error." +#: src/dird/jobq.c:340 +#, c-format +msgid "pthread_cond_signal: ERR=%s\n" msgstr "" -#: src/stored/spool.c:563 -msgid "Retrying after header spooling error failed.\n" +#: src/dird/jobq.c:351 +#, c-format +msgid "pthread_create: ERR=%s\n" msgstr "" -#: src/stored/spool.c:579 +#: src/dird/jobq.c:635 #, c-format -msgid "Error writing data to spool file. ERR=%s\n" +msgid "Rescheduled Job %s at %s to re-run in %d seconds (%s).\n" msgstr "" -#: src/stored/spool.c:612 -msgid "Retrying after data spooling error failed.\n" +#: src/dird/jobq.c:694 src/dird/jobq.c:699 +msgid "previous Job" msgstr "" -#: src/stored/spool.c:682 -msgid "Network error on BlastAttributes.\n" +#: src/dird/jobq.c:736 +#, c-format +msgid "" +"Job canceled. Attempt to read and write same device.\n" +" Read storage \"%s\" (From %s) -- Write storage \"%s\" (From %s)\n" msgstr "" -#: src/stored/spool.c:706 src/stored/spool.c:730 +#: src/dird/ua_select.c:42 #, c-format -msgid "Fseek on attributes file failed: ERR=%s\n" +msgid "The current %s retention period is: %s\n" msgstr "" -#: src/stored/spool.c:718 -#, fuzzy, c-format -msgid "Truncate on attributes file failed: ERR=%s\n" -msgstr "Помилка у %s файл %s: ERR=%s\n" +#: src/dird/ua_select.c:47 +msgid "Continue? (yes/mod/no): " +msgstr "" -#: src/stored/spool.c:742 -#, c-format -msgid "Sending spooled attrs to the Director. Despooling %s bytes ...\n" +#: src/dird/ua_select.c:50 src/dird/ua_run.c:614 +msgid "mod" msgstr "" -#: src/stored/spool.c:768 -#, c-format -msgid "fopen attr spool file %s failed: ERR=%s\n" +#: src/dird/ua_select.c:51 +msgid "Enter new retention period: " msgstr "" -#: src/stored/lock.c:405 -#, c-format -msgid "pthread_cond_wait failure. ERR=%s\n" +#: src/dird/ua_select.c:55 +msgid "Invalid period.\n" msgstr "" -#: src/stored/lock.c:504 -msgid "unknown blocked code" +#: src/dird/ua_select.c:131 src/dird/ua_run.c:555 +msgid "You have the following choices:\n" msgstr "" -#: src/stored/stored_conf.c:241 -#, c-format -msgid "Expected a Device Type keyword, got: %s" +#: src/dird/ua_select.c:154 +msgid "The defined Storage resources are:\n" msgstr "" -#: src/stored/stored_conf.c:255 -#, c-format -msgid "" -"Maximum Block Size configured value %u is greater than allowed maximum: %u" +#: src/dird/ua_select.c:166 src/dird/ua_dotcmds.c:944 src/dird/ua_run.c:619 +#: src/dird/ua_cmds.c:1093 +msgid "Storage" msgstr "" -#: src/stored/stored_conf.c:269 -#, c-format -msgid "Warning: no \"%s\" resource (%d) defined.\n" +#: src/dird/ua_select.c:166 +msgid "Select Storage resource" msgstr "" -#: src/stored/stored_conf.c:272 -#, c-format -msgid "dump_resource type=%d\n" +#: src/dird/ua_select.c:181 src/dird/ua_restore.c:1296 +msgid "The defined FileSet resources are:\n" msgstr "" -#: src/stored/stored_conf.c:388 -#, c-format -msgid "Warning: unknown resource type %d\n" +#: src/dird/ua_select.c:189 src/dird/ua_restore.c:1300 src/dird/ua_run.c:621 +msgid "FileSet" msgstr "" -#: src/stored/stored_conf.c:555 src/stored/stored_conf.c:645 -#: src/stored/stored_conf.c:680 src/wx-console/console_conf.c:164 -#: src/wx-console/console_conf.c:239 src/wx-console/console_conf.c:284 -#: src/wx-console/console_conf.c:311 src/console/console_conf.c:157 -#: src/console/console_conf.c:233 src/console/console_conf.c:278 -#: src/console/console_conf.c:305 src/filed/filed_conf.c:333 -#: src/filed/filed_conf.c:398 src/filed/filed_conf.c:428 -#: src/qt-console/bat_conf.cpp:161 src/qt-console/bat_conf.cpp:239 -#: src/qt-console/bat_conf.cpp:287 src/qt-console/bat_conf.cpp:317 -#, c-format -msgid "Unknown resource type %d\n" -msgstr "Невідомий тип ресурсу %d\n" +#: src/dird/ua_select.c:189 src/dird/ua_restore.c:1300 +msgid "Select FileSet resource" +msgstr "" -#: src/stored/stored_conf.c:584 -#, c-format -msgid "\"%s\" item is required in \"%s\" resource, but not found.\n" +#: src/dird/ua_select.c:219 src/dird/ua_cmds.c:2062 +msgid "Could not find a Catalog resource\n" msgstr "" -#: src/stored/stored_conf.c:590 -#, c-format -msgid "Too many items in \"%s\" resource\n" +#: src/dird/ua_select.c:222 +msgid "You must specify a \"use \" command before continuing.\n" msgstr "" -#: src/stored/stored_conf.c:624 -#, c-format -msgid "Cannot find AutoChanger resource %s\n" +#: src/dird/ua_select.c:228 +msgid "The defined Catalog resources are:\n" msgstr "" -#: src/stored/stored_conf.c:640 -#, fuzzy, c-format -msgid "Unable to init lock: ERR=%s\n" -msgstr "Не можливо встановити власника файлу %s: ERR=%s\n" +#: src/dird/ua_select.c:236 +msgid "Catalog" +msgstr "" -#: src/stored/stored_conf.c:698 -#, c-format -msgid "" -"Attempt to define second \"%s\" resource named \"%s\" is not permitted.\n" +#: src/dird/ua_select.c:236 +msgid "Select Catalog resource" msgstr "" -#: src/stored/dev.c:127 -#, c-format -msgid "Unable to stat device %s: ERR=%s\n" +#: src/dird/ua_select.c:254 src/dird/ua_select.c:280 +msgid "The defined Job resources are:\n" msgstr "" -#: src/stored/dev.c:145 -#, c-format -msgid "" -"%s is an unknown device type. Must be tape or directory\n" -" or have RequiresMount=yes for DVD. st_mode=%x\n" +#: src/dird/ua_select.c:265 src/dird/ua_select.c:288 src/dird/ua_select.c:329 +#: src/dird/ua_select.c:1341 src/dird/ua_run.c:620 src/dird/dird_conf.c:675 +#: src/dird/ua_prune.c:598 +msgid "Job" msgstr "" -#: src/stored/dev.c:155 -msgid "DVD support is now deprecated\n" +#: src/dird/ua_select.c:265 src/dird/ua_select.c:288 +msgid "Select Job resource" msgstr "" -#: src/stored/dev.c:231 +#: src/dird/ua_select.c:307 #, c-format -msgid "Unable to stat mount point %s: ERR=%s\n" +msgid "Error: Restore Job resource \"%s\" does not exist.\n" msgstr "" -#: src/stored/dev.c:236 -msgid "" -"Mount and unmount commands must defined for a device which requires mount.\n" +#: src/dird/ua_select.c:321 +msgid "The defined Restore Job resources are:\n" msgstr "" -#: src/stored/dev.c:247 -#, c-format -msgid "Min block size > max on device %s\n" +#: src/dird/ua_select.c:329 +msgid "Select Restore Job" msgstr "" -#: src/stored/dev.c:251 -#, c-format -msgid "Block size %u on device %s is too large, using default %u\n" +#: src/dird/ua_select.c:346 +msgid "The defined Client resources are:\n" msgstr "" -#: src/stored/dev.c:256 -#, c-format -msgid "Max block size %u not multiple of device %s block size=%d.\n" +#: src/dird/ua_select.c:354 src/dird/ua_select.c:463 src/dird/ua_dotcmds.c:945 +#: src/dird/ua_run.c:625 src/dird/ua_cmds.c:1094 +msgid "Client" msgstr "" -#: src/stored/dev.c:260 -#, c-format -msgid "Max Vol Size < 8 * Max Block Size for device %s\n" +#: src/dird/ua_select.c:354 +msgid "Select Client (File daemon) resource" msgstr "" -#: src/stored/dev.c:276 src/stored/dev.c:282 +#: src/dird/ua_select.c:381 #, c-format -msgid "Unable to init cond variable: ERR=%s\n" +msgid "Error: Client resource %s does not exist.\n" msgstr "" -#: src/stored/dev.c:288 -#, fuzzy, c-format -msgid "Unable to init spool mutex: ERR=%s\n" -msgstr "Не можливо встановити власника файлу %s: ERR=%s\n" - -#: src/stored/dev.c:294 -#, fuzzy, c-format -msgid "Unable to init acquire mutex: ERR=%s\n" -msgstr "Не можливо встановити власника файлу %s: ERR=%s\n" - -#: src/stored/dev.c:300 -#, fuzzy, c-format -msgid "Unable to init read acquire mutex: ERR=%s\n" -msgstr "Не можливо встановити власника файлу %s: ERR=%s\n" - -#: src/stored/dev.c:416 -msgid "Illegal mode given to open dev.\n" +#: src/dird/ua_select.c:406 +#, c-format +msgid "Could not find Client %s: ERR=%s" msgstr "" -#: src/stored/dev.c:551 +#: src/dird/ua_select.c:416 src/dird/ua_select.c:470 #, c-format -msgid "Could not open file device %s. No Volume name given.\n" +msgid "Could not find Client \"%s\": ERR=%s" msgstr "" -#: src/stored/dev.c:574 +#: src/dird/ua_select.c:445 #, c-format -msgid "Could not open: %s, ERR=%s\n" +msgid "Error obtaining client ids. ERR=%s\n" msgstr "" -#: src/stored/dev.c:639 -#, c-format -msgid "No tape loaded or drive offline on %s.\n" +#: src/dird/ua_select.c:449 +msgid "No clients defined. You must run a job before using this command.\n" msgstr "" -#: src/stored/dev.c:649 -#, c-format -msgid "Rewind error on %s. ERR=%s.\n" +#: src/dird/ua_select.c:453 +msgid "Defined Clients:\n" msgstr "" -#: src/stored/dev.c:659 src/stored/dev.c:737 src/stored/dev.c:878 -#: src/stored/dev.c:1469 -#, c-format -msgid "lseek error on %s. ERR=%s.\n" +#: src/dird/ua_select.c:463 +msgid "Select the Client" msgstr "" -#: src/stored/dev.c:708 +#: src/dird/ua_select.c:496 src/dird/ua_select.c:520 src/dird/ua_select.c:565 #, c-format -msgid "Bad call to eod. Device %s not open\n" +msgid "Could not find Pool \"%s\": ERR=%s" msgstr "" -#: src/stored/dev.c:775 -#, c-format -msgid "ioctl MTEOM error on %s. ERR=%s.\n" +#: src/dird/ua_select.c:535 +msgid "No pools defined. Use the \"create\" command to create one.\n" msgstr "" -#: src/stored/dev.c:785 src/stored/dev.c:919 -#, c-format -msgid "ioctl MTIOCGET error on %s. ERR=%s.\n" +#: src/dird/ua_select.c:539 +msgid "Defined Pools:\n" msgstr "" -#: src/stored/dev.c:865 -msgid "Bad device call. Device not open\n" +#: src/dird/ua_select.c:541 src/dird/ua_select.c:561 src/dird/ua_update.c:353 +#: src/baconfig.h:76 +msgid "*None*" msgstr "" -#: src/stored/dev.c:877 -#, c-format -msgid "Seek error: ERR=%s\n" +#: src/dird/ua_select.c:552 src/dird/ua_select.c:665 src/dird/ua_run.c:633 +#: src/dird/ua_update.c:604 +msgid "Pool" msgstr "" -#: src/stored/dev.c:914 -msgid " Bacula status:" +#: src/dird/ua_select.c:552 +msgid "Select the Pool" msgstr "" -#: src/stored/dev.c:915 src/stored/dev.c:998 src/stored/dev.c:1000 +#: src/dird/ua_select.c:590 #, c-format -msgid " file=%d block=%d\n" +msgid "No access to Pool \"%s\"\n" msgstr "" -#: src/stored/dev.c:923 -msgid " Device status:" +#: src/dird/ua_select.c:622 +msgid "Enter *MediaId or Volume name: " msgstr "" -#: src/stored/dev.c:1022 -msgid "Bad call to load_dev. Device not open\n" +#: src/dird/ua_select.c:657 +msgid "The defined Pool resources are:\n" msgstr "" -#: src/stored/dev.c:1033 src/stored/dev.c:1046 -#, c-format -msgid "ioctl MTLOAD error on %s. ERR=%s.\n" +#: src/dird/ua_select.c:665 +msgid "Select Pool resource" msgstr "" -#: src/stored/dev.c:1077 +#: src/dird/ua_select.c:689 src/dird/ua_restore.c:553 #, c-format -msgid "ioctl MTOFFL error on %s. ERR=%s.\n" +msgid "Error: Pool resource \"%s\" does not exist.\n" msgstr "" -#: src/stored/dev.c:1118 -msgid "Bad call to fsf. Device not open\n" +#: src/dird/ua_select.c:700 +msgid "Enter the JobId to select: " msgstr "" -#: src/stored/dev.c:1129 src/stored/dev.c:1256 +#: src/dird/ua_select.c:738 #, c-format -msgid "Device %s at End of Tape.\n" +msgid "Could not find Job \"%s\": ERR=%s" msgstr "" -#: src/stored/dev.c:1160 src/stored/dev.c:1236 +#: src/dird/ua_select.c:829 src/dird/ua_select.c:925 #, c-format -msgid "ioctl MTFSF error on %s. ERR=%s.\n" +msgid "Automatically selected %s: %s\n" msgstr "" -#: src/stored/dev.c:1207 src/stored/btape.c:1977 +#: src/dird/ua_select.c:840 src/dird/ua_select.c:936 #, c-format -msgid "read error on %s. ERR=%s.\n" +msgid "" +"Your request has multiple choices for \"%s\". Selection is not possible in " +"batch mode.\n" msgstr "" +"Ваш запит до \"%s\" має декілька можливостей вибору. У пакетному режимі " +"вибір не можливий.\n" -#: src/stored/dev.c:1285 -msgid "Bad call to bsf. Device not open\n" +#: src/dird/ua_select.c:858 src/dird/ua_select.c:918 +#, c-format +msgid "Selection list for \"%s\" is empty!\n" msgstr "" -#: src/stored/dev.c:1291 +#: src/dird/ua_select.c:864 #, c-format -msgid "Device %s cannot BSF because it is not a tape.\n" +msgid "Automatically selected: %s\n" msgstr "" -#: src/stored/dev.c:1308 +#: src/dird/ua_select.c:876 +msgid "Selection aborted, nothing done.\n" +msgstr "" + +#: src/dird/ua_select.c:881 src/dird/ua_select.c:969 #, c-format -msgid "ioctl MTBSF error on %s. ERR=%s.\n" +msgid "Please enter a number between 1 and %d\n" msgstr "" -#: src/stored/dev.c:1327 -msgid "Bad call to fsr. Device not open\n" +#: src/dird/ua_select.c:1020 +msgid "Storage name given twice.\n" msgstr "" -#: src/stored/dev.c:1337 +#: src/dird/ua_select.c:1037 #, c-format -msgid "ioctl MTFSR not permitted on %s.\n" +msgid "Expecting jobid=nn command, got: %s\n" msgstr "" -#: src/stored/dev.c:1365 +#: src/dird/ua_select.c:1041 #, c-format -msgid "ioctl MTFSR %d error on %s. ERR=%s.\n" +msgid "JobId %s is not running.\n" msgstr "" -#: src/stored/dev.c:1383 -msgid "Bad call to bsr_dev. Device not open\n" +#: src/dird/ua_select.c:1051 +#, c-format +msgid "Expecting job=xxx, got: %s.\n" msgstr "" -#: src/stored/dev.c:1393 +#: src/dird/ua_select.c:1055 #, c-format -msgid "ioctl MTBSR not permitted on %s.\n" +msgid "Job \"%s\" is not running.\n" msgstr "" -#: src/stored/dev.c:1407 +#: src/dird/ua_select.c:1063 #, c-format -msgid "ioctl MTBSR error on %s. ERR=%s.\n" +msgid "Expecting ujobid=xxx, got: %s.\n" msgstr "" -#: src/stored/dev.c:1458 -msgid "Bad call to reposition. Device not open\n" +#: src/dird/ua_select.c:1084 +#, c-format +msgid "Storage resource \"%s\": not found\n" msgstr "" -#: src/stored/dev.c:1537 -msgid "Bad call to weof_dev. Device not open\n" +#: src/dird/ua_select.c:1116 +msgid "Enter autochanger drive[0]: " msgstr "" -#: src/stored/dev.c:1547 -msgid "Attempt to WEOF on non-appendable Volume\n" +#: src/dird/ua_select.c:1137 +msgid "Enter autochanger slot: " msgstr "" -#: src/stored/dev.c:1565 -#, c-format -msgid "ioctl MTWEOF error on %s. ERR=%s.\n" +#: src/dird/ua_select.c:1167 +msgid "Media Types defined in conf file:\n" msgstr "" -#: src/stored/dev.c:1664 -#, c-format -msgid "unknown func code %d" +#: src/dird/ua_select.c:1173 +msgid "Media Type" msgstr "" -#: src/stored/dev.c:1670 -#, c-format -msgid "I/O function \"%s\" not supported on this device.\n" +#: src/dird/ua_select.c:1173 +msgid "Select the Media Type" msgstr "" -#: src/stored/dev.c:1844 -#, c-format -msgid "Unable to truncate device %s. ERR=%s\n" +#: src/dird/ua_select.c:1213 +msgid "None of your jobs are running.\n" msgstr "" -#: src/stored/dev.c:1861 +#: src/dird/ua_select.c:1251 #, c-format -msgid "Unable to stat device %s. ERR=%s\n" +msgid "Unauthorized command from this console for JobId=%d.\n" msgstr "" -#: src/stored/dev.c:1875 +#: src/dird/ua_select.c:1257 #, c-format -msgid "Device %s doesn't support ftruncate(). Recreating file %s.\n" +msgid "Warning Job JobId=%d is not running. Continuing anyway...\n" msgstr "" -#: src/stored/dev.c:1887 +#: src/dird/ua_select.c:1280 src/dird/ua_select.c:1350 #, c-format -msgid "Could not reopen: %s, ERR=%s\n" +msgid "Confirm %s of %d Job%s (yes/no): " msgstr "" -#: src/stored/dev.c:2010 src/stored/dev.c:2081 +#: src/dird/ua_select.c:1293 src/dird/ua_select.c:1307 #, c-format -msgid "Device %s cannot be %smounted. ERR=%s\n" +msgid "Warning Job %s is not running. Continuing anyway ...\n" msgstr "" -#: src/stored/dev.c:2481 -#, c-format -msgid "Unable to set eotmodel on device %s: ERR=%s\n" +#: src/dird/ua_select.c:1329 +msgid "Select Job(s):\n" msgstr "" -#: src/stored/bscan.c:118 +#: src/dird/ua_select.c:1335 #, c-format -msgid "" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: bscan [ options ] \n" -" -b bootstrap specify a bootstrap file\n" -" -c specify configuration file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -m update media info in database\n" -" -D specify the driver database name (default NULL)\n" -" -n specify the database name (default bacula)\n" -" -u specify database user name (default bacula)\n" -" -P specify database password (default none)\n" -" -h specify database host (default NULL)\n" -" -t specify database port (default 0)\n" -" -p proceed inspite of I/O errors\n" -" -r list records\n" -" -s synchronize or store in database\n" -" -S show scan progress periodically\n" -" -v verbose\n" -" -V specify Volume names (separated by |)\n" -" -w specify working directory (default from conf file)\n" -" -? print this message\n" -"\n" +msgid "JobId=%s Job=%s" msgstr "" -#: src/stored/bscan.c:278 +#: src/dird/ua_select.c:1339 +#, fuzzy, c-format +msgid "Choose Job list to %s" +msgstr "Оберіть те, що Ви хочете вичистити" + +#: src/dird/ua_select.c:1359 src/dird/ua_select.c:1366 src/dird/ua_cmds.c:804 +#: src/dird/ua_cmds.c:1199 #, c-format -msgid "Working Directory: %s not found. Cannot continue.\n" +msgid "Job \"%s\" not found.\n" msgstr "" -#: src/stored/bscan.c:282 +#: src/dird/run_conf.c:205 #, c-format -msgid "Working Directory: %s is not a directory. Cannot continue.\n" +msgid "Expected an equals, got: %s" msgstr "" -#: src/stored/bscan.c:296 src/stored/bscan.c:372 +#: src/dird/run_conf.c:218 src/dird/run_conf.c:230 src/dird/run_conf.c:330 #, c-format -msgid "First Volume Size = %s\n" +msgid "Expect a YES or NO, got: %s" msgstr "" -#: src/stored/bscan.c:302 src/tools/bvfs_test.c:215 src/tools/bbatch.c:201 -#: src/tools/bbatch.c:250 src/tools/ing_test.c:191 -msgid "Could not init Bacula database\n" +#: src/dird/run_conf.c:245 +#, c-format +msgid "Job level field: %s not found in run record" msgstr "" -#: src/stored/bscan.c:309 src/tools/bvfs_test.c:224 src/tools/bbatch.c:257 -#: src/tools/ing_test.c:200 +#: src/dird/run_conf.c:265 #, c-format -msgid "Using Database: %s, User: %s\n" +msgid "Could not find specified Pool Resource: %s" msgstr "" -#: src/stored/bscan.c:343 +#: src/dird/run_conf.c:293 #, c-format -msgid "Create JobMedia for Job %s\n" +msgid "Could not find specified Storage Resource: %s" msgstr "" -#: src/stored/bscan.c:353 +#: src/dird/run_conf.c:305 #, c-format -msgid "Could not create JobMedia record for Volume=%s Job=%s\n" +msgid "Could not find specified Messages Resource: %s" msgstr "" -#: src/stored/bscan.c:420 +#: src/dird/run_conf.c:334 #, c-format -msgid "done: %d%%\n" +msgid "Expected a keyword name, got: %s" msgstr "" -#: src/stored/bscan.c:444 -msgid "Volume is prelabeled. This tape cannot be scanned.\n" +#: src/dird/run_conf.c:373 +msgid "Day number out of range (1-31)" msgstr "" -#: src/stored/bscan.c:456 -#, c-format -msgid "Pool record for %s found in DB.\n" +#: src/dird/run_conf.c:390 src/dird/run_conf.c:552 +msgid "Week number out of range (0-53)" msgstr "" -#: src/stored/bscan.c:460 +#: src/dird/run_conf.c:406 #, c-format -msgid "VOL_LABEL: Pool record not found for Pool: %s\n" +msgid "Job type field: %s in run record not found" msgstr "" -#: src/stored/bscan.c:466 +#: src/dird/run_conf.c:413 #, c-format -msgid "VOL_LABEL: PoolType mismatch. DB=%s Vol=%s\n" +msgid "Unexpected token: %d:%s" msgstr "" -#: src/stored/bscan.c:470 -#, c-format -msgid "Pool type \"%s\" is OK.\n" +#: src/dird/run_conf.c:457 +msgid "Time must be preceded by keyword AT." msgstr "" -#: src/stored/bscan.c:480 -#, c-format -msgid "Media record for %s found in DB.\n" +#: src/dird/run_conf.c:466 +msgid "Time logic error.\n" msgstr "" -#: src/stored/bscan.c:487 -#, c-format -msgid "VOL_LABEL: Media record not found for Volume: %s\n" +#: src/dird/run_conf.c:481 src/dird/run_conf.c:500 +msgid "Bad time specification." msgstr "" -#: src/stored/bscan.c:494 -#, c-format -msgid "VOL_LABEL: MediaType mismatch. DB=%s Vol=%s\n" +#: src/dird/run_conf.c:521 +msgid "Range logic error.\n" msgstr "" -#: src/stored/bscan.c:498 -#, c-format -msgid "Media type \"%s\" is OK.\n" +#: src/dird/run_conf.c:530 +msgid "Bad day range specification." msgstr "" -#: src/stored/bscan.c:508 -#, c-format -msgid "VOL_LABEL: OK for Volume: %s\n" +#: src/dird/run_conf.c:577 +msgid "Invalid month, week or position day range" msgstr "" -#: src/stored/bscan.c:515 -#, c-format -msgid "%d \"errors\" ignored before first Start of Session record.\n" +#: src/dird/run_conf.c:592 +msgid "Invalid month, weekday or position range" msgstr "" -#: src/stored/bscan.c:526 -#, c-format -msgid "SOS_LABEL: Found Job record for JobId: %d\n" +#: src/dird/run_conf.c:651 +msgid "Unexpected run state\n" msgstr "" -#: src/stored/bscan.c:531 +#: src/dird/restore.c:132 src/dird/msgchan.c:508 #, c-format -msgid "SOS_LABEL: Job record not found for JobId: %d\n" +msgid "Could not open bootstrap file %s: ERR=%s\n" msgstr "" -#: src/stored/bscan.c:571 -#, c-format -msgid "SOS_LABEL: VolSessId mismatch for JobId=%u. DB=%d Vol=%d\n" -msgstr "" +#: src/dird/restore.c:180 src/dird/restore.c:271 +#, fuzzy, c-format +msgid "Could not get storage resource '%s'.\n" +msgstr "Не вдалось відновити прапорці для файлу %s: ERR=%s\n" -#: src/stored/bscan.c:577 -#, c-format -msgid "SOS_LABEL: VolSessTime mismatch for JobId=%u. DB=%d Vol=%d\n" -msgstr "" +#: src/dird/restore.c:307 +#, fuzzy, c-format +msgid "Could not acquire read storage lock for \"%s\"" +msgstr "Не вдалось відновити прапорці для файлу %s: ERR=%s\n" -#: src/stored/bscan.c:583 -#, c-format -msgid "SOS_LABEL: PoolId mismatch for JobId=%u. DB=%d Vol=%d\n" +#: src/dird/restore.c:407 src/dird/verify.c:275 src/dird/backup.c:512 +msgid "The File daemon does not support SDCallsClient.\n" msgstr "" -#: src/stored/bscan.c:601 src/stored/bscan.c:1161 -#, c-format -msgid "Could not find SessId=%d SessTime=%d for EOS record.\n" +#: src/dird/restore.c:525 +msgid "" +"Cannot restore without a bootstrap file.\n" +"You probably ran a restore job directly. All restore jobs must\n" +"be run using the restore command.\n" msgstr "" -#: src/stored/bscan.c:647 +#: src/dird/restore.c:533 #, c-format -msgid "Could not update job record. ERR=%s\n" +msgid "Start Restore Job %s\n" msgstr "" -#: src/stored/bscan.c:658 -#, c-format -msgid "End of all Volumes. VolFiles=%u VolBlocks=%u VolBytes=%s\n" +#: src/dird/restore.c:584 +msgid "Restore OK -- warning file count mismatch" msgstr "" -#: src/stored/bscan.c:670 -#, c-format -msgid "Could not find Job for SessId=%d SessTime=%d record.\n" +#: src/dird/restore.c:586 +msgid "Restore OK" msgstr "" -#: src/stored/bscan.c:701 -#, c-format -msgid "%s file records. At file:blk=%s:%s bytes=%s\n" +#: src/dird/restore.c:590 +msgid "Restore OK -- with warnings" msgstr "" -#: src/stored/bscan.c:766 -#, c-format -msgid "Got MD5 record: %s\n" +#: src/dird/restore.c:594 +msgid "*** Restore Error ***" msgstr "" -#: src/stored/bscan.c:774 -#, c-format -msgid "Got SHA1 record: %s\n" +#: src/dird/restore.c:604 +msgid "Restore Canceled" msgstr "" -#: src/stored/bscan.c:782 +#: src/dird/restore.c:631 #, c-format -msgid "Got SHA256 record: %s\n" +msgid "" +"%s %s %s (%s):\n" +" Build OS: %s %s %s\n" +" JobId: %d\n" +" Job: %s\n" +" Restore Client: %s\n" +" Start time: %s\n" +" End time: %s\n" +" Files Expected: %s\n" +" Files Restored: %s\n" +" Bytes Restored: %s\n" +" Rate: %.1f KB/s\n" +" FD Errors: %d\n" +" FD termination status: %s\n" +" SD termination status: %s\n" +" Termination: %s\n" +"\n" msgstr "" -#: src/stored/bscan.c:790 +#: src/dird/admin.c:53 #, c-format -msgid "Got SHA512 record: %s\n" +msgid "Start Admin JobId %d, Job=%s\n" msgstr "" -#: src/stored/bscan.c:798 src/stored/bscan.c:805 -msgid "Got signed digest record\n" -msgstr "Отримано підписаний відбиток запису\n" - -#: src/stored/bscan.c:811 -#, c-format -msgid "Got Prog Names Stream: %s\n" +#: src/dird/admin.c:86 +msgid "Admin OK" msgstr "" -#: src/stored/bscan.c:817 -msgid "Got Prog Data Stream record.\n" +#: src/dird/admin.c:90 +msgid "*** Admin Error ***" msgstr "" -#: src/stored/bscan.c:862 -#, c-format -msgid "Unknown stream type!!! stream=%d len=%i\n" +#: src/dird/admin.c:94 +msgid "Admin Canceled" msgstr "" -#: src/stored/bscan.c:930 -#, c-format -msgid "Could not create File Attributes record. ERR=%s\n" +#: src/dird/admin.c:106 src/lib/status.h:171 src/lib/status.h:182 +#: src/lib/status.h:196 src/lib/status.h:200 src/lib/status.h:204 +msgid "Bacula " msgstr "" -#: src/stored/bscan.c:936 -#, c-format -msgid "Created File record: %s\n" +#: src/dird/ua_status.c:170 +msgid "Status available for:\n" msgstr "" -#: src/stored/bscan.c:981 -#, c-format -msgid "Could not create media record. ERR=%s\n" +#: src/dird/ua_status.c:177 +msgid "Select daemon type for status" msgstr "" -#: src/stored/bscan.c:985 src/stored/bscan.c:1006 +#: src/dird/ua_status.c:297 #, c-format -msgid "Could not update media record. ERR=%s\n" +msgid "Daemon started %s. Jobs: run=%d, running=%d mode=%d,%d\n" msgstr "" -#: src/stored/bscan.c:989 -#, c-format -msgid "Created Media record for Volume: %s\n" -msgstr "" +#: src/dird/ua_status.c:353 +#, fuzzy, c-format +msgid "No authorization for Storage \"%s\"\n" +msgstr "Від'єднуюсь від Зберігача %s:%d\n" -#: src/stored/bscan.c:1010 -#, c-format -msgid "Updated Media record at end of Volume: %s\n" +#: src/dird/ua_status.c:363 +msgid "Restricted Client or Job does not permit access to Storage daemons\n" msgstr "" -#: src/stored/bscan.c:1027 +#: src/dird/ua_status.c:370 src/dird/ua_dotcmds.c:834 src/dird/ua_cmds.c:839 #, c-format -msgid "Could not create pool record. ERR=%s\n" +msgid "Connecting to Storage daemon %s at %s:%d\n" msgstr "" -#: src/stored/bscan.c:1031 +#: src/dird/ua_status.c:373 #, c-format -msgid "Created Pool record for Pool: %s\n" +msgid "" +"\n" +"Failed to connect to Storage daemon %s.\n" +"====\n" msgstr "" -#: src/stored/bscan.c:1050 +#: src/dird/ua_status.c:405 src/dird/ua_cmds.c:1186 src/dird/ua_cmds.c:1994 #, c-format -msgid "Could not get Client record. ERR=%s\n" +msgid "No authorization for Client \"%s\"\n" msgstr "" -#: src/stored/bscan.c:1060 +#: src/dird/ua_status.c:418 src/dird/ua_dotcmds.c:859 src/dird/ua_cmds.c:662 +#: src/dird/ua_cmds.c:875 src/dird/ua_cmds.c:1307 #, c-format -msgid "Created Client record for Client: %s\n" +msgid "Connecting to Client %s at %s:%d\n" msgstr "" -#: src/stored/bscan.c:1077 +#: src/dird/ua_status.c:421 #, c-format -msgid "Fileset \"%s\" already exists.\n" +msgid "" +"Failed to connect to Client %s.\n" +"====\n" msgstr "" -#: src/stored/bscan.c:1081 -#, c-format -msgid "Could not create FileSet record \"%s\". ERR=%s\n" +#: src/dird/ua_status.c:426 +msgid "Connected to file daemon\n" msgstr "" -#: src/stored/bscan.c:1086 -#, c-format -msgid "Created FileSet record \"%s\"\n" +#: src/dird/ua_status.c:445 src/dird/ua_status.c:454 +msgid "" +"\n" +"Scheduled Jobs:\n" msgstr "" -#: src/stored/bscan.c:1133 -#, c-format -msgid "Could not create JobId record. ERR=%s\n" +#: src/dird/ua_status.c:446 +msgid "" +"Level Type Pri Scheduled Job Name Volume\n" msgstr "" -#: src/stored/bscan.c:1139 -#, c-format -msgid "Could not update job start record. ERR=%s\n" +#: src/dird/ua_status.c:447 +msgid "===================================================================================\n" msgstr "" -#: src/stored/bscan.c:1142 -#, c-format -msgid "Created new JobId=%u record for original JobId=%u\n" +#: src/dird/ua_status.c:455 +msgid "" +"Level Type Pri Scheduled Job Name Schedule\n" msgstr "" -#: src/stored/bscan.c:1195 -#, c-format -msgid "Could not update JobId=%u record. ERR=%s\n" +#: src/dird/ua_status.c:456 +msgid "=====================================================================================\n" msgstr "" -#: src/stored/bscan.c:1200 +#: src/dird/ua_status.c:513 src/dird/ua_status.c:678 #, c-format -msgid "Updated Job termination record for JobId=%u Level=%s TermStat=%c\n" +msgid "%-14s\t%-8s\t%3d\t%-18s\t%-18s\t%s\n" msgstr "" -#: src/stored/bscan.c:1225 +#: src/dird/ua_status.c:517 src/dird/ua_status.c:682 #, c-format -msgid "Job Termination code: %d" +msgid "%-14s %-8s %3d %-18s %-18s %s\n" msgstr "" -#: src/stored/bscan.c:1230 -#, c-format -msgid "" -"%s\n" -"JobId: %d\n" -"Job: %s\n" -"FileSet: %s\n" -"Backup Level: %s\n" -"Client: %s\n" -"Start time: %s\n" -"End time: %s\n" -"Files Written: %s\n" -"Bytes Written: %s\n" -"Volume Session Id: %d\n" -"Volume Session Time: %d\n" -"Last Volume Bytes: %s\n" -"Termination: %s\n" -"\n" +#: src/dird/ua_status.c:553 src/dird/ua_status.c:748 +msgid "Ignoring invalid value for days. Max is 500.\n" msgstr "" -#: src/stored/bscan.c:1288 -#, c-format -msgid "Could not create JobMedia record. ERR=%s\n" +#: src/dird/ua_status.c:564 +msgid "Ignoring invalid value for limit. Max is 2000.\n" msgstr "" -#: src/stored/bscan.c:1292 -#, c-format -msgid "Created JobMedia record JobId %d, MediaId %d\n" +#: src/dird/ua_status.c:575 +msgid "Ignoring invalid time.\n" msgstr "" -#: src/stored/bscan.c:1308 -#, c-format -msgid "Could not find SessId=%d SessTime=%d for MD5/SHA1 record.\n" +#: src/dird/ua_status.c:697 src/dird/ua_status.c:801 +msgid "No Scheduled Jobs.\n" msgstr "" -#: src/stored/bscan.c:1322 +#: src/dird/ua_status.c:826 #, c-format -msgid "Could not add MD5/SHA1 to File record. ERR=%s\n" +msgid "Console connected at %s\n" msgstr "" -#: src/stored/bscan.c:1327 -msgid "Updated MD5/SHA1 record\n" +#: src/dird/ua_status.c:837 +msgid "" +"No Jobs running.\n" +"====\n" msgstr "" -#: src/stored/job.c:234 -#, c-format -msgid "FD connect failed: Job name not found: %s\n" +#: src/dird/ua_status.c:844 +msgid " JobId Type Level Files Bytes Name Status\n" msgstr "" -#: src/stored/job.c:244 -#, c-format -msgid "Hey!!!! JobId %u Job %s already authenticated.\n" +#: src/dird/ua_status.c:845 +msgid "======================================================================\n" msgstr "" -#: src/stored/job.c:261 -msgid "Unable to authenticate File daemon\n" +#: src/dird/ua_status.c:854 +msgid "is waiting execution" msgstr "" -#: src/stored/job.c:390 -msgid "In free_jcr(), but still attached to device!!!!\n" +#: src/dird/ua_status.c:857 +msgid "is running" msgstr "" -#: src/stored/btape.c:185 -#, c-format -msgid "" -"\n" -"\n" -"!!!! Warning large disk addressing disabled. boffset_t=%d should be 8 or " -"more !!!!!\n" -"\n" -"\n" +#: src/dird/ua_status.c:860 +msgid "is blocked" msgstr "" -#: src/stored/btape.c:192 -#, c-format -msgid "32 bit printf/scanf problem. i=%d x32=%u y32=%u\n" +#: src/dird/ua_status.c:863 +msgid "has terminated" msgstr "" -#: src/stored/btape.c:201 -msgid "64 bit printf/scanf problem. i=%d x64=%" +#: src/dird/ua_status.c:866 +msgid "has terminated with warnings" msgstr "" -#: src/stored/btape.c:206 -#, c-format -msgid "Tape block granularity is %d bytes.\n" +#: src/dird/ua_status.c:869 +msgid "has erred" msgstr "" -#: src/stored/btape.c:279 -msgid "No archive name specified.\n" +#: src/dird/ua_status.c:872 +msgid "has errors" msgstr "" -#: src/stored/btape.c:283 -msgid "Improper number of arguments specified.\n" +#: src/dird/ua_status.c:875 +msgid "has a fatal error" msgstr "" -#: src/stored/btape.c:297 -msgid "btape does not work with DVD storage.\n" +#: src/dird/ua_status.c:878 +msgid "has verify differences" msgstr "" -#: src/stored/btape.c:302 -msgid "btape only works with tape storage.\n" +#: src/dird/ua_status.c:881 +msgid "has been canceled" msgstr "" -#: src/stored/btape.c:383 -#, c-format -msgid "Total Volume bytes=%sB. Total Write rate = %sB/s\n" +#: src/dird/ua_status.c:886 +msgid "is waiting on Client" msgstr "" -#: src/stored/btape.c:409 +#: src/dird/ua_status.c:888 #, c-format -msgid "Volume bytes=%sB. Write rate = %sB/s\n" +msgid "is waiting on Client %s" msgstr "" -#: src/stored/btape.c:477 -#, c-format -msgid "open device %s: OK\n" +#: src/dird/ua_status.c:896 src/dird/ua_status.c:898 +#, fuzzy, c-format +msgid "is waiting on Storage \"%s\"" +msgstr "Від'єднуюсь від Зберігача %s:%d\n" + +#: src/dird/ua_status.c:900 +msgid "is waiting on Storage" msgstr "" -#: src/stored/btape.c:500 -msgid "Enter Volume Name: " +#: src/dird/ua_status.c:906 +msgid "is waiting on max Storage jobs" msgstr "" -#: src/stored/btape.c:507 -#, c-format -msgid "Device open failed. ERR=%s\n" +#: src/dird/ua_status.c:909 +msgid "is waiting on max Client jobs" +msgstr "" + +#: src/dird/ua_status.c:912 +msgid "is waiting on max Job jobs" +msgstr "" + +#: src/dird/ua_status.c:915 +msgid "is waiting on max total jobs" +msgstr "" + +#: src/dird/ua_status.c:919 +#, fuzzy, c-format +msgid "is waiting for its start time (%s)" +msgstr "Статус задачі: Очікування часу початку" + +#: src/dird/ua_status.c:925 +msgid "is waiting for higher priority jobs to finish" msgstr "" -#: src/stored/btape.c:512 +#: src/dird/ua_status.c:928 +#, fuzzy +msgid "is waiting for a Shared Storage device" +msgstr "Від'єднуюсь від Зберігача %s:%d\n" + +#: src/dird/ua_status.c:945 #, c-format -msgid "Wrote Volume label for volume \"%s\".\n" +msgid "is in unknown state %c" msgstr "" -#: src/stored/btape.c:526 -msgid "Volume has no label.\n" +#: src/dird/ua_status.c:959 +msgid "is waiting for a mount request" msgstr "" -#: src/stored/btape.c:529 -msgid "Volume label read correctly.\n" +#: src/dird/ua_status.c:966 +msgid "is waiting for an appendable Volume" msgstr "" -#: src/stored/btape.c:532 +#: src/dird/ua_status.c:974 +msgid "is waiting for Client to connect to Storage daemon" +msgstr "" + +#: src/dird/ua_status.c:976 #, c-format -msgid "I/O error on device: ERR=%s" +msgid "is waiting for Client %s to connect to Storage %s" msgstr "" -#: src/stored/btape.c:535 -msgid "Volume name error\n" +#: src/dird/ua_status.c:1007 +#, c-format +msgid "%6d\t%-6s\t%-20s\t%s\t%s\n" msgstr "" -#: src/stored/btape.c:538 +#: src/dird/ua_status.c:1015 #, c-format -msgid "Error creating label. ERR=%s" +msgid "%6d %-4s %-3s %10s %10s %-17s %s\n" msgstr "" -#: src/stored/btape.c:541 -msgid "Volume version error.\n" +#: src/dird/ua_status.c:1040 +msgid "No Terminated Jobs.\n" msgstr "" -#: src/stored/btape.c:544 -msgid "Bad Volume label type.\n" +#: src/dird/ua_status.c:1046 src/lib/status.h:73 +msgid "" +"\n" +"Terminated Jobs:\n" msgstr "" -#: src/stored/btape.c:547 -msgid "Unknown error.\n" +#: src/dird/ua_status.c:1047 src/lib/status.h:80 +msgid " JobId Level Files Bytes Status Finished Name \n" msgstr "" -#: src/stored/btape.c:565 -#, c-format -msgid "Bad status from load. ERR=%s\n" +#: src/dird/ua_status.c:1048 +msgid "====================================================================\n" msgstr "" -#: src/stored/btape.c:567 -#, c-format -msgid "Loaded %s\n" +#: src/dird/ua_status.c:1087 src/lib/status.h:109 +msgid "Diffs" msgstr "" -#: src/stored/btape.c:576 src/stored/btape.c:1139 src/stored/btape.c:1212 -#: src/stored/btape.c:1292 src/stored/btape.c:1563 -#, c-format -msgid "Bad status from rewind. ERR=%s\n" +#: src/dird/ua_status.c:1090 src/dird/ua_restore.c:443 src/lib/status.h:112 +msgid "Cancel" +msgstr "" + +#: src/dird/ua_status.c:1099 src/lib/status.h:122 +msgid "Other" msgstr "" -#: src/stored/btape.c:579 src/stored/btape.c:1571 +#: src/dird/ua_status.c:1103 src/lib/status.h:134 #, c-format -msgid "Rewound %s\n" +msgid "%6d\t%-6s\t%8s\t%10s\t%-7s\t%-8s\t%s\n" msgstr "" -#: src/stored/btape.c:605 src/stored/btape.c:1575 +#: src/dird/ua_status.c:1111 src/lib/status.h:142 #, c-format -msgid "Bad status from weof. ERR=%s\n" +msgid "%6d %-6s %8s %10s %-7s %-8s %s\n" msgstr "" -#: src/stored/btape.c:609 +#: src/dird/ua_status.c:1121 +msgid "\n" +msgstr "" + +#: src/dird/next_vol.c:163 #, c-format -msgid "Wrote 1 EOF to %s\n" +msgid "Purging oldest volume \"%s\"\n" msgstr "" -#: src/stored/btape.c:612 +#: src/dird/next_vol.c:169 #, c-format -msgid "Wrote %d EOFs to %s\n" +msgid "Pruning oldest volume \"%s\"\n" msgstr "" -#: src/stored/btape.c:630 -msgid "Moved to end of medium.\n" +#: src/dird/next_vol.c:188 +msgid "We seem to be looping trying to find the next volume. I give up.\n" msgstr "" -#: src/stored/btape.c:657 +#: src/dird/next_vol.c:215 #, c-format -msgid "Bad status from bsf. ERR=%s\n" +msgid "Max Volume bytes=%s exceeded. Marking Volume \"%s\" as Full.\n" msgstr "" -#: src/stored/btape.c:659 +#: src/dird/next_vol.c:223 #, c-format -msgid "Backspaced %d file%s.\n" +msgid "Volume used once. Marking Volume \"%s\" as Used.\n" msgstr "" -#: src/stored/btape.c:676 +#: src/dird/next_vol.c:230 #, c-format -msgid "Bad status from bsr. ERR=%s\n" +msgid "Max Volume jobs=%s exceeded. Marking Volume \"%s\" as Used.\n" msgstr "" -#: src/stored/btape.c:678 +#: src/dird/next_vol.c:240 #, c-format -msgid "Backspaced %d record%s.\n" +msgid "Max Volume files=%s exceeded. Marking Volume \"%s\" as Used.\n" msgstr "" -#: src/stored/btape.c:706 +#: src/dird/next_vol.c:251 #, c-format -msgid "Device status:\n" +msgid "" +"Max configured use duration=%s sec. exceeded. Marking Volume \"%s\" as " +"Used.\n" msgstr "" -#: src/stored/btape.c:725 +#: src/dird/next_vol.c:264 #, c-format -msgid "Status:\n" +msgid "Catalog error updating volume \"%s\". ERR=%s" msgstr "" -#: src/stored/btape.c:740 -msgid "" -"Test writing larger and larger records.\n" -"This is a torture test for records.\n" -"I am going to write\n" -"larger and larger records. It will stop when the record size\n" -"plus the header exceeds the block size (by default about 64K)\n" +#: src/dird/next_vol.c:286 +msgid "volume has expired" msgstr "" -#: src/stored/btape.c:746 -msgid "Do you want to continue? (y/n): " +#: src/dird/next_vol.c:304 src/dird/next_vol.c:348 +#, c-format +msgid "Recycled current volume \"%s\"\n" msgstr "" -#: src/stored/btape.c:748 src/stored/btape.c:2200 -msgid "Command aborted.\n" +#: src/dird/next_vol.c:309 +msgid "and recycling of current volume failed" msgstr "" -#: src/stored/btape.c:765 -#, c-format -msgid "Block %d i=%d\n" +#: src/dird/next_vol.c:315 +msgid "but should be Append, Purged or Recycle" msgstr "" -#: src/stored/btape.c:792 -msgid "Skipping read backwards test because BSR turned off.\n" +#: src/dird/next_vol.c:324 +msgid "volume has recycling disabled" msgstr "" -#: src/stored/btape.c:796 +#: src/dird/next_vol.c:351 msgid "" -"\n" -"=== Write, backup, and re-read test ===\n" -"\n" -"I'm going to write three records and an EOF\n" -"then backup over the EOF and re-read the last record.\n" -"Bacula does this after writing the last block on the\n" -"tape to verify that the block was written correctly.\n" -"\n" -"This is not an *essential* feature ...\n" -"\n" +"but should be Append, Purged or Recycle (recycling of the current volume " +"failed)" msgstr "" -#: src/stored/btape.c:809 src/stored/btape.c:820 src/stored/btape.c:831 -#: src/stored/btape.c:1149 src/stored/btape.c:1165 src/stored/btape.c:1907 -#: src/stored/btape.c:2823 -msgid "Error writing record to block.\n" +#: src/dird/next_vol.c:355 +msgid "" +"but should be Append, Purged or Recycle (cannot automatically recycle " +"current volume, as it still contains unpruned data or the Volume Retention " +"time has not expired.)" msgstr "" -#: src/stored/btape.c:813 src/stored/btape.c:824 src/stored/btape.c:835 -#: src/stored/btape.c:1153 src/stored/btape.c:1169 src/stored/btape.c:1911 -#: src/stored/btape.c:2827 -msgid "Error writing block to device.\n" +#: src/dird/next_vol.c:415 +#, c-format +msgid "Unable to get Pool record: ERR=%s" msgstr "" -#: src/stored/btape.c:816 +#: src/dird/next_vol.c:422 #, c-format -msgid "Wrote first record of %d bytes.\n" +msgid "Unable add Scratch Volume, Pool \"%s\" full MaxVols=%d\n" msgstr "" -#: src/stored/btape.c:827 +#: src/dird/next_vol.c:442 #, c-format -msgid "Wrote second record of %d bytes.\n" +msgid "Failed to move Scratch Volume. ERR=%s\n" msgstr "" -#: src/stored/btape.c:838 +#: src/dird/next_vol.c:447 #, c-format -msgid "Wrote third record of %d bytes.\n" +msgid "Using Volume \"%s\" from 'Scratch' pool.\n" msgstr "" -#: src/stored/btape.c:845 src/stored/btape.c:850 +#: src/dird/authenticate.c:77 src/dird/authenticate.c:78 +#: src/qt-console/tray-monitor/authenticate.cpp:119 #, c-format -msgid "Backspace file failed! ERR=%s\n" +msgid "Error sending Hello to Storage daemon. ERR=%s\n" +msgstr "Не вдалося надіслати Hello до Зберігача. ERR=%s\n" + +#: src/dird/authenticate.c:107 +msgid "Director and Storage daemon passwords or names not the same.\n" msgstr "" -#: src/stored/btape.c:854 -msgid "Backspaced over EOF OK.\n" +#: src/dird/authenticate.c:109 +#, c-format +msgid "" +"Director unable to authenticate with Storage daemon at \"%s:%d\". Possible " +"causes:\n" +"Passwords or names not the same or\n" +"Maximum Concurrent Jobs exceeded on the SD or\n" +"SD networking messed up (restart daemon).\n" +"Please see " msgstr "" -#: src/stored/btape.c:856 +#: src/dird/authenticate.c:137 #, c-format -msgid "Backspace record failed! ERR=%s\n" +msgid "TLS negotiation failed with SD at \"%s:%d\"\n" msgstr "" -#: src/stored/btape.c:859 -msgid "Backspace record OK.\n" +#: src/dird/authenticate.c:149 +#, c-format +msgid "bdird \n" -" -b specify bootstrap file\n" -" -c set configuration file to file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -p proceed inspite of I/O errors\n" -" -s turn off signals\n" -" -v be verbose\n" -" -? print this message.\n" +"Do you want to restore all the files? (yes|no): " +msgstr "" + +#: src/dird/ua_restore.c:1056 +msgid "" "\n" +"Regexp matching files to restore? (empty to abort): " msgstr "" -#: src/stored/btape.c:3047 +#: src/dird/ua_restore.c:1072 #, c-format -msgid "Mount second Volume on device %s and press return when ready: " +msgid "Regex compile error: %s\n" msgstr "" -#: src/stored/btape.c:3075 +#: src/dird/ua_restore.c:1137 #, c-format -msgid "Mount blank Volume on device %s and press return when ready: " +msgid "" +"\n" +"Building directory tree for JobId(s) %s ... " msgstr "" -#: src/stored/btape.c:3095 +#: src/dird/ua_restore.c:1207 #, c-format -msgid "End of Volume \"%s\" %d records.\n" +msgid "" +"\n" +"%s files inserted into the tree and marked for extraction.\n" msgstr "" -#: src/stored/btape.c:3109 +#: src/dird/ua_restore.c:1210 #, c-format -msgid "Read block=%u, VolBytes=%s rate=%sB/s\n" +msgid "" +"\n" +"%s files inserted into the tree.\n" msgstr "" -#: src/stored/authenticate.c:61 +#: src/dird/ua_restore.c:1285 #, c-format -msgid "I only authenticate Directors, not %d\n" +msgid "Error getting FileSet \"%s\": ERR=%s\n" msgstr "" -#: src/stored/authenticate.c:67 src/filed/authenticate.c:76 +#: src/dird/ua_restore.c:1290 #, c-format -msgid "Bad Hello command from Director at %s. Len=%d.\n" +msgid "FileSet argument: %s\n" msgstr "" -#: src/stored/authenticate.c:78 src/filed/authenticate.c:88 +#: src/dird/ua_restore.c:1302 #, c-format -msgid "Bad Hello command from Director at %s: %s\n" +msgid "No FileSet found for client \"%s\".\n" msgstr "" -#: src/stored/authenticate.c:92 +#: src/dird/ua_restore.c:1308 #, c-format -msgid "" -"Connection from unknown Director %s at %s rejected.\n" -"Please see " +msgid "Error getting FileSet record: %s\n" msgstr "" -#: src/stored/authenticate.c:129 +#: src/dird/ua_restore.c:1309 msgid "" -"Incorrect password given by Director.\n" -"Please see " +"This probably means you modified the FileSet.\n" +"Continuing anyway.\n" msgstr "" -#: src/stored/authenticate.c:137 src/stored/authenticate.c:248 -#: src/filed/authenticate.c:151 src/filed/authenticate.c:270 -msgid "" -"Authorization problem: Remote server did not advertize required TLS " -"support.\n" +#: src/dird/ua_restore.c:1324 +#, c-format +msgid "Pool \"%s\" not found, using any pool.\n" msgstr "" -#: src/stored/authenticate.c:155 +#: src/dird/ua_restore.c:1351 src/dird/ua_restore.c:1367 #, c-format -msgid "TLS negotiation failed with DIR at \"%s:%d\"\n" +msgid "No Full backup before %s found.\n" msgstr "" -#: src/stored/authenticate.c:191 -#, c-format -msgid "Unable to authenticate Director at %s.\n" +#: src/dird/ua_restore.c:1396 +msgid "No jobs found.\n" msgstr "" -#: src/stored/authenticate.c:239 src/stored/authenticate.c:279 +#: src/dird/ua_restore.c:1531 #, c-format msgid "" -"Incorrect authorization key from File daemon at %s rejected.\n" -"Please see " +"\n" +"Warning Storage is overridden by \"%s\" on the command line.\n" msgstr "" -#: src/stored/authenticate.c:266 +#: src/dird/ua_restore.c:1536 #, c-format -msgid "TLS negotiation failed with FD at \"%s:%d\"\n" +msgid "" +"This may not work because of two different MediaTypes:\n" +" Storage MediaType=\"%s\"\n" +" Volume MediaType=\"%s\".\n" +"\n" msgstr "" -#: src/stored/wait.c:133 +#: src/dird/ua_restore.c:1555 #, c-format -msgid "pthread timedwait error. ERR=%s\n" +msgid "Using Storage \"%s\" from MediaType \"%s\".\n" msgstr "" -#: src/stored/wait.c:239 +#: src/dird/ua_restore.c:1558 #, c-format -msgid "JobId=%s, Job %s waiting to reserve a device.\n" +msgid "Storage \"%s\" not found, using Storage \"%s\" from MediaType \"%s\".\n" msgstr "" -#: src/stored/block.c:102 +#: src/dird/ua_restore.c:1567 #, c-format msgid "" -"Dump block %s %x: size=%d BlkNum=%d\n" -" Hdrcksum=%x cksum=%x\n" -msgstr "" - -#: src/stored/block.c:115 -#, c-format -msgid " Rec: VId=%u VT=%u FI=%s Strm=%s len=%d p=%x\n" +"\n" +"Unable to find Storage resource for\n" +"MediaType \"%s\", needed by the Jobs you selected.\n" msgstr "" -#: src/stored/block.c:171 +#: src/dird/bsr.c:161 #, c-format -msgid "%d block read errors not printed.\n" +msgid "Unable to get Job record. ERR=%s\n" msgstr "" -#: src/stored/block.c:264 src/stored/block.c:280 src/stored/block.c:290 +#: src/dird/bsr.c:172 #, c-format -msgid "" -"Volume data error at %u:%u! Wanted ID: \"%s\", got \"%s\". Buffer " -"discarded.\n" +msgid "Unable to get Job Volume Parameters. ERR=%s\n" msgstr "" -#: src/stored/block.c:305 +#: src/dird/bsr.c:220 #, c-format -msgid "" -"Volume data error at %u:%u! Block length %u is insane (too large), probably " -"due to a bad archive.\n" +msgid "Unable to create bootstrap file %s. ERR=%s\n" msgstr "" -#: src/stored/block.c:331 -#, c-format -msgid "" -"Volume data error at %u:%u!\n" -"Block checksum mismatch in block=%u len=%d: calc=%x blk=%x\n" +#: src/dird/bsr.c:229 +msgid "No files found to read. No bootstrap file written.\n" msgstr "" -#: src/stored/block.c:452 -#, c-format -msgid "Cannot write block. Device at EOM. dev=%s\n" +#: src/dird/bsr.c:233 +msgid "Error writing bsr file.\n" msgstr "" -#: src/stored/block.c:458 +#: src/dird/bsr.c:238 #, c-format -msgid "Attempt to write on read-only Volume. dev=%s\n" +msgid "Bootstrap records written to %s\n" msgstr "" -#: src/stored/block.c:464 -#, c-format -msgid "Attempt to write on closed device=%s\n" +#: src/dird/bsr.c:286 +msgid "" +"The Job will require the following (*=>InChanger):\n" +" Volume(s) Storage(s) SD Device(s)\n" +"===========================================================================\n" msgstr "" -#: src/stored/block.c:513 -#, c-format -msgid "User defined maximum volume capacity %s exceeded on device %s.\n" +#: src/dird/bsr.c:306 +msgid "No Volumes found to restore.\n" msgstr "" -#: src/stored/block.c:528 -#, c-format -msgid "Unable to write EOF. ERR=%s\n" +#: src/dird/bsr.c:308 +msgid "" +"\n" +"Volumes marked with \"*\" are in the Autochanger.\n" msgstr "" -#: src/stored/block.c:554 src/stored/block.c:588 -msgid "Write block header zeroed.\n" +#: src/dird/fd_cmds.c:89 +msgid "Client: " msgstr "" -#: src/stored/block.c:580 +#: src/dird/fd_cmds.c:125 #, c-format -msgid "Block checksum changed during write: before=%ud after=%ud\n" +msgid "File daemon \"%s\" rejected Job command: %s\n" msgstr "" -#: src/stored/block.c:607 +#: src/dird/fd_cmds.c:138 #, c-format -msgid "Write error at %u:%u on device %s. ERR=%s.\n" +msgid "Error updating Client record. ERR=%s\n" msgstr "" -#: src/stored/block.c:614 +#: src/dird/fd_cmds.c:143 #, c-format -msgid "End of Volume \"%s\" at %u:%u on device %s. Write of %u bytes got %d.\n" +msgid "FD gave bad response to JobId command: %s\n" msgstr "" -#: src/stored/block.c:695 src/stored/block.c:701 -#, c-format -msgid "Backspace file at EOT failed. ERR=%s\n" +#: src/dird/fd_cmds.c:172 src/dird/fd_cmds.c:260 +msgid ", since=" msgstr "" -#: src/stored/block.c:708 -#, c-format -msgid "Backspace record at EOT failed. ERR=%s\n" +#: src/dird/fd_cmds.c:237 +msgid "No prior or suitable Full backup found in catalog. Doing FULL backup.\n" msgstr "" -#: src/stored/block.c:725 +#: src/dird/fd_cmds.c:238 src/dird/fd_cmds.c:244 src/dird/fd_cmds.c:253 #, c-format -msgid "Re-read last block at EOT failed. ERR=%s" +msgid " (upgraded from %s)" msgstr "" -#: src/stored/block.c:735 -#, c-format +#: src/dird/fd_cmds.c:243 msgid "" -"Re-read of last block: block numbers differ by more than one.\n" -"Probable tape misconfiguration and data loss. Read block=%u Want block=%u.\n" +"No prior or suitable Differential backup found in catalog. Doing " +"Differential backup.\n" msgstr "" -#: src/stored/block.c:740 +#: src/dird/fd_cmds.c:251 #, c-format -msgid "" -"Re-read of last block OK, but block numbers differ. Read block=%u Want block=" -"%u.\n" +msgid "Prior failed job found in catalog. Upgrading to %s.\n" msgstr "" -#: src/stored/block.c:744 -msgid "Re-read of last block succeeded.\n" +#: src/dird/fd_cmds.c:329 +#, c-format +msgid "Unimplemented backup level %d %c\n" msgstr "" -#: src/stored/block.c:777 -#, c-format +#: src/dird/fd_cmds.c:402 msgid "" -"Error writing final EOF to tape. This Volume may not be readable.\n" -"%s" +"FD compression disabled for this Job because AllowCompress=No in Storage " +"resource.\n" msgstr "" -#: src/stored/block.c:791 +#: src/dird/fd_cmds.c:501 src/filed/job.c:1014 #, c-format -msgid "" -"Error writing final part to DVD. This Volume may not be readable.\n" -"%s" +msgid "Cannot run program: %s. ERR=%s\n" msgstr "" -#: src/stored/block.c:801 -#, fuzzy -msgid "Error sending Volume info to Director.\n" -msgstr "Помилка надсилання Hello до Збирача. ERR=%s\n" +#: src/dird/fd_cmds.c:512 src/dird/fd_cmds.c:537 src/dird/fd_cmds.c:551 +msgid ">filed: write error on socket\n" +msgstr "" -#: src/stored/block.c:896 +#: src/dird/fd_cmds.c:518 #, c-format -msgid "" -"Error while writing, current part number is less than the total number of " -"parts (%d/%d, device=%s)\n" +msgid "Error running program: %s. ERR=%s\n" msgstr "" -#: src/stored/block.c:904 +#: src/dird/fd_cmds.c:527 #, c-format -msgid "Unable to open device next part %s: ERR=%s\n" +msgid "Cannot open included file: %s. ERR=%s\n" msgstr "" -#: src/stored/block.c:924 +#: src/dird/fd_cmds.c:672 #, c-format -msgid "" -"End of Volume \"%s\" at %u:%u on device %s (part_size=%s, free_space=%s, " -"free_space_errno=%d, errmsg=%s).\n" +msgid "Client \"%s\" RunScript failed.\n" msgstr "" -#: src/stored/block.c:937 +#: src/dird/fd_cmds.c:695 #, c-format msgid "" -"End of Volume \"%s\" at %u:%u on device %s (part_size=%s, free_space=%s, " -"free_space_errno=%d).\n" +"Client \"%s\" may not be used to restore this job. Please upgrade your " +"client.\n" msgstr "" -#: src/stored/block.c:980 -#, fuzzy -msgid "Job failed or canceled.\n" -msgstr "Статус задачі: Відмінена" - -#: src/stored/block.c:986 -msgid "Attempt to read past end of tape or file.\n" +#: src/dird/fd_cmds.c:776 +msgid "RestoreObject failed.\n" msgstr "" -#: src/stored/block.c:995 +#: src/dird/fd_cmds.c:816 #, c-format -msgid "Attempt to read closed device: fd=%d at file:blk %u:%u on device %s\n" +msgid "" +"qnext->qprev != qp called from %s:%d\n" +msgid "Storage \"%s\" not found.\n" msgstr "" -#: src/lib/smartall.c:206 -#, c-format -msgid "qp->qprev->qnext != qp called from %s:%d\n" +#: src/dird/ua_run.c:386 src/dird/ua_run.c:661 +msgid "user selection" msgstr "" -#: src/lib/smartall.c:215 +#: src/dird/ua_run.c:395 #, c-format -msgid "Overrun buffer: len=%d addr=%p allocated: %s:%d called from %s:%d\n" +msgid "No authorization. Storage \"%s\".\n" msgstr "" -#: src/lib/smartall.c:293 -#, c-format -msgid "sm_realloc size: %d\n" +#: src/dird/ua_run.c:419 +msgid "No JobId specified.\n" msgstr "" -#: src/lib/smartall.c:331 -#, c-format -msgid "sm_realloc %d at %p from %s:%d\n" +#: src/dird/ua_run.c:433 +msgid "Invalid or no Job name specified.\n" msgstr "" -#: src/lib/smartall.c:391 -#, c-format -msgid "" -"\n" -"Orphaned buffers exist. Dump terminated following\n" -" discovery of bad links in chain of orphaned buffers.\n" -" Buffer address with bad links: %p\n" +#: src/dird/ua_run.c:448 +msgid "Enter the JobId list to select: " msgstr "" -#: src/lib/smartall.c:436 +#: src/dird/ua_run.c:464 #, c-format -msgid "Damaged buffer found. Called from %s:%d\n" +msgid "JobId=%d entered is not in the list.\n" msgstr "" -#: src/lib/smartall.c:469 -#, c-format -msgid "" -"\n" -"Damaged buffers found at %s:%d\n" -msgstr "" +#: src/dird/ua_run.c:488 +#, fuzzy, c-format +msgid "Could not get job record for selected JobId=%d. ERR=%s" +msgstr "Не вдалось відновити прапорці для файлу %s: ERR=%s\n" -#: src/lib/smartall.c:472 -msgid " discovery of bad prev link.\n" +#: src/dird/ua_run.c:559 +msgid "Select termination code: " msgstr "" -#: src/lib/smartall.c:475 -msgid " discovery of bad next link.\n" +#: src/dird/ua_run.c:617 src/dird/ua_update.c:593 +msgid "Parameters to modify:\n" msgstr "" -#: src/lib/smartall.c:478 -msgid " discovery of data overrun.\n" +#: src/dird/ua_run.c:618 +msgid "Level" msgstr "" -#: src/lib/smartall.c:481 -msgid " NULL pointer.\n" +#: src/dird/ua_run.c:623 +msgid "Restore Client" msgstr "" -#: src/lib/smartall.c:487 -#, c-format -msgid " Buffer address: %p\n" +#: src/dird/ua_run.c:627 +msgid "When" msgstr "" -#: src/lib/smartall.c:494 -#, c-format -msgid "Damaged buffer: %6u bytes allocated at line %d of %s %s\n" +#: src/dird/ua_run.c:628 +msgid "Priority" msgstr "" -#: src/lib/sellist.c:69 -msgid "Negative numbers not permitted.\n" +#: src/dird/ua_run.c:638 +msgid "NextPool" msgstr "" -#: src/lib/sellist.c:106 -msgid "Selection items must be be greater than zero.\n" +#: src/dird/ua_run.c:640 +msgid "Verify Job" msgstr "" -#: src/lib/sellist.c:110 -msgid "Selection item too large.\n" +#: src/dird/ua_run.c:643 +msgid "Bootstrap" msgstr "" -#: src/lib/sellist.c:167 -msgid "No input string given.\n" +#: src/dird/ua_run.c:644 +msgid "Where" msgstr "" -#: src/lib/rwlock.c:307 -msgid "rwl_writeunlock called too many times.\n" +#: src/dird/ua_run.c:645 +msgid "File Relocation" msgstr "" -#: src/lib/rwlock.c:312 -msgid "rwl_writeunlock by non-owner.\n" +#: src/dird/ua_run.c:646 +msgid "Replace" msgstr "" -#: src/lib/rwlock.c:437 src/lib/save/devlock.c:501 src/lib/devlock.c:501 -#, c-format -msgid "Thread %d found unchanged elements %d times\n" +#: src/dird/ua_run.c:647 +msgid "JobId" msgstr "" -#: src/lib/rwlock.c:507 src/lib/save/devlock.c:571 src/lib/devlock.c:571 -#, c-format -msgid "%02d: interval %d, writes %d, reads %d\n" +#: src/dird/ua_run.c:650 +msgid "Plugin Options" msgstr "" -#: src/lib/rwlock.c:517 src/lib/save/devlock.c:581 src/lib/devlock.c:581 -#, c-format -msgid "data %02d: value %d, %d writes\n" +#: src/dird/ua_run.c:652 src/dird/ua_run.c:1027 src/dird/ua_update.c:612 +msgid "Select parameter to modify" msgstr "" -#: src/lib/rwlock.c:522 src/lib/save/devlock.c:586 src/lib/devlock.c:586 -#, c-format -msgid "Total: %d thread writes, %d data writes\n" +#: src/dird/ua_run.c:693 +msgid "" +"Please enter desired start time as YYYY-MM-DD HH:MM:SS (return for now): " msgstr "" -#: src/lib/rwlock.c:594 src/lib/save/devlock.c:658 src/lib/devlock.c:658 -msgid "Try write lock" +#: src/dird/ua_run.c:701 src/dird/ua_run.c:895 +msgid "Invalid time, using current time.\n" msgstr "" -#: src/lib/rwlock.c:600 src/lib/save/devlock.c:664 src/lib/devlock.c:664 -msgid "Try read lock" +#: src/dird/ua_run.c:708 +msgid "Enter new Priority: " msgstr "" -#: src/lib/rwlock.c:656 src/lib/save/devlock.c:720 src/lib/devlock.c:720 -msgid "Create thread" +#: src/dird/ua_run.c:712 +msgid "Priority must be a positive integer.\n" msgstr "" -#: src/lib/rwlock.c:666 src/lib/save/devlock.c:730 src/lib/devlock.c:730 -msgid "Join thread" +#: src/dird/ua_run.c:733 +msgid "Please enter the Bootstrap file name: " msgstr "" -#: src/lib/rwlock.c:668 src/lib/save/devlock.c:732 src/lib/devlock.c:732 +#: src/dird/ua_run.c:745 #, c-format -msgid "%02d: interval %d, updates %d, r_collisions %d, w_collisions %d\n" +msgid "Warning cannot open %s: ERR=%s\n" msgstr "" -#: src/lib/rwlock.c:680 src/lib/save/devlock.c:744 src/lib/devlock.c:744 -#, c-format -msgid "data %02d: value %d, %d updates\n" -msgstr "" +#: src/dird/ua_run.c:763 src/dird/ua_run.c:848 src/dird/ua_run.c:853 +#, fuzzy +msgid "Command input" +msgstr "Не зрозумілий параметр командного рядка" -#: src/lib/bget_msg.c:97 -msgid "Status OK\n" +#: src/dird/ua_run.c:776 +msgid "Please enter the full path prefix for restore (/ for none): " msgstr "" -#: src/lib/bget_msg.c:101 -#, c-format -msgid "bget_msg: unknown signal %d\n" +#: src/dird/ua_run.c:798 +msgid "Replace:\n" msgstr "" -#: src/lib/bsock.c:131 -#, c-format -msgid "" -"Could not connect to %s on %s:%d. ERR=%s\n" -"Retrying ...\n" +#: src/dird/ua_run.c:802 +msgid "Select replace option" msgstr "" -#: src/lib/bsock.c:137 -#, c-format -msgid "Unable to connect to %s on %s:%d. ERR=%s\n" +#: src/dird/ua_run.c:813 +msgid "" +"You must set the bootstrap file to NULL to be able to specify a JobId.\n" msgstr "" -#: src/lib/bsock.c:207 -#, c-format -msgid "bnet_host2ipaddrs() for host \"%s\" failed: ERR=%s\n" +#: src/dird/ua_run.c:850 src/dird/ua_run.c:855 src/dird/ua_run.c:871 +msgid "User input" msgstr "" -#: src/lib/bsock.c:260 +#: src/dird/ua_run.c:925 #, c-format -msgid "Socket open error. proto=%d port=%d. ERR=%s\n" +msgid "Invalid replace option: %s\n" msgstr "" -#: src/lib/bsock.c:273 -#, c-format -msgid "Source address bind error. proto=%d. ERR=%s\n" +#: src/dird/ua_run.c:957 +msgid "Storage from NextPool override" msgstr "" -#: src/lib/bsock.c:284 src/lib/bsock.c:320 src/lib/bnet_server.c:218 +#: src/dird/ua_run.c:969 src/dird/ua_cmds.c:1237 #, c-format -msgid "Cannot set SO_KEEPALIVE on socket: %s\n" +msgid "Level \"%s\" not valid.\n" msgstr "" -#: src/lib/bsock.c:292 +#: src/dird/ua_run.c:1016 #, c-format -msgid "Cannot set TCP_KEEPIDLE on socket: %s\n" +msgid "strip_prefix=%s add_prefix=%s add_suffix=%s\n" msgstr "" -#: src/lib/bsock.c:339 -#, c-format -msgid "Could not init bsock mutex. ERR=%s\n" +#: src/dird/ua_run.c:1019 +msgid "This will replace your current Where value\n" msgstr "" -#: src/lib/bsock.c:374 -#, c-format -msgid "Socket has errors=%d on call to %s:%s:%d\n" +#: src/dird/ua_run.c:1020 +msgid "Strip prefix" msgstr "" -#: src/lib/bsock.c:381 -#, c-format -msgid "Socket is terminated=%d on call to %s:%s:%d\n" +#: src/dird/ua_run.c:1021 +msgid "Add prefix" msgstr "" -#: src/lib/bsock.c:389 -#, c-format -msgid "Socket has insane msglen=%d on call to %s:%s:%d\n" +#: src/dird/ua_run.c:1022 +msgid "Add file suffix" msgstr "" -#: src/lib/bsock.c:427 -#, c-format -msgid "Write error sending %d bytes to %s:%s:%d: ERR=%s\n" +#: src/dird/ua_run.c:1023 +msgid "Enter a regexp" msgstr "" -#: src/lib/bsock.c:433 -#, c-format -msgid "Wrote %d bytes to %s:%s:%d, but only %d accepted.\n" +#: src/dird/ua_run.c:1024 +msgid "Test filename manipulation" msgstr "" -#: src/lib/bsock.c:522 src/lib/bsock.c:583 -#, c-format -msgid "Read expected %d got %d from %s:%s:%d\n" +#: src/dird/ua_run.c:1025 +msgid "Use this ?" msgstr "" -#: src/lib/bsock.c:542 -#, c-format -msgid "Packet size too big from \"%s:%s:%d. Terminating connection.\n" +#: src/dird/ua_run.c:1030 +msgid "Please enter the path prefix to strip: " msgstr "" -#: src/lib/bsock.c:572 -#, c-format -msgid "Read error from %s:%s:%d: ERR=%s\n" +#: src/dird/ua_run.c:1038 +msgid "Please enter the path prefix to add (/ for none): " msgstr "" -#: src/lib/bsock.c:663 -msgid "fread attr spool I/O error.\n" +#: src/dird/ua_run.c:1049 +msgid "Please enter the file suffix to add: " msgstr "" -#: src/lib/bsock.c:724 -msgid "Could not malloc BSOCK data buffer\n" +#: src/dird/ua_run.c:1056 +msgid "Please enter a valid regexp (!from!to!): " msgstr "" -#: src/lib/bsock.c:742 src/lib/bsock.c:761 +#: src/dird/ua_run.c:1069 #, c-format -msgid "sockopt error: %s\n" +msgid "regexwhere=%s\n" msgstr "" -#: src/lib/bsock.c:748 src/lib/bsock.c:767 +#: src/dird/ua_run.c:1075 #, c-format -msgid "Warning network buffer = %d bytes not max size.\n" +msgid "strip_prefix=%s add_prefix=%s add_suffix=%s result=%s\n" msgstr "" -#: src/lib/bsock.c:787 src/lib/bsock.c:821 -#, c-format -msgid "fcntl F_GETFL error. ERR=%s\n" +#: src/dird/ua_run.c:1082 +msgid "Cannot use your regexp\n" msgstr "" -#: src/lib/bsock.c:793 src/lib/bsock.c:827 src/lib/bsock.c:859 -#, c-format -msgid "fcntl F_SETFL error. ERR=%s\n" +#: src/dird/ua_run.c:1085 +msgid "Enter a period (.) to stop this test\n" msgstr "" -#: src/lib/bsock.c:1032 src/qt-console/bcomm/dircomm_auth.cpp:112 -#, c-format -msgid "Director authorization problem at \"%s:%d\"\n" -msgstr "Проблеми авторизації Директора \"%s:%d\"\n" - -#: src/lib/bsock.c:1039 src/qt-console/bcomm/dircomm_auth.cpp:119 -#, c-format -msgid "" -"Authorization problem: Remote server at \"%s:%d\" did not advertise required " -"TLS support.\n" +#: src/dird/ua_run.c:1086 +msgid "Please enter filename to test: " msgstr "" -"Проблеми авторизації: Віддалений сервер \"%s:%d\" не повідомляє про " -"необхідність використання TLS.\n" -#: src/lib/bsock.c:1047 src/qt-console/bcomm/dircomm_auth.cpp:127 +#: src/dird/ua_run.c:1088 #, c-format -msgid "" -"Authorization problem with Director at \"%s:%d\": Remote server requires " -"TLS.\n" +msgid "%s -> %s\n" msgstr "" -"Проблеми авторизації Керівника \"%s:%d\": Віддалений сепвер вимагає TLS.\n" - -#: src/lib/bsock.c:1059 src/qt-console/bcomm/dircomm_auth.cpp:138 -#, c-format -msgid "TLS negotiation failed with Director at \"%s:%d\"\n" -msgstr "Встановлення TLS із Керівником невдале \"%s:%d\"\n" -#: src/lib/bsock.c:1069 src/qt-console/bcomm/dircomm_auth.cpp:150 -#, c-format -msgid "" -"Bad response to Hello command: ERR=%s\n" -"The Director at \"%s:%d\" is probably not running.\n" +#: src/dird/ua_run.c:1132 +msgid "Cannot use your regexp.\n" msgstr "" -"Погана відповідь на команду Hello: ERR=%s\n" -"Керівник \"%s:%d\" ймовірно не запущений.\n" -#: src/lib/bsock.c:1078 src/qt-console/bcomm/dircomm_auth.cpp:159 -#, c-format -msgid "Director at \"%s:%d\" rejected Hello command\n" -msgstr "Керівник \"%s:%d\" відкинув команду Hello\n" - -#: src/lib/bsock.c:1088 src/qt-console/bcomm/dircomm_auth.cpp:171 -#, fuzzy, c-format -msgid "" -"Authorization problem with Director at \"%s:%d\"\n" -"Most likely the passwords do not agree.\n" -"If you are using TLS, there may have been a certificate validation error " -"during the TLS handshake.\n" -"Please see " +#: src/dird/ua_run.c:1145 src/dird/ua_run.c:1175 +msgid "Levels:\n" msgstr "" -"Проблеми авторизації із Керівником \"%s:%d\"\n" -"Швидше за все, проблема у паролях.\n" -"Якщо Ви використовуєте TLS, можливо, невдала перевірка сертифікату під час " -"TLS handshake.\n" -"Для отримання допомоги, будь ласка, перегляньте http://www.bacula.org/en/rel-" -"manual/Bacula_Freque_Asked_Questi.html#SECTION003760000000000000000.\n" -#: src/lib/message.c:362 src/lib/message.c:372 -#, c-format -msgid "Could not open console message file %s: ERR=%s\n" +#: src/dird/ua_run.c:1151 +msgid "VirtualFull" msgstr "" -#: src/lib/message.c:377 -#, c-format -msgid "Could not get con mutex: ERR=%s\n" +#: src/dird/ua_run.c:1152 src/dird/ua_run.c:1181 +msgid "Select level" msgstr "" -#: src/lib/message.c:482 -msgid "Bacula Message" +#: src/dird/ua_run.c:1176 +msgid "Initialize Catalog" msgstr "" -#: src/lib/message.c:486 -#, c-format -msgid "open mail pipe %s failed: ERR=%s\n" +#: src/dird/ua_run.c:1180 +msgid "Verify Volume Data (not yet implemented)" msgstr "" -#: src/lib/message.c:577 -msgid "open mail pipe failed.\n" +#: src/dird/ua_run.c:1201 +msgid "Level not appropriate for this Job. Cannot be changed.\n" msgstr "" -#: src/lib/message.c:590 +#: src/dird/ua_run.c:1232 #, c-format -msgid "close error: ERR=%s\n" +msgid "" +"Run Admin Job\n" +"JobName: %s\n" +"FileSet: %s\n" +"Client: %s\n" +"Storage: %s\n" +"When: %s\n" +"Priority: %d\n" msgstr "" -#: src/lib/message.c:601 +#: src/dird/ua_run.c:1286 #, c-format -msgid "Mail prog: %s" +msgid "" +"Run Backup job\n" +"JobName: %s\n" +"Level: %s\n" +"Client: %s\n" +"FileSet: %s\n" +"Pool: %s (From %s)\n" +"%sStorage: %s (From %s)\n" +"When: %s\n" +"Priority: %d\n" msgstr "" -#: src/lib/message.c:610 +#: src/dird/ua_run.c:1315 +#, fuzzy, c-format +msgid "Could not get job record for selected JobId. ERR=%s" +msgstr "Не вдалось відновити прапорці для файлу %s: ERR=%s\n" + +#: src/dird/ua_run.c:1354 #, c-format msgid "" -"Mail program terminated in error.\n" -"CMD=%s\n" -"ERR=%s\n" +"Run Verify Job\n" +"JobName: %s\n" +"Level: %s\n" +"Client: %s\n" +"FileSet: %s\n" +"Pool: %s (From %s)\n" +"Storage: %s (From %s)\n" +"Verify Job: %s\n" +"Verify List: %s\n" +"When: %s\n" +"Priority: %d\n" msgstr "" -#: src/lib/message.c:713 -#, c-format -msgid "fopen %s failed: ERR=%s\n" +#: src/dird/ua_run.c:1383 +msgid "Please enter a JobId for restore: " msgstr "" -#: src/lib/message.c:835 src/lib/message.c:838 -msgid "Msg delivery error: Unable to store data in database.\n" -msgstr "" - -#: src/lib/message.c:890 +#: src/dird/ua_run.c:1421 #, c-format msgid "" -"Msg delivery error: Operator mail program terminated in error.\n" -"CMD=%s\n" -"ERR=%s\n" -msgstr "" - -#: src/lib/message.c:911 -#, fuzzy, c-format -msgid "Msg delivery error: fopen %s failed: ERR=%s\n" -msgstr "Помилка у %s файл %s: ERR=%s\n" - -#: src/lib/message.c:1230 -#, c-format -msgid "%s: ABORTING due to ERROR in %s:%d\n" -msgstr "" - -#: src/lib/message.c:1234 -#, c-format -msgid "%s: ERROR TERMINATION at %s:%d\n" +"Run Restore job\n" +"JobName: %s\n" +"Bootstrap: %s\n" +"RegexWhere: %s\n" +"Replace: %s\n" +"FileSet: %s\n" +"Backup Client: %s\n" +"Restore Client: %s\n" +"Storage: %s\n" +"When: %s\n" +"Catalog: %s\n" +"Priority: %d\n" msgstr "" -#: src/lib/message.c:1239 +#: src/dird/ua_run.c:1473 #, c-format -msgid "%s: Fatal Error because: " +msgid "" +"Run Restore job\n" +"JobName: %s\n" +"Bootstrap: %s\n" +"Where: %s\n" +"Replace: %s\n" +"FileSet: %s\n" +"Backup Client: %s\n" +"Restore Client: %s\n" +"Storage: %s\n" +"When: %s\n" +"Catalog: %s\n" +"Priority: %d\n" msgstr "" -#: src/lib/message.c:1241 +#: src/dird/ua_run.c:1502 #, c-format -msgid "%s: Fatal Error at %s:%d because:\n" +msgid "" +"Run Restore job\n" +"JobName: %s\n" +"Bootstrap: %s\n" msgstr "" -#: src/lib/message.c:1245 +#: src/dird/ua_run.c:1510 #, c-format -msgid "%s: ERROR: " +msgid "RegexWhere: %s\n" msgstr "" -#: src/lib/message.c:1247 +#: src/dird/ua_run.c:1513 #, c-format -msgid "%s: ERROR in %s:%d " +msgid "Where: %s\n" msgstr "" -#: src/lib/message.c:1250 +#: src/dird/ua_run.c:1517 #, c-format -msgid "%s: Warning: " +msgid "" +"Replace: %s\n" +"Client: %s\n" +"Storage: %s\n" +"JobId: %s\n" +"When: %s\n" +"Catalog: %s\n" +"Priority: %d\n" msgstr "" -#: src/lib/message.c:1253 -#, c-format -msgid "%s: Security violation: " +#: src/dird/ua_run.c:1572 +msgid "Run Copy job\n" msgstr "" -#: src/lib/message.c:1341 -#, c-format -msgid "%s ABORTING due to ERROR\n" +#: src/dird/ua_run.c:1574 +msgid "Run Migration job\n" msgstr "" -#: src/lib/message.c:1344 +#: src/dird/ua_run.c:1606 #, c-format -msgid "%s ERROR TERMINATION\n" +msgid "Unknown Job Type=%d\n" msgstr "" -#: src/lib/message.c:1347 +#: src/dird/ua_run.c:1680 #, c-format -msgid "%s JobId %u: Fatal error: " +msgid "Value missing for keyword %s\n" msgstr "" -#: src/lib/message.c:1356 -#, c-format -msgid "%s JobId %u: Error: " +#: src/dird/ua_run.c:1690 +msgid "JobId specified twice.\n" msgstr "" -#: src/lib/message.c:1362 -#, c-format -msgid "%s JobId %u: Warning: " +#: src/dird/ua_run.c:1699 src/dird/ua_run.c:1839 +msgid "Client specified twice.\n" msgstr "" -#: src/lib/message.c:1368 -#, c-format -msgid "%s JobId %u: Security violation: " +#: src/dird/ua_run.c:1707 +msgid "FileSet specified twice.\n" msgstr "" -#: src/lib/bnet_server.c:125 -#, c-format -msgid "Cannot open stream socket. ERR=%s. Current %s All %s\n" +#: src/dird/ua_run.c:1715 +msgid "Level specified twice.\n" msgstr "" -#: src/lib/bnet_server.c:138 -#, c-format -msgid "Cannot set SO_REUSEADDR on socket: %s\n" +#: src/dird/ua_run.c:1724 +msgid "Storage specified twice.\n" msgstr "" -#: src/lib/bnet_server.c:147 -#, c-format -msgid "Cannot bind port %d: ERR=%s: Retrying ...\n" +#: src/dird/ua_run.c:1732 +msgid "RegexWhere or Where specified twice.\n" msgstr "" -#: src/lib/bnet_server.c:152 -#, c-format -msgid "Cannot bind port %d: ERR=%s.\n" +#: src/dird/ua_run.c:1737 +msgid "No authorization for \"regexwhere\" specification.\n" msgstr "" -#: src/lib/bnet_server.c:163 -#, c-format -msgid "Could not init client queue: ERR=%s\n" +#: src/dird/ua_run.c:1744 +msgid "Where or RegexWhere specified twice.\n" msgstr "" -#: src/lib/bnet_server.c:182 -#, c-format -msgid "Error in select: %s\n" +#: src/dird/ua_run.c:1749 +msgid "No authoriztion for \"where\" specification.\n" msgstr "" -#: src/lib/bnet_server.c:203 -#, c-format -msgid "Connection from %s:%d refused by hosts.access\n" +#: src/dird/ua_run.c:1756 +msgid "Bootstrap specified twice.\n" msgstr "" -#: src/lib/bnet_server.c:229 -msgid "Could not create client BSOCK.\n" +#: src/dird/ua_run.c:1764 +msgid "Replace specified twice.\n" msgstr "" -#: src/lib/bnet_server.c:236 -#, c-format -msgid "Could not add job to client queue: ERR=%s\n" +#: src/dird/ua_run.c:1772 +msgid "When specified twice.\n" msgstr "" -#: src/lib/bnet_server.c:253 -#, c-format -msgid "Could not destroy client queue: ERR=%s\n" +#: src/dird/ua_run.c:1780 +msgid "Priority specified twice.\n" msgstr "" -#: src/lib/bpipe.c:361 src/lib/bpipe.c:444 -msgid "Program killed by Bacula (timeout)\n" +#: src/dird/ua_run.c:1785 +msgid "Priority must be positive nonzero setting it to 10.\n" msgstr "" -#: src/lib/lockmgr.c:65 -#, c-format -msgid "ASSERT failed at %s:%i: %s\n" +#: src/dird/ua_run.c:1795 +msgid "Verify Job specified twice.\n" msgstr "" -#: src/lib/lockmgr.c:70 -#, c-format -msgid "ASSERT failed at %s:%i: %s \n" +#: src/dird/ua_run.c:1823 +msgid "Migration Job specified twice.\n" msgstr "" -#: src/lib/lockmgr.c:100 -#, c-format -msgid "Mutex lock failure. ERR=%s\n" +#: src/dird/ua_run.c:1831 +msgid "Pool specified twice.\n" msgstr "" -#: src/lib/lockmgr.c:110 -#, c-format -msgid "Mutex unlock failure. ERR=%s\n" +#: src/dird/ua_run.c:1847 +msgid "Restore Client specified twice.\n" msgstr "" -#: src/lib/lockmgr.c:275 src/lib/lockmgr.c:611 src/lib/lockmgr.c:639 -#: src/lib/jcr.c:321 -#, c-format -msgid "pthread key create failed: ERR=%s\n" +#: src/dird/ua_run.c:1854 +msgid "Plugin Options not yet implemented.\n" msgstr "" -#: src/lib/lockmgr.c:623 -#, c-format -msgid "pthread_create failed: ERR=%s\n" +#: src/dird/ua_run.c:1857 +msgid "Plugin Options specified twice.\n" msgstr "" -#: src/lib/crypto.c:442 -msgid "Unable to open certificate file" +#: src/dird/ua_run.c:1862 +msgid "No authoriztion for \"PluginOptions\" specification.\n" msgstr "" -#: src/lib/crypto.c:449 -msgid "Unable to read certificate from file" +#: src/dird/ua_run.c:1869 +msgid "Spool flag specified twice.\n" msgstr "" -#: src/lib/crypto.c:455 -msgid "Unable to extract public key from certificate" +#: src/dird/ua_run.c:1876 +msgid "Invalid spooldata flag.\n" msgstr "" -#: src/lib/crypto.c:462 -msgid "" -"Provided certificate does not include the required subjectKeyIdentifier " -"extension." +#: src/dird/ua_run.c:1885 +msgid "IgnoreDuplicateCheck flag specified twice.\n" msgstr "" -#: src/lib/crypto.c:469 -#, c-format -msgid "Unsupported key type provided: %d\n" +#: src/dird/ua_run.c:1892 +msgid "Invalid ignoreduplicatecheck flag.\n" msgstr "" -#: src/lib/crypto.c:506 src/lib/crypto.c:554 -msgid "Unable to open private key file" +#: src/dird/ua_run.c:1897 +msgid "Accurate flag specified twice.\n" msgstr "" -#: src/lib/crypto.c:536 src/lib/crypto.c:570 -msgid "Unable to read private key from file" +#: src/dird/ua_run.c:1904 +msgid "Invalid accurate flag.\n" msgstr "" -#: src/lib/crypto.c:629 -#, c-format -msgid "Unsupported digest type: %d\n" -msgstr "Цей тип відбитку не підтримується: %d\n" - -#: src/lib/crypto.c:643 -msgid "OpenSSL digest initialization failed" -msgstr "Відбиток" - -#: src/lib/crypto.c:657 -msgid "OpenSSL digest update failed" -msgstr "Відбиток" - -#: src/lib/crypto.c:675 -msgid "OpenSSL digest finalize failed" -msgstr "Відбиток" - -#: src/lib/crypto.c:773 -msgid "OpenSSL digest_new failed" +#: src/dird/ua_run.c:1909 +msgid "Job name specified twice.\n" msgstr "" -#: src/lib/crypto.c:779 -msgid "OpenSSL sign get digest failed" -msgstr "Відбиток" +#: src/dird/ua_run.c:1917 +#, fuzzy +msgid "Media Type specified twice.\n" +msgstr "зазначений час сну" -#: src/lib/crypto.c:818 src/lib/crypto.c:822 -msgid "OpenSSL digest Verify final failed" -msgstr "Відбиток" +#: src/dird/ua_run.c:1925 +#, fuzzy +msgid "NextPool specified twice.\n" +msgstr "зазначений час сну" -#: src/lib/crypto.c:827 -msgid "No signers found for crypto verify.\n" +#: src/dird/ua_run.c:1950 +#, c-format +msgid "Invalid keyword: %s\n" msgstr "" -#: src/lib/crypto.c:888 -msgid "Signature creation failed" +#: src/dird/ua_run.c:1965 +#, c-format +msgid "Catalog \"%s\" not found\n" msgstr "" -#: src/lib/crypto.c:966 -msgid "Signature decoding failed" +#: src/dird/ua_run.c:1969 +#, c-format +msgid "No authorization. Catalog \"%s\".\n" msgstr "" -#: src/lib/crypto.c:1043 -msgid "Unsupported cipher type specified\n" +#: src/dird/ua_run.c:2003 +#, c-format +msgid "Verify Job \"%s\" not found.\n" msgstr "" -#: src/lib/crypto.c:1192 -msgid "CryptoData decoding failed" +#: src/dird/ua_run.c:2013 +#, c-format +msgid "Migration Job \"%s\" not found.\n" msgstr "" -#: src/lib/crypto.c:1236 -msgid "Failure decrypting the session key" +#: src/dird/ua_label.c:92 +msgid "Negative numbers not permitted\n" msgstr "" -#: src/lib/crypto.c:1287 -#, c-format -msgid "Unsupported contentEncryptionAlgorithm: %d\n" +#: src/dird/ua_label.c:121 +msgid "Values must be be greater than zero.\n" msgstr "" -#: src/lib/crypto.c:1297 src/lib/crypto.c:1303 -msgid "OpenSSL cipher context initialization failed" +#: src/dird/ua_label.c:125 +msgid "Slot too large.\n" msgstr "" -#: src/lib/crypto.c:1310 -msgid "Encryption session provided an invalid symmetric key" +#: src/dird/ua_label.c:195 src/dird/ua_label.c:518 src/dird/ua_label.c:1198 +msgid "No slots in changer to scan.\n" msgstr "" -#: src/lib/crypto.c:1316 -msgid "Encryption session provided an invalid IV" +#: src/dird/ua_label.c:207 src/dird/ua_label.c:529 +msgid "No Volumes found to label, or no barcodes.\n" msgstr "" -#: src/lib/crypto.c:1322 -msgid "OpenSSL cipher context key/IV initialization failed" +#: src/dird/ua_label.c:217 src/dird/ua_label.c:1219 +#, c-format +msgid "Slot %d greater than max %d ignored.\n" msgstr "" -#: src/lib/crypto.c:1392 +#: src/dird/ua_label.c:255 #, c-format -msgid "Unable to init OpenSSL threading: ERR=%s\n" +msgid "No VolName for Slot=%d InChanger set to zero.\n" msgstr "" -#: src/lib/crypto.c:1405 -msgid "Failed to seed OpenSSL PRNG\n" +#: src/dird/ua_label.c:276 +#, c-format +msgid "Catalog record for Volume \"%s\" updated to reference slot %d.\n" msgstr "" -#: src/lib/crypto.c:1431 -msgid "Failed to save OpenSSL PRNG\n" +#: src/dird/ua_label.c:280 +#, c-format +msgid "Catalog record for Volume \"%s\" is up to date.\n" msgstr "" -#: src/lib/crypto.c:1492 +#: src/dird/ua_label.c:286 #, c-format -msgid "Unsupported digest type=%d specified\n" -msgstr "Заданий тип відбитку=%d не підтримується\n" +msgid "Volume \"%s\" not found in catalog. Slot=%d InChanger set to zero.\n" +msgstr "" -#: src/lib/crypto.c:1512 +#: src/dird/ua_label.c:383 #, c-format -msgid "SHA1Update() returned an error: %d\n" +msgid "" +"Volume \"%s\" has VolStatus %s. It must be Purged or Recycled before " +"relabeling.\n" msgstr "" -#: src/lib/crypto.c:1655 -msgid "No error" +#: src/dird/ua_label.c:399 +msgid "Enter new Volume name: " msgstr "" -#: src/lib/crypto.c:1657 -msgid "Signer not found" +#: src/dird/ua_label.c:412 +#, c-format +msgid "Media record for new Volume \"%s\" already exists.\n" msgstr "" -#: src/lib/crypto.c:1659 -msgid "Recipient not found" +#: src/dird/ua_label.c:430 +msgid "Enter slot (0 or Enter for none): " msgstr "" -#: src/lib/crypto.c:1661 -msgid "Unsupported digest algorithm" -msgstr "Відбиток" - -#: src/lib/crypto.c:1663 -msgid "Unsupported encryption algorithm" +#: src/dird/ua_label.c:458 +#, c-format +msgid "Delete of Volume \"%s\" failed. ERR=%s" msgstr "" -#: src/lib/crypto.c:1665 -msgid "Signature is invalid" +#: src/dird/ua_label.c:461 +#, c-format +msgid "Old volume \"%s\" deleted from catalog.\n" msgstr "" -#: src/lib/crypto.c:1667 -msgid "Decryption error" +#: src/dird/ua_label.c:472 +#, c-format +msgid "Requesting to mount %s ...\n" msgstr "" -#: src/lib/crypto.c:1670 -msgid "Internal error" +#: src/dird/ua_label.c:494 +msgid "Do not forget to mount the drive!!!\n" msgstr "" -#: src/lib/crypto.c:1672 -msgid "Unknown error" +#: src/dird/ua_label.c:534 +msgid "" +"The following Volumes will be labeled:\n" +"Slot Volume\n" +"==============\n" msgstr "" -#: src/lib/cram-md5.c:109 src/lib/cram-md5.c:137 -msgid "1999 Authorization failed.\n" +#: src/dird/ua_label.c:543 +msgid "Do you want to label these Volumes? (yes|no): " msgstr "" -#: src/lib/priv.c:68 +#: src/dird/ua_label.c:563 #, c-format -msgid "Could not find userid=%s: ERR=%s\n" +msgid "Media record for Slot %d Volume \"%s\" already exists.\n" msgstr "" -#: src/lib/priv.c:74 +#: src/dird/ua_label.c:569 #, c-format -msgid "Could not find password entry. ERR=%s\n" +msgid "Error setting InChanger: ERR=%s" msgstr "" -#: src/lib/priv.c:87 +#: src/dird/ua_label.c:592 #, c-format -msgid "Could not find group=%s: ERR=%s\n" +msgid "Maximum pool Volumes=%d reached.\n" msgstr "" -#: src/lib/priv.c:95 +#: src/dird/ua_label.c:600 #, c-format -msgid "Could not initgroups for group=%s, userid=%s: ERR=%s\n" +msgid "Catalog record for cleaning tape \"%s\" successfully created.\n" msgstr "" -#: src/lib/priv.c:98 +#: src/dird/ua_label.c:607 #, c-format -msgid "Could not initgroups for userid=%s: ERR=%s\n" +msgid "Catalog error on cleaning tape: %s" msgstr "" -#: src/lib/priv.c:105 +#: src/dird/ua_label.c:643 #, c-format -msgid "Could not set group=%s: ERR=%s\n" +msgid "Illegal character \"%c\" in a volume name.\n" msgstr "" -#: src/lib/priv.c:115 -#, fuzzy, c-format -msgid "prctl failed: ERR=%s\n" -msgstr "Помилка у %s файл %s: ERR=%s\n" - -#: src/lib/priv.c:119 -#, fuzzy, c-format -msgid "setreuid failed: ERR=%s\n" -msgstr "Помилка у %s файл %s: ERR=%s\n" - -#: src/lib/priv.c:123 -#, c-format -msgid "cap_from_text failed: ERR=%s\n" +#: src/dird/ua_label.c:650 src/dird/ua_cmds.c:341 +msgid "Volume name too long.\n" msgstr "" -#: src/lib/priv.c:127 +#: src/dird/ua_label.c:690 #, c-format -msgid "cap_set_proc failed: ERR=%s\n" +msgid "Sending relabel command from \"%s\" to \"%s\" ...\n" msgstr "" -#: src/lib/priv.c:131 -msgid "Keep readall caps not implemented this OS or missing libraries.\n" +#: src/dird/ua_label.c:697 +#, c-format +msgid "Sending label command for Volume \"%s\" Slot %d ...\n" msgstr "" -#: src/lib/priv.c:135 +#: src/dird/ua_label.c:738 #, c-format -msgid "Could not set specified userid: %s\n" +msgid "Catalog record for Volume \"%s\", Slot %d successfully created.\n" msgstr "" -#: src/lib/openssl.c:143 src/lib/openssl.c:214 +#: src/dird/ua_label.c:751 #, c-format -msgid "Unable to destroy mutex: ERR=%s\n" +msgid "Label command failed for Volume %s.\n" msgstr "" -#: src/lib/util.c:183 -msgid "Running" +#: src/dird/ua_label.c:765 +msgid "Could not open SD socket.\n" msgstr "" -#: src/lib/util.c:186 -msgid "Blocked" +#: src/dird/ua_label.c:837 src/dird/ua_label.c:847 +#, c-format +msgid "Invalid Slot number: %s\n" msgstr "" -#: src/lib/util.c:192 -msgid "Error: incomplete job" +#: src/dird/ua_label.c:856 +#, c-format +msgid "Invalid Volume name: %s\n" msgstr "" -#: src/lib/util.c:199 -msgid "Non-fatal error" +#: src/dird/ua_label.c:950 +#, c-format +msgid "Device \"%s\" has %d slots.\n" msgstr "" -#: src/lib/util.c:205 src/lib/util.c:337 -msgid "Canceled" +#: src/dird/ua_label.c:996 +#, c-format +msgid "Pool \"%s\" resource not found for volume \"%s\"!\n" msgstr "" -#: src/lib/util.c:208 -msgid "Verify differences" +#: src/dird/ua_label.c:1210 +msgid "No Volumes found, or no barcodes.\n" msgstr "" -#: src/lib/util.c:211 -msgid "Waiting on FD" +#: src/dird/ua_label.c:1213 +msgid "" +" Slot | Volume Name | Status | Media Type | " +"Pool |\n" msgstr "" -#: src/lib/util.c:214 -msgid "Wait on SD" +#: src/dird/ua_label.c:1214 +msgid "" +"------+------------------+-----------+----------------------" +"+--------------------|\n" msgstr "" -#: src/lib/util.c:217 -msgid "Wait for new Volume" +#: src/dird/ua_cmds.c:95 +msgid "Add media to a pool" msgstr "" -#: src/lib/util.c:220 -msgid "Waiting for mount" +#: src/dird/ua_cmds.c:96 +msgid "Autodisplay console messages" msgstr "" -#: src/lib/util.c:223 -msgid "Waiting for Storage resource" +#: src/dird/ua_cmds.c:97 +msgid "Automount after label" msgstr "" -#: src/lib/util.c:226 -msgid "Waiting for Job resource" +#: src/dird/ua_cmds.c:98 +msgid "Cancel a job" msgstr "" -#: src/lib/util.c:229 -msgid "Waiting for Client resource" +#: src/dird/ua_cmds.c:99 +msgid "Create DB Pool from resource" msgstr "" -#: src/lib/util.c:232 -msgid "Waiting on Max Jobs" +#: src/dird/ua_cmds.c:100 +msgid "Delete volume, pool or job" msgstr "" -#: src/lib/util.c:235 -msgid "Waiting for Start Time" +#: src/dird/ua_cmds.c:101 +msgid "Disable a job, attributes batch process" msgstr "" -#: src/lib/util.c:238 -msgid "Waiting on Priority" +#: src/dird/ua_cmds.c:102 +msgid "Enable a job, attributes batch process" msgstr "" -#: src/lib/util.c:257 -#, c-format -msgid "Unknown Job termination status=%d" +#: src/dird/ua_cmds.c:103 +msgid "Performs FileSet estimate, listing gives full listing" msgstr "" -#: src/lib/util.c:273 -msgid "Completed successfully" -msgstr "" +#: src/dird/ua_cmds.c:106 src/dird/ua_cmds.c:130 +#, fuzzy +msgid "Terminate Bconsole session" +msgstr "вивести версію Консолі" -#: src/lib/util.c:276 -msgid "Completed with warnings" +#: src/dird/ua_cmds.c:107 +msgid "Non-interactive gui mode" msgstr "" -#: src/lib/util.c:279 -msgid "Terminated with errors" +#: src/dird/ua_cmds.c:108 +msgid "Print help on specific command" msgstr "" -#: src/lib/util.c:282 -msgid "Fatal error" +#: src/dird/ua_cmds.c:113 +msgid "Label a tape" msgstr "" -#: src/lib/util.c:285 -msgid "Created, not yet running" +#: src/dird/ua_cmds.c:114 +msgid "List objects from catalog" msgstr "" -#: src/lib/util.c:288 -msgid "Canceled by user" +#: src/dird/ua_cmds.c:118 +msgid "Full or long list like list command" msgstr "" -#: src/lib/util.c:291 -msgid "Verify found differences" +#: src/dird/ua_cmds.c:121 +msgid "Display pending messages" msgstr "" -#: src/lib/util.c:294 -msgid "Waiting for File daemon" -msgstr "" +#: src/dird/ua_cmds.c:122 +#, fuzzy +msgid "Print current memory usage" +msgstr "вивести поточний час" -#: src/lib/util.c:297 -msgid "Waiting for Storage daemon" +#: src/dird/ua_cmds.c:123 +msgid "Mount storage" msgstr "" -#: src/lib/util.c:300 -msgid "Waiting for higher priority jobs" +#: src/dird/ua_cmds.c:126 +msgid "Prune expired records from catalog" msgstr "" -#: src/lib/util.c:303 -msgid "Batch inserting file records" +#: src/dird/ua_cmds.c:129 +msgid "Purge records from catalog" msgstr "" -#: src/lib/util.c:334 -msgid "Fatal Error" +#: src/dird/ua_cmds.c:131 +msgid "Query catalog" msgstr "" -#: src/lib/util.c:340 -msgid "Differences" +#: src/dird/ua_cmds.c:132 +msgid "Restore files" msgstr "" -#: src/lib/util.c:343 -msgid "Unknown term code" +#: src/dird/ua_cmds.c:137 +msgid "Relabel a tape" msgstr "" -#: src/lib/util.c:359 src/lib/jcr.c:232 -msgid "Backup" +#: src/dird/ua_cmds.c:140 +msgid "Release storage" msgstr "" -#: src/lib/util.c:362 -msgid "Migrated Job" +#: src/dird/ua_cmds.c:141 +msgid "Reload conf file" msgstr "" -#: src/lib/util.c:365 -msgid "Verify" +#: src/dird/ua_cmds.c:142 +msgid "Run a job" msgstr "" -#: src/lib/util.c:368 src/wx-console/wxbrestorepanel.cpp:404 -#: src/wx-console/wxbrestorepanel.cpp:2000 -msgid "Restore" +#: src/dird/ua_cmds.c:147 +msgid "Report status" msgstr "" -#: src/lib/util.c:371 src/wx-console/wxbmainframe.cpp:276 -msgid "Console" -msgstr "" +#: src/dird/ua_cmds.c:150 +#, fuzzy +msgid "Stop a job" +msgstr "Останні задачі відсутні" -#: src/lib/util.c:374 -msgid "System or Console" +#: src/dird/ua_cmds.c:151 +msgid "Sets debug level" msgstr "" -#: src/lib/util.c:377 -msgid "Admin" +#: src/dird/ua_cmds.c:154 +msgid "Sets bandwidth" msgstr "" -#: src/lib/util.c:380 src/lib/util.c:470 -msgid "Archive" +#: src/dird/ua_cmds.c:157 +msgid "Sets new client address -- if authorized" msgstr "" -#: src/lib/util.c:383 -msgid "Job Copy" +#: src/dird/ua_cmds.c:158 +#, fuzzy +msgid "Show resource records" +msgstr "Невідомий тип ресурсу %d\n" + +#: src/dird/ua_cmds.c:161 +msgid "Use SQL to query catalog" msgstr "" -#: src/lib/util.c:386 -msgid "Copy" +#: src/dird/ua_cmds.c:162 +#, fuzzy +msgid "Print current time" +msgstr "вивести поточний час" + +#: src/dird/ua_cmds.c:163 +msgid "Turn on/off trace to file" msgstr "" -#: src/lib/util.c:389 -msgid "Migrate" +#: src/dird/ua_cmds.c:164 +msgid "Truncate one or more Volumes" msgstr "" -#: src/lib/util.c:392 -msgid "Scan" +#: src/dird/ua_cmds.c:165 +msgid "Unmount storage" msgstr "" -#: src/lib/util.c:396 -msgid "Unknown Type" +#: src/dird/ua_cmds.c:168 +msgid "Umount - for old-time Unix guys, see unmount" msgstr "" -#: src/lib/util.c:406 -msgid "Truncate" +#: src/dird/ua_cmds.c:171 +msgid "Update volume, pool or stats" msgstr "" -#: src/lib/util.c:409 src/filed/restore.c:1164 -msgid "None" +#: src/dird/ua_cmds.c:178 +msgid "Use catalog xxx" msgstr "" -#: src/lib/util.c:441 -msgid "Verify Init Catalog" +#: src/dird/ua_cmds.c:179 +msgid "Does variable expansion" msgstr "" -#: src/lib/util.c:450 -msgid "Verify Data" +#: src/dird/ua_cmds.c:180 +#, fuzzy +msgid "Print Director version" +msgstr "Керівник" + +#: src/dird/ua_cmds.c:181 +msgid "Wait until no jobs are running" msgstr "" -#: src/lib/util.c:453 -msgid "Virtual Full" +#: src/dird/ua_cmds.c:234 +#, c-format +msgid "%s: is an invalid command.\n" msgstr "" -#: src/lib/util.c:469 -msgid "Append" +#: src/dird/ua_cmds.c:275 +msgid "" +"You probably don't want to be using this command since it\n" +"creates database records without labeling the Volumes.\n" +"You probably want to use the \"label\" command.\n" +"\n" msgstr "" -#: src/lib/util.c:471 -msgid "Disabled" +#: src/dird/ua_cmds.c:293 +#, c-format +msgid "Pool already has maximum volumes=%d\n" msgstr "" -#: src/lib/util.c:473 -msgid "Used" +#: src/dird/ua_cmds.c:294 +msgid "Enter new maximum (zero for unlimited): " msgstr "" -#: src/lib/util.c:474 -msgid "Cleaning" +#: src/dird/ua_cmds.c:314 +#, c-format +msgid "Enter number of Volumes to create. 0=>fixed name. Max=%d: " msgstr "" -#: src/lib/util.c:475 -msgid "Purged" +#: src/dird/ua_cmds.c:320 +#, c-format +msgid "The number must be between 0 and %d\n" msgstr "" -#: src/lib/util.c:476 -msgid "Recycle" +#: src/dird/ua_cmds.c:328 +msgid "Enter Volume name: " msgstr "" -#: src/lib/util.c:477 -msgid "Read-Only" +#: src/dird/ua_cmds.c:332 +msgid "Enter base volume name: " msgstr "" -#: src/lib/util.c:489 -msgid "Invalid volume status" +#: src/dird/ua_cmds.c:356 +msgid "Enter the starting number: " msgstr "" -#: src/lib/util.c:753 src/lib/util.c:763 src/lib/util.c:771 src/lib/util.c:778 -#: src/lib/util.c:785 src/lib/util.c:799 src/lib/util.c:809 src/lib/util.c:822 -#: src/lib/util.c:833 src/filed/restore.c:1180 -msgid "*none*" +#: src/dird/ua_cmds.c:361 +msgid "Start number must be greater than zero.\n" msgstr "" -#: src/lib/util.c:867 -msgid "Working directory not defined. Cannot continue.\n" +#: src/dird/ua_cmds.c:372 +msgid "Enter slot (0 for none): " msgstr "" -#: src/lib/util.c:870 -#, c-format -msgid "Working Directory: \"%s\" not found. Cannot continue.\n" +#: src/dird/ua_cmds.c:376 +msgid "InChanger? yes/no: " msgstr "" -#: src/lib/util.c:874 +#: src/dird/ua_cmds.c:404 #, c-format -msgid "Working Directory: \"%s\" is not a directory. Cannot continue.\n" +msgid "%d Volumes created in pool %s\n" msgstr "" -#: src/lib/save/devlock.c:330 src/lib/devlock.c:330 -msgid "writeunlock called too many times.\n" +#: src/dird/ua_cmds.c:420 src/dird/ua_cmds.c:1131 +msgid "Turn on or off? " msgstr "" -#: src/lib/save/devlock.c:335 src/lib/devlock.c:335 -msgid "writeunlock by non-owner.\n" +#: src/dird/ua_cmds.c:547 +#, c-format +msgid "" +"Can't set %s RecyclePool to %s, %s is not in database.\n" +"Try to update it with 'update pool=%s'\n" msgstr "" -#: src/lib/daemon.c:65 +#: src/dird/ua_cmds.c:565 #, c-format -msgid "Cannot fork to become daemon: ERR=%s\n" +msgid "" +"Can't set %s ScratchPool to %s, %s is not in database.\n" +"Try to update it with 'update pool=%s'\n" msgstr "" -#: src/lib/tls.c:90 +#: src/dird/ua_cmds.c:632 #, c-format msgid "" -"Error with certificate at depth: %d, issuer = %s, subject = %s, ERR=%d:%s\n" +"Error: Pool %s already exists.\n" +"Use update to change it.\n" msgstr "" -#: src/lib/tls.c:127 -msgid "Error initializing SSL context" +#: src/dird/ua_cmds.c:643 +#, c-format +msgid "Pool %s created.\n" msgstr "" -#: src/lib/tls.c:148 -msgid "Error loading certificate verification stores" +#: src/dird/ua_cmds.c:671 +msgid "Failed to set bandwidth limit to Client.\n" msgstr "" -#: src/lib/tls.c:153 -msgid "" -"Either a certificate file or a directory must be specified as a verification " -"store\n" +#: src/dird/ua_cmds.c:674 +#, c-format +msgid "2000 OK Limiting bandwidth to %lldkb/s %s\n" msgstr "" -#: src/lib/tls.c:164 -msgid "Error loading certificate file" +#: src/dird/ua_cmds.c:675 +msgid "on running and future jobs" msgstr "" -#: src/lib/tls.c:172 -msgid "Error loading private key" +#: src/dird/ua_cmds.c:697 +msgid "Set Bandwidth choice:\n" msgstr "" -#: src/lib/tls.c:180 -msgid "Unable to open DH parameters file" +#: src/dird/ua_cmds.c:698 +msgid "Running Job" msgstr "" -#: src/lib/tls.c:186 -msgid "Unable to load DH parameters from specified file" +#: src/dird/ua_cmds.c:699 +msgid "Running and future Jobs for a Client" msgstr "" -#: src/lib/tls.c:190 -msgid "Failed to set TLS Diffie-Hellman parameters" +#: src/dird/ua_cmds.c:700 +msgid "Choose where to limit the bandwidth" msgstr "" -#: src/lib/tls.c:200 -msgid "Error setting cipher list, no valid ciphers available\n" +#: src/dird/ua_cmds.c:712 +msgid "Enter new bandwidth limit kb/s: " msgstr "" -#: src/lib/tls.c:259 -msgid "Peer failed to present a TLS certificate\n" +#: src/dird/ua_cmds.c:749 src/dird/ua_cmds.c:809 +msgid "Unauthorized command from this console.\n" msgstr "" -#: src/lib/tls.c:304 +#: src/dird/ua_cmds.c:766 #, c-format -msgid "Peer %s failed to present a TLS certificate\n" +msgid "Client \"%s\" address set to %s\n" msgstr "" -#: src/lib/tls.c:416 -msgid "Error creating file descriptor-based BIO" +#: src/dird/ua_cmds.c:780 +#, c-format +msgid "Job Attributes Insertion %sabled\n" msgstr "" -#: src/lib/tls.c:427 -msgid "Error creating new SSL object" +#: src/dird/ua_cmds.c:813 +#, c-format +msgid "Job \"%s\" %sabled\n" msgstr "" -#: src/lib/tls.c:491 src/lib/tls.c:514 -msgid "Connect failure" +#: src/dird/ua_cmds.c:1005 +msgid "Enter new debug level: " msgstr "" -#: src/lib/tls.c:594 src/lib/tls.c:598 -msgid "TLS shutdown failure." +#: src/dird/ua_cmds.c:1018 +#, c-format +msgid "Incorrect tags found on command line %s\n" msgstr "" -#: src/lib/tls.c:653 src/lib/tls.c:679 -msgid "TLS read/write failure." -msgstr "" - -#: src/lib/jcr.c:234 -msgid "Verifying" +#: src/dird/ua_cmds.c:1095 +msgid "All" msgstr "" -#: src/lib/jcr.c:236 -msgid "Restoring" +#: src/dird/ua_cmds.c:1096 +msgid "Select daemon type to set debug level" msgstr "" -#: src/lib/jcr.c:238 -msgid "Archiving" +#: src/dird/ua_cmds.c:1191 +msgid "Client name missing.\n" msgstr "" -#: src/lib/jcr.c:240 -msgid "Copying" +#: src/dird/ua_cmds.c:1203 src/dird/ua_cmds.c:1270 src/dird/ua_cmds.c:2016 +#, c-format +msgid "No authorization for Job \"%s\"\n" msgstr "" -#: src/lib/jcr.c:242 -msgid "Migration" +#: src/dird/ua_cmds.c:1208 +msgid "Job name missing.\n" msgstr "" -#: src/lib/jcr.c:244 -msgid "Scanning" +#: src/dird/ua_cmds.c:1217 +#, c-format +msgid "Fileset \"%s\" not found.\n" msgstr "" -#: src/lib/jcr.c:246 -msgid "Unknown operation" +#: src/dird/ua_cmds.c:1221 +#, c-format +msgid "No authorization for FileSet \"%s\"\n" msgstr "" -#: src/lib/jcr.c:255 -msgid "backup" +#: src/dird/ua_cmds.c:1226 +msgid "Fileset name missing.\n" msgstr "" -#: src/lib/jcr.c:257 -msgid "verified" +#: src/dird/ua_cmds.c:1241 +msgid "Level value missing.\n" msgstr "" -#: src/lib/jcr.c:257 -msgid "verify" +#: src/dird/ua_cmds.c:1248 +msgid "Invalid value for accurate. It must be yes or no.\n" msgstr "" -#: src/lib/jcr.c:259 -msgid "restored" +#: src/dird/ua_cmds.c:1253 +msgid "Accurate value missing.\n" msgstr "" -#: src/lib/jcr.c:259 -msgid "restore" +#: src/dird/ua_cmds.c:1266 +msgid "No job specified.\n" msgstr "" -#: src/lib/jcr.c:261 -msgid "archived" +#: src/dird/ua_cmds.c:1326 +msgid "Error sending include list.\n" msgstr "" -#: src/lib/jcr.c:261 -msgid "archive" +#: src/dird/ua_cmds.c:1331 +msgid "Error sending exclude list.\n" msgstr "" -#: src/lib/jcr.c:263 -msgid "copied" +#: src/dird/ua_cmds.c:1422 +msgid "" +"In general it is not a good idea to delete either a\n" +"Pool or a Volume since they may contain data.\n" +"\n" msgstr "" -#: src/lib/jcr.c:263 -msgid "copy" +#: src/dird/ua_cmds.c:1425 +msgid "Choose catalog item to delete" msgstr "" -#: src/lib/jcr.c:265 -msgid "migrated" +#: src/dird/ua_cmds.c:1436 +msgid "Nothing done.\n" msgstr "" -#: src/lib/jcr.c:265 -msgid "migrate" +#: src/dird/ua_cmds.c:1464 +#, c-format +msgid "Are you sure you want to delete %d JobIds ? (yes/no): " msgstr "" -#: src/lib/jcr.c:267 -msgid "scanned" +#: src/dird/ua_cmds.c:1474 +msgid "Enter JobId to delete: " msgstr "" -#: src/lib/jcr.c:267 -msgid "scan" +#: src/dird/ua_cmds.c:1492 +#, c-format +msgid "Jobid %s and associated records deleted from the catalog.\n" msgstr "" -#: src/lib/jcr.c:269 -msgid "unknown action" +#: src/dird/ua_cmds.c:1507 +#, c-format +msgid "" +"\n" +"This command will delete volume %s\n" +"and all Jobs saved on that volume from the Catalog\n" msgstr "" -#: src/lib/jcr.c:343 +#: src/dird/ua_cmds.c:1514 #, c-format -msgid "pthread_once failed. ERR=%s\n" +msgid "Are you sure you want to delete Volume \"%s\"? (yes/no): " msgstr "" -#: src/lib/jcr.c:350 -#, fuzzy, c-format -msgid "Could not init msg_queue mutex. ERR=%s\n" -msgstr "Не вдалось відкрити%s: ERR=%s\n" - -#: src/lib/jcr.c:403 -msgid "NULL jcr.\n" +#: src/dird/ua_cmds.c:1527 +msgid "Can't list jobs on this volume\n" msgstr "" -#: src/lib/jcr.c:509 +#: src/dird/ua_cmds.c:1552 #, c-format -msgid "JCR use_count=%d JobId=%d\n" +msgid "Are you sure you want to delete Pool \"%s\"? (yes/no): " msgstr "" -#: src/lib/jcr.c:619 +#: src/dird/ua_cmds.c:1666 #, c-format -msgid "pthread_setspecific failed: ERR=%s\n" +msgid "Using Catalog name=%s DB=%s\n" msgstr "" -#: src/lib/jcr.c:1103 -#, c-format -msgid "" -"Watchdog sending kill after %d secs to thread stalled reading Storage " -"daemon.\n" +#: src/dird/ua_cmds.c:1734 +msgid "ERR: Can't open db\n" msgstr "" -#: src/lib/jcr.c:1115 -#, c-format -msgid "" -"Watchdog sending kill after %d secs to thread stalled reading File daemon.\n" +#: src/dird/ua_cmds.c:1781 +msgid "Wait on mount timed out\n" msgstr "" -#: src/lib/jcr.c:1127 -#, c-format +#: src/dird/ua_cmds.c:1791 +msgid "ERR: Job was not found\n" +msgstr "" + +#: src/dird/ua_cmds.c:1867 msgid "" -"Watchdog sending kill after %d secs to thread stalled reading Director.\n" +" Command Description\n" +" ======= ===========\n" msgstr "" -#: src/lib/res.c:65 +#: src/dird/ua_cmds.c:1871 #, c-format -msgid "rwl_writelock failure at %s:%d: ERR=%s\n" +msgid "" +" %-13s %s\n" +"\n" +"Arguments:\n" +"\t%s\n" msgstr "" -#: src/lib/res.c:75 +#: src/dird/ua_cmds.c:1876 #, c-format -msgid "rwl_writeunlock failure at %s:%d:. ERR=%s\n" +msgid " %-13s %s\n" msgstr "" -#: src/lib/parse_conf.c:177 -msgid "***UNKNOWN***" -msgstr "" +#: src/dird/ua_cmds.c:1880 +#, fuzzy, c-format +msgid "" +"\n" +"Can't find %s command.\n" +"\n" +msgstr ": неправильна команда\n" -#: src/lib/parse_conf.c:278 src/lib/parse_conf.c:299 -#, c-format -msgid "expected an =, got: %s" +#: src/dird/ua_cmds.c:1882 +msgid "" +"\n" +"When at a prompt, entering a period cancels the command.\n" +"\n" msgstr "" -#: src/lib/parse_conf.c:308 +#: src/dird/ua_cmds.c:1918 src/filed/status.c:77 #, c-format -msgid "Unknown item code: %d\n" +msgid "%s Version: %s (%s) %s %s %s %s\n" msgstr "" -#: src/lib/parse_conf.c:348 +#: src/dird/ua_cmds.c:1977 src/dird/ua_cmds.c:2004 src/dird/ua_cmds.c:2026 #, c-format -msgid "message type: %s not found" +msgid "No authorization for Catalog \"%s\"\n" msgstr "" -#: src/lib/parse_conf.c:386 +#: src/dird/ua_cmds.c:2083 #, c-format -msgid "Attempt to redefine name \"%s\" to \"%s\"." +msgid "Could not open catalog database \"%s\".\n" msgstr "" -#: src/lib/parse_conf.c:483 +#: src/dird/ua_cmds.c:2102 #, c-format -msgid "Attempt to redefine resource \"%s\" referenced on line %d : %s\n" +msgid "Using Catalog \"%s\"\n" msgstr "" -#: src/lib/parse_conf.c:519 -#, c-format -msgid "Too many %s directives. Max. is %d. line %d: %s\n" +#: src/dird/backup.c:94 +msgid "No Storage specification found in Job or Pool.\n" msgstr "" -#: src/lib/parse_conf.c:530 +#: src/dird/backup.c:254 #, c-format -msgid "Could not find config Resource \"%s\" referenced on line %d : %s\n" +msgid "Using BaseJobId(s): %s\n" msgstr "" -#: src/lib/parse_conf.c:593 -#, c-format -msgid "Missing config Resource \"%s\" referenced on line %d : %s\n" +#: src/dird/backup.c:264 +msgid "Cannot find previous jobids.\n" msgstr "" -#: src/lib/parse_conf.c:665 -#, c-format -msgid "expected a size number, got: %s" +#: src/dird/backup.c:278 +msgid "Sending Accurate information to the FD.\n" msgstr "" -#: src/lib/parse_conf.c:670 +#: src/dird/backup.c:435 #, c-format -msgid "expected a speed number, got: %s" +msgid "Start Backup JobId %s, Job=%s\n" msgstr "" -#: src/lib/parse_conf.c:681 +#: src/dird/backup.c:640 #, c-format -msgid "expected a %s, got: %s" +msgid "Unexpected Client Job message: %s\n" msgstr "" -#: src/lib/parse_conf.c:682 -msgid "size" +#: src/dird/backup.c:653 +#, c-format +msgid "Network error with FD during %s: ERR=%s\n" msgstr "" -#: src/lib/parse_conf.c:682 -msgid "speed" +#: src/dird/backup.c:687 +msgid "No Job status returned from FD.\n" msgstr "" -#: src/lib/parse_conf.c:803 +#: src/dird/backup.c:847 #, c-format -msgid "Expected a Tape Label keyword, got: %s" +msgid " Base files/Used files: %lld/%lld (%.2f%%)\n" msgstr "" -#: src/lib/parse_conf.c:886 +#: src/dird/backup.c:858 #, c-format -msgid "Unable to initialize resource lock. ERR=%s\n" +msgid "" +"%s %s %s (%s):\n" +" Build OS: %s %s %s\n" +" JobId: %d\n" +" Job: %s\n" +" Backup Level: %s%s\n" +" Client: \"%s\" %s\n" +" FileSet: \"%s\" %s\n" +" Pool: \"%s\" (From %s)\n" +" Catalog: \"%s\" (From %s)\n" +" Storage: \"%s\" (From %s)\n" +" Scheduled time: %s\n" +" Start time: %s\n" +" End time: %s\n" +" Elapsed time: %s\n" +" Priority: %d\n" +" FD Files Written: %s\n" +" SD Files Written: %s\n" +" FD Bytes Written: %s (%sB)\n" +" SD Bytes Written: %s (%sB)\n" +" Rate: %.1f KB/s\n" +" Software Compression: %s\n" +"%s VSS: %s\n" +" Encryption: %s\n" +" Accurate: %s\n" +" Volume name(s): %s\n" +" Volume Session Id: %d\n" +" Volume Session Time: %d\n" +" Last Volume Bytes: %s\n" +" Non-fatal FD errors: %d\n" +" SD Errors: %d\n" +" FD termination status: %s\n" +" SD termination status: %s\n" +" Termination: %s\n" +"\n" msgstr "" -#: src/lib/parse_conf.c:894 -msgid "Config filename too long.\n" +#: src/dird/backup.c:959 +#, c-format +msgid "Could not get Job Volume Parameters to update Bootstrap file. ERR=%s\n" msgstr "" -#: src/lib/parse_conf.c:917 +#: src/dird/backup.c:995 #, c-format -msgid "Cannot open config file \"%s\": %s\n" +msgid "" +"Could not open WriteBootstrap file:\n" +"%s: ERR=%s\n" msgstr "" -#: src/lib/parse_conf.c:934 -msgid "" -"Currently we cannot handle UTF-16 source files. Please convert the conf file " -"to UTF-8\n" +#: src/dird/ua_tree.c:62 +msgid "add dir/file to be restored recursively, wildcards allowed" msgstr "" -#: src/lib/parse_conf.c:938 -#, c-format -msgid "Expected a Resource name identifier, got: %s" +#: src/dird/ua_tree.c:63 +msgid "change current directory" msgstr "" -#: src/lib/parse_conf.c:954 -#, c-format -msgid "expected resource name, got: %s" +#: src/dird/ua_tree.c:64 +msgid "count marked files in and below the cd" msgstr "" -#: src/lib/parse_conf.c:965 -#, c-format -msgid "not in resource definition: %s" +#: src/dird/ua_tree.c:65 +msgid "delete dir/file to be restored recursively in dir" msgstr "" -#: src/lib/parse_conf.c:990 -#, c-format -msgid "" -"Keyword \"%s\" not permitted in this resource.\n" -"Perhaps you left the trailing brace off of the previous resource." +#: src/dird/ua_tree.c:66 src/dird/ua_tree.c:67 +msgid "long list current directory, wildcards allowed" msgstr "" -#: src/lib/parse_conf.c:1001 -msgid "Name not specified for resource" +#: src/dird/ua_tree.c:68 +msgid "leave file selection mode" msgstr "" -#: src/lib/parse_conf.c:1011 -#, c-format -msgid "unexpected token %d %s in resource definition" +#: src/dird/ua_tree.c:69 +msgid "estimate restore size" msgstr "" -#: src/lib/parse_conf.c:1017 -#, c-format -msgid "Unknown parser state %d\n" +#: src/dird/ua_tree.c:70 +msgid "same as done command" msgstr "" -#: src/lib/parse_conf.c:1022 -msgid "End of conf file reached with unclosed resource." +#: src/dird/ua_tree.c:71 +msgid "find files, wildcards allowed" msgstr "" -#: src/lib/mem_pool.c:112 -#, c-format -msgid "MemPool index %d larger than max %d\n" +#: src/dird/ua_tree.c:72 src/dird/ua_tree.c:85 src/dird/ua_tree.c:86 +msgid "print help" msgstr "" -#: src/lib/mem_pool.c:130 src/lib/mem_pool.c:150 src/lib/mem_pool.c:186 -#: src/lib/mem_pool.c:257 src/lib/mem_pool.c:277 src/lib/mem_pool.c:312 -#: src/lib/mem_pool.c:623 -#, c-format -msgid "Out of memory requesting %d bytes\n" +#: src/dird/ua_tree.c:73 src/dird/ua_tree.c:74 +msgid "list current directory, wildcards allowed" msgstr "" -#: src/lib/mem_pool.c:167 -msgid "obuf is NULL\n" +#: src/dird/ua_tree.c:75 +msgid "list subdir in current directory, wildcards allowed" msgstr "" -#: src/lib/berrno.c:63 -msgid "Child exited normally." +#: src/dird/ua_tree.c:76 +msgid "list the marked files in and below the cd" msgstr "" -#: src/lib/berrno.c:70 -msgid "Unknown error during program execvp" +#: src/dird/ua_tree.c:77 +msgid "list the marked files in" msgstr "" -#: src/lib/berrno.c:73 -#, c-format -msgid "Child exited with code %d" +#: src/dird/ua_tree.c:78 +msgid "mark dir/file to be restored recursively, wildcards allowed" msgstr "" -#: src/lib/berrno.c:81 -#, c-format -msgid "Child died from signal %d: %s" +#: src/dird/ua_tree.c:79 +msgid "mark directory name to be restored (no files)" msgstr "" -#: src/lib/berrno.c:87 -msgid "Invalid errno. No error message possible." +#: src/dird/ua_tree.c:80 src/dird/ua_tree.c:81 +msgid "print current working directory" msgstr "" -#: src/lib/bnet.c:134 -#, c-format -msgid "Attr spool write error. ERR=%s\n" +#: src/dird/ua_tree.c:82 +msgid "unmark dir/file to be restored recursively in dir" msgstr "" -#: src/lib/bnet.c:279 src/lib/bnet.c:320 -msgid "TLS connection initialization failed.\n" +#: src/dird/ua_tree.c:83 +msgid "unmark directory name only no recursion" msgstr "" -#: src/lib/bnet.c:287 -msgid "TLS Negotiation failed.\n" +#: src/dird/ua_tree.c:84 +msgid "quit and do not do restore" msgstr "" -#: src/lib/bnet.c:293 src/lib/bnet.c:335 +#: src/dird/ua_tree.c:106 msgid "" -"TLS certificate verification failed. Peer certificate did not match a " -"required commonName\n" +"\n" +"You are now entering file selection mode where you add (mark) and\n" +"remove (unmark) files to be restored. No files are initially added, unless\n" +"you used the \"all\" keyword on the command line.\n" +"Enter \"done\" to leave this mode.\n" +"\n" msgstr "" -#: src/lib/bnet.c:342 +#: src/dird/ua_tree.c:117 src/dird/ua_tree.c:847 #, c-format -msgid "" -"TLS host certificate verification failed. Host name \"%s\" did not match " -"presented certificate\n" +msgid "cwd is: %s\n" msgstr "" -#: src/lib/bnet.c:359 -msgid "TLS enabled but not configured.\n" +#: src/dird/ua_tree.c:126 src/dird/ua_tree.c:145 +#, c-format +msgid "Invalid command \"%s\". Enter \"done\" to exit.\n" msgstr "" -#: src/lib/bnet.c:365 -msgid "TLS enable but not configured.\n" +#: src/dird/ua_tree.c:217 +#, c-format +msgid "" +"Something is wrong with the Delta sequence of %s, skiping new parts. Current " +"sequence is %d\n" msgstr "" -#: src/lib/bnet.c:481 -msgid "No problem." +#: src/dird/ua_tree.c:389 src/dird/ua_tree.c:401 src/dird/ua_tree.c:418 +msgid "No files marked.\n" msgstr "" -#: src/lib/bnet.c:484 -msgid "Authoritative answer for host not found." +#: src/dird/ua_tree.c:403 +msgid "1 file marked.\n" msgstr "" -#: src/lib/bnet.c:487 -msgid "Non-authoritative for host not found, or ServerFail." +#: src/dird/ua_tree.c:405 +#, c-format +msgid "%s files marked.\n" msgstr "" -#: src/lib/bnet.c:490 -msgid "Non-recoverable errors, FORMERR, REFUSED, or NOTIMP." +#: src/dird/ua_tree.c:433 +msgid "No directories marked.\n" msgstr "" -#: src/lib/bnet.c:493 -msgid "Valid name, no data record of resquested type." +#: src/dird/ua_tree.c:435 +msgid "1 directory marked.\n" msgstr "" -#: src/lib/bnet.c:496 -msgid "Unknown error." +#: src/dird/ua_tree.c:437 +#, c-format +msgid "%s directories marked.\n" msgstr "" -#: src/lib/bnet.c:755 +#: src/dird/ua_tree.c:458 #, c-format -msgid "Unknown sig %d" +msgid "%s total files/dirs. %s marked to be restored.\n" msgstr "" -#: src/lib/signal.c:67 -msgid "Invalid signal number" +#: src/dird/ua_tree.c:469 +msgid "No file specification given.\n" msgstr "" -#: src/lib/signal.c:152 src/lib/signal.c:154 +#: src/dird/ua_tree.c:690 #, c-format -msgid "Bacula interrupted by signal %d: %s\n" +msgid "Node %s has no children.\n" msgstr "" -#: src/lib/signal.c:167 +#: src/dird/ua_tree.c:783 #, c-format -msgid "Kaboom! %s, %s got signal %d - %s. Attempting traceback.\n" +msgid "%d total files; %d marked to be restored; %s bytes.\n" msgstr "" -#: src/lib/signal.c:169 -#, c-format -msgid "Kaboom! exepath=%s\n" +#: src/dird/ua_tree.c:817 +msgid "Too few or too many arguments. Try using double quotes.\n" msgstr "" -#: src/lib/signal.c:210 -#, c-format -msgid "Fork error: ERR=%s\n" +#: src/dird/ua_tree.c:830 +msgid "Invalid path given.\n" msgstr "" -#: src/lib/signal.c:218 -#, c-format -msgid "Calling: %s %s %s %s\n" +#: src/dird/ua_tree.c:866 src/dird/ua_tree.c:878 +msgid "No files unmarked.\n" msgstr "" -#: src/lib/signal.c:222 -#, c-format -msgid "execv: %s failed: ERR=%s\n" +#: src/dird/ua_tree.c:880 +msgid "1 file unmarked.\n" msgstr "" -#: src/lib/signal.c:244 +#: src/dird/ua_tree.c:883 #, c-format -msgid "It looks like the traceback worked...\n" +msgid "%s files unmarked.\n" msgstr "" -#: src/lib/signal.c:246 -#, c-format -msgid "The btraceback call returned %d\n" +#: src/dird/ua_tree.c:894 src/dird/ua_tree.c:911 +msgid "No directories unmarked.\n" msgstr "" -#: src/lib/signal.c:306 -#, c-format -msgid "BA_NSIG too small (%d) should be (%d)\n" +#: src/dird/ua_tree.c:913 +msgid "1 directory unmarked.\n" msgstr "" -#: src/lib/signal.c:312 -msgid "UNKNOWN SIGNAL" +#: src/dird/ua_tree.c:915 +#, c-format +msgid "%d directories unmarked.\n" msgstr "" -#: src/lib/signal.c:313 -msgid "Hangup" +#: src/dird/inc_conf.c:299 +#, c-format +msgid "Expected a strip path positive integer, got:%s:" msgstr "" -#: src/lib/signal.c:314 -msgid "Interrupt" +#: src/dird/inc_conf.c:319 +#, c-format +msgid "Expected a FileSet option keyword, got:%s:" msgstr "" -#: src/lib/signal.c:315 -msgid "Quit" +#: src/dird/inc_conf.c:352 +msgid "Old style Include/Exclude not supported\n" msgstr "" -#: src/lib/signal.c:316 -msgid "Illegal instruction" +#: src/dird/inc_conf.c:380 src/dird/inc_conf.c:726 src/dird/dird_conf.c:2044 +#, c-format +msgid "Expecting keyword, got: %s\n" msgstr "" -#: src/lib/signal.c:317 -msgid "Trace/Breakpoint trap" +#: src/dird/inc_conf.c:398 src/dird/inc_conf.c:741 src/dird/dird_conf.c:2061 +#, c-format +msgid "Keyword %s not permitted in this resource" msgstr "" -#: src/lib/signal.c:318 -msgid "Abort" +#: src/dird/inc_conf.c:451 +#, c-format +msgid "Regex compile error. ERR=%s\n" msgstr "" -#: src/lib/signal.c:320 -msgid "EMT instruction (Emulation Trap)" +#: src/dird/inc_conf.c:472 +#, c-format +msgid "Expected a regex string, got: %s\n" msgstr "" -#: src/lib/signal.c:323 -msgid "IOT trap" +#: src/dird/inc_conf.c:546 +#, c-format +msgid "Expected a wild-card string, got: %s\n" msgstr "" -#: src/lib/signal.c:325 -msgid "BUS error" +#: src/dird/inc_conf.c:569 +#, c-format +msgid "Expected an fstype string, got: %s\n" msgstr "" -#: src/lib/signal.c:326 -msgid "Floating-point exception" +#: src/dird/inc_conf.c:580 +msgid "ExcludeDirContaining directive not permitted in Exclude.\n" msgstr "" -#: src/lib/signal.c:327 -msgid "Kill, unblockable" +#: src/dird/inc_conf.c:607 +#, c-format +msgid "Expected an drivetype string, got: %s\n" msgstr "" -#: src/lib/signal.c:328 -msgid "User-defined signal 1" +#: src/dird/inc_conf.c:631 src/dird/inc_conf.c:674 +#, c-format +msgid "Backslash found. Use forward slashes or quote the string.: %s\n" msgstr "" -#: src/lib/signal.c:329 -msgid "Segmentation violation" +#: src/dird/inc_conf.c:646 src/dird/inc_conf.c:689 +#, c-format +msgid "Expected a filename, got: %s" msgstr "" -#: src/lib/signal.c:330 -msgid "User-defined signal 2" +#: src/dird/inc_conf.c:663 +msgid "Plugin directive not permitted in Exclude\n" msgstr "" -#: src/lib/signal.c:331 -msgid "Broken pipe" +#: src/dird/inc_conf.c:706 +msgid "Options section not permitted in Exclude\n" msgstr "" -#: src/lib/signal.c:332 -msgid "Alarm clock" +#: src/dird/inc_conf.c:711 src/dird/dird_conf.c:2030 +#, c-format +msgid "Expecting open brace. Got %s" msgstr "" -#: src/lib/signal.c:333 -msgid "Termination" +#: src/dird/inc_conf.c:766 +#, c-format +msgid "Expected a FileSet keyword, got: %s" msgstr "" -#: src/lib/signal.c:335 -msgid "Stack fault" +#: src/dird/recycle.c:57 +#, c-format +msgid "Recycled volume \"%s\"\n" msgstr "" -#: src/lib/signal.c:337 -msgid "Child status has changed" +#: src/dird/ua_server.c:56 +#, c-format +msgid "Cannot create UA thread: %s\n" msgstr "" -#: src/lib/signal.c:338 -msgid "Continue" +#: src/dird/ua_server.c:146 +msgid "You have messages.\n" msgstr "" -#: src/lib/signal.c:339 -msgid "Stop, unblockable" -msgstr "" +#: src/dird/newvol.c:77 +#, c-format +msgid "Illegal character in Volume name \"%s\"\n" +msgstr "Заборонені символи у назві Тому \"%s\"\n" -#: src/lib/signal.c:340 -msgid "Keyboard stop" -msgstr "" +#: src/dird/newvol.c:90 +#, fuzzy, c-format +msgid "Created new Volume=\"%s\", Pool=\"%s\", MediaType=\"%s\" in catalog.\n" +msgstr "У картотеці створено новий Том \"%s\".\n" -#: src/lib/signal.c:341 -msgid "Background read from tty" -msgstr "" +#: src/dird/newvol.c:119 +#, c-format +msgid "SQL failed, but ignored. ERR=%s\n" +msgstr "Проігноровано помилку SQL. ERR=%s\n" -#: src/lib/signal.c:342 -msgid "Background write to tty" -msgstr "" +#: src/dird/newvol.c:129 +#, c-format +msgid "Wanted to create Volume \"%s\", but it already exists. Trying again.\n" +msgstr "Спроба створити вже існуючий Том \"%s\". Спробуйте ще раз.\n" -#: src/lib/signal.c:343 -msgid "Urgent condition on socket" +#: src/dird/newvol.c:138 +msgid "Too many failures. Giving up creating Volume name.\n" +msgstr "Занадто багато провалів. Відмова у створенні імені Тому.\n" + +#: src/dird/msgchan.c:66 +#, c-format +msgid "Connecting to Storage daemon %s at %s:%d ...\n" msgstr "" -#: src/lib/signal.c:344 -msgid "CPU limit exceeded" +#: src/dird/msgchan.c:230 +#, c-format +msgid "Storage daemon rejected Job command: %s\n" msgstr "" -#: src/lib/signal.c:345 -msgid "File size limit exceeded" +#: src/dird/msgchan.c:238 +#, c-format +msgid " " msgstr "" -#: src/lib/bsys.c:608 +#: src/dird/dird_conf.c:584 #, c-format -msgid "Could not create state file. %s ERR=%s\n" +msgid "Console: name=%s SSL=%d\n" msgstr "" -#: src/lib/bsys.c:627 +#: src/dird/dird_conf.c:589 #, c-format -msgid "Write final hdr error: ERR=%s\n" +msgid "Counter: name=%s min=%d max=%d cur=%d wrapcntr=%s\n" msgstr "" -#: src/lib/runscript.c:236 +#: src/dird/dird_conf.c:594 #, c-format -msgid "%s: run %s \"%s\"\n" +msgid "Counter: name=%s min=%d max=%d\n" msgstr "" -#: src/lib/runscript.c:245 +#: src/dird/dird_conf.c:608 #, c-format -msgid "Runscript: %s could not execute. ERR=%s\n" +msgid "Client: name=%s address=%s FDport=%d MaxJobs=%u\n" msgstr "" -#: src/lib/runscript.c:254 +#: src/dird/dird_conf.c:611 #, c-format -msgid "%s: %s\n" +msgid " JobRetention=%s FileRetention=%s AutoPrune=%d\n" msgstr "" -#: src/lib/runscript.c:259 +#: src/dird/dird_conf.c:619 src/dird/dird_conf.c:691 #, c-format -msgid "Runscript: %s returned non-zero status=%d. ERR=%s\n" +msgid " MaximumBandwidth=%lld\n" msgstr "" -#: src/lib/lex.c:91 src/wx-console/console_thread.cpp:212 -#, c-format -msgid "Problem probably begins at line %d.\n" -msgstr "" - -#: src/lib/lex.c:96 src/wx-console/console_thread.cpp:217 +#: src/dird/dird_conf.c:631 #, c-format msgid "" -"Config error: %s\n" -" : line %d, col %d of file %s\n" -"%s\n" -"%s" +"Device: name=%s ok=%d num_writers=%d max_writers=%d\n" +" reserved=%d open=%d append=%d read=%d labeled=%d offline=%d autochgr=" +"%d\n" +" poolid=%s volname=%s MediaType=%s\n" msgstr "" -#: src/lib/lex.c:100 +#: src/dird/dird_conf.c:645 #, c-format -msgid "Config error: %s\n" -msgstr "" - -#: src/lib/lex.c:129 -msgid "Close of NULL file\n" +msgid "" +"Storage: name=%s address=%s SDport=%d MaxJobs=%u\n" +" DeviceName=%s MediaType=%s StorageId=%s\n" msgstr "" -#: src/lib/lex.c:226 +#: src/dird/dird_conf.c:661 +#, c-format msgid "" -"get_char: called after EOF. You may have a open double quote without the " -"closing double quote.\n" +"Catalog: name=%s address=%s DBport=%d db_name=%s\n" +" db_driver=%s db_user=%s MutliDBConn=%d\n" msgstr "" -#: src/lib/lex.c:268 +#: src/dird/dird_conf.c:674 #, c-format -msgid "Config token too long, file: %s, line %d, begins at line %d\n" +msgid "%s: name=%s JobType=%d level=%s Priority=%d Enabled=%d\n" msgstr "" -#: src/lib/lex.c:292 -msgid "none" +#: src/dird/dird_conf.c:675 +msgid "JobDefs" msgstr "" -#: src/lib/lex.c:293 -msgid "comment" +#: src/dird/dird_conf.c:679 +#, c-format +msgid "" +" MaxJobs=%u Resched=%d Times=%d Interval=%s Spool=%d WritePartAfterJob=" +"%d\n" msgstr "" -#: src/lib/lex.c:294 -msgid "number" +#: src/dird/dird_conf.c:685 +#, c-format +msgid " SpoolSize=%s\n" msgstr "" -#: src/lib/lex.c:295 -msgid "ip_addr" +#: src/dird/dird_conf.c:688 +#, c-format +msgid " Accurate=%d\n" msgstr "" -#: src/lib/lex.c:296 -msgid "identifier" +#: src/dird/dird_conf.c:695 +#, c-format +msgid " SelectionType=%d\n" msgstr "" -#: src/lib/lex.c:297 -msgid "string" +#: src/dird/dird_conf.c:710 +#, c-format +msgid " --> Where=%s\n" msgstr "" -#: src/lib/lex.c:298 -msgid "quoted_string" +#: src/dird/dird_conf.c:713 +#, c-format +msgid " --> RegexWhere=%s\n" msgstr "" -#: src/lib/lex.c:299 -msgid "include" +#: src/dird/dird_conf.c:716 +#, c-format +msgid " --> Bootstrap=%s\n" msgstr "" -#: src/lib/lex.c:300 -msgid "include_quoted_string" +#: src/dird/dird_conf.c:719 +#, c-format +msgid " --> WriteBootstrap=%s\n" msgstr "" -#: src/lib/lex.c:301 -msgid "UTF-8 Byte Order Mark" +#: src/dird/dird_conf.c:722 +#, c-format +msgid " --> PluginOptions=%s\n" msgstr "" -#: src/lib/lex.c:302 -msgid "UTF-16le Byte Order Mark" +#: src/dird/dird_conf.c:725 +#, c-format +msgid " --> MaxRunTime=%u\n" msgstr "" -#: src/lib/lex.c:340 src/lib/lex.c:346 src/lib/lex.c:357 src/lib/lex.c:363 +#: src/dird/dird_conf.c:728 #, c-format -msgid "expected a positive integer number, got: %s" +msgid " --> MaxWaitTime=%u\n" msgstr "" -#: src/lib/lex.c:479 -msgid "" -"This config file appears to be in an unsupported Unicode format (UTF-16be). " -"Please resave as UTF-8\n" +#: src/dird/dird_conf.c:731 +#, c-format +msgid " --> MaxStartDelay=%u\n" msgstr "" -#: src/lib/lex.c:625 src/lib/lex.c:653 +#: src/dird/dird_conf.c:734 #, c-format -msgid "Cannot open included config file %s: %s\n" +msgid " --> MaxRunSchedTime=%u\n" msgstr "" -#: src/lib/lex.c:712 src/lib/lex.c:769 +#: src/dird/dird_conf.c:746 #, c-format -msgid "expected an integer or a range, got %s: %s" +msgid " --> Base %s\n" msgstr "" -#: src/lib/lex.c:726 src/lib/lex.c:734 src/lib/lex.c:745 src/lib/lex.c:753 +#: src/dird/dird_conf.c:784 #, c-format -msgid "expected an integer number, got %s: %s" +msgid " --> Run=%s\n" msgstr "" -#: src/lib/lex.c:783 +#: src/dird/dird_conf.c:788 #, c-format -msgid "expected a name, got %s: %s" +msgid " --> SelectionPattern=%s\n" msgstr "" -#: src/lib/lex.c:787 +#: src/dird/dird_conf.c:802 #, c-format -msgid "name %s length %d too long, max is %d\n" +msgid "FileSet: name=%s\n" msgstr "" -#: src/lib/lex.c:795 +#: src/dird/dird_conf.c:896 src/dird/dird_conf.c:981 #, c-format -msgid "expected a string, got %s: %s" +msgid "Schedule: name=%s\n" msgstr "" -#: src/lib/var.c:2669 -msgid "everything ok" +#: src/dird/dird_conf.c:901 +#, c-format +msgid " --> Run Level=%s\n" msgstr "" -#: src/lib/var.c:2670 -msgid "incomplete named character" +#: src/dird/dird_conf.c:903 +#, c-format +msgid " MaxRunSchedTime=%u\n" msgstr "" -#: src/lib/var.c:2671 -msgid "incomplete hexadecimal value" +#: src/dird/dird_conf.c:906 +#, c-format +msgid " Priority=%u\n" msgstr "" -#: src/lib/var.c:2672 -msgid "invalid hexadecimal value" +#: src/dird/dird_conf.c:908 +msgid " hour=" msgstr "" -#: src/lib/var.c:2673 -msgid "octal value too large" +#: src/dird/dird_conf.c:917 +msgid " mday=" msgstr "" -#: src/lib/var.c:2674 -msgid "invalid octal value" +#: src/dird/dird_conf.c:926 +msgid " month=" msgstr "" -#: src/lib/var.c:2675 -msgid "incomplete octal value" +#: src/dird/dird_conf.c:935 +msgid " wday=" msgstr "" -#: src/lib/var.c:2676 -msgid "incomplete grouped hexadecimal value" +#: src/dird/dird_conf.c:944 +msgid " wom=" msgstr "" -#: src/lib/var.c:2677 -msgid "incorrect character class specification" +#: src/dird/dird_conf.c:953 +msgid " woy=" msgstr "" -#: src/lib/var.c:2678 -msgid "invalid expansion configuration" +#: src/dird/dird_conf.c:962 +#, c-format +msgid " mins=%d\n" msgstr "" -#: src/lib/var.c:2679 -msgid "out of memory" +#: src/dird/dird_conf.c:964 src/dird/dird_conf.c:968 src/dird/dird_conf.c:972 +msgid " --> " msgstr "" -#: src/lib/var.c:2680 -msgid "incomplete variable specification" +#: src/dird/dird_conf.c:989 +#, c-format +msgid "Pool: name=%s PoolType=%s\n" msgstr "" -#: src/lib/var.c:2681 -msgid "undefined variable" +#: src/dird/dird_conf.c:991 +#, c-format +msgid " use_cat=%d use_once=%d cat_files=%d\n" msgstr "" -#: src/lib/var.c:2682 -msgid "input is neither text nor variable" +#: src/dird/dird_conf.c:994 +#, c-format +msgid " max_vols=%d auto_prune=%d VolRetention=%s\n" msgstr "" -#: src/lib/var.c:2683 -msgid "unknown command character in variable" +#: src/dird/dird_conf.c:997 +#, c-format +msgid " VolUse=%s recycle=%d LabelFormat=%s\n" msgstr "" -#: src/lib/var.c:2684 -msgid "malformatted search and replace operation" +#: src/dird/dird_conf.c:1001 +#, c-format +msgid " CleaningPrefix=%s LabelType=%d\n" msgstr "" -#: src/lib/var.c:2685 -msgid "unknown flag in search and replace operation" +#: src/dird/dird_conf.c:1003 +#, c-format +msgid " RecyleOldest=%d PurgeOldest=%d ActionOnPurge=%d\n" msgstr "" -#: src/lib/var.c:2686 -msgid "invalid regex in search and replace operation" +#: src/dird/dird_conf.c:1007 +#, c-format +msgid " MaxVolJobs=%d MaxVolFiles=%d MaxVolBytes=%s\n" msgstr "" -#: src/lib/var.c:2687 -msgid "missing parameter in command" +#: src/dird/dird_conf.c:1011 +#, c-format +msgid " MigTime=%s MigHiBytes=%s MigLoBytes=%s\n" msgstr "" -#: src/lib/var.c:2688 -msgid "empty search string in search and replace operation" +#: src/dird/dird_conf.c:1015 +#, c-format +msgid " JobRetention=%s FileRetention=%s\n" msgstr "" -#: src/lib/var.c:2689 -msgid "start offset missing in cut operation" +#: src/dird/dird_conf.c:1019 +#, c-format +msgid " NextPool=%s\n" msgstr "" -#: src/lib/var.c:2690 -msgid "offsets in cut operation delimited by unknown character" +#: src/dird/dird_conf.c:1022 +#, c-format +msgid " RecyclePool=%s\n" msgstr "" -#: src/lib/var.c:2691 -msgid "range out of bounds in cut operation" +#: src/dird/dird_conf.c:1025 +#, c-format +msgid " ScratchPool=%s\n" msgstr "" -#: src/lib/var.c:2692 -msgid "offset out of bounds in cut operation" +#: src/dird/dird_conf.c:1028 +#, c-format +msgid " Catalog=%s\n" msgstr "" -#: src/lib/var.c:2693 -msgid "logic error in cut operation" +#: src/dird/dird_conf.c:1048 +#, c-format +msgid "Messages: name=%s\n" msgstr "" -#: src/lib/var.c:2694 -msgid "malformatted transpose operation" +#: src/dird/dird_conf.c:1050 +#, c-format +msgid " mailcmd=%s\n" msgstr "" -#: src/lib/var.c:2695 -msgid "source and target class mismatch in transpose operation" +#: src/dird/dird_conf.c:1052 +#, c-format +msgid " opcmd=%s\n" msgstr "" -#: src/lib/var.c:2696 -msgid "empty character class in transpose operation" -msgstr "" +#: src/dird/dird_conf.c:1056 src/qt-console/tray-monitor/tray_conf.cpp:187 +#, c-format +msgid "Unknown resource type %d in dump_resource.\n" +msgstr "Невідомий тип ресурсу %d у dump_resource.\n" -#: src/lib/var.c:2697 -msgid "incorrect character class in transpose operation" -msgstr "" +#: src/dird/dird_conf.c:1393 src/qt-console/tray-monitor/tray_conf.cpp:245 +#, c-format +msgid "Unknown resource type %d in free_resource.\n" +msgstr "Невідомий тип ресурсу %d у free_resource.\n" -#: src/lib/var.c:2698 -msgid "malformatted padding operation" +#: src/dird/dird_conf.c:1471 +#, c-format +msgid "Cannot find Pool resource %s\n" msgstr "" -#: src/lib/var.c:2699 -msgid "width parameter missing in padding operation" +#: src/dird/dird_conf.c:1482 +#, c-format +msgid "Cannot find Console resource %s\n" msgstr "" -#: src/lib/var.c:2700 -msgid "fill string missing in padding operation" +#: src/dird/dird_conf.c:1504 +#, c-format +msgid "Cannot find Job resource %s\n" msgstr "" -#: src/lib/var.c:2701 -msgid "unknown quoted pair in search and replace operation" +#: src/dird/dird_conf.c:1555 +#, c-format +msgid "Cannot find Counter resource %s\n" msgstr "" -#: src/lib/var.c:2702 -msgid "sub-matching reference out of range" +#: src/dird/dird_conf.c:1563 src/filed/filed_conf.c:465 +#, c-format +msgid "Cannot find Client resource %s\n" msgstr "" -#: src/lib/var.c:2703 -msgid "invalid argument" +#: src/dird/dird_conf.c:1576 +#, c-format +msgid "Cannot find Schedule resource %s\n" msgstr "" -#: src/lib/var.c:2704 -msgid "incomplete quoted pair" -msgstr "" +#: src/dird/dird_conf.c:1581 src/dird/dird_conf.c:1641 +#: src/qt-console/tray-monitor/tray_conf.cpp:302 +#: src/qt-console/tray-monitor/tray_conf.cpp:340 +#, c-format +msgid "Unknown resource type %d in save_resource.\n" +msgstr "Невідомий тип ресурсу %d у save_resource.\n" -#: src/lib/var.c:2705 -msgid "lookup function does not support variable arrays" +#: src/dird/dird_conf.c:1656 +#, c-format +msgid "Name item is required in %s resource, but not found.\n" msgstr "" -#: src/lib/var.c:2706 -msgid "index of array variable contains an invalid character" +#: src/dird/dird_conf.c:1669 +#, c-format +msgid "Inserting %s res: %s index=%d pass=%d\n" msgstr "" -#: src/lib/var.c:2707 -msgid "index of array variable is incomplete" +#: src/dird/dird_conf.c:1682 +#, c-format +msgid "Expected one of: %s, got: %s" msgstr "" -#: src/lib/var.c:2708 -msgid "bracket expression in array variable's index not closed" +#: src/dird/dird_conf.c:1754 +#, c-format +msgid "Expected a Migration Job Type keyword, got: %s" msgstr "" -#: src/lib/var.c:2709 -msgid "division by zero error in index specification" +#: src/dird/dird_conf.c:1780 +#, c-format +msgid "Expected a Job Type keyword, got: %s" msgstr "" -#: src/lib/var.c:2710 -msgid "unterminated loop construct" +#: src/dird/dird_conf.c:1804 +#, c-format +msgid "Expected a Job Level keyword, got: %s" msgstr "" -#: src/lib/var.c:2711 -msgid "invalid character in loop limits" +#: src/dird/dird_conf.c:1824 +#, c-format +msgid "Expected a Restore replacement option, got: %s" msgstr "" -#: src/lib/var.c:2712 -msgid "malformed operation argument list" +#: src/dird/ua_query.c:61 src/findlib/file_create.c:265 +#: src/findlib/file_create.c:353 +#, c-format +msgid "Could not open %s: ERR=%s\n" +msgstr "Не вдалось відкрити%s: ERR=%s\n" + +#: src/dird/ua_query.c:66 +msgid "Available queries:\n" msgstr "" -#: src/lib/var.c:2713 -msgid "undefined operation" +#: src/dird/ua_query.c:73 +msgid "Choose a query" msgstr "" -#: src/lib/var.c:2714 -msgid "formatting failure" +#: src/dird/ua_query.c:87 +msgid "Could not find query.\n" msgstr "" -#: src/lib/var.c:2723 -msgid "unknown error" -msgstr "" - -#: src/lib/address_conf.c:62 -#, c-format -msgid "Only ipv4 and ipv6 are supported (%d)\n" +#: src/dird/ua_query.c:105 +msgid "Too many prompts in query, max is 9.\n" msgstr "" -#: src/lib/address_conf.c:66 +#: src/dird/ua_query.c:208 #, c-format -msgid "Only ipv4 is supported (%d)\n" +msgid "Warning prompt %d missing.\n" msgstr "" -#: src/lib/address_conf.c:175 -#, c-format -msgid "It was tried to assign a ipv6 address to a ipv4(%d)\n" +#: src/dird/ua_query.c:253 +msgid "" +"Entering SQL query mode.\n" +"Terminate each query with a semicolon.\n" +"Terminate query mode with a blank line.\n" msgstr "" -#: src/lib/address_conf.c:184 -#, c-format -msgid "It was tried to assign a ipv4 address to a ipv6(%d)\n" +#: src/dird/ua_query.c:256 src/dird/ua_query.c:272 +msgid "Enter SQL query: " msgstr "" -#: src/lib/address_conf.c:263 -#, c-format -msgid "Can't add default address (%s)\n" +#: src/dird/ua_query.c:274 +msgid "Add to SQL query: " msgstr "" -#: src/lib/address_conf.c:292 -msgid "the old style addresses cannot be mixed with new style" +#: src/dird/ua_query.c:277 +msgid "End query mode.\n" msgstr "" -#: src/lib/address_conf.c:313 -#, c-format -msgid "can't resolve service(%s)" +#: src/dird/dird.c:124 +#, fuzzy, c-format +msgid "" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: bacula-dir [-f -s] [-c config_file] [-d debug_level] [config_file]\n" +" -c set configuration file to file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -f run in foreground (for debugging)\n" +" -g groupid\n" +" -m print kaboom output (for debugging)\n" +" -r run now\n" +" -s no signals\n" +" -t test - read configuration and exit\n" +" -u userid\n" +" -v verbose user messages\n" +" -? print this message.\n" +"\n" msgstr "" +"\n" +"Версія: %s (%s) %s %s %s\n" +"\n" +"Використання: bat [-s] [-c config_file] [-d debug_level] [config_file]\n" +" -c set configuration file to file\n" +" -dnn set debug level to nn\n" +" -s без сигналів\n" +" -t перевірка - прочитати конфігурацію і вийти\n" +" -? print this message.\n" +"\n" -#: src/lib/address_conf.c:322 -#, c-format -msgid "can't resolve hostname(%s) %s" +#: src/dird/dird.c:503 +msgid "Too many open reload requests. Request ignored.\n" msgstr "" -#: src/lib/address_conf.c:412 src/lib/address_conf.c:443 -#, c-format -msgid "Expected a block begin { , got: %s" +#: src/dird/dird.c:518 +msgid "Out of reload table entries. Giving up.\n" msgstr "" -#: src/lib/address_conf.c:417 -msgid "Empty addr block is not allowed" +#: src/dird/dird.c:521 +msgid "Resetting previous configuration.\n" msgstr "" -#: src/lib/address_conf.c:421 +#: src/dird/dird.c:585 #, c-format -msgid "Expected a string, got: %s" +msgid "" +"No Director resource defined in %s\n" +"Without that I don't know who I am :-(\n" msgstr "" -#: src/lib/address_conf.c:430 +#: src/dird/dird.c:593 src/filed/filed.c:328 #, c-format -msgid "Expected a string [ip|ipv4|ipv6], got: %s" +msgid "No Messages resource defined in %s\n" msgstr "" -#: src/lib/address_conf.c:434 +#: src/dird/dird.c:598 #, c-format -msgid "Expected a string [ip|ipv4], got: %s" +msgid "Only one Director resource permitted in %s\n" msgstr "" -#: src/lib/address_conf.c:439 src/lib/address_conf.c:469 +#: src/dird/dird.c:655 #, c-format -msgid "Expected a equal =, got: %s" +msgid "No Job records defined in %s\n" msgstr "" -#: src/lib/address_conf.c:450 src/lib/address_conf.c:465 +#: src/dird/dird.c:713 src/dird/dird.c:726 #, c-format -msgid "Expected a identifier [addr|port], got: %s" +msgid "Hey something is wrong. p=0x%lu\n" msgstr "" -#: src/lib/address_conf.c:455 -msgid "Only one port per address block" +#: src/dird/dird.c:787 +#, c-format +msgid "\"%s\" directive in Job \"%s\" resource is required, but not found.\n" msgstr "" -#: src/lib/address_conf.c:461 -msgid "Only one addr per address block" +#: src/dird/dird.c:794 +msgid "Too many items in Job resource\n" msgstr "" -#: src/lib/address_conf.c:477 +#: src/dird/dird.c:798 #, c-format -msgid "Expected a number or a string, got: %s" +msgid "No storage specified in Job \"%s\" nor in Pool.\n" msgstr "" -#: src/lib/address_conf.c:483 src/lib/address_conf.c:516 +#: src/dird/dird.c:822 #, c-format -msgid "Expected an IP number or a hostname, got: %s" +msgid "\"TLS Certificate\" file not defined for Console \"%s\" in %s.\n" msgstr "" -#: src/lib/address_conf.c:489 -msgid "State machine missmatch" +#: src/dird/dird.c:828 +#, c-format +msgid "\"TLS Key\" file not defined for Console \"%s\" in %s.\n" msgstr "" -#: src/lib/address_conf.c:495 src/lib/address_conf.c:507 +#: src/dird/dird.c:835 #, c-format -msgid "Expected a end of block }, got: %s" +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Console \"%s\" in %s. At least one CA certificate store is required when " +"using \"TLS Verify Peer\".\n" msgstr "" -#: src/lib/address_conf.c:501 +#: src/dird/dird.c:852 src/dird/dird.c:892 src/filed/filed.c:391 #, c-format -msgid "Can't add hostname(%s) and port(%s) to addrlist (%s)" +msgid "Failed to initialize TLS context for File daemon \"%s\" in %s.\n" msgstr "" -#: src/lib/address_conf.c:521 src/lib/address_conf.c:535 +#: src/dird/dird.c:875 #, c-format -msgid "can't add port (%s) to (%s)" +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"File daemon \"%s\" in %s.\n" msgstr "" -#: src/lib/address_conf.c:530 +#: src/dird/dird.c:916 #, c-format -msgid "Expected a port number or string, got: %s" +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Storage \"%s\" in %s.\n" msgstr "" -#: src/lib/edit.c:478 -msgid "Empty name not allowed.\n" +#: src/dird/dird.c:971 src/dird/dird.c:973 +#, c-format +msgid "Could not open Catalog \"%s\", database \"%s\".\n" msgstr "" -#: src/lib/edit.c:488 +#: src/dird/dird.c:976 src/tools/cats_test.c:365 #, c-format -msgid "Illegal character \"%c\" in name.\n" +msgid "%s" msgstr "" -#: src/lib/edit.c:495 -msgid "Name too long.\n" -msgstr "" +#: src/dird/dird.c:1055 +#, fuzzy, c-format +msgid "Could not create storage record for %s\n" +msgstr "Не вдалось відновити прапорці для файлу %s: ERR=%s\n" -#: src/findlib/savecwd.c:60 -#, c-format -msgid "Cannot open current directory: ERR=%s\n" -msgstr "Не можливо відкрити поточну теку: ERR=%s\n" +#: src/dird/dird.c:1063 +#, fuzzy, c-format +msgid "Could not update storage record for %s\n" +msgstr "Не вдалось відновити прапорці для файлу %s: ERR=%s\n" -#: src/findlib/savecwd.c:71 -#, c-format -msgid "Cannot get current directory: ERR=%s\n" -msgstr "Не можливо отримати поточну теку: ERR=%s\n" +#: src/dird/ua_purge.c:84 +#, fuzzy +msgid "" +"\n" +"This command can be DANGEROUS!!!\n" +"\n" +"It purges (deletes) all Files from a Job,\n" +"JobId, Client or Volume; or it purges (deletes)\n" +"all Jobs from a Client or Volume without regard\n" +"to retention periods. Normally you should use the\n" +"PRUNE command, which respects retention periods.\n" +msgstr "" +"\n" +"Ця команда НЕБЕЗПЕЧНА!!!\n" +"\n" +"Вона вичистить(знищить) усі Файли із Задачі,\n" +"Номера Задачі, Клієнта або Тома; або вичистить(знищить)\n" +"усі Задачі із Клієнта або Тома не враховуючи\n" +"термінів зберігання. Зазвичай ви повинні використовувати\n" +"команду PRUNE для дотримання термінів зберігання.\n" -#: src/findlib/savecwd.c:95 src/findlib/savecwd.c:106 -#, c-format -msgid "Cannot reset current directory: ERR=%s\n" -msgstr "Не можливо перевстановити поточну теку: ERR=%s\n" +#: src/dird/ua_purge.c:152 +msgid "Choose item to purge" +msgstr "Оберіть те, що Ви хочете вичистити" -#: src/findlib/mkpath.c:137 +#: src/dird/ua_purge.c:199 #, c-format -msgid "Cannot create directory %s: ERR=%s\n" -msgstr "Не можливо створити теку %s: ERR=%s\n" +msgid "Begin purging files for Client \"%s\"\n" +msgstr "Починається чистка файлів Клієнта \"%s\"\n" -#: src/findlib/mkpath.c:141 src/findlib/mkpath.c:202 +#: src/dird/ua_purge.c:208 src/dird/ua_purge.c:258 #, c-format -msgid "%s exists but is not a directory.\n" -msgstr "%s існує, але не є текою.\n" +msgid "No Files found for client %s to purge from %s catalog.\n" +msgstr "" -#: src/findlib/mkpath.c:164 +#: src/dird/ua_purge.c:211 #, c-format -msgid "Cannot change owner and/or group of %s: ERR=%s\n" -msgstr "Не можливо змінити власника та/або групу для %s: ERR=%s\n" +msgid "Files for %d Jobs for client \"%s\" purged from %s catalog.\n" +msgstr "" -#: src/findlib/mkpath.c:169 +#: src/dird/ua_purge.c:249 #, c-format -msgid "Cannot change permissions of %s: ERR=%s\n" -msgstr "Не можливо змінити дозволи для %s: ERR=%s\n" +msgid "Begin purging jobs from Client \"%s\"\n" +msgstr "" -#: src/findlib/mkpath.c:239 +#: src/dird/ua_purge.c:261 #, c-format -msgid "%c: is not a valid drive.\n" -msgstr "%c: не вірний пристрій.\n" - -#: src/findlib/mkpath.c:283 -msgid "Too many subdirectories. Some permissions not reset.\n" -msgstr "Забагато підтек. Деякі обмеження не перевстановлено.\n" +msgid "%d Jobs for client %s purged from %s catalog.\n" +msgstr "" -#: src/findlib/attribs.c:483 +#: src/dird/ua_purge.c:459 #, c-format -msgid "File size of restored file %s not correct. Original %s, restored %s.\n" +msgid "" +"\n" +"Volume \"%s\" has VolStatus \"%s\" and cannot be purged.\n" +"The VolStatus must be: Append, Full, Used, or Error to be purged.\n" msgstr "" -"Не правильний розмір відновленого файлу %s. Оригінальний %s, відновлений " -"%s.\n" -#: src/findlib/attribs.c:509 src/findlib/attribs.c:516 +#: src/dird/ua_purge.c:487 #, c-format -msgid "Unable to set file owner %s: ERR=%s\n" -msgstr "Не можливо встановити власника файлу %s: ERR=%s\n" +msgid "%d File%s on Volume \"%s\" purged from catalog.\n" +msgstr "" -#: src/findlib/attribs.c:522 +#: src/dird/ua_purge.c:537 #, c-format -msgid "Unable to set file modes %s: ERR=%s\n" -msgstr "Не можливо встановити параметри файлу %s: ERR=%s\n" +msgid "" +"There are no more Jobs associated with Volume \"%s\". Marking it purged.\n" +msgstr "" -#: src/findlib/attribs.c:532 -#, c-format -msgid "Unable to set file times %s: ERR=%s\n" -msgstr "Не можливо встановити час файлу %s: ERR=%s\n" +#: src/dird/ua_purge.c:606 +#, fuzzy +msgid "Can't update volume size in the catalog\n" +msgstr "У картотеці створено новий Том \"%s\".\n" -#: src/findlib/attribs.c:546 +#: src/dird/ua_purge.c:608 #, c-format -msgid "Unable to set file flags %s: ERR=%s\n" -msgstr "Не можливо встановити прапорці файлу %s: ERR=%s\n" +msgid "The volume \"%s\" has been truncated\n" +msgstr "" -#: src/findlib/attribs.c:799 +#: src/dird/ua_purge.c:610 #, c-format -msgid "Error in %s file %s: ERR=%s\n" -msgstr "Помилка у %s файл %s: ERR=%s\n" +msgid "Unable to truncate volume \"%s\"\n" +msgstr "" -#: src/findlib/attribs.c:816 +#: src/dird/ua_purge.c:703 #, c-format -msgid "Error in %s: ERR=%s\n" -msgstr "Помилка у %s: ERR=%s\n" - -#: src/findlib/enable_priv.c:92 -msgid "AdjustTokenPrivileges set " +msgid "No Volumes found to perform %s action.\n" msgstr "" -#: src/findlib/create_file.c:124 +#: src/dird/ua_purge.c:771 #, c-format -msgid "File skipped. Not newer: %s\n" -msgstr "Файл пропущено. Не новий: %s\n" +msgid "Unable move recycled Volume in full Pool \"%s\" MaxVols=%d\n" +msgstr "" -#: src/findlib/create_file.c:131 +#: src/dird/ua_purge.c:785 #, c-format -msgid "File skipped. Not older: %s\n" -msgstr "Файл пропущено. Не застарілий: %s\n" +msgid "All records pruned from Volume \"%s\"; marking it \"Purged\"\n" +msgstr "" -#: src/findlib/create_file.c:141 +#: src/dird/ua_purge.c:790 #, c-format -msgid "File skipped. Already exists: %s\n" -msgstr "Файл пропущено. Вже існує: %s\n" +msgid "Cannot purge Volume with VolStatus=%s\n" +msgstr "" -#: src/findlib/create_file.c:167 -#, c-format -msgid "File %s already exists and could not be replaced. ERR=%s.\n" -msgstr "Файл %s існує та його не вдалось замінити. ERR=%s.\n" +#: src/dird/ua_prune.c:116 +msgid "Choose item to prune" +msgstr "" -#: src/findlib/create_file.c:218 src/findlib/create_file.c:282 -#: src/findlib/create_file.c:378 +#: src/dird/ua_prune.c:172 #, c-format -msgid "bpkt already open fid=%d\n" +msgid "Cannot prune Volume \"%s\" because it is archived.\n" msgstr "" -#: src/findlib/create_file.c:226 src/filed/fd_plugins.c:1009 -#, c-format -msgid "Could not create %s: ERR=%s\n" -msgstr "Не вдалось створити %s: ERR=%s\n" +#: src/dird/ua_prune.c:214 +msgid "Pruned Jobs from JobHisto catalog.\n" +msgstr "" -#: src/findlib/create_file.c:241 -#, c-format -msgid "Cannot make fifo %s: ERR=%s\n" -msgstr "Не можливо створити чергу(fifo) %s: ERR=%s\n" +#: src/dird/ua_prune.c:302 +#, fuzzy +msgid "Begin pruning Files.\n" +msgstr "Починається чистка файлів Клієнта \"%s\"\n" -#: src/findlib/create_file.c:259 -#, c-format -msgid "Cannot make node %s: ERR=%s\n" -msgstr "Не вдалось створити ноду(node) %s: ERR=%s\n" +#: src/dird/ua_prune.c:317 +msgid "No Files found to prune.\n" +msgstr "" -#: src/findlib/create_file.c:304 +#: src/dird/ua_prune.c:340 #, c-format -msgid "Could not symlink %s -> %s: ERR=%s\n" -msgstr "Не вдалось створити лінку(symlink) %s -> %s: ERR=%s\n" +msgid "Pruned Files from %s Jobs for client %s from catalog.\n" +msgstr "" -#: src/findlib/create_file.c:329 src/findlib/create_file.c:342 -#, c-format -msgid "Could not restore file flags for file %s: ERR=%s\n" -msgstr "Не вдалось відновити прапорці для файлу %s: ERR=%s\n" +#: src/dird/ua_prune.c:486 +#, fuzzy, c-format +msgid "Begin pruning Jobs older than %s.\n" +msgstr "Починається чистка файлів Клієнта \"%s\"\n" -#: src/findlib/create_file.c:333 src/findlib/create_file.c:350 +#: src/dird/ua_prune.c:597 #, c-format -msgid "Could not hard link %s -> %s: ERR=%s\n" -msgstr "Не вдалось створити жорстку лінку(hardlink) %s -> %s: ERR=%s\n" +msgid "Pruned %d %s for client %s from catalog.\n" +msgstr "" -#: src/findlib/create_file.c:346 -#, c-format -msgid "Could not reset file flags for file %s: ERR=%s\n" -msgstr "Не вдалось перевстановити прапорці для файлу %s: ERR=%s\n" +#: src/dird/ua_prune.c:598 +msgid "Jobs" +msgstr "" -#: src/findlib/create_file.c:401 -#, c-format -msgid "Original file %s have been deleted: type=%d\n" -msgstr "Оригінальний файл %s було видалено: тип=%d\n" +#: src/dird/ua_prune.c:600 +msgid "No Jobs found to prune.\n" +msgstr "" -#: src/findlib/create_file.c:413 -#, c-format -msgid "Original file %s not saved: type=%d\n" -msgstr "Оригінальний файл %s не збережено: тип=%d\n" +#: src/dird/ua_prune.c:661 +msgid "Expecting limit argument as integer\n" +msgstr "" -#: src/findlib/create_file.c:416 +#: src/dird/ua_prune.c:675 #, c-format -msgid "Unknown file type %d; not restored: %s\n" -msgstr "Невідомий тип файлу %d: не відновлено: %s\n" +msgid "Volume \"%s\"" +msgstr "" -#: src/findlib/create_file.c:460 -#, c-format -msgid "Zero length filename: %s\n" -msgstr "Пуста назва файлу: %s\n" +#: src/dird/ua_update.c:85 +msgid "Update choice:\n" +msgstr "" -#: src/findlib/bfile.c:97 -msgid "Unix attributes" -msgstr "Атрибули Unix" +#: src/dird/ua_update.c:86 +msgid "Volume parameters" +msgstr "" -#: src/findlib/bfile.c:99 -msgid "File data" -msgstr "Дата файлу" +#: src/dird/ua_update.c:87 +msgid "Pool from resource" +msgstr "" -#: src/findlib/bfile.c:101 -msgid "MD5 digest" -msgstr "Відбиток MD5" +#: src/dird/ua_update.c:88 +msgid "Slots from autochanger" +msgstr "" -#: src/findlib/bfile.c:103 -msgid "GZIP data" -msgstr "Дані, запаковані GZIP" +#: src/dird/ua_update.c:89 +msgid "Long term statistics" +msgstr "" -#: src/findlib/bfile.c:105 -#, fuzzy -msgid "Compressed data" -msgstr "Замало даних" +#: src/dird/ua_update.c:90 +msgid "item" +msgstr "" -#: src/findlib/bfile.c:107 -msgid "Extended attributes" -msgstr "Додаткові атрибути" +#: src/dird/ua_update.c:90 +msgid "Choose catalog item to update" +msgstr "" -#: src/findlib/bfile.c:109 -msgid "Sparse data" -msgstr "Замало даних" +#: src/dird/ua_update.c:133 +#, c-format +msgid "Invalid VolStatus specified: %s\n" +msgstr "" -#: src/findlib/bfile.c:111 -msgid "GZIP sparse data" -msgstr "Замало даних GZIP " +#: src/dird/ua_update.c:142 +#, c-format +msgid "New Volume status is: %s\n" +msgstr "" -#: src/findlib/bfile.c:113 -#, fuzzy -msgid "Compressed sparse data" -msgstr "Замало даних GZIP " +#: src/dird/ua_update.c:152 +#, c-format +msgid "Invalid retention period specified: %s\n" +msgstr "" -#: src/findlib/bfile.c:115 -msgid "Program names" -msgstr "Назви програми" +#: src/dird/ua_update.c:160 +#, c-format +msgid "New retention period is: %s\n" +msgstr "" -#: src/findlib/bfile.c:117 -msgid "Program data" -msgstr "Програмні дані" +#: src/dird/ua_update.c:171 +#, c-format +msgid "Invalid use duration specified: %s\n" +msgstr "" -#: src/findlib/bfile.c:119 -msgid "SHA1 digest" -msgstr "Відбиток HA1" +#: src/dird/ua_update.c:179 +#, c-format +msgid "New use duration is: %s\n" +msgstr "" -#: src/findlib/bfile.c:121 -msgid "Win32 data" -msgstr "Дані Win32" +#: src/dird/ua_update.c:193 +#, c-format +msgid "New max jobs is: %s\n" +msgstr "" -#: src/findlib/bfile.c:123 -msgid "Win32 GZIP data" -msgstr "Дані Win32 GZIP" +#: src/dird/ua_update.c:206 +#, c-format +msgid "New max files is: %s\n" +msgstr "" -#: src/findlib/bfile.c:125 -#, fuzzy -msgid "Win32 compressed data" -msgstr "Дані Win32" +#: src/dird/ua_update.c:217 +#, c-format +msgid "Invalid max. bytes specification: %s\n" +msgstr "" -#: src/findlib/bfile.c:127 -msgid "MacOS Fork data" -msgstr "Дані MacOS Fork" +#: src/dird/ua_update.c:225 +#, c-format +msgid "New Max bytes is: %s\n" +msgstr "" -#: src/findlib/bfile.c:129 -msgid "HFS+ attribs" -msgstr "Атрибути HFS+" +#: src/dird/ua_update.c:236 src/dird/ua_update.c:256 +msgid "Invalid value. It must be yes or no.\n" +msgstr "" -#: src/findlib/bfile.c:131 -msgid "Standard Unix ACL attribs" -msgstr "Стандартні атрибути Unix ACL" +#: src/dird/ua_update.c:244 +#, c-format +msgid "New Recycle flag is: %s\n" +msgstr "" -#: src/findlib/bfile.c:133 -msgid "Default Unix ACL attribs" -msgstr "Звичійні атрибути Unix ACL" +#: src/dird/ua_update.c:264 +#, c-format +msgid "New InChanger flag is: %s\n" +msgstr "" -#: src/findlib/bfile.c:135 -msgid "SHA256 digest" -msgstr "Відбиток SHA256" +#: src/dird/ua_update.c:282 +#, c-format +msgid "Invalid slot, it must be between 0 and MaxVols=%d\n" +msgstr "" -#: src/findlib/bfile.c:137 -msgid "SHA512 digest" -msgstr "Відбиток SHA512" +#: src/dird/ua_update.c:292 src/dird/ua_update.c:716 +#, c-format +msgid "Error updating media record Slot: ERR=%s" +msgstr "" -#: src/findlib/bfile.c:139 -msgid "Signed digest" -msgstr "Підписаний відбиток" +#: src/dird/ua_update.c:294 +#, c-format +msgid "New Slot is: %d\n" +msgstr "" -#: src/findlib/bfile.c:141 -msgid "Encrypted File data" -msgstr "Зашифровані файли" +#: src/dird/ua_update.c:319 +#, c-format +msgid "New Pool is: %s\n" +msgstr "" -#: src/findlib/bfile.c:143 -msgid "Encrypted Win32 data" -msgstr "Зашифровані дані Win32" +#: src/dird/ua_update.c:362 +#, c-format +msgid "New RecyclePool is: %s\n" +msgstr "" -#: src/findlib/bfile.c:145 -msgid "Encrypted session data" -msgstr "Зашифровані дані сесій" +#: src/dird/ua_update.c:382 +#, c-format +msgid "Error updating Volume record: ERR=%s" +msgstr "" -#: src/findlib/bfile.c:147 -msgid "Encrypted GZIP data" -msgstr "Зашифровані дані GZIP" +#: src/dird/ua_update.c:384 +#, c-format +msgid "Volume defaults updated from \"%s\" Pool record.\n" +msgstr "" -#: src/findlib/bfile.c:149 -#, fuzzy -msgid "Encrypted compressed data" -msgstr "Зашифровані дані сесій" +#: src/dird/ua_update.c:407 src/dird/ua_update.c:439 +#, c-format +msgid "Error updating Volume records: ERR=%s" +msgstr "" -#: src/findlib/bfile.c:151 -msgid "Encrypted Win32 GZIP data" -msgstr "Зашифровані дані Win32 GZIP" +#: src/dird/ua_update.c:409 src/dird/ua_update.c:441 +#, c-format +msgid "All Volume defaults updated from \"%s\" Pool record.\n" +msgstr "" -#: src/findlib/bfile.c:153 -#, fuzzy -msgid "Encrypted Win32 Compressed data" -msgstr "Зашифровані дані Win32" +#: src/dird/ua_update.c:431 +#, c-format +msgid "Updating all pools, but skipped PoolId=%d. ERR=%s\n" +msgstr "" -#: src/findlib/bfile.c:155 -msgid "Encrypted MacOS fork data" -msgstr "Зашифровані дані MacOS Fork " +#: src/dird/ua_update.c:457 +#, c-format +msgid "Error updating media record Enabled: ERR=%s" +msgstr "" -#: src/findlib/bfile.c:157 -msgid "AIX Specific ACL attribs" -msgstr "Специфічні атрибути AIX ACL" +#: src/dird/ua_update.c:460 +#, c-format +msgid "New Enabled is: %d\n" +msgstr "" -#: src/findlib/bfile.c:159 -msgid "Darwin Specific ACL attribs" -msgstr "Специфічні атрибути Darwin ACL" +#: src/dird/ua_update.c:475 +#, c-format +msgid "Error updating media record ActionOnPurge: ERR=%s" +msgstr "" -#: src/findlib/bfile.c:161 -msgid "FreeBSD Specific Default ACL attribs" -msgstr "Специфічні атрибути FreeBSD Default ACL" +#: src/dird/ua_update.c:478 +#, c-format +msgid "New ActionOnPurge is: %s\n" +msgstr "" -#: src/findlib/bfile.c:163 -msgid "FreeBSD Specific Access ACL attribs" -msgstr "Специфічні атрибути FreeBSD Access ACL" +#: src/dird/ua_update.c:594 +msgid "Volume Status" +msgstr "" -#: src/findlib/bfile.c:165 -msgid "HPUX Specific ACL attribs" -msgstr "Специфічні атрибути HPUX ACL" +#: src/dird/ua_update.c:595 +msgid "Volume Retention Period" +msgstr "" -#: src/findlib/bfile.c:167 -msgid "Irix Specific Default ACL attribs" -msgstr "Специфічні атрибути Irix Default ACL" +#: src/dird/ua_update.c:596 +msgid "Volume Use Duration" +msgstr "" -#: src/findlib/bfile.c:169 -msgid "Irix Specific Access ACL attribs" -msgstr "Специфічні атрибути Irix Access ACL" +#: src/dird/ua_update.c:597 +msgid "Maximum Volume Jobs" +msgstr "" -#: src/findlib/bfile.c:171 -msgid "Linux Specific Default ACL attribs" -msgstr "Специфічні атрибути Linux Default ACL" +#: src/dird/ua_update.c:598 +msgid "Maximum Volume Files" +msgstr "" -#: src/findlib/bfile.c:173 -msgid "Linux Specific Access ACL attribs" -msgstr "Специфічні атрибути Linux Access ACL" +#: src/dird/ua_update.c:599 +msgid "Maximum Volume Bytes" +msgstr "" -#: src/findlib/bfile.c:175 -#, fuzzy -msgid "TRU64 Specific Default ACL attribs" -msgstr "Специфічні атрибути Irix Default ACL" +#: src/dird/ua_update.c:600 +msgid "Recycle Flag" +msgstr "" -#: src/findlib/bfile.c:177 -#, fuzzy -msgid "TRU64 Specific Access ACL attribs" -msgstr "Специфічні атрибути Irix Access ACL" +#: src/dird/ua_update.c:601 +msgid "Slot" +msgstr "" -#: src/findlib/bfile.c:179 -#, fuzzy -msgid "Solaris Specific POSIX ACL attribs" -msgstr "Специфічні атрибути Solaris ACL" +#: src/dird/ua_update.c:602 +msgid "InChanger Flag" +msgstr "" -#: src/findlib/bfile.c:181 -#, fuzzy -msgid "Solaris Specific NFSv4/ZFS ACL attribs" -msgstr "Специфічні атрибути Solaris ACL" +#: src/dird/ua_update.c:603 +msgid "Volume Files" +msgstr "" -#: src/findlib/bfile.c:183 -#, fuzzy -msgid "AFS Specific ACL attribs" -msgstr "Специфічні атрибути AIX ACL" +#: src/dird/ua_update.c:605 +msgid "Volume from Pool" +msgstr "" -#: src/findlib/bfile.c:185 -#, fuzzy -msgid "AIX Specific POSIX ACL attribs" -msgstr "Специфічні атрибути AIX ACL" - -#: src/findlib/bfile.c:187 -#, fuzzy -msgid "AIX Specific NFSv4 ACL attribs" -msgstr "Специфічні атрибути AIX ACL" - -#: src/findlib/bfile.c:189 -#, fuzzy -msgid "FreeBSD Specific NFSv4/ZFS ACL attribs" -msgstr "Специфічні атрибути FreeBSD Access ACL" - -#: src/findlib/bfile.c:191 -#, fuzzy -msgid "GNU Hurd Specific Default ACL attribs" -msgstr "Специфічні атрибути Irix Default ACL" - -#: src/findlib/bfile.c:193 -#, fuzzy -msgid "GNU Hurd Specific Access ACL attribs" -msgstr "Специфічні атрибути Irix Access ACL" - -#: src/findlib/bfile.c:195 -#, fuzzy -msgid "GNU Hurd Specific Extended attribs" -msgstr "Специфічні додаткові атрибути Linux" - -#: src/findlib/bfile.c:197 -#, fuzzy -msgid "IRIX Specific Extended attribs" -msgstr "Специфічні додаткові атрибути Linux" - -#: src/findlib/bfile.c:199 -#, fuzzy -msgid "TRU64 Specific Extended attribs" -msgstr "Специфічні додаткові атрибути Linux" - -#: src/findlib/bfile.c:201 -#, fuzzy -msgid "AIX Specific Extended attribs" -msgstr "Специфічні додаткові атрибути Linux" - -#: src/findlib/bfile.c:203 -#, fuzzy -msgid "OpenBSD Specific Extended attribs" -msgstr "Специфічні додаткові атрибути NetBSD" - -#: src/findlib/bfile.c:205 -msgid "Solaris Specific Extensible attribs or System Extended attribs" +#: src/dird/ua_update.c:606 +msgid "All Volumes from Pool" msgstr "" -#: src/findlib/bfile.c:207 -msgid "Solaris Specific Extended attribs" -msgstr "Специфічні додаткові атрибути Solaris" - -#: src/findlib/bfile.c:209 -msgid "Darwin Specific Extended attribs" -msgstr "Специфічні додаткові атрибути Darwin" - -#: src/findlib/bfile.c:211 -msgid "FreeBSD Specific Extended attribs" -msgstr "Специфічні додаткові атрибути FreeBS" - -#: src/findlib/bfile.c:213 -msgid "Linux Specific Extended attribs" -msgstr "Специфічні додаткові атрибути Linux" - -#: src/findlib/bfile.c:215 -msgid "NetBSD Specific Extended attribs" -msgstr "Специфічні додаткові атрибути NetBSD" +#: src/dird/ua_update.c:607 +msgid "All Volumes from all Pools" +msgstr "" -#: src/findlib/find.c:237 -#, c-format -msgid "Plugin: \"%s\" not found.\n" +#: src/dird/ua_update.c:608 +msgid "Enabled" msgstr "" -#: src/findlib/match.c:210 src/tools/testfind.c:654 src/filed/job.c:1460 -#, c-format -msgid "Unknown include/exclude option: %c\n" -msgstr "Не зрозуміла опція параметру include/exclude: %c\n" +#: src/dird/ua_update.c:609 +msgid "RecyclePool" +msgstr "" -#: src/findlib/find_one.c:227 -#, c-format -msgid " NODUMP flag set - will not process %s\n" +#: src/dird/ua_update.c:610 +msgid "Action On Purge" msgstr "" -#: src/findlib/find_one.c:248 -#, c-format -msgid "Cannot stat file %s: ERR=%s\n" +#: src/dird/ua_update.c:611 +msgid "Done" msgstr "" -#: src/findlib/find_one.c:253 +#: src/dird/ua_update.c:620 #, c-format -msgid "%s mtime changed during backup.\n" -msgstr "%s mtime змінився під час резервування.\n" +msgid "Updating Volume \"%s\"\n" +msgstr "" -#: src/findlib/find_one.c:260 +#: src/dird/ua_update.c:625 #, c-format -msgid "%s ctime changed during backup.\n" -msgstr "%s ctime змінився під час резервування.\n" +msgid "Current Volume status is: %s\n" +msgstr "" -#: src/findlib/find_one.c:268 src/findlib/find_one.c:276 -#, c-format -msgid "%s size changed during backup.\n" -msgstr "%s розмір змінився під час резервування.\n" +#: src/dird/ua_update.c:626 +msgid "Possible Values are:\n" +msgstr "" -#: src/findlib/find_one.c:403 -#, c-format -msgid "Top level directory \"%s\" has unlisted fstype \"%s\"\n" -msgstr "Вища тека \"%s\" має незрозумілий тип файлової системи \"%s\"\n" +#: src/dird/ua_update.c:637 +msgid "Choose new Volume Status" +msgstr "" -#: src/findlib/find_one.c:418 +#: src/dird/ua_update.c:643 #, c-format -msgid "Top level directory \"%s\" has an unlisted drive type \"%s\"\n" -msgstr "Вища тека \"%s\" має незрозумілий тип пристрою \"%s\"\n" +msgid "Current retention period is: %s\n" +msgstr "" -#: src/cats/sql_create.c:101 -#, c-format -msgid "Create DB Job record %s failed. ERR=%s\n" +#: src/dird/ua_update.c:645 +msgid "Enter Volume Retention period: " msgstr "" -#: src/cats/sql_create.c:145 +#: src/dird/ua_update.c:652 #, c-format -msgid "Create JobMedia record %s failed: ERR=%s\n" +msgid "Current use duration is: %s\n" msgstr "" -#: src/cats/sql_create.c:154 -#, c-format -msgid "Update Media record %s failed: ERR=%s\n" +#: src/dird/ua_update.c:654 +msgid "Enter Volume Use Duration: " msgstr "" -#: src/cats/sql_create.c:189 +#: src/dird/ua_update.c:661 #, c-format -msgid "pool record %s already exists\n" +msgid "Current max jobs is: %u\n" msgstr "" -#: src/cats/sql_create.c:221 -#, c-format -msgid "Create db Pool record %s failed: ERR=%s\n" +#: src/dird/ua_update.c:662 +msgid "Enter new Maximum Jobs: " msgstr "" -#: src/cats/sql_create.c:254 +#: src/dird/ua_update.c:669 #, c-format -msgid "Device record %s already exists\n" +msgid "Current max files is: %u\n" msgstr "" -#: src/cats/sql_create.c:271 -#, c-format -msgid "Create db Device record %s failed: ERR=%s\n" +#: src/dird/ua_update.c:670 +msgid "Enter new Maximum Files: " msgstr "" -#: src/cats/sql_create.c:306 +#: src/dird/ua_update.c:677 #, c-format -msgid "More than one Storage record!: %d\n" +msgid "Current value is: %s\n" msgstr "" -#: src/cats/sql_create.c:311 -#, c-format -msgid "error fetching Storage row: %s\n" +#: src/dird/ua_update.c:678 +msgid "Enter new Maximum Bytes: " msgstr "" -#: src/cats/sql_create.c:332 +#: src/dird/ua_update.c:686 #, c-format -msgid "Create DB Storage record %s failed. ERR=%s\n" +msgid "Current recycle flag is: %s\n" msgstr "" -#: src/cats/sql_create.c:366 -#, c-format -msgid "mediatype record %s already exists\n" +#: src/dird/ua_update.c:688 +msgid "Enter new Recycle status: " msgstr "" -#: src/cats/sql_create.c:383 +#: src/dird/ua_update.c:695 #, c-format -msgid "Create db mediatype record %s failed: ERR=%s\n" +msgid "Current Slot is: %d\n" msgstr "" -#: src/cats/sql_create.c:424 -#, c-format -msgid "Volume \"%s\" already exists.\n" +#: src/dird/ua_update.c:696 +msgid "Enter new Slot: " msgstr "" -#: src/cats/sql_create.c:470 +#: src/dird/ua_update.c:703 #, c-format -msgid "Create DB Media record %s failed. ERR=%s\n" +msgid "Current InChanger flag is: %d\n" msgstr "" -#: src/cats/sql_create.c:521 +#: src/dird/ua_update.c:704 #, c-format -msgid "More than one Client!: %d\n" +msgid "Set InChanger flag for Volume \"%s\": yes/no: " msgstr "" -#: src/cats/sql_create.c:526 +#: src/dird/ua_update.c:718 #, c-format -msgid "error fetching Client row: %s\n" +msgid "New InChanger flag is: %d\n" msgstr "" -#: src/cats/sql_create.c:554 -#, c-format -msgid "Create DB Client record %s failed. ERR=%s\n" +#: src/dird/ua_update.c:725 +msgid "" +"Warning changing Volume Files can result\n" +"in loss of data on your Volume\n" +"\n" msgstr "" -#: src/cats/sql_create.c:589 src/cats/sql_get.c:251 +#: src/dird/ua_update.c:727 #, c-format -msgid "More than one Path!: %s for path: %s\n" +msgid "Current Volume Files is: %u\n" msgstr "" -#: src/cats/sql_create.c:596 src/cats/sql_get.c:205 src/cats/sql_get.c:258 -#: src/cats/sql_get.c:640 src/cats/sql_get.c:722 src/cats/sql_get.c:1039 -#: src/cats/sql.c:340 src/cats/sql.c:347 src/cats/postgresql.c:165 -#, c-format -msgid "error fetching row: %s\n" +#: src/dird/ua_update.c:728 +msgid "Enter new number of Files for Volume: " msgstr "" -#: src/cats/sql_create.c:621 -#, c-format -msgid "Create db Path record %s failed. ERR=%s\n" +#: src/dird/ua_update.c:733 +msgid "Normally, you should only increase Volume Files by one!\n" msgstr "" -#: src/cats/sql_create.c:666 -#, c-format -msgid "Create DB Counters record %s failed. ERR=%s\n" +#: src/dird/ua_update.c:734 +msgid "Increase Volume Files? (yes/no): " msgstr "" -#: src/cats/sql_create.c:704 +#: src/dird/ua_update.c:744 #, c-format -msgid "More than one FileSet!: %d\n" +msgid "New Volume Files is: %u\n" msgstr "" -#: src/cats/sql_create.c:709 +#: src/dird/ua_update.c:756 #, c-format -msgid "error fetching FileSet row: ERR=%s\n" +msgid "Current Pool is: %s\n" msgstr "" -#: src/cats/sql_create.c:740 -#, c-format -msgid "Create DB FileSet record %s failed. ERR=%s\n" +#: src/dird/ua_update.c:757 +msgid "Enter new Pool name: " msgstr "" -#: src/cats/sql_create.c:989 +#: src/dird/ua_update.c:778 #, c-format -msgid "Create db File record %s failed. ERR=%s" +msgid "Current Enabled is: %d\n" msgstr "" -#: src/cats/sql_create.c:1015 -#, c-format -msgid "More than one Filename! %s for file: %s\n" +#: src/dird/ua_update.c:779 +msgid "Enter new Enabled: " msgstr "" -#: src/cats/sql_create.c:1021 +#: src/dird/ua_update.c:789 #, c-format -msgid "Error fetching row for file=%s: ERR=%s\n" +msgid "Current RecyclePool is: %s\n" msgstr "" -#: src/cats/sql_create.c:1038 -#, c-format -msgid "Create db Filename record %s failed. ERR=%s\n" +#: src/dird/ua_update.c:791 +msgid "No current RecyclePool\n" msgstr "" -#: src/cats/sql_create.c:1058 +#: src/dird/ua_update.c:801 #, c-format -msgid "Attempt to put non-attributes into catalog. Stream=%d\n" +msgid "Current ActionOnPurge is: %s\n" msgstr "" -#: src/cats/sql_create.c:1074 -msgid "Cannot Copy/Migrate job using BaseJob.\n" +#: src/dird/ua_update.c:803 +msgid "Enter new ActionOnPurge (one of: Truncate, None): " msgstr "" -#: src/cats/sql_create.c:1166 src/cats/sql_get.c:1136 -msgid "ERR=JobIds are empty\n" +#: src/dird/ua_update.c:811 +msgid "Selection terminated.\n" msgstr "" -#: src/cats/sql_create.c:1219 -#, fuzzy, c-format -msgid "Create db Object record %s failed. ERR=%s" -msgstr "Не можливо створити теку %s: ERR=%s\n" - -#: src/cats/sql_get.c:151 +#: src/dird/ua_update.c:831 #, c-format -msgid "Error fetching row: %s\n" +msgid "Updating %i job(s).\n" msgstr "" -#: src/cats/sql_get.c:158 +#: src/dird/ua_update.c:863 #, c-format -msgid "get_file_record want 1 got rows=%d PathId=%s FilenameId=%s\n" +msgid "db_update_pool_record returned %d. ERR=%s\n" msgstr "" -#: src/cats/sql_get.c:166 -#, c-format -msgid "File record for PathId=%s FilenameId=%s not found.\n" +#: src/dird/ua_update.c:870 +msgid "Pool DB record updated from resource.\n" msgstr "" -#: src/cats/sql_get.c:172 -msgid "File record not found in Catalog.\n" +#: src/dird/ua_update.c:897 +msgid "Expect JobId keyword, not found.\n" msgstr "" -#: src/cats/sql_get.c:199 -#, c-format -msgid "More than one Filename!: %s for file: %s\n" +#: src/dird/ua_update.c:922 +msgid "Neither Client nor StartTime specified.\n" msgstr "" -#: src/cats/sql_get.c:209 +#: src/dird/catreq.c:121 src/dird/catreq.c:364 #, c-format -msgid "Get DB Filename record %s found bad record: %d\n" +msgid "1990 Invalid Catalog Request: %s" msgstr "" -#: src/cats/sql_get.c:215 +#: src/dird/catreq.c:122 #, c-format -msgid "Filename record: %s not found.\n" +msgid "Invalid Catalog request; DB not open: %s" msgstr "" -#: src/cats/sql_get.c:219 +#: src/dird/catreq.c:143 #, c-format -msgid "Filename record: %s not found in Catalog.\n" +msgid "Pool \"%s\" not found for SD find media request.\n" msgstr "" -#: src/cats/sql_get.c:262 -#, c-format -msgid "Get DB path record %s found bad record: %s\n" +#: src/dird/catreq.c:152 +msgid "1901 No Media.\n" msgstr "" -#: src/cats/sql_get.c:275 -#, c-format -msgid "Path record: %s not found.\n" +#: src/dird/catreq.c:184 +msgid "not in Pool" msgstr "" -#: src/cats/sql_get.c:279 -#, c-format -msgid "Path record: %s not found in Catalog.\n" +#: src/dird/catreq.c:186 +msgid "not correct MediaType" msgstr "" -#: src/cats/sql_get.c:318 -#, c-format -msgid "No Job found for JobId %s\n" +#: src/dird/catreq.c:196 +msgid "is not Enabled" msgstr "" -#: src/cats/sql_get.c:391 src/cats/sql_get.c:448 +#: src/dird/catreq.c:205 #, c-format -msgid "No volumes found for JobId=%d\n" +msgid "1998 Volume \"%s\" catalog status is %s, %s.\n" msgstr "" -#: src/cats/sql_get.c:397 src/cats/sql_get.c:459 +#: src/dird/catreq.c:210 #, c-format -msgid "Error fetching row %d: ERR=%s\n" +msgid "1997 Volume \"%s\" not in catalog.\n" msgstr "" -#: src/cats/sql_get.c:411 +#: src/dird/catreq.c:236 #, c-format -msgid "No Volume for JobId %d found in Catalog.\n" +msgid "Unable to get Media record for Volume %s: ERR=%s\n" msgstr "" -#: src/cats/sql_get.c:552 +#: src/dird/catreq.c:238 #, c-format -msgid "Pool id select failed: ERR=%s\n" +msgid "1991 Catalog Request for vol=%s failed: %s" msgstr "" -#: src/cats/sql_get.c:589 +#: src/dird/catreq.c:265 #, c-format -msgid "Client id select failed: ERR=%s\n" +msgid "Attempt to set Volume Files from %u to %u for Volume \"%s\". Ignored.\n" msgstr "" -#: src/cats/sql_get.c:635 +#: src/dird/catreq.c:321 #, c-format -msgid "More than one Pool!: %s\n" +msgid "Catalog error updating Media record. %s" msgstr "" -#: src/cats/sql_get.c:679 -msgid "Pool record not found in Catalog.\n" +#: src/dird/catreq.c:323 +msgid "1993 Update Media error\n" msgstr "" -#: src/cats/sql_get.c:717 +#: src/dird/catreq.c:350 #, c-format -msgid "More than one Client!: %s\n" +msgid "Catalog error creating JobMedia record. %s" msgstr "" -#: src/cats/sql_get.c:734 src/cats/sql_get.c:738 -msgid "Client record not found in Catalog.\n" +#: src/dird/catreq.c:352 +msgid "1992 Create JobMedia error\n" msgstr "" -#: src/cats/sql_get.c:765 +#: src/dird/catreq.c:365 #, c-format -msgid "More than one Counter!: %d\n" +msgid "Invalid Catalog request: %s" msgstr "" -#: src/cats/sql_get.c:770 +#: src/dird/catreq.c:452 +#, fuzzy, c-format +msgid "Attribute create error: ERR=%s" +msgstr "Не вдалось створити %s: ERR=%s\n" + +#: src/dird/catreq.c:549 #, c-format -msgid "error fetching Counter row: %s\n" +msgid "Restore object create error. %s" msgstr "" -#: src/cats/sql_get.c:790 +#: src/dird/catreq.c:556 #, c-format -msgid "Counter record: %s not found in Catalog.\n" +msgid "%s not same File=%d as attributes=%d\n" msgstr "" -#: src/cats/sql_get.c:830 +#: src/dird/catreq.c:583 #, c-format -msgid "Error got %s FileSets but expected only one!\n" +msgid "Catalog error updating file digest. Unsupported digest stream type: %d" msgstr "" -#: src/cats/sql_get.c:835 +#: src/dird/catreq.c:598 #, c-format -msgid "FileSet record \"%s\" not found.\n" -msgstr "" - -#: src/cats/sql_get.c:845 -msgid "FileSet record not found in Catalog.\n" -msgstr "" - -#: src/cats/sql_get.c:941 -#, c-format -msgid "Media id select failed: ERR=%s\n" +msgid "attribute create error. %s" msgstr "" -#: src/cats/sql_get.c:979 +#: src/dird/catreq.c:604 #, c-format -msgid "query dbids failed: ERR=%s\n" -msgstr "" +msgid "Catalog error updating file digest. %s" +msgstr "Помилка під час оновлення відбитку файлу. %s" -#: src/cats/sql_get.c:1034 +#: src/dird/catreq.c:627 #, c-format -msgid "More than one Volume!: %s\n" -msgstr "" +msgid "1994 Invalid Catalog Update: %s" +msgstr "1994 Помилка оновлення Каталогу: %s" -#: src/cats/sql_get.c:1090 +#: src/dird/catreq.c:628 #, c-format -msgid "Media record MediaId=%s not found.\n" -msgstr "" +msgid "Invalid Catalog Update; DB not open: %s" +msgstr "Помилка оновлення Каталогу: БД не відкрита: %s" -#: src/cats/sql_get.c:1093 +#: src/dird/catreq.c:684 src/dird/catreq.c:699 #, c-format -msgid "Media record for Volume \"%s\" not found.\n" +msgid "fread attr spool error. ERR=%s\n" msgstr "" -#: src/cats/sql_get.c:1100 +#: src/findlib/match.c:198 src/filed/job.c:1615 src/tools/testfind.c:642 #, c-format -msgid "Media record for MediaId=%u not found in Catalog.\n" -msgstr "" +msgid "Unknown include/exclude option: %c\n" +msgstr "Не зрозуміла опція параметру include/exclude: %c\n" -#: src/cats/sql_get.c:1103 -#, c-format -msgid "Media record for Vol=%s not found in Catalog.\n" -msgstr "" +#: src/findlib/bfile.c:85 +msgid "Unix attributes" +msgstr "Атрибули Unix" -#: src/cats/sql_find.c:98 src/cats/sql_find.c:127 src/cats/sql_find.c:182 -#, c-format -msgid "" -"Query error for start time request: ERR=%s\n" -"CMD=%s\n" -msgstr "" +#: src/findlib/bfile.c:87 +msgid "File data" +msgstr "Дата файлу" -#: src/cats/sql_find.c:104 src/cats/sql_find.c:188 -msgid "No prior Full backup Job record found.\n" -msgstr "" +#: src/findlib/bfile.c:89 +msgid "MD5 digest" +msgstr "Відбиток MD5" -#: src/cats/sql_find.c:116 -#, c-format -msgid "Unknown level=%d\n" -msgstr "" +#: src/findlib/bfile.c:91 +msgid "GZIP data" +msgstr "Дані, запаковані GZIP" -#: src/cats/sql_find.c:133 -#, c-format -msgid "" -"No Job record found: ERR=%s\n" -"CMD=%s\n" -msgstr "" +#: src/findlib/bfile.c:93 +#, fuzzy +msgid "Compressed data" +msgstr "Замало даних" -#: src/cats/sql_find.c:291 -#, c-format -msgid "Unknown Job level=%d\n" -msgstr "" +#: src/findlib/bfile.c:95 +msgid "Extended attributes" +msgstr "Додаткові атрибути" -#: src/cats/sql_find.c:301 -#, c-format -msgid "No Job found for: %s.\n" -msgstr "" +#: src/findlib/bfile.c:97 +msgid "Sparse data" +msgstr "Замало даних" -#: src/cats/sql_find.c:312 -#, c-format -msgid "No Job found for: %s\n" -msgstr "" +#: src/findlib/bfile.c:99 +msgid "GZIP sparse data" +msgstr "Замало даних GZIP " -#: src/cats/sql_find.c:393 -#, c-format -msgid "Request for Volume item %d greater than max %d or less than 1\n" -msgstr "" +#: src/findlib/bfile.c:101 +#, fuzzy +msgid "Compressed sparse data" +msgstr "Замало даних GZIP " -#: src/cats/sql_find.c:408 -#, c-format -msgid "No Volume record found for item %d.\n" -msgstr "" +#: src/findlib/bfile.c:103 +msgid "Program names" +msgstr "Назви програми" -#: src/cats/sqlite.c:166 src/cats/ingres.c:255 src/cats/postgresql.c:210 -#: src/cats/dbi.c:228 src/cats/mysql.c:164 -#, c-format -msgid "Unable to initialize DB lock. ERR=%s\n" -msgstr "" +#: src/findlib/bfile.c:105 +msgid "Program data" +msgstr "Програмні дані" -#: src/cats/sqlite.c:181 -#, c-format -msgid "Database %s does not exist, please create it.\n" -msgstr "" +#: src/findlib/bfile.c:107 +msgid "SHA1 digest" +msgstr "Відбиток HA1" -#: src/cats/sqlite.c:203 -#, c-format -msgid "Unable to open Database=%s. ERR=%s\n" -msgstr "" +#: src/findlib/bfile.c:109 +msgid "Win32 data" +msgstr "Дані Win32" -#: src/cats/sqlite.c:204 -msgid "unknown" -msgstr "" +#: src/findlib/bfile.c:111 +msgid "Win32 GZIP data" +msgstr "Дані Win32 GZIP" -#: src/cats/sqlite.c:462 src/cats/ingres.c:496 src/cats/postgresql.c:506 -#: src/cats/postgresql.c:553 src/cats/dbi.c:631 src/cats/cats.c:149 -#: src/cats/mysql.c:393 -#, c-format -msgid "Query failed: %s: ERR=%s\n" -msgstr "" +#: src/findlib/bfile.c:113 +#, fuzzy +msgid "Win32 compressed data" +msgstr "Дані Win32" -#: src/cats/ingres.c:87 -msgid "Failed to allocate space for query filter.\n" -msgstr "" +#: src/findlib/bfile.c:115 +msgid "MacOS Fork data" +msgstr "Дані MacOS Fork" -#: src/cats/ingres.c:108 -msgid "Failed to allocate space for query filters.\n" -msgstr "" +#: src/findlib/bfile.c:117 +msgid "HFS+ attribs" +msgstr "Атрибути HFS+" -#: src/cats/ingres.c:267 -#, c-format -msgid "" -"Unable to connect to Ingres server.\n" -"Database=%s User=%s\n" -"It is probably not running or your password is incorrect.\n" -msgstr "" +#: src/findlib/bfile.c:119 +msgid "Standard Unix ACL attribs" +msgstr "Стандартні атрибути Unix ACL" -#: src/cats/ingres.c:1087 -msgid "A user name for Ingres must be supplied.\n" -msgstr "" +#: src/findlib/bfile.c:121 +msgid "Default Unix ACL attribs" +msgstr "Звичійні атрибути Unix ACL" -#: src/cats/sql.c:184 -#, c-format -msgid "" -"Potential performance problem:\n" -"max_connections=%d set for %s database \"%s\" should be larger than " -"Director's MaxConcurrentJobs=%d\n" -msgstr "" +#: src/findlib/bfile.c:123 +msgid "SHA256 digest" +msgstr "Відбиток SHA256" -#: src/cats/sql.c:229 -#, c-format -msgid "" -"query %s failed:\n" -"%s\n" -msgstr "" +#: src/findlib/bfile.c:125 +msgid "SHA512 digest" +msgstr "Відбиток SHA512" -#: src/cats/sql.c:251 -#, c-format -msgid "" -"insert %s failed:\n" -"%s\n" -msgstr "" +#: src/findlib/bfile.c:127 +msgid "Signed digest" +msgstr "Підписаний відбиток" -#: src/cats/sql.c:261 -#, c-format -msgid "Insertion problem: affected_rows=%s\n" -msgstr "" +#: src/findlib/bfile.c:129 +msgid "Encrypted File data" +msgstr "Зашифровані файли" -#: src/cats/sql.c:282 -#, c-format -msgid "" -"update %s failed:\n" -"%s\n" -msgstr "" +#: src/findlib/bfile.c:131 +msgid "Encrypted Win32 data" +msgstr "Зашифровані дані Win32" -#: src/cats/sql.c:292 -#, c-format -msgid "Update failed: affected_rows=%s for %s\n" -msgstr "" +#: src/findlib/bfile.c:133 +msgid "Encrypted session data" +msgstr "Зашифровані дані сесій" -#: src/cats/sql.c:314 -#, c-format -msgid "" -"delete %s failed:\n" -"%s\n" -msgstr "" +#: src/findlib/bfile.c:135 +msgid "Encrypted GZIP data" +msgstr "Зашифровані дані GZIP" -#: src/cats/sql.c:408 -#, c-format -msgid "Path length is zero. File=%s\n" -msgstr "" +#: src/findlib/bfile.c:137 +#, fuzzy +msgid "Encrypted compressed data" +msgstr "Зашифровані дані сесій" -#: src/cats/sql.c:603 -msgid "No results to list.\n" -msgstr "" +#: src/findlib/bfile.c:139 +msgid "Encrypted Win32 GZIP data" +msgstr "Зашифровані дані Win32 GZIP" -#: src/cats/sql.c:721 +#: src/findlib/bfile.c:141 #, fuzzy -msgid "Could not init database batch connection\n" -msgstr "Не вдалось відкрити%s: ERR=%s\n" +msgid "Encrypted Win32 Compressed data" +msgstr "Зашифровані дані Win32" -#: src/cats/sql.c:727 -#, c-format -msgid "Could not open database \"%s\": ERR=%s\n" -msgstr "" +#: src/findlib/bfile.c:143 +msgid "Encrypted MacOS fork data" +msgstr "Зашифровані дані MacOS Fork " -#: src/cats/postgresql.c:181 -#, c-format -msgid "Encoding error for database \"%s\". Wanted SQL_ASCII, got %s\n" +#: src/findlib/bfile.c:145 +msgid "Plugin Name" msgstr "" -#: src/cats/postgresql.c:246 -#, c-format -msgid "" -"Unable to connect to PostgreSQL server. Database=%s User=%s\n" -"Possible causes: SQL server not running; password incorrect; max_connections " -"exceeded.\n" +#: src/findlib/bfile.c:147 +msgid "Plugin Data" msgstr "" -#: src/cats/postgresql.c:350 -msgid "PQescapeStringConn returned non-zero.\n" +#: src/findlib/bfile.c:149 +msgid "Restore Object" msgstr "" -#: src/cats/postgresql.c:368 -msgid "PQescapeByteaConn returned NULL.\n" -msgstr "" +#: src/findlib/bfile.c:151 +msgid "AIX Specific ACL attribs" +msgstr "Специфічні атрибути AIX ACL" -#: src/cats/postgresql.c:399 -msgid "PQunescapeByteaConn returned NULL.\n" -msgstr "" +#: src/findlib/bfile.c:153 +msgid "Darwin Specific ACL attribs" +msgstr "Специфічні атрибути Darwin ACL" -#: src/cats/postgresql.c:813 -#, c-format -msgid "error fetching currval: %s\n" -msgstr "" +#: src/findlib/bfile.c:155 +msgid "FreeBSD Specific Default ACL attribs" +msgstr "Специфічні атрибути FreeBSD Default ACL" -#: src/cats/postgresql.c:1004 src/cats/dbi.c:1277 -#, c-format -msgid "error starting batch mode: %s" -msgstr "" +#: src/findlib/bfile.c:157 +msgid "FreeBSD Specific Access ACL attribs" +msgstr "Специфічні атрибути FreeBSD Access ACL" -#: src/cats/postgresql.c:1034 src/cats/postgresql.c:1041 -#, c-format -msgid "error ending batch mode: %s" -msgstr "" +#: src/findlib/bfile.c:159 +msgid "HPUX Specific ACL attribs" +msgstr "Специфічні атрибути HPUX ACL" -#: src/cats/postgresql.c:1088 -#, c-format -msgid "error copying in batch mode: %s" -msgstr "" +#: src/findlib/bfile.c:161 +msgid "Irix Specific Default ACL attribs" +msgstr "Специфічні атрибути Irix Default ACL" -#: src/cats/postgresql.c:1110 -msgid "A user name for PostgreSQL must be supplied.\n" -msgstr "" - -#: src/cats/sql_list.c:59 -#, c-format -msgid "Query failed: %s\n" -msgstr "" - -#: src/cats/sql_list.c:275 -msgid "These JobIds have copies as follows:\n" -msgstr "" - -#: src/cats/sql_list.c:277 -msgid "The catalog contains copies as follows:\n" -msgstr "" - -#: src/cats/dbi.c:117 -#, c-format -msgid "Unknown database type: %s\n" -msgstr "" - -#: src/cats/dbi.c:242 -#, c-format -msgid "" -"Unable to locate the DBD drivers to DBI interface in: \n" -"db_driverdir=%s. It is probaly not found any drivers\n" -msgstr "" - -#: src/cats/dbi.c:299 -#, c-format -msgid "" -"Unable to connect to DBI interface. Type=%s Database=%s User=%s\n" -"Possible causes: SQL server not running; password incorrect; max_connections " -"exceeded.\n" -msgstr "" - -#: src/cats/dbi.c:1439 -#, c-format -msgid "error inserting batch mode: %s" -msgstr "" - -#: src/cats/dbi.c:1456 -msgid "Driver type not specified in Catalog resource.\n" -msgstr "" - -#: src/cats/dbi.c:1460 -msgid "Invalid driver type, must be \"dbi:\"\n" -msgstr "" - -#: src/cats/dbi.c:1464 -msgid "A user name for DBI must be supplied.\n" -msgstr "" - -#: src/cats/cats_dummy.c:39 -msgid "Please replace this dummy libbaccats library with a proper one.\n" -msgstr "" - -#: src/cats/sql_delete.c:80 -#, c-format -msgid "No pool record %s exists\n" -msgstr "" - -#: src/cats/sql_delete.c:85 -#, c-format -msgid "Expecting one pool record, got %d\n" -msgstr "" - -#: src/cats/sql_delete.c:91 -#, c-format -msgid "Error fetching row %s\n" -msgstr "" - -#: src/cats/mysql.c:207 -#, c-format -msgid "" -"Unable to connect to MySQL server.\n" -"Database=%s User=%s\n" -"MySQL connect failed either server not running or your authorization is " -"incorrect.\n" -msgstr "" - -#: src/cats/mysql.c:692 -msgid "A user name for MySQL must be supplied.\n" -msgstr "" - -#: src/wx-console/console_conf.c:147 src/console/console_conf.c:140 -#: src/qt-console/bat_conf.cpp:141 -#, c-format -msgid "No record for %d %s\n" -msgstr "Відсутні записи для %d %s\n" - -#: src/wx-console/console_conf.c:156 src/console/console_conf.c:149 -#, c-format -msgid "Console: name=%s rcfile=%s histfile=%s\n" -msgstr "Консоль: назва=%s rcfile=%s histfile=%s\n" - -#: src/wx-console/console_conf.c:160 src/console/console_conf.c:153 -#: src/qt-console/bat_conf.cpp:150 -#, c-format -msgid "Director: name=%s address=%s DIRport=%d\n" -msgstr "Керівник: назва=%s адреса=%s DIRport=%d\n" +#: src/findlib/bfile.c:163 +msgid "Irix Specific Access ACL attribs" +msgstr "Специфічні атрибути Irix Access ACL" -#: src/wx-console/authenticate.c:142 src/console/authenticate.c:138 -msgid "TLS negotiation failed\n" -msgstr "Невдале встановлення з'єднання TLS\n" +#: src/findlib/bfile.c:165 +msgid "Linux Specific Default ACL attribs" +msgstr "Специфічні атрибути Linux Default ACL" -#: src/wx-console/authenticate.c:150 -msgid "Bad response to Hello command: ERR=" -msgstr "Погана відповідь на команду Hello: ERR=" +#: src/findlib/bfile.c:167 +msgid "Linux Specific Access ACL attribs" +msgstr "Специфічні атрибути Linux Access ACL" -#: src/wx-console/authenticate.c:167 src/console/authenticate.c:169 +#: src/findlib/bfile.c:169 #, fuzzy -msgid "" -"Director authorization problem.\n" -"Most likely the passwords do not agree.\n" -"If you are using TLS, there may have been a certificate validation error " -"during the TLS handshake.\n" -"Please see " -msgstr "" -"Проблеми авторизації Керівника.\n" -"Швидше за все, проблема у паролях.\n" -"Якщо Ви використовуєте TLS, можливо, невдала перевірка сертифікату під час " -"TLS handshake.\n" -"Для отримання допомоги, будь ласка, перегляньте http://www.bacula.org/en/rel-" -"manual/Bacula_Freque_Asked_Questi.html#SECTION003760000000000000000.\n" - -#: src/console/console.c:126 -#, c-format -msgid "" -"\n" -"Version: " -msgstr "" -"\n" -"Вірсія: " - -#: src/console/console.c:178 -msgid "input from file" -msgstr "введення із файлу" - -#: src/console/console.c:179 -msgid "output to file" -msgstr "вивід до файлу" - -#: src/console/console.c:180 -msgid "quit" -msgstr "" - -#: src/console/console.c:181 -msgid "output to file and terminal" -msgstr "вивід до файлу та консолі" - -#: src/console/console.c:182 -msgid "sleep specified time" -msgstr "зазначений час сну" - -#: src/console/console.c:183 -msgid "print current time" -msgstr "вивести поточний час" - -#: src/console/console.c:184 -msgid "print Console's version" -msgstr "вивести версію Консолі" - -#: src/console/console.c:185 -msgid "echo command string" -msgstr "луна командного рядку" - -#: src/console/console.c:186 -msgid "execute an external command" -msgstr "виконати зовнішню команду" - -#: src/console/console.c:187 -msgid "exit = quit" -msgstr "" - -#: src/console/console.c:188 -msgid "zed_keys = use zed keys instead of bash keys" -msgstr "zed_keys = використовувати zed keys замість bash keys" - -#: src/console/console.c:189 -msgid "help listing" -msgstr "допомога" - -#: src/console/console.c:191 -msgid "set command separator" -msgstr "задати роздільник команд" - -#: src/console/console.c:225 -msgid ": is an invalid command\n" -msgstr ": неправильна команда\n" - -#: src/console/console.c:675 -msgid "Illegal separator character.\n" -msgstr "Невірний символ роздільника.\n" - -#: src/console/console.c:708 -msgid "Command logic problem\n" -msgstr "Проблеми логіки команди\n" - -#: src/console/console.c:925 -#, fuzzy, c-format -msgid "Can't find %s in Director list\n" -msgstr ": неправильна команда\n" - -#: src/console/console.c:933 -msgid "Available Directors:\n" -msgstr "Наявні Керівники:\n" - -#: src/console/console.c:937 -#, c-format -msgid "%2d: %s at %s:%d\n" -msgstr "" - -#: src/console/console.c:941 -msgid "Select Director by entering a number: " -msgstr "Оберіть Керівника, увівши номер: " - -#: src/console/console.c:948 -#, c-format -msgid "%s is not a number. You must enter a number between 1 and %d\n" -msgstr "%s не є номером. Ви повинні увести номер із проміжку 1..%d\n" - -#: src/console/console.c:955 -#, c-format -msgid "You must enter a number between 1 and %d\n" -msgstr "Ви повинні увести номер із проміжку 1..%d\n" +msgid "TRU64 Specific Default ACL attribs" +msgstr "Специфічні атрибути Irix Default ACL" -#: src/console/console.c:1160 src/wx-console/console_thread.cpp:399 -#: src/qt-console/bcomm/dircomm.cpp:131 -#, c-format -msgid "Failed to initialize TLS context for Console \"%s\".\n" -msgstr "Ініціалізація контексту TLS для Консолі невдала \"%s\".\n" +#: src/findlib/bfile.c:171 +#, fuzzy +msgid "TRU64 Specific Access ACL attribs" +msgstr "Специфічні атрибути Irix Access ACL" -#: src/console/console.c:1180 src/wx-console/console_thread.cpp:420 -#: src/qt-console/bcomm/dircomm.cpp:154 -#, c-format -msgid "Failed to initialize TLS context for Director \"%s\".\n" -msgstr "Ініціалізація контексту TLS для Керівника невдала \"%s\".\n" +#: src/findlib/bfile.c:173 +#, fuzzy +msgid "Solaris Specific POSIX ACL attribs" +msgstr "Специфічні атрибути Solaris ACL" -#: src/console/console.c:1210 -msgid "Enter a period to cancel a command.\n" -msgstr "Уведіть цятку для переривання команди.\n" +#: src/findlib/bfile.c:175 +#, fuzzy +msgid "Solaris Specific NFSv4/ZFS ACL attribs" +msgstr "Специфічні атрибути Solaris ACL" -#: src/console/console.c:1304 src/qt-console/main.cpp:232 -#, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Director \"%s\" in %s. At least one CA certificate store is required.\n" -msgstr "" -"Жоден із параметрів \"TLS CA Certificate\" або \"TLS CA Certificate Dir\" не " -"задано для Керівника \"%s\" у %s. Необхідне щонайменше одне сховище для " -"сертифікату CA.\n" +#: src/findlib/bfile.c:177 +#, fuzzy +msgid "AFS Specific ACL attribs" +msgstr "Специфічні атрибути AIX ACL" -#: src/console/console.c:1313 src/qt-console/main.cpp:241 -#, c-format -msgid "" -"No Director resource defined in %s\n" -"Without that I don't how to speak to the Director :-(\n" -msgstr "" -"У %s не задано ресурсу Керівника\n" -"Без цього я не знаю як спілкуватись із Керівником :-(\n" +#: src/findlib/bfile.c:179 +#, fuzzy +msgid "AIX Specific POSIX ACL attribs" +msgstr "Специфічні атрибути AIX ACL" -#: src/console/console.c:1333 src/qt-console/main.cpp:262 -#, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Console \"%s\" in %s.\n" -msgstr "" -"Жоден із параметрів \"TLS CA Certificate\" або \"TLS CA Certificate Dir\" не " -"задано для Консолі \"%s\" у %s.\n" +#: src/findlib/bfile.c:181 +#, fuzzy +msgid "AIX Specific NFSv4 ACL attribs" +msgstr "Специфічні атрибути AIX ACL" -#: src/console/console.c:1359 -msgid "Too many arguments on input command.\n" -msgstr "Забагато параметрів команди.\n" +#: src/findlib/bfile.c:183 +#, fuzzy +msgid "FreeBSD Specific NFSv4/ZFS ACL attribs" +msgstr "Специфічні атрибути FreeBSD Access ACL" -#: src/console/console.c:1363 -msgid "First argument to input command must be a filename.\n" -msgstr "Перший параметр команди повинен бути назвою файлу.\n" +#: src/findlib/bfile.c:185 +#, fuzzy +msgid "GNU Hurd Specific Default ACL attribs" +msgstr "Специфічні атрибути Irix Default ACL" -#: src/console/console.c:1369 -#, c-format -msgid "Cannot open file %s for input. ERR=%s\n" -msgstr "Не вдається відкрити файл %s для введення. ERR=%s\n" +#: src/findlib/bfile.c:187 +#, fuzzy +msgid "GNU Hurd Specific Access ACL attribs" +msgstr "Специфічні атрибути Irix Access ACL" -#: src/console/console.c:1401 -msgid "Too many arguments on output/tee command.\n" -msgstr "Забагато параметрів на виході команди.\n" +#: src/findlib/bfile.c:189 +#, fuzzy +msgid "GNU Hurd Specific Extended attribs" +msgstr "Специфічні додаткові атрибути Linux" -#: src/console/console.c:1418 -#, c-format -msgid "Cannot open file %s for output. ERR=%s\n" -msgstr "Не вдається відкрити файл %s для виведення. ERR=%s\n" +#: src/findlib/bfile.c:191 +#, fuzzy +msgid "IRIX Specific Extended attribs" +msgstr "Специфічні додаткові атрибути Linux" -#: src/console/console.c:1437 -msgid "Too many arguments. Enclose command in double quotes.\n" -msgstr "Забагато параметрів. Оточіть комінду подвійними лапками.\n" +#: src/findlib/bfile.c:193 +#, fuzzy +msgid "TRU64 Specific Extended attribs" +msgstr "Специфічні додаткові атрибути Linux" -#: src/console/console.c:1446 -#, c-format -msgid "Cannot popen(\"%s\", \"r\"): ERR=%s\n" -msgstr "" +#: src/findlib/bfile.c:195 +#, fuzzy +msgid "AIX Specific Extended attribs" +msgstr "Специфічні додаткові атрибути Linux" -#: src/tools/testls.c:59 -#, c-format -msgid "" -"\n" -"Usage: testls [-d debug_level] [-] [pattern1 ...]\n" -" -a print extended attributes (Win32 debug)\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -e specify file of exclude patterns\n" -" -i specify file of include patterns\n" -" -q quiet, don't print filenames (debug)\n" -" - read pattern(s) from stdin\n" -" -? print this message.\n" -"\n" -"Patterns are file inclusion -- normally directories.\n" -"Debug level >= 1 prints each file found.\n" -"Debug level >= 10 prints path/file for catalog.\n" -"Errors always printed.\n" -"Files/paths truncated is number with len > 255.\n" -"Truncation is only in catalog.\n" -"\n" -msgstr "" +#: src/findlib/bfile.c:197 +#, fuzzy +msgid "OpenBSD Specific Extended attribs" +msgstr "Специфічні додаткові атрибути NetBSD" -#: src/tools/testls.c:155 -#, c-format -msgid "Could not open include file: %s\n" +#: src/findlib/bfile.c:199 +msgid "Solaris Specific Extensible attribs or System Extended attribs" msgstr "" -#: src/tools/testls.c:168 -#, c-format -msgid "Could not open exclude file: %s\n" -msgstr "" +#: src/findlib/bfile.c:201 +msgid "Solaris Specific Extended attribs" +msgstr "Специфічні додаткові атрибути Solaris" -#: src/tools/testls.c:182 -#, c-format -msgid "Files seen = %d\n" -msgstr "" +#: src/findlib/bfile.c:203 +msgid "Darwin Specific Extended attribs" +msgstr "Специфічні додаткові атрибути Darwin" -#: src/tools/testls.c:215 src/tools/testfind.c:322 -#, c-format -msgid "Err: Could not access %s: %s\n" -msgstr "" +#: src/findlib/bfile.c:205 +msgid "FreeBSD Specific Extended attribs" +msgstr "Специфічні додаткові атрибути FreeBS" -#: src/tools/testls.c:218 src/tools/testfind.c:325 -#, c-format -msgid "Err: Could not follow ff->link %s: %s\n" -msgstr "" +#: src/findlib/bfile.c:207 +msgid "Linux Specific Extended attribs" +msgstr "Специфічні додаткові атрибути Linux" -#: src/tools/testls.c:221 src/tools/testfind.c:328 -#, c-format -msgid "Err: Could not stat %s: %s\n" -msgstr "" +#: src/findlib/bfile.c:209 +msgid "NetBSD Specific Extended attribs" +msgstr "Специфічні додаткові атрибути NetBSD" -#: src/tools/testls.c:224 src/tools/testfind.c:331 +#: src/findlib/makepath.c:141 #, c-format -msgid "Skip: File not saved. No change. %s\n" -msgstr "" +msgid "Cannot create directory %s: ERR=%s\n" +msgstr "Не можливо створити теку %s: ERR=%s\n" -#: src/tools/testls.c:227 src/tools/testfind.c:334 +#: src/findlib/makepath.c:145 src/findlib/makepath.c:219 #, c-format -msgid "Err: Attempt to backup archive. Not saved. %s\n" -msgstr "" +msgid "%s exists but is not a directory.\n" +msgstr "%s існує, але не є текою.\n" -#: src/tools/testls.c:230 +#: src/findlib/makepath.c:155 #, c-format -msgid "Recursion turned off. Directory not entered. %s\n" +msgid "Security problem!! We created directory %s, but it is a link.\n" msgstr "" -#: src/tools/testls.c:233 +#: src/findlib/makepath.c:181 #, c-format -msgid "Skip: File system change prohibited. Directory not entered. %s\n" -msgstr "" +msgid "Cannot change owner and/or group of %s: ERR=%s\n" +msgstr "Не можливо змінити власника та/або групу для %s: ERR=%s\n" -#: src/tools/testls.c:236 src/tools/testfind.c:337 +#: src/findlib/makepath.c:186 #, c-format -msgid "Err: Could not open directory %s: %s\n" -msgstr "" +msgid "Cannot change permissions of %s: ERR=%s\n" +msgstr "Не можливо змінити дозволи для %s: ERR=%s\n" -#: src/tools/testls.c:239 src/tools/testfind.c:340 +#: src/findlib/makepath.c:256 #, c-format -msgid "Err: Unknown file ff->type %d: %s\n" -msgstr "" +msgid "%c: is not a valid drive.\n" +msgstr "%c: не вірний пристрій.\n" -#: src/tools/bvfs_test.c:56 src/tools/ing_test.c:57 -#, c-format -msgid "" -"\n" -"Version: %s (%s)\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -n specify the database name (default bacula)\n" -" -u specify database user name (default bacula)\n" -" -P specify database host (default NULL)\n" -" -w specify working directory\n" -" -j specify jobids\n" -" -p specify path\n" -" -f specify file\n" -" -l maximum tuple to fetch\n" -" -T truncate cache table before starting\n" -" -v verbose\n" -" -? print this message\n" -"\n" -msgstr "" +#: src/findlib/makepath.c:300 +msgid "Too many subdirectories. Some permissions not reset.\n" +msgstr "Забагато підтек. Деякі обмеження не перевстановлено.\n" -#: src/tools/bbatch.c:79 +#: src/findlib/file_create.c:102 #, c-format -msgid "" -"\n" -"Version: %s (%s)\n" -"Example : bbatch -w /path/to/workdir -h localhost -f dat1 -f dat -f datx\n" -" will start 3 thread and load dat1, dat and datx in your catalog\n" -"See bbatch.c to generate datafile\n" -"\n" -"Usage: bbatch [ options ] -w working/dir -f datafile\n" -" -b with batch mode\n" -" -B without batch mode\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -n specify the database name (default bacula)\n" -" -u specify database user name (default bacula)\n" -" -P specify database host (default NULL)\n" -" -w specify working directory\n" -" -r call restore code with given jobids\n" -" -v verbose\n" -" -f specify data file\n" -" -? print this message\n" -"\n" -msgstr "" +msgid "File skipped. Not newer: %s\n" +msgstr "Файл пропущено. Не новий: %s\n" -#: src/tools/bbatch.c:211 +#: src/findlib/file_create.c:109 #, c-format -msgid "Computing file list for jobid=%s files=%lld secs=%d\n" -msgstr "" +msgid "File skipped. Not older: %s\n" +msgstr "Файл пропущено. Не застарілий: %s\n" -#: src/tools/bbatch.c:315 +#: src/findlib/file_create.c:119 #, c-format -msgid "Error opening datafile %s\n" -msgstr "" - -#: src/tools/bbatch.c:325 -msgid "Error while inserting file\n" -msgstr "" - -#: src/tools/ing_test.c:231 src/tools/ing_test.c:264 src/tools/ing_test.c:302 -msgid "Stmt went wrong\n" -msgstr "" - -#: src/tools/ing_test.c:320 -msgid "CREATE-Stmt went wrong\n" -msgstr "" - -#: src/tools/ing_test.c:325 -msgid "DROP-Stmt went wrong\n" -msgstr "" +msgid "File skipped. Already exists: %s\n" +msgstr "Файл пропущено. Вже існує: %s\n" -#: src/tools/fstype.c:48 +#: src/findlib/file_create.c:145 #, c-format -msgid "" -"\n" -"Usage: fstype [-v] path ...\n" -"\n" -" Print the file system type a given file/directory is on.\n" -" The following options are supported:\n" -"\n" -" -v print both path and file system type.\n" -" -? print this message.\n" -"\n" -msgstr "" +msgid "File %s already exists and could not be replaced. ERR=%s.\n" +msgstr "Файл %s існує та його не вдалось замінити. ERR=%s.\n" -#: src/tools/fstype.c:102 src/tools/drivetype.c:78 +#: src/findlib/file_create.c:196 src/findlib/file_create.c:259 +#: src/findlib/file_create.c:348 #, c-format -msgid "%s: unknown\n" +msgid "bpkt already open fid=%d\n" msgstr "" -#: src/tools/bregex.c:153 src/tools/bwild.c:122 src/tools/bregtest.c:137 +#: src/findlib/file_create.c:204 src/filed/fd_plugins.c:1004 #, c-format -msgid "Could not open data file: %s\n" -msgstr "" +msgid "Could not create %s: ERR=%s\n" +msgstr "Не вдалось створити %s: ERR=%s\n" -#: src/tools/drivetype.c:47 +#: src/findlib/file_create.c:218 #, c-format -msgid "" -"\n" -"Usage: drivetype [-v] path ...\n" -"\n" -" Print the drive type a given file/directory is on.\n" -" The following options are supported:\n" -"\n" -" -l print local fixed hard drive\n" -" -a display information on all drives\n" -" -v print both path and file system type.\n" -" -? print this message.\n" -"\n" -msgstr "" +msgid "Cannot make fifo %s: ERR=%s\n" +msgstr "Не можливо створити чергу(fifo) %s: ERR=%s\n" -#: src/tools/testfind.c:70 +#: src/findlib/file_create.c:236 #, c-format -msgid "" -"\n" -"Usage: testfind [-d debug_level] [-] [pattern1 ...]\n" -" -a print extended attributes (Win32 debug)\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -c specify config file containing FileSet resources\n" -" -f specify which FileSet to use\n" -" -? print this message.\n" -"\n" -"Patterns are used for file inclusion -- normally directories.\n" -"Debug level >= 1 prints each file found.\n" -"Debug level >= 10 prints path/file for catalog.\n" -"Errors are always printed.\n" -"Files/paths truncated is the number of files/paths with len > 255.\n" -"Truncation is only in the catalog.\n" -"\n" -msgstr "" +msgid "Cannot make node %s: ERR=%s\n" +msgstr "Не вдалось створити ноду(node) %s: ERR=%s\n" -#: src/tools/testfind.c:235 +#: src/findlib/file_create.c:281 #, c-format -msgid "" -"\n" -"Total files : %d\n" -"Max file length: %d\n" -"Max path length: %d\n" -"Files truncated: %d\n" -"Paths truncated: %d\n" -"Hard links : %d\n" -msgstr "" +msgid "Could not symlink %s -> %s: ERR=%s\n" +msgstr "Не вдалось створити лінку(symlink) %s -> %s: ERR=%s\n" -#: src/tools/testfind.c:278 +#: src/findlib/file_create.c:304 src/findlib/file_create.c:317 #, c-format -msgid "Reg: %s\n" -msgstr "" +msgid "Could not restore file flags for file %s: ERR=%s\n" +msgstr "Не вдалось відновити прапорці для файлу %s: ERR=%s\n" -#: src/tools/testfind.c:300 -msgid "\t[will not descend: recursion turned off]" -msgstr "" +#: src/findlib/file_create.c:308 src/findlib/file_create.c:325 +#, c-format +msgid "Could not hard link %s -> %s: ERR=%s\n" +msgstr "Не вдалось створити жорстку лінку(hardlink) %s -> %s: ERR=%s\n" -#: src/tools/testfind.c:302 -msgid "\t[will not descend: file system change not allowed]" -msgstr "" +#: src/findlib/file_create.c:321 +#, c-format +msgid "Could not reset file flags for file %s: ERR=%s\n" +msgstr "Не вдалось перевстановити прапорці для файлу %s: ERR=%s\n" -#: src/tools/testfind.c:304 -msgid "\t[will not descend: disallowed file system]" -msgstr "" +#: src/findlib/file_create.c:363 +#, c-format +msgid "Original file %s have been deleted: type=%d\n" +msgstr "Оригінальний файл %s було видалено: тип=%d\n" -#: src/tools/testfind.c:306 -msgid "\t[will not descend: disallowed drive type]" -msgstr "" +#: src/findlib/file_create.c:375 +#, c-format +msgid "Original file %s not saved: type=%d\n" +msgstr "Оригінальний файл %s не збережено: тип=%d\n" -#: src/tools/testfind.c:390 +#: src/findlib/file_create.c:378 #, c-format -msgid "===== Filename truncated to 255 chars: %s\n" -msgstr "" +msgid "Unknown file type %d; not restored: %s\n" +msgstr "Невідомий тип файлу %d: не відновлено: %s\n" -#: src/tools/testfind.c:407 +#: src/findlib/file_create.c:413 #, c-format -msgid "========== Path name truncated to 255 chars: %s\n" -msgstr "" +msgid "Zero length filename: %s\n" +msgstr "Пуста назва файлу: %s\n" -#: src/tools/testfind.c:416 +#: src/findlib/find.c:186 #, c-format -msgid "========== Path length is zero. File=%s\n" +msgid "Plugin: \"%s\" not found.\n" msgstr "" -#: src/tools/testfind.c:419 +#: src/findlib/file_attrs.c:96 src/findlib/file_attrs.c:138 #, c-format -msgid "Path: %s\n" -msgstr "" +msgid "Unable to set file modes %s: ERR=%s\n" +msgstr "Не можливо встановити параметри файлу %s: ERR=%s\n" -#: src/tools/cats_test.c:60 +#: src/findlib/file_attrs.c:106 src/findlib/file_attrs.c:132 +#: src/findlib/file_attrs.c:589 #, c-format -msgid "" -"\n" -"Version: %s (%s)\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -n specify the database name (default bacula)\n" -" -u specify database user name (default bacula)\n" -" -P specify database host (default NULL)\n" -" -w specify working directory\n" -" -p specify path\n" -" -f specify file\n" -" -l maximum tuple to fetch\n" -" -q print only errors\n" -" -v verbose\n" -" -? print this message\n" -"\n" -msgstr "" +msgid "Unable to set file owner %s: ERR=%s\n" +msgstr "Не можливо встановити власника файлу %s: ERR=%s\n" -#: src/tools/cats_test.c:376 -#, fuzzy, c-format -msgid "Could not open, database \"%s\".\n" -msgstr "Не вдалось відкрити%s: ERR=%s\n" +#: src/findlib/file_attrs.c:125 src/findlib/file_attrs.c:150 +#, c-format +msgid "Unable to set file times %s: ERR=%s\n" +msgstr "Не можливо встановити час файлу %s: ERR=%s\n" -#: src/tools/bsmtp.c:151 +#: src/findlib/file_attrs.c:566 #, c-format -msgid "Fatal malformed reply from %s: %s\n" +msgid "File size of restored file %s not correct. Original %s, restored %s.\n" msgstr "" +"Не правильний розмір відновленого файлу %s. Оригінальний %s, відновлений " +"%s.\n" -#: src/tools/bsmtp.c:159 +#: src/findlib/file_attrs.c:609 #, c-format -msgid "Fatal fgets error: ERR=%s\n" -msgstr "" +msgid "Unable to set file flags %s: ERR=%s\n" +msgstr "Не можливо встановити прапорці файлу %s: ERR=%s\n" -#: src/tools/bsmtp.c:192 +#: src/findlib/find_one.c:215 #, c-format -msgid "" -"\n" -"Usage: %s [-f from] [-h mailhost] [-s subject] [-c copy] [recipient ...]\n" -" -4 forces bsmtp to use IPv4 addresses only.\n" -" -6 forces bsmtp to use IPv6 addresses only.\n" -" -8 set charset to UTF-8\n" -" -a use any ip protocol for address resolution\n" -" -c set the Cc: field\n" -" -d set debug level to \n" -" -dt print a timestamp in debug output\n" -" -f set the From: field\n" -" -h use mailhost:port as the SMTP server\n" -" -s set the Subject: field\n" -" -r set the Reply-To: field\n" -" -l set the maximum number of lines to send (default: " -"unlimited)\n" -" -? print this message.\n" -"\n" +msgid " NODUMP flag set - will not process %s\n" msgstr "" -#: src/tools/bsmtp.c:379 -msgid "Fatal error: no recipient given.\n" +#: src/findlib/find_one.c:236 +#, c-format +msgid "Cannot stat file %s: ERR=%s\n" msgstr "" -#: src/tools/bsmtp.c:407 +#: src/findlib/find_one.c:241 #, c-format -msgid "Fatal gethostname error: ERR=%s\n" -msgstr "" +msgid "%s mtime changed during backup.\n" +msgstr "%s mtime змінився під час резервування.\n" + +#: src/findlib/find_one.c:248 +#, c-format +msgid "%s ctime changed during backup.\n" +msgstr "%s ctime змінився під час резервування.\n" -#: src/tools/bsmtp.c:418 +#: src/findlib/find_one.c:255 #, fuzzy, c-format -msgid "Fatal getaddrinfo for myself failed \"%s\": ERR=%s\n" -msgstr "Помилка у %s файл %s: ERR=%s\n" +msgid "%s size of %lld changed during backup to %lld.n" +msgstr "%s розмір змінився під час резервування.\n" -#: src/tools/bsmtp.c:426 +#: src/findlib/find_one.c:383 #, c-format -msgid "Fatal gethostbyname for myself failed \"%s\": ERR=%s\n" -msgstr "" +msgid "Top level directory \"%s\" has unlisted fstype \"%s\"\n" +msgstr "Вища тека \"%s\" має незрозумілий тип файлової системи \"%s\"\n" -#: src/tools/bsmtp.c:486 src/tools/bsmtp.c:521 +#: src/findlib/find_one.c:398 #, c-format -msgid "Error unknown mail host \"%s\": ERR=%s\n" -msgstr "" - -#: src/tools/bsmtp.c:489 src/tools/bsmtp.c:524 -msgid "Retrying connection using \"localhost\".\n" -msgstr "" +msgid "Top level directory \"%s\" has an unlisted drive type \"%s\"\n" +msgstr "Вища тека \"%s\" має незрозумілий тип пристрою \"%s\"\n" -#: src/tools/bsmtp.c:514 +#: src/filed/job.c:294 #, fuzzy, c-format -msgid "Failed to connect to mailhost %s\n" -msgstr "Ініціалізація контексту TLS для Консолі невдала \"%s\".\n" +msgid "Command: \"%s\" is disabled.\n" +msgstr "Помилка команди" + +#: src/filed/job.c:440 +#, fuzzy +msgid "SD connect failed: Bad Hello command\n" +msgstr "Керівник не прийняв команду Hello\n" -#: src/tools/bsmtp.c:532 +#: src/filed/job.c:448 #, c-format -msgid "Fatal error: Unknown address family for smtp host: %d\n" +msgid "SD connect failed: Job name not found: %s\n" msgstr "" -#: src/tools/bsmtp.c:541 src/tools/bsmtp.c:546 +#: src/filed/job.c:501 #, c-format -msgid "Fatal socket error: ERR=%s\n" +msgid "Bad command from %s. Len=%d.\n" +msgstr "" + +#: src/filed/job.c:555 +msgid "2902 Error scanning cancel command.\n" msgstr "" -#: src/tools/bsmtp.c:551 +#: src/filed/job.c:559 src/filed/job.c:598 #, c-format -msgid "Fatal connect error to %s: ERR=%s\n" +msgid "2901 Job %s not found.\n" msgstr "" -#: src/tools/bsmtp.c:560 +#: src/filed/job.c:569 #, c-format -msgid "Fatal _open_osfhandle error: ERR=%s\n" +msgid "2001 Job \"%s\" marked to be %s.\n" msgstr "" -#: src/tools/bsmtp.c:567 src/tools/bsmtp.c:571 src/tools/bsmtp.c:580 -#: src/tools/bsmtp.c:584 +#: src/filed/job.c:592 +#, fuzzy, c-format +msgid "2991 Bad setbandwidth command: %s\n" +msgstr "Погана відповідь на команду Hello: ERR=%s\n" + +#: src/filed/job.c:645 #, c-format -msgid "Fatal fdopen error: ERR=%s\n" +msgid "2991 Bad setdebug command: %s\n" msgstr "" -#: src/tools/bsmtp.c:576 +#: src/filed/job.c:678 #, c-format -msgid "Fatal dup error: ERR=%s\n" +msgid "Bad estimate command: %s" msgstr "" -#: src/tools/dbcheck.c:195 -msgid "" -"Warning skipping the additional parameters for working directory/dbname/user/" -"password/host.\n" +#: src/filed/job.c:679 +msgid "2992 Bad estimate command.\n" msgstr "" -#: src/tools/dbcheck.c:212 +#: src/filed/job.c:702 #, c-format -msgid "Error can not find the Catalog name[%s] in the given config file [%s]\n" +msgid "Bad Job Command: %s" msgstr "" -#: src/tools/dbcheck.c:214 +#: src/filed/job.c:737 #, c-format -msgid "Error there is no Catalog section in the given config file [%s]\n" +msgid "Bad RunBeforeJob command: %s\n" msgstr "" -#: src/tools/dbcheck.c:223 -msgid "Error no Director resource defined.\n" +#: src/filed/job.c:738 src/filed/job.c:757 +msgid "2905 Bad RunBeforeJob command.\n" msgstr "" -#: src/tools/dbcheck.c:247 -msgid "Wrong number of arguments.\n" +#: src/filed/job.c:768 +msgid "2905 Bad RunBeforeNow command.\n" msgstr "" -#: src/tools/dbcheck.c:252 -msgid "Working directory not supplied.\n" +#: src/filed/job.c:787 +#, c-format +msgid "Bad RunAfter command: %s\n" msgstr "" -#: src/tools/dbcheck.c:288 -msgid "Database port must be a numeric value.\n" +#: src/filed/job.c:788 +msgid "2905 Bad RunAfterJob command.\n" msgstr "" -#: src/tools/dbcheck.c:291 -msgid "Database port must be a int value.\n" +#: src/filed/job.c:824 +#, c-format +msgid "Bad RunScript command: %s\n" msgstr "" -#: src/tools/dbcheck.c:365 -#, c-format -msgid "Hello, this is the database check/correct program.\n" +#: src/filed/job.c:825 +msgid "2905 Bad RunScript command.\n" msgstr "" -#: src/tools/dbcheck.c:367 -#, c-format -msgid "Modify database is on." +#: src/filed/job.c:880 +#, fuzzy, c-format +msgid "Bad RestoreObject command: %s\n" +msgstr "Погана відповідь на команду Hello: ERR=%s\n" + +#: src/filed/job.c:945 +msgid "2909 Bad RestoreObject command.\n" msgstr "" -#: src/tools/dbcheck.c:369 +#: src/filed/job.c:984 #, c-format -msgid "Modify database is off." +msgid "Plugin Directory not defined. Cannot use plugin: \"%s\"\n" msgstr "" -#: src/tools/dbcheck.c:371 src/tools/dbcheck.c:432 +#: src/filed/job.c:1026 #, c-format -msgid " Verbose is on.\n" +msgid "Error running program: %s. stat=%d: ERR=%s\n" msgstr "" -#: src/tools/dbcheck.c:373 src/tools/dbcheck.c:434 +#: src/filed/job.c:1037 #, c-format -msgid " Verbose is off.\n" +msgid "Cannot open FileSet input file: %s. ERR=%s\n" msgstr "" -#: src/tools/dbcheck.c:375 +#: src/filed/job.c:1191 #, c-format -msgid "Please select the function you want to perform.\n" +msgid "REGEX %s compile error. ERR=%s\n" msgstr "" -#: src/tools/dbcheck.c:379 +#: src/filed/job.c:1342 #, c-format -msgid "" -"\n" -" 1) Toggle modify database flag\n" -" 2) Toggle verbose flag\n" -" 3) Repair bad Filename records\n" -" 4) Repair bad Path records\n" -" 5) Eliminate duplicate Filename records\n" -" 6) Eliminate duplicate Path records\n" -" 7) Eliminate orphaned Jobmedia records\n" -" 8) Eliminate orphaned File records\n" -" 9) Eliminate orphaned Path records\n" -" 10) Eliminate orphaned Filename records\n" -" 11) Eliminate orphaned FileSet records\n" -" 12) Eliminate orphaned Client records\n" -" 13) Eliminate orphaned Job records\n" -" 14) Eliminate all Admin records\n" -" 15) Eliminate all Restore records\n" -" 16) All (3-15)\n" -" 17) Quit\n" +msgid "Invalid FileSet command: %s\n" msgstr "" -#: src/tools/dbcheck.c:398 +#: src/filed/job.c:1749 #, c-format msgid "" -"\n" -" 1) Toggle modify database flag\n" -" 2) Toggle verbose flag\n" -" 3) Check for bad Filename records\n" -" 4) Check for bad Path records\n" -" 5) Check for duplicate Filename records\n" -" 6) Check for duplicate Path records\n" -" 7) Check for orphaned Jobmedia records\n" -" 8) Check for orphaned File records\n" -" 9) Check for orphaned Path records\n" -" 10) Check for orphaned Filename records\n" -" 11) Check for orphaned FileSet records\n" -" 12) Check for orphaned Client records\n" -" 13) Check for orphaned Job records\n" -" 14) Check for all Admin records\n" -" 15) Check for all Restore records\n" -" 16) All (3-15)\n" -" 17) Quit\n" -msgstr "" - -#: src/tools/dbcheck.c:418 -msgid "Select function number: " +"DIR and FD clocks differ by %lld seconds, FD automatically compensating.\n" msgstr "" -#: src/tools/dbcheck.c:425 +#: src/filed/job.c:1758 #, c-format -msgid "Database will be modified.\n" +msgid "Unknown backup level: %s\n" msgstr "" -#: src/tools/dbcheck.c:427 +#: src/filed/job.c:1771 #, c-format -msgid "Database will NOT be modified.\n" +msgid "Bad level command: %s\n" msgstr "" -#: src/tools/dbcheck.c:518 +#: src/filed/job.c:1793 #, c-format -msgid "JobId=%s Name=\"%s\" StartTime=%s\n" +msgid "Bad session command: %s" msgstr "" -#: src/tools/dbcheck.c:525 -#, c-format -msgid "Orphaned JobMediaId=%s JobId=%s Volume=\"%s\"\n" +#: src/filed/job.c:1922 +#, fuzzy +msgid "Failed connect from Storage daemon. SD bsock=NULL.\n" +msgstr "Відкриті з'єднання із Зберігачем.\n" + +#: src/filed/job.c:1967 +msgid "ACL support not configured for your machine.\n" msgstr "" -#: src/tools/dbcheck.c:532 -#, c-format -msgid "Orphaned FileId=%s JobId=%s Volume=\"%s\"\n" +#: src/filed/job.c:1971 +msgid "XATTR support not configured for your machine.\n" msgstr "" -#: src/tools/dbcheck.c:539 -#, c-format -msgid "Orphaned FileSetId=%s FileSet=\"%s\" MD5=%s\n" +#: src/filed/job.c:1980 +msgid "Cannot contact Storage daemon\n" msgstr "" -#: src/tools/dbcheck.c:546 +#: src/filed/job.c:1999 #, c-format -msgid "Orphaned ClientId=%s Name=\"%s\"\n" +msgid "Bad response to append open: %s\n" msgstr "" -#: src/tools/dbcheck.c:599 -#, c-format -msgid "Deleting: %s\n" +#: src/filed/job.c:2004 +msgid "Bad response from stored to open command\n" msgstr "" -#: src/tools/dbcheck.c:671 -#, c-format -msgid "Checking for duplicate Filename entries.\n" +#: src/filed/job.c:2069 +msgid "Append Close with SD failed.\n" msgstr "" -#: src/tools/dbcheck.c:682 +#: src/filed/job.c:2073 #, c-format -msgid "Found %d duplicate Filename records.\n" +msgid "Bad status %d %c returned from Storage Daemon.\n" msgstr "" -#: src/tools/dbcheck.c:683 -msgid "Print the list? (yes/no): " +#: src/filed/job.c:2095 +#, c-format +msgid "2994 Bad verify command: %s\n" msgstr "" -#: src/tools/dbcheck.c:706 src/tools/dbcheck.c:771 +#: src/filed/job.c:2110 src/filed/job.c:2151 #, c-format -msgid "Found %d for: %s\n" +msgid "2994 Bad verify level: %s\n" msgstr "" -#: src/tools/dbcheck.c:736 +#: src/filed/job.c:2222 #, c-format -msgid "Checking for duplicate Path entries.\n" +msgid "Bad replace command. CMD=%s\n" msgstr "" -#: src/tools/dbcheck.c:747 +#: src/filed/job.c:2248 #, c-format -msgid "Found %d duplicate Path records.\n" +msgid "Bad where regexp. where=%s\n" msgstr "" -#: src/tools/dbcheck.c:748 src/tools/dbcheck.c:810 src/tools/dbcheck.c:856 -#: src/tools/dbcheck.c:924 src/tools/dbcheck.c:982 src/tools/dbcheck.c:1025 -#: src/tools/dbcheck.c:1067 src/tools/dbcheck.c:1109 src/tools/dbcheck.c:1146 -#: src/tools/dbcheck.c:1179 src/tools/dbcheck.c:1213 src/tools/dbcheck.c:1280 -msgid "Print them? (yes/no): " +#: src/filed/job.c:2344 +msgid "Improper calling sequence.\n" msgstr "" -#: src/tools/dbcheck.c:801 +#: src/filed/job.c:2364 #, c-format -msgid "Checking for orphaned JobMedia entries.\n" +msgid "Bad response to SD read open: %s\n" msgstr "" -#: src/tools/dbcheck.c:809 -#, c-format -msgid "Found %d orphaned JobMedia records.\n" +#: src/filed/job.c:2369 +msgid "Bad response from stored to read open command\n" msgstr "" -#: src/tools/dbcheck.c:827 +#: src/filed/job.c:2431 #, c-format -msgid "Deleting %d orphaned JobMedia records.\n" +msgid "Comm error with SD. bad response to %s. ERR=%s\n" msgstr "" -#: src/tools/dbcheck.c:844 -#, c-format -msgid "Checking for orphaned File entries. This may take some time!\n" -msgstr "" +#: src/filed/job.c:2434 +#, fuzzy, c-format +msgid "Bad response from SD to %s command. Wanted %s, got %s\n" +msgstr "Невірна відповідь від Збирача на команду Hello: ERR=%s\n" -#: src/tools/dbcheck.c:855 +#: src/filed/filed_conf.c:196 src/filed/filed_conf.c:220 #, c-format -msgid "Found %d orphaned File records.\n" +msgid "Expected a Cipher Type keyword, got: %s" msgstr "" -#: src/tools/dbcheck.c:872 +#: src/filed/accurate.c:189 #, c-format -msgid "Deleting %d orphaned File records.\n" +msgid "Space saved with Base jobs: %lld MB\n" msgstr "" -#: src/tools/dbcheck.c:891 +#: src/filed/accurate.c:388 +#, fuzzy, c-format +msgid "Cannot verify checksum for %s\n" +msgstr "Не вдається відкрити файл %s для виведення. ERR=%s\n" + +#: src/filed/accurate.c:417 src/filed/verify.c:235 src/filed/backup.c:505 #, c-format -msgid "Pruning orphaned Path entries isn't possible when using BVFS.\n" -msgstr "" +msgid "%s digest initialization failed\n" +msgstr "Невдала ініціалізація відбитку %s\n" -#: src/tools/dbcheck.c:900 src/tools/dbcheck.c:958 -msgid "Create temporary index? (yes/no): " +#: src/filed/accurate.c:496 +msgid "2991 Bad accurate command\n" msgstr "" -#: src/tools/dbcheck.c:912 +#: src/filed/fd_plugins.c:545 src/filed/fd_plugins.c:689 #, c-format -msgid "Checking for orphaned Path entries. This may take some time!\n" +msgid "Command plugin \"%s\": no type in startBackupFile packet.\n" msgstr "" -#: src/tools/dbcheck.c:923 +#: src/filed/fd_plugins.c:558 #, c-format -msgid "Found %d orphaned Path records.\n" +msgid "Command plugin \"%s\": no object_name in startBackupFile packet.\n" msgstr "" -#: src/tools/dbcheck.c:936 +#: src/filed/fd_plugins.c:571 src/filed/fd_plugins.c:696 #, c-format -msgid "Deleting %d orphaned Path records.\n" +msgid "Command plugin \"%s\": no fname in startBackupFile packet.\n" msgstr "" -#: src/tools/dbcheck.c:970 -#, c-format -msgid "Checking for orphaned Filename entries. This may take some time!\n" +#: src/filed/fd_plugins.c:770 +msgid "Plugin save packet not found.\n" msgstr "" -#: src/tools/dbcheck.c:981 +#: src/filed/fd_plugins.c:784 src/filed/fd_plugins.c:800 src/filed/xattr.c:85 +#: src/filed/xattr.c:100 src/filed/xattr.c:108 src/filed/backup.c:1000 +#: src/filed/backup.c:1199 src/filed/backup.c:1236 src/filed/backup.c:1249 +#: src/filed/backup.c:1324 src/filed/backup.c:1423 src/filed/acl.c:96 +#: src/filed/acl.c:111 src/filed/acl.c:119 #, c-format -msgid "Found %d orphaned Filename records.\n" +msgid "Network send error to SD. ERR=%s\n" msgstr "" -#: src/tools/dbcheck.c:994 +#: src/filed/fd_plugins.c:905 #, c-format -msgid "Deleting %d orphaned Filename records.\n" +msgid "Plugin=%s not found.\n" msgstr "" -#: src/tools/dbcheck.c:1014 +#: src/filed/fd_plugins.c:972 #, c-format -msgid "Checking for orphaned FileSet entries. This takes some time!\n" +msgid "Plugin createFile call failed. Stat=%d file=%s\n" msgstr "" -#: src/tools/dbcheck.c:1024 +#: src/filed/fd_plugins.c:977 #, c-format -msgid "Found %d orphaned FileSet records.\n" +msgid "Plugin createFile call failed. Returned CF_ERROR file=%s\n" msgstr "" -#: src/tools/dbcheck.c:1039 -#, c-format -msgid "Deleting %d orphaned FileSet records.\n" +#: src/filed/fd_plugins.c:1863 +msgid "Command plugin: no fname in baculaCheckChanges packet.\n" msgstr "" -#: src/tools/dbcheck.c:1048 +#: src/filed/restore.c:102 #, c-format -msgid "Checking for orphaned Client entries.\n" +msgid "Size of data or stream of %s not correct. Original %s, restored %s.\n" msgstr "" -#: src/tools/dbcheck.c:1066 +#: src/filed/restore.c:122 #, c-format -msgid "Found %d orphaned Client records.\n" +msgid "Invalid length of Finder Info (got %d, not 32)\n" msgstr "" -#: src/tools/dbcheck.c:1081 +#: src/filed/restore.c:127 +#, fuzzy, c-format +msgid "Could not set Finder Info on %s\n" +msgstr "Не вдалось перевстановити прапорці для файлу %s: ERR=%s\n" + +#: src/filed/restore.c:406 +#, fuzzy +msgid "LZO init failed\n" +msgstr "Невдале встановлення з'єднання TLS\n" + +#: src/filed/restore.c:474 src/filed/verify_vol.c:85 #, c-format -msgid "Deleting %d orphaned Client records.\n" +msgid "Record header scan error: %s\n" msgstr "" -#: src/tools/dbcheck.c:1090 +#: src/filed/restore.c:486 src/filed/verify_vol.c:94 #, c-format -msgid "Checking for orphaned Job entries.\n" +msgid "Data record error. ERR=%s\n" msgstr "" -#: src/tools/dbcheck.c:1108 +#: src/filed/restore.c:490 src/filed/verify_vol.c:98 #, c-format -msgid "Found %d orphaned Job records.\n" +msgid "Actual data size %d not same as header %d\n" msgstr "" -#: src/tools/dbcheck.c:1123 -#, c-format -msgid "Deleting %d orphaned Job records.\n" +#: src/filed/restore.c:651 +msgid "Unexpected cryptographic session data stream.\n" msgstr "" -#: src/tools/dbcheck.c:1125 -#, c-format -msgid "Deleting JobMedia records of orphaned Job records.\n" +#: src/filed/restore.c:661 +msgid "" +"No private decryption keys have been defined to decrypt encrypted backup " +"data.\n" msgstr "" -#: src/tools/dbcheck.c:1127 -#, c-format -msgid "Deleting Log records of orphaned Job records.\n" +#: src/filed/restore.c:672 +msgid "Could not create digest.\n" +msgstr "Не можливо створити відбиток.\n" + +#: src/filed/restore.c:690 +msgid "Missing private key required to decrypt encrypted backup data.\n" msgstr "" -#: src/tools/dbcheck.c:1136 -#, c-format -msgid "Checking for Admin Job entries.\n" +#: src/filed/restore.c:693 +msgid "Decrypt of the session key failed.\n" msgstr "" -#: src/tools/dbcheck.c:1145 -#, c-format -msgid "Found %d Admin Job records.\n" +#: src/filed/restore.c:696 +msgid "Signer not found. Decryption failed.\n" msgstr "" -#: src/tools/dbcheck.c:1160 +#: src/filed/restore.c:699 +#, fuzzy +msgid "Unsupported digest algorithm. Decrypt failed.\n" +msgstr "Відбиток" + +#: src/filed/restore.c:702 +#, fuzzy +msgid "Unsupported encryption algorithm. Decrypt failed.\n" +msgstr "Відбиток" + +#: src/filed/restore.c:706 #, c-format -msgid "Deleting %d Admin Job records.\n" +msgid "" +"An error=%d occurred while decoding encrypted session data stream: ERR=%s\n" msgstr "" -#: src/tools/dbcheck.c:1169 +#: src/filed/restore.c:774 src/filed/restore.c:828 #, c-format -msgid "Checking for Restore Job entries.\n" +msgid "Missing encryption session data stream for %s\n" msgstr "" -#: src/tools/dbcheck.c:1178 +#: src/filed/restore.c:782 src/filed/restore.c:835 #, c-format -msgid "Found %d Restore Job records.\n" +msgid "Failed to initialize decryption context for %s\n" msgstr "" -#: src/tools/dbcheck.c:1193 -#, c-format -msgid "Deleting %d Restore Job records.\n" +#: src/filed/restore.c:847 +#, fuzzy, c-format +msgid "Cannot open resource fork for %s.\n" +msgstr "Не вдається відкрити файл %s для виведення. ERR=%s\n" + +#: src/filed/restore.c:992 +msgid "Unexpected cryptographic signature data stream.\n" msgstr "" -#: src/tools/dbcheck.c:1203 +#: src/filed/restore.c:1000 #, c-format -msgid "Checking for Filenames with a trailing slash\n" +msgid "Failed to decode message signature for %s\n" msgstr "" -#: src/tools/dbcheck.c:1212 +#: src/filed/restore.c:1064 #, c-format -msgid "Found %d bad Filename records.\n" +msgid "Encountered %ld acl errors while doing restore\n" msgstr "" -#: src/tools/dbcheck.c:1230 src/tools/dbcheck.c:1296 +#: src/filed/restore.c:1068 #, c-format -msgid "Reparing %d bad Filename records.\n" +msgid "Encountered %ld xattr errors while doing restore\n" msgstr "" -#: src/tools/dbcheck.c:1270 +#: src/filed/restore.c:1072 #, c-format -msgid "Checking for Paths without a trailing slash\n" +msgid "" +"%d non-supported data streams and %d non-supported attrib streams ignored.\n" msgstr "" -#: src/tools/dbcheck.c:1279 +#: src/filed/restore.c:1076 #, c-format -msgid "Found %d bad Path records.\n" +msgid "%d non-supported resource fork streams ignored.\n" msgstr "" -#: src/tools/dbcheck.c:1442 +#: src/filed/restore.c:1079 #, c-format -msgid "" -"Ok. Index over the %s column already exists and dbcheck will work faster.\n" +msgid "%d non-supported Finder Info streams ignored.\n" msgstr "" -#: src/tools/dbcheck.c:1445 +#: src/filed/restore.c:1082 #, c-format -msgid "" -"Note. Index over the %s column not found, that can greatly slow down " -"dbcheck.\n" +msgid "%d non-supported acl streams ignored.\n" msgstr "" -#: src/tools/dbcheck.c:1460 +#: src/filed/restore.c:1085 #, c-format -msgid "Create temporary index... This may take some time!\n" +msgid "%d non-supported crypto streams ignored.\n" msgstr "" -#: src/tools/dbcheck.c:1468 +#: src/filed/restore.c:1088 #, c-format -msgid "Temporary index created.\n" +msgid "%d non-supported xattr streams ignored.\n" msgstr "" -#: src/tools/dbcheck.c:1483 -#, c-format -msgid "Drop temporary index.\n" +#: src/filed/restore.c:1168 +msgid "Zlib errno" msgstr "" -#: src/tools/dbcheck.c:1493 -#, c-format -msgid "Temporary index %s deleted.\n" +#: src/filed/restore.c:1170 +msgid "Zlib stream error" msgstr "" -#: src/filed/verify.c:57 -#, c-format -msgid "Cannot malloc %d network read buffer\n" +#: src/filed/restore.c:1172 +msgid "Zlib data error" msgstr "" -#: src/filed/verify.c:127 -#, c-format -msgid " Could not access %s: ERR=%s\n" +#: src/filed/restore.c:1174 +msgid "Zlib memory error" msgstr "" -#: src/filed/verify.c:134 -#, c-format -msgid " Could not follow link %s: ERR=%s\n" +#: src/filed/restore.c:1176 +msgid "Zlib buffer error" msgstr "" -#: src/filed/verify.c:141 -#, c-format -msgid " Could not stat %s: ERR=%s\n" +#: src/filed/restore.c:1178 +msgid "Zlib version error" msgstr "" -#: src/filed/verify.c:147 src/filed/backup.c:450 +#: src/filed/restore.c:1218 #, c-format -msgid " Unchanged file skipped: %s\n" +msgid "Missing cryptographic signature for %s\n" msgstr "" -#: src/filed/verify.c:150 +#: src/filed/restore.c:1251 src/filed/restore.c:1280 #, c-format -msgid " Archive file skipped: %s\n" +msgid "Signature validation failed for file %s: ERR=%s\n" msgstr "" -#: src/filed/verify.c:153 +#: src/filed/restore.c:1268 #, c-format -msgid " Recursion turned off. Directory skipped: %s\n" +msgid "Digest one file failed for file: %s\n" msgstr "" -#: src/filed/verify.c:157 +#: src/filed/restore.c:1307 #, c-format -msgid " File system change prohibited. Directory skipped: %s\n" +msgid "Signature validation failed for %s: %s\n" msgstr "" -#: src/filed/verify.c:165 +#: src/filed/restore.c:1404 +#, fuzzy, c-format +msgid "LZO uncompression error on file %s. ERR=%d\n" +msgstr "Помилка у %s файл %s: ERR=%s\n" + +#: src/filed/restore.c:1441 #, c-format -msgid " Could not open directory %s: ERR=%s\n" +msgid "Uncompression error on file %s. ERR=%s\n" msgstr "" -#: src/filed/verify.c:170 +#: src/filed/restore.c:1476 #, c-format -msgid " Unknown file type %d: %s\n" +msgid "Write error in Win32 Block Decomposition on %s: %s\n" msgstr "" -#: src/filed/verify.c:214 src/filed/verify_vol.c:206 +#: src/filed/restore.c:1501 #, c-format -msgid "Network error in send to Director: ERR=%s\n" +msgid "Wrong write size error at %lld block=%d wanted=%d wrote=%d\n" msgstr "" -#: src/filed/verify.c:247 src/filed/accurate.c:429 src/filed/backup.c:506 +#: src/filed/restore.c:1505 #, c-format -msgid "%s digest initialization failed\n" -msgstr "Невдала ініціалізація відбитку %s\n" +msgid "" +"Write write error at %lld block=%d write_len=%d lerror=%d on %s: ERR=%s\n" +msgstr "" -#: src/filed/verify.c:309 -#, c-format -msgid " Cannot open %s: ERR=%s.\n" +#: src/filed/restore.c:1565 +msgid "Decryption error\n" msgstr "" -#: src/filed/verify.c:323 -#, c-format -msgid " Cannot open resource fork for %s: ERR=%s.\n" +#: src/filed/restore.c:1658 +msgid "Logic error: output file should be open\n" msgstr "" -#: src/filed/verify.c:386 -#, c-format -msgid "Error reading file %s: ERR=%s\n" +#: src/filed/restore.c:1696 +msgid "Logic error: output file should not be open\n" msgstr "" -#: src/filed/accurate.c:201 +#: src/filed/restore.c:1730 #, c-format -msgid "Space saved with Base jobs: %lld MB\n" +msgid "Decryption error. buf_len=%d decrypt_len=%d on file %s\n" msgstr "" -#: src/filed/accurate.c:400 -#, fuzzy, c-format -msgid "Cannot verify checksum for %s\n" -msgstr "Не вдається відкрити файл %s для виведення. ERR=%s\n" +#: src/filed/restore.c:1851 +msgid "Open File Manager paused\n" +msgstr "" -#: src/filed/accurate.c:508 -msgid "2991 Bad accurate command\n" +#: src/filed/restore.c:1855 +msgid "FAILED to pause Open File Manager\n" msgstr "" -#: src/filed/status.c:89 +#: src/filed/restore.c:1863 #, c-format -msgid "Daemon started %s. Jobs: run=%d running=%d.\n" +msgid "Running as '%s'. Privmask=%#08x\n" msgstr "" -#: src/filed/status.c:149 -#, c-format -msgid " Sizeof: boffset_t=%d size_t=%d debug=%d trace=%d " +#: src/filed/restore.c:1865 +msgid "Failed to retrieve current UserName\n" +msgstr "" + +#: src/filed/verify_vol.c:51 +msgid "Storage command not issued before Verify.\n" msgstr "" -#: src/filed/status.c:194 +#: src/filed/verify_vol.c:131 #, c-format -msgid "Director connected at: %s\n" +msgid "Error scanning record header: %s\n" msgstr "" -#: src/filed/status.c:196 +#: src/filed/verify_vol.c:194 src/filed/verify.c:202 #, c-format -msgid "JobId %d Job %s is running.\n" +msgid "Network error in send to Director: ERR=%s\n" msgstr "" -#: src/filed/status.c:199 +#: src/filed/authenticate.c:63 #, c-format -msgid " %s%s %s Job started: %s\n" +msgid "I only authenticate directors, not %d\n" msgstr "" -#: src/filed/status.c:212 +#: src/filed/authenticate.c:88 #, c-format -msgid " Files=%s Bytes=%s Bytes/sec=%s Errors=%d\n" +msgid "Connection from unknown Director %s at %s rejected.\n" msgstr "" -#: src/filed/status.c:218 +#: src/filed/authenticate.c:132 #, c-format -msgid " Files Examined=%s\n" +msgid "Incorrect password given by Director at %s.\n" msgstr "" -#: src/filed/status.c:223 +#: src/filed/verify.c:45 #, c-format -msgid " Processing file: %s\n" +msgid "Cannot malloc %d network read buffer\n" msgstr "" -#: src/filed/status.c:234 -msgid " SDSocket closed.\n" +#: src/filed/verify.c:115 +#, c-format +msgid " Could not access %s: ERR=%s\n" msgstr "" -#: src/filed/status.c:244 src/filed/status.c:335 src/filed/status.c:409 -msgid "====\n" +#: src/filed/verify.c:122 +#, c-format +msgid " Could not follow link %s: ERR=%s\n" msgstr "" -#: src/filed/status.c:306 -msgid " SDSocket=closed\n" +#: src/filed/verify.c:129 +#, c-format +msgid " Could not stat %s: ERR=%s\n" msgstr "" -#: src/filed/status.c:463 src/filed/status.c:496 +#: src/filed/verify.c:135 src/filed/backup.c:449 #, c-format -msgid "Bad .status command: %s\n" +msgid " Unchanged file skipped: %s\n" msgstr "" -#: src/filed/status.c:464 -msgid "2900 Bad .status command, missing argument.\n" +#: src/filed/verify.c:138 +#, c-format +msgid " Archive file skipped: %s\n" msgstr "" -#: src/filed/status.c:497 -msgid "2900 Bad .status command, wrong argument.\n" +#: src/filed/verify.c:141 +#, c-format +msgid " Recursion turned off. Directory skipped: %s\n" msgstr "" -#: src/filed/status.c:565 -msgid "Bacula Client: Idle" +#: src/filed/verify.c:145 +#, c-format +msgid " File system change prohibited. Directory skipped: %s\n" msgstr "" -#: src/filed/status.c:576 -msgid "Bacula Client: Running" +#: src/filed/verify.c:153 +#, c-format +msgid " Could not open directory %s: ERR=%s\n" msgstr "" -#: src/filed/status.c:590 -msgid "Bacula Client: Last Job Canceled" +#: src/filed/verify.c:158 +#, c-format +msgid " Unknown file type %d: %s\n" msgstr "" -#: src/filed/status.c:594 -msgid "Bacula Client: Last Job Failed" +#: src/filed/verify.c:297 +#, c-format +msgid " Cannot open %s: ERR=%s.\n" msgstr "" -#: src/filed/status.c:598 -msgid "Bacula Client: Last Job had Warnings" +#: src/filed/verify.c:311 +#, c-format +msgid " Cannot open resource fork for %s: ERR=%s.\n" msgstr "" -#: src/filed/xattr.c:97 src/filed/xattr.c:112 src/filed/xattr.c:120 -#: src/filed/fd_plugins.c:789 src/filed/fd_plugins.c:805 src/filed/acl.c:108 -#: src/filed/acl.c:123 src/filed/acl.c:131 src/filed/backup.c:999 -#: src/filed/backup.c:1199 src/filed/backup.c:1236 src/filed/backup.c:1249 -#: src/filed/backup.c:1325 src/filed/backup.c:1424 +#: src/filed/verify.c:374 #, c-format -msgid "Network send error to SD. ERR=%s\n" +msgid "Error reading file %s: ERR=%s\n" msgstr "" -#: src/filed/xattr.c:245 +#: src/filed/xattr.c:233 #, c-format msgid "Illegal xattr stream, no XATTR_MAGIC on file \"%s\"\n" msgstr "" -#: src/filed/xattr.c:259 +#: src/filed/xattr.c:247 #, c-format msgid "Illegal xattr stream, xattr name length <= 0 on file \"%s\"\n" msgstr "" -#: src/filed/xattr.c:381 src/filed/xattr.c:417 +#: src/filed/xattr.c:369 src/filed/xattr.c:405 #, fuzzy, c-format msgid "llistea error on file \"%s\": ERR=%s\n" msgstr "Помилка у %s файл %s: ERR=%s\n" -#: src/filed/xattr.c:467 src/filed/xattr.c:520 +#: src/filed/xattr.c:455 src/filed/xattr.c:509 #, fuzzy, c-format msgid "lgetea error on file \"%s\": ERR=%s\n" msgstr "Помилка у %s файл %s: ERR=%s\n" -#: src/filed/xattr.c:556 src/filed/xattr.c:877 src/filed/xattr.c:1352 -#: src/filed/xattr.c:1820 src/filed/xattr.c:2176 src/filed/xattr.c:2968 +#: src/filed/xattr.c:545 src/filed/xattr.c:867 src/filed/xattr.c:1342 +#: src/filed/xattr.c:1810 src/filed/xattr.c:2167 src/filed/xattr.c:2959 #, c-format msgid "Xattr stream on file \"%s\" exceeds maximum size of %d bytes\n" msgstr "" -#: src/filed/xattr.c:576 src/filed/xattr.c:903 src/filed/xattr.c:1372 -#: src/filed/xattr.c:1850 src/filed/xattr.c:2193 +#: src/filed/xattr.c:565 src/filed/xattr.c:893 src/filed/xattr.c:1362 +#: src/filed/xattr.c:1840 src/filed/xattr.c:2184 #, c-format msgid "Failed to serialize extended attributes on file \"%s\"\n" msgstr "" -#: src/filed/xattr.c:643 +#: src/filed/xattr.c:632 #, fuzzy, c-format msgid "lsetea error on file \"%s\": ERR=%s\n" msgstr "Помилка у %s файл %s: ERR=%s\n" -#: src/filed/xattr.c:731 src/filed/xattr.c:769 src/filed/xattr.c:832 -#: src/filed/xattr.c:844 +#: src/filed/xattr.c:720 src/filed/xattr.c:758 src/filed/xattr.c:822 +#: src/filed/xattr.c:834 #, fuzzy, c-format msgid "attr_list error on file \"%s\": ERR=%s\n" msgstr "Помилка у %s файл %s: ERR=%s\n" -#: src/filed/xattr.c:968 +#: src/filed/xattr.c:958 #, c-format msgid "Received illegal xattr named %s on file \"%s\"\n" msgstr "" -#: src/filed/xattr.c:1001 src/filed/xattr.c:1011 +#: src/filed/xattr.c:991 src/filed/xattr.c:1001 #, fuzzy, c-format msgid "attr_set error on file \"%s\": ERR=%s\n" msgstr "Помилка у %s файл %s: ERR=%s\n" -#: src/filed/xattr.c:1161 src/filed/xattr.c:1196 +#: src/filed/xattr.c:1151 src/filed/xattr.c:1186 #, c-format msgid "llistxattr error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/xattr.c:1264 src/filed/xattr.c:1316 +#: src/filed/xattr.c:1254 src/filed/xattr.c:1306 #, c-format msgid "lgetxattr error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/xattr.c:1435 +#: src/filed/xattr.c:1425 #, c-format msgid "lsetxattr error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/xattr.c:1593 src/filed/xattr.c:1628 +#: src/filed/xattr.c:1583 src/filed/xattr.c:1618 #, fuzzy, c-format msgid "extattr_list_link error on file \"%s\": ERR=%s\n" msgstr "Помилка у %s файл %s: ERR=%s\n" -#: src/filed/xattr.c:1648 +#: src/filed/xattr.c:1638 #, c-format msgid "Failed to convert %d into namespace on file \"%s\"\n" msgstr "" -#: src/filed/xattr.c:1728 src/filed/xattr.c:1783 +#: src/filed/xattr.c:1718 src/filed/xattr.c:1773 #, fuzzy, c-format msgid "extattr_get_link error on file \"%s\": ERR=%s\n" msgstr "Помилка у %s файл %s: ERR=%s\n" -#: src/filed/xattr.c:1907 +#: src/filed/xattr.c:1897 #, c-format msgid "Failed to split %s into namespace and name part on file \"%s\"\n" msgstr "" -#: src/filed/xattr.c:1920 +#: src/filed/xattr.c:1910 #, c-format msgid "Failed to convert %s into namespace on file \"%s\"\n" msgstr "" -#: src/filed/xattr.c:1941 +#: src/filed/xattr.c:1931 #, fuzzy, c-format msgid "extattr_set_link error on file \"%s\": ERR=%s\n" msgstr "Помилка у %s файл %s: ERR=%s\n" -#: src/filed/xattr.c:2044 src/filed/xattr.c:2069 +#: src/filed/xattr.c:2034 src/filed/xattr.c:2059 #, fuzzy, c-format msgid "getproplist error on file \"%s\": ERR=%s\n" msgstr "Помилка у %s файл %s: ERR=%s\n" -#: src/filed/xattr.c:2262 +#: src/filed/xattr.c:2253 #, c-format msgid "Unable create proper proplist to restore xattrs on file \"%s\"\n" msgstr "" -#: src/filed/xattr.c:2291 +#: src/filed/xattr.c:2282 #, fuzzy, c-format msgid "setproplist error on file \"%s\": ERR=%s\n" msgstr "Помилка у %s файл %s: ERR=%s\n" -#: src/filed/xattr.c:2609 src/filed/xattr.c:2662 +#: src/filed/xattr.c:2600 src/filed/xattr.c:2653 #, c-format msgid "Unable to get acl on xattr %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/xattr.c:2679 +#: src/filed/xattr.c:2670 #, c-format msgid "Unable to get acl text on xattr %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/xattr.c:2753 +#: src/filed/xattr.c:2744 #, c-format msgid "Unable to get status on xattr %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/xattr.c:2886 +#: src/filed/xattr.c:2877 #, c-format msgid "Unable to open xattr %s on \"%s\": ERR=%s\n" msgstr "" -#: src/filed/xattr.c:2909 +#: src/filed/xattr.c:2900 #, c-format msgid "Unable to read symlin %s on \"%s\": ERR=%s\n" msgstr "" -#: src/filed/xattr.c:2984 +#: src/filed/xattr.c:2975 #, c-format msgid "Unable to read content of xattr %s on file \"%s\"\n" msgstr "" -#: src/filed/xattr.c:3024 +#: src/filed/xattr.c:3015 #, c-format msgid "Unable to chdir to xattr space of file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/xattr.c:3081 src/filed/xattr.c:3330 +#: src/filed/xattr.c:3072 src/filed/xattr.c:3321 #, c-format msgid "Unable to open file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/xattr.c:3109 src/filed/xattr.c:3391 +#: src/filed/xattr.c:3100 src/filed/xattr.c:3382 #, c-format msgid "Unable to open xattr space %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/xattr.c:3125 src/filed/xattr.c:3355 +#: src/filed/xattr.c:3116 src/filed/xattr.c:3346 #, c-format msgid "Unable to chdir to xattr space on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/xattr.c:3146 +#: src/filed/xattr.c:3137 #, c-format msgid "Unable to list the xattr space on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/xattr.c:3238 +#: src/filed/xattr.c:3229 #, c-format msgid "Unable to convert acl from text on file \"%s\"\n" msgstr "" -#: src/filed/xattr.c:3248 src/filed/xattr.c:3271 +#: src/filed/xattr.c:3239 src/filed/xattr.c:3262 #, c-format msgid "Unable to restore acl of xattr %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/xattr.c:3344 +#: src/filed/xattr.c:3335 #, c-format msgid "Unable to open xattr space on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/xattr.c:3374 src/filed/xattr.c:3536 +#: src/filed/xattr.c:3365 src/filed/xattr.c:3527 #, c-format msgid "Unable to open xattr %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/xattr.c:3408 +#: src/filed/xattr.c:3399 #, c-format msgid "Unable to chdir to xattr space %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/xattr.c:3448 +#: src/filed/xattr.c:3439 #, c-format msgid "Unable to mkfifo xattr %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/xattr.c:3466 +#: src/filed/xattr.c:3457 #, c-format msgid "Unable to mknod xattr %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/xattr.c:3484 +#: src/filed/xattr.c:3475 #, c-format msgid "Unable to mkdir xattr %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/xattr.c:3504 +#: src/filed/xattr.c:3495 #, c-format msgid "Unable to link xattr %s to %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/xattr.c:3557 +#: src/filed/xattr.c:3548 #, c-format msgid "" "Unable to restore data of xattr %s on file \"%s\": Not all data available in " "xattr stream\n" msgstr "" -#: src/filed/xattr.c:3570 +#: src/filed/xattr.c:3561 #, c-format msgid "Unable to restore data of xattr %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/xattr.c:3593 +#: src/filed/xattr.c:3584 #, c-format msgid "Unable to symlink xattr %s to %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/xattr.c:3629 +#: src/filed/xattr.c:3620 #, c-format msgid "Unable to restore owner of xattr %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/xattr.c:3657 +#: src/filed/xattr.c:3648 #, c-format msgid "Unable to restore filetimes of xattr %s on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/xattr.c:3673 +#: src/filed/xattr.c:3664 #, c-format msgid "Illegal xattr stream, failed to parse xattr stream on file \"%s\"\n" msgstr "" -#: src/filed/xattr.c:3734 +#: src/filed/xattr.c:3725 #, c-format msgid "Failed to restore extensible attributes on file \"%s\"\n" msgstr "" -#: src/filed/xattr.c:3747 +#: src/filed/xattr.c:3738 #, c-format msgid "Failed to restore extended attributes on file \"%s\"\n" msgstr "" -#: src/filed/xattr.c:3841 src/filed/acl.c:2265 +#: src/filed/xattr.c:3832 src/filed/acl.c:2253 #, fuzzy, c-format msgid "Unable to stat file \"%s\": ERR=%s\n" msgstr "Не можливо встановити власника файлу %s: ERR=%s\n" -#: src/filed/xattr.c:3891 +#: src/filed/xattr.c:3882 #, c-format msgid "" "Can't restore Extended Attributes of %s - incompatible xattr stream " "encountered - %d\n" msgstr "" -#: src/filed/fd_plugins.c:550 src/filed/fd_plugins.c:694 +#: src/filed/backup.c:90 +msgid "Cannot set buffer size FD->SD.\n" +msgstr "" + +#: src/filed/backup.c:182 #, c-format -msgid "Command plugin \"%s\": no type in startBackupFile packet.\n" +msgid "Encountered %ld acl errors while doing backup\n" msgstr "" -#: src/filed/fd_plugins.c:563 +#: src/filed/backup.c:186 #, c-format -msgid "Command plugin \"%s\": no object_name in startBackupFile packet.\n" +msgid "Encountered %ld xattr errors while doing backup\n" +msgstr "" + +#: src/filed/backup.c:253 +#, fuzzy +msgid "Unsupported cipher on this system.\n" +msgstr "Цей тип відбитку не підтримується: %d\n" + +#: src/filed/backup.c:259 src/filed/backup.c:268 +msgid "An error occurred while encrypting the stream.\n" msgstr "" -#: src/filed/fd_plugins.c:576 src/filed/fd_plugins.c:701 +#: src/filed/backup.c:386 #, c-format -msgid "Command plugin \"%s\": no fname in startBackupFile packet.\n" +msgid " Recursion turned off. Will not descend from %s into %s\n" msgstr "" -#: src/filed/fd_plugins.c:775 -msgid "Plugin save packet not found.\n" +#: src/filed/backup.c:393 +#, c-format +msgid " %s is a different filesystem. Will not descend from %s into it.\n" msgstr "" -#: src/filed/fd_plugins.c:910 +#: src/filed/backup.c:399 #, c-format -msgid "Plugin=%s not found.\n" +msgid " Disallowed filesystem. Will not descend from %s into %s\n" +msgstr "" + +#: src/filed/backup.c:404 +#, c-format +msgid " Disallowed drive type. Will not descend into %s\n" +msgstr "" + +#: src/filed/backup.c:415 +#, c-format +msgid " Socket file skipped: %s\n" +msgstr "" + +#: src/filed/backup.c:428 +#, c-format +msgid " Could not access \"%s\": ERR=%s\n" +msgstr "" + +#: src/filed/backup.c:435 +#, c-format +msgid " Could not follow link \"%s\": ERR=%s\n" +msgstr "" + +#: src/filed/backup.c:442 +#, c-format +msgid " Could not stat \"%s\": ERR=%s\n" +msgstr "" + +#: src/filed/backup.c:452 +#, c-format +msgid " Archive file not saved: %s\n" +msgstr "" + +#: src/filed/backup.c:456 +#, c-format +msgid " Could not open directory \"%s\": ERR=%s\n" +msgstr "" + +#: src/filed/backup.c:465 +#, c-format +msgid " Unknown file type %d; not saved: %s\n" +msgstr "" + +#: src/filed/backup.c:521 +#, c-format +msgid "%s signature digest initialization failed\n" msgstr "" -#: src/filed/fd_plugins.c:977 +#: src/filed/backup.c:629 #, c-format -msgid "Plugin createFile call failed. Stat=%d file=%s\n" +msgid " Cannot open \"%s\": ERR=%s.\n" msgstr "" -#: src/filed/fd_plugins.c:982 +#: src/filed/backup.c:666 #, c-format -msgid "Plugin createFile call failed. Returned CF_ERROR file=%s\n" +msgid " Cannot open resource fork for \"%s\": ERR=%s.\n" msgstr "" -#: src/filed/fd_plugins.c:1859 -msgid "Command plugin: no fname in baculaCheckChanges packet.\n" +#: src/filed/backup.c:762 +msgid "Failed to allocate memory for crypto signature.\n" msgstr "" -#: src/filed/filed.c:76 -#, c-format -msgid "" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: bacula-fd [-f -s] [-c config_file] [-d debug_level]\n" -" -c use as configuration file\n" -" -d set debug level to \n" -" -dt print a timestamp in debug output\n" -" -f run in foreground (for debugging)\n" -" -g groupid\n" -" -k keep readall capabilities\n" -" -m print kaboom output (for debugging)\n" -" -s no signals (for debugging)\n" -" -t test configuration file and exit\n" -" -u userid\n" -" -v verbose user messages\n" -" -? print this message.\n" -"\n" +#: src/filed/backup.c:767 +msgid "An error occurred while adding signer the stream.\n" msgstr "" -#: src/filed/filed.c:199 -msgid "-k option has no meaning without -u option.\n" +#: src/filed/backup.c:773 src/filed/backup.c:788 +msgid "An error occurred while signing the stream.\n" msgstr "" -#: src/filed/filed.c:337 -#, c-format -msgid "" -"No File daemon resource defined in %s\n" -"Without that I don't know who I am :-(\n" +#: src/filed/backup.c:812 +msgid "An error occurred finalizing signing the stream.\n" msgstr "" -#: src/filed/filed.c:342 +#: src/filed/backup.c:931 #, c-format -msgid "Only one Client resource permitted in %s\n" +msgid "Compression deflateParams error: %d\n" msgstr "" -#: src/filed/filed.c:366 -#, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"File daemon in %s.\n" +#: src/filed/backup.c:968 +msgid "Encrypting sparse or offset data not supported.\n" msgstr "" -#: src/filed/filed.c:390 -msgid "PKI encryption/signing enabled but not compiled into Bacula.\n" +#: src/filed/backup.c:975 +msgid "Failed to initialize encryption context.\n" msgstr "" -#: src/filed/filed.c:401 +#: src/filed/backup.c:1086 #, c-format -msgid "" -"\"PKI Key Pair\" must be defined for File daemon \"%s\" in %s if either " -"\"PKI Sign\" or \"PKI Encrypt\" are enabled.\n" +msgid "Compression deflate error: %d\n" msgstr "" -#: src/filed/filed.c:413 src/filed/filed.c:444 src/filed/filed.c:485 -msgid "Failed to allocate a new keypair object.\n" +#: src/filed/backup.c:1093 +#, c-format +msgid "Compression deflateReset error: %d\n" msgstr "" -#: src/filed/filed.c:417 +#: src/filed/backup.c:1126 #, c-format -msgid "Failed to load public certificate for File daemon \"%s\" in %s.\n" +msgid "Compression LZO error: %d\n" msgstr "" -#: src/filed/filed.c:423 -#, c-format -msgid "Failed to load private key for File daemon \"%s\" in %s.\n" +#: src/filed/backup.c:1171 src/filed/backup.c:1187 +msgid "Encryption error\n" msgstr "" -#: src/filed/filed.c:453 +#: src/filed/backup.c:1213 #, c-format -msgid "Failed to load private key from file %s for File daemon \"%s\" in %s.\n" +msgid "Read error on file %s. ERR=%s\n" msgstr "" -#: src/filed/filed.c:460 +#: src/filed/backup.c:1216 #, c-format -msgid "" -"Failed to load trusted signer certificate from file %s for File daemon \"%s" -"\" in %s.\n" +msgid "Too many errors. JobErrors=%d.\n" msgstr "" -#: src/filed/filed.c:491 -#, c-format -msgid "" -"Failed to load master key certificate from file %s for File daemon \"%s\" in " -"%s.\n" +#: src/filed/backup.c:1226 +msgid "Encryption padding error\n" +msgstr "" + +#: src/filed/backup.c:1290 +msgid "Invalid file flags, no supported data stream type.\n" msgstr "" -#: src/filed/filed.c:507 +#: src/filed/backup.c:1548 #, c-format -msgid "No Director resource defined in %s\n" +msgid "VSS Writer (BackupComplete): %s\n" msgstr "" -#: src/filed/acl.c:229 src/filed/acl.c:254 +#: src/filed/acl.c:217 src/filed/acl.c:242 #, fuzzy, c-format msgid "aclx_get error on file \"%s\": ERR=%s\n" msgstr "Помилка у %s файл %s: ERR=%s\n" -#: src/filed/acl.c:280 +#: src/filed/acl.c:268 #, fuzzy, c-format msgid "Unknown acl type encountered on file \"%s\": %ld\n" msgstr "Невідомий тип файлу %d: не відновлено: %s\n" -#: src/filed/acl.c:304 src/filed/acl.c:313 +#: src/filed/acl.c:292 src/filed/acl.c:301 #, fuzzy, c-format msgid "Failed to convert acl into text on file \"%s\"\n" msgstr "Ініціалізація контексту TLS для Консолі невдала \"%s\".\n" -#: src/filed/acl.c:386 +#: src/filed/acl.c:374 #, c-format msgid "" "Trying to restore POSIX acl on file \"%s\" on filesystem without AIXC acl " "support\n" msgstr "" -#: src/filed/acl.c:394 +#: src/filed/acl.c:382 #, c-format msgid "" "Trying to restore NFSv4 acl on file \"%s\" on filesystem without NFS4 acl " "support\n" msgstr "" -#: src/filed/acl.c:442 src/filed/acl.c:452 +#: src/filed/acl.c:430 src/filed/acl.c:440 #, fuzzy, c-format msgid "aclx_scanStr error on file \"%s\": ERR=%s\n" msgstr "Помилка у %s файл %s: ERR=%s\n" -#: src/filed/acl.c:478 +#: src/filed/acl.c:466 #, fuzzy, c-format msgid "aclx_put error on file \"%s\": ERR=%s\n" msgstr "Помилка у %s файл %s: ERR=%s\n" -#: src/filed/acl.c:823 +#: src/filed/acl.c:811 #, c-format msgid "acl_to_text error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/acl.c:853 +#: src/filed/acl.c:841 #, c-format msgid "acl_get_file error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/acl.c:906 +#: src/filed/acl.c:894 #, c-format msgid "" "acl_delete_def_file error on file \"%s\": filesystem doesn't support ACLs\n" msgstr "" -#: src/filed/acl.c:912 +#: src/filed/acl.c:900 #, c-format msgid "acl_delete_def_file error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/acl.c:923 +#: src/filed/acl.c:911 #, c-format msgid "acl_from_text error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/acl.c:939 +#: src/filed/acl.c:927 #, fuzzy, c-format msgid "acl_valid error on file \"%s\": ERR=%s\n" msgstr "Помилка у %s файл %s: ERR=%s\n" -#: src/filed/acl.c:971 +#: src/filed/acl.c:959 #, c-format msgid "acl_set_file error on file \"%s\": filesystem doesn't support ACLs\n" msgstr "" -#: src/filed/acl.c:980 +#: src/filed/acl.c:968 #, c-format msgid "acl_set_file error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/acl.c:1087 src/filed/acl.c:1116 src/filed/acl.c:1230 -#: src/filed/acl.c:1738 src/filed/acl.c:1845 +#: src/filed/acl.c:1075 src/filed/acl.c:1104 src/filed/acl.c:1218 +#: src/filed/acl.c:1726 src/filed/acl.c:1833 #, c-format msgid "pathconf error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/acl.c:1246 +#: src/filed/acl.c:1234 #, c-format msgid "" "Trying to restore acl on file \"%s\" on filesystem without %s acl support\n" msgstr "" -#: src/filed/acl.c:1531 +#: src/filed/acl.c:1519 #, c-format msgid "getacl error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/acl.c:1566 +#: src/filed/acl.c:1554 #, c-format msgid "acltostr error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/acl.c:1588 src/filed/acl.c:1598 +#: src/filed/acl.c:1576 src/filed/acl.c:1586 #, c-format msgid "strtoacl error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/acl.c:1627 +#: src/filed/acl.c:1615 #, c-format msgid "setacl error on file \"%s\": filesystem doesn't support ACLs\n" msgstr "" -#: src/filed/acl.c:1635 +#: src/filed/acl.c:1623 #, c-format msgid "setacl error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/acl.c:1760 +#: src/filed/acl.c:1748 #, c-format msgid "acl_get error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/acl.c:1834 +#: src/filed/acl.c:1822 #, c-format msgid "" "Trying to restore acl on file \"%s\" on filesystem without acl support\n" msgstr "" -#: src/filed/acl.c:1863 +#: src/filed/acl.c:1851 #, c-format msgid "" "Trying to restore POSIX acl on file \"%s\" on filesystem without aclent acl " "support\n" msgstr "" -#: src/filed/acl.c:1874 +#: src/filed/acl.c:1862 #, c-format msgid "" "Trying to restore NFSv4 acl on file \"%s\" on filesystem without ace acl " "support\n" msgstr "" -#: src/filed/acl.c:1890 +#: src/filed/acl.c:1878 #, c-format msgid "acl_fromtext error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/acl.c:1904 src/filed/acl.c:1912 +#: src/filed/acl.c:1892 src/filed/acl.c:1900 #, c-format msgid "wrong encoding of acl type in acl stream on file \"%s\"\n" msgstr "" -#: src/filed/acl.c:1937 +#: src/filed/acl.c:1925 #, c-format msgid "acl_set error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/acl.c:2023 +#: src/filed/acl.c:2011 #, c-format msgid "acltotext error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/acl.c:2046 +#: src/filed/acl.c:2034 #, c-format msgid "aclfromtext error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/acl.c:2066 +#: src/filed/acl.c:2054 #, c-format msgid "acl(SETACL) error on file \"%s\": ERR=%s\n" msgstr "" -#: src/filed/acl.c:2132 +#: src/filed/acl.c:2120 #, fuzzy, c-format msgid "pioctl VIOCGETAL error on file \"%s\": ERR=%s\n" msgstr "Помилка у %s файл %s: ERR=%s\n" -#: src/filed/acl.c:2160 +#: src/filed/acl.c:2148 #, fuzzy, c-format msgid "pioctl VIOCSETAL error on file \"%s\": ERR=%s\n" msgstr "Помилка у %s файл %s: ERR=%s\n" -#: src/filed/acl.c:2363 +#: src/filed/acl.c:2351 #, c-format msgid "Can't restore ACLs of %s - incompatible acl stream encountered - %d\n" msgstr "" -#: src/filed/verify_vol.c:63 -msgid "Storage command not issued before Verify.\n" -msgstr "" - -#: src/filed/verify_vol.c:97 src/filed/restore.c:486 -#, c-format -msgid "Record header scan error: %s\n" -msgstr "" - -#: src/filed/verify_vol.c:106 src/filed/restore.c:498 -#, c-format -msgid "Data record error. ERR=%s\n" -msgstr "" - -#: src/filed/verify_vol.c:110 src/filed/restore.c:502 -#, c-format -msgid "Actual data size %d not same as header %d\n" -msgstr "" - -#: src/filed/verify_vol.c:143 -#, c-format -msgid "Error scanning record header: %s\n" -msgstr "" - -#: src/filed/backup.c:102 -msgid "Cannot set buffer size FD->SD.\n" -msgstr "" - -#: src/filed/backup.c:194 -#, c-format -msgid "Encountered %ld acl errors while doing backup\n" -msgstr "" - -#: src/filed/backup.c:198 -#, c-format -msgid "Encountered %ld xattr errors while doing backup\n" -msgstr "" - -#: src/filed/backup.c:267 src/filed/backup.c:276 -msgid "An error occurred while encrypting the stream.\n" -msgstr "" - -#: src/filed/backup.c:387 -#, c-format -msgid " Recursion turned off. Will not descend from %s into %s\n" -msgstr "" - -#: src/filed/backup.c:394 -#, c-format -msgid " %s is a different filesystem. Will not descend from %s into it.\n" -msgstr "" - -#: src/filed/backup.c:400 -#, c-format -msgid " Disallowed filesystem. Will not descend from %s into %s\n" -msgstr "" - -#: src/filed/backup.c:405 -#, c-format -msgid " Disallowed drive type. Will not descend into %s\n" -msgstr "" - -#: src/filed/backup.c:416 -#, c-format -msgid " Socket file skipped: %s\n" -msgstr "" - -#: src/filed/backup.c:429 -#, c-format -msgid " Could not access \"%s\": ERR=%s\n" -msgstr "" - -#: src/filed/backup.c:436 -#, c-format -msgid " Could not follow link \"%s\": ERR=%s\n" -msgstr "" - -#: src/filed/backup.c:443 -#, c-format -msgid " Could not stat \"%s\": ERR=%s\n" -msgstr "" - -#: src/filed/backup.c:453 -#, c-format -msgid " Archive file not saved: %s\n" -msgstr "" - -#: src/filed/backup.c:457 -#, c-format -msgid " Could not open directory \"%s\": ERR=%s\n" -msgstr "" - -#: src/filed/backup.c:466 -#, c-format -msgid " Unknown file type %d; not saved: %s\n" -msgstr "" - -#: src/filed/backup.c:522 -#, c-format -msgid "%s signature digest initialization failed\n" -msgstr "" - -#: src/filed/backup.c:630 -#, c-format -msgid " Cannot open \"%s\": ERR=%s.\n" -msgstr "" - -#: src/filed/backup.c:667 -#, c-format -msgid " Cannot open resource fork for \"%s\": ERR=%s.\n" -msgstr "" - -#: src/filed/backup.c:763 -msgid "Failed to allocate memory for crypto signature.\n" -msgstr "" - -#: src/filed/backup.c:768 src/filed/backup.c:774 src/filed/backup.c:789 -msgid "An error occurred while signing the stream.\n" +#: src/filed/filed.c:52 +#, fuzzy, c-format +msgid "" +"\n" +"%sVersion: %s (%s)\n" +"\n" +"Usage: bacula-fd [-f -s] [-c config_file] [-d debug_level]\n" +" -c use as configuration file\n" +" -d [,] set debug level to , debug tags to \n" +" -dt print a timestamp in debug output\n" +" -f run in foreground (for debugging)\n" +" -g groupid\n" +" -k keep readall capabilities\n" +" -m print kaboom output (for debugging)\n" +" -s no signals (for debugging)\n" +" -t test configuration file and exit\n" +" -T set trace on\n" +" -u userid\n" +" -v verbose user messages\n" +" -? print this message.\n" +"\n" msgstr "" +"\n" +"Версія: %s (%s) %s %s %s\n" +"\n" +"Використання: bat [-s] [-c config_file] [-d debug_level] [config_file]\n" +" -c set configuration file to file\n" +" -dnn set debug level to nn\n" +" -s без сигналів\n" +" -t перевірка - прочитати конфігурацію і вийти\n" +" -? print this message.\n" +"\n" -#: src/filed/backup.c:813 -msgid "An error occurred finalizing signing the stream.\n" +#: src/filed/filed.c:185 +msgid "-k option has no meaning without -u option.\n" msgstr "" -#: src/filed/backup.c:931 +#: src/filed/filed.c:315 #, c-format -msgid "Compression deflateParams error: %d\n" -msgstr "" - -#: src/filed/backup.c:968 -msgid "Encrypting sparse or offset data not supported.\n" -msgstr "" - -#: src/filed/backup.c:975 -msgid "Failed to initialize encryption context.\n" +msgid "" +"No File daemon resource defined in %s\n" +"Without that I don't know who I am :-(\n" msgstr "" -#: src/filed/backup.c:1085 +#: src/filed/filed.c:320 #, c-format -msgid "Compression deflate error: %d\n" +msgid "Only one Client resource permitted in %s\n" msgstr "" -#: src/filed/backup.c:1092 +#: src/filed/filed.c:348 src/filed/filed.c:547 #, c-format -msgid "Compression deflateReset error: %d\n" +msgid "Disable Command \"%s\" not found.\n" msgstr "" -#: src/filed/backup.c:1126 +#: src/filed/filed.c:375 #, c-format -msgid "Compression LZO error: %d\n" -msgstr "" - -#: src/filed/backup.c:1171 src/filed/backup.c:1187 -msgid "Encryption error\n" +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"File daemon in %s.\n" msgstr "" -#: src/filed/backup.c:1213 -#, c-format -msgid "Read error on file %s. ERR=%s\n" +#: src/filed/filed.c:399 +msgid "PKI encryption/signing enabled but not compiled into Bacula.\n" msgstr "" -#: src/filed/backup.c:1216 +#: src/filed/filed.c:410 #, c-format -msgid "Too many errors. JobErrors=%d.\n" -msgstr "" - -#: src/filed/backup.c:1226 -msgid "Encryption padding error\n" -msgstr "" - -#: src/filed/backup.c:1290 -msgid "Invalid file flags, no supported data stream type.\n" +msgid "" +"\"PKI Key Pair\" must be defined for File daemon \"%s\" in %s if either " +"\"PKI Sign\" or \"PKI Encrypt\" are enabled.\n" msgstr "" -#: src/filed/backup.c:1549 -#, c-format -msgid "VSS Writer (BackupComplete): %s\n" +#: src/filed/filed.c:422 src/filed/filed.c:453 src/filed/filed.c:503 +msgid "Failed to allocate a new keypair object.\n" msgstr "" -#: src/filed/restore.c:114 +#: src/filed/filed.c:426 #, c-format -msgid "Size of data or stream of %s not correct. Original %s, restored %s.\n" +msgid "Failed to load public certificate for File daemon \"%s\" in %s.\n" msgstr "" -#: src/filed/restore.c:134 +#: src/filed/filed.c:432 #, c-format -msgid "Invalid length of Finder Info (got %d, not 32)\n" -msgstr "" - -#: src/filed/restore.c:139 -#, fuzzy, c-format -msgid "Could not set Finder Info on %s\n" -msgstr "Не вдалось перевстановити прапорці для файлу %s: ERR=%s\n" - -#: src/filed/restore.c:418 -#, fuzzy -msgid "LZO init failed\n" -msgstr "Невдале встановлення з'єднання TLS\n" - -#: src/filed/restore.c:660 -msgid "Unexpected cryptographic session data stream.\n" -msgstr "" - -#: src/filed/restore.c:670 -msgid "" -"No private decryption keys have been defined to decrypt encrypted backup " -"data.\n" -msgstr "" - -#: src/filed/restore.c:681 -msgid "Could not create digest.\n" -msgstr "Не можливо створити відбиток.\n" - -#: src/filed/restore.c:699 -msgid "Missing private key required to decrypt encrypted backup data.\n" +msgid "Failed to load private key for File daemon \"%s\" in %s.\n" msgstr "" -#: src/filed/restore.c:702 -msgid "Decrypt of the session key failed.\n" +#: src/filed/filed.c:462 +#, c-format +msgid "Failed to load private key from file %s for File daemon \"%s\" in %s.\n" msgstr "" -#: src/filed/restore.c:708 +#: src/filed/filed.c:469 #, c-format -msgid "An error occurred while decoding encrypted session data stream: %s\n" +msgid "" +"Failed to load trusted signer certificate from file %s for File daemon \"%s" +"\" in %s.\n" msgstr "" -#: src/filed/restore.c:775 src/filed/restore.c:828 +#: src/filed/filed.c:509 #, c-format -msgid "Missing encryption session data stream for %s\n" +msgid "" +"Failed to load master key certificate from file %s for File daemon \"%s\" in " +"%s.\n" msgstr "" -#: src/filed/restore.c:783 src/filed/restore.c:835 +#: src/filed/filed.c:525 #, c-format -msgid "Failed to initialize decryption context for %s\n" +msgid "No Director resource defined in %s\n" msgstr "" -#: src/filed/restore.c:847 -#, fuzzy, c-format -msgid "Cannot open resource fork for %s.\n" -msgstr "Не вдається відкрити файл %s для виведення. ERR=%s\n" +#: src/filed/status.c:82 +#, c-format +msgid "Daemon started %s. Jobs: run=%d running=%d.\n" +msgstr "" -#: src/filed/restore.c:992 -msgid "Unexpected cryptographic signature data stream.\n" +#: src/filed/status.c:143 +#, c-format +msgid "" +" Sizes: boffset_t=%d size_t=%d debug=%s trace=%d mode=%d,%d bwlimit=%skB/s\n" msgstr "" -#: src/filed/restore.c:1000 +#: src/filed/status.c:199 #, c-format -msgid "Failed to decode message signature for %s\n" +msgid "Director connected at: %s\n" msgstr "" -#: src/filed/restore.c:1064 +#: src/filed/status.c:201 #, c-format -msgid "Encountered %ld acl errors while doing restore\n" +msgid "JobId %d Job %s is running.\n" msgstr "" -#: src/filed/restore.c:1068 +#: src/filed/status.c:204 #, c-format -msgid "Encountered %ld xattr errors while doing restore\n" +msgid " %s%s %s Job started: %s\n" msgstr "" -#: src/filed/restore.c:1072 +#: src/filed/status.c:232 #, c-format msgid "" -"%d non-supported data streams and %d non-supported attrib streams ignored.\n" +" Files=%s Bytes=%s AveBytes/sec=%s LastBytes/sec=%s Errors=%d\n" +" Bwlimit=%s\n" msgstr "" -#: src/filed/restore.c:1076 +#: src/filed/status.c:242 #, c-format -msgid "%d non-supported resource fork streams ignored.\n" +msgid " Files: Restored=%s Expected=%s Completed=%d%%\n" msgstr "" -#: src/filed/restore.c:1079 +#: src/filed/status.c:247 #, c-format -msgid "%d non-supported Finder Info streams ignored.\n" +msgid " Files: Examined=%s Backed up=%s\n" msgstr "" -#: src/filed/restore.c:1082 +#: src/filed/status.c:260 #, c-format -msgid "%d non-supported acl streams ignored.\n" +msgid " Processing file: %s\n" msgstr "" -#: src/filed/restore.c:1085 +#: src/filed/status.c:271 +msgid " SDSocket closed.\n" +msgstr "" + +#: src/filed/status.c:281 +msgid "====\n" +msgstr "" + +#: src/filed/status.c:343 +msgid " SDSocket=closed\n" +msgstr "" + +#: src/filed/status.c:393 src/filed/status.c:427 #, c-format -msgid "%d non-supported crypto streams ignored.\n" +msgid "Bad .status command: %s\n" msgstr "" -#: src/filed/restore.c:1088 +#: src/filed/status.c:394 +msgid "2900 Bad .status command, missing argument.\n" +msgstr "" + +#: src/filed/status.c:428 +msgid "2900 Bad .status command, wrong argument.\n" +msgstr "" + +#: src/tools/bregex.c:141 src/tools/bregtest.c:125 src/tools/bwild.c:110 #, c-format -msgid "%d non-supported xattr streams ignored.\n" +msgid "Could not open data file: %s\n" msgstr "" -#: src/filed/restore.c:1168 -msgid "Zlib errno" +#: src/tools/bbatch.c:67 +#, c-format +msgid "" +"\n" +"Version: %s (%s)\n" +"Example : bbatch -w /path/to/workdir -h localhost -f dat1 -f dat -f datx\n" +" will start 3 thread and load dat1, dat and datx in your catalog\n" +"See bbatch.c to generate datafile\n" +"\n" +"Usage: bbatch [ options ] -w working/dir -f datafile\n" +" -b with batch mode\n" +" -B without batch mode\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -n specify the database name (default bacula)\n" +" -u specify database user name (default bacula)\n" +" -P specify database host (default NULL)\n" +" -w specify working directory\n" +" -r call restore code with given jobids\n" +" -v verbose\n" +" -f specify data file\n" +" -? print this message\n" +"\n" msgstr "" -#: src/filed/restore.c:1170 -msgid "Zlib stream error" +#: src/tools/bbatch.c:199 +#, c-format +msgid "Computing file list for jobid=%s files=%lld secs=%d\n" msgstr "" -#: src/filed/restore.c:1172 -msgid "Zlib data error" +#: src/tools/bbatch.c:303 +#, c-format +msgid "Error opening datafile %s\n" msgstr "" -#: src/filed/restore.c:1174 -msgid "Zlib memory error" +#: src/tools/bbatch.c:313 +msgid "Error while inserting file\n" msgstr "" -#: src/filed/restore.c:1176 -msgid "Zlib buffer error" +#: src/tools/drivetype.c:35 +#, c-format +msgid "" +"\n" +"Usage: drivetype [-v] path ...\n" +"\n" +" Print the drive type a given file/directory is on.\n" +" The following options are supported:\n" +"\n" +" -l print local fixed hard drive\n" +" -a display information on all drives\n" +" -v print both path and file system type.\n" +" -? print this message.\n" +"\n" msgstr "" -#: src/filed/restore.c:1178 -msgid "Zlib version error" +#: src/tools/drivetype.c:66 src/tools/fstype.c:90 +#, c-format +msgid "%s: unknown\n" msgstr "" -#: src/filed/restore.c:1218 +#: src/tools/bsmtp.c:139 #, c-format -msgid "Missing cryptographic signature for %s\n" +msgid "Fatal malformed reply from %s: %s\n" msgstr "" -#: src/filed/restore.c:1251 src/filed/restore.c:1280 +#: src/tools/bsmtp.c:147 #, c-format -msgid "Signature validation failed for file %s: ERR=%s\n" +msgid "Fatal fgets error: ERR=%s\n" msgstr "" -#: src/filed/restore.c:1268 +#: src/tools/bsmtp.c:180 #, c-format -msgid "Digest one file failed for file: %s\n" +msgid "" +"\n" +"Usage: %s [-f from] [-h mailhost] [-s subject] [-c copy] [recipient ...]\n" +" -4 forces bsmtp to use IPv4 addresses only.\n" +" -6 forces bsmtp to use IPv6 addresses only.\n" +" -8 set charset to UTF-8\n" +" -a use any ip protocol for address resolution\n" +" -c set the Cc: field\n" +" -d set debug level to \n" +" -dt print a timestamp in debug output\n" +" -f set the From: field\n" +" -h use mailhost:port as the SMTP server\n" +" -s set the Subject: field\n" +" -r set the Reply-To: field\n" +" -l set the maximum number of lines to send (default: " +"unlimited)\n" +" -? print this message.\n" +"\n" msgstr "" -#: src/filed/restore.c:1307 +#: src/tools/bsmtp.c:367 +msgid "Fatal error: no recipient given.\n" +msgstr "" + +#: src/tools/bsmtp.c:395 #, c-format -msgid "Signature validation failed for %s: %s\n" +msgid "Fatal gethostname error: ERR=%s\n" msgstr "" -#: src/filed/restore.c:1404 +#: src/tools/bsmtp.c:406 #, fuzzy, c-format -msgid "LZO uncompression error on file %s. ERR=%d\n" +msgid "Fatal getaddrinfo for myself failed \"%s\": ERR=%s\n" msgstr "Помилка у %s файл %s: ERR=%s\n" -#: src/filed/restore.c:1441 +#: src/tools/bsmtp.c:414 #, c-format -msgid "Uncompression error on file %s. ERR=%s\n" +msgid "Fatal gethostbyname for myself failed \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:1474 +#: src/tools/bsmtp.c:474 src/tools/bsmtp.c:509 #, c-format -msgid "Write error in Win32 Block Decomposition on %s: %s\n" +msgid "Error unknown mail host \"%s\": ERR=%s\n" msgstr "" -#: src/filed/restore.c:1533 -msgid "Decryption error\n" +#: src/tools/bsmtp.c:477 src/tools/bsmtp.c:512 +msgid "Retrying connection using \"localhost\".\n" msgstr "" -#: src/filed/restore.c:1626 -msgid "Logic error: output file should be open\n" +#: src/tools/bsmtp.c:502 +#, fuzzy, c-format +msgid "Failed to connect to mailhost %s\n" +msgstr "Ініціалізація контексту TLS для Консолі невдала \"%s\".\n" + +#: src/tools/bsmtp.c:520 +#, c-format +msgid "Fatal error: Unknown address family for smtp host: %d\n" msgstr "" -#: src/filed/restore.c:1664 -msgid "Logic error: output file should not be open\n" +#: src/tools/bsmtp.c:529 src/tools/bsmtp.c:534 +#, c-format +msgid "Fatal socket error: ERR=%s\n" msgstr "" -#: src/filed/restore.c:1698 +#: src/tools/bsmtp.c:539 #, c-format -msgid "Decryption error. buf_len=%d decrypt_len=%d on file %s\n" +msgid "Fatal connect error to %s: ERR=%s\n" msgstr "" -#: src/filed/restore.c:1819 -msgid "Open File Manager paused\n" +#: src/tools/bsmtp.c:548 +#, c-format +msgid "Fatal _open_osfhandle error: ERR=%s\n" msgstr "" -#: src/filed/restore.c:1823 -msgid "FAILED to pause Open File Manager\n" +#: src/tools/bsmtp.c:555 src/tools/bsmtp.c:559 src/tools/bsmtp.c:568 +#: src/tools/bsmtp.c:572 +#, c-format +msgid "Fatal fdopen error: ERR=%s\n" msgstr "" -#: src/filed/restore.c:1831 +#: src/tools/bsmtp.c:564 #, c-format -msgid "Running as '%s'. Privmask=%#08x\n" +msgid "Fatal dup error: ERR=%s\n" msgstr "" -#: src/filed/restore.c:1833 -msgid "Failed to retrieve current UserName\n" +#: src/tools/dbcheck.c:183 +msgid "" +"Warning skipping the additional parameters for working directory/dbname/user/" +"password/host.\n" msgstr "" -#: src/filed/job.c:456 +#: src/tools/dbcheck.c:200 #, c-format -msgid "2901 Job %s not found.\n" +msgid "Error can not find the Catalog name[%s] in the given config file [%s]\n" msgstr "" -#: src/filed/job.c:466 +#: src/tools/dbcheck.c:202 #, c-format -msgid "2001 Job %s marked to be canceled.\n" +msgid "Error there is no Catalog section in the given config file [%s]\n" msgstr "" -#: src/filed/job.c:469 -msgid "2902 Error scanning cancel command.\n" +#: src/tools/dbcheck.c:211 +msgid "Error no Director resource defined.\n" msgstr "" -#: src/filed/job.c:492 -#, c-format -msgid "2991 Bad setdebug command: %s\n" +#: src/tools/dbcheck.c:235 +msgid "Wrong number of arguments.\n" msgstr "" -#: src/filed/job.c:515 -#, c-format -msgid "Bad estimate command: %s" +#: src/tools/dbcheck.c:240 +msgid "Working directory not supplied.\n" msgstr "" -#: src/filed/job.c:516 -msgid "2992 Bad estimate command.\n" +#: src/tools/dbcheck.c:276 +msgid "Database port must be a numeric value.\n" +msgstr "" + +#: src/tools/dbcheck.c:279 +msgid "Database port must be a int value.\n" msgstr "" -#: src/filed/job.c:539 +#: src/tools/dbcheck.c:353 #, c-format -msgid "Bad Job Command: %s" +msgid "Hello, this is the database check/correct program.\n" msgstr "" -#: src/filed/job.c:578 +#: src/tools/dbcheck.c:355 #, c-format -msgid "Bad RunBeforeJob command: %s\n" +msgid "Modify database is on." msgstr "" -#: src/filed/job.c:579 src/filed/job.c:598 -msgid "2905 Bad RunBeforeJob command.\n" +#: src/tools/dbcheck.c:357 +#, c-format +msgid "Modify database is off." msgstr "" -#: src/filed/job.c:609 -msgid "2905 Bad RunBeforeNow command.\n" +#: src/tools/dbcheck.c:359 src/tools/dbcheck.c:420 +#, c-format +msgid " Verbose is on.\n" msgstr "" -#: src/filed/job.c:628 +#: src/tools/dbcheck.c:361 src/tools/dbcheck.c:422 #, c-format -msgid "Bad RunAfter command: %s\n" +msgid " Verbose is off.\n" msgstr "" -#: src/filed/job.c:629 -msgid "2905 Bad RunAfterJob command.\n" +#: src/tools/dbcheck.c:363 +#, c-format +msgid "Please select the function you want to perform.\n" msgstr "" -#: src/filed/job.c:665 +#: src/tools/dbcheck.c:367 #, c-format -msgid "Bad RunScript command: %s\n" +msgid "" +"\n" +" 1) Toggle modify database flag\n" +" 2) Toggle verbose flag\n" +" 3) Repair bad Filename records\n" +" 4) Repair bad Path records\n" +" 5) Eliminate duplicate Filename records\n" +" 6) Eliminate duplicate Path records\n" +" 7) Eliminate orphaned Jobmedia records\n" +" 8) Eliminate orphaned File records\n" +" 9) Eliminate orphaned Path records\n" +" 10) Eliminate orphaned Filename records\n" +" 11) Eliminate orphaned FileSet records\n" +" 12) Eliminate orphaned Client records\n" +" 13) Eliminate orphaned Job records\n" +" 14) Eliminate all Admin records\n" +" 15) Eliminate all Restore records\n" +" 16) All (3-15)\n" +" 17) Quit\n" msgstr "" -#: src/filed/job.c:666 -msgid "2905 Bad RunScript command.\n" +#: src/tools/dbcheck.c:386 +#, c-format +msgid "" +"\n" +" 1) Toggle modify database flag\n" +" 2) Toggle verbose flag\n" +" 3) Check for bad Filename records\n" +" 4) Check for bad Path records\n" +" 5) Check for duplicate Filename records\n" +" 6) Check for duplicate Path records\n" +" 7) Check for orphaned Jobmedia records\n" +" 8) Check for orphaned File records\n" +" 9) Check for orphaned Path records\n" +" 10) Check for orphaned Filename records\n" +" 11) Check for orphaned FileSet records\n" +" 12) Check for orphaned Client records\n" +" 13) Check for orphaned Job records\n" +" 14) Check for all Admin records\n" +" 15) Check for all Restore records\n" +" 16) All (3-15)\n" +" 17) Quit\n" msgstr "" -#: src/filed/job.c:720 -#, fuzzy, c-format -msgid "Bad RestoreObject command: %s\n" -msgstr "Погана відповідь на команду Hello: ERR=%s\n" - -#: src/filed/job.c:785 -msgid "2909 Bad RestoreObject command.\n" +#: src/tools/dbcheck.c:406 +msgid "Select function number: " msgstr "" -#: src/filed/job.c:824 +#: src/tools/dbcheck.c:413 #, c-format -msgid "Plugin Directory not defined. Cannot use plugin: \"%s\"\n" +msgid "Database will be modified.\n" msgstr "" -#: src/filed/job.c:866 +#: src/tools/dbcheck.c:415 #, c-format -msgid "Error running program: %s. stat=%d: ERR=%s\n" +msgid "Database will NOT be modified.\n" msgstr "" -#: src/filed/job.c:877 +#: src/tools/dbcheck.c:506 #, c-format -msgid "Cannot open FileSet input file: %s. ERR=%s\n" +msgid "JobId=%s Name=\"%s\" StartTime=%s\n" msgstr "" -#: src/filed/job.c:1031 +#: src/tools/dbcheck.c:513 #, c-format -msgid "REGEX %s compile error. ERR=%s\n" +msgid "Orphaned JobMediaId=%s JobId=%s Volume=\"%s\"\n" msgstr "" -#: src/filed/job.c:1182 +#: src/tools/dbcheck.c:520 #, c-format -msgid "Invalid FileSet command: %s\n" +msgid "Orphaned FileId=%s JobId=%s Volume=\"%s\"\n" msgstr "" -#: src/filed/job.c:1655 +#: src/tools/dbcheck.c:527 #, c-format -msgid "" -"DIR and FD clocks differ by %lld seconds, FD automatically compensating.\n" +msgid "Orphaned FileSetId=%s FileSet=\"%s\" MD5=%s\n" msgstr "" -#: src/filed/job.c:1664 +#: src/tools/dbcheck.c:534 #, c-format -msgid "Unknown backup level: %s\n" +msgid "Orphaned ClientId=%s Name=\"%s\"\n" msgstr "" -#: src/filed/job.c:1677 +#: src/tools/dbcheck.c:587 #, c-format -msgid "Bad level command: %s\n" +msgid "Deleting: %s\n" msgstr "" -#: src/filed/job.c:1699 +#: src/tools/dbcheck.c:659 #, c-format -msgid "Bad session command: %s" +msgid "Checking for duplicate Filename entries.\n" msgstr "" -#: src/filed/job.c:1760 +#: src/tools/dbcheck.c:670 #, c-format -msgid "Bad storage command: %s" +msgid "Found %d duplicate Filename records.\n" msgstr "" -#: src/filed/job.c:1781 -#, c-format -msgid "Failed to connect to Storage daemon: %s:%d\n" +#: src/tools/dbcheck.c:671 +msgid "Print the list? (yes/no): " msgstr "" -#: src/filed/job.c:1793 -msgid "Failed to authenticate Storage daemon.\n" +#: src/tools/dbcheck.c:694 src/tools/dbcheck.c:759 +#, c-format +msgid "Found %d for: %s\n" msgstr "" -#: src/filed/job.c:1840 -msgid "ACL support not configured for your machine.\n" +#: src/tools/dbcheck.c:724 +#, c-format +msgid "Checking for duplicate Path entries.\n" msgstr "" -#: src/filed/job.c:1844 -msgid "XATTR support not configured for your machine.\n" +#: src/tools/dbcheck.c:735 +#, c-format +msgid "Found %d duplicate Path records.\n" msgstr "" -#: src/filed/job.c:1853 -msgid "Cannot contact Storage daemon\n" +#: src/tools/dbcheck.c:736 src/tools/dbcheck.c:798 src/tools/dbcheck.c:844 +#: src/tools/dbcheck.c:912 src/tools/dbcheck.c:970 src/tools/dbcheck.c:1013 +#: src/tools/dbcheck.c:1055 src/tools/dbcheck.c:1097 src/tools/dbcheck.c:1134 +#: src/tools/dbcheck.c:1167 src/tools/dbcheck.c:1201 src/tools/dbcheck.c:1268 +msgid "Print them? (yes/no): " msgstr "" -#: src/filed/job.c:1872 +#: src/tools/dbcheck.c:789 #, c-format -msgid "Bad response to append open: %s\n" +msgid "Checking for orphaned JobMedia entries.\n" msgstr "" -#: src/filed/job.c:1877 -msgid "Bad response from stored to open command\n" +#: src/tools/dbcheck.c:797 +#, c-format +msgid "Found %d orphaned JobMedia records.\n" msgstr "" -#: src/filed/job.c:1909 +#: src/tools/dbcheck.c:815 #, c-format -msgid "Generate VSS snapshots. Driver=\"%s\", Drive(s)=\"%s\"\n" +msgid "Deleting %d orphaned JobMedia records.\n" msgstr "" -#: src/filed/job.c:1912 -#, fuzzy, c-format -msgid "CreateSGenerate VSS snapshots failed. ERR=%s\n" -msgstr "Не можливо створити теку %s: ERR=%s\n" - -#: src/filed/job.c:1919 +#: src/tools/dbcheck.c:832 #, c-format -msgid "Generate VSS snapshot of drive \"%c:\\\" failed.\n" +msgid "Checking for orphaned File entries. This may take some time!\n" msgstr "" -#: src/filed/job.c:1925 +#: src/tools/dbcheck.c:843 #, c-format -msgid "VSS Writer (PrepareForBackup): %s\n" +msgid "Found %d orphaned File records.\n" msgstr "" -#: src/filed/job.c:1930 -msgid "No drive letters found for generating VSS snapshots.\n" +#: src/tools/dbcheck.c:860 +#, c-format +msgid "Deleting %d orphaned File records.\n" msgstr "" -#: src/filed/job.c:1934 +#: src/tools/dbcheck.c:879 #, c-format -msgid "VSS was not initialized properly. ERR=%s\n" +msgid "Pruning orphaned Path entries isn't possible when using BVFS.\n" msgstr "" -#: src/filed/job.c:1985 -msgid "Append Close with SD failed.\n" +#: src/tools/dbcheck.c:888 src/tools/dbcheck.c:946 +msgid "Create temporary index? (yes/no): " msgstr "" -#: src/filed/job.c:1989 +#: src/tools/dbcheck.c:900 #, c-format -msgid "Bad status %d returned from Storage Daemon.\n" +msgid "Checking for orphaned Path entries. This may take some time!\n" msgstr "" -#: src/filed/job.c:2019 +#: src/tools/dbcheck.c:911 #, c-format -msgid "2994 Bad verify command: %s\n" +msgid "Found %d orphaned Path records.\n" msgstr "" -#: src/filed/job.c:2034 src/filed/job.c:2075 +#: src/tools/dbcheck.c:924 #, c-format -msgid "2994 Bad verify level: %s\n" +msgid "Deleting %d orphaned Path records.\n" msgstr "" -#: src/filed/job.c:2146 +#: src/tools/dbcheck.c:958 #, c-format -msgid "Bad replace command. CMD=%s\n" +msgid "Checking for orphaned Filename entries. This may take some time!\n" msgstr "" -#: src/filed/job.c:2169 +#: src/tools/dbcheck.c:969 #, c-format -msgid "Bad where regexp. where=%s\n" +msgid "Found %d orphaned Filename records.\n" msgstr "" -#: src/filed/job.c:2207 +#: src/tools/dbcheck.c:982 #, c-format -msgid "VSS was not initialized properly. VSS support is disabled. ERR=%s\n" +msgid "Deleting %d orphaned Filename records.\n" msgstr "" -#: src/filed/job.c:2252 +#: src/tools/dbcheck.c:1002 #, c-format -msgid "VSS Writer (RestoreComplete): %s\n" -msgstr "" - -#: src/filed/job.c:2302 -msgid "Improper calling sequence.\n" +msgid "Checking for orphaned FileSet entries. This takes some time!\n" msgstr "" -#: src/filed/job.c:2322 +#: src/tools/dbcheck.c:1012 #, c-format -msgid "Bad response to SD read open: %s\n" -msgstr "" - -#: src/filed/job.c:2327 -msgid "Bad response from stored to read open command\n" +msgid "Found %d orphaned FileSet records.\n" msgstr "" -#: src/filed/job.c:2391 +#: src/tools/dbcheck.c:1027 #, c-format -msgid "Comm error with SD. bad response to %s. ERR=%s\n" +msgid "Deleting %d orphaned FileSet records.\n" msgstr "" -#: src/filed/job.c:2394 +#: src/tools/dbcheck.c:1036 #, c-format -msgid "Bad response to %s command. Wanted %s, got %s\n" +msgid "Checking for orphaned Client entries.\n" msgstr "" -#: src/filed/authenticate.c:68 +#: src/tools/dbcheck.c:1054 #, c-format -msgid "I only authenticate directors, not %d\n" +msgid "Found %d orphaned Client records.\n" msgstr "" -#: src/filed/authenticate.c:100 +#: src/tools/dbcheck.c:1069 #, c-format -msgid "Connection from unknown Director %s at %s rejected.\n" +msgid "Deleting %d orphaned Client records.\n" msgstr "" -#: src/filed/authenticate.c:144 +#: src/tools/dbcheck.c:1078 #, c-format -msgid "Incorrect password given by Director at %s.\n" -msgstr "" - -#: src/filed/authenticate.c:263 -msgid "" -"Authorization key rejected by Storage daemon.\n" -"Please see " +msgid "Checking for orphaned Job entries.\n" msgstr "" -#: examples/nagios/check_bacula/check_bacula.c:59 +#: src/tools/dbcheck.c:1096 #, c-format -msgid "" -"Copyright (C) 2005 Christian Masopust\n" -"Written by Christian Masopust (2005)\n" -"\n" -"Version: " +msgid "Found %d orphaned Job records.\n" msgstr "" -#: src/baconfig.h:72 src/baconfig.h:73 src/baconfig.h:78 src/baconfig.h:79 +#: src/tools/dbcheck.c:1111 #, c-format -msgid "Failed ASSERT: %s\n" -msgstr "" - -#: src/win32/compat/compat.cpp:2721 -msgid "" -"\n" -"\n" -"Bacula ERROR: " +msgid "Deleting %d orphaned Job records.\n" msgstr "" -#: src/win32/libwin32/service.cpp:107 -msgid "RegisterServiceCtlHandler failed" +#: src/tools/dbcheck.c:1113 +#, c-format +msgid "Deleting JobMedia records of orphaned Job records.\n" msgstr "" -#: src/win32/libwin32/service.cpp:108 -msgid "Failure contacting the Service Handler" +#: src/tools/dbcheck.c:1115 +#, c-format +msgid "Deleting Log records of orphaned Job records.\n" msgstr "" -#: src/win32/libwin32/service.cpp:119 -msgid "Service start report failed" +#: src/tools/dbcheck.c:1124 +#, c-format +msgid "Checking for Admin Job entries.\n" msgstr "" -#: src/win32/libwin32/service.cpp:172 -msgid "StartServiceCtrlDispatcher failed." +#: src/tools/dbcheck.c:1133 +#, c-format +msgid "Found %d Admin Job records.\n" msgstr "" -#: src/win32/libwin32/service.cpp:179 -msgid "KERNEL32.DLL not found: Bacula service not started" +#: src/tools/dbcheck.c:1148 +#, c-format +msgid "Deleting %d Admin Job records.\n" msgstr "" -#: src/win32/libwin32/service.cpp:189 -msgid "Registry service not found: Bacula service not started" +#: src/tools/dbcheck.c:1157 +#, c-format +msgid "Checking for Restore Job entries.\n" msgstr "" -#: src/win32/libwin32/service.cpp:191 -msgid "Registry service entry point not found" +#: src/tools/dbcheck.c:1166 +#, c-format +msgid "Found %d Restore Job records.\n" msgstr "" -#: src/win32/libwin32/service.cpp:212 -msgid "Report Service failure" +#: src/tools/dbcheck.c:1181 +#, c-format +msgid "Deleting %d Restore Job records.\n" msgstr "" -#: src/win32/libwin32/service.cpp:243 -msgid "Unable to install the service" +#: src/tools/dbcheck.c:1191 +#, c-format +msgid "Checking for Filenames with a trailing slash\n" msgstr "" -#: src/win32/libwin32/service.cpp:251 -msgid "Service command length too long" +#: src/tools/dbcheck.c:1200 +#, c-format +msgid "Found %d bad Filename records.\n" msgstr "" -#: src/win32/libwin32/service.cpp:252 -msgid "Service command length too long. Service not registered." +#: src/tools/dbcheck.c:1218 src/tools/dbcheck.c:1284 +#, c-format +msgid "Reparing %d bad Filename records.\n" msgstr "" -#: src/win32/libwin32/service.cpp:265 -msgid "" -"The Service Control Manager could not be contacted - the service was not " -"installed" +#: src/tools/dbcheck.c:1258 +#, c-format +msgid "Checking for Paths without a trailing slash\n" msgstr "" -#: src/win32/libwin32/service.cpp:288 src/win32/libwin32/service.cpp:317 -#: src/win32/libwin32/service.cpp:365 src/win32/libwin32/service.cpp:373 -#: src/win32/libwin32/service.cpp:377 -msgid "The Bacula service: " +#: src/tools/dbcheck.c:1267 +#, c-format +msgid "Found %d bad Path records.\n" msgstr "" -#: src/win32/libwin32/service.cpp:295 +#: src/tools/dbcheck.c:1430 +#, c-format msgid "" -"Provides file backup and restore services. Bacula -- the network backup " -"solution." -msgstr "" - -#: src/win32/libwin32/service.cpp:306 -msgid "Cannot write System Registry for " +"Ok. Index over the %s column already exists and dbcheck will work faster.\n" msgstr "" -#: src/win32/libwin32/service.cpp:307 +#: src/tools/dbcheck.c:1433 +#, c-format msgid "" -"The System Registry could not be updated - the Bacula service was not " -"installed" +"Note. Index over the %s column not found, that can greatly slow down " +"dbcheck.\n" msgstr "" -#: src/win32/libwin32/service.cpp:316 -msgid "Cannot add Bacula key to System Registry" +#: src/tools/dbcheck.c:1448 +#, c-format +msgid "Create temporary index... This may take some time!\n" msgstr "" -#: src/win32/libwin32/service.cpp:327 -msgid "The " +#: src/tools/dbcheck.c:1456 +#, c-format +msgid "Temporary index created.\n" msgstr "" -#: src/win32/libwin32/service.cpp:385 -msgid "An existing Bacula service: " +#: src/tools/dbcheck.c:1471 +#, c-format +msgid "Drop temporary index.\n" msgstr "" -#: src/win32/libwin32/service.cpp:394 -msgid "" -"The service Manager could not be contacted - the Bacula service was not " -"removed" +#: src/tools/dbcheck.c:1481 +#, c-format +msgid "Temporary index %s deleted.\n" msgstr "" -#: src/win32/libwin32/service.cpp:407 +#: src/tools/bvfs_test.c:44 src/tools/ing_test.c:45 +#, c-format msgid "" -"Could not find registry entry.\n" -"Service probably not registerd - the Bacula service was not removed" -msgstr "" - -#: src/win32/libwin32/service.cpp:414 -msgid "Could not delete Registry key for " -msgstr "" - -#: src/win32/libwin32/service.cpp:425 -msgid "Bacula could not be contacted, probably not running" -msgstr "" - -#: src/win32/libwin32/service.cpp:433 -msgid "The Bacula service has been removed" -msgstr "" - -#: src/win32/libwin32/service.cpp:474 -msgid "SetServiceStatus failed" +"\n" +"Version: %s (%s)\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -n specify the database name (default bacula)\n" +" -u specify database user name (default bacula)\n" +" -P specify database host (default NULL)\n" +" -w specify working directory\n" +" -j specify jobids\n" +" -p specify path\n" +" -f specify file\n" +" -l maximum tuple to fetch\n" +" -T truncate cache table before starting\n" +" -v verbose\n" +" -? print this message\n" +"\n" msgstr "" -#: src/win32/libwin32/service.cpp:500 +#: src/tools/testls.c:47 #, c-format msgid "" "\n" +"Usage: testls [-d debug_level] [-] [pattern1 ...]\n" +" -a print extended attributes (Win32 debug)\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -e specify file of exclude patterns\n" +" -i specify file of include patterns\n" +" -q quiet, don't print filenames (debug)\n" +" - read pattern(s) from stdin\n" +" -? print this message.\n" +"\n" +"Patterns are file inclusion -- normally directories.\n" +"Debug level >= 1 prints each file found.\n" +"Debug level >= 10 prints path/file for catalog.\n" +"Errors always printed.\n" +"Files/paths truncated is number with len > 255.\n" +"Truncation is only in catalog.\n" "\n" -"%s error: %ld at %s:%d" msgstr "" -#: src/win32/libwin32/service.cpp:576 +#: src/tools/testls.c:143 #, c-format -msgid "Locked by: %s, duration: %ld seconds\n" +msgid "Could not open include file: %s\n" msgstr "" -#: src/win32/libwin32/service.cpp:580 +#: src/tools/testls.c:156 #, c-format -msgid "No longer locked\n" -msgstr "" - -#: src/win32/libwin32/service.cpp:584 -msgid "Could not lock database" -msgstr "" - -#: src/win32/libwin32/main.cpp:245 -msgid "Bad Command Line Option" -msgstr "Не зрозумілий параметр командного рядка" - -#: src/wx-console/wxbconfigfileeditor.cpp:65 -msgid "Config file editor" +msgid "Could not open exclude file: %s\n" msgstr "" -#: src/wx-console/wxbconfigfileeditor.cpp:75 -#, fuzzy -msgid "# Bacula bwx-console Configuration File\n" -msgstr "Будьласка виправте файл конфігурації: %s\n" - -#: src/wx-console/wxbconfigfileeditor.cpp:111 -msgid "Save and close" +#: src/tools/testls.c:170 +#, c-format +msgid "Files seen = %d\n" msgstr "" -#: src/wx-console/wxbconfigfileeditor.cpp:112 -msgid "Close without saving" +#: src/tools/testls.c:203 src/tools/testfind.c:310 +#, c-format +msgid "Err: Could not access %s: %s\n" msgstr "" -#: src/wx-console/wxbconfigfileeditor.cpp:139 -#, fuzzy, c-format -msgid "Unable to write to %s\n" -msgstr "Не можливо встановити власника файлу %s: ERR=%s\n" - -#: src/wx-console/wxbconfigfileeditor.cpp:140 -msgid "Error while saving" +#: src/tools/testls.c:206 src/tools/testfind.c:313 +#, c-format +msgid "Err: Could not follow ff->link %s: %s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:234 -#: src/wx-console/wxbrestorepanel.cpp:1947 -#: src/wx-console/wxbrestorepanel.cpp:1976 -msgid "Enter restore mode" +#: src/tools/testls.c:209 src/tools/testfind.c:316 +#, c-format +msgid "Err: Could not stat %s: %s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:237 -msgid "Cancel restore" +#: src/tools/testls.c:212 src/tools/testfind.c:319 +#, c-format +msgid "Skip: File not saved. No change. %s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:263 -#: src/wx-console/wxbrestorepanel.cpp:317 -msgid "Add" +#: src/tools/testls.c:215 src/tools/testfind.c:322 +#, c-format +msgid "Err: Attempt to backup archive. Not saved. %s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:265 -#: src/wx-console/wxbrestorepanel.cpp:319 -msgid "Remove" +#: src/tools/testls.c:218 +#, c-format +msgid "Recursion turned off. Directory not entered. %s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:267 -#: src/wx-console/wxbrestorepanel.cpp:321 -#, fuzzy -msgid "Refresh" -msgstr "Оновити зараз" - -#: src/wx-console/wxbrestorepanel.cpp:286 -msgid "M" +#: src/tools/testls.c:221 +#, c-format +msgid "Skip: File system change prohibited. Directory not entered. %s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:290 -#, fuzzy -msgid "Filename" -msgstr "Збирач" - -#: src/wx-console/wxbrestorepanel.cpp:294 -msgid "Size" +#: src/tools/testls.c:224 src/tools/testfind.c:325 +#, c-format +msgid "Err: Could not open directory %s: %s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:298 -msgid "Date" +#: src/tools/testls.c:227 src/tools/testfind.c:328 +#, c-format +msgid "Err: Unknown file ff->type %d: %s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:302 -msgid "Perm." +#: src/tools/testfind.c:58 +#, c-format +msgid "" +"\n" +"Usage: testfind [-d debug_level] [-] [pattern1 ...]\n" +" -a print extended attributes (Win32 debug)\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -c specify config file containing FileSet resources\n" +" -f specify which FileSet to use\n" +" -? print this message.\n" +"\n" +"Patterns are used for file inclusion -- normally directories.\n" +"Debug level >= 1 prints each file found.\n" +"Debug level >= 10 prints path/file for catalog.\n" +"Errors are always printed.\n" +"Files/paths truncated is the number of files/paths with len > 255.\n" +"Truncation is only in the catalog.\n" +"\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:306 -msgid "User" +#: src/tools/testfind.c:223 +#, c-format +msgid "" +"\n" +"Total files : %d\n" +"Max file length: %d\n" +"Max path length: %d\n" +"Files truncated: %d\n" +"Paths truncated: %d\n" +"Hard links : %d\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:310 -msgid "Group" +#: src/tools/testfind.c:266 +#, c-format +msgid "Reg: %s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:335 -#: src/wx-console/wxbrestorepanel.cpp:348 -#: src/wx-console/wxbrestorepanel.cpp:503 -#: src/wx-console/wxbrestorepanel.cpp:513 -#: src/wx-console/wxbrestorepanel.cpp:516 -#: src/wx-console/wxbrestorepanel.cpp:1811 -#: src/wx-console/wxbrestorepanel.cpp:1897 -msgid "Job Name" +#: src/tools/testfind.c:288 +msgid "\t[will not descend: recursion turned off]" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:337 -#: src/wx-console/wxbrestorepanel.cpp:353 -#: src/wx-console/wxbrestorepanel.cpp:455 -#: src/wx-console/wxbrestorepanel.cpp:456 -#: src/wx-console/wxbrestorepanel.cpp:466 -#: src/wx-console/wxbrestorepanel.cpp:467 -#: src/wx-console/wxbrestorepanel.cpp:1153 -#: src/wx-console/wxbrestorepanel.cpp:1156 -#: src/wx-console/wxbrestorepanel.cpp:1239 -#: src/wx-console/wxbrestorepanel.cpp:1849 -#: src/wx-console/wxbrestorepanel.cpp:1851 -#: src/wx-console/wxbrestorepanel.cpp:1912 -#, fuzzy -msgid "Fileset" -msgstr "Дата файлу" - -#: src/wx-console/wxbrestorepanel.cpp:340 -#: src/wx-console/wxbrestorepanel.cpp:1233 -#: src/wx-console/wxbrestorepanel.cpp:1249 -#: src/wx-console/wxbrestorepanel.cpp:1251 -#: src/wx-console/wxbrestorepanel.cpp:1259 -#: src/wx-console/wxbrestorepanel.cpp:1261 -#: src/wx-console/wxbrestorepanel.cpp:1280 -#: src/wx-console/wxbrestorepanel.cpp:1287 -#: src/wx-console/wxbrestorepanel.cpp:1839 -#: src/wx-console/wxbrestorepanel.cpp:1850 -#: src/wx-console/wxbrestorepanel.cpp:1971 -msgid "Before" +#: src/tools/testfind.c:290 +msgid "\t[will not descend: file system change not allowed]" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:342 -msgid "Please configure parameters concerning files to restore :" +#: src/tools/testfind.c:292 +msgid "\t[will not descend: disallowed file system]" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:351 -#: src/wx-console/wxbrestorepanel.cpp:1905 -msgid "always" +#: src/tools/testfind.c:294 +msgid "\t[will not descend: disallowed drive type]" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:351 -msgid "if newer" +#: src/tools/testfind.c:378 +#, c-format +msgid "===== Filename truncated to 255 chars: %s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:351 -msgid "if older" +#: src/tools/testfind.c:395 +#, c-format +msgid "========== Path name truncated to 255 chars: %s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:351 -#: src/wx-console/wxbrestorepanel.cpp:1908 -msgid "never" +#: src/tools/testfind.c:404 +#, c-format +msgid "========== Path length is zero. File=%s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:359 -msgid "Please configure parameters concerning files restoration :" +#: src/tools/testfind.c:407 +#, c-format +msgid "Path: %s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:427 -msgid "Getting parameters list." +#: src/tools/fstype.c:36 +#, c-format +msgid "" +"\n" +"Usage: fstype [-v] path ...\n" +"\n" +" Print the file system type a given file/directory is on.\n" +" The following options are supported:\n" +"\n" +" -v print both path and file system type.\n" +" -? print this message.\n" +"\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:435 -msgid "Error : no clients returned by the director." +#: src/tools/cats_test.c:48 +#, c-format +msgid "" +"\n" +"Version: %s (%s)\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -n specify the database name (default bacula)\n" +" -u specify database user name (default bacula)\n" +" -P specify database host (default NULL)\n" +" -w specify working directory\n" +" -p specify path\n" +" -f specify file\n" +" -l maximum tuple to fetch\n" +" -q print only errors\n" +" -v verbose\n" +" -? print this message\n" +"\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:459 -msgid "Error : no filesets returned by the director." -msgstr "" +#: src/tools/cats_test.c:364 +#, fuzzy, c-format +msgid "Could not open, database \"%s\".\n" +msgstr "Не вдалось відкрити%s: ERR=%s\n" -#: src/wx-console/wxbrestorepanel.cpp:483 -msgid "Error : no storage returned by the director." +#: src/tools/ing_test.c:219 src/tools/ing_test.c:252 src/tools/ing_test.c:290 +msgid "Stmt went wrong\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:506 -#: src/wx-console/wxbrestorepanel.cpp:530 -msgid "Error : no jobs returned by the director." +#: src/tools/ing_test.c:308 +msgid "CREATE-Stmt went wrong\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:516 -msgid "RestoreFiles" +#: src/tools/ing_test.c:313 +msgid "DROP-Stmt went wrong\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:551 -msgid "Please configure your restore parameters." +#: examples/nagios/check_bacula/check_bacula.c:59 +#, c-format +msgid "" +"Copyright (C) 2005 Christian Masopust\n" +"Written by Christian Masopust (2005)\n" +"\n" +"Version: " msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:556 -msgid "Please select a client." +#: src/lib/status.h:82 +msgid "===================================================================\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:560 -msgid "Please select a restore date." +#: src/baconfig.h:60 src/baconfig.h:61 src/baconfig.h:66 src/baconfig.h:67 +#, c-format +msgid "Failed ASSERT: %s\n" msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:565 -msgid "Building restore tree..." -msgstr "" +#: src/qt-console/bcomm/dircomm.cpp:79 +#, c-format +msgid "Already connected\"%s\".\n" +msgstr "Вже приєднано\"%s\".\n" -#: src/wx-console/wxbrestorepanel.cpp:613 -msgid "Error while starting restore: " -msgstr "" +#: src/qt-console/bcomm/dircomm.cpp:90 +#: src/qt-console/tray-monitor/tray-monitor.cpp:347 +#, c-format +msgid "Connecting to Director %s:%d" +msgstr "Приєднуюсь до Керівника %s:%d" -#: src/wx-console/wxbrestorepanel.cpp:705 +#: src/qt-console/bcomm/dircomm.cpp:92 +#, c-format msgid "" -"Right click on a file or on a directory, or double-click on its mark to add " -"it to the restore list." +"Connecting to Director %s:%d\n" +"\n" msgstr "" +"З'єднуюсь із Керівником %s:%d\n" +"\n" -#: src/wx-console/wxbrestorepanel.cpp:720 src/wx-console/wxbmainframe.cpp:685 -msgid "Unexpected question has been received.\n" -msgstr "" +#: src/qt-console/bcomm/dircomm.cpp:163 +#: src/qt-console/tray-monitor/tray-monitor.cpp:349 +msgid "Director daemon" +msgstr "Керівник" -#: src/wx-console/wxbrestorepanel.cpp:742 -#: src/wx-console/wxbrestorepanel.cpp:764 -msgid "bwx-console: unexpected restore question." -msgstr "" +#: src/qt-console/bcomm/dircomm.cpp:201 +msgid "Initializing ..." +msgstr "Ініціалізація ..." -#: src/wx-console/wxbrestorepanel.cpp:775 -msgid " files selected to be restored." -msgstr "" +#: src/qt-console/bcomm/dircomm.cpp:217 src/qt-console/console/console.cpp:130 +msgid "Connected" +msgstr "З'єднано" -#: src/wx-console/wxbrestorepanel.cpp:780 -msgid " file selected to be restored." -msgstr "" +#: src/qt-console/bcomm/dircomm.cpp:341 +msgid "Command completed ..." +msgstr "Команду виконано ..." -#: src/wx-console/wxbrestorepanel.cpp:787 -#, c-format -msgid "Please configure your restore (%ld files selected to be restored)..." -msgstr "" +#: src/qt-console/bcomm/dircomm.cpp:348 src/qt-console/console/console.cpp:367 +msgid "Processing command ..." +msgstr "Виконання команди ..." -#: src/wx-console/wxbrestorepanel.cpp:797 -msgid "Restore failed : no file selected.\n" -msgstr "" +#: src/qt-console/bcomm/dircomm.cpp:355 +msgid "At main prompt waiting for input ..." +msgstr "Очікуться введення у основній рядку ..." -#: src/wx-console/wxbrestorepanel.cpp:798 -msgid "Restore failed : no file selected." -msgstr "" +#: src/qt-console/bcomm/dircomm.cpp:362 src/qt-console/bcomm/dircomm.cpp:375 +msgid "At prompt waiting for input ..." +msgstr "Очікуться введення у рядку ..." -#: src/wx-console/wxbrestorepanel.cpp:808 -msgid "Restoring, please wait..." -msgstr "" +#: src/qt-console/bcomm/dircomm.cpp:383 +msgid "Command failed." +msgstr "Помилка команди" -#: src/wx-console/wxbrestorepanel.cpp:821 -msgid "Job queued. JobId=" -msgstr "" +#: src/qt-console/bcomm/dircomm.cpp:455 +msgid "Director disconnected." +msgstr "Керівник від'єднано" -#: src/wx-console/wxbrestorepanel.cpp:823 -msgid "Restore queued, jobid=" -msgstr "" +#: src/qt-console/tray-monitor/tray_conf.cpp:165 +#, c-format +msgid "Monitor: name=%s FDtimeout=%s SDtimeout=%s\n" +msgstr "Споглядач: назва=%s FDtimeout=%s SDtimeout=%s\n" -#: src/wx-console/wxbrestorepanel.cpp:827 -#, fuzzy -msgid "Job failed." -msgstr "Статус задачі: Відмінена" +#: src/qt-console/tray-monitor/tray_conf.cpp:171 +#, c-format +msgid "Director: name=%s address=%s FDport=%d\n" +msgstr "Керівник: назва=%s address=%s FDport=%d\n" -#: src/wx-console/wxbrestorepanel.cpp:828 -msgid "Restore failed, please look at messages.\n" -msgstr "" +#: src/qt-console/tray-monitor/tray_conf.cpp:175 +#, c-format +msgid "Client: name=%s address=%s FDport=%d\n" +msgstr "Клієнт: назва=%s address=%s FDport=%d\n" -#: src/wx-console/wxbrestorepanel.cpp:829 -msgid "Restore failed, please look at messages in console." -msgstr "" +#: src/qt-console/tray-monitor/tray_conf.cpp:179 +#, c-format +msgid "Storage: name=%s address=%s SDport=%d\n" +msgstr "Сховище: назва=%s address=%s SDport=%d\n" -#: src/wx-console/wxbrestorepanel.cpp:835 -#: src/wx-console/wxbrestorepanel.cpp:836 -msgid "Failed to retrieve jobid.\n" -msgstr "" +#: src/qt-console/tray-monitor/tray_conf.cpp:183 +#: src/qt-console/bat_conf.cpp:145 +#, fuzzy, c-format +msgid "ConsoleFont: name=%s font face=%s\n" +msgstr "Консоль: назва=%s rcfile=%s histfile=%s\n" -#: src/wx-console/wxbrestorepanel.cpp:862 +#: src/qt-console/tray-monitor/tray-monitor.cpp:55 +#, fuzzy, c-format msgid "" -"Restore is scheduled to run. bwx-console will not wait for its completion.\n" +"\n" +"Version: %s (%s) %s %s %s\n" +"\n" +"Usage: tray-monitor [-c config_file] [-d debug_level]\n" +" -c set configuration file to file\n" +" -d set debug level to \n" +" -dt print timestamp in debug output\n" +" -t test - read configuration and exit\n" +" -? print this message.\n" +"\n" msgstr "" +"Автор Nicolas Boichat (2004)\n" +"\n" +"Версія: %s (%s) %s %s %s\n" +"\n" +"Використання: tray-monitor [-c config_file] [-d debug_level]\n" +" -c задати конфігураційний файл \n" +" -d встановити рівень відлагоджування у \n" +" -dt виводити часову мітку у даних відлагоджування\n" +" -t перевірка - прогитати конфігурацію і завершити\n" +" -? показати це повідомлення.\n" +"\n" -#: src/wx-console/wxbrestorepanel.cpp:863 +#: src/qt-console/tray-monitor/tray-monitor.cpp:204 +#, c-format msgid "" -"Restore is scheduled to run. bwx-console will not wait for its completion." -msgstr "" - -#: src/wx-console/wxbrestorepanel.cpp:889 -msgid "Restore job created, but not yet running." +"Error: %d Monitor resources defined in %s. You must define one and only one " +"Monitor resource.\n" msgstr "" +"Помилка: %d ресурсів Спостерігача визначено у %s. Ви повинні визначити одині " +"тільки один ресурс Спостерігача.\n" -#: src/wx-console/wxbrestorepanel.cpp:894 +#: src/qt-console/tray-monitor/tray-monitor.cpp:236 #, c-format -msgid "Restore job running, please wait (%ld of %ld files restored)..." -msgstr "" - -#: src/wx-console/wxbrestorepanel.cpp:898 -msgid "Restore job terminated successfully." -msgstr "" - -#: src/wx-console/wxbrestorepanel.cpp:899 -msgid "Restore job terminated successfully.\n" +msgid "" +"No Client, Storage or Director resource defined in %s\n" +"Without that I don't how to get status from the File, Storage or Director " +"Daemon :-(\n" msgstr "" +"У %s не визначено жодного ресурсу Клієнту, Зберігача або Керівника\n" +"Без цього я не знаю як отримати статус Зберігача, Збирача або Керівника\n" -#: src/wx-console/wxbrestorepanel.cpp:904 -msgid "Restore job terminated in error, see messages in console." +#: src/qt-console/tray-monitor/tray-monitor.cpp:251 +#, c-format +msgid "" +"Invalid refresh interval defined in %s\n" +"This value must be greater or equal to 1 second and less or equal to 10 " +"minutes (read value: %d).\n" msgstr "" +"Задано поганий інтервал оновлення у %s\n" +"Це значення повинно бути не меньше 1 секунди та не більше 10 хвилин " +"(теперішнє значення: %d).\n" -#: src/wx-console/wxbrestorepanel.cpp:905 -msgid "Restore job terminated in error, see messages.\n" -msgstr "" +#: src/qt-console/tray-monitor/tray-monitor.cpp:319 +#, c-format +msgid "Error, currentitem is not a Client or a Storage..\n" +msgstr "Помилка. Поточний пункт не є Клієнтом або Зберігачем.\n" -#: src/wx-console/wxbrestorepanel.cpp:910 -msgid "Restore job reported a non-fatal error." -msgstr "" +#: src/qt-console/tray-monitor/tray-monitor.cpp:354 +#, c-format +msgid "Connecting to Client %s:%d" +msgstr "Приєднуюсь до Клієнта %s:%d" -#: src/wx-console/wxbrestorepanel.cpp:914 -msgid "Restore job reported a fatal error." -msgstr "" +#: src/qt-console/tray-monitor/tray-monitor.cpp:356 +msgid "File daemon" +msgstr "Збирач" -#: src/wx-console/wxbrestorepanel.cpp:919 -msgid "Restore job cancelled by user." -msgstr "" +#: src/qt-console/tray-monitor/tray-monitor.cpp:361 +#, c-format +msgid "Connecting to Storage %s:%d" +msgstr "Приєднуюсь до Зберігача %s:%d" -#: src/wx-console/wxbrestorepanel.cpp:920 -msgid "Restore job cancelled by user.\n" -msgstr "" +#: src/qt-console/tray-monitor/tray-monitor.cpp:367 +#: src/qt-console/tray-monitor/tray-monitor.cpp:397 +#, c-format +msgid "Error, currentitem is not a Client, a Storage or a Director..\n" +msgstr "Помилка. Поточний пункт не є Клієнтом або Зберігачем.\n" -#: src/wx-console/wxbrestorepanel.cpp:925 -#, fuzzy -msgid "Restore job is waiting on File daemon." -msgstr "Статус задачі: Очікування Збирача" +#: src/qt-console/tray-monitor/tray-monitor.cpp:372 +msgid "Cannot connect to daemon." +msgstr "Не можу приєднатись до демону." -#: src/wx-console/wxbrestorepanel.cpp:929 -#, fuzzy -msgid "Restore job is waiting for new media." -msgstr "Статус задачі: Очікування нового носія" +#: src/qt-console/tray-monitor/tray-monitor.cpp:381 +#, c-format +msgid "Authentication error : %s" +msgstr "Помилка автентифікації : %s" -#: src/wx-console/wxbrestorepanel.cpp:933 -#, fuzzy -msgid "Restore job is waiting for storage resource." -msgstr "Статус задачі: Очікування ресурсу зберігання" +#: src/qt-console/tray-monitor/tray-monitor.cpp:388 +msgid "Opened connection with Director daemon." +msgstr "Відкриті з'єднання із Керівником." -#: src/wx-console/wxbrestorepanel.cpp:937 -#, fuzzy -msgid "Restore job is waiting for job resource." -msgstr "Статус задачі: Очікування ресурсу задачі" +#: src/qt-console/tray-monitor/tray-monitor.cpp:391 +msgid "Opened connection with File daemon." +msgstr "Відкриті з'єднання із Збирачем." -#: src/wx-console/wxbrestorepanel.cpp:941 -#, fuzzy -msgid "Restore job is waiting for Client resource." -msgstr "Статус задачі: Очікування ресурсу Слієнту" +#: src/qt-console/tray-monitor/tray-monitor.cpp:394 +msgid "Opened connection with Storage daemon." +msgstr "Відкриті з'єднання із Зберігачем." -#: src/wx-console/wxbrestorepanel.cpp:945 -#, fuzzy -msgid "Restore job is waiting for maximum jobs." -msgstr "Статус задачі: Очікування кількості задач" +#: src/qt-console/tray-monitor/tray-monitor.cpp:445 +msgid "Error : BNET_HARDEOF or BNET_ERROR" +msgstr "" -#: src/wx-console/wxbrestorepanel.cpp:949 -#, fuzzy -msgid "Restore job is waiting for start time." -msgstr "Статус задачі: Очікування часу початку" +#: src/qt-console/tray-monitor/tray-monitor.cpp:454 +msgid "Error : Connection closed." +msgstr "Помилка : З'єднання завершено" -#: src/wx-console/wxbrestorepanel.cpp:953 +#: src/qt-console/tray-monitor/authenticate.cpp:75 #, fuzzy -msgid "Restore job is waiting for higher priority jobs to finish." -msgstr "Статус задачі: Очікування завершення пріоритетніших задач" - -#: src/wx-console/wxbrestorepanel.cpp:1002 msgid "" -"The restore job has not been started within one minute, bwx-console will not " -"wait for its completion anymore.\n" +"Director authorization problem.\n" +"Most likely the passwords do not agree.\n" +"Please see " msgstr "" +"Проблеми під час авторизації Керівником.\n" +"Швидше за все, невірні паролі.\n" +"Для отримання допомоги, будь ласка, перегляньте http://www.bacula.org/en/rel-" +"manual/Bacula_Freque_Asked_Questi.html#SECTION003760000000000000000.\n" -#: src/wx-console/wxbrestorepanel.cpp:1003 +#: src/qt-console/tray-monitor/authenticate.cpp:125 msgid "" -"The restore job has not been started within one minute, bwx-console will not " -"wait for its completion anymore." +"Director and Storage daemon passwords or names not the same.\n" +"Please see " +msgstr "" + +#: src/qt-console/tray-monitor/authenticate.cpp:132 +#, c-format +msgid "bdird set configuration file to file\n" +" -dnn set debug level to nn\n" +" -s no signals\n" +" -t test - read configuration and exit\n" +" -? print this message.\n" +"\n" msgstr "" +"\n" +"Версія: %s (%s) %s %s %s\n" +"\n" +"Використання: bat [-s] [-c config_file] [-d debug_level] [config_file]\n" +" -c set configuration file to file\n" +" -dnn set debug level to nn\n" +" -s без сигналів\n" +" -t перевірка - прочитати конфігурацію і вийти\n" +" -? print this message.\n" +"\n" -#: src/wx-console/wxbrestorepanel.cpp:1086 -msgid "Applying restore configuration changes..." -msgstr "" +#: src/qt-console/bat_conf.cpp:142 +#, c-format +msgid "Console: name=%s\n" +msgstr "Консоль: назва=%s\n" -#: src/wx-console/wxbrestorepanel.cpp:1138 -msgid "Failed to find the selected client." -msgstr "" +#~ msgid "Cannot open current directory: ERR=%s\n" +#~ msgstr "Не можливо відкрити поточну теку: ERR=%s\n" -#: src/wx-console/wxbrestorepanel.cpp:1158 -msgid "Failed to find the selected fileset." -msgstr "" +#~ msgid "Cannot get current directory: ERR=%s\n" +#~ msgstr "Не можливо отримати поточну теку: ERR=%s\n" -#: src/wx-console/wxbrestorepanel.cpp:1178 -msgid "Failed to find the selected storage." -msgstr "" +#~ msgid "Cannot reset current directory: ERR=%s\n" +#~ msgstr "Не можливо перевстановити поточну теку: ERR=%s\n" -#: src/wx-console/wxbrestorepanel.cpp:1199 -#: src/wx-console/wxbrestorepanel.cpp:1886 -msgid "Run Restore job" -msgstr "" +#~ msgid "Error in %s file %s: ERR=%s\n" +#~ msgstr "Помилка у %s файл %s: ERR=%s\n" -#: src/wx-console/wxbrestorepanel.cpp:1216 -msgid "Restore configuration changes were applied." -msgstr "" +#~ msgid "Error in %s: ERR=%s\n" +#~ msgstr "Помилка у %s: ERR=%s\n" -#: src/wx-console/wxbrestorepanel.cpp:1225 #, fuzzy -msgid "Restore cancelled.\n" -msgstr "Статус задачі: Відмінена" +#~ msgid "CreateSGenerate VSS snapshots failed. ERR=%s\n" +#~ msgstr "Не можливо створити теку %s: ERR=%s\n" -#: src/wx-console/wxbrestorepanel.cpp:1226 -#, fuzzy -msgid "Restore cancelled." -msgstr "Статус задачі: Відмінена" +#~ msgid "" +#~ "Written by Nicolas Boichat (2004)\n" +#~ "\n" +#~ "Version: %s (%s) %s %s %s\n" +#~ "\n" +#~ "Usage: tray-monitor [-c config_file] [-d debug_level]\n" +#~ " -c set configuration file to file\n" +#~ " -d set debug level to \n" +#~ " -dt print timestamp in debug output\n" +#~ " -t test - read configuration and exit\n" +#~ " -? print this message.\n" +#~ "\n" +#~ msgstr "" +#~ "Автор Nicolas Boichat (2004)\n" +#~ "\n" +#~ "Версія: %s (%s) %s %s %s\n" +#~ "\n" +#~ "Використання: tray-monitor [-c config_file] [-d debug_level]\n" +#~ " -c задати конфігураційний файл \n" +#~ " -d встановити рівень відлагоджування у \n" +#~ " -dt виводити часову мітку у даних відлагоджування\n" +#~ " -t перевірка - прогитати конфігурацію і завершити\n" +#~ " -? показати це повідомлення.\n" +#~ "\n" -#: src/wx-console/wxbrestorepanel.cpp:1248 -msgid "No results to list." -msgstr "" +#~ msgid "Bacula daemon status monitor" +#~ msgstr "Монітор статусу демонів Bacula" -#: src/wx-console/wxbrestorepanel.cpp:1250 -msgid "No backup found for this client." -msgstr "" +#~ msgid "Open status window..." +#~ msgstr "Відкрити вікно статусу" -#: src/wx-console/wxbrestorepanel.cpp:1257 -msgid "ERROR" -msgstr "" +#~ msgid "Exit" +#~ msgstr "Закінчити" -#: src/wx-console/wxbrestorepanel.cpp:1258 -msgid "Query failed" -msgstr "" +#~ msgid " (DIR)" +#~ msgstr "Керівник" -#: src/wx-console/wxbrestorepanel.cpp:1260 -msgid "Cannot get previous backups list, see console." -msgstr "" +#~ msgid " (FD)" +#~ msgstr "Збирач" -#: src/wx-console/wxbrestorepanel.cpp:1896 -msgid "JobName:" -msgstr "" +#~ msgid " (SD)" +#~ msgstr "(Зберігач)" -#: src/wx-console/wxbrestorepanel.cpp:1898 -msgid "Bootstrap:" -msgstr "" +#~ msgid "Unknown status." +#~ msgstr "Невідомий статус" -#: src/wx-console/wxbrestorepanel.cpp:1900 -msgid "Where:" -msgstr "" +#~ msgid "Refresh interval in seconds: " +#~ msgstr "Інтервал оновлення у секундах" -#: src/wx-console/wxbrestorepanel.cpp:1903 -msgid "Replace:" -msgstr "" +#~ msgid "Refresh now" +#~ msgstr "Оновити зараз" -#: src/wx-console/wxbrestorepanel.cpp:1906 -msgid "ifnewer" -msgstr "" +#~ msgid "About" +#~ msgstr "Про..." -#: src/wx-console/wxbrestorepanel.cpp:1907 -msgid "ifolder" -msgstr "" +#~ msgid "Close" +#~ msgstr "Зачинити" -#: src/wx-console/wxbrestorepanel.cpp:1911 -msgid "FileSet:" -msgstr "" +#~ msgid "Disconnecting from Director %s:%d\n" +#~ msgstr "Від'єднуюсь від Керівника %s:%d\n" -#: src/wx-console/wxbrestorepanel.cpp:1913 -msgid "Client:" -msgstr "" +#~ msgid "Disconnecting from Client %s:%d\n" +#~ msgstr "Від'єднуюсь від Клієнта %s:%d\n" -#: src/wx-console/wxbrestorepanel.cpp:1915 -#, fuzzy -msgid "Storage:" -msgstr "Зберігач" +#~ msgid "Disconnecting from Storage %s:%d\n" +#~ msgstr "Від'єднуюсь від Зберігача %s:%d\n" -#: src/wx-console/wxbrestorepanel.cpp:1917 -msgid "When:" -msgstr "" +#~ msgid "Version" +#~ msgstr "Версія" -#: src/wx-console/wxbrestorepanel.cpp:1920 -msgid "Priority:" -msgstr "" +#~ msgid "" +#~ "Current job: %s\n" +#~ "Last job: %s" +#~ msgstr "" +#~ "Поточна задача: %s\n" +#~ "Остання задача: %s" -#: src/wx-console/wxbrestorepanel.cpp:2028 -msgid "Restoring..." -msgstr "" +#~ msgid " (%d errors)" +#~ msgstr " (%d помилок)" -#: src/wx-console/console_thread.cpp:125 -#, fuzzy, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Director \"%s\" in config file.\n" -"At least one CA certificate store is required.\n" -msgstr "" -"Жоден із параметрів \"TLS CA Certificate\" або \"TLS CA Certificate Dir\" не " -"задано для Керівника \"%s\" у %s. Необхідне щонайменше одне сховище для " -"сертифікату CA.\n" +#~ msgid " (%d error)" +#~ msgstr " (%d помилка)" -#: src/wx-console/console_thread.cpp:132 -#, fuzzy -msgid "" -"No Director resource defined in config file.\n" -"Without that I don't how to speak to the Director :-(\n" -msgstr "" -"У %s не задано ресурсу Керівника\n" -"Без цього я не знаю як спілкуватись із Керівником :-(\n" +#~ msgid "No current job." +#~ msgstr "Задачі відсутні" -#: src/wx-console/console_thread.cpp:151 -#, fuzzy, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Console \"%s\" in config file.\n" -msgstr "" -"Жоден із параметрів \"TLS CA Certificate\" або \"TLS CA Certificate Dir\" не " -"задано для Консолі \"%s\" у %s.\n" +#~ msgid "Job status: Created" +#~ msgstr "Статус задачі: Створена" -#: src/wx-console/console_thread.cpp:173 -msgid "Error while initializing windows sockets...\n" -msgstr "" +#~ msgid "Job status: Running" +#~ msgstr "Статус задачі: Працює" -#: src/wx-console/console_thread.cpp:189 -msgid "Error while cleaning up windows sockets...\n" -msgstr "" +#~ msgid "Job status: Blocked" +#~ msgstr "Статус задачі: Заблокована" -#: src/wx-console/console_thread.cpp:228 -msgid "Error while initializing library." -msgstr "" +#~ msgid "Job status: Terminated" +#~ msgstr "Статус задачі: Виконана" -#: src/wx-console/console_thread.cpp:256 -#, fuzzy -msgid "Cryptographic library initialization failed.\n" -msgstr "Ініціалізація криптографії невдала.\n" +#~ msgid "Job status: Terminated in error" +#~ msgstr "Статус задачі: Виконана із помилками" -#: src/wx-console/console_thread.cpp:260 -#, fuzzy -msgid "Please correct configuration file.\n" -msgstr "Будьласка виправте файл конфігурації: %s\n" +#~ msgid "Job status: Error" +#~ msgstr "Статус задачі: Помилка" -#: src/wx-console/console_thread.cpp:302 -#, fuzzy -msgid "Error : Library not initialized\n" -msgstr "Ініціалізація криптографії невдала.\n" +#~ msgid "Job status: Fatal error" +#~ msgstr "Статус задачі: Ватальна помилка" -#: src/wx-console/console_thread.cpp:313 -#, fuzzy -msgid "Error : No configuration file loaded\n" -msgstr "Будьласка виправте файл конфігурації: %s\n" +#~ msgid "Job status: Verify differences" +#~ msgstr "Статус задачі: Паревірка різниць" -#: src/wx-console/console_thread.cpp:323 -#, fuzzy -msgid "Connecting...\n" -msgstr "З'єднано" +#~ msgid "Job status: Canceled" +#~ msgstr "Статус задачі: Відмінена" -#: src/wx-console/console_thread.cpp:339 -msgid "Error : No director defined in config file.\n" -msgstr "" +#~ msgid "Job status: Waiting on File daemon" +#~ msgstr "Статус задачі: Очікування Збирача" -#: src/wx-console/console_thread.cpp:351 -msgid "Multiple directors found in your config file.\n" -msgstr "" +#~ msgid "Job status: Waiting on the Storage daemon" +#~ msgstr "Статус задачі: Очікування Зберігача" -#: src/wx-console/console_thread.cpp:360 -#, c-format -msgid "Please choose a director (1-%d): " -msgstr "" +#~ msgid "Job status: Waiting for new media" +#~ msgstr "Статус задачі: Очікування нового носія" -#: src/wx-console/console_thread.cpp:389 -#, c-format -msgid "Passphrase for Console \"%s\" TLS private key: " -msgstr "Пароль для закритого ключа TLS Консолі \"%s\": " +#~ msgid "Job status: Waiting for Mount" +#~ msgstr "Статус задачі: Очікування монтування" -#: src/wx-console/console_thread.cpp:410 -#, c-format -msgid "Passphrase for Director \"%s\" TLS private key: " -msgstr "Пароль для закритого ключа TLS Керівника \"%s\": " +#~ msgid "Job status: Waiting for storage resource" +#~ msgstr "Статус задачі: Очікування ресурсу зберігання" -#: src/wx-console/console_thread.cpp:432 -#, fuzzy -msgid "Failed to connect to the director\n" -msgstr "Ініціалізація контексту TLS для Консолі невдала \"%s\".\n" +#~ msgid "Job status: Waiting for job resource" +#~ msgstr "Статус задачі: Очікування ресурсу задачі" -#: src/wx-console/console_thread.cpp:442 -#, fuzzy -msgid "Connected\n" -msgstr "З'єднано" +#~ msgid "Job status: Waiting for Client resource" +#~ msgstr "Статус задачі: Очікування ресурсу Слієнту" -#: src/wx-console/console_thread.cpp:499 -msgid "<< Unexpected signal received : " -msgstr "" +#~ msgid "Job status: Waiting for maximum jobs" +#~ msgstr "Статус задачі: Очікування кількості задач" -#: src/wx-console/console_thread.cpp:519 -#, fuzzy -msgid "Connection terminated\n" -msgstr "Приєднуюсь до Клієнта %s:%d\n" +#~ msgid "Job status: Waiting for start time" +#~ msgstr "Статус задачі: Очікування часу початку" -#: src/wx-console/wxbconfigpanel.cpp:213 -msgid "Apply" -msgstr "" +#~ msgid "Job status: Waiting for higher priority jobs to finish" +#~ msgstr "Статус задачі: Очікування завершення пріоритетніших задач" -#: src/wx-console/wxbhistorytextctrl.cpp:82 -#: src/wx-console/wxbhistorytextctrl.cpp:153 -#: src/wx-console/wxbmainframe.cpp:291 -msgid "Type your command below:" -msgstr "" +#~ msgid "Unknown job status %c." +#~ msgstr "Невідомий статус задачі %c. " -#: src/wx-console/wxbhistorytextctrl.cpp:117 -#, fuzzy -msgid "Unknown command." -msgstr "Невідомий статус" +#~ msgid "Job status: Unknown(%c)" +#~ msgstr "Статус задачі: Невідомий(%c)" -#: src/wx-console/wxbhistorytextctrl.cpp:126 -msgid "Possible completions: " -msgstr "" +#~ msgid "Connecting to Client %s:%d\n" +#~ msgstr "Приєднуюсь до Клієнта %s:%d\n" -#: src/wx-console/main.cpp:119 -msgid "Bacula bwx-console" -msgstr "" +#~ msgid "Connecting to Storage %s:%d\n" +#~ msgstr "Приєднуюсь до Зберігача %s:%d\n" -#: src/wx-console/main.cpp:124 src/wx-console/wxbmainframe.cpp:267 -#, c-format -msgid "Welcome to bacula bwx-console %s (%s)!\n" -msgstr "Ласкаво просимо до bacula bwx-console %s (%s)!\n" +#~ msgid "Cannot connect to daemon.\n" +#~ msgstr "Не можу приєднатись до демону.\n" -#: src/wx-console/wxbmainframe.cpp:246 -msgid "&About...\tF1" -msgstr "" +#~ msgid "Opened connection with Director daemon.\n" +#~ msgstr "Відкриті з'єднання із Керівником.\n" -#: src/wx-console/wxbmainframe.cpp:246 -msgid "Show about dialog" -msgstr "" +#~ msgid "Opened connection with File daemon.\n" +#~ msgstr "Відкриті з'єднання із Збирачем.\n" -#: src/wx-console/wxbmainframe.cpp:248 src/wx-console/wxbmainframe.cpp:619 #, fuzzy -msgid "Connect" -msgstr "З'єднано" +#~ msgid "Truncate on attributes file failed: ERR=%s\n" +#~ msgstr "Помилка у %s файл %s: ERR=%s\n" -#: src/wx-console/wxbmainframe.cpp:248 src/wx-console/wxbmainframe.cpp:620 -#, fuzzy -msgid "Connect to the director" -msgstr "Приєднуюсь до Керівника %s:%d" +#~ msgid "Bad response to Hello command: ERR=" +#~ msgstr "Погана відповідь на команду Hello: ERR=" -#: src/wx-console/wxbmainframe.cpp:249 #, fuzzy -msgid "Disconnect" -msgstr "З'єднано" +#~ msgid "# Bacula bwx-console Configuration File\n" +#~ msgstr "Будьласка виправте файл конфігурації: %s\n" -#: src/wx-console/wxbmainframe.cpp:249 #, fuzzy -msgid "Disconnect of the director" -msgstr "Від'єднуюсь від Керівника %s:%d\n" +#~ msgid "Unable to write to %s\n" +#~ msgstr "Не можливо встановити власника файлу %s: ERR=%s\n" -#: src/wx-console/wxbmainframe.cpp:251 #, fuzzy -msgid "Change of configuration file" -msgstr "Будьласка виправте файл конфігурації: %s\n" +#~ msgid "Refresh" +#~ msgstr "Оновити зараз" -#: src/wx-console/wxbmainframe.cpp:251 #, fuzzy -msgid "Change your default configuration file" -msgstr "Будьласка виправте файл конфігурації: %s\n" +#~ msgid "Filename" +#~ msgstr "Збирач" -#: src/wx-console/wxbmainframe.cpp:252 #, fuzzy -msgid "Edit your configuration file" -msgstr "Будьласка виправте файл конфігурації: %s\n" - -#: src/wx-console/wxbmainframe.cpp:254 -msgid "E&xit\tAlt-X" -msgstr "" +#~ msgid "Fileset" +#~ msgstr "Дата файлу" -#: src/wx-console/wxbmainframe.cpp:254 -msgid "Quit this program" -msgstr "" +#, fuzzy +#~ msgid "Job failed." +#~ msgstr "Статус задачі: Відмінена" -#: src/wx-console/wxbmainframe.cpp:258 -msgid "&File" -msgstr "" +#, fuzzy +#~ msgid "Restore job is waiting on File daemon." +#~ msgstr "Статус задачі: Очікування Збирача" -#: src/wx-console/wxbmainframe.cpp:259 -msgid "&Help" -msgstr "" +#, fuzzy +#~ msgid "Restore job is waiting for new media." +#~ msgstr "Статус задачі: Очікування нового носія" -#: src/wx-console/wxbmainframe.cpp:283 -msgid "" -"Warning : Unicode is disabled because you are using wxWidgets for GTK+ 1.2.\n" -msgstr "" +#, fuzzy +#~ msgid "Restore job is waiting for storage resource." +#~ msgstr "Статус задачі: Очікування ресурсу зберігання" -#: src/wx-console/wxbmainframe.cpp:287 -msgid "" -"Warning : There is a problem with wxWidgets for GTK+ 2.0 without Unicode " -"support when handling non-ASCII filenames: Every non-ASCII character in such " -"filenames will be replaced by an interrogation mark.\n" -"If this behaviour disturbs you, please build bwx-console against a Unicode " -"version of wxWidgets for GTK+ 2.0.\n" -"---\n" -msgstr "" +#, fuzzy +#~ msgid "Restore job is waiting for job resource." +#~ msgstr "Статус задачі: Очікування ресурсу задачі" -#: src/wx-console/wxbmainframe.cpp:298 -msgid "Send" -msgstr "" +#, fuzzy +#~ msgid "Restore job is waiting for Client resource." +#~ msgstr "Статус задачі: Очікування ресурсу Слієнту" -#: src/wx-console/wxbmainframe.cpp:375 src/wx-console/wxbmainframe.cpp:387 -msgid "Error while parsing command line arguments, using defaults.\n" -msgstr "" +#, fuzzy +#~ msgid "Restore job is waiting for maximum jobs." +#~ msgstr "Статус задачі: Очікування кількості задач" -#: src/wx-console/wxbmainframe.cpp:376 src/wx-console/wxbmainframe.cpp:388 -msgid "Usage: bwx-console [-c configfile] [-w tmp]\n" -msgstr "" +#, fuzzy +#~ msgid "Restore job is waiting for higher priority jobs to finish." +#~ msgstr "Статус задачі: Очікування завершення пріоритетніших задач" -#: src/wx-console/wxbmainframe.cpp:417 -#, c-format -msgid "" -"It seems that it is the first time you run bwx-console.\n" -"This file (%s) has been choosen as default configuration file.\n" -"Do you want to edit it? (if you click No you will have to select another " -"file)" -msgstr "" +#, fuzzy +#~ msgid "Restore cancelled." +#~ msgstr "Статус задачі: Відмінена" -#: src/wx-console/wxbmainframe.cpp:419 -msgid "First run" -msgstr "" +#, fuzzy +#~ msgid "Storage:" +#~ msgstr "Зберігач" -#: src/wx-console/wxbmainframe.cpp:436 -#, c-format -msgid "" -"Unable to read %s\n" -"Error: %s\n" -"Do you want to choose another one? (Press no to edit this file)" -msgstr "" +#, fuzzy +#~ msgid "" +#~ "Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined " +#~ "for Director \"%s\" in config file.\n" +#~ "At least one CA certificate store is required.\n" +#~ msgstr "" +#~ "Жоден із параметрів \"TLS CA Certificate\" або \"TLS CA Certificate Dir\" " +#~ "не задано для Керівника \"%s\" у %s. Необхідне щонайменше одне сховище " +#~ "для сертифікату CA.\n" -#: src/wx-console/wxbmainframe.cpp:438 #, fuzzy -msgid "Unable to read configuration file" -msgstr "Будьласка виправте файл конфігурації: %s\n" +#~ msgid "" +#~ "No Director resource defined in config file.\n" +#~ "Without that I don't how to speak to the Director :-(\n" +#~ msgstr "" +#~ "У %s не задано ресурсу Керівника\n" +#~ "Без цього я не знаю як спілкуватись із Керівником :-(\n" -#: src/wx-console/wxbmainframe.cpp:450 #, fuzzy -msgid "Please choose a configuration file to use" -msgstr "Будьласка виправте файл конфігурації: %s\n" +#~ msgid "" +#~ "Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined " +#~ "for Console \"%s\" in config file.\n" +#~ msgstr "" +#~ "Жоден із параметрів \"TLS CA Certificate\" або \"TLS CA Certificate Dir\" " +#~ "не задано для Консолі \"%s\" у %s.\n" -#: src/wx-console/wxbmainframe.cpp:463 -msgid "This configuration file has been successfully read, use it as default?" -msgstr "" +#, fuzzy +#~ msgid "Cryptographic library initialization failed.\n" +#~ msgstr "Ініціалізація криптографії невдала.\n" -#: src/wx-console/wxbmainframe.cpp:464 -msgid "Configuration file read successfully" -msgstr "" +#, fuzzy +#~ msgid "Please correct configuration file.\n" +#~ msgstr "Будьласка виправте файл конфігурації: %s\n" -#: src/wx-console/wxbmainframe.cpp:474 -#, fuzzy, c-format -msgid "Using this configuration file: %s\n" -msgstr "Будьласка виправте файл конфігурації: %s\n" +#, fuzzy +#~ msgid "Error : Library not initialized\n" +#~ msgstr "Ініціалізація криптографії невдала.\n" -#: src/wx-console/wxbmainframe.cpp:479 #, fuzzy -msgid "Connecting to the director..." -msgstr "Приєднуюсь до Керівника %s:%d" +#~ msgid "Error : No configuration file loaded\n" +#~ msgstr "Будьласка виправте файл конфігурації: %s\n" -#: src/wx-console/wxbmainframe.cpp:494 -msgid "Failed to unregister a data parser !" -msgstr "" +#, fuzzy +#~ msgid "Connecting...\n" +#~ msgstr "З'єднано" -#: src/wx-console/wxbmainframe.cpp:502 -msgid "Quitting.\n" -msgstr "" +#~ msgid "Passphrase for Console \"%s\" TLS private key: " +#~ msgstr "Пароль для закритого ключа TLS Консолі \"%s\": " -#: src/wx-console/wxbmainframe.cpp:517 -msgid "" -"Welcome to Bacula bwx-console.\n" -"Written by Nicolas Boichat \n" -"Copyright (C), 2005-2007 Free Software Foundation Europe, e.V.\n" -msgstr "" +#~ msgid "Passphrase for Director \"%s\" TLS private key: " +#~ msgstr "Пароль для закритого ключа TLS Керівника \"%s\": " -#: src/wx-console/wxbmainframe.cpp:521 #, fuzzy -msgid "About Bacula bwx-console" -msgstr "Ласкаво просимо до bacula bwx-console %s (%s)!\n" +#~ msgid "Failed to connect to the director\n" +#~ msgstr "Ініціалізація контексту TLS для Консолі невдала \"%s\".\n" -#: src/wx-console/wxbmainframe.cpp:527 #, fuzzy -msgid "Please choose your default configuration file" -msgstr "Будьласка виправте файл конфігурації: %s\n" +#~ msgid "Connected\n" +#~ msgstr "З'єднано" -#: src/wx-console/wxbmainframe.cpp:531 #, fuzzy -msgid "Use this configuration file as default?" -msgstr "Будьласка виправте файл конфігурації: %s\n" +#~ msgid "Connection terminated\n" +#~ msgstr "Приєднуюсь до Клієнта %s:%d\n" -#: src/wx-console/wxbmainframe.cpp:532 #, fuzzy -msgid "Configuration file" -msgstr "Будьласка виправте файл конфігурації: %s\n" +#~ msgid "Unknown command." +#~ msgstr "Невідомий статус" -#: src/wx-console/wxbmainframe.cpp:603 -msgid "Console thread terminated." -msgstr "" +#~ msgid "Welcome to bacula bwx-console %s (%s)!\n" +#~ msgstr "Ласкаво просимо до bacula bwx-console %s (%s)!\n" -#: src/wx-console/wxbmainframe.cpp:611 -msgid "Connection to the director lost. Quit program?" -msgstr "" +#, fuzzy +#~ msgid "Connect" +#~ msgstr "З'єднано" -#: src/wx-console/wxbmainframe.cpp:612 #, fuzzy -msgid "Connection lost" -msgstr "Помилка : З'єднання завершено" +#~ msgid "Connect to the director" +#~ msgstr "Приєднуюсь до Керівника %s:%d" -#: src/wx-console/wxbmainframe.cpp:628 #, fuzzy -msgid "Connected to the director." -msgstr "Приєднуюсь до Керівника %s:%d" +#~ msgid "Disconnect" +#~ msgstr "З'єднано" -#: src/wx-console/wxbmainframe.cpp:651 #, fuzzy -msgid "Reconnect" -msgstr "З'єднано" +#~ msgid "Disconnect of the director" +#~ msgstr "Від'єднуюсь від Керівника %s:%d\n" -#: src/wx-console/wxbmainframe.cpp:652 #, fuzzy -msgid "Reconnect to the director" -msgstr "Приєднуюсь до Керівника %s:%d" +#~ msgid "Change of configuration file" +#~ msgstr "Будьласка виправте файл конфігурації: %s\n" -#: src/wx-console/wxbmainframe.cpp:666 #, fuzzy -msgid "Disconnected of the director." -msgstr "Від'єднуюсь від Керівника %s:%d\n" +#~ msgid "Change your default configuration file" +#~ msgstr "Будьласка виправте файл конфігурації: %s\n" -#: src/wx-console/wxbmainframe.cpp:708 src/wx-console/wxbmainframe.cpp:725 -msgid "bwx-console: unexpected director's question." -msgstr "" +#, fuzzy +#~ msgid "Edit your configuration file" +#~ msgstr "Будьласка виправте файл конфігурації: %s\n" -#: src/qt-console/tray-monitor/tray-monitor.cpp:67 -#, fuzzy, c-format -msgid "" -"\n" -"Version: %s (%s) %s %s %s\n" -"\n" -"Usage: tray-monitor [-c config_file] [-d debug_level]\n" -" -c set configuration file to file\n" -" -d set debug level to \n" -" -dt print timestamp in debug output\n" -" -t test - read configuration and exit\n" -" -? print this message.\n" -"\n" -msgstr "" -"Автор Nicolas Boichat (2004)\n" -"\n" -"Версія: %s (%s) %s %s %s\n" -"\n" -"Використання: tray-monitor [-c config_file] [-d debug_level]\n" -" -c задати конфігураційний файл \n" -" -d встановити рівень відлагоджування у \n" -" -dt виводити часову мітку у даних відлагоджування\n" -" -t перевірка - прогитати конфігурацію і завершити\n" -" -? показати це повідомлення.\n" -"\n" +#, fuzzy +#~ msgid "Unable to read configuration file" +#~ msgstr "Будьласка виправте файл конфігурації: %s\n" -#: src/qt-console/bcomm/dircomm.cpp:92 -#, c-format -msgid "Already connected\"%s\".\n" -msgstr "Вже приєднано\"%s\".\n" +#, fuzzy +#~ msgid "Please choose a configuration file to use" +#~ msgstr "Будьласка виправте файл конфігурації: %s\n" -#: src/qt-console/bcomm/dircomm.cpp:105 -#, c-format -msgid "" -"Connecting to Director %s:%d\n" -"\n" -msgstr "" -"З'єднуюсь із Керівником %s:%d\n" -"\n" +#, fuzzy +#~ msgid "Using this configuration file: %s\n" +#~ msgstr "Будьласка виправте файл конфігурації: %s\n" -#: src/qt-console/bcomm/dircomm.cpp:208 -msgid "Initializing ..." -msgstr "Ініціалізація ..." +#, fuzzy +#~ msgid "Connecting to the director..." +#~ msgstr "Приєднуюсь до Керівника %s:%d" -#: src/qt-console/bcomm/dircomm.cpp:224 src/qt-console/console/console.cpp:142 -msgid "Connected" -msgstr "З'єднано" +#, fuzzy +#~ msgid "About Bacula bwx-console" +#~ msgstr "Ласкаво просимо до bacula bwx-console %s (%s)!\n" -#: src/qt-console/bcomm/dircomm.cpp:348 -msgid "Command completed ..." -msgstr "Команду виконано ..." +#, fuzzy +#~ msgid "Please choose your default configuration file" +#~ msgstr "Будьласка виправте файл конфігурації: %s\n" -#: src/qt-console/bcomm/dircomm.cpp:355 src/qt-console/console/console.cpp:379 -msgid "Processing command ..." -msgstr "Виконання команди ..." +#, fuzzy +#~ msgid "Use this configuration file as default?" +#~ msgstr "Будьласка виправте файл конфігурації: %s\n" -#: src/qt-console/bcomm/dircomm.cpp:362 -msgid "At main prompt waiting for input ..." -msgstr "Очікуться введення у основній рядку ..." +#, fuzzy +#~ msgid "Configuration file" +#~ msgstr "Будьласка виправте файл конфігурації: %s\n" -#: src/qt-console/bcomm/dircomm.cpp:369 src/qt-console/bcomm/dircomm.cpp:382 -msgid "At prompt waiting for input ..." -msgstr "Очікуться введення у рядку ..." +#, fuzzy +#~ msgid "Connection lost" +#~ msgstr "Помилка : З'єднання завершено" -#: src/qt-console/bcomm/dircomm.cpp:390 -msgid "Command failed." -msgstr "Помилка команди" +#, fuzzy +#~ msgid "Connected to the director." +#~ msgstr "Приєднуюсь до Керівника %s:%d" -#: src/qt-console/bcomm/dircomm.cpp:463 -msgid "Director disconnected." -msgstr "Керівник від'єднано" +#, fuzzy +#~ msgid "Reconnect" +#~ msgstr "З'єднано" -#: src/qt-console/bat_conf.cpp:154 -#, c-format -msgid "Console: name=%s\n" -msgstr "Консоль: назва=%s\n" +#, fuzzy +#~ msgid "Reconnect to the director" +#~ msgstr "Приєднуюсь до Керівника %s:%d" -#: src/qt-console/main.cpp:191 -#, c-format -msgid "" -"\n" -"Version: %s (%s) %s %s %s\n" -"\n" -"Usage: bat [-s] [-c config_file] [-d debug_level] [config_file]\n" -" -c set configuration file to file\n" -" -dnn set debug level to nn\n" -" -s no signals\n" -" -t test - read configuration and exit\n" -" -? print this message.\n" -"\n" -msgstr "" -"\n" -"Версія: %s (%s) %s %s %s\n" -"\n" -"Використання: bat [-s] [-c config_file] [-d debug_level] [config_file]\n" -" -c set configuration file to file\n" -" -dnn set debug level to nn\n" -" -s без сигналів\n" -" -t перевірка - прочитати конфігурацію і вийти\n" -" -? print this message.\n" -"\n" +#, fuzzy +#~ msgid "Disconnected of the director." +#~ msgstr "Від'єднуюсь від Керівника %s:%d\n" #~ msgid "" #~ "Authorization key rejected by Storage daemon.\n" diff --git a/bacula/projects b/bacula/projects deleted file mode 100644 index 0f997e0bf6..0000000000 --- a/bacula/projects +++ /dev/null @@ -1,1292 +0,0 @@ - -Projects: - Bacula Projects Roadmap - Status updated 8 August 2010 - -Summary: -* => item complete - -Item 1: Ability to restart failed jobs -Item 2: SD redesign -Item* 3: NDMP backup/restore -Item 4: SAP backup/restore -Item 5: Oracle backup/restore -Item 6: Zimbra and Zarafa backup/restore -Item* 7: Include timestamp of job launch in "stat clients" output -Item 8: Include all conf files in specified directory -Item 9: Reduction of communications bandwidth for a backup -Item 10: Concurrent spooling and despooling within a single job. -Item 11: Start spooling even when waiting on tape -Item*12: Add ability to Verify any specified Job. -Item 13: Data encryption on storage daemon -Item 14: Possibilty to schedule Jobs on last Friday of the month -Item 15: Scheduling syntax that permits more flexibility and options -Item 16: Ability to defer Batch Insert to a later time -Item 17: Add MaxVolumeSize/MaxVolumeBytes to Storage resource -Item 18: Message mailing based on backup types -Item 19: Handle Windows Encrypted Files using Win raw encryption -Item 20: Job migration between different SDs -Item 19. Allow FD to initiate a backup -Item 21: Implement Storage daemon compression -Item 22: Ability to import/export Bacula database entities -Item*23: Implementation of running Job speed limit. -Item 24: Add an override in Schedule for Pools based on backup types -Item 25: Automatic promotion of backup levels based on backup size -Item 26: Allow FileSet inclusion/exclusion by creation/mod times -Item 27: Archival (removal) of User Files to Tape -Item 28: Ability to reconnect a disconnected comm line -Item 29: Multiple threads in file daemon for the same job -Item 30: Automatic disabling of devices -Item 31: Enable persistent naming/number of SQL queries -Item 32: Bacula Dir, FD and SD to support proxies -Item 33: Add Minumum Spool Size directive -Item 34: Command that releases all drives in an autochanger -Item 35: Run bscan on a remote storage daemon from within bconsole. -Item 36: Implement a Migration job type that will create a reverse -Item 37: Separate "Storage" and "Device" in the bacula-dir.conf -Item 38: Least recently used device selection for tape drives in autochanger. -Item 39: Implement a Storage device like Amazon's S3. -Item*40: Convert tray monitor on Windows to a stand alone program -Item 41: Improve Bacula's tape and drive usage and cleaning management -Item 42: Relabel disk volume after recycling - -Item 1: Ability to restart failed jobs - Date: 26 April 2009 - Origin: Kern/Eric - Status: - - What: Often jobs fail because of a communications line drop or max run time, - cancel, or some other non-critical problem. Currrently any data - saved is lost. This implementation should modify the Storage daemon - so that it saves all the files that it knows are completely backed - up to the Volume - - The jobs should then be marked as incomplete and a subsequent - Incremental Accurate backup will then take into account all the - previously saved job. - - Why: Avoids backuping data already saved. - - Notes: Requires Accurate to restart correctly. Must completed have a minimum - volume of data or files stored on Volume before enabling. - -Item 2: SD redesign - Date: 8 August 2010 - Origin: Kern - Status: - - What: Various ideas for redesigns planned for the SD: - 1. One thread per drive - 2. Design a class structure for all objects in the SD. - 3. Make Device into C++ classes for each device type - 4. Make Device have a proxy (front end intercept class) that will permit control over locking and changing the real device pointer. It can also permit delaying opening, so that we can adapt to having another program that tells us the Archive device name. - 5. Allow plugins to create new on the fly devices - 6. Separate SD volume manager - 7. Volume manager tells Bacula what drive or device to use for a given volume - - Why: It will simplify the SD, make it more modular, reduce locking - conflicts, and allow multiple buffer backups. - - -Item 3: NDMP backup/restore - Date: 8 August 2010 - Origin: Bacula Systems - Status: Enterprise only if implemented by Bacula Systems - - What: Backup/restore via NDMP -- most important NetApp compatibility - - - -Item 4: SAP backup/restore - Date: 8 August 2010 - Origin: Bacula Systems - Status: Enterprise only if implemented by Bacula Systems - - What: Backup/restore SAP databases (MaxDB, Oracle, possibly DB2) - - - -Item 5: Oracle backup/restore - Date: 8 August 2010 - Origin: Bacula Systems - Status: Enterprise only if implemented by Bacula Systems - - What: Backup/restore Oracle databases - - -Item 6: Zimbra and Zarafa backup/restore - Date: 8 August 2010 - Origin: Bacula Systems - Status: Enterprise only if implemented by Bacula Systems - - What: Backup/restore for Zimbra and Zarafa - - - -Item 7: Include timestamp of job launch in "stat clients" output - Origin: Mark Bergman - Date: Tue Aug 22 17:13:39 EDT 2006 - Status: Done - - What: The "stat clients" command doesn't include any detail on when - the active backup jobs were launched. - - Why: Including the timestamp would make it much easier to decide whether - a job is running properly. - - Notes: It may be helpful to have the output from "stat clients" formatted - more like that from "stat dir" (and other commands), in a column - format. The per-client information that's currently shown (level, - client name, JobId, Volume, pool, device, Files, etc.) is good, but - somewhat hard to parse (both programmatically and visually), - particularly when there are many active clients. - - -Item 8: Include all conf files in specified directory -Date: 18 October 2008 -Origin: Database, Lda. Maputo, Mozambique -Contact:Cameron Smith / cameron.ord@database.co.mz -Status: New request - -What: A directive something like "IncludeConf = /etc/bacula/subconfs" Every - time Bacula Director restarts or reloads, it will walk the given - directory (non-recursively) and include the contents of any files - therein, as though they were appended to bacula-dir.conf - -Why: Permits simplified and safer configuration for larger installations with - many client PCs. Currently, through judicious use of JobDefs and - similar directives, it is possible to reduce the client-specific part of - a configuration to a minimum. The client-specific directives can be - prepared according to a standard template and dropped into a known - directory. However it is still necessary to add a line to the "master" - (bacula-dir.conf) referencing each new file. This exposes the master to - unnecessary risk of accidental mistakes and makes automation of adding - new client-confs, more difficult (it is easier to automate dropping a - file into a dir, than rewriting an existing file). Ken has previously - made a convincing argument for NOT including Bacula's core configuration - in an RDBMS, but I believe that the present request is a reasonable - extension to the current "flat-file-based" configuration philosophy. - -Notes: There is NO need for any special syntax to these files. They should - contain standard directives which are simply "inlined" to the parent - file as already happens when you explicitly reference an external file. - -Notes: (kes) this can already be done with scripting - From: John Jorgensen - The bacula-dir.conf at our site contains these lines: - - # - # Include subfiles associated with configuration of clients. - # They define the bulk of the Clients, Jobs, and FileSets. - # - @|"sh -c 'for f in /etc/bacula/clientdefs/*.conf ; do echo @${f} ; done'" - - and when we get a new client, we just put its configuration into - a new file called something like: - - /etc/bacula/clientdefs/clientname.conf - - - - -Item 9: Reduction of communications bandwidth for a backup - Date: 14 October 2008 - Origin: Robin O'Leary (Equiinet) - Status: - - What: Using rdiff techniques, Bacula could significantly reduce - the network data transfer volume to do a backup. - - Why: Faster backup across the Internet - - Notes: This requires retaining certain data on the client during a Full - backup that will speed up subsequent backups. - - -Item 10: Concurrent spooling and despooling within a single job. -Date: 17 nov 2009 -Origin: Jesper Krogh -Status: NEW -What: When a job has spooling enabled and the spool area size is - less than the total volumes size the storage daemon will: - 1) Spool to spool-area - 2) Despool to tape - 3) Go to 1 if more data to be backed up. - - Typical disks will serve data with a speed of 100MB/s when - dealing with large files, network it typical capable of doing 115MB/s - (GbitE). Tape drives will despool with 50-90MB/s (LTO3) 70-120MB/s - (LTO4) depending on compression and data. - - As bacula currently works it'll hold back data from the client until - de-spooling is done, now matter if the spool area can handle another - block of data. Say given a FileSet of 4TB and a spool-area of 100GB and - a Maximum Job Spool Size set to 50GB then above sequence could be - changed to allow to spool to the other 50GB while despooling the first - 50GB and not holding back the client while doing it. As above numbers - show, depending on tape-drive and disk-arrays this potentially leads to - a cut of the backup-time of 50% for the individual jobs. - - Real-world example, backing up 112.6GB (large files) to LTO4 tapes - (despools with ~75MB/s, data is gzipped on the remote filesystem. - Maximum Job Spool Size = 8GB - - Current: - Size: 112.6GB - Elapsed time (total time): 46m 15s => 2775s - Despooling time: 25m 41s => 1541s (55%) - Spooling time: 20m 34s => 1234s (45%) - Reported speed: 40.58MB/s - Spooling speed: 112.6GB/1234s => 91.25MB/s - Despooling speed: 112.6GB/1541s => 73.07MB/s - - So disk + net can "keep up" with the LTO4 drive (in this test) - - Prosed change would effectively make the backup run in the "despooling - time" 1541s giving a reduction to 55% of the total run time. - - In the situation where the individual job cannot keep up with LTO-drive - spooling enables efficient multiplexing of multiple concurrent jobs onto - the same drive. - -Why: When dealing with larger volumes the general utillization of the - network/disk is important to maximize in order to be able to run a full - backup over a weekend. Current work-around is to split the FileSet in - smaller FileSet and Jobs but that leads to more configuration mangement - and is harder to review for completeness. Subsequently it makes restores - more complex. - - - -Item 11: Start spooling even when waiting on tape - Origin: Tobias Barth - Date: 25 April 2008 - Status: - - What: If a job can be spooled to disk before writing it to tape, it should - be spooled immediately. Currently, bacula waits until the correct - tape is inserted into the drive. - - Why: It could save hours. When bacula waits on the operator who must insert - the correct tape (e.g. a new tape or a tape from another media - pool), bacula could already prepare the spooled data in the spooling - directory and immediately start despooling when the tape was - inserted by the operator. - - 2nd step: Use 2 or more spooling directories. When one directory is - currently despooling, the next (on different disk drives) could - already be spooling the next data. - - Notes: I am using bacula 2.2.8, which has none of those features - implemented. - - -Item 12: Add ability to Verify any specified Job. -Date: 17 January 2008 -Origin: portrix.net Hamburg, Germany. -Contact: Christian Sabelmann -Status: Can use jobid= in run command to select an old job - - What: - The ability to tell Bacula which Job should verify instead of - automatically verify just the last one. - - Why: - It is sad that such a powerfull feature like Verify Jobs - (VolumeToCatalog) is restricted to be used only with the last backup Job - of a client. Actual users who have to do daily Backups are forced to - also do daily Verify Jobs in order to take advantage of this useful - feature. This Daily Verify after Backup conduct is not always desired - and Verify Jobs have to be sometimes scheduled. (Not necessarily - scheduled in Bacula). With this feature Admins can verify Jobs once a - Week or less per month, selecting the Jobs they want to verify. This - feature is also not to difficult to implement taking in account older bug - reports about this feature and the selection of the Job to be verified. - - Notes: For the verify Job, the user could select the Job to be verified - from a List of the latest Jobs of a client. It would also be possible to - verify a certain volume. All of these would naturaly apply only for - Jobs whose file information are still in the catalog. - - -Item 13: Data encryption on storage daemon - Origin: Tobias Barth - Date: 04 February 2009 - Status: new - - What: The storage demon should be able to do the data encryption that can - currently be done by the file daemon. - - Why: This would have 2 advantages: - 1) one could encrypt the data of unencrypted tapes by doing a - migration job - 2) the storage daemon would be the only machine that would have - to keep the encryption keys. - - Notes from Landon: - As an addendum to the feature request, here are some crypto - implementation details I wrote up regarding SD-encryption back in Jan - 2008: - http://www.mail-archive.com/bacula-users@lists.sourceforge.net/msg28860.html - - - -Item 14: Possibilty to schedule Jobs on last Friday of the month -Origin: Carsten Menke -Date: 02 March 2008 -Status: - - What: Currently if you want to run your monthly Backups on the last - Friday of each month this is only possible with workarounds (e.g - scripting) (As some months got 4 Fridays and some got 5 Fridays) - The same is true if you plan to run your yearly Backups on the - last Friday of the year. It would be nice to have the ability to - use the builtin scheduler for this. - - Why: In many companies the last working day of the week is Friday (or - Saturday), so to get the most data of the month onto the monthly - tape, the employees are advised to insert the tape for the - monthly backups on the last friday of the month. - - Notes: To give this a complete functionality it would be nice if the - "first" and "last" Keywords could be implemented in the - scheduler, so it is also possible to run monthy backups at the - first friday of the month and many things more. So if the syntax - would expand to this {first|last} {Month|Week|Day|Mo-Fri} of the - {Year|Month|Week} you would be able to run really flexible jobs. - - To got a certain Job run on the last Friday of the Month for example - one could then write - - Run = pool=Monthly last Fri of the Month at 23:50 - - ## Yearly Backup - - Run = pool=Yearly last Fri of the Year at 23:50 - - ## Certain Jobs the last Week of a Month - - Run = pool=LastWeek last Week of the Month at 23:50 - - ## Monthly Backup on the last day of the month - - Run = pool=Monthly last Day of the Month at 23:50 - -Item 15: Scheduling syntax that permits more flexibility and options - Date: 15 December 2006 - Origin: Gregory Brauer (greg at wildbrain dot com) and - Florian Schnabel - Status: - - What: Currently, Bacula only understands how to deal with weeks of the - month or weeks of the year in schedules. This makes it impossible - to do a true weekly rotation of tapes. There will always be a - discontinuity that will require disruptive manual intervention at - least monthly or yearly because week boundaries never align with - month or year boundaries. - - A solution would be to add a new syntax that defines (at least) - a start timestamp, and repetition period. - - An easy option to skip a certain job on a certain date. - - - Why: Rotated backups done at weekly intervals are useful, and Bacula - cannot currently do them without extensive hacking. - - You could then easily skip tape backups on holidays. Especially - if you got no autochanger and can only fit one backup on a tape - that would be really handy, other jobs could proceed normally - and you won't get errors that way. - - - Notes: Here is an example syntax showing a 3-week rotation where full - Backups would be performed every week on Saturday, and an - incremental would be performed every week on Tuesday. Each - set of tapes could be removed from the loader for the following - two cycles before coming back and being reused on the third - week. Since the execution times are determined by intervals - from a given point in time, there will never be any issues with - having to adjust to any sort of arbitrary time boundary. In - the example provided, I even define the starting schedule - as crossing both a year and a month boundary, but the run times - would be based on the "Repeat" value and would therefore happen - weekly as desired. - - - Schedule { - Name = "Week 1 Rotation" - #Saturday. Would run Dec 30, Jan 20, Feb 10, etc. - Run { - Options { - Type = Full - Start = 2006-12-30 01:00 - Repeat = 3w - } - } - #Tuesday. Would run Jan 2, Jan 23, Feb 13, etc. - Run { - Options { - Type = Incremental - Start = 2007-01-02 01:00 - Repeat = 3w - } - } - } - - Schedule { - Name = "Week 2 Rotation" - #Saturday. Would run Jan 6, Jan 27, Feb 17, etc. - Run { - Options { - Type = Full - Start = 2007-01-06 01:00 - Repeat = 3w - } - } - #Tuesday. Would run Jan 9, Jan 30, Feb 20, etc. - Run { - Options { - Type = Incremental - Start = 2007-01-09 01:00 - Repeat = 3w - } - } - } - - Schedule { - Name = "Week 3 Rotation" - #Saturday. Would run Jan 13, Feb 3, Feb 24, etc. - Run { - Options { - Type = Full - Start = 2007-01-13 01:00 - Repeat = 3w - } - } - #Tuesday. Would run Jan 16, Feb 6, Feb 27, etc. - Run { - Options { - Type = Incremental - Start = 2007-01-16 01:00 - Repeat = 3w - } - } - } - - Notes: Kern: I have merged the previously separate project of skipping - jobs (via Schedule syntax) into this. - - -Item 16: Ability to defer Batch Insert to a later time - Date: 26 April 2009 - Origin: Eric - Status: - - What: Instead of doing a Job Batch Insert at the end of the Job - which might create resource contention with lots of Job, - defer the insert to a later time. - - Why: Permits to focus on getting the data on the Volume and - putting the metadata into the Catalog outside the backup - window. - - Notes: Will use the proposed Bacula ASCII database import/export - format (i.e. dependent on the import/export entities project). - - -Item 17: Add MaxVolumeSize/MaxVolumeBytes to Storage resource - Origin: Bastian Friedrich - Date: 2008-07-09 - Status: - - - What: SD has a "Maximum Volume Size" statement, which is deprecated and - superseded by the Pool resource statement "Maximum Volume Bytes". - It would be good if either statement could be used in Storage - resources. - - Why: Pools do not have to be restricted to a single storage type/device; - thus, it may be impossible to define Maximum Volume Bytes in the - Pool resource. The old MaxVolSize statement is deprecated, as it - is SD side only. I am using the same pool for different devices. - - Notes: State of idea currently unknown. Storage resources in the dir - config currently translate to very slim catalog entries; these - entries would require extensions to implement what is described - here. Quite possibly, numerous other statements that are currently - available in Pool resources could be used in Storage resources too - quite well. - - -Item 18: Message mailing based on backup types - Origin: Evan Kaufman - Date: January 6, 2006 - Status: - - What: In the "Messages" resource definitions, allowing messages - to be mailed based on the type (backup, restore, etc.) and level - (full, differential, etc) of job that created the originating - message(s). - - Why: It would, for example, allow someone's boss to be emailed - automatically only when a Full Backup job runs, so he can - retrieve the tapes for offsite storage, even if the IT dept. - doesn't (or can't) explicitly notify him. At the same time, his - mailbox wouldnt be filled by notifications of Verifies, Restores, - or Incremental/Differential Backups (which would likely be kept - onsite). - - Notes: One way this could be done is through additional message types, for - example: - - Messages { - # email the boss only on full system backups - Mail = boss@mycompany.com = full, !incremental, !differential, !restore, - !verify, !admin - # email us only when something breaks - MailOnError = itdept@mycompany.com = all - } - - Notes: Kern: This should be rather trivial to implement. - - -Item 19: Handle Windows Encrypted Files using Win raw encryption - Origin: Michael Mohr, SAG Mohr.External@infineon.com - Date: 22 February 2008 - Origin: Alex Ehrlich (Alex.Ehrlich-at-mail.ee) - Date: 05 August 2008 - Status: - - What: Make it possible to backup and restore Encypted Files from and to - Windows systems without the need to decrypt it by using the raw - encryption functions API (see: - http://msdn2.microsoft.com/en-us/library/aa363783.aspx) - that is provided for that reason by Microsoft. - If a file ist encrypted could be examined by evaluating the - FILE_ATTRIBUTE_ENCRYTED flag of the GetFileAttributes - function. - For each file backed up or restored by FD on Windows, check if - the file is encrypted; if so then use OpenEncryptedFileRaw, - ReadEncryptedFileRaw, WriteEncryptedFileRaw, - CloseEncryptedFileRaw instead of BackupRead and BackupWrite - API calls. - - Why: Without the usage of this interface the fd-daemon running - under the system account can't read encypted Files because - the key needed for the decrytion is missed by them. As a result - actually encrypted files are not backed up - by bacula and also no error is shown while missing these files. - - Notes: Using xxxEncryptedFileRaw API would allow to backup and - restore EFS-encrypted files without decrypting their data. - Note that such files cannot be restored "portably" (at least, - easily) but they would be restoreable to a different (or - reinstalled) Win32 machine; the restore would require setup - of a EFS recovery agent in advance, of course, and this shall - be clearly reflected in the documentation, but this is the - normal Windows SysAdmin's business. - When "portable" backup is requested the EFS-encrypted files - shall be clearly reported as errors. - See MSDN on the "Backup and Restore of Encrypted Files" topic: - http://msdn.microsoft.com/en-us/library/aa363783.aspx - Maybe the EFS support requires a new flag in the database for - each file, too? - Unfortunately, the implementation is not as straightforward as - 1-to-1 replacement of BackupRead with ReadEncryptedFileRaw, - requiring some FD code rewrite to work with - encrypted-file-related callback functions. - -Item 20: Job migration between different SDs -Origin: Mariusz Czulada -Date: 07 May 2007 -Status: NEW - -What: Allow to specify in migration job devices on Storage Daemon other then - the one used for migrated jobs (possibly on different/distant host) - -Why: Sometimes we have more then one system which requires backup - implementation. Often, these systems are functionally unrelated and - placed in different locations. Having a big backup device (a tape - library) in each location is not cost-effective. It would be much - better to have one powerful enough tape library which could handle - backups from all systems, assuming relatively fast and reliable WAN - connections. In such architecture backups are done in service windows - on local bacula servers, then migrated to central storage off the peak - hours. - -Notes: If migration to different SD is working, migration to the same SD, as - now, could be done the same way (i mean 'localhost') to unify the - whole process - -Item 19. Allow FD to initiate a backup -Origin: Frank Volf (frank at deze dot org) -Date: 17 November 2005 -Status: - -What: Provide some means, possibly by a restricted console that - allows a FD to initiate a backup, and that uses the connection - established by the FD to the Director for the backup so that - a Director that is firewalled can do the backup. -Why: Makes backup of laptops much easier. -Notes: - The FD already has code for the monitor interface - - It could be nice to have a .job command that lists authorized - jobs. - - Commands need to be restricted on the Director side - (for example by re-using the runscript flag) - - The Client resource can be used to authorize the connection - - In a first time, the client can't modify job parameters - - We need a way to run a status command to follow job progression - - This project consists of the following points - 1. Modify the FD to have a "mini-console" interface that - permits it to connect to the Director and start a - backup job of itself. - 2. The list of jobs that can be started by the FD are - defined in the Director (possibly via a restricted - console). - 3. Modify the existing tray monitor code in the Win32 FD - so that it is a separate program from the FD. - 4. The tray monitor program should be extended to permit - initiating a backup. - 5. No new Director directives should be added without - prior consultation with the Bacula developers. - 6. The comm line used by the FD to connect to the Director - should be re-used by the Director to do the backup. - This feature is partially implemented in the Director. - 7. The FD may have a new directive that allows it to start - a backup when the FD starts. - 8. The console interface to the FD should be extended to - permit a properly authorized console to initiate a - backup via the FD. - - -Item 21: Implement Storage daemon compression - Date: 18 December 2006 - Origin: Vadim A. Umanski , e-mail umanski@ext.ru - Status: - What: The ability to compress backup data on the SD receiving data - instead of doing that on client sending data. - Why: The need is practical. I've got some machines that can send - data to the network 4 or 5 times faster than compressing - them (I've measured that). They're using fast enough SCSI/FC - disk subsystems but rather slow CPUs (ex. UltraSPARC II). - And the backup server has got a quite fast CPUs (ex. Dual P4 - Xeons) and quite a low load. When you have 20, 50 or 100 GB - of raw data - running a job 4 to 5 times faster - that - really matters. On the other hand, the data can be - compressed 50% or better - so losing twice more space for - disk backup is not good at all. And the network is all mine - (I have a dedicated management/provisioning network) and I - can get as high bandwidth as I need - 100Mbps, 1000Mbps... - That's why the server-side compression feature is needed! - Notes: - -Item 22: Ability to import/export Bacula database entities - Date: 26 April 2009 - Origin: Eric - Status: - - What: Create a Bacula ASCII SQL database independent format that permits - importing and exporting database catalog Job entities. - - Why: For achival, database clustering, tranfer to other databases - of any SQL engine. - - Notes: Job selection should be by Job, time, Volume, Client, Pool and possibly - other criteria. - - -Item 23: Implementation of running Job speed limit. -Origin: Alex F, alexxzell at yahoo dot com -Date: 29 January 2009 - -What: I noticed the need for an integrated bandwidth limiter for - running jobs. It would be very useful just to specify another - field in bacula-dir.conf, like speed = how much speed you wish - for that specific job to run at - -Why: Because of a couple of reasons. First, it's very hard to implement a - traffic shaping utility and also make it reliable. Second, it is very - uncomfortable to have to implement these apps to, let's say 50 clients - (including desktops, servers). This would also be unreliable because you - have to make sure that the apps are properly working when needed; users - could also disable them (accidentally or not). It would be very useful - to provide Bacula this ability. All information would be centralized, - you would not have to go to 50 different clients in 10 different - locations for configuration; eliminating 3rd party additions help in - establishing efficiency. Would also avoid bandwidth congestion, - especially where there is little available. - - -Item 24: Add an override in Schedule for Pools based on backup types -Date: 19 Jan 2005 -Origin: Chad Slater -Status: - - What: Adding a FullStorage=BigTapeLibrary in the Schedule resource - would help those of us who use different storage devices for different - backup levels cope with the "auto-upgrade" of a backup. - - Why: Assume I add several new devices to be backed up, i.e. several - hosts with 1TB RAID. To avoid tape switching hassles, incrementals are - stored in a disk set on a 2TB RAID. If you add these devices in the - middle of the month, the incrementals are upgraded to "full" backups, - but they try to use the same storage device as requested in the - incremental job, filling up the RAID holding the differentials. If we - could override the Storage parameter for full and/or differential - backups, then the Full job would use the proper Storage device, which - has more capacity (i.e. a 8TB tape library. - - -Item 25: Automatic promotion of backup levels based on backup size - Date: 19 January 2006 - Origin: Adam Thornton - Status: - - What: Other backup programs have a feature whereby it estimates the space - that a differential, incremental, and full backup would take. If - the difference in space required between the scheduled level and the - next level up is beneath some user-defined critical threshold, the - backup level is bumped to the next type. Doing this minimizes the - number of volumes necessary during a restore, with a fairly minimal - cost in backup media space. - - Why: I know at least one (quite sophisticated and smart) user for whom the - absence of this feature is a deal-breaker in terms of using Bacula; - if we had it it would eliminate the one cool thing other backup - programs can do and we can't (at least, the one cool thing I know - of). - - -Item 26: Allow FileSet inclusion/exclusion by creation/mod times - Origin: Evan Kaufman - Date: January 11, 2006 - Status: - - What: In the vein of the Wild and Regex directives in a Fileset's - Options, it would be helpful to allow a user to include or exclude - files and directories by creation or modification times. - - You could factor the Exclude=yes|no option in much the same way it - affects the Wild and Regex directives. For example, you could exclude - all files modified before a certain date: - - Options { - Exclude = yes - Modified Before = #### - } - - Or you could exclude all files created/modified since a certain date: - - Options { - Exclude = yes - Created Modified Since = #### - } - - The format of the time/date could be done several ways, say the number - of seconds since the epoch: - 1137008553 = Jan 11 2006, 1:42:33PM # result of `date +%s` - - Or a human readable date in a cryptic form: - 20060111134233 = Jan 11 2006, 1:42:33PM # YYYYMMDDhhmmss - - Why: I imagine a feature like this could have many uses. It would - allow a user to do a full backup while excluding the base operating - system files, so if I installed a Linux snapshot from a CD yesterday, - I'll *exclude* all files modified *before* today. If I need to - recover the system, I use the CD I already have, plus the tape backup. - Or if, say, a Windows client is hit by a particularly corrosive - virus, and I need to *exclude* any files created/modified *since* the - time of infection. - - Notes: Of course, this feature would work in concert with other - in/exclude rules, and wouldnt override them (or each other). - - Notes: The directives I'd imagine would be along the lines of - "[Created] [Modified] [Before|Since] = ". - So one could compare against 'ctime' and/or 'mtime', but ONLY 'before' - or 'since'. - - -Item 27: Archival (removal) of User Files to Tape - Date: Nov. 24/2005 - Origin: Ray Pengelly [ray at biomed dot queensu dot ca - Status: - - What: The ability to archive data to storage based on certain parameters - such as age, size, or location. Once the data has been written to - storage and logged it is then pruned from the originating - filesystem. Note! We are talking about user's files and not - Bacula Volumes. - - Why: This would allow fully automatic storage management which becomes - useful for large datastores. It would also allow for auto-staging - from one media type to another. - - Example 1) Medical imaging needs to store large amounts of data. - They decide to keep data on their servers for 6 months and then put - it away for long term storage. The server then finds all files - older than 6 months writes them to tape. The files are then removed - from the server. - - Example 2) All data that hasn't been accessed in 2 months could be - moved from high-cost, fibre-channel disk storage to a low-cost - large-capacity SATA disk storage pool which doesn't have as quick of - access time. Then after another 6 months (or possibly as one - storage pool gets full) data is migrated to Tape. - -Item 28: Ability to reconnect a disconnected comm line - Date: 26 April 2009 - Origin: Kern/Eric - Status: - - What: Often jobs fail because of a communications line drop. In that - case, Bacula should be able to reconnect to the other daemon and - resume the job. - - Why: Avoids backuping data already saved. - - Notes: *Very* complicated from a design point of view because of authenication. - -Item 29: Multiple threads in file daemon for the same job - Date: 27 November 2005 - Origin: Ove Risberg (Ove.Risberg at octocode dot com) - Status: - - What: I want the file daemon to start multiple threads for a backup - job so the fastest possible backup can be made. - - The file daemon could parse the FileSet information and start - one thread for each File entry located on a separate - filesystem. - - A confiuration option in the job section should be used to - enable or disable this feature. The confgutration option could - specify the maximum number of threads in the file daemon. - - If the theads could spool the data to separate spool files - the restore process will not be much slower. - - Why: Multiple concurrent backups of a large fileserver with many - disks and controllers will be much faster. - - Notes: (KES) This is not necessary and could be accomplished - by having two jobs. In addition, the current VSS code - is single thread. - - -Item 30: Automatic disabling of devices - Date: 2005-11-11 - Origin: Peter Eriksson - Status: - - What: After a configurable amount of fatal errors with a tape drive - Bacula should automatically disable further use of a certain - tape drive. There should also be "disable"/"enable" commands in - the "bconsole" tool. - - Why: On a multi-drive jukebox there is a possibility of tape drives - going bad during large backups (needing a cleaning tape run, - tapes getting stuck). It would be advantageous if Bacula would - automatically disable further use of a problematic tape drive - after a configurable amount of errors has occurred. - - An example: I have a multi-drive jukebox (6 drives, 380+ slots) - where tapes occasionally get stuck inside the drive. Bacula will - notice that the "mtx-changer" command will fail and then fail - any backup jobs trying to use that drive. However, it will still - keep on trying to run new jobs using that drive and fail - - forever, and thus failing lots and lots of jobs... Since we have - many drives Bacula could have just automatically disabled - further use of that drive and used one of the other ones - instead. - - -Item 31: Enable persistent naming/number of SQL queries - Date: 24 Jan, 2007 - Origin: Mark Bergman - Status: - - What: - Change the parsing of the query.sql file and the query command so that - queries are named/numbered by a fixed value, not their order in the - file. - - - Why: - One of the real strengths of bacula is the ability to query the - database, and the fact that complex queries can be saved and - referenced from a file is very powerful. However, the choice - of query (both for interactive use, and by scripting input - to the bconsole command) is completely dependent on the order - within the query.sql file. The descriptve labels are helpful for - interactive use, but users become used to calling a particular - query "by number", or may use scripts to execute queries. This - presents a problem if the number or order of queries in the file - changes. - - If the query.sql file used the numeric tags as a real value (rather - than a comment), then users could have a higher confidence that they - are executing the intended query, that their local changes wouldn't - conflict with future bacula upgrades. - - For scripting, it's very important that the intended query is - what's actually executed. The current method of parsing the - query.sql file discourages scripting because the addition or - deletion of queries within the file will require corresponding - changes to scripts. It may not be obvious to users that deleting - query "17" in the query.sql file will require changing all - references to higher numbered queries. Similarly, when new - bacula distributions change the number of "official" queries, - user-developed queries cannot simply be appended to the file - without also changing any references to those queries in scripts - or procedural documentation, etc. - - In addition, using fixed numbers for queries would encourage more - user-initiated development of queries, by supporting conventions - such as: - - queries numbered 1-50 are supported/developed/distributed by - with official bacula releases - - queries numbered 100-200 are community contributed, and are - related to media management - - queries numbered 201-300 are community contributed, and are - related to checksums, finding duplicated files across - different backups, etc. - - queries numbered 301-400 are community contributed, and are - related to backup statistics (average file size, size per - client per backup level, time for all clients by backup level, - storage capacity by media type, etc.) - - queries numbered 500-999 are locally created - - Notes: - Alternatively, queries could be called by keyword (tag), rather - than by number. - - -Item 32: Bacula Dir, FD and SD to support proxies -Origin: Karl Grindley @ MIT Lincoln Laboratory -Date: 25 March 2009 -Status: proposed - -What: Support alternate methods for nailing up a TCP session such - as SOCKS5, SOCKS4 and HTTP (CONNECT) proxies. Such a feature - would allow tunneling of bacula traffic in and out of proxied - networks. - -Why: Currently, bacula is architected to only function on a flat network, with - no barriers or limitations. Due to the large configuration states of - any network and the infinite configuration where file daemons and - storage daemons may sit in relation to one another, bacula often is - not usable on a network where filtered or air-gaped networks exist. - While often solutions such as ACL modifications to firewalls or port - redirection via SNAT or DNAT will solve the issue, often however, - these solutions are not adequate or not allowed by hard policy. - - In an air-gapped network with only a highly locked down proxy services - are provided (SOCKS4/5 and/or HTTP and/or SSH outbound) ACLs or - iptable rules will not work. - -Notes: Director resource tunneling: This configuration option to utilize a - proxy to connect to a client should be specified in the client - resource Client resource tunneling: should be configured in the client - resource in the director config file? Or configured on the bacula-fd - configuration file on the fd host itself? If the ladder, this would - allow only certain clients to use a proxy, where others do not when - establishing the TCP connection to the storage server. - - Also worth noting, there are other 3rd party, light weight apps that - could be utilized to bootstrap this. Instead of sockifing bacula - itself, use an external program to broker proxy authentication, and - connection to the remote host. OpenSSH does this by using the - "ProxyCommand" syntax in the client configuration and uses stdin and - stdout to the command. Connect.c is a very popular one. - (http://bent.latency.net/bent/darcs/goto-san-connect-1.85/src/connect.html). - One could also possibly use stunnel, netcat, etc. - - -Item 33: Add Minumum Spool Size directive -Date: 20 March 2008 -Origin: Frank Sweetser - - What: Add a new SD directive, "minimum spool size" (or similar). This - directive would specify a minimum level of free space available for - spooling. If the unused spool space is less than this level, any - new spooling requests would be blocked as if the "maximum spool - size" threshold had bee reached. Already spooling jobs would be - unaffected by this directive. - - Why: I've been bitten by this scenario a couple of times: - - Assume a maximum spool size of 100M. Two concurrent jobs, A and B, - are both running. Due to timing quirks and previously running jobs, - job A has used 99.9M of space in the spool directory. While A is - busy despooling to disk, B is happily using the remaining 0.1M of - spool space. This ends up in a spool/despool sequence every 0.1M of - data. In addition to fragmenting the data on the volume far more - than was necessary, in larger data sets (ie, tens or hundreds of - gigabytes) it can easily produce multi-megabyte report emails! - - - - - -Item 34: Command that releases all drives in an autochanger - Origin: Blake Dunlap (blake@nxs.net) - Date: 10/07/2009 - Status: Request - - What: It would be nice if there was a release command that - would release all drives in an autochanger instead of having to - do each one in turn. - - Why: It can take some time for a release to occur, and the - commands must be given for each drive in turn, which can quicky - scale if there are several drives in the library. (Having to - watch the console, to give each command can waste a good bit of - time when you start getting into the 16 drive range when the - tapes can take up to 3 minutes to eject each) - - Notes: Due to the way some autochangers/libraries work, you - cannot assume that new tapes inserted will go into slots that are - not currently believed to be in use by bacula (the tape from that - slot is in a drive). This would make any changes in - configuration quicker/easier, as all drives need to be released - before any modifications to slots. - -Item 35: Run bscan on a remote storage daemon from within bconsole. - Date: 07 October 2009 - Origin: Graham Keeling - Status: Proposing - - What: The ability to be able to run bscan on a remote storage daemon from - within bconsole in order to populate your catalog. - - Why: Currently, it seems you have to: - a) log in to a console on the remote machine - b) figure out where the storage daemon config file is - c) figure out the storage device from the config file - d) figure out the catalog IP address - e) figure out the catalog port - f) open the port on the catalog firewall - g) configure the catalog database to accept connections from the - remote host - h) build a 'bscan' command from (b)-(e) above and run it - It would be much nicer to be able to type something like this into - bconsole: - *bscan storage= device= volume= - or something like: - *bscan storage= all - It seems to me that the scan could also do a better job than the - external bscan program currently does. It would possibly be able to - deduce some extra details, such as the catalog StorageId for the - volumes. - - Notes: (Kern). If you need to do a bscan, you have done something wrong, - so this functionality should not need to be integrated into the - the Storage daemon. However, I am not opposed to someone implementing - this feature providing that all the code is in a shared object (or dll) - and does not add significantly to the size of the Storage daemon. In - addition, the code should be written in a way such that the same source - code is used in both the bscan program and the Storage daemon to avoid - adding a lot of new code that must be maintained by the project. - -Item 36: Implement a Migration job type that will create a reverse - incremental (or decremental) backup from two existing full backups. - Date: 05 October 2009 - Origin: Griffith College Dublin. Some sponsorship available. - Contact: Gavin McCullagh - Status: - - What: The ability to take two full backup jobs and derive a reverse - incremental backup from them. The older full backup data may then - be discarded. - - Why: Long-term backups based on keeping full backups can be expensive in - media. In many cases (eg a NAS), as the client accumulates files - over months and years, the same file will be duplicated unchanged, - across many media and datasets. Eg, Less than 10% (and - shrinking) of our monthly full mail server backup is new files, - the other 90% is also in the previous full backup. - Regularly converting the oldest full backup into a reverse - incremental backup allows the admin to keep access to old backup - jobs, but remove all of the duplicated files, freeing up media. - - Notes: This feature was previously discussed on the bacula-devel list - here: http://www.mail-archive.com/bacula-devel@lists.sourceforge.net/msg04962.html - -Item 37: Separate "Storage" and "Device" in the bacula-dir.conf - Date: 29 April 2009 - Origin: "James Harper" - Status: not implemented or documented - - What: Separate "Storage" and "Device" in the bacula-dir.conf - The resulting config would looks something like: - - Storage { - Name = name_of_server - Address = hostname/IP address - SDPort = 9103 - Password = shh_its_a_secret - Maximum Concurrent Jobs = 7 - } - - Device { - Name = name_of_device - Storage = name_of_server - Device = name_of_device_on_sd - Media Type = media_type - Maximum Concurrent Jobs = 1 - } - - Maximum Concurrent Jobs would be specified with a server and a device - maximum, which would both be honoured by the director. Almost everything - that mentions a 'Storage' would need to be changed to 'Device', although - perhaps a 'Storage' would just be a synonym for 'Device' for backwards - compatibility... - - Why: If you have multiple Storage definitions pointing to different - Devices in the same Storage daemon, the "status storage" command - prompts for each different device, but they all give the same - information. - - Notes: - -Item 38: Least recently used device selection for tape drives in autochanger. -Date: 12 October 2009 -Origin: Thomas Carter -Status: Proposal - -What: A better tape drive selection algorithm for multi-drive - autochangers. The AUTOCHANGER class contains an array list of tape - devices. When a tape drive is needed, this list is always searched in - order. This causes lower number drives (specifically drive 0) to do a - majority of the work with higher numbered drives possibly never being - used. When a drive in an autochanger is reserved for use, its entry should - be moved to the end of the list; this would give a rough LRU drive - selection. - -Why: The current implementation places a majority of use and wear on drive - 0 of a multi-drive autochanger. - -Notes: - -Item 39: Implement a Storage device like Amazon's S3. - Date: 25 August 2008 - Origin: Soren Hansen - Status: Not started. - What: Enable the storage daemon to store backup data on Amazon's - S3 service. - - Why: Amazon's S3 is a cheap way to store data off-site. - - Notes: If we configure the Pool to put only one job per volume (they don't - support append operation), and the volume size isn't to big (100MB?), - it should be easy to adapt the disk-changer script to add get/put - procedure with curl. So, the data would be safetly copied during the - Job. - - Cloud should be only used with Copy jobs, users should always have - a copy of their data on their site. - - We should also think to have our own cache, trying always to have - cloud volume on the local disk. (I don't know if users want to store - 100GB on cloud, so it shouldn't be a disk size problem). For example, - if bacula want to recycle a volume, it will start by downloading the - file to truncate it few seconds later, if we can avoid that... - -Item 40: Convert tray monitor on Windows to a stand alone program - Date: 26 April 2009 - Origin: Kern/Eric - Status: - - What: Separate Win32 tray monitor to be a separate program. - - Why: Vista does not allow SYSTEM services to interact with the - desktop, so the current tray monitor does not work on Vista - machines. - - Notes: Requires communicating with the FD via the network (simulate - a console connection). - -Item 41: Improve Bacula's tape and drive usage and cleaning management - Date: 8 November 2005, November 11, 2005 - Origin: Adam Thornton , - Arno Lehmann - Status: - - What: - 1. Measure tape and drive usage (mostly implemented) - 2. Retiring a volume when too old or too many errors - 3. Handle cleaning and tape alerts. - - Why: Needed - - -Item 42: Relabel disk volume after recycling - Origin: Pasi Kärkkäinen - Date: 07 May 2009. - Status: Not implemented yet, no code written. - - What: The ability to relabel the disk volume (and thus rename the file on the - disk) after it has been recycled. Useful when you have a single job - per disk volume, and you use a custom Label format, for example: - Label Format = - "${Client}-${Level}-${NumVols:p/4/0/r}-${Year}_${Month}_${Day}-${Hour}_${Minute}" - - Why: Disk volumes in Bacula get the label/filename when they are used for the - first time. If you use recycling and custom label format like above, - the disk volume name doesn't match the contents after it has been - recycled. This feature makes it possible to keep the label/filename - in sync with the content and thus makes it easy to check/monitor the - backups from the shell and/or normal file management tools, because - the filenames of the disk volumes match the content. - - Notes: The configuration option could be "Relabel after Recycling = Yes". - - - -========= New items after last vote ==================== - - -Note to renumber items use: -scripts/renumber_projects.pl projects >1 - - -========= Add new items above this line ================= - - -============= Empty Feature Request form =========== -Item n: One line summary ... - Date: Date submitted - Origin: Name and email of originator. - Status: - - What: More detailed explanation ... - - Why: Why it is important ... - - Notes: Additional notes or features (omit if not used) -============== End Feature Request form ============== - - -========== Items put on hold by Kern ============================ - - -========== Items completed in version 5.0.0 ==================== -*Item : 'restore' menu: enter a JobId, automatically select dependents -*Item : Deletion of disk Volumes when pruned (partial -- truncate when pruned) -*Item : Implement Base jobs -*Item : Restore from volumes on multiple storage daemons -*Item : Enable/disable compression depending on storage device (disk/tape) -*Item : Cause daemons to use a specific IP address to source communications -*Item : "Maximum Concurrent Jobs" for drives when used with changer device -*Item : List InChanger flag when doing restore. -*Item : Port bat to Win32 -*Item : An option to operate on all pools with update vol parameters -========== Item completed after 5.0.0 ========================== -*Item : Add ability to Verify any specified Job. diff --git a/bacula/release/config b/bacula/release/config index 58aefac640..3646fe55ea 100644 --- a/bacula/release/config +++ b/bacula/release/config @@ -4,28 +4,30 @@ # # Set to the Branch you are working on # -branch=Branch-5.2 -# +branch=${branch:-Branch-5.3} +# # set reltype to release or beta -- for upload and setting DEVELOPER -reltype=release - +reltype=beta repo=$reltype # Bacula git repos -bacula=${bacula:-${HOME}/bacula/k} +bacula=${bacula:-${HOME}/bee/bacula} docs=${docs:-${HOME}/bacula/docs} -gpgkey=${gpgkey:-bacula} + +# Limit bw to upload on the website +max_bw=${max_bw:-80} +upload_opt="--bwlimit=$max_bw" # # Set the following to your remote name. By default it is origin. -remote=${remote:-origin} -push=no +remote=bs +export push=no # # Note, you will probably want to set updatepo=no if you # run this script multiple times for a given release. -updatepo=no +export updatepo=no cwd=`pwd` @@ -35,18 +37,15 @@ if [ $? -ne 0 ]; then exit 1 fi current=`git branch | awk '/*/ { print $2 }'` -git checkout ${branch} -git pull ${remote} ${branch} +git checkout ${branch} >/dev/null 2>&1 +git pull ${remote} ${branch} >/dev/null 2>&1 if [ $? -ne 0 ]; then - echo "Checkout of branch ${branch} failed." + echo "Checkout or Pull of branch ${branch} failed." exit 1 fi -ver=`sed -n -e 's/^.*VERSION.*"\(.*\)"$/\1/p' src/version.h` -lsmdate=`sed -n -e 's/^.*LSMDATE.*"\(.*\)"$/\1/p' src/version.h` +ver=`sed -n -e 's/^#define VERSION.*"\(.*\)"$/\1/p' src/version.h` +lsmdate=`sed -n -e 's/^#define LSMDATE.*"\(.*\)"$/\1/p' src/version.h` -git checkout ${current} -export push -export updatepo -export gpgkey +git checkout $current >/dev/null 2>&1 cd $cwd diff --git a/bacula/release/makeall b/bacula/release/makeall index 7a90791e86..aadd33cd40 100755 --- a/bacula/release/makeall +++ b/bacula/release/makeall @@ -12,21 +12,4 @@ cd $cwd ./makebacularel $bacula $remote $branch $ver ./makedocsrel $bacula $docs $remote $branch $ver -#./makewinrel $bacula $remote $branch $ver | tee win$$.log -# strip ./configure strerror from Win log file -sed -i -e 's%strerror%%' win$$.log -# check for warning and error messages -grep -i warning win$$.log >/dev/null -if [ $? -eq 0 ] ; then - echo " " - echo "Warnings in win$$.log" - exit 1 -fi -grep -i error win$$.log >/dev/null -if [ $? -eq 0 ] ; then - echo " " - echo "Errors in win$$.log" - exit 1 -fi -rm -f win$$.log diff --git a/bacula/release/makedocsonly b/bacula/release/makedocsonly new file mode 100755 index 0000000000..f795a82c28 --- /dev/null +++ b/bacula/release/makedocsonly @@ -0,0 +1,56 @@ +#!/bin/sh +# +# Make only the docs packages +# + +# Source config +. ./config + +check_rtn() +{ +if [ $? -ne 0 ] ; then + echo " " + echo "Error in $1 ..." + exit 1 +fi +} + +echo "Creating release version: ${ver}" + +cd $cwd + +./makedocsrel $bacula $branch $docs $remote $branch $ver | tee -a build.log +check_rtn makedocsrel + +./makemanualsrel $ver +check_rtn makemanualsrel + +# strip known error words from build.log +sed -i -e 's%strerror%%g' build.log +sed -i -e 's%dlerror%%g' build.log +sed -i -e 's%OnError%%g' build.log +sed -i -e 's%k7\-error%%g' build.log +sed -i -e 's%error\.tpl%%g' build.log +sed -i -e 's%error\.ico%%g' build.log +sed -i -e 's%errors\-test%%g' build.log +sed -i -e 's%fatal\-test%%g' build.log +sed -i -e 's%errors\.in%%g' build.log +sed -i -e 's%s_error%%g' build.log +grep -i error build.log >/dev/null +if [ $? -eq 0 ] ; then + echo " " + echo "Errors in build.log" + exit 1 +fi +grep -i warning build.log >/dev/null +if [ $? -eq 0 ] ; then + echo " " + echo "Warnings in build.log" + exit 1 +fi +grep -i fatal build.log >/dev/null +if [ $? -eq 0 ] ; then + echo " " + echo "Fatal errors in build.log" + exit 1 +fi diff --git a/bacula/release/makewinrel b/bacula/release/makewinrel deleted file mode 100755 index 0beb7faabd..0000000000 --- a/bacula/release/makewinrel +++ /dev/null @@ -1,69 +0,0 @@ -#!/bin/sh -# -# -# This script is used to make a Bacula win32 and win64 releases -# -# It writes in the current directory, so we recommend that you -# do not run it in the Bacula source or Git directory, but -# in a special release directory. -# -# Commit all changes, export the release, make a release tar. -# -# source ./config -. ./config - -tagbase=Release- -base_pkg=bacula -remote=$2 -branch=$3 -ver=$4 -fulltag=$tagbase$ver - -if [ $# != 4 ] ; then - echo "Need $0 " - echo "e.g. $0 rescue-source bee Branch-4.0 4.0.3" - exit 1 -fi -cd $1 -if [ $? -ne 0 ]; then - echo "Directory: $1 does not exist" - exit 1 -fi -cd bacula -if [ $? -ne 0 ]; then - echo "Directory: $1 does not exist" - exit 1 -fi -current=`git branch | awk '/*/ { print $2 }'` -src=`pwd` -git checkout ${branch} -if [ $? -ne 0 ]; then - echo "Checkout of branch ${branch} in ${src} failed." - exit 1 -fi -git pull ${remote} ${branch} -echo " " -echo "Making $reltype for Windows $base_pkg-$ver ..." -echo " " -#echo "OK? ctl-c to stop" -#read a - -cd src/win32 -rm -f release32/${base_pkg}-win32-$ver.exe -rm -f release64/${base_pkg}-win64-$ver.exe -make clean -cd ../.. -./configure --with-sqlite3 -cd src/win32 -./makeall -cp release32/${base_pkg}-win32-$ver.exe ${cwd} -cp release64/${base_pkg}-win64-$ver.exe ${cwd} -cd ${cwd} -rm -f *.exe.sig -./sign ${base_pkg}-win32-$ver.exe -./sign ${base_pkg}-win64-$ver.exe -ls -l ${base_pkg}-win*.exe* - -cd ${src} -# get back to original branch -git checkout ${current} diff --git a/bacula/release/package-list b/bacula/release/package-list new file mode 100644 index 0000000000..cfce827d0d --- /dev/null +++ b/bacula/release/package-list @@ -0,0 +1,8 @@ +bacula-@ver@.tar.gz +bacula-@ver@.tar.gz.sig +bacula-docs-@ver@.tar.bz2 +bacula-docs-@ver@.tar.bz2.sig +bacula-gui-@ver@.tar.gz +bacula-gui-@ver@.tar.gz.sig +bacula-regress-@ver@.tar.gz +bacula-regress-@ver@.tar.gz.sig diff --git a/bacula/scripts/bacula-tray-monitor.desktop.in b/bacula/scripts/bacula-tray-monitor.desktop.in deleted file mode 100644 index 395f302990..0000000000 --- a/bacula/scripts/bacula-tray-monitor.desktop.in +++ /dev/null @@ -1,10 +0,0 @@ -[Desktop Entry] -Name=Bacula Monitor -Comment=Notification Tray Monitor -Icon=/usr/share/pixmaps/bacula-tray-monitor.xpm -Exec=@sbindir@/bacula-tray-monitor -c @sysconfdir@/tray-monitor.conf -Terminal=false -Type=Application -Encoding=UTF-8 -X-Desktop-File-Install-Version=0.3 -Categories=System;Application;Utility;X-Red-Hat-Base; diff --git a/bacula/scripts/bacula.desktop.gnome1.consolehelper.in b/bacula/scripts/bacula.desktop.gnome1.consolehelper.in deleted file mode 100644 index c2cddffc77..0000000000 --- a/bacula/scripts/bacula.desktop.gnome1.consolehelper.in +++ /dev/null @@ -1,10 +0,0 @@ -[Desktop Entry] -Name=Bacula Console -Comment=Bacula Director Console -Icon=/usr/share/pixmaps/bacula.png -Exec=/usr/bin/bgnome-console -c @sysconfdir@/bgnome-console.conf -Terminal=false -Type=Application -Encoding=UTF-8 -X-Desktop-File-Install-Version=0.3 -Categories=System;Application;Utility;X-Red-Hat-Base; diff --git a/bacula/scripts/bacula.desktop.gnome1.in b/bacula/scripts/bacula.desktop.gnome1.in deleted file mode 100644 index 0560a9e867..0000000000 --- a/bacula/scripts/bacula.desktop.gnome1.in +++ /dev/null @@ -1,10 +0,0 @@ -[Desktop Entry] -Name=Bacula Console -Comment=Bacula Director Console -Icon=/usr/share/pixmaps/bacula.png -Exec=@sbindir@/bgnome-console -c @sysconfdir@/bgnome-console.conf -Terminal=false -Type=Application -Encoding=UTF-8 -X-Desktop-File-Install-Version=0.3 -Categories=System;Application;Utility;X-Red-Hat-Base; diff --git a/bacula/scripts/bacula.desktop.gnome1.xsu.in b/bacula/scripts/bacula.desktop.gnome1.xsu.in deleted file mode 100644 index 477a3f832b..0000000000 --- a/bacula/scripts/bacula.desktop.gnome1.xsu.in +++ /dev/null @@ -1,10 +0,0 @@ -[Desktop Entry] -Name=Bacula Console -Comment=Bacula Director Console -Icon=/usr/share/pixmaps/bacula.png -Exec=gnomesu -t "Query" -c "@sbindir@/bgnome-console -c @sysconfdir@/bgnome-console.conf" -d -e -m "In order to run the bacula console as root, ^additional information is required." -Terminal=false -Type=Application -Encoding=UTF-8 -X-Desktop-File-Install-Version=0.3 -Categories=System;Application;Utility;X-Red-Hat-Base; diff --git a/bacula/scripts/bacula.desktop.gnome2.consolehelper.in b/bacula/scripts/bacula.desktop.gnome2.consolehelper.in deleted file mode 100644 index c2cddffc77..0000000000 --- a/bacula/scripts/bacula.desktop.gnome2.consolehelper.in +++ /dev/null @@ -1,10 +0,0 @@ -[Desktop Entry] -Name=Bacula Console -Comment=Bacula Director Console -Icon=/usr/share/pixmaps/bacula.png -Exec=/usr/bin/bgnome-console -c @sysconfdir@/bgnome-console.conf -Terminal=false -Type=Application -Encoding=UTF-8 -X-Desktop-File-Install-Version=0.3 -Categories=System;Application;Utility;X-Red-Hat-Base; diff --git a/bacula/scripts/bacula.desktop.gnome2.in b/bacula/scripts/bacula.desktop.gnome2.in deleted file mode 100644 index 0560a9e867..0000000000 --- a/bacula/scripts/bacula.desktop.gnome2.in +++ /dev/null @@ -1,10 +0,0 @@ -[Desktop Entry] -Name=Bacula Console -Comment=Bacula Director Console -Icon=/usr/share/pixmaps/bacula.png -Exec=@sbindir@/bgnome-console -c @sysconfdir@/bgnome-console.conf -Terminal=false -Type=Application -Encoding=UTF-8 -X-Desktop-File-Install-Version=0.3 -Categories=System;Application;Utility;X-Red-Hat-Base; diff --git a/bacula/scripts/bacula.desktop.gnome2.xsu.in b/bacula/scripts/bacula.desktop.gnome2.xsu.in deleted file mode 100644 index 477a3f832b..0000000000 --- a/bacula/scripts/bacula.desktop.gnome2.xsu.in +++ /dev/null @@ -1,10 +0,0 @@ -[Desktop Entry] -Name=Bacula Console -Comment=Bacula Director Console -Icon=/usr/share/pixmaps/bacula.png -Exec=gnomesu -t "Query" -c "@sbindir@/bgnome-console -c @sysconfdir@/bgnome-console.conf" -d -e -m "In order to run the bacula console as root, ^additional information is required." -Terminal=false -Type=Application -Encoding=UTF-8 -X-Desktop-File-Install-Version=0.3 -Categories=System;Application;Utility;X-Red-Hat-Base; diff --git a/bacula/scripts/disk-changer.in b/bacula/scripts/disk-changer.in index 53e884aae8..97b0ebac59 100644 --- a/bacula/scripts/disk-changer.in +++ b/bacula/scripts/disk-changer.in @@ -4,29 +4,19 @@ # # Written by Kern Sibbald # -# Copyright (C) 2000-2010 Free Software Foundation Europe e.V. +# Bacula® - The Network Backup Solution # -# The main author of Bacula is Kern Sibbald, with contributions from -# many others, a complete list can be found in the file AUTHORS. -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of version three of the GNU Affero General Public -# License as published by the Free Software Foundation, which is -# listed in the file LICENSE. +# Copyright (C) 2000-2014 Free Software Foundation Europe e.V. # -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. +# The main author of Bacula is Kern Sibbald, with contributions from many +# others, a complete list can be found in the file AUTHORS. # -# You should have received a copy of the GNU Affero General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301, USA. +# You may use this file and others of this release according to the +# license defined in the LICENSE file, which includes the Affero General +# Public License, v3.0 ("AGPLv3") and some additional permissions and +# terms pursuant to its AGPLv3 Section 7. # # Bacula® is a registered trademark of Kern Sibbald. -# The licensor of Bacula is the Free Software Foundation Europe -# (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, -# Switzerland, email:ftf@fsfeurope.org. # # # If you set in your Device resource @@ -39,28 +29,28 @@ # included. # # disk-changer "changer-device" "command" "slot" "archive-device" "drive-index" "volume" -# $1 $2 $3 $4 $5 $6 +# $1 $2 $3 $4 $5 $6 # # By default the autochanger has 10 Volumes and 1 Drive. # # Note: For this script to work, you *must" specify -# Device Type = File +# Device Type = File # in each of the Devices associated with your AutoChanger resource. # # changer-device is the name of a file that overrides the default # volumes and drives. It may have: -# maxslot=n where n is one based (default 10) -# maxdrive=m where m is zero based (default 1 -- i.e. 2 drives) -# +# maxslot=n where n is one based (default 10) +# maxdrive=m where m is zero based (default 1 -- i.e. 2 drives) +# # This code can also simulate barcodes. You simply put # a list of the slots and barcodes in the "base" directory/barcodes. -# See below for the base directory definition. Example of a +# See below for the base directory definition. Example of a # barcodes file: # /var/bacula/barcodes # 1:Vol001 # 2:Vol002 # ... -# +# # archive-device is the name of the base directory where you want the # Volumes stored appended with /drive0 for the first drive; /drive1 # for the second drive, ... For example, you might use @@ -74,7 +64,7 @@ # The Volumes will be created with names slot1, slot2, slot3, ... maxslot in the # base directory. In the above example the base directory is /var/bacula. # However, as with tapes, their Bacula Volume names will be stored inside the -# Volume label. In addition to the Volumes (e.g. /var/bacula/slot1, +# Volume label. In addition to the Volumes (e.g. /var/bacula/slot1, # /var/bacula/slot3, ...) this script will create a /var/bacula/loadedn # file to keep track of what Slot is loaded. You should not change this file. # @@ -94,7 +84,7 @@ wd=@working_dir@ dbgfile="$wd/disk-changer.log" debug() { if test -f $dbgfile; then - echo "`date +\"%Y%m%d-%H:%M:%S\"` $*" >> $dbgfile + echo "`date +\"%Y%m%d-%H:%M:%S\"` $*" >> $dbgfile fi } @@ -107,8 +97,8 @@ make_temp_file() { if test x${TMPFILE} = x; then TMPFILE="$wd/disk-changer.$$" if test -f ${TMPFILE}; then - echo "Temp file security problem on: ${TMPFILE}" - exit 1 + echo "Temp file security problem on: ${TMPFILE}" + exit 1 fi fi } @@ -119,14 +109,14 @@ check_parm_count() { pCount=$1 pCountNeed=$2 if test $pCount -lt $pCountNeed; then - echo "usage: disk-changer ctl-device command [slot archive-device drive-index]" - echo " Insufficient number of arguments arguments given." - if test $pCount -lt 2; then - echo " Mimimum usage is first two arguments ..." - else - echo " Command expected $pCountNeed arguments" - fi - exit 1 + echo "usage: disk-changer ctl-device command [slot archive-device drive-index]" + echo " Insufficient number of arguments arguments given." + if test $pCount -lt 2; then + echo " Mimimum usage is first two arguments ..." + else + echo " Command expected $pCountNeed arguments" + fi + exit 1 fi } @@ -139,7 +129,7 @@ get_dir() { dir=`echo "$device" | sed -e s%/$bn%%g` if [ ! -d $dir ]; then echo "ERROR: Autochanger directory \"$dir\" does not exist." - echo " You must create it." + echo " You must create it." exit 1 fi } @@ -176,61 +166,65 @@ maxdrive=1 maxslot=10 # Pull in conf file -if [ -f $ctl ]; then +if [ -f $ctl ]; then . $ctl fi -# Check for special cases where only 2 arguments are needed, +# Check for special cases where only 2 arguments are needed, # all others are a minimum of 5 # case $2 in list|listall) - check_parm_count $# 2 - ;; + check_parm_count $# 2 + ;; slots) - check_parm_count $# 2 - ;; + check_parm_count $# 2 + ;; transfer) - check_parm_count $# 4 - if [ $slot -gt $maxslot ]; then - echo "Slot ($slot) out of range (1-$maxslot)" - exit 1 - fi - ;; + check_parm_count $# 4 + if [ $slot -gt $maxslot ]; then + echo "Slot ($slot) out of range (1-$maxslot)" + debug "Error: Slot ($slot) out of range (1-$maxslot)" + exit 1 + fi + ;; *) - check_parm_count $# 5 - if [ $drive -gt $maxdrive ]; then - echo "Drive ($drive) out of range (0-$maxdrive)" - exit 1 - fi - if [ $slot -gt $maxslot ]; then - echo "Slot ($slot) out of range (1-$maxslot)" - exit 1 - fi - ;; + check_parm_count $# 5 + if [ $drive -gt $maxdrive ]; then + echo "Drive ($drive) out of range (0-$maxdrive)" + debug "Error: Drive ($drive) out of range (0-$maxdrive)" + exit 1 + fi + if [ $slot -gt $maxslot ]; then + echo "Slot ($slot) out of range (1-$maxslot)" + debug "Error: Slot ($slot) out of range (1-$maxslot)" + exit 1 + fi + ;; esac debug "Parms: $ctl $cmd $slot $device $drive $volume $havevol" -case $cmd in +case $cmd in unload) debug "Doing disk -f $ctl unload $slot $device $drive $volume" get_dir if [ -f $dir/loaded${drive} ]; then - ld=`cat $dir/loaded${drive}` - else - echo "Storage Element $slot is Already Full" - exit 1 + ld=`cat $dir/loaded${drive}` + else + echo "Storage Element $slot is Already Full" + debug "Unload error: $dir/loaded${drive} is already unloaded" + exit 1 fi if [ $slot -eq $ld ]; then - echo "0" >$dir/loaded${drive} - unlink $device 2>/dev/null >/dev/null - rm -f $device + echo "0" >$dir/loaded${drive} + unlink $device 2>/dev/null >/dev/null else - echo "Storage Element $slot is Already Full" - exit 1 + echo "Storage Element $slot is Already Full" + debug "Unload error: $dir/loaded${drive} slot=$ld is already unloaded" + exit 1 fi ;; @@ -238,112 +232,115 @@ case $cmd in debug "Doing disk $ctl load $slot $device $drive $volume" get_dir i=0 + # Check if slot already in a drive while [ $i -le $maxdrive ]; do - if [ -f $dir/loaded${i} ]; then - ld=`cat $dir/loaded${i}` - else - ld=0 - fi - if [ $ld -eq $slot ]; then - echo "Drive ${i} Full (Storage element ${ld} loaded)" - exit 1 - fi - i=`expr $i + 1` + if [ -f $dir/loaded${i} ]; then + ld=`cat $dir/loaded${i}` + else + ld=0 + fi + if [ $ld -eq $slot ]; then + echo "Drive ${i} Full (Storage element ${ld} loaded)" + debug "Load error: Cannot load Slot=${ld} in drive=$drive. Already in drive=${i}" + exit 1 + fi + i=`expr $i + 1` done # Check if we have a Volume name get_vol if [ $havevol -eq 0 ]; then - # check if slot exists - if [ ! -f $dir/slot${slot} ] ; then - echo "source Element Address $slot is Empty" - exit 1 - fi + # check if slot exists + if [ ! -f $dir/slot${slot} ] ; then + echo "source Element Address $slot is Empty" + debug "Load error: source Element Address $slot is Empty" + exit 1 + fi fi if [ -f $dir/loaded${drive} ]; then - ld=`cat $dir/loaded${drive}` + ld=`cat $dir/loaded${drive}` else - ld=0 + ld=0 fi if [ $ld -ne 0 ]; then - echo "Drive ${drive} Full (Storage element ${ld} loaded)" - exit 1 + echo "Drive ${drive} Full (Storage element ${ld} loaded)" + echo "Load error: Drive ${drive} Full (Storage element ${ld} loaded)" + exit 1 fi echo "0" >$dir/loaded${drive} unlink $device 2>/dev/null >/dev/null - rm -f $device if [ $havevol -ne 0 ]; then - ln -s $dir/$volume $device - rtn=$? + ln -s $dir/$volume $device + rtn=$? else - ln -s $dir/slot${slot} $device - rtn=$? + ln -s $dir/slot${slot} $device + rtn=$? fi if [ $rtn -eq 0 ]; then - echo $slot >$dir/loaded${drive} + echo $slot >$dir/loaded${drive} fi exit $rtn ;; - list) + list) debug "Doing disk -f $ctl -- to list volumes" - get_dir + get_dir if [ -f $dir/barcodes ]; then - cat $dir/barcodes + cat $dir/barcodes else - i=1 - while [ $i -le $maxslot ]; do - slot=$i - volume= - get_vol - if [ $havevol -eq 0 ]; then - echo "$i:" - else - echo "$i:$volume" - fi - i=`expr $i + 1` - done + i=1 + while [ $i -le $maxslot ]; do + slot=$i + volume= + get_vol + if [ $havevol -eq 0 ]; then + echo "$i:" + else + echo "$i:$volume" + fi + i=`expr $i + 1` + done fi exit 0 ;; - listall) + listall) # ***FIXME*** must add new Volume stuff make_temp_file debug "Doing disk -f $ctl -- to list volumes" - get_dir + get_dir if [ ! -f $dir/barcodes ]; then - exit 0 + exit 0 fi # we print drive content seen by autochanger # and we also remove loaded media from the barcode list i=0 while [ $i -le $maxdrive ]; do - if [ -f $dir/loaded${i} ]; then - ld=`cat $dir/loaded${i}` - v=`awk -F: "/^$ld:/"' { print $2 }' $dir/barcodes` - echo "D:$i:F:$ld:$v" - echo "^$ld:" >> $TMPFILE - fi - i=`expr $i + 1` + if [ -f $dir/loaded${i} ]; then + ld=`cat $dir/loaded${i}` + v=`awk -F: "/^$ld:/"' { print $2 }' $dir/barcodes` + echo "D:$i:F:$ld:$v" + echo "^$ld:" >> $TMPFILE + fi + i=`expr $i + 1` done # Empty slots are not in barcodes file # When we detect a gap, we print missing rows as empty # At the end, we fill the gap between the last entry and maxslot grep -v -f $TMPFILE $dir/barcodes | sort -n | \ - perl -ne 'BEGIN { $cur=1 } + perl -ne 'BEGIN { $cur=1 } if (/(\d+):(.+)?/) { - if ($cur == $1) { - print "S:$1:F:$2\n" - } else { - while ($cur < $1) { - print "S:$cur:E\n"; - $cur++; - } - } - $cur++; - } + if ($cur == $1) { + print "S:$1:F:$2\n" + } else { + while ($cur < $1) { + print "S:$cur:E\n"; + $cur++; + } + } + $cur++; + } END { while ($cur < '"$maxslot"') { print "S:$cur:E\n"; $cur++; } } ' rm -f $TMPFILE @@ -355,20 +352,20 @@ case $cmd in make_temp_file slotdest=$device if [ -f $dir/slot{$slotdest} ]; then - echo "destination Element Address $slot is Full" - exit 1 + echo "destination Element Address $slot is Full" + exit 1 fi if [ ! -f $dir/slot${slot} ] ; then - echo "source Element Address $slot is Empty" - exit 1 + echo "source Element Address $slot is Empty" + exit 1 fi echo "Transfering $slot to $slotdest" mv $dir/slot${slot} $dir/slot{$slotdest} if [ -f $dir/barcodes ]; then - sed "s/^$slot:/$slotdest:/" > $TMPFILE - sort -n $TMPFILE > $dir/barcodes + sed "s/^$slot:/$slotdest:/" > $TMPFILE + sort -n $TMPFILE > $dir/barcodes fi exit 0 ;; @@ -376,10 +373,12 @@ case $cmd in debug "Doing disk -f $ctl $drive -- to find what is loaded" get_dir if [ -f $dir/loaded${drive} ]; then - cat $dir/loaded${drive} + a=`cat $dir/loaded${drive}` else - echo "0" + a="0" fi + debug "Loaded: drive=$drive is $a" + echo $a exit ;; diff --git a/bacula/scripts/mtx-changer.in b/bacula/scripts/mtx-changer.in index fe23051edf..ad9c0cacf2 100644 --- a/bacula/scripts/mtx-changer.in +++ b/bacula/scripts/mtx-changer.in @@ -2,6 +2,23 @@ # # Bacula interface to mtx autoloader # +# Written by Kern Sibbald +# +# Bacula® - The Network Backup Solution +# +# Copyright (C) 2000-2014 Free Software Foundation Europe e.V. +# +# The main author of Bacula is Kern Sibbald, with contributions from many +# others, a complete list can be found in the file AUTHORS. +# +# You may use this file and others of this release according to the +# license defined in the LICENSE file, which includes the Affero General +# Public License, v3.0 ("AGPLv3") and some additional permissions and +# terms pursuant to its AGPLv3 Section 7. +# +# Bacula® is a registered trademark of Kern Sibbald. +# +# # If you set in your Device resource # # Changer Command = "path-to-this-script/mtx-changer %c %o %S %a %d" @@ -11,24 +28,24 @@ # in come cases, not all are used. # # mtx-changer "changer-device" "command" "slot" "archive-device" "drive-index" -# $1 $2 $3 $4 $5 +# $1 $2 $3 $4 $5 # # for example: # # mtx-changer /dev/sg0 load 1 /dev/nst0 0 (on a Linux system) -# +# # will request to load the first cartidge into drive 0, where # the SCSI control channel is /dev/sg0, and the read/write device # is /dev/nst0. # # The commands are: -# Command Function -# unload unload a given slot -# load load a given slot -# loaded which slot is loaded? -# list list Volume names (requires barcode reader) -# slots how many slots total? -# listall list all info +# Command Function +# unload unload a given slot +# load load a given slot +# loaded which slot is loaded? +# list list Volume names (requires barcode reader) +# slots how many slots total? +# listall list all info # transfer # # Slots are numbered from 1 ... @@ -41,7 +58,7 @@ # Many changers need an offline after the unload. Also many # changers need a sleep 60 after the mtx load. # -# N.B. If you change the script, take care to return either +# N.B. If you change the script, take care to return either # the mtx exit code or a 0. If the script exits with a non-zero # exit code, Bacula will assume the request failed. # @@ -63,7 +80,7 @@ fi dbgfile="@working_dir@/mtx.log" debug() { if test -f $dbgfile; then - echo "`date +\"%Y%m%d-%H:%M:%S\"` $*" >> $dbgfile + echo "`date +\"%Y%m%d-%H:%M:%S\"` $*" >> $dbgfile fi } @@ -76,8 +93,8 @@ make_temp_file() { if test x${TMPFILE} = x; then TMPFILE="@working_dir@/mtx.$$" if test -f ${TMPFILE}; then - echo "ERROR: Temp file security problem on: ${TMPFILE}" - exit 1 + echo "ERROR: Temp file security problem on: ${TMPFILE}" + exit 1 fi fi } @@ -91,22 +108,22 @@ make_temp_file() { # So we separate STDOUT and STDERR in # certain of the mtx commands. The contents of STDERR # is then printed after the STDOUT produced by mtx -# thus we sometimes get better changer results. +# thus we sometimes get better changer results. # make_err_file() { ERRFILE=`mktemp @working_dir@/mtx.err.XXXXXXXXXX` if test x${ERRFILE} = x; then ERRFILE="@working_dir@/mtx.err.$$" if test -f ${ERRFILE}; then - echo "ERROR: Temp file security problem on: ${ERRFILE}" - exit 1 + echo "ERROR: Temp file security problem on: ${ERRFILE}" + exit 1 fi fi } # -# The purpose of this function to wait a maximum +# The purpose of this function to wait a maximum # time for the drive. It will # return as soon as the drive is ready, or after # waiting a maximum of 300 seconds. @@ -117,7 +134,7 @@ make_err_file() { # in the code at the top of this script. # wait_for_drive() { - i=0 + i=0 while [ $i -le 300 ]; do # Wait max 300 seconds if mt -f $1 status 2>&1 | grep "${ready}" >/dev/null 2>&1; then break @@ -134,33 +151,33 @@ check_parm_count() { pCount=$1 pCountNeed=$2 if test $pCount -lt $pCountNeed; then - echo "ERROR: usage: mtx-changer ctl-device command [slot archive-device drive-index]" - echo " Insufficient number of arguments given." - if test $pCount -lt 2; then - echo " Mimimum usage is first two arguments ..." - else - echo " Command expected $pCountNeed arguments" - fi - exit 1 + echo "ERROR: usage: mtx-changer ctl-device command [slot archive-device drive-index]" + echo " Insufficient number of arguments given." + if test $pCount -lt 2; then + echo " Mimimum usage is first two arguments ..." + else + echo " Command expected $pCountNeed arguments" + fi + exit 1 fi } -# Check for special cases where only 2 arguments are needed, +# Check for special cases where only 2 arguments are needed, # all others are a minimum of 5 # case $2 in list|listall) - check_parm_count $# 2 - ;; + check_parm_count $# 2 + ;; slots) - check_parm_count $# 2 - ;; + check_parm_count $# 2 + ;; transfer) - check_parm_count $# 4 - ;; + check_parm_count $# 4 + ;; *) - check_parm_count $# 5 - ;; + check_parm_count $# 5 + ;; esac @@ -173,15 +190,15 @@ drive=$5 debug "Parms: $ctl $cmd $slot $device $drive" -case $cmd in +case $cmd in unload) debug "Doing mtx -f $ctl unload $slot $drive" if test ${offline} -eq 1 ; then - mt -f $device offline + mt -f $device offline fi if test ${offline_sleep} -ne 0 ; then - sleep ${offline_sleep} + sleep ${offline_sleep} fi make_err_file ${MTX} -f $ctl unload $slot $drive 2>${ERRFILE} @@ -197,7 +214,7 @@ case $cmd in ${MTX} -f $ctl load $slot $drive 2>${ERRFILE} rtn=$? if test ${load_sleep} -ne 0 ; then - sleep ${load_sleep} + sleep ${load_sleep} fi wait_for_drive $device cat ${ERRFILE} @@ -205,18 +222,18 @@ case $cmd in exit $rtn ;; - list) + list) debug "Doing mtx -f $ctl -- to list volumes" make_temp_file if test ${inventory} -ne 0 ; then - ${MTX} -f $ctl inventory + ${MTX} -f $ctl inventory fi ${MTX} -f $ctl status >${TMPFILE} rtn=$? if test ${vxa_packetloader} -ne 0 ; then - cat ${TMPFILE} | grep " *Storage Element [0-9]*:.*Full" | sed "s/ Storage Element //" | sed "s/Full :VolumeTag=//" + cat ${TMPFILE} | grep " *Storage Element [0-9]*:.*Full" | sed "s/ Storage Element //" | sed "s/Full :VolumeTag=//" else - cat ${TMPFILE} | grep " Storage Element [0-9]*:.*Full" | awk "{print \$3 \$4}" | sed "s/Full *\(:VolumeTag=\)*//" + cat ${TMPFILE} | grep " Storage Element [0-9]*:.*Full" | awk "{print \$3 \$4}" | sed "s/Full *\(:VolumeTag=\)*//" fi cat ${TMPFILE} | grep "^Data Transfer Element [0-9]*:Full (Storage Element [0-9]" | awk '{printf "%s:%s\n",$7,$10}' rm -f ${TMPFILE} >/dev/null 2>&1 @@ -224,25 +241,25 @@ case $cmd in ;; listall) -# Drive content: D:Drive num:F:Slot loaded:Volume Name +# Drive content: D:Drive num:F:Slot loaded:Volume Name # D:0:F:2:vol2 or D:Drive num:E -# D:1:F:42:vol42 +# D:1:F:42:vol42 # D:3:E -# +# # Slot content: -# S:1:F:vol1 S:Slot num:F:Volume Name -# S:2:E or S:Slot num:E +# S:1:F:vol1 S:Slot num:F:Volume Name +# S:2:E or S:Slot num:E # S:3:F:vol4 -# +# # Import/Export tray slots: -# I:10:F:vol10 I:Slot num:F:Volume Name -# I:11:E or I:Slot num:E +# I:10:F:vol10 I:Slot num:F:Volume Name +# I:11:E or I:Slot num:E # I:12:F:vol40 - + debug "Doing mtx -f $ctl -- to list all" make_temp_file if test ${inventory} -ne 0 ; then - ${MTX} -f $ctl inventory + ${MTX} -f $ctl inventory fi ${MTX} -f $ctl status >${TMPFILE} rtn=$? @@ -257,7 +274,7 @@ case $cmd in # If perl isn't installed, you can use by those commands #cat ${TMPFILE} | grep "Data Transfer Element" | awk "{print \"D:\"\$4 \$7 \$9 \$10}" | sed "s/=/:/" | sed "s/Full/F:/" | sed "s/Empty/E/" #cat ${TMPFILE} | grep -v "Data Transfer Element" | grep "Storage Element" | grep -v "IMPORT/EXPORT" | awk "{print \"S:\"\$3 \$4 \$5}" | sed "s/IMPORT\/EXPORT//" | sed "s/Full *:VolumeTag=/F:/" | sed "s/Empty/E/" -#cat ${TMPFILE} | grep -v "Data Transfer Element" | grep "Storage Element" | grep "IMPORT/EXPORT" | awk "{print \"I:\"\$3 \$4 \$5}" | sed "s/IMPORT\/EXPORT//" | sed "s/Full *:VolumeTag=/F:/" | sed "s/Empty/E/" +#cat ${TMPFILE} | grep -v "Data Transfer Element" | grep "Storage Element" | grep "IMPORT/EXPORT" | awk "{print \"I:\"\$3 \$4 \$5}" | sed "s/IMPORT\/EXPORT//" | sed "s/Full *:VolumeTag=/F:/" | sed "s/Empty/E/" rm -f ${TMPFILE} >/dev/null 2>&1 exit $rtn diff --git a/bacula/scripts/set-gnome1.4 b/bacula/scripts/set-gnome1.4 deleted file mode 100755 index d76e5a2a76..0000000000 --- a/bacula/scripts/set-gnome1.4 +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/sh -# -# Simple script to change the package configuration to -# Gnome 1.4 level. -# -MUID=`/usr/bin/id -u` -if [ $MUID != 0 ] ; then - echo " " - echo "You must be root to run this script." - echo " " - exit 1 -fi -cd /usr/lib/pkgconfig -if test -f libgnomeui-2.0.pc.orig ; then - rm -f libgnomeui-2.0.pc -else - mv libgnomeui-2.0.pc libgnomeui-2.0.pc.orig -fi diff --git a/bacula/scripts/set-gnome2 b/bacula/scripts/set-gnome2 deleted file mode 100755 index 414499dd7f..0000000000 --- a/bacula/scripts/set-gnome2 +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/sh -# -# Simple script to set the Gnome package level -# to Gnome 2.0 -# -MUID=`/usr/bin/id -u` -if [ $MUID != 0 ] ; then - echo " " - echo "You must be root to run this script." - echo " " - exit 1 -fi -cd /usr/lib/pkgconfig -if test -f libgnomeui-2.0.pc.orig ; then - cp -fp libgnomeui-2.0.pc.orig libgnomeui-2.0.pc -fi diff --git a/bacula/scripts/wxconsole.console_apps.in b/bacula/scripts/wxconsole.console_apps.in deleted file mode 100644 index 04a9d7e59c..0000000000 --- a/bacula/scripts/wxconsole.console_apps.in +++ /dev/null @@ -1,3 +0,0 @@ -USER=root -PROGRAM=@sbindir@/bwx-console -SESSION=true diff --git a/bacula/scripts/wxconsole.desktop.consolehelper.in b/bacula/scripts/wxconsole.desktop.consolehelper.in deleted file mode 100644 index 0bc16a12f0..0000000000 --- a/bacula/scripts/wxconsole.desktop.consolehelper.in +++ /dev/null @@ -1,10 +0,0 @@ -[Desktop Entry] -Name=Bacula WX Console -Comment=Bacula Director Console -Icon=/usr/share/pixmaps/wxwin16x16.xpm -Exec=/usr/bin/bwx-console -c @sysconfdir@/bwx-console.conf -Terminal=false -Type=Application -Encoding=UTF-8 -X-Desktop-File-Install-Version=0.3 -Categories=System;Application;Utility;X-Red-Hat-Base; diff --git a/bacula/scripts/wxconsole.desktop.xsu.in b/bacula/scripts/wxconsole.desktop.xsu.in deleted file mode 100644 index a9a6c18724..0000000000 --- a/bacula/scripts/wxconsole.desktop.xsu.in +++ /dev/null @@ -1,10 +0,0 @@ -[Desktop Entry] -Name=Bacula WX Console -Comment=Bacula Director Console -Icon=/usr/share/pixmaps/wxwin16x16.xpm -Exec=gnomesu -t "Query" -c "@sbindir@/bwx-console -c @sysconfdir@/bwx-console.conf" -d -e -m "In order to run the bacula wx console as root, ^additional information is required." -Terminal=false -Type=Application -Encoding=UTF-8 -X-Desktop-File-Install-Version=0.3 -Categories=System;Application;Utility;X-Red-Hat-Base; diff --git a/bacula/scripts/wxconsole.pamd b/bacula/scripts/wxconsole.pamd deleted file mode 100644 index 15cb90fa87..0000000000 --- a/bacula/scripts/wxconsole.pamd +++ /dev/null @@ -1,7 +0,0 @@ -#%PAM-1.0 -auth sufficient pam_rootok.so -auth sufficient pam_timestamp.so -auth required pam_stack.so service=system-auth -session optional pam_xauth.so -session optional pam_timestamp.so -account required pam_permit.so diff --git a/bacula/src/baconfig.h b/bacula/src/baconfig.h index 58661cb3af..28b0fd88dd 100644 --- a/bacula/src/baconfig.h +++ b/bacula/src/baconfig.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2010 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /** * General header file configurations that apply to @@ -74,7 +62,7 @@ jcr[0] = 0; } #define ASSERT2(x,y) if (!(x)) { \ - assert_msg = y; \ + set_assert_msg(__FILE__, __LINE__, y); \ Emsg1(M_ERROR, 0, _("Failed ASSERT: %s\n"), #x); \ Pmsg1(000, _("Failed ASSERT: %s\n"), #x); \ char *jcr = NULL; \ @@ -166,7 +154,7 @@ void InitWinAPIWrapper(); /* Use the following for strings not to be translated */ -#define NT_(s) (s) +#define NT_(s) (s) /* This should go away! ****FIXME***** */ #define MAXSTRING 500 @@ -186,7 +174,7 @@ void InitWinAPIWrapper(); /* All tape operations MUST be a multiple of this */ #define TAPE_BSIZE 1024 -#ifdef DEV_BSIZE +#ifdef DEV_BSIZE #define B_DEV_BSIZE DEV_BSIZE #endif @@ -319,6 +307,13 @@ typedef off_t boffset_t; void b_memset(const char *file, int line, void *mem, int val, size_t num); #endif +/* First we look if we have a debug_level set, + * then we look for simple debug level without tags + * then finally we check if tags are set on debug_level and lvl + */ +#define chk_dbglvl(lvl) (debug_level > 0 && ( \ + ((((lvl) & DT_ALL) == 0) && ((lvl) <= (debug_level & ~DT_ALL))) || \ + (((lvl) & DT_ALL & debug_level) && (((lvl) & ~DT_ALL) <= (debug_level & ~DT_ALL))))) /** * The digit following Dmsg and Emsg indicates the number of substitutions in @@ -327,20 +322,20 @@ void b_memset(const char *file, int line, void *mem, int val, size_t num); */ /** Debug Messages that are printed */ #ifdef DEBUG -#define Dmsg0(lvl, msg) if ((lvl)<=debug_level) d_msg(__FILE__, __LINE__, lvl, msg) -#define Dmsg1(lvl, msg, a1) if ((lvl)<=debug_level) d_msg(__FILE__, __LINE__, lvl, msg, a1) -#define Dmsg2(lvl, msg, a1, a2) if ((lvl)<=debug_level) d_msg(__FILE__, __LINE__, lvl, msg, a1, a2) -#define Dmsg3(lvl, msg, a1, a2, a3) if ((lvl)<=debug_level) d_msg(__FILE__, __LINE__, lvl, msg, a1, a2, a3) -#define Dmsg4(lvl, msg, arg1, arg2, arg3, arg4) if ((lvl)<=debug_level) d_msg(__FILE__, __LINE__, lvl, msg, arg1, arg2, arg3, arg4) -#define Dmsg5(lvl, msg, a1, a2, a3, a4, a5) if ((lvl)<=debug_level) d_msg(__FILE__, __LINE__, lvl, msg, a1, a2, a3, a4, a5) -#define Dmsg6(lvl, msg, a1, a2, a3, a4, a5, a6) if ((lvl)<=debug_level) d_msg(__FILE__, __LINE__, lvl, msg, a1, a2, a3, a4, a5, a6) -#define Dmsg7(lvl, msg, a1, a2, a3, a4, a5, a6, a7) if ((lvl)<=debug_level) d_msg(__FILE__, __LINE__, lvl, msg, a1, a2, a3, a4, a5, a6, a7) -#define Dmsg8(lvl, msg, a1, a2, a3, a4, a5, a6, a7, a8) if ((lvl)<=debug_level) d_msg(__FILE__, __LINE__, lvl, msg, a1, a2, a3, a4, a5, a6, a7, a8) -#define Dmsg9(lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9) if ((lvl)<=debug_level) d_msg(__FILE__,__LINE__,lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9) -#define Dmsg10(lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10) if ((lvl)<=debug_level) d_msg(__FILE__,__LINE__,lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10) -#define Dmsg11(lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11) if ((lvl)<=debug_level) d_msg(__FILE__,__LINE__,lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11) -#define Dmsg12(lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12) if ((lvl)<=debug_level) d_msg(__FILE__,__LINE__,lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12) -#define Dmsg13(lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13) if ((lvl)<=debug_level) d_msg(__FILE__,__LINE__,lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13) +#define Dmsg0(lvl, msg) if (chk_dbglvl(lvl)) d_msg(__FILE__, __LINE__, lvl, msg) +#define Dmsg1(lvl, msg, a1) if (chk_dbglvl(lvl)) d_msg(__FILE__, __LINE__, lvl, msg, a1) +#define Dmsg2(lvl, msg, a1, a2) if (chk_dbglvl(lvl)) d_msg(__FILE__, __LINE__, lvl, msg, a1, a2) +#define Dmsg3(lvl, msg, a1, a2, a3) if (chk_dbglvl(lvl)) d_msg(__FILE__, __LINE__, lvl, msg, a1, a2, a3) +#define Dmsg4(lvl, msg, arg1, arg2, arg3, arg4) if (chk_dbglvl(lvl)) d_msg(__FILE__, __LINE__, lvl, msg, arg1, arg2, arg3, arg4) +#define Dmsg5(lvl, msg, a1, a2, a3, a4, a5) if (chk_dbglvl(lvl)) d_msg(__FILE__, __LINE__, lvl, msg, a1, a2, a3, a4, a5) +#define Dmsg6(lvl, msg, a1, a2, a3, a4, a5, a6) if (chk_dbglvl(lvl)) d_msg(__FILE__, __LINE__, lvl, msg, a1, a2, a3, a4, a5, a6) +#define Dmsg7(lvl, msg, a1, a2, a3, a4, a5, a6, a7) if (chk_dbglvl(lvl)) d_msg(__FILE__, __LINE__, lvl, msg, a1, a2, a3, a4, a5, a6, a7) +#define Dmsg8(lvl, msg, a1, a2, a3, a4, a5, a6, a7, a8) if (chk_dbglvl(lvl)) d_msg(__FILE__, __LINE__, lvl, msg, a1, a2, a3, a4, a5, a6, a7, a8) +#define Dmsg9(lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9) if (chk_dbglvl(lvl)) d_msg(__FILE__,__LINE__,lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9) +#define Dmsg10(lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10) if (chk_dbglvl(lvl)) d_msg(__FILE__,__LINE__,lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10) +#define Dmsg11(lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11) if (chk_dbglvl(lvl)) d_msg(__FILE__,__LINE__,lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11) +#define Dmsg12(lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12) if (chk_dbglvl(lvl)) d_msg(__FILE__,__LINE__,lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12) +#define Dmsg13(lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13) if (chk_dbglvl(lvl)) d_msg(__FILE__,__LINE__,lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13) #else #define Dmsg0(lvl, msg) #define Dmsg1(lvl, msg, a1) @@ -457,7 +452,7 @@ int Mmsg(POOL_MEM &msgbuf, const char *fmt,...); class JCR; -void d_msg(const char *file, int line, int level, const char *fmt,...); +void d_msg(const char *file, int line, int64_t level, const char *fmt,...); void p_msg(const char *file, int line, int level, const char *fmt,...); void e_msg(const char *file, int line, int type, int level, const char *fmt,...); void j_msg(const char *file, int line, JCR *jcr, int type, utime_t mtime, const char *fmt,...); @@ -470,14 +465,14 @@ int m_msg(const char *file, int line, POOLMEM *&pool_buf, const char *fmt, ...) #ifndef HAVE_WXCONSOLE #undef strdup #define strdup(buf) bad_call_on_strdup_use_bstrdup(buf) -#else +#else /* Groan, WxWidgets has its own way of doing NLS so cleanup */ #ifndef ENABLE_NLS #undef _ #undef setlocale #undef textdomain #undef bindtextdomain -#endif +#endif #endif /** Use our fgets which handles interrupts */ @@ -517,7 +512,7 @@ int m_msg(const char *file, int line, POOLMEM *&pool_buf, const char *fmt, ...) /* ============================================================= * OS Dependent defines - * ============================================================= + * ============================================================= */ #if defined (__digital__) && defined (__unix__) /* Tru64 - it does have fseeko and ftello , but since ftell/fseek are also 64 bit */ @@ -569,7 +564,6 @@ int getdomainname(char *name, int len); /* * Windows */ -#define DEFAULT_CONFIGDIR "C:\\Documents and Settings\\All Users\\Application Data\\Bacula" #define PathSeparator '\\' inline bool IsPathSeparator(int ch) { return ch == '/' || ch == '\\'; } @@ -650,6 +644,9 @@ static inline bool bigendian() { return htonl(1) == 1L; } #ifndef __GNUC__ #define __PRETTY_FUNCTION__ __func__ #endif +#ifdef HAVE_SUN_OS +#undef ENTER_LEAVE +#endif #ifdef ENTER_LEAVE #define Enter(lvl) Dmsg1(lvl, "Enter: %s\n", __PRETTY_FUNCTION__) #define Leave(lvl) Dmsg1(lvl, "Leave: %s\n", __PRETTY_FUNCTION__) @@ -658,4 +655,10 @@ static inline bool bigendian() { return htonl(1) == 1L; } #define Leave(lvl) #endif +#ifdef __GNUC__x +# define CHECK_FORMAT(fun, f, a) __attribute__ ((format (fun, f, a))) +#else +# define CHECK_FORMAT(fun, f, a) +#endif + #endif /* _BACONFIG_H */ diff --git a/bacula/src/bacula.h b/bacula/src/bacula.h index ccaa978693..12b2d0fcbf 100644 --- a/bacula/src/bacula.h +++ b/bacula/src/bacula.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2010 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * bacula.h -- main header file to include in all Bacula source @@ -135,10 +123,10 @@ extern "C" { #endif #if defined(HAVE_WIN32) & !defined(HAVE_MINGW) #include -#endif +#endif #if !defined(HAVE_WIN32) & !defined(HAVE_MINGW) #include -#endif +#endif #include #if HAVE_SYS_WAIT_H #include diff --git a/bacula/src/bc_types.h b/bacula/src/bc_types.h index fe04718748..1e48bca693 100644 --- a/bacula/src/bc_types.h +++ b/bacula/src/bc_types.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2008 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* Define integer types for Bacula -- Kern Sibbald @@ -230,6 +218,12 @@ typedef float float32_t; #define socklen_t int #endif +#ifndef HAVE_WIN32 +#ifndef SOCKET_ERROR +#define SOCKET_ERROR (-1) +#endif +#endif + #ifdef HAVE_OLD_SOCKOPT #define sockopt_val_t char * #else diff --git a/bacula/src/c b/bacula/src/c index 9fc5e3d6f3..526055e6da 100644 --- a/bacula/src/c +++ b/bacula/src/c @@ -1,28 +1,15 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2011-2011 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation, which is - listed in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ diff --git a/bacula/src/c.scr b/bacula/src/c.scr deleted file mode 100644 index 206188e78e..0000000000 --- a/bacula/src/c.scr +++ /dev/null @@ -1,8 +0,0 @@ -l Copyright (C) --1 -mark -l */ -mark -db -inc /home/kern/bacula/k/src/c -e diff --git a/bacula/src/cats/bdb_dbi.h b/bacula/src/cats/bdb_dbi.h deleted file mode 100644 index 4a01c07f9e..0000000000 --- a/bacula/src/cats/bdb_dbi.h +++ /dev/null @@ -1,80 +0,0 @@ -/* - Bacula® - The Network Backup Solution - - Copyright (C) 2009-2011 Free Software Foundation Europe e.V. - - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. - - Bacula® is a registered trademark of Kern Sibbald. - - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. -*/ -#ifndef __BDB_DBI_H_ -#define __BDB_DBI_H_ 1 - -struct DBI_FIELD_GET { - dlink link; - char *value; -}; - -class B_DB_DBI: public B_DB_PRIV { -private: - dbi_inst m_instance; - dbi_conn *m_db_handle; - dbi_result *m_result; - DBI_FIELD_GET *m_field_get; - -public: - B_DB_DBI(JCR *jcr, const char *db_driver, const char *db_name, - const char *db_user, const char *db_password, - const char *db_address, int db_port, const char *db_socket, - bool mult_db_connections, bool disable_batch_insert); - ~B_DB_DBI(); - - /* low level operations */ - bool db_open_database(JCR *jcr); - void db_close_database(JCR *jcr); - void db_thread_cleanup(void); - void db_escape_string(JCR *jcr, char *snew, char *old, int len); - char *db_escape_object(JCR *jcr, char *old, int len); - void db_unescape_object(JCR *jcr, char *from, int32_t expected_len, - POOLMEM **dest, int32_t *len); - void db_start_transaction(JCR *jcr); - void db_end_transaction(JCR *jcr); - bool db_sql_query(const char *query, DB_RESULT_HANDLER *result_handler, void *ctx); - void sql_free_result(void); - SQL_ROW sql_fetch_row(void); - bool sql_query(const char *query, int flags=0); - const char *sql_strerror(void); - int sql_num_rows(void); - void sql_data_seek(int row); - int sql_affected_rows(void); - uint64_t sql_insert_autokey_record(const char *query, const char *table_name); - void sql_field_seek(int field); - SQL_FIELD *sql_fetch_field(void); - int sql_num_fields(void); - bool sql_field_is_not_null(int field_type); - bool sql_field_is_numeric(int field_type); - bool sql_batch_start(JCR *jcr); - bool sql_batch_end(JCR *jcr, const char *error); - bool sql_batch_insert(JCR *jcr, ATTR_DBR *ar); -}; - -#endif /* __BDB_DBI_H_ */ diff --git a/bacula/src/cats/bdb_ingres.h b/bacula/src/cats/bdb_ingres.h deleted file mode 100644 index 9daf526bf9..0000000000 --- a/bacula/src/cats/bdb_ingres.h +++ /dev/null @@ -1,76 +0,0 @@ -/* - Bacula® - The Network Backup Solution - - Copyright (C) 2009-2011 Free Software Foundation Europe e.V. - - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. - - Bacula® is a registered trademark of Kern Sibbald. - - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. -*/ -#ifndef __BDB_INGRES_H_ -#define __BDB_INGRES_H_ 1 - -class B_DB_INGRES: public B_DB_PRIV { -private: - INGconn *m_db_handle; - INGresult *m_result; - bool m_explicit_commit; - int m_session_id; - alist *m_query_filters; - -public: - B_DB_INGRES(JCR *jcr, const char *db_driver, const char *db_name, - const char *db_user, const char *db_password, - const char *db_address, int db_port, const char *db_socket, - bool mult_db_connections, bool disable_batch_insert); - ~B_DB_INGRES(); - - /* low level operations */ - bool db_open_database(JCR *jcr); - void db_close_database(JCR *jcr); - void db_thread_cleanup(void); - void db_escape_string(JCR *jcr, char *snew, char *old, int len); - char *db_escape_object(JCR *jcr, char *old, int len); - void db_unescape_object(JCR *jcr, char *from, int32_t expected_len, - POOLMEM **dest, int32_t *len); - void db_start_transaction(JCR *jcr); - void db_end_transaction(JCR *jcr); - bool db_sql_query(const char *query, DB_RESULT_HANDLER *result_handler, void *ctx); - void sql_free_result(void); - SQL_ROW sql_fetch_row(void); - bool sql_query(const char *query, int flags=0); - const char *sql_strerror(void); - int sql_num_rows(void); - void sql_data_seek(int row); - int sql_affected_rows(void); - uint64_t sql_insert_autokey_record(const char *query, const char *table_name); - void sql_field_seek(int field); - SQL_FIELD *sql_fetch_field(void); - int sql_num_fields(void); - bool sql_field_is_not_null(int field_type); - bool sql_field_is_numeric(int field_type); - bool sql_batch_start(JCR *jcr); - bool sql_batch_end(JCR *jcr, const char *error); - bool sql_batch_insert(JCR *jcr, ATTR_DBR *ar); -}; - -#endif /* __BDB_INGRES_H_ */ diff --git a/bacula/src/cats/bdb_mysql.h b/bacula/src/cats/bdb_mysql.h index 3eddf2477f..b32d05f8b3 100644 --- a/bacula/src/cats/bdb_mysql.h +++ b/bacula/src/cats/bdb_mysql.h @@ -1,30 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2009-2011 Free Software Foundation Europe e.V. + Copyright (C) 2009-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ #ifndef __BDB_MYSQL_H_ #define __BDB_MYSQL_H_ 1 diff --git a/bacula/src/cats/bdb_postgresql.h b/bacula/src/cats/bdb_postgresql.h index ee57926efc..2192c28a0e 100644 --- a/bacula/src/cats/bdb_postgresql.h +++ b/bacula/src/cats/bdb_postgresql.h @@ -1,30 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2009-2011 Free Software Foundation Europe e.V. + Copyright (C) 2009-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ #ifndef __BDB_POSTGRESQL_H_ #define __BDB_POSTGRESQL_H_ 1 diff --git a/bacula/src/cats/bdb_priv.h b/bacula/src/cats/bdb_priv.h index 1e17a5ea25..e58e04f984 100644 --- a/bacula/src/cats/bdb_priv.h +++ b/bacula/src/cats/bdb_priv.h @@ -1,30 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2011-2011 Free Software Foundation Europe e.V. + Copyright (C) 2011-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ #ifndef __BDB_PRIV_H_ #define __BDB_PRIV_H_ 1 @@ -36,7 +23,7 @@ /* * Generic definition of a sql_row. */ -typedef char ** SQL_ROW; +typedef char **SQL_ROW; /* * Generic definition of a a sql_field. diff --git a/bacula/src/cats/bdb_sqlite.h b/bacula/src/cats/bdb_sqlite.h index 7226b357d7..39a0b33bcc 100644 --- a/bacula/src/cats/bdb_sqlite.h +++ b/bacula/src/cats/bdb_sqlite.h @@ -1,30 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2009-2011 Free Software Foundation Europe e.V. + Copyright (C) 2009-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ #ifndef __BDB_SQLITE_H_ #define __BDB_SQLITE_H_ 1 @@ -45,8 +32,8 @@ public: ~B_DB_SQLITE(); /* Used internaly by sqlite.c to access fields in db_sql_query() */ - void set_column_names(char **res, int nb) { - m_col_names = res; + void set_column_names(char **res, int nb) { + m_col_names = res; m_num_fields = nb; m_field_number = 0; } diff --git a/bacula/src/cats/bvfs.c b/bacula/src/cats/bvfs.c index 27f76d54b7..460f683a2e 100644 --- a/bacula/src/cats/bvfs.c +++ b/bacula/src/cats/bvfs.c @@ -1,34 +1,22 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2009-2010 Free Software Foundation Europe e.V. + Copyright (C) 2009-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation, which is - listed in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ #include "bacula.h" -#if HAVE_SQLITE3 || HAVE_MYSQL || HAVE_POSTGRESQL || HAVE_INGRES || HAVE_DBI +#if HAVE_SQLITE3 || HAVE_MYSQL || HAVE_POSTGRESQL #include "cats.h" #include "bdb_priv.h" @@ -42,16 +30,16 @@ static int result_handler(void *ctx, int fields, char **row) { if (fields == 4) { - Pmsg4(0, "%s\t%s\t%s\t%s\n", + Pmsg4(0, "%s\t%s\t%s\t%s\n", row[0], row[1], row[2], row[3]); } else if (fields == 5) { - Pmsg5(0, "%s\t%s\t%s\t%s\t%s\n", + Pmsg5(0, "%s\t%s\t%s\t%s\t%s\n", row[0], row[1], row[2], row[3], row[4]); } else if (fields == 6) { - Pmsg6(0, "%s\t%s\t%s\t%s\t%s\t%s\n", + Pmsg6(0, "%s\t%s\t%s\t%s\t%s\t%s\n", row[0], row[1], row[2], row[3], row[4], row[5]); } else if (fields == 7) { - Pmsg7(0, "%s\t%s\t%s\t%s\t%s\t%s\t%s\n", + Pmsg7(0, "%s\t%s\t%s\t%s\t%s\t%s\t%s\n", row[0], row[1], row[2], row[3], row[4], row[5], row[6]); } return 0; @@ -64,7 +52,10 @@ Bvfs::Bvfs(JCR *j, B_DB *mdb) { jobids = get_pool_memory(PM_NAME); prev_dir = get_pool_memory(PM_NAME); pattern = get_pool_memory(PM_NAME); - *jobids = *prev_dir = *pattern = 0; + filename = get_pool_memory(PM_NAME); + tmp = get_pool_memory(PM_NAME); + escaped_list = get_pool_memory(PM_NAME); + *filename = *jobids = *prev_dir = *pattern = 0; dir_filenameid = pwd_id = offset = 0; see_copies = see_all_versions = false; limit = 1000; @@ -72,12 +63,16 @@ Bvfs::Bvfs(JCR *j, B_DB *mdb) { list_entries = result_handler; user_data = this; username = NULL; + job_acl = client_acl = pool_acl = fileset_acl = NULL; } Bvfs::~Bvfs() { free_pool_memory(jobids); free_pool_memory(pattern); free_pool_memory(prev_dir); + free_pool_memory(filename); + free_pool_memory(tmp); + free_pool_memory(escaped_list); if (username) { free(username); } @@ -85,26 +80,94 @@ Bvfs::~Bvfs() { jcr->dec_use_count(); } +char *Bvfs::escape_list(alist *lst) +{ + char *elt; + int len; + + /* List is empty, reject everything */ + if (!lst || lst->size() == 0) { + Mmsg(escaped_list, "''"); + return escaped_list; + } + + *tmp = 0; + *escaped_list = 0; + + foreach_alist(elt, lst) { + if (elt && *elt) { + len = strlen(elt); + /* Escape + ' ' */ + tmp = check_pool_memory_size(tmp, 2 * len + 2 + 2); + + tmp[0] = '\''; + db_escape_string(jcr, db, tmp + 1 , elt, len); + pm_strcat(tmp, "'"); + + if (*escaped_list) { + pm_strcat(escaped_list, ","); + } + + pm_strcat(escaped_list, tmp); + } + } + return escaped_list; +} + void Bvfs::filter_jobid() { - if (!username) { + POOL_MEM query; + POOL_MEM sub_where; + POOL_MEM sub_join; + + /* No ACL, no username, no check */ + if (!job_acl && !fileset_acl && !client_acl && !pool_acl && !username) { + Dmsg0(dbglevel_sql, "No ACL\n"); return; } - /* Query used by Bweb to filter clients, activated when using - * set_username() - */ - POOL_MEM query; - Mmsg(query, - "SELECT DISTINCT JobId FROM Job JOIN Client USING (ClientId) " + if (job_acl) { + Mmsg(sub_where, " AND Job.Name IN (%s) ", escape_list(job_acl)); + } + + if (fileset_acl) { + Mmsg(query, " AND FileSet.FileSet IN (%s) ", escape_list(fileset_acl)); + pm_strcat(sub_where, query.c_str()); + pm_strcat(sub_join, " JOIN FileSet USING (FileSetId) "); + } + + if (client_acl) { + Mmsg(query, " AND Client.Name IN (%s) ", escape_list(client_acl)); + pm_strcat(sub_where, query.c_str()); + } + + if (pool_acl) { + Mmsg(query, " AND Pool.Name IN (%s) ", escape_list(pool_acl)); + pm_strcat(sub_where, query.c_str()); + pm_strcat(sub_join, " JOIN Pool USING (PoolId) "); + } + + if (username) { + /* Query used by Bweb to filter clients, activated when using + * set_username() + */ + Mmsg(query, + "SELECT DISTINCT JobId FROM Job JOIN Client USING (ClientId) %s " "JOIN (SELECT ClientId FROM client_group_member " "JOIN client_group USING (client_group_id) " "JOIN bweb_client_group_acl USING (client_group_id) " "JOIN bweb_user USING (userid) " "WHERE bweb_user.username = '%s' " ") AS filter USING (ClientId) " - " WHERE JobId IN (%s)", - username, jobids); + " WHERE JobId IN (%s) %s", + sub_join.c_str(), username, jobids, sub_where.c_str()); + + } else { + Mmsg(query, + "SELECT DISTINCT JobId FROM Job JOIN Client USING (ClientId) %s " + " WHERE JobId IN (%s) %s", + sub_join.c_str(), jobids, sub_where.c_str()); + } db_list_ctx ctx; Dmsg1(dbglevel_sql, "q=%s\n", query.c_str()); @@ -124,13 +187,13 @@ void Bvfs::set_jobids(char *ids) filter_jobid(); } -/* +/* * TODO: Find a way to let the user choose how he wants to display * files and directories */ -/* +/* * Working Object to store PathId already seen (avoid * database queries), equivalent to %cache_ppathid in perl */ @@ -171,7 +234,7 @@ public: bool ret = cache_ppathid->lookup(pathid) != NULL; return ret; } - + void insert(char *pathid) { hlink *h = get_hlink(); cache_ppathid->insert(pathid, h); @@ -200,8 +263,8 @@ char *bvfs_parent_dir(char *path) int len = strlen(path) - 1; /* windows directory / */ - if (len == 2 && B_ISALPHA(path[0]) - && path[1] == ':' + if (len == 2 && B_ISALPHA(path[0]) + && path[1] == ':' && path[2] == '/') { len = 0; @@ -243,12 +306,12 @@ char *bvfs_basename_dir(char *path) if (*p == '/') { p++; /* skip first / */ } - } + } return p; } -static void build_path_hierarchy(JCR *jcr, B_DB *mdb, - pathid_cache &ppathid_cache, +static void build_path_hierarchy(JCR *jcr, B_DB *mdb, + pathid_cache &ppathid_cache, char *org_pathid, char *path) { Dmsg1(dbglevel, "build_path_hierarchy(%s)\n", path); @@ -266,7 +329,7 @@ static void build_path_hierarchy(JCR *jcr, B_DB *mdb, { if (!ppathid_cache.lookup(pathid)) { - Mmsg(mdb->cmd, + Mmsg(mdb->cmd, "SELECT PPathId FROM PathHierarchy WHERE PathId = %s", pathid); @@ -290,12 +353,12 @@ static void build_path_hierarchy(JCR *jcr, B_DB *mdb, goto bail_out; } ppathid_cache.insert(pathid); - + Mmsg(mdb->cmd, "INSERT INTO PathHierarchy (PathId, PPathId) " "VALUES (%s,%lld)", pathid, (uint64_t) parent.PathId); - + if (!INSERT_DB(jcr, mdb, mdb->cmd)) { goto bail_out; /* Can't insert the record, just leave */ } @@ -309,14 +372,14 @@ static void build_path_hierarchy(JCR *jcr, B_DB *mdb, */ goto bail_out; } - } + } bail_out: mdb->path = bkp; mdb->fnl = 0; } -/* +/* * Internal function to update path_hierarchy cache with a shared pathid cache * return Error 0 * OK 1 @@ -331,12 +394,12 @@ static int update_path_hierarchy_cache(JCR *jcr, uint32_t num; char jobid[50]; edit_uint64(JobId, jobid); - + db_lock(mdb); db_start_transaction(jcr, mdb); Mmsg(mdb->cmd, "SELECT 1 FROM Job WHERE JobId = %s AND HasCache=1", jobid); - + if (!QUERY_DB(jcr, mdb, mdb->cmd) || sql_num_rows(mdb) > 0) { Dmsg1(dbglevel, "already computed %d\n", (uint32_t)JobId ); ret = 1; @@ -362,7 +425,7 @@ static int update_path_hierarchy_cache(JCR *jcr, * visibility We try to avoid recursion, to be as fast as possible We also * only work on not allready hierarchised directories... */ - Mmsg(mdb->cmd, + Mmsg(mdb->cmd, "SELECT PathVisibility.PathId, Path " "FROM PathVisibility " "JOIN Path ON( PathVisibility.PathId = Path.PathId) " @@ -378,21 +441,21 @@ static int update_path_hierarchy_cache(JCR *jcr, goto bail_out; } - /* TODO: I need to reuse the DB connection without emptying the result + /* TODO: I need to reuse the DB connection without emptying the result * So, now i'm copying the result in memory to be able to query the * catalog descriptor again. */ num = sql_num_rows(mdb); if (num > 0) { char **result = (char **)malloc (num * 2 * sizeof(char *)); - + SQL_ROW row; int i=0; while((row = sql_fetch_row(mdb))) { result[i++] = bstrdup(row[0]); result[i++] = bstrdup(row[1]); } - + i=0; while (num > 0) { build_path_hierarchy(jcr, mdb, ppathid_cache, result[i], result[i+1]); @@ -404,7 +467,7 @@ static int update_path_hierarchy_cache(JCR *jcr, } if (mdb->db_get_type_index() == SQL_TYPE_SQLITE3) { - Mmsg(mdb->cmd, + Mmsg(mdb->cmd, "INSERT INTO PathVisibility (PathId, JobId) " "SELECT DISTINCT h.PPathId AS PathId, %s " "FROM PathHierarchy AS h " @@ -413,7 +476,7 @@ static int update_path_hierarchy_cache(JCR *jcr, jobid, jobid, jobid ); } else { - Mmsg(mdb->cmd, + Mmsg(mdb->cmd, "INSERT INTO PathVisibility (PathId, JobId) " "SELECT a.PathId,%s " "FROM ( " @@ -430,7 +493,7 @@ static int update_path_hierarchy_cache(JCR *jcr, do { ret = QUERY_DB(jcr, mdb, mdb->cmd); } while (ret && sql_affected_rows(mdb) > 0); - + Mmsg(mdb->cmd, "UPDATE Job SET HasCache=1 WHERE JobId=%s", jobid); UPDATE_DB(jcr, mdb, mdb->cmd); @@ -440,7 +503,7 @@ bail_out: return ret; } -/* +/* * Find an store the filename descriptor for empty directories Filename.Name='' */ DBId_t Bvfs::get_dir_filenameid() @@ -449,13 +512,155 @@ DBId_t Bvfs::get_dir_filenameid() if (dir_filenameid) { return dir_filenameid; } - POOL_MEM q; - Mmsg(q, "SELECT FilenameId FROM Filename WHERE Name = ''"); - db_sql_query(db, q.c_str(), db_int_handler, &id); + Mmsg(db->cmd, "SELECT FilenameId FROM Filename WHERE Name = ''"); + db_sql_query(db, db->cmd, db_int_handler, &id); dir_filenameid = id; return dir_filenameid; } +/* Compute the cache for the bfileview compoment */ +void Bvfs::fv_update_cache() +{ + int64_t pathid; + int64_t size=0, count=0; + + Dmsg0(dbglevel, "fv_update_cache()\n"); + + if (!*jobids) { + return; /* Nothing to build */ + } + + db_lock(db); + db_start_transaction(jcr, db); + + pathid = get_root(); + + fv_compute_size_and_count(pathid, &size, &count); + + db_end_transaction(jcr, db); + db_unlock(db); +} + +/* Not yet working */ +void Bvfs::fv_get_big_files(int64_t pathid, int64_t min_size, int32_t limit) +{ + Mmsg(db->cmd, + "SELECT FilenameId AS filenameid, Name AS name, size " + "FROM ( " + "SELECT FilenameId, base64_decode_lstat(8,LStat) AS size " + "FROM File " + "WHERE PathId = %lld " + "AND JobId = %s " + ") AS S INNER JOIN Filename USING (FilenameId) " + "WHERE S.size > %lld " + "ORDER BY S.size DESC " + "LIMIT %d ", pathid, jobids, min_size, limit); +} + +/* Get the current path size and files count */ +void Bvfs::fv_get_current_size_and_count(int64_t pathid, int64_t *size, int64_t *count) +{ + SQL_ROW row; + + *size = *count = 0; + + Mmsg(db->cmd, + "SELECT Size AS size, Files AS files " + " FROM PathVisibility " + " WHERE PathId = %lld " + " AND JobId = %s ", pathid, jobids); + + if (!QUERY_DB(jcr, db, db->cmd)) { + return; + } + + if ((row = sql_fetch_row(db))) { + *size = str_to_int64(row[0]); + *count = str_to_int64(row[1]); + } +} + +/* Compute for the current path the size and files count */ +void Bvfs::fv_get_size_and_count(int64_t pathid, int64_t *size, int64_t *count) +{ + SQL_ROW row; + + *size = *count = 0; + + Mmsg(db->cmd, + "SELECT sum(base64_decode_lstat(8,LStat)) AS size, count(1) AS files " + " FROM File " + " WHERE PathId = %lld " + " AND JobId = %s ", pathid, jobids); + + if (!QUERY_DB(jcr, db, db->cmd)) { + return; + } + + if ((row = sql_fetch_row(db))) { + *size = str_to_int64(row[0]); + *count = str_to_int64(row[1]); + } +} + +void Bvfs::fv_compute_size_and_count(int64_t pathid, int64_t *size, int64_t *count) +{ + Dmsg1(dbglevel, "fv_compute_size_and_count(%lld)\n", pathid); + + fv_get_current_size_and_count(pathid, size, count); + if (*size > 0) { + return; + } + + /* Update stats for the current directory */ + fv_get_size_and_count(pathid, size, count); + + /* Update stats for all sub directories */ + Mmsg(db->cmd, + " SELECT PathId " + " FROM PathVisibility " + " INNER JOIN PathHierarchy USING (PathId) " + " WHERE PPathId = %lld " + " AND JobId = %s ", pathid, jobids); + + QUERY_DB(jcr, db, db->cmd); + int num = sql_num_rows(db); + + if (num > 0) { + int64_t *result = (int64_t *)malloc (num * sizeof(int64_t)); + SQL_ROW row; + int i=0; + + while((row = sql_fetch_row(db))) { + result[i++] = str_to_int64(row[0]); /* PathId */ + } + + i=0; + while (num > 0) { + int64_t c=0, s=0; + fv_compute_size_and_count(result[i], &s, &c); + *size += s; + *count += c; + + i++; + num--; + } + free(result); + } + + fv_update_size_and_count(pathid, *size, *count); +} + +void Bvfs::fv_update_size_and_count(int64_t pathid, int64_t size, int64_t count) +{ + Mmsg(db->cmd, + "UPDATE PathVisibility SET Files = %lld, Size = %lld " + " WHERE JobId = %s " + " AND PathId = %lld ", count, size, jobids, pathid); + + UPDATE_DB(jcr, db, db->cmd); +} + void bvfs_update_cache(JCR *jcr, B_DB *mdb) { uint32_t nb=0; @@ -477,14 +682,14 @@ void bvfs_update_cache(JCR *jcr, B_DB *mdb) "PPathId integer NOT NULL, " "CONSTRAINT pathhierarchy_pkey " "PRIMARY KEY (PathId))"); - QUERY_DB(jcr, mdb, mdb->cmd); + QUERY_DB(jcr, mdb, mdb->cmd); Mmsg(mdb->cmd, "CREATE INDEX pathhierarchy_ppathid " "ON PathHierarchy (PPathId)"); QUERY_DB(jcr, mdb, mdb->cmd); - Mmsg(mdb->cmd, + Mmsg(mdb->cmd, "CREATE TABLE PathVisibility (" "PathId integer NOT NULL, " "JobId integer NOT NULL, " @@ -494,7 +699,7 @@ void bvfs_update_cache(JCR *jcr, B_DB *mdb) "PRIMARY KEY (JobId, PathId))"); QUERY_DB(jcr, mdb, mdb->cmd); - Mmsg(mdb->cmd, + Mmsg(mdb->cmd, "CREATE INDEX pathvisibility_jobid " "ON PathVisibility (JobId)"); QUERY_DB(jcr, mdb, mdb->cmd); @@ -502,7 +707,7 @@ void bvfs_update_cache(JCR *jcr, B_DB *mdb) } #endif - Mmsg(mdb->cmd, + Mmsg(mdb->cmd, "SELECT JobId from Job " "WHERE HasCache = 0 " "AND Type IN ('B') AND JobStatus IN ('T', 'f', 'A') " @@ -514,7 +719,7 @@ void bvfs_update_cache(JCR *jcr, B_DB *mdb) db_start_transaction(jcr, mdb); Dmsg0(dbglevel, "Cleaning pathvisibility\n"); - Mmsg(mdb->cmd, + Mmsg(mdb->cmd, "DELETE FROM PathVisibility " "WHERE NOT EXISTS " "(SELECT 1 FROM Job WHERE JobId=PathVisibility.JobId)"); @@ -552,7 +757,33 @@ bvfs_update_path_hierarchy_cache(JCR *jcr, B_DB *mdb, char *jobids) return ret; } -/* +/* + * Update the bvfs fileview for given jobids + */ +void +bvfs_update_fv_cache(JCR *jcr, B_DB *mdb, char *jobids) +{ + char *p; + JobId_t JobId; + Bvfs bvfs(jcr, mdb); + + for (p=jobids; ; ) { + int stat = get_next_jobid_from_list(&p, &JobId); + if (stat < 0) { + return; + } + if (stat == 0) { + break; + } + + Dmsg1(dbglevel, "Trying to create cache for %lld\n", (int64_t)JobId); + + bvfs.set_jobid(JobId); + bvfs.fv_update_cache(); + } +} + +/* * Update the bvfs cache for current jobids */ void Bvfs::update_cache() @@ -566,12 +797,12 @@ bool Bvfs::ch_dir(const char *path) pm_strcpy(db->path, path); db->pnl = strlen(db->path); db_lock(db); - ch_dir(db_get_path_record(jcr, db)); + ch_dir(db_get_path_record(jcr, db)); db_unlock(db); return pwd_id != 0; } -/* +/* * Get all file versions for a specified client * TODO: Handle basejobs using different client */ @@ -589,7 +820,7 @@ void Bvfs::get_all_file_versions(DBId_t pathid, DBId_t fnid, const char *client) POOL_MEM query; - Mmsg(query,// 1 2 3 + Mmsg(query,// 1 2 3 "SELECT 'V', File.PathId, File.FilenameId, File.Md5, " // 4 5 6 "File.JobId, File.LStat, File.FileId, " @@ -612,6 +843,29 @@ void Bvfs::get_all_file_versions(DBId_t pathid, DBId_t fnid, const char *client) db_sql_query(db, query.c_str(), list_entries, user_data); } +/* + * Get all volumes for a specific file + */ +void Bvfs::get_volumes(DBId_t fileid) +{ + Dmsg1(dbglevel, "get_volumes(%lld)\n", (uint64_t)fileid); + + char ed1[50]; + POOL_MEM query; + + Mmsg(query, +// 7 8 +"SELECT 'L',0,0,0,0,0,0, Media.VolumeName, Media.InChanger " +"FROM File JOIN JobMedia USING (JobId) JOIN Media USING (MediaId) " +"WHERE File.FileId = %s " + "AND File.FileIndex >= JobMedia.FirstIndex " + "AND File.FileIndex <= JobMedia.LastIndex " + " ORDER BY JobMediaId LIMIT %d OFFSET %d" + ,edit_uint64(fileid, ed1), limit, offset); + Dmsg1(dbglevel_sql, "q=%s\n", query.c_str()); + db_sql_query(db, query.c_str(), list_entries, user_data); +} + DBId_t Bvfs::get_root() { int p; @@ -632,15 +886,15 @@ int Bvfs::_handle_path(void *ctx, int fields, char **row) { if (bvfs_is_dir(row)) { /* can have the same path 2 times */ - if (strcmp(row[BVFS_Name], prev_dir)) { - pm_strcpy(prev_dir, row[BVFS_Name]); + if (strcmp(row[BVFS_PathId], prev_dir)) { + pm_strcpy(prev_dir, row[BVFS_PathId]); return list_entries(user_data, fields, row); } } return 0; } -/* +/* * Retrieve . and .. information */ void Bvfs::ls_special_dirs() @@ -658,7 +912,7 @@ void Bvfs::ls_special_dirs() *prev_dir = 0; POOL_MEM query; - Mmsg(query, + Mmsg(query, "(SELECT PPathId AS PathId, '..' AS Path " "FROM PathHierarchy " "WHERE PathId = %s " @@ -694,8 +948,9 @@ bool Bvfs::ls_dirs() POOL_MEM query; POOL_MEM filter; if (*pattern) { - Mmsg(filter, " AND Path2.Path %s '%s' ", + Mmsg(filter, " AND Path2.Path %s '%s' ", match_query[db_get_type_index(db)], pattern); + } if (!dir_filenameid) { @@ -755,17 +1010,17 @@ bool Bvfs::ls_dirs() return nb_record == limit; } -void build_ls_files_query(B_DB *db, POOL_MEM &query, - const char *JobId, const char *PathId, +void build_ls_files_query(B_DB *db, POOL_MEM &query, + const char *JobId, const char *PathId, const char *filter, int64_t limit, int64_t offset) { if (db_get_type_index(db) == SQL_TYPE_POSTGRESQL) { - Mmsg(query, sql_bvfs_list_files[db_get_type_index(db)], - JobId, PathId, JobId, PathId, + Mmsg(query, sql_bvfs_list_files[db_get_type_index(db)], + JobId, PathId, JobId, PathId, filter, limit, offset); } else { - Mmsg(query, sql_bvfs_list_files[db_get_type_index(db)], - JobId, PathId, JobId, PathId, + Mmsg(query, sql_bvfs_list_files[db_get_type_index(db)], + JobId, PathId, JobId, PathId, limit, offset, filter, JobId, JobId); } } @@ -788,11 +1043,14 @@ bool Bvfs::ls_files() edit_uint64(pwd_id, pathid); if (*pattern) { - Mmsg(filter, " AND Filename.Name %s '%s' ", + Mmsg(filter, " AND Filename.Name %s '%s' ", match_query[db_get_type_index(db)], pattern); + + } else if (*filename) { + Mmsg(filter, " AND Filename.Name = '%s' ", filename); } - build_ls_files_query(db, query, + build_ls_files_query(db, query, jobids, pathid, filter.c_str(), limit, offset); @@ -807,8 +1065,8 @@ bool Bvfs::ls_files() } -/* - * Return next Id from comma separated list +/* + * Return next Id from comma separated list * * Returns: * 1 if next Id returned @@ -881,7 +1139,7 @@ bool Bvfs::drop_restore_list(char *output_table) return false; } -bool Bvfs::compute_restore_list(char *fileid, char *dirid, char *hardlink, +bool Bvfs::compute_restore_list(char *fileid, char *dirid, char *hardlink, char *output_table) { POOL_MEM query; @@ -924,7 +1182,7 @@ bool Bvfs::compute_restore_list(char *fileid, char *dirid, char *hardlink, /* Add a directory content */ while (get_next_id_from_list(&dirid, &id) == 1) { Mmsg(tmp, "SELECT Path FROM Path WHERE PathId=%lld", id); - + if (!db_sql_query(db, tmp.c_str(), get_path_handler, (void *)&tmp2)) { Dmsg0(dbglevel, "Can't search for path\n"); /* print error */ @@ -940,10 +1198,10 @@ bool Bvfs::compute_restore_list(char *fileid, char *dirid, char *hardlink, char *p = tmp.c_str(); for (char *s = tmp2.c_str(); *s ; s++) { if (*s == '%' || *s == '_' || *s == '\\') { - *p = '\\'; + *p = '\\'; p++; } - *p = *s; + *p = *s; p++; } *p = '\0'; @@ -960,8 +1218,8 @@ bool Bvfs::compute_restore_list(char *fileid, char *dirid, char *hardlink, Mmsg(tmp, "SELECT Job.JobId, JobTDate, File.FileIndex, File.FilenameId, " "File.PathId, FileId " "FROM Path JOIN File USING (PathId) JOIN Job USING (JobId) " - "WHERE Path.Path LIKE '%s' AND File.JobId IN (%s) ", - tmp2.c_str(), jobids); + "WHERE Path.Path LIKE '%s' AND File.JobId IN (%s) ", + tmp2.c_str(), jobids); query.strcat(tmp.c_str()); init = true; @@ -974,8 +1232,8 @@ bool Bvfs::compute_restore_list(char *fileid, char *dirid, char *hardlink, "JOIN File USING (FileId) " "JOIN Job ON (BaseFiles.JobId = Job.JobId) " "JOIN Path USING (PathId) " - "WHERE Path.Path LIKE '%s' AND BaseFiles.JobId IN (%s) ", - tmp2.c_str(), jobids); + "WHERE Path.Path LIKE '%s' AND BaseFiles.JobId IN (%s) ", + tmp2.c_str(), jobids); query.strcat(tmp.c_str()); } @@ -997,7 +1255,7 @@ bool Bvfs::compute_restore_list(char *fileid, char *dirid, char *hardlink, } Mmsg(tmp, "SELECT Job.JobId, JobTDate, FileIndex, FilenameId, " "PathId, FileId " - "FROM File JOIN Job USING (JobId) WHERE JobId = %lld " + "FROM File JOIN Job USING (JobId) WHERE JobId = %lld " "AND FileIndex IN (%lld", jobid, id); prev_jobid = jobid; @@ -1020,7 +1278,7 @@ bool Bvfs::compute_restore_list(char *fileid, char *dirid, char *hardlink, goto bail_out; } - Mmsg(query, sql_bvfs_select[db_get_type_index(db)], + Mmsg(query, sql_bvfs_select[db_get_type_index(db)], output_table, output_table, output_table); /* TODO: handle jobid filter */ @@ -1032,7 +1290,7 @@ bool Bvfs::compute_restore_list(char *fileid, char *dirid, char *hardlink, /* MySQL need it */ if (db_get_type_index(db) == SQL_TYPE_MYSQL) { - Mmsg(query, "CREATE INDEX idx_%s ON %s (JobId)", + Mmsg(query, "CREATE INDEX idx_%s ON %s (JobId)", output_table, output_table); Dmsg1(dbglevel_sql, "q=%s\n", query.c_str()); if (!db_sql_query(db, query.c_str(), NULL, NULL)) { @@ -1050,4 +1308,4 @@ bail_out: return ret; } -#endif /* HAVE_SQLITE3 || HAVE_MYSQL || HAVE_POSTGRESQL || HAVE_INGRES || HAVE_DBI */ +#endif /* HAVE_SQLITE3 || HAVE_MYSQL || HAVE_POSTGRESQL */ diff --git a/bacula/src/cats/bvfs.h b/bacula/src/cats/bvfs.h index 5be7d903eb..d5532f4295 100644 --- a/bacula/src/cats/bvfs.h +++ b/bacula/src/cats/bvfs.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2009 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ @@ -31,7 +19,7 @@ #define __BVFS_H_ 1 -/* +/* * This object can be use to browse the catalog * * Bvfs fs; @@ -46,12 +34,13 @@ typedef enum { BVFS_FILE_RECORD = 'F', BVFS_DIR_RECORD = 'D', - BVFS_FILE_VERSION = 'V' + BVFS_FILE_VERSION = 'V', + BVFS_VOLUME_LIST = 'L' } bvfs_handler_type; typedef enum { - BVFS_Type = 0, /* Could be D, F, V */ - BVFS_PathId = 1, + BVFS_Type = 0, /* Could be D, F, V, L */ + BVFS_PathId = 1, BVFS_FilenameId = 2, BVFS_Name = 3, @@ -75,6 +64,10 @@ public: void set_jobid(JobId_t id); void set_jobids(char *ids); + char *get_jobids() { + return jobids; + } + void set_limit(uint32_t max) { limit = max; } @@ -89,6 +82,12 @@ public: db_escape_string(jcr, db, pattern, p, len); } + void set_filename(char *p) { + uint32_t len = strlen(p); + filename = check_pool_memory_size(filename, len*2+1); + db_escape_string(jcr, db, filename, p, len); + } + /* Get the root point */ DBId_t get_root(); @@ -100,7 +99,7 @@ public: pwd_id = pathid; } - /* + /* * Returns true if the directory exists */ bool ch_dir(const char *path); @@ -112,6 +111,9 @@ public: void update_cache(); + /* bfileview */ + void fv_update_cache(); + void set_see_all_versions(bool val) { see_all_versions = val; } @@ -128,6 +130,32 @@ public: } } + char *escape_list(alist *list); + + bool copy_acl(alist *list) { + if (!list || + (list->size() > 0 && + (strcasecmp((char *)list->get(0), "*all*") == 0))) + { + return false; + } + return true; + } + + /* Keep a pointer to various ACLs */ + void set_job_acl(alist *lst) { + job_acl = copy_acl(lst)?lst:NULL; + } + void set_fileset_acl(alist *lst) { + fileset_acl = copy_acl(lst)?lst:NULL; + } + void set_client_acl(alist *lst) { + client_acl = copy_acl(lst)?lst:NULL; + } + void set_pool_acl(alist *lst) { + pool_acl = copy_acl(lst)?lst:NULL; + } + void set_handler(DB_RESULT_HANDLER *h, void *ctx) { list_entries = h; user_data = ctx; @@ -157,15 +185,20 @@ public: void clear_cache(); /* Compute restore list */ - bool compute_restore_list(char *fileid, char *dirid, char *hardlink, + bool compute_restore_list(char *fileid, char *dirid, char *hardlink, char *output_table); - + /* Drop previous restore list */ bool drop_restore_list(char *output_table); /* for internal use */ int _handle_path(void *, int, char **); - + + /* Handle Delta parts if any */ + + /* Get a list of volumes */ + void get_volumes(DBId_t fileid); + private: Bvfs(const Bvfs &); /* prohibit pass by value */ Bvfs & operator = (const Bvfs &); /* prohibit class assignment */ @@ -174,20 +207,40 @@ private: B_DB *db; POOLMEM *jobids; char *username; /* Used with Bweb */ + + POOLMEM *prev_dir; /* ls_dirs query returns all versions, take the 1st one */ + POOLMEM *pattern; + POOLMEM *filename; + + POOLMEM *tmp; + POOLMEM *escaped_list; + + /* Pointer to Console ACL */ + alist *job_acl; + alist *client_acl; + alist *fileset_acl; + alist *pool_acl; + + ATTR *attr; /* Can be use by handler to call decode_stat() */ + uint32_t limit; uint32_t offset; uint32_t nb_record; /* number of records of the last query */ - POOLMEM *pattern; DBId_t pwd_id; /* Current pathid */ DBId_t dir_filenameid; /* special FilenameId where Name='' */ - POOLMEM *prev_dir; /* ls_dirs query returns all versions, take the 1st one */ - ATTR *attr; /* Can be use by handler to call decode_stat() */ bool see_all_versions; bool see_copies; DBId_t get_dir_filenameid(); + /* bfileview */ + void fv_get_big_files(int64_t pathid, int64_t min_size, int32_t limit); + void fv_update_size_and_count(int64_t pathid, int64_t size, int64_t count); + void fv_compute_size_and_count(int64_t pathid, int64_t *size, int64_t *count); + void fv_get_current_size_and_count(int64_t pathid, int64_t *size, int64_t *count); + void fv_get_size_and_count(int64_t pathid, int64_t *size, int64_t *count); + DB_RESULT_HANDLER *list_entries; void *user_data; }; @@ -195,11 +248,13 @@ private: #define bvfs_is_dir(row) ((row)[BVFS_Type][0] == BVFS_DIR_RECORD) #define bvfs_is_file(row) ((row)[BVFS_Type][0] == BVFS_FILE_RECORD) #define bvfs_is_version(row) ((row)[BVFS_Type][0] == BVFS_FILE_VERSION) +#define bvfs_is_volume_list(row) ((row)[BVFS_Type][0] == BVFS_VOLUME_LIST) - +void bvfs_update_fv_cache(JCR *jcr, B_DB *mdb, char *jobids); int bvfs_update_path_hierarchy_cache(JCR *jcr, B_DB *mdb, char *jobids); void bvfs_update_cache(JCR *jcr, B_DB *mdb); char *bvfs_parent_dir(char *path); +extern const char *bvfs_select_delta_version_with_basejob_and_delta[]; /* Return the basename of the with the trailing / (update the given string) * TODO: see in the rest of bacula if we don't have diff --git a/bacula/src/cats/cats.c b/bacula/src/cats/cats.c index 4aef7206e3..c3c26df9ef 100644 --- a/bacula/src/cats/cats.c +++ b/bacula/src/cats/cats.c @@ -1,30 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2011-2011 Free Software Foundation Europe e.V. + Copyright (C) 2011-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Generic catalog class methods. @@ -34,7 +21,7 @@ #include "bacula.h" -#if HAVE_SQLITE3 || HAVE_MYSQL || HAVE_POSTGRESQL || HAVE_INGRES || HAVE_DBI +#if HAVE_SQLITE3 || HAVE_MYSQL || HAVE_POSTGRESQL #include "cats.h" #include "bdb_priv.h" @@ -87,21 +74,6 @@ const char *B_DB::db_get_type(void) return "PostgreSQL"; case SQL_INTERFACE_TYPE_SQLITE3: return "SQLite3"; - case SQL_INTERFACE_TYPE_INGRES: - return "Ingres"; - case SQL_INTERFACE_TYPE_DBI: - switch (m_db_type) { - case SQL_TYPE_MYSQL: - return "DBI:MySQL"; - case SQL_TYPE_POSTGRESQL: - return "DBI:PostgreSQL"; - case SQL_TYPE_SQLITE3: - return "DBI:SQLite3"; - case SQL_TYPE_INGRES: - return "DBI:Ingres"; - default: - return "DBI:Unknown"; - } default: return "Unknown"; } @@ -159,4 +131,4 @@ void B_DB::print_lock_info(FILE *fp) } } -#endif /* HAVE_SQLITE3 || HAVE_MYSQL || HAVE_POSTGRESQL || HAVE_INGRES || HAVE_DBI */ +#endif /* HAVE_SQLITE3 || HAVE_MYSQL || HAVE_POSTGRESQL */ diff --git a/bacula/src/cats/cats.h b/bacula/src/cats/cats.h index b61d748c1e..cc2d8d8b2b 100644 --- a/bacula/src/cats/cats.h +++ b/bacula/src/cats/cats.h @@ -1,34 +1,22 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2012 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Catalog header file * - * by Kern E. Sibbald + * Written by Kern E. Sibbald * * Anyone who accesses the database will need to include * this file. @@ -390,7 +378,7 @@ private: }; /* Call back context for getting a list of comma separated strings from the - * database + * database */ class db_list_ctx { public: @@ -425,15 +413,12 @@ typedef enum { SQL_INTERFACE_TYPE_MYSQL = 0, SQL_INTERFACE_TYPE_POSTGRESQL = 1, SQL_INTERFACE_TYPE_SQLITE3 = 2, - SQL_INTERFACE_TYPE_INGRES = 3, - SQL_INTERFACE_TYPE_DBI = 4 } SQL_INTERFACETYPE; typedef enum { SQL_TYPE_MYSQL = 0, SQL_TYPE_POSTGRESQL = 1, SQL_TYPE_SQLITE3 = 2, - SQL_TYPE_INGRES = 3, SQL_TYPE_UNKNOWN = 99 } SQL_DBTYPE; @@ -514,7 +499,7 @@ public: virtual bool db_sql_query(const char *query, DB_RESULT_HANDLER *result_handler, void *ctx) = 0; /* By default, we use db_sql_query */ - virtual bool db_big_sql_query(const char *query, + virtual bool db_big_sql_query(const char *query, DB_RESULT_HANDLER *result_handler, void *ctx) { return db_sql_query(query, result_handler, ctx); }; diff --git a/bacula/src/cats/cats_dummy.c b/bacula/src/cats/cats_dummy.c index 0e17806f1b..99959be042 100644 --- a/bacula/src/cats/cats_dummy.c +++ b/bacula/src/cats/cats_dummy.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2010-2011 Free Software Foundation Europe e.V. + Copyright (C) 2010-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Dummy bacula backend function replaced with the correct one at install time. @@ -33,11 +21,9 @@ #include "cats.h" B_DB *db_init_database(JCR *jcr, const char *db_driver, const char *db_name, const char *db_user, - const char *db_password, const char *db_address, int db_port, const char *db_socket, - bool mult_db_connections, bool disable_batch_insert) + const char *db_password, const char *db_address, int db_port, const char *db_socket, + bool mult_db_connections, bool disable_batch_insert) { - Jmsg(jcr, M_FATAL, 0, _("Please replace this dummy libbaccats library with a proper one.\n")); - + Jmsg(jcr, M_FATAL, 0, _("Please replace this null libbaccats library with a proper one.\n")); return NULL; } - diff --git a/bacula/src/cats/create_bacula_database.in b/bacula/src/cats/create_bacula_database.in index d6b9ddecdd..cf00c99d0c 100644 --- a/bacula/src/cats/create_bacula_database.in +++ b/bacula/src/cats/create_bacula_database.in @@ -3,6 +3,21 @@ # This routine creates the Bacula database # using PostgreSQL, Ingres, MySQL, or SQLite. # +# +# Bacula® - The Network Backup Solution +# +# Copyright (C) 2000-2014 Free Software Foundation Europe e.V. +# +# The main author of Bacula is Kern Sibbald, with contributions from many +# others, a complete list can be found in the file AUTHORS. +# +# You may use this file and others of this release according to the +# license defined in the LICENSE file, which includes the Affero General +# Public License, v3.0 ("AGPLv3") and some additional permissions and +# terms pursuant to its AGPLv3 Section 7. +# +# Bacula® is a registered trademark of Kern Sibbald. +# default_db_type=@DEFAULT_DB_TYPE@ diff --git a/bacula/src/cats/create_ingres_database.in b/bacula/src/cats/create_ingres_database.in deleted file mode 100755 index 42ae2d9464..0000000000 --- a/bacula/src/cats/create_ingres_database.in +++ /dev/null @@ -1,32 +0,0 @@ -#!/bin/sh -# -# shell script to create Bacula database(s) -# - -bindir=@INGRES_BINDIR@ -PATH="$bindir:$PATH" -db_name=${db_name:-@db_name@} -db_user=${db_user:-@db_user@} - -# use SQL_ASCII to be able to put any filename into -# the database even those created with unusual character sets -ENCODING="ENCODING 'SQL_ASCII'" - -# use UTF8 if you are using standard Unix/Linux LANG specifications -# that use UTF8 -- this is normally the default and *should* be -# your standard. Bacula works correctly *only* with correct UTF8. -# -# Note, with this encoding, if you have any "weird" filenames on -# your system (names generated from Win32 or Mac OS), you may -# get Bacula batch insert failures. -# -#ENCODING="ENCODING 'UTF8'" - -if createdb -u${db_user} $* ${db_name} -then - echo "Creation of ${db_name} database succeeded." -else - echo "Creation of ${db_name} database failed." -fi - -exit 0 diff --git a/bacula/src/cats/create_mysql_database.in b/bacula/src/cats/create_mysql_database.in index 1c164cc10e..855bed39ca 100644 --- a/bacula/src/cats/create_mysql_database.in +++ b/bacula/src/cats/create_mysql_database.in @@ -2,6 +2,21 @@ # # shell script to create Bacula database(s) # +# +# Bacula® - The Network Backup Solution +# +# Copyright (C) 2000-2014 Free Software Foundation Europe e.V. +# +# The main author of Bacula is Kern Sibbald, with contributions from many +# others, a complete list can be found in the file AUTHORS. +# +# You may use this file and others of this release according to the +# license defined in the LICENSE file, which includes the Affero General +# Public License, v3.0 ("AGPLv3") and some additional permissions and +# terms pursuant to its AGPLv3 Section 7. +# +# Bacula® is a registered trademark of Kern Sibbald. +# bindir=@MYSQL_BINDIR@ db_name=@db_name@ diff --git a/bacula/src/cats/create_postgresql_database.in b/bacula/src/cats/create_postgresql_database.in index ddd6c90db4..70cf106ccb 100644 --- a/bacula/src/cats/create_postgresql_database.in +++ b/bacula/src/cats/create_postgresql_database.in @@ -2,6 +2,21 @@ # # shell script to create Bacula database(s) # +# +# Bacula® - The Network Backup Solution +# +# Copyright (C) 2000-2014 Free Software Foundation Europe e.V. +# +# The main author of Bacula is Kern Sibbald, with contributions from many +# others, a complete list can be found in the file AUTHORS. +# +# You may use this file and others of this release according to the +# license defined in the LICENSE file, which includes the Affero General +# Public License, v3.0 ("AGPLv3") and some additional permissions and +# terms pursuant to its AGPLv3 Section 7. +# +# Bacula® is a registered trademark of Kern Sibbald. +# PATH="@POSTGRESQL_BINDIR@:$PATH" db_name=${db_name:-@db_name@} diff --git a/bacula/src/cats/create_sqlite3_database.in b/bacula/src/cats/create_sqlite3_database.in index 30bc0bdfba..510bc87228 100644 --- a/bacula/src/cats/create_sqlite3_database.in +++ b/bacula/src/cats/create_sqlite3_database.in @@ -1,6 +1,21 @@ #!/bin/sh # # shell script to create Bacula SQLite tables +# +# Bacula® - The Network Backup Solution +# +# Copyright (C) 2000-2014 Free Software Foundation Europe e.V. +# +# The main author of Bacula is Kern Sibbald, with contributions from many +# others, a complete list can be found in the file AUTHORS. +# +# You may use this file and others of this release according to the +# license defined in the LICENSE file, which includes the Affero General +# Public License, v3.0 ("AGPLv3") and some additional permissions and +# terms pursuant to its AGPLv3 Section 7. +# +# Bacula® is a registered trademark of Kern Sibbald. +# bindir=@SQLITE_BINDIR@ PATH=$bindir:$PATH diff --git a/bacula/src/cats/dbi.c b/bacula/src/cats/dbi.c deleted file mode 100644 index f48ea0a468..0000000000 --- a/bacula/src/cats/dbi.c +++ /dev/null @@ -1,1490 +0,0 @@ -/* - Bacula® - The Network Backup Solution - - Copyright (C) 2003-2011 Free Software Foundation Europe e.V. - - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. - - Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. -*/ -/* - * Bacula Catalog Database routines specific to DBI - * These are DBI specific routines - * - * João Henrique Freitas, December 2007 - * based upon work done by Dan Langille, December 2003 and - * by Kern Sibbald, March 2000 - * - * Major rewrite by Marco van Wieringen, January 2010 for catalog refactoring. - */ -/* - * This code only compiles against a recent version of libdbi. The current - * release found on the libdbi website (0.8.3) won't work for this code. - * - * You find the libdbi library on http://sourceforge.net/projects/libdbi - * - * A fairly recent version of libdbi from CVS works, so either make sure - * your distribution has a fairly recent version of libdbi installed or - * clone the CVS repositories from sourceforge and compile that code and - * install it. - * - * You need: - * cvs co :pserver:anonymous@libdbi.cvs.sourceforge.net:/cvsroot/libdbi - * cvs co :pserver:anonymous@libdbi-drivers.cvs.sourceforge.net:/cvsroot/libdbi-drivers - */ - -#include "bacula.h" - -#ifdef HAVE_DBI - -#include "cats.h" -#include "bdb_priv.h" -#include -#include -#include - -/* ----------------------------------------------------------------------- - * - * DBI dependent defines and subroutines - * - * ----------------------------------------------------------------------- - */ - -/* - * List of open databases - */ -static dlist *db_list = NULL; - -/* - * Control allocated fields by dbi_getvalue - */ -static dlist *dbi_getvalue_list = NULL; - -static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; - -typedef int (*custom_function_insert_t)(void*, const char*, int); -typedef char* (*custom_function_error_t)(void*); -typedef int (*custom_function_end_t)(void*, const char*); - -B_DB_DBI::B_DB_DBI(JCR *jcr, - const char *db_driver, - const char *db_name, - const char *db_user, - const char *db_password, - const char *db_address, - int db_port, - const char *db_socket, - bool mult_db_connections, - bool disable_batch_insert) -{ - char *p; - char new_db_driver[10]; - char db_driverdir[256]; - DBI_FIELD_GET *field; - - p = (char *)(db_driver + 4); - if (strcasecmp(p, "mysql") == 0) { - m_db_type = SQL_TYPE_MYSQL; - bstrncpy(new_db_driver, "mysql", sizeof(new_db_driver)); - } else if (strcasecmp(p, "postgresql") == 0) { - m_db_type = SQL_TYPE_POSTGRESQL; - bstrncpy(new_db_driver, "pgsql", sizeof(new_db_driver)); - } else if (strcasecmp(p, "sqlite3") == 0) { - m_db_type = SQL_TYPE_SQLITE3; - bstrncpy(new_db_driver, "sqlite3", sizeof(new_db_driver)); - } else if (strcasecmp(p, "ingres") == 0) { - m_db_type = SQL_TYPE_INGRES; - bstrncpy(new_db_driver, "ingres", sizeof(new_db_driver)); - } else { - Jmsg(jcr, M_ABORT, 0, _("Unknown database type: %s\n"), p); - return; - } - - /* - * Set db_driverdir whereis is the libdbi drivers - */ - bstrncpy(db_driverdir, DBI_DRIVER_DIR, 255); - - /* - * Initialize the parent class members. - */ - m_db_interface_type = SQL_INTERFACE_TYPE_DBI; - m_db_name = bstrdup(db_name); - m_db_user = bstrdup(db_user); - if (db_password) { - m_db_password = bstrdup(db_password); - } - if (db_address) { - m_db_address = bstrdup(db_address); - } - if (db_socket) { - m_db_socket = bstrdup(db_socket); - } - if (db_driverdir) { - m_db_driverdir = bstrdup(db_driverdir); - } - m_db_driver = bstrdup(new_db_driver); - m_db_port = db_port; - if (disable_batch_insert) { - m_disabled_batch_insert = true; - m_have_batch_insert = false; - } else { - m_disabled_batch_insert = false; -#if defined(USE_BATCH_FILE_INSERT) -#ifdef HAVE_DBI_BATCH_FILE_INSERT - m_have_batch_insert = true; -#else - m_have_batch_insert = false; -#endif /* HAVE_DBI_BATCH_FILE_INSERT */ -#else - m_have_batch_insert = false; -#endif /* USE_BATCH_FILE_INSERT */ - } - errmsg = get_pool_memory(PM_EMSG); /* get error message buffer */ - *errmsg = 0; - cmd = get_pool_memory(PM_EMSG); /* get command buffer */ - cached_path = get_pool_memory(PM_FNAME); - cached_path_id = 0; - m_ref_count = 1; - fname = get_pool_memory(PM_FNAME); - path = get_pool_memory(PM_FNAME); - esc_name = get_pool_memory(PM_FNAME); - esc_path = get_pool_memory(PM_FNAME); - esc_obj = get_pool_memory(PM_FNAME); - m_allow_transactions = mult_db_connections; - - /* At this time, when mult_db_connections == true, this is for - * specific console command such as bvfs or batch mode, and we don't - * want to share a batch mode or bvfs. In the future, we can change - * the creation function to add this parameter. - */ - m_dedicated = mult_db_connections; - - /* - * Initialize the private members. - */ - m_db_handle = NULL; - m_result = NULL; - m_field_get = NULL; - - /* - * Put the db in the list. - */ - if (db_list == NULL) { - db_list = New(dlist(this, &this->m_link)); - dbi_getvalue_list = New(dlist(field, &field->link)); - } - db_list->append(this); -} - -B_DB_DBI::~B_DB_DBI() -{ -} - -/* - * Now actually open the database. This can generate errors, - * which are returned in the errmsg - * - * DO NOT close the database or delete mdb here !!!! - */ -bool B_DB_DBI::db_open_database(JCR *jcr) -{ - bool retval = false; - int errstat; - int dbstat; - uint8_t len; - const char *dbi_errmsg; - char buf[10], *port; - int numdrivers; - char *new_db_name = NULL; - char *new_db_dir = NULL; - - P(mutex); - if (m_connected) { - retval = true; - goto bail_out; - } - - if ((errstat=rwl_init(&m_lock)) != 0) { - berrno be; - Mmsg1(&errmsg, _("Unable to initialize DB lock. ERR=%s\n"), - be.bstrerror(errstat)); - goto bail_out; - } - - if (m_db_port) { - bsnprintf(buf, sizeof(buf), "%d", m_db_port); - port = buf; - } else { - port = NULL; - } - - numdrivers = dbi_initialize_r(m_db_driverdir, &(m_instance)); - if (numdrivers < 0) { - Mmsg2(&errmsg, _("Unable to locate the DBD drivers to DBI interface in: \n" - "db_driverdir=%s. It is probaly not found any drivers\n"), - m_db_driverdir,numdrivers); - goto bail_out; - } - m_db_handle = (void **)dbi_conn_new_r(m_db_driver, m_instance); - /* - * Can be many types of databases - */ - switch (m_db_type) { - case SQL_TYPE_MYSQL: - dbi_conn_set_option(m_db_handle, "host", m_db_address); /* default = localhost */ - dbi_conn_set_option(m_db_handle, "port", port); /* default port */ - dbi_conn_set_option(m_db_handle, "username", m_db_user); /* login name */ - dbi_conn_set_option(m_db_handle, "password", m_db_password); /* password */ - dbi_conn_set_option(m_db_handle, "dbname", m_db_name); /* database name */ - break; - case SQL_TYPE_POSTGRESQL: - dbi_conn_set_option(m_db_handle, "host", m_db_address); - dbi_conn_set_option(m_db_handle, "port", port); - dbi_conn_set_option(m_db_handle, "username", m_db_user); - dbi_conn_set_option(m_db_handle, "password", m_db_password); - dbi_conn_set_option(m_db_handle, "dbname", m_db_name); - break; - case SQL_TYPE_SQLITE3: - len = strlen(working_directory) + 5; - new_db_dir = (char *)malloc(len); - strcpy(new_db_dir, working_directory); - strcat(new_db_dir, "/"); - len = strlen(m_db_name) + 5; - new_db_name = (char *)malloc(len); - strcpy(new_db_name, m_db_name); - strcat(new_db_name, ".db"); - dbi_conn_set_option(m_db_handle, "sqlite3_dbdir", new_db_dir); - dbi_conn_set_option(m_db_handle, "dbname", new_db_name); - Dmsg2(500, "SQLITE: %s %s\n", new_db_dir, new_db_name); - free(new_db_dir); - free(new_db_name); - break; - } - - /* - * If connection fails, try at 5 sec intervals for 30 seconds. - */ - for (int retry=0; retry < 6; retry++) { - dbstat = dbi_conn_connect(m_db_handle); - if (dbstat == 0) { - break; - } - - dbi_conn_error(m_db_handle, &dbi_errmsg); - Dmsg1(50, "dbi error: %s\n", dbi_errmsg); - - bmicrosleep(5, 0); - } - - if (dbstat != 0 ) { - Mmsg3(&errmsg, _("Unable to connect to DBI interface. Type=%s Database=%s User=%s\n" - "Possible causes: SQL server not running; password incorrect; max_connections exceeded.\n"), - m_db_driver, m_db_name, m_db_user); - goto bail_out; - } - - Dmsg0(50, "dbi_real_connect done\n"); - Dmsg3(50, "db_user=%s db_name=%s db_password=%s\n", - m_db_user, m_db_name, - (m_db_password == NULL) ? "(NULL)" : m_db_password); - - m_connected = true; - - if (!check_tables_version(jcr, this)) { - goto bail_out; - } - - switch (m_db_type) { - case SQL_TYPE_MYSQL: - /* - * Set connection timeout to 8 days specialy for batch mode - */ - sql_query("SET wait_timeout=691200"); - sql_query("SET interactive_timeout=691200"); - break; - case SQL_TYPE_POSTGRESQL: - /* - * Tell PostgreSQL we are using standard conforming strings - * and avoid warnings such as: - * WARNING: nonstandard use of \\ in a string literal - */ - sql_query("SET datestyle TO 'ISO, YMD'"); - sql_query("SET standard_conforming_strings=on"); - break; - } - - retval = true; - -bail_out: - V(mutex); - return retval; -} - -void B_DB_DBI::db_close_database(JCR *jcr) -{ - if (m_connected) { - db_end_transaction(jcr); - } - P(mutex); - m_ref_count--; - if (m_ref_count == 0) { - if (m_connected) { - sql_free_result(); - } - db_list->remove(this); - if (m_connected && m_db_handle) { - dbi_shutdown_r(m_instance); - m_db_handle = NULL; - m_instance = NULL; - } - if (rwl_is_init(&m_lock)) { - rwl_destroy(&m_lock); - } - free_pool_memory(errmsg); - free_pool_memory(cmd); - free_pool_memory(cached_path); - free_pool_memory(fname); - free_pool_memory(path); - free_pool_memory(esc_name); - free_pool_memory(esc_path); - free_pool_memory(esc_obj); - if (m_db_driver) { - free(m_db_driver); - } - if (m_db_name) { - free(m_db_name); - } - if (m_db_user) { - free(m_db_user); - } - if (m_db_password) { - free(m_db_password); - } - if (m_db_address) { - free(m_db_address); - } - if (m_db_socket) { - free(m_db_socket); - } - if (m_db_driverdir) { - free(m_db_driverdir); - } - delete this; - if (db_list->size() == 0) { - delete db_list; - db_list = NULL; - } - } - V(mutex); -} - -void B_DB_DBI::db_thread_cleanup(void) -{ -} - -/* - * Escape strings so that DBI is happy - * - * NOTE! len is the length of the old string. Your new - * string must be long enough (max 2*old+1) to hold - * the escaped output. - * - * dbi_conn_quote_string_copy receives a pointer to pointer. - * We need copy the value of pointer to snew because libdbi change the - * pointer - */ -void B_DB_DBI::db_escape_string(JCR *jcr, char *snew, char *old, int len) -{ - char *inew; - char *pnew; - - if (len == 0) { - snew[0] = 0; - } else { - /* - * Correct the size of old basead in len and copy new string to inew - */ - inew = (char *)malloc(sizeof(char) * len + 1); - bstrncpy(inew,old,len + 1); - /* - * Escape the correct size of old - */ - dbi_conn_escape_string_copy(m_db_handle, inew, &pnew); - free(inew); - /* - * Copy the escaped string to snew - */ - bstrncpy(snew, pnew, 2 * len + 1); - } - - Dmsg2(500, "dbi_conn_escape_string_copy %p %s\n",snew,snew); -} - -/* - * Escape binary object so that DBI is happy - * Memory is stored in B_DB struct, no need to free it - */ -char *B_DB_DBI::db_escape_object(JCR *jcr, char *old, int len) -{ - size_t new_len; - char *pnew; - - if (len == 0) { - esc_obj[0] = 0; - } else { - new_len = dbi_conn_escape_string_copy(m_db_handle, esc_obj, &pnew); - esc_obj = check_pool_memory_size(esc_obj, new_len+1); - memcpy(esc_obj, pnew, new_len); - } - - return esc_obj; -} - -/* - * Unescape binary object so that DBI is happy - */ -void B_DB_DBI::db_unescape_object(JCR *jcr, char *from, int32_t expected_len, - POOLMEM **dest, int32_t *dest_len) -{ - if (!from) { - *dest[0] = 0; - *dest_len = 0; - return; - } - *dest = check_pool_memory_size(*dest, expected_len+1); - *dest_len = expected_len; - memcpy(*dest, from, expected_len); - (*dest)[expected_len]=0; -} - -/* - * Start a transaction. This groups inserts and makes things - * much more efficient. Usually started when inserting - * file attributes. - */ -void B_DB_DBI::db_start_transaction(JCR *jcr) -{ - if (!jcr->attr) { - jcr->attr = get_pool_memory(PM_FNAME); - } - if (!jcr->ar) { - jcr->ar = (ATTR_DBR *)malloc(sizeof(ATTR_DBR)); - } - - switch (m_db_type) { - case SQL_TYPE_SQLITE3: - if (!m_allow_transactions) { - return; - } - - db_lock(this); - /* - * Allow only 10,000 changes per transaction - */ - if (m_transaction && changes > 10000) { - db_end_transaction(jcr); - } - if (!m_transaction) { - sql_query("BEGIN"); /* begin transaction */ - Dmsg0(400, "Start SQLite transaction\n"); - m_transaction = true; - } - db_unlock(this); - break; - case SQL_TYPE_POSTGRESQL: - /* - * This is turned off because transactions break - * if multiple simultaneous jobs are run. - */ - if (!m_allow_transactions) { - return; - } - - db_lock(this); - /* - * Allow only 25,000 changes per transaction - */ - if (m_transaction && changes > 25000) { - db_end_transaction(jcr); - } - if (!m_transaction) { - sql_query("BEGIN"); /* begin transaction */ - Dmsg0(400, "Start PosgreSQL transaction\n"); - m_transaction = true; - } - db_unlock(this); - break; - case SQL_TYPE_INGRES: - if (!m_allow_transactions) { - return; - } - - db_lock(this); - /* - * Allow only 25,000 changes per transaction - */ - if (m_transaction && changes > 25000) { - db_end_transaction(jcr); - } - if (!m_transaction) { - sql_query("BEGIN"); /* begin transaction */ - Dmsg0(400, "Start Ingres transaction\n"); - m_transaction = true; - } - db_unlock(this); - break; - default: - break; - } -} - -void B_DB_DBI::db_end_transaction(JCR *jcr) -{ - if (jcr && jcr->cached_attribute) { - Dmsg0(400, "Flush last cached attribute.\n"); - if (!db_create_attributes_record(jcr, this, jcr->ar)) { - Jmsg1(jcr, M_FATAL, 0, _("Attribute create error. %s"), db_strerror(jcr->db)); - } - jcr->cached_attribute = false; - } - - switch (m_db_type) { - case SQL_TYPE_SQLITE3: - if (!m_allow_transactions) { - return; - } - - db_lock(this); - if (m_transaction) { - sql_query("COMMIT"); /* end transaction */ - m_transaction = false; - Dmsg1(400, "End SQLite transaction changes=%d\n", changes); - } - changes = 0; - db_unlock(this); - break; - case SQL_TYPE_POSTGRESQL: - if (!m_allow_transactions) { - return; - } - - db_lock(this); - if (m_transaction) { - sql_query("COMMIT"); /* end transaction */ - m_transaction = false; - Dmsg1(400, "End PostgreSQL transaction changes=%d\n", changes); - } - changes = 0; - db_unlock(this); - break; - case SQL_TYPE_INGRES: - if (!m_allow_transactions) { - return; - } - - db_lock(this); - if (m_transaction) { - sql_query("COMMIT"); /* end transaction */ - m_transaction = false; - Dmsg1(400, "End Ingres transaction changes=%d\n", changes); - } - changes = 0; - db_unlock(this); - break; - default: - break; - } -} - -/* - * Submit a general SQL command (cmd), and for each row returned, - * the result_handler is called with the ctx. - */ -bool B_DB_DBI::db_sql_query(const char *query, DB_RESULT_HANDLER *result_handler, void *ctx) -{ - bool retval = true; - SQL_ROW row; - - Dmsg1(500, "db_sql_query starts with %s\n", query); - - db_lock(this); - if (!sql_query(query, QF_STORE_RESULT)) { - Mmsg(errmsg, _("Query failed: %s: ERR=%s\n"), query, sql_strerror()); - Dmsg0(500, "db_sql_query failed\n"); - retval = false; - goto bail_out; - } - - Dmsg0(500, "db_sql_query succeeded. checking handler\n"); - - if (result_handler != NULL) { - Dmsg0(500, "db_sql_query invoking handler\n"); - while ((row = sql_fetch_row()) != NULL) { - Dmsg0(500, "db_sql_query sql_fetch_row worked\n"); - if (result_handler(ctx, m_num_fields, row)) - break; - } - sql_free_result(); - } - - Dmsg0(500, "db_sql_query finished\n"); - -bail_out: - db_unlock(this); - return retval; -} - -/* - * Note, if this routine returns 1 (failure), Bacula expects - * that no result has been stored. - * - * Returns: true on success - * false on failure - */ -bool B_DB_DBI::sql_query(const char *query, int flags) -{ - bool retval = false; - const char *dbi_errmsg; - - Dmsg1(500, "sql_query starts with %s\n", query); - - /* - * We are starting a new query. reset everything. - */ - m_num_rows = -1; - m_row_number = -1; - m_field_number = -1; - - if (m_result) { - dbi_result_free(m_result); /* hmm, someone forgot to free?? */ - m_result = NULL; - } - - m_result = (void **)dbi_conn_query(m_db_handle, query); - - if (!m_result) { - Dmsg2(50, "Query failed: %s %p\n", query, m_result); - goto bail_out; - } - - m_status = (dbi_error_flag) dbi_conn_error(m_db_handle, &dbi_errmsg); - if (m_status == DBI_ERROR_NONE) { - Dmsg1(500, "we have a result\n", query); - - /* - * How many fields in the set? - * num_fields starting at 1 - */ - m_num_fields = dbi_result_get_numfields(m_result); - Dmsg1(500, "we have %d fields\n", m_num_fields); - /* - * If no result num_rows is 0 - */ - m_num_rows = dbi_result_get_numrows(m_result); - Dmsg1(500, "we have %d rows\n", m_num_rows); - - m_status = (dbi_error_flag) 0; /* succeed */ - } else { - Dmsg1(50, "Result status failed: %s\n", query); - goto bail_out; - } - - Dmsg0(500, "sql_query finishing\n"); - retval = true; - goto ok_out; - -bail_out: - m_status = (dbi_error_flag) dbi_conn_error(m_db_handle, &dbi_errmsg); - //dbi_conn_error(m_db_handle, &dbi_errmsg); - Dmsg4(500, "sql_query we failed dbi error: " - "'%s' '%p' '%d' flag '%d''\n", dbi_errmsg, m_result, m_result, m_status); - dbi_result_free(m_result); - m_result = NULL; - m_status = (dbi_error_flag) 1; /* failed */ - -ok_out: - return retval; -} - -void B_DB_DBI::sql_free_result(void) -{ - DBI_FIELD_GET *f; - - db_lock(this); - if (m_result) { - dbi_result_free(m_result); - m_result = NULL; - } - if (m_rows) { - free(m_rows); - m_rows = NULL; - } - /* - * Now is time to free all value return by dbi_get_value - * this is necessary because libdbi don't free memory return by yours results - * and Bacula has some routine wich call more than once time sql_fetch_row - * - * Using a queue to store all pointer allocate is a good way to free all things - * when necessary - */ - foreach_dlist(f, dbi_getvalue_list) { - free(f->value); - free(f); - } - if (m_fields) { - free(m_fields); - m_fields = NULL; - } - m_num_rows = m_num_fields = 0; - db_unlock(this); -} - -/* dbi_getvalue - * like PQgetvalue; - * char *PQgetvalue(const PGresult *res, - * int row_number, - * int column_number); - * - * use dbi_result_seek_row to search in result set - * use example to return only strings - */ -static char *dbi_getvalue(dbi_result *result, int row_number, unsigned int column_number) -{ - char *buf = NULL; - const char *dbi_errmsg; - const char *field_name; - unsigned short dbitype; - size_t field_length; - int64_t num; - - /* correct the index for dbi interface - * dbi index begins 1 - * I prefer do not change others functions - */ - Dmsg3(600, "dbi_getvalue pre-starting result '%p' row number '%d' column number '%d'\n", - result, row_number, column_number); - - column_number++; - - if(row_number == 0) { - row_number++; - } - - Dmsg3(600, "dbi_getvalue starting result '%p' row number '%d' column number '%d'\n", - result, row_number, column_number); - - if(dbi_result_seek_row(result, row_number)) { - - field_name = dbi_result_get_field_name(result, column_number); - field_length = dbi_result_get_field_length(result, field_name); - dbitype = dbi_result_get_field_type_idx(result,column_number); - - Dmsg3(500, "dbi_getvalue start: type: '%d' " - "field_length bytes: '%d' fieldname: '%s'\n", - dbitype, field_length, field_name); - - if(field_length) { - //buf = (char *)malloc(sizeof(char *) * field_length + 1); - buf = (char *)malloc(field_length + 1); - } else { - /* - * if numbers - */ - buf = (char *)malloc(sizeof(char *) * 50); - } - - switch (dbitype) { - case DBI_TYPE_INTEGER: - num = dbi_result_get_longlong(result, field_name); - edit_int64(num, buf); - field_length = strlen(buf); - break; - case DBI_TYPE_STRING: - if(field_length) { - field_length = bsnprintf(buf, field_length + 1, "%s", - dbi_result_get_string(result, field_name)); - } else { - buf[0] = 0; - } - break; - case DBI_TYPE_BINARY: - /* - * dbi_result_get_binary return a NULL pointer if value is empty - * following, change this to what Bacula espected - */ - if(field_length) { - field_length = bsnprintf(buf, field_length + 1, "%s", - dbi_result_get_binary(result, field_name)); - } else { - buf[0] = 0; - } - break; - case DBI_TYPE_DATETIME: - time_t last; - struct tm tm; - - last = dbi_result_get_datetime(result, field_name); - - if(last == -1) { - field_length = bsnprintf(buf, 20, "0000-00-00 00:00:00"); - } else { - (void)localtime_r(&last, &tm); - field_length = bsnprintf(buf, 20, "%04d-%02d-%02d %02d:%02d:%02d", - (tm.tm_year + 1900), (tm.tm_mon + 1), tm.tm_mday, - tm.tm_hour, tm.tm_min, tm.tm_sec); - } - break; - } - - } else { - dbi_conn_error(dbi_result_get_conn(result), &dbi_errmsg); - Dmsg1(500, "dbi_getvalue error: %s\n", dbi_errmsg); - } - - Dmsg3(500, "dbi_getvalue finish buffer: '%p' num bytes: '%d' data: '%s'\n", - buf, field_length, buf); - - /* - * Don't worry about this buf - */ - return buf; -} - -SQL_ROW B_DB_DBI::sql_fetch_row(void) -{ - int j; - SQL_ROW row = NULL; /* by default, return NULL */ - - Dmsg0(500, "sql_fetch_row start\n"); - if ((!m_rows || m_rows_size < m_num_fields) && m_num_rows > 0) { - if (m_rows) { - Dmsg0(500, "sql_fetch_row freeing space\n"); - Dmsg2(500, "sql_fetch_row row: '%p' num_fields: '%d'\n", m_rows, m_num_fields); - if (m_num_rows != 0) { - for (j = 0; j < m_num_fields; j++) { - Dmsg2(500, "sql_fetch_row row '%p' '%d'\n", m_rows[j], j); - if (m_rows[j]) { - free(m_rows[j]); - } - } - } - free(m_rows); - } - Dmsg1(500, "we need space for %d bytes\n", sizeof(char *) * m_num_fields); - m_rows = (SQL_ROW)malloc(sizeof(char *) * m_num_fields); - m_rows_size = m_num_fields; - - /* - * Now reset the row_number now that we have the space allocated - */ - m_row_number = 1; - } - - /* - * If still within the result set - */ - if (m_row_number <= m_num_rows && m_row_number != DBI_ERROR_BADPTR) { - Dmsg2(500, "sql_fetch_row row number '%d' is acceptable (1..%d)\n", m_row_number, m_num_rows); - /* - * Get each value from this row - */ - for (j = 0; j < m_num_fields; j++) { - m_rows[j] = dbi_getvalue(m_result, m_row_number, j); - /* - * Allocate space to queue row - */ - m_field_get = (DBI_FIELD_GET *)malloc(sizeof(DBI_FIELD_GET)); - /* - * Store the pointer in queue - */ - m_field_get->value = m_rows[j]; - Dmsg4(500, "sql_fetch_row row[%d] field: '%p' in queue: '%p' has value: '%s'\n", - j, m_rows[j], m_field_get->value, m_rows[j]); - /* - * Insert in queue to future free - */ - dbi_getvalue_list->append(m_field_get); - } - /* - * Increment the row number for the next call - */ - m_row_number++; - - row = m_rows; - } else { - Dmsg2(500, "sql_fetch_row row number '%d' is NOT acceptable (1..%d)\n", m_row_number, m_num_rows); - } - - Dmsg1(500, "sql_fetch_row finishes returning %p\n", row); - - return row; -} - -const char *B_DB_DBI::sql_strerror(void) -{ - const char *dbi_errmsg; - - dbi_conn_error(m_db_handle, &dbi_errmsg); - - return dbi_errmsg; -} - -void B_DB_DBI::sql_data_seek(int row) -{ - /* - * Set the row number to be returned on the next call to sql_fetch_row - */ - m_row_number = row; -} - -int B_DB_DBI::sql_affected_rows(void) -{ -#if 0 - return dbi_result_get_numrows_affected(result); -#else - return 1; -#endif -} - -uint64_t B_DB_DBI::sql_insert_autokey_record(const char *query, const char *table_name) -{ - char sequence[30]; - uint64_t id = 0; - - /* - * First execute the insert query and then retrieve the currval. - */ - if (!sql_query(query)) { - return 0; - } - - m_num_rows = sql_affected_rows(); - if (m_num_rows != 1) { - return 0; - } - - changes++; - - /* - * Obtain the current value of the sequence that - * provides the serial value for primary key of the table. - * - * currval is local to our session. It is not affected by - * other transactions. - * - * Determine the name of the sequence. - * PostgreSQL automatically creates a sequence using - * __seq. - * At the time of writing, all tables used this format for - * for their primary key:
id - * Except for basefiles which has a primary key on baseid. - * Therefore, we need to special case that one table. - * - * everything else can use the PostgreSQL formula. - */ - if (m_db_type == SQL_TYPE_POSTGRESQL) { - if (strcasecmp(table_name, "basefiles") == 0) { - bstrncpy(sequence, "basefiles_baseid", sizeof(sequence)); - } else { - bstrncpy(sequence, table_name, sizeof(sequence)); - bstrncat(sequence, "_", sizeof(sequence)); - bstrncat(sequence, table_name, sizeof(sequence)); - bstrncat(sequence, "id", sizeof(sequence)); - } - - bstrncat(sequence, "_seq", sizeof(sequence)); - id = dbi_conn_sequence_last(m_db_handle, NT_(sequence)); - } else { - id = dbi_conn_sequence_last(m_db_handle, NT_(table_name)); - } - - return id; -} - -/* dbi_getisnull - * like PQgetisnull - * int PQgetisnull(const PGresult *res, - * int row_number, - * int column_number); - * - * use dbi_result_seek_row to search in result set - */ -static int dbi_getisnull(dbi_result *result, int row_number, int column_number) { - int i; - - if (row_number == 0) { - row_number++; - } - - column_number++; - - if (dbi_result_seek_row(result, row_number)) { - i = dbi_result_field_is_null_idx(result,column_number); - return i; - } else { - return 0; - } -} - -SQL_FIELD *B_DB_DBI::sql_fetch_field(void) -{ - int i, j; - int dbi_index; - int max_length; - int this_length; - char *cbuf = NULL; - - Dmsg0(500, "sql_fetch_field starts\n"); - - if (!m_fields || m_fields_size < m_num_fields) { - if (m_fields) { - free(m_fields); - m_fields = NULL; - } - Dmsg1(500, "allocating space for %d fields\n", m_num_fields); - m_fields = (SQL_FIELD *)malloc(sizeof(SQL_FIELD) * m_num_fields); - m_fields_size = m_num_fields; - - for (i = 0; i < m_num_fields; i++) { - /* - * num_fields is starting at 1, increment i by 1 - */ - dbi_index = i + 1; - Dmsg1(500, "filling field %d\n", i); - m_fields[i].name = (char *)dbi_result_get_field_name(m_result, dbi_index); - m_fields[i].type = dbi_result_get_field_type_idx(m_result, dbi_index); - m_fields[i].flags = dbi_result_get_field_attribs_idx(m_result, dbi_index); - - /* - * For a given column, find the max length. - */ - max_length = 0; - for (j = 0; j < m_num_rows; j++) { - if (dbi_getisnull(m_result, j, dbi_index)) { - this_length = 4; /* "NULL" */ - } else { - cbuf = dbi_getvalue(m_result, j, dbi_index); - this_length = cstrlen(cbuf); - /* - * cbuf is always free - */ - free(cbuf); - } - - if (max_length < this_length) { - max_length = this_length; - } - } - m_fields[i].max_length = max_length; - - Dmsg4(500, "sql_fetch_field finds field '%s' has length='%d' type='%d' and IsNull=%d\n", - m_fields[i].name, m_fields[i].max_length, m_fields[i].type, m_fields[i].flags); - } - } - - /* - * Increment field number for the next time around - */ - return &m_fields[m_field_number++]; -} - -bool B_DB_DBI::sql_field_is_not_null(int field_type) -{ - switch (field_type) { - case (1 << 0): - return true; - default: - return false; - } -} - -bool B_DB_DBI::sql_field_is_numeric(int field_type) -{ - switch (field_type) { - case 1: - case 2: - return true; - default: - return false; - } -} - -/* - * Escape strings so that PostgreSQL is happy on COPY - * - * NOTE! len is the length of the old string. Your new - * string must be long enough (max 2*old+1) to hold - * the escaped output. - */ -static char *postgresql_copy_escape(char *dest, char *src, size_t len) -{ - /* - * We have to escape \t, \n, \r, \ - */ - char c = '\0' ; - - while (len > 0 && *src) { - switch (*src) { - case '\n': - c = 'n'; - break; - case '\\': - c = '\\'; - break; - case '\t': - c = 't'; - break; - case '\r': - c = 'r'; - break; - default: - c = '\0' ; - } - - if (c) { - *dest = '\\'; - dest++; - *dest = c; - } else { - *dest = *src; - } - - len--; - src++; - dest++; - } - - *dest = '\0'; - return dest; -} - -/* - * This can be a bit strang but is the one way to do - * - * Returns true if OK - * false if failed - */ -bool B_DB_DBI::sql_batch_start(JCR *jcr) -{ - bool retval = true; - const char *query = "COPY batch FROM STDIN"; - - Dmsg0(500, "sql_batch_start started\n"); - - db_lock(this); - switch (m_db_type) { - case SQL_TYPE_MYSQL: - if (!sql_query("CREATE TEMPORARY TABLE batch (" - "FileIndex integer," - "JobId integer," - "Path blob," - "Name blob," - "LStat tinyblob," - "MD5 tinyblob," - "DeltaSeq smallint)")) { - Dmsg0(500, "sql_batch_start failed\n"); - goto bail_out; - } - Dmsg0(500, "sql_batch_start finishing\n"); - goto ok_out; - case SQL_TYPE_POSTGRESQL: - if (!sql_query("CREATE TEMPORARY TABLE batch (" - "FileIndex int," - "JobId int," - "Path varchar," - "Name varchar," - "LStat varchar," - "MD5 varchar," - "DeltaSeq int)")) { - Dmsg0(500, "sql_batch_start failed\n"); - goto bail_out; - } - - /* - * We are starting a new query. reset everything. - */ - m_num_rows = -1; - m_row_number = -1; - m_field_number = -1; - - sql_free_result(); - - for (int i=0; i < 10; i++) { - sql_query(query); - if (m_result) { - break; - } - bmicrosleep(5, 0); - } - if (!m_result) { - Dmsg1(50, "Query failed: %s\n", query); - goto bail_out; - } - - m_status = (dbi_error_flag)dbi_conn_error(m_db_handle, NULL); - //m_status = DBI_ERROR_NONE; - - if (m_status == DBI_ERROR_NONE) { - /* - * How many fields in the set? - */ - m_num_fields = dbi_result_get_numfields(m_result); - m_num_rows = dbi_result_get_numrows(m_result); - m_status = (dbi_error_flag) 1; - } else { - Dmsg1(50, "Result status failed: %s\n", query); - goto bail_out; - } - - Dmsg0(500, "sql_batch_start finishing\n"); - goto ok_out; - case SQL_TYPE_SQLITE3: - if (!sql_query("CREATE TEMPORARY TABLE batch (" - "FileIndex integer," - "JobId integer," - "Path blob," - "Name blob," - "LStat tinyblob," - "MD5 tinyblob," - "DeltaSeq smallint)")) { - Dmsg0(500, "sql_batch_start failed\n"); - goto bail_out; - } - Dmsg0(500, "sql_batch_start finishing\n"); - goto ok_out; - } - -bail_out: - Mmsg1(&errmsg, _("error starting batch mode: %s"), sql_strerror()); - m_status = (dbi_error_flag) 0; - sql_free_result(); - m_result = NULL; - retval = false; - -ok_out: - db_unlock(this); - return retval; -} - -/* - * Set error to something to abort operation - */ -bool B_DB_DBI::sql_batch_end(JCR *jcr, const char *error) -{ - int res = 0; - int count = 30; - int (*custom_function)(void*, const char*) = NULL; - dbi_conn_t *myconn = (dbi_conn_t *)(m_db_handle); - - Dmsg0(500, "sql_batch_start started\n"); - - switch (m_db_type) { - case SQL_TYPE_MYSQL: - m_status = (dbi_error_flag) 0; - break; - case SQL_TYPE_POSTGRESQL: - custom_function = (custom_function_end_t)dbi_driver_specific_function(dbi_conn_get_driver(myconn), "PQputCopyEnd"); - - do { - res = (*custom_function)(myconn->connection, error); - } while (res == 0 && --count > 0); - - if (res == 1) { - Dmsg0(500, "ok\n"); - m_status = (dbi_error_flag) 1; - } - - if (res <= 0) { - Dmsg0(500, "we failed\n"); - m_status = (dbi_error_flag) 0; - //Mmsg1(&errmsg, _("error ending batch mode: %s"), PQerrorMessage(myconn)); - } - break; - case SQL_TYPE_SQLITE3: - m_status = (dbi_error_flag) 0; - break; - } - - Dmsg0(500, "sql_batch_start finishing\n"); - - return true; -} - -/* - * This function is big and use a big switch. - * In near future is better split in small functions - * and refactory. - */ -bool B_DB_DBI::sql_batch_insert(JCR *jcr, ATTR_DBR *ar) -{ - int res; - int count=30; - dbi_conn_t *myconn = (dbi_conn_t *)(m_db_handle); - int (*custom_function)(void*, const char*, int) = NULL; - char* (*custom_function_error)(void*) = NULL; - size_t len; - char *digest; - char ed1[50]; - - Dmsg0(500, "sql_batch_start started \n"); - - esc_name = check_pool_memory_size(esc_name, fnl*2+1); - esc_path = check_pool_memory_size(esc_path, pnl*2+1); - - if (ar->Digest == NULL || ar->Digest[0] == 0) { - *digest = '\0'; - } else { - digest = ar->Digest; - } - - switch (m_db_type) { - case SQL_TYPE_MYSQL: - db_escape_string(jcr, esc_name, fname, fnl); - db_escape_string(jcr, esc_path, path, pnl); - len = Mmsg(cmd, "INSERT INTO batch VALUES " - "(%u,%s,'%s','%s','%s','%s',%u)", - ar->FileIndex, edit_int64(ar->JobId,ed1), esc_path, - esc_name, ar->attr, digest, ar->DeltaSeq); - - if (!sql_query(cmd)) - { - Dmsg0(500, "sql_batch_start failed\n"); - goto bail_out; - } - - Dmsg0(500, "sql_batch_start finishing\n"); - - return true; - break; - case SQL_TYPE_POSTGRESQL: - postgresql_copy_escape(esc_name, fname, fnl); - postgresql_copy_escape(esc_path, path, pnl); - len = Mmsg(cmd, "%u\t%s\t%s\t%s\t%s\t%s\t%u\n", - ar->FileIndex, edit_int64(ar->JobId, ed1), esc_path, - esc_name, ar->attr, digest, ar->DeltaSeq); - - /* - * libdbi don't support CopyData and we need call a postgresql - * specific function to do this work - */ - Dmsg2(500, "sql_batch_insert :\n %s \ncmd_size: %d",cmd, len); - custom_function = (custom_function_insert_t)dbi_driver_specific_function(dbi_conn_get_driver(myconn),"PQputCopyData"); - if (custom_function != NULL) { - do { - res = (*custom_function)(myconn->connection, cmd, len); - } while (res == 0 && --count > 0); - - if (res == 1) { - Dmsg0(500, "ok\n"); - changes++; - m_status = (dbi_error_flag) 1; - } - - if (res <= 0) { - Dmsg0(500, "sql_batch_insert failed\n"); - goto bail_out; - } - - Dmsg0(500, "sql_batch_insert finishing\n"); - return true; - } else { - /* - * Ensure to detect a PQerror - */ - custom_function_error = (custom_function_error_t)dbi_driver_specific_function(dbi_conn_get_driver(myconn), "PQerrorMessage"); - Dmsg1(500, "sql_batch_insert failed\n PQerrorMessage: %s", (*custom_function_error)(myconn->connection)); - goto bail_out; - } - break; - case SQL_TYPE_SQLITE3: - db_escape_string(jcr, esc_name, fname, fnl); - db_escape_string(jcr, esc_path, path, pnl); - len = Mmsg(cmd, "INSERT INTO batch VALUES " - "(%u,%s,'%s','%s','%s','%s',%u)", - ar->FileIndex, edit_int64(ar->JobId,ed1), esc_path, - esc_name, ar->attr, digest, ar->DeltaSeq); - - if (!sql_query(cmd)) - { - Dmsg0(500, "sql_batch_insert failed\n"); - goto bail_out; - } - - Dmsg0(500, "sql_batch_insert finishing\n"); - - return true; - break; - } - -bail_out: - Mmsg1(&errmsg, _("error inserting batch mode: %s"), sql_strerror()); - m_status = (dbi_error_flag) 0; - sql_free_result(); - return false; -} - -/* - * Initialize database data structure. In principal this should - * never have errors, or it is really fatal. - */ -B_DB *db_init_database(JCR *jcr, const char *db_driver, const char *db_name, const char *db_user, - const char *db_password, const char *db_address, int db_port, - const char *db_socket, bool mult_db_connections, bool disable_batch_insert) -{ - B_DB_DBI *mdb = NULL; - - if (!db_driver) { - Jmsg(jcr, M_ABORT, 0, _("Driver type not specified in Catalog resource.\n")); - } - - if (strlen(db_driver) < 5 || db_driver[3] != ':' || strncasecmp(db_driver, "dbi", 3) != 0) { - Jmsg(jcr, M_ABORT, 0, _("Invalid driver type, must be \"dbi:\"\n")); - } - - if (!db_user) { - Jmsg(jcr, M_FATAL, 0, _("A user name for DBI must be supplied.\n")); - return NULL; - } - - P(mutex); /* lock DB queue */ - if (db_list && !mult_db_connections) { - /* - * Look to see if DB already open - */ - foreach_dlist(mdb, db_list) { - if (mdb->db_match_database(db_driver, db_name, db_address, db_port)) { - Dmsg1(100, "DB REopen %s\n", db_name); - mdb->increment_refcount(); - goto bail_out; - } - } - } - Dmsg0(100, "db_init_database first time\n"); - mdb = New(B_DB_DBI(jcr, db_driver, db_name, db_user, db_password, db_address, - db_port, db_socket, mult_db_connections, disable_batch_insert)); - -bail_out: - V(mutex); - return mdb; -} - -#endif /* HAVE_DBI */ diff --git a/bacula/src/cats/delete_catalog_backup.in b/bacula/src/cats/delete_catalog_backup.in index 20647373d3..9e232ff504 100755 --- a/bacula/src/cats/delete_catalog_backup.in +++ b/bacula/src/cats/delete_catalog_backup.in @@ -2,6 +2,21 @@ # # This script deletes a catalog dump # +# +# Bacula® - The Network Backup Solution +# +# Copyright (C) 2000-2014 Free Software Foundation Europe e.V. +# +# The main author of Bacula is Kern Sibbald, with contributions from many +# others, a complete list can be found in the file AUTHORS. +# +# You may use this file and others of this release according to the +# license defined in the LICENSE file, which includes the Affero General +# Public License, v3.0 ("AGPLv3") and some additional permissions and +# terms pursuant to its AGPLv3 Section 7. +# +# Bacula® is a registered trademark of Kern Sibbald. +# db_name=@db_name@ rm -f @working_dir@/${db_name}.sql diff --git a/bacula/src/cats/drop_bacula_database.in b/bacula/src/cats/drop_bacula_database.in index fa8d155330..d39fd573bb 100755 --- a/bacula/src/cats/drop_bacula_database.in +++ b/bacula/src/cats/drop_bacula_database.in @@ -3,6 +3,21 @@ # Drop Bacula database -- works for whatever is configured, # MySQL, SQLite, PostgreSQL, Ingres # +# +# Bacula® - The Network Backup Solution +# +# Copyright (C) 2000-2014 Free Software Foundation Europe e.V. +# +# The main author of Bacula is Kern Sibbald, with contributions from many +# others, a complete list can be found in the file AUTHORS. +# +# You may use this file and others of this release according to the +# license defined in the LICENSE file, which includes the Affero General +# Public License, v3.0 ("AGPLv3") and some additional permissions and +# terms pursuant to its AGPLv3 Section 7. +# +# Bacula® is a registered trademark of Kern Sibbald. +# default_db_type=@DEFAULT_DB_TYPE@ diff --git a/bacula/src/cats/drop_bacula_tables.in b/bacula/src/cats/drop_bacula_tables.in index f3534167bf..019ced534a 100755 --- a/bacula/src/cats/drop_bacula_tables.in +++ b/bacula/src/cats/drop_bacula_tables.in @@ -3,6 +3,21 @@ # Drop Bacula tables -- works for whatever is configured, # MySQL, SQLite, Ingres, or PostgreSQL # +# +# Bacula® - The Network Backup Solution +# +# Copyright (C) 2000-2014 Free Software Foundation Europe e.V. +# +# The main author of Bacula is Kern Sibbald, with contributions from many +# others, a complete list can be found in the file AUTHORS. +# +# You may use this file and others of this release according to the +# license defined in the LICENSE file, which includes the Affero General +# Public License, v3.0 ("AGPLv3") and some additional permissions and +# terms pursuant to its AGPLv3 Section 7. +# +# Bacula® is a registered trademark of Kern Sibbald. +# default_db_type=@DEFAULT_DB_TYPE@ diff --git a/bacula/src/cats/drop_ingres_database.in b/bacula/src/cats/drop_ingres_database.in deleted file mode 100755 index 3e4fb2960c..0000000000 --- a/bacula/src/cats/drop_ingres_database.in +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/sh -# -# shell script to drop Bacula database(s) -# - -bindir=@INGRES_BINDIR@ -PATH="$bindir:$PATH" -db_name=${db_name:-@db_name@} -db_user=${db_user:-@db_user@} - -if destroydb -u${db_user} ${db_name} -then - echo "Drop of ${db_name} database succeeded." -else - echo "Drop of ${db_name} database failed." -fi -exit 0 diff --git a/bacula/src/cats/drop_ingres_tables.in b/bacula/src/cats/drop_ingres_tables.in deleted file mode 100755 index b1484dd1ad..0000000000 --- a/bacula/src/cats/drop_ingres_tables.in +++ /dev/null @@ -1,63 +0,0 @@ -#!/bin/sh -# -# shell script to delete Bacula tables for PostgreSQL - -bindir=@INGRES_BINDIR@ -PATH="$bindir:$PATH" -db_name=${db_name:-@db_name@} -db_user=${db_user:-@db_user@} - -sql -u${db_user} ${db_name} $* <pattern_length = pattern_length; - rewrite_rule->search_pattern = bstrdup(search_pattern); - rewrite_rule->rewrite_regexp = new_bregexp(filter); - rewrite_rule->trigger = false; - - if (!rewrite_rule->rewrite_regexp) { - Jmsg(jcr, M_FATAL, 0, _("Failed to allocate space for query filter.\n")); - free(rewrite_rule->search_pattern); - free(rewrite_rule); - return false; - } else { - query_filters->append(rewrite_rule); - return true; - } -} - -/* - * Create a stack of all filters that should be applied to a SQL query - * before submitting it to the database backend. - */ -static inline alist *db_initialize_query_filters(JCR *jcr) -{ - alist *query_filters; - - query_filters = New(alist(10, not_owned_by_alist)); - - if (!query_filters) { - Jmsg(jcr, M_FATAL, 0, _("Failed to allocate space for query filters.\n")); - return NULL; - } - - db_allocate_query_filter(jcr, query_filters, 6, "OFFSET", - "/LIMIT ([0-9]+) OFFSET ([0-9]+)/OFFSET $2 FETCH NEXT $1 ROWS ONLY/ig"); - db_allocate_query_filter(jcr, query_filters, 5, "LIMIT", - "/LIMIT ([0-9]+)/FETCH FIRST $1 ROWS ONLY/ig"); - db_allocate_query_filter(jcr, query_filters, 9, "TEMPORARY", - "/CREATE TEMPORARY TABLE (.+)/DECLARE GLOBAL TEMPORARY TABLE $1 ON COMMIT PRESERVE ROWS WITH NORECOVERY/i"); - - return query_filters; -} - -/* - * Free all query filters. - */ -static inline void db_destroy_query_filters(alist *query_filters) -{ - B_DB_RWRULE *rewrite_rule; - - foreach_alist(rewrite_rule, query_filters) { - free_bregexp(rewrite_rule->rewrite_regexp); - free(rewrite_rule->search_pattern); - free(rewrite_rule); - } - - delete query_filters; -} - -B_DB_INGRES::B_DB_INGRES(JCR *jcr, - const char *db_driver, - const char *db_name, - const char *db_user, - const char *db_password, - const char *db_address, - int db_port, - const char *db_socket, - bool mult_db_connections, - bool disable_batch_insert) -{ - B_DB_INGRES *mdb; - int next_session_id = 0; - - /* - * See what the next available session_id is. - * We first see what the highest session_id is used now. - */ - if (db_list) { - foreach_dlist(mdb, db_list) { - if (mdb->m_session_id > next_session_id) { - next_session_id = mdb->m_session_id; - } - } - } - - /* - * Initialize the parent class members. - */ - m_db_interface_type = SQL_INTERFACE_TYPE_INGRES; - m_db_type = SQL_TYPE_INGRES; - m_db_driver = bstrdup("ingres"); - m_db_name = bstrdup(db_name); - m_db_user = bstrdup(db_user); - if (db_password) { - m_db_password = bstrdup(db_password); - } - if (db_address) { - m_db_address = bstrdup(db_address); - } - if (db_socket) { - m_db_socket = bstrdup(db_socket); - } - m_db_port = db_port; - if (disable_batch_insert) { - m_disabled_batch_insert = true; - m_have_batch_insert = false; - } else { - m_disabled_batch_insert = false; -#if defined(USE_BATCH_FILE_INSERT) - m_have_batch_insert = true; -#else - m_have_batch_insert = false; -#endif - } - - errmsg = get_pool_memory(PM_EMSG); /* get error message buffer */ - *errmsg = 0; - cmd = get_pool_memory(PM_EMSG); /* get command buffer */ - cached_path = get_pool_memory(PM_FNAME); - cached_path_id = 0; - m_ref_count = 1; - fname = get_pool_memory(PM_FNAME); - path = get_pool_memory(PM_FNAME); - esc_name = get_pool_memory(PM_FNAME); - esc_path = get_pool_memory(PM_FNAME); - esc_obj = get_pool_memory(PM_FNAME); - m_allow_transactions = mult_db_connections; - - /* At this time, when mult_db_connections == true, this is for - * specific console command such as bvfs or batch mode, and we don't - * want to share a batch mode or bvfs. In the future, we can change - * the creation function to add this parameter. - */ - m_dedicated = mult_db_connections; - - /* - * Initialize the private members. - */ - m_db_handle = NULL; - m_result = NULL; - m_explicit_commit = true; - m_session_id = ++next_session_id; - m_query_filters = db_initialize_query_filters(jcr); - - /* - * Put the db in the list. - */ - if (db_list == NULL) { - db_list = New(dlist(this, &this->m_link)); - } - db_list->append(this); -} - -B_DB_INGRES::~B_DB_INGRES() -{ -} - -/* - * Now actually open the database. This can generate errors, - * which are returned in the errmsg - * - * DO NOT close the database or delete mdb here !!!! - */ -bool B_DB_INGRES::db_open_database(JCR *jcr) -{ - bool retval = false; - int errstat; - - P(mutex); - if (m_connected) { - retval = true; - goto bail_out; - } - - if ((errstat=rwl_init(&m_lock)) != 0) { - berrno be; - Mmsg1(&errmsg, _("Unable to initialize DB lock. ERR=%s\n"), - be.bstrerror(errstat)); - goto bail_out; - } - - m_db_handle = INGconnectDB(m_db_name, m_db_user, m_db_password, m_session_id); - - Dmsg0(50, "Ingres real CONNECT done\n"); - Dmsg3(50, "db_user=%s db_name=%s db_password=%s\n", m_db_user, m_db_name, - m_db_password == NULL ? "(NULL)" : m_db_password); - - if (!m_db_handle) { - Mmsg2(&errmsg, _("Unable to connect to Ingres server.\n" - "Database=%s User=%s\n" - "It is probably not running or your password is incorrect.\n"), - m_db_name, m_db_user); - goto bail_out; - } - - m_connected = true; - - INGsetDefaultLockingMode(m_db_handle); - - if (!check_tables_version(jcr, this)) { - goto bail_out; - } - - retval = true; - -bail_out: - V(mutex); - return retval; -} - -void B_DB_INGRES::db_close_database(JCR *jcr) -{ - if (m_connected) { - db_end_transaction(jcr); - } - P(mutex); - m_ref_count--; - if (m_ref_count == 0) { - if (m_connected) { - sql_free_result(); - } - db_list->remove(this); - if (m_connected && m_db_handle) { - INGdisconnectDB(m_db_handle); - } - if (m_query_filters) { - db_destroy_query_filters(m_query_filters); - } - if (rwl_is_init(&m_lock)) { - rwl_destroy(&m_lock); - } - free_pool_memory(errmsg); - free_pool_memory(cmd); - free_pool_memory(cached_path); - free_pool_memory(fname); - free_pool_memory(path); - free_pool_memory(esc_name); - free_pool_memory(esc_path); - free_pool_memory(esc_obj); - free(m_db_driver); - free(m_db_name); - free(m_db_user); - if (m_db_password) { - free(m_db_password); - } - if (m_db_address) { - free(m_db_address); - } - if (m_db_socket) { - free(m_db_socket); - } - delete this; - if (db_list->size() == 0) { - delete db_list; - db_list = NULL; - } - } - V(mutex); -} - -void B_DB_INGRES::db_thread_cleanup(void) -{ -} - -/* - * Escape strings so that Ingres is happy - * - * NOTE! len is the length of the old string. Your new - * string must be long enough (max 2*old+1) to hold - * the escaped output. - */ -void B_DB_INGRES::db_escape_string(JCR *jcr, char *snew, char *old, int len) -{ - char *n, *o; - - n = snew; - o = old; - while (len--) { - switch (*o) { - case '\'': - *n++ = '\''; - *n++ = '\''; - o++; - break; - case 0: - *n++ = '\\'; - *n++ = 0; - o++; - break; - default: - *n++ = *o++; - break; - } - } - *n = 0; -} - -/* - * Escape binary so that Ingres is happy - * - * NOTE! Need to be implemented (escape \0) - * - */ -char *B_DB_INGRES::db_escape_object(JCR *jcr, char *old, int len) -{ - char *n, *o; - - n = esc_obj = check_pool_memory_size(esc_obj, len*2+1); - o = old; - while (len--) { - switch (*o) { - case '\'': - *n++ = '\''; - *n++ = '\''; - o++; - break; - case 0: - *n++ = '\\'; - *n++ = 0; - o++; - break; - default: - *n++ = *o++; - break; - } - } - *n = 0; - return esc_obj; -} - -/* - * Unescape binary object so that Ingres is happy - * - * TODO: need to be implemented (escape \0) - */ -void B_DB_INGRES::db_unescape_object(JCR *jcr, char *from, int32_t expected_len, - POOLMEM **dest, int32_t *dest_len) -{ - if (!from) { - *dest[0] = 0; - *dest_len = 0; - return; - } - *dest = check_pool_memory_size(*dest, expected_len+1); - *dest_len = expected_len; - memcpy(*dest, from, expected_len); - (*dest)[expected_len]=0; -} - -/* - * Start a transaction. This groups inserts and makes things - * much more efficient. Usually started when inserting - * file attributes. - */ -void B_DB_INGRES::db_start_transaction(JCR *jcr) -{ - if (!jcr->attr) { - jcr->attr = get_pool_memory(PM_FNAME); - } - if (!jcr->ar) { - jcr->ar = (ATTR_DBR *)malloc(sizeof(ATTR_DBR)); - } - - if (!m_allow_transactions) { - return; - } - - db_lock(this); - /* Allow only 25,000 changes per transaction */ - if (m_transaction && changes > 25000) { - db_end_transaction(jcr); - } - if (!m_transaction) { - sql_query("BEGIN"); /* begin transaction */ - Dmsg0(400, "Start Ingres transaction\n"); - m_transaction = true; - } - db_unlock(this); -} - -void B_DB_INGRES::db_end_transaction(JCR *jcr) -{ - if (jcr && jcr->cached_attribute) { - Dmsg0(400, "Flush last cached attribute.\n"); - if (!db_create_attributes_record(jcr, this, jcr->ar)) { - Jmsg1(jcr, M_FATAL, 0, _("Attribute create error. %s"), db_strerror(jcr->db)); - } - jcr->cached_attribute = false; - } - - if (!m_allow_transactions) { - return; - } - - db_lock(this); - if (m_transaction) { - sql_query("COMMIT"); /* end transaction */ - m_transaction = false; - Dmsg1(400, "End Ingres transaction changes=%d\n", changes); - } - changes = 0; - db_unlock(this); -} - -/* - * Submit a general SQL command (cmd), and for each row returned, - * the result_handler is called with the ctx. - */ -bool B_DB_INGRES::db_sql_query(const char *query, DB_RESULT_HANDLER *result_handler, void *ctx) -{ - SQL_ROW row; - bool retval = true; - - Dmsg1(500, "db_sql_query starts with %s\n", query); - - db_lock(this); - if (!sql_query(query, QF_STORE_RESULT)) { - Mmsg(errmsg, _("Query failed: %s: ERR=%s\n"), query, sql_strerror()); - Dmsg0(500, "db_sql_query failed\n"); - retval = false; - goto bail_out; - } - - if (result_handler != NULL) { - Dmsg0(500, "db_sql_query invoking handler\n"); - while ((row = sql_fetch_row()) != NULL) { - Dmsg0(500, "db_sql_query sql_fetch_row worked\n"); - if (result_handler(ctx, m_num_fields, row)) - break; - } - sql_free_result(); - } - - Dmsg0(500, "db_sql_query finished\n"); - -bail_out: - db_unlock(this); - return retval; -} - -/* - * Note, if this routine returns false (failure), Bacula expects - * that no result has been stored. - * - * Returns: true on success - * false on failure - * - */ -bool B_DB_INGRES::sql_query(const char *query, int flags) -{ - int cols; - char *cp, *bp; - char *dup_query, *new_query; - bool retval = true; - bool start_of_transaction = false; - bool end_of_transaction = false; - B_DB_RWRULE *rewrite_rule; - - Dmsg1(500, "query starts with '%s'\n", query); - /* - * We always make a private copy of the query as we are doing serious - * rewrites in this engine. When running the private copy through the - * different query filters we loose the orginal private copy so we - * first make a extra reference to it so we can free it on exit from the - * function. - */ - dup_query = new_query = bstrdup(query); - - /* - * Iterate over the query string and perform any needed operations. - * We use a sliding window over the query string where bp points to - * the previous position in the query and cp to the current position - * in the query. - */ - bp = new_query; - while (bp != NULL) { - if ((cp = strchr(bp, ' ')) != NULL) { - *cp++; - } - - if (!strncasecmp(bp, "BEGIN", 5)) { - /* - * This is the start of a transaction. - * Inline copy the rest of the query over the BEGIN keyword. - */ - if (cp) { - strcpy(bp, cp); - } else { - *bp = '\0'; - } - start_of_transaction = true; - } else if (!strncasecmp(bp, "COMMIT", 6) && (cp == NULL || strncasecmp(cp, "PRESERVE", 8))) { - /* - * This is the end of a transaction. We cannot check for just the COMMIT - * keyword as a DECLARE of an tempory table also has the word COMMIT in it - * but its followed by the word PRESERVE. - * Inline copy the rest of the query over the COMMIT keyword. - */ - if (cp) { - strcpy(bp, cp); - } else { - *bp = '\0'; - } - end_of_transaction = true; - } - - /* - * See what query filter might match. - */ - foreach_alist(rewrite_rule, m_query_filters) { - if (!strncasecmp(bp, rewrite_rule->search_pattern, rewrite_rule->pattern_length)) { - rewrite_rule->trigger = true; - } - } - - /* - * Slide window. - */ - bp = cp; - } - - /* - * Run the query through all query filters that apply e.g. have the trigger set in the - * previous loop. - */ - foreach_alist(rewrite_rule, m_query_filters) { - if (rewrite_rule->trigger) { - new_query = rewrite_rule->rewrite_regexp->replace(new_query); - rewrite_rule->trigger = false; - } - } - - if (start_of_transaction) { - Dmsg0(500,"sql_query: Start of transaction\n"); - m_explicit_commit = false; - } - - /* - * See if there is any query left after filtering for certain keywords. - */ - bp = new_query; - while (bp != NULL && strlen(bp) > 0) { - /* - * We are starting a new query. reset everything. - */ - m_num_rows = -1; - m_row_number = -1; - m_field_number = -1; - - if (m_result) { - INGclear(m_result); /* hmm, someone forgot to free?? */ - m_result = NULL; - } - - /* - * See if this is a multi-statement query. We split a multi-statement query - * on the semi-column and feed the individual queries to the Ingres functions. - * We use a sliding window over the query string where bp points to - * the previous position in the query and cp to the current position - * in the query. - */ - if ((cp = strchr(bp, ';')) != NULL) { - *cp++ = '\0'; - } - - Dmsg1(500, "sql_query after rewrite continues with '%s'\n", bp); - - /* - * See if we got a store_result hint which could mean we are running a select. - * If flags has QF_STORE_RESULT not set we are sure its not a query that we - * need to store anything for. - */ - if (flags & QF_STORE_RESULT) { - cols = INGgetCols(m_db_handle, bp, m_explicit_commit); - } else { - cols = 0; - } - - if (cols <= 0) { - if (cols < 0 ) { - Dmsg0(500,"sql_query: neg.columns: no DML stmt!\n"); - retval = false; - goto bail_out; - } - Dmsg0(500,"sql_query (non SELECT) starting...\n"); - /* - * non SELECT - */ - m_num_rows = INGexec(m_db_handle, bp, m_explicit_commit); - if (m_num_rows == -1) { - Dmsg0(500,"sql_query (non SELECT) went wrong\n"); - retval = false; - goto bail_out; - } else { - Dmsg0(500,"sql_query (non SELECT) seems ok\n"); - } - } else { - /* - * SELECT - */ - Dmsg0(500,"sql_query (SELECT) starting...\n"); - m_result = INGquery(m_db_handle, bp, m_explicit_commit); - if (m_result != NULL) { - Dmsg0(500, "we have a result\n"); - - /* - * How many fields in the set? - */ - m_num_fields = (int)INGnfields(m_result); - Dmsg1(500, "we have %d fields\n", m_num_fields); - - m_num_rows = INGntuples(m_result); - Dmsg1(500, "we have %d rows\n", m_num_rows); - } else { - Dmsg0(500, "No resultset...\n"); - retval = false; - goto bail_out; - } - } - - bp = cp; - } - -bail_out: - if (end_of_transaction) { - Dmsg0(500,"sql_query: End of transaction, commiting work\n"); - m_explicit_commit = true; - INGcommit(m_db_handle); - } - - free(dup_query); - Dmsg0(500, "sql_query finishing\n"); - - return retval; -} - -void B_DB_INGRES::sql_free_result(void) -{ - db_lock(this); - if (m_result) { - INGclear(m_result); - m_result = NULL; - } - if (m_rows) { - free(m_rows); - m_rows = NULL; - } - if (m_fields) { - free(m_fields); - m_fields = NULL; - } - m_num_rows = m_num_fields = 0; - db_unlock(this); -} - -SQL_ROW B_DB_INGRES::sql_fetch_row(void) -{ - int j; - SQL_ROW row = NULL; /* by default, return NULL */ - - if (!m_result) { - return row; - } - if (m_result->num_rows <= 0) { - return row; - } - - Dmsg0(500, "sql_fetch_row start\n"); - - if (!m_rows || m_rows_size < m_num_fields) { - if (m_rows) { - Dmsg0(500, "sql_fetch_row freeing space\n"); - free(m_rows); - } - Dmsg1(500, "we need space for %d bytes\n", sizeof(char *) * m_num_fields); - m_rows = (SQL_ROW)malloc(sizeof(char *) * m_num_fields); - m_rows_size = m_num_fields; - - /* - * Now reset the row_number now that we have the space allocated - */ - m_row_number = 0; - } - - /* - * If still within the result set - */ - if (m_row_number < m_num_rows) { - Dmsg2(500, "sql_fetch_row row number '%d' is acceptable (0..%d)\n", m_row_number, m_num_rows); - /* - * Get each value from this row - */ - for (j = 0; j < m_num_fields; j++) { - m_rows[j] = INGgetvalue(m_result, m_row_number, j); - Dmsg2(500, "sql_fetch_row field '%d' has value '%s'\n", j, m_rows[j]); - } - /* - * Increment the row number for the next call - */ - m_row_number++; - - row = m_rows; - } else { - Dmsg2(500, "sql_fetch_row row number '%d' is NOT acceptable (0..%d)\n", m_row_number, m_num_rows); - } - - Dmsg1(500, "sql_fetch_row finishes returning %p\n", row); - - return row; -} - -const char *B_DB_INGRES::sql_strerror(void) -{ - return INGerrorMessage(m_db_handle); -} - -void B_DB_INGRES::sql_data_seek(int row) -{ - /* - * Set the row number to be returned on the next call to sql_fetch_row - */ - m_row_number = row; -} - -int B_DB_INGRES::sql_affected_rows(void) -{ - return m_num_rows; -} - -/* - * First execute the insert query and then retrieve the currval. - * By setting transaction to true we make it an atomic transaction - * and as such we can get the currval after which we commit if - * transaction is false. This way things are an atomic operation - * for Ingres and things work. We save the current transaction status - * and set transaction in the mdb to true and at the end of this - * function we restore the actual transaction status. - */ -uint64_t B_DB_INGRES::sql_insert_autokey_record(const char *query, const char *table_name) -{ - char sequence[64]; - char getkeyval_query[256]; - char *currval; - uint64_t id = 0; - bool current_explicit_commit; - - /* - * Save the current transaction status and pretend we are in a transaction. - */ - current_explicit_commit = m_explicit_commit; - m_explicit_commit = false; - - /* - * Execute the INSERT query. - */ - m_num_rows = INGexec(m_db_handle, query, m_explicit_commit); - if (m_num_rows == -1) { - goto bail_out; - } - - changes++; - - /* - * Obtain the current value of the sequence that - * provides the serial value for primary key of the table. - * - * currval is local to our session. It is not affected by - * other transactions. - * - * Determine the name of the sequence. - * As we name all sequences as
_seq this is easy. - */ - bstrncpy(sequence, table_name, sizeof(sequence)); - bstrncat(sequence, "_seq", sizeof(sequence)); - - bsnprintf(getkeyval_query, sizeof(getkeyval_query), "SELECT %s.currval FROM %s", sequence, table_name); - - if (m_result) { - INGclear(m_result); - m_result = NULL; - } - m_result = INGquery(m_db_handle, getkeyval_query, m_explicit_commit); - - if (!m_result) { - Dmsg1(50, "Query failed: %s\n", getkeyval_query); - goto bail_out; - } - - Dmsg0(500, "exec done"); - - currval = INGgetvalue(m_result, 0, 0); - if (currval) { - id = str_to_uint64(currval); - } - - INGclear(m_result); - m_result = NULL; - -bail_out: - /* - * Restore the actual explicit_commit status. - */ - m_explicit_commit = current_explicit_commit; - - /* - * Commit if explicit_commit is not set. - */ - if (m_explicit_commit) { - INGcommit(m_db_handle); - } - - return id; -} - -SQL_FIELD *B_DB_INGRES::sql_fetch_field(void) -{ - int i, j; - int max_length; - int this_length; - - if (!m_fields || m_fields_size < m_num_fields) { - if (m_fields) { - free(m_fields); - m_fields = NULL; - } - Dmsg1(500, "allocating space for %d fields\n", m_num_fields); - m_fields = (SQL_FIELD *)malloc(sizeof(SQL_FIELD) * m_num_fields); - m_fields_size = m_num_fields; - - for (i = 0; i < m_num_fields; i++) { - Dmsg1(500, "filling field %d\n", i); - m_fields[i].name = INGfname(m_result, i); - m_fields[i].type = INGftype(m_result, i); - m_fields[i].flags = 0; - - /* - * For a given column, find the max length. - */ - max_length = 0; - for (j = 0; j < m_num_rows; j++) { - if (INGgetisnull(m_result, j, i)) { - this_length = 4; /* "NULL" */ - } else { - this_length = cstrlen(INGgetvalue(m_result, j, i)); - } - - if (max_length < this_length) { - max_length = this_length; - } - } - m_fields[i].max_length = max_length; - - Dmsg4(500, "sql_fetch_field finds field '%s' has length='%d' type='%d' and IsNull=%d\n", - m_fields[i].name, m_fields[i].max_length, m_fields[i].type, m_fields[i].flags); - } - } - - /* - * Increment field number for the next time around - */ - return &m_fields[m_field_number++]; -} - -bool B_DB_INGRES::sql_field_is_not_null(int field_type) -{ - switch (field_type) { - case 1: - return true; - default: - return false; - } -} - -bool B_DB_INGRES::sql_field_is_numeric(int field_type) -{ - /* - * See ${II_SYSTEM}/ingres/files/eqsqlda.h for numeric types. - */ - switch (field_type) { - case IISQ_DEC_TYPE: - case IISQ_INT_TYPE: - case IISQ_FLT_TYPE: - return true; - default: - return false; - } -} - -/* - * Escape strings so that Ingres is happy on COPY - * - * NOTE! len is the length of the old string. Your new - * string must be long enough (max 2*old+1) to hold - * the escaped output. - */ -static char *ingres_copy_escape(char *dest, char *src, size_t len) -{ - /* we have to escape \t, \n, \r, \ */ - char c = '\0' ; - - while (len > 0 && *src) { - switch (*src) { - case '\n': - c = 'n'; - break; - case '\\': - c = '\\'; - break; - case '\t': - c = 't'; - break; - case '\r': - c = 'r'; - break; - default: - c = '\0' ; - } - - if (c) { - *dest = '\\'; - dest++; - *dest = c; - } else { - *dest = *src; - } - - len--; - src++; - dest++; - } - - *dest = '\0'; - return dest; -} - -/* - * Returns true if OK - * false if failed - */ -bool B_DB_INGRES::sql_batch_start(JCR *jcr) -{ - bool ok; - - db_lock(this); - ok = sql_query("DECLARE GLOBAL TEMPORARY TABLE batch (" - "FileIndex INTEGER," - "JobId INTEGER," - "Path VARBYTE(32000)," - "Name VARBYTE(32000)," - "LStat VARBYTE(255)," - "MD5 VARBYTE(255)," - "DeltaSeq SMALLINT)" - " ON COMMIT PRESERVE ROWS WITH NORECOVERY"); - db_unlock(this); - return ok; -} - -/* - * Returns true if OK - * false if failed - */ -bool B_DB_INGRES::sql_batch_end(JCR *jcr, const char *error) -{ - m_status = 0; - return true; -} - -/* - * Returns true if OK - * false if failed - */ -bool B_DB_INGRES::sql_batch_insert(JCR *jcr, ATTR_DBR *ar) -{ - size_t len; - const char *digest; - char ed1[50]; - - esc_name = check_pool_memory_size(esc_name, fnl*2+1); - db_escape_string(jcr, esc_name, fname, fnl); - - esc_path = check_pool_memory_size(esc_path, pnl*2+1); - db_escape_string(jcr, esc_path, path, pnl); - - if (ar->Digest == NULL || ar->Digest[0] == 0) { - digest = "0"; - } else { - digest = ar->Digest; - } - - len = Mmsg(cmd, "INSERT INTO batch VALUES " - "(%u,%s,'%s','%s','%s','%s',%u)", - ar->FileIndex, edit_int64(ar->JobId,ed1), esc_path, - esc_name, ar->attr, digest, ar->DeltaSeq); - - return sql_query(cmd); -} - -/* - * Initialize database data structure. In principal this should - * never have errors, or it is really fatal. - */ -B_DB *db_init_database(JCR *jcr, const char *db_driver, const char *db_name, const char *db_user, - const char *db_password, const char *db_address, int db_port, - const char *db_socket, bool mult_db_connections, bool disable_batch_insert) -{ - B_DB_INGRES *mdb = NULL; - - if (!db_user) { - Jmsg(jcr, M_FATAL, 0, _("A user name for Ingres must be supplied.\n")); - return NULL; - } - - P(mutex); /* lock DB queue */ - if (db_list && !mult_db_connections) { - /* - * Look to see if DB already open - */ - foreach_dlist(mdb, db_list) { - if (mdb->db_match_database(db_driver, db_name, db_address, db_port)) { - Dmsg1(100, "DB REopen %s\n", db_name); - mdb->increment_refcount(); - goto bail_out; - } - } - } - - Dmsg0(100, "db_init_database first time\n"); - mdb = New(B_DB_INGRES(jcr, db_driver, db_name, db_user, db_password, db_address, - db_port, db_socket, mult_db_connections, disable_batch_insert)); - -bail_out: - V(mutex); - return mdb; -} -#endif /* HAVE_INGRES */ diff --git a/bacula/src/cats/ingres.in b/bacula/src/cats/ingres.in deleted file mode 100755 index 984cc0fa7d..0000000000 --- a/bacula/src/cats/ingres.in +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh -# -# shell script to create Bacula PostgreSQL tables -# -bindir=@INGRES_BINDIR@ -db_name=@db_name@ - -sql $* ${db_name} diff --git a/bacula/src/cats/install-default-backend.in b/bacula/src/cats/install-default-backend.in index 80eae6aefa..0491d94f59 100755 --- a/bacula/src/cats/install-default-backend.in +++ b/bacula/src/cats/install-default-backend.in @@ -1,4 +1,20 @@ #!/bin/sh +# +# Bacula® - The Network Backup Solution +# +# Copyright (C) 2000-2014 Free Software Foundation Europe e.V. +# +# The main author of Bacula is Kern Sibbald, with contributions from many +# others, a complete list can be found in the file AUTHORS. +# +# You may use this file and others of this release according to the +# license defined in the LICENSE file, which includes the Affero General +# Public License, v3.0 ("AGPLv3") and some additional permissions and +# terms pursuant to its AGPLv3 Section 7. +# +# Bacula® is a registered trademark of Kern Sibbald. +# + LIBTOOL="@BUILD_DIR@/libtool" @@ -34,7 +50,7 @@ if [ -f ${install_dir}/libbaccats-${default_backend}-${library_version}${SHLIB_E # always work. # ln -s libbaccats-${default_backend}${SHLIB_EXT} \ - ${install_dir}/libbaccats-${library_version}${SHLIB_EXT} + ${install_dir}/libbaccats-${library_version}${SHLIB_EXT} fi exit 0 diff --git a/bacula/src/cats/make_bacula_tables.in b/bacula/src/cats/make_bacula_tables.in index 0d3539cf41..951e59dfca 100755 --- a/bacula/src/cats/make_bacula_tables.in +++ b/bacula/src/cats/make_bacula_tables.in @@ -3,6 +3,21 @@ # This routine makes the appropriately configured # Bacula tables for PostgreSQL, Ingres, MySQL, or SQLite. # +# +# Bacula® - The Network Backup Solution +# +# Copyright (C) 2000-2014 Free Software Foundation Europe e.V. +# +# The main author of Bacula is Kern Sibbald, with contributions from many +# others, a complete list can be found in the file AUTHORS. +# +# You may use this file and others of this release according to the +# license defined in the LICENSE file, which includes the Affero General +# Public License, v3.0 ("AGPLv3") and some additional permissions and +# terms pursuant to its AGPLv3 Section 7. +# +# Bacula® is a registered trademark of Kern Sibbald. +# default_db_type=@DEFAULT_DB_TYPE@ diff --git a/bacula/src/cats/make_catalog_backup.in b/bacula/src/cats/make_catalog_backup.in index 58ed650861..9731732a9c 100755 --- a/bacula/src/cats/make_catalog_backup.in +++ b/bacula/src/cats/make_catalog_backup.in @@ -1,5 +1,20 @@ #!/bin/sh # +# Bacula® - The Network Backup Solution +# +# Copyright (C) 2000-2014 Free Software Foundation Europe e.V. +# +# The main author of Bacula is Kern Sibbald, with contributions from many +# others, a complete list can be found in the file AUTHORS. +# +# You may use this file and others of this release according to the +# license defined in the LICENSE file, which includes the Affero General +# Public License, v3.0 ("AGPLv3") and some additional permissions and +# terms pursuant to its AGPLv3 Section 7. +# +# Bacula® is a registered trademark of Kern Sibbald. +# +# # This script dumps your Bacula catalog in ASCII format # It works for MySQL, SQLite, and PostgreSQL # diff --git a/bacula/src/cats/make_catalog_backup.in.patch b/bacula/src/cats/make_catalog_backup.in.patch deleted file mode 100644 index 08988b26a7..0000000000 --- a/bacula/src/cats/make_catalog_backup.in.patch +++ /dev/null @@ -1,12 +0,0 @@ ---- make_catalog_backup.in 2006-12-09 10:17:05.000000000 -0500 -++ make_catalog_backup.in.fixed 2006-12-09 10:24:40.000000000 -0500 -@@ -56,8 +56,7 @@ rm -f $1.sql - - case ${db_type} in - sqlite3) -- BINDIR=@SQLITE_BINDIR@ -- echo ".dump" | ${BINDIR}/sqlite3 $1.db >$1.sql -+ echo ".dump" | /opt/bacula/sqlite/sqlite3 $1.db >$1.sql - ;; - mysql) - BINDIR=@MYSQL_BINDIR@ diff --git a/bacula/src/cats/make_catalog_backup.pl.in b/bacula/src/cats/make_catalog_backup.pl.in index efb91fd261..9a322aa5d0 100644 --- a/bacula/src/cats/make_catalog_backup.pl.in +++ b/bacula/src/cats/make_catalog_backup.pl.in @@ -12,32 +12,19 @@ use strict; =head1 LICENSE - Bacula® - The Network Backup Solution + Bacula® - The Network Backup Solution - Copyright (C) 2000-2010 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation plus additions - that are listed in the file LICENSE. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. - - Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zurich, - Switzerland, email:ftf@fsfeurope.org. + Bacula® is a registered trademark of Kern Sibbald. =cut @@ -86,7 +73,7 @@ sub dump_mysql my %args = @_; umask(0077); unlink("$wd/.my.cnf"); - open(MY, ">$wd/.my.cnf") + open(MY, ">$wd/.my.cnf") or die "Can't open $wd/.my.cnf for writing $@"; $args{db_address} = $args{db_address} || "localhost"; @@ -103,7 +90,7 @@ password=$args{db_password} if ($args{db_port}) { print MY "port=$args{db_port}\n"; } - + close(MY); exec("HOME='$wd' mysqldump -f --opt $args{db_name} > '$wd/$args{db_name}.sql'"); diff --git a/bacula/src/cats/make_ingres_catalog_backup.in b/bacula/src/cats/make_ingres_catalog_backup.in deleted file mode 100755 index bcd0ce10e7..0000000000 --- a/bacula/src/cats/make_ingres_catalog_backup.in +++ /dev/null @@ -1,67 +0,0 @@ -#!/bin/sh -# -# shell script to make a dump of the bacula Ingres database using copydb and make -# a base64 encoded tar of the content. -# - -bindir=@INGRES_BINDIR@ -PATH="$bindir:$PATH" -db_name=${db_name:-@db_name@} -db_user=${db_user:-@db_user@} -working_dir="@working_dir@" - -# -# Source the Ingres settings when they exist. -# -[ -f ${bindir}/../../.ingIIsh ] && . ${bindir}/../../.ingIIsh - -# -# See if the dumpdir exists. -# -[ ! -d ${working_dir}/ingres_dump ] && mkdir -p ${working_dir}/ingres_dump - -# -# Generate the copy.in and copy.out file -# -copydb \ -${db_name} \ --u${db_user} \ --dest=${working_dir}/ingres_dump \ --d ${working_dir}/ingres_dump \ -> /dev/null 2>&1 - -# -# If copydb created a copy.out file run it. -# -if [ -f ${working_dir}/ingres_dump/copy.out ]; then - # - # Run the sql to create the dumps of the tables. - # - sql \ - -u${db_user} \ - ${db_name} \ - < ${working_dir}/ingres_dump/copy.out \ - > /dev/null 2>&1 && rm ${working_dir}/ingres_dump/copy.out - - # - # Tar up the dump and uuencode it. - # - cd ${working_dir}/ingres_dump || exit 1 - case `uname -s` in - Linux) - tar cf - . | gzip -c | base64 - ;; - SunOS) - tar cf - . | gzip -c | uuencode -m - - ;; - *) - echo "Unsupported OS type encountered, `uname -s`" - exit 1 - ;; - esac - cd / - - rm -rf ${working_dir}/ingres_dump -fi - -exit 0 diff --git a/bacula/src/cats/make_ingres_tables.in b/bacula/src/cats/make_ingres_tables.in deleted file mode 100755 index ecd518feed..0000000000 --- a/bacula/src/cats/make_ingres_tables.in +++ /dev/null @@ -1,508 +0,0 @@ -#!/bin/sh -# -# shell script to create Bacula Ingres tables -# -bindir=@INGRES_BINDIR@ -PATH="$bindir:$PATH" -db_name=${db_name:-@db_name@} -db_user=${db_user:-@db_user@} - -sql -u${db_user} $* ${db_name} <.dbms.private.*.cache.p8k_status: ON --- ii..dbms.private.*.cache.p16k_status: ON --- ii..dbms.private.*.cache.p32k_status: ON --- ii..dbms.private.*.cache.p64k_status: ON --- ii..rcp.dmf_cache_size8k: 200 --- ii..rcp.dmf_cache_size16k: 200 --- ii..rcp.dmf_cache_size32k: 200 --- ii..rcp.dmf_cache_size64k: 200 --- - -SET AUTOCOMMIT ON\g - -CREATE SEQUENCE Filename_Seq; -CREATE TABLE Filename -( - FilenameId INTEGER NOT NULL DEFAULT Filename_Seq.nextval, - Name VARBYTE(32000) NOT NULL, - PRIMARY KEY (FilenameId) -); - -CREATE UNIQUE INDEX (filename_name_idx ON filename (Name) WITH STRUCTURE=HASH,PAGE_SIZE=32768); - -CREATE SEQUENCE Path_Seq; -CREATE TABLE path -( - Pathid INTEGER NOT NULL DEFAULT Path_Seq.nextval, - Path VARBYTE(32000) NOT NULL, - PRIMARY KEY (Pathid) -); - -CREATE UNIQUE INDEX (path_name_idx ON path (Path) WITH STRUCTURE=HASH,PAGE_SIZE=32768); - -CREATE SEQUENCE File_Seq; -CREATE TABLE file -( - FileId BIGINT NOT NULL DEFAULT File_Seq.nextval, - FileIndex INTEGER NOT NULL DEFAULT 0, - JobId INTEGER NOT NULL, - PathId INTEGER NOT NULL, - FilenameId INTEGER NOT NULL, - DeltaSeq INTEGER NOT NULL DEFAULT 0, - MarkId INTEGER NOT NULL DEFAULT 0, - LStat VARBYTE(255) NOT NULL, - Md5 VARBYTE(255) NOT NULL, - PRIMARY KEY (fileid) -); - -CREATE INDEX file_jpfid_idx ON File (jobid, pathid, filenameid); - --- If you need performances, you can remove this index --- the database engine is able to use the composite index --- to find all records with a given JobId -CREATE INDEX file_jobid_idx ON File(jobid); - -CREATE SEQUENCE RestoreObject_Seq; -CREATE TABLE RestoreObject ( - RestoreObjectId INTEGER NOT NULL DEFAULT RestoreObject_Seq.nextval, - ObjectName VARBYTE(128) NOT NULL, - RestoreObject BLOB NOT NULL, - PluginName VARBYTE(128) NOT NULL, - ObjectLength INTEGER DEFAULT 0, - ObjectFullLength INTEGER DEFAULT 0, - ObjectIndex INTEGER DEFAULT 0, - ObjectType INTEGER DEFAULT 0, - FileIndex INTEGER DEFAULT 0, - JobId INTEGER, - ObjectCompression INTEGER DEFAULT 0, - PRIMARY KEY (RestoreObjectId) -); - -CREATE INDEX restore_jobid_idx on RestoreObject(JobId); - -CREATE SEQUENCE Job_Seq; -CREATE TABLE Job -( - JobId INTEGER NOT NULL DEFAULT Job_Seq.nextval, - Job VARBYTE(128) NOT NULL, - Name VARBYTE(128) NOT NULL, - Type CHAR(1) NOT NULL, - Level CHAR(1) NOT NULL, - ClientId INTEGER DEFAULT 0, - JobStatus CHAR(1) NOT NULL, - SchedTime TIMESTAMP WITHOUT TIME ZONE, - StartTime TIMESTAMP WITHOUT TIME ZONE, - EndTime TIMESTAMP WITHOUT TIME ZONE, - RealEndTime TIMESTAMP WITHOUT TIME ZONE, - JobTDate BIGINT DEFAULT 0, - VolSessionId INTEGER DEFAULT 0, - volSessionTime INTEGER DEFAULT 0, - JobFiles INTEGER DEFAULT 0, - JobBytes BIGINT DEFAULT 0, - ReadBytes BIGINT DEFAULT 0, - JobErrors INTEGER DEFAULT 0, - JobMissingFiles INTEGER DEFAULT 0, - PoolId INTEGER DEFAULT 0, - FilesetId INTEGER DEFAULT 0, - PriorJobid INTEGER DEFAULT 0, - PurgedFiles SMALLINT DEFAULT 0, - HasBase SMALLINT DEFAULT 0, - HasCache SMALLINT DEFAULT 0, - Reviewed SMALLINT DEFAULT 0, - Comment VARBYTE(4096), - PRIMARY KEY (JobId) -); - -CREATE INDEX job_name_idx ON Job (Name); - --- Create a table like Job for long term statistics -CREATE SEQUENCE JobHisto_Seq; -CREATE TABLE JobHisto -( - JobId INTEGER NOT NULL DEFAULT JobHisto_Seq.nextval, - Job VARBYTE(128) NOT NULL, - Name VARBYTE(128) NOT NULL, - Type CHAR(1) NOT NULL, - Level CHAR(1) NOT NULL, - ClientId INTEGER DEFAULT 0, - JobStatus CHAR(1) NOT NULL, - SchedTime TIMESTAMP WITHOUT TIME ZONE, - StartTime TIMESTAMP WITHOUT TIME ZONE, - EndTime TIMESTAMP WITHOUT TIME ZONE, - RealEndTime TIMESTAMP WITHOUT TIME ZONE, - JobTDate BIGINT DEFAULT 0, - VolSessionId INTEGER DEFAULT 0, - volSessionTime INTEGER DEFAULT 0, - JobFiles INTEGER DEFAULT 0, - JobBytes BIGINT DEFAULT 0, - ReadBytes BIGINT DEFAULT 0, - JobErrors INTEGER DEFAULT 0, - JobMissingFiles INTEGER DEFAULT 0, - PoolId INTEGER DEFAULT 0, - FilesetId INTEGER DEFAULT 0, - PriorJobid INTEGER DEFAULT 0, - PurgedFiles SMALLINT DEFAULT 0, - HasBase SMALLINT DEFAULT 0, - HasCache SMALLINT DEFAULT 0, - Reviewed SMALLINT DEFAULT 0, - Comment VARBYTE(4096), - PRIMARY KEY (JobId) -); - -CREATE INDEX jobhisto_idx ON JobHisto (StartTime); - -CREATE SEQUENCE Location_Seq; -CREATE TABLE Location ( - LocationId INTEGER NOT NULL DEFAULT Location_Seq.nextval, - Location VARBYTE(128) NOT NULL, - Cost INTEGER DEFAULT 0, - Enabled SMALLINT, - PRIMARY KEY (LocationId) -); - -CREATE SEQUENCE Fileset_Seq; -CREATE TABLE Fileset -( - FilesetId INTEGER NOT NULL DEFAULT Fileset_Seq.nextval, - Fileset VARBYTE(128) NOT NULL, - Md5 VARBYTE(128) NOT NULL, - Createtime TIMESTAMP WITHOUT TIME ZONE NOT NULL, - PRIMARY KEY (filesetid) -); - -CREATE INDEX fileset_name_idx ON Fileset (fileset); - -CREATE SEQUENCE JobMedia_Seq; -CREATE TABLE JobMedia -( - JobMediaId INTEGER NOT NULL DEFAULT JobMedia_Seq.nextval, - JobId INTEGER NOT NULL, - MediaId INTEGER NOT NULL, - FirstIndex INTEGER DEFAULT 0, - LastIndex INTEGER DEFAULT 0, - StartFile INTEGER DEFAULT 0, - EndFile INTEGER DEFAULT 0, - StartBlock BIGINT DEFAULT 0, - EndBlock BIGINT DEFAULT 0, - VolIndex INTEGER DEFAULT 0, - PRIMARY KEY (jobmediaid) -); - -CREATE INDEX job_media_job_id_media_id_idx ON JobMedia (jobid, mediaid); - -CREATE SEQUENCE Media_Seq; -CREATE TABLE Media -( - MediaId INTEGER NOT NULL DEFAULT Media_Seq.nextval, - VolumeName VARBYTE(128) NOT NULL, - Slot INTEGER DEFAULT 0, - PoolId INTEGER DEFAULT 0, - MediaType VARBYTE(128) NOT NULL, - MediaTypeId INTEGER DEFAULT 0, - LabelType INTEGER DEFAULT 0, - FirstWritten TIMESTAMP WITHOUT TIME ZONE, - LastWritten TIMESTAMP WITHOUT TIME ZONE, - LabelDate TIMESTAMP WITHOUT TIME ZONE, - VolJobs INTEGER DEFAULT 0, - VolFiles INTEGER DEFAULT 0, - VolBlocks INTEGER DEFAULT 0, - VolMounts INTEGER DEFAULT 0, - VolBytes BIGINT DEFAULT 0, - VolParts INTEGER DEFAULT 0, - VolErrors INTEGER DEFAULT 0, - VolWrites INTEGER DEFAULT 0, - VolCapacitybytes BIGINT DEFAULT 0, - VolStatus VARBYTE(128) NOT NULL - CHECK (volstatus in ('Full','Archive','Append', - 'Recycle','Purged','Read-Only','Disabled', - 'Error','Busy','Used','Cleaning','Scratch')), - Enabled SMALLINT DEFAULT 1, - Recycle SMALLINT DEFAULT 0, - ActionOnPurge SMALLINT DEFAULT 0, - VolRetention BIGINT DEFAULT 0, - VolUseDuration BIGINT DEFAULT 0, - MaxVolJobs INTEGER DEFAULT 0, - MaxVolFiles INTEGER DEFAULT 0, - MaxVolBytes BIGINT DEFAULT 0, - InChanger SMALLINT DEFAULT 0, - StorageId BIGINT DEFAULT 0, - DeviceId INTEGER DEFAULT 0, - MediaAddressing SMALLINT DEFAULT 0, - VolReadTime BIGINT DEFAULT 0, - VolWriteTime BIGINT DEFAULT 0, - EndFile INTEGER DEFAULT 0, - EndBlock BIGINT DEFAULT 0, - LocationId INTEGER DEFAULT 0, - RecycleCount INTEGER DEFAULT 0, - InitialWrite TIMESTAMP WITHOUT TIME ZONE, - ScratchPoolId INTEGER DEFAULT 0, - RecyclePoolId INTEGER DEFAULT 0, - Comment VARBYTE(4096), - PRIMARY KEY (mediaid) -); - -CREATE UNIQUE INDEX media_volumename_id ON Media (VolumeName); - -CREATE SEQUENCE MediaType_Seq; -CREATE TABLE MediaType ( - MediaTypeId INTEGER NOT NULL DEFAULT MediaType_Seq.nextval, - MediaType VARBYTE(128) NOT NULL, - ReadOnly INTEGER NOT NULL DEFAULT 0, - PRIMARY KEY (MediaTypeId) -); - -CREATE SEQUENCE Storage_Seq; -CREATE TABLE Storage ( - StorageId INTEGER NOT NULL DEFAULT Storage_Seq.nextval, - Name VARBYTE(128) NOT NULL, - AutoChanger INTEGER NOT NULL DEFAULT 0, - PRIMARY KEY (StorageId) -); - -CREATE SEQUENCE Device_Seq; -CREATE TABLE Device ( - DeviceId INTEGER NOT NULL DEFAULT Device_Seq.nextval, - Name VARBYTE(128) NOT NULL, - MediaTypeId INTEGER NOT NULL, - StorageId INTEGER NOT NULL, - DevMounts INTEGER NOT NULL DEFAULT 0, - DevReadBytes BIGINT NOT NULL DEFAULT 0, - DevWriteBytes BIGINT NOT NULL DEFAULT 0, - DevReadBytesSinceCleaning BIGINT NOT NULL DEFAULT 0, - DevWriteBytesSinceCleaning BIGINT NOT NULL DEFAULT 0, - DevReadTime BIGINT NOT NULL DEFAULT 0, - DevWriteTime BIGINT NOT NULL DEFAULT 0, - DevReadTimeSinceCleaning BIGINT NOT NULL DEFAULT 0, - DevWriteTimeSinceCleaning BIGINT NOT NULL DEFAULT 0, - CleaningDate TIMESTAMP WITHOUT TIME ZONE, - CleaningPeriod BIGINT NOT NULL DEFAULT 0, - PRIMARY KEY (DeviceId) -); - -CREATE SEQUENCE Pool_Seq; -CREATE TABLE Pool -( - PoolId INTEGER NOT NULL DEFAULT pool_Seq.nextval, - Name VARBYTE(128) NOT NULL, - NumVols INTEGER DEFAULT 0, - MaxVols INTEGER DEFAULT 0, - UseOnce SMALLINT DEFAULT 0, - UseCatalog SMALLINT DEFAULT 0, - AcceptAnyVolume SMALLINT DEFAULT 0, - VolRetention BIGINT DEFAULT 0, - VolUseDuration BIGINT DEFAULT 0, - MaxVolJobs INTEGER DEFAULT 0, - MaxVolFiles INTEGER DEFAULT 0, - MaxVolBytes BIGINT DEFAULT 0, - AutoPrune SMALLINT DEFAULT 0, - Recycle SMALLINT DEFAULT 0, - ActionOnPurge SMALLINT DEFAULT 0, - PoolType VARBYTE(32) - CHECK (pooltype in ('Backup','Copy','Cloned','Archive','Migration','Scratch')), - LabelType INTEGER DEFAULT 0, - LabelFormat VARBYTE(128) NOT NULL, - Enabled SMALLINT DEFAULT 1, - ScratchPoolId INTEGER DEFAULT 0, - RecyclePoolId INTEGER DEFAULT 0, - NextPoolId INTEGER DEFAULT 0, - MigrationHighBytes BIGINT DEFAULT 0, - MigrationLowBytes BIGINT DEFAULT 0, - MigrationTime BIGINT DEFAULT 0, - PRIMARY KEY (poolid) -); - -CREATE INDEX pool_name_idx ON Pool (name); - -CREATE SEQUENCE Client_Seq; -CREATE TABLE Client -( - ClientId INTEGER NOT NULL DEFAULT Client_Seq.nextval, - Name VARBYTE(128) NOT NULL, - Uname VARBYTE(256) NOT NULL, - AutoPrune SMALLINT DEFAULT 0, - FileRetention BIGINT DEFAULT 0, - JobRetention BIGINT DEFAULT 0, - PRIMARY KEY (clientid) -); - -CREATE UNIQUE INDEX client_name_idx ON Client (Name); - -CREATE SEQUENCE Log_Seq; -CREATE TABLE Log -( - LogId INTEGER NOT NULL DEFAULT Log_Seq.nextval, - JobId INTEGER NOT NULL, - Time TIMESTAMP WITHOUT TIME ZONE, - LogText VARBYTE(4096) NOT NULL, - PRIMARY KEY (LogId) -); -CREATE INDEX log_name_idx ON Log (JobId); - -CREATE SEQUENCE LocationLog_Seq; -CREATE TABLE LocationLog ( - LocLogId INTEGER NOT NULL DEFAULT LocationLog_Seq.nextval, - Date TIMESTAMP WITHOUT TIME ZONE, - Comment VARBYTE(4096) NOT NULL, - MediaId INTEGER DEFAULT 0, - LocationId INTEGER DEFAULT 0, - NewVolStatus VARBYTE(32) NOT NULL - CHECK (newvolstatus in ('Full','Archive','Append', - 'Recycle','Purged','Read-Only','Disabled', - 'Error','Busy','Used','Cleaning','Scratch')), - NewEnabled SMALLINT, - PRIMARY KEY (LocLogId) -); - -CREATE TABLE Counters -( - Counter VARBYTE(128) NOT NULL, - MinValue INTEGER DEFAULT 0, - MaxValue INTEGER DEFAULT 0, - CurrentValue INTEGER DEFAULT 0, - WrapCounter VARBYTE(128) NOT NULL, - PRIMARY KEY (counter) -); - -CREATE SEQUENCE BaseFiles_Seq; -CREATE TABLE BaseFiles -( - BaseId INTEGER NOT NULL DEFAULT BaseFiles_Seq.nextval, - JobId INTEGER NOT NULL, - FileId BIGINT NOT NULL, - FileIndex INTEGER, - BaseJobid INTEGER, - PRIMARY KEY (BaseId) -); - -CREATE INDEX basefiles_jobid_idx ON BaseFiles (JobId); - -CREATE TABLE unsavedfiles -( - UnsavedId INTEGER NOT NULL, - JobId INTEGER NOT NULL, - PathId INTEGER NOT NULL, - FilenameId INTEGER NOT NULL, - PRIMARY KEY (UnsavedId) -); - -CREATE TABLE CDImages -( - MediaId INTEGER NOT NULL, - LastBurn TIMESTAMP WITHOUT TIME ZONE NOT NULL, - PRIMARY KEY (MediaId) -); - -CREATE TABLE PathHierarchy -( - PathId INTEGER NOT NULL, - PPathId INTEGER NOT NULL, - CONSTRAINT pathhierarchy_pkey PRIMARY KEY (PathId) -); - -CREATE INDEX pathhierarchy_ppathid ON PathHierarchy (PPathId); - -CREATE TABLE PathVisibility -( - PathId INTEGER NOT NULL, - JobId INTEGER NOT NULL, - Size BIGINT DEFAULT 0, - Files INTEGER DEFAULT 0, - CONSTRAINT pathvisibility_pkey PRIMARY KEY (JobId, PathId) -); -CREATE INDEX pathvisibility_jobid ON PathVisibility (JobId); - -CREATE TABLE version -( - versionid INTEGER NOT NULL -); - -CREATE TABLE Status ( - JobStatus CHAR(1) NOT NULL, - JobStatusLong VARBYTE(128), - Severity INTEGER, - PRIMARY KEY (JobStatus) -); - -\g - -INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES - ('C', 'Created, not yet running',15); -INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES - ('R', 'Running',15); -INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES - ('B', 'Blocked',15); -INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES - ('T', 'Completed successfully', 10); -INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES - ('E', 'Terminated with errors', 25); -INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES - ('e', 'Non-fatal error',20); -INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES - ('f', 'Fatal error',100); -INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES - ('D', 'Verify found differences',15); -INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES - ('A', 'Canceled by user',90); -INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES - ('F', 'Waiting for Client',15); -INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES - ('S', 'Waiting for Storage daemon',15); -INSERT INTO Status (JobStatus,JobStatusLong) VALUES - ('m', 'Waiting for new media'); -INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES - ('M', 'Waiting for media mount',15); -INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES - ('s', 'Waiting for storage resource',15); -INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES - ('j', 'Waiting for job resource',15); -INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES - ('c', 'Waiting for client resource',15); -INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES - ('d', 'Waiting on maximum jobs',15); -INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES - ('t', 'Waiting on start time',15); -INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES - ('p', 'Waiting on higher priority jobs',15); -INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES - ('a', 'SD despooling attributes',15); -INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES - ('i', 'Doing batch insert file records',15); - -INSERT INTO Version (VersionId) VALUES (@BDB_VERSION@); - --- Make sure we have appropriate permissions -\g - -END-OF-DATA -pstat=$? -if test $pstat = 0; -then - echo "Creation of Bacula Ingres tables succeeded." -else - echo "Creation of Bacula Ingres tables failed." -fi -exit $pstat diff --git a/bacula/src/cats/make_mysql_tables.in b/bacula/src/cats/make_mysql_tables.in index 0a94b60e38..19c5cbf8f3 100644 --- a/bacula/src/cats/make_mysql_tables.in +++ b/bacula/src/cats/make_mysql_tables.in @@ -6,6 +6,21 @@ # You won't get any support for performance issue if you changed the default # schema. # +# +# Bacula® - The Network Backup Solution +# +# Copyright (C) 2000-2014 Free Software Foundation Europe e.V. +# +# The main author of Bacula is Kern Sibbald, with contributions from many +# others, a complete list can be found in the file AUTHORS. +# +# You may use this file and others of this release according to the +# license defined in the LICENSE file, which includes the Affero General +# Public License, v3.0 ("AGPLv3") and some additional permissions and +# terms pursuant to its AGPLv3 Section 7. +# +# Bacula® is a registered trademark of Kern Sibbald. +# bindir=@MYSQL_BINDIR@ PATH="$bindir:$PATH" db_name=${db_name:-@db_name@} diff --git a/bacula/src/cats/make_postgresql_tables.in b/bacula/src/cats/make_postgresql_tables.in index 9e570880b1..bc5435c6b1 100644 --- a/bacula/src/cats/make_postgresql_tables.in +++ b/bacula/src/cats/make_postgresql_tables.in @@ -6,6 +6,21 @@ # You won't get any support for performance issue if you changed the default # schema. # +# +# Bacula® - The Network Backup Solution +# +# Copyright (C) 2000-2014 Free Software Foundation Europe e.V. +# +# The main author of Bacula is Kern Sibbald, with contributions from many +# others, a complete list can be found in the file AUTHORS. +# +# You may use this file and others of this release according to the +# license defined in the LICENSE file, which includes the Affero General +# Public License, v3.0 ("AGPLv3") and some additional permissions and +# terms pursuant to its AGPLv3 Section 7. +# +# Bacula® is a registered trademark of Kern Sibbald. +# bindir=@POSTGRESQL_BINDIR@ PATH="$bindir:$PATH" db_name=${db_name:-@db_name@} @@ -53,7 +68,7 @@ CREATE TABLE File JobId integer not null, PathId integer not null, FilenameId integer not null, - DeltaSeq smallint not null default 0, + DeltaSeq smallint not null default 0, MarkId integer not null default 0, LStat text not null, Md5 text not null, diff --git a/bacula/src/cats/make_sqlite3_tables.in b/bacula/src/cats/make_sqlite3_tables.in index 648993882e..b87be080b4 100644 --- a/bacula/src/cats/make_sqlite3_tables.in +++ b/bacula/src/cats/make_sqlite3_tables.in @@ -1,6 +1,21 @@ #!/bin/sh # # shell script to create Bacula SQLite tables +# +# Bacula® - The Network Backup Solution +# +# Copyright (C) 2000-2014 Free Software Foundation Europe e.V. +# +# The main author of Bacula is Kern Sibbald, with contributions from many +# others, a complete list can be found in the file AUTHORS. +# +# You may use this file and others of this release according to the +# license defined in the LICENSE file, which includes the Affero General +# Public License, v3.0 ("AGPLv3") and some additional permissions and +# terms pursuant to its AGPLv3 Section 7. +# +# Bacula® is a registered trademark of Kern Sibbald. +# bindir=@SQLITE_BINDIR@ PATH="$bindir:$PATH" diff --git a/bacula/src/cats/myingres.c b/bacula/src/cats/myingres.c deleted file mode 100644 index e13e7515be..0000000000 --- a/bacula/src/cats/myingres.c +++ /dev/null @@ -1,912 +0,0 @@ -/* - Bacula® - The Network Backup Solution - Copyright (C) 2009-2010 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. - Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. -*/ -/* - * Bacula Catalog Database routines specific to Ingres - * These are Ingres specific routines - * - * Stefan Reddig, June 2009 with help of Marco van Wieringen April 2010 - */ -#include "bacula.h" -/* # line 37 "myingres.sc" */ -#ifdef HAVE_INGRES -#include -#include -#include -#include -#include -#include -#include -#include "myingres.h" - -#ifdef __cplusplus -extern "C" { -#endif -IISQLCA *IIsqlca(); -#ifdef __cplusplus -} -#endif -#define sqlca (*(IIsqlca())) - -/* - * ---Implementations--- - */ -int INGgetCols(INGconn *dbconn, const char *query, bool explicit_commit) -{ -/* # line 52 "myingres.sc" */ - - int sess_id; - char *stmt; -/* # line 55 "myingres.sc" */ - - IISQLDA *sqlda; - int number = -1; - sqlda = (IISQLDA *)malloc(IISQDA_HEAD_SIZE + IISQDA_VAR_SIZE); - memset(sqlda, 0, (IISQDA_HEAD_SIZE + IISQDA_VAR_SIZE)); - sqlda->sqln = number; - stmt = bstrdup(query); -/* # line 68 "myingres.sc" */ /* host code */ - /* - * Switch to the correct default session for this thread. - */ - sess_id = dbconn->session_id; -/* # line 72 "myingres.sc" */ /* set_sql */ - { - IILQssSetSqlio(11,(short *)0,1,30,sizeof(sess_id),&sess_id); - } -/* # line 74 "myingres.sc" */ /* prepare */ - { - IIsqInit(&sqlca); - IIsqPrepare(0,(char *)"s1",sqlda,0,stmt); - if (sqlca.sqlcode < 0) - goto bail_out; - } -/* # line 78 "myingres.sc" */ /* host code */ - number = sqlda->sqld; -bail_out: - /* - * If explicit_commit is set we commit our work now. - */ - if (explicit_commit) { -/* # line 85 "myingres.sc" */ /* commit */ - { - IIsqInit(&sqlca); - IIxact(3); - } -/* # line 86 "myingres.sc" */ /* host code */ - } - /* - * Switch to no default session for this thread. - */ -/* # line 91 "myingres.sc" */ /* set_sql */ - { - IILQssSetSqlio(11,(short *)0,1,30,sizeof(-97),(void *)IILQint(-97)); - } -/* # line 92 "myingres.sc" */ /* host code */ - free(stmt); - free(sqlda); - return number; -} -static inline IISQLDA *INGgetDescriptor(int numCols, const char *query) -{ -/* # line 99 "myingres.sc" */ - - char *stmt; -/* # line 101 "myingres.sc" */ - - int i; - IISQLDA *sqlda; - sqlda = (IISQLDA *)malloc(IISQDA_HEAD_SIZE + (numCols * IISQDA_VAR_SIZE)); - memset(sqlda, 0, (IISQDA_HEAD_SIZE + (numCols * IISQDA_VAR_SIZE))); - sqlda->sqln = numCols; - stmt = bstrdup(query); -/* # line 112 "myingres.sc" */ /* prepare */ - { - IIsqInit(&sqlca); - IIsqPrepare(0,(char *)"s2",sqlda,0,stmt); - } -/* # line 114 "myingres.sc" */ /* host code */ - for (i = 0; i < sqlda->sqld; ++i) { - /* - * Negative type indicates nullable columns, so an indicator - * is allocated, otherwise it's null - */ - if (sqlda->sqlvar[i].sqltype > 0) { - sqlda->sqlvar[i].sqlind = NULL; - } else { - sqlda->sqlvar[i].sqlind = (short *)malloc(sizeof(short)); - } - /* - * Alloc space for variable like indicated in sqllen - * for date types sqllen is always 0 -> allocate by type - */ - switch (abs(sqlda->sqlvar[i].sqltype)) { - case IISQ_TSW_TYPE: - sqlda->sqlvar[i].sqldata = (char *)malloc(IISQ_TSW_LEN); - break; - case IISQ_TSWO_TYPE: - sqlda->sqlvar[i].sqldata = (char *)malloc(IISQ_TSWO_LEN); - break; - case IISQ_TSTMP_TYPE: - sqlda->sqlvar[i].sqldata = (char *)malloc(IISQ_TSTMP_LEN); - break; - default: - /* - * plus one to avoid zero mem allocs - */ - sqlda->sqlvar[i].sqldata = (char *)malloc(sqlda->sqlvar[i].sqllen + 1); - break; - } - } - free(stmt); - return sqlda; -} -static void INGfreeDescriptor(IISQLDA *sqlda) -{ - int i; - if (!sqlda) { - return; - } - for (i = 0; i < sqlda->sqld; ++i) { - if (sqlda->sqlvar[i].sqldata) { - free(sqlda->sqlvar[i].sqldata); - } - if (sqlda->sqlvar[i].sqlind) { - free(sqlda->sqlvar[i].sqlind); - } - } - free(sqlda); -} -static inline int INGgetTypeSize(IISQLVAR *ingvar) -{ - int inglength = 0; - switch (ingvar->sqltype) { - case IISQ_TSWO_TYPE: - inglength = 20; - break; - case IISQ_TSW_TYPE: - inglength = 20; - break; - case IISQ_DTE_TYPE: - inglength = 25; - break; - case IISQ_MNY_TYPE: - inglength = 8; - break; - default: - inglength = ingvar->sqllen; - break; - } - return inglength; -} -static inline INGresult *INGgetINGresult(int numCols, const char *query) -{ - int i; - INGresult *ing_res; - ing_res = (INGresult *)malloc(sizeof(INGresult)); - memset(ing_res, 0, sizeof(INGresult)); - if ((ing_res->sqlda = INGgetDescriptor(numCols, query)) == NULL) { - return NULL; - } - ing_res->num_fields = ing_res->sqlda->sqld; - ing_res->num_rows = 0; - ing_res->first_row = NULL; - ing_res->status = ING_EMPTY_RESULT; - ing_res->act_row = NULL; - if (ing_res->num_fields) { - ing_res->fields = (INGRES_FIELD *)malloc(sizeof(INGRES_FIELD) * ing_res->num_fields); - memset(ing_res->fields, 0, sizeof(INGRES_FIELD) * ing_res->num_fields); - for (i = 0; i < ing_res->num_fields; ++i) { - ing_res->fields[i].name = (char *)malloc(ing_res->sqlda->sqlvar[i].sqlname.sqlnamel + 1); - bstrncpy(ing_res->fields[i].name, ing_res->sqlda->sqlvar[i].sqlname.sqlnamec, ing_res->sqlda->sqlvar[i].sqlname.sqlnamel + 1); - ing_res->fields[i].name[ing_res->sqlda->sqlvar[i].sqlname.sqlnamel] = '\0'; - ing_res->fields[i].max_length = INGgetTypeSize(&ing_res->sqlda->sqlvar[i]); - ing_res->fields[i].type = abs(ing_res->sqlda->sqlvar[i].sqltype); - ing_res->fields[i].flags = (ing_res->sqlda->sqlvar[i].sqltype < 0) ? 1 : 0; - } - } - return ing_res; -} -static inline void INGfreeRowSpace(ING_ROW *row, IISQLDA *sqlda) -{ - int i; - if (row == NULL || sqlda == NULL) { - return; - } - for (i = 0; i < sqlda->sqld; ++i) { - if (row->sqlvar[i].sqldata) { - free(row->sqlvar[i].sqldata); - } - if (row->sqlvar[i].sqlind) { - free(row->sqlvar[i].sqlind); - } - } - free(row->sqlvar); - free(row); -} -static void INGfreeINGresult(INGresult *ing_res) -{ - int i; - int rows; - ING_ROW *rowtemp; - if (!ing_res) { - return; - } - /* - * Use of rows is a nasty workaround til I find the reason, - * why aggregates like max() don't work - */ - rows = ing_res->num_rows; - ing_res->act_row = ing_res->first_row; - while (ing_res->act_row != NULL && rows > 0) { - rowtemp = ing_res->act_row->next; - INGfreeRowSpace(ing_res->act_row, ing_res->sqlda); - ing_res->act_row = rowtemp; - --rows; - } - if (ing_res->fields) { - for (i = 0; i < ing_res->num_fields; ++i) { - free(ing_res->fields[i].name); - } - free(ing_res->fields); - } - INGfreeDescriptor(ing_res->sqlda); - free(ing_res); -} -static inline ING_ROW *INGgetRowSpace(INGresult *ing_res) -{ - int i; - unsigned short len; /* used for VARCHAR type length */ - unsigned short th, tm, ts; - IISQLDA *sqlda; - ING_ROW *row = NULL; - ING_TIMESTAMP *tsp; - IISQLVAR *vars = NULL; - row = (ING_ROW *)malloc(sizeof(ING_ROW)); - memset(row, 0, sizeof(ING_ROW)); - sqlda = ing_res->sqlda; - vars = (IISQLVAR *)malloc(sizeof(IISQLVAR) * sqlda->sqld); - memset(vars, 0, sizeof(IISQLVAR) * sqlda->sqld); - row->sqlvar = vars; - row->next = NULL; - for (i = 0; i < sqlda->sqld; ++i) { - /* - * Make strings out of the data, then the space and assign - * (why string? at least it seems that way, looking into the sources) - */ - vars[i].sqlind = (short *)malloc(sizeof(short)); - if (sqlda->sqlvar[i].sqlind) { - memcpy(vars[i].sqlind,sqlda->sqlvar[i].sqlind,sizeof(short)); - } else { - *vars[i].sqlind = NULL; - } - /* - * if sqlind pointer exists AND points to -1 -> column is 'null' - */ - if ( *vars[i].sqlind && (*vars[i].sqlind == -1)) { - vars[i].sqldata = NULL; - } else { - switch (ing_res->fields[i].type) { - case IISQ_VCH_TYPE: - case IISQ_LVCH_TYPE: - case IISQ_VBYTE_TYPE: - case IISQ_LBYTE_TYPE: - case IISQ_NVCHR_TYPE: - case IISQ_LNVCHR_TYPE: - len = ((ING_VARCHAR *)sqlda->sqlvar[i].sqldata)->len; - vars[i].sqldata = (char *)malloc(len + 1); - memcpy(vars[i].sqldata,sqlda->sqlvar[i].sqldata + 2,len); - vars[i].sqldata[len] = '\0'; - break; - case IISQ_CHA_TYPE: - case IISQ_BYTE_TYPE: - case IISQ_NCHR_TYPE: - vars[i].sqldata = (char *)malloc(ing_res->fields[i].max_length + 1); - memcpy(vars[i].sqldata,sqlda->sqlvar[i].sqldata,sqlda->sqlvar[i].sqllen); - vars[i].sqldata[ing_res->fields[i].max_length] = '\0'; - break; - case IISQ_INT_TYPE: - switch (sqlda->sqlvar[i].sqllen) { - case 2: - vars[i].sqldata = (char *)malloc(6); - memset(vars[i].sqldata, 0, 6); - bsnprintf(vars[i].sqldata, 6, "%d",*(int16_t *)sqlda->sqlvar[i].sqldata); - break; - case 4: - vars[i].sqldata = (char *)malloc(11); - memset(vars[i].sqldata, 0, 11); - bsnprintf(vars[i].sqldata, 11, "%ld",*(int32_t *)sqlda->sqlvar[i].sqldata); - break; - case 8: - vars[i].sqldata = (char *)malloc(20); - memset(vars[i].sqldata, 0, 20); - bsnprintf(vars[i].sqldata, 20, "%lld",*(int64_t *)sqlda->sqlvar[i].sqldata); - break; - } - break; - case IISQ_TSTMP_TYPE: - vars[i].sqldata = (char *)malloc(IISQ_TSTMP_LEN + 1); - vars[i].sqldata[IISQ_TSTMP_LEN] = '\0'; - break; - case IISQ_TSWO_TYPE: - tsp = (ING_TIMESTAMP *)sqlda->sqlvar[i].sqldata; - th = tsp->secs / 3600; /* hours */ - tm = tsp->secs % 3600; /* remaining seconds */ - tm = tm / 60; /* minutes */ - ts = tsp->secs - (th * 3600) - (tm * 60); /* seconds */ - vars[i].sqldata = (char *)malloc(IISQ_TSTMP_LEN + 1); - bsnprintf(vars[i].sqldata, IISQ_TSWO_LEN + 1, - "%04u-%02u-%02u %02u:%02u:%02u", - tsp->year, tsp->month, tsp->day, th, tm, ts); - break; - case IISQ_TSW_TYPE: - tsp = (ING_TIMESTAMP *)sqlda->sqlvar[i].sqldata; - th = tsp->secs / 3600; /* hours */ - tm = tsp->secs % 3600; /* remaining seconds */ - tm = tm / 60; /* minutes */ - ts = tsp->secs - (th * 3600) - (tm * 60); /* seconds */ - vars[i].sqldata = (char *)malloc(IISQ_TSW_LEN + 1); - bsnprintf(vars[i].sqldata, IISQ_TSW_LEN + 1, - "%04u-%02u-%02u %02u:%02u:%02u", - tsp->year, tsp->month, tsp->day, th, tm, ts); - break; - default: - Jmsg(NULL, M_FATAL, 0, - "INGgetRowSpace: encountered unhandled database datatype %d please report this as a bug\n", - ing_res->fields[i].type); - break; - } - } - } - return row; -} -static inline int INGfetchAll(INGresult *ing_res) -{ - ING_ROW *row; - IISQLDA *desc; - int linecount = -1; - desc = ing_res->sqlda; -/* # line 409 "myingres.sc" */ /* open */ - { - IIsqInit(&sqlca); - IIcsOpen((char *)"c2",20273,8927); - IIwritio(0,(short *)0,1,32,0,(char *)"s2"); - IIcsQuery((char *)"c2",20273,8927); - if (sqlca.sqlcode < 0) - goto bail_out; - } -/* # line 413 "myingres.sc" */ /* host code */ - linecount = 0; - do { -/* # line 415 "myingres.sc" */ /* fetch */ - { - IIsqInit(&sqlca); - if (IIcsRetScroll((char *)"c2",20273,8927,-1,-1) != 0) { - IIcsDaGet(0,desc); - IIcsERetrieve(); - } /* IIcsRetrieve */ - } -/* # line 417 "myingres.sc" */ /* host code */ - if (sqlca.sqlcode == 0 || sqlca.sqlcode == -40202) { - /* - * Allocate space for fetched row - */ - row = INGgetRowSpace(ing_res); - /* - * Initialize list when encountered first time - */ - if (ing_res->first_row == 0) { - ing_res->first_row = row; /* head of the list */ - ing_res->first_row->next = NULL; - ing_res->act_row = ing_res->first_row; - } - ing_res->act_row->next = row; /* append row to old act_row */ - ing_res->act_row = row; /* set row as act_row */ - row->row_number = linecount++; - } - } while ( (sqlca.sqlcode == 0) || (sqlca.sqlcode == -40202) ); -/* # line 438 "myingres.sc" */ /* close */ - { - IIsqInit(&sqlca); - IIcsClose((char *)"c2",20273,8927); - } -/* # line 440 "myingres.sc" */ /* host code */ - ing_res->status = ING_COMMAND_OK; - ing_res->num_rows = linecount; -bail_out: - return linecount; -} -static inline ING_STATUS INGresultStatus(INGresult *ing_res) -{ - if (ing_res == NULL) { - return ING_NO_RESULT; - } else { - return ing_res->status; - } -} -static void INGrowSeek(INGresult *ing_res, int row_number) -{ - ING_ROW *trow = NULL; - if (ing_res->act_row->row_number == row_number) { - return; - } - /* - * TODO: real error handling - */ - if (row_number < 0 || row_number > ing_res->num_rows) { - return; - } - for (trow = ing_res->first_row; trow->row_number != row_number; trow = trow->next) ; - ing_res->act_row = trow; - /* - * Note - can be null - if row_number not found, right? - */ -} -char *INGgetvalue(INGresult *ing_res, int row_number, int column_number) -{ - if (row_number != ing_res->act_row->row_number) { - INGrowSeek(ing_res, row_number); - } - return ing_res->act_row->sqlvar[column_number].sqldata; -} -bool INGgetisnull(INGresult *ing_res, int row_number, int column_number) -{ - if (row_number != ing_res->act_row->row_number) { - INGrowSeek(ing_res, row_number); - } - return (*ing_res->act_row->sqlvar[column_number].sqlind == -1) ? true : false; -} -int INGntuples(const INGresult *ing_res) -{ - return ing_res->num_rows; -} -int INGnfields(const INGresult *ing_res) -{ - return ing_res->num_fields; -} -char *INGfname(const INGresult *ing_res, int column_number) -{ - if ((column_number > ing_res->num_fields) || (column_number < 0)) { - return NULL; - } else { - return ing_res->fields[column_number].name; - } -} -short INGftype(const INGresult *ing_res, int column_number) -{ - return ing_res->fields[column_number].type; -} -int INGexec(INGconn *dbconn, const char *query, bool explicit_commit) -{ -/* # line 522 "myingres.sc" */ - - int sess_id; - int rowcount; - int errors; - char *stmt; -/* # line 527 "myingres.sc" */ - - rowcount = -1; - stmt = bstrdup(query); -/* # line 534 "myingres.sc" */ /* host code */ - /* - * Switch to the correct default session for this thread. - */ - sess_id = dbconn->session_id; -/* # line 538 "myingres.sc" */ /* set_sql */ - { - IILQssSetSqlio(11,(short *)0,1,30,sizeof(sess_id),&sess_id); - } -/* # line 540 "myingres.sc" */ /* execute */ - { - IIsqInit(&sqlca); - IIsqExImmed(stmt); - IIsyncup((char *)0,0); - if (sqlca.sqlcode < 0) - goto bail_out; - } -/* # line 541 "myingres.sc" */ /* inquire_ingres */ - { - IILQisInqSqlio((short *)0,1,30,sizeof(rowcount),&rowcount,8); - } -/* # line 543 "myingres.sc" */ /* host code */ - /* - * See if the negative rowcount is due to errors. - */ - if (rowcount < 0) { -/* # line 547 "myingres.sc" */ /* inquire_ingres */ - { - IILQisInqSqlio((short *)0,1,30,sizeof(errors),&errors,0); - } -/* # line 549 "myingres.sc" */ /* host code */ - /* - * If the number of errors is 0 we got a negative rowcount - * because the statement we executed doesn't give a rowcount back. - * Lets pretend we have a rowcount of 1 then. - */ - if (errors == 0) { - rowcount = 1; - } - } -/* # line 561 "myingres.sc" */ /* host code */ -bail_out: - /* - * If explicit_commit is set we commit our work now. - */ - if (explicit_commit) { -/* # line 566 "myingres.sc" */ /* commit */ - { - IIsqInit(&sqlca); - IIxact(3); - } -/* # line 567 "myingres.sc" */ /* host code */ - } - /* - * Switch to no default session for this thread. - */ -/* # line 572 "myingres.sc" */ /* set_sql */ - { - IILQssSetSqlio(11,(short *)0,1,30,sizeof(-97),(void *)IILQint(-97)); - } -/* # line 573 "myingres.sc" */ /* host code */ - free(stmt); - return rowcount; -} -INGresult *INGquery(INGconn *dbconn, const char *query, bool explicit_commit) -{ - /* - * TODO: error handling - */ - INGresult *ing_res = NULL; - int rows; - int cols; -/* # line 585 "myingres.sc" */ - - int sess_id; -/* # line 587 "myingres.sc" */ - - cols = INGgetCols(dbconn, query, explicit_commit); - /* - * Switch to the correct default session for this thread. - */ - sess_id = dbconn->session_id; -/* # line 595 "myingres.sc" */ /* set_sql */ - { - IILQssSetSqlio(11,(short *)0,1,30,sizeof(sess_id),&sess_id); - } -/* # line 597 "myingres.sc" */ /* host code */ - ing_res = INGgetINGresult(cols, query); - if (!ing_res) { - goto bail_out; - } - rows = INGfetchAll(ing_res); - if (rows < 0) { - INGfreeINGresult(ing_res); - ing_res = NULL; - goto bail_out; - } -bail_out: - /* - * If explicit_commit is set we commit our work now. - */ - if (explicit_commit) { -/* # line 615 "myingres.sc" */ /* commit */ - { - IIsqInit(&sqlca); - IIxact(3); - } -/* # line 616 "myingres.sc" */ /* host code */ - } - /* - * Switch to no default session for this thread. - */ -/* # line 621 "myingres.sc" */ /* set_sql */ - { - IILQssSetSqlio(11,(short *)0,1,30,sizeof(-97),(void *)IILQint(-97)); - } -/* # line 622 "myingres.sc" */ /* host code */ - return ing_res; -} -void INGclear(INGresult *ing_res) -{ - if (ing_res == NULL) { - return; - } - INGfreeINGresult(ing_res); -} -void INGcommit(const INGconn *dbconn) -{ -/* # line 636 "myingres.sc" */ - - int sess_id; -/* # line 638 "myingres.sc" */ - - if (dbconn != NULL) { - /* - * Switch to the correct default session for this thread. - */ - sess_id = dbconn->session_id; -/* # line 645 "myingres.sc" */ /* set_sql */ - { - IILQssSetSqlio(11,(short *)0,1,30,sizeof(sess_id),&sess_id); - } -/* # line 647 "myingres.sc" */ /* host code */ - /* - * Commit our work. - */ -/* # line 650 "myingres.sc" */ /* commit */ - { - IIsqInit(&sqlca); - IIxact(3); - } -/* # line 652 "myingres.sc" */ /* host code */ - /* - * Switch to no default session for this thread. - */ -/* # line 655 "myingres.sc" */ /* set_sql */ - { - IILQssSetSqlio(11,(short *)0,1,30,sizeof(-97),(void *)IILQint(-97)); - } -/* # line 656 "myingres.sc" */ /* host code */ - } -} -INGconn *INGconnectDB(char *dbname, char *user, char *passwd, int session_id) -{ -/* # line 661 "myingres.sc" */ - - char *ingdbname; - char *ingdbuser = NULL; - char *ingdbpasswd = NULL; - int sess_id; -/* # line 666 "myingres.sc" */ - - INGconn *dbconn = NULL; - if (dbname == NULL || strlen(dbname) == 0) { - return NULL; - } - sess_id = session_id; - ingdbname = dbname; -/* # line 678 "myingres.sc" */ /* host code */ - if (user != NULL) { - ingdbuser = user; - if (passwd != NULL) { - ingdbpasswd = passwd; -/* # line 682 "myingres.sc" */ /* connect */ - { - IIsqInit(&sqlca); - IILQsidSessID(sess_id); - IIsqUser(ingdbuser); - IIsqConnect(0,ingdbname,(char *)"-dbms_password",ingdbpasswd,(char *)0, - (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, - (char *)0, (char *)0, (char *)0, (char *)0); - if (sqlca.sqlcode < 0) - goto bail_out; - } -/* # line 687 "myingres.sc" */ /* host code */ - } else { -/* # line 688 "myingres.sc" */ /* connect */ - { - IIsqInit(&sqlca); - IILQsidSessID(sess_id); - IIsqUser(ingdbuser); - IIsqConnect(0,ingdbname,(char *)0, (char *)0, (char *)0, (char *)0, - (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, - (char *)0, (char *)0, (char *)0); - if (sqlca.sqlcode < 0) - goto bail_out; - } -/* # line 692 "myingres.sc" */ /* host code */ - } - } else { -/* # line 694 "myingres.sc" */ /* connect */ - { - IIsqInit(&sqlca); - IILQsidSessID(sess_id); - IIsqConnect(0,ingdbname,(char *)0, (char *)0, (char *)0, (char *)0, - (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, - (char *)0, (char *)0, (char *)0); - if (sqlca.sqlcode < 0) - goto bail_out; - } -/* # line 697 "myingres.sc" */ /* host code */ - } -/* # line 701 "myingres.sc" */ /* host code */ - dbconn = (INGconn *)malloc(sizeof(INGconn)); - memset(dbconn, 0, sizeof(INGconn)); - dbconn->dbname = bstrdup(ingdbname); - if (user != NULL) { - dbconn->user = bstrdup(ingdbuser); - dbconn->password = bstrdup(ingdbpasswd); - } - dbconn->session_id = sess_id; - dbconn->msg = (char *)malloc(257); - memset(dbconn->msg, 0, 257); - /* - * Switch to no default session for this thread undo default settings from SQL CONNECT. - */ -/* # line 716 "myingres.sc" */ /* set_sql */ - { - IILQssSetSqlio(11,(short *)0,1,30,sizeof(-97),(void *)IILQint(-97)); - } -/* # line 718 "myingres.sc" */ /* host code */ -bail_out: - return dbconn; -} -void INGsetDefaultLockingMode(INGconn *dbconn) -{ - /* - * Set the default Ingres session locking mode: - * - * SET LOCKMODE provides four different parameters to govern - * the nature of locking in an INGRES session: - * - * Level: This refers to the level of granularity desired when - * the table is accessed. You can specify any of the following - * locking levels: - * - * row Specifies locking at the level of the row (subject to - * escalation criteria; see below) - * page Specifies locking at the level of the data page (subject to - * escalation criteria; see below) - * table Specifies table-level locking in the database - * session Specifies the current default for your INGRES session - * system Specifies that INGRES will start with page-level locking, - * unless it estimates that more than Maxlocks pages will be - * referenced, in which case table-level locking will be used. - * - * Readlock: This refers to locking in situations where table access - * is required for reading data only (as opposed to updating - * data). You can specify any of the following Readlock modes: - * - * nolock Specifies no locking when reading data - * shared Specifies the default mode of locking when reading data - * exclusive Specifies exclusive locking when reading data (useful in - * "select-for-update" processing within a multi-statement - * transaction) - * system Specifies the general Readlock default for the INGRES system - * - * Maxlocks: This refers to an escalation factor, or number of locks on - * data pages, at which locking escalates from page-level - * to table-level. The number of locks available to you is - * dependent upon your system configuration. You can specify the - * following Maxlocks escalation factors: - * - * n A specific (integer) number of page locks to allow before - * escalating to table-level locking. The default "n" is 10, - * and "n" must be greater than 0. - * session Specifies the current Maxlocks default for your INGRES - * session - * system Specifies the general Maxlocks default for the INGRES system - * - * Note: If you specify page-level locking, and the number of locks granted - * during a query exceeds the system-wide lock limit, or if the operating - * system's locking resources are depleted, locking escalates to table-level. - * This escalation occurs automatically and is independent of the user. - * - * Timeout: This refers to a time limit, expressed in seconds, for which - * a lock request should remain pending. If INGRES cannot grant the lock - * request within the specified time, then the query that requested the - * lock aborts. You can specify the following timeout characteristics: - * - * n A specific (integer) number of seconds to wait for a lock - * (setting "n" to 0 requires INGRES to wait indefinitely for - * the lock) - * session Specifies the current timeout default for your INGRES - * session (which is also the INGRES default) - * system Specifies the general timeout default for the INGRES system - * - */ -/* # line 786 "myingres.sc" */ - - int sess_id; -/* # line 788 "myingres.sc" */ - - if (dbconn != NULL) { - /* - * Switch to the correct default session for this thread. - */ - sess_id = dbconn->session_id; -/* # line 795 "myingres.sc" */ /* set_sql */ - { - IILQssSetSqlio(11,(short *)0,1,30,sizeof(sess_id),&sess_id); - } -/* # line 797 "myingres.sc" */ /* set */ - { - IIsqInit(&sqlca); - IIwritio(0,(short *)0,1,32,0,(char *) -"set LOCKMODE session where level=row, readlock=nolock"); - IIsyncup((char *)0,0); - } -/* # line 799 "myingres.sc" */ /* host code */ - /* - * Switch to no default session for this thread. - */ -/* # line 802 "myingres.sc" */ /* set_sql */ - { - IILQssSetSqlio(11,(short *)0,1,30,sizeof(-97),(void *)IILQint(-97)); - } -/* # line 803 "myingres.sc" */ /* host code */ - } -} -void INGdisconnectDB(INGconn *dbconn) -{ -/* # line 808 "myingres.sc" */ - - int sess_id; -/* # line 810 "myingres.sc" */ - - if (dbconn != NULL) { - sess_id = dbconn->session_id; -/* # line 814 "myingres.sc" */ /* disconnect */ - { - IIsqInit(&sqlca); - IILQsidSessID(sess_id); - IIsqDisconnect(); - } -/* # line 816 "myingres.sc" */ /* host code */ - free(dbconn->dbname); - if (dbconn->user) { - free(dbconn->user); - } - if (dbconn->password) { - free(dbconn->password); - } - free(dbconn->msg); - free(dbconn); - } -} -char *INGerrorMessage(const INGconn *dbconn) -{ -/* # line 830 "myingres.sc" */ - - int sess_id; - char errbuf[256]; -/* # line 833 "myingres.sc" */ - - if (dbconn != NULL) { - /* - * Switch to the correct default session for this thread. - */ - sess_id = dbconn->session_id; -/* # line 840 "myingres.sc" */ /* set_sql */ - { - IILQssSetSqlio(11,(short *)0,1,30,sizeof(sess_id),&sess_id); - } -/* # line 842 "myingres.sc" */ /* inquire_ingres */ - { - IILQisInqSqlio((short *)0,1,32,255,errbuf,63); - } -/* # line 843 "myingres.sc" */ /* host code */ - strncpy(dbconn->msg, errbuf, sizeof(dbconn->msg)); - /* - * Switch to no default session for this thread. - */ -/* # line 848 "myingres.sc" */ /* set_sql */ - { - IILQssSetSqlio(11,(short *)0,1,30,sizeof(-97),(void *)IILQint(-97)); - } -/* # line 849 "myingres.sc" */ /* host code */ - } - return dbconn->msg; -} -/* # line 854 "myingres.sc" */ -#endif diff --git a/bacula/src/cats/myingres.h b/bacula/src/cats/myingres.h deleted file mode 100644 index ed3a685342..0000000000 --- a/bacula/src/cats/myingres.h +++ /dev/null @@ -1,97 +0,0 @@ -/* - Bacula® - The Network Backup Solution - Copyright (C) 2009-2010 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. - Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. -*/ -#ifndef _MYINGRES_SH -#define _MYINGRES_SH -#include -#include -#include - -/* ---typedefs--- */ -typedef struct ing_timestamp { - unsigned short year; - unsigned char month; - unsigned char day; - unsigned int secs; - unsigned int nsecs; - unsigned char tzh; - unsigned char tzm; -} ING_TIMESTAMP; -typedef struct ing_field { - char *name; - int max_length; - unsigned int type; - unsigned int flags; /* 1 == not null */ -} INGRES_FIELD; -typedef struct ing_row { - IISQLVAR *sqlvar; /* ptr to sqlvar[sqld] for one row */ - struct ing_row *next; - int row_number; -} ING_ROW; -typedef enum ing_status { - ING_COMMAND_OK, - ING_TUPLES_OK, - ING_NO_RESULT, - ING_NO_ROWS_PROCESSED, - ING_EMPTY_RESULT, - ING_ERROR -} ING_STATUS; -typedef struct ing_varchar { - short len; - char* value; -} ING_VARCHAR; -/* It seems, Bacula needs the complete query result stored in one data structure */ -typedef struct ing_result { - IISQLDA *sqlda; /* descriptor */ - INGRES_FIELD *fields; - int num_rows; - int num_fields; - ING_STATUS status; - ING_ROW *first_row; - ING_ROW *act_row; /* just for iterating */ -} INGresult; -typedef struct ing_conn { - char *dbname; - char *user; - char *password; - int session_id; - char *msg; -} INGconn; -/* ---Prototypes--- */ -int INGgetCols(INGconn *dbconn, const char *query, bool transaction); -char *INGgetvalue(INGresult *ing_res, int row_number, int column_number); -bool INGgetisnull(INGresult *ing_res, int row_number, int column_number); -int INGntuples(const INGresult *ing_res); -int INGnfields(const INGresult *ing_res); -char *INGfname(const INGresult *ing_res, int column_number); -short INGftype(const INGresult *ing_res, int column_number); -int INGexec(INGconn *dbconn, const char *query, bool transaction); -INGresult *INGquery(INGconn *dbconn, const char *query, bool transaction); -void INGclear(INGresult *ing_res); -void INGcommit(const INGconn *dbconn); -INGconn *INGconnectDB(char *dbname, char *user, char *passwd, int session_id); -void INGsetDefaultLockingMode(INGconn *dbconn); -void INGdisconnectDB(INGconn *dbconn); -char *INGerrorMessage(const INGconn *dbconn); -char *INGcmdTuples(INGresult *ing_res); -/* # line 109 "myingres.sh" */ -#endif /* _MYINGRES_SH */ diff --git a/bacula/src/cats/myingres.sc b/bacula/src/cats/myingres.sc deleted file mode 100644 index d91087b910..0000000000 --- a/bacula/src/cats/myingres.sc +++ /dev/null @@ -1,854 +0,0 @@ -/* - Bacula® - The Network Backup Solution - - Copyright (C) 2009-2010 Free Software Foundation Europe e.V. - - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version two of the GNU General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. - - Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. -*/ -/* - * Bacula Catalog Database routines specific to Ingres - * These are Ingres specific routines - * - * Stefan Reddig, June 2009 with help of Marco van Wieringen April 2010 - */ - -#include "bacula.h" - -#ifdef HAVE_INGRES -EXEC SQL INCLUDE SQLCA; -EXEC SQL INCLUDE SQLDA; - -#include -#include -#include - -#include "myingres.h" - -/* - * ---Implementations--- - */ -int INGgetCols(INGconn *dbconn, const char *query, bool explicit_commit) -{ - EXEC SQL BEGIN DECLARE SECTION; - int sess_id; - char *stmt; - EXEC SQL END DECLARE SECTION; - IISQLDA *sqlda; - int number = -1; - - sqlda = (IISQLDA *)malloc(IISQDA_HEAD_SIZE + IISQDA_VAR_SIZE); - memset(sqlda, 0, (IISQDA_HEAD_SIZE + IISQDA_VAR_SIZE)); - - sqlda->sqln = number; - - stmt = bstrdup(query); - - EXEC SQL WHENEVER SQLERROR GOTO bail_out; - - /* - * Switch to the correct default session for this thread. - */ - sess_id = dbconn->session_id; - EXEC SQL SET_SQL (SESSION = :sess_id); - - EXEC SQL PREPARE s1 INTO :sqlda FROM :stmt; - - EXEC SQL WHENEVER SQLERROR CONTINUE; - - number = sqlda->sqld; - -bail_out: - /* - * If explicit_commit is set we commit our work now. - */ - if (explicit_commit) { - EXEC SQL COMMIT WORK; - } - - /* - * Switch to no default session for this thread. - */ - EXEC SQL SET_SQL (SESSION = NONE); - free(stmt); - free(sqlda); - return number; -} - -static inline IISQLDA *INGgetDescriptor(int numCols, const char *query) -{ - EXEC SQL BEGIN DECLARE SECTION; - char *stmt; - EXEC SQL END DECLARE SECTION; - int i; - IISQLDA *sqlda; - - sqlda = (IISQLDA *)malloc(IISQDA_HEAD_SIZE + (numCols * IISQDA_VAR_SIZE)); - memset(sqlda, 0, (IISQDA_HEAD_SIZE + (numCols * IISQDA_VAR_SIZE))); - - sqlda->sqln = numCols; - - stmt = bstrdup(query); - - EXEC SQL PREPARE s2 INTO :sqlda FROM :stmt; - - for (i = 0; i < sqlda->sqld; ++i) { - /* - * Negative type indicates nullable columns, so an indicator - * is allocated, otherwise it's null - */ - if (sqlda->sqlvar[i].sqltype > 0) { - sqlda->sqlvar[i].sqlind = NULL; - } else { - sqlda->sqlvar[i].sqlind = (short *)malloc(sizeof(short)); - } - /* - * Alloc space for variable like indicated in sqllen - * for date types sqllen is always 0 -> allocate by type - */ - switch (abs(sqlda->sqlvar[i].sqltype)) { - case IISQ_TSW_TYPE: - sqlda->sqlvar[i].sqldata = (char *)malloc(IISQ_TSW_LEN); - break; - case IISQ_TSWO_TYPE: - sqlda->sqlvar[i].sqldata = (char *)malloc(IISQ_TSWO_LEN); - break; - case IISQ_TSTMP_TYPE: - sqlda->sqlvar[i].sqldata = (char *)malloc(IISQ_TSTMP_LEN); - break; - default: - /* - * plus one to avoid zero mem allocs - */ - sqlda->sqlvar[i].sqldata = (char *)malloc(sqlda->sqlvar[i].sqllen + 1); - break; - } - } - - free(stmt); - return sqlda; -} - -static void INGfreeDescriptor(IISQLDA *sqlda) -{ - int i; - - if (!sqlda) { - return; - } - - for (i = 0; i < sqlda->sqld; ++i) { - if (sqlda->sqlvar[i].sqldata) { - free(sqlda->sqlvar[i].sqldata); - } - if (sqlda->sqlvar[i].sqlind) { - free(sqlda->sqlvar[i].sqlind); - } - } - free(sqlda); -} - -static inline int INGgetTypeSize(IISQLVAR *ingvar) -{ - int inglength = 0; - - switch (ingvar->sqltype) { - case IISQ_TSWO_TYPE: - inglength = 20; - break; - case IISQ_TSW_TYPE: - inglength = 20; - break; - case IISQ_DTE_TYPE: - inglength = 25; - break; - case IISQ_MNY_TYPE: - inglength = 8; - break; - default: - inglength = ingvar->sqllen; - break; - } - - return inglength; -} - -static inline INGresult *INGgetINGresult(int numCols, const char *query) -{ - int i; - INGresult *ing_res; - - ing_res = (INGresult *)malloc(sizeof(INGresult)); - memset(ing_res, 0, sizeof(INGresult)); - - if ((ing_res->sqlda = INGgetDescriptor(numCols, query)) == NULL) { - return NULL; - } - - ing_res->num_fields = ing_res->sqlda->sqld; - ing_res->num_rows = 0; - ing_res->first_row = NULL; - ing_res->status = ING_EMPTY_RESULT; - ing_res->act_row = NULL; - - if (ing_res->num_fields) { - ing_res->fields = (INGRES_FIELD *)malloc(sizeof(INGRES_FIELD) * ing_res->num_fields); - memset(ing_res->fields, 0, sizeof(INGRES_FIELD) * ing_res->num_fields); - - for (i = 0; i < ing_res->num_fields; ++i) { - ing_res->fields[i].name = (char *)malloc(ing_res->sqlda->sqlvar[i].sqlname.sqlnamel + 1); - bstrncpy(ing_res->fields[i].name, ing_res->sqlda->sqlvar[i].sqlname.sqlnamec, ing_res->sqlda->sqlvar[i].sqlname.sqlnamel + 1); - ing_res->fields[i].name[ing_res->sqlda->sqlvar[i].sqlname.sqlnamel] = '\0'; - ing_res->fields[i].max_length = INGgetTypeSize(&ing_res->sqlda->sqlvar[i]); - ing_res->fields[i].type = abs(ing_res->sqlda->sqlvar[i].sqltype); - ing_res->fields[i].flags = (ing_res->sqlda->sqlvar[i].sqltype < 0) ? 1 : 0; - } - } - - return ing_res; -} - -static inline void INGfreeRowSpace(ING_ROW *row, IISQLDA *sqlda) -{ - int i; - - if (row == NULL || sqlda == NULL) { - return; - } - - for (i = 0; i < sqlda->sqld; ++i) { - if (row->sqlvar[i].sqldata) { - free(row->sqlvar[i].sqldata); - } - if (row->sqlvar[i].sqlind) { - free(row->sqlvar[i].sqlind); - } - } - free(row->sqlvar); - free(row); -} - -static void INGfreeINGresult(INGresult *ing_res) -{ - int i; - int rows; - ING_ROW *rowtemp; - - if (!ing_res) { - return; - } - - /* - * Use of rows is a nasty workaround til I find the reason, - * why aggregates like max() don't work - */ - rows = ing_res->num_rows; - ing_res->act_row = ing_res->first_row; - while (ing_res->act_row != NULL && rows > 0) { - rowtemp = ing_res->act_row->next; - INGfreeRowSpace(ing_res->act_row, ing_res->sqlda); - ing_res->act_row = rowtemp; - --rows; - } - - if (ing_res->fields) { - for (i = 0; i < ing_res->num_fields; ++i) { - free(ing_res->fields[i].name); - } - - free(ing_res->fields); - } - - INGfreeDescriptor(ing_res->sqlda); - - free(ing_res); -} - -static inline ING_ROW *INGgetRowSpace(INGresult *ing_res) -{ - int i; - unsigned short len; /* used for VARCHAR type length */ - unsigned short th, tm, ts; - IISQLDA *sqlda; - ING_ROW *row = NULL; - ING_TIMESTAMP *tsp; - IISQLVAR *vars = NULL; - - row = (ING_ROW *)malloc(sizeof(ING_ROW)); - memset(row, 0, sizeof(ING_ROW)); - - sqlda = ing_res->sqlda; - vars = (IISQLVAR *)malloc(sizeof(IISQLVAR) * sqlda->sqld); - memset(vars, 0, sizeof(IISQLVAR) * sqlda->sqld); - - row->sqlvar = vars; - row->next = NULL; - - for (i = 0; i < sqlda->sqld; ++i) { - /* - * Make strings out of the data, then the space and assign - * (why string? at least it seems that way, looking into the sources) - */ - vars[i].sqlind = (short *)malloc(sizeof(short)); - if (sqlda->sqlvar[i].sqlind) { - memcpy(vars[i].sqlind,sqlda->sqlvar[i].sqlind,sizeof(short)); - } else { - *vars[i].sqlind = NULL; - } - /* - * if sqlind pointer exists AND points to -1 -> column is 'null' - */ - if ( *vars[i].sqlind && (*vars[i].sqlind == -1)) { - vars[i].sqldata = NULL; - } else { - switch (ing_res->fields[i].type) { - case IISQ_VCH_TYPE: - case IISQ_LVCH_TYPE: - case IISQ_VBYTE_TYPE: - case IISQ_LBYTE_TYPE: - case IISQ_NVCHR_TYPE: - case IISQ_LNVCHR_TYPE: - len = ((ING_VARCHAR *)sqlda->sqlvar[i].sqldata)->len; - vars[i].sqldata = (char *)malloc(len + 1); - memcpy(vars[i].sqldata,sqlda->sqlvar[i].sqldata + 2,len); - vars[i].sqldata[len] = '\0'; - break; - case IISQ_CHA_TYPE: - case IISQ_BYTE_TYPE: - case IISQ_NCHR_TYPE: - vars[i].sqldata = (char *)malloc(ing_res->fields[i].max_length + 1); - memcpy(vars[i].sqldata,sqlda->sqlvar[i].sqldata,sqlda->sqlvar[i].sqllen); - vars[i].sqldata[ing_res->fields[i].max_length] = '\0'; - break; - case IISQ_INT_TYPE: - switch (sqlda->sqlvar[i].sqllen) { - case 2: - vars[i].sqldata = (char *)malloc(6); - memset(vars[i].sqldata, 0, 6); - bsnprintf(vars[i].sqldata, 6, "%d",*(int16_t *)sqlda->sqlvar[i].sqldata); - break; - case 4: - vars[i].sqldata = (char *)malloc(11); - memset(vars[i].sqldata, 0, 11); - bsnprintf(vars[i].sqldata, 11, "%ld",*(int32_t *)sqlda->sqlvar[i].sqldata); - break; - case 8: - vars[i].sqldata = (char *)malloc(20); - memset(vars[i].sqldata, 0, 20); - bsnprintf(vars[i].sqldata, 20, "%lld",*(int64_t *)sqlda->sqlvar[i].sqldata); - break; - } - break; - case IISQ_TSTMP_TYPE: - vars[i].sqldata = (char *)malloc(IISQ_TSTMP_LEN + 1); - vars[i].sqldata[IISQ_TSTMP_LEN] = '\0'; - break; - case IISQ_TSWO_TYPE: - tsp = (ING_TIMESTAMP *)sqlda->sqlvar[i].sqldata; - th = tsp->secs / 3600; /* hours */ - tm = tsp->secs % 3600; /* remaining seconds */ - tm = tm / 60; /* minutes */ - ts = tsp->secs - (th * 3600) - (tm * 60); /* seconds */ - vars[i].sqldata = (char *)malloc(IISQ_TSTMP_LEN + 1); - bsnprintf(vars[i].sqldata, IISQ_TSWO_LEN + 1, - "%04u-%02u-%02u %02u:%02u:%02u", - tsp->year, tsp->month, tsp->day, th, tm, ts); - break; - case IISQ_TSW_TYPE: - tsp = (ING_TIMESTAMP *)sqlda->sqlvar[i].sqldata; - th = tsp->secs / 3600; /* hours */ - tm = tsp->secs % 3600; /* remaining seconds */ - tm = tm / 60; /* minutes */ - ts = tsp->secs - (th * 3600) - (tm * 60); /* seconds */ - vars[i].sqldata = (char *)malloc(IISQ_TSW_LEN + 1); - bsnprintf(vars[i].sqldata, IISQ_TSW_LEN + 1, - "%04u-%02u-%02u %02u:%02u:%02u", - tsp->year, tsp->month, tsp->day, th, tm, ts); - break; - default: - Jmsg(NULL, M_FATAL, 0, - "INGgetRowSpace: encountered unhandled database datatype %d please report this as a bug\n", - ing_res->fields[i].type); - break; - } - } - } - return row; -} - -static inline int INGfetchAll(INGresult *ing_res) -{ - ING_ROW *row; - IISQLDA *desc; - int linecount = -1; - - desc = ing_res->sqlda; - - EXEC SQL WHENEVER SQLERROR GOTO bail_out; - - EXEC SQL DECLARE c2 CURSOR FOR s2; - EXEC SQL OPEN c2; - - EXEC SQL WHENEVER SQLERROR CONTINUE; - - linecount = 0; - do { - EXEC SQL FETCH c2 USING DESCRIPTOR :desc; - - if (sqlca.sqlcode == 0 || sqlca.sqlcode == -40202) { - /* - * Allocate space for fetched row - */ - row = INGgetRowSpace(ing_res); - - /* - * Initialize list when encountered first time - */ - if (ing_res->first_row == 0) { - ing_res->first_row = row; /* head of the list */ - ing_res->first_row->next = NULL; - ing_res->act_row = ing_res->first_row; - } - - ing_res->act_row->next = row; /* append row to old act_row */ - ing_res->act_row = row; /* set row as act_row */ - row->row_number = linecount++; - } - } while ( (sqlca.sqlcode == 0) || (sqlca.sqlcode == -40202) ); - - EXEC SQL CLOSE c2; - - ing_res->status = ING_COMMAND_OK; - ing_res->num_rows = linecount; - -bail_out: - return linecount; -} - -static inline ING_STATUS INGresultStatus(INGresult *ing_res) -{ - if (ing_res == NULL) { - return ING_NO_RESULT; - } else { - return ing_res->status; - } -} - -static void INGrowSeek(INGresult *ing_res, int row_number) -{ - ING_ROW *trow = NULL; - - if (ing_res->act_row->row_number == row_number) { - return; - } - - /* - * TODO: real error handling - */ - if (row_number < 0 || row_number > ing_res->num_rows) { - return; - } - - for (trow = ing_res->first_row; trow->row_number != row_number; trow = trow->next) ; - ing_res->act_row = trow; - /* - * Note - can be null - if row_number not found, right? - */ -} - -char *INGgetvalue(INGresult *ing_res, int row_number, int column_number) -{ - if (row_number != ing_res->act_row->row_number) { - INGrowSeek(ing_res, row_number); - } - - return ing_res->act_row->sqlvar[column_number].sqldata; -} - -bool INGgetisnull(INGresult *ing_res, int row_number, int column_number) -{ - if (row_number != ing_res->act_row->row_number) { - INGrowSeek(ing_res, row_number); - } - - return (*ing_res->act_row->sqlvar[column_number].sqlind == -1) ? true : false; -} - -int INGntuples(const INGresult *ing_res) -{ - return ing_res->num_rows; -} - -int INGnfields(const INGresult *ing_res) -{ - return ing_res->num_fields; -} - -char *INGfname(const INGresult *ing_res, int column_number) -{ - if ((column_number > ing_res->num_fields) || (column_number < 0)) { - return NULL; - } else { - return ing_res->fields[column_number].name; - } -} - -short INGftype(const INGresult *ing_res, int column_number) -{ - return ing_res->fields[column_number].type; -} - -int INGexec(INGconn *dbconn, const char *query, bool explicit_commit) -{ - EXEC SQL BEGIN DECLARE SECTION; - int sess_id; - int rowcount; - int errors; - char *stmt; - EXEC SQL END DECLARE SECTION; - - rowcount = -1; - stmt = bstrdup(query); - - EXEC SQL WHENEVER SQLERROR GOTO bail_out; - - /* - * Switch to the correct default session for this thread. - */ - sess_id = dbconn->session_id; - EXEC SQL SET_SQL (SESSION = :sess_id); - - EXEC SQL EXECUTE IMMEDIATE :stmt; - EXEC SQL INQUIRE_INGRES(:rowcount = ROWCOUNT); - - /* - * See if the negative rowcount is due to errors. - */ - if (rowcount < 0) { - EXEC SQL INQUIRE_INGRES(:errors = DBMSERROR); - - /* - * If the number of errors is 0 we got a negative rowcount - * because the statement we executed doesn't give a rowcount back. - * Lets pretend we have a rowcount of 1 then. - */ - if (errors == 0) { - rowcount = 1; - } - } - - EXEC SQL WHENEVER SQLERROR CONTINUE; - -bail_out: - /* - * If explicit_commit is set we commit our work now. - */ - if (explicit_commit) { - EXEC SQL COMMIT WORK; - } - - /* - * Switch to no default session for this thread. - */ - EXEC SQL SET_SQL (SESSION = NONE); - free(stmt); - return rowcount; -} - -INGresult *INGquery(INGconn *dbconn, const char *query, bool explicit_commit) -{ - /* - * TODO: error handling - */ - INGresult *ing_res = NULL; - int rows; - int cols; - EXEC SQL BEGIN DECLARE SECTION; - int sess_id; - EXEC SQL END DECLARE SECTION; - - cols = INGgetCols(dbconn, query, explicit_commit); - - /* - * Switch to the correct default session for this thread. - */ - sess_id = dbconn->session_id; - EXEC SQL SET_SQL (SESSION = :sess_id); - - ing_res = INGgetINGresult(cols, query); - if (!ing_res) { - goto bail_out; - } - - rows = INGfetchAll(ing_res); - - if (rows < 0) { - INGfreeINGresult(ing_res); - ing_res = NULL; - goto bail_out; - } - -bail_out: - /* - * If explicit_commit is set we commit our work now. - */ - if (explicit_commit) { - EXEC SQL COMMIT WORK; - } - - /* - * Switch to no default session for this thread. - */ - EXEC SQL SET_SQL (SESSION = NONE); - return ing_res; -} - -void INGclear(INGresult *ing_res) -{ - if (ing_res == NULL) { - return; - } - - INGfreeINGresult(ing_res); -} - -void INGcommit(const INGconn *dbconn) -{ - EXEC SQL BEGIN DECLARE SECTION; - int sess_id; - EXEC SQL END DECLARE SECTION; - - if (dbconn != NULL) { - /* - * Switch to the correct default session for this thread. - */ - sess_id = dbconn->session_id; - EXEC SQL SET_SQL (SESSION = :sess_id); - - /* - * Commit our work. - */ - EXEC SQL COMMIT WORK; - - /* - * Switch to no default session for this thread. - */ - EXEC SQL SET_SQL (SESSION = NONE); - } -} - -INGconn *INGconnectDB(char *dbname, char *user, char *passwd, int session_id) -{ - EXEC SQL BEGIN DECLARE SECTION; - char *ingdbname; - char *ingdbuser = NULL; - char *ingdbpasswd = NULL; - int sess_id; - EXEC SQL END DECLARE SECTION; - INGconn *dbconn = NULL; - - if (dbname == NULL || strlen(dbname) == 0) { - return NULL; - } - - sess_id = session_id; - ingdbname = dbname; - - EXEC SQL WHENEVER SQLERROR GOTO bail_out; - - if (user != NULL) { - ingdbuser = user; - if (passwd != NULL) { - ingdbpasswd = passwd; - EXEC SQL CONNECT - :ingdbname - SESSION :sess_id - IDENTIFIED BY :ingdbuser - DBMS_PASSWORD = :ingdbpasswd; - } else { - EXEC SQL CONNECT - :ingdbname - SESSION :sess_id - IDENTIFIED BY :ingdbuser; - } - } else { - EXEC SQL CONNECT - :ingdbname - SESSION :sess_id; - } - - EXEC SQL WHENEVER SQLERROR CONTINUE; - - dbconn = (INGconn *)malloc(sizeof(INGconn)); - memset(dbconn, 0, sizeof(INGconn)); - - dbconn->dbname = bstrdup(ingdbname); - if (user != NULL) { - dbconn->user = bstrdup(ingdbuser); - dbconn->password = bstrdup(ingdbpasswd); - } - dbconn->session_id = sess_id; - dbconn->msg = (char *)malloc(257); - memset(dbconn->msg, 0, 257); - - /* - * Switch to no default session for this thread undo default settings from SQL CONNECT. - */ - EXEC SQL SET_SQL (SESSION = NONE); - -bail_out: - return dbconn; -} - -void INGsetDefaultLockingMode(INGconn *dbconn) -{ - /* - * Set the default Ingres session locking mode: - * - * SET LOCKMODE provides four different parameters to govern - * the nature of locking in an INGRES session: - * - * Level: This refers to the level of granularity desired when - * the table is accessed. You can specify any of the following - * locking levels: - * - * row Specifies locking at the level of the row (subject to - * escalation criteria; see below) - * page Specifies locking at the level of the data page (subject to - * escalation criteria; see below) - * table Specifies table-level locking in the database - * session Specifies the current default for your INGRES session - * system Specifies that INGRES will start with page-level locking, - * unless it estimates that more than Maxlocks pages will be - * referenced, in which case table-level locking will be used. - * - * Readlock: This refers to locking in situations where table access - * is required for reading data only (as opposed to updating - * data). You can specify any of the following Readlock modes: - * - * nolock Specifies no locking when reading data - * shared Specifies the default mode of locking when reading data - * exclusive Specifies exclusive locking when reading data (useful in - * "select-for-update" processing within a multi-statement - * transaction) - * system Specifies the general Readlock default for the INGRES system - * - * Maxlocks: This refers to an escalation factor, or number of locks on - * data pages, at which locking escalates from page-level - * to table-level. The number of locks available to you is - * dependent upon your system configuration. You can specify the - * following Maxlocks escalation factors: - * - * n A specific (integer) number of page locks to allow before - * escalating to table-level locking. The default "n" is 10, - * and "n" must be greater than 0. - * session Specifies the current Maxlocks default for your INGRES - * session - * system Specifies the general Maxlocks default for the INGRES system - * - * Note: If you specify page-level locking, and the number of locks granted - * during a query exceeds the system-wide lock limit, or if the operating - * system's locking resources are depleted, locking escalates to table-level. - * This escalation occurs automatically and is independent of the user. - * - * Timeout: This refers to a time limit, expressed in seconds, for which - * a lock request should remain pending. If INGRES cannot grant the lock - * request within the specified time, then the query that requested the - * lock aborts. You can specify the following timeout characteristics: - * - * n A specific (integer) number of seconds to wait for a lock - * (setting "n" to 0 requires INGRES to wait indefinitely for - * the lock) - * session Specifies the current timeout default for your INGRES - * session (which is also the INGRES default) - * system Specifies the general timeout default for the INGRES system - * - */ - EXEC SQL BEGIN DECLARE SECTION; - int sess_id; - EXEC SQL END DECLARE SECTION; - - if (dbconn != NULL) { - /* - * Switch to the correct default session for this thread. - */ - sess_id = dbconn->session_id; - EXEC SQL SET_SQL (SESSION = :sess_id); - - EXEC SQL SET LOCKMODE SESSION WHERE level = row, readlock = nolock; - - /* - * Switch to no default session for this thread. - */ - EXEC SQL SET_SQL (SESSION = NONE); - } -} - -void INGdisconnectDB(INGconn *dbconn) -{ - EXEC SQL BEGIN DECLARE SECTION; - int sess_id; - EXEC SQL END DECLARE SECTION; - - if (dbconn != NULL) { - sess_id = dbconn->session_id; - EXEC SQL DISCONNECT SESSION :sess_id; - - free(dbconn->dbname); - if (dbconn->user) { - free(dbconn->user); - } - if (dbconn->password) { - free(dbconn->password); - } - free(dbconn->msg); - free(dbconn); - } -} - -char *INGerrorMessage(const INGconn *dbconn) -{ - EXEC SQL BEGIN DECLARE SECTION; - int sess_id; - char errbuf[256]; - EXEC SQL END DECLARE SECTION; - - if (dbconn != NULL) { - /* - * Switch to the correct default session for this thread. - */ - sess_id = dbconn->session_id; - EXEC SQL SET_SQL (SESSION = :sess_id); - - EXEC SQL INQUIRE_INGRES (:errbuf = ERRORTEXT); - strncpy(dbconn->msg, errbuf, sizeof(dbconn->msg)); - - /* - * Switch to no default session for this thread. - */ - EXEC SQL SET_SQL (SESSION = NONE); - } - - return dbconn->msg; -} - -#endif diff --git a/bacula/src/cats/myingres.sh b/bacula/src/cats/myingres.sh deleted file mode 100644 index cc9cf3d779..0000000000 --- a/bacula/src/cats/myingres.sh +++ /dev/null @@ -1,109 +0,0 @@ -/* - Bacula® - The Network Backup Solution - - Copyright (C) 2009-2010 Free Software Foundation Europe e.V. - - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version two of the GNU General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. - - Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. -*/ -#ifndef _MYINGRES_SH -#define _MYINGRES_SH - -EXEC SQL INCLUDE SQLDA; - -/* ---typedefs--- */ - -typedef struct ing_timestamp { - unsigned short year; - unsigned char month; - unsigned char day; - unsigned int secs; - unsigned int nsecs; - unsigned char tzh; - unsigned char tzm; -} ING_TIMESTAMP; - -typedef struct ing_field { - char *name; - int max_length; - unsigned int type; - unsigned int flags; /* 1 == not null */ -} INGRES_FIELD; - -typedef struct ing_row { - IISQLVAR *sqlvar; /* ptr to sqlvar[sqld] for one row */ - struct ing_row *next; - int row_number; -} ING_ROW; - -typedef enum ing_status { - ING_COMMAND_OK, - ING_TUPLES_OK, - ING_NO_RESULT, - ING_NO_ROWS_PROCESSED, - ING_EMPTY_RESULT, - ING_ERROR -} ING_STATUS; - -typedef struct ing_varchar { - short len; - char* value; -} ING_VARCHAR; - -/* It seems, Bacula needs the complete query result stored in one data structure */ -typedef struct ing_result { - IISQLDA *sqlda; /* descriptor */ - INGRES_FIELD *fields; - int num_rows; - int num_fields; - ING_STATUS status; - ING_ROW *first_row; - ING_ROW *act_row; /* just for iterating */ -} INGresult; - -typedef struct ing_conn { - char *dbname; - char *user; - char *password; - int session_id; - char *msg; -} INGconn; - -/* ---Prototypes--- */ -int INGgetCols(INGconn *dbconn, const char *query, bool transaction); -char *INGgetvalue(INGresult *ing_res, int row_number, int column_number); -bool INGgetisnull(INGresult *ing_res, int row_number, int column_number); -int INGntuples(const INGresult *ing_res); -int INGnfields(const INGresult *ing_res); -char *INGfname(const INGresult *ing_res, int column_number); -short INGftype(const INGresult *ing_res, int column_number); -int INGexec(INGconn *dbconn, const char *query, bool transaction); -INGresult *INGquery(INGconn *dbconn, const char *query, bool transaction); -void INGclear(INGresult *ing_res); -void INGcommit(const INGconn *dbconn); -INGconn *INGconnectDB(char *dbname, char *user, char *passwd, int session_id); -void INGsetDefaultLockingMode(INGconn *dbconn); -void INGdisconnectDB(INGconn *dbconn); -char *INGerrorMessage(const INGconn *dbconn); -char *INGcmdTuples(INGresult *ing_res); - -#endif /* _MYINGRES_SH */ diff --git a/bacula/src/cats/mysql.c b/bacula/src/cats/mysql.c index a2ed279a2f..496bb8bbe1 100644 --- a/bacula/src/cats/mysql.c +++ b/bacula/src/cats/mysql.c @@ -1,38 +1,26 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2011 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Bacula Catalog Database routines specific to MySQL * These are MySQL specific routines -- hopefully all * other files are generic. * - * Kern Sibbald, March 2000 + * Written by Kern Sibbald, March 2000 * - * Major rewrite by Marco van Wieringen, January 2010 for catalog refactoring. + * Class wrapper by Marco van Wieringen, January 2010 */ #include "bacula.h" @@ -116,12 +104,12 @@ B_DB_MYSQL::B_DB_MYSQL(JCR *jcr, esc_obj = get_pool_memory(PM_FNAME); m_allow_transactions = mult_db_connections; - /* At this time, when mult_db_connections == true, this is for + /* At this time, when mult_db_connections == true, this is for * specific console command such as bvfs or batch mode, and we don't * want to share a batch mode or bvfs. In the future, we can change * the creation function to add this parameter. */ - m_dedicated = mult_db_connections; + m_dedicated = mult_db_connections; /* * Initialize the private members. @@ -307,7 +295,7 @@ void B_DB_MYSQL::db_close_database(JCR *jcr) * to cleanup any thread specific data that it created. */ void B_DB_MYSQL::db_thread_cleanup(void) -{ +{ #ifndef HAVE_WIN32 mysql_thread_end(); #endif @@ -575,7 +563,7 @@ bool B_DB_MYSQL::sql_field_is_numeric(int field_type) return IS_NUM(field_type); } -/* +/* * Returns true if OK * false if failed */ @@ -603,7 +591,7 @@ bool B_DB_MYSQL::sql_batch_start(JCR *jcr) } /* set error to something to abort operation */ -/* +/* * Returns true if OK * false if failed */ @@ -621,7 +609,7 @@ bool B_DB_MYSQL::sql_batch_end(JCR *jcr, const char *error) return true; } -/* +/* * Returns true if OK * false if failed */ diff --git a/bacula/src/cats/mysql.in b/bacula/src/cats/mysql.in index 7de7bf0904..d587785d84 100644 --- a/bacula/src/cats/mysql.in +++ b/bacula/src/cats/mysql.in @@ -2,6 +2,21 @@ # # shell script to create Bacula MySQL tables # +# +# Bacula® - The Network Backup Solution +# +# Copyright (C) 2000-2014 Free Software Foundation Europe e.V. +# +# The main author of Bacula is Kern Sibbald, with contributions from many +# others, a complete list can be found in the file AUTHORS. +# +# You may use this file and others of this release according to the +# license defined in the LICENSE file, which includes the Affero General +# Public License, v3.0 ("AGPLv3") and some additional permissions and +# terms pursuant to its AGPLv3 Section 7. +# +# Bacula® is a registered trademark of Kern Sibbald. +# bindir=@MYSQL_BINDIR@ db_name=@db_name@ diff --git a/bacula/src/cats/postgresql.c b/bacula/src/cats/postgresql.c index a35083002d..cf85e88d93 100644 --- a/bacula/src/cats/postgresql.c +++ b/bacula/src/cats/postgresql.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2003-2011 Free Software Foundation Europe e.V. + Copyright (C) 2003-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Bacula Catalog Database routines specific to PostgreSQL @@ -32,7 +20,7 @@ * Dan Langille, December 2003 * based upon work done by Kern Sibbald, March 2000 * - * Major rewrite by Marco van Wieringen, January 2010 for catalog refactoring. + * Class wrapper by Marco van Wieringen, January 2010 */ #include "bacula.h" @@ -61,15 +49,15 @@ static dlist *db_list = NULL; static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; B_DB_POSTGRESQL::B_DB_POSTGRESQL(JCR *jcr, - const char *db_driver, - const char *db_name, - const char *db_user, - const char *db_password, - const char *db_address, - int db_port, - const char *db_socket, - bool mult_db_connections, - bool disable_batch_insert) + const char *db_driver, + const char *db_name, + const char *db_user, + const char *db_password, + const char *db_address, + int db_port, + const char *db_socket, + bool mult_db_connections, + bool disable_batch_insert) { /* * Initialize the parent class members. @@ -122,12 +110,12 @@ B_DB_POSTGRESQL::B_DB_POSTGRESQL(JCR *jcr, m_buf = get_pool_memory(PM_FNAME); m_allow_transactions = mult_db_connections; - /* At this time, when mult_db_connections == true, this is for + /* At this time, when mult_db_connections == true, this is for * specific console command such as bvfs or batch mode, and we don't * want to share a batch mode or bvfs. In the future, we can change * the creation function to add this parameter. */ - m_dedicated = mult_db_connections; + m_dedicated = mult_db_connections; /* * Initialize the private members. @@ -177,12 +165,12 @@ static bool pgsql_check_database_encoding(JCR *jcr, B_DB_POSTGRESQL *mdb) /* * Something is wrong with database encoding */ - Mmsg(mdb->errmsg, + Mmsg(mdb->errmsg, _("Encoding error for database \"%s\". Wanted SQL_ASCII, got %s\n"), mdb->get_db_name(), row[0]); Jmsg(jcr, M_WARNING, 0, "%s", mdb->errmsg); Dmsg1(50, "%s", mdb->errmsg); - } + } } return ret; } @@ -256,7 +244,7 @@ bool B_DB_POSTGRESQL::db_open_database(JCR *jcr) sql_query("SET datestyle TO 'ISO, YMD'"); sql_query("SET cursor_tuple_fraction=1"); - + /* * Tell PostgreSQL we are using standard conforming strings * and avoid warnings such as: @@ -344,7 +332,7 @@ void B_DB_POSTGRESQL::db_thread_cleanup(void) void B_DB_POSTGRESQL::db_escape_string(JCR *jcr, char *snew, char *old, int len) { int error; - + PQescapeStringConn(m_db_handle, snew, old, len, &error); if (error) { Jmsg(jcr, M_FATAL, 0, _("PQescapeStringConn returned non-zero.\n")); @@ -403,7 +391,7 @@ void B_DB_POSTGRESQL::db_unescape_object(JCR *jcr, char *from, int32_t expected_ *dest = check_pool_memory_size(*dest, new_len+1); memcpy(*dest, obj, new_len); (*dest)[new_len]=0; - + PQfreemem(obj); Dmsg1(010, "obj size: %d\n", *dest_len); @@ -475,14 +463,14 @@ void B_DB_POSTGRESQL::db_end_transaction(JCR *jcr) * Submit a general SQL command (cmd), and for each row returned, * the result_handler is called with the ctx. */ -bool B_DB_POSTGRESQL::db_big_sql_query(const char *query, - DB_RESULT_HANDLER *result_handler, +bool B_DB_POSTGRESQL::db_big_sql_query(const char *query, + DB_RESULT_HANDLER *result_handler, void *ctx) { SQL_ROW row; bool retval = false; bool in_transaction = m_transaction; - + Dmsg1(500, "db_sql_query starts with '%s'\n", query); /* This code handles only SELECT queries */ @@ -519,7 +507,7 @@ bool B_DB_POSTGRESQL::db_big_sql_query(const char *query, } PQclear(m_result); m_result = NULL; - + } while (m_num_rows > 0); /* TODO: Can probably test against 100 */ sql_query("CLOSE _bac_cursor"); @@ -852,7 +840,7 @@ SQL_FIELD *B_DB_POSTGRESQL::sql_fetch_field(void) } else { this_length = cstrlen(PQgetvalue(m_result, j, i)); } - + if (max_length < this_length) { max_length = this_length; } @@ -961,7 +949,7 @@ bool B_DB_POSTGRESQL::sql_batch_start(JCR *jcr) Dmsg0(500, "sql_batch_start failed\n"); return false; } - + /* * We are starting a new query. reset everything. */ @@ -1019,18 +1007,18 @@ bool B_DB_POSTGRESQL::sql_batch_end(JCR *jcr, const char *error) Dmsg0(500, "sql_batch_end started\n"); - do { + do { res = PQputCopyEnd(m_db_handle, error); } while (res == 0 && --count > 0); if (res == 1) { Dmsg0(500, "ok\n"); - m_status = 1; + m_status = 0; } - + if (res <= 0) { Dmsg0(500, "we failed\n"); - m_status = 0; + m_status = 1; Mmsg1(&errmsg, _("error ending batch mode: %s"), PQerrorMessage(m_db_handle)); Dmsg1(500, "failure %s\n", errmsg); } @@ -1039,12 +1027,15 @@ bool B_DB_POSTGRESQL::sql_batch_end(JCR *jcr, const char *error) pg_result = PQgetResult(m_db_handle); if (PQresultStatus(pg_result) != PGRES_COMMAND_OK) { Mmsg1(&errmsg, _("error ending batch mode: %s"), PQerrorMessage(m_db_handle)); - m_status = 0; + m_status = 1; } - PQclear(pg_result); - Dmsg0(500, "sql_batch_end finishing\n"); + /* Get some statistics to compute the best plan */ + sql_query("ANALYZE batch"); + + PQclear(pg_result); + Dmsg0(500, "sql_batch_end finishing\n"); return true; } @@ -1068,11 +1059,11 @@ bool B_DB_POSTGRESQL::sql_batch_insert(JCR *jcr, ATTR_DBR *ar) digest = ar->Digest; } - len = Mmsg(cmd, "%u\t%s\t%s\t%s\t%s\t%s\t%u\n", - ar->FileIndex, edit_int64(ar->JobId, ed1), esc_path, + len = Mmsg(cmd, "%u\t%s\t%s\t%s\t%s\t%s\t%u\n", + ar->FileIndex, edit_int64(ar->JobId, ed1), esc_path, esc_name, ar->attr, digest, ar->DeltaSeq); - do { + do { res = PQputCopyData(m_db_handle, cmd, len); } while (res == 0 && --count > 0); @@ -1098,10 +1089,10 @@ bool B_DB_POSTGRESQL::sql_batch_insert(JCR *jcr, ATTR_DBR *ar) * Initialize database data structure. In principal this should * never have errors, or it is really fatal. */ -B_DB *db_init_database(JCR *jcr, const char *db_driver, const char *db_name, - const char *db_user, const char *db_password, - const char *db_address, int db_port, - const char *db_socket, bool mult_db_connections, +B_DB *db_init_database(JCR *jcr, const char *db_driver, const char *db_name, + const char *db_user, const char *db_password, + const char *db_address, int db_port, + const char *db_socket, bool mult_db_connections, bool disable_batch_insert) { B_DB_POSTGRESQL *mdb = NULL; @@ -1124,8 +1115,8 @@ B_DB *db_init_database(JCR *jcr, const char *db_driver, const char *db_name, } } Dmsg0(100, "db_init_database first time\n"); - mdb = New(B_DB_POSTGRESQL(jcr, db_driver, db_name, db_user, db_password, - db_address, db_port, db_socket, + mdb = New(B_DB_POSTGRESQL(jcr, db_driver, db_name, db_user, db_password, + db_address, db_port, db_socket, mult_db_connections, disable_batch_insert)); bail_out: diff --git a/bacula/src/cats/postgresql.in b/bacula/src/cats/postgresql.in index c6220bd32c..d890e470c7 100644 --- a/bacula/src/cats/postgresql.in +++ b/bacula/src/cats/postgresql.in @@ -2,6 +2,21 @@ # # shell script to create Bacula PostgreSQL tables # +# +# Bacula® - The Network Backup Solution +# +# Copyright (C) 2000-2014 Free Software Foundation Europe e.V. +# +# The main author of Bacula is Kern Sibbald, with contributions from many +# others, a complete list can be found in the file AUTHORS. +# +# You may use this file and others of this release according to the +# license defined in the LICENSE file, which includes the Affero General +# Public License, v3.0 ("AGPLv3") and some additional permissions and +# terms pursuant to its AGPLv3 Section 7. +# +# Bacula® is a registered trademark of Kern Sibbald. +# bindir=@POSTGRESQL_BINDIR@ db_name=@db_name@ diff --git a/bacula/src/cats/protos.h b/bacula/src/cats/protos.h index c0a4aff7f6..f4a53c6860 100644 --- a/bacula/src/cats/protos.h +++ b/bacula/src/cats/protos.h @@ -1,36 +1,24 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2009 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * * Database routines that are exported by the cats library for * use elsewhere in Bacula (mainly the Director). * - * Version $Id$ + * Written by Kern Sibbald, MM */ #ifndef __SQL_PROTOS_H @@ -49,6 +37,7 @@ int db_list_handler(void *ctx, int num_fields, char **row); void db_debug_print(JCR *jcr, FILE *fp); int db_int_handler(void *ctx, int num_fields, char **row); void db_check_backend_thread_safe(); +int db_string_list_handler(void *ctx, int num_fields, char **row); /* sql_create.c */ int db_create_path_record(JCR *jcr, B_DB *mdb, ATTR_DBR *ar); @@ -69,6 +58,7 @@ bool db_create_restore_object_record(JCR *jcr, B_DB *mdb, ROBJECT_DBR *ar); bool db_create_base_file_attributes_record(JCR *jcr, B_DB *mdb, ATTR_DBR *ar); bool db_commit_base_file_attributes_record(JCR *jcr, B_DB *mdb); bool db_create_base_file_list(JCR *jcr, B_DB *mdb, char *jobids); +void db_disable_batch_insert(bool disable); /* sql_delete.c */ int db_delete_pool_record(JCR *jcr, B_DB *db, POOL_DBR *pool_dbr); @@ -82,12 +72,13 @@ int db_find_next_volume(JCR *jcr, B_DB *mdb, int index, bool InChanger, MEDIA_DB bool db_find_failed_job_since(JCR *jcr, B_DB *mdb, JOB_DBR *jr, POOLMEM *stime, int &JobLevel); /* sql_get.c */ -bool db_get_volume_jobids(JCR *jcr, B_DB *mdb, +bool db_get_volume_jobids(JCR *jcr, B_DB *mdb, MEDIA_DBR *mr, db_list_ctx *lst); bool db_get_base_file_list(JCR *jcr, B_DB *mdb, bool use_md5, DB_RESULT_HANDLER *result_handler,void *ctx); int db_get_path_record(JCR *jcr, B_DB *mdb); -bool db_get_pool_record(JCR *jcr, B_DB *db, POOL_DBR *pdbr); +bool db_get_pool_record(JCR *jcr, B_DB *mdb, POOL_DBR *pdbr); +bool db_get_pool_numvols(JCR *jcr, B_DB *mdb, POOL_DBR *pdbr); int db_get_client_record(JCR *jcr, B_DB *mdb, CLIENT_DBR *cr); bool db_get_job_record(JCR *jcr, B_DB *mdb, JOB_DBR *jr); int db_get_job_volume_names(JCR *jcr, B_DB *mdb, JobId_t JobId, POOLMEM **VolumeNames); @@ -112,11 +103,13 @@ bool db_get_used_base_jobids(JCR *jcr, B_DB *mdb, POOLMEM *jobids, db_list_ctx * /* sql_list.c */ enum e_list_type { HORZ_LIST, - VERT_LIST + VERT_LIST, + FAILED_JOBS, + INCOMPLETE_JOBS }; void db_list_pool_records(JCR *jcr, B_DB *db, POOL_DBR *pr, DB_LIST_HANDLER sendit, void *ctx, e_list_type type); -void db_list_job_records(JCR *jcr, B_DB *db, JOB_DBR *jr, DB_LIST_HANDLER sendit, void *ctx, e_list_type type); +alist *db_list_job_records(JCR *jcr, B_DB *db, JOB_DBR *jr, DB_LIST_HANDLER sendit, void *ctx, e_list_type type); void db_list_job_totals(JCR *jcr, B_DB *db, JOB_DBR *jr, DB_LIST_HANDLER sendit, void *ctx); void db_list_files_for_job(JCR *jcr, B_DB *db, uint32_t jobid, DB_LIST_HANDLER sendit, void *ctx); void db_list_media_records(JCR *jcr, B_DB *mdb, MEDIA_DBR *mdbr, DB_LIST_HANDLER *sendit, void *ctx, e_list_type type); diff --git a/bacula/src/cats/restore_ingres_catalog_backup.in b/bacula/src/cats/restore_ingres_catalog_backup.in deleted file mode 100755 index cc07732a08..0000000000 --- a/bacula/src/cats/restore_ingres_catalog_backup.in +++ /dev/null @@ -1,52 +0,0 @@ -#!/bin/sh -# -# shell script to restore a dump of the bacula Ingres database using -# a base64 encoded tar of the content. -# - -bindir=@INGRES_BINDIR@ -PATH="$bindir:$PATH" -db_name=${db_name:-@db_name@} -db_user=${db_user:-@db_user@} -working_dir="@working_dir@" - -# -# Source the Ingres settings when they exist. -# -[ -f ${bindir}/../../.ingIIsh ] && . ${bindir}/../../.ingIIsh - -# -# See if the dumpdir exists. -# -[ ! -d ${working_dir}/ingres_dump ] && mkdir -p ${working_dir}/ingres_dump - -# -# Decode the tar and restore it. -# -cd ${working_dir}/ingres_dump || exit 1 -case `uname -s` in - Linux) - base64 -d | gzip -dc | tar xf - - ;; - SunOS) - uudecode -p | gzip -dc | tar xf - - ;; - *) - echo "Unsupported OS type encountered, `uname -s`" - exit 1 - ;; -esac - -if [ $? = 0 ]; then - # - # Restore the data - # - sql -u${db_user} ${db_name} < copy.in - sysmod ${db_name} -fi - -cd / - -rm -rf ${working_dir}/ingres_dump - -exit 0 diff --git a/bacula/src/cats/sql.c b/bacula/src/cats/sql.c index 9d589fda18..2a5af222bd 100644 --- a/bacula/src/cats/sql.c +++ b/bacula/src/cats/sql.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2009 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Bacula Catalog Database interface routines @@ -33,14 +21,13 @@ * SQL engine specific routines are in mysql.c, postgresql.c, * sqlite.c, ... * - * Kern Sibbald, March 2000 + * Written by Kern Sibbald, March 2000 * - * Version $Id: sql.c 8034 2008-11-11 14:33:46Z ricozz $ */ #include "bacula.h" -#if HAVE_SQLITE3 || HAVE_MYSQL || HAVE_POSTGRESQL || HAVE_INGRES || HAVE_DBI +#if HAVE_SQLITE3 || HAVE_MYSQL || HAVE_POSTGRESQL #include "cats.h" #include "bdb_priv.h" @@ -64,6 +51,20 @@ dbid_list::~dbid_list() free(DBId); } +/* + * Called here to retrieve an string list from the database + */ +int db_string_list_handler(void *ctx, int num_fields, char **row) +{ + alist **val = (alist **)ctx; + + if (row[0]) { + (*val)->append(bstrdup(row[0])); + } + + return 0; +} + /* * Called here to retrieve an integer from the database */ @@ -498,10 +499,10 @@ int list_result(void *vctx, int nb_col, char **row) } else { if (sql_field_is_numeric(mdb, field->type) && (int)field->max_length > 0) { /* fixup for commas */ field->max_length += (field->max_length - 1) / 3; - } + } if (col_len < (int)field->max_length) { col_len = field->max_length; - } + } if (col_len < 4 && !sql_field_is_not_null(mdb, field->flags)) { col_len = 4; /* 4 = length of the word "NULL" */ } @@ -535,9 +536,9 @@ int list_result(void *vctx, int nb_col, char **row) send(ctx, buf); } send(ctx, "\n"); - list_dashes(mdb, send, ctx); + list_dashes(mdb, send, ctx); } - + Dmsg1(800, "list_result starts third loop looking at %d fields\n", num_fields); sql_field_seek(mdb, 0); @@ -622,10 +623,10 @@ int list_result(JCR *jcr, B_DB *mdb, DB_LIST_HANDLER *send, void *ctx, e_list_ty } else { if (sql_field_is_numeric(mdb, field->type) && (int)field->max_length > 0) { /* fixup for commas */ field->max_length += (field->max_length - 1) / 3; - } + } if (col_len < (int)field->max_length) { col_len = field->max_length; - } + } if (col_len < 4 && !sql_field_is_not_null(mdb, field->flags)) { col_len = 4; /* 4 = length of the word "NULL" */ } @@ -705,7 +706,7 @@ vertical_list: return sql_num_rows(mdb); } -/* +/* * Open a new connexion to mdb catalog. This function is used * by batch and accurate mode. */ @@ -728,7 +729,7 @@ bool db_open_batch_connexion(JCR *jcr, B_DB *mdb) jcr->db_batch->get_db_name(), db_strerror(jcr->db_batch)); Jmsg(jcr, M_FATAL, 0, "%s", mdb->errmsg); return false; - } + } } return true; } @@ -752,4 +753,4 @@ void db_debug_print(JCR *jcr, FILE *fp) mdb->print_lock_info(fp); } -#endif /* HAVE_SQLITE3 || HAVE_MYSQL || HAVE_POSTGRESQL || HAVE_INGRES || HAVE_DBI */ +#endif /* HAVE_SQLITE3 || HAVE_MYSQL || HAVE_POSTGRESQL */ diff --git a/bacula/src/cats/sql_cmds.c b/bacula/src/cats/sql_cmds.c index 6ebcb6280b..c996ee2c39 100644 --- a/bacula/src/cats/sql_cmds.c +++ b/bacula/src/cats/sql_cmds.c @@ -1,35 +1,23 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2002-2010 Free Software Foundation Europe e.V. + Copyright (C) 2002-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * This file contains all the SQL commands that are either issued by the * Director or which are database backend specific. * - * Kern Sibbald, July MMII + * Written by Kern Sibbald, July MMII */ /* * Note, PostgreSQL imposes some constraints on using DISTINCT and GROUP BY @@ -316,9 +304,6 @@ const char *select_recent_version_with_basejob[] = { "ORDER BY FilenameId, PathId, JobTDate DESC ", /* SQLite3 */ - select_recent_version_with_basejob_default, - - /* Ingres */ select_recent_version_with_basejob_default }; @@ -383,9 +368,6 @@ const char *select_recent_version_with_basejob_and_delta[] = { "ORDER BY FilenameId, PathId, DeltaSeq, JobTDate DESC ", /* SQLite3 */ - select_recent_version_with_basejob_and_delta_default, - - /* Ingres */ select_recent_version_with_basejob_and_delta_default }; @@ -420,9 +402,6 @@ const char *select_recent_version[] = { "ORDER BY FilenameId, PathId, JobTDate DESC ", /* SQLite3 */ - select_recent_version_default, - - /* Ingres */ select_recent_version_default }; @@ -447,18 +426,7 @@ const char *create_temp_accurate_jobids[] = { create_temp_accurate_jobids_default, /* SQLite3 */ - create_temp_accurate_jobids_default, - - /* Ingres */ - "DECLARE GLOBAL TEMPORARY TABLE btemp3%s AS " - "SELECT JobId, StartTime, EndTime, JobTDate, PurgedFiles " - "FROM Job JOIN FileSet USING (FileSetId) " - "WHERE ClientId = %s " - "AND Level='F' AND JobStatus IN ('T','W') AND Type='B' " - "AND StartTime<'%s' " - "AND FileSet.FileSet=(SELECT FileSet FROM FileSet WHERE FileSetId = %s) " - "ORDER BY Job.JobTDate DESC FETCH FIRST 1 ROW ONLY " - "ON COMMIT PRESERVE ROWS WITH NORECOVERY" + create_temp_accurate_jobids_default }; const char *create_temp_basefile[] = { @@ -476,13 +444,7 @@ const char *create_temp_basefile[] = { /* SQLite3 */ "CREATE TEMPORARY TABLE basefile%lld (" "Path TEXT," - "Name TEXT)", - - /* Ingres */ - "DECLARE GLOBAL TEMPORARY TABLE basefile%lld (" - "Path VARBYTE(32000) NOT NULL," - "Name VARBYTE(32000) NOT NULL) " - "ON COMMIT PRESERVE ROWS WITH NORECOVERY" + "Name TEXT)" }; const char *create_temp_new_basefile[] = { @@ -514,18 +476,7 @@ const char *create_temp_new_basefile[] = { "FROM ( %s ) AS Temp " "JOIN Filename ON (Filename.FilenameId = Temp.FilenameId) " "JOIN Path ON (Path.PathId = Temp.PathId) " - "WHERE Temp.FileIndex > 0", - - /* Ingres */ - "DECLARE GLOBAL TEMPORARY TABLE new_basefile%lld AS " - "SELECT Path.Path AS Path, Filename.Name AS Name, Temp.FileIndex AS FileIndex," - "Temp.JobId AS JobId, Temp.LStat AS LStat, Temp.FileId AS FileId, " - "Temp.MD5 AS MD5 " - "FROM ( %s ) AS Temp " - "JOIN Filename ON (Filename.FilenameId = Temp.FilenameId) " - "JOIN Path ON (Path.PathId = Temp.PathId) " - "WHERE Temp.FileIndex > 0 " - "ON COMMIT PRESERVE ROWS WITH NORECOVERY" + "WHERE Temp.FileIndex > 0" }; /* ====== ua_prune.c */ @@ -554,16 +505,7 @@ const char *create_deltabs[] = { "PurgedFiles TINYINT, " "FileSetId INTEGER UNSIGNED, " "JobFiles INTEGER UNSIGNED, " - "JobStatus CHAR)", - - /* Ingres */ - "DECLARE GLOBAL TEMPORARY TABLE DelCandidates (" - "JobId INTEGER NOT NULL, " - "PurgedFiles SMALLINT, " - "FileSetId INTEGER, " - "JobFiles INTEGER, " - "JobStatus CHAR(1)) " - "ON COMMIT PRESERVE ROWS WITH NORECOVERY" + "JobStatus CHAR)" }; /* ======= ua_purge.c */ @@ -593,23 +535,7 @@ const char *uap_upgrade_copies_oldest_job[] = { uap_upgrade_copies_oldest_job_default, /* SQLite3 */ - uap_upgrade_copies_oldest_job_default, - - /* Ingres */ - "DECLARE GLOBAL TEMPORARY TABLE cpy_tmp AS " - "SELECT MIN(JobId) AS JobId FROM Job " /* Choose the oldest job */ - "WHERE Type='%c' " /* JT_JOB_COPY */ - "AND ( PriorJobId IN (%s) " /* JobId selection */ - "OR " - " PriorJobId IN ( " - "SELECT PriorJobId " - "FROM Job " - "WHERE JobId IN (%s) " /* JobId selection */ - " AND Type='B' " - ") " - ") " - "GROUP BY PriorJobId " /* one result per copy */ - "ON COMMIT PRESERVE ROWS WITH NORECOVERY" + uap_upgrade_copies_oldest_job_default }; /* ======= ua_restore.c */ @@ -644,17 +570,7 @@ const char *uar_file[] = { "AND Client.ClientId=Job.ClientId " "AND Job.JobId=File.JobId AND File.FileIndex > 0 " "AND Path.PathId=File.PathId AND Filename.FilenameId=File.FilenameId " - "AND Filename.Name='%s' ORDER BY StartTime DESC LIMIT 20", - - /* Ingres */ - "SELECT Job.JobId as JobId," - "Path.Path||Filename.Name as Name, " - "StartTime,Type as JobType,JobStatus,JobFiles,JobBytes " - "FROM Client,Job,File,Filename,Path WHERE Client.Name='%s' " - "AND Client.ClientId=Job.ClientId " - "AND Job.JobId=File.JobId AND File.FileIndex > 0 " - "AND Path.PathId=File.PathId AND Filename.FilenameId=File.FilenameId " - "AND Filename.Name='%s' ORDER BY StartTime DESC FETCH FIRST 20 ROWS ONLY" + "AND Filename.Name='%s' ORDER BY StartTime DESC LIMIT 20" }; const char *uar_create_temp[] = { @@ -698,22 +614,7 @@ const char *uar_create_temp[] = { "VolumeName TEXT," "StartFile INTEGER UNSIGNED," "VolSessionId INTEGER UNSIGNED," - "VolSessionTime INTEGER UNSIGNED)", - - /* Ingres */ - "DECLARE GLOBAL TEMPORARY TABLE temp (" - "JobId INTEGER NOT NULL," - "JobTDate BIGINT," - "ClientId INTEGER," - "Level CHAR(1)," - "JobFiles INTEGER," - "JobBytes BIGINT," - "StartTime TIMESTAMP WITHOUT TIME ZONE," - "VolumeName VARBYTE(128)," - "StartFile INTEGER," - "VolSessionId INTEGER," - "VolSessionTime INTEGER) " - "ON COMMIT PRESERVE ROWS WITH NORECOVERY" + "VolSessionTime INTEGER UNSIGNED)" }; const char *uar_create_temp1[] = { @@ -730,13 +631,7 @@ const char *uar_create_temp1[] = { /* SQLite3 */ "CREATE TEMPORARY TABLE temp1 (" "JobId INTEGER UNSIGNED NOT NULL," - "JobTDate BIGINT UNSIGNED)", - - /* Ingres */ - "DECLARE GLOBAL TEMPORARY TABLE temp1 (" - "JobId INTEGER NOT NULL," - "JobTDate BIGINT) " - "ON COMMIT PRESERVE ROWS WITH NORECOVERY" + "JobTDate BIGINT UNSIGNED)" }; /* Query to get all files in a directory -- no recursing @@ -777,17 +672,7 @@ const char *uar_jobid_fileindex_from_dir[] = { "AND Job.ClientId=Client.ClientId " "AND Path.PathId=File.Pathid " "AND Filename.FilenameId=File.FilenameId " - "GROUP BY File.FileIndex ", - - /* Ingres */ - "SELECT Job.JobId,File.FileIndex FROM Job,File,Path,Filename,Client " - "WHERE Job.JobId IN (%s) " - "AND Job.JobId=File.JobId " - "AND Path.Path='%s' " - "AND Client.Name='%s' " - "AND Job.ClientId=Client.ClientId " - "AND Path.PathId=File.Pathid " - "AND Filename.FilenameId=File.FilenameId" + "GROUP BY File.FileIndex " }; const char *sql_media_order_most_recently_written[] = { @@ -798,10 +683,7 @@ const char *sql_media_order_most_recently_written[] = { "ORDER BY LastWritten IS NULL,LastWritten DESC,MediaId", /* SQLite3 */ - "ORDER BY LastWritten IS NULL,LastWritten DESC,MediaId", - - /* Ingres */ - "ORDER BY IFNULL(LastWritten, '1970-01-01 00:00:00') DESC,MediaId" + "ORDER BY LastWritten IS NULL,LastWritten DESC,MediaId" }; const char *sql_get_max_connections[] = { @@ -812,9 +694,6 @@ const char *sql_get_max_connections[] = { "SHOW max_connections", /* SQLite3 */ - "SELECT 0", - - /* Ingres (TODO) */ "SELECT 0" }; @@ -822,7 +701,7 @@ const char *sql_get_max_connections[] = { * The Group By can return strange numbers when having multiple * version of a file in the same dataset. */ -const char *default_sql_bvfs_select = +const char *default_sql_bvfs_select = "CREATE TABLE %s AS " "SELECT File.JobId, File.FileIndex, File.FileId " "FROM Job, File, ( " @@ -852,10 +731,7 @@ const char *sql_bvfs_select[] = { "WHERE FileIndex > 0)", /* SQLite3 */ - default_sql_bvfs_select, - - /* Ingres (TODO) */ - "SELECT 0" + default_sql_bvfs_select }; static const char *sql_bvfs_list_files_default = @@ -917,12 +793,74 @@ const char *sql_bvfs_list_files[] = { sql_bvfs_list_files_default, /* SQLite3 */ - sql_bvfs_list_files_default, - - /* Ingres (TODO) */ sql_bvfs_list_files_default }; +/* Basically the same thing than select_recent_version_with_basejob_and_delta_default, + * but we specify a single file with FilenameId/PathId + * + * Input: + * 1 JobId to look at + * 2 FilenameId + * 3 PathId + * 4 JobId to look at + * 5 FilenameId + * 6 PathId + * 7 Jobid + * 8 JobId + */ +const char *bvfs_select_delta_version_with_basejob_and_delta_default = +"SELECT FileId, Job.JobId AS JobId, FileIndex, File.PathId AS PathId, " + "File.FilenameId AS FilenameId, LStat, MD5, File.DeltaSeq AS DeltaSeq, " + "Job.JobTDate AS JobTDate " +"FROM Job, File, ( " + "SELECT MAX(JobTDate) AS JobTDate, PathId, FilenameId, DeltaSeq " + "FROM ( " + "SELECT JobTDate, PathId, FilenameId, DeltaSeq " /*Get all normal files*/ + "FROM File JOIN Job USING (JobId) " /* from selected backup */ + "WHERE File.JobId IN (%s) AND FilenameId = %s AND PathId = %s " + "UNION ALL " + "SELECT JobTDate, PathId, FilenameId, DeltaSeq " /*Get all files from */ + "FROM BaseFiles " /* BaseJob */ + "JOIN File USING (FileId) " + "JOIN Job ON (BaseJobId = Job.JobId) " + "WHERE BaseFiles.JobId IN (%s) " /* Use Max(JobTDate) to find */ + " AND FilenameId = %s AND PathId = %s " + ") AS tmp " + "GROUP BY PathId, FilenameId, DeltaSeq " /* the latest file version */ + ") AS T1 " +"WHERE (Job.JobId IN ( " /* Security, we force JobId to be valid */ + "SELECT DISTINCT BaseJobId FROM BaseFiles WHERE JobId IN (%s)) " + "OR Job.JobId IN (%s)) " + "AND T1.JobTDate = Job.JobTDate " /* Join on JobTDate to get the orginal */ + "AND Job.JobId = File.JobId " /* Job/File record */ + "AND T1.PathId = File.PathId " + "AND T1.FilenameId = File.FilenameId"; + + +const char *bvfs_select_delta_version_with_basejob_and_delta[] = { + /* MySQL */ + bvfs_select_delta_version_with_basejob_and_delta_default, + + /* Postgresql */ /* The DISTINCT ON () permits to avoid extra join */ + "SELECT DISTINCT ON (FilenameId, PathId, DeltaSeq) JobTDate, JobId, FileId, " + "FileIndex, PathId, FilenameId, LStat, MD5, DeltaSeq " + "FROM " + "(SELECT FileId, JobId, PathId, FilenameId, FileIndex, LStat, MD5,DeltaSeq " + "FROM File WHERE JobId IN (%s) AND FilenameId = %s AND PathId = %s " + "UNION ALL " + "SELECT File.FileId, File.JobId, PathId, FilenameId, " + "File.FileIndex, LStat, MD5, DeltaSeq " + "FROM BaseFiles JOIN File USING (FileId) " + "WHERE BaseFiles.JobId IN (%s) AND FilenameId = %s AND PathId = %s " + ") AS T JOIN Job USING (JobId) " + "ORDER BY FilenameId, PathId, DeltaSeq, JobTDate DESC ", + + /* SQLite3 */ + bvfs_select_delta_version_with_basejob_and_delta_default +}; + + const char *batch_lock_path_query[] = { /* Mysql */ "LOCK TABLES Path write, batch write, Path as p write", @@ -931,9 +869,6 @@ const char *batch_lock_path_query[] = { "BEGIN; LOCK TABLE Path IN SHARE ROW EXCLUSIVE MODE", /* SQLite3 */ - "BEGIN", - - /* Ingres */ "BEGIN" }; @@ -945,9 +880,6 @@ const char *batch_lock_filename_query[] = { "BEGIN; LOCK TABLE Filename IN SHARE ROW EXCLUSIVE MODE", /* SQLite3 */ - "BEGIN", - - /* Ingres */ "BEGIN" }; @@ -959,9 +891,6 @@ const char *batch_unlock_tables_query[] = { "COMMIT", /* SQLite3 */ - "COMMIT", - - /* Ingres */ "COMMIT" }; @@ -981,12 +910,7 @@ const char *batch_fill_path_query[] = { /* SQLite3 */ "INSERT INTO Path (Path) " "SELECT DISTINCT Path FROM batch " - "EXCEPT SELECT Path FROM Path", - - /* Ingres */ - "INSERT INTO Path (Path) " - "SELECT DISTINCT b.Path FROM batch b " - "WHERE NOT EXISTS (SELECT Path FROM Path p WHERE p.Path = b.Path)" + "EXCEPT SELECT Path FROM Path" }; const char *batch_fill_filename_query[] = { @@ -1006,12 +930,7 @@ const char *batch_fill_filename_query[] = { /* SQLite3 */ "INSERT INTO Filename (Name) " "SELECT DISTINCT Name FROM batch " - "EXCEPT SELECT Name FROM Filename", - - /* Ingres */ - "INSERT INTO Filename (Name) " - "SELECT DISTINCT b.Name FROM batch b " - "WHERE NOT EXISTS (SELECT Name FROM Filename f WHERE f.Name = b.Name)" + "EXCEPT SELECT Name FROM Filename" }; const char *match_query[] = { @@ -1022,10 +941,7 @@ const char *match_query[] = { "~", /* SQLite3 */ - "LIKE", /* MATCH doesn't seems to work anymore... */ - - /* Ingres */ - "~" + "LIKE" /* MATCH doesn't seems to work anymore... */ }; static const char *insert_counter_values_default = @@ -1043,9 +959,6 @@ const char *insert_counter_values[] = { insert_counter_values_default, /* SQLite3 */ - insert_counter_values_default, - - /* Ingres */ insert_counter_values_default }; @@ -1062,9 +975,6 @@ const char *select_counter_values[] = { select_counter_values_default, /* SQLite3 */ - select_counter_values_default, - - /* Ingres */ select_counter_values_default }; @@ -1083,8 +993,28 @@ const char *update_counter_values[] = { update_counter_values_default, /* SQLite3 */ - update_counter_values_default, - - /* Ingres */ update_counter_values_default }; + +static const char *expired_volumes_defaults = +"SELECT Media.VolumeName AS volumename, " + "Media.LastWritten AS lastwritten " +" FROM Media " +" WHERE VolStatus IN ('Full', 'Used') " + " AND ( Media.LastWritten + Media.VolRetention ) < NOW() " + " %s "; + +const char *expired_volumes[] = { + /* Mysql */ + expired_volumes_defaults, + + /* Postgresql */ + "SELECT Media.VolumeName, Media.LastWritten " + " FROM Media " + " WHERE VolStatus IN ('Full', 'Used') " + " AND ( Media.LastWritten + (interval '1 second' * Media.VolRetention ) < NOW()) " + " %s ", + + /* SQLite3 */ + expired_volumes_defaults +}; diff --git a/bacula/src/cats/sql_cmds.h b/bacula/src/cats/sql_cmds.h index 9ffbc9d93f..9f989783b2 100644 --- a/bacula/src/cats/sql_cmds.h +++ b/bacula/src/cats/sql_cmds.h @@ -1,89 +1,74 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2010 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ -extern const char CATS_IMP_EXP *get_restore_objects; -extern const char CATS_IMP_EXP *fill_jobhisto; +extern const char CATS_IMP_EXP *batch_fill_filename_query[]; +extern const char CATS_IMP_EXP *batch_fill_path_query[]; +extern const char CATS_IMP_EXP *batch_lock_filename_query[]; +extern const char CATS_IMP_EXP *batch_lock_path_query[]; +extern const char CATS_IMP_EXP *batch_unlock_tables_query[]; +extern const char CATS_IMP_EXP *cleanup_created_job; +extern const char CATS_IMP_EXP *cleanup_running_job; extern const char CATS_IMP_EXP *client_backups; -extern const char CATS_IMP_EXP *list_pool; -extern const char CATS_IMP_EXP *drop_deltabs[]; -extern const char CATS_IMP_EXP *create_delindex; extern const char CATS_IMP_EXP *cnt_File; +extern const char CATS_IMP_EXP *create_delindex; +extern const char CATS_IMP_EXP *create_deltabs[]; +extern const char CATS_IMP_EXP *create_temp_accurate_jobids[]; +extern const char CATS_IMP_EXP *create_temp_basefile[]; +extern const char CATS_IMP_EXP *create_temp_new_basefile[]; extern const char CATS_IMP_EXP *del_MAC; +extern const char CATS_IMP_EXP *drop_deltabs[]; +extern const char CATS_IMP_EXP *expired_volumes[]; +extern const char CATS_IMP_EXP *fill_jobhisto; +extern const char CATS_IMP_EXP *get_restore_objects; +extern const char CATS_IMP_EXP *insert_counter_values[]; +extern const char CATS_IMP_EXP *list_pool; +extern const char CATS_IMP_EXP *match_query[]; +extern const char CATS_IMP_EXP *select_counter_values[]; +extern const char CATS_IMP_EXP *select_recent_version[]; +extern const char CATS_IMP_EXP *select_recent_version_with_basejob[]; +extern const char CATS_IMP_EXP *select_recent_version_with_basejob_and_delta[]; extern const char CATS_IMP_EXP *sel_JobMedia; - -extern const char CATS_IMP_EXP *cleanup_created_job; -extern const char CATS_IMP_EXP *cleanup_running_job; -extern const char CATS_IMP_EXP *uar_list_jobs; -extern const char CATS_IMP_EXP *uar_print_jobs; +extern const char CATS_IMP_EXP *sql_bvfs_list_files[]; +extern const char CATS_IMP_EXP *sql_bvfs_select[]; +extern const char CATS_IMP_EXP *sql_get_max_connections[]; +extern const char CATS_IMP_EXP *sql_media_order_most_recently_written[]; +extern const char CATS_IMP_EXP *uap_upgrade_copies_oldest_job[]; extern const char CATS_IMP_EXP *uar_count_files; -extern const char CATS_IMP_EXP *uar_sel_files; +extern const char CATS_IMP_EXP *uar_count_files; +extern const char CATS_IMP_EXP *uar_create_temp[]; +extern const char CATS_IMP_EXP *uar_create_temp1[]; extern const char CATS_IMP_EXP *uar_del_temp; extern const char CATS_IMP_EXP *uar_del_temp1; -extern const char CATS_IMP_EXP *uar_last_full; +extern const char CATS_IMP_EXP *uar_dif; +extern const char CATS_IMP_EXP *uar_file[]; extern const char CATS_IMP_EXP *uar_full; extern const char CATS_IMP_EXP *uar_inc; +extern const char CATS_IMP_EXP *uar_jobid_fileindex; +extern const char CATS_IMP_EXP *uar_jobid_fileindex_from_dir[]; +extern const char CATS_IMP_EXP *uar_jobid_fileindex_from_table; +extern const char CATS_IMP_EXP *uar_jobids_fileindex; +extern const char CATS_IMP_EXP *uar_last_full; +extern const char CATS_IMP_EXP *uar_list_jobs; extern const char CATS_IMP_EXP *uar_list_temp; +extern const char CATS_IMP_EXP *uar_mediatype; +extern const char CATS_IMP_EXP *uar_print_jobs; +extern const char CATS_IMP_EXP *uar_sel_all_temp; extern const char CATS_IMP_EXP *uar_sel_all_temp1; +extern const char CATS_IMP_EXP *uar_sel_files; extern const char CATS_IMP_EXP *uar_sel_fileset; extern const char CATS_IMP_EXP *uar_sel_filesetid; -extern const char CATS_IMP_EXP *uar_mediatype; -extern const char CATS_IMP_EXP *uar_jobid_fileindex; -extern const char CATS_IMP_EXP *uar_dif; -extern const char CATS_IMP_EXP *uar_sel_all_temp; -extern const char CATS_IMP_EXP *uar_count_files; -extern const char CATS_IMP_EXP *uar_jobids_fileindex; -extern const char CATS_IMP_EXP *uar_jobid_fileindex_from_table; extern const char CATS_IMP_EXP *uar_sel_jobid_temp; - -extern const char CATS_IMP_EXP *select_recent_version[]; -extern const char CATS_IMP_EXP *select_recent_version_with_basejob[]; -extern const char CATS_IMP_EXP *select_recent_version_with_basejob_and_delta[]; -extern const char CATS_IMP_EXP *create_temp_accurate_jobids[]; -extern const char CATS_IMP_EXP *create_temp_basefile[]; -extern const char CATS_IMP_EXP *create_temp_new_basefile[]; -extern const char CATS_IMP_EXP *create_deltabs[]; -extern const char CATS_IMP_EXP *uap_upgrade_copies_oldest_job[]; - -extern const char CATS_IMP_EXP *uar_file[]; -extern const char CATS_IMP_EXP *uar_create_temp[]; -extern const char CATS_IMP_EXP *uar_create_temp1[]; -extern const char CATS_IMP_EXP *uar_jobid_fileindex_from_dir[]; -extern const char CATS_IMP_EXP *sql_media_order_most_recently_written[]; -extern const char CATS_IMP_EXP *sql_get_max_connections[]; -extern const char CATS_IMP_EXP *sql_bvfs_select[]; -extern const char CATS_IMP_EXP *sql_bvfs_list_files[]; - -extern const char CATS_IMP_EXP *batch_lock_path_query[]; -extern const char CATS_IMP_EXP *batch_lock_filename_query[]; -extern const char CATS_IMP_EXP *batch_unlock_tables_query[]; -extern const char CATS_IMP_EXP *batch_fill_path_query[]; -extern const char CATS_IMP_EXP *batch_fill_filename_query[]; -extern const char CATS_IMP_EXP *match_query[]; -extern const char CATS_IMP_EXP *insert_counter_values[]; -extern const char CATS_IMP_EXP *select_counter_values[]; extern const char CATS_IMP_EXP *update_counter_values[]; diff --git a/bacula/src/cats/sql_create.c b/bacula/src/cats/sql_create.c index 09fd90c386..74d7603e90 100644 --- a/bacula/src/cats/sql_create.c +++ b/bacula/src/cats/sql_create.c @@ -1,34 +1,22 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2012 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Bacula Catalog Database Create record interface routines * - * Kern Sibbald, March 2000 + * Written by Kern Sibbald, March 2000 * */ @@ -36,7 +24,7 @@ static const int dbglevel = 100; -#if HAVE_SQLITE3 || HAVE_MYSQL || HAVE_POSTGRESQL || HAVE_INGRES || HAVE_DBI +#if HAVE_SQLITE3 || HAVE_MYSQL || HAVE_POSTGRESQL #include "cats.h" #include "bdb_priv.h" @@ -168,7 +156,7 @@ db_create_jobmedia_record(JCR *jcr, B_DB *mdb, JOBMEDIA_DBR *jm) bool db_create_pool_record(JCR *jcr, B_DB *mdb, POOL_DBR *pr) { - bool stat; + bool stat; char ed1[30], ed2[30], ed3[50], ed4[50], ed5[50]; char esc_name[MAX_ESCAPE_NAME_LENGTH]; char esc_lf[MAX_ESCAPE_NAME_LENGTH]; @@ -350,7 +338,7 @@ bool db_create_storage_record(JCR *jcr, B_DB *mdb, STORAGE_DBR *sr) bool db_create_mediatype_record(JCR *jcr, B_DB *mdb, MEDIATYPE_DBR *mr) { - bool stat; + bool stat; int num_rows; char esc[MAX_ESCAPE_NAME_LENGTH]; @@ -455,11 +443,11 @@ db_create_media_record(JCR *jcr, B_DB *mdb, MEDIA_DBR *mr) edit_int64(mr->VolWriteTime, ed7), mr->VolParts, mr->LabelType, - edit_int64(mr->StorageId, ed8), - edit_int64(mr->DeviceId, ed9), - edit_int64(mr->LocationId, ed10), - edit_int64(mr->ScratchPoolId, ed11), - edit_int64(mr->RecyclePoolId, ed12), + edit_int64(mr->StorageId, ed8), + edit_int64(mr->DeviceId, ed9), + edit_int64(mr->LocationId, ed10), + edit_int64(mr->ScratchPoolId, ed11), + edit_int64(mr->RecyclePoolId, ed12), mr->Enabled, mr->ActionOnPurge ); @@ -597,7 +585,9 @@ int db_create_path_record(JCR *jcr, B_DB *mdb, ATTR_DBR *ar) Jmsg(jcr, M_ERROR, 0, "%s", mdb->errmsg); sql_free_result(mdb); ar->PathId = 0; - ASSERT(ar->PathId); + ASSERT2(ar->PathId, + "Your Path table is broken. " + "Please, use dbcheck to correct it."); return 0; } ar->PathId = str_to_int64(row[0]); @@ -770,19 +760,27 @@ bool db_create_fileset_record(JCR *jcr, B_DB *mdb, FILESET_DBR *fsr) * }; */ +/* For maintenance, we can put batch mode in hold */ +static bool batch_mode_enabled = true; + +void db_disable_batch_insert(bool enabled) +{ + batch_mode_enabled = enabled; +} + /** * All sql_batch_* functions are used to do bulk batch insert in File/Filename/Path * tables. - * + * * To sum up : * - bulk load a temp table - * - insert missing filenames into filename with a single query (lock filenames + * - insert missing filenames into filename with a single query (lock filenames * - table before that to avoid possible duplicate inserts with concurrent update) * - insert missing paths into path with another single query * - then insert the join between the temp, filename and path tables into file. */ -/* +/* * Returns true if OK * false if failed */ @@ -795,13 +793,25 @@ bool db_write_batch_file_records(JCR *jcr) Dmsg0(50,"db_create_file_record : no files\n"); return true; } + if (job_canceled(jcr)) { goto bail_out; } + jcr->JobStatus = JS_AttrInserting; + + /* Check if batch mode is on hold */ + while (!batch_mode_enabled) { + Dmsg0(50, "batch mode is on hold\n"); + bmicrosleep(10, 0); + + if (job_canceled(jcr)) { + goto bail_out; + } + } + Dmsg1(50,"db_create_file_record changes=%u\n",jcr->db_batch->changes); - jcr->JobStatus = JS_AttrInserting; if (!sql_batch_end(jcr, jcr->db_batch, NULL)) { Jmsg1(jcr, M_FATAL, 0, "Batch end %s\n", jcr->db_batch->errmsg); goto bail_out; @@ -823,7 +833,7 @@ bool db_write_batch_file_records(JCR *jcr) db_sql_query(jcr->db_batch, batch_unlock_tables_query[db_get_type_index(jcr->db_batch)], NULL, NULL); goto bail_out; } - + if (!db_sql_query(jcr->db_batch, batch_unlock_tables_query[db_get_type_index(jcr->db_batch)], NULL, NULL)) { Jmsg1(jcr, M_FATAL, 0, "Unlock Path table %s\n", jcr->db_batch->errmsg); goto bail_out; @@ -836,7 +846,7 @@ bool db_write_batch_file_records(JCR *jcr) Jmsg1(jcr, M_FATAL, 0, "Lock Filename table %s\n", jcr->db_batch->errmsg); goto bail_out; } - + if (!db_sql_query(jcr->db_batch, batch_fill_filename_query[db_get_type_index(jcr->db_batch)], NULL, NULL)) { Jmsg1(jcr,M_FATAL,0,"Fill Filename table %s\n",jcr->db_batch->errmsg); db_sql_query(jcr->db_batch, batch_unlock_tables_query[db_get_type_index(jcr->db_batch)], NULL, NULL); @@ -847,8 +857,8 @@ bool db_write_batch_file_records(JCR *jcr) Jmsg1(jcr, M_FATAL, 0, "Unlock Filename table %s\n", jcr->db_batch->errmsg); goto bail_out; } - - if (!db_sql_query(jcr->db_batch, + + if (!db_sql_query(jcr->db_batch, "INSERT INTO File (FileIndex, JobId, PathId, FilenameId, LStat, MD5, DeltaSeq) " "SELECT batch.FileIndex, batch.JobId, Path.PathId, " "Filename.FilenameId,batch.LStat, batch.MD5, batch.DeltaSeq " @@ -891,7 +901,7 @@ bool db_create_batch_file_attributes_record(JCR *jcr, B_DB *mdb, ATTR_DBR *ar) Dmsg1(dbglevel, "Fname=%s\n", ar->fname); Dmsg0(dbglevel, "put_file_into_catalog\n"); - if (jcr->batch_started && jcr->db_batch->changes > 800000) { + if (jcr->batch_started && jcr->db_batch->changes > 500000) { db_write_batch_file_records(jcr); jcr->db_batch->changes = 0; } @@ -902,7 +912,7 @@ bool db_create_batch_file_attributes_record(JCR *jcr, B_DB *mdb, ATTR_DBR *ar) return false; /* error already printed */ } if (!sql_batch_start(jcr, jcr->db_batch)) { - Mmsg1(&mdb->errmsg, + Mmsg1(&mdb->errmsg, "Can't start batch mode: ERR=%s", db_strerror(jcr->db_batch)); Jmsg(jcr, M_FATAL, 0, "%s", mdb->errmsg); return false; @@ -1005,7 +1015,7 @@ static int db_create_filename_record(JCR *jcr, B_DB *mdb, ATTR_DBR *ar) mdb->errmsg[0] = 0; mdb->esc_name = check_pool_memory_size(mdb->esc_name, 2*mdb->fnl+2); db_escape_string(jcr, mdb, mdb->esc_name, mdb->fname, mdb->fnl); - + Mmsg(mdb->cmd, "SELECT FilenameId FROM Filename WHERE Name='%s'", mdb->esc_name); if (QUERY_DB(jcr, mdb, mdb->cmd)) { @@ -1042,7 +1052,7 @@ static int db_create_filename_record(JCR *jcr, B_DB *mdb, ATTR_DBR *ar) return ar->FilenameId > 0; } -/** +/** * Create file attributes record, or base file attributes record */ bool db_create_attributes_record(JCR *jcr, B_DB *mdb, ATTR_DBR *ar) @@ -1057,7 +1067,7 @@ bool db_create_attributes_record(JCR *jcr, B_DB *mdb, ATTR_DBR *ar) ar->Stream == STREAM_UNIX_ATTRIBUTES_EX)) { Mmsg1(&mdb->errmsg, _("Attempt to put non-attributes into catalog. Stream=%d\n"), ar->Stream); - Jmsg(jcr, M_FATAL, 0, "%s", mdb->errmsg); + Jmsg(jcr, M_FATAL, 0, "%s", mdb->errmsg); return false; } @@ -1089,15 +1099,15 @@ bool db_create_base_file_attributes_record(JCR *jcr, B_DB *mdb, ATTR_DBR *ar) Dmsg1(dbglevel, "create_base_file Fname=%s\n", ar->fname); Dmsg0(dbglevel, "put_base_file_into_catalog\n"); - db_lock(mdb); + db_lock(mdb); split_path_and_file(jcr, mdb, ar->fname); - + mdb->esc_name = check_pool_memory_size(mdb->esc_name, mdb->fnl*2+1); db_escape_string(jcr, mdb, mdb->esc_name, mdb->fname, mdb->fnl); - + mdb->esc_path = check_pool_memory_size(mdb->esc_path, mdb->pnl*2+1); db_escape_string(jcr, mdb, mdb->esc_path, mdb->path, mdb->pnl); - + Mmsg(mdb->cmd, "INSERT INTO basefile%lld (Path, Name) VALUES ('%s','%s')", (uint64_t)jcr->JobId, mdb->esc_path, mdb->esc_name); @@ -1107,7 +1117,7 @@ bool db_create_base_file_attributes_record(JCR *jcr, B_DB *mdb, ATTR_DBR *ar) return ret; } -/** +/** * Cleanup the base file temporary tables */ static void db_cleanup_base_file(JCR *jcr, B_DB *mdb) @@ -1131,16 +1141,23 @@ bool db_commit_base_file_attributes_record(JCR *jcr, B_DB *mdb) db_lock(mdb); - Mmsg(mdb->cmd, + Mmsg(mdb->cmd, "INSERT INTO BaseFiles (BaseJobId, JobId, FileId, FileIndex) " "SELECT B.JobId AS BaseJobId, %s AS JobId, " "B.FileId, B.FileIndex " "FROM basefile%s AS A, new_basefile%s AS B " "WHERE A.Path = B.Path " "AND A.Name = B.Name " - "ORDER BY B.FileId", + "ORDER BY B.FileId", edit_uint64(jcr->JobId, ed1), ed1, ed1); ret = db_sql_query(mdb, mdb->cmd, NULL, NULL); + /* + * Display error now, because the subsequent cleanup destroys the + * error message from the above query. + */ + if (!ret) { + Jmsg1(jcr, M_FATAL, 0, "%s", db_strerror(jcr->db)); + } jcr->nb_base_files_used = sql_affected_rows(mdb); db_cleanup_base_file(jcr, mdb); @@ -1150,7 +1167,7 @@ bool db_commit_base_file_attributes_record(JCR *jcr, B_DB *mdb) /** * Find the last "accurate" backup state with Base jobs - * 1) Get all files with jobid in list (F subquery) + * 1) Get all files with jobid in list (F subquery) * 2) Take only the last version of each file (Temp subquery) => accurate list is ok * 3) Put the result in a temporary table for the end of job * @@ -1160,7 +1177,7 @@ bool db_create_base_file_list(JCR *jcr, B_DB *mdb, char *jobids) POOL_MEM buf; bool ret=false; - db_lock(mdb); + db_lock(mdb); if (!*jobids) { Mmsg(mdb->errmsg, _("ERR=JobIds are empty\n")); @@ -1198,7 +1215,7 @@ bool db_create_restore_object_record(JCR *jcr, B_DB *mdb, ROBJECT_DBR *ro) mdb->fnl = strlen(ro->object_name); mdb->esc_name = check_pool_memory_size(mdb->esc_name, mdb->fnl*2+1); db_escape_string(jcr, mdb, mdb->esc_name, ro->object_name, mdb->fnl); - + db_escape_object(jcr, mdb, ro->object, ro->object_len); plug_name_len = strlen(ro->plugin_name); @@ -1211,7 +1228,7 @@ bool db_create_restore_object_record(JCR *jcr, B_DB *mdb, ROBJECT_DBR *ro) "ObjectCompression,FileIndex,JobId) " "VALUES ('%s','%s','%s',%d,%d,%d,%d,%d,%d,%u)", mdb->esc_name, esc_plug_name, mdb->esc_obj, - ro->object_len, ro->object_full_len, ro->object_index, + ro->object_len, ro->object_full_len, ro->object_index, ro->FileType, ro->object_compression, ro->FileIndex, ro->JobId); ro->RestoreObjectId = sql_insert_autokey_record(mdb, mdb->cmd, NT_("RestoreObject")); @@ -1228,4 +1245,4 @@ bool db_create_restore_object_record(JCR *jcr, B_DB *mdb, ROBJECT_DBR *ro) return stat; } -#endif /* HAVE_SQLITE3 || HAVE_MYSQL || HAVE_POSTGRESQL || HAVE_INGRES || HAVE_DBI */ +#endif /* HAVE_SQLITE3 || HAVE_MYSQL || HAVE_POSTGRESQL */ diff --git a/bacula/src/cats/sql_delete.c b/bacula/src/cats/sql_delete.c index 6815bf7a5e..33bd3edcd1 100644 --- a/bacula/src/cats/sql_delete.c +++ b/bacula/src/cats/sql_delete.c @@ -1,43 +1,28 @@ -/* - * Bacula Catalog Database Delete record interface routines - * - * Kern Sibbald, December 2000 - * - * Version $Id: sql_delete.c 7380 2008-07-14 10:42:59Z kerns $ - */ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2006 Free Software Foundation Europe e.V. - - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ - -/* *****FIXME**** fix fixed length of select_cmd[] and insert_cmd[] */ +/* + * Bacula Catalog Database Delete record interface routines + * + * Written by Kern Sibbald, December 2000 + * + */ #include "bacula.h" -#if HAVE_SQLITE3 || HAVE_MYSQL || HAVE_POSTGRESQL || HAVE_INGRES || HAVE_DBI +#if HAVE_SQLITE3 || HAVE_MYSQL || HAVE_POSTGRESQL #include "cats.h" #include "bdb_priv.h" @@ -241,4 +226,4 @@ int db_purge_media_record(JCR *jcr, B_DB *mdb, MEDIA_DBR *mr) } -#endif /* HAVE_SQLITE3 || HAVE_MYSQL || HAVE_POSTGRESQL || HAVE_INGRES */ +#endif /* HAVE_SQLITE3 || HAVE_MYSQL || HAVE_POSTGRESQL */ diff --git a/bacula/src/cats/sql_find.c b/bacula/src/cats/sql_find.c index a9b8020e0a..ba9c75dbcb 100644 --- a/bacula/src/cats/sql_find.c +++ b/bacula/src/cats/sql_find.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2012 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Bacula Catalog Database Find record interface routines @@ -32,13 +20,13 @@ * that a simple search by name or id. Such simple * request are in get.c * - * Kern Sibbald, December 2000 + * Written by Kern Sibbald, December 2000 * */ #include "bacula.h" -#if HAVE_SQLITE3 || HAVE_MYSQL || HAVE_POSTGRESQL || HAVE_INGRES || HAVE_DBI +#if HAVE_SQLITE3 || HAVE_MYSQL || HAVE_POSTGRESQL #include "cats.h" #include "bdb_priv.h" @@ -80,7 +68,7 @@ db_find_job_start_time(JCR *jcr, B_DB *mdb, JOB_DBR *jr, POOLMEM **stime, char * "SELECT StartTime, Job FROM Job WHERE JobStatus IN ('T','W') AND Type='%c' AND " "Level='%c' AND Name='%s' AND ClientId=%s AND FileSetId=%s " "ORDER BY StartTime DESC LIMIT 1", - jr->JobType, L_FULL, esc_name, + jr->JobType, L_FULL, esc_name, edit_int64(jr->ClientId, ed1), edit_int64(jr->FileSetId, ed2)); if (jr->JobLevel == L_DIFFERENTIAL) { @@ -118,7 +106,7 @@ db_find_job_start_time(JCR *jcr, B_DB *mdb, JOB_DBR *jr, POOLMEM **stime, char * } } else { Dmsg1(100, "Submitting: %s\n", mdb->cmd); - Mmsg(mdb->cmd, "SELECT StartTime, Job FROM Job WHERE Job.JobId=%s", + Mmsg(mdb->cmd, "SELECT StartTime, Job FROM Job WHERE Job.JobId=%s", edit_int64(jr->JobId, ed1)); } @@ -160,7 +148,7 @@ bail_out: * true on success, jr is unchanged, but stime and job are set */ bool -db_find_last_job_start_time(JCR *jcr, B_DB *mdb, JOB_DBR *jr, +db_find_last_job_start_time(JCR *jcr, B_DB *mdb, JOB_DBR *jr, POOLMEM **stime, char *job, int JobLevel) { SQL_ROW row; @@ -176,7 +164,7 @@ db_find_last_job_start_time(JCR *jcr, B_DB *mdb, JOB_DBR *jr, "SELECT StartTime, Job FROM Job WHERE JobStatus IN ('T','W') AND Type='%c' AND " "Level='%c' AND Name='%s' AND ClientId=%s AND FileSetId=%s " "ORDER BY StartTime DESC LIMIT 1", - jr->JobType, JobLevel, esc_name, + jr->JobType, JobLevel, esc_name, edit_int64(jr->ClientId, ed1), edit_int64(jr->FileSetId, ed2)); if (!QUERY_DB(jcr, mdb, mdb->cmd)) { Mmsg2(&mdb->errmsg, _("Query error for start time request: ERR=%s\nCMD=%s\n"), @@ -270,13 +258,13 @@ db_find_last_jobid(JCR *jcr, B_DB *mdb, const char *Name, JOB_DBR *jr) "SELECT JobId FROM Job WHERE Type='V' AND Level='%c' AND " " JobStatus IN ('T','W') AND Name='%s' AND " "ClientId=%s ORDER BY StartTime DESC LIMIT 1", - L_VERIFY_INIT, esc_name, + L_VERIFY_INIT, esc_name, edit_int64(jr->ClientId, ed1)); } else if (jr->JobLevel == L_VERIFY_VOLUME_TO_CATALOG || jr->JobLevel == L_VERIFY_DISK_TO_CATALOG || jr->JobType == JT_BACKUP) { if (Name) { - mdb->db_escape_string(jcr, esc_name, (char*)Name, + mdb->db_escape_string(jcr, esc_name, (char*)Name, MIN(strlen(Name), sizeof(esc_name))); Mmsg(mdb->cmd, "SELECT JobId FROM Job WHERE Type='B' AND JobStatus IN ('T','W') AND " @@ -284,7 +272,7 @@ db_find_last_jobid(JCR *jcr, B_DB *mdb, const char *Name, JOB_DBR *jr) } else { Mmsg(mdb->cmd, "SELECT JobId FROM Job WHERE Type='B' AND JobStatus IN ('T','W') AND " -"ClientId=%s ORDER BY StartTime DESC LIMIT 1", +"ClientId=%s ORDER BY StartTime DESC LIMIT 1", edit_int64(jr->ClientId, ed1)); } } else { @@ -351,14 +339,19 @@ db_find_next_volume(JCR *jcr, B_DB *mdb, int item, bool InChanger, MEDIA_DBR *mr "ScratchPoolId,RecyclePoolId,VolReadTime,VolWriteTime,ActionOnPurge " "FROM Media WHERE PoolId=%s AND MediaType='%s' AND VolStatus IN ('Full'," "'Recycle','Purged','Used','Append') AND Enabled=1 " - "ORDER BY LastWritten LIMIT 1", + "ORDER BY LastWritten LIMIT 1", edit_int64(mr->PoolId, ed1), esc_type); item = 1; } else { POOL_MEM changer(PM_FNAME); /* Find next available volume */ + /* ***FIXME*** + * replace switch with + * if (StorageId == 0) + * break; + */ if (InChanger) { - Mmsg(changer, "AND InChanger=1 AND StorageId=%s", + Mmsg(changer, " AND InChanger=1 AND StorageId=%s ", edit_int64(mr->StorageId, ed1)); } if (strcmp(mr->VolStatus, "Recycle") == 0 || @@ -463,4 +456,4 @@ db_find_next_volume(JCR *jcr, B_DB *mdb, int item, bool InChanger, MEDIA_DBR *mr return numrows; } -#endif /* HAVE_SQLITE3 || HAVE_MYSQL || HAVE_POSTGRESQL || HAVE_INGRES || HAVE_DBI */ +#endif /* HAVE_SQLITE3 || HAVE_MYSQL || HAVE_POSTGRESQL */ diff --git a/bacula/src/cats/sql_get.c b/bacula/src/cats/sql_get.c index 69f3195132..c1f9016161 100644 --- a/bacula/src/cats/sql_get.c +++ b/bacula/src/cats/sql_get.c @@ -1,43 +1,31 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2012 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ -/** +/** * Bacula Catalog Database Get record interface routines * Note, these routines generally get a record by id or * by name. If more logic is involved, the routine * should be in find.c * - * Kern Sibbald, March 2000 + * Written by Kern Sibbald, March 2000 * */ #include "bacula.h" -#if HAVE_SQLITE3 || HAVE_MYSQL || HAVE_POSTGRESQL || HAVE_INGRES || HAVE_DBI +#if HAVE_SQLITE3 || HAVE_MYSQL || HAVE_POSTGRESQL #include "cats.h" #include "bdb_priv.h" @@ -93,14 +81,14 @@ int db_get_file_attributes_record(JCR *jcr, B_DB *mdb, char *fname, JOB_DBR *jr, * called to get attributes of a non-existent file, which is * "normal" if a new file is found during Verify. * - * The following is a bit of a kludge: because we always backup a - * directory entry, we can end up with two copies of the directory - * in the backup. One is when we encounter the directory and find - * we cannot recurse into it, and the other is when we find an - * explicit mention of the directory. This can also happen if the - * use includes the directory twice. In this case, Verify - * VolumeToCatalog fails because we have two copies in the catalog, - * and only the first one is marked (twice). So, when calling from Verify, + * The following is a bit of a kludge: because we always backup a + * directory entry, we can end up with two copies of the directory + * in the backup. One is when we encounter the directory and find + * we cannot recurse into it, and the other is when we find an + * explicit mention of the directory. This can also happen if the + * use includes the directory twice. In this case, Verify + * VolumeToCatalog fails because we have two copies in the catalog, + * and only the first one is marked (twice). So, when calling from Verify, * VolumeToCatalog jr is not NULL and we know jr->FileIndex is the fileindex * of the version of the directory/file we actually want and do * a more explicit SQL search. @@ -119,23 +107,23 @@ int db_get_file_record(JCR *jcr, B_DB *mdb, JOB_DBR *jr, FILE_DBR *fdbr) "File.JobId=Job.JobId AND File.PathId=%s AND " "File.FilenameId=%s AND Job.Type='B' AND Job.JobStatus IN ('T','W') AND " "ClientId=%s ORDER BY StartTime DESC LIMIT 1", - edit_int64(fdbr->PathId, ed1), - edit_int64(fdbr->FilenameId, ed2), + edit_int64(fdbr->PathId, ed1), + edit_int64(fdbr->FilenameId, ed2), edit_int64(jr->ClientId,ed3)); } else if (jcr->getJobLevel() == L_VERIFY_VOLUME_TO_CATALOG) { Mmsg(mdb->cmd, "SELECT FileId, LStat, MD5 FROM File WHERE File.JobId=%s AND File.PathId=%s AND " - "File.FilenameId=%s AND File.FileIndex=%u", - edit_int64(fdbr->JobId, ed1), - edit_int64(fdbr->PathId, ed2), + "File.FilenameId=%s AND File.FileIndex=%u", + edit_int64(fdbr->JobId, ed1), + edit_int64(fdbr->PathId, ed2), edit_int64(fdbr->FilenameId,ed3), jr->FileIndex); } else { Mmsg(mdb->cmd, "SELECT FileId, LStat, MD5 FROM File WHERE File.JobId=%s AND File.PathId=%s AND " -"File.FilenameId=%s", - edit_int64(fdbr->JobId, ed1), - edit_int64(fdbr->PathId, ed2), +"File.FilenameId=%s", + edit_int64(fdbr->JobId, ed1), + edit_int64(fdbr->PathId, ed2), edit_int64(fdbr->FilenameId,ed3)); } Dmsg3(450, "Get_file_record JobId=%u FilenameId=%u PathId=%u\n", @@ -156,15 +144,15 @@ int db_get_file_record(JCR *jcr, B_DB *mdb, JOB_DBR *jr, FILE_DBR *fdbr) stat = 1; if (num_rows > 1) { Mmsg3(mdb->errmsg, _("get_file_record want 1 got rows=%d PathId=%s FilenameId=%s\n"), - num_rows, - edit_int64(fdbr->PathId, ed1), + num_rows, + edit_int64(fdbr->PathId, ed1), edit_int64(fdbr->FilenameId, ed2)); Dmsg1(000, "=== Problem! %s", mdb->errmsg); } } } else { Mmsg2(mdb->errmsg, _("File record for PathId=%s FilenameId=%s not found.\n"), - edit_int64(fdbr->PathId, ed1), + edit_int64(fdbr->PathId, ed1), edit_int64(fdbr->FilenameId, ed2)); } sql_free_result(mdb); @@ -306,7 +294,7 @@ bool db_get_job_record(JCR *jcr, B_DB *mdb, JOB_DBR *jr) "PoolId,StartTime,EndTime,JobFiles,JobBytes,JobTDate,Job,JobStatus," "Type,Level,ClientId,Name,PriorJobId,RealEndTime,JobId,FileSetId," "SchedTime,RealEndTime,ReadBytes,HasBase,PurgedFiles " -"FROM Job WHERE JobId=%s", +"FROM Job WHERE JobId=%s", edit_int64(jr->JobId, ed1)); } @@ -594,13 +582,8 @@ int db_get_client_ids(JCR *jcr, B_DB *mdb, int *num_ids, uint32_t *ids[]) return stat; } - - /** - * Get Pool Record - * If the PoolId is non-zero, we get its record, - * otherwise, we search on the PoolName - * + * Get Pool Id, Scratch Pool Id, Recycle Pool Id * Returns: false on failure * true on success */ @@ -618,7 +601,7 @@ bool db_get_pool_record(JCR *jcr, B_DB *mdb, POOL_DBR *pdbr) "SELECT PoolId,Name,NumVols,MaxVols,UseOnce,UseCatalog,AcceptAnyVolume," "AutoPrune,Recycle,VolRetention,VolUseDuration,MaxVolJobs,MaxVolFiles," "MaxVolBytes,PoolType,LabelType,LabelFormat,RecyclePoolId,ScratchPoolId," -"ActionOnPurge FROM Pool WHERE Pool.PoolId=%s", +"ActionOnPurge FROM Pool WHERE Pool.PoolId=%s", edit_int64(pdbr->PoolId, ed1)); } else { /* find by name */ mdb->db_escape_string(jcr, esc, pdbr->Name, strlen(pdbr->Name)); @@ -665,6 +648,25 @@ bool db_get_pool_record(JCR *jcr, B_DB *mdb, POOL_DBR *pdbr) } sql_free_result(mdb); } + db_unlock(mdb); + return ok; +} +/** + * Get Pool numvols + * If the PoolId is non-zero, we get its record, + * otherwise, we search on the PoolName and we compute the number of volumes + * + * Returns: false on failure + * true on success + */ +bool db_get_pool_numvols(JCR *jcr, B_DB *mdb, POOL_DBR *pdbr) +{ + bool ok; + char ed1[50]; + + ok = db_get_pool_record(jcr, mdb, pdbr); + + db_lock(mdb); if (ok) { uint32_t NumVols; Mmsg(mdb->cmd, "SELECT count(*) from Media WHERE PoolId=%s", @@ -702,7 +704,7 @@ int db_get_client_record(JCR *jcr, B_DB *mdb, CLIENT_DBR *cdbr) if (cdbr->ClientId != 0) { /* find by id */ Mmsg(mdb->cmd, "SELECT ClientId,Name,Uname,AutoPrune,FileRetention,JobRetention " -"FROM Client WHERE Client.ClientId=%s", +"FROM Client WHERE Client.ClientId=%s", edit_int64(cdbr->ClientId, ed1)); } else { /* find by name */ mdb->db_escape_string(jcr, esc, cdbr->Name, strlen(cdbr->Name)); @@ -814,7 +816,7 @@ int db_get_fileset_record(JCR *jcr, B_DB *mdb, FILESET_DBR *fsr) if (fsr->FileSetId != 0) { /* find by id */ Mmsg(mdb->cmd, "SELECT FileSetId,FileSet,MD5,CreateTime FROM FileSet " - "WHERE FileSetId=%s", + "WHERE FileSetId=%s", edit_int64(fsr->FileSetId, ed1)); } else { /* find by name */ mdb->db_escape_string(jcr, esc, fsr->FileSet, strlen(fsr->FileSet)); @@ -1006,19 +1008,21 @@ bool db_get_media_record(JCR *jcr, B_DB *mdb, MEDIA_DBR *mr) return true; } if (mr->MediaId != 0) { /* find by id */ - Mmsg(mdb->cmd, "SELECT MediaId,VolumeName,VolJobs,VolFiles,VolBlocks," - "VolBytes,VolMounts,VolErrors,VolWrites,MaxVolBytes,VolCapacityBytes," + Mmsg(mdb->cmd, "SELECT MediaId,VolumeName,VolJobs,VolFiles," + "VolBlocks,VolBytes,VolMounts," + "VolErrors,VolWrites,MaxVolBytes,VolCapacityBytes," "MediaType,VolStatus,PoolId,VolRetention,VolUseDuration,MaxVolJobs," "MaxVolFiles,Recycle,Slot,FirstWritten,LastWritten,InChanger," "EndFile,EndBlock,VolParts,LabelType,LabelDate,StorageId," "Enabled,LocationId,RecycleCount,InitialWrite," "ScratchPoolId,RecyclePoolId,VolReadTime,VolWriteTime,ActionOnPurge " - "FROM Media WHERE MediaId=%s", + "FROM Media WHERE MediaId=%s", edit_int64(mr->MediaId, ed1)); } else { /* find by name */ mdb->db_escape_string(jcr, esc, mr->VolumeName, strlen(mr->VolumeName)); - Mmsg(mdb->cmd, "SELECT MediaId,VolumeName,VolJobs,VolFiles,VolBlocks," - "VolBytes,VolMounts,VolErrors,VolWrites,MaxVolBytes,VolCapacityBytes," + Mmsg(mdb->cmd, "SELECT MediaId,VolumeName,VolJobs,VolFiles," + "VolBlocks,VolBytes,VolMounts," + "VolErrors,VolWrites,MaxVolBytes,VolCapacityBytes," "MediaType,VolStatus,PoolId,VolRetention,VolUseDuration,MaxVolJobs," "MaxVolFiles,Recycle,Slot,FirstWritten,LastWritten,InChanger," "EndFile,EndBlock,VolParts,LabelType,LabelDate,StorageId," @@ -1082,12 +1086,12 @@ bool db_get_media_record(JCR *jcr, B_DB *mdb, MEDIA_DBR *mr) mr->VolReadTime = str_to_int64(row[35]); mr->VolWriteTime = str_to_int64(row[36]); mr->ActionOnPurge = str_to_int32(row[37]); - + ok = true; } } else { if (mr->MediaId != 0) { - Mmsg1(mdb->errmsg, _("Media record MediaId=%s not found.\n"), + Mmsg1(mdb->errmsg, _("Media record MediaId=%s not found.\n"), edit_int64(mr->MediaId, ed1)); } else { Mmsg1(mdb->errmsg, _("Media record for Volume \"%s\" not found.\n"), @@ -1140,11 +1144,11 @@ bool db_get_file_list(JCR *jcr, B_DB *mdb, char *jobids, POOL_MEM buf(PM_MESSAGE); POOL_MEM buf2(PM_MESSAGE); if (use_delta) { - Mmsg(buf2, select_recent_version_with_basejob_and_delta[db_get_type_index(mdb)], + Mmsg(buf2, select_recent_version_with_basejob_and_delta[db_get_type_index(mdb)], jobids, jobids, jobids, jobids); } else { - Mmsg(buf2, select_recent_version_with_basejob[db_get_type_index(mdb)], + Mmsg(buf2, select_recent_version_with_basejob[db_get_type_index(mdb)], jobids, jobids, jobids, jobids); } @@ -1159,7 +1163,7 @@ bool db_get_file_list(JCR *jcr, B_DB *mdb, char *jobids, "JOIN Path ON (Path.PathId = T1.PathId) " "WHERE FileIndex > 0 " "ORDER BY T1.JobTDate, FileIndex ASC",/* Return sorted by JobTDate */ - /* FileIndex for restore code */ + /* FileIndex for restore code */ buf2.c_str()); if (!use_md5) { @@ -1174,7 +1178,7 @@ bool db_get_file_list(JCR *jcr, B_DB *mdb, char *jobids, /** * This procedure gets the base jobid list used by jobids, */ -bool db_get_used_base_jobids(JCR *jcr, B_DB *mdb, +bool db_get_used_base_jobids(JCR *jcr, B_DB *mdb, POOLMEM *jobids, db_list_ctx *result) { POOL_MEM buf; @@ -1193,18 +1197,18 @@ bool db_get_used_base_jobids(JCR *jcr, B_DB *mdb, * Incremental : get the last full + last diff + last incr(s) ids * * If you specify jr->StartTime, it will be used to limit the search - * in the time. (usually now) + * in the time. (usually now) * * TODO: look and merge from ua_restore.c */ -bool db_accurate_get_jobids(JCR *jcr, B_DB *mdb, +bool db_accurate_get_jobids(JCR *jcr, B_DB *mdb, JOB_DBR *jr, db_list_ctx *jobids) { bool ret=false; char clientid[50], jobid[50], filesetid[50]; char date[MAX_TIME_LENGTH]; POOL_MEM query(PM_FNAME); - + /* Take the current time as upper limit if nothing else specified */ utime_t StartTime = (jr->StartTime)?jr->StartTime:time(NULL); @@ -1212,7 +1216,7 @@ bool db_accurate_get_jobids(JCR *jcr, B_DB *mdb, jobids->reset(); /* First, find the last good Full backup for this job/client/fileset */ - Mmsg(query, create_temp_accurate_jobids[db_get_type_index(mdb)], + Mmsg(query, create_temp_accurate_jobids[db_get_type_index(mdb)], edit_uint64(jcr->JobId, jobid), edit_uint64(jr->ClientId, clientid), date, @@ -1224,7 +1228,7 @@ bool db_accurate_get_jobids(JCR *jcr, B_DB *mdb, if (jr->JobLevel == L_INCREMENTAL || jr->JobLevel == L_VIRTUAL_FULL) { /* Now, find the last differential backup after the last full */ - Mmsg(query, + Mmsg(query, "INSERT INTO btemp3%s (JobId, StartTime, EndTime, JobTDate, PurgedFiles) " "SELECT JobId, StartTime, EndTime, JobTDate, PurgedFiles " "FROM Job JOIN FileSet USING (FileSetId) " @@ -1245,7 +1249,7 @@ bool db_accurate_get_jobids(JCR *jcr, B_DB *mdb, } /* We just have to take all incremental after the last Full/Diff */ - Mmsg(query, + Mmsg(query, "INSERT INTO btemp3%s (JobId, StartTime, EndTime, JobTDate, PurgedFiles) " "SELECT JobId, StartTime, EndTime, JobTDate, PurgedFiles " "FROM Job JOIN FileSet USING (FileSetId) " @@ -1282,12 +1286,12 @@ bool db_get_base_file_list(JCR *jcr, B_DB *mdb, bool use_md5, DB_RESULT_HANDLER *result_handler, void *ctx) { POOL_MEM buf(PM_MESSAGE); - + Mmsg(buf, "SELECT Path, Name, FileIndex, JobId, LStat, 0 As DeltaSeq, MD5 " "FROM new_basefile%lld ORDER BY JobId, FileIndex ASC", (uint64_t) jcr->JobId); - + if (!use_md5) { strip_md5(buf.c_str()); } @@ -1310,7 +1314,7 @@ bool db_get_base_jobid(JCR *jcr, B_DB *mdb, JOB_DBR *jr, JobId_t *jobid) StartTime = (jr->StartTime)?jr->StartTime:time(NULL); bstrutime(date, sizeof(date), StartTime + 1); mdb->db_escape_string(jcr, esc, jr->Name, strlen(jr->Name)); - + /* we can take also client name, fileset, etc... */ Mmsg(query, @@ -1342,18 +1346,18 @@ bail_out: } /* Get JobIds associated with a volume */ -bool db_get_volume_jobids(JCR *jcr, B_DB *mdb, +bool db_get_volume_jobids(JCR *jcr, B_DB *mdb, MEDIA_DBR *mr, db_list_ctx *lst) { char ed1[50]; bool ret=false; db_lock(mdb); - Mmsg(mdb->cmd, "SELECT DISTINCT JobId FROM JobMedia WHERE MediaId=%s", + Mmsg(mdb->cmd, "SELECT DISTINCT JobId FROM JobMedia WHERE MediaId=%s", edit_int64(mr->MediaId, ed1)); ret = db_sql_query(mdb, mdb->cmd, db_list_handler, lst); db_unlock(mdb); return ret; } -#endif /* HAVE_SQLITE3 || HAVE_MYSQL || HAVE_POSTGRESQL || HAVE_INGRES || HAVE_DBI */ +#endif /* HAVE_SQLITE3 || HAVE_MYSQL || HAVE_POSTGRESQL */ diff --git a/bacula/src/cats/sql_glue.c b/bacula/src/cats/sql_glue.c index 8042ec33f5..3607eb0cbb 100644 --- a/bacula/src/cats/sql_glue.c +++ b/bacula/src/cats/sql_glue.c @@ -1,30 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2009-2011 Free Software Foundation Europe e.V. + Copyright (C) 2009-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Bacula Glue code for the catalog refactoring. @@ -34,7 +21,7 @@ #include "bacula.h" -#if HAVE_SQLITE3 || HAVE_MYSQL || HAVE_POSTGRESQL || HAVE_INGRES || HAVE_DBI +#if HAVE_SQLITE3 || HAVE_MYSQL || HAVE_POSTGRESQL #include "cats.h" #include "bdb_priv.h" @@ -94,8 +81,8 @@ char *db_escape_object(JCR *jcr, B_DB *mdb, char *old, int len) return mdb->db_escape_object(jcr, old, len); } -void db_unescape_object(JCR *jcr, B_DB *mdb, - char *from, int32_t expected_len, +void db_unescape_object(JCR *jcr, B_DB *mdb, + char *from, int32_t expected_len, POOLMEM **dest, int32_t *len) { mdb->db_unescape_object(jcr, from, expected_len, dest, len); @@ -210,4 +197,4 @@ bool sql_batch_insert(JCR *jcr, B_DB *mdb, ATTR_DBR *ar) return ((B_DB_PRIV *)mdb)->sql_batch_insert(jcr, ar); } -#endif /* HAVE_SQLITE3 || HAVE_MYSQL || HAVE_POSTGRESQL || HAVE_INGRES || HAVE_DBI */ +#endif /* HAVE_SQLITE3 || HAVE_MYSQL || HAVE_POSTGRESQL */ diff --git a/bacula/src/cats/sql_glue.h b/bacula/src/cats/sql_glue.h index ecfad4f25c..3ae685a6f5 100644 --- a/bacula/src/cats/sql_glue.h +++ b/bacula/src/cats/sql_glue.h @@ -1,30 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2009-2011 Free Software Foundation Europe e.V. + Copyright (C) 2009-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ #ifndef __SQL_GLUE_H_ #define __SQL_GLUE_H_ 1 @@ -46,8 +33,8 @@ void db_close_database(JCR *jcr, B_DB *mdb); void db_thread_cleanup(B_DB *mdb); void db_escape_string(JCR *jcr, B_DB *mdb, char *snew, char *old, int len); char *db_escape_object(JCR *jcr, B_DB *mdb, char *old, int len); -void db_unescape_object(JCR *jcr, B_DB *mdb, - char *from, int32_t expected_len, +void db_unescape_object(JCR *jcr, B_DB *mdb, + char *from, int32_t expected_len, POOLMEM **dest, int32_t *len); void db_start_transaction(JCR *jcr, B_DB *mdb); void db_end_transaction(JCR *jcr, B_DB *mdb); diff --git a/bacula/src/cats/sql_list.c b/bacula/src/cats/sql_list.c index a78e615356..9cd86bb88f 100644 --- a/bacula/src/cats/sql_list.c +++ b/bacula/src/cats/sql_list.c @@ -1,41 +1,28 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2009 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Bacula Catalog Database List records interface routines * - * Kern Sibbald, March 2000 + * Written by Kern Sibbald, March 2000 * - * Version $Id: sql_list.c 8508 2009-03-07 20:59:46Z kerns $ */ #include "bacula.h" -#if HAVE_SQLITE3 || HAVE_MYSQL || HAVE_POSTGRESQL || HAVE_INGRES || HAVE_DBI +#if HAVE_SQLITE3 || HAVE_MYSQL || HAVE_POSTGRESQL #include "cats.h" #include "bdb_priv.h" @@ -162,7 +149,7 @@ db_list_media_records(JCR *jcr, B_DB *mdb, MEDIA_DBR *mdbr, "VolUseDuration,MaxVolJobs,MaxVolFiles,MaxVolBytes,InChanger," "EndFile,EndBlock,VolParts,LabelType,StorageId,DeviceId," "LocationId,RecycleCount,InitialWrite,ScratchPoolId,RecyclePoolId, " - "Comment" + "ActionOnPurge,Comment" " FROM Media WHERE Media.VolumeName='%s'", esc); } else { Mmsg(mdb->cmd, "SELECT MediaId,VolumeName,Slot,PoolId," @@ -172,7 +159,7 @@ db_list_media_records(JCR *jcr, B_DB *mdb, MEDIA_DBR *mdbr, "VolUseDuration,MaxVolJobs,MaxVolFiles,MaxVolBytes,InChanger," "EndFile,EndBlock,VolParts,LabelType,StorageId,DeviceId," "LocationId,RecycleCount,InitialWrite,ScratchPoolId,RecyclePoolId, " - "Comment" + "ActionOnPurge,Comment" " FROM Media WHERE Media.PoolId=%s ORDER BY MediaId", edit_int64(mdbr->PoolId, ed1)); } @@ -252,15 +239,15 @@ void db_list_copies_records(JCR *jcr, B_DB *mdb, uint32_t limit, char *JobIds, } if (JobIds && JobIds[0]) { - Mmsg(str_jobids, " AND (Job.PriorJobId IN (%s) OR Job.JobId IN (%s)) ", - JobIds, JobIds); + Mmsg(str_jobids, " AND (Job.PriorJobId IN (%s) OR Job.JobId IN (%s)) ", + JobIds, JobIds); } db_lock(mdb); - Mmsg(mdb->cmd, + Mmsg(mdb->cmd, "SELECT DISTINCT Job.PriorJobId AS JobId, Job.Job, " "Job.JobId AS CopyJobId, Media.MediaType " - "FROM Job " + "FROM Job " "JOIN JobMedia USING (JobId) " "JOIN Media USING (MediaId) " "WHERE Job.Type = '%c' %s ORDER BY Job.PriorJobId DESC %s", @@ -297,10 +284,10 @@ void db_list_joblog_records(JCR *jcr, B_DB *mdb, uint32_t JobId, db_lock(mdb); if (type == VERT_LIST) { Mmsg(mdb->cmd, "SELECT Time,LogText FROM Log " - "WHERE Log.JobId=%s", edit_int64(JobId, ed1)); + "WHERE Log.JobId=%s ORDER BY LogId ASC", edit_int64(JobId, ed1)); } else { Mmsg(mdb->cmd, "SELECT LogText FROM Log " - "WHERE Log.JobId=%s", edit_int64(JobId, ed1)); + "WHERE Log.JobId=%s ORDER BY LogId ASC", edit_int64(JobId, ed1)); } if (!QUERY_DB(jcr, mdb, mdb->cmd)) { goto bail_out; @@ -321,13 +308,15 @@ bail_out: * Currently, we return all jobs or if jr->JobId is set, * only the job with the specified id. */ -void +alist * db_list_job_records(JCR *jcr, B_DB *mdb, JOB_DBR *jr, DB_LIST_HANDLER *sendit, void *ctx, e_list_type type) { char ed1[50]; char limit[100]; + char status[100]; char esc[MAX_ESCAPE_NAME_LENGTH]; + alist *list = NULL; db_lock(mdb); if (jr->limit > 0) { @@ -335,7 +324,8 @@ db_list_job_records(JCR *jcr, B_DB *mdb, JOB_DBR *jr, DB_LIST_HANDLER *sendit, } else { limit[0] = 0; } - if (type == VERT_LIST) { + switch (type) { + case VERT_LIST: if (jr->JobId == 0 && jr->Job[0] == 0) { Mmsg(mdb->cmd, "SELECT JobId,Job,Job.Name,PurgedFiles,Type,Level," @@ -343,7 +333,7 @@ db_list_job_records(JCR *jcr, B_DB *mdb, JOB_DBR *jr, DB_LIST_HANDLER *sendit, "StartTime,EndTime,RealEndTime,JobTDate," "VolSessionId,VolSessionTime,JobFiles,JobErrors," "JobMissingFiles,Job.PoolId,Pool.Name as PooLname,PriorJobId," - "Job.FileSetId,FileSet.FileSet " + "Job.FileSetId,FileSet.FileSet,Job.HasCache " "FROM Job,Client,Pool,FileSet WHERE " "Client.ClientId=Job.ClientId AND Pool.PoolId=Job.PoolId " "AND FileSet.FileSetId=Job.FileSetId ORDER BY StartTime%s", limit); @@ -354,13 +344,14 @@ db_list_job_records(JCR *jcr, B_DB *mdb, JOB_DBR *jr, DB_LIST_HANDLER *sendit, "StartTime,EndTime,RealEndTime,JobTDate," "VolSessionId,VolSessionTime,JobFiles,JobErrors," "JobMissingFiles,Job.PoolId,Pool.Name as PooLname,PriorJobId," - "Job.FileSetId,FileSet.FileSet " + "Job.FileSetId,FileSet.FileSet,Job.HasCache " "FROM Job,Client,Pool,FileSet WHERE Job.JobId=%s AND " "Client.ClientId=Job.ClientId AND Pool.PoolId=Job.PoolId " "AND FileSet.FileSetId=Job.FileSetId", edit_int64(jr->JobId, ed1)); } - } else { + break; + case HORZ_LIST: if (jr->Name[0] != 0) { mdb->db_escape_string(jcr, esc, jr->Name, strlen(jr->Name)); Mmsg(mdb->cmd, @@ -380,15 +371,19 @@ db_list_job_records(JCR *jcr, B_DB *mdb, JOB_DBR *jr, DB_LIST_HANDLER *sendit, "SELECT JobId,Name,StartTime,Type,Level,JobFiles,JobBytes,JobStatus " "FROM Job ORDER BY StartTime,JobId ASC%s", limit); } + break; + default: + break; } if (!QUERY_DB(jcr, mdb, mdb->cmd)) { db_unlock(mdb); - return; + return NULL; } + sql_data_seek(mdb, 0); list_result(jcr, mdb, sendit, ctx, type); - sql_free_result(mdb); db_unlock(mdb); + return list; } /* @@ -516,4 +511,4 @@ db_list_base_files_for_job(JCR *jcr, B_DB *mdb, JobId_t jobid, DB_LIST_HANDLER * db_unlock(mdb); } -#endif /* HAVE_SQLITE3 || HAVE_MYSQL || HAVE_POSTGRESQL || HAVE_INGRES || HAVE_DBI */ +#endif /* HAVE_SQLITE3 || HAVE_MYSQL || HAVE_POSTGRESQL */ diff --git a/bacula/src/cats/sql_update.c b/bacula/src/cats/sql_update.c index 2b5025bb62..302d5e2337 100644 --- a/bacula/src/cats/sql_update.c +++ b/bacula/src/cats/sql_update.c @@ -1,40 +1,28 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2012 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Bacula Catalog Database Update record interface routines * - * Kern Sibbald, March 2000 + * Written by Kern Sibbald, March 2000 * */ #include "bacula.h" -#if HAVE_SQLITE3 || HAVE_MYSQL || HAVE_POSTGRESQL || HAVE_INGRES || HAVE_DBI +#if HAVE_SQLITE3 || HAVE_MYSQL || HAVE_POSTGRESQL #include "cats.h" #include "bdb_priv.h" @@ -64,8 +52,8 @@ db_add_digest_to_file_record(JCR *jcr, B_DB *mdb, FileId_t FileId, char *digest, db_lock(mdb); mdb->esc_name = check_pool_memory_size(mdb->esc_name, len*2+1); - mdb->db_escape_string(jcr, mdb->esc_name, digest, len); - Mmsg(mdb->cmd, "UPDATE File SET MD5='%s' WHERE FileId=%s", mdb->esc_name, + mdb->db_escape_string(jcr, mdb->esc_name, digest, len); + Mmsg(mdb->cmd, "UPDATE File SET MD5='%s' WHERE FileId=%s", mdb->esc_name, edit_int64(FileId, ed1)); ret = UPDATE_DB(jcr, mdb, mdb->cmd); db_unlock(mdb); @@ -81,7 +69,7 @@ int db_mark_file_record(JCR *jcr, B_DB *mdb, FileId_t FileId, JobId_t JobId) char ed1[50], ed2[50]; db_lock(mdb); - Mmsg(mdb->cmd, "UPDATE File SET MarkId=%s WHERE FileId=%s", + Mmsg(mdb->cmd, "UPDATE File SET MarkId=%s WHERE FileId=%s", edit_int64(JobId, ed1), edit_int64(FileId, ed2)); stat = UPDATE_DB(jcr, mdb, mdb->cmd); db_unlock(mdb); @@ -113,9 +101,9 @@ db_update_job_start_record(JCR *jcr, B_DB *mdb, JOB_DBR *jr) Mmsg(mdb->cmd, "UPDATE Job SET JobStatus='%c',Level='%c',StartTime='%s'," "ClientId=%s,JobTDate=%s,PoolId=%s,FileSetId=%s WHERE JobId=%s", (char)(jcr->JobStatus), - (char)(jr->JobLevel), dt, + (char)(jr->JobLevel), dt, edit_int64(jr->ClientId, ed1), - edit_uint64(JobTDate, ed2), + edit_uint64(JobTDate, ed2), edit_int64(jr->PoolId, ed3), edit_int64(jr->FileSetId, ed4), edit_int64(jr->JobId, ed5)); @@ -195,7 +183,7 @@ db_update_job_end_record(JCR *jcr, B_DB *mdb, JOB_DBR *jr) (char)(jr->JobStatus), dt, jr->ClientId, edit_uint64(jr->JobBytes, ed1), edit_uint64(jr->ReadBytes, ed4), jr->JobFiles, jr->JobErrors, jr->VolSessionId, jr->VolSessionTime, - jr->PoolId, jr->FileSetId, edit_uint64(JobTDate, ed2), + jr->PoolId, jr->FileSetId, edit_uint64(JobTDate, ed2), rdt, PriorJobId, jr->HasBase, jr->PurgedFiles, edit_int64(jr->JobId, ed3)); @@ -304,7 +292,7 @@ db_update_storage_record(JCR *jcr, B_DB *mdb, STORAGE_DBR *sr) int stat; char ed1[50]; db_lock(mdb); - Mmsg(mdb->cmd, "UPDATE Storage SET AutoChanger=%d WHERE StorageId=%s", + Mmsg(mdb->cmd, "UPDATE Storage SET AutoChanger=%d WHERE StorageId=%s", sr->AutoChanger, edit_int64(sr->StorageId, ed1)); stat = UPDATE_DB(jcr, mdb, mdb->cmd); @@ -326,9 +314,10 @@ db_update_media_record(JCR *jcr, B_DB *mdb, MEDIA_DBR *mr) time_t ttime; struct tm tm; int stat; - char ed1[50], ed2[50], ed3[50], ed4[50]; + char ed1[50], ed4[50]; char ed5[50], ed6[50], ed7[50], ed8[50]; - char ed9[50], ed10[50], ed11[50]; + char ed9[50], ed10[50], ed11[50], ed12[50]; + char ed13[50]; char esc_name[MAX_ESCAPE_NAME_LENGTH]; char esc_status[MAX_ESCAPE_NAME_LENGTH]; @@ -379,29 +368,31 @@ db_update_media_record(JCR *jcr, B_DB *mdb, MEDIA_DBR *mr) } Mmsg(mdb->cmd, "UPDATE Media SET VolJobs=%u," - "VolFiles=%u,VolBlocks=%u,VolBytes=%s,VolMounts=%u,VolErrors=%u," + "VolFiles=%u,VolBlocks=%u,VolBytes=%s," + "VolMounts=%u,VolErrors=%u," "VolWrites=%u,MaxVolBytes=%s,VolStatus='%s'," "Slot=%d,InChanger=%d,VolReadTime=%s,VolWriteTime=%s,VolParts=%d," "LabelType=%d,StorageId=%s,PoolId=%s,VolRetention=%s,VolUseDuration=%s," "MaxVolJobs=%d,MaxVolFiles=%d,Enabled=%d,LocationId=%s," "ScratchPoolId=%s,RecyclePoolId=%s,RecycleCount=%d,Recycle=%d,ActionOnPurge=%d" " WHERE VolumeName='%s'", - mr->VolJobs, mr->VolFiles, mr->VolBlocks, edit_uint64(mr->VolBytes, ed1), + mr->VolJobs, mr->VolFiles, mr->VolBlocks, + edit_uint64(mr->VolBytes, ed1), mr->VolMounts, mr->VolErrors, mr->VolWrites, - edit_uint64(mr->MaxVolBytes, ed2), + edit_uint64(mr->MaxVolBytes, ed4), esc_status, mr->Slot, mr->InChanger, - edit_int64(mr->VolReadTime, ed3), - edit_int64(mr->VolWriteTime, ed4), + edit_int64(mr->VolReadTime, ed5), + edit_int64(mr->VolWriteTime, ed6), mr->VolParts, mr->LabelType, - edit_int64(mr->StorageId, ed5), - edit_int64(mr->PoolId, ed6), - edit_uint64(mr->VolRetention, ed7), - edit_uint64(mr->VolUseDuration, ed8), + edit_int64(mr->StorageId, ed7), + edit_int64(mr->PoolId, ed8), + edit_uint64(mr->VolRetention, ed9), + edit_uint64(mr->VolUseDuration, ed10), mr->MaxVolJobs, mr->MaxVolFiles, - mr->Enabled, edit_uint64(mr->LocationId, ed9), - edit_uint64(mr->ScratchPoolId, ed10), - edit_uint64(mr->RecyclePoolId, ed11), + mr->Enabled, edit_uint64(mr->LocationId, ed11), + edit_uint64(mr->ScratchPoolId, ed12), + edit_uint64(mr->RecyclePoolId, ed13), mr->RecycleCount,mr->Recycle, mr->ActionOnPurge, esc_name); @@ -480,25 +471,25 @@ db_make_inchanger_unique(JCR *jcr, B_DB *mdb, MEDIA_DBR *mr) if (mr->MediaId != 0) { Mmsg(mdb->cmd, "UPDATE Media SET InChanger=0, Slot=0 WHERE " "Slot=%d AND StorageId=%s AND MediaId!=%s", - mr->Slot, + mr->Slot, edit_int64(mr->StorageId, ed1), edit_int64(mr->MediaId, ed2)); } else if (*mr->VolumeName) { mdb->db_escape_string(jcr, esc,mr->VolumeName,strlen(mr->VolumeName)); Mmsg(mdb->cmd, "UPDATE Media SET InChanger=0, Slot=0 WHERE " "Slot=%d AND StorageId=%s AND VolumeName!='%s'", - mr->Slot, + mr->Slot, edit_int64(mr->StorageId, ed1), esc); } else { /* used by ua_label to reset all volume with this slot */ Mmsg(mdb->cmd, "UPDATE Media SET InChanger=0, Slot=0 WHERE " "Slot=%d AND StorageId=%s", - mr->Slot, - edit_int64(mr->StorageId, ed1), mr->VolumeName); + mr->Slot, + edit_int64(mr->StorageId, ed1), mr->VolumeName); } Dmsg1(100, "%s\n", mdb->cmd); UPDATE_DB(jcr, mdb, mdb->cmd); } } -#endif /* HAVE_SQLITE3 || HAVE_MYSQL || HAVE_POSTGRESQL || HAVE_INGRES || HAVE_DBI */ +#endif /* HAVE_SQLITE3 || HAVE_MYSQL || HAVE_POSTGRESQL */ diff --git a/bacula/src/cats/sqlite.c b/bacula/src/cats/sqlite.c index d3ff4d69d1..ca222e9b9e 100644 --- a/bacula/src/cats/sqlite.c +++ b/bacula/src/cats/sqlite.c @@ -1,36 +1,24 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2011 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Bacula Catalog Database routines specific to SQLite * - * Kern Sibbald, January 2002 + * Written by Kern Sibbald, January 2002 * - * Major rewrite by Marco van Wieringen, January 2010 for catalog refactoring. + * Add class wrapper Marco van Wieringen, January 2010 */ #include "bacula.h" @@ -57,7 +45,7 @@ static dlist *db_list = NULL; static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; /* - * When using mult_db_connections = true, + * When using mult_db_connections = true, * sqlite can be BUSY. We just need sleep a little in this case. */ static int sqlite_busy_handler(void *arg, int calls) @@ -112,12 +100,12 @@ B_DB_SQLITE::B_DB_SQLITE(JCR *jcr, esc_obj = get_pool_memory(PM_FNAME); m_allow_transactions = mult_db_connections; - /* At this time, when mult_db_connections == true, this is for + /* At this time, when mult_db_connections == true, this is for * specific console command such as bvfs or batch mode, and we don't * want to share a batch mode or bvfs. In the future, we can change * the creation function to add this parameter. */ - m_dedicated = mult_db_connections; + m_dedicated = mult_db_connections; /* * Initialize the private members. @@ -187,7 +175,7 @@ bool B_DB_SQLITE::db_open_database(JCR *jcr) for (m_db_handle = NULL; !m_db_handle && retry++ < 10; ) { ret = sqlite3_open(db_path, &m_db_handle); if (ret != SQLITE_OK) { - m_sqlite_errmsg = (char *)sqlite3_errmsg(m_db_handle); + m_sqlite_errmsg = (char *)sqlite3_errmsg(m_db_handle); sqlite3_close(m_db_handle); m_db_handle = NULL; } else { @@ -204,7 +192,7 @@ bool B_DB_SQLITE::db_open_database(JCR *jcr) db_path, m_sqlite_errmsg ? m_sqlite_errmsg : _("unknown")); free(db_path); goto bail_out; - } + } m_connected = true; free(db_path); @@ -220,7 +208,6 @@ bool B_DB_SQLITE::db_open_database(JCR *jcr) if (!check_tables_version(jcr, this)) { goto bail_out; } - retval = true; bail_out: @@ -427,7 +414,7 @@ static int sqlite_result_handler(void *arh_data, int num_fields, char **rows, ch if (rh_data->result_handler) { (*(rh_data->result_handler))(rh_data->ctx, num_fields, rows); } - + return 0; } @@ -457,7 +444,7 @@ bool B_DB_SQLITE::db_sql_query(const char *query, DB_RESULT_HANDLER *result_hand stat = sqlite3_exec(m_db_handle, query, sqlite_result_handler, (void *)&rh_data, &m_sqlite_errmsg); - + if (stat != SQLITE_OK) { Mmsg(errmsg, _("Query failed: %s: ERR=%s\n"), query, sql_strerror()); Dmsg0(500, "db_sql_query finished\n"); @@ -648,7 +635,7 @@ bool B_DB_SQLITE::sql_field_is_numeric(int field_type) } } -/* +/* * Returns true if OK * false if failed */ @@ -671,7 +658,7 @@ bool B_DB_SQLITE::sql_batch_start(JCR *jcr) } /* set error to something to abort operation */ -/* +/* * Returns true if OK * false if failed */ @@ -682,7 +669,7 @@ bool B_DB_SQLITE::sql_batch_end(JCR *jcr, const char *error) return true; } -/* +/* * Returns true if OK * false if failed */ @@ -716,9 +703,9 @@ bool B_DB_SQLITE::sql_batch_insert(JCR *jcr, ATTR_DBR *ar) * never have errors, or it is really fatal. */ B_DB *db_init_database(JCR *jcr, const char *db_driver, const char *db_name, - const char *db_user, const char *db_password, - const char *db_address, int db_port, - const char *db_socket, bool mult_db_connections, + const char *db_user, const char *db_password, + const char *db_address, int db_port, + const char *db_socket, bool mult_db_connections, bool disable_batch_insert) { B_DB *mdb = NULL; diff --git a/bacula/src/cats/sqlite.in b/bacula/src/cats/sqlite.in index 9631f375f1..425e2d9178 100644 --- a/bacula/src/cats/sqlite.in +++ b/bacula/src/cats/sqlite.in @@ -1,6 +1,21 @@ #!/bin/sh # # shell script to invoke SQLite on Bacula database +# +# Bacula® - The Network Backup Solution +# +# Copyright (C) 2000-2014 Free Software Foundation Europe e.V. +# +# The main author of Bacula is Kern Sibbald, with contributions from many +# others, a complete list can be found in the file AUTHORS. +# +# You may use this file and others of this release according to the +# license defined in the LICENSE file, which includes the Affero General +# Public License, v3.0 ("AGPLv3") and some additional permissions and +# terms pursuant to its AGPLv3 Section 7. +# +# Bacula® is a registered trademark of Kern Sibbald. +# bindir=@SQLITE_BINDIR@ db_name=@db_name@ diff --git a/bacula/src/cats/update_bacula_tables.in b/bacula/src/cats/update_bacula_tables.in index 943c3109df..334b3914cd 100755 --- a/bacula/src/cats/update_bacula_tables.in +++ b/bacula/src/cats/update_bacula_tables.in @@ -3,6 +3,21 @@ # This routine alters the appropriately configured # Bacula tables for PostgreSQL, Ingres, MySQL, or SQLite. # +# +# Bacula® - The Network Backup Solution +# +# Copyright (C) 2000-2014 Free Software Foundation Europe e.V. +# +# The main author of Bacula is Kern Sibbald, with contributions from many +# others, a complete list can be found in the file AUTHORS. +# +# You may use this file and others of this release according to the +# license defined in the LICENSE file, which includes the Affero General +# Public License, v3.0 ("AGPLv3") and some additional permissions and +# terms pursuant to its AGPLv3 Section 7. +# +# Bacula® is a registered trademark of Kern Sibbald. +# default_db_type=@DEFAULT_DB_TYPE@ diff --git a/bacula/src/cats/update_ingres_tables.in b/bacula/src/cats/update_ingres_tables.in deleted file mode 100755 index 6a6ff88e22..0000000000 --- a/bacula/src/cats/update_ingres_tables.in +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh -# -# Shell script to update Ingres tables (without any function for now) -# -echo " " -echo "This script will update a Bacula Ingres database (if needed)" -echo " " -bindir=@INGRES_BINDIR@ -db_name=@db_name@ - -echo "Update of Bacula Ingres tables succeeded. (nothing to do)" -exit 0 diff --git a/bacula/src/cats/update_mysql_tables.in b/bacula/src/cats/update_mysql_tables.in index f392c944fe..5dca6e9a79 100644 --- a/bacula/src/cats/update_mysql_tables.in +++ b/bacula/src/cats/update_mysql_tables.in @@ -2,6 +2,22 @@ # # Shell script to update MySQL Community version 5.0.x to 5.2.x # +# +# Bacula® - The Network Backup Solution +# +# Copyright (C) 2000-2014 Free Software Foundation Europe e.V. +# +# The main author of Bacula is Kern Sibbald, with contributions from many +# others, a complete list can be found in the file AUTHORS. +# +# You may use this file and others of this release according to the +# license defined in the LICENSE file, which includes the Affero General +# Public License, v3.0 ("AGPLv3") and some additional permissions and +# terms pursuant to its AGPLv3 Section 7. +# +# Bacula® is a registered trademark of Kern Sibbald. +# + echo " " echo "This script will update a Bacula MySQL database from version 12 to 14" echo " which is needed to convert from Bacula Community version 5.0.x to 5.2.x" diff --git a/bacula/src/cats/update_postgresql_tables.in b/bacula/src/cats/update_postgresql_tables.in index f97cb60007..a24d3a92cd 100644 --- a/bacula/src/cats/update_postgresql_tables.in +++ b/bacula/src/cats/update_postgresql_tables.in @@ -3,6 +3,22 @@ # Shell script to update PostgreSQL tables from version 12 to 14 # or Bacula Community version 5.0.x to 5.2.x # +# +# Bacula® - The Network Backup Solution +# +# Copyright (C) 2000-2014 Free Software Foundation Europe e.V. +# +# The main author of Bacula is Kern Sibbald, with contributions from many +# others, a complete list can be found in the file AUTHORS. +# +# You may use this file and others of this release according to the +# license defined in the LICENSE file, which includes the Affero General +# Public License, v3.0 ("AGPLv3") and some additional permissions and +# terms pursuant to its AGPLv3 Section 7. +# +# Bacula® is a registered trademark of Kern Sibbald. +# + echo " " echo "This script will update a Bacula PostgreSQL database from version 12 to 14" echo " which is needed to convert from Bacula Community version 5.0.x to 5.2.x" diff --git a/bacula/src/cats/update_sqlite3_tables.in b/bacula/src/cats/update_sqlite3_tables.in index d144569e12..368ee28fc9 100644 --- a/bacula/src/cats/update_sqlite3_tables.in +++ b/bacula/src/cats/update_sqlite3_tables.in @@ -2,6 +2,22 @@ # # Shell script to update sqlite3 tables from Bacula Community version 5.0.x to 5.2.x # +# +# Bacula® - The Network Backup Solution +# +# Copyright (C) 2000-2014 Free Software Foundation Europe e.V. +# +# The main author of Bacula is Kern Sibbald, with contributions from many +# others, a complete list can be found in the file AUTHORS. +# +# You may use this file and others of this release according to the +# license defined in the LICENSE file, which includes the Affero General +# Public License, v3.0 ("AGPLv3") and some additional permissions and +# terms pursuant to its AGPLv3 Section 7. +# +# Bacula® is a registered trademark of Kern Sibbald. +# + echo " " echo "This script will update a Bacula sqlite3 database from version 12 to 14" echo " which is needed to convert from Bacula Community version 5.0.x to 5.2.x" diff --git a/bacula/src/ch.h b/bacula/src/ch.h index f6cad3149d..a3b9198f95 100644 --- a/bacula/src/ch.h +++ b/bacula/src/ch.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2011 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /** * Compressed stream header struct diff --git a/bacula/src/cl b/bacula/src/cl deleted file mode 100644 index 9d3763226a..0000000000 --- a/bacula/src/cl +++ /dev/null @@ -1,28 +0,0 @@ -/* - Bacula® - The Network Backup Solution - - Copyright (C) 2000-2008 Free Software Foundation Europe e.V. - - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version two of the GNU Lesser General - Public License as published by the Free Software Foundation plus - additions that are listed in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. - - Bacula® is a registered trademark of Kern Sibbald. - - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. -*/ diff --git a/bacula/src/console/authenticate.c b/bacula/src/console/authenticate.c index 0f5e5b930f..fe5de73331 100644 --- a/bacula/src/console/authenticate.c +++ b/bacula/src/console/authenticate.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2001-2007 Free Software Foundation Europe e.V. + Copyright (C) 2001-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * @@ -42,15 +30,21 @@ #include "console_conf.h" #include "jcr.h" +/* + * Version at end of Hello + * prior to 06Aug13 no version + */ +#define UA_VERSION 1 void senditf(const char *fmt, ...); void sendit(const char *buf); /* Commands sent to Director */ -static char hello[] = "Hello %s calling\n"; +static char hello[] = "Hello %s calling %d\n"; /* Response from Director */ -static char OKhello[] = "1000 OK:"; +static char oldOKhello[] = "1000 OK:"; +static char newOKhello[] = "1000 OK: %d"; /* Forward referenced functions */ @@ -64,6 +58,7 @@ int authenticate_director(JCR *jcr, DIRRES *director, CONRES *cons) int tls_remote_need = BNET_TLS_NONE; bool tls_authenticate; int compatible = true; + int dir_version = 0; char bashed_name[MAX_NAME_LENGTH]; char *password; TLS_CONTEXT *tls_ctx = NULL; @@ -107,10 +102,10 @@ int authenticate_director(JCR *jcr, DIRRES *director, CONRES *cons) tls_ctx = director->tls_ctx; } - - /* Timeout Hello after 5 mins */ - btimer_t *tid = start_bsock_timer(dir, 60 * 5); - dir->fsend(hello, bashed_name); + + /* Timeout Hello after 15 secs */ + btimer_t *tid = start_bsock_timer(dir, 15); + dir->fsend(hello, bashed_name, UA_VERSION); if (!cram_md5_respond(dir, password, &tls_remote_need, &compatible) || !cram_md5_challenge(dir, password, tls_local_need, compatible)) { @@ -155,10 +150,12 @@ int authenticate_director(JCR *jcr, DIRRES *director, CONRES *cons) } Dmsg1(10, "msg); - if (strncmp(dir->msg, OKhello, sizeof(OKhello)-1) != 0) { + if (strncmp(dir->msg, oldOKhello, sizeof(oldOKhello)-1) != 0) { sendit(_("Director rejected Hello command\n")); goto bail_out; } else { + /* If Dir version exists, get it */ + sscanf(dir->msg, newOKhello, &dir_version); sendit(dir->msg); } stop_bsock_timer(tid); diff --git a/bacula/src/console/conio.c b/bacula/src/console/conio.c index 1b39d29918..cfa5d66743 100755 --- a/bacula/src/console/conio.c +++ b/bacula/src/console/conio.c @@ -1,39 +1,24 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 1981-2012 Free Software Foundation Europe e.V. - Yes, that is 1981 no error. - - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + Copyright (C) 1981-2014 Free Software Foundation Europe e.V. + + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ -/* - Generalized console input/output handler - A maintanable replacement for readline() - Updated for Bacula, Kern Sibbald, December MMIII +/* + Generalized console input/output handler + A maintanable replacement for readline() - This code is in part derived from code that I wrote in - 1981, so some of it is a bit old and could use a cleanup. + Written in 1981, updated for Bacula, Kern Sibbald, December MMIII */ @@ -46,7 +31,6 @@ * Each subsequent character starts with 10 (i.e. (c & 0xC0) == 0x80) */ - #ifdef TEST_PROGRAM #include #include @@ -72,7 +56,7 @@ extern "C" int tgetent(void *, const char *); extern "C" int tgetnum(const char *); extern "C" char *tgetstr (const char*, char**); -# Note: the following on older (Solaris 10) systems +# Note: the following on older (Solaris 10) systems # may need to be moved to after the #endif extern "C" char *tgoto (const char *, int, int); #endif diff --git a/bacula/src/console/conio.h b/bacula/src/console/conio.h index dc7e27a159..57296af6a7 100644 --- a/bacula/src/console/conio.h +++ b/bacula/src/console/conio.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2004-2006 Free Software Foundation Europe e.V. + Copyright (C) 2004-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ #ifndef __CONIO_H diff --git a/bacula/src/console/console.c b/bacula/src/console/console.c index 999515fddf..80176a7c90 100644 --- a/bacula/src/console/console.c +++ b/bacula/src/console/console.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2011 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * @@ -320,7 +308,7 @@ static void read_and_process_input(FILE *input, BSOCK *UA_sock) if (!stop) { fflush(stdout); } - if (is_bnet_stop(UA_sock)) { + if (UA_sock->is_stop()) { break; /* error or term */ } else if (stat == BNET_SIGNAL) { if (UA_sock->msglen == BNET_SUB_PROMPT) { @@ -333,7 +321,7 @@ static void read_and_process_input(FILE *input, BSOCK *UA_sock) /* * Call-back for reading a passphrase for an encrypted PEM file - * This function uses getpass(), + * This function uses getpass(), * which uses a static buffer and is NOT thread-safe. */ static int tls_pem_callback(char *buf, int size, const void *userdata) @@ -399,7 +387,7 @@ get_previous_keyword(int current_point, int nb) break; } } - + /* find the end of the command */ for (; i >= 0; i--) { if (rl_line_buffer[i] != ' ') { @@ -407,12 +395,12 @@ get_previous_keyword(int current_point, int nb) break; } } - + /* no end of string */ if (end == -1) { return NULL; } - + /* look for the start of the command */ for (start = end; start > 0; start--) { if (rl_line_buffer[start] == '"') { @@ -520,7 +508,7 @@ void get_items(const char *what) } } -typedef enum +typedef enum { ITEM_ARG, /* item with simple list like .jobs */ ITEM_HELP /* use help item=xxx and detect all arguments */ @@ -528,9 +516,9 @@ typedef enum /* Generator function for command completion. STATE lets us know whether * to start from scratch; without any state (i.e. STATE == 0), then we - * start at the top of the list. + * start at the top of the list. */ -static char *item_generator(const char *text, int state, +static char *item_generator(const char *text, int state, const char *item, cpl_item_t type) { static int list_index, len; @@ -538,7 +526,7 @@ static char *item_generator(const char *text, int state, /* If this is a new word to complete, initialize now. This includes * saving the length of TEXT for efficiency, and initializing the index - * variable to 0. + * variable to 0. */ if (!state) { @@ -559,7 +547,7 @@ static char *item_generator(const char *text, int state, { name = (char *)items->list[list_index]; list_index++; - + if (strncmp(name, text, len) == 0) { char *ret = (char *) actuallymalloc(strlen(name)+1); strcpy(ret, name); @@ -568,10 +556,10 @@ static char *item_generator(const char *text, int state, } /* If no names matched, then return NULL. */ - return ((char *)NULL); + return ((char *)NULL); } -/* gobal variables for the type and the item to search +/* gobal variables for the type and the item to search * the readline API doesn' permit to pass user data. */ static const char *cpl_item; @@ -619,7 +607,7 @@ static struct cpl_keywords_t cpl_keywords[] = { * region of rl_line_buffer that contains the word to complete. TEXT is * the word to complete. We can use the entire contents of rl_line_buffer * in case we want to do some simple parsing. Return the array of matches, - * or NULL if there aren't any. + * or NULL if there aren't any. */ static char **readline_completion(const char *text, int start, int end) { @@ -630,7 +618,7 @@ static char **readline_completion(const char *text, int start, int end) /* If this word is at the start of the line, then it is a command * to complete. Otherwise it is the name of a file in the current - * directory. + * directory. */ s = get_previous_keyword(start, 0); cmd = get_first_keyword(); @@ -644,14 +632,14 @@ static char **readline_completion(const char *text, int start, int end) break; } } - + if (!found) { /* we try to get help with the first command */ cpl_item = cmd; cpl_type = ITEM_HELP; /* we don't want to append " " at the end */ - rl_completion_suppress_append=true; + rl_completion_suppress_append=true; matches = rl_completion_matches(text, cpl_generator); - } + } free(s); } else { /* nothing on the line, display all commands */ cpl_item = ".help all"; @@ -830,7 +818,7 @@ again: } else #endif - if (fgets(sock->msg, len, input) == NULL) { + if (bfgets(sock->msg, input) == NULL) { return -1; } @@ -890,10 +878,8 @@ bool select_director(const char *director, DIRRES **ret_dir, CONRES **ret_cons) int numcon=0, numdir=0; int i=0, item=0; BSOCK *UA_sock; - DIRRES *dir=NULL; - CONRES *cons=NULL; - struct sockaddr client_addr; - memset(&client_addr, 0, sizeof(client_addr)); + DIRRES *dir = NULL; + CONRES *cons = NULL; *ret_cons = NULL; *ret_dir = NULL; @@ -911,12 +897,12 @@ bool select_director(const char *director, DIRRES **ret_dir, CONRES **ret_cons) if (numdir == 1) { /* No choose */ dir = (DIRRES *)GetNextRes(R_DIRECTOR, NULL); - } - + } + if (director) { /* Command line choice overwrite the no choose option */ LockRes(); foreach_res(dir, R_DIRECTOR) { - if (bstrcmp(dir->hdr.name, director)) { + if (bstrcasecmp(dir->hdr.name, director)) { break; } } @@ -927,26 +913,26 @@ bool select_director(const char *director, DIRRES **ret_dir, CONRES **ret_cons) } } - if (!dir) { /* prompt for director */ - UA_sock = init_bsock(NULL, 0, "", "", 0, &client_addr); + if (dir == NULL) { /* prompt for director */ + UA_sock = new_bsock(); try_again: sendit(_("Available Directors:\n")); LockRes(); numdir = 0; foreach_res(dir, R_DIRECTOR) { - senditf( _("%2d: %s at %s:%d\n"), 1+numdir++, dir->hdr.name, + senditf( _("%2d: %s at %s:%d\n"), 1+numdir++, dir->hdr.name, dir->address, dir->DIRport); } UnlockRes(); - if (get_cmd(stdin, _("Select Director by entering a number: "), - UA_sock, 600) < 0) + if (get_cmd(stdin, _("Select Director by entering a number: "), + UA_sock, 600) < 0) { (void)WSACleanup(); /* Cleanup Windows sockets */ return 0; } if (!is_a_number(UA_sock->msg)) { senditf(_("%s is not a number. You must enter a number between " - "1 and %d\n"), + "1 and %d\n"), UA_sock->msg, numdir); goto try_again; } @@ -955,7 +941,7 @@ try_again: senditf(_("You must enter a number between 1 and %d\n"), numdir); goto try_again; } - term_bsock(UA_sock); + free_bsock(UA_sock); LockRes(); for (i=0; idirector && strcmp(cons->director, dir->hdr.name) == 0) { + if (cons->director && strcasecmp(cons->director, dir->hdr.name) == 0) { break; } - cons = NULL; + if (i == (numcon - 1)) { + cons = NULL; + } } + /* Look for the first non-linked console */ if (cons == NULL) { for (i=0; idirector == NULL) + if (cons->director == NULL) { break; - cons = NULL; + } + if (i == (numcon - 1)) { + cons = NULL; + } } } @@ -989,7 +981,7 @@ try_again: *ret_dir = dir; *ret_cons = cons; - + return 1; } @@ -1001,7 +993,7 @@ try_again: int main(int argc, char *argv[]) { int ch; - char *director=NULL; + char *director = NULL; bool list_directors=false; bool no_signals = false; bool test_config = false; @@ -1136,7 +1128,8 @@ int main(int argc, char *argv[]) start_watchdog(); /* Start socket watchdog */ - if(!select_director(director, &dir, &cons)) { + if (!select_director(director, &dir, &cons)) { + terminate_console(0); return 1; } @@ -1150,7 +1143,7 @@ int main(int argc, char *argv[]) /* Initialize TLS context: * Args: CA certfile, CA certdir, Certfile, Keyfile, - * Keyfile PEM Callback, Keyfile CB Userdata, DHfile, Verify Peer + * Keyfile PEM Callback, Keyfile CB Userdata, DHfile, Verify Peer */ cons->tls_ctx = new_tls_context(cons->tls_ca_certfile, cons->tls_ca_certdir, cons->tls_certfile, @@ -1191,9 +1184,11 @@ int main(int argc, char *argv[]) } else { heart_beat = 0; } - UA_sock = bnet_connect(NULL, 5, 15, heart_beat, "Director daemon", dir->address, - NULL, dir->DIRport, 0); - if (UA_sock == NULL) { + if (!UA_sock) { + UA_sock = new_bsock(); + } + if (!UA_sock->connect(NULL, 5, 15, heart_beat, "Director daemon", dir->address, + NULL, dir->DIRport, 0)) { terminate_console(0); return 1; } @@ -1308,7 +1303,7 @@ static int check_resources() OK = false; } } - + if (numdir == 0) { Emsg1(M_FATAL, 0, _("No Director resource defined in %s\n" "Without that I don't how to speak to the Director :-(\n"), configfile); @@ -1447,7 +1442,7 @@ static int execcmd(FILE *input, BSOCK *UA_sock) argk[1], be.bstrerror(errno)); return 1; } - + while (fgets(line, sizeof(line), bpipe->rfd)) { senditf("%s", line); } @@ -1481,10 +1476,10 @@ static int quitcmd(FILE *input, BSOCK *UA_sock) static int helpcmd(FILE *input, BSOCK *UA_sock) { int i; - for (i=0; ires_cons.hist_file) { free(res->res_cons.hist_file); } - if (res->res_cons.tls_ctx) { + if (res->res_cons.tls_ctx) { free_tls_context(res->res_cons.tls_ctx); } if (res->res_cons.tls_ca_certfile) { @@ -208,12 +196,15 @@ void free_resource(RES *sres, int type) if (res->res_cons.tls_keyfile) { free(res->res_cons.tls_keyfile); } + if (res->res_cons.director) { + free(res->res_cons.director); + } break; case R_DIRECTOR: if (res->res_dir.address) { free(res->res_dir.address); } - if (res->res_dir.tls_ctx) { + if (res->res_dir.tls_ctx) { free_tls_context(res->res_dir.tls_ctx); } if (res->res_dir.tls_ca_certfile) { diff --git a/bacula/src/console/console_conf.h b/bacula/src/console/console_conf.h index 0742d6801e..042790e813 100644 --- a/bacula/src/console/console_conf.h +++ b/bacula/src/console/console_conf.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2008 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Bacula User Agent specific configuration and defines diff --git a/bacula/src/count-lines b/bacula/src/count-lines deleted file mode 100755 index a680905b1b..0000000000 --- a/bacula/src/count-lines +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh -rm -f 1 -touch 1 -find . -type d >2 -for i in `cat 2` ; do - ls -1 $i/*.c $i/*.cpp $i/*.h $i/*.in 2>/dev/null >>1 -done -cat 1 | $HOME/bin/lines -# rm -f 1 2 diff --git a/bacula/src/dird/Makefile.in b/bacula/src/dird/Makefile.in index f3bd89f061..6d9e181148 100644 --- a/bacula/src/dird/Makefile.in +++ b/bacula/src/dird/Makefile.in @@ -22,9 +22,6 @@ DEBUG=@DEBUG@ GETTEXT_LIBS = @LIBINTL@ CAP_LIBS = @CAP_LIBS@ -PYTHON_LIBS = @PYTHON_LIBS@ -PYTHON_INC = @PYTHON_INCDIR@ - DB_LIBS=@DB_LIBS@ first_rule: all @@ -35,9 +32,8 @@ SVRSRCS = dird.c admin.c authenticate.c \ autoprune.c backup.c bsr.c \ catreq.c dir_plugins.c dird_conf.c expand.c \ fd_cmds.c getmsg.c inc_conf.c job.c \ - jobq.c migrate.c \ + jobq.c mac.c mac_sql.c \ mountreq.c msgchan.c next_vol.c newvol.c \ - pythondir.c \ recycle.c restore.c run_conf.c \ scheduler.c \ ua_acl.c ua_cmds.c ua_dotcmds.c \ @@ -58,7 +54,7 @@ EXTRAOBJS = @OBJLIST@ # inference rules .c.o: @echo "Compiling $<" - $(NO_ECHO)$(CXX) $(DEFS) $(DEBUG) -c $(WCFLAGS) $(CPPFLAGS) $(PYTHON_INC) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) $< + $(NO_ECHO)$(CXX) $(DEFS) $(DEBUG) -c $(WCFLAGS) $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) $< #------------------------------------------------------------------------- all: Makefile bacula-dir @STATIC_DIR@ @echo "==== Make of dird is good ====" @@ -69,14 +65,14 @@ bacula-dir: Makefile $(SVROBJS) ../lib/libbac$(DEFAULT_ARCHIVE_TYPE) ../lib/libb ../cats/libbaccats$(DEFAULT_ARCHIVE_TYPE) ../findlib/libbacfind$(DEFAULT_ARCHIVE_TYPE) @echo "Linking $@ ..." $(LIBTOOL_LINK) $(CXX) $(WLDFLAGS) $(LDFLAGS) -L../lib -L../cats -L../findlib -o $@ $(SVROBJS) \ - -lbacfind -lbacsql -lbaccats -lbacpy -lbaccfg -lbac -lm $(PYTHON_LIBS) $(DLIB) $(DB_LIBS) $(LIBS) \ + -lbacfind -lbacsql -lbaccats -lbacpy -lbaccfg -lbac -lm $(DLIB) $(DB_LIBS) $(LIBS) \ $(WRAPLIBS) $(GETTEXT_LIBS) $(OPENSSL_LIBS) $(CAP_LIBS) static-bacula-dir: Makefile $(SVROBJS) ../lib/libbac$(DEFAULT_ARCHIVE_TYPE) ../lib/libbaccfg$(DEFAULT_ARCHIVE_TYPE) \ ../lib/libbacpy$(DEFAULT_ARCHIVE_TYPE) ../cats/libbacsql$(DEFAULT_ARCHIVE_TYPE) \ ../cats/libbaccats$(DEFAULT_ARCHIVE_TYPE) ../findlib/libbacfind$(DEFAULT_ARCHIVE_TYPE) $(LIBTOOL_LINK) $(CXX) $(WLDFLAGS) $(LDFLAGS) -static -L../lib -L../cats -L../findlib -o $@ $(SVROBJS) \ - -lbacfind -lbacsql -lbaccats -lbacpy -lbaccfg -lbac -lm $(PYTHON_LIBS) $(DLIB) $(DB_LIBS) $(LIBS) \ + -lbacfind -lbacsql -lbaccats -lbacpy -lbaccfg -lbac -lm $(DLIB) $(DB_LIBS) $(LIBS) \ $(WRAPLIBS) $(GETTEXT_LIBS) $(OPENSSL_LIBS) $(CAP_LIBS) strip $@ @@ -127,7 +123,7 @@ install: all uninstall: - (cd $(DESTDIR)$(sbindir); $(RMF) bacula-dir) + (cd $(DESTDIR)$(sbindir); $(RMF) bacula-dir (cd $(DESTDIR)$(sysconfdir); $(RMF) bacula-dir.conf bacula-dir.conf.new) (cd $(DESTDIR)$(scriptdir); $(RMF) query.sql) @@ -142,7 +138,7 @@ depend: @$(MV) Makefile Makefile.bak @$(SED) "/^# DO NOT DELETE:/,$$ d" Makefile.bak > Makefile @$(ECHO) "# DO NOT DELETE: nice dependency list follows" >> Makefile - @$(CXX) -S -M $(CPPFLAGS) $(XINC) $(PYTHON_INC) -I$(srcdir) -I$(basedir) *.c >> Makefile + @$(CXX) -S -M $(CPPFLAGS) $(XINC) -I$(srcdir) -I$(basedir) *.c >> Makefile @if test -f Makefile ; then \ $(RMF) Makefile.bak; \ else \ diff --git a/bacula/src/dird/admin.c b/bacula/src/dird/admin.c index b7773e4c6e..05bd6dbef3 100644 --- a/bacula/src/dird/admin.c +++ b/bacula/src/dird/admin.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2003-2012 Free Software Foundation Europe e.V. + Copyright (C) 2003-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * diff --git a/bacula/src/dird/authenticate.c b/bacula/src/dird/authenticate.c index a69b2779dc..a7254081c7 100644 --- a/bacula/src/dird/authenticate.c +++ b/bacula/src/dird/authenticate.c @@ -1,41 +1,27 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2001-2008 Free Software Foundation Europe e.V. + Copyright (C) 2001-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * - * Bacula Director -- authorize.c -- handles authorization of + * Bacula Director -- authenticate.c -- handles authorization of * Storage and File daemons. * - * Kern Sibbald, May MMI + * Written by: Kern Sibbald, May MMI * * This routine runs as a thread and must be thread reentrant. * - * Version $Id$ - * */ #include "bacula.h" @@ -45,14 +31,21 @@ static const int dbglvl = 50; extern DIRRES *director; -/* Commands sent to Storage daemon and File daemon and received - * from the User Agent */ -static char hello[] = "Hello Director %s calling\n"; +/* Version at end of Hello + * prior to 06Aug13 no version + * 1 06Aug13 - added comm line compression + */ +#define DIR_VERSION 1 + -/* Response from Storage daemon */ -static char OKhello[] = "3000 OK Hello\n"; -static char FDOKhello[] = "2000 OK Hello\n"; -static char FDOKnewHello[] = "2000 OK Hello %d\n"; +/* Command sent to SD */ +static char hello[] = "Hello %sDirector %s calling %d\n"; + +/* Responses from Storage and File daemons */ +static char OKhello[] = "3000 OK Hello"; +static char SDOKnewHello[] = "3000 OK Hello %d"; +static char FDOKhello[] = "2000 OK Hello"; +static char FDOKnewHello[] = "2000 OK Hello %d"; /* Sent to User Agent */ static char Dir_sorry[] = "1999 You are not authorized.\n"; @@ -78,10 +71,11 @@ bool authenticate_storage_daemon(JCR *jcr, STORE *store) bash_spaces(dirname); /* Timeout Hello after 1 min */ btimer_t *tid = start_bsock_timer(sd, AUTH_TIMEOUT); - if (!sd->fsend(hello, dirname)) { + /* Sent Hello SD: Bacula Director calling */ + if (!sd->fsend(hello, "SD: Bacula ", dirname, DIR_VERSION)) { stop_bsock_timer(tid); - Dmsg1(dbglvl, _("Error sending Hello to Storage daemon. ERR=%s\n"), bnet_strerror(sd)); - Jmsg(jcr, M_FATAL, 0, _("Error sending Hello to Storage daemon. ERR=%s\n"), bnet_strerror(sd)); + Dmsg1(dbglvl, _("Error sending Hello to Storage daemon. ERR=%s\n"), sd->bstrerror()); + Jmsg(jcr, M_FATAL, 0, _("Error sending Hello to Storage daemon. ERR=%s\n"), sd->bstrerror()); return 0; } @@ -158,7 +152,9 @@ bool authenticate_storage_daemon(JCR *jcr, STORE *store) } Dmsg1(110, "msg); stop_bsock_timer(tid); - if (strncmp(sd->msg, OKhello, sizeof(OKhello)) != 0) { + jcr->SDVersion = 0; + if (sscanf(sd->msg, SDOKnewHello, &jcr->SDVersion) != 1 && + strncmp(sd->msg, OKhello, sizeof(OKhello)) != 0) { Dmsg0(dbglvl, _("Storage daemon rejected Hello command\n")); Jmsg2(jcr, M_FATAL, 0, _("Storage daemon at \"%s:%d\" rejected Hello command\n"), sd->host(), sd->port()); @@ -187,9 +183,11 @@ int authenticate_file_daemon(JCR *jcr) bash_spaces(dirname); /* Timeout Hello after 1 min */ btimer_t *tid = start_bsock_timer(fd, AUTH_TIMEOUT); - if (!fd->fsend(hello, dirname)) { + if (!fd->fsend(hello, "", dirname, DIR_VERSION)) { stop_bsock_timer(tid); - Jmsg(jcr, M_FATAL, 0, _("Error sending Hello to File daemon at \"%s:%d\". ERR=%s\n"), + Jmsg(jcr, M_FATAL, 0, _("Error sending Hello to File daemon at \"%s:%d\". ERR=%s\n"), + fd->host(), fd->port(), fd->bstrerror()); + Dmsg3(50, _("Error sending Hello to File daemon at \"%s:%d\". ERR=%s\n"), fd->host(), fd->port(), fd->bstrerror()); return 0; } @@ -264,7 +262,7 @@ int authenticate_file_daemon(JCR *jcr) if (fd->recv() <= 0) { stop_bsock_timer(tid); Dmsg1(dbglvl, _("Bad response from File daemon to Hello command: ERR=%s\n"), - bnet_strerror(fd)); + fd->bstrerror()); Jmsg(jcr, M_FATAL, 0, _("Bad response from File daemon at \"%s:%d\" to Hello command: ERR=%s\n"), fd->host(), fd->port(), fd->bstrerror()); return 0; @@ -297,14 +295,16 @@ int authenticate_user_agent(UAContext *uac) bool auth_success = false; TLS_CONTEXT *tls_ctx = NULL; alist *verify_list = NULL; - + int ua_version = 0; + if (ua->msglen < 16 || ua->msglen >= MAX_NAME_LENGTH + 15) { Emsg4(M_ERROR, 0, _("UA Hello from %s:%s:%d is invalid. Len=%d\n"), ua->who(), ua->host(), ua->port(), ua->msglen); return 0; } - if (sscanf(ua->msg, "Hello %127s calling\n", name) != 1) { + if (sscanf(ua->msg, "Hello %127s calling %d", name, &ua_version) != 2 && + sscanf(ua->msg, "Hello %127s calling", name) != 1) { ua->msg[100] = 0; /* terminate string */ Emsg4(M_ERROR, 0, _("UA Hello from %s:%s:%d is invalid. Got: %s\n"), ua->who(), ua->host(), ua->port(), ua->msg); @@ -416,6 +416,7 @@ auth_done: sleep(5); return 0; } - ua->fsend(_("1000 OK: %s Version: %s (%s)\n"), my_name, VERSION, BDATE); + ua->fsend(_("1000 OK: %d %s Version: %s (%s)\n"), + DIR_VERSION, my_name, VERSION, BDATE); return 1; } diff --git a/bacula/src/dird/autoprune.c b/bacula/src/dird/autoprune.c index 737268768f..01bef33ea7 100644 --- a/bacula/src/dird/autoprune.c +++ b/bacula/src/dird/autoprune.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2002-2012 Free Software Foundation Europe e.V. + Copyright (C) 2002-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * @@ -32,6 +20,7 @@ * * Kern Sibbald, May MMII * + * Version $Id$ */ #include "bacula.h" @@ -91,9 +80,10 @@ void prune_volumes(JCR *jcr, bool InChanger, MEDIA_DBR *mr, int i; dbid_list ids; struct del_ctx prune_list; - POOL_MEM query(PM_MESSAGE); + POOL_MEM query(PM_MESSAGE), changer(PM_MESSAGE); UAContext *ua; char ed1[50], ed2[100], ed3[50]; + POOL_DBR spr; Dmsg1(100, "Prune volumes PoolId=%d\n", jcr->jr.PoolId); @@ -132,7 +122,7 @@ void prune_volumes(JCR *jcr, bool InChanger, MEDIA_DBR *mr, Dmsg1(100, "Scratch pool(s)=%s\n", ed2); /* * ed2 ends up with scratch poolid and current poolid or - * just current poolid if there is no scratch pool + * just current poolid if there is no scratch pool */ bstrncat(ed2, ed1, sizeof(ed2)); @@ -144,16 +134,13 @@ void prune_volumes(JCR *jcr, bool InChanger, MEDIA_DBR *mr, "(PoolId=%s OR RecyclePoolId IN (%s)) AND MediaType='%s' %s" "ORDER BY LastWritten ASC,MediaId"; + set_storageid_in_mr(store, mr); if (InChanger) { - char changer[100]; - /* Ensure it is in this autochanger */ - bsnprintf(changer, sizeof(changer), "AND InChanger=1 AND StorageId=%s ", - edit_int64(mr->StorageId, ed3)); - Mmsg(query, select, ed1, ed2, mr->MediaType, changer); - } else { - Mmsg(query, select, ed1, ed2, mr->MediaType, ""); + Mmsg(changer, "AND InChanger=1 AND StorageId IN (%s) ", edit_int64(mr->StorageId, ed3)); } + Mmsg(query, select, ed1, ed2, mr->MediaType, changer.c_str()); + Dmsg1(100, "query=%s\n", query.c_str()); if (!db_get_query_dbids(ua->jcr, ua->db, query, ids)) { Jmsg(jcr, M_ERROR, 0, "%s", db_strerror(jcr->db)); @@ -188,10 +175,10 @@ void prune_volumes(JCR *jcr, bool InChanger, MEDIA_DBR *mr, prune_list.num_ids = 0; /* reset count */ } if (!is_volume_purged(ua, &lmr)) { - Dmsg1(050, "Vol=%s not pruned\n", lmr.VolumeName); + Dmsg1(100, "Vol=%s not pruned\n", lmr.VolumeName); continue; } - Dmsg1(050, "Vol=%s is purged\n", lmr.VolumeName); + Dmsg1(100, "Vol=%s is purged\n", lmr.VolumeName); /* * Since we are also pruning the Scratch pool, continue @@ -200,10 +187,11 @@ void prune_volumes(JCR *jcr, bool InChanger, MEDIA_DBR *mr, */ if (InChanger) { if (!lmr.InChanger || (lmr.StorageId != mr->StorageId)) { - Dmsg1(100, "Vol=%s not inchanger or correct StoreId\n", lmr.VolumeName); + Dmsg1(100, "Vol=%s not inchanger\n", lmr.VolumeName); continue; /* skip this volume, ie not loadable */ } } + if (!lmr.Recycle) { Dmsg1(100, "Vol=%s not recyclable\n", lmr.VolumeName); continue; @@ -215,7 +203,7 @@ void prune_volumes(JCR *jcr, bool InChanger, MEDIA_DBR *mr, } /* - * If purged and not moved to another Pool, + * If purged and not moved to another Pool, * then we stop pruning and take this volume. */ if (lmr.PoolId == mr->PoolId) { diff --git a/bacula/src/dird/backup.c b/bacula/src/dird/backup.c index 65d5803d3b..6492e1e34e 100644 --- a/bacula/src/dird/backup.c +++ b/bacula/src/dird/backup.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2012 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * @@ -51,18 +39,28 @@ static char storaddr[] = "storage address=%s port=%d ssl=%d\n"; /* Responses received from File daemon */ static char OKbackup[] = "2000 OK backup\n"; static char OKstore[] = "2000 OK storage\n"; +/* Pre 17 Aug 2013 */ static char EndJob[] = "2800 End Job TermCode=%d JobFiles=%u " - "ReadBytes=%llu JobBytes=%llu Errors=%u " + "ReadBytes=%llu JobBytes=%llu Errors=%u " "VSS=%d Encrypt=%d\n"; /* Pre 1.39.29 (04Dec06) EndJob */ static char OldEndJob[] = "2800 End Job TermCode=%d JobFiles=%u " "ReadBytes=%llu JobBytes=%llu Errors=%u\n"; -/* + +/* Commands sent to Storage daemon */ +static char clientaddr[] = "client address=%s port=%d ssl=%d\n"; + +/* Commands received from Storage daemon */ +static char OKclient[] = "3000 OK client command\n"; + +/* * Called here before the job is run to do the job * specific setup. */ bool do_backup_init(JCR *jcr) { + /* Make local copy */ + jcr->RescheduleIncompleteJobs = jcr->job->RescheduleIncompleteJobs; if (jcr->is_JobLevel(L_VIRTUAL_FULL)) { return do_vbackup_init(jcr); @@ -73,7 +71,7 @@ bool do_backup_init(JCR *jcr) return false; } - /* + /* * Get definitive Job level and since time */ get_level_since_time(jcr, jcr->since, sizeof(jcr->since)); @@ -147,22 +145,22 @@ static int accurate_list_handler(void *ctx, int num_fields, char **row) if (job_canceled(jcr)) { return 1; } - + if (row[2][0] == '0') { /* discard when file_index == 0 */ return 0; } /* sending with checksum */ - if (jcr->use_accurate_chksum - && num_fields == 7 + if (jcr->use_accurate_chksum + && num_fields == 7 && row[6][0] /* skip checksum = '0' */ && row[6][1]) - { - jcr->file_bsock->fsend("%s%s%c%s%c%s%c%s", - row[0], row[1], 0, row[4], 0, row[6], 0, row[5]); + { + jcr->file_bsock->fsend("%s%s%c%s%c%s%c%s", + row[0], row[1], 0, row[4], 0, row[6], 0, row[5]); } else { - jcr->file_bsock->fsend("%s%s%c%s%c%c%s", - row[0], row[1], 0, row[4], 0, 0, row[5]); + jcr->file_bsock->fsend("%s%s%c%s%c%c%s", + row[0], row[1], 0, row[4], 0, 0, row[5]); } return 0; } @@ -183,13 +181,13 @@ static bool is_checksum_needed_by_fileset(JCR *jcr) } f = jcr->job->fileset; - + for (int i=0; i < f->num_includes; i++) { /* Parse all Include {} */ inc = f->include_items[i]; - + for (int j=0; j < inc->num_opts; j++) { /* Parse all Options {} */ fopts = inc->opts_list[j]; - + for (char *k=fopts->opts; *k ; k++) { /* Try to find one request */ switch (*k) { case 'V': /* verify */ @@ -222,7 +220,7 @@ static bool is_checksum_needed_by_fileset(JCR *jcr) if (!have_basejob_option && jcr->HasBase) { return true; } - + Dmsg0(50, "Checksum will be sent to FD\n"); return false; } @@ -240,12 +238,12 @@ bool send_accurate_current_files(JCR *jcr) POOL_MEM buf; db_list_ctx jobids; db_list_ctx nb; + char ed1[50]; - /* In base level, no previous job is used and no restart incomplete jobs */ if (jcr->is_canceled() || jcr->is_JobLevel(L_BASE)) { return true; } - if (!jcr->accurate) { + if (!jcr->accurate && !jcr->rerunning) { return true; } @@ -254,7 +252,7 @@ bool send_accurate_current_files(JCR *jcr) if (get_base_jobids(jcr, &jobids)) { jcr->HasBase = true; Jmsg(jcr, M_INFO, 0, _("Using BaseJobId(s): %s\n"), jobids.list); - } else { + } else if (!jcr->rerunning) { return true; } } else { @@ -268,42 +266,150 @@ bool send_accurate_current_files(JCR *jcr) } } + if (jcr->rerunning) { + edit_int64(jcr->JobId, ed1); + jobids.add(ed1); + } + /* Don't send and store the checksum if fileset doesn't require it */ jcr->use_accurate_chksum = is_checksum_needed_by_fileset(jcr); if (jcr->JobId) { /* display the message only for real jobs */ - Jmsg(jcr, M_INFO, 0, _("Sending Accurate information.\n")); + Jmsg(jcr, M_INFO, 0, _("Sending Accurate information to the FD.\n")); } /* to be able to allocate the right size for htable */ Mmsg(buf, "SELECT sum(JobFiles) FROM Job WHERE JobId IN (%s)", jobids.list); db_sql_query(jcr->db, buf.c_str(), db_list_handler, &nb); Dmsg2(200, "jobids=%s nb=%s\n", jobids.list, nb.list); - jcr->file_bsock->fsend("accurate files=%s\n", nb.list); + jcr->file_bsock->fsend("accurate files=%s\n", nb.list); if (!db_open_batch_connexion(jcr, jcr->db)) { Jmsg0(jcr, M_FATAL, 0, "Can't get batch sql connexion"); return false; /* Fail */ } - + if (jcr->HasBase) { jcr->nb_base_files = str_to_int64(nb.list); - db_create_base_file_list(jcr, jcr->db, jobids.list); - db_get_base_file_list(jcr, jcr->db, jcr->use_accurate_chksum, - accurate_list_handler, (void *)jcr); + if (!db_create_base_file_list(jcr, jcr->db, jobids.list)) { + Jmsg1(jcr, M_FATAL, 0, "%s", db_strerror(jcr->db)); + return false; + } + if (!db_get_base_file_list(jcr, jcr->db, jcr->use_accurate_chksum, + accurate_list_handler, (void *)jcr)) { + Jmsg1(jcr, M_FATAL, 0, "%s", db_strerror(jcr->db)); + return false; + } } else { - db_get_file_list(jcr, jcr->db_batch, + if (!db_get_file_list(jcr, jcr->db_batch, jobids.list, jcr->use_accurate_chksum, false /* no delta */, - accurate_list_handler, (void *)jcr); - } + accurate_list_handler, (void *)jcr)) { + Jmsg1(jcr, M_FATAL, 0, "%s", db_strerror(jcr->db)); + return false; + } + } /* TODO: close the batch connection ? (can be used very soon) */ - jcr->file_bsock->signal(BNET_EOD); return true; } +bool send_store_addr_to_fd(JCR *jcr, STORE *store, + char *store_address, uint32_t store_port) +{ + int tls_need = BNET_TLS_NONE; + + /* TLS Requirement */ + if (store->tls_enable) { + if (store->tls_require) { + tls_need = BNET_TLS_REQUIRED; + } else { + tls_need = BNET_TLS_OK; + } + } + + /* + * Send Storage address to the FD + */ + jcr->file_bsock->fsend(storaddr, store_address, store_port, tls_need); + if (!response(jcr, jcr->file_bsock, OKstore, "Storage", DISPLAY_ERROR)) { + return false; + } + return true; +} + +bool send_client_addr_to_sd(JCR *jcr) +{ + int tls_need = BNET_TLS_NONE; + BSOCK *sd = jcr->store_bsock; + + /* TLS Requirement for the client */ + if (jcr->client->tls_enable) { + if (jcr->client->tls_require) { + tls_need = BNET_TLS_REQUIRED; + } else { + tls_need = BNET_TLS_OK; + } + } + /* + * Send Client address to the SD + */ + sd->fsend(clientaddr, jcr->client->address, jcr->client->FDport, tls_need); + if (!response(jcr, sd, OKclient, "Client", DISPLAY_ERROR)) { + return false; + } + return true; +} + +/* + * Allow to specify the address used by the Client to + * connect to the storage daemon in the Client resource + * or in the Storage resource. + */ +char *get_storage_address(CLIENT *client, STORE *store) +{ + char *store_address; + + if (client && client->fd_storage_address) { + Dmsg0(10, "Using Client resource FD Storage Address to contact the Storage\n"); + store_address = client->fd_storage_address; + + } else if (store->fd_storage_address) { + Dmsg0(10, "Using Storage resource FD Storage Address to contact the Storage\n"); + store_address = store->fd_storage_address; + + } else { + Dmsg0(10, "Using default Storage address\n"); + store_address = store->address; + } + return store_address; +} + +bool run_storage_and_start_message_thread(JCR *jcr, BSOCK *sd) +{ + /* + * Start the job prior to starting the message thread below + * to avoid two threads from using the BSOCK structure at + * the same time. + */ + if (!sd->fsend("run")) { + return false; + } + + /* + * Now start a Storage daemon message thread. Note, + * this thread is used to provide the catalog services + * for the backup job, including inserting the attributes + * into the catalog. See catalog_update() in catreq.c + */ + if (!start_storage_daemon_message_thread(jcr)) { + return false; + } + Dmsg0(150, "Storage daemon connection OK\n"); + return true; +} + /* * Do a backup of the specified FileSet * @@ -313,9 +419,10 @@ bool send_accurate_current_files(JCR *jcr) bool do_backup(JCR *jcr) { int stat; - int tls_need = BNET_TLS_NONE; - BSOCK *fd; + BSOCK *fd, *sd; STORE *store; + char *store_address; + uint32_t store_port; char ed1[100]; db_int64_ctx job; POOL_MEM buf; @@ -326,7 +433,7 @@ bool do_backup(JCR *jcr) /* Print Job Start message */ Jmsg(jcr, M_INFO, 0, _("Start Backup JobId %s, Job=%s\n"), - edit_uint64(jcr->JobId, ed1), jcr->Job); + edit_uint64(jcr->JobId, ed1), jcr->Job); jcr->setJobStatus(JS_Running); Dmsg2(100, "JobId=%d JobLevel=%c\n", jcr->jr.JobId, jcr->jr.JobLevel); @@ -335,6 +442,7 @@ bool do_backup(JCR *jcr) return false; } + /* * Open a message channel connection with the Storage * daemon. This is to let him know that our client @@ -355,27 +463,17 @@ bool do_backup(JCR *jcr) if (!start_storage_daemon_job(jcr, NULL, jcr->wstorage)) { return false; } - - /* - * Start the job prior to starting the message thread below - * to avoid two threads from using the BSOCK structure at - * the same time. - */ - if (!jcr->store_bsock->fsend("run")) { - return false; - } - + sd = jcr->store_bsock; + jcr->sd_calls_client = jcr->client->sd_calls_client; /* - * Now start a Storage daemon message thread. Note, - * this thread is used to provide the catalog services - * for the backup job, including inserting the attributes - * into the catalog. See catalog_update() in catreq.c + * Note startup sequence of SD/FD is different depending on + * whether the SD listens (normal) or the SD calls the FD. */ - if (!start_storage_daemon_message_thread(jcr)) { - return false; + if (!jcr->sd_calls_client) { + if (!run_storage_and_start_message_thread(jcr, sd)) { + goto bail_out; + } } - Dmsg0(150, "Storage daemon connection OK\n"); - jcr->setJobStatus(JS_WaitFD); if (!connect_to_file_daemon(jcr, 10, FDConnectTimeout, 1)) { goto bail_out; @@ -396,25 +494,47 @@ bool do_backup(JCR *jcr) goto bail_out; } - /* - * send Storage daemon address to the File daemon - */ - store = jcr->wstore; - if (store->SDDport == 0) { - store->SDDport = store->SDport; + /* TODO: See priority with bandwidth parameter */ + if (jcr->job->max_bandwidth > 0) { + jcr->max_bandwidth = jcr->job->max_bandwidth; + } else if (jcr->client->max_bandwidth > 0) { + jcr->max_bandwidth = jcr->client->max_bandwidth; } - /* TLS Requirement */ - if (store->tls_enable) { - if (store->tls_require) { - tls_need = BNET_TLS_REQUIRED; - } else { - tls_need = BNET_TLS_OK; + if (jcr->max_bandwidth > 0) { + send_bwlimit(jcr, jcr->Job); /* Old clients don't have this command */ + } + + store = jcr->wstore; + + if (jcr->sd_calls_client) { + if (jcr->FDVersion < 5) { + Jmsg(jcr, M_FATAL, 0, _("The File daemon does not support SDCallsClient.\n")); + goto bail_out; + } + if (!send_client_addr_to_sd(jcr)) { + goto bail_out; + } + + if (!run_storage_and_start_message_thread(jcr, sd)) { + goto bail_out; + } + + store_address = jcr->wstore->address; /* dummy */ + store_port = 0; /* flag that SD calls FD */ + } else { + /* + * send Storage daemon address to the File daemon + */ + if (store->SDDport == 0) { + store->SDDport = store->SDport; } + + store_address = get_storage_address(jcr->client, store); + store_port = store->SDDport; } - fd->fsend(storaddr, store->address, store->SDDport, tls_need); - if (!response(jcr, fd, OKstore, "Storage", DISPLAY_ERROR)) { + if (!send_store_addr_to_fd(jcr, store, store_address, store_port)) { goto bail_out; } @@ -426,14 +546,14 @@ bool do_backup(JCR *jcr) goto bail_out; } - /* + /* * We re-update the job start record so that the start - * time is set after the run before job. This avoids + * time is set after the run before job. This avoids * that any files created by the run before job will * be saved twice. They will be backed up in the current * job, but not in the next one unless they are changed. * Without this, they will be backed up in this job and - * in the next job run because in that case, their date + * in the next job run because in that case, their date * is after the start of this run. */ jcr->start_time = time(NULL); @@ -461,14 +581,15 @@ bool do_backup(JCR *jcr) stat = wait_for_job_termination(jcr); db_write_batch_file_records(jcr); /* used by bulk batch file insert */ - if (jcr->HasBase && !db_commit_base_file_attributes_record(jcr, jcr->db)) { - Jmsg(jcr, M_FATAL, 0, "%s", db_strerror(jcr->db)); + if (jcr->HasBase) { + db_commit_base_file_attributes_record(jcr, jcr->db); + /* Any error already printed */ } - if (stat == JS_Terminated) { + if (!jcr->is_canceled() && stat == JS_Terminated) { backup_cleanup(jcr, stat); return true; - } + } return false; /* Come here only after starting SD thread */ @@ -501,16 +622,14 @@ int wait_for_job_termination(JCR *jcr, int timeout) int Encrypt = 0; btimer_t *tid=NULL; - jcr->setJobStatus(JS_Running); - if (fd) { if (timeout) { tid = start_bsock_timer(fd, timeout); /* TODO: New timeout directive??? */ } /* Wait for Client to terminate */ while ((n = bget_dirmsg(fd)) >= 0) { - if (!fd_ok && - (sscanf(fd->msg, EndJob, &jcr->FDJobStatus, &JobFiles, + if (!fd_ok && + (sscanf(fd->msg, EndJob, &jcr->FDJobStatus, &JobFiles, &ReadBytes, &JobBytes, &JobErrors, &VSS, &Encrypt) == 7 || sscanf(fd->msg, OldEndJob, &jcr->FDJobStatus, &JobFiles, &ReadBytes, &JobBytes, &JobErrors) == 5)) { @@ -529,20 +648,19 @@ int wait_for_job_termination(JCR *jcr, int timeout) stop_bsock_timer(tid); } - if (is_bnet_error(fd)) { + if (fd->is_error() && jcr->getJobStatus() != JS_Canceled) { int i = 0; Jmsg(jcr, M_FATAL, 0, _("Network error with FD during %s: ERR=%s\n"), job_type_to_str(jcr->getJobType()), fd->bstrerror()); - while (i++ < 10 && jcr->job->RescheduleIncompleteJobs && jcr->is_canceled()) { + while (i++ < 20 && jcr->job->RescheduleIncompleteJobs && jcr->is_canceled()) { bmicrosleep(3, 0); } - } fd->signal(BNET_TERMINATE); /* tell Client we are terminating */ } /* - * Force cancel in SD if failing, but not for Incomplete jobs + * Force cancel in SD if failing, * so that we let the SD despool. */ Dmsg5(100, "cancel=%d fd_ok=%d FDJS=%d JS=%d SDJS=%d\n", jcr->is_canceled(), fd_ok, jcr->FDJobStatus, @@ -565,16 +683,17 @@ int wait_for_job_termination(JCR *jcr, int timeout) jcr->JobWarnings = JobWarnings; jcr->VSS = VSS; jcr->Encrypt = Encrypt; - } else { + } else if (jcr->getJobStatus() != JS_Canceled) { Jmsg(jcr, M_FATAL, 0, _("No Job status returned from FD.\n")); } -// Dmsg4(100, "fd_ok=%d FDJS=%d JS=%d SDJS=%d\n", fd_ok, jcr->FDJobStatus, -// jcr->JobStatus, jcr->SDJobStatus); - /* Return the first error status we find Dir, FD, or SD */ - if (!fd_ok || is_bnet_error(fd)) { /* if fd not set, that use !fd_ok */ - jcr->FDJobStatus = JS_ErrorTerminated; + if (!fd_ok || fd->is_error()) { /* if fd not set, that use !fd_ok */ + if (jcr->getJobStatus() == JS_Canceled) { + jcr->FDJobStatus = JS_Canceled; + } else { + jcr->FDJobStatus = JS_ErrorTerminated; + } } if (jcr->JobStatus != JS_Terminated) { return jcr->JobStatus; @@ -591,16 +710,18 @@ int wait_for_job_termination(JCR *jcr, int timeout) void backup_cleanup(JCR *jcr, int TermCode) { char sdt[50], edt[50], schedt[50]; - char ec1[30], ec2[30], ec3[30], ec4[30], ec5[30], compress[50]; + char ec1[30], ec2[30], ec3[30], ec4[30], ec5[30]; char ec6[30], ec7[30], ec8[30], elapsed[50]; + char data_compress[200]; char term_code[100], fd_term_msg[100], sd_term_msg[100]; const char *term_msg; int msg_type = M_INFO; MEDIA_DBR mr; CLIENT_DBR cr; - double kbps, compression; + double kbps, compression, ratio; utime_t RunTime; POOL_MEM base_info; + POOL_MEM vol_info; if (jcr->is_JobLevel(L_VIRTUAL_FULL)) { vbackup_cleanup(jcr, TermCode); @@ -616,12 +737,12 @@ void backup_cleanup(JCR *jcr, int TermCode) * JS_Terminated almost everywhere instead of (JS_Terminated || JS_Warning) * as we do with is_canceled() */ - if (jcr->getJobStatus() == JS_Terminated && + if (jcr->getJobStatus() == JS_Terminated && (jcr->JobErrors || jcr->SDErrors || jcr->JobWarnings)) { TermCode = JS_Warnings; } #endif - + update_job_end(jcr, TermCode); if (!db_get_job_record(jcr, jcr->db, &jcr->jr)) { @@ -653,9 +774,6 @@ void backup_cleanup(JCR *jcr, int TermCode) term_msg = _("Backup OK"); } break; - case JS_Incomplete: - term_msg = _("Backup failed -- incomplete"); - break; case JS_Warnings: term_msg = _("Backup OK -- with warnings"); break; @@ -707,25 +825,35 @@ void backup_cleanup(JCR *jcr, int TermCode) } if (jcr->ReadBytes == 0) { - bstrncpy(compress, "None", sizeof(compress)); + bstrncpy(data_compress, "None", sizeof(data_compress)); } else { compression = (double)100 - 100.0 * ((double)jcr->JobBytes / (double)jcr->ReadBytes); if (compression < 0.5) { - bstrncpy(compress, "None", sizeof(compress)); + bstrncpy(data_compress, "None", sizeof(data_compress)); } else { - bsnprintf(compress, sizeof(compress), "%.1f %%", compression); + if (jcr->JobBytes > 0) { + ratio = (double)jcr->ReadBytes / (double)jcr->JobBytes; + } else { + ratio = 1.0; + } + bsnprintf(data_compress, sizeof(data_compress), "%.1f%% %.1f:1", + compression, ratio); } } jobstatus_to_ascii(jcr->FDJobStatus, fd_term_msg, sizeof(fd_term_msg)); jobstatus_to_ascii(jcr->SDJobStatus, sd_term_msg, sizeof(sd_term_msg)); if (jcr->HasBase) { - Mmsg(base_info, " Base files/Used files: %lld/%lld (%.2f%%)\n", - jcr->nb_base_files, - jcr->nb_base_files_used, + Mmsg(base_info, _(" Base files/Used files: %lld/%lld (%.2f%%)\n"), + jcr->nb_base_files, + jcr->nb_base_files_used, jcr->nb_base_files_used*100.0/jcr->nb_base_files); } -// bmicrosleep(15, 0); /* for debugging SIGHUP */ + /* Edit string for last volume size */ + Mmsg(vol_info, _("%s (%sB)"), + edit_uint64_with_commas(mr.VolBytes, ec7), + edit_uint64_with_suffix(mr.VolBytes, ec8)); + Jmsg(jcr, msg_type, 0, _("%s %s %s (%s):\n" " Build OS: %s %s %s\n" @@ -755,7 +883,7 @@ void backup_cleanup(JCR *jcr, int TermCode) " Volume name(s): %s\n" " Volume Session Id: %d\n" " Volume Session Time: %d\n" -" Last Volume Bytes: %s (%sB)\n" +" Last Volume Bytes: %s\n" " Non-fatal FD errors: %d\n" " SD Errors: %d\n" " FD termination status: %s\n" @@ -783,7 +911,7 @@ void backup_cleanup(JCR *jcr, int TermCode) edit_uint64_with_commas(jcr->SDJobBytes, ec5), edit_uint64_with_suffix(jcr->SDJobBytes, ec6), kbps, - compress, + data_compress, base_info.c_str(), jcr->VSS?_("yes"):_("no"), jcr->Encrypt?_("yes"):_("no"), @@ -791,8 +919,7 @@ void backup_cleanup(JCR *jcr, int TermCode) jcr->VolumeName, jcr->VolSessionId, jcr->VolSessionTime, - edit_uint64_with_commas(mr.VolBytes, ec7), - edit_uint64_with_suffix(mr.VolBytes, ec8), + vol_info.c_str(), jcr->JobErrors, jcr->SDErrors, fd_term_msg, @@ -849,7 +976,7 @@ void update_bootstrap_file(JCR *jcr) } fprintf(fd, "VolSessionId=%u\n", jcr->VolSessionId); fprintf(fd, "VolSessionTime=%u\n", jcr->VolSessionTime); - fprintf(fd, "VolAddr=%s-%s\n", + fprintf(fd, "VolAddr=%s-%s\n", edit_uint64(VolParams[i].StartAddr, ed1), edit_uint64(VolParams[i].EndAddr, ed2)); fprintf(fd, "FileIndex=%d-%d\n", VolParams[i].FirstIndex, diff --git a/bacula/src/dird/bacula-dir.conf.in b/bacula/src/dird/bacula-dir.conf.in index 9b79d468c0..2b469c0469 100644 --- a/bacula/src/dird/bacula-dir.conf.in +++ b/bacula/src/dird/bacula-dir.conf.in @@ -18,7 +18,7 @@ Director { # define myself QueryFile = "@scriptdir@/query.sql" WorkingDirectory = "@working_dir@" PidDirectory = "@piddir@" - Maximum Concurrent Jobs = 1 + Maximum Concurrent Jobs = 20 Password = "@dir_password@" # Console password Messages = Daemon } @@ -27,12 +27,13 @@ JobDefs { Name = "DefaultJob" Type = Backup Level = Incremental - Client = @basename@-fd + Client = @basename@-fd FileSet = "Full Set" Schedule = "WeeklyCycle" - Storage = File + Storage = File1 Messages = Standard Pool = File + SpoolAttributes = yes Priority = 10 Write Bootstrap = "@working_dir@/%c.bsr" } @@ -52,6 +53,16 @@ Job { # JobDefs = "DefaultJob" #} +#Job { +# Name = "BackupClient1-to-Tape" +# JobDefs = "DefaultJob" +# Storage = LTO-4 +# Spool Data = yes # Avoid shoe-shine +# Pool = Default +#} + +#} + # Backup the catalog database (after the nightly save) Job { Name = "BackupCatalog" @@ -76,10 +87,10 @@ Job { Job { Name = "RestoreFiles" Type = Restore - Client=@basename@-fd - FileSet="Full Set" - Storage = File - Pool = Default + Client=@basename@-fd + FileSet="Full Set" + Storage = File1 + Pool = File Messages = Standard Where = @archivedir@/bacula-restores } @@ -92,7 +103,7 @@ FileSet { Options { signature = MD5 } -# +# # Put your list of files here, preceded by 'File =', one per line # or include an external list with: # @@ -118,6 +129,7 @@ FileSet { File = @archivedir@ File = /proc File = /tmp + File = /sys File = /.journal File = /.fsck } @@ -158,7 +170,7 @@ Client { FDPort = @fd_port@ Catalog = MyCatalog Password = "@fd_password@" # password for FileDaemon - File Retention = 30 days # 30 days + File Retention = 60 days # 60 days Job Retention = 6 months # six months AutoPrune = yes # Prune expired Jobs/Files } @@ -168,70 +180,57 @@ Client { # You should change Name, Address, and Password before using # #Client { -# Name = @basename@2-fd +# Name = @basename@2-fd # Address = @hostname@2 # FDPort = @fd_port@ # Catalog = MyCatalog -# Password = "@fd_password@2" # password for FileDaemon 2 -# File Retention = 30 days # 30 days -# Job Retention = 6 months # six months -# AutoPrune = yes # Prune expired Jobs/Files +# Password = "@fd_password@2" # password for FileDaemon 2 +# File Retention = 60 days # 60 days +# Job Retention = 6 months # six months +# AutoPrune = yes # Prune expired Jobs/Files #} -# Definition of file storage device +# Definition of file Virtual Autochanger device Storage { - Name = File -# Do not use "localhost" here + Name = File1 +# Do not use "localhost" here Address = @hostname@ # N.B. Use a fully qualified name here SDPort = @sd_port@ Password = "@sd_password@" - Device = FileStorage - Media Type = File + Device = FileChgr1 + Media Type = File1 + Maximum Concurrent Jobs = 10 # run up to 10 jobs a the same time } +# Definition of a second file Virtual Autochanger device +# Possibly pointing to a different disk drive +Storage { + Name = File2 +# Do not use "localhost" here + Address = @hostname@ # N.B. Use a fully qualified name here + SDPort = @sd_port@ + Password = "@sd_password@" + Device = FileChgr2 + Media Type = File2 + Maximum Concurrent Jobs = 10 # run up to 10 jobs a the same time +} - -# Definition of DDS tape storage device -#Storage { -# Name = DDS-4 -# Do not use "localhost" here -# Address = @hostname@ # N.B. Use a fully qualified name here -# SDPort = @sd_port@ -# Password = "@sd_password@" # password for Storage daemon -# Device = DDS-4 # must be same as Device in Storage daemon -# Media Type = DDS-4 # must be same as MediaType in Storage daemon -# Autochanger = yes # enable for autochanger device -#} - -# Definition of 8mm tape storage device -#Storage { -# Name = "8mmDrive" -# Do not use "localhost" here -# Address = @hostname@ # N.B. Use a fully qualified name here -# SDPort = @sd_port@ -# Password = "@sd_password@" -# Device = "Exabyte 8mm" -# MediaType = "8mm" -#} - -# Definition of DVD storage device +# Definition of LTO-4 tape Autochanger device #Storage { -# Name = "DVD" +# Name = LTO-4 # Do not use "localhost" here -# Address = @hostname@ # N.B. Use a fully qualified name here +# Address = @hostname@ # N.B. Use a fully qualified name here # SDPort = @sd_port@ -# Password = "@sd_password@" -# Device = "DVD Writer" -# MediaType = "DVD" +# Password = "@sd_password@" # password for Storage daemon +# Device = LTO-4 # must be same as Device in Storage daemon +# Media Type = LTO-4 # must be same as MediaType in Storage daemon +# Maximum Concurrent Jobs = 10 #} - # Generic catalog service Catalog { Name = MyCatalog -# Uncomment the following line if you want the dbi driver -@uncomment_dbi@ dbdriver = "dbi:@DEFAULT_DB_TYPE@"; dbaddress = 127.0.0.1; dbport = @db_port@ dbname = "@db_name@"; dbuser = "@db_user@"; dbpassword = "@db_password@" } @@ -246,14 +245,14 @@ Messages { # What this does is, it sets the email address that emails would display # in the FROM field, which is by default the same email as they're being # sent to. However, if you send email to more than one address, then -# you'll have to set the FROM address manually, to a single address. +# you'll have to set the FROM address manually, to a single address. # for example, a 'no-reply@mydomain.com', is better since that tends to # tell (most) people that its coming from an automated source. # mailcommand = "@sbindir@/bsmtp -h @smtp_host@ -f \"\(Bacula\) \<%r\>\" -s \"Bacula: %t %e of %c %l\" %r" operatorcommand = "@sbindir@/bsmtp -h @smtp_host@ -f \"\(Bacula\) \<%r\>\" -s \"Bacula: Intervention needed for %j\" %r" - mail = @job_email@ = all, !skipped + mail = @job_email@ = all, !skipped operator = @job_email@ = mount console = all, !skipped, !saved # @@ -271,7 +270,7 @@ Messages { Messages { Name = Daemon mailcommand = "@sbindir@/bsmtp -h @smtp_host@ -f \"\(Bacula\) \<%r\>\" -s \"Bacula daemon message\" %r" - mail = @job_email@ = all, !skipped + mail = @job_email@ = all, !skipped console = all, !skipped, !saved append = "@logdir@/bacula.log" = all, !skipped } @@ -283,6 +282,8 @@ Pool { Recycle = yes # Bacula can automatically recycle Volumes AutoPrune = yes # Prune expired volumes Volume Retention = 365 days # one year + Maximum Volume Bytes = 50G # Limit Volume size to something reasonable + Maximum Volumes = 100 # Limit number of Volumes in Pool } # File Pool definition @@ -294,6 +295,7 @@ Pool { Volume Retention = 365 days # one year Maximum Volume Bytes = 50G # Limit Volume size to something reasonable Maximum Volumes = 100 # Limit number of Volumes in Pool + Label Format = "Vol-" # Auto label } diff --git a/bacula/src/dird/bsr.c b/bacula/src/dird/bsr.c index 63d85b8745..97d16076e3 100644 --- a/bacula/src/dird/bsr.c +++ b/bacula/src/dird/bsr.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2002-2010 Free Software Foundation Europe e.V. + Copyright (C) 2002-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * @@ -62,7 +50,7 @@ static void free_findex(RBSR_FINDEX *fi) } } -/* +/* * Get storage device name from Storage resource */ static bool get_storage_device(char *device, char *storage) @@ -71,7 +59,7 @@ static bool get_storage_device(char *device, char *storage) if (storage[0] == 0) { return false; } - store = (STORE *)GetResWithName(R_STORAGE, storage); + store = (STORE *)GetResWithName(R_STORAGE, storage); if (!store) { return false; } @@ -200,7 +188,7 @@ static void make_unique_restore_filename(UAContext *ua, POOL_MEM &fname) JCR *jcr = ua->jcr; int i = find_arg_with_value(ua, "bootstrap"); if (i >= 0) { - Mmsg(fname, "%s", ua->argv[i]); + Mmsg(fname, "%s", ua->argv[i]); jcr->unlink_bsr = false; } else { P(mutex); @@ -249,7 +237,7 @@ uint32_t write_bsr_file(UAContext *ua, RESTORE_CTX &rx) ua->send_msg(_("Bootstrap records written to %s\n"), fname.c_str()); - if (debug_level >= 10) { + if (chk_dbglvl(10)) { print_bsr(ua, rx); } @@ -279,7 +267,7 @@ static void display_vol_info(UAContext *ua, RESTORE_CTX &rx, JobId_t JobId) } else { online = ' '; } - Mmsg(volmsg, "%c%-25s %-25s %-25s", + Mmsg(volmsg, "%c%-25s %-25s %-25s", online, bsr->VolParams[i].VolumeName, bsr->VolParams[i].Storage, Device); add_prompt(ua, volmsg.c_str()); @@ -295,7 +283,7 @@ void display_bsr_info(UAContext *ua, RESTORE_CTX &rx) /* Tell the user what he will need to mount */ ua->send_msg("\n"); - ua->send_msg(_("The job will require the following\n" + ua->send_msg(_("The Job will require the following (*=>InChanger):\n" " Volume(s) Storage(s) SD Device(s)\n" "===========================================================================\n")); /* Create Unique list of Volumes using prompt list */ @@ -312,11 +300,12 @@ void display_bsr_info(UAContext *ua, RESTORE_CTX &rx) for (int i=0; i < ua->num_prompts; i++) { ua->send_msg(" %s\n", ua->prompt[i]); free(ua->prompt[i]); + if (ua->unique[i]) free(ua->unique[i]); } if (ua->num_prompts == 0) { ua->send_msg(_("No Volumes found to restore.\n")); } else { - ua->send_msg(_("\nVolumes marked with \"*\" are online.\n")); + ua->send_msg(_("\nVolumes marked with \"*\" are in the Autochanger.\n")); } ua->num_prompts = 0; ua->send_msg("\n"); @@ -327,7 +316,7 @@ void display_bsr_info(UAContext *ua, RESTORE_CTX &rx) /* * Write bsr data for a single bsr record */ -static uint32_t write_bsr_item(RBSR *bsr, UAContext *ua, +static uint32_t write_bsr_item(RBSR *bsr, UAContext *ua, RESTORE_CTX &rx, FILE *fd, bool &first, uint32_t &LastIndex) { char ed1[50], ed2[50]; @@ -392,7 +381,7 @@ static uint32_t write_bsr_item(RBSR *bsr, UAContext *ua, * Here we actually write out the details of the bsr file. * Note, there is one bsr for each JobId, but the bsr may * have multiple volumes, which have been entered in the - * order they were written. + * order they were written. * The bsrs must be written out in the order the JobIds * are found in the jobid list. */ @@ -562,7 +551,7 @@ void add_findex_all(RBSR *bsr, uint32_t JobId) nbsr->next->JobId = JobId; /* If we use regexp to restore, set it for each jobid */ - if (bsr->fileregex) { + if (bsr->fileregex) { nbsr->next->fileregex = bstrdup(bsr->fileregex); } diff --git a/bacula/src/dird/bsr.h b/bacula/src/dird/bsr.h index 2785908e7e..18446461c3 100644 --- a/bacula/src/dird/bsr.h +++ b/bacula/src/dird/bsr.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2002-2008 Free Software Foundation Europe e.V. + Copyright (C) 2002-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * diff --git a/bacula/src/dird/catreq.c b/bacula/src/dird/catreq.c index 0cf0b6d92f..5e4c6631b8 100644 --- a/bacula/src/dird/catreq.c +++ b/bacula/src/dird/catreq.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2001-2012 Free Software Foundation Europe e.V. + Copyright (C) 2001-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * @@ -54,7 +42,7 @@ static char Get_Vol_Info[] = "CatReq Job=%127s GetVolInfo VolName=%127s write=%d static char Update_media[] = "CatReq Job=%127s UpdateMedia VolName=%s" " VolJobs=%u VolFiles=%u VolBlocks=%u VolBytes=%lld VolMounts=%u" - " VolErrors=%u VolWrites=%u MaxVolBytes=%lld EndTime=%lld VolStatus=%10s" + " VolErrors=%u VolWrites=%lld MaxVolBytes=%lld EndTime=%lld VolStatus=%10s" " Slot=%d relabel=%d InChanger=%d VolReadTime=%lld VolWriteTime=%lld" " VolFirstWritten=%lld VolParts=%u\n"; @@ -65,11 +53,12 @@ static char Create_job_media[] = "CatReq Job=%127s CreateJobMedia " /* Responses sent to Storage daemon */ static char OK_media[] = "1000 OK VolName=%s VolJobs=%u VolFiles=%u" - " VolBlocks=%u VolBytes=%s VolMounts=%u VolErrors=%u VolWrites=%u" + " VolBlocks=%u VolBytes=%s" + " VolMounts=%u VolErrors=%u VolWrites=%s" " MaxVolBytes=%s VolCapacityBytes=%s VolStatus=%s Slot=%d" " MaxVolJobs=%u MaxVolFiles=%u InChanger=%d VolReadTime=%s" " VolWriteTime=%s EndFile=%u EndBlock=%u VolParts=%u LabelType=%d" - " MediaId=%s\n"; + " MediaId=%s ScratchPoolId=%s\n"; static char OK_create[] = "1000 OK CreateJobMedia\n"; @@ -77,24 +66,27 @@ static char OK_create[] = "1000 OK CreateJobMedia\n"; static int send_volume_info_to_storage_daemon(JCR *jcr, BSOCK *sd, MEDIA_DBR *mr) { int stat; - char ed1[50], ed2[50], ed3[50], ed4[50], ed5[50], ed6[50]; + char ed1[50], ed4[50], ed5[50], ed6[50], ed7[50], ed8[50], + ed9[50], ed10[50]; jcr->MediaId = mr->MediaId; pm_strcpy(jcr->VolumeName, mr->VolumeName); bash_spaces(mr->VolumeName); stat = sd->fsend(OK_media, mr->VolumeName, mr->VolJobs, mr->VolFiles, mr->VolBlocks, edit_uint64(mr->VolBytes, ed1), - mr->VolMounts, mr->VolErrors, mr->VolWrites, - edit_uint64(mr->MaxVolBytes, ed2), - edit_uint64(mr->VolCapacityBytes, ed3), + mr->VolMounts, mr->VolErrors, + edit_uint64(mr->VolWrites, ed4), + edit_uint64(mr->MaxVolBytes, ed5), + edit_uint64(mr->VolCapacityBytes, ed6), mr->VolStatus, mr->Slot, mr->MaxVolJobs, mr->MaxVolFiles, mr->InChanger, - edit_int64(mr->VolReadTime, ed4), - edit_int64(mr->VolWriteTime, ed5), + edit_int64(mr->VolReadTime, ed7), + edit_int64(mr->VolWriteTime, ed8), mr->EndFile, mr->EndBlock, mr->VolParts, mr->LabelType, - edit_uint64(mr->MediaId, ed6)); + edit_uint64(mr->MediaId, ed9), + edit_uint64(mr->ScratchPoolId, ed10)); unbash_spaces(mr->VolumeName); Dmsg2(100, "Vol Info for %s: %s", jcr->Job, sd->msg); return stat; @@ -113,19 +105,20 @@ void catalog_request(JCR *jcr, BSOCK *bs) uint64_t MediaId; utime_t VolFirstWritten; utime_t VolLastWritten; + int n; memset(&sdmr, 0, sizeof(sdmr)); memset(&jm, 0, sizeof(jm)); - Dsm_check(100); + Dsm_check(100); /* * Request to find next appendable Volume for this Job */ - Dmsg1(100, "catreq %s", bs->msg); + Dmsg1(200, "catreq %s", bs->msg); if (!jcr->db) { omsg = get_memory(bs->msglen+1); pm_strcpy(omsg, bs->msg); - bs->fsend(_("1990 Invalid Catalog Request: %s"), omsg); + bs->fsend(_("1990 Invalid Catalog Request: %s"), omsg); Jmsg1(jcr, M_FATAL, 0, _("Invalid Catalog request; DB not open: %s"), omsg); free_memory(omsg); return; @@ -133,7 +126,8 @@ void catalog_request(JCR *jcr, BSOCK *bs) /* * Find next appendable medium for SD */ - if (sscanf(bs->msg, Find_media, &Job, &index, &pool_name, &mr.MediaType) == 4) { + n = sscanf(bs->msg, Find_media, &Job, &index, &pool_name, &mr.MediaType); + if (n == 4) { memset(&pr, 0, sizeof(pr)); bstrncpy(pr.Name, pool_name, sizeof(pr.Name)); unbash_spaces(pr.Name); @@ -144,6 +138,10 @@ void catalog_request(JCR *jcr, BSOCK *bs) mr.ScratchPoolId = pr.ScratchPoolId; ok = find_next_volume_for_append(jcr, &mr, index, fnv_create_vol, fnv_prune); Dmsg3(050, "find_media ok=%d idx=%d vol=%s\n", ok, index, mr.VolumeName); + } else { + /* Report problem finding pool */ + Jmsg1(jcr, M_WARNING, 0, _("Pool \"%s\" not found for SD find media request.\n"), + pr.Name); } /* * Send Find Media response to Storage daemon @@ -154,11 +152,15 @@ void catalog_request(JCR *jcr, BSOCK *bs) bs->fsend(_("1901 No Media.\n")); Dmsg0(500, "1901 No Media.\n"); } + goto ok_out; + } + Dmsg1(1000, "Tried find_media. fields wanted=4, got=%d\n", n); /* * Request to find specific Volume information */ - } else if (sscanf(bs->msg, Get_Vol_Info, &Job, &mr.VolumeName, &writing) == 3) { + n = sscanf(bs->msg, Get_Vol_Info, &Job, &mr.VolumeName, &writing); + if (n == 3) { Dmsg1(100, "CatReq GetVolInfo Vol=%s\n", mr.VolumeName); /* * Find the Volume @@ -208,19 +210,23 @@ void catalog_request(JCR *jcr, BSOCK *bs) bs->fsend(_("1997 Volume \"%s\" not in catalog.\n"), mr.VolumeName); Dmsg1(100, "1997 Volume \"%s\" not in catalog.\n", mr.VolumeName); } + goto ok_out; + } + Dmsg1(1000, "Tried get_vol_info. fields wanted=3, got=%d\n", n); + /* * Request to update Media record. Comes typically at the end * of a Storage daemon Job Session, when labeling/relabeling a * Volume, or when an EOF mark is written. */ - } else if (sscanf(bs->msg, Update_media, &Job, &sdmr.VolumeName, + n = sscanf(bs->msg, Update_media, &Job, &sdmr.VolumeName, &sdmr.VolJobs, &sdmr.VolFiles, &sdmr.VolBlocks, &sdmr.VolBytes, &sdmr.VolMounts, &sdmr.VolErrors, &sdmr.VolWrites, &sdmr.MaxVolBytes, &VolLastWritten, &sdmr.VolStatus, &sdmr.Slot, &label, &sdmr.InChanger, &sdmr.VolReadTime, &sdmr.VolWriteTime, &VolFirstWritten, - &sdmr.VolParts) == 19) { - + &sdmr.VolParts); + if (n == 19) { db_lock(jcr->db); Dmsg3(400, "Update media %s oldStat=%s newStat=%s\n", sdmr.VolumeName, mr.VolStatus, sdmr.VolStatus); @@ -256,19 +262,16 @@ void catalog_request(JCR *jcr, BSOCK *bs) * Insanity check for VolFiles get set to a smaller value */ if (sdmr.VolFiles < mr.VolFiles) { - Jmsg(jcr, M_FATAL, 0, _("Volume Files at %u being set to %u" - " for Volume \"%s\". This is incorrect.\n"), + Jmsg(jcr, M_INFO, 0, _("Attempt to set Volume Files from %u to %u" + " for Volume \"%s\". Ignored.\n"), mr.VolFiles, sdmr.VolFiles, mr.VolumeName); - bs->fsend(_("1992 Update Media error. VolFiles=%u, CatFiles=%u\n"), - sdmr.VolFiles, mr.VolFiles); - db_unlock(jcr->db); - return; + sdmr.VolFiles = mr.VolFiles; /* keep orginal value */ } } Dmsg2(400, "Update media: BefVolJobs=%u After=%u\n", mr.VolJobs, sdmr.VolJobs); /* - * Check if the volume has been written by the job, + * Check if the volume has been written by the job, * and update the LastWritten field if needed. */ if (mr.VolBlocks != sdmr.VolBlocks && VolLastWritten != 0) { @@ -302,7 +305,7 @@ void catalog_request(JCR *jcr, BSOCK *bs) mr.InChanger = sdmr.InChanger; mr.VolParts = sdmr.VolParts; bstrncpy(mr.VolStatus, sdmr.VolStatus, sizeof(mr.VolStatus)); - if (sdmr.VolReadTime >= 0) { + if (sdmr.VolReadTime >= 0) { mr.VolReadTime = sdmr.VolReadTime; } if (sdmr.VolWriteTime >= 0) { @@ -318,22 +321,25 @@ void catalog_request(JCR *jcr, BSOCK *bs) Jmsg(jcr, M_FATAL, 0, _("Catalog error updating Media record. %s"), db_strerror(jcr->db)); bs->fsend(_("1993 Update Media error\n")); - Dmsg0(400, "send error\n"); + Pmsg0(000, "1993 Update Media error\n"); } else { (void)has_volume_expired(jcr, &mr); send_volume_info_to_storage_daemon(jcr, bs, &mr); } db_unlock(jcr->db); + goto ok_out; + } + Dmsg1(1000, "Tried update_media. fields wanted=20, got=%d\n", n); /* * Request to create a JobMedia record */ - } else if (sscanf(bs->msg, Create_job_media, &Job, + n = sscanf(bs->msg, Create_job_media, &Job, &jm.FirstIndex, &jm.LastIndex, &jm.StartFile, &jm.EndFile, - &jm.StartBlock, &jm.EndBlock, &Copy, &Stripe, &MediaId) == 10) { - - if (jcr->mig_jcr) { - jm.JobId = jcr->mig_jcr->JobId; + &jm.StartBlock, &jm.EndBlock, &Copy, &Stripe, &MediaId); + if (n == 10) { + if (jcr->wjcr) { + jm.JobId = jcr->wjcr->JobId; } else { jm.JobId = jcr->JobId; } @@ -348,15 +354,18 @@ void catalog_request(JCR *jcr, BSOCK *bs) Dmsg0(400, "JobMedia record created\n"); bs->fsend(OK_create); } - - } else { - omsg = get_memory(bs->msglen+1); - pm_strcpy(omsg, bs->msg); - bs->fsend(_("1990 Invalid Catalog Request: %s"), omsg); - Jmsg1(jcr, M_FATAL, 0, _("Invalid Catalog request: %s"), omsg); - free_memory(omsg); + goto ok_out; } + Dmsg1(1000, "Tried create_jobmedia. fields wanted=10, got=%d\n", n); + /* Everything failed. Send error message. */ + omsg = get_memory(bs->msglen+1); + pm_strcpy(omsg, bs->msg); + bs->fsend(_("1990 Invalid Catalog Request: %s"), omsg); + Jmsg1(jcr, M_FATAL, 0, _("Invalid Catalog request: %s"), omsg); + free_memory(omsg); + +ok_out: Dmsg1(400, ">CatReq response: %s", bs->msg); Dmsg1(400, "Leave catreq jcr 0x%x\n", jcr); return; @@ -381,12 +390,12 @@ static void update_attribute(JCR *jcr, char *msg, int32_t msglen) /* Start transaction allocates jcr->attr and jcr->ar if needed */ db_start_transaction(jcr, jcr->db); /* start transaction if not already open */ - ar = jcr->ar; + ar = jcr->ar; /* - * Start by scanning directly in the message buffer to get Stream + * Start by scanning directly in the message buffer to get Stream * there may be a cached attr so we cannot yet write into - * jcr->attr or jcr->ar + * jcr->attr or jcr->ar */ p = msg; skip_nonspaces(&p); /* UpdCat */ @@ -450,7 +459,7 @@ static void update_attribute(JCR *jcr, char *msg, int32_t msglen) p = jcr->attr - msg + p; /* point p into jcr->attr */ skip_nonspaces(&p); /* skip FileIndex */ skip_spaces(&p); - ar->FileType = str_to_int32(p); + ar->FileType = str_to_int32(p); skip_nonspaces(&p); /* skip FileType */ skip_spaces(&p); fname = p; @@ -462,7 +471,7 @@ static void update_attribute(JCR *jcr, char *msg, int32_t msglen) p = p + strlen(p) + 1; /* point to extended attributes */ p = p + strlen(p) + 1; /* point to delta sequence */ /* - * Older FDs don't have a delta sequence, so check if it is there + * Older FDs don't have a delta sequence, so check if it is there */ if (p - jcr->attr < msglen) { ar->DeltaSeq = str_to_int32(p); /* delta_seq */ @@ -480,8 +489,9 @@ static void update_attribute(JCR *jcr, char *msg, int32_t msglen) } ar->Stream = Stream; ar->link = NULL; - if (jcr->mig_jcr) { - ar->JobId = jcr->mig_jcr->JobId; + if (jcr->wjcr) { + ar->JobId = jcr->wjcr->JobId; + Dmsg1(100, "=== set JobId=%d\n", ar->JobId); } else { ar->JobId = jcr->JobId; } @@ -498,14 +508,15 @@ static void update_attribute(JCR *jcr, char *msg, int32_t msglen) memset(&ro, 0, sizeof(ro)); ro.Stream = Stream; ro.FileIndex = FileIndex; - if (jcr->mig_jcr) { - ro.JobId = jcr->mig_jcr->JobId; + if (jcr->wjcr) { + ro.JobId = jcr->wjcr->JobId; + Dmsg1(100, "=== set JobId=%d\n", ar->JobId); } else { ro.JobId = jcr->JobId; } Dmsg1(100, "Robj=%s\n", p); - + skip_nonspaces(&p); /* skip FileIndex */ skip_spaces(&p); ro.FileType = str_to_int32(p); /* FileType */ @@ -515,7 +526,7 @@ static void update_attribute(JCR *jcr, char *msg, int32_t msglen) skip_nonspaces(&p); skip_spaces(&p); ro.object_len = str_to_int32(p); /* object length possibly compressed */ - skip_nonspaces(&p); + skip_nonspaces(&p); skip_spaces(&p); ro.object_full_len = str_to_int32(p); /* uncompressed object length */ skip_nonspaces(&p); @@ -536,12 +547,13 @@ static void update_attribute(JCR *jcr, char *msg, int32_t msglen) /* Send it */ if (!db_create_restore_object_record(jcr, jcr->db, &ro)) { Jmsg1(jcr, M_FATAL, 0, _("Restore object create error. %s"), db_strerror(jcr->db)); + jcr->cached_attribute = false; } } else if (crypto_digest_stream_type(Stream) != CRYPTO_DIGEST_NONE) { fname = p; if (ar->FileIndex != FileIndex) { - Jmsg3(jcr, M_WARNING, 0, _("%s not same File=%d as attributes=%d\n"), + Jmsg3(jcr, M_WARNING, 0, _("%s not same File=%d as attributes=%d\n"), stream_to_ascii(Stream), FileIndex, ar->FileIndex); } else { /* Update digest in catalog */ @@ -586,7 +598,7 @@ static void update_attribute(JCR *jcr, char *msg, int32_t msglen) Jmsg1(jcr, M_FATAL, 0, _("attribute create error. %s"), db_strerror(jcr->db)); } - jcr->cached_attribute = false; + jcr->cached_attribute = false; } else { if (!db_add_digest_to_file_record(jcr, jcr->db, ar->FileId, digestbuf, type)) { Jmsg(jcr, M_ERROR, 0, _("Catalog error updating file digest. %s"), @@ -612,7 +624,7 @@ void catalog_update(JCR *jcr, BSOCK *bs) if (!jcr->db) { POOLMEM *omsg = get_memory(bs->msglen+1); pm_strcpy(omsg, bs->msg); - bs->fsend(_("1994 Invalid Catalog Update: %s"), omsg); + bs->fsend(_("1994 Invalid Catalog Update: %s"), omsg); Jmsg1(jcr, M_FATAL, 0, _("Invalid Catalog Update; DB not open: %s"), omsg); free_memory(omsg); goto bail_out; @@ -621,6 +633,7 @@ void catalog_update(JCR *jcr, BSOCK *bs) bail_out: if (jcr->is_job_canceled()) { + jcr->cached_attribute = false; cancel_storage_daemon_job(jcr); } } @@ -640,7 +653,7 @@ bool despool_attributes_from_file(JCR *jcr, const char *file) POOLMEM *msg = get_pool_memory(PM_MESSAGE); FILE *spool_fd=NULL; - Dmsg0(100, "Begin despool_attributes_from_file\n"); + Dmsg1(100, "Begin despool_attributes_from_file\n", file); if (jcr->is_job_canceled() || !jcr->pool->catalog_files || !jcr->db) { goto bail_out; /* user disabled cataloging */ @@ -676,7 +689,7 @@ bool despool_attributes_from_file(JCR *jcr, const char *file) } if (!jcr->is_job_canceled()) { update_attribute(jcr, msg, msglen); - if (jcr->is_job_canceled()) { + if (jcr->is_job_canceled() || (jcr->wjcr && jcr->wjcr->is_job_canceled())) { goto bail_out; } } @@ -685,6 +698,7 @@ bool despool_attributes_from_file(JCR *jcr, const char *file) berrno be; Qmsg1(jcr, M_FATAL, 0, _("fread attr spool error. ERR=%s\n"), be.bstrerror()); + Dmsg1(050, "fread attr spool error. ERR=%s\n", be.bstrerror()); goto bail_out; } ret = true; @@ -695,6 +709,7 @@ bail_out: } if (jcr->is_job_canceled()) { + jcr->cached_attribute = false; cancel_storage_daemon_job(jcr); } diff --git a/bacula/src/dird/dir_plugins.c b/bacula/src/dird/dir_plugins.c index b0b29ab7d6..6f693feb20 100644 --- a/bacula/src/dird/dir_plugins.c +++ b/bacula/src/dird/dir_plugins.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2007-2011 Free Software Foundation Europe e.V. + Copyright (C) 2007-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation, which is - listed in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Main program to test loading and running Bacula plugins. @@ -67,7 +55,7 @@ static bDirFuncs bfuncs = { baculaDebugMsg }; -/* +/* * Bacula private context */ struct bacula_ctx { @@ -94,7 +82,7 @@ static bool is_plugin_disabled(JCR *jcr) #endif /* - * Create a plugin event + * Create a plugin event */ int generate_plugin_event(JCR *jcr, bDirEventType eventType, void *value) { @@ -163,7 +151,7 @@ void load_dir_plugins(const char *plugin_dir) return; } bplugin_list = New(alist(10, not_owned_by_alist)); - if (!load_plugins((void *)&binfo, (void *)&bfuncs, plugin_dir, plugin_type, + if (!load_plugins((void *)&binfo, (void *)&bfuncs, plugin_dir, plugin_type, is_plugin_compatible)) { /* Either none found, or some error */ if (bplugin_list->size() == 0) { @@ -173,7 +161,7 @@ void load_dir_plugins(const char *plugin_dir) return; } } - /* + /* * Verify that the plugin is acceptable, and print information * about it. */ @@ -194,7 +182,7 @@ static bool is_plugin_compatible(Plugin *plugin) { pDirInfo *info = (pDirInfo *)plugin->pinfo; Dmsg0(50, "is_plugin_compatible called\n"); - if (debug_level >= 50) { + if (chk_dbglvl(50)) { dump_dir_plugin(plugin, stdin); } if (strcmp(info->plugin_magic, DIR_PLUGIN_MAGIC) != 0) { @@ -227,7 +215,7 @@ static bool is_plugin_compatible(Plugin *plugin) plugin->file, sizeof(pDirInfo), info->size); return false; } - + return true; } @@ -347,7 +335,7 @@ static bRC baculaGetValue(bpContext *ctx, brDirVariable var, void *value) POOL_DBR pr; memset(&pr, 0, sizeof(pr)); bstrncpy(pr.Name, jcr->pool->hdr.name, sizeof(pr.Name)); - if (!db_get_pool_record(jcr, jcr->db, &pr)) { + if (!db_get_pool_numvols(jcr, jcr->db, &pr)) { ret=bRC_Error; } *((int *)value) = pr.NumVols; @@ -435,11 +423,11 @@ static bRC baculaGetValue(bpContext *ctx, brDirVariable var, void *value) case bDirVarFDJobStatus: *((int *)value) = jcr->FDJobStatus; Dmsg1(dbglvl, "Bacula: return bDirVarFDJobStatus=%c\n", jcr->FDJobStatus); - break; + break; case bDirVarSDJobStatus: *((int *)value) = jcr->SDJobStatus; Dmsg1(dbglvl, "Bacula: return bDirVarSDJobStatus=%c\n", jcr->SDJobStatus); - break; + break; default: break; } @@ -448,7 +436,7 @@ static bRC baculaGetValue(bpContext *ctx, brDirVariable var, void *value) static bRC baculaSetValue(bpContext *ctx, bwDirVariable var, void *value) { - JCR *jcr; + JCR *jcr; if (!value || !ctx) { return bRC_Error; } @@ -457,7 +445,7 @@ static bRC baculaSetValue(bpContext *ctx, bwDirVariable var, void *value) if (!jcr) { return bRC_Error; } -// Dmsg1(dbglvl, "Bacula: jcr=%p\n", jcr); +// Dmsg1(dbglvl, "Bacula: jcr=%p\n", jcr); /* Nothing implemented yet */ Dmsg1(dbglvl, "dir-plugin: baculaSetValue var=%d\n", var); return bRC_OK; @@ -519,7 +507,7 @@ int main(int argc, char *argv[]) JCR *jcr2 = &mjcr2; strcpy(my_name, "test-dir"); - + getcwd(plugin_dir, sizeof(plugin_dir)-1); load_dir_plugins(plugin_dir); diff --git a/bacula/src/dird/dir_plugins.h b/bacula/src/dird/dir_plugins.h index f0f1b6204c..363acd0df5 100644 --- a/bacula/src/dird/dir_plugins.h +++ b/bacula/src/dird/dir_plugins.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2007-2011 Free Software Foundation Europe e.V. + Copyright (C) 2007-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation, which is - listed in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Interface definition for Bacula Plugins @@ -31,8 +19,8 @@ * Kern Sibbald, October 2007 * */ - -#ifndef __DIR_PLUGINS_H + +#ifndef __DIR_PLUGINS_H #define __DIR_PLUGINS_H #ifndef _BACULA_H @@ -72,11 +60,11 @@ extern "C" { /* Bacula Variable Ids */ /* return value */ typedef enum { bDirVarJob = 1, // string - bDirVarLevel = 2, // int - bDirVarType = 3, // int - bDirVarJobId = 4, // int + bDirVarLevel = 2, // int + bDirVarType = 3, // int + bDirVarJobId = 4, // int bDirVarClient = 5, // string - bDirVarNumVols = 6, // int + bDirVarNumVols = 6, // int bDirVarPool = 7, // string bDirVarStorage = 8, // string bDirVarWriteStorage = 9, // string @@ -84,16 +72,16 @@ typedef enum { bDirVarCatalog = 11, // string bDirVarMediaType = 12, // string bDirVarJobName = 13, // string - bDirVarJobStatus = 14, // int - bDirVarPriority = 15, // int + bDirVarJobStatus = 14, // int + bDirVarPriority = 15, // int bDirVarVolumeName = 16, // string - bDirVarCatalogRes = 17, // NYI - bDirVarJobErrors = 18, // int - bDirVarJobFiles = 19, // int - bDirVarSDJobFiles = 20, // int - bDirVarSDErrors = 21, // int - bDirVarFDJobStatus = 22, // int - bDirVarSDJobStatus = 23 // int + bDirVarCatalogRes = 17, // NYI + bDirVarJobErrors = 18, // int + bDirVarJobFiles = 19, // int + bDirVarSDJobFiles = 20, // int + bDirVarSDErrors = 21, // int + bDirVarFDJobStatus = 22, // int + bDirVarSDJobStatus = 23 // int } brDirVariable; typedef enum { @@ -123,18 +111,18 @@ typedef struct s_bDirEvent { typedef struct s_dirbaculaInfo { uint32_t size; - uint32_t version; + uint32_t version; } bDirInfo; /* Bacula interface version and function pointers */ -typedef struct s_dirbaculaFuncs { +typedef struct s_dirbaculaFuncs { uint32_t size; uint32_t version; bRC (*registerBaculaEvents)(bpContext *ctx, ...); bRC (*getBaculaValue)(bpContext *ctx, brDirVariable var, void *value); bRC (*setBaculaValue)(bpContext *ctx, bwDirVariable var, void *value); - bRC (*JobMessage)(bpContext *ctx, const char *file, int line, - int type, utime_t mtime, const char *fmt, ...); + bRC (*JobMessage)(bpContext *ctx, const char *file, int line, + int type, utime_t mtime, const char *fmt, ...); bRC (*DebugMessage)(bpContext *ctx, const char *file, int line, int level, const char *fmt, ...); } bDirFuncs; @@ -160,7 +148,7 @@ typedef enum { } pDirVariable; -#define DIR_PLUGIN_MAGIC "*DirPluginData*" +#define DIR_PLUGIN_MAGIC "*DirPluginData*" #define DIR_PLUGIN_INTERFACE_VERSION 1 typedef struct s_dirpluginInfo { @@ -174,7 +162,7 @@ typedef struct s_dirpluginInfo { const char *plugin_description; } pDirInfo; -typedef struct s_dirpluginFuncs { +typedef struct s_dirpluginFuncs { uint32_t size; uint32_t version; bRC (*newPlugin)(bpContext *ctx); diff --git a/bacula/src/dird/dird.c b/bacula/src/dird/dird.c index 147ab3f5f7..8706334579 100644 --- a/bacula/src/dird/dird.c +++ b/bacula/src/dird/dird.c @@ -1,35 +1,23 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2012 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * * Bacula Director daemon -- this is the main program * - * Kern Sibbald, March MM + * Written by Kern Sibbald, March MM * */ @@ -48,25 +36,11 @@ int readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result); #endif - -#ifdef HAVE_PYTHON - -#undef _POSIX_C_SOURCE -#include - -#include "lib/pythonlib.h" - -/* Imported Functions */ -extern PyObject *job_getattr(PyObject *self, char *attrname); -extern int job_setattr(PyObject *self, char *attrname, PyObject *value); - -#endif /* HAVE_PYTHON */ - /* Forward referenced subroutines */ void terminate_dird(int sig); static bool check_resources(); static void cleanup_old_files(); - + /* Exported subroutines */ extern "C" void reload_config(int sig); extern void invalidate_schedules(); @@ -89,7 +63,7 @@ static char *runjob = NULL; static bool background = true; static void init_reload(void); static CONFIG *config; - + /* Globals Exported */ DIRRES *director; /* Director resource */ int FDConnectTimeout; @@ -185,9 +159,6 @@ int main (int argc, char *argv[]) bool test_config = false; char *uid = NULL; char *gid = NULL; -#ifdef HAVE_PYTHON - init_python_interpreter_args python_args; -#endif /* HAVE_PYTHON */ start_heap = sbrk(0); setlocale(LC_ALL, ""); @@ -304,9 +275,9 @@ int main (int argc, char *argv[]) if (background) { daemon_start(); init_stack_dump(); /* grab new pid */ - } + } /* Create pid must come after we are a daemon -- so we have our final pid */ - create_pid_file(director->pid_directory, "bacula-dir", + create_pid_file(director->pid_directory, "bacula-dir", get_first_port_host_order(director->DIRaddrs)); read_state_file(director->working_directory, "bacula-dir", get_first_port_host_order(director->DIRaddrs)); @@ -327,8 +298,8 @@ int main (int argc, char *argv[]) if (!check_catalog(mode)) { Jmsg((JCR *)NULL, M_ERROR_TERM, 0, _("Please correct configuration file: %s\n"), configfile); } - - if (test_config) { + + if (test_config) { terminate_dird(0); } @@ -349,18 +320,6 @@ int main (int argc, char *argv[]) init_console_msg(working_directory); -#ifdef HAVE_PYTHON - python_args.progname = director->name(); - python_args.scriptdir = director->scripts_directory; - python_args.modulename = "DirStartUp"; - python_args.configfile = configfile; - python_args.workingdir = director->working_directory; - python_args.job_getattr = job_getattr; - python_args.job_setattr = job_setattr; - - init_python_interpreter(&python_args); -#endif /* HAVE_PYTHON */ - Dmsg0(200, "Start UA server\n"); start_UA_server(director->DIRaddrs); @@ -372,8 +331,6 @@ int main (int argc, char *argv[]) dbg_jcr_add_hook(db_debug_print); /* used to debug B_DB connexion after fatal signal */ -// init_device_resources(); - Dmsg0(200, "wait for next job\n"); /* Main loop -- call scheduler to get next job to run */ while ( (jcr = wait_for_next_job(runjob)) ) { @@ -525,7 +482,7 @@ void reload_config(int sig) JCR *jcr; int njobs = 0; /* number of running jobs */ int table, rtable; - bool ok; + bool ok; if (already_here) { abort(); /* Oops, recursion -> die */ @@ -666,7 +623,7 @@ static bool check_resources() OK = false; } - if ((!director->tls_ca_certfile && !director->tls_ca_certdir) && + if ((!director->tls_ca_certfile && !director->tls_ca_certdir) && need_tls && director->tls_verify_peer) { Jmsg(NULL, M_FATAL, 0, _("Neither \"TLS CA Certificate\" or \"TLS CA" " Certificate Dir\" are defined for Director \"%s\" in %s." @@ -685,7 +642,7 @@ static bool check_resources() director->tls_ca_certdir, director->tls_certfile, director->tls_keyfile, NULL, NULL, director->tls_dhfile, director->tls_verify_peer); - + if (!director->tls_ctx) { Jmsg(NULL, M_FATAL, 0, _("Failed to initialize TLS context for Director \"%s\" in %s.\n"), director->name(), configfile); @@ -714,11 +671,11 @@ static bool check_resources() /* Handle RunScripts alists specifically */ if (jobdefs->RunScripts) { RUNSCRIPT *rs, *elt; - + if (!job->RunScripts) { job->RunScripts = New(alist(10, not_owned_by_alist)); } - + foreach_alist(rs, jobdefs->RunScripts) { elt = copy_runscript(rs); job->RunScripts->append(elt); /* we have to free it */ @@ -860,7 +817,7 @@ static bool check_resources() } need_tls = cons->tls_enable || cons->tls_authenticate; - + if (!cons->tls_certfile && need_tls) { Jmsg(NULL, M_FATAL, 0, _("\"TLS Certificate\" file not defined for Console \"%s\" in %s.\n"), cons->name(), configfile); @@ -873,7 +830,7 @@ static bool check_resources() OK = false; } - if ((!cons->tls_ca_certfile && !cons->tls_ca_certdir) + if ((!cons->tls_ca_certfile && !cons->tls_ca_certdir) && need_tls && cons->tls_verify_peer) { Jmsg(NULL, M_FATAL, 0, _("Neither \"TLS CA Certificate\" or \"TLS CA" " Certificate Dir\" are defined for Console \"%s\" in %s." @@ -890,7 +847,7 @@ static bool check_resources() cons->tls_ctx = new_tls_context(cons->tls_ca_certfile, cons->tls_ca_certdir, cons->tls_certfile, cons->tls_keyfile, NULL, NULL, cons->tls_dhfile, cons->tls_verify_peer); - + if (!cons->tls_ctx) { Jmsg(NULL, M_FATAL, 0, _("Failed to initialize TLS context for File daemon \"%s\" in %s.\n"), cons->name(), configfile); @@ -930,7 +887,7 @@ static bool check_resources() client->tls_ca_certdir, client->tls_certfile, client->tls_keyfile, NULL, NULL, NULL, true); - + if (!client->tls_ctx) { Jmsg(NULL, M_FATAL, 0, _("Failed to initialize TLS context for File daemon \"%s\" in %s.\n"), client->name(), configfile); @@ -987,8 +944,8 @@ static bool check_resources() return OK; } -/* - * In this routine, +/* + * In this routine, * - we can check the connection (mode=CHECK_CONNECTION) * - we can synchronize the catalog with the configuration (mode=UPDATE_CATALOG) * - we can synchronize, and fix old job records (mode=UPDATE_AND_FIX) @@ -1071,7 +1028,7 @@ static bool check_catalog(cat_op mode) client->name(), client->catalog->name(), catalog->name()); continue; } - Dmsg2(500, "create cat=%s for client=%s\n", + Dmsg2(500, "create cat=%s for client=%s\n", client->catalog->name(), client->name()); memset(&cr, 0, sizeof(cr)); bstrncpy(cr.Name, client->name(), sizeof(cr.Name)); @@ -1095,7 +1052,7 @@ static bool check_catalog(cat_op mode) bstrncpy(sr.Name, store->name(), sizeof(sr.Name)); sr.AutoChanger = store->autochanger; if (!db_create_storage_record(NULL, db, &sr)) { - Jmsg(NULL, M_FATAL, 0, _("Could not create storage record for %s\n"), + Jmsg(NULL, M_FATAL, 0, _("Could not create storage record for %s\n"), store->name()); OK = false; } @@ -1187,10 +1144,10 @@ static void cleanup_old_files() if (name_max < 1024) { name_max = 1024; } - + if (!(dp = opendir(director->working_directory))) { berrno be; - Pmsg2(000, "Failed to open working dir %s for cleanup: ERR=%s\n", + Pmsg2(000, "Failed to open working dir %s for cleanup: ERR=%s\n", director->working_directory, be.bstrerror()); goto get_out1; return; @@ -1205,7 +1162,7 @@ static void cleanup_old_files() if (strcmp(result->d_name, ".") == 0 || strcmp(result->d_name, "..") == 0 || strncmp(result->d_name, my_name, my_name_len) != 0) { Dmsg1(500, "Skipped: %s\n", result->d_name); - continue; + continue; } /* Unlink files that match regexes */ diff --git a/bacula/src/dird/dird.h b/bacula/src/dird/dird.h index 12b04cee32..9b87a0133b 100644 --- a/bacula/src/dird/dird.h +++ b/bacula/src/dird/dird.h @@ -1,38 +1,26 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2008 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Includes specific to the Director * * Kern Sibbald, December MM * - * Version $Id$ */ +#include "lib/ini.h" #include "lib/runscript.h" #include "lib/breg.h" #include "dird_conf.h" @@ -78,6 +66,17 @@ enum { fnv_no_prune = false }; - +typedef struct { + char *plugin_name; + POOLMEM *content; +} plugin_config_item; + +struct idpkt { + POOLMEM *list; + uint32_t count; +}; + +void free_plugin_config_item(plugin_config_item *lst); +void free_plugin_config_items(alist *lst); #include "protos.h" diff --git a/bacula/src/dird/dird_conf.c b/bacula/src/dird/dird_conf.c index b8477f5d74..ebd1bc2389 100644 --- a/bacula/src/dird/dird_conf.c +++ b/bacula/src/dird/dird_conf.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2011 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Main configuration file parser for Bacula Directors, @@ -188,11 +176,13 @@ static RES_ITEM cli_items[] = { {"fdport", store_pint32, ITEM(res_client.FDport), 0, ITEM_DEFAULT, 9102}, {"password", store_password, ITEM(res_client.password), 0, ITEM_REQUIRED, 0}, {"fdpassword", store_password, ITEM(res_client.password), 0, 0, 0}, + {"fdstorageaddress", store_str, ITEM(res_client.fd_storage_address), 0, 0, 0}, {"catalog", store_res, ITEM(res_client.catalog), R_CATALOG, ITEM_REQUIRED, 0}, {"fileretention", store_time, ITEM(res_client.FileRetention), 0, ITEM_DEFAULT, 60*60*24*60}, {"jobretention", store_time, ITEM(res_client.JobRetention), 0, ITEM_DEFAULT, 60*60*24*180}, {"heartbeatinterval", store_time, ITEM(res_client.heartbeat_interval), 0, ITEM_DEFAULT, 0}, {"autoprune", store_bool, ITEM(res_client.AutoPrune), 0, ITEM_DEFAULT, true}, + {"sdcallsclient", store_bool, ITEM(res_client.sd_calls_client), 0, ITEM_DEFAULT, false}, {"maximumconcurrentjobs", store_pint32, ITEM(res_client.MaxConcurrentJobs), 0, ITEM_DEFAULT, 1}, {"tlsauthenticate", store_bool, ITEM(res_client.tls_authenticate), 0, 0, 0}, {"tlsenable", store_bool, ITEM(res_client.tls_enable), 0, 0, 0}, @@ -202,6 +192,7 @@ static RES_ITEM cli_items[] = { {"tlscertificate", store_dir, ITEM(res_client.tls_certfile), 0, 0, 0}, {"tlskey", store_dir, ITEM(res_client.tls_keyfile), 0, 0, 0}, {"tlsallowedcn", store_alist_str, ITEM(res_client.tls_allowed_cns), 0, 0, 0}, + {"maximumbandwidthperjob", store_speed, ITEM(res_client.max_bandwidth), 0, 0, 0}, {NULL, NULL, {0}, 0, 0, 0} }; @@ -216,6 +207,7 @@ static RES_ITEM store_items[] = { {"address", store_str, ITEM(res_store.address), 0, ITEM_REQUIRED, 0}, {"sdaddress", store_str, ITEM(res_store.address), 0, 0, 0}, {"password", store_password, ITEM(res_store.password), 0, ITEM_REQUIRED, 0}, + {"fdstorageaddress", store_str, ITEM(res_store.fd_storage_address), 0, 0, 0}, {"sdpassword", store_password, ITEM(res_store.password), 0, 0, 0}, {"device", store_device, ITEM(res_store.device), R_DEVICE, ITEM_REQUIRED, 0}, {"mediatype", store_strname, ITEM(res_store.media_type), 0, ITEM_REQUIRED, 0}, @@ -274,6 +266,7 @@ RES_ITEM job_items[] = { {"messages", store_res, ITEM(res_job.messages), R_MSGS, ITEM_REQUIRED, 0}, {"storage", store_alist_res, ITEM(res_job.storage), R_STORAGE, 0, 0}, {"pool", store_res, ITEM(res_job.pool), R_POOL, ITEM_REQUIRED, 0}, + {"nextpool", store_res, ITEM(res_job.next_pool), R_POOL, 0, 0}, {"fullbackuppool", store_res, ITEM(res_job.full_pool), R_POOL, 0, 0}, {"incrementalbackuppool", store_res, ITEM(res_job.inc_pool), R_POOL, 0, 0}, {"differentialbackuppool", store_res, ITEM(res_job.diff_pool), R_POOL, 0, 0}, @@ -296,6 +289,7 @@ RES_ITEM job_items[] = { {"writebootstrap",store_dir, ITEM(res_job.WriteBootstrap), 0, 0, 0}, {"writeverifylist",store_dir,ITEM(res_job.WriteVerifyList), 0, 0, 0}, {"replace", store_replace, ITEM(res_job.replace), 0, ITEM_DEFAULT, REPLACE_ALWAYS}, + {"maximumbandwidth", store_speed, ITEM(res_job.max_bandwidth), 0, 0, 0}, {"maxrunschedtime", store_time, ITEM(res_job.MaxRunSchedTime), 0, 0, 0}, {"maxruntime", store_time, ITEM(res_job.MaxRunTime), 0, 0, 0}, /* xxxMaxWaitTime are deprecated */ @@ -326,9 +320,10 @@ RES_ITEM job_items[] = { {"clientrunbeforejob", store_short_runscript, ITEM(res_job.RunScripts), 0, 0, 0}, {"clientrunafterjob", store_short_runscript, ITEM(res_job.RunScripts), 0, 0, 0}, {"maximumconcurrentjobs", store_pint32, ITEM(res_job.MaxConcurrentJobs), 0, ITEM_DEFAULT, 1}, + {"maximumspawnedjobs", store_pint32, ITEM(res_job.MaxSpawnedJobs), 0, ITEM_DEFAULT, 600}, {"rescheduleonerror", store_bool, ITEM(res_job.RescheduleOnError), 0, ITEM_DEFAULT, false}, {"rescheduleinterval", store_time, ITEM(res_job.RescheduleInterval), 0, ITEM_DEFAULT, 60 * 30}, - {"rescheduletimes", store_pint32, ITEM(res_job.RescheduleTimes), 0, 0, 5}, + {"rescheduletimes", store_pint32, ITEM(res_job.RescheduleTimes), 0, 0, 0}, {"priority", store_pint32, ITEM(res_job.Priority), 0, ITEM_DEFAULT, 10}, {"allowmixedpriority", store_bool, ITEM(res_job.allow_mixed_priority), 0, ITEM_DEFAULT, false}, {"writepartafterjob", store_bool, ITEM(res_job.write_part_after_job), 0, ITEM_DEFAULT, true}, @@ -381,7 +376,7 @@ static RES_ITEM pool_items[] = { {"description", store_str, ITEM(res_pool.hdr.desc), 0, 0, 0}, {"pooltype", store_strname, ITEM(res_pool.pool_type), 0, ITEM_REQUIRED, 0}, {"labelformat", store_strname, ITEM(res_pool.label_format), 0, 0, 0}, - {"labeltype", store_label, ITEM(res_pool.LabelType), 0, 0, 0}, + {"labeltype", store_label, ITEM(res_pool.LabelType), 0, 0, 0}, {"cleaningprefix", store_strname, ITEM(res_pool.cleaning_prefix), 0, 0, 0}, {"usecatalog", store_bool, ITEM(res_pool.use_catalog), 0, ITEM_DEFAULT, true}, {"usevolumeonce", store_bool, ITEM(res_pool.use_volume_once), 0, 0, 0}, @@ -617,6 +612,13 @@ void dump_resource(int type, RES *reshdr, void sendit(void *sock, const char *fm edit_utime(res->res_client.JobRetention, ed1, sizeof(ed1)), edit_utime(res->res_client.FileRetention, ed2, sizeof(ed2)), res->res_client.AutoPrune); + if (res->res_client.fd_storage_address) { + sendit(sock, " FDStorageAddress=%s\n", res->res_client.fd_storage_address); + } + if (res->res_client.max_bandwidth) { + sendit(sock, _(" MaximumBandwidth=%lld\n"), + res->res_client.max_bandwidth); + } if (res->res_client.catalog) { sendit(sock, _(" --> ")); dump_resource(-R_CATALOG, (RES *)res->res_client.catalog, sendit, sock); @@ -647,6 +649,9 @@ void dump_resource(int type, RES *reshdr, void sendit(void *sock, const char *fm res->res_store.dev_name(), res->res_store.media_type, edit_int64(res->res_store.StorageId, ed1)); + if (res->res_store.fd_storage_address) { + sendit(sock, " FDStorageAddress=%s\n", res->res_store.fd_storage_address); + } break; case R_CATALOG: @@ -656,7 +661,7 @@ void dump_resource(int type, RES *reshdr, void sendit(void *sock, const char *fm sendit(sock, _("Catalog: name=%s address=%s DBport=%d db_name=%s\n" " db_driver=%s db_user=%s MutliDBConn=%d\n"), res->res_cat.hdr.name, NPRT(res->res_cat.db_address), - res->res_cat.db_port, res->res_cat.db_name, + res->res_cat.db_port, res->res_cat.db_name, NPRT(res->res_cat.db_driver), NPRT(res->res_cat.db_user), res->res_cat.mult_db_connections); break; @@ -672,7 +677,7 @@ void dump_resource(int type, RES *reshdr, void sendit(void *sock, const char *fm level_to_str(res->res_job.JobLevel), res->res_job.Priority, res->res_job.enabled); sendit(sock, _(" MaxJobs=%u Resched=%d Times=%d Interval=%s Spool=%d WritePartAfterJob=%d\n"), - res->res_job.MaxConcurrentJobs, + res->res_job.MaxConcurrentJobs, res->res_job.RescheduleOnError, res->res_job.RescheduleTimes, edit_uint64_with_commas(res->res_job.RescheduleInterval, ed1), res->res_job.spool_data, res->res_job.write_part_after_job); @@ -682,6 +687,10 @@ void dump_resource(int type, RES *reshdr, void sendit(void *sock, const char *fm if (res->res_job.JobType == JT_BACKUP) { sendit(sock, _(" Accurate=%d\n"), res->res_job.accurate); } + if (res->res_job.max_bandwidth) { + sendit(sock, _(" MaximumBandwidth=%lld\n"), + res->res_job.max_bandwidth); + } if (res->res_job.JobType == JT_MIGRATE || res->res_job.JobType == JT_COPY) { sendit(sock, _(" SelectionType=%d\n"), res->res_job.selection_type); } @@ -890,6 +899,12 @@ void dump_resource(int type, RES *reshdr, void sendit(void *sock, const char *fm } next_run: sendit(sock, _(" --> Run Level=%s\n"), level_to_str(run->level)); + if (run->MaxRunSchedTime) { + sendit(sock, _(" MaxRunSchedTime=%u\n"), run->MaxRunSchedTime); + } + if (run->Priority) { + sendit(sock, _(" Priority=%u\n"), run->Priority); + } bstrncpy(buf, _(" hour="), sizeof(buf)); for (i=0; i<24; i++) { if (bit_is_set(i, run->hour)) { @@ -900,7 +915,7 @@ next_run: bstrncat(buf, "\n", sizeof(buf)); sendit(sock, buf); bstrncpy(buf, _(" mday="), sizeof(buf)); - for (i=0; i<31; i++) { + for (i=0; i<32; i++) { if (bit_is_set(i, run->mday)) { bsnprintf(num, sizeof(num), "%d ", i); bstrncat(buf, num, sizeof(buf)); @@ -927,7 +942,7 @@ next_run: bstrncat(buf, "\n", sizeof(buf)); sendit(sock, buf); bstrncpy(buf, _(" wom="), sizeof(buf)); - for (i=0; i<5; i++) { + for (i=0; i<6; i++) { if (bit_is_set(i, run->wom)) { bsnprintf(num, sizeof(num), "%d ", i); bstrncat(buf, num, sizeof(buf)); @@ -985,12 +1000,12 @@ next_run: NPRT(res->res_pool.label_format)); sendit(sock, _(" CleaningPrefix=%s LabelType=%d\n"), NPRT(res->res_pool.cleaning_prefix), res->res_pool.LabelType); - sendit(sock, _(" RecyleOldest=%d PurgeOldest=%d ActionOnPurge=%d\n"), + sendit(sock, _(" RecyleOldest=%d PurgeOldest=%d ActionOnPurge=%d\n"), res->res_pool.recycle_oldest_volume, res->res_pool.purge_oldest_volume, res->res_pool.action_on_purge); sendit(sock, _(" MaxVolJobs=%d MaxVolFiles=%d MaxVolBytes=%s\n"), - res->res_pool.MaxVolJobs, + res->res_pool.MaxVolJobs, res->res_pool.MaxVolFiles, edit_uint64(res->res_pool.MaxVolBytes, ed1)); sendit(sock, _(" MigTime=%s MigHiBytes=%s MigLoBytes=%s\n"), @@ -1139,7 +1154,7 @@ void free_resource(RES *sres, int type) if (res->res_dir.DIRsrc_addr) { free_addresses(res->res_dir.DIRsrc_addr); } - if (res->res_dir.tls_ctx) { + if (res->res_dir.tls_ctx) { free_tls_context(res->res_dir.tls_ctx); } if (res->res_dir.tls_ca_certfile) { @@ -1171,7 +1186,7 @@ void free_resource(RES *sres, int type) if (res->res_con.password) { free(res->res_con.password); } - if (res->res_con.tls_ctx) { + if (res->res_con.tls_ctx) { free_tls_context(res->res_con.tls_ctx); } if (res->res_con.tls_ca_certfile) { @@ -1203,10 +1218,13 @@ void free_resource(RES *sres, int type) if (res->res_client.address) { free(res->res_client.address); } + if (res->res_client.fd_storage_address) { + free(res->res_client.fd_storage_address); + } if (res->res_client.password) { free(res->res_client.password); } - if (res->res_client.tls_ctx) { + if (res->res_client.tls_ctx) { free_tls_context(res->res_client.tls_ctx); } if (res->res_client.tls_ca_certfile) { @@ -1229,6 +1247,9 @@ void free_resource(RES *sres, int type) if (res->res_store.address) { free(res->res_store.address); } + if (res->res_store.fd_storage_address) { + free(res->res_store.fd_storage_address); + } if (res->res_store.password) { free(res->res_store.password); } @@ -1238,7 +1259,7 @@ void free_resource(RES *sres, int type) if (res->res_store.device) { delete res->res_store.device; } - if (res->res_store.tls_ctx) { + if (res->res_store.tls_ctx) { free_tls_context(res->res_store.tls_ctx); } if (res->res_store.tls_ca_certfile) { @@ -1490,6 +1511,7 @@ void save_resource(int type, RES_ITEM *items, int pass) res->res_job.storage = res_all.res_job.storage; res->res_job.base = res_all.res_job.base; res->res_job.pool = res_all.res_job.pool; + res->res_job.next_pool = res_all.res_job.next_pool; res->res_job.full_pool = res_all.res_job.full_pool; res->res_job.inc_pool = res_all.res_job.inc_pool; res->res_job.diff_pool = res_all.res_job.diff_pool; @@ -1499,13 +1521,13 @@ void save_resource(int type, RES_ITEM *items, int pass) res->res_job.RunScripts = res_all.res_job.RunScripts; /* TODO: JobDefs where/regexwhere doesn't work well (but this - * is not very useful) + * is not very useful) * We have to set_bit(index, res_all.hdr.item_present); * or something like that */ /* we take RegexWhere before all other options */ - if (!res->res_job.RegexWhere + if (!res->res_job.RegexWhere && (res->res_job.strip_prefix || res->res_job.add_suffix || @@ -1617,7 +1639,7 @@ void save_resource(int type, RES_ITEM *items, int pass) break; default: printf(_("Unknown resource type %d in save_resource.\n"), type); - error = true; + error = true; break; } /* Common */ @@ -1633,7 +1655,7 @@ void save_resource(int type, RES_ITEM *items, int pass) if (res->res_dir.hdr.name == NULL) { Emsg1(M_ERROR_TERM, 0, _("Name item is required in %s resource, but not found.\n"), resources[rindex]); - } + } /* Add new res to end of chain */ for (last=next=res_head[rindex]; next; next=next->next) { last = next; @@ -1855,7 +1877,7 @@ static void store_runscript_when(LEX *lc, RES_ITEM *item, int index, int pass) } /* Store a runscript->target - * + * */ static void store_runscript_target(LEX *lc, RES_ITEM *item, int index, int pass) { @@ -1922,7 +1944,7 @@ static void store_short_runscript(LEX *lc, RES_ITEM *item, int index, int pass) script->on_success = true; script->on_failure = false; script->set_target(""); - + } else if (strcmp(item->name, "clientrunafterjob") == 0) { script->old_proto = true; script->when = SCRIPT_After; @@ -1946,7 +1968,7 @@ static void store_short_runscript(LEX *lc, RES_ITEM *item, int index, int pass) if (*runscripts == NULL) { *runscripts = New(alist(10, not_owned_by_alist)); } - + (*runscripts)->append(script); script->debug(); } @@ -1954,7 +1976,7 @@ static void store_short_runscript(LEX *lc, RES_ITEM *item, int index, int pass) scan_to_eol(lc); } -/* Store a bool in a bit field without modifing res_all.hdr +/* Store a bool in a bit field without modifing res_all.hdr * We can also add an option to store_bool to skip res_all.hdr */ void store_runscript_bool(LEX *lc, RES_ITEM *item, int index, int pass) @@ -1975,9 +1997,9 @@ void store_runscript_bool(LEX *lc, RES_ITEM *item, int index, int pass) * name handler value code flags default_value */ static RES_ITEM runscript_items[] = { - {"command", store_runscript_cmd, {(char **)&res_runscript}, SHELL_CMD, 0, 0}, - {"console", store_runscript_cmd, {(char **)&res_runscript}, CONSOLE_CMD, 0, 0}, - {"target", store_runscript_target,{(char **)&res_runscript}, 0, 0, 0}, + {"command", store_runscript_cmd, {(char **)&res_runscript}, SHELL_CMD, 0, 0}, + {"console", store_runscript_cmd, {(char **)&res_runscript}, CONSOLE_CMD, 0, 0}, + {"target", store_runscript_target,{(char **)&res_runscript}, 0, 0, 0}, {"runsonsuccess", store_runscript_bool, {(char **)&res_runscript.on_success},0, 0, 0}, {"runsonfailure", store_runscript_bool, {(char **)&res_runscript.on_failure},0, 0, 0}, {"failjobonerror",store_runscript_bool, {(char **)&res_runscript.fail_on_error},0, 0, 0}, @@ -2003,12 +2025,12 @@ static void store_runscript(LEX *lc, RES_ITEM *item, int index, int pass) Dmsg1(200, "store_runscript: begin store_runscript pass=%i\n", pass); token = lex_get_token(lc, T_SKIP_EOL); - + if (token != T_BOB) { scan_err1(lc, _("Expecting open brace. Got %s"), lc->str); } /* setting on_success, on_failure, fail_on_error */ - res_runscript.reset_default(); + res_runscript.reset_default(); if (pass == 2) { res_runscript.commands = New(alist(10, not_owned_by_alist)); @@ -2027,14 +2049,14 @@ static void store_runscript(LEX *lc, RES_ITEM *item, int index, int pass) if (token != T_EQUALS) { scan_err1(lc, _("expected an equals, got: %s"), lc->str); } - + /* Call item handler */ runscript_items[i].handler(lc, &runscript_items[i], i, pass); i = -1; break; } } - + if (i >=0) { scan_err1(lc, _("Keyword %s not permitted in this resource"), lc->str); } @@ -2050,7 +2072,7 @@ static void store_runscript(LEX *lc, RES_ITEM *item, int index, int pass) } /* * commands list contains 2 values per command - * - POOLMEM command string (ex: /bin/true) + * - POOLMEM command string (ex: /bin/true) * - int command type (ex: SHELL_CMD) */ res_runscript.set_job_code_callback(job_code_callback_director); @@ -2061,7 +2083,7 @@ static void store_runscript(LEX *lc, RES_ITEM *item, int index, int pass) script->command = c; script->cmd_type = t; /* target is taken from res_runscript, each runscript object have - * a copy + * a copy */ script->target = NULL; script->set_target(res_runscript.target); @@ -2071,7 +2093,7 @@ static void store_runscript(LEX *lc, RES_ITEM *item, int index, int pass) } delete res_runscript.commands; /* setting on_success, on_failure... cleanup target field */ - res_runscript.reset_default(true); + res_runscript.reset_default(true); } scan_to_eol(lc); @@ -2107,10 +2129,10 @@ extern "C" char *job_code_callback_director(JCR *jcr, const char* param) break; case 'x': return jcr->spool_data ? yes : no; - break; case 'D': return my_name; - break; + case 'C': + return jcr->cloned ? yes : no; } return NULL; } diff --git a/bacula/src/dird/dird_conf.h b/bacula/src/dird/dird_conf.h index 952578127f..b3eea1ebfc 100644 --- a/bacula/src/dird/dird_conf.h +++ b/bacula/src/dird/dird_conf.h @@ -1,34 +1,22 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2011 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Director specific configuration and defines * - * Kern Sibbald, Feb MM + * Written by Kern Sibbald, Feb MM * */ @@ -115,6 +103,7 @@ public: char *subsys_directory; /* SubsysDirectory */ MSGS *messages; /* Daemon message handler */ uint32_t MaxConcurrentJobs; /* Max concurrent jobs for whole director */ + uint32_t MaxSpawnedJobs; /* Max Jobs that can be started by Migration/Copy */ uint32_t MaxConsoleConnect; /* Max concurrent console session */ utime_t FDConnectTimeout; /* timeout for connect in seconds */ utime_t SDConnectTimeout; /* timeout in seconds */ @@ -141,7 +130,7 @@ inline char *DIRRES::name() const { return hdr.name; } /* * Device Resource * This resource is a bit different from the other resources - * because it is not defined in the Director + * because it is not defined in the Director * by DEVICE { ... }, but rather by a "reference" such as * DEVICE = xxx; Then when the Director connects to the * SD, it requests the information about the device. @@ -257,6 +246,7 @@ public: utime_t JobRetention; /* job retention period in seconds */ utime_t heartbeat_interval; /* Interval to send heartbeats */ char *address; + char *fd_storage_address; /* Storage address to use from FD side */ char *password; CAT *catalog; /* Catalog resource */ int32_t MaxConcurrentJobs; /* Maximum concurrent jobs */ @@ -271,6 +261,8 @@ public: bool tls_enable; /* Enable TLS */ bool tls_require; /* Require TLS */ bool AutoPrune; /* Do automatic pruning? */ + bool sd_calls_client; /* SD calls the client */ + int64_t max_bandwidth; /* Limit speed on this client */ /* Methods */ char *name() const; @@ -290,6 +282,7 @@ public: uint32_t SDport; /* port where Directors connect */ uint32_t SDDport; /* data port for File daemon */ char *address; + char *fd_storage_address; /* Storage address to use from FD side */ char *password; char *media_type; alist *device; /* Alternate devices for this Storage */ @@ -318,7 +311,7 @@ public: }; inline char *STORE::dev_name() const -{ +{ DEVICE *dev = (DEVICE *)device->first(); return dev->name(); } @@ -336,9 +329,9 @@ public: POOLMEM *store_source; /* Methods */ - USTORE() { store = NULL; store_source = get_pool_memory(PM_MESSAGE); + USTORE() { store = NULL; store_source = get_pool_memory(PM_MESSAGE); *store_source = 0; }; - ~USTORE() { destroy(); } + ~USTORE() { destroy(); } void set_source(const char *where); void destroy(); }; @@ -401,6 +394,7 @@ public: int64_t spool_size; /* Size of spool file for this job */ int32_t MaxConcurrentJobs; /* Maximum concurrent jobs */ int32_t NumConcurrentJobs; /* number of concurrent jobs running */ + uint32_t MaxSpawnedJobs; /* Max Jobs that can be started by Migration/Copy */ bool allow_mixed_priority; /* Allow jobs with higher priority concurrently with this */ MSGS *messages; /* How and where to send messages */ @@ -409,6 +403,7 @@ public: FILESET *fileset; /* What to backup -- Fileset */ alist *storage; /* Where is device -- list of Storage to be used */ POOL *pool; /* Where is media -- Media Pool */ + POOL *next_pool; /* Next Pool for Copy/Migrate/VirtualFull */ POOL *full_pool; /* Pool for Full backups */ POOL *inc_pool; /* Pool for Incremental backups */ POOL *diff_pool; /* Pool for Differental backups */ @@ -442,7 +437,8 @@ public: bool PurgeMigrateJob; /* Purges source job on completion */ bool IgnoreDuplicateJobChecking; /* Ignore Duplicate Job Checking */ - alist *base; /* Base jobs */ + alist *base; /* Base jobs */ + int64_t max_bandwidth; /* Speed limit on this job */ /* Methods */ char *name() const; @@ -516,8 +512,11 @@ public: RES hdr; RUN *run; + char *name() const; }; +inline char *SCHED::name() const { return hdr.name; } + /* * Counter Resource */ @@ -622,8 +621,11 @@ public: bool accurate_set; /* accurate given */ bool write_part_after_job; /* Write part after job override */ bool write_part_after_job_set; /* Write part after job override given */ - + bool priority_set; /* priority override given */ + bool level_set; /* level override given */ + POOL *pool; /* Pool override */ + POOL *next_pool; /* Next pool override */ POOL *full_pool; /* Pool override */ POOL *inc_pool; /* Pool override */ POOL *diff_pool; /* Pool override */ @@ -635,10 +637,10 @@ public: time_t last_run; /* last time run */ time_t next_run; /* next time to run */ char hour[nbytes_for_bits(24)]; /* bit set for each hour */ - char mday[nbytes_for_bits(31)]; /* bit set for each day of month */ + char mday[nbytes_for_bits(32)]; /* bit set for each day of month */ char month[nbytes_for_bits(12)]; /* bit set for each month */ char wday[nbytes_for_bits(7)]; /* bit set for each day of the week */ - char wom[nbytes_for_bits(5)]; /* week of month */ + char wom[nbytes_for_bits(6)]; /* week of month */ char woy[nbytes_for_bits(54)]; /* week of year */ }; diff --git a/bacula/src/dird/expand.c b/bacula/src/dird/expand.c index 894be0da75..c9be631624 100644 --- a/bacula/src/dird/expand.c +++ b/bacula/src/dird/expand.c @@ -10,29 +10,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2003-2006 Free Software Foundation Europe e.V. + Copyright (C) 2003-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ #include "bacula.h" diff --git a/bacula/src/dird/fd_cmds.c b/bacula/src/dird/fd_cmds.c index e294b2981d..730de2ab2c 100644 --- a/bacula/src/dird/fd_cmds.c +++ b/bacula/src/dird/fd_cmds.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2010 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * @@ -52,6 +40,7 @@ static char jobcmd[] = "JobId=%s Job=%s SDid=%u SDtime=%u Authorization=%s\ static char levelcmd[] = "level = %s%s%s mtime_only=%d %s%s\n"; static char runscript[] = "Run OnSuccess=%u OnFailure=%u AbortOnError=%u When=%u Command=%s\n"; static char runbeforenow[]= "RunBeforeNow\n"; +static char bandwidthcmd[] = "setbandwidth=%lld Job=%s\n"; /* Responses received from File daemon */ static char OKinc[] = "2000 OK include\n"; @@ -60,6 +49,7 @@ static char OKlevel[] = "2000 OK level\n"; static char OKRunScript[] = "2000 OK RunScript\n"; static char OKRunBeforeNow[] = "2000 OK RunBeforeNow\n"; static char OKRestoreObject[] = "2000 OK ObjectRestored\n"; +static char OKBandwidth[] = "2000 OK Bandwidth\n"; /* Forward referenced functions */ static bool send_list_item(JCR *jcr, const char *code, char *item, BSOCK *fd); @@ -80,42 +70,40 @@ extern int FDConnectTimeout; int connect_to_file_daemon(JCR *jcr, int retry_interval, int max_retry_time, int verbose) { - BSOCK *fd = new_bsock(); + BSOCK *fd = jcr->file_bsock; char ed1[30]; utime_t heart_beat; if (jcr->client->heartbeat_interval) { heart_beat = jcr->client->heartbeat_interval; - } else { + } else { heart_beat = director->heartbeat_interval; } - if (!jcr->file_bsock) { + if (!is_bsock_open(jcr->file_bsock)) { char name[MAX_NAME_LENGTH + 100]; + + if (!fd) { + fd = jcr->file_bsock = new_bsock(); + } bstrncpy(name, _("Client: "), sizeof(name)); bstrncat(name, jcr->client->name(), sizeof(name)); fd->set_source_address(director->DIRsrc_addr); if (!fd->connect(jcr,retry_interval,max_retry_time, heart_beat, name, jcr->client->address, NULL, jcr->client->FDport, verbose)) { - fd->destroy(); - fd = NULL; - } - - if (fd == NULL) { + fd->close(); jcr->setJobStatus(JS_ErrorTerminated); return 0; } Dmsg0(10, "Opened connection with File daemon\n"); - } else { - fd = jcr->file_bsock; /* use existing connection */ } fd->res = (RES *)jcr->client; /* save resource in BSOCK */ - jcr->file_bsock = fd; jcr->setJobStatus(JS_Running); if (!authenticate_file_daemon(jcr)) { jcr->setJobStatus(JS_ErrorTerminated); + Dmsg0(10, "Authentication error with FD.\n"); return 0; } @@ -153,7 +141,7 @@ int connect_to_file_daemon(JCR *jcr, int retry_interval, int max_retry_time, } } else { Jmsg(jcr, M_FATAL, 0, _("FD gave bad response to JobId command: %s\n"), - bnet_strerror(fd)); + fd->bstrerror()); jcr->setJobStatus(JS_ErrorTerminated); return 0; } @@ -188,7 +176,7 @@ void get_level_since_time(JCR *jcr, char *since, int since_len) /* Make sure stime buffer is allocated */ if (!jcr->stime) { jcr->stime = get_pool_memory(PM_MESSAGE); - } + } jcr->PrevJob[0] = jcr->stime[0] = 0; /* * Lookup the last FULL backup job to get the time/date for a @@ -208,19 +196,19 @@ void get_level_since_time(JCR *jcr, char *since, int since_len) if (!db_find_job_start_time(jcr,jcr->db, &jcr->jr, &jcr->stime, jcr->PrevJob)) { do_full = true; } - have_full = db_find_last_job_start_time(jcr, jcr->db, &jcr->jr, + have_full = db_find_last_job_start_time(jcr, jcr->db, &jcr->jr, &stime, prev_job, L_FULL); if (have_full) { last_full_time = str_to_utime(stime); } else { do_full = true; /* No full, upgrade to one */ } - Dmsg4(50, "have_full=%d do_full=%d now=%lld full_time=%lld\n", have_full, + Dmsg4(50, "have_full=%d do_full=%d now=%lld full_time=%lld\n", have_full, do_full, now, last_full_time); /* Make sure the last diff is recent enough */ if (have_full && jcr->getJobLevel() == L_INCREMENTAL && jcr->job->MaxDiffInterval > 0) { /* Lookup last diff job */ - if (db_find_last_job_start_time(jcr, jcr->db, &jcr->jr, + if (db_find_last_job_start_time(jcr, jcr->db, &jcr->jr, &stime, prev_job, L_DIFFERENTIAL)) { last_diff_time = str_to_utime(stime); /* If no Diff since Full, use Full time */ @@ -275,7 +263,7 @@ void get_level_since_time(JCR *jcr, char *since, int since_len) jcr->jr.JobId = jcr->JobId; break; } - Dmsg3(100, "Level=%c last start time=%s job=%s\n", + Dmsg3(100, "Level=%c last start time=%s job=%s\n", jcr->getJobLevel(), jcr->stime, jcr->PrevJob); } @@ -286,13 +274,26 @@ static void send_since_time(JCR *jcr) char ed1[50]; stime = str_to_utime(jcr->stime); - fd->fsend(levelcmd, "", NT_("since_utime "), edit_uint64(stime, ed1), 0, + fd->fsend(levelcmd, "", NT_("since_utime "), edit_uint64(stime, ed1), 0, NT_("prev_job="), jcr->PrevJob); while (bget_dirmsg(fd) >= 0) { /* allow him to poll us to sync clocks */ Jmsg(jcr, M_INFO, 0, "%s\n", fd->msg); } } +bool send_bwlimit(JCR *jcr, const char *Job) +{ + BSOCK *fd = jcr->file_bsock; + if (jcr->FDVersion >= 4) { + fd->fsend(bandwidthcmd, jcr->max_bandwidth, Job); + if (!response(jcr, fd, OKBandwidth, "Bandwidth", DISPLAY_ERROR)) { + jcr->max_bandwidth = 0; /* can't set bandwidth limit */ + return false; + } + } + return true; +} + /* * Send level command to FD. * Used for backup jobs and estimate command. @@ -366,7 +367,7 @@ static bool send_fileset(JCR *jcr) fd->fsend("E\n"); } if (ie->ignoredir) { - bnet_fsend(fd, "Z %s\n", ie->ignoredir); + fd->fsend("Z %s\n", ie->ignoredir); } for (j=0; jnum_opts; j++) { FOPTS *fo = ie->opts_list[j]; @@ -382,9 +383,9 @@ static bool send_fileset(JCR *jcr) /* Strip out compression option Zn if disallowed for this Storage */ if (store && !store->AllowCompress) { char newopts[MAX_FOPTS]; - bool done=false; /* print warning only if compression enabled in FS */ + bool done=false; /* print warning only if compression enabled in FS */ int j = 0; - for (k=0; fo->opts[k]!='\0'; k++) { + for (k=0; fo->opts[k]!='\0'; k++) { /* Z compress option is followed by the single-digit compress level or 'o' */ if (fo->opts[k]=='Z') { done=true; @@ -507,7 +508,7 @@ static bool send_list_item(JCR *jcr, const char *code, char *item, BSOCK *fd) while (fgets(buf+optlen, sizeof(buf)-optlen, bpipe->rfd)) { fd->msglen = Mmsg(fd->msg, "%s", buf); Dmsg2(500, "Inc/exc len=%d: %s", fd->msglen, fd->msg); - if (!bnet_send(fd)) { + if (!fd->send()) { Jmsg(jcr, M_FATAL, 0, _(">filed: write error on socket\n")); return false; } @@ -532,7 +533,7 @@ static bool send_list_item(JCR *jcr, const char *code, char *item, BSOCK *fd) optlen = strlen(buf); while (fgets(buf+optlen, sizeof(buf)-optlen, ffd)) { fd->msglen = Mmsg(fd->msg, "%s", buf); - if (!bnet_send(fd)) { + if (!fd->send()) { Jmsg(jcr, M_FATAL, 0, _(">filed: write error on socket\n")); return false; } @@ -553,7 +554,7 @@ static bool send_list_item(JCR *jcr, const char *code, char *item, BSOCK *fd) break; } return true; -} +} /* @@ -569,7 +570,6 @@ bool send_include_list(JCR *jcr) return true; } - /* * Send exclude list to File daemon * Under the new scheme, the Exclude list @@ -592,10 +592,10 @@ int send_runscript_with_old_proto(JCR *jcr, int when, POOLMEM *msg) int ret; Dmsg1(120, "bdird: sending old runcommand to fd '%s'\n",msg); if (when & SCRIPT_Before) { - bnet_fsend(jcr->file_bsock, runbefore, msg); + jcr->file_bsock->fsend(runbefore, msg); ret = response(jcr, jcr->file_bsock, OKRunBefore, "ClientRunBeforeJob", DISPLAY_ERROR); } else { - bnet_fsend(jcr->file_bsock, runafter, msg); + jcr->file_bsock->fsend(runafter, msg); ret = response(jcr, jcr->file_bsock, OKRunAfter, "ClientRunAfterJob", DISPLAY_ERROR); } return ret; @@ -617,7 +617,7 @@ int send_runscripts_commands(JCR *jcr) int result; Dmsg0(120, "bdird: sending runscripts to fd\n"); - + foreach_alist(cmd, jcr->job->RunScripts) { if (cmd->can_run_at_level(jcr->getJobLevel()) && cmd->target) { ehost = edit_job_codes(jcr, ehost, cmd->target, ""); @@ -628,13 +628,13 @@ int send_runscripts_commands(JCR *jcr) bash_spaces(msg); Dmsg1(120, "bdird: sending runscripts to fd '%s'\n", cmd->command); - + /* TODO: remove this with bacula 1.42 */ if (cmd->old_proto) { result = send_runscript_with_old_proto(jcr, cmd->when, msg); } else { - fd->fsend(runscript, cmd->on_success, + fd->fsend(runscript, cmd->on_success, cmd->on_failure, cmd->fail_on_error, cmd->when, @@ -643,7 +643,7 @@ int send_runscripts_commands(JCR *jcr) result = response(jcr, fd, OKRunScript, "RunScript", DISPLAY_ERROR); launch_before_cmd = true; } - + if (!result) { goto bail_out; } @@ -654,8 +654,8 @@ int send_runscripts_commands(JCR *jcr) send command to an other client } */ - } - } + } + } /* Tell the FD to execute the ClientRunBeforeJob */ if (launch_before_cmd) { @@ -693,7 +693,7 @@ static int restore_object_handler(void *ctx, int num_fields, char **row) /* Old File Daemon doesn't handle restore objects */ if (jcr->FDVersion < 3) { Jmsg(jcr, M_WARNING, 0, _("Client \"%s\" may not be used to restore " - "this job. Please upgrade your client.\n"), + "this job. Please upgrade your client.\n"), jcr->client->name()); return 1; } @@ -703,7 +703,7 @@ static int restore_object_handler(void *ctx, int num_fields, char **row) row[0], row[1], row[2], row[3], row[4], row[5], row[6]); } else { /* bash spaces from PluginName */ - bash_spaces(row[9]); + bash_spaces(row[9]); fd->fsend("restoreobject JobId=%s %s,%s,%s,%s,%s,%s,%s\n", row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[9]); } @@ -718,16 +718,16 @@ static int restore_object_handler(void *ctx, int num_fields, char **row) // Dmsg1(000, "obj size: %lld\n", (uint64_t)fd->msglen); /* object */ - db_unescape_object(jcr, jcr->db, + db_unescape_object(jcr, jcr->db, row[8], /* Object */ str_to_uint64(row[1]), /* Object length */ &fd->msg, &fd->msglen); fd->send(); /* send object */ octx->count++; - if (debug_level) { + if (debug_level > 100) { for (int i=0; i < fd->msglen; i++) - if (!fd->msg[i]) + if (!fd->msg[i]) fd->msg[i] = ' '; Dmsg1(000, "Send obj: %s\n", fd->msg); } @@ -735,6 +735,12 @@ static int restore_object_handler(void *ctx, int num_fields, char **row) return 0; } +/* + * Send the plugin Restore Objects, which allow the + * plugin to get information early in the restore + * process. The RestoreObjects were created during + * the backup by the plugin. + */ bool send_restore_objects(JCR *jcr) { char ed1[50]; @@ -747,15 +753,15 @@ bool send_restore_objects(JCR *jcr) } octx.jcr = jcr; octx.count = 0; - + /* restore_object_handler is called for each file found */ - + /* send restore objects for all jobs involved */ Mmsg(query, get_restore_objects, jcr->JobIds, FT_RESTORE_FIRST); db_sql_query(jcr->db, query.c_str(), restore_object_handler, (void *)&octx); /* send config objects for the current restore job */ - Mmsg(query, get_restore_objects, + Mmsg(query, get_restore_objects, edit_uint64(jcr->JobId, ed1), FT_PLUGIN_CONFIG_FILLED); db_sql_query(jcr->db, query.c_str(), restore_object_handler, (void *)&octx); @@ -774,8 +780,6 @@ bool send_restore_objects(JCR *jcr) return true; } - - /* * Read the attributes from the File daemon for * a Verify job and store them in the catalog. @@ -802,10 +806,17 @@ int get_attributes_and_put_in_catalog(JCR *jcr) char *p, *fn; char Digest[MAXSTRING]; /* either Verify opts or MD5/SHA1 digest */ + /* Stop here if canceled */ + if (jcr->is_job_canceled()) { + jcr->cached_attribute = false; + return 0; + } + if ((len = sscanf(fd->msg, "%ld %d %s", &file_index, &stream, Digest)) != 3) { Jmsg(jcr, M_FATAL, 0, _("msglen, fd->msg); jcr->setJobStatus(JS_ErrorTerminated); + jcr->cached_attribute = false; return 0; } p = fd->msg; @@ -824,6 +835,7 @@ int get_attributes_and_put_in_catalog(JCR *jcr) if (!db_create_file_attributes_record(jcr, jcr->db, ar)) { Jmsg1(jcr, M_FATAL, 0, _("Attribute create error. %s"), db_strerror(jcr->db)); } + jcr->cached_attribute = false; } /* Any cached attr is flushed so we can reuse jcr->attr and jcr->ar */ fn = jcr->fname = check_pool_memory_size(jcr->fname, fd->msglen); @@ -842,7 +854,6 @@ int get_attributes_and_put_in_catalog(JCR *jcr) ar->JobId = jcr->JobId; ar->ClientId = jcr->ClientId; ar->PathId = 0; - ar->FilenameId = 0; ar->Digest = NULL; ar->DigestType = CRYPTO_DIGEST_NONE; ar->DeltaSeq = 0; @@ -872,18 +883,19 @@ int get_attributes_and_put_in_catalog(JCR *jcr) jcr->jr.JobFiles = jcr->JobFiles = file_index; jcr->jr.LastIndex = file_index; } - if (is_bnet_error(fd)) { + if (fd->is_error()) { Jmsg1(jcr, M_FATAL, 0, _("bstrerror()); + jcr->cached_attribute = false; return 0; } if (jcr->cached_attribute) { - Dmsg3(dbglvl, "Cached attr with digest. Stream=%d fname=%s attr=%s\n", ar->Stream, + Dmsg3(dbglvl, "Cached attr with digest. Stream=%d fname=%s attr=%s\n", ar->Stream, ar->fname, ar->attr); if (!db_create_file_attributes_record(jcr, jcr->db, ar)) { Jmsg1(jcr, M_FATAL, 0, _("Attribute create error. %s"), db_strerror(jcr->db)); } - jcr->cached_attribute = false; + jcr->cached_attribute = false; } jcr->setJobStatus(JS_Terminated); return 1; diff --git a/bacula/src/dird/getmsg.c b/bacula/src/dird/getmsg.c index b30b2144a1..364298b258 100644 --- a/bacula/src/dird/getmsg.c +++ b/bacula/src/dird/getmsg.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2010 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * @@ -94,10 +82,6 @@ static void set_jcr_sd_job_status(JCR *jcr, int SDJobStatus) jcr->wait_time = time(NULL); } jcr->SDJobStatus = SDJobStatus; - if (jcr->SDJobStatus == JS_Incomplete) { - jcr->setJobStatus(JS_Incomplete); - } - } /* @@ -112,7 +96,7 @@ static void set_jcr_sd_job_status(JCR *jcr, int SDJobStatus) * to the appropriate handler. If the message is * in any other format, it will be returned. * - * E.g. any message beginning with a digit will be passed + * E.g. any message beginning with a digit will be passed * through to the caller. * All other messages are expected begin with some identifier * -- for the moment only the first character is checked, but @@ -122,7 +106,7 @@ static void set_jcr_sd_job_status(JCR *jcr, int SDJobStatus) * place (Job message, catalog request, ...). The Job is used to lookup * the JCR so that the action is performed on the correct jcr, and * the rest of the message is up to the user. Note, DevUpd uses - * *System* for the Job name, and hence no JCR is obtained. This + * *System* for the Job name, and hence no JCR is obtained. This * is a *rare* case where a jcr is not really needed. * */ @@ -242,7 +226,7 @@ int bget_dirmsg(BSOCK *bs) if (bs->msg[0] == 'B') { /* SD sending file spool attributes */ Dmsg2(100, "Blast attributes jcr 0x%x: %s", jcr, bs->msg); char filename[256]; - if (sscanf(bs->msg, "BlastAttr Job=%127s File=%255s", + if (sscanf(bs->msg, "BlastAttr Job=%127s File=%255s", Job, filename) != 2) { Jmsg1(jcr, M_ERROR, 0, _("Malformed message: %s\n"), bs->msg); continue; @@ -260,6 +244,20 @@ int bget_dirmsg(BSOCK *bs) mount_request(jcr, bs, msg); continue; } + /* Get Progress: files, bytes, bytes/sec */ + if (bs->msg[0] == 'P') { /* Progress report */ + uint32_t files, bps; + uint64_t bytes; + if (sscanf(bs->msg, "Progress Job=x files=%ld bytes=%lld bps=%ld\n", + &files, &bytes, &bps) == 3) { + Dmsg2(900, "JobId=%d %s", jcr->JobId, bs->msg); + /* Save progress data */ + jcr->JobFiles = files; + jcr->JobBytes = bytes; + jcr->LastRate = bps; + } + continue; + } if (bs->msg[0] == 'S') { /* Status change */ int JobStatus; char Job[MAX_NAME_LENGTH]; @@ -286,8 +284,8 @@ int bget_dirmsg(BSOCK *bs) &dev_append, &dev_read, &dev_num_writers, &dev_open, &dev_labeled, &dev_offline, &dev_reserved, - &dev_max_writers, &dev_autoselect, - &dev_autochanger, + &dev_max_writers, &dev_autoselect, + &dev_autochanger, changer_name.c_str(), media_type.c_str(), volume_name.c_str(), &dev_read_time, &dev_write_time, &dev_read_bytes, @@ -356,7 +354,7 @@ bool response(JCR *jcr, BSOCK *bs, char *resp, const char *cmd, e_prtmsg prtmsg) { int n; - if (is_bnet_error(bs)) { + if (bs->is_error()) { return false; } if ((n = bget_dirmsg(bs)) >= 0) { @@ -370,6 +368,6 @@ bool response(JCR *jcr, BSOCK *bs, char *resp, const char *cmd, e_prtmsg prtmsg) return false; } Jmsg(jcr, M_FATAL, 0, _("Socket error on %s command: ERR=%s\n"), - cmd, bnet_strerror(bs)); + cmd, bs->bstrerror()); return false; } diff --git a/bacula/src/dird/inc_conf.c b/bacula/src/dird/inc_conf.c index 7df0be1a49..a463553e3f 100644 --- a/bacula/src/dird/inc_conf.c +++ b/bacula/src/dird/inc_conf.c @@ -1,37 +1,24 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2009 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Configuration file parser for new and old Include and * Exclude records * - * Kern Sibbald, March MMIII + * Written by Kern Sibbald, March MMIII * - * Version $Id$ */ #include "bacula.h" diff --git a/bacula/src/dird/job.c b/bacula/src/dird/job.c index 9865e373db..96f4ead6e2 100644 --- a/bacula/src/dird/job.c +++ b/bacula/src/dird/job.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2010 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * @@ -97,15 +85,15 @@ JobId_t run_job(JCR *jcr) return jcr->JobId; } return 0; -} +} -bool setup_job(JCR *jcr) +bool setup_job(JCR *jcr) { int errstat; jcr->lock(); Dsm_check(100); - init_msg(jcr, jcr->messages); + init_msg(jcr, jcr->messages, job_code_callback_director); /* Initialize termination condition variable */ if ((errstat = pthread_cond_init(&jcr->term_wait, NULL)) != 0) { @@ -124,7 +112,7 @@ bool setup_job(JCR *jcr) * Open database */ Dmsg0(100, "Open database\n"); - jcr->db = db_init_database(jcr, jcr->catalog->db_driver, jcr->catalog->db_name, + jcr->db = db_init_database(jcr, jcr->catalog->db_driver, jcr->catalog->db_name, jcr->catalog->db_user, jcr->catalog->db_password, jcr->catalog->db_address, jcr->catalog->db_port, jcr->catalog->db_socket, jcr->catalog->mult_db_connections, @@ -146,6 +134,10 @@ bool setup_job(JCR *jcr) jcr->pool_source = get_pool_memory(PM_MESSAGE); pm_strcpy(jcr->pool_source, _("unknown source")); } + if (!jcr->next_pool_source) { + jcr->next_pool_source = get_pool_memory(PM_MESSAGE); + pm_strcpy(jcr->next_pool_source, _("unknown source")); + } if (jcr->JobReads()) { if (!jcr->rpool_source) { @@ -221,8 +213,8 @@ bool setup_job(JCR *jcr) break; case JT_COPY: case JT_MIGRATE: - if (!do_migration_init(jcr)) { - migration_cleanup(jcr, JS_ErrorTerminated); + if (!do_mac_init(jcr)) { + mac_cleanup(jcr, JS_ErrorTerminated, JS_ErrorTerminated); goto bail_out; } break; @@ -232,7 +224,6 @@ bool setup_job(JCR *jcr) goto bail_out; } - generate_job_event(jcr, "JobInit"); generate_plugin_event(jcr, bDirEventJobInit); Dsm_check(100); return true; @@ -305,7 +296,6 @@ static void *job_thread(void *arg) if (!db_update_job_start_record(jcr, jcr->db, &jcr->jr)) { Jmsg(jcr, M_FATAL, 0, "%s", db_strerror(jcr->db)); } - generate_job_event(jcr, "JobRun"); generate_plugin_event(jcr, bDirEventJobRun); switch (jcr->getJobType()) { @@ -339,10 +329,10 @@ static void *job_thread(void *arg) break; case JT_COPY: case JT_MIGRATE: - if (!job_canceled(jcr) && do_migration(jcr)) { + if (!job_canceled(jcr) && do_mac(jcr)) { do_autoprune(jcr); } else { - migration_cleanup(jcr, JS_ErrorTerminated); + mac_cleanup(jcr, JS_ErrorTerminated, JS_ErrorTerminated); } break; default: @@ -368,7 +358,7 @@ void sd_msg_thread_send_signal(JCR *jcr, int sig) { jcr->lock(); if ( !jcr->sd_msg_thread_done - && jcr->SD_msg_chan + && jcr->SD_msg_chan && !pthread_equal(jcr->SD_msg_chan, pthread_self())) { Dmsg1(800, "Send kill to SD msg chan jid=%d\n", jcr->JobId); @@ -377,6 +367,123 @@ void sd_msg_thread_send_signal(JCR *jcr, int sig) jcr->unlock(); } +static int cancel_file_daemon_job(UAContext *ua, const char *cmd, JCR *jcr) +{ + if (!jcr->client) { + Dmsg0(100, "No client to cancel\n"); + return 0; + } + ua->jcr->client = jcr->client; + if (!connect_to_file_daemon(ua->jcr, 10, FDConnectTimeout, 1)) { + ua->error_msg(_("Failed to connect to File daemon.\n")); + return 0; + } + Dmsg0(100, "Connected to file daemon\n"); + BSOCK *fd = ua->jcr->file_bsock; + fd->fsend("%s Job=%s\n", cmd, jcr->Job); + while (fd->recv() >= 0) { + ua->send_msg("%s", fd->msg); + } + fd->signal(BNET_TERMINATE); + free_bsock(ua->jcr->file_bsock); + ua->jcr->client = NULL; + return 1; +} + +static bool cancel_sd_job(UAContext *ua, const char *cmd, JCR *jcr) +{ + if (jcr->store_bsock) { + if (jcr->rstorage) { + copy_wstorage(ua->jcr, jcr->rstorage, _("Job resource")); + } else { + copy_wstorage(ua->jcr, jcr->wstorage, _("Job resource")); + } + } else { + USTORE store; + if (jcr->rstorage) { + store.store = jcr->rstore; + } else { + store.store = jcr->wstore; + } + set_wstorage(ua->jcr, &store); + } + + if (!ua->jcr->wstore) { + ua->error_msg(_("Failed to select Storage daemon.\n")); + return false; + } + + if (!connect_to_storage_daemon(ua->jcr, 10, SDConnectTimeout, 1)) { + ua->error_msg(_("Failed to connect to Storage daemon.\n")); + return false; + } + Dmsg0(200, "Connected to storage daemon\n"); + BSOCK *sd = ua->jcr->store_bsock; + sd->fsend("%s Job=%s\n", cmd, jcr->Job); + while (sd->recv() >= 0) { + ua->send_msg("%s", sd->msg); + } + sd->signal(BNET_TERMINATE); + free_bsock(ua->jcr->store_bsock); + return true; +} + +/* The FD is not connected, so we try to complete JCR fields and send + * the cancel command. + */ +static int cancel_inactive_job(UAContext *ua, JCR *jcr) +{ + CLIENT_DBR cr; + JOB_DBR jr; + int i; + USTORE store; + + if (!jcr->client) { + memset(&cr, 0, sizeof(cr)); + + /* User is kind enough to provide the client name */ + if ((i = find_arg_with_value(ua, "client")) > 0) { + bstrncpy(cr.Name, ua->argv[i], sizeof(cr.Name)); + + } else { + memset(&jr, 0, sizeof(jr)); + bstrncpy(jr.Job, jcr->Job, sizeof(jr.Job)); + + if (!open_client_db(ua)) { + goto bail_out; + } + if (!db_get_job_record(ua->jcr, ua->db, &jr)) { + goto bail_out; + } + cr.ClientId = jr.ClientId; + if (!cr.ClientId || !db_get_client_record(ua->jcr, ua->db, &cr)) { + goto bail_out; + } + } + + if (acl_access_ok(ua, Client_ACL, cr.Name)) { + jcr->client = (CLIENT *)GetResWithName(R_CLIENT, cr.Name); + } + } + + cancel_file_daemon_job(ua, "cancel", jcr); + + /* At this time, we can't really guess the storage name from + * the job record + */ + store.store = get_storage_resource(ua, false/*no default*/, true/*unique*/); + if (!store.store) { + goto bail_out; + } + + set_wstorage(ua->jcr, &store); + + cancel_sd_job(ua, "cancel", jcr); + +bail_out: + return 1; +} + /* * Cancel a job -- typically called by the UA (Console program), but may also * be called by the job watchdog. @@ -384,13 +491,28 @@ void sd_msg_thread_send_signal(JCR *jcr, int sig) * Returns: true if cancel appears to be successful * false on failure. Message sent to ua->jcr. */ -bool cancel_job(UAContext *ua, JCR *jcr) +bool cancel_job(UAContext *ua, JCR *jcr, bool cancel) { - BSOCK *sd, *fd; char ed1[50]; int32_t old_status = jcr->JobStatus; + int status; + const char *reason, *cmd; + bool force = find_arg(ua, "inactive") > 0; + JCR *wjcr = jcr->wjcr; + + + /* If the user explicitely ask, we can send the cancel command to + * the FD. + */ + if (cancel && force) { + return cancel_inactive_job(ua, jcr); + } + + status = JS_Canceled; + reason = _("canceled"); + cmd = NT_("cancel"); - jcr->setJobStatus(JS_Canceled); + jcr->setJobStatus(status); switch (old_status) { case JS_Created: @@ -400,68 +522,60 @@ bool cancel_job(UAContext *ua, JCR *jcr) case JS_WaitPriority: case JS_WaitMaxJobs: case JS_WaitStartTime: - ua->info_msg(_("JobId %s, Job %s marked to be canceled.\n"), - edit_uint64(jcr->JobId, ed1), jcr->Job); + case JS_WaitDevice: + ua->info_msg(_("JobId %s, Job %s marked to be %s.\n"), + edit_uint64(jcr->JobId, ed1), jcr->Job, + reason); jobq_remove(&job_queue, jcr); /* attempt to remove it from queue */ break; default: + /* Cancel File daemon */ if (jcr->file_bsock) { - ua->jcr->client = jcr->client; - if (!connect_to_file_daemon(ua->jcr, 10, FDConnectTimeout, 1)) { - ua->error_msg(_("Failed to connect to File daemon.\n")); - return 0; - } - Dmsg0(200, "Connected to file daemon\n"); - fd = ua->jcr->file_bsock; - fd->fsend("cancel Job=%s\n", jcr->Job); - while (fd->recv() >= 0) { - ua->send_msg("%s", fd->msg); - } - fd->signal(BNET_TERMINATE); - fd->close(); - ua->jcr->file_bsock = NULL; + /* do not return now, we want to try to cancel the sd */ + cancel_file_daemon_job(ua, cmd, jcr); + } + + /* We test file_bsock because the previous operation can take + * several minutes + */ + if (jcr->file_bsock && cancel) { jcr->file_bsock->set_terminated(); jcr->my_thread_send_signal(TIMEOUT_SIGNAL); } /* Cancel Storage daemon */ if (jcr->store_bsock) { - if (!ua->jcr->wstorage) { - if (jcr->rstorage) { - copy_wstorage(ua->jcr, jcr->rstorage, _("Job resource")); - } else { - copy_wstorage(ua->jcr, jcr->wstorage, _("Job resource")); - } - } else { - USTORE store; - if (jcr->rstorage) { - store.store = jcr->rstore; - } else { - store.store = jcr->wstore; - } - set_wstorage(ua->jcr, &store); - } + /* do not return now, we want to try to cancel the sd socket */ + cancel_sd_job(ua, cmd, jcr); + } - if (!connect_to_storage_daemon(ua->jcr, 10, SDConnectTimeout, 1)) { - ua->error_msg(_("Failed to connect to Storage daemon.\n")); - return false; - } - Dmsg0(200, "Connected to storage daemon\n"); - sd = ua->jcr->store_bsock; - sd->fsend("cancel Job=%s\n", jcr->Job); - while (sd->recv() >= 0) { - ua->send_msg("%s", sd->msg); - } - sd->signal(BNET_TERMINATE); - sd->close(); - ua->jcr->store_bsock = NULL; + /* We test file_bsock because the previous operation can take + * several minutes + */ + if (jcr->store_bsock && cancel) { jcr->store_bsock->set_timed_out(); jcr->store_bsock->set_terminated(); sd_msg_thread_send_signal(jcr, TIMEOUT_SIGNAL); jcr->my_thread_send_signal(TIMEOUT_SIGNAL); } + + /* Cancel Copy/Migration Storage daemon */ + if (wjcr && wjcr->store_bsock) { + /* do not return now, we want to try to cancel the sd socket */ + cancel_sd_job(ua, cmd, wjcr); + + /* We test file_bsock because the previous operation can take + * several minutes + */ + if (wjcr->store_bsock && cancel) { + wjcr->store_bsock->set_timed_out(); + wjcr->store_bsock->set_terminated(); + sd_msg_thread_send_signal(wjcr, TIMEOUT_SIGNAL); + wjcr->my_thread_send_signal(TIMEOUT_SIGNAL); + } + } break; } @@ -470,7 +584,7 @@ bool cancel_job(UAContext *ua, JCR *jcr) void cancel_storage_daemon_job(JCR *jcr) { - if (jcr->sd_canceled) { + if (jcr->sd_canceled) { return; /* cancel only once */ } @@ -482,9 +596,9 @@ void cancel_storage_daemon_job(JCR *jcr) if (jcr->store_bsock) { if (!ua->jcr->wstorage) { if (jcr->rstorage) { - copy_wstorage(ua->jcr, jcr->rstorage, _("Job resource")); + copy_wstorage(ua->jcr, jcr->rstorage, _("Job resource")); } else { - copy_wstorage(ua->jcr, jcr->wstorage, _("Job resource")); + copy_wstorage(ua->jcr, jcr->wstorage, _("Job resource")); } } else { USTORE store; @@ -505,8 +619,7 @@ void cancel_storage_daemon_job(JCR *jcr) while (sd->recv() >= 0) { } sd->signal(BNET_TERMINATE); - sd->close(); - ua->jcr->store_bsock = NULL; + free_bsock(ua->jcr->store_bsock); jcr->sd_canceled = true; jcr->store_bsock->set_timed_out(); jcr->store_bsock->set_terminated(); @@ -552,7 +665,7 @@ static void job_monitor_watchdog(watchdog_t *self) jcr->setJobStatus(JS_Canceled); Qmsg(jcr, M_FATAL, 0, _("Max run time exceeded. Job canceled.\n")); cancel = true; - /* check MaxRunSchedTime */ + /* check MaxRunSchedTime */ } else if (job_check_maxrunschedtime(jcr)) { jcr->setJobStatus(JS_Canceled); Qmsg(jcr, M_FATAL, 0, _("Max run sched time exceeded. Job canceled.\n")); @@ -591,7 +704,7 @@ static bool job_check_maxwaittime(JCR *jcr) current = watchdog_time - jcr->wait_time; } - Dmsg2(200, "check maxwaittime %u >= %u\n", + Dmsg2(200, "check maxwaittime %u >= %u\n", current + jcr->wait_time_sum, job->MaxWaitTime); if (job->MaxWaitTime != 0 && (current + jcr->wait_time_sum) >= job->MaxWaitTime) { @@ -620,7 +733,7 @@ static bool job_check_maxruntime(JCR *jcr) } run_time = watchdog_time - jcr->start_time; Dmsg7(200, "check_maxruntime %llu-%u=%llu >= %llu|%llu|%llu|%llu\n", - watchdog_time, jcr->start_time, run_time, job->MaxRunTime, job->FullMaxRunTime, + watchdog_time, jcr->start_time, run_time, job->MaxRunTime, job->FullMaxRunTime, job->IncMaxRunTime, job->DiffMaxRunTime); if (jcr->getJobLevel() == L_FULL && job->FullMaxRunTime != 0 && @@ -639,7 +752,7 @@ static bool job_check_maxruntime(JCR *jcr) Dmsg0(200, "check_maxwaittime: Maxcancel\n"); cancel = true; } - + return cancel; } @@ -652,7 +765,7 @@ static bool job_check_maxrunschedtime(JCR *jcr) if (jcr->MaxRunSchedTime == 0 || job_canceled(jcr)) { return false; } - if ((watchdog_time - jcr->sched_time) < jcr->MaxRunSchedTime) { + if ((watchdog_time - jcr->initial_sched_time) < jcr->MaxRunSchedTime) { Dmsg3(200, "Job %p (%s) with MaxRunSchedTime %d not expired\n", jcr, jcr->Job, jcr->MaxRunSchedTime); return false; @@ -734,7 +847,7 @@ bool allow_duplicate_job(JCR *jcr) continue; /* not really a duplicate */ } } - if (job->CancelLowerLevelDuplicates && + if (job->CancelLowerLevelDuplicates && djcr->getJobType() == 'B' && jcr->getJobType() == 'B') { switch (jcr->getJobLevel()) { case L_FULL: @@ -758,7 +871,7 @@ bool allow_duplicate_job(JCR *jcr) } } /* - * cancel_dup will be done below + * cancel_dup will be done below */ if (cancel_me) { /* Zap current job */ @@ -782,6 +895,7 @@ bool allow_duplicate_job(JCR *jcr) case JS_WaitPriority: case JS_WaitMaxJobs: case JS_WaitStartTime: + case JS_WaitDevice: cancel_dup = true; /* cancel queued duplicate */ break; default: @@ -817,15 +931,68 @@ bool allow_duplicate_job(JCR *jcr) } endeach_jcr(djcr); - return true; + return true; } +/* + * Apply pool overrides to get the storage properly setup. + */ +bool apply_wstorage_overrides(JCR *jcr, POOL *opool) +{ + const char *source; + + Dmsg1(100, "Original pool=%s\n", opool->name()); + if (jcr->run_next_pool_override) { + pm_strcpy(jcr->next_pool_source, _("Run NextPool override")); + pm_strcpy(jcr->pool_source, _("Run NextPool override")); + source = _("Storage from Run NextPool override"); + } else if (jcr->job->next_pool) { + /* Use Job Next Pool */ + jcr->next_pool = jcr->job->next_pool; + pm_strcpy(jcr->next_pool_source, _("Job's NextPool resource")); + pm_strcpy(jcr->pool_source, _("Job's NextPool resource")); + source = _("Storage from Job's NextPool resource"); + } else { + /* Default to original pool->NextPool */ + jcr->next_pool = opool->NextPool; + Dmsg1(100, "next_pool=%p\n", jcr->next_pool); + if (jcr->next_pool) { + Dmsg1(100, "Original pool next Pool = %s\n", NPRT(jcr->next_pool->name())); + } + pm_strcpy(jcr->next_pool_source, _("Job Pool's NextPool resource")); + pm_strcpy(jcr->pool_source, _("Job Pool's NextPool resource")); + source = _("Storage from Pool's NextPool resource"); + } + + /* + * If the original backup pool has a NextPool, make sure a + * record exists in the database. + */ + if (jcr->next_pool) { + jcr->jr.PoolId = get_or_create_pool_record(jcr, jcr->next_pool->name()); + if (jcr->jr.PoolId == 0) { + return false; + } + } + + if (!set_mac_wstorage(NULL, jcr, jcr->pool, jcr->next_pool, source)) { + return false; + } + + /* Set write pool and source. Not read pool is in rpool. */ + jcr->pool = jcr->next_pool; + pm_strcpy(jcr->pool_source, source); + + return true; +} + + void apply_pool_overrides(JCR *jcr) { bool pool_override = false; if (jcr->run_pool_override) { - pm_strcpy(jcr->pool_source, _("Run pool override")); + pm_strcpy(jcr->pool_source, _("Run Pool override")); } /* * Apply any level related Pool selections @@ -906,12 +1073,13 @@ bool get_or_create_client_record(JCR *jcr) return true; } +/* + * Get or Create FileSet record + */ bool get_or_create_fileset_record(JCR *jcr) { FILESET_DBR fsr; - /* - * Get or Create FileSet record - */ + memset(&fsr, 0, sizeof(FILESET_DBR)); bstrncpy(fsr.FileSet, jcr->fileset->hdr.name, sizeof(fsr.FileSet)); if (jcr->fileset->have_MD5) { @@ -1037,26 +1205,27 @@ void create_unique_job_name(JCR *jcr, const char *base_name) /* Called directly from job rescheduling */ void dird_free_jcr_pointers(JCR *jcr) { + /* Close but do not free bsock packets */ if (jcr->file_bsock) { Dmsg0(200, "Close File bsock\n"); - bnet_close(jcr->file_bsock); - jcr->file_bsock = NULL; + jcr->file_bsock->close(); } if (jcr->store_bsock) { Dmsg0(200, "Close Store bsock\n"); - bnet_close(jcr->store_bsock); - jcr->store_bsock = NULL; + jcr->store_bsock->close(); } bfree_and_null(jcr->sd_auth_key); bfree_and_null(jcr->where); bfree_and_null(jcr->RestoreBootstrap); + jcr->cached_attribute = false; bfree_and_null(jcr->ar); free_and_null_pool_memory(jcr->JobIds); free_and_null_pool_memory(jcr->client_uname); free_and_null_pool_memory(jcr->attr); free_and_null_pool_memory(jcr->fname); + free_and_null_pool_memory(jcr->media_type); } /* @@ -1069,6 +1238,9 @@ void dird_free_jcr(JCR *jcr) Dmsg0(200, "Start dird free_jcr\n"); dird_free_jcr_pointers(jcr); + /* Free bsock packets */ + free_bsock(jcr->file_bsock); + free_bsock(jcr->store_bsock); if (jcr->term_wait_inited) { pthread_cond_destroy(&jcr->term_wait); jcr->term_wait_inited = false; @@ -1086,6 +1258,7 @@ void dird_free_jcr(JCR *jcr) free_and_null_pool_memory(jcr->stime); free_and_null_pool_memory(jcr->fname); free_and_null_pool_memory(jcr->pool_source); + free_and_null_pool_memory(jcr->next_pool_source); free_and_null_pool_memory(jcr->catalog_source); free_and_null_pool_memory(jcr->rpool_source); free_and_null_pool_memory(jcr->wstore_source); @@ -1096,20 +1269,21 @@ void dird_free_jcr(JCR *jcr) jcr->job_end_push.destroy(); - if (jcr->JobId != 0) + if (jcr->JobId != 0) { write_state_file(director->working_directory, "bacula-dir", get_first_port_host_order(director->DIRaddrs)); + } free_plugins(jcr); /* release instantiated plugins */ Dmsg0(200, "End dird free_jcr\n"); } -/* +/* * The Job storage definition must be either in the Job record - * or in the Pool record. The Pool record overrides the Job + * or in the Pool record. The Pool record overrides the Job * record. */ -void get_job_storage(USTORE *store, JOB *job, RUN *run) +void get_job_storage(USTORE *store, JOB *job, RUN *run) { if (run && run->pool && run->pool->storage) { store->store = (STORE *)run->pool->storage->first(); @@ -1157,11 +1331,12 @@ void set_jcr_defaults(JCR *jcr, JOB *job) } if (!jcr->pool_source) { jcr->pool_source = get_pool_memory(PM_MESSAGE); - pm_strcpy(jcr->pool_source, _("unknown source")); + } + if (!jcr->next_pool_source) { + jcr->next_pool_source = get_pool_memory(PM_MESSAGE); } if (!jcr->catalog_source) { jcr->catalog_source = get_pool_memory(PM_MESSAGE); - pm_strcpy(jcr->catalog_source, _("unknown source")); } jcr->JobPriority = job->Priority; @@ -1175,9 +1350,11 @@ void set_jcr_defaults(JCR *jcr, JOB *job) if (!jcr->client_name) { jcr->client_name = get_pool_memory(PM_NAME); } - pm_strcpy(jcr->client_name, jcr->client->hdr.name); - pm_strcpy(jcr->pool_source, _("Job resource")); + pm_strcpy(jcr->client_name, jcr->client->name()); jcr->pool = job->pool; + pm_strcpy(jcr->pool_source, _("Job resource")); + jcr->next_pool = job->pool->NextPool; + pm_strcpy(jcr->next_pool_source, _("Job's NextPool resource")); jcr->full_pool = job->full_pool; jcr->inc_pool = job->inc_pool; jcr->diff_pool = job->diff_pool; @@ -1226,7 +1403,7 @@ void set_jcr_defaults(JCR *jcr, JOB *job) } } -/* +/* * Copy the storage definitions from an alist to the JCR */ void copy_rwstorage(JCR *jcr, alist *storage, const char *where) @@ -1257,7 +1434,7 @@ void free_rwstorage(JCR *jcr) free_wstorage(jcr); } -/* +/* * Copy the storage definitions from an alist to the JCR */ void copy_rstorage(JCR *jcr, alist *storage, const char *where) @@ -1319,7 +1496,7 @@ void free_rstorage(JCR *jcr) jcr->rstore = NULL; } -/* +/* * Copy the storage definitions from an alist to the JCR */ void copy_wstorage(JCR *jcr, alist *storage, const char *where) @@ -1428,7 +1605,7 @@ int create_restore_bootstrap_file(JCR *jcr) memset(&rx, 0, sizeof(rx)); rx.bsr = new_bsr(); - rx.JobIds = (char *)""; + rx.JobIds = (char *)""; rx.bsr->JobId = jcr->previous_jr.JobId; ua = new_ua_context(jcr); if (!complete_bsr(ua, rx.bsr)) { diff --git a/bacula/src/dird/jobq.c b/bacula/src/dird/jobq.c index 5c79d78e45..e9f9343711 100644 --- a/bacula/src/dird/jobq.c +++ b/bacula/src/dird/jobq.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2003-2011 Free Software Foundation Europe e.V. + Copyright (C) 2003-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Bacula job queue routines. @@ -120,8 +108,8 @@ int jobq_destroy(jobq_t *jq) P(jq->mutex); jq->valid = 0; /* prevent any more operations */ - /* - * If any threads are active, wake them + /* + * If any threads are active, wake them */ if (jq->num_workers > 0) { jq->quit = true; @@ -182,7 +170,7 @@ void *sched_wait(void *arg) } /* Check every 30 seconds if canceled */ while (wtime > 0) { - Dmsg3(2300, "Waiting on sched time, jobid=%d secs=%d use=%d\n", + Dmsg3(2300, "Waiting on sched time, jobid=%d secs=%d use=%d\n", jcr->JobId, wtime, jcr->use_count()); if (wtime > 30) { wtime = 30; @@ -213,7 +201,7 @@ int jobq_add(jobq_t *jq, JCR *jcr) pthread_t id; wait_pkt *sched_pkt; - if (!jcr->term_wait_inited) { + if (!jcr->term_wait_inited) { /* Initialize termination condition variable */ if ((stat = pthread_cond_init(&jcr->term_wait, NULL)) != 0) { berrno be; @@ -221,8 +209,8 @@ int jobq_add(jobq_t *jq, JCR *jcr) return stat; } jcr->term_wait_inited = true; - } - + } + Dmsg3(2300, "jobq_add jobid=%d jcr=0x%x use_count=%d\n", jcr->JobId, jcr, jcr->use_count()); if (jq->valid != JOBQ_VALID) { Jmsg0(jcr, M_ERROR, 0, "Jobq_add queue not initialized.\n"); @@ -236,7 +224,7 @@ int jobq_add(jobq_t *jq, JCR *jcr) sched_pkt = (wait_pkt *)malloc(sizeof(wait_pkt)); sched_pkt->jcr = jcr; sched_pkt->jq = jq; - stat = pthread_create(&id, &jq->attr, sched_wait, (void *)sched_pkt); + stat = pthread_create(&id, &jq->attr, sched_wait, (void *)sched_pkt); if (stat != 0) { /* thread not created */ berrno be; Jmsg1(jcr, M_ERROR, 0, _("pthread_thread_create: ERR=%s\n"), be.bstrerror(stat)); @@ -342,7 +330,7 @@ static int start_server(jobq_t *jq) /* * if any threads are idle, wake one. - * Actually we do a broadcast because on /lib/tls + * Actually we do a broadcast because on /lib/tls * these signals seem to get lost from time to time. */ if (jq->idle_workers > 0) { @@ -437,6 +425,7 @@ void *jobq_server(void *arg) jq->running_jobs->append(je); /* Attach jcr to this thread while we run the job */ + jcr->my_thread_id = pthread_self(); jcr->set_killable(true); set_jcr_in_tsd(jcr); Dmsg1(2300, "Took jobid=%d from ready and appended to run\n", jcr->JobId); @@ -453,6 +442,9 @@ void *jobq_server(void *arg) remove_jcr_from_tsd(je->jcr); je->jcr->set_killable(false); + /* Clear the threadid, probably not necessary */ + memset(&jcr->my_thread_id, 0, sizeof(jcr->my_thread_id)); + Dmsg2(2300, "Back from user engine jobid=%d use=%d.\n", jcr->JobId, jcr->use_count()); @@ -502,7 +494,7 @@ void *jobq_server(void *arg) running_allow_mix = true; for ( ; re; ) { Dmsg2(2300, "JobId %d is also running with %s\n", - re->jcr->JobId, + re->jcr->JobId, re->jcr->job->allow_mixed_priority ? "mix" : "no mix"); if (!re->jcr->job->allow_mixed_priority) { running_allow_mix = false; @@ -619,11 +611,7 @@ static bool reschedule_job(JCR *jcr, jobq_t *jq, jobq_item_t *je) /* Basic condition is that more reschedule times remain */ if (jcr->job->RescheduleTimes == 0 || jcr->reschedule_count < jcr->job->RescheduleTimes) { - resched = - /* Check for incomplete jobs */ - (jcr->job->RescheduleIncompleteJobs && - jcr->is_incomplete() && jcr->is_JobType(JT_BACKUP) && - !jcr->is_JobLevel(L_BASE)) || + resched = /* Check for failed jobs */ (jcr->job->RescheduleOnError && !jcr->is_JobStatus(JS_Terminated) && @@ -654,7 +642,7 @@ static bool reschedule_job(JCR *jcr, jobq_t *jq, jobq_item_t *je) if (!allow_duplicate_job(jcr)) { return false; } - /* Only jobs with no output or Incomplete jobs can run on same JCR */ + /* Only jobs with no output jobs can run on same JCR */ if (jcr->JobBytes == 0) { Dmsg2(2300, "Requeue job=%d use=%d\n", jcr->JobId, jcr->use_count()); V(jq->mutex); @@ -676,11 +664,12 @@ static bool reschedule_job(JCR *jcr, jobq_t *jq, jobq_item_t *je) * the old JobId or there will be database record * conflicts. We now create a new job, copying the * appropriate fields. - */ + */ JCR *njcr = new_jcr(sizeof(JCR), dird_free_jcr); set_jcr_defaults(njcr, jcr->job); njcr->reschedule_count = jcr->reschedule_count; njcr->sched_time = jcr->sched_time; + njcr->initial_sched_time = jcr->initial_sched_time; /* * Special test here since a Virtual Full gets marked * as a Full, so we look at the resource record @@ -692,6 +681,8 @@ static bool reschedule_job(JCR *jcr, jobq_t *jq, jobq_item_t *je) } njcr->pool = jcr->pool; njcr->run_pool_override = jcr->run_pool_override; + njcr->next_pool = jcr->next_pool; + njcr->run_next_pool_override = jcr->run_next_pool_override; njcr->full_pool = jcr->full_pool; njcr->run_full_pool_override = jcr->run_full_pool_override; njcr->inc_pool = jcr->inc_pool; @@ -743,7 +734,7 @@ static bool acquire_resources(JCR *jcr) #ifdef xxx if (jcr->rstore && jcr->rstore == jcr->wstore) { /* possible deadlock */ Jmsg(jcr, M_FATAL, 0, _("Job canceled. Attempt to read and write same device.\n" - " Read storage \"%s\" (From %s) -- Write storage \"%s\" (From %s)\n"), + " Read storage \"%s\" (From %s) -- Write storage \"%s\" (From %s)\n"), jcr->rstore->name(), jcr->rstore_source, jcr->wstore->name(), jcr->wstore_source); jcr->setJobStatus(JS_Canceled); return false; @@ -757,7 +748,7 @@ static bool acquire_resources(JCR *jcr) return false; } } - + if (jcr->wstore) { Dmsg1(200, "Wstore=%s\n", jcr->wstore->name()); if (jcr->wstore->NumConcurrentJobs < jcr->wstore->MaxConcurrentJobs) { @@ -802,7 +793,7 @@ static bool acquire_resources(JCR *jcr) static pthread_mutex_t rstore_mutex = PTHREAD_MUTEX_INITIALIZER; -/* +/* * Note: inc_read_store() and dec_read_store() are * called from select_rstore() in src/dird/restore.c */ diff --git a/bacula/src/dird/jobq.h b/bacula/src/dird/jobq.h index c18502d9f1..8ee20b2ec3 100644 --- a/bacula/src/dird/jobq.h +++ b/bacula/src/dird/jobq.h @@ -12,29 +12,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2006 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ #ifndef __JOBQ_H diff --git a/bacula/src/dird/mac.c b/bacula/src/dird/mac.c new file mode 100644 index 0000000000..da25e0a447 --- /dev/null +++ b/bacula/src/dird/mac.c @@ -0,0 +1,888 @@ +/* + Bacula® - The Network Backup Solution + + Copyright (C) 2004-2014 Free Software Foundation Europe e.V. + + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. + + Bacula® is a registered trademark of Kern Sibbald. +*/ +/* + * + * Bacula Director -- mac.c -- responsible for doing + * migration and copy jobs. + * + * Also handles Copy jobs (March MMVIII) + * + * Written by Kern Sibbald, September MMIV + * + * Basic tasks done here: + * Open DB and create records for this job. + * Open Message Channel with Storage daemon to tell him a job will be starting. + * Open connection with Storage daemon and pass him commands + * to do the backup. + * When the Storage daemon finishes the job, update the DB. + * + */ + +#include "bacula.h" +#include "dird.h" +#include "ua.h" + +static const int dbglevel = 10; +static char storaddr[] = "storage address=%s port=%d ssl=%d Job=%s Authentication=%s\n"; +static char OKstore[] = "2000 OK storage\n"; + +/* Imported subroutines */ +extern int getJob_to_migrate(JCR *jcr); +extern bool regex_find_jobids(JCR *jcr, idpkt *ids, const char *query1, + const char *query2, const char *type); +extern bool find_mediaid_then_jobids(JCR *jcr, idpkt *ids, const char *query1, + const char *type); +extern bool find_jobids_of_pool_uncopied_jobs(JCR *jcr, idpkt *ids); + +static bool set_mac_next_pool(JCR *jcr, POOL **pool); + +/* + * Called here before the job is run to do the job + * specific setup. Note, one of the important things to + * complete in this init code is to make the definitive + * choice of input and output storage devices. This is + * because immediately after the init, the job is queued + * in the jobq.c code, and it checks that all the resources + * (storage resources in particular) are available, so these + * must all be properly defined. + * + * previous_jr refers to the job DB record of the Job that is + * going to be migrated. + * prev_job refers to the job resource of the Job that is + * going to be migrated. + * jcr is the jcr for the current "migration" job. It is a + * control job that is put in the DB as a migration job, which + * means that this job migrated a previous job to a new job. + * No Volume or File data is associated with this control + * job. + * wjcr refers to the migrate/copy job that is writing and is run by + * the current jcr. It is a backup job that writes the + * data written for the previous_jr into the new pool. This + * job (wjcr) becomes the new backup job that replaces + * the original backup job. Note, this jcr is not really run. It + * is simply attached to the current jcr. It will show up in + * the Director's status output, but not in the SD or FD, both of + * which deal only with the current migration job (i.e. jcr). + */ +bool do_mac_init(JCR *jcr) +{ + POOL *pool = NULL; + JOB *job, *prev_job; + JCR *wjcr; /* jcr of writing job */ + int count; + + + apply_pool_overrides(jcr); + + if (!allow_duplicate_job(jcr)) { + return false; + } + + jcr->jr.PoolId = get_or_create_pool_record(jcr, jcr->pool->name()); + if (jcr->jr.PoolId == 0) { + Dmsg1(dbglevel, "JobId=%d no PoolId\n", (int)jcr->JobId); + Jmsg(jcr, M_FATAL, 0, _("Could not get or create a Pool record.\n")); + return false; + } + /* + * Note, at this point, pool is the pool for this job. We + * transfer it to rpool (read pool), and a bit later, + * pool will be changed to point to the write pool, + * which comes from pool->NextPool. + */ + jcr->rpool = jcr->pool; /* save read pool */ + pm_strcpy(jcr->rpool_source, jcr->pool_source); + Dmsg2(dbglevel, "Read pool=%s (From %s)\n", jcr->rpool->name(), jcr->rpool_source); + + if (!get_or_create_fileset_record(jcr)) { + Dmsg1(dbglevel, "JobId=%d no FileSet\n", (int)jcr->JobId); + Jmsg(jcr, M_FATAL, 0, _("Could not get or create the FileSet record.\n")); + return false; + } + + /* If we find a job or jobs to migrate it is previous_jr.JobId */ + count = getJob_to_migrate(jcr); + if (count < 0) { + return false; + } + if (count == 0) { + set_mac_next_pool(jcr, &pool); + return true; /* no work */ + } + + Dmsg1(dbglevel, "Back from getJob_to_migrate JobId=%d\n", (int)jcr->JobId); + + if (jcr->previous_jr.JobId == 0) { + Dmsg1(dbglevel, "JobId=%d no previous JobId\n", (int)jcr->JobId); + Jmsg(jcr, M_INFO, 0, _("No previous Job found to %s.\n"), jcr->get_ActionName(0)); + set_mac_next_pool(jcr, &pool); + return true; /* no work */ + } + + if (create_restore_bootstrap_file(jcr) < 0) { + Jmsg(jcr, M_FATAL, 0, _("Create bootstrap file failed.\n")); + return false; + } + + if (jcr->previous_jr.JobId == 0 || jcr->ExpectedFiles == 0) { + jcr->setJobStatus(JS_Terminated); + Dmsg1(dbglevel, "JobId=%d expected files == 0\n", (int)jcr->JobId); + if (jcr->previous_jr.JobId == 0) { + Jmsg(jcr, M_INFO, 0, _("No previous Job found to %s.\n"), jcr->get_ActionName(0)); + } else { + Jmsg(jcr, M_INFO, 0, _("Previous Job has no data to %s.\n"), jcr->get_ActionName(0)); + } + set_mac_next_pool(jcr, &pool); + return true; /* no work */ + } + + + Dmsg5(dbglevel, "JobId=%d: Current: Name=%s JobId=%d Type=%c Level=%c\n", + (int)jcr->JobId, + jcr->jr.Name, (int)jcr->jr.JobId, + jcr->jr.JobType, jcr->jr.JobLevel); + + LockRes(); + job = (JOB *)GetResWithName(R_JOB, jcr->jr.Name); + prev_job = (JOB *)GetResWithName(R_JOB, jcr->previous_jr.Name); + UnlockRes(); + if (!job) { + Jmsg(jcr, M_FATAL, 0, _("Job resource not found for \"%s\".\n"), jcr->jr.Name); + return false; + } + if (!prev_job) { + Jmsg(jcr, M_FATAL, 0, _("Previous Job resource not found for \"%s\".\n"), + jcr->previous_jr.Name); + return false; + } + + + /* Create a write jcr */ + wjcr = jcr->wjcr = new_jcr(sizeof(JCR), dird_free_jcr); + memcpy(&wjcr->previous_jr, &jcr->previous_jr, sizeof(wjcr->previous_jr)); + + /* + * Turn the wjcr into a "real" job that takes on the aspects of + * the previous backup job "prev_job". + */ + set_jcr_defaults(wjcr, prev_job); + if (!setup_job(wjcr)) { + Jmsg(jcr, M_FATAL, 0, _("setup job failed.\n")); + return false; + } + + /* Now reset the job record from the previous job */ + memcpy(&wjcr->jr, &jcr->previous_jr, sizeof(wjcr->jr)); + /* Update the jr to reflect the new values of PoolId and JobId. */ + wjcr->jr.PoolId = jcr->jr.PoolId; + wjcr->jr.JobId = wjcr->JobId; + wjcr->sd_client = true; + //wjcr->setJobType(jcr->getJobType()); + wjcr->spool_data = job->spool_data; /* turn on spooling if requested in job */ + wjcr->spool_size = jcr->spool_size; + jcr->spool_size = 0; + + /* Don't let WatchDog checks Max*Time value on this Job */ + wjcr->no_maxtime = true; + /* Don't check for duplicates on this jobs */ + wjcr->job->IgnoreDuplicateJobChecking = true; + Dmsg4(dbglevel, "wjcr: Name=%s JobId=%d Type=%c Level=%c\n", + wjcr->jr.Name, (int)wjcr->jr.JobId, + wjcr->jr.JobType, wjcr->jr.JobLevel); + + if (set_mac_next_pool(jcr, &pool)) { + /* If pool storage specified, use it for restore */ + copy_rstorage(wjcr, pool->storage, _("Pool resource")); + copy_rstorage(jcr, pool->storage, _("Pool resource")); + + wjcr->pool = jcr->pool; + wjcr->next_pool = jcr->next_pool; + wjcr->jr.PoolId = jcr->jr.PoolId; + } + + return true; +} + +/* + * set_mac_next_pool() called by do_mac_init() + * at differents stages. + * The idea here is to make a common subroutine for the + * NextPool's search code and to permit do_mac_init() + * to return with NextPool set in jcr struct. + */ +static bool set_mac_next_pool(JCR *jcr, POOL **retpool) +{ + POOL_DBR pr; + POOL *pool; + char ed1[100]; + + /* + * Get the PoolId used with the original job. Then + * find the pool name from the database record. + */ + memset(&pr, 0, sizeof(pr)); + pr.PoolId = jcr->jr.PoolId; + if (!db_get_pool_record(jcr, jcr->db, &pr)) { + Jmsg(jcr, M_FATAL, 0, _("Pool for JobId %s not in database. ERR=%s\n"), + edit_int64(pr.PoolId, ed1), db_strerror(jcr->db)); + return false; + } + /* Get the pool resource corresponding to the original job */ + pool = (POOL *)GetResWithName(R_POOL, pr.Name); + *retpool = pool; + if (!pool) { + Jmsg(jcr, M_FATAL, 0, _("Pool resource \"%s\" not found.\n"), pr.Name); + return false; + } + + if (!apply_wstorage_overrides(jcr, pool)) { + return false; + } + + Dmsg2(dbglevel, "Write pool=%s read rpool=%s\n", jcr->pool->name(), jcr->rpool->name()); + + return true; +} + +/* + * Send storage address and authentication to deblock the other + * job. + */ +static bool send_store_addr_to_sd(JCR *jcr, char *Job, char *sd_auth_key, + STORE *store, char *store_address, uint32_t store_port) +{ + int tls_need = BNET_TLS_NONE; + + /* TLS Requirement */ + if (store->tls_enable) { + if (store->tls_require) { + tls_need = BNET_TLS_REQUIRED; + } else { + tls_need = BNET_TLS_OK; + } + } + + /* + * Send Storage address to the SD client + */ + Dmsg2(200, "=== Job=%s sd auth key=%s\n", Job, sd_auth_key); + jcr->store_bsock->fsend(storaddr, store_address, store_port, + tls_need, Job, sd_auth_key); + if (!response(jcr, jcr->store_bsock, OKstore, "Storage", DISPLAY_ERROR)) { + Dmsg4(050, "Response fail for: JobId=%d storeaddr=%s:%d Job=%s\n", + jcr->JobId, store_address, store_port, Job); + Jmsg3(jcr, M_FATAL, 0, "Response failure: storeddr=%s:%d Job=%s\n", + store_address, store_port, Job); + + return false; + } + return true; +} + +/* + * Do a Migration and Copy of a previous job + * + * Returns: false on failure + * true on success + */ +bool do_mac(JCR *jcr) +{ + char ed1[100]; + BSOCK *sd, *wsd; + JCR *wjcr = jcr->wjcr; /* newly migrated job */ + bool ok = false; + STORE *store; + char *store_address; + uint32_t store_port; + + /* + * If wjcr is NULL, there is nothing to do for this job, + * so set a normal status, cleanup and return OK. + */ + if (!wjcr) { + jcr->setJobStatus(JS_Terminated); + mac_cleanup(jcr, JS_Terminated, JS_Terminated); + return true; + } + + if (!db_get_job_record(jcr, jcr->db, &jcr->previous_jr)) { + Jmsg(jcr, M_FATAL, 0, _("Could not get job record for JobId %s to %s. ERR=%s"), + edit_int64(jcr->previous_jr.JobId, ed1), + jcr->get_ActionName(0), + db_strerror(jcr->db)); + jcr->setJobStatus(JS_Terminated); + mac_cleanup(jcr, JS_Terminated, JS_Terminated); + return true; + } + /* Make sure this job was not already migrated */ + if (jcr->previous_jr.JobType != JT_BACKUP && + jcr->previous_jr.JobType != JT_JOB_COPY) { + Jmsg(jcr, M_INFO, 0, _("JobId %s already %s probably by another Job. %s stopped.\n"), + edit_int64(jcr->previous_jr.JobId, ed1), + jcr->get_ActionName(1), + jcr->get_OperationName()); + jcr->setJobStatus(JS_Terminated); + mac_cleanup(jcr, JS_Terminated, JS_Terminated); + return true; + } + + /* Print Job Start message */ + Jmsg(jcr, M_INFO, 0, _("Start %s JobId %s, Job=%s\n"), + jcr->get_OperationName(), edit_uint64(jcr->JobId, ed1), jcr->Job); + + Dmsg3(200, "Start %s JobId %s, Job=%s\n", + jcr->get_OperationName(), edit_uint64(jcr->JobId, ed1), jcr->Job); + + + /* + * Now separate the read and write storages. jcr has no wstor... + * they all go into wjcr. + */ + free_rwstorage(wjcr); + wjcr->rstore = NULL; + wjcr->wstore = jcr->wstore; + jcr->wstore = NULL; + wjcr->wstorage = jcr->wstorage; + jcr->wstorage = NULL; + + /* TODO: See priority with bandwidth parameter */ + if (jcr->job->max_bandwidth > 0) { + jcr->max_bandwidth = jcr->job->max_bandwidth; + } else if (jcr->client->max_bandwidth > 0) { + jcr->max_bandwidth = jcr->client->max_bandwidth; + } + + if (jcr->max_bandwidth > 0) { + send_bwlimit(jcr, jcr->Job); /* Old clients don't have this command */ + } + + /* + * Open a message channel connection with the Storage + * daemon. This is to let him know that our client + * will be contacting him for a backup session. + * + */ + jcr->setJobStatus(JS_WaitSD); + wjcr->setJobStatus(JS_WaitSD); + + /* + * Start conversation with write Storage daemon + */ + Dmsg0(200, "Connect to write (wjcr) storage daemon.\n"); + if (!connect_to_storage_daemon(wjcr, 10, SDConnectTimeout, 1)) { + goto bail_out; + } + wsd = wjcr->store_bsock; + + /* + * Start conversation with read Storage daemon + */ + Dmsg1(200, "Connect to read (jcr) storage daemon. Jid=%d\n", jcr->JobId); + if (!connect_to_storage_daemon(jcr, 10, SDConnectTimeout, 1)) { + goto bail_out; + } + sd = jcr->store_bsock; + jcr->sd_calls_client = jcr->client->sd_calls_client; + + Dmsg2(dbglevel, "Read store=%s, write store=%s\n", + ((STORE *)jcr->rstorage->first())->name(), + ((STORE *)wjcr->wstorage->first())->name()); + + /* + * Now start a job with the read Storage daemon sending the bsr. + * This call returns the sd_auth_key + */ + Dmsg1(200, "Start job with read (jcr) storage daemon. Jid=%d\n", jcr->JobId); + if (!start_storage_daemon_job(jcr, jcr->rstorage, NULL, /*send_bsr*/true)) { + goto bail_out; + } + Dmsg0(150, "Read storage daemon connection OK\n"); + + if (jcr->sd_calls_client) { + wjcr->sd_calls_client = true; + wjcr->sd_client = false; + } else { + wjcr->sd_calls_client = true; + wjcr->sd_client = true; + } + + /* + * Now start a job with the write Storage daemon sending. + */ + Dmsg1(200, "Start Job with write (wjcr) storage daemon. Jid=%d\n", jcr->JobId); + if (!start_storage_daemon_job(wjcr, NULL, wjcr->wstorage, /*no_send_bsr*/false)) { + goto bail_out; + } + Dmsg0(150, "Write storage daemon connection OK\n"); + + + /* Declare the job started to start the MaxRunTime check */ + jcr->setJobStarted(); + + /* + * We re-update the job start record so that the start + * time is set after the run before job. This avoids + * that any files created by the run before job will + * be saved twice. They will be backed up in the current + * job, but not in the next one unless they are changed. + * Without this, they will be backed up in this job and + * in the next job run because in that case, their date + * is after the start of this run. + */ + jcr->start_time = time(NULL); + jcr->jr.StartTime = jcr->start_time; + jcr->jr.JobTDate = jcr->start_time; + jcr->setJobStatus(JS_Running); + + /* Update job start record for this mac control job */ + if (!db_update_job_start_record(jcr, jcr->db, &jcr->jr)) { + Jmsg(jcr, M_FATAL, 0, "%s", db_strerror(jcr->db)); + goto bail_out; + } + + /* Declare the job started to start the MaxRunTime check */ + jcr->setJobStarted(); + + wjcr->start_time = time(NULL); + wjcr->jr.StartTime = wjcr->start_time; + wjcr->jr.JobTDate = wjcr->start_time; + wjcr->setJobStatus(JS_Running); + + + /* Update job start record for the real mac backup job */ + if (!db_update_job_start_record(wjcr, wjcr->db, &wjcr->jr)) { + Jmsg(jcr, M_FATAL, 0, "%s", db_strerror(wjcr->db)); + goto bail_out; + } + + Dmsg4(dbglevel, "wjcr: Name=%s JobId=%d Type=%c Level=%c\n", + wjcr->jr.Name, (int)wjcr->jr.JobId, + wjcr->jr.JobType, wjcr->jr.JobLevel); + + store = wjcr->wstore; + if (store->SDDport == 0) { + store->SDDport = store->SDport; + } + + if (jcr->sd_calls_client) { + /* + * Reading SD must call the "client" i.e. the writing SD + */ + if (jcr->SDVersion < 3) { + Jmsg(jcr, M_FATAL, 0, _("The Storage daemon does not support SDCallsClient.\n")); + goto bail_out; + } + + store_address = store->address; /* note: store points to wstore */ + + Dmsg2(200, "Start write message thread jid=%d Job=%s\n", wjcr->JobId, wjcr->Job); + if (!run_storage_and_start_message_thread(wjcr, wsd)) { + goto bail_out; + } + + store_port = store->SDDport; + + /* + * Send writing SD address to the reading SD + */ + /* Send and wait for connection */ + /* ***FIXME*** this should probably be jcr->rstore, store_address, ... + * to get TLS right */ + if (!send_store_addr_to_sd(jcr, wjcr->Job, wjcr->sd_auth_key, + store, store_address, store_port)) { + goto bail_out; + } + + /* Start read message thread */ + Dmsg2(200, "Start read message thread jid=%d Job=%s\n", jcr->JobId, jcr->Job); + if (!run_storage_and_start_message_thread(jcr, sd)) { + goto bail_out; + } + + } else { + /* + * Writing SD must simulate an FD and call the reading SD + * + * Send Storage daemon address to the writing SD + */ + store_address = get_storage_address(jcr->client, store); + store_port = store->SDDport; + + /* Start read message thread */ + Dmsg2(200, "Start read message thread jid=%d Job=%s\n", jcr->JobId, jcr->Job); + if (!run_storage_and_start_message_thread(jcr, sd)) { + goto bail_out; + } + + /* Attempt connection for one hour */ + if (!send_store_addr_to_sd(wjcr, jcr->Job, jcr->sd_auth_key, + store, store_address, store_port)) { + goto bail_out; + } + /* Start write message thread */ + Dmsg2(200, "Start write message thread jid=%d Job=%s\n", wjcr->JobId, wjcr->Job); + if (!run_storage_and_start_message_thread(wjcr, wsd)) { + goto bail_out; + } + } + + jcr->setJobStatus(JS_Running); + wjcr->setJobStatus(JS_Running); + + /* Pickup Job termination data */ + /* Note, the SD stores in jcr->JobFiles/ReadBytes/JobBytes/JobErrors */ + wait_for_storage_daemon_termination(wjcr); + wjcr->setJobStatus(wjcr->SDJobStatus); + wait_for_storage_daemon_termination(jcr); + jcr->setJobStatus(jcr->SDJobStatus); + db_write_batch_file_records(wjcr); /* used by bulk batch file insert */ + + ok = jcr->is_JobStatus(JS_Terminated) && wjcr->is_JobStatus(JS_Terminated); + +bail_out: + /* Put back jcr write storages for proper cleanup */ + jcr->wstorage = wjcr->wstorage; + jcr->wstore = wjcr->wstore; + wjcr->wstore = NULL; + wjcr->wstorage = NULL; + wjcr->file_bsock = NULL; + + if (ok) { + mac_cleanup(jcr, jcr->JobStatus, wjcr->JobStatus); + } + return ok; +} + +/* + * Called from mac_sql.c for each migration/copy job to start + */ +void start_mac_job(JCR *jcr) +{ + UAContext *ua = new_ua_context(jcr); + char ed1[50]; + char args[MAX_NAME_LENGTH + 50]; + + ua->batch = true; + Mmsg(ua->cmd, "run job=\"%s\" jobid=%s ignoreduplicatecheck=yes pool=\"%s\"", + jcr->job->name(), edit_uint64(jcr->MigrateJobId, ed1), + jcr->pool->name()); + if (jcr->next_pool) { + bsnprintf(args, sizeof(args), " nextpool=\"%s\"", jcr->next_pool->name()); + pm_strcat(ua->cmd, args); + } + Dmsg2(dbglevel, "=============== %s cmd=%s\n", jcr->get_OperationName(), ua->cmd); + parse_ua_args(ua); /* parse command */ + JobId_t jobid = run_cmd(ua, ua->cmd); + if (jobid == 0) { + Jmsg(jcr, M_ERROR, 0, _("Could not start migration/copy job.\n")); + } else { + Jmsg(jcr, M_INFO, 0, _("%s JobId %d started.\n"), jcr->get_OperationName(), (int)jobid); + } + free_ua_context(ua); +} + +/* + * Release resources allocated during backup. + */ +/* ***FIXME*** implement writeTermCode */ +void mac_cleanup(JCR *jcr, int TermCode, int writeTermCode) +{ + char sdt[MAX_TIME_LENGTH], edt[MAX_TIME_LENGTH]; + char ec1[30], ec2[30], ec3[30], ec4[30], ec5[30], elapsed[50]; + char ec6[50], ec7[50], ec8[50]; + char term_code[100], sd_term_msg[100]; + const char *term_msg; + int msg_type = M_INFO; + MEDIA_DBR mr; + double kbps; + utime_t RunTime; + JCR *wjcr = jcr->wjcr; + POOL_MEM query(PM_MESSAGE); + POOL_MEM vol_info; + + Dmsg2(100, "Enter mac_cleanup %d %c\n", TermCode, TermCode); + update_job_end(jcr, TermCode); + + /* + * Check if we actually did something. + * wjcr is jcr of the newly migrated job. + */ + if (wjcr) { + char old_jobid[50], new_jobid[50]; + + edit_uint64(jcr->previous_jr.JobId, old_jobid); + edit_uint64(wjcr->jr.JobId, new_jobid); + + wjcr->JobFiles = jcr->JobFiles = wjcr->SDJobFiles; + wjcr->JobBytes = jcr->JobBytes = wjcr->SDJobBytes; + wjcr->jr.RealEndTime = 0; + wjcr->jr.PriorJobId = jcr->previous_jr.JobId; + + update_job_end(wjcr, TermCode); + + /* Update final items to set them to the previous job's values */ + Mmsg(query, "UPDATE Job SET StartTime='%s',EndTime='%s'," + "JobTDate=%s WHERE JobId=%s", + jcr->previous_jr.cStartTime, jcr->previous_jr.cEndTime, + edit_uint64(jcr->previous_jr.JobTDate, ec1), + new_jobid); + db_sql_query(wjcr->db, query.c_str(), NULL, NULL); + + /* + * If we terminated a migration normally: + * - mark the previous job as migrated + * - move any Log records to the new JobId + * - Purge the File records from the previous job + */ + if (jcr->getJobType() == JT_MIGRATE && jcr->JobStatus == JS_Terminated) { + Mmsg(query, "UPDATE Job SET Type='%c' WHERE JobId=%s", + (char)JT_MIGRATED_JOB, old_jobid); + db_sql_query(wjcr->db, query.c_str(), NULL, NULL); + UAContext *ua = new_ua_context(jcr); + /* Move JobLog to new JobId */ + Mmsg(query, "UPDATE Log SET JobId=%s WHERE JobId=%s", + new_jobid, old_jobid); + db_sql_query(wjcr->db, query.c_str(), NULL, NULL); + + if (jcr->job->PurgeMigrateJob) { + /* Purge old Job record */ + purge_jobs_from_catalog(ua, old_jobid); + } else { + /* Purge all old file records, but leave Job record */ + purge_files_from_jobs(ua, old_jobid); + } + + free_ua_context(ua); + } + + /* + * If we terminated a Copy (rather than a Migration) normally: + * - copy any Log records to the new JobId + * - set type="Job Copy" for the new job + */ + if (jcr->getJobType() == JT_COPY && jcr->JobStatus == JS_Terminated) { + /* Copy JobLog to new JobId */ + Mmsg(query, "INSERT INTO Log (JobId, Time, LogText ) " + "SELECT %s, Time, LogText FROM Log WHERE JobId=%s", + new_jobid, old_jobid); + db_sql_query(wjcr->db, query.c_str(), NULL, NULL); + Mmsg(query, "UPDATE Job SET Type='%c' WHERE JobId=%s", + (char)JT_JOB_COPY, new_jobid); + db_sql_query(wjcr->db, query.c_str(), NULL, NULL); + } + + if (!db_get_job_record(jcr, jcr->db, &jcr->jr)) { + Jmsg(jcr, M_WARNING, 0, _("Error getting Job record for Job report: ERR=%s"), + db_strerror(jcr->db)); + jcr->setJobStatus(JS_ErrorTerminated); + } + + update_bootstrap_file(wjcr); + + if (!db_get_job_volume_names(wjcr, wjcr->db, wjcr->jr.JobId, &wjcr->VolumeName)) { + /* + * Note, if the job has failed, most likely it did not write any + * tape, so suppress this "error" message since in that case + * it is normal. Or look at it the other way, only for a + * normal exit should we complain about this error. + */ + if (jcr->JobStatus == JS_Terminated && jcr->jr.JobBytes) { + Jmsg(jcr, M_ERROR, 0, "%s", db_strerror(wjcr->db)); + } + wjcr->VolumeName[0] = 0; /* none */ + } + + if (wjcr->VolumeName[0]) { + /* Find last volume name. Multiple vols are separated by | */ + char *p = strrchr(wjcr->VolumeName, '|'); + if (p) { + p++; /* skip | */ + } else { + p = wjcr->VolumeName; /* no |, take full name */ + } + bstrncpy(mr.VolumeName, p, sizeof(mr.VolumeName)); + if (!db_get_media_record(jcr, jcr->db, &mr)) { + Jmsg(jcr, M_WARNING, 0, _("Error getting Media record for Volume \"%s\": ERR=%s"), + mr.VolumeName, db_strerror(jcr->db)); + } + } + + switch (jcr->JobStatus) { + case JS_Terminated: + if (jcr->JobErrors || jcr->SDErrors) { + term_msg = _("%s OK -- with warnings"); + } else { + term_msg = _("%s OK"); + } + break; + case JS_FatalError: + case JS_ErrorTerminated: + term_msg = _("*** %s Error ***"); + msg_type = M_ERROR; /* Generate error message */ + if (jcr->store_bsock) { + jcr->store_bsock->signal(BNET_TERMINATE); + if (jcr->SD_msg_chan) { + pthread_cancel(jcr->SD_msg_chan); + } + } + if (wjcr->store_bsock) { + wjcr->store_bsock->signal(BNET_TERMINATE); + if (wjcr->SD_msg_chan) { + pthread_cancel(wjcr->SD_msg_chan); + } + } + break; + case JS_Canceled: + term_msg = _("%s Canceled"); + if (jcr->store_bsock) { + jcr->store_bsock->signal(BNET_TERMINATE); + if (jcr->SD_msg_chan) { + pthread_cancel(jcr->SD_msg_chan); + } + } + if (wjcr->store_bsock) { + wjcr->store_bsock->signal(BNET_TERMINATE); + if (wjcr->SD_msg_chan) { + pthread_cancel(wjcr->SD_msg_chan); + } + } + break; + default: + term_msg = _("Inappropriate %s term code"); + break; + } + } else { + if (jcr->getJobType() == JT_MIGRATE && jcr->previous_jr.JobId != 0) { + /* Mark previous job as migrated */ + Mmsg(query, "UPDATE Job SET Type='%c' WHERE JobId=%s", + (char)JT_MIGRATED_JOB, edit_uint64(jcr->previous_jr.JobId, ec1)); + db_sql_query(jcr->db, query.c_str(), NULL, NULL); + } + term_msg = _("%s -- no files to %s"); + } + + bsnprintf(term_code, sizeof(term_code), term_msg, jcr->get_OperationName(), jcr->get_ActionName(0)); + bstrftimes(sdt, sizeof(sdt), jcr->jr.StartTime); + bstrftimes(edt, sizeof(edt), jcr->jr.EndTime); + RunTime = jcr->jr.EndTime - jcr->jr.StartTime; + if (RunTime <= 0) { + kbps = 0; + } else { + kbps = (double)jcr->SDJobBytes / (1000 * RunTime); + } + + jobstatus_to_ascii(jcr->SDJobStatus, sd_term_msg, sizeof(sd_term_msg)); + + /* Edit string for last volume size */ + Mmsg(vol_info, _("%s (%sB)"), + edit_uint64_with_commas(mr.VolBytes, ec4), + edit_uint64_with_suffix(mr.VolBytes, ec5)); + + Jmsg(jcr, msg_type, 0, _("%s %s %s (%s):\n" +" Build OS: %s %s %s\n" +" Prev Backup JobId: %s\n" +" Prev Backup Job: %s\n" +" New Backup JobId: %s\n" +" Current JobId: %s\n" +" Current Job: %s\n" +" Backup Level: %s%s\n" +" Client: %s\n" +" FileSet: \"%s\" %s\n" +" Read Pool: \"%s\" (From %s)\n" +" Read Storage: \"%s\" (From %s)\n" +" Write Pool: \"%s\" (From %s)\n" +" Write Storage: \"%s\" (From %s)\n" +" Catalog: \"%s\" (From %s)\n" +" Start time: %s\n" +" End time: %s\n" +" Elapsed time: %s\n" +" Priority: %d\n" +" SD Files Written: %s\n" +" SD Bytes Written: %s (%sB)\n" +" Rate: %.1f KB/s\n" +" Volume name(s): %s\n" +" Volume Session Id: %d\n" +" Volume Session Time: %d\n" +" Last Volume Bytes: %s\n" +" SD Errors: %d\n" +" SD termination status: %s\n" +" Termination: %s\n\n"), + BACULA, my_name, VERSION, LSMDATE, + HOST_OS, DISTNAME, DISTVER, + edit_uint64(jcr->previous_jr.JobId, ec6), + jcr->previous_jr.Job, + wjcr ? edit_uint64(wjcr->jr.JobId, ec7) : "0", + edit_uint64(jcr->jr.JobId, ec8), + jcr->jr.Job, + level_to_str(jcr->getJobLevel()), jcr->since, + jcr->client->name(), + jcr->fileset->name(), jcr->FSCreateTime, + jcr->rpool->name(), jcr->rpool_source, + jcr->rstore?jcr->rstore->name():"*None*", + NPRT(jcr->rstore_source), + jcr->pool->name(), jcr->pool_source, + jcr->wstore?jcr->wstore->name():"*None*", + NPRT(jcr->wstore_source), + jcr->catalog->name(), jcr->catalog_source, + sdt, + edt, + edit_utime(RunTime, elapsed, sizeof(elapsed)), + jcr->JobPriority, + edit_uint64_with_commas(jcr->SDJobFiles, ec1), + edit_uint64_with_commas(jcr->SDJobBytes, ec2), + edit_uint64_with_suffix(jcr->SDJobBytes, ec3), + (float)kbps, + wjcr ? wjcr->VolumeName : "", + jcr->VolSessionId, + jcr->VolSessionTime, + vol_info.c_str(), + jcr->SDErrors, + sd_term_msg, + term_code); + + Dmsg1(100, "migrate_cleanup() wjcr=0x%x\n", jcr->wjcr); + if (jcr->wjcr) { + free_jcr(jcr->wjcr); + jcr->wjcr = NULL; + } + Dmsg0(100, "Leave migrate_cleanup()\n"); +} + +bool set_mac_wstorage(UAContext *ua, JCR *jcr, POOL *pool, POOL *next_pool, + const char *source) +{ + if (!next_pool) { + if (ua) { + ua->error_msg(_("No Next Pool specification found in Pool \"%s\".\n"), + pool->hdr.name); + } else { + Jmsg(jcr, M_FATAL, 0, _("No Next Pool specification found in Pool \"%s\".\n"), + pool->hdr.name); + } + return false; + } + + if (!next_pool->storage || next_pool->storage->size() == 0) { + Jmsg(jcr, M_FATAL, 0, _("No Storage specification found in Next Pool \"%s\".\n"), + next_pool->name()); + return false; + } + + /* If pool storage specified, use it instead of job storage for backup */ + copy_wstorage(jcr, next_pool->storage, source); + + return true; +} diff --git a/bacula/src/dird/mac_sql.c b/bacula/src/dird/mac_sql.c new file mode 100644 index 0000000000..e81fdbd4b7 --- /dev/null +++ b/bacula/src/dird/mac_sql.c @@ -0,0 +1,760 @@ +/* + Bacula® - The Network Backup Solution + + Copyright (C) 2004-2014 Free Software Foundation Europe e.V. + + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. + + Bacula® is a registered trademark of Kern Sibbald. +*/ +/* + * + * Bacula Director -- mac.c -- responsible for doing + * migration and copy jobs. + * + * Also handles Copy jobs (March MMVIII) + * + * Kern Sibbald, September MMIV + * + * Basic tasks done here: + * Open DB and create records for this job. + * Open Message Channel with Storage daemon to tell him a job will be starting. + * Open connection with Storage daemon and pass him commands + * to do the backup. + * When the Storage daemon finishes the job, update the DB. + * + */ + +#include "bacula.h" +#include "dird.h" +#include "ua.h" +#ifndef HAVE_REGEX_H +#include "lib/bregex.h" +#else +#include +#endif + +struct uitem { + dlink link; + char *item; +}; + +/* Imported functions */ +extern void start_mac_job(JCR*); + +static const int dbglevel = 10; + +/* Forware referenced functions */ +static bool find_mediaid_then_jobids(JCR *jcr, idpkt *ids, const char *query1, + const char *type); +static bool regex_find_jobids(JCR *jcr, idpkt *ids, const char *query1, + const char *query2, const char *type); +static int get_next_dbid_from_list(char **p, DBId_t *DBId); +static int unique_dbid_handler(void *ctx, int num_fields, char **row); +static int unique_name_handler(void *ctx, int num_fields, char **row); +static bool find_jobids_from_mediaid_list(JCR *jcr, idpkt *ids, const char *type); +static bool find_jobids_of_pool_uncopied_jobs(JCR *jcr, idpkt *ids); + +/* Get Job names in Pool */ +static const char *sql_job = + "SELECT DISTINCT Job.Name from Job,Pool" + " WHERE Pool.Name='%s' AND Job.PoolId=Pool.PoolId"; + +/* Get JobIds from regex'ed Job names */ +static const char *sql_jobids_from_job = + "SELECT DISTINCT Job.JobId,Job.StartTime FROM Job,Pool" + " WHERE Job.Name='%s' AND Pool.Name='%s' AND Job.PoolId=Pool.PoolId" + " ORDER by Job.StartTime"; + +/* Get Client names in Pool */ +static const char *sql_client = + "SELECT DISTINCT Client.Name from Client,Pool,Job" + " WHERE Pool.Name='%s' AND Job.ClientId=Client.ClientId AND" + " Job.PoolId=Pool.PoolId"; + +/* Get JobIds from regex'ed Client names */ +static const char *sql_jobids_from_client = + "SELECT DISTINCT Job.JobId,Job.StartTime FROM Job,Pool,Client" + " WHERE Client.Name='%s' AND Pool.Name='%s' AND Job.PoolId=Pool.PoolId" + " AND Job.ClientId=Client.ClientId AND Job.Type IN ('B','C')" + " AND Job.JobStatus IN ('T','W')" + " ORDER by Job.StartTime"; + +/* Get Volume names in Pool */ +static const char *sql_vol = + "SELECT DISTINCT VolumeName FROM Media,Pool WHERE" + " VolStatus in ('Full','Used','Error') AND Media.Enabled=1 AND" + " Media.PoolId=Pool.PoolId AND Pool.Name='%s'"; + +/* Get JobIds from regex'ed Volume names */ +static const char *sql_jobids_from_vol = + "SELECT DISTINCT Job.JobId,Job.StartTime FROM Media,JobMedia,Job" + " WHERE Media.VolumeName='%s' AND Media.MediaId=JobMedia.MediaId" + " AND JobMedia.JobId=Job.JobId AND Job.Type IN ('B','C')" + " AND Job.JobStatus IN ('T','W') AND Media.Enabled=1" + " ORDER by Job.StartTime"; + +static const char *sql_smallest_vol = + "SELECT Media.MediaId FROM Media,Pool,JobMedia WHERE" + " Media.MediaId in (SELECT DISTINCT MediaId from JobMedia) AND" + " Media.VolStatus in ('Full','Used','Error') AND Media.Enabled=1 AND" + " Media.PoolId=Pool.PoolId AND Pool.Name='%s'" + " ORDER BY VolBytes ASC LIMIT 1"; + +static const char *sql_oldest_vol = + "SELECT Media.MediaId FROM Media,Pool,JobMedia WHERE" + " Media.MediaId in (SELECT DISTINCT MediaId from JobMedia) AND" + " Media.VolStatus in ('Full','Used','Error') AND Media.Enabled=1 AND" + " Media.PoolId=Pool.PoolId AND Pool.Name='%s'" + " ORDER BY LastWritten ASC LIMIT 1"; + +/* Get JobIds when we have selected MediaId */ +static const char *sql_jobids_from_mediaid = + "SELECT DISTINCT Job.JobId,Job.StartTime FROM JobMedia,Job" + " WHERE JobMedia.JobId=Job.JobId AND JobMedia.MediaId IN (%s)" + " AND Job.Type IN ('B','C') AND Job.JobStatus IN ('T','W')" + " ORDER by Job.StartTime"; + +/* Get the number of bytes in the pool */ +static const char *sql_pool_bytes = + "SELECT SUM(JobBytes) FROM Job WHERE JobId IN" + " (SELECT DISTINCT Job.JobId from Pool,Job,Media,JobMedia WHERE" + " Pool.Name='%s' AND Media.PoolId=Pool.PoolId AND" + " VolStatus in ('Full','Used','Error','Append') AND Media.Enabled=1 AND" + " Job.Type IN ('B','C') AND Job.JobStatus IN ('T','W') AND" + " JobMedia.JobId=Job.JobId AND Job.PoolId=Media.PoolId)"; + +/* Get the number of bytes in the Jobs */ +static const char *sql_job_bytes = + "SELECT SUM(JobBytes) FROM Job WHERE JobId IN (%s)"; + +/* Get Media Ids in Pool */ +static const char *sql_mediaids = + "SELECT MediaId FROM Media,Pool WHERE" + " VolStatus in ('Full','Used','Error') AND Media.Enabled=1 AND" + " Media.PoolId=Pool.PoolId AND Pool.Name='%s' ORDER BY LastWritten ASC"; + +/* Get JobIds in Pool longer than specified time */ +static const char *sql_pool_time = + "SELECT DISTINCT Job.JobId FROM Pool,Job,Media,JobMedia WHERE" + " Pool.Name='%s' AND Media.PoolId=Pool.PoolId AND" + " VolStatus IN ('Full','Used','Error') AND Media.Enabled=1 AND" + " Job.Type IN ('B','C') AND Job.JobStatus IN ('T','W') AND" + " JobMedia.JobId=Job.JobId AND Job.PoolId=Media.PoolId" + " AND Job.RealEndTime<='%s'"; + +/* Get JobIds from successfully completed backup jobs which have not been copied before */ +static const char *sql_jobids_of_pool_uncopied_jobs = + "SELECT DISTINCT Job.JobId,Job.StartTime FROM Job,Pool" + " WHERE Pool.Name = '%s' AND Pool.PoolId = Job.PoolId" + " AND Job.Type = 'B' AND Job.JobStatus IN ('T','W')" + " AND Job.jobBytes > 0" + " AND Job.JobId NOT IN" + " (SELECT PriorJobId FROM Job WHERE" + " Type IN ('B','C') AND Job.JobStatus IN ('T','W')" + " AND PriorJobId != 0)" + " ORDER by Job.StartTime"; + +/* + * + * This is the central piece of code that finds a job or jobs + * actually JobIds to migrate. It first looks to see if one + * has been "manually" specified in jcr->MigrateJobId, and if + * so, it returns that JobId to be run. Otherwise, it + * examines the Selection Type to see what kind of migration + * we are doing (Volume, Job, Client, ...) and applies any + * Selection Pattern if appropriate to obtain a list of JobIds. + * Finally, it will loop over all the JobIds found, except the last + * one starting a new job with MigrationJobId set to that JobId, and + * finally, it returns the last JobId to the caller. + * + * Returns: -1 on error + * 0 if no jobs to migrate + * 1 if OK and jcr->previous_jr filled in + */ +int getJob_to_migrate(JCR *jcr) +{ + char ed1[30], ed2[30]; + POOL_MEM query(PM_MESSAGE); + JobId_t JobId; + DBId_t DBId = 0; + int stat; + char *p; + idpkt ids, mid, jids; + db_int64_ctx ctx; + int64_t pool_bytes; + time_t ttime; + struct tm tm; + char dt[MAX_TIME_LENGTH]; + int count = 0; + int limit = jcr->job->MaxSpawnedJobs; /* limit is max jobs to start */ + + ids.list = get_pool_memory(PM_MESSAGE); + ids.list[0] = 0; + ids.count = 0; + mid.list = get_pool_memory(PM_MESSAGE); + mid.list[0] = 0; + mid.count = 0; + jids.list = get_pool_memory(PM_MESSAGE); + jids.list[0] = 0; + jids.count = 0; + + /* + * If MigrateJobId is set, then we migrate only that Job, + * otherwise, we go through the full selection of jobs to + * migrate. + */ + if (jcr->MigrateJobId != 0) { + Dmsg1(dbglevel, "At Job start previous jobid=%u\n", jcr->MigrateJobId); + JobId = jcr->MigrateJobId; + } else { + switch (jcr->job->selection_type) { + case MT_JOB: + if (!regex_find_jobids(jcr, &ids, sql_job, sql_jobids_from_job, "Job")) { + goto bail_out; + } + break; + case MT_CLIENT: + if (!regex_find_jobids(jcr, &ids, sql_client, sql_jobids_from_client, "Client")) { + goto bail_out; + } + break; + case MT_VOLUME: + if (!regex_find_jobids(jcr, &ids, sql_vol, sql_jobids_from_vol, "Volume")) { + goto bail_out; + } + break; + case MT_SQLQUERY: + if (!jcr->job->selection_pattern) { + Jmsg(jcr, M_FATAL, 0, _("No %s SQL selection pattern specified.\n"), jcr->get_OperationName()); + goto bail_out; + } + Dmsg1(dbglevel, "SQL=%s\n", jcr->job->selection_pattern); + if (!db_sql_query(jcr->db, jcr->job->selection_pattern, + unique_dbid_handler, (void *)&ids)) { + Jmsg(jcr, M_FATAL, 0, + _("SQL failed. ERR=%s\n"), db_strerror(jcr->db)); + goto bail_out; + } + break; + case MT_SMALLEST_VOL: + if (!find_mediaid_then_jobids(jcr, &ids, sql_smallest_vol, "Smallest Volume")) { + goto bail_out; + } + break; + case MT_OLDEST_VOL: + if (!find_mediaid_then_jobids(jcr, &ids, sql_oldest_vol, "Oldest Volume")) { + goto bail_out; + } + break; + case MT_POOL_OCCUPANCY: + ctx.count = 0; + /* Find count of bytes in pool */ + Mmsg(query, sql_pool_bytes, jcr->rpool->name()); + if (!db_sql_query(jcr->db, query.c_str(), db_int64_handler, (void *)&ctx)) { + Jmsg(jcr, M_FATAL, 0, _("SQL failed. ERR=%s\n"), db_strerror(jcr->db)); + goto bail_out; + } + if (ctx.count == 0) { + Jmsg(jcr, M_INFO, 0, _("No Volumes found to %s.\n"), jcr->get_ActionName(0)); + goto ok_out; + } + pool_bytes = ctx.value; + Dmsg2(dbglevel, "highbytes=%lld pool=%lld\n", jcr->rpool->MigrationHighBytes, + pool_bytes); + if (pool_bytes < (int64_t)jcr->rpool->MigrationHighBytes) { + Jmsg(jcr, M_INFO, 0, _("No Volumes found to %s.\n"), jcr->get_ActionName(0)); + goto ok_out; + } + Dmsg0(dbglevel, "We should do Occupation migration.\n"); + + ids.count = 0; + /* Find a list of MediaIds that could be migrated */ + Mmsg(query, sql_mediaids, jcr->rpool->name()); + Dmsg1(dbglevel, "query=%s\n", query.c_str()); + if (!db_sql_query(jcr->db, query.c_str(), unique_dbid_handler, (void *)&ids)) { + Jmsg(jcr, M_FATAL, 0, _("SQL failed. ERR=%s\n"), db_strerror(jcr->db)); + goto bail_out; + } + if (ids.count == 0) { + Jmsg(jcr, M_INFO, 0, _("No Volumes found to %s.\n"), jcr->get_ActionName(0)); + goto ok_out; + } + Dmsg2(dbglevel, "Pool Occupancy ids=%d MediaIds=%s\n", ids.count, ids.list); + + if (!find_jobids_from_mediaid_list(jcr, &ids, "Volume")) { + goto bail_out; + } + /* ids == list of jobs */ + p = ids.list; + for (int i=0; i < (int)ids.count; i++) { + stat = get_next_dbid_from_list(&p, &DBId); + Dmsg2(dbglevel, "get_next_dbid stat=%d JobId=%u\n", stat, (uint32_t)DBId); + if (stat < 0) { + Jmsg(jcr, M_FATAL, 0, _("Invalid JobId found.\n")); + goto bail_out; + } else if (stat == 0) { + break; + } + + mid.count = 1; + Mmsg(mid.list, "%s", edit_int64(DBId, ed1)); + if (jids.count > 0) { + pm_strcat(jids.list, ","); + } + pm_strcat(jids.list, mid.list); + jids.count += mid.count; + + /* Find count of bytes from Jobs */ + Mmsg(query, sql_job_bytes, mid.list); + Dmsg1(dbglevel, "Jobbytes query: %s\n", query.c_str()); + if (!db_sql_query(jcr->db, query.c_str(), db_int64_handler, (void *)&ctx)) { + Jmsg(jcr, M_FATAL, 0, _("SQL failed. ERR=%s\n"), db_strerror(jcr->db)); + goto bail_out; + } + pool_bytes -= ctx.value; + Dmsg2(dbglevel, "Total %s Job bytes=%s\n", jcr->get_ActionName(0), edit_int64_with_commas(ctx.value, ed1)); + Dmsg2(dbglevel, "lowbytes=%s poolafter=%s\n", + edit_int64_with_commas(jcr->rpool->MigrationLowBytes, ed1), + edit_int64_with_commas(pool_bytes, ed2)); + if (pool_bytes <= (int64_t)jcr->rpool->MigrationLowBytes) { + Dmsg0(dbglevel, "We should be done.\n"); + break; + } + } + /* Transfer jids to ids, where the jobs list is expected */ + ids.count = jids.count; + pm_strcpy(ids.list, jids.list); + Dmsg2(dbglevel, "Pool Occupancy ids=%d JobIds=%s\n", ids.count, ids.list); + break; + case MT_POOL_TIME: + ttime = time(NULL) - (time_t)jcr->rpool->MigrationTime; + (void)localtime_r(&ttime, &tm); + strftime(dt, sizeof(dt), "%Y-%m-%d %H:%M:%S", &tm); + + ids.count = 0; + Mmsg(query, sql_pool_time, jcr->rpool->name(), dt); + Dmsg1(dbglevel, "query=%s\n", query.c_str()); + if (!db_sql_query(jcr->db, query.c_str(), unique_dbid_handler, (void *)&ids)) { + Jmsg(jcr, M_FATAL, 0, _("SQL failed. ERR=%s\n"), db_strerror(jcr->db)); + goto bail_out; + } + if (ids.count == 0) { + Jmsg(jcr, M_INFO, 0, _("No Volumes found to %s.\n"), jcr->get_ActionName(0)); + goto ok_out; + } + Dmsg2(dbglevel, "PoolTime ids=%d JobIds=%s\n", ids.count, ids.list); + break; + case MT_POOL_UNCOPIED_JOBS: + if (!find_jobids_of_pool_uncopied_jobs(jcr, &ids)) { + goto bail_out; + } + break; + default: + Jmsg(jcr, M_FATAL, 0, _("Unknown %s Selection Type.\n"), jcr->get_OperationName()); + goto bail_out; + } + + /* + * Loop over all jobids except the last one, sending + * them to start_mac_job(), which will start a job + * for each of them. For the last JobId, we handle it below. + */ + p = ids.list; + if (ids.count == 0) { + Jmsg(jcr, M_INFO, 0, _("No JobIds found to %s.\n"), jcr->get_ActionName(0)); + goto ok_out; + } + + Jmsg(jcr, M_INFO, 0, _("The following %u JobId%s chosen to be %s: %s\n"), + ids.count, (ids.count < 2) ? _(" was") : _("s were"), + jcr->get_ActionName(1), ids.list); + + Dmsg2(dbglevel, "Before loop count=%d ids=%s\n", ids.count, ids.list); + /* + * Note: to not over load the system, limit the number + * of new jobs started to 100 (see limit above) + */ + for (int i=1; i < (int)ids.count; i++) { + JobId = 0; + stat = get_next_jobid_from_list(&p, &JobId); + Dmsg3(dbglevel, "getJobid_no=%d stat=%d JobId=%u\n", i, stat, JobId); + if (stat < 0) { + Jmsg(jcr, M_FATAL, 0, _("Invalid JobId found.\n")); + goto bail_out; + } else if (stat == 0) { + Jmsg(jcr, M_INFO, 0, _("No JobIds found to %s.\n"), jcr->get_ActionName(0)); + goto ok_out; + } + jcr->MigrateJobId = JobId; + /* Don't start any more when limit reaches zero */ + limit--; + if (limit > 0) { + start_mac_job(jcr); + Dmsg0(dbglevel, "Back from start_mac_job\n"); + } + } + + /* Now get the last JobId and handle it in the current job */ + JobId = 0; + stat = get_next_jobid_from_list(&p, &JobId); + Dmsg2(dbglevel, "Last get_next_jobid stat=%d JobId=%u\n", stat, (int)JobId); + if (stat < 0) { + Jmsg(jcr, M_FATAL, 0, _("Invalid JobId found.\n")); + goto bail_out; + } else if (stat == 0) { + Jmsg(jcr, M_INFO, 0, _("No JobIds found to %s.\n"), jcr->get_ActionName(0)); + goto ok_out; + } + } + + jcr->previous_jr.JobId = JobId; + Dmsg1(dbglevel, "Previous jobid=%d\n", (int)jcr->previous_jr.JobId); + + if (!db_get_job_record(jcr, jcr->db, &jcr->previous_jr)) { + Jmsg(jcr, M_FATAL, 0, _("Could not get job record for JobId %s to %s. ERR=%s"), + edit_int64(jcr->previous_jr.JobId, ed1), + jcr->get_ActionName(0), + db_strerror(jcr->db)); + goto bail_out; + } + + Jmsg(jcr, M_INFO, 0, _("%s using JobId=%s Job=%s\n"), + jcr->get_OperationName(), + edit_int64(jcr->previous_jr.JobId, ed1), jcr->previous_jr.Job); + Dmsg4(dbglevel, "%s JobId=%d using JobId=%s Job=%s\n", + jcr->get_OperationName(), + jcr->JobId, + edit_int64(jcr->previous_jr.JobId, ed1), jcr->previous_jr.Job); + count = 1; + +ok_out: + goto out; + +bail_out: + count = -1; + +out: + free_pool_memory(ids.list); + free_pool_memory(mid.list); + free_pool_memory(jids.list); + return count; +} + +/* + * This routine returns: + * false if an error occurred + * true otherwise + * ids.count number of jobids found (may be zero) + */ +static bool find_jobids_from_mediaid_list(JCR *jcr, idpkt *ids, const char *type) +{ + bool ok = false; + POOL_MEM query(PM_MESSAGE); + + Mmsg(query, sql_jobids_from_mediaid, ids->list); + ids->count = 0; + if (!db_sql_query(jcr->db, query.c_str(), unique_dbid_handler, (void *)ids)) { + Jmsg(jcr, M_FATAL, 0, _("SQL failed. ERR=%s\n"), db_strerror(jcr->db)); + goto bail_out; + } + if (ids->count == 0) { + Jmsg(jcr, M_INFO, 0, _("No %ss found to %s.\n"), type, jcr->get_ActionName(0)); + } + ok = true; + +bail_out: + return ok; +} + +/* + * This routine returns: + * false if an error occurred + * true otherwise + * ids.count number of jobids found (may be zero) + */ +static bool find_jobids_of_pool_uncopied_jobs(JCR *jcr, idpkt *ids) +{ + bool ok = false; + POOL_MEM query(PM_MESSAGE); + + /* Only a copy job is allowed */ + if (jcr->getJobType() != JT_COPY) { + Jmsg(jcr, M_FATAL, 0, + _("Selection Type 'pooluncopiedjobs' only applies to Copy Jobs")); + goto bail_out; + } + + Dmsg1(dbglevel, "copy selection pattern=%s\n", jcr->rpool->name()); + Mmsg(query, sql_jobids_of_pool_uncopied_jobs, jcr->rpool->name()); + Dmsg1(dbglevel, "get uncopied jobs query=%s\n", query.c_str()); + if (!db_sql_query(jcr->db, query.c_str(), unique_dbid_handler, (void *)ids)) { + Jmsg(jcr, M_FATAL, 0, + _("SQL to get uncopied jobs failed. ERR=%s\n"), db_strerror(jcr->db)); + goto bail_out; + } + ok = true; + +bail_out: + return ok; +} + +static bool regex_find_jobids(JCR *jcr, idpkt *ids, const char *query1, + const char *query2, const char *type) +{ + dlist *item_chain; + uitem *item = NULL; + uitem *last_item = NULL; + regex_t preg; + char prbuf[500]; + int rc; + bool ok = false; + POOL_MEM query(PM_MESSAGE); + + item_chain = New(dlist(item, &item->link)); + if (!jcr->job->selection_pattern) { + Jmsg(jcr, M_FATAL, 0, _("No %s %s selection pattern specified.\n"), + jcr->get_OperationName(), type); + goto bail_out; + } + Dmsg1(dbglevel, "regex-sel-pattern=%s\n", jcr->job->selection_pattern); + /* Basic query for names */ + Mmsg(query, query1, jcr->rpool->name()); + Dmsg1(dbglevel, "get name query1=%s\n", query.c_str()); + if (!db_sql_query(jcr->db, query.c_str(), unique_name_handler, + (void *)item_chain)) { + Jmsg(jcr, M_FATAL, 0, + _("SQL to get %s failed. ERR=%s\n"), type, db_strerror(jcr->db)); + goto bail_out; + } + Dmsg1(dbglevel, "query1 returned %d names\n", item_chain->size()); + if (item_chain->size() == 0) { + Jmsg(jcr, M_INFO, 0, _("Query of Pool \"%s\" returned no Jobs to %s.\n"), + jcr->rpool->name(), jcr->get_ActionName(0)); + ok = true; + goto bail_out; /* skip regex match */ + } else { + /* Compile regex expression */ + rc = regcomp(&preg, jcr->job->selection_pattern, REG_EXTENDED); + if (rc != 0) { + regerror(rc, &preg, prbuf, sizeof(prbuf)); + Jmsg(jcr, M_FATAL, 0, _("Could not compile regex pattern \"%s\" ERR=%s\n"), + jcr->job->selection_pattern, prbuf); + goto bail_out; + } + /* Now apply the regex to the names and remove any item not matched */ + foreach_dlist(item, item_chain) { + const int nmatch = 30; + regmatch_t pmatch[nmatch]; + if (last_item) { + Dmsg1(dbglevel, "Remove item %s\n", last_item->item); + free(last_item->item); + item_chain->remove(last_item); + } + Dmsg1(dbglevel, "get name Item=%s\n", item->item); + rc = regexec(&preg, item->item, nmatch, pmatch, 0); + if (rc == 0) { + last_item = NULL; /* keep this one */ + } else { + last_item = item; + } + } + if (last_item) { + free(last_item->item); + Dmsg1(dbglevel, "Remove item %s\n", last_item->item); + item_chain->remove(last_item); + } + regfree(&preg); + } + if (item_chain->size() == 0) { + Jmsg(jcr, M_INFO, 0, _("Regex pattern matched no Jobs to %s.\n"), jcr->get_ActionName(0)); + ok = true; + goto bail_out; /* skip regex match */ + } + + /* + * At this point, we have a list of items in item_chain + * that have been matched by the regex, so now we need + * to look up their jobids. + */ + ids->count = 0; + foreach_dlist(item, item_chain) { + Dmsg2(dbglevel, "Got %s: %s\n", type, item->item); + Mmsg(query, query2, item->item, jcr->rpool->name()); + Dmsg1(dbglevel, "get id from name query2=%s\n", query.c_str()); + if (!db_sql_query(jcr->db, query.c_str(), unique_dbid_handler, (void *)ids)) { + Jmsg(jcr, M_FATAL, 0, + _("SQL failed. ERR=%s\n"), db_strerror(jcr->db)); + goto bail_out; + } + } + if (ids->count == 0) { + Jmsg(jcr, M_INFO, 0, _("No %ss found to %s.\n"), type, jcr->get_ActionName(0)); + } + ok = true; + +bail_out: + Dmsg2(dbglevel, "Count=%d Jobids=%s\n", ids->count, ids->list); + foreach_dlist(item, item_chain) { + free(item->item); + } + delete item_chain; + return ok; +} + +static bool find_mediaid_then_jobids(JCR *jcr, idpkt *ids, const char *query1, + const char *type) +{ + bool ok = false; + POOL_MEM query(PM_MESSAGE); + + ids->count = 0; + /* Basic query for MediaId */ + Mmsg(query, query1, jcr->rpool->name()); + if (!db_sql_query(jcr->db, query.c_str(), unique_dbid_handler, (void *)ids)) { + Jmsg(jcr, M_FATAL, 0, _("SQL failed. ERR=%s\n"), db_strerror(jcr->db)); + goto bail_out; + } + if (ids->count == 0) { + Jmsg(jcr, M_INFO, 0, _("No %s found to %s.\n"), type, jcr->get_ActionName(0)); + ok = true; /* Not an error */ + goto bail_out; + } else if (ids->count != 1) { + Jmsg(jcr, M_FATAL, 0, _("SQL error. Expected 1 MediaId got %d\n"), ids->count); + goto bail_out; + } + Dmsg2(dbglevel, "%s MediaIds=%s\n", type, ids->list); + + ok = find_jobids_from_mediaid_list(jcr, ids, type); + +bail_out: + return ok; +} + +/* +* const char *sql_ujobid = +* "SELECT DISTINCT Job.Job from Client,Pool,Media,Job,JobMedia " +* " WHERE Media.PoolId=Pool.PoolId AND Pool.Name='%s' AND" +* " JobMedia.JobId=Job.JobId AND Job.PoolId=Media.PoolId"; +*/ + +/* Add an item to the list if it is unique */ +static void add_unique_id(idpkt *ids, char *item) +{ + const int maxlen = 30; + char id[maxlen+1]; + char *q = ids->list; + + /* Walk through current list to see if each item is the same as item */ + for ( ; *q; ) { + id[0] = 0; + for (int i=0; icount == 0) { + ids->list[0] = 0; + } else { + pm_strcat(ids->list, ","); + } + pm_strcat(ids->list, item); + ids->count++; +// Dmsg3(0, "add_uniq count=%d Ids=%p %s\n", ids->count, ids->list, ids->list); + return; +} + +/* + * Callback handler make list of DB Ids + */ +static int unique_dbid_handler(void *ctx, int num_fields, char **row) +{ + idpkt *ids = (idpkt *)ctx; + + /* Sanity check */ + if (!row || !row[0]) { + Dmsg0(dbglevel, "dbid_hdlr error empty row\n"); + return 1; /* stop calling us */ + } + + add_unique_id(ids, row[0]); + Dmsg3(dbglevel, "dbid_hdlr count=%d Ids=%p %s\n", ids->count, ids->list, ids->list); + return 0; +} + +static int item_compare(void *item1, void *item2) +{ + uitem *i1 = (uitem *)item1; + uitem *i2 = (uitem *)item2; + return strcmp(i1->item, i2->item); +} + +static int unique_name_handler(void *ctx, int num_fields, char **row) +{ + dlist *list = (dlist *)ctx; + + uitem *new_item = (uitem *)malloc(sizeof(uitem)); + uitem *item; + + memset(new_item, 0, sizeof(uitem)); + new_item->item = bstrdup(row[0]); + Dmsg1(dbglevel, "Unique_name_hdlr Item=%s\n", row[0]); + item = (uitem *)list->binary_insert((void *)new_item, item_compare); + if (item != new_item) { /* already in list */ + free(new_item->item); + free((char *)new_item); + return 0; + } + return 0; +} + +/* + * Return next DBId from comma separated list + * + * Returns: + * 1 if next DBId returned + * 0 if no more DBIds are in list + * -1 there is an error + */ +static int get_next_dbid_from_list(char **p, DBId_t *DBId) +{ + const int maxlen = 30; + char id[maxlen+1]; + char *q = *p; + + id[0] = 0; + for (int i=0; i -#endif - -static const int dbglevel = 10; - -static int getJob_to_migrate(JCR *jcr); -struct idpkt; -static bool regex_find_jobids(JCR *jcr, idpkt *ids, const char *query1, - const char *query2, const char *type); -static bool find_mediaid_then_jobids(JCR *jcr, idpkt *ids, const char *query1, - const char *type); -static bool find_jobids_from_mediaid_list(JCR *jcr, idpkt *ids, const char *type); -static bool find_jobids_of_pool_uncopied_jobs(JCR *jcr, idpkt *ids); -static void start_migration_job(JCR *jcr); -static int get_next_dbid_from_list(char **p, DBId_t *DBId); -static bool set_migration_next_pool(JCR *jcr, POOL **pool); - -/* - * Called here before the job is run to do the job - * specific setup. Note, one of the important things to - * complete in this init code is to make the definitive - * choice of input and output storage devices. This is - * because immediately after the init, the job is queued - * in the jobq.c code, and it checks that all the resources - * (storage resources in particular) are available, so these - * must all be properly defined. - * - * previous_jr refers to the job DB record of the Job that is - * going to be migrated. - * prev_job refers to the job resource of the Job that is - * going to be migrated. - * jcr is the jcr for the current "migration" job. It is a - * control job that is put in the DB as a migration job, which - * means that this job migrated a previous job to a new job. - * No Volume or File data is associated with this control - * job. - * mig_jcr refers to the newly migrated job that is run by - * the current jcr. It is a backup job that moves (migrates) the - * data written for the previous_jr into the new pool. This - * job (mig_jcr) becomes the new backup job that replaces - * the original backup job. Note, this jcr is not really run. It - * is simply attached to the current jcr. It will show up in - * the Director's status output, but not in the SD or FD, both of - * which deal only with the current migration job (i.e. jcr). - */ -bool do_migration_init(JCR *jcr) -{ - POOL *pool = NULL; - JOB *job, *prev_job; - JCR *mig_jcr; /* newly migrated job */ - int count; - - - apply_pool_overrides(jcr); - - if (!allow_duplicate_job(jcr)) { - return false; - } - - jcr->jr.PoolId = get_or_create_pool_record(jcr, jcr->pool->name()); - if (jcr->jr.PoolId == 0) { - Dmsg1(dbglevel, "JobId=%d no PoolId\n", (int)jcr->JobId); - Jmsg(jcr, M_FATAL, 0, _("Could not get or create a Pool record.\n")); - return false; - } - /* - * Note, at this point, pool is the pool for this job. We - * transfer it to rpool (read pool), and a bit later, - * pool will be changed to point to the write pool, - * which comes from pool->NextPool. - */ - jcr->rpool = jcr->pool; /* save read pool */ - pm_strcpy(jcr->rpool_source, jcr->pool_source); - - - Dmsg2(dbglevel, "Read pool=%s (From %s)\n", jcr->rpool->name(), jcr->rpool_source); - - if (!get_or_create_fileset_record(jcr)) { - Dmsg1(dbglevel, "JobId=%d no FileSet\n", (int)jcr->JobId); - Jmsg(jcr, M_FATAL, 0, _("Could not get or create the FileSet record.\n")); - return false; - } - - /* If we find a job or jobs to migrate it is previous_jr.JobId */ - count = getJob_to_migrate(jcr); - if (count < 0) { - return false; - } - if (count == 0) { - set_migration_next_pool(jcr, &pool); - return true; /* no work */ - } - - Dmsg1(dbglevel, "Back from getJob_to_migrate JobId=%d\n", (int)jcr->JobId); - - if (jcr->previous_jr.JobId == 0) { - Dmsg1(dbglevel, "JobId=%d no previous JobId\n", (int)jcr->JobId); - Jmsg(jcr, M_INFO, 0, _("No previous Job found to %s.\n"), jcr->get_ActionName(0)); - set_migration_next_pool(jcr, &pool); - return true; /* no work */ - } - - if (create_restore_bootstrap_file(jcr) < 0) { - Jmsg(jcr, M_FATAL, 0, _("Create bootstrap file failed.\n")); - return false; - } - - if (jcr->previous_jr.JobId == 0 || jcr->ExpectedFiles == 0) { - jcr->setJobStatus(JS_Terminated); - Dmsg1(dbglevel, "JobId=%d expected files == 0\n", (int)jcr->JobId); - if (jcr->previous_jr.JobId == 0) { - Jmsg(jcr, M_INFO, 0, _("No previous Job found to %s.\n"), jcr->get_ActionName(0)); - } else { - Jmsg(jcr, M_INFO, 0, _("Previous Job has no data to %s.\n"), jcr->get_ActionName(0)); - } - set_migration_next_pool(jcr, &pool); - return true; /* no work */ - } - - - Dmsg5(dbglevel, "JobId=%d: Current: Name=%s JobId=%d Type=%c Level=%c\n", - (int)jcr->JobId, - jcr->jr.Name, (int)jcr->jr.JobId, - jcr->jr.JobType, jcr->jr.JobLevel); - - LockRes(); - job = (JOB *)GetResWithName(R_JOB, jcr->jr.Name); - prev_job = (JOB *)GetResWithName(R_JOB, jcr->previous_jr.Name); - UnlockRes(); - if (!job) { - Jmsg(jcr, M_FATAL, 0, _("Job resource not found for \"%s\".\n"), jcr->jr.Name); - return false; - } - if (!prev_job) { - Jmsg(jcr, M_FATAL, 0, _("Previous Job resource not found for \"%s\".\n"), - jcr->previous_jr.Name); - return false; - } - - jcr->spool_data = job->spool_data; /* turn on spooling if requested in job */ - - /* Create a migration jcr */ - mig_jcr = jcr->mig_jcr = new_jcr(sizeof(JCR), dird_free_jcr); - memcpy(&mig_jcr->previous_jr, &jcr->previous_jr, sizeof(mig_jcr->previous_jr)); - - /* - * Turn the mig_jcr into a "real" job that takes on the aspects of - * the previous backup job "prev_job". - */ - set_jcr_defaults(mig_jcr, prev_job); - if (!setup_job(mig_jcr)) { - Jmsg(jcr, M_FATAL, 0, _("setup job failed.\n")); - return false; - } - - /* Now reset the job record from the previous job */ - memcpy(&mig_jcr->jr, &jcr->previous_jr, sizeof(mig_jcr->jr)); - /* Update the jr to reflect the new values of PoolId and JobId. */ - mig_jcr->jr.PoolId = jcr->jr.PoolId; - mig_jcr->jr.JobId = mig_jcr->JobId; - - /* Don't let WatchDog checks Max*Time value on this Job */ - mig_jcr->no_maxtime = true; - - /* - * Don't check for duplicates on migration and copy jobs - */ - mig_jcr->job->IgnoreDuplicateJobChecking = true; - - Dmsg4(dbglevel, "mig_jcr: Name=%s JobId=%d Type=%c Level=%c\n", - mig_jcr->jr.Name, (int)mig_jcr->jr.JobId, - mig_jcr->jr.JobType, mig_jcr->jr.JobLevel); - - if (set_migration_next_pool(jcr, &pool)) { - /* If pool storage specified, use it for restore */ - copy_rstorage(mig_jcr, pool->storage, _("Pool resource")); - copy_rstorage(jcr, pool->storage, _("Pool resource")); - - mig_jcr->pool = jcr->pool; - mig_jcr->jr.PoolId = jcr->jr.PoolId; - } - - return true; -} - - -/* - * set_migration_next_pool() called by do_migration_init() - * at differents stages. - * The idea here is to make a common subroutine for the - * NextPool's search code and to permit do_migration_init() - * to return with NextPool set in jcr struct. - */ -static bool set_migration_next_pool(JCR *jcr, POOL **retpool) -{ - POOL_DBR pr; - POOL *pool; - char ed1[100]; - - /* - * Get the PoolId used with the original job. Then - * find the pool name from the database record. - */ - memset(&pr, 0, sizeof(pr)); - pr.PoolId = jcr->jr.PoolId; - if (!db_get_pool_record(jcr, jcr->db, &pr)) { - Jmsg(jcr, M_FATAL, 0, _("Pool for JobId %s not in database. ERR=%s\n"), - edit_int64(pr.PoolId, ed1), db_strerror(jcr->db)); - return false; - } - /* Get the pool resource corresponding to the original job */ - pool = (POOL *)GetResWithName(R_POOL, pr.Name); - *retpool = pool; - if (!pool) { - Jmsg(jcr, M_FATAL, 0, _("Pool resource \"%s\" not found.\n"), pr.Name); - return false; - } - - /* - * If the original backup pool has a NextPool, make sure a - * record exists in the database. Note, in this case, we - * will be migrating from pool to pool->NextPool. - */ - if (pool->NextPool) { - jcr->jr.PoolId = get_or_create_pool_record(jcr, pool->NextPool->name()); - if (jcr->jr.PoolId == 0) { - return false; - } - } - if (!set_migration_wstorage(jcr, pool)) { - return false; - } - jcr->pool = pool->NextPool; - pm_strcpy(jcr->pool_source, _("Job Pool's NextPool resource")); - - Dmsg2(dbglevel, "Write pool=%s read rpool=%s\n", jcr->pool->name(), jcr->rpool->name()); - - return true; -} - - -/* - * Do a Migration of a previous job - * - * Returns: false on failure - * true on success - */ -bool do_migration(JCR *jcr) -{ - char ed1[100]; - BSOCK *sd; - JCR *mig_jcr = jcr->mig_jcr; /* newly migrated job */ - - /* - * If mig_jcr is NULL, there is nothing to do for this job, - * so set a normal status, cleanup and return OK. - */ - if (!mig_jcr) { - jcr->setJobStatus(JS_Terminated); - migration_cleanup(jcr, jcr->JobStatus); - return true; - } - - if (!db_get_job_record(jcr, jcr->db, &jcr->previous_jr)) { - Jmsg(jcr, M_FATAL, 0, _("Could not get job record for JobId %s to %s. ERR=%s"), - edit_int64(jcr->previous_jr.JobId, ed1), - jcr->get_ActionName(0), - db_strerror(jcr->db)); - jcr->setJobStatus(JS_Terminated); - migration_cleanup(jcr, jcr->JobStatus); - return true; - } - /* Make sure this job was not already migrated */ - if (jcr->previous_jr.JobType != JT_BACKUP && - jcr->previous_jr.JobType != JT_JOB_COPY) { - Jmsg(jcr, M_INFO, 0, _("JobId %s already %s probably by another Job. %s stopped.\n"), - edit_int64(jcr->previous_jr.JobId, ed1), - jcr->get_ActionName(1), - jcr->get_OperationName()); - jcr->setJobStatus(JS_Terminated); - migration_cleanup(jcr, jcr->JobStatus); - return true; - } - - /* Print Job Start message */ - Jmsg(jcr, M_INFO, 0, _("Start %s JobId %s, Job=%s\n"), - jcr->get_OperationName(), edit_uint64(jcr->JobId, ed1), jcr->Job); - - /* - * Open a message channel connection with the Storage - * daemon. This is to let him know that our client - * will be contacting him for a backup session. - * - */ - Dmsg0(110, "Open connection with storage daemon\n"); - jcr->setJobStatus(JS_WaitSD); - mig_jcr->setJobStatus(JS_WaitSD); - /* - * Start conversation with Storage daemon - */ - if (!connect_to_storage_daemon(jcr, 10, SDConnectTimeout, 1)) { - return false; - } - sd = jcr->store_bsock; - /* - * Now start a job with the Storage daemon - */ - Dmsg2(dbglevel, "Read store=%s, write store=%s\n", - ((STORE *)jcr->rstorage->first())->name(), - ((STORE *)jcr->wstorage->first())->name()); - - if (!start_storage_daemon_job(jcr, jcr->rstorage, jcr->wstorage, /*send_bsr*/true)) { - return false; - } - Dmsg0(150, "Storage daemon connection OK\n"); - - /* Declare the job started to start the MaxRunTime check */ - jcr->setJobStarted(); - - /* - * We re-update the job start record so that the start - * time is set after the run before job. This avoids - * that any files created by the run before job will - * be saved twice. They will be backed up in the current - * job, but not in the next one unless they are changed. - * Without this, they will be backed up in this job and - * in the next job run because in that case, their date - * is after the start of this run. - */ - jcr->start_time = time(NULL); - jcr->jr.StartTime = jcr->start_time; - jcr->jr.JobTDate = jcr->start_time; - jcr->setJobStatus(JS_Running); - - /* Update job start record for this migration control job */ - if (!db_update_job_start_record(jcr, jcr->db, &jcr->jr)) { - Jmsg(jcr, M_FATAL, 0, "%s", db_strerror(jcr->db)); - return false; - } - - - mig_jcr->start_time = time(NULL); - mig_jcr->jr.StartTime = mig_jcr->start_time; - mig_jcr->jr.JobTDate = mig_jcr->start_time; - mig_jcr->setJobStatus(JS_Running); - - /* Update job start record for the real migration backup job */ - if (!db_update_job_start_record(mig_jcr, mig_jcr->db, &mig_jcr->jr)) { - Jmsg(jcr, M_FATAL, 0, "%s", db_strerror(mig_jcr->db)); - return false; - } - - Dmsg4(dbglevel, "mig_jcr: Name=%s JobId=%d Type=%c Level=%c\n", - mig_jcr->jr.Name, (int)mig_jcr->jr.JobId, - mig_jcr->jr.JobType, mig_jcr->jr.JobLevel); - - - /* - * Start the job prior to starting the message thread below - * to avoid two threads from using the BSOCK structure at - * the same time. - */ - if (!sd->fsend("run")) { - return false; - } - - /* - * Now start a Storage daemon message thread - */ - if (!start_storage_daemon_message_thread(jcr)) { - return false; - } - - - jcr->setJobStatus(JS_Running); - mig_jcr->setJobStatus(JS_Running); - - /* Pickup Job termination data */ - /* Note, the SD stores in jcr->JobFiles/ReadBytes/JobBytes/JobErrors */ - wait_for_storage_daemon_termination(jcr); - jcr->setJobStatus(jcr->SDJobStatus); - db_write_batch_file_records(jcr); /* used by bulk batch file insert */ - if (jcr->JobStatus != JS_Terminated) { - return false; - } - - migration_cleanup(jcr, jcr->JobStatus); - - return true; -} - -struct idpkt { - POOLMEM *list; - uint32_t count; -}; - -/* Add an item to the list if it is unique */ -static void add_unique_id(idpkt *ids, char *item) -{ - const int maxlen = 30; - char id[maxlen+1]; - char *q = ids->list; - - /* Walk through current list to see if each item is the same as item */ - for ( ; *q; ) { - id[0] = 0; - for (int i=0; icount == 0) { - ids->list[0] = 0; - } else { - pm_strcat(ids->list, ","); - } - pm_strcat(ids->list, item); - ids->count++; -// Dmsg3(0, "add_uniq count=%d Ids=%p %s\n", ids->count, ids->list, ids->list); - return; -} - -/* - * Callback handler make list of DB Ids - */ -static int unique_dbid_handler(void *ctx, int num_fields, char **row) -{ - idpkt *ids = (idpkt *)ctx; - - /* Sanity check */ - if (!row || !row[0]) { - Dmsg0(dbglevel, "dbid_hdlr error empty row\n"); - return 1; /* stop calling us */ - } - - add_unique_id(ids, row[0]); - Dmsg3(dbglevel, "dbid_hdlr count=%d Ids=%p %s\n", ids->count, ids->list, ids->list); - return 0; -} - - -struct uitem { - dlink link; - char *item; -}; - -static int item_compare(void *item1, void *item2) -{ - uitem *i1 = (uitem *)item1; - uitem *i2 = (uitem *)item2; - return strcmp(i1->item, i2->item); -} - -static int unique_name_handler(void *ctx, int num_fields, char **row) -{ - dlist *list = (dlist *)ctx; - - uitem *new_item = (uitem *)malloc(sizeof(uitem)); - uitem *item; - - memset(new_item, 0, sizeof(uitem)); - new_item->item = bstrdup(row[0]); - Dmsg1(dbglevel, "Unique_name_hdlr Item=%s\n", row[0]); - item = (uitem *)list->binary_insert((void *)new_item, item_compare); - if (item != new_item) { /* already in list */ - free(new_item->item); - free((char *)new_item); - return 0; - } - return 0; -} - -/* Get Job names in Pool */ -const char *sql_job = - "SELECT DISTINCT Job.Name from Job,Pool" - " WHERE Pool.Name='%s' AND Job.PoolId=Pool.PoolId"; - -/* Get JobIds from regex'ed Job names */ -const char *sql_jobids_from_job = - "SELECT DISTINCT Job.JobId,Job.StartTime FROM Job,Pool" - " WHERE Job.Name='%s' AND Pool.Name='%s' AND Job.PoolId=Pool.PoolId" - " ORDER by Job.StartTime"; - -/* Get Client names in Pool */ -const char *sql_client = - "SELECT DISTINCT Client.Name from Client,Pool,Job" - " WHERE Pool.Name='%s' AND Job.ClientId=Client.ClientId AND" - " Job.PoolId=Pool.PoolId"; - -/* Get JobIds from regex'ed Client names */ -const char *sql_jobids_from_client = - "SELECT DISTINCT Job.JobId,Job.StartTime FROM Job,Pool,Client" - " WHERE Client.Name='%s' AND Pool.Name='%s' AND Job.PoolId=Pool.PoolId" - " AND Job.ClientId=Client.ClientId AND Job.Type IN ('B','C')" - " AND Job.JobStatus IN ('T','W')" - " ORDER by Job.StartTime"; - -/* Get Volume names in Pool */ -const char *sql_vol = - "SELECT DISTINCT VolumeName FROM Media,Pool WHERE" - " VolStatus in ('Full','Used','Error') AND Media.Enabled=1 AND" - " Media.PoolId=Pool.PoolId AND Pool.Name='%s'"; - -/* Get JobIds from regex'ed Volume names */ -const char *sql_jobids_from_vol = - "SELECT DISTINCT Job.JobId,Job.StartTime FROM Media,JobMedia,Job" - " WHERE Media.VolumeName='%s' AND Media.MediaId=JobMedia.MediaId" - " AND JobMedia.JobId=Job.JobId AND Job.Type IN ('B','C')" - " AND Job.JobStatus IN ('T','W') AND Media.Enabled=1" - " ORDER by Job.StartTime"; - -const char *sql_smallest_vol = - "SELECT Media.MediaId FROM Media,Pool,JobMedia WHERE" - " Media.MediaId in (SELECT DISTINCT MediaId from JobMedia) AND" - " Media.VolStatus in ('Full','Used','Error') AND Media.Enabled=1 AND" - " Media.PoolId=Pool.PoolId AND Pool.Name='%s'" - " ORDER BY VolBytes ASC LIMIT 1"; - -const char *sql_oldest_vol = - "SELECT Media.MediaId FROM Media,Pool,JobMedia WHERE" - " Media.MediaId in (SELECT DISTINCT MediaId from JobMedia) AND" - " Media.VolStatus in ('Full','Used','Error') AND Media.Enabled=1 AND" - " Media.PoolId=Pool.PoolId AND Pool.Name='%s'" - " ORDER BY LastWritten ASC LIMIT 1"; - -/* Get JobIds when we have selected MediaId */ -const char *sql_jobids_from_mediaid = - "SELECT DISTINCT Job.JobId,Job.StartTime FROM JobMedia,Job" - " WHERE JobMedia.JobId=Job.JobId AND JobMedia.MediaId IN (%s)" - " AND Job.Type IN ('B','C') AND Job.JobStatus IN ('T','W')" - " ORDER by Job.StartTime"; - -/* Get the number of bytes in the pool */ -const char *sql_pool_bytes = - "SELECT SUM(JobBytes) FROM Job WHERE JobId IN" - " (SELECT DISTINCT Job.JobId from Pool,Job,Media,JobMedia WHERE" - " Pool.Name='%s' AND Media.PoolId=Pool.PoolId AND" - " VolStatus in ('Full','Used','Error','Append') AND Media.Enabled=1 AND" - " Job.Type IN ('B','C') AND Job.JobStatus IN ('T','W') AND" - " JobMedia.JobId=Job.JobId AND Job.PoolId=Media.PoolId)"; - -/* Get the number of bytes in the Jobs */ -const char *sql_job_bytes = - "SELECT SUM(JobBytes) FROM Job WHERE JobId IN (%s)"; - -/* Get Media Ids in Pool */ -const char *sql_mediaids = - "SELECT MediaId FROM Media,Pool WHERE" - " VolStatus in ('Full','Used','Error') AND Media.Enabled=1 AND" - " Media.PoolId=Pool.PoolId AND Pool.Name='%s' ORDER BY LastWritten ASC"; - -/* Get JobIds in Pool longer than specified time */ -const char *sql_pool_time = - "SELECT DISTINCT Job.JobId FROM Pool,Job,Media,JobMedia WHERE" - " Pool.Name='%s' AND Media.PoolId=Pool.PoolId AND" - " VolStatus IN ('Full','Used','Error') AND Media.Enabled=1 AND" - " Job.Type IN ('B','C') AND Job.JobStatus IN ('T','W') AND" - " JobMedia.JobId=Job.JobId AND Job.PoolId=Media.PoolId" - " AND Job.RealEndTime<='%s'"; - -/* Get JobIds from successfully completed backup jobs which have not been copied before */ -const char *sql_jobids_of_pool_uncopied_jobs = - "SELECT DISTINCT Job.JobId,Job.StartTime FROM Job,Pool" - " WHERE Pool.Name = '%s' AND Pool.PoolId = Job.PoolId" - " AND Job.Type = 'B' AND Job.JobStatus IN ('T','W')" - " AND Job.jobBytes > 0" - " AND Job.JobId NOT IN" - " (SELECT PriorJobId FROM Job WHERE" - " Type IN ('B','C') AND Job.JobStatus IN ('T','W')" - " AND PriorJobId != 0)" - " ORDER by Job.StartTime"; - -/* -* const char *sql_ujobid = -* "SELECT DISTINCT Job.Job from Client,Pool,Media,Job,JobMedia " -* " WHERE Media.PoolId=Pool.PoolId AND Pool.Name='%s' AND" -* " JobMedia.JobId=Job.JobId AND Job.PoolId=Media.PoolId"; -*/ - -/* - * - * This is the central piece of code that finds a job or jobs - * actually JobIds to migrate. It first looks to see if one - * has been "manually" specified in jcr->MigrateJobId, and if - * so, it returns that JobId to be run. Otherwise, it - * examines the Selection Type to see what kind of migration - * we are doing (Volume, Job, Client, ...) and applies any - * Selection Pattern if appropriate to obtain a list of JobIds. - * Finally, it will loop over all the JobIds found, except the last - * one starting a new job with MigrationJobId set to that JobId, and - * finally, it returns the last JobId to the caller. - * - * Returns: -1 on error - * 0 if no jobs to migrate - * 1 if OK and jcr->previous_jr filled in - */ -static int getJob_to_migrate(JCR *jcr) -{ - char ed1[30], ed2[30]; - POOL_MEM query(PM_MESSAGE); - JobId_t JobId; - DBId_t DBId = 0; - int stat; - char *p; - idpkt ids, mid, jids; - db_int64_ctx ctx; - int64_t pool_bytes; - time_t ttime; - struct tm tm; - char dt[MAX_TIME_LENGTH]; - int count = 0; - int limit = 99; /* limit + 1 is max jobs to start */ - - ids.list = get_pool_memory(PM_MESSAGE); - ids.list[0] = 0; - ids.count = 0; - mid.list = get_pool_memory(PM_MESSAGE); - mid.list[0] = 0; - mid.count = 0; - jids.list = get_pool_memory(PM_MESSAGE); - jids.list[0] = 0; - jids.count = 0; - - /* - * If MigrateJobId is set, then we migrate only that Job, - * otherwise, we go through the full selection of jobs to - * migrate. - */ - if (jcr->MigrateJobId != 0) { - Dmsg1(dbglevel, "At Job start previous jobid=%u\n", jcr->MigrateJobId); - JobId = jcr->MigrateJobId; - } else { - switch (jcr->job->selection_type) { - case MT_JOB: - if (!regex_find_jobids(jcr, &ids, sql_job, sql_jobids_from_job, "Job")) { - goto bail_out; - } - break; - case MT_CLIENT: - if (!regex_find_jobids(jcr, &ids, sql_client, sql_jobids_from_client, "Client")) { - goto bail_out; - } - break; - case MT_VOLUME: - if (!regex_find_jobids(jcr, &ids, sql_vol, sql_jobids_from_vol, "Volume")) { - goto bail_out; - } - break; - case MT_SQLQUERY: - if (!jcr->job->selection_pattern) { - Jmsg(jcr, M_FATAL, 0, _("No %s SQL selection pattern specified.\n"), jcr->get_OperationName()); - goto bail_out; - } - Dmsg1(dbglevel, "SQL=%s\n", jcr->job->selection_pattern); - if (!db_sql_query(jcr->db, jcr->job->selection_pattern, - unique_dbid_handler, (void *)&ids)) { - Jmsg(jcr, M_FATAL, 0, - _("SQL failed. ERR=%s\n"), db_strerror(jcr->db)); - goto bail_out; - } - break; - case MT_SMALLEST_VOL: - if (!find_mediaid_then_jobids(jcr, &ids, sql_smallest_vol, "Smallest Volume")) { - goto bail_out; - } - break; - case MT_OLDEST_VOL: - if (!find_mediaid_then_jobids(jcr, &ids, sql_oldest_vol, "Oldest Volume")) { - goto bail_out; - } - break; - case MT_POOL_OCCUPANCY: - ctx.count = 0; - /* Find count of bytes in pool */ - Mmsg(query, sql_pool_bytes, jcr->rpool->name()); - if (!db_sql_query(jcr->db, query.c_str(), db_int64_handler, (void *)&ctx)) { - Jmsg(jcr, M_FATAL, 0, _("SQL failed. ERR=%s\n"), db_strerror(jcr->db)); - goto bail_out; - } - if (ctx.count == 0) { - Jmsg(jcr, M_INFO, 0, _("No Volumes found to %s.\n"), jcr->get_ActionName(0)); - goto ok_out; - } - pool_bytes = ctx.value; - Dmsg2(dbglevel, "highbytes=%lld pool=%lld\n", jcr->rpool->MigrationHighBytes, - pool_bytes); - if (pool_bytes < (int64_t)jcr->rpool->MigrationHighBytes) { - Jmsg(jcr, M_INFO, 0, _("No Volumes found to %s.\n"), jcr->get_ActionName(0)); - goto ok_out; - } - Dmsg0(dbglevel, "We should do Occupation migration.\n"); - - ids.count = 0; - /* Find a list of MediaIds that could be migrated */ - Mmsg(query, sql_mediaids, jcr->rpool->name()); - Dmsg1(dbglevel, "query=%s\n", query.c_str()); - if (!db_sql_query(jcr->db, query.c_str(), unique_dbid_handler, (void *)&ids)) { - Jmsg(jcr, M_FATAL, 0, _("SQL failed. ERR=%s\n"), db_strerror(jcr->db)); - goto bail_out; - } - if (ids.count == 0) { - Jmsg(jcr, M_INFO, 0, _("No Volumes found to %s.\n"), jcr->get_ActionName(0)); - goto ok_out; - } - Dmsg2(dbglevel, "Pool Occupancy ids=%d MediaIds=%s\n", ids.count, ids.list); - - if (!find_jobids_from_mediaid_list(jcr, &ids, "Volume")) { - goto bail_out; - } - /* ids == list of jobs */ - p = ids.list; - for (int i=0; i < (int)ids.count; i++) { - stat = get_next_dbid_from_list(&p, &DBId); - Dmsg2(dbglevel, "get_next_dbid stat=%d JobId=%u\n", stat, (uint32_t)DBId); - if (stat < 0) { - Jmsg(jcr, M_FATAL, 0, _("Invalid JobId found.\n")); - goto bail_out; - } else if (stat == 0) { - break; - } - - mid.count = 1; - Mmsg(mid.list, "%s", edit_int64(DBId, ed1)); - if (jids.count > 0) { - pm_strcat(jids.list, ","); - } - pm_strcat(jids.list, mid.list); - jids.count += mid.count; - - /* Find count of bytes from Jobs */ - Mmsg(query, sql_job_bytes, mid.list); - Dmsg1(dbglevel, "Jobbytes query: %s\n", query.c_str()); - if (!db_sql_query(jcr->db, query.c_str(), db_int64_handler, (void *)&ctx)) { - Jmsg(jcr, M_FATAL, 0, _("SQL failed. ERR=%s\n"), db_strerror(jcr->db)); - goto bail_out; - } - pool_bytes -= ctx.value; - Dmsg2(dbglevel, "Total %s Job bytes=%s\n", jcr->get_ActionName(0), edit_int64_with_commas(ctx.value, ed1)); - Dmsg2(dbglevel, "lowbytes=%s poolafter=%s\n", - edit_int64_with_commas(jcr->rpool->MigrationLowBytes, ed1), - edit_int64_with_commas(pool_bytes, ed2)); - if (pool_bytes <= (int64_t)jcr->rpool->MigrationLowBytes) { - Dmsg0(dbglevel, "We should be done.\n"); - break; - } - } - /* Transfer jids to ids, where the jobs list is expected */ - ids.count = jids.count; - pm_strcpy(ids.list, jids.list); - Dmsg2(dbglevel, "Pool Occupancy ids=%d JobIds=%s\n", ids.count, ids.list); - break; - case MT_POOL_TIME: - ttime = time(NULL) - (time_t)jcr->rpool->MigrationTime; - (void)localtime_r(&ttime, &tm); - strftime(dt, sizeof(dt), "%Y-%m-%d %H:%M:%S", &tm); - - ids.count = 0; - Mmsg(query, sql_pool_time, jcr->rpool->name(), dt); - Dmsg1(dbglevel, "query=%s\n", query.c_str()); - if (!db_sql_query(jcr->db, query.c_str(), unique_dbid_handler, (void *)&ids)) { - Jmsg(jcr, M_FATAL, 0, _("SQL failed. ERR=%s\n"), db_strerror(jcr->db)); - goto bail_out; - } - if (ids.count == 0) { - Jmsg(jcr, M_INFO, 0, _("No Volumes found to %s.\n"), jcr->get_ActionName(0)); - goto ok_out; - } - Dmsg2(dbglevel, "PoolTime ids=%d JobIds=%s\n", ids.count, ids.list); - break; - case MT_POOL_UNCOPIED_JOBS: - if (!find_jobids_of_pool_uncopied_jobs(jcr, &ids)) { - goto bail_out; - } - break; - default: - Jmsg(jcr, M_FATAL, 0, _("Unknown %s Selection Type.\n"), jcr->get_OperationName()); - goto bail_out; - } - - /* - * Loop over all jobids except the last one, sending - * them to start_migration_job(), which will start a job - * for each of them. For the last JobId, we handle it below. - */ - p = ids.list; - if (ids.count == 0) { - Jmsg(jcr, M_INFO, 0, _("No JobIds found to %s.\n"), jcr->get_ActionName(0)); - goto ok_out; - } - - Jmsg(jcr, M_INFO, 0, _("The following %u JobId%s chosen to be %s: %s\n"), - ids.count, (ids.count < 2) ? _(" was") : _("s were"), - jcr->get_ActionName(1), ids.list); - - Dmsg2(dbglevel, "Before loop count=%d ids=%s\n", ids.count, ids.list); - /* - * Note: to not over load the system, limit the number - * of new jobs started to 100 (see limit above) - */ - for (int i=1; i < (int)ids.count; i++) { - JobId = 0; - stat = get_next_jobid_from_list(&p, &JobId); - Dmsg3(dbglevel, "getJobid_no=%d stat=%d JobId=%u\n", i, stat, JobId); - if (stat < 0) { - Jmsg(jcr, M_FATAL, 0, _("Invalid JobId found.\n")); - goto bail_out; - } else if (stat == 0) { - Jmsg(jcr, M_INFO, 0, _("No JobIds found to %s.\n"), jcr->get_ActionName(0)); - goto ok_out; - } - jcr->MigrateJobId = JobId; - /* Don't start any more when limit reaches zero */ - limit--; - if (limit > 0) { - start_migration_job(jcr); - Dmsg0(dbglevel, "Back from start_migration_job\n"); - } - } - - /* Now get the last JobId and handle it in the current job */ - JobId = 0; - stat = get_next_jobid_from_list(&p, &JobId); - Dmsg2(dbglevel, "Last get_next_jobid stat=%d JobId=%u\n", stat, (int)JobId); - if (stat < 0) { - Jmsg(jcr, M_FATAL, 0, _("Invalid JobId found.\n")); - goto bail_out; - } else if (stat == 0) { - Jmsg(jcr, M_INFO, 0, _("No JobIds found to %s.\n"), jcr->get_ActionName(0)); - goto ok_out; - } - } - - jcr->previous_jr.JobId = JobId; - Dmsg1(dbglevel, "Previous jobid=%d\n", (int)jcr->previous_jr.JobId); - - if (!db_get_job_record(jcr, jcr->db, &jcr->previous_jr)) { - Jmsg(jcr, M_FATAL, 0, _("Could not get job record for JobId %s to %s. ERR=%s"), - edit_int64(jcr->previous_jr.JobId, ed1), - jcr->get_ActionName(0), - db_strerror(jcr->db)); - goto bail_out; - } - - Jmsg(jcr, M_INFO, 0, _("%s using JobId=%s Job=%s\n"), - jcr->get_OperationName(), - edit_int64(jcr->previous_jr.JobId, ed1), jcr->previous_jr.Job); - Dmsg4(dbglevel, "%s JobId=%d using JobId=%s Job=%s\n", - jcr->get_OperationName(), - jcr->JobId, - edit_int64(jcr->previous_jr.JobId, ed1), jcr->previous_jr.Job); - count = 1; - -ok_out: - goto out; - -bail_out: - count = -1; - -out: - free_pool_memory(ids.list); - free_pool_memory(mid.list); - free_pool_memory(jids.list); - return count; -} - -static void start_migration_job(JCR *jcr) -{ - UAContext *ua = new_ua_context(jcr); - char ed1[50]; - ua->batch = true; - Mmsg(ua->cmd, "run job=\"%s\" jobid=%s ignoreduplicatecheck=yes pool=\"%s\"", - jcr->job->name(), edit_uint64(jcr->MigrateJobId, ed1), - jcr->pool->name()); - Dmsg2(dbglevel, "=============== %s cmd=%s\n", jcr->get_OperationName(), ua->cmd); - parse_ua_args(ua); /* parse command */ - JobId_t jobid = run_cmd(ua, ua->cmd); - if (jobid == 0) { - Jmsg(jcr, M_ERROR, 0, _("Could not start migration job.\n")); - } else { - Jmsg(jcr, M_INFO, 0, _("%s JobId %d started.\n"), jcr->get_OperationName(), (int)jobid); - } - free_ua_context(ua); -} - -static bool find_mediaid_then_jobids(JCR *jcr, idpkt *ids, const char *query1, - const char *type) -{ - bool ok = false; - POOL_MEM query(PM_MESSAGE); - - ids->count = 0; - /* Basic query for MediaId */ - Mmsg(query, query1, jcr->rpool->name()); - if (!db_sql_query(jcr->db, query.c_str(), unique_dbid_handler, (void *)ids)) { - Jmsg(jcr, M_FATAL, 0, _("SQL failed. ERR=%s\n"), db_strerror(jcr->db)); - goto bail_out; - } - if (ids->count == 0) { - Jmsg(jcr, M_INFO, 0, _("No %s found to %s.\n"), type, jcr->get_ActionName(0)); - ok = true; /* Not an error */ - goto bail_out; - } else if (ids->count != 1) { - Jmsg(jcr, M_FATAL, 0, _("SQL error. Expected 1 MediaId got %d\n"), ids->count); - goto bail_out; - } - Dmsg2(dbglevel, "%s MediaIds=%s\n", type, ids->list); - - ok = find_jobids_from_mediaid_list(jcr, ids, type); - -bail_out: - return ok; -} - -/* - * This routine returns: - * false if an error occurred - * true otherwise - * ids.count number of jobids found (may be zero) - */ -static bool find_jobids_from_mediaid_list(JCR *jcr, idpkt *ids, const char *type) -{ - bool ok = false; - POOL_MEM query(PM_MESSAGE); - - Mmsg(query, sql_jobids_from_mediaid, ids->list); - ids->count = 0; - if (!db_sql_query(jcr->db, query.c_str(), unique_dbid_handler, (void *)ids)) { - Jmsg(jcr, M_FATAL, 0, _("SQL failed. ERR=%s\n"), db_strerror(jcr->db)); - goto bail_out; - } - if (ids->count == 0) { - Jmsg(jcr, M_INFO, 0, _("No %ss found to %s.\n"), type, jcr->get_ActionName(0)); - } - ok = true; - -bail_out: - return ok; -} - -/* - * This routine returns: - * false if an error occurred - * true otherwise - * ids.count number of jobids found (may be zero) - */ -static bool find_jobids_of_pool_uncopied_jobs(JCR *jcr, idpkt *ids) -{ - bool ok = false; - POOL_MEM query(PM_MESSAGE); - - /* Only a copy job is allowed */ - if (jcr->getJobType() != JT_COPY) { - Jmsg(jcr, M_FATAL, 0, - _("Selection Type 'pooluncopiedjobs' only applies to Copy Jobs")); - goto bail_out; - } - - Dmsg1(dbglevel, "copy selection pattern=%s\n", jcr->rpool->name()); - Mmsg(query, sql_jobids_of_pool_uncopied_jobs, jcr->rpool->name()); - Dmsg1(dbglevel, "get uncopied jobs query=%s\n", query.c_str()); - if (!db_sql_query(jcr->db, query.c_str(), unique_dbid_handler, (void *)ids)) { - Jmsg(jcr, M_FATAL, 0, - _("SQL to get uncopied jobs failed. ERR=%s\n"), db_strerror(jcr->db)); - goto bail_out; - } - ok = true; - -bail_out: - return ok; -} - -static bool regex_find_jobids(JCR *jcr, idpkt *ids, const char *query1, - const char *query2, const char *type) -{ - dlist *item_chain; - uitem *item = NULL; - uitem *last_item = NULL; - regex_t preg; - char prbuf[500]; - int rc; - bool ok = false; - POOL_MEM query(PM_MESSAGE); - - item_chain = New(dlist(item, &item->link)); - if (!jcr->job->selection_pattern) { - Jmsg(jcr, M_FATAL, 0, _("No %s %s selection pattern specified.\n"), - jcr->get_OperationName(), type); - goto bail_out; - } - Dmsg1(dbglevel, "regex-sel-pattern=%s\n", jcr->job->selection_pattern); - /* Basic query for names */ - Mmsg(query, query1, jcr->rpool->name()); - Dmsg1(dbglevel, "get name query1=%s\n", query.c_str()); - if (!db_sql_query(jcr->db, query.c_str(), unique_name_handler, - (void *)item_chain)) { - Jmsg(jcr, M_FATAL, 0, - _("SQL to get %s failed. ERR=%s\n"), type, db_strerror(jcr->db)); - goto bail_out; - } - Dmsg1(dbglevel, "query1 returned %d names\n", item_chain->size()); - if (item_chain->size() == 0) { - Jmsg(jcr, M_INFO, 0, _("Query of Pool \"%s\" returned no Jobs to %s.\n"), - jcr->rpool->name(), jcr->get_ActionName(0)); - ok = true; - goto bail_out; /* skip regex match */ - } else { - /* Compile regex expression */ - rc = regcomp(&preg, jcr->job->selection_pattern, REG_EXTENDED); - if (rc != 0) { - regerror(rc, &preg, prbuf, sizeof(prbuf)); - Jmsg(jcr, M_FATAL, 0, _("Could not compile regex pattern \"%s\" ERR=%s\n"), - jcr->job->selection_pattern, prbuf); - goto bail_out; - } - /* Now apply the regex to the names and remove any item not matched */ - foreach_dlist(item, item_chain) { - const int nmatch = 30; - regmatch_t pmatch[nmatch]; - if (last_item) { - Dmsg1(dbglevel, "Remove item %s\n", last_item->item); - free(last_item->item); - item_chain->remove(last_item); - } - Dmsg1(dbglevel, "get name Item=%s\n", item->item); - rc = regexec(&preg, item->item, nmatch, pmatch, 0); - if (rc == 0) { - last_item = NULL; /* keep this one */ - } else { - last_item = item; - } - } - if (last_item) { - free(last_item->item); - Dmsg1(dbglevel, "Remove item %s\n", last_item->item); - item_chain->remove(last_item); - } - regfree(&preg); - } - if (item_chain->size() == 0) { - Jmsg(jcr, M_INFO, 0, _("Regex pattern matched no Jobs to %s.\n"), jcr->get_ActionName(0)); - ok = true; - goto bail_out; /* skip regex match */ - } - - /* - * At this point, we have a list of items in item_chain - * that have been matched by the regex, so now we need - * to look up their jobids. - */ - ids->count = 0; - foreach_dlist(item, item_chain) { - Dmsg2(dbglevel, "Got %s: %s\n", type, item->item); - Mmsg(query, query2, item->item, jcr->rpool->name()); - Dmsg1(dbglevel, "get id from name query2=%s\n", query.c_str()); - if (!db_sql_query(jcr->db, query.c_str(), unique_dbid_handler, (void *)ids)) { - Jmsg(jcr, M_FATAL, 0, - _("SQL failed. ERR=%s\n"), db_strerror(jcr->db)); - goto bail_out; - } - } - if (ids->count == 0) { - Jmsg(jcr, M_INFO, 0, _("No %ss found to %s.\n"), type, jcr->get_ActionName(0)); - } - ok = true; - -bail_out: - Dmsg2(dbglevel, "Count=%d Jobids=%s\n", ids->count, ids->list); - foreach_dlist(item, item_chain) { - free(item->item); - } - delete item_chain; - return ok; -} - -/* - * Release resources allocated during backup. - */ -void migration_cleanup(JCR *jcr, int TermCode) -{ - char sdt[MAX_TIME_LENGTH], edt[MAX_TIME_LENGTH]; - char ec1[30], ec2[30], ec3[30], ec4[30], ec5[30], elapsed[50]; - char ec6[50], ec7[50], ec8[50]; - char term_code[100], sd_term_msg[100]; - const char *term_msg; - int msg_type = M_INFO; - MEDIA_DBR mr; - double kbps; - utime_t RunTime; - JCR *mig_jcr = jcr->mig_jcr; - POOL_MEM query(PM_MESSAGE); - - Dmsg2(100, "Enter migrate_cleanup %d %c\n", TermCode, TermCode); - update_job_end(jcr, TermCode); - - /* - * Check if we actually did something. - * mig_jcr is jcr of the newly migrated job. - */ - if (mig_jcr) { - char old_jobid[50], new_jobid[50]; - - edit_uint64(jcr->previous_jr.JobId, old_jobid); - edit_uint64(mig_jcr->jr.JobId, new_jobid); - - mig_jcr->JobFiles = jcr->JobFiles = jcr->SDJobFiles; - mig_jcr->JobBytes = jcr->JobBytes = jcr->SDJobBytes; - mig_jcr->VolSessionId = jcr->VolSessionId; - mig_jcr->VolSessionTime = jcr->VolSessionTime; - mig_jcr->jr.RealEndTime = 0; - mig_jcr->jr.PriorJobId = jcr->previous_jr.JobId; - - update_job_end(mig_jcr, TermCode); - - /* Update final items to set them to the previous job's values */ - Mmsg(query, "UPDATE Job SET StartTime='%s',EndTime='%s'," - "JobTDate=%s WHERE JobId=%s", - jcr->previous_jr.cStartTime, jcr->previous_jr.cEndTime, - edit_uint64(jcr->previous_jr.JobTDate, ec1), - new_jobid); - db_sql_query(mig_jcr->db, query.c_str(), NULL, NULL); - - /* - * If we terminated a migration normally: - * - mark the previous job as migrated - * - move any Log records to the new JobId - * - Purge the File records from the previous job - */ - if (jcr->getJobType() == JT_MIGRATE && jcr->JobStatus == JS_Terminated) { - Mmsg(query, "UPDATE Job SET Type='%c' WHERE JobId=%s", - (char)JT_MIGRATED_JOB, old_jobid); - db_sql_query(mig_jcr->db, query.c_str(), NULL, NULL); - UAContext *ua = new_ua_context(jcr); - /* Move JobLog to new JobId */ - Mmsg(query, "UPDATE Log SET JobId=%s WHERE JobId=%s", - new_jobid, old_jobid); - db_sql_query(mig_jcr->db, query.c_str(), NULL, NULL); - - if (jcr->job->PurgeMigrateJob) { - /* Purge old Job record */ - purge_jobs_from_catalog(ua, old_jobid); - } else { - /* Purge all old file records, but leave Job record */ - purge_files_from_jobs(ua, old_jobid); - } - - free_ua_context(ua); - } - - /* - * If we terminated a Copy (rather than a Migration) normally: - * - copy any Log records to the new JobId - * - set type="Job Copy" for the new job - */ - if (jcr->getJobType() == JT_COPY && jcr->JobStatus == JS_Terminated) { - /* Copy JobLog to new JobId */ - Mmsg(query, "INSERT INTO Log (JobId, Time, LogText ) " - "SELECT %s, Time, LogText FROM Log WHERE JobId=%s", - new_jobid, old_jobid); - db_sql_query(mig_jcr->db, query.c_str(), NULL, NULL); - Mmsg(query, "UPDATE Job SET Type='%c' WHERE JobId=%s", - (char)JT_JOB_COPY, new_jobid); - db_sql_query(mig_jcr->db, query.c_str(), NULL, NULL); - } - - if (!db_get_job_record(jcr, jcr->db, &jcr->jr)) { - Jmsg(jcr, M_WARNING, 0, _("Error getting Job record for Job report: ERR=%s"), - db_strerror(jcr->db)); - jcr->setJobStatus(JS_ErrorTerminated); - } - - update_bootstrap_file(mig_jcr); - - if (!db_get_job_volume_names(mig_jcr, mig_jcr->db, mig_jcr->jr.JobId, &mig_jcr->VolumeName)) { - /* - * Note, if the job has failed, most likely it did not write any - * tape, so suppress this "error" message since in that case - * it is normal. Or look at it the other way, only for a - * normal exit should we complain about this error. - */ - if (jcr->JobStatus == JS_Terminated && jcr->jr.JobBytes) { - Jmsg(jcr, M_ERROR, 0, "%s", db_strerror(mig_jcr->db)); - } - mig_jcr->VolumeName[0] = 0; /* none */ - } - - if (mig_jcr->VolumeName[0]) { - /* Find last volume name. Multiple vols are separated by | */ - char *p = strrchr(mig_jcr->VolumeName, '|'); - if (p) { - p++; /* skip | */ - } else { - p = mig_jcr->VolumeName; /* no |, take full name */ - } - bstrncpy(mr.VolumeName, p, sizeof(mr.VolumeName)); - if (!db_get_media_record(jcr, jcr->db, &mr)) { - Jmsg(jcr, M_WARNING, 0, _("Error getting Media record for Volume \"%s\": ERR=%s"), - mr.VolumeName, db_strerror(jcr->db)); - } - } - - switch (jcr->JobStatus) { - case JS_Terminated: - if (jcr->JobErrors || jcr->SDErrors) { - term_msg = _("%s OK -- with warnings"); - } else { - term_msg = _("%s OK"); - } - break; - case JS_FatalError: - case JS_ErrorTerminated: - term_msg = _("*** %s Error ***"); - msg_type = M_ERROR; /* Generate error message */ - if (jcr->store_bsock) { - bnet_sig(jcr->store_bsock, BNET_TERMINATE); - if (jcr->SD_msg_chan) { - pthread_cancel(jcr->SD_msg_chan); - } - } - break; - case JS_Canceled: - term_msg = _("%s Canceled"); - if (jcr->store_bsock) { - bnet_sig(jcr->store_bsock, BNET_TERMINATE); - if (jcr->SD_msg_chan) { - pthread_cancel(jcr->SD_msg_chan); - } - } - break; - default: - term_msg = _("Inappropriate %s term code"); - break; - } - } else { - if (jcr->getJobType() == JT_MIGRATE && jcr->previous_jr.JobId != 0) { - /* Mark previous job as migrated */ - Mmsg(query, "UPDATE Job SET Type='%c' WHERE JobId=%s", - (char)JT_MIGRATED_JOB, edit_uint64(jcr->previous_jr.JobId, ec1)); - db_sql_query(jcr->db, query.c_str(), NULL, NULL); - } - term_msg = _("%s -- no files to %s"); - } - - bsnprintf(term_code, sizeof(term_code), term_msg, jcr->get_OperationName(), jcr->get_ActionName(0)); - bstrftimes(sdt, sizeof(sdt), jcr->jr.StartTime); - bstrftimes(edt, sizeof(edt), jcr->jr.EndTime); - RunTime = jcr->jr.EndTime - jcr->jr.StartTime; - if (RunTime <= 0) { - kbps = 0; - } else { - kbps = (double)jcr->SDJobBytes / (1000 * RunTime); - } - - jobstatus_to_ascii(jcr->SDJobStatus, sd_term_msg, sizeof(sd_term_msg)); - - Jmsg(jcr, msg_type, 0, _("%s %s %s (%s):\n" -" Build OS: %s %s %s\n" -" Prev Backup JobId: %s\n" -" Prev Backup Job: %s\n" -" New Backup JobId: %s\n" -" Current JobId: %s\n" -" Current Job: %s\n" -" Backup Level: %s%s\n" -" Client: %s\n" -" FileSet: \"%s\" %s\n" -" Read Pool: \"%s\" (From %s)\n" -" Read Storage: \"%s\" (From %s)\n" -" Write Pool: \"%s\" (From %s)\n" -" Write Storage: \"%s\" (From %s)\n" -" Catalog: \"%s\" (From %s)\n" -" Start time: %s\n" -" End time: %s\n" -" Elapsed time: %s\n" -" Priority: %d\n" -" SD Files Written: %s\n" -" SD Bytes Written: %s (%sB)\n" -" Rate: %.1f KB/s\n" -" Volume name(s): %s\n" -" Volume Session Id: %d\n" -" Volume Session Time: %d\n" -" Last Volume Bytes: %s (%sB)\n" -" SD Errors: %d\n" -" SD termination status: %s\n" -" Termination: %s\n\n"), - BACULA, my_name, VERSION, LSMDATE, - HOST_OS, DISTNAME, DISTVER, - edit_uint64(jcr->previous_jr.JobId, ec6), - jcr->previous_jr.Job, - mig_jcr ? edit_uint64(mig_jcr->jr.JobId, ec7) : "0", - edit_uint64(jcr->jr.JobId, ec8), - jcr->jr.Job, - level_to_str(jcr->getJobLevel()), jcr->since, - jcr->client->name(), - jcr->fileset->name(), jcr->FSCreateTime, - jcr->rpool->name(), jcr->rpool_source, - jcr->rstore?jcr->rstore->name():"*None*", - NPRT(jcr->rstore_source), - jcr->pool->name(), jcr->pool_source, - jcr->wstore?jcr->wstore->name():"*None*", - NPRT(jcr->wstore_source), - jcr->catalog->name(), jcr->catalog_source, - sdt, - edt, - edit_utime(RunTime, elapsed, sizeof(elapsed)), - jcr->JobPriority, - edit_uint64_with_commas(jcr->SDJobFiles, ec1), - edit_uint64_with_commas(jcr->SDJobBytes, ec2), - edit_uint64_with_suffix(jcr->SDJobBytes, ec3), - (float)kbps, - mig_jcr ? mig_jcr->VolumeName : "", - jcr->VolSessionId, - jcr->VolSessionTime, - edit_uint64_with_commas(mr.VolBytes, ec4), - edit_uint64_with_suffix(mr.VolBytes, ec5), - jcr->SDErrors, - sd_term_msg, - term_code); - - Dmsg1(100, "migrate_cleanup() mig_jcr=0x%x\n", jcr->mig_jcr); - if (jcr->mig_jcr) { - free_jcr(jcr->mig_jcr); - jcr->mig_jcr = NULL; - } - Dmsg0(100, "Leave migrate_cleanup()\n"); -} - -/* - * Return next DBId from comma separated list - * - * Returns: - * 1 if next DBId returned - * 0 if no more DBIds are in list - * -1 there is an error - */ -static int get_next_dbid_from_list(char **p, DBId_t *DBId) -{ - const int maxlen = 30; - char id[maxlen+1]; - char *q = *p; - - id[0] = 0; - for (int i=0; iNextPool; - - if (!wpool) { - Jmsg(jcr, M_FATAL, 0, _("No Next Pool specification found in Pool \"%s\".\n"), - pool->hdr.name); - return false; - } - - if (!wpool->storage || wpool->storage->size() == 0) { - Jmsg(jcr, M_FATAL, 0, _("No Storage specification found in Next Pool \"%s\".\n"), - wpool->name()); - return false; - } - - /* If pool storage specified, use it instead of job storage for backup */ - copy_wstorage(jcr, wpool->storage, _("Storage from Pool's NextPool resource")); - return true; -} diff --git a/bacula/src/dird/mountreq.c b/bacula/src/dird/mountreq.c index 35f57dfee8..52a178b388 100644 --- a/bacula/src/dird/mountreq.c +++ b/bacula/src/dird/mountreq.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2001-2012 Free Software Foundation Europe e.V. + Copyright (C) 2001-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * diff --git a/bacula/src/dird/msgchan.c b/bacula/src/dird/msgchan.c index 686f0c7af6..c012e2cee5 100644 --- a/bacula/src/dird/msgchan.c +++ b/bacula/src/dird/msgchan.c @@ -1,36 +1,24 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2009 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * * Bacula Director -- msgchan.c -- handles the message channel * to the Storage daemon and the File daemon. * - * Kern Sibbald, August MM + * Written by Kern Sibbald, August MM * * This routine runs as a thread and must be thread reentrant. * @@ -48,10 +36,11 @@ static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; /* Commands sent to Storage daemon */ -static char jobcmd[] = "JobId=%s job=%s job_name=%s client_name=%s " +static char jobcmd[] = "JobId=%s job=%s job_name=%s client_name=%s " "type=%d level=%d FileSet=%s NoAttr=%d SpoolAttr=%d FileSetMD5=%s " "SpoolData=%d WritePartAfterJob=%d PreferMountedVols=%d SpoolSize=%s " - "rerunning=%d VolSessionId=%d VolSessionTime=%d\n"; + "rerunning=%d VolSessionId=%d VolSessionTime=%d sd_client=%d " + "Authorization=%s\n"; static char use_storage[] = "use storage=%s media_type=%s pool_name=%s " "pool_type=%s append=%d copy=%d stripe=%d\n"; static char use_device[] = "use device=%s\n"; @@ -69,6 +58,29 @@ static char Job_end[] = /* Forward referenced functions */ extern "C" void *msg_thread(void *arg); +BSOCK *open_sd_bsock(UAContext *ua) +{ + STORE *store = ua->jcr->wstore; + + if (!is_bsock_open(ua->jcr->store_bsock)) { + ua->send_msg(_("Connecting to Storage daemon %s at %s:%d ...\n"), + store->name(), store->address, store->SDport); + if (!connect_to_storage_daemon(ua->jcr, 10, SDConnectTimeout, 1)) { + ua->error_msg(_("Failed to connect to Storage daemon.\n")); + return NULL; + } + } + return ua->jcr->store_bsock; +} + +void close_sd_bsock(UAContext *ua) +{ + if (ua->jcr->store_bsock) { + ua->jcr->store_bsock->signal(BNET_TERMINATE); + free_bsock(ua->jcr->store_bsock); + } +} + /* * Establish a message channel connection with the Storage daemon * and perform authentication. @@ -76,13 +88,16 @@ extern "C" void *msg_thread(void *arg); bool connect_to_storage_daemon(JCR *jcr, int retry_interval, int max_retry_time, int verbose) { - BSOCK *sd = new_bsock(); + BSOCK *sd = jcr->store_bsock; STORE *store; - utime_t heart_beat; + utime_t heart_beat; - if (jcr->store_bsock) { + if (is_bsock_open(sd)) { return true; /* already connected */ } + if (!sd) { + sd = new_bsock(); + } /* If there is a write storage use it */ if (jcr->wstore) { @@ -93,19 +108,18 @@ bool connect_to_storage_daemon(JCR *jcr, int retry_interval, if (store->heartbeat_interval) { heart_beat = store->heartbeat_interval; - } else { + } else { heart_beat = director->heartbeat_interval; } /* * Open message channel with the Storage daemon */ - Dmsg2(100, "bnet_connect to Storage daemon %s:%d\n", store->address, + Dmsg2(100, "Connect to Storage daemon %s:%d\n", store->address, store->SDport); sd->set_source_address(director->DIRsrc_addr); if (!sd->connect(jcr, retry_interval, max_retry_time, heart_beat, _("Storage daemon"), store->address, NULL, store->SDport, verbose)) { - sd->destroy(); sd = NULL; } @@ -117,20 +131,19 @@ bool connect_to_storage_daemon(JCR *jcr, int retry_interval, if (!authenticate_storage_daemon(jcr, store)) { sd->close(); - jcr->store_bsock = NULL; return false; } return true; } /* - * Here we ask the SD to send us the info for a + * Here we ask the SD to send us the info for a * particular device resource. */ #ifdef xxx bool update_device_res(JCR *jcr, DEVICE *dev) { - POOL_MEM device_name; + POOL_MEM device_name; BSOCK *sd; if (!connect_to_storage_daemon(jcr, 5, 30, 0)) { return false; @@ -158,12 +171,13 @@ bool start_storage_daemon_job(JCR *jcr, alist *rstore, alist *wstore, bool send_ bool ok = true; STORE *storage; BSOCK *sd; - char auth_key[100]; + char sd_auth_key[100]; POOL_MEM store_name, device_name, pool_name, pool_type, media_type; POOL_MEM job_name, client_name, fileset_name; int copy = 0; int stripe = 0; char ed1[30], ed2[30]; + int sd_client; sd = jcr->store_bsock; /* @@ -187,26 +201,37 @@ bool start_storage_daemon_job(JCR *jcr, alist *rstore, alist *wstore, bool send_ sd->fsend("cancel Job=%s\n", jcr->Job); while (sd->recv() >= 0) { } - } - sd->fsend(jobcmd, edit_int64(jcr->JobId, ed1), jcr->Job, - job_name.c_str(), client_name.c_str(), + } + + sd_client = jcr->sd_client; + if (jcr->sd_auth_key) { + bstrncpy(sd_auth_key, jcr->sd_auth_key, sizeof(sd_auth_key)); + } else { + bstrncpy(sd_auth_key, "dummy", sizeof(sd_auth_key)); + } + + sd->fsend(jobcmd, edit_int64(jcr->JobId, ed1), jcr->Job, + job_name.c_str(), client_name.c_str(), jcr->getJobType(), jcr->getJobLevel(), fileset_name.c_str(), !jcr->pool->catalog_files, - jcr->job->SpoolAttributes, jcr->fileset->MD5, jcr->spool_data, + jcr->job->SpoolAttributes, jcr->fileset->MD5, jcr->spool_data, jcr->write_part_after_job, jcr->job->PreferMountedVolumes, edit_int64(jcr->spool_size, ed2), jcr->rerunning, - jcr->VolSessionId, jcr->VolSessionTime); + jcr->VolSessionId, jcr->VolSessionTime, sd_client, + sd_auth_key); + Dmsg1(100, ">stored: %s", sd->msg); + Dmsg2(100, "=== rstore=%p wstore=%p\n", rstore, wstore); if (bget_dirmsg(sd) > 0) { Dmsg1(100, "msg); if (sscanf(sd->msg, OKjob, &jcr->VolSessionId, - &jcr->VolSessionTime, &auth_key) != 3) { + &jcr->VolSessionTime, &sd_auth_key) != 3) { Dmsg1(100, "BadJob=%s\n", sd->msg); Jmsg(jcr, M_FATAL, 0, _("Storage daemon rejected Job command: %s\n"), sd->msg); return false; } else { bfree_and_null(jcr->sd_auth_key); - jcr->sd_auth_key = bstrdup(auth_key); + jcr->sd_auth_key = bstrdup(sd_auth_key); Dmsg1(150, "sd_auth_key=%s\n", jcr->sd_auth_key); } } else { @@ -221,8 +246,8 @@ bool start_storage_daemon_job(JCR *jcr, alist *rstore, alist *wstore, bool send_ } /* - * We have two loops here. The first comes from the - * Storage = associated with the Job, and we need + * We have two loops here. The first comes from the + * Storage = associated with the Job, and we need * to attach to each one. * The inner loop loops over all the alternative devices * associated with each Storage. It selects the first @@ -246,9 +271,13 @@ bool start_storage_daemon_job(JCR *jcr, alist *rstore, alist *wstore, bool send_ Dmsg1(100, "Rstore=%s\n", storage->name()); pm_strcpy(store_name, storage->name()); bash_spaces(store_name); - pm_strcpy(media_type, storage->media_type); + if (jcr->media_type) { + pm_strcpy(media_type, jcr->media_type); /* user override */ + } else { + pm_strcpy(media_type, storage->media_type); + } bash_spaces(media_type); - sd->fsend(use_storage, store_name.c_str(), media_type.c_str(), + sd->fsend(use_storage, store_name.c_str(), media_type.c_str(), pool_name.c_str(), pool_type.c_str(), 0, copy, stripe); Dmsg1(100, "rstore >stored: %s", sd->msg); DEVICE *dev; @@ -281,11 +310,12 @@ bool start_storage_daemon_job(JCR *jcr, alist *rstore, alist *wstore, bool send_ bash_spaces(pool_type); bash_spaces(pool_name); foreach_alist(storage, wstore) { + Dmsg1(100, "Wstore=%s\n", storage->name()); pm_strcpy(store_name, storage->name()); bash_spaces(store_name); pm_strcpy(media_type, storage->media_type); bash_spaces(media_type); - sd->fsend(use_storage, store_name.c_str(), media_type.c_str(), + sd->fsend(use_storage, store_name.c_str(), media_type.c_str(), pool_name.c_str(), pool_type.c_str(), 1, copy, stripe); Dmsg1(100, "wstore >stored: %s", sd->msg); @@ -318,9 +348,9 @@ bool start_storage_daemon_job(JCR *jcr, alist *rstore, alist *wstore, bool send_ Jmsg(jcr, M_FATAL, 0, _("\n" " Storage daemon didn't accept Device \"%s\" because:\n %s"), device_name.c_str(), err_msg.c_str()/* sd->msg */); - } else { + } else { Jmsg(jcr, M_FATAL, 0, _("\n" - " Storage daemon didn't accept Device \"%s\" command.\n"), + " Storage daemon didn't accept Device \"%s\" command.\n"), device_name.c_str()); } } @@ -339,7 +369,7 @@ bool start_storage_daemon_message_thread(JCR *jcr) jcr->inc_use_count(); /* mark in use by msg thread */ jcr->sd_msg_thread_done = false; jcr->SD_msg_chan = 0; - Dmsg0(100, "Start SD msg_thread.\n"); + Dmsg0(150, "Start SD msg_thread.\n"); if ((status=pthread_create(&thid, NULL, msg_thread, (void *)jcr)) != 0) { berrno be; Jmsg1(jcr, M_ABORT, 0, _("Cannot create message thread: %s\n"), be.bstrerror(status)); @@ -351,7 +381,7 @@ bool start_storage_daemon_message_thread(JCR *jcr) return false; } } - Dmsg1(100, "SD msg_thread started. use=%d\n", jcr->use_count()); + Dmsg1(150, "SD msg_thread started. use=%d\n", jcr->use_count()); return true; } @@ -409,14 +439,16 @@ extern "C" void *msg_thread(void *arg) } Dmsg1(400, "end loop use=%d\n", jcr->use_count()); } - if (n == BNET_HARDEOF) { + if (n == BNET_HARDEOF && jcr->getJobStatus() != JS_Canceled) { /* * This probably should be M_FATAL, but I am not 100% sure * that this return *always* corresponds to a dropped line. */ - Qmsg(jcr, M_ERROR, 0, _("Director's comm line to SD dropped.\n")); + Qmsg(jcr, M_ERROR, 0, _("Director's connection to SD for this Job was lost.\n")); } - if (is_bnet_error(sd)) { + if (jcr->getJobStatus() == JS_Canceled) { + jcr->SDJobStatus = JS_Canceled; + } else if (sd->is_error()) { jcr->SDJobStatus = JS_ErrorTerminated; } pthread_cleanup_pop(1); /* remove and execute the handler */ @@ -487,7 +519,7 @@ bool send_bootstrap_file(JCR *jcr, BSOCK *sd) if (jcr->unlink_bsr) { unlink(jcr->RestoreBootstrap); jcr->unlink_bsr = false; - } + } return true; } @@ -518,8 +550,7 @@ extern "C" void *device_thread(void *arg) } } UnlockRes(); - bnet_close(jcr->store_bsock); - jcr->store_bsock = NULL; + free_bsock(jcr->store_bsock); break; } diff --git a/bacula/src/dird/newvol.c b/bacula/src/dird/newvol.c index d1941cf771..2f7eab3b9d 100644 --- a/bacula/src/dird/newvol.c +++ b/bacula/src/dird/newvol.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2012 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * @@ -62,7 +50,7 @@ bool newVolume(JCR *jcr, MEDIA_DBR *mr, STORE *store) /* See if we can create a new Volume */ db_lock(jcr->db); pr.PoolId = mr->PoolId; - if (!db_get_pool_record(jcr, jcr->db, &pr)) { + if (!db_get_pool_numvols(jcr, jcr->db, &pr)) { goto bail_out; } if (pr.MaxVols == 0 || pr.NumVols < pr.MaxVols) { @@ -70,7 +58,6 @@ bool newVolume(JCR *jcr, MEDIA_DBR *mr, STORE *store) set_pool_dbr_defaults_in_media_dbr(mr, &pr); jcr->VolumeName[0] = 0; bstrncpy(mr->MediaType, jcr->wstore->media_type, sizeof(mr->MediaType)); - generate_job_event(jcr, "NewVolume"); /* return bool */ generate_plugin_event(jcr, bDirEventNewVolume); /* return void... */ if (jcr->VolumeName[0] && is_volume_name_legal(NULL, jcr->VolumeName)) { bstrncpy(mr->VolumeName, jcr->VolumeName, sizeof(mr->VolumeName)); @@ -92,7 +79,7 @@ bool newVolume(JCR *jcr, MEDIA_DBR *mr, STORE *store) goto bail_out; } } - } else { + } else { goto bail_out; } pr.NumVols++; @@ -100,9 +87,10 @@ bool newVolume(JCR *jcr, MEDIA_DBR *mr, STORE *store) set_storageid_in_mr(store, mr); if (db_create_media_record(jcr, jcr->db, mr) && db_update_pool_record(jcr, jcr->db, &pr)) { - db_unlock(jcr->db); - Jmsg(jcr, M_INFO, 0, _("Created new Volume \"%s\" in catalog.\n"), mr->VolumeName); + Jmsg(jcr, M_INFO, 0, _("Created new Volume=\"%s\", Pool=\"%s\", MediaType=\"%s\" in catalog.\n"), + mr->VolumeName, pr.Name, mr->MediaType); Dmsg1(90, "Created new Volume=%s\n", mr->VolumeName); + db_unlock(jcr->db); return true; } else { Jmsg(jcr, M_ERROR, 0, "%s", db_strerror(jcr->db)); @@ -125,7 +113,7 @@ static bool create_simple_name(JCR *jcr, MEDIA_DBR *mr, POOL_DBR *pr) mr->VolumeName[0] = 0; bstrncpy(name, pr->LabelFormat, sizeof(name)); ctx.value = 0; - Mmsg(query, "SELECT MAX(MediaId) FROM Media,Pool WHERE Pool.PoolId=%s", + Mmsg(query, "SELECT MAX(MediaId) FROM Media,Pool WHERE Pool.PoolId=%s", edit_int64(pr->PoolId, ed1)); if (!db_sql_query(jcr->db, query.c_str(), db_int64_handler, (void *)&ctx)) { Jmsg(jcr, M_WARNING, 0, _("SQL failed, but ignored. ERR=%s\n"), db_strerror(jcr->db)); diff --git a/bacula/src/dird/next_vol.c b/bacula/src/dird/next_vol.c index ebae0779e9..74238fc026 100644 --- a/bacula/src/dird/next_vol.c +++ b/bacula/src/dird/next_vol.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2001-2012 Free Software Foundation Europe e.V. + Copyright (C) 2001-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * @@ -31,7 +19,7 @@ * volume for append. Split out of catreq.c August MMIII * catalog request from the Storage daemon. - * Kern Sibbald, March MMI + * Written by Kern Sibbald, March MMI * */ @@ -40,12 +28,19 @@ static int const dbglvl = 50; /* debug level */ -/* Set storage id if possible */ +/* + * We setup the StorageId if it is + * an autochanger from the Storage and put it in + * the media record. + * store == NULL => use existing StorageId + */ void set_storageid_in_mr(STORE *store, MEDIA_DBR *mr) { - if (store != NULL) { - mr->StorageId = store->StorageId; + if (!store) { + return; } + /* At this point we know store != NULL */ + mr->StorageId = store->StorageId; } /* @@ -58,7 +53,7 @@ void set_storageid_in_mr(STORE *store, MEDIA_DBR *mr) * MEDIA_DBR mr with PoolId set * create -- whether or not to create a new volume */ -int find_next_volume_for_append(JCR *jcr, MEDIA_DBR *mr, int index, +int find_next_volume_for_append(JCR *jcr, MEDIA_DBR *mr, int index, bool create, bool prune) { int retry = 0; @@ -67,13 +62,15 @@ int find_next_volume_for_append(JCR *jcr, MEDIA_DBR *mr, int index, STORE *store = jcr->wstore; bstrncpy(mr->MediaType, store->media_type, sizeof(mr->MediaType)); - Dmsg3(dbglvl, "find_next_vol_for_append: JobId=%u PoolId=%d, MediaType=%s\n", - (uint32_t)jcr->JobId, (int)mr->PoolId, mr->MediaType); + Dmsg6(dbglvl, "find_next_vol_for_append: JobId=%u PoolId=%d, MediaType=%s index=%d create=%d prune=%d\n", + (uint32_t)jcr->JobId, (int)mr->PoolId, mr->MediaType, index, + create, prune); /* * If we are using an Autochanger, restrict Volume * search to the Autochanger on the first pass */ - InChanger = store->autochanger; + InChanger = (store->autochanger)? true : false; + /* * Find the Next Volume for Append */ @@ -119,7 +116,7 @@ int find_next_volume_for_append(JCR *jcr, MEDIA_DBR *mr, int index, ok, index, InChanger, mr->VolStatus); /* * 5. Try pulling a volume from the Scratch pool - */ + */ ok = get_scratch_volume(jcr, InChanger, mr, store); set_storageid_in_mr(store, mr); /* put StorageId in new record */ Dmsg4(dbglvl, "after get scratch volume ok=%d index=%d InChanger=%d Vstat=%s\n", @@ -127,7 +124,7 @@ int find_next_volume_for_append(JCR *jcr, MEDIA_DBR *mr, int index, } /* * If we are using an Autochanger and have not found - * a volume, retry looking for any volume. + * a volume, retry looking for any volume. */ if (!ok && InChanger) { InChanger = false; @@ -216,7 +213,7 @@ bool has_volume_expired(JCR *jcr, MEDIA_DBR *mr) /* First handle Max Volume Bytes */ if ((mr->MaxVolBytes > 0 && mr->VolBytes >= mr->MaxVolBytes)) { Jmsg(jcr, M_INFO, 0, _("Max Volume bytes=%s exceeded. " - "Marking Volume \"%s\" as Full.\n"), + "Marking Volume \"%s\" as Full.\n"), edit_uint64_with_commas(mr->MaxVolBytes, ed1), mr->VolumeName); bstrncpy(mr->VolStatus, "Full", sizeof(mr->VolStatus)); expired = true; @@ -231,7 +228,7 @@ bool has_volume_expired(JCR *jcr, MEDIA_DBR *mr) /* Now see if Max Jobs written to volume */ } else if (mr->MaxVolJobs > 0 && mr->MaxVolJobs <= mr->VolJobs) { Jmsg(jcr, M_INFO, 0, _("Max Volume jobs=%s exceeded. " - "Marking Volume \"%s\" as Used.\n"), + "Marking Volume \"%s\" as Used.\n"), edit_uint64_with_commas(mr->MaxVolJobs, ed1), mr->VolumeName); Dmsg3(dbglvl, "MaxVolJobs=%d JobId=%d Vol=%s\n", mr->MaxVolJobs, (uint32_t)jcr->JobId, mr->VolumeName); @@ -241,7 +238,7 @@ bool has_volume_expired(JCR *jcr, MEDIA_DBR *mr) /* Now see if Max Files written to volume */ } else if (mr->MaxVolFiles > 0 && mr->MaxVolFiles <= mr->VolFiles) { Jmsg(jcr, M_INFO, 0, _("Max Volume files=%s exceeded. " - "Marking Volume \"%s\" as Used.\n"), + "Marking Volume \"%s\" as Used.\n"), edit_uint64_with_commas(mr->MaxVolFiles, ed1), mr->VolumeName); bstrncpy(mr->VolStatus, "Used", sizeof(mr->VolStatus)); expired = true; @@ -252,7 +249,7 @@ bool has_volume_expired(JCR *jcr, MEDIA_DBR *mr) /* See if Vol Use has expired */ if (mr->VolUseDuration <= (now - mr->FirstWritten)) { Jmsg(jcr, M_INFO, 0, _("Max configured use duration=%s sec. exceeded. " - "Marking Volume \"%s\" as Used.\n"), + "Marking Volume \"%s\" as Used.\n"), edit_uint64_with_commas(mr->VolUseDuration, ed1), mr->VolumeName); bstrncpy(mr->VolStatus, "Used", sizeof(mr->VolStatus)); expired = true; @@ -374,10 +371,10 @@ bool get_scratch_volume(JCR *jcr, bool InChanger, MEDIA_DBR *mr, /* Only one thread at a time can pull from the scratch pool */ P(mutex); - /* + /* * Get Pool record for Scratch Pool * choose between ScratchPoolId and Scratch - * db_get_pool_record will first try ScratchPoolId, + * db_get_pool_numvols will first try ScratchPoolId, * and then try the pool named Scratch */ memset(&spr, 0, sizeof(spr)); @@ -385,9 +382,6 @@ bool get_scratch_volume(JCR *jcr, bool InChanger, MEDIA_DBR *mr, spr.PoolId = mr->ScratchPoolId; if (db_get_pool_record(jcr, jcr->db, &spr)) { smr.PoolId = spr.PoolId; - if (InChanger) { - smr.StorageId = mr->StorageId; /* want only Scratch Volumes in changer */ - } bstrncpy(smr.VolStatus, "Append", sizeof(smr.VolStatus)); /* want only appendable volumes */ bstrncpy(smr.MediaType, mr->MediaType, sizeof(smr.MediaType)); @@ -410,19 +404,19 @@ bool get_scratch_volume(JCR *jcr, bool InChanger, MEDIA_DBR *mr, if (found) { POOL_MEM query(PM_MESSAGE); - /* + /* * Get pool record where the Scratch Volume will go to ensure * that we can add a Volume. */ memset(&pr, 0, sizeof(pr)); bstrncpy(pr.Name, jcr->pool->name(), sizeof(pr.Name)); - if (!db_get_pool_record(jcr, jcr->db, &pr)) { - Jmsg(jcr, M_WARNING, 0, _("Unable to get Pool record: ERR=%s"), + if (!db_get_pool_numvols(jcr, jcr->db, &pr)) { + Jmsg(jcr, M_WARNING, 0, _("Unable to get Pool record: ERR=%s"), db_strerror(jcr->db)); goto bail_out; } - + /* Make sure there is room for another volume */ if (pr.MaxVols > 0 && pr.NumVols >= pr.MaxVols) { Jmsg(jcr, M_WARNING, 0, _("Unable add Scratch Volume, Pool \"%s\" full MaxVols=%d\n"), @@ -450,9 +444,9 @@ bool get_scratch_volume(JCR *jcr, bool InChanger, MEDIA_DBR *mr, goto bail_out; } - Jmsg(jcr, M_INFO, 0, _("Using Volume \"%s\" from 'Scratch' pool.\n"), + Jmsg(jcr, M_INFO, 0, _("Using Volume \"%s\" from 'Scratch' pool.\n"), mr->VolumeName); - + ok = true; } } diff --git a/bacula/src/dird/protos.h b/bacula/src/dird/protos.h index cd913c8df3..6c86360fc8 100644 --- a/bacula/src/dird/protos.h +++ b/bacula/src/dird/protos.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2012 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Director external function prototypes @@ -60,7 +48,11 @@ extern bool do_backup(JCR *jcr); extern void backup_cleanup(JCR *jcr, int TermCode); extern void update_bootstrap_file(JCR *jcr); extern bool send_accurate_current_files(JCR *jcr); - +extern char *get_storage_address(CLIENT *cli, STORE *store); +extern bool run_storage_and_start_message_thread(JCR *jcr, BSOCK *sd); +extern bool send_client_addr_to_sd(JCR *jcr); +extern bool send_store_addr_to_fd(JCR *jcr, STORE *store, + char *store_address, uint32_t store_port); /* vbackup.c */ extern bool do_vbackup_init(JCR *jcr); @@ -97,9 +89,11 @@ int variable_expansion(JCR *jcr, char *inp, POOLMEM **exp); /* fd_cmds.c */ extern int connect_to_file_daemon(JCR *jcr, int retry_interval, int max_retry_time, int verbose); +extern bool send_ls_fileset(JCR *jcr, const char *path); extern bool send_include_list(JCR *jcr); extern bool send_exclude_list(JCR *jcr); extern bool send_level_command(JCR *jcr); +extern bool send_bwlimit(JCR *jcr, const char *Job); extern int get_attributes_and_put_in_catalog(JCR *jcr); extern void get_attributes_and_compare_to_catalog(JCR *jcr, JobId_t JobId); extern int put_file_into_catalog(JCR *jcr, long file_index, char *fname, @@ -107,6 +101,7 @@ extern int put_file_into_catalog(JCR *jcr, long file_index, char *fname, extern void get_level_since_time(JCR *jcr, char *since, int since_len); extern int send_runscripts_commands(JCR *jcr); extern bool send_restore_objects(JCR *jcr); +extern bool send_component_info(JCR *jcr); /* getmsg.c */ enum e_prtmsg { @@ -124,8 +119,9 @@ extern bool get_or_create_client_record(JCR *jcr); extern bool get_or_create_fileset_record(JCR *jcr); extern DBId_t get_or_create_pool_record(JCR *jcr, char *pool_name); extern void apply_pool_overrides(JCR *jcr); +extern bool apply_wstorage_overrides(JCR *jcr, POOL *original_pool); extern JobId_t run_job(JCR *jcr); -extern bool cancel_job(UAContext *ua, JCR *jcr); +extern bool cancel_job(UAContext *ua, JCR *jcr, bool cancel = true); extern void get_job_storage(USTORE *store, JOB *job, RUN *run); extern void init_jcr_job_record(JCR *jcr); extern void update_job_end(JCR *jcr, int TermCode); @@ -151,17 +147,20 @@ extern void sd_msg_thread_send_signal(JCR *jcr, int sig); extern bool inc_read_store(JCR *jcr); extern void dec_read_store(JCR *jcr); -/* migration.c */ -extern bool do_migration(JCR *jcr); -extern bool do_migration_init(JCR *jcr); -extern void migration_cleanup(JCR *jcr, int TermCode); -extern bool set_migration_wstorage(JCR *jcr, POOL *pool); +/* mac.c */ +extern bool do_mac(JCR *jcr); +extern bool do_mac_init(JCR *jcr); +extern void mac_cleanup(JCR *jcr, int TermCode, int writeTermCode); +extern bool set_mac_wstorage(UAContext *ua, JCR *jcr, POOL *pool, + POOL *next_pool, const char *source); /* mountreq.c */ extern void mount_request(JCR *jcr, BSOCK *bs, char *buf); /* msgchan.c */ +extern BSOCK *open_sd_bsock(UAContext *ua); +extern void close_sd_bsock(UAContext *ua); extern bool connect_to_storage_daemon(JCR *jcr, int retry_interval, int max_retry_time, int verbose); extern bool start_storage_daemon_job(JCR *jcr, alist *rstore, alist *wstore, @@ -183,10 +182,6 @@ bool get_scratch_volume(JCR *jcr, bool InChanger, MEDIA_DBR *mr, /* newvol.c */ bool newVolume(JCR *jcr, MEDIA_DBR *mr, STORE *store); -/* python.c */ -int generate_job_event(JCR *jcr, const char *event); - - /* restore.c */ extern bool do_restore(JCR *jcr); extern bool do_restore_init(JCR *jcr); @@ -196,6 +191,7 @@ extern void restore_cleanup(JCR *jcr, int TermCode); /* ua_acl.c */ bool acl_access_ok(UAContext *ua, int acl, const char *item); bool acl_access_ok(UAContext *ua, int acl, const char *item, int len); +bool have_restricted_acl(UAContext *ua, int acl); /* ua_cmds.c */ bool do_a_command(UAContext *ua); @@ -216,7 +212,8 @@ void set_pooldbr_from_poolres(POOL_DBR *pr, POOL *pool, e_pool_op op); int update_pool_references(JCR *jcr, B_DB *db, POOL *pool); /* ua_input.c */ -int get_cmd(UAContext *ua, const char *prompt, bool subprompt=false); +bool get_cmd(UAContext *ua, const char *prompt, bool subprompt=false); +bool get_selection_list(UAContext *ua, sellist &sl, const char *prompt, bool subprompt=false); bool get_pint(UAContext *ua, const char *prompt); bool get_yesno(UAContext *ua, const char *prompt); bool is_yesno(char *val, int *ret); @@ -236,6 +233,7 @@ void update_vol_pool(UAContext *ua, char *val, MEDIA_DBR *mr, POOL_DBR *opr); void prtit(void *ctx, const char *msg); bool complete_jcr_for_job(JCR *jcr, JOB *job, POOL *pool); RUN *find_next_run(RUN *run, JOB *job, utime_t &runtime, int ndays); +bool acl_access_jobid_ok(UAContext *ua, const char *jobids); /* ua_restore.c */ void find_storage_resource(UAContext *ua, RESTORE_CTX &rx, char *Storage, char *MediaType); @@ -250,7 +248,7 @@ JCR *new_control_jcr(const char *base_name, int job_type); void free_ua_context(UAContext *ua); /* ua_select.c */ -STORE *select_storage_resource(UAContext *ua); +STORE *select_storage_resource(UAContext *ua, bool unique=false); JOB *select_job_resource(UAContext *ua); JOB *select_enable_disable_job_resource(UAContext *ua, bool enable); JOB *select_restore_job_resource(UAContext *ua); @@ -262,10 +260,12 @@ bool select_pool_dbr(UAContext *ua, POOL_DBR *pr, const char *argk="pool"); bool select_client_dbr(UAContext *ua, CLIENT_DBR *cr); void start_prompt(UAContext *ua, const char *msg); -void add_prompt(UAContext *ua, const char *prompt); +void add_prompt(UAContext *ua, const char *prompt, char *unique=NULL); int do_prompt(UAContext *ua, const char *automsg, const char *msg, char *prompt, int max_prompt); +int do_alist_prompt(UAContext *ua, const char *automsg, const char *msg, + alist *selected); CAT *get_catalog_resource(UAContext *ua); -STORE *get_storage_resource(UAContext *ua, bool use_default); +STORE *get_storage_resource(UAContext *ua, bool use_default, bool unique=false); int get_storage_drive(UAContext *ua, STORE *store); int get_storage_slot(UAContext *ua, STORE *store); int get_media_type(UAContext *ua, char *MediaType, int max_media); @@ -274,6 +274,7 @@ bool get_client_dbr(UAContext *ua, CLIENT_DBR *cr); POOL *get_pool_resource(UAContext *ua); JOB *get_restore_job(UAContext *ua); POOL *select_pool_resource(UAContext *ua); +int select_running_jobs(UAContext *ua, alist *jcrs, const char *reason); CLIENT *get_client_resource(UAContext *ua); int get_job_dbr(UAContext *ua, JOB_DBR *jr); diff --git a/bacula/src/dird/pythondir.c b/bacula/src/dird/pythondir.c deleted file mode 100644 index 1782e7fae4..0000000000 --- a/bacula/src/dird/pythondir.c +++ /dev/null @@ -1,484 +0,0 @@ -/* - Bacula® - The Network Backup Solution - - Copyright (C) 2004-2012 Free Software Foundation Europe e.V. - - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. - - Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. -*/ -/* - * - * Bacula interface to Python for the Director - * - * Kern Sibbald, November MMIV - * - * - */ - -#include "bacula.h" -#include "dird.h" - -#ifdef HAVE_PYTHON -#undef _POSIX_C_SOURCE -#include - -#include - -extern struct s_jl joblevels[]; - -static PyObject *set_job_events(PyObject *self, PyObject *arg); -static PyObject *job_run(PyObject *self, PyObject *arg); -static PyObject *job_write(PyObject *self, PyObject *arg); -static PyObject *job_cancel(PyObject *self, PyObject *arg); -static PyObject *job_does_vol_exist(PyObject *self, PyObject *arg); - -PyMethodDef JobMethods[] = { - {"set_events", set_job_events, METH_VARARGS, "Set Job events"}, - {"run", job_run, METH_VARARGS, "Run a Job"}, - {"write", job_write, METH_VARARGS, "Write to output"}, - {"cancel", job_cancel, METH_VARARGS, "Cancel a Job"}, - {"DoesVolumeExist", job_does_vol_exist, METH_VARARGS, "Does Volume Exist"}, - {NULL, NULL, 0, NULL} /* last item */ -}; - -struct s_vars { - const char *name; - const char *fmt; -}; - -/* Read-only variables */ -static struct s_vars getvars[] = { - { "Job", "s"}, - { "Level", "s"}, - { "Type", "s"}, - { "JobId", "i"}, - { "Client", "s"}, - { "NumVols", "i"}, - { "Pool", "s"}, - { "Storage", "s"}, - { "Catalog", "s"}, - { "MediaType", "s"}, - { "JobName", "s"}, - { "JobStatus", "s"}, - { "Priority", "i"}, - { "VolumeName", "s"}, - { "CatalogRes", "(sssssis)"}, - { "JobErrors", "i"}, - { "JobFiles", "i"}, - { "SDJobFiles", "i"}, - { "SDErrors", "i"}, - { "FDJobStatus","s"}, - { "SDJobStatus","s"}, - - { NULL, NULL} -}; - -/* Writable variables */ -static struct s_vars setvars[] = { - { "JobReport", "s"}, - { "VolumeName", "s"}, - { "Priority", "i"}, - { "JobLevel", "s"}, - - { NULL, NULL} -}; - - -/* Return Job variables */ -/* Returns: NULL if error - * PyObject * return value if OK - */ -PyObject *job_getattr(PyObject *self, char *attrname) -{ - JCR *jcr; - bool found = false; - int i; - char buf[10]; - char errmsg[200]; - - Dmsg0(100, "In job_getattr.\n"); - jcr = get_jcr_from_PyObject(self); - if (!jcr) { - bstrncpy(errmsg, _("Job pointer not found."), sizeof(errmsg)); - goto bail_out; - } - for (i=0; getvars[i].name; i++) { - if (strcmp(getvars[i].name, attrname) == 0) { - found = true; - break; - } - } - if (!found) { - /* Try our methods */ - return Py_FindMethod(JobMethods, self, attrname); - } - switch (i) { - case 0: /* Job */ - return Py_BuildValue((char *)getvars[i].fmt, jcr->job->hdr.name); - case 1: /* level */ - return Py_BuildValue((char *)getvars[i].fmt, job_level_to_str(jcr->getJobLevel())); - case 2: /* type */ - return Py_BuildValue((char *)getvars[i].fmt, job_type_to_str(jcr->getJobType())); - case 3: /* JobId */ - return Py_BuildValue((char *)getvars[i].fmt, jcr->JobId); - case 4: /* Client */ - return Py_BuildValue((char *)getvars[i].fmt, jcr->client->hdr.name); - case 5: /* NumVols */ - POOL_DBR pr; - memset(&pr, 0, sizeof(pr)); - bstrncpy(pr.Name, jcr->pool->hdr.name, sizeof(pr.Name)); - if (db_get_pool_record(jcr, jcr->db, &pr)) { - jcr->NumVols = pr.NumVols; - return Py_BuildValue((char *)getvars[i].fmt, jcr->NumVols); - } else { - bsnprintf(errmsg, sizeof(errmsg), _("Pool record not found.")); - goto bail_out; - } - case 6: /* Pool */ - return Py_BuildValue((char *)getvars[i].fmt, jcr->pool->name()); - case 7: /* Storage */ - if (jcr->wstore) { - return Py_BuildValue((char *)getvars[i].fmt, jcr->wstore->name()); - } else if (jcr->rstore) { - return Py_BuildValue((char *)getvars[i].fmt, jcr->rstore->name()); - } else { - goto bail_out; - } - case 8: - return Py_BuildValue((char *)getvars[i].fmt, jcr->catalog->name()); - case 9: /* MediaType */ - if (jcr->wstore) { - return Py_BuildValue((char *)getvars[i].fmt, jcr->wstore->media_type); - } else if (jcr->rstore) { - return Py_BuildValue((char *)getvars[i].fmt, jcr->rstore->media_type); - } else { - goto bail_out; - } - case 10: /* JobName */ - return Py_BuildValue((char *)getvars[i].fmt, jcr->Job); - case 11: /* JobStatus */ - buf[1] = 0; - buf[0] = jcr->JobStatus; - return Py_BuildValue((char *)getvars[i].fmt, buf); - case 12: /* Priority */ - return Py_BuildValue((char *)getvars[i].fmt, jcr->JobPriority); - case 13: - return Py_BuildValue((char *)getvars[i].fmt, jcr->VolumeName); - case 14: /* CatalogRes */ - return Py_BuildValue((char *)getvars[i].fmt, - jcr->catalog->db_name, jcr->catalog->db_address, - jcr->catalog->db_user, jcr->catalog->db_password, - jcr->catalog->db_socket, jcr->catalog->db_port, - db_get_type(jcr->db)); - case 15: /* JobErrors */ - return Py_BuildValue((char *)getvars[i].fmt, jcr->JobErrors); - case 16: /* JobFiles */ - return Py_BuildValue((char *)getvars[i].fmt, jcr->JobFiles); - case 17: /* SDJobFiles */ - return Py_BuildValue((char *)getvars[i].fmt, jcr->SDJobFiles); - case 18: /* SDErrors */ - return Py_BuildValue((char *)getvars[i].fmt, jcr->SDErrors); - case 19: /* FDJobStatus */ - buf[1] = 0; - buf[0] = jcr->FDJobStatus; - return Py_BuildValue((char *)getvars[i].fmt, buf); - case 20: /* SDJobStatus */ - buf[1] = 0; - buf[0] = jcr->SDJobStatus; - return Py_BuildValue((char *)getvars[i].fmt, buf); - } - bsnprintf(errmsg, sizeof(errmsg), _("Attribute %s not found."), attrname); -bail_out: - PyErr_SetString(PyExc_AttributeError, errmsg); - return NULL; -} - - -/* Set Job variables */ -/* Returns: 0 for OK - * -1 for error - */ -int job_setattr(PyObject *self, char *attrname, PyObject *value) -{ - JCR *jcr; - bool found = false; - char *strval = NULL; - int intval = 0; - int i; - - Dmsg2(100, "In job_setattr=%s val=%p.\n", attrname, value); - if (value == NULL) { /* Cannot delete variables */ - goto bail_out; - } - jcr = get_jcr_from_PyObject(self); - if (!jcr) { - goto bail_out; - } - - /* Find attribute name in list */ - for (i=0; setvars[i].name; i++) { - if (strcmp(setvars[i].name, attrname) == 0) { - found = true; - break; - } - } - if (!found) { - goto bail_out; - } - /* Get argument value */ - if (setvars[i].fmt != NULL) { - switch (setvars[i].fmt[0]) { - case 's': - if (!PyArg_Parse(value, (char *)setvars[i].fmt, &strval)) { - PyErr_SetString(PyExc_TypeError, _("Read-only attribute")); - return -1; - } - break; - case 'i': - if (!PyArg_Parse(value, (char *)setvars[i].fmt, &intval)) { - PyErr_SetString(PyExc_TypeError, _("Read-only attribute")); - return -1; - } - break; - } - } - switch (i) { - case 0: /* JobReport */ - Jmsg(jcr, M_INFO, 0, "%s", strval); - return 0; - case 1: /* VolumeName */ - /* Make sure VolumeName is valid and we are in VolumeName event */ - if (strcmp("NewVolume", jcr->event) == 0 && - is_volume_name_legal(NULL, strval)) { - pm_strcpy(jcr->VolumeName, strval); - Dmsg1(100, "Set Vol=%s\n", strval); - return 0; - } else { - jcr->VolumeName[0] = 0; - } - break; - case 2: /* Priority */ - Dmsg1(000, "Set priority=%d\n", intval); - if (intval >= 1 && intval <= 100) { - jcr->JobPriority = intval; - } else { - PyErr_SetString(PyExc_ValueError, _("Priority must be 1-100")); - return -1; - } - case 3: /* Job Level */ - if (strcmp("JobInit", jcr->event) != 0) { - PyErr_SetString(PyExc_RuntimeError, _("Job Level can be set only during JobInit")); - return -1; - } - if (strval != NULL) { - for (i=0; joblevels[i].level_name; i++) { - if (strcmp(strval, joblevels[i].level_name) == 0) { - if (joblevels[i].job_type == jcr->getJobType()) { - jcr->setJobLevel(joblevels[i].level); - jcr->jr.JobLevel = jcr->getJobLevel(); - return 0; - } - } - } - } - PyErr_SetString(PyExc_ValueError, _("Bad JobLevel string")); - return -1; - } -bail_out: - PyErr_SetString(PyExc_AttributeError, attrname); - return -1; -} - -/* - * Set pointer to instantiated events class - */ -static PyObject *set_job_events(PyObject *self, PyObject *arg) -{ - PyObject *eObject; - JCR *jcr; - - Dmsg0(100, "In set_job_events.\n"); - if (!PyArg_ParseTuple(arg, "O:set_events", &eObject)) { - Dmsg0(000, "Error in ParseTuple\n"); - return NULL; - } - jcr = get_jcr_from_PyObject(self); - Py_XDECREF((PyObject *)jcr->Python_events); - Py_INCREF(eObject); - jcr->Python_events = (void *)eObject; - Py_INCREF(Py_None); - return Py_None; -} - -/* Run a Bacula job */ -static PyObject *job_run(PyObject *self, PyObject *arg) -{ - JCR *jcr; - char *item; - int stat; - - if (!PyArg_ParseTuple(arg, "s:run", &item)) { - Dmsg0(000, "Error in ParseTuple\n"); - return NULL; - } - /* Release lock due to recursion */ -// PyEval_ReleaseLock(); - jcr = get_jcr_from_PyObject(self); - UAContext *ua = new_ua_context(jcr); - ua->batch = true; - pm_strcpy(ua->cmd, item); /* copy command */ - parse_ua_args(ua); /* parse command */ - stat = run_cmd(ua, ua->cmd); - free_ua_context(ua); -// PyEval_AcquireLock(); - return PyInt_FromLong((long)stat); -} - -static PyObject *job_write(PyObject *self, PyObject *args) -{ - char *text = NULL; - - if (!PyArg_ParseTuple(args, "s:write", &text)) { - Dmsg0(000, "Parse tuple error in job_write\n"); - return NULL; - } - if (text) { - JCR *jcr = get_jcr_from_PyObject(self); - Jmsg(jcr, M_INFO, 0, "%s", text); - } - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *job_does_vol_exist(PyObject *self, PyObject *args) -{ - char *VolName = NULL; - - if (!PyArg_ParseTuple(args, "s:does_volume_exist", &VolName)) { - Dmsg0(000, "Parse tuple error in job_does_vol_exist\n"); - return NULL; - } - if (VolName) { - MEDIA_DBR mr; - int ok; - JCR *jcr = get_jcr_from_PyObject(self); - bstrncpy(mr.VolumeName, VolName, sizeof(mr.VolumeName)); - ok = db_get_media_record(jcr, jcr->db, &mr); - return Py_BuildValue("i", ok); - } - Py_INCREF(Py_None); - return Py_None; -} - - -static PyObject *job_cancel(PyObject *self, PyObject *args) -{ - JobId_t JobId = 0; - JCR *jcr; - bool found = false; - - if (!PyArg_ParseTuple(args, "i:cancel", &JobId)) { - Dmsg0(000, "Parse tuple error in job_write\n"); - return NULL; - } - foreach_jcr(jcr) { - if (jcr->JobId == 0) { - continue; - } - if (jcr->JobId == JobId) { - found = true; - break; - } - } - /* endeach_jcr(jcr) not needed because freed below */ - - if (!found) { - /* ***FIXME*** raise exception */ - return NULL; - } -// PyEval_ReleaseLock(); - UAContext *ua = new_ua_context(jcr); - ua->batch = true; - if (!cancel_job(ua, jcr)) { - /* ***FIXME*** raise exception */ - return NULL; - } - free_ua_context(ua); - free_jcr(jcr); -// PyEval_AcquireLock(); - Py_INCREF(Py_None); - return Py_None; -} - -/* - * Generate a Job event, which means look up the event - * method defined by the user, and if it exists, - * call it. - */ -int generate_job_event(JCR *jcr, const char *event) -{ - PyObject *method = NULL; - PyObject *Job = (PyObject *)jcr->Python_job; - PyObject *events = (PyObject *)jcr->Python_events; - PyObject *result = NULL; - int stat = 0; - - if (!Job || !events) { - return 0; - } - - lock_python(); -// PyEval_AcquireLock(); - - method = find_method(events, method, event); - if (!method) { - goto bail_out; - } - - bstrncpy(jcr->event, event, sizeof(jcr->event)); - result = PyObject_CallFunction(method, (char *)"O", Job); - jcr->event[0] = 0; /* no event in progress */ - if (result == NULL) { - if (PyErr_Occurred()) { - PyErr_Print(); - Dmsg1(000, "Error in Python method %s\n", event); - } - } else { - stat = 1; - } - Py_XDECREF(result); - -bail_out: - unlock_python(); -// PyEval_ReleaseLock(); - return stat; -} - -bool python_set_prog(JCR*, char const*) { return false; } - -#else - -/* Dummy if Python not configured */ -int generate_job_event(JCR *jcr, const char *event) { return 1; } - - -#endif /* HAVE_PYTHON */ diff --git a/bacula/src/dird/recycle.c b/bacula/src/dird/recycle.c index 4ceaf0b4c6..4cd2d4f3da 100644 --- a/bacula/src/dird/recycle.c +++ b/bacula/src/dird/recycle.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2002-2012 Free Software Foundation Europe e.V. + Copyright (C) 2002-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * diff --git a/bacula/src/dird/restore.c b/bacula/src/dird/restore.c index eee86be879..3c11120e73 100644 --- a/bacula/src/dird/restore.c +++ b/bacula/src/dird/restore.c @@ -1,34 +1,22 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2011 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /** * Bacula Director -- restore.c -- responsible for restoring files * - * Kern Sibbald, November MM + * Written by Kern Sibbald, November MM * * This routine is run as a separate thread. * @@ -47,11 +35,12 @@ #include "bacula.h" #include "dird.h" +#include "lib/ini.h" /* Commands sent to File daemon */ -static char restorecmd[] = "restore replace=%c prelinks=%d where=%s\n"; -static char restorecmdR[] = "restore replace=%c prelinks=%d regexwhere=%s\n"; -static char storaddr[] = "storage address=%s port=%d ssl=0 Authorization=%s\n"; +static char restorecmd[] = "restore %sreplace=%c prelinks=%d where=%s\n"; +static char restorecmdR[] = "restore %sreplace=%c prelinks=%d regexwhere=%s\n"; +static char storaddr[] = "storage address=%s port=%d ssl=%d Authorization=%s\n"; /* Responses received from File daemon */ static char OKrestore[] = "2000 OK restore\n"; @@ -65,6 +54,7 @@ static void build_restore_command(JCR *jcr, POOL_MEM &ret) { char replace, *where, *cmd; char empty = '\0'; + char files[100]; /* Build the restore command */ @@ -75,7 +65,7 @@ static void build_restore_command(JCR *jcr, POOL_MEM &ret) } else { replace = REPLACE_ALWAYS; /* always replace */ } - + if (jcr->RegexWhere) { where = jcr->RegexWhere; /* override */ cmd = restorecmdR; @@ -92,13 +82,18 @@ static void build_restore_command(JCR *jcr, POOL_MEM &ret) } else { /* nothing was specified */ where = ∅ /* use default */ - cmd = restorecmd; + cmd = restorecmd; } - + jcr->prefix_links = jcr->job->PrefixLinks; bash_spaces(where); - Mmsg(ret, cmd, replace, jcr->prefix_links, where); + if (jcr->FDVersion < 7) { + Mmsg(ret, cmd, "", replace, jcr->prefix_links, where); + } else { + snprintf(files, sizeof(files), "files=%d ", jcr->ExpectedFiles); + Mmsg(ret, cmd, files, replace, jcr->prefix_links, where); + } unbash_spaces(where); } @@ -114,8 +109,8 @@ struct bootstrap_info /** * Open the bootstrap file and find the first Storage= * Returns ok if able to open - * It fills the storage name (should be the first line) - * and the file descriptor to the bootstrap file, + * It fills the storage name (should be the first line) + * and the file descriptor to the bootstrap file, * it should be used for next operations, and need to be closed * at the end. */ @@ -198,11 +193,11 @@ static bool is_on_same_storage(JCR *jcr, char *new_one) /** * Check if the current line contains Storage="xxx", and compare the - * result to the current storage. We use UAContext to analyse the bsr + * result to the current storage. We use UAContext to analyse the bsr * string. * * Returns true if we need to change the storage, and it set the new - * Storage resource name in "storage" arg. + * Storage resource name in "storage" arg. */ static bool check_for_new_storage(JCR *jcr, bootstrap_info &info) { @@ -244,7 +239,7 @@ static bool send_bootstrap_file(JCR *jcr, BSOCK *sock, while(fgets(ua->cmd, UA_CMD_SIZE, bs)) { if (check_for_new_storage(jcr, info)) { /* Otherwise, we need to contact another storage daemon. - * Reset bs to the beginning of the current segment. + * Reset bs to the beginning of the current segment. */ fseeko(bs, pos, SEEK_SET); break; @@ -277,24 +272,22 @@ static bool select_rstore(JCR *jcr, bootstrap_info &info) jcr->setJobStatus(JS_ErrorTerminated); return false; } - + /* - * What does this do??????????? KES + * This releases the store_bsock between calls to the SD. + * I think. */ - if (jcr->store_bsock) { - jcr->store_bsock->destroy(); - jcr->store_bsock = NULL; - } - + free_bsock(jcr->store_bsock); + /* - * release current read storage and get a new one + * release current read storage and get a new one */ dec_read_store(jcr); free_rstorage(jcr); set_rstorage(jcr, &ustore); jcr->setJobStatus(JS_WaitSD); /* - * Wait for up to 6 hours to increment read stoage counter + * Wait for up to 6 hours to increment read stoage counter */ for (i=0; i < MAX_TRIES; i++) { /* try to get read storage counter incremented */ @@ -310,12 +303,12 @@ static bool select_rstore(JCR *jcr, bootstrap_info &info) } /* Failed to inc_read_store() */ free_rstorage(jcr); - Jmsg(jcr, M_FATAL, 0, + Jmsg(jcr, M_FATAL, 0, _("Could not acquire read storage lock for \"%s\""), info.storage); return false; } -/* +/* * Clean the bootstrap_info struct */ static void close_bootstrap_file(bootstrap_info &info) @@ -339,23 +332,24 @@ static void close_bootstrap_file(bootstrap_info &info) */ bool restore_bootstrap(JCR *jcr) { + int tls_need = BNET_TLS_NONE; BSOCK *fd = NULL; BSOCK *sd; + char *store_address; + uint32_t store_port; bool first_time = true; bootstrap_info info; POOL_MEM restore_cmd(PM_MESSAGE); bool ret = false; - /* this command is used for each part */ - build_restore_command(jcr, restore_cmd); - + /* Open the bootstrap file */ if (!open_bootstrap_file(jcr, info)) { goto bail_out; } /* Read the bootstrap file */ while (!feof(info.bs)) { - + if (!select_rstore(jcr, info)) { goto bail_out; } @@ -392,6 +386,7 @@ bool restore_bootstrap(JCR *jcr) goto bail_out; } fd = jcr->file_bsock; + build_restore_command(jcr, restore_cmd); } jcr->setJobStatus(JS_Running); @@ -404,29 +399,59 @@ bool restore_bootstrap(JCR *jcr) goto bail_out; } - if (!sd->fsend("run")) { - goto bail_out; + if (jcr->sd_calls_client) { + /* + * SD must call "client" i.e. FD + */ + if (jcr->FDVersion < 5) { + Jmsg(jcr, M_FATAL, 0, _("The File daemon does not support SDCallsClient.\n")); + goto bail_out; + } + if (!send_client_addr_to_sd(jcr)) { + goto bail_out; + } + if (!run_storage_and_start_message_thread(jcr, sd)) { + goto bail_out; + } + store_address = jcr->wstore->address; /* dummy */ + store_port = 0; /* flag that SD calls FD */ + + } else { + /* + * Default case where FD must call the SD + */ + if (!run_storage_and_start_message_thread(jcr, sd)) { + goto bail_out; + } + + /* + * send Storage daemon address to the File daemon, + * then wait for File daemon to make connection + * with Storage daemon. + */ + if (jcr->rstore->SDDport == 0) { + jcr->rstore->SDDport = jcr->rstore->SDport; + } + + store_address = get_storage_address(jcr->client, jcr->rstore); + store_port = jcr->rstore->SDDport; } - /* - * Now start a Storage daemon message thread - */ - if (!start_storage_daemon_message_thread(jcr)) { - goto bail_out; + + /* TLS Requirement */ + if (jcr->rstore->tls_enable) { + if (jcr->rstore->tls_require) { + tls_need = BNET_TLS_REQUIRED; + } else { + tls_need = BNET_TLS_OK; + } } - Dmsg0(50, "Storage daemon connection OK\n"); /* - * send Storage daemon address to the File daemon, - * then wait for File daemon to make connection - * with Storage daemon. + * Send storage address to FD + * if port==0 FD must wait for SD to call it. */ - if (jcr->rstore->SDDport == 0) { - jcr->rstore->SDDport = jcr->rstore->SDport; - } - fd->fsend(storaddr, jcr->rstore->address, jcr->rstore->SDDport, - jcr->sd_auth_key); + fd->fsend(storaddr, store_address, store_port, tls_need, jcr->sd_auth_key); memset(jcr->sd_auth_key, 0, strlen(jcr->sd_auth_key)); - Dmsg1(6, "dird>filed: %s\n", fd->msg); if (!response(jcr, fd, OKstore, "Storage", DISPLAY_ERROR)) { goto bail_out; @@ -441,14 +466,9 @@ bool restore_bootstrap(JCR *jcr) if (!send_runscripts_commands(jcr)) { goto bail_out; } - if (!send_restore_objects(jcr)) { - Dmsg0(000, "FAIL: Send restore objects\n"); - goto bail_out; - } } fd->fsend("%s", restore_cmd.c_str()); - if (!response(jcr, fd, OKrestore, "Restore", DISPLAY_ERROR)) { goto bail_out; } @@ -527,7 +547,7 @@ bail_out: return false; } -bool do_restore_init(JCR *jcr) +bool do_restore_init(JCR *jcr) { free_wstorage(jcr); return true; @@ -556,7 +576,7 @@ void restore_cleanup(JCR *jcr, int TermCode) if (job_canceled(jcr)) { cancel_storage_daemon_job(jcr); - } + } switch (TermCode) { case JS_Terminated: diff --git a/bacula/src/dird/run_conf.c b/bacula/src/dird/run_conf.c index 8aad42da37..e96882d76d 100644 --- a/bacula/src/dird/run_conf.c +++ b/bacula/src/dird/run_conf.c @@ -1,36 +1,24 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2012 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * * Configuration parser for Director Run Configuration * directives, which are part of the Schedule Resource * - * Kern Sibbald, May MM + * Written by Kern Sibbald, May MM * */ @@ -44,7 +32,7 @@ extern "C" { // work around visual compiler mangling variables #else extern URES res_all; #endif -extern struct s_jl joblevels[]; +extern s_jl joblevels[]; /* Forward referenced subroutines */ @@ -61,7 +49,8 @@ enum e_state { s_monthly, s_hourly, s_wom, /* 1st, 2nd, ...*/ - s_woy /* week of year w00 - w53 */ + s_woy, /* week of year w00 - w53 */ + s_ldom /* last day of month */ }; struct s_keyw { @@ -74,6 +63,7 @@ struct s_keyw { static struct s_keyw keyw[] = { {NT_("on"), s_none, 0}, {NT_("at"), s_at, 0}, + {NT_("lastday"), s_ldom, 0}, {NT_("sun"), s_wday, 0}, {NT_("mon"), s_wday, 1}, @@ -124,12 +114,14 @@ static struct s_keyw keyw[] = { {NT_("3rd"), s_wom, 2}, {NT_("4th"), s_wom, 3}, {NT_("5th"), s_wom, 4}, + {NT_("6th"), s_wom, 5}, {NT_("first"), s_wom, 0}, {NT_("second"), s_wom, 1}, {NT_("third"), s_wom, 2}, {NT_("fourth"), s_wom, 3}, {NT_("fifth"), s_wom, 4}, + {NT_("sixth"), s_wom, 5}, {NULL, s_none, 0} }; @@ -145,13 +137,17 @@ static void set_defaults() set_bits(0, 30, lrun.mday); set_bits(0, 6, lrun.wday); set_bits(0, 11, lrun.month); - set_bits(0, 4, lrun.wom); + set_bits(0, 5, lrun.wom); set_bits(0, 53, lrun.woy); } -/* Keywords (RHS) permitted in Run records */ -static struct s_kw RunFields[] = { +/* + * Keywords (RHS) permitted in Run records + * + * name token + */ +s_kw RunFields[] = { {"pool", 'P'}, {"fullpool", 'f'}, {"incrementalpool", 'i'}, @@ -164,6 +160,7 @@ static struct s_kw RunFields[] = { {"writepartafterjob", 'W'}, {"maxrunschedtime", 'm'}, {"accurate", 'a'}, + {"nextpool", 'N'}, {NULL, 0} }; @@ -239,6 +236,7 @@ void store_run(LEX *lc, RES_ITEM *item, int index, int pass) if (strcasecmp(lc->str, joblevels[j].level_name) == 0) { lrun.level = joblevels[j].level; lrun.job_type = joblevels[j].job_type; + lrun.level_set = true; j = 0; break; } @@ -252,9 +250,11 @@ void store_run(LEX *lc, RES_ITEM *item, int index, int pass) token = lex_get_token(lc, T_PINT32); if (pass == 2) { lrun.Priority = lc->pint32_val; + lrun.priority_set = true; } break; case 'P': /* Pool */ + case 'N': /* NextPool */ case 'f': /* FullPool */ case 'i': /* IncPool */ case 'd': /* DifPool */ @@ -270,6 +270,9 @@ void store_run(LEX *lc, RES_ITEM *item, int index, int pass) case 'P': lrun.pool = (POOL *)res; break; + case 'N': + lrun.next_pool = (POOL *)res; + break; case 'f': lrun.full_pool = (POOL *)res; break; @@ -307,7 +310,7 @@ void store_run(LEX *lc, RES_ITEM *item, int index, int pass) } break; case 'm': /* max run sched time */ - token = lex_get_token(lc, T_QUOTED_STRING); + token = lex_get_token(lc, T_QUOTED_STRING); if (!duration_to_utime(lc->str, &utime)) { scan_err1(lc, _("expected a time period, got: %s"), lc->str); return; @@ -359,7 +362,7 @@ void store_run(LEX *lc, RES_ITEM *item, int index, int pass) set_defaults(); for ( ; token != T_EOL; (token = lex_get_token(lc, T_ALL))) { - int len; + int len; bool pm = false; bool am = false; switch (token) { @@ -437,7 +440,7 @@ void store_run(LEX *lc, RES_ITEM *item, int index, int pass) break; case s_wom: /* Week of month 1st, ... */ if (!have_wom) { - clear_bits(0, 4, lrun.wom); + clear_bits(0, 5, lrun.wom); have_wom = true; } set_bit(code, lrun.wom); @@ -477,11 +480,11 @@ void store_run(LEX *lc, RES_ITEM *item, int index, int pass) } else if (len != 2) { scan_err0(lc, _("Bad time specification.")); /* NOT REACHED */ - } - /* + } + /* * Note, according to NIST, 12am and 12pm are ambiguous and * can be defined to anything. However, 12:01am is the same - * as 00:01 and 12:01pm is the same as 12:01, so we define + * as 00:01 and 12:01pm is the same as 12:01, so we define * 12am as 00:00 and 12pm as 12:00. */ if (pm) { @@ -505,6 +508,13 @@ void store_run(LEX *lc, RES_ITEM *item, int index, int pass) case s_at: have_at = true; break; + case s_ldom: + if (!have_mday) { + clear_bits(0, 30, lrun.mday); + have_mday = true; + } + set_bit(31, lrun.mday); /* day 32 => last day of month */ + break; case s_range: p = strchr(lc->str, '-'); if (!p) { @@ -556,7 +566,7 @@ void store_run(LEX *lc, RES_ITEM *item, int index, int pass) /* lookup first half of keyword range (week days or months) */ lcase(lc->str); for (i=0; keyw[i].name; i++) { - if (strcmp(lc->str, keyw[i].name) == 0) { + if (strcasecmp(lc->str, keyw[i].name) == 0) { state = keyw[i].state; code = keyw[i].code; i = 0; @@ -571,7 +581,7 @@ void store_run(LEX *lc, RES_ITEM *item, int index, int pass) /* Lookup end of range */ lcase(p); for (i=0; keyw[i].name; i++) { - if (strcmp(p, keyw[i].name) == 0) { + if (strcasecmp(p, keyw[i].name) == 0) { state2 = keyw[i].state; code2 = keyw[i].code; i = 0; @@ -608,13 +618,13 @@ void store_run(LEX *lc, RES_ITEM *item, int index, int pass) } else { /* Must be position */ if (!have_wom) { - clear_bits(0, 4, lrun.wom); + clear_bits(0, 5, lrun.wom); have_wom = true; } if (code < code2) { set_bits(code, code2, lrun.wom); } else { - set_bits(code, 4, lrun.wom); + set_bits(code, 5, lrun.wom); set_bits(0, code2, lrun.wom); } } @@ -626,7 +636,7 @@ void store_run(LEX *lc, RES_ITEM *item, int index, int pass) case s_weekly: have_mday = have_wom = have_woy = true; set_bits(0, 30, lrun.mday); - set_bits(0, 4, lrun.wom); + set_bits(0, 5, lrun.wom); set_bits(0, 53, lrun.woy); break; case s_daily: diff --git a/bacula/src/dird/scheduler.c b/bacula/src/dird/scheduler.c index 154cc8d05c..f9252f809c 100644 --- a/bacula/src/dird/scheduler.c +++ b/bacula/src/dird/scheduler.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2011 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * @@ -44,7 +32,7 @@ #define DBGLVL 0 #else #undef SCHED_DEBUG -#define DBGLVL 200 +#define DBGLVL DT_SCHEDULER|200 #endif const int dbglvl = DBGLVL; @@ -73,7 +61,7 @@ static void dump_job(job_item *ji, const char *msg); /* Imported variables */ -/** +/* * called by reload_config to tell us that the schedules * we may have based our next jobs to run queues have been * invalidated. In fact the schedules may not have changed @@ -81,7 +69,7 @@ static void dump_job(job_item *ji, const char *msg); * on are new and no longer have a valid last_run time which * causes us to double run schedules that get put into the list * because run_nh = 1. - */ + */ static bool schedules_invalidated = false; void invalidate_schedules(void) { schedules_invalidated = true; @@ -154,7 +142,7 @@ again: time_t twait; /** discard scheduled queue and rebuild with new schedule objects. **/ lock_jobs(); - if (schedules_invalidated) { + if (schedules_invalidated) { dump_job(next_job, "Invalidated job"); free(next_job); while (!jobs_to_run->empty()) { @@ -205,6 +193,10 @@ again: jcr->pool = run->pool; /* override pool */ jcr->run_pool_override = true; } + if (run->next_pool) { + jcr->next_pool = run->next_pool; /* override next pool */ + jcr->run_next_pool_override = true; + } if (run->full_pool) { jcr->full_pool = run->full_pool; /* override full pool */ jcr->run_full_pool_override = true; @@ -266,9 +258,9 @@ static void find_runs() JOB *job; SCHED *sched; struct tm tm; - int hour, mday, wday, month, wom, woy; + int hour, mday, wday, month, wom, woy, ldom; /* Items corresponding to above at the next hour */ - int nh_hour, nh_mday, nh_wday, nh_month, nh_wom, nh_woy; + int nh_hour, nh_mday, nh_wday, nh_month, nh_wom, nh_woy, nh_ldom; Dmsg0(dbglvl, "enter find_runs()\n"); @@ -281,6 +273,7 @@ static void find_runs() month = tm.tm_mon; wom = mday / 7; woy = tm_woy(now); /* get week of year */ + ldom = tm_ldom(month, tm.tm_year + 1900); Dmsg7(dbglvl, "now = %x: h=%d m=%d md=%d wd=%d wom=%d woy=%d\n", now, hour, month, mday, wday, wom, woy); @@ -298,6 +291,7 @@ static void find_runs() nh_month = tm.tm_mon; nh_wom = nh_mday / 7; nh_woy = tm_woy(next_hour); /* get week of year */ + nh_ldom = tm_ldom(nh_month, tm.tm_year + 1900); Dmsg7(dbglvl, "nh = %x: h=%d m=%d md=%d wd=%d wom=%d woy=%d\n", next_hour, nh_hour, nh_month, nh_mday, nh_wday, nh_wom, nh_woy); @@ -317,40 +311,47 @@ static void find_runs() */ #ifdef xxxx Dmsg0(000, "\n"); - Dmsg6(000, "run h=%d m=%d md=%d wd=%d wom=%d woy=%d\n", - hour, month, mday, wday, wom, woy); - Dmsg6(000, "bitset bsh=%d bsm=%d bsmd=%d bswd=%d bswom=%d bswoy=%d\n", + Dmsg7(000, "run h=%d m=%d md=%d wd=%d wom=%d woy=%d ldom=%d\n", + hour, month, mday, wday, wom, woy, ldom); + Dmsg7(000, "bitset bsh=%d bsm=%d bsmd=%d bswd=%d bswom=%d bswoy=%d bsldom=%d\n", bit_is_set(hour, run->hour), bit_is_set(month, run->month), bit_is_set(mday, run->mday), bit_is_set(wday, run->wday), bit_is_set(wom, run->wom), - bit_is_set(woy, run->woy)); + bit_is_set(woy, run->woy), + bit_is_set(31, run->mday)); + - Dmsg6(000, "nh_run h=%d m=%d md=%d wd=%d wom=%d woy=%d\n", - nh_hour, nh_month, nh_mday, nh_wday, nh_wom, nh_woy); - Dmsg6(000, "nh_bitset bsh=%d bsm=%d bsmd=%d bswd=%d bswom=%d bswoy=%d\n", + Dmsg7(000, "nh_run h=%d m=%d md=%d wd=%d wom=%d woy=%d ldom=%d\n", + nh_hour, nh_month, nh_mday, nh_wday, nh_wom, nh_woy, nh_ldom); + Dmsg7(000, "nh_bitset bsh=%d bsm=%d bsmd=%d bswd=%d bswom=%d bswoy=%d bsldom=%d\n", bit_is_set(nh_hour, run->hour), bit_is_set(nh_month, run->month), bit_is_set(nh_mday, run->mday), bit_is_set(nh_wday, run->wday), bit_is_set(nh_wom, run->wom), - bit_is_set(nh_woy, run->woy)); + bit_is_set(nh_woy, run->woy), + bit_is_set(31, run->mday)); #endif run_now = bit_is_set(hour, run->hour) && - bit_is_set(mday, run->mday) && - bit_is_set(wday, run->wday) && - bit_is_set(month, run->month) && - bit_is_set(wom, run->wom) && - bit_is_set(woy, run->woy); + ((bit_is_set(mday, run->mday) && + bit_is_set(wday, run->wday) && + bit_is_set(month, run->month) && + bit_is_set(wom, run->wom) && + bit_is_set(woy, run->woy)) || + (bit_is_set(month, run->month) && + bit_is_set(31, run->mday) && mday == ldom)); run_nh = bit_is_set(nh_hour, run->hour) && - bit_is_set(nh_mday, run->mday) && - bit_is_set(nh_wday, run->wday) && - bit_is_set(nh_month, run->month) && - bit_is_set(nh_wom, run->wom) && - bit_is_set(nh_woy, run->woy); + ((bit_is_set(nh_mday, run->mday) && + bit_is_set(nh_wday, run->wday) && + bit_is_set(nh_month, run->month) && + bit_is_set(nh_wom, run->wom) && + bit_is_set(nh_woy, run->woy)) || + (bit_is_set(nh_month, run->month) && + bit_is_set(31, run->mday) && nh_mday == nh_ldom)); Dmsg3(dbglvl, "run@%p: run_now=%d run_nh=%d\n", run, run_now, run_nh); @@ -384,14 +385,14 @@ static void add_job(JOB *job, RUN *run, time_t now, time_t runtime) */ if (((runtime - run->last_run) < 61) || ((runtime+59) < now)) { #ifdef SCHED_DEBUG - Dmsg4(000, "Drop: Job=\"%s\" run=%lld. last_run=%lld. now=%lld\n", job->hdr.name, + Dmsg4(000, "Drop: Job=\"%s\" run=%lld. last_run=%lld. now=%lld\n", job->hdr.name, (utime_t)runtime, (utime_t)run->last_run, (utime_t)now); fflush(stdout); #endif return; } #ifdef SCHED_DEBUG - Dmsg4(000, "Add: Job=\"%s\" run=%lld last_run=%lld now=%lld\n", job->hdr.name, + Dmsg4(000, "Add: Job=\"%s\" run=%lld last_run=%lld now=%lld\n", job->hdr.name, (utime_t)runtime, (utime_t)run->last_run, (utime_t)now); #endif /* accept to run this job */ @@ -432,12 +433,12 @@ static void dump_job(job_item *ji, const char *msg) { #ifdef SCHED_DEBUG char dt[MAX_TIME_LENGTH]; - int save_debug = debug_level; - if (debug_level < dbglvl) { + int64_t save_debug = debug_level; + if (!chk_dbglvl(dbglvl)) { return; } bstrftime_nc(dt, sizeof(dt), ji->runtime); - Dmsg4(dbglvl, "%s: Job=%s priority=%d run %s\n", msg, ji->job->hdr.name, + Dmsg4(dbglvl, "%s: Job=%s priority=%d run %s\n", msg, ji->job->hdr.name, ji->Priority, dt); fflush(stdout); debug_level = save_debug; diff --git a/bacula/src/dird/ua.h b/bacula/src/dird/ua.h index 721adfee8e..0e3e85558d 100644 --- a/bacula/src/dird/ua.h +++ b/bacula/src/dird/ua.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2001-2011 Free Software Foundation Europe e.V. + Copyright (C) 2001-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Includes specific to the Director User Agent Server @@ -40,7 +28,9 @@ public: BSOCK *UA_sock; BSOCK *sd; JCR *jcr; - B_DB *db; + B_DB *db; /* Pointing to shared or private db */ + B_DB *shared_db; /* Main Bacula DB access */ + B_DB *private_db; /* Private DB access */ CAT *catalog; CONRES *cons; /* console resource */ POOLMEM *cmd; /* return command/name buffer */ @@ -50,8 +40,10 @@ public: char *argv[MAX_CMD_ARGS]; /* argument values */ int argc; /* number of arguments */ char **prompt; /* list of prompts */ + char **unique; /* extra unique field */ int max_prompts; /* max size of list */ int num_prompts; /* current number in list */ + char api_opts[MAX_NAME_LENGTH]; /* Api options */ int api; /* For programs want an API */ int cmd_index; /* Index in command table */ bool force_mult_db_connections; /* overwrite cat.mult_db_connections */ @@ -83,6 +75,7 @@ struct TREE_CTX { TREE_NODE *avail_node; /* unused node last insert */ int cnt; /* count for user feedback */ bool all; /* if set mark all as default */ + bool hardlinks_in_mem; /* Set to optimize for speed */ UAContext *ua; uint32_t FileEstimate; /* estimate of number of files */ uint32_t FileCount; /* current count of files */ @@ -106,6 +99,7 @@ struct RESTORE_CTX { JobId_t JobId; char ClientName[MAX_NAME_LENGTH]; /* backup client */ char RestoreClientName[MAX_NAME_LENGTH]; /* restore client */ + char RestoreMediaType[MAX_NAME_LENGTH]; /* restore Media type when storage override */ char last_jobid[20]; POOLMEM *JobIds; /* User entered string of JobIds */ POOLMEM *BaseJobIds; /* Base jobids */ @@ -126,6 +120,7 @@ struct RESTORE_CTX { int pnl; /* path length */ bool found; bool all; /* mark all as default */ + bool hardlinks_in_mem; /* keep hard links in memory */ NAME_LIST name_list; }; diff --git a/bacula/src/dird/ua_acl.c b/bacula/src/dird/ua_acl.c index c510df6062..4b703741fa 100644 --- a/bacula/src/dird/ua_acl.c +++ b/bacula/src/dird/ua_acl.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2004-2008 Free Software Foundation Europe e.V. + Copyright (C) 2004-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * @@ -31,7 +19,6 @@ * * Kern Sibbald, January MMIV * - * Version $Id$ */ #include "bacula.h" @@ -83,3 +70,27 @@ bool acl_access_ok(UAContext *ua, int acl, const char *item, int len) } return false; } + +/* + * Return true if we have a restriction on the ACL + * false if there is no ACL restriction + */ +bool have_restricted_acl(UAContext *ua, int acl) +{ + alist *list; + + /* If no console resource => default console and all is permitted */ + if (!ua || !ua->cons) { + return false; /* no restrictions */ + } + + list = ua->cons->ACL_lists[acl]; + if (!list) { + return false; + } + /* Special case *all* gives full access */ + if (list->size() == 1 && strcasecmp("*all*", (char *)list->get(0)) == 0) { + return false; + } + return list->size() > 0; +} diff --git a/bacula/src/dird/ua_cmds.c b/bacula/src/dird/ua_cmds.c index 83d061f9d9..f77fef73e1 100644 --- a/bacula/src/dird/ua_cmds.c +++ b/bacula/src/dird/ua_cmds.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2012 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * @@ -32,23 +20,10 @@ * Kern Sibbald, September MM * */ - + #include "bacula.h" #include "dird.h" -#ifdef HAVE_PYTHON - -#undef _POSIX_C_SOURCE -#include - -#include "lib/pythonlib.h" - -/* Imported Functions */ -extern PyObject *job_getattr(PyObject *self, char *attrname); -extern int job_setattr(PyObject *self, char *attrname, PyObject *value); - -#endif /* HAVE_PYTHON */ - /* Imported subroutines */ /* Imported variables */ @@ -63,7 +38,8 @@ extern int list_cmd(UAContext *ua, const char *cmd); extern int llist_cmd(UAContext *ua, const char *cmd); extern int messagescmd(UAContext *ua, const char *cmd); extern int prunecmd(UAContext *ua, const char *cmd); -extern int purgecmd(UAContext *ua, const char *cmd); +extern int purge_cmd(UAContext *ua, const char *cmd); +extern int truncate_cmd(UAContext *ua, const char *cmd); /* in ua_purge.c */ extern int querycmd(UAContext *ua, const char *cmd); extern int relabel_cmd(UAContext *ua, const char *cmd); extern int restore_cmd(UAContext *ua, const char *cmd); @@ -85,10 +61,10 @@ static int estimate_cmd(UAContext *ua, const char *cmd); static int help_cmd(UAContext *ua, const char *cmd); static int memory_cmd(UAContext *ua, const char *cmd); static int mount_cmd(UAContext *ua, const char *cmd); -static int python_cmd(UAContext *ua, const char *cmd); static int release_cmd(UAContext *ua, const char *cmd); static int reload_cmd(UAContext *ua, const char *cmd); static int setdebug_cmd(UAContext *ua, const char *cmd); +static int setbwlimit_cmd(UAContext *ua, const char *cmd); static int setip_cmd(UAContext *ua, const char *cmd); static int time_cmd(UAContext *ua, const char *cmd); static int trace_cmd(UAContext *ua, const char *cmd); @@ -99,7 +75,6 @@ static int version_cmd(UAContext *ua, const char *cmd); static int wait_cmd(UAContext *ua, const char *cmd); static void do_job_delete(UAContext *ua, JobId_t JobId); -static bool delete_job_id_range(UAContext *ua, char *tok); static int delete_volume(UAContext *ua); static int delete_pool(UAContext *ua); static void delete_job(UAContext *ua); @@ -109,7 +84,7 @@ int quit_cmd(UAContext *ua, const char *cmd); /* not all in alphabetical order. New commands are added after existing commands with similar letters to prevent breakage of existing user scripts. */ -struct cmdstruct { +struct cmdstruct { const char *key; /* command */ int (*func)(UAContext *ua, const char *cmd); /* handler */ const char *help; /* main purpose */ @@ -120,88 +95,99 @@ static struct cmdstruct commands[] = { /* C { NT_("add"), add_cmd, _("Add media to a pool"), NT_("pool= storage= jobid="), false}, { NT_("autodisplay"), autodisplay_cmd,_("Autodisplay console messages"), NT_("on | off"), false}, { NT_("automount"), automount_cmd, _("Automount after label"), NT_("on | off"), false}, - { NT_("cancel"), cancel_cmd, _("Cancel a job"), NT_("jobid= job= ujobid="), false}, + { NT_("cancel"), cancel_cmd, _("Cancel a job"), NT_("jobid= | job= | ujobid= | inactive client= storage= | all"), false}, { NT_("create"), create_cmd, _("Create DB Pool from resource"), NT_("pool="), false}, { NT_("delete"), delete_cmd, _("Delete volume, pool or job"), NT_("volume= pool= jobid="), true}, - { NT_("disable"), disable_cmd, _("Disable a job"), NT_("job="), true}, - { NT_("enable"), enable_cmd, _("Enable a job"), NT_("job="), true}, - { NT_("estimate"), estimate_cmd, _("Performs FileSet estimate, listing gives full listing"), + { NT_("disable"), disable_cmd, _("Disable a job, attributes batch process"), NT_("job= | batch"), true}, + { NT_("enable"), enable_cmd, _("Enable a job, attributes batch process"), NT_("job= | batch"), true}, + { NT_("estimate"), estimate_cmd, _("Performs FileSet estimate, listing gives full listing"), NT_("fileset= client= level= accurate= job= listing"), true}, { NT_("exit"), quit_cmd, _("Terminate Bconsole session"), NT_(""), false}, { NT_("gui"), gui_cmd, _("Non-interactive gui mode"), NT_("on | off"), false}, - { NT_("help"), help_cmd, _("Print help on specific command"), + { NT_("help"), help_cmd, _("Print help on specific command"), NT_("add autodisplay automount cancel create delete disable\n\tenable estimate exit gui label list llist" - "\n\tmessages memory mount prune purge python quit query\n\trestore relabel release reload run status" - "\n\tsetdebug setip show sqlquery time trace unmount\n\tumount update use var version wait"), false}, + "\n\tmessages memory mount prune purge quit query\n\trestore relabel release reload run status" + "\n\tsetbandwidth setdebug setip show sqlquery time trace unmount\n\tumount update use var version wait"), false}, { NT_("label"), label_cmd, _("Label a tape"), NT_("storage= volume= pool= slot= barcodes"), false}, - { NT_("list"), list_cmd, _("List objects from catalog"), - NT_("pools | jobs | jobtotals | volume | media | files jobid= | copies jobid="), true}, + { NT_("list"), list_cmd, _("List objects from catalog"), + NT_("pools | jobs | jobtotals | volume | media | files jobid= | copies jobid= |\n" + "\tjoblog jobid="), false}, { NT_("llist"), llist_cmd, _("Full or long list like list command"), - NT_("pools | jobs | jobtotals | media | files jobid= | copies jobid="), true}, + NT_("pools | jobs | joblog jobid= | jobtotals | media | files jobid= | copies jobid="), true}, { NT_("messages"), messagescmd, _("Display pending messages"), NT_(""), false}, { NT_("memory"), memory_cmd, _("Print current memory usage"), NT_(""), true}, - { NT_("mount"), mount_cmd, _("Mount storage"), + { NT_("mount"), mount_cmd, _("Mount storage"), NT_("storage= slot= drive= [ jobid= | job= ]"), false}, - { NT_("prune"), prunecmd, _("Prune expired records from catalog"), - NT_("files | jobs | pool= | client= | volume= "), true}, + { NT_("prune"), prunecmd, _("Prune expired records from catalog"), + NT_("files | jobs | pool= | client= | [ expired ] volume= "), true}, - { NT_("purge"), purgecmd, _("Purge records from catalog"), NT_("files jobs volume= [action= devicetype= pool= allpools storage= drive=]"), true}, - { NT_("python"), python_cmd, _("Python control commands"), NT_(""), false}, + { NT_("purge"), purge_cmd, _("Purge records from catalog"), NT_("files jobs volume= [mediatype= pool= allpools storage= drive=]"), true}, { NT_("quit"), quit_cmd, _("Terminate Bconsole session"), NT_(""), false}, { NT_("query"), querycmd, _("Query catalog"), NT_(""), false}, - { NT_("restore"), restore_cmd, _("Restore files"), + { NT_("restore"), restore_cmd, _("Restore files"), NT_("where= client= storage= bootstrap= " "restorejob=" - "\n\tcomment= jobid= done select all"), false}, + "\n\tcomment= jobid= copies done select all"), false}, - { NT_("relabel"), relabel_cmd, _("Relabel a tape"), + { NT_("relabel"), relabel_cmd, _("Relabel a tape"), NT_("storage= oldvolume=\n\tvolume= pool="), false}, { NT_("release"), release_cmd, _("Release storage"), NT_("storage="), false}, { NT_("reload"), reload_cmd, _("Reload conf file"), NT_(""), true}, - { NT_("run"), run_cmd, _("Run a job"), + { NT_("run"), run_cmd, _("Run a job"), NT_("job= client=\n\tfileset= level=\n\tstorage=" - "where=\n\twhen=\n\tcomment= yes"), false}, + " where=\n\twhen= pool=\n\t" + " nextpool= comment= accurate= spooldata= yes"), false}, - { NT_("status"), status_cmd, _("Report status"), + { NT_("status"), status_cmd, _("Report status"), NT_("all | dir= | director | client= | storage= slots | days=nnn"), true}, - { NT_("setdebug"), setdebug_cmd, _("Sets debug level"), + { NT_("stop"), cancel_cmd, _("Stop a job"), NT_("jobid= job= ujobid= all"), false}, + { NT_("setdebug"), setdebug_cmd, _("Sets debug level"), NT_("level= trace=0/1 client= | dir | storage= | all"), true}, + { NT_("setbandwidth"), setbwlimit_cmd, _("Sets bandwidth"), + NT_("limit= client= jobid= job= ujobid="), true}, + { NT_("setip"), setip_cmd, _("Sets new client address -- if authorized"), NT_(""), false}, - { NT_("show"), show_cmd, _("Show resource records"), + { NT_("show"), show_cmd, _("Show resource records"), NT_("job= | pool= | fileset= schedule= | client= | disabled | all"), true}, { NT_("sqlquery"), sqlquerycmd, _("Use SQL to query catalog"), NT_(""), false}, { NT_("time"), time_cmd, _("Print current time"), NT_(""), true}, { NT_("trace"), trace_cmd, _("Turn on/off trace to file"), NT_("on | off"), true}, - { NT_("unmount"), unmount_cmd, _("Unmount storage"), + { NT_("truncate"), truncate_cmd, _("Truncate one or more Volumes"), NT_("volume= [mediatype= pool= allpools storage= drive=]"), true}, + { NT_("unmount"), unmount_cmd, _("Unmount storage"), NT_("storage= [ drive= ] | jobid= | job="), false}, - { NT_("umount"), unmount_cmd, _("Umount - for old-time Unix guys, see unmount"), + { NT_("umount"), unmount_cmd, _("Umount - for old-time Unix guys, see unmount"), NT_("storage= [ drive= ] | jobid= | job="), false}, - { NT_("update"), update_cmd, _("Update volume, pool or stats"), + { NT_("update"), update_cmd, _("Update volume, pool or stats"), NT_("stats\n\tpool=\n\tslots storage= scan" "\n\tvolume= volstatus= volretention=" "\n\t pool= recycle= slot=\n\t inchanger=" "\n\t maxvolbytes= maxvolfiles= maxvoljobs=" - "\n\t enabled= recyclepool= actiononpurge="),true}, + "\n\t enabled= recyclepool= actiononpurge=" + "\n\t allfrompool= fromallpools"),true}, { NT_("use"), use_cmd, _("Use catalog xxx"), NT_("catalog="), false}, { NT_("var"), var_cmd, _("Does variable expansion"), NT_(""), false}, { NT_("version"), version_cmd, _("Print Director version"), NT_(""), true}, - { NT_("wait"), wait_cmd, _("Wait until no jobs are running"), + { NT_("wait"), wait_cmd, _("Wait until no jobs are running"), NT_("jobname= | jobid= | ujobid="), false} }; #define comsize ((int)(sizeof(commands)/sizeof(struct cmdstruct))) +const char *get_command(int index) { + return commands[index].key; +} + /* * Execute a command from the UA */ @@ -226,6 +212,7 @@ bool do_a_command(UAContext *ua) len = strlen(ua->argk[0]); for (i=0; iargk[0], commands[i].key, len) == 0) { + ua->cmd_index = i; /* Check if command permitted, but "quit" is always OK */ if (strcmp(ua->argk[0], NT_("quit")) != 0 && !acl_access_ok(ua, Command_ACL, ua->argk[0], len)) { @@ -404,6 +391,9 @@ static int add_cmd(UAContext *ua, const char *cmd) ua->error_msg("%s", db_strerror(ua->db)); return 1; } +// if (i == startnum) { +// first_id = mr.PoolId; +// } } pr.NumVols += num; Dmsg0(200, "Update pool record.\n"); @@ -439,127 +429,28 @@ int automount_cmd(UAContext *ua, const char *cmd) return 1; } - /* * Cancel a job */ static int cancel_cmd(UAContext *ua, const char *cmd) { - int i, ret; - int njobs = 0; - JCR *jcr = NULL; - char JobName[MAX_NAME_LENGTH]; - - for (i=1; iargc; i++) { - if (strcasecmp(ua->argk[i], NT_("jobid")) == 0) { - uint32_t JobId; - JobId = str_to_int64(ua->argv[i]); - if (!JobId) { - break; - } - if (!(jcr=get_jcr_by_id(JobId))) { - ua->error_msg(_("JobId %s is not running. Use Job name to cancel inactive jobs.\n"), ua->argv[i]); - return 1; - } - break; - } else if (strcasecmp(ua->argk[i], NT_("job")) == 0) { - if (!ua->argv[i]) { - break; - } - if (!(jcr=get_jcr_by_partial_name(ua->argv[i]))) { - ua->warning_msg(_("Warning Job %s is not running. Continuing anyway ...\n"), ua->argv[i]); - jcr = new_jcr(sizeof(JCR), dird_free_jcr); - bstrncpy(jcr->Job, ua->argv[i], sizeof(jcr->Job)); - } - break; - } else if (strcasecmp(ua->argk[i], NT_("ujobid")) == 0) { - if (!ua->argv[i]) { - break; - } - if (!(jcr=get_jcr_by_full_name(ua->argv[i]))) { - ua->warning_msg(_("Warning Job %s is not running. Continuing anyway ...\n"), ua->argv[i]); - jcr = new_jcr(sizeof(JCR), dird_free_jcr); - bstrncpy(jcr->Job, ua->argv[i], sizeof(jcr->Job)); - } - break; - } - - } - if (jcr) { - if (jcr->job && !acl_access_ok(ua, Job_ACL, jcr->job->name())) { - ua->error_msg(_("Unauthorized command from this console.\n")); - return 1; - } - } else { - /* - * If we still do not have a jcr, - * throw up a list and ask the user to select one. - */ - char buf[1000]; - int tjobs = 0; /* total # number jobs */ - /* Count Jobs running */ - foreach_jcr(jcr) { - if (jcr->JobId == 0) { /* this is us */ - continue; - } - tjobs++; /* count of all jobs */ - if (!acl_access_ok(ua, Job_ACL, jcr->job->name())) { - continue; /* skip not authorized */ - } - njobs++; /* count of authorized jobs */ - } - endeach_jcr(jcr); + JCR *jcr; + bool ret = true; + int nb; + bool cancel = strcasecmp(commands[ua->cmd_index].key, "cancel") == 0; + alist *jcrs = New(alist(5, not_owned_by_alist)); - if (njobs == 0) { /* no authorized */ - if (tjobs == 0) { - ua->send_msg(_("No Jobs running.\n")); - } else { - ua->send_msg(_("None of your jobs are running.\n")); - } - return 1; - } - - start_prompt(ua, _("Select Job:\n")); - foreach_jcr(jcr) { - char ed1[50]; - if (jcr->JobId == 0) { /* this is us */ - continue; - } - if (!acl_access_ok(ua, Job_ACL, jcr->job->name())) { - continue; /* skip not authorized */ - } - bsnprintf(buf, sizeof(buf), _("JobId=%s Job=%s"), edit_int64(jcr->JobId, ed1), jcr->Job); - add_prompt(ua, buf); - } - endeach_jcr(jcr); + nb = select_running_jobs(ua, jcrs, commands[ua->cmd_index].key); - if (do_prompt(ua, _("Job"), _("Choose Job to cancel"), buf, sizeof(buf)) < 0) { - return 1; - } - if (ua->api && njobs == 1) { - char nbuf[1000]; - bsnprintf(nbuf, sizeof(nbuf), _("Cancel: %s\n\n%s"), buf, - _("Confirm cancel?")); - if (!get_yesno(ua, nbuf) || ua->pint32_val == 0) { - return 1; - } - } else { - if (njobs == 1) { - if (!get_yesno(ua, _("Confirm cancel (yes/no): ")) || ua->pint32_val == 0) { - return 1; - } - } - } - sscanf(buf, "JobId=%d Job=%127s", &njobs, JobName); - jcr = get_jcr_by_full_name(JobName); - if (!jcr) { - ua->warning_msg(_("Job \"%s\" not found.\n"), JobName); - return 1; + foreach_alist(jcr, jcrs) { + /* Execute the cancel command only if we don't have an error */ + if (nb != -1) { + ret &= cancel_job(ua, jcr, cancel); } + free_jcr(jcr); } - ret = cancel_job(ua, jcr); - free_jcr(jcr); + delete jcrs; return ret; } @@ -619,6 +510,7 @@ int update_pool_references(JCR *jcr, B_DB *db, POOL *pool) memset(&pr, 0, sizeof(POOL_DBR)); bstrncpy(pr.Name, pool->name(), sizeof(pr.Name)); + /* Don't compute NumVols here */ if (!db_get_pool_record(jcr, db, &pr)) { return -1; /* not exists in database */ } @@ -629,13 +521,14 @@ int update_pool_references(JCR *jcr, B_DB *db, POOL *pool) return -1; /* error */ } + /* NumVols is updated here */ if (!db_update_pool_record(jcr, db, &pr)) { return -1; /* error */ } return 1; } -/* set POOL_DBR.RecyclePoolId and POOL_DBR.ScratchPoolId from Pool resource +/* set POOL_DBR.RecyclePoolId and POOL_DBR.ScratchPoolId from Pool resource * works with set_pooldbr_from_poolres */ bool set_pooldbr_references(JCR *jcr, B_DB *db, POOL_DBR *pr, POOL *pool) @@ -677,7 +570,7 @@ bool set_pooldbr_references(JCR *jcr, B_DB *db, POOL_DBR *pr, POOL *pool) } else { /* no ScratchPool used, set it to 0 */ pr->ScratchPoolId = 0; } - + return ret; } @@ -693,9 +586,7 @@ bool set_pooldbr_references(JCR *jcr, B_DB *db, POOL_DBR *pr, POOL *pool) int create_pool(JCR *jcr, B_DB *db, POOL *pool, e_pool_op op) { POOL_DBR pr; - memset(&pr, 0, sizeof(POOL_DBR)); - bstrncpy(pr.Name, pool->name(), sizeof(pr.Name)); if (db_get_pool_record(jcr, db, &pr)) { @@ -757,35 +648,91 @@ static int create_cmd(UAContext *ua, const char *cmd) extern DIRRES *director; extern char *configfile; -/* - * Python control command - * python restart (restarts interpreter) - */ -static int python_cmd(UAContext *ua, const char *cmd) +static int setbwlimit_client(UAContext *ua, CLIENT *client, char *Job, int64_t limit) { -#ifdef HAVE_PYTHON - init_python_interpreter_args python_args; + if (!client) { + return 1; + } - if (ua->argc >= 2 && strcasecmp(ua->argk[1], NT_("restart")) == 0) { - term_python_interpreter(); + /* Connect to File daemon */ + ua->jcr->client = client; + ua->jcr->max_bandwidth = limit; - python_args.progname = director->name(); - python_args.scriptdir = director->scripts_directory; - python_args.modulename = "DirStartUp"; - python_args.configfile = configfile; - python_args.workingdir = director->working_directory; - python_args.job_getattr = job_getattr; - python_args.job_setattr = job_setattr; + /* Try to connect for 15 seconds */ + ua->send_msg(_("Connecting to Client %s at %s:%d\n"), + client->name(), client->address, client->FDport); + if (!connect_to_file_daemon(ua->jcr, 1, 15, 0)) { + ua->error_msg(_("Failed to connect to Client.\n")); + return 1; + } + Dmsg0(120, "Connected to file daemon\n"); - init_python_interpreter(&python_args); + if (!send_bwlimit(ua->jcr, Job)) { + ua->error_msg(_("Failed to set bandwidth limit to Client.\n")); - ua->send_msg(_("Python interpreter restarted.\n")); } else { -#endif /* HAVE_PYTHON */ - ua->warning_msg(_("Nothing done.\n")); -#ifdef HAVE_PYTHON + ua->info_msg(_("2000 OK Limiting bandwidth to %lldkb/s %s\n"), + limit/1024, *Job?Job:_("on running and future jobs")); + } + + ua->jcr->file_bsock->signal(BNET_TERMINATE); + free_bsock(ua->jcr->file_bsock); + ua->jcr->client = NULL; + ua->jcr->max_bandwidth = 0; + return 1; +} + +static int setbwlimit_cmd(UAContext *ua, const char *cmd) +{ + int action = -1; + CLIENT *client=NULL; + char Job[MAX_NAME_LENGTH]; + *Job=0; + int64_t limit=-1; + JCR *jcr=NULL; + int i; + + const char *lst_all[] = { "job", "jobid", "jobname", "client", NULL }; + if (find_arg_keyword(ua, lst_all) < 0) { + start_prompt(ua, _("Set Bandwidth choice:\n")); + add_prompt(ua, _("Running Job")); /* 0 */ + add_prompt(ua, _("Running and future Jobs for a Client")); /* 1 */ + action = do_prompt(ua, "item", _("Choose where to limit the bandwidth"), + NULL, 0); + if (action < 0) { + return 1; + } + } + + i = find_arg_with_value(ua, "limit"); + if (i >= 0) { + limit = atoi(ua->argv[i]) * 1024; + } + if (limit < 0) { + if (!get_pint(ua, _("Enter new bandwidth limit kb/s: "))) { + return 1; + } + limit = ua->pint32_val * 1024; /* kb/s */ + } + + const char *lst[] = { "job", "jobid", "jobname", NULL }; + if (action == 0 || find_arg_keyword(ua, lst) > 0) { + alist *jcrs = New(alist(10, not_owned_by_alist)); + select_running_jobs(ua, jcrs, "limit"); + foreach_alist(jcr, jcrs) { + jcr->max_bandwidth = limit; /* TODO: see for locking (Should be safe)*/ + bstrncpy(Job, jcr->Job, sizeof(Job)); + client = jcr->client; + free_jcr(jcr); + setbwlimit_client(ua, client, Job, limit); + } + + } else { + client = get_client_resource(ua); + if (client) { + setbwlimit_client(ua, client, Job, limit); + } } -#endif /* HAVE_PYTHON */ return 1; } @@ -813,7 +760,8 @@ static int setip_cmd(UAContext *ua, const char *cmd) free(client->address); } /* MA Bug 6 remove ifdef */ - sockaddr_to_ascii(&(ua->UA_sock->client_addr), buf, sizeof(buf)); + sockaddr_to_ascii(&(ua->UA_sock->client_addr), + sizeof(ua->UA_sock->client_addr), buf, sizeof(buf)); client->address = bstrdup(buf); ua->send_msg(_("Client \"%s\" address set to %s\n"), client->name(), client->address); @@ -828,8 +776,21 @@ static void do_en_disable_cmd(UAContext *ua, bool setting) JOB *job; int i; - i = find_arg_with_value(ua, NT_("job")); - if (i < 0) { + if (find_arg(ua, NT_("batch")) > 0) { + ua->send_msg(_("Job Attributes Insertion %sabled\n"), setting?"en":"dis"); + db_disable_batch_insert(setting); + return; + } + + /* + * if (find_arg(ua, NT_("scheduler")) > 0) { + * ua->send_msg(_("Job Scheduler %sabled\n"), setting?"en":"dis"); + * return; + * } + */ + + i = find_arg_with_value(ua, NT_("job")); + if (i < 0) { job = select_enable_disable_job_resource(ua, setting); if (!job) { return; @@ -838,7 +799,7 @@ static void do_en_disable_cmd(UAContext *ua, bool setting) LockRes(); job = GetJobResWithName(ua->argv[i]); UnlockRes(); - } + } if (!job) { ua->error_msg(_("Job \"%s\" not found.\n"), ua->argv[i]); return; @@ -865,31 +826,31 @@ static int disable_cmd(UAContext *ua, const char *cmd) return 1; } -static void do_storage_setdebug(UAContext *ua, STORE *store, int level, int trace_flag) +static void do_storage_setdebug(UAContext *ua, STORE *store, + int64_t level, int trace_flag, char *options, char *tags) { BSOCK *sd; - JCR *jcr = ua->jcr; USTORE lstore; - + lstore.store = store; pm_strcpy(lstore.store_source, _("unknown source")); - set_wstorage(jcr, &lstore); + set_wstorage(ua->jcr, &lstore); /* Try connecting for up to 15 seconds */ ua->send_msg(_("Connecting to Storage daemon %s at %s:%d\n"), store->name(), store->address, store->SDport); - if (!connect_to_storage_daemon(jcr, 1, 15, 0)) { + if (!connect_to_storage_daemon(ua->jcr, 1, 15, 0)) { ua->error_msg(_("Failed to connect to Storage daemon.\n")); return; } Dmsg0(120, _("Connected to storage daemon\n")); - sd = jcr->store_bsock; - sd->fsend("setdebug=%d trace=%d\n", level, trace_flag); + sd = ua->jcr->store_bsock; + sd->fsend("setdebug=%ld trace=%ld hangup=0 options=%s tags=%s\n", + (int32_t)level, trace_flag, options, NPRTB(tags)); if (sd->recv() >= 0) { ua->send_msg("%s", sd->msg); } sd->signal(BNET_TERMINATE); - sd->close(); - jcr->store_bsock = NULL; + free_bsock(ua->jcr->store_bsock); return; } @@ -897,12 +858,13 @@ static void do_storage_setdebug(UAContext *ua, STORE *store, int level, int trac * For the client, we have the following values that can be set * level = debug level * trace = send debug output to a file + * options = various options for debug or specific FD behavior * hangup = how many records to send to SD before hanging up * obviously this is most useful for testing restarting * failed jobs. */ -static void do_client_setdebug(UAContext *ua, CLIENT *client, - int level, int trace, int hangup) +static void do_client_setdebug(UAContext *ua, CLIENT *client, + int64_t level, int trace, int hangup, char *options, char *tags) { BSOCK *fd; @@ -917,19 +879,25 @@ static void do_client_setdebug(UAContext *ua, CLIENT *client, return; } Dmsg0(120, "Connected to file daemon\n"); + fd = ua->jcr->file_bsock; - fd->fsend("setdebug=%d trace=%d hangup=%d\n", level, trace, hangup); + if (ua->jcr->FDVersion < 8 || !options) { + fd->fsend("setdebug=%ld trace=%d hangup=%d\n", + (int32_t)level, trace, hangup); + } else { + fd->fsend("setdebug=%ld trace=%d hangup=%d options=%s tags=%s\n", + (int32_t)level, trace, hangup, options, NPRTB(tags)); + } if (fd->recv() >= 0) { ua->send_msg("%s", fd->msg); } fd->signal(BNET_TERMINATE); - fd->close(); - ua->jcr->file_bsock = NULL; + free_bsock(ua->jcr->file_bsock); return; } -static void do_all_setdebug(UAContext *ua, int level, int trace_flag, int hangup) +static void do_all_setdebug(UAContext *ua, int64_t level, int trace_flag, int hangup, char *options, char *tags) { STORE *store, **unique_store; CLIENT *client, **unique_client; @@ -968,7 +936,7 @@ static void do_all_setdebug(UAContext *ua, int level, int trace_flag, int hangup /* Call each unique Storage daemon */ for (j=0; j= 0) { + bstrncpy(options, ua->argv[i], sizeof(options) - 1); + } level = -1; i = find_arg_with_value(ua, "level"); if (i >= 0) { - level = atoi(ua->argv[i]); + level = str_to_int64(ua->argv[i]); } if (level < 0) { if (!get_pint(ua, _("Enter new debug level: "))) { @@ -1033,6 +1008,18 @@ static int setdebug_cmd(UAContext *ua, const char *cmd) level = ua->pint32_val; } + /* Better to send the tag string instead of tweaking the level + * in case where we extend the tag or change the representation + */ + i = find_arg_with_value(ua, "tags"); + if (i > 0) { + tags_str = ua->argv[i]; + if (!debug_parse_tags(tags_str, &tags)) { + ua->error_msg(_("Incorrect tags found on command line %s\n"), tags_str); + return 1; + } + } + /* Look for trace flag. -1 => not change */ i = find_arg_with_value(ua, "trace"); if (i >= 0) { @@ -1052,13 +1039,14 @@ static int setdebug_cmd(UAContext *ua, const char *cmd) /* General debug? */ for (i=1; iargc; i++) { if (strcasecmp(ua->argk[i], "all") == 0) { - do_all_setdebug(ua, level, trace_flag, hangup); + do_all_setdebug(ua, level, trace_flag, hangup, options, tags_str); return 1; } if (strcasecmp(ua->argk[i], "dir") == 0 || strcasecmp(ua->argk[i], "director") == 0) { - debug_level = level; + debug_level = level | tags; set_trace(trace_flag); + set_debug_flags(options); return 1; } if (strcasecmp(ua->argk[i], "client") == 0 || @@ -1067,13 +1055,13 @@ static int setdebug_cmd(UAContext *ua, const char *cmd) if (ua->argv[i]) { client = GetClientResWithName(ua->argv[i]); if (client) { - do_client_setdebug(ua, client, level, trace_flag, hangup); + do_client_setdebug(ua, client, level, trace_flag, hangup, options, tags_str); return 1; } } client = select_client_resource(ua); if (client) { - do_client_setdebug(ua, client, level, trace_flag, hangup); + do_client_setdebug(ua, client, level, trace_flag, hangup, options, tags_str); return 1; } } @@ -1085,13 +1073,13 @@ static int setdebug_cmd(UAContext *ua, const char *cmd) if (ua->argv[i]) { store = GetStoreResWithName(ua->argv[i]); if (store) { - do_storage_setdebug(ua, store, level, trace_flag); + do_storage_setdebug(ua, store, level, trace_flag, options, tags_str); return 1; } } - store = get_storage_resource(ua, false/*no default*/); + store = get_storage_resource(ua, false/*no default*/, true/*unique*/); if (store) { - do_storage_setdebug(ua, store, level, trace_flag); + do_storage_setdebug(ua, store, level, trace_flag, options, tags_str); return 1; } } @@ -1107,23 +1095,24 @@ static int setdebug_cmd(UAContext *ua, const char *cmd) add_prompt(ua, _("All")); switch(do_prompt(ua, "", _("Select daemon type to set debug level"), NULL, 0)) { case 0: /* Director */ - debug_level = level; + debug_level = level | tags; set_trace(trace_flag); + set_debug_flags(options); break; case 1: - store = get_storage_resource(ua, false/*no default*/); + store = get_storage_resource(ua, false/*no default*/, true/*unique*/); if (store) { - do_storage_setdebug(ua, store, level, trace_flag); + do_storage_setdebug(ua, store, level, trace_flag, options, tags_str); } break; case 2: client = select_client_resource(ua); if (client) { - do_client_setdebug(ua, client, level, trace_flag, hangup); + do_client_setdebug(ua, client, level, trace_flag, hangup, options, tags_str); } break; case 3: - do_all_setdebug(ua, level, trace_flag, hangup); + do_all_setdebug(ua, level, trace_flag, hangup, options, tags_str); break; default: break; @@ -1256,7 +1245,7 @@ static int estimate_cmd(UAContext *ua, const char *cmd) if (strcasecmp(ua->argk[i], NT_("accurate")) == 0) { if (ua->argv[i]) { if (!is_yesno(ua->argv[i], &accurate)) { - ua->error_msg(_("Invalid value for accurate. " + ua->error_msg(_("Invalid value for accurate. " "It must be yes or no.\n")); } continue; @@ -1360,8 +1349,7 @@ static int estimate_cmd(UAContext *ua, const char *cmd) bail_out: if (jcr->file_bsock) { jcr->file_bsock->signal(BNET_TERMINATE); - jcr->file_bsock->close(); - jcr->file_bsock = NULL; + free_bsock(ua->jcr->file_bsock); } return 1; } @@ -1376,7 +1364,7 @@ static int time_cmd(UAContext *ua, const char *cmd) time_t ttime = time(NULL); struct tm tm; (void)localtime_r(&ttime, &tm); - strftime(sdt, sizeof(sdt), "%d-%b-%Y %H:%M:%S", &tm); + strftime(sdt, sizeof(sdt), "%a %d-%b-%Y %H:%M:%S", &tm); ua->send_msg("%s\n", sdt); return 1; } @@ -1407,7 +1395,8 @@ static int delete_cmd(UAContext *ua, const char *cmd) NT_("jobid"), NULL}; - if (!open_client_db(ua)) { + /* Deleting large jobs can take time! */ + if (!open_new_client_db(ua)) { return 1; } @@ -1459,114 +1448,38 @@ static int delete_cmd(UAContext *ua, const char *cmd) static void delete_job(UAContext *ua) { int i; - JobId_t JobId; - char *s, *sep, *tok; + int JobId; /* not JobId_t because it's unsigned and not compatible with sellist */ + char buf[256]; + sellist sl; i = find_arg_with_value(ua, NT_("jobid")); if (i >= 0) { - if (strchr(ua->argv[i], ',') || strchr(ua->argv[i], '-')) { - s = bstrdup(ua->argv[i]); - tok = s; - - /* - * We could use strtok() here. But we're not going to, because: - * (a) strtok() is deprecated, having been replaced by strsep(); - * (b) strtok() is broken in significant ways. - * we could use strsep() instead, but it's not universally available. - * so we grow our own using strchr(). - */ - sep = strchr(tok, ','); - while (sep != NULL) { - *sep = '\0'; - if (!delete_job_id_range(ua, tok)) { - if (is_a_number(tok)) { - JobId = (JobId_t)str_to_uint64(tok); - do_job_delete(ua, JobId); - } else { - ua->warning_msg(_("Illegal JobId %s ignored\n"), tok); - } - } - tok = ++sep; - sep = strchr(tok, ','); - } + if (sl.set_string(ua->argv[i], true) < 0 && sl.get_errmsg()) { + ua->warning_msg("%s", sl.get_errmsg()); + return; + } - /* - * Pick up the last token - */ - if (!delete_job_id_range(ua, tok)) { - if (is_a_number(tok)) { - JobId = (JobId_t)str_to_uint64(tok); - do_job_delete(ua, JobId); - } else { - ua->warning_msg(_("Illegal JobId %s ignored\n"), tok); - } + if (sl.size() > 25 && (find_arg(ua, "yes") < 0)) { + bsnprintf(buf, sizeof(buf), + _("Are you sure you want to delete %d JobIds ? (yes/no): "), sl.size()); + if (!get_yesno(ua, buf)) { + return; } + } - free(s); - } else { - if (is_a_number(ua->argv[i])) { - JobId = (JobId_t)str_to_uint64(ua->argv[i]); - do_job_delete(ua, JobId); - } else { - ua->warning_msg(_("Illegal JobId %s ignored\n"), ua->argv[i]); - } + foreach_sellist(JobId, &sl) { + do_job_delete(ua, JobId); } + } else if (!get_pint(ua, _("Enter JobId to delete: "))) { return; + } else { JobId = ua->int64_val; do_job_delete(ua, JobId); } } -/* - * We call delete_job_id_range to parse range tokens and iterate over ranges - */ -static bool delete_job_id_range(UAContext *ua, char *tok) -{ - char buf[64]; - char *tok2; - JobId_t j, j1, j2; - - tok2 = strchr(tok, '-'); - if (!tok2) { - return false; - } - - *tok2 = '\0'; - tok2++; - - if (is_a_number(tok) && is_a_number(tok2)) { - j1 = (JobId_t)str_to_uint64(tok); - j2 = (JobId_t)str_to_uint64(tok2); - - if (j1 > j2) { - /* - * See if the range is big if more then 25 Jobs are deleted - * ask the user for confirmation. - */ - if ((j2 - j1) > 25) { - bsnprintf(buf, sizeof(buf), - _("Are you sure you want to delete %d JobIds ? (yes/no): "), - j2 - j1); - if (!get_yesno(ua, buf)) { - return true; - } - } - for (j = j1; j <= j2; j++) { - do_job_delete(ua, j); - } - } else { - ua->warning_msg(_("Illegal JobId range %s - %s should define increasing JobIds, ignored\n"), - tok, tok2); - } - } else { - ua->warning_msg(_("Illegal JobId range %s - %s, ignored\n"), tok, tok2); - } - - return true; -} - /* * do_job_delete now performs the actual delete operation atomically */ @@ -1699,8 +1612,7 @@ static void do_mount_cmd(UAContext *ua, const char *command) ua->send_msg("%s", sd->msg); } sd->signal(BNET_TERMINATE); - sd->close(); - jcr->store_bsock = NULL; + free_bsock(ua->jcr->store_bsock); } /* @@ -1809,7 +1721,7 @@ int wait_cmd(UAContext *ua, const char *cmd) return 1; } - i = find_arg_with_value(ua, NT_("timeout")); + i = find_arg_with_value(ua, NT_("timeout")); if (i > 0 && ua->argv[i]) { stop_time = time(NULL) + str_to_int64(ua->argv[i]); } @@ -1855,7 +1767,7 @@ int wait_cmd(UAContext *ua, const char *cmd) } else if (strcasecmp(ua->argk[i], "mount") == 0) { for (bool waiting=false; !waiting; ) { foreach_jcr(jcr) { - if (jcr->JobId != 0 && + if (jcr->JobId != 0 && (jcr->JobStatus == JS_WaitMedia || jcr->JobStatus == JS_WaitMount)) { waiting = true; break; @@ -1937,8 +1849,8 @@ int wait_cmd(UAContext *ua, const char *cmd) } ua->send_msg("JobId=%i\n", jobid) ; - ua->send_msg("JobStatus=%s (%c)\n", - job_status_to_str(jobstatus), + ua->send_msg("JobStatus=%s (%c)\n", + job_status_to_str(jobstatus), jobstatus) ; if (ua->gui || ua->api) { @@ -1956,7 +1868,7 @@ static int help_cmd(UAContext *ua, const char *cmd) for (i=0; iargc == 2) { if (!strcasecmp(ua->argk[1], commands[i].key)) { - ua->send_msg(_(" %-13s %s\n\nArguments:\n\t%s\n"), commands[i].key, + ua->send_msg(_(" %-13s %s\n\nArguments:\n\t%s\n"), commands[i].key, commands[i].help, commands[i].usage); break; } @@ -2000,7 +1912,7 @@ int qhelp_cmd(UAContext *ua, const char *cmd) return 1; } -#if 1 +#if 1 static int version_cmd(UAContext *ua, const char *cmd) { ua->send_msg(_("%s Version: %s (%s) %s %s %s %s\n"), my_name, VERSION, BDATE, @@ -2009,7 +1921,7 @@ static int version_cmd(UAContext *ua, const char *cmd) } #else /* - * Test code -- turned on only for debug testing + * Test code -- turned on only for debug testing */ static int version_cmd(UAContext *ua, const char *cmd) { @@ -2027,27 +1939,27 @@ static int version_cmd(UAContext *ua, const char *cmd) } #endif -/* +/* * This call uses open_client_db() and force a * new dedicated connection to the catalog */ bool open_new_client_db(UAContext *ua) -{ +{ bool ret; /* Force a new dedicated connection */ - close_db(ua); ua->force_mult_db_connections = true; ret = open_client_db(ua); ua->force_mult_db_connections = false; + return ret; } -/* +/* * This call explicitly checks for a catalog=xxx and * if given, opens that catalog. It also checks for - * client=xxx and if found, opens the catalog - * corresponding to that client. If we still don't + * client=xxx and if found, opens the catalog + * corresponding to that client. If we still don't * have a catalog, look for a Job keyword and get the * catalog from its client record. */ @@ -2130,9 +2042,20 @@ bool open_db(UAContext *ua) { bool mult_db_conn; + /* The force_mult_db_connections is telling us if we modify the + * private or the shared link + */ + if (ua->force_mult_db_connections) { + ua->db = ua->private_db; + + } else { + ua->db = ua->shared_db; + } + if (ua->db) { return true; } + if (!ua->catalog) { ua->catalog = get_catalog_resource(ua); if (!ua->catalog) { @@ -2150,7 +2073,8 @@ bool open_db(UAContext *ua) ua->jcr->catalog = ua->catalog; Dmsg0(100, "UA Open database\n"); - ua->db = db_init_database(ua->jcr, ua->catalog->db_driver, ua->catalog->db_name, + ua->db = db_init_database(ua->jcr, ua->catalog->db_driver, + ua->catalog->db_name, ua->catalog->db_user, ua->catalog->db_password, ua->catalog->db_address, ua->catalog->db_port, ua->catalog->db_socket, @@ -2165,8 +2089,17 @@ bool open_db(UAContext *ua) return false; } ua->jcr->db = ua->db; + + /* Depending on the type of connection, we set the right variable */ + if (ua->force_mult_db_connections) { + ua->private_db = ua->db; + + } else { + ua->shared_db = ua->db; + } + if (!ua->api) { - ua->send_msg(_("Using Catalog \"%s\"\n"), ua->catalog->name()); + ua->send_msg(_("Using Catalog \"%s\"\n"), ua->catalog->name()); } Dmsg1(150, "DB %s opened\n", ua->catalog->db_name); return true; @@ -2174,11 +2107,19 @@ bool open_db(UAContext *ua) void close_db(UAContext *ua) { - if (ua->db) { - db_close_database(ua->jcr, ua->db); - ua->db = NULL; - if (ua->jcr) { - ua->jcr->db = NULL; - } + if (ua->jcr) { + ua->jcr->db = NULL; } + + if (ua->shared_db) { + db_close_database(ua->jcr, ua->shared_db); + ua->shared_db = NULL; + } + + if (ua->private_db) { + db_close_database(ua->jcr, ua->private_db); + ua->private_db = NULL; + } + + ua->db = NULL; } diff --git a/bacula/src/dird/ua_dotcmds.c b/bacula/src/dird/ua_dotcmds.c index d78fa3fbd7..c4779955a0 100644 --- a/bacula/src/dird/ua_dotcmds.c +++ b/bacula/src/dird/ua_dotcmds.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2002-2011 Free Software Foundation Europe e.V. + Copyright (C) 2002-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * @@ -81,7 +69,10 @@ static bool dot_bvfs_versions(UAContext *ua, const char *cmd); static bool dot_bvfs_restore(UAContext *ua, const char *cmd); static bool dot_bvfs_cleanup(UAContext *ua, const char *cmd); static bool dot_bvfs_clear_cache(UAContext *ua, const char *cmd); +static bool dot_bvfs_decode_lstat(UAContext *ua, const char *cmd); +static bool dot_bvfs_get_volumes(UAContext *ua, const char *cmd); +static bool putfile_cmd(UAContext *ua, const char *cmd); static bool api_cmd(UAContext *ua, const char *cmd); static bool sql_cmd(UAContext *ua, const char *cmd); static bool dot_quit_cmd(UAContext *ua, const char *cmd); @@ -106,6 +97,7 @@ static struct cmdstruct commands[] = { /* help */ /* can be used in runscript * { NT_(".msgs"), msgscmd, NULL, false}, { NT_(".pools"), poolscmd, NULL, true}, { NT_(".quit"), dot_quit_cmd, NULL, false}, + { NT_(".putfile"), putfile_cmd, NULL, false}, /* use @putfile */ { NT_(".sql"), sql_cmd, NULL, false}, { NT_(".status"), dot_status_cmd, NULL, false}, { NT_(".storage"), storagecmd, NULL, true}, @@ -116,11 +108,13 @@ static struct cmdstruct commands[] = { /* help */ /* can be used in runscript * { NT_(".actiononpurge"),aopcmd, NULL, true}, { NT_(".bvfs_lsdirs"), dot_bvfs_lsdirs, NULL, true}, { NT_(".bvfs_lsfiles"),dot_bvfs_lsfiles, NULL, true}, + { NT_(".bvfs_get_volumes"),dot_bvfs_get_volumes,NULL, true}, { NT_(".bvfs_update"), dot_bvfs_update, NULL, true}, { NT_(".bvfs_get_jobids"), dot_bvfs_get_jobids, NULL, true}, { NT_(".bvfs_versions"), dot_bvfs_versions, NULL, true}, - { NT_(".bvfs_restore"), dot_bvfs_restore, NULL, true}, - { NT_(".bvfs_cleanup"), dot_bvfs_cleanup, NULL, true}, + { NT_(".bvfs_restore"), dot_bvfs_restore, NULL, true}, + { NT_(".bvfs_cleanup"), dot_bvfs_cleanup, NULL, true}, + { NT_(".bvfs_decode_lstat"),dot_bvfs_decode_lstat,NULL, true}, { NT_(".bvfs_clear_cache"),dot_bvfs_clear_cache,NULL, false}, { NT_(".types"), typescmd, NULL, false} }; @@ -129,7 +123,7 @@ static struct cmdstruct commands[] = { /* help */ /* can be used in runscript * /* * Execute a command from the UA */ -bool do_a_dot_command(UAContext *ua) +bool do_a_dot_command(UAContext *ua) { int i; int len; @@ -178,6 +172,45 @@ bool do_a_dot_command(UAContext *ua) return ok; } + +static bool dot_bvfs_decode_lstat(UAContext *ua, const char *cmd) +{ + int32_t LinkFI; + struct stat sp; + POOL_MEM q; + int pos = find_arg_with_value(ua, "lstat"); + + if (pos > 0) { + for (char *p = ua->argv[pos] ; *p ; p++) { + if (! (B_ISALPHA(*p) || B_ISDIGIT(*p) || B_ISSPACE(*p) || *p == '/' || *p == '+' || *p == '-')) { + ua->error_msg("Can't accept %c in lstat\n", *p); + return true; + } + } + + decode_stat(ua->argv[pos], &sp, sizeof(sp), &LinkFI); + Mmsg(q, "st_nlink=%lld\nst_mode=%lld\nst_uid=%lld\nst_gid=%lld\nst_size=%lld\n" + "st_blocks=%lld\nst_ino=%lld\nst_ctime=%lld\nst_mtime=%lld\nst_mtime=%lld\n" + "st_dev=%lld\nLinkFI=%lld\n", + (int64_t) sp.st_nlink, + (int64_t) sp.st_mode, + (int64_t) sp.st_uid, + (int64_t) sp.st_gid, + (int64_t) sp.st_size, + (int64_t) sp.st_blocks, + (int64_t) sp.st_ino, + (int64_t) sp.st_ctime, + (int64_t) sp.st_mtime, + (int64_t) sp.st_atime, + (int64_t) sp.st_dev, + (int64_t) LinkFI + ); + + ua->send_msg("%s", q.c_str()); + } + return true; +} + static bool dot_bvfs_update(UAContext *ua, const char *cmd) { if (!open_new_client_db(ua)) { @@ -187,21 +220,20 @@ static bool dot_bvfs_update(UAContext *ua, const char *cmd) int pos = find_arg_with_value(ua, "jobid"); if (pos != -1 && is_a_number_list(ua->argv[pos])) { if (!bvfs_update_path_hierarchy_cache(ua->jcr, ua->db, ua->argv[pos])) { - ua->error_msg("ERROR: BVFS reported a problem for %s\n", + ua->error_msg("ERROR: BVFS reported a problem for %s\n", ua->argv[pos]); } } else { /* update cache for all jobids */ bvfs_update_cache(ua->jcr, ua->db); } - - close_db(ua); + return true; } static bool dot_bvfs_clear_cache(UAContext *ua, const char *cmd) { - if (!open_new_client_db(ua)) { + if (!open_client_db(ua)) { return 1; } @@ -214,7 +246,6 @@ static bool dot_bvfs_clear_cache(UAContext *ua, const char *cmd) ua->error_msg("Can't find 'yes' argument\n"); } - close_db(ua); return true; } @@ -226,7 +257,7 @@ static int bvfs_result_handler(void *ctx, int fields, char **row) char *fileid=row[BVFS_FileId]; char *lstat=row[BVFS_LStat]; char *jobid=row[BVFS_JobId]; - + char empty[] = "A A A A A A A A A A A A A A"; char zero[] = "0"; @@ -249,13 +280,17 @@ static int bvfs_result_handler(void *ctx, int fields, char **row) } else if (bvfs_is_version(row)) { ua->send_msg("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n", row[BVFS_PathId], row[BVFS_FilenameId], fileid, jobid, - lstat, row[BVFS_Md5], row[BVFS_VolName], + lstat, row[BVFS_Md5], row[BVFS_VolName], row[BVFS_VolInchanger]); } else if (bvfs_is_file(row)) { ua->send_msg("%s\t%s\t%s\t%s\t%s\t%s\n", row[BVFS_PathId], row[BVFS_FilenameId], fileid, jobid, lstat, row[BVFS_Name]); + + } else if (bvfs_is_volume_list(row)) { + ua->send_msg("%s\t%s\n", row[BVFS_VolName], + row[BVFS_VolInchanger]); } return 0; @@ -263,8 +298,8 @@ static int bvfs_result_handler(void *ctx, int fields, char **row) static bool bvfs_parse_arg_version(UAContext *ua, char **client, - DBId_t *fnid, - bool *versions, + FileId_t *fnid, + bool *versions, bool *copies) { *fnid=0; @@ -294,7 +329,7 @@ static bool bvfs_parse_arg_version(UAContext *ua, return (*client && *fnid > 0); } -static bool bvfs_parse_arg(UAContext *ua, +static bool bvfs_parse_arg(UAContext *ua, DBId_t *pathid, char **path, char **jobid, char **username, int *limit, int *offset) @@ -303,8 +338,10 @@ static bool bvfs_parse_arg(UAContext *ua, *limit=2000; *offset=0; *path=NULL; - *jobid=NULL; *username=NULL; + if (jobid) { + *jobid=NULL; + } for (int i=1; iargc; i++) { if (strcasecmp(ua->argk[i], NT_("pathid")) == 0) { @@ -320,8 +357,8 @@ static bool bvfs_parse_arg(UAContext *ua, if (strcasecmp(ua->argk[i], NT_("username")) == 0) { *username = ua->argv[i]; } - - if (strcasecmp(ua->argk[i], NT_("jobid")) == 0) { + + if (jobid && strcasecmp(ua->argk[i], NT_("jobid")) == 0) { if (is_a_number_list(ua->argv[i])) { *jobid = ua->argv[i]; } @@ -340,11 +377,11 @@ static bool bvfs_parse_arg(UAContext *ua, } } - if (!((*pathid || *path) && *jobid)) { + if (jobid && *jobid == NULL) { return false; } - if (!open_client_db(ua)) { + if (!(*pathid || *path)) { return false; } @@ -357,7 +394,9 @@ static bool dot_bvfs_cleanup(UAContext *ua, const char *cmd) { int i; if ((i = find_arg_with_value(ua, "path")) >= 0) { - open_client_db(ua); + if (!open_client_db(ua)) { + return 1; + } Bvfs fs(ua->jcr, ua->db); fs.drop_restore_list(ua->argv[i]); } @@ -382,6 +421,10 @@ static bool dot_bvfs_restore(UAContext *ua, const char *cmd) return true; /* not enough param */ } + if (!open_new_client_db(ua)) { + return true; + } + Bvfs fs(ua->jcr, ua->db); fs.set_username(username); fs.set_jobids(jobid); @@ -401,10 +444,63 @@ static bool dot_bvfs_restore(UAContext *ua, const char *cmd) } else { ua->error_msg("Can't create restore list\n"); } + return true; } -/* +/* + * .bvfs_get_volumes [path=/ filename=test jobid=1 | fileid=1] + * Vol001 + * Vol002 + * Vol003 + */ +static bool dot_bvfs_get_volumes(UAContext *ua, const char *cmd) +{ + DBId_t pathid=0; + FileId_t fileid=0; + char *path=NULL, *jobid=NULL, *username=NULL; + char *filename=NULL; + int limit=2000, offset=0; + int i; + + bvfs_parse_arg(ua, &pathid, &path, &jobid, &username, &limit, &offset); + + if ((i = find_arg_with_value(ua, "filename")) >= 0) { + if (!(jobid && (path || pathid))) { /* Need JobId and Path/PathId */ + ua->error_msg("Can't find jobid, pathid or path argument\n"); + return true; + } + + filename = ua->argv[i]; + + } else if ((i = find_arg_with_value(ua, "fileid")) >= 0) { + if (!is_a_number(ua->argv[i])) { + ua->error_msg("Expecting integer for FileId, got %s\n", ua->argv[i]); + return true; + } + fileid = str_to_int64(ua->argv[i]); + } + + if (!open_new_client_db(ua)) { + return 1; + } + + Bvfs fs(ua->jcr, ua->db); + fs.set_username(username); + fs.set_handler(bvfs_result_handler, ua); + fs.set_limit(limit); + + if (filename) { + /* TODO */ + + } else { + fs.get_volumes(fileid); + } + + return true; +} + +/* * .bvfs_lsfiles jobid=1,2,3,4 pathid=10 * .bvfs_lsfiles jobid=1,2,3,4 path=/ */ @@ -413,7 +509,7 @@ static bool dot_bvfs_lsfiles(UAContext *ua, const char *cmd) DBId_t pathid=0; int limit=2000, offset=0; char *path=NULL, *jobid=NULL, *username=NULL; - char *pattern=NULL; + char *pattern=NULL, *filename=NULL; int i; if (!bvfs_parse_arg(ua, &pathid, &path, &jobid, &username, @@ -425,21 +521,31 @@ static bool dot_bvfs_lsfiles(UAContext *ua, const char *cmd) if ((i = find_arg_with_value(ua, "pattern")) >= 0) { pattern = ua->argv[i]; } + if ((i = find_arg_with_value(ua, "filename")) >= 0) { + filename = ua->argv[i]; + } + + if (!open_new_client_db(ua)) { + return 1; + } Bvfs fs(ua->jcr, ua->db); fs.set_username(username); - fs.set_jobids(jobid); + fs.set_jobids(jobid); fs.set_handler(bvfs_result_handler, ua); fs.set_limit(limit); if (pattern) { fs.set_pattern(pattern); } + if (filename) { + fs.set_filename(filename); + } if (pathid) { fs.ch_dir(pathid); } else { fs.ch_dir(path); } - + fs.set_offset(offset); fs.ls_files(); @@ -447,7 +553,7 @@ static bool dot_bvfs_lsfiles(UAContext *ua, const char *cmd) return true; } -/* +/* * .bvfs_lsdirs jobid=1,2,3,4 pathid=10 * .bvfs_lsdirs jobid=1,2,3,4 path=/ * .bvfs_lsdirs jobid=1,2,3,4 path= @@ -465,9 +571,13 @@ static bool dot_bvfs_lsdirs(UAContext *ua, const char *cmd) return true; /* not enough param */ } + if (!open_new_client_db(ua)) { + return 1; + } + Bvfs fs(ua->jcr, ua->db); fs.set_username(username); - fs.set_jobids(jobid); + fs.set_jobids(jobid); fs.set_limit(limit); fs.set_handler(bvfs_result_handler, ua); @@ -485,20 +595,21 @@ static bool dot_bvfs_lsdirs(UAContext *ua, const char *cmd) return true; } -/* - * .bvfs_versions jobid=x fnid=10 pathid=10 copies versions - * (jobid isn't used) +/* + * .bvfs_versions fnid=10 pathid=10 copies versions + * */ static bool dot_bvfs_versions(UAContext *ua, const char *cmd) { - DBId_t pathid=0, fnid=0; + DBId_t pathid=0; + FileId_t fnid=0; int limit=2000, offset=0; - char *path=NULL, *jobid=NULL, *client=NULL, *username=NULL; + char *path=NULL, *client=NULL, *username=NULL; bool copies=false, versions=false; - if (!bvfs_parse_arg(ua, &pathid, &path, &jobid, &username, + if (!bvfs_parse_arg(ua, &pathid, &path, NULL, &username, &limit, &offset)) { - ua->error_msg("Can't find jobid, pathid or path argument\n"); + ua->error_msg("Can't find pathid or path argument\n"); return true; /* not enough param */ } @@ -508,6 +619,10 @@ static bool dot_bvfs_versions(UAContext *ua, const char *cmd) return true; /* not enough param */ } + if (!open_new_client_db(ua)) { + return 1; + } + Bvfs fs(ua->jcr, ua->db); fs.set_limit(limit); fs.set_see_all_versions(versions); @@ -521,25 +636,39 @@ static bool dot_bvfs_versions(UAContext *ua, const char *cmd) /* .bvfs_get_jobids jobid=1 * -> returns needed jobids to restore + * .bvfs_get_jobids ujobid=xxx only + * -> returns the jobid of the job + * .bvfs_get_jobids jobid=1 jobname + * -> returns the jobname + * .bvfs_get_jobids client=xxx + * -> returns all jobid for the client * .bvfs_get_jobids jobid=1 all * -> returns needed jobids to restore with all filesets a JobId=1 time + * .bvfs_get_jobids job=XXXXX + * -> returns needed jobids to restore with the jobname * .bvfs_get_jobids ujobid=JobName * -> returns needed jobids to restore */ static bool dot_bvfs_get_jobids(UAContext *ua, const char *cmd) { JOB_DBR jr; + memset(&jr, 0, sizeof(JOB_DBR)); + db_list_ctx jobids, tempids; int pos; char ed1[50]; POOL_MEM query; dbid_list ids; /* Store all FileSetIds for this client */ - if (!open_client_db(ua)) { + if (!open_new_client_db(ua)) { return true; } - memset(&jr, 0, sizeof(JOB_DBR)); + Bvfs fs(ua->jcr, ua->db); + + if ((pos = find_arg_with_value(ua, "username")) >= 0) { + fs.set_username(ua->argv[pos]); + } if ((pos = find_arg_with_value(ua, "ujobid")) >= 0) { bstrncpy(jr.Job, ua->argv[pos], sizeof(jr.Job)); @@ -547,6 +676,73 @@ static bool dot_bvfs_get_jobids(UAContext *ua, const char *cmd) if ((pos = find_arg_with_value(ua, "jobid")) >= 0) { jr.JobId = str_to_int64(ua->argv[pos]); + + /* Guess JobId from Job name, take the last successful jobid */ + } else if ((pos = find_arg_with_value(ua, "job")) >= 0) { + JOB *job; + bool ret; + int32_t JobId=0; + + bstrncpy(jr.Name, ua->argv[pos], MAX_NAME_LENGTH); + /* TODO: enhance this function to take client and/or fileset as argument*/ + + job = GetJobResWithName(jr.Name); + if (!job) { + ua->error_msg(_("Unable to get Job record for Job=%s\n"), jr.Name); + return true; + } + db_lock(ua->db); + Mmsg(ua->db->cmd, + "SELECT JobId " + "FROM Job JOIN FileSet USING (FileSetId) JOIN Client USING (ClientId) " + "WHERE Client.Name = '%s' AND FileSet.FileSet = '%s' " + "AND Job.Type = 'B' AND Job.JobStatus IN ('T', 'W') " + "ORDER By JobTDate DESC LIMIT 1", + job->client->name(), job->fileset->name()); + ret = db_sql_query(ua->db, ua->db->cmd, db_int_handler, &JobId); + db_unlock(ua->db); + + if (!ret) { + ua->error_msg(_("Unable to get last Job record for Job=%s\n"),jr.Name); + } + + jr.JobId = JobId; + + /* Get JobId from ujobid */ + } else if ((pos = find_arg_with_value(ua, "ujobid")) >= 0) { + bstrncpy(jr.Job, ua->argv[pos], MAX_NAME_LENGTH); + + /* Return all backup jobid for a client */ + } else if ((pos = find_arg_with_value(ua, "client")) >= 0) { + CLIENT *cli; + bool ret; + + cli = GetClientResWithName(ua->argv[pos]); + if (!cli) { + ua->error_msg(_("Unable to get Client record for Client=%s\n"), + ua->argv[pos]); + return true; + } + db_lock(ua->db); + Mmsg(ua->db->cmd, + "SELECT JobId " + "FROM Job JOIN Client USING (ClientId) " + "WHERE Client.Name = '%s' " + "AND Job.Type = 'B' AND Job.JobStatus IN ('T', 'W') " + "ORDER By JobTDate ASC", + cli->name()); + ret = db_sql_query(ua->db, ua->db->cmd, db_list_handler, &jobids); + db_unlock(ua->db); + + if (!ret) { + ua->error_msg(_("Unable to get last Job record for Client=%s\n"), + cli->name()); + } + + /* Apply the ACL filter on JobIds */ + fs.set_jobids(jobids.list); + ua->send_msg("%s\n", fs.get_jobids()); + return true; } if (!db_get_job_record(ua->jcr, ua->db, &jr)) { @@ -555,9 +751,24 @@ static bool dot_bvfs_get_jobids(UAContext *ua, const char *cmd) return true; } - /* When in level base, we don't rely on any Full/Incr/Diff */ - if (jr.JobLevel == L_BASE) { - ua->send_msg("%s\n", edit_int64(jr.JobId, ed1)); + /* Display only the requested jobid or + * When in level base, we don't rely on any Full/Incr/Diff + */ + if (find_arg(ua, "only") > 0 || jr.JobLevel == L_BASE) { + /* Apply the ACL filter on JobIds */ + fs.set_jobid(jr.JobId); + ua->send_msg("%s\n", fs.get_jobids()); + return true; + } + + /* Display only the requested job name + */ + if (find_arg(ua, "jobname") > 0) { + /* Apply the ACL filter on JobIds */ + fs.set_jobid(jr.JobId); + if (str_to_int64(fs.get_jobids()) == (int64_t)jr.JobId) { + ua->send_msg("%s\n", jr.Job); + } return true; } @@ -584,7 +795,8 @@ static bool dot_bvfs_get_jobids(UAContext *ua, const char *cmd) jobids.add(tempids); } - ua->send_msg("%s\n", jobids.list); + fs.set_jobids(jobids.list); + ua->send_msg("%s\n", fs.get_jobids()); return true; } @@ -614,7 +826,7 @@ static void do_storage_cmd(UAContext *ua, STORE *store, const char *cmd) BSOCK *sd; JCR *jcr = ua->jcr; USTORE lstore; - + lstore.store = store; pm_strcpy(lstore.store_source, _("unknown source")); set_wstorage(jcr, &lstore); @@ -632,8 +844,7 @@ static void do_storage_cmd(UAContext *ua, STORE *store, const char *cmd) ua->send_msg("%s", sd->msg); } sd->signal(BNET_TERMINATE); - sd->close(); - jcr->store_bsock = NULL; + free_bsock(ua->jcr->store_bsock); return; } @@ -658,8 +869,7 @@ static void do_client_cmd(UAContext *ua, CLIENT *client, const char *cmd) ua->send_msg("%s", fd->msg); } fd->signal(BNET_TERMINATE); - fd->close(); - ua->jcr->file_bsock = NULL; + free_bsock(ua->jcr->file_bsock); return; } @@ -710,7 +920,7 @@ static bool admin_cmds(UAContext *ua, const char *cmd) client = select_client_resource(ua); } } - + if (strcasecmp(ua->argk[i], NT_("store")) == 0 || strcasecmp(ua->argk[i], NT_("storage")) == 0 || strcasecmp(ua->argk[i], NT_("sd")) == 0) { @@ -760,7 +970,7 @@ static bool admin_cmds(UAContext *ua, const char *cmd) if (strncmp(remote_cmd, ".die", 4) == 0) { if (do_deadlock) { ua->send_msg(_("The Director will generate a deadlock.\n")); - P(mutex); + P(mutex); P(mutex); } ua->send_msg(_("The Director will segment fault.\n")); @@ -791,7 +1001,77 @@ static bool admin_cmds(UAContext *ua, const char *cmd) #endif -/* +/* + * Send a file to the director from bconsole @putfile command + * The .putfile can not be used directly. + */ +static bool putfile_cmd(UAContext *ua, const char *cmd) +{ + int pos, i, pnl, fnl; + bool ok = true; + POOLMEM *name = get_pool_memory(PM_FNAME); + POOLMEM *path = get_pool_memory(PM_FNAME); + POOLMEM *fname= get_pool_memory(PM_FNAME); + const char *key = "putfile"; + FILE *fp = NULL; + + if ((pos = find_arg_with_value(ua, "key")) > 0) { + /* Check the string if the string is valid */ + for (i=0; ua->argv[pos][i] && isalnum(ua->argv[pos][i]) && i < 16; i++); + + if (ua->argv[pos][i] == 0) { + key = ua->argv[pos]; + + } else { + ua->error_msg("Invalid key name for putfile command"); + ok = false; + goto bail_out; + } + } + + /* the (intptr_t)ua will allow one file per console session */ + make_unique_filename(&name, (intptr_t)ua, (char *)key); + + fp = fopen(name, "w"); + if (!fp) { + berrno be; + ua->error_msg("Unable to open destination file. ERR=%s\n", + be.bstrerror(errno)); + ok = false; + goto bail_out; + } + + while (ua->UA_sock->recv() > 0) { + if (fwrite(ua->UA_sock->msg, ua->UA_sock->msglen, 1, fp) != 1) { + berrno be; + ua->error_msg("Unable to write to the destination file. ERR=%s\n", + be.bstrerror(errno)); + ok = false; + /* TODO: Check if we need to quit here (data will still be in the + * buffer...) */ + } + } + + split_path_and_filename(name, &path, &pnl, &fname, &fnl); + +bail_out: + if (ok) { + ua->send_msg("OK\n"); + + } else { + ua->send_msg("ERROR\n"); + } + + free_pool_memory(name); + free_pool_memory(path); + free_pool_memory(fname); + if (fp) { + fclose(fp); + } + return true; +} + +/* * Can use an argument to filter on JobType * .jobs [type=B] */ @@ -843,7 +1123,7 @@ static bool catalogscmd(UAContext *ua, const char *cmd) static bool clientscmd(UAContext *ua, const char *cmd) { - CLIENT *client; + CLIENT *client; LockRes(); foreach_res(client, R_CLIENT) { if (acl_access_ok(ua, Client_ACL, client->name())) { @@ -867,7 +1147,7 @@ static bool msgscmd(UAContext *ua, const char *cmd) static bool poolscmd(UAContext *ua, const char *cmd) { - POOL *pool; + POOL *pool; LockRes(); foreach_res(pool, R_POOL) { if (acl_access_ok(ua, Pool_ACL, pool->name())) { @@ -919,8 +1199,17 @@ static bool typescmd(UAContext *ua, const char *cmd) */ static bool api_cmd(UAContext *ua, const char *cmd) { - if (ua->argc == 2) { + int i; + if (ua->argc >= 2) { ua->api = atoi(ua->argk[1]); + + /* Get output configuration options such as time format or separator */ + if ((i = find_arg_with_value(ua, "api_opts")) > 0) { + bstrncpy(ua->api_opts, ua->argv[i], sizeof(ua->api_opts)); + + } else { + *ua->api_opts = 0; + } } else { ua->api = 1; } @@ -936,7 +1225,7 @@ static int client_backups_handler(void *ctx, int num_field, char **row) } /* - * Return the backups for this client + * Return the backups for this client * * .backups client=xxx fileset=yyy * @@ -946,7 +1235,7 @@ static bool backupscmd(UAContext *ua, const char *cmd) if (!open_client_db(ua)) { return true; } - if (ua->argc != 3 || strcmp(ua->argk[1], "client") != 0 || + if (ua->argc != 3 || strcmp(ua->argk[1], "client") != 0 || strcmp(ua->argk[2], "fileset") != 0) { return true; } @@ -991,7 +1280,7 @@ static int sql_handler(void *ctx, int num_field, char **row) static bool sql_cmd(UAContext *ua, const char *cmd) { int index; - if (!open_client_db(ua)) { + if (!open_new_client_db(ua)) { return true; } index = find_arg_with_value(ua, "query"); @@ -1006,7 +1295,7 @@ static bool sql_cmd(UAContext *ua, const char *cmd) } return true; } - + static int one_handler(void *ctx, int num_field, char **row) { UAContext *ua = (UAContext *)ctx; @@ -1019,9 +1308,9 @@ static bool mediatypescmd(UAContext *ua, const char *cmd) if (!open_client_db(ua)) { return true; } - if (!db_sql_query(ua->db, + if (!db_sql_query(ua->db, "SELECT DISTINCT MediaType FROM MediaType ORDER BY MediaType", - one_handler, (void *)ua)) + one_handler, (void *)ua)) { ua->error_msg(_("List MediaType failed: ERR=%s\n"), db_strerror(ua->db)); } @@ -1033,9 +1322,9 @@ static bool mediacmd(UAContext *ua, const char *cmd) if (!open_client_db(ua)) { return true; } - if (!db_sql_query(ua->db, + if (!db_sql_query(ua->db, "SELECT DISTINCT Media.VolumeName FROM Media ORDER BY VolumeName", - one_handler, (void *)ua)) + one_handler, (void *)ua)) { ua->error_msg(_("List Media failed: ERR=%s\n"), db_strerror(ua->db)); } @@ -1047,9 +1336,9 @@ static bool locationscmd(UAContext *ua, const char *cmd) if (!open_client_db(ua)) { return true; } - if (!db_sql_query(ua->db, + if (!db_sql_query(ua->db, "SELECT DISTINCT Location FROM Location ORDER BY Location", - one_handler, (void *)ua)) + one_handler, (void *)ua)) { ua->error_msg(_("List Location failed: ERR=%s\n"), db_strerror(ua->db)); } @@ -1112,7 +1401,7 @@ static bool defaultscmd(UAContext *ua, const char *cmd) return true; } - /* Job defaults */ + /* Job defaults */ if (strcmp(ua->argk[1], "job") == 0) { if (!acl_access_ok(ua, Job_ACL, ua->argv[1])) { return true; @@ -1133,11 +1422,11 @@ static bool defaultscmd(UAContext *ua, const char *cmd) ua->send_msg("enabled=%d", job->enabled); ua->send_msg("catalog=%s", job->client->catalog->name()); } - } + } /* Client defaults */ else if (strcmp(ua->argk[1], "client") == 0) { if (!acl_access_ok(ua, Client_ACL, ua->argv[1])) { - return true; + return true; } client = (CLIENT *)GetResWithName(R_CLIENT, ua->argv[1]); if (client) { diff --git a/bacula/src/dird/ua_input.c b/bacula/src/dird/ua_input.c index d264d10272..d8dd4aff1e 100644 --- a/bacula/src/dird/ua_input.c +++ b/bacula/src/dird/ua_input.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2001-2010 Free Software Foundation Europe e.V. + Copyright (C) 2001-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * @@ -42,18 +30,18 @@ /* Exported functions */ -/* +/* * If subprompt is set, we send a BNET_SUB_PROMPT signal otherwise * send a BNET_TEXT_INPUT signal. */ -int get_cmd(UAContext *ua, const char *prompt, bool subprompt) +bool get_cmd(UAContext *ua, const char *prompt, bool subprompt) { BSOCK *sock = ua->UA_sock; int stat; ua->cmd[0] = 0; if (!sock || ua->batch) { /* No UA or batch mode */ - return 0; + return false; } if (!subprompt && ua->api) { sock->signal(BNET_TEXT_INPUT); @@ -67,8 +55,8 @@ int get_cmd(UAContext *ua, const char *prompt, bool subprompt) if (stat == BNET_SIGNAL) { continue; /* ignore signals */ } - if (is_bnet_stop(sock)) { - return 0; /* error or terminate */ + if (sock->is_stop()) { + return false; /* error or terminate */ } pm_strcpy(ua->cmd, sock->msg); strip_trailing_junk(ua->cmd); @@ -77,11 +65,33 @@ int get_cmd(UAContext *ua, const char *prompt, bool subprompt) } /* Lone dot => break */ if (ua->cmd[0] == '.' && ua->cmd[1] == 0) { - return 0; + return false; } break; } - return 1; + return true; +} + +/* + * Get a selection list + * We get a command from the user, scan it, then + * return when OK + * Returns true if OK + * false if error + */ +bool get_selection_list(UAContext *ua, sellist &sl, + const char *prompt, bool subprompt) +{ + for ( ;; ) { + if (!get_cmd(ua, prompt, subprompt)) { + return false; + } + if (sl.set_string(ua->cmd, true) < 0 && sl.get_errmsg()) { + ua->send_msg("%s", sl.get_errmsg()); + continue; + } + return true; + } } /* @@ -171,12 +181,12 @@ bool get_yesno(UAContext *ua, const char *prompt) } } -/* +/* * Gets an Enabled value => 0, 1, 2, yes, no, archived * Returns: 0, 1, 2 if OK * -1 on error */ -int get_enabled(UAContext *ua, const char *val) +int get_enabled(UAContext *ua, const char *val) { int Enabled = -1; @@ -184,14 +194,14 @@ int get_enabled(UAContext *ua, const char *val) Enabled = 1; } else if (strcasecmp(val, "no") == 0 || strcasecmp(val, "false") == 0) { Enabled = 0; - } else if (strcasecmp(val, "archived") == 0) { + } else if (strcasecmp(val, "archived") == 0) { Enabled = 2; } else { Enabled = atoi(val); } if (Enabled < 0 || Enabled > 2) { ua->error_msg(_("Invalid Enabled value, it must be yes, no, archived, 0, 1, or 2\n")); - return -1; + return -1; } return Enabled; } diff --git a/bacula/src/dird/ua_label.c b/bacula/src/dird/ua_label.c index 93899cbd27..84d42b0f8e 100644 --- a/bacula/src/dird/ua_label.c +++ b/bacula/src/dird/ua_label.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2003-2012 Free Software Foundation Europe e.V. + Copyright (C) 2003-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * @@ -52,8 +40,8 @@ static bool send_label_request(UAContext *ua, MEDIA_DBR *mr, MEDIA_DBR *omr, static vol_list_t *get_vol_list_from_SD(UAContext *ua, bool scan); static void free_vol_list(vol_list_t *vol_list); static bool is_cleaning_tape(UAContext *ua, MEDIA_DBR *mr, POOL_DBR *pr); -static BSOCK *open_sd_bsock(UAContext *ua); -static void close_sd_bsock(UAContext *ua); +BSOCK *open_sd_bsock(UAContext *ua); +void close_sd_bsock(UAContext *ua); static char *get_volume_name_from_SD(UAContext *ua, int Slot, int drive); static int get_num_slots_from_SD(UAContext *ua); @@ -378,6 +366,7 @@ static int do_label(UAContext *ua, const char *cmd, int relabel) i = find_arg_with_value(ua, "oldvolume"); if (i >= 0) { bstrncpy(omr.VolumeName, ua->argv[i], sizeof(omr.VolumeName)); + omr.MediaId = 0; if (db_get_media_record(ua->jcr, ua->db, &omr)) { goto checkVol; } @@ -415,10 +404,8 @@ checkName: continue; } - /* Search by Media name so set VolumeName and clear MediaId. */ - mr.MediaId = 0; bstrncpy(mr.VolumeName, ua->cmd, sizeof(mr.VolumeName)); - + mr.MediaId = 0; /* If VolBytes are zero the Volume is not labeled */ if (db_get_media_record(ua->jcr, ua->db, &mr)) { if (mr.VolBytes != 0) { @@ -484,9 +471,9 @@ checkName: bstrncpy(dev_name, store.store->dev_name(), sizeof(dev_name)); ua->info_msg(_("Requesting to mount %s ...\n"), dev_name); bash_spaces(dev_name); - bnet_fsend(sd, "mount %s drive=%d", dev_name, drive); + sd->fsend("mount %s drive=%d", dev_name, drive); unbash_spaces(dev_name); - while (bnet_recv(sd) >= 0) { + while (sd->recv() >= 0) { ua->send_msg("%s", sd->msg); /* Here we can get * 3001 OK mount. Device=xxx or @@ -525,7 +512,7 @@ static void label_from_barcodes(UAContext *ua, int drive) char *slot_list; int max_slots; - + max_slots = get_num_slots_from_SD(ua); if (max_slots <= 0) { ua->warning_msg(_("No slots in changer to scan.\n")); @@ -698,14 +685,14 @@ static bool send_label_request(UAContext *ua, MEDIA_DBR *mr, MEDIA_DBR *omr, bash_spaces(omr->VolumeName); sd->fsend("relabel %s OldName=%s NewName=%s PoolName=%s " "MediaType=%s Slot=%d drive=%d", - dev_name, omr->VolumeName, mr->VolumeName, pr->Name, + dev_name, omr->VolumeName, mr->VolumeName, pr->Name, mr->MediaType, mr->Slot, drive); ua->send_msg(_("Sending relabel command from \"%s\" to \"%s\" ...\n"), omr->VolumeName, mr->VolumeName); } else { sd->fsend("label %s VolumeName=%s PoolName=%s MediaType=%s " "Slot=%d drive=%d", - dev_name, mr->VolumeName, pr->Name, mr->MediaType, + dev_name, mr->VolumeName, pr->Name, mr->MediaType, mr->Slot, drive); ua->send_msg(_("Sending label command for Volume \"%s\" Slot %d ...\n"), mr->VolumeName, mr->Slot); @@ -766,30 +753,6 @@ static bool send_label_request(UAContext *ua, MEDIA_DBR *mr, MEDIA_DBR *omr, return ok; } -static BSOCK *open_sd_bsock(UAContext *ua) -{ - STORE *store = ua->jcr->wstore; - - if (!ua->jcr->store_bsock) { - ua->send_msg(_("Connecting to Storage daemon %s at %s:%d ...\n"), - store->name(), store->address, store->SDport); - if (!connect_to_storage_daemon(ua->jcr, 10, SDConnectTimeout, 1)) { - ua->error_msg(_("Failed to connect to Storage daemon.\n")); - return NULL; - } - } - return ua->jcr->store_bsock; -} - -static void close_sd_bsock(UAContext *ua) -{ - if (ua->jcr->store_bsock) { - bnet_sig(ua->jcr->store_bsock, BNET_TERMINATE); - bnet_close(ua->jcr->store_bsock); - ua->jcr->store_bsock = NULL; - } -} - static char *get_volume_name_from_SD(UAContext *ua, int Slot, int drive) { STORE *store = ua->jcr->wstore; @@ -847,10 +810,10 @@ static vol_list_t *get_vol_list_from_SD(UAContext *ua, bool scan) bstrncpy(dev_name, store->dev_name(), sizeof(dev_name)); bash_spaces(dev_name); /* Ask for autochanger list of volumes */ - bnet_fsend(sd, NT_("autochanger list %s \n"), dev_name); + sd->fsend(NT_("autochanger list %s \n"), dev_name); /* Read and organize list of Volumes */ - while (bnet_recv(sd) >= 0) { + while (sd->recv() >= 0) { char *p; int Slot; strip_trailing_junk(sd->msg); @@ -916,7 +879,7 @@ static vol_list_t *get_vol_list_from_SD(UAContext *ua, bool scan) for (vol_list_t *tvl=vol_list; tvl; tvl=tvl->next) { if (tvl->Slot > vl->Slot) { /* no previous item, update vol_list directly */ - if (prev == vol_list) { + if (prev == vol_list) { vl->next = vol_list; vol_list = vl; @@ -1064,29 +1027,29 @@ static void content_send_info(UAContext *ua, char type, int Slot, char *vol_name strcpy(pr.Name, "?"); } ua->send_msg(slot_api_full_format, type, - Slot, mr.Slot, mr.VolumeName, - edit_uint64(mr.VolBytes, ed1), - mr.VolStatus, mr.MediaType, pr.Name, + Slot, mr.Slot, mr.VolumeName, + edit_uint64(mr.VolBytes, ed1), + mr.VolStatus, mr.MediaType, pr.Name, edit_uint64(mr.LastWritten, ed2), edit_uint64(mr.LastWritten+mr.VolRetention, ed3)); - + } else { /* Media unknown */ ua->send_msg(slot_api_full_format, - type, Slot, 0, mr.VolumeName, "?", "?", "?", "?", + type, Slot, 0, mr.VolumeName, "?", "?", "?", "?", "0", "0"); - + } } else { ua->send_msg(slot_api_empty_format, type, Slot); } -} +} -/* +/* * Input (output of mxt-changer listall): * * Drive content: D:Drive num:F:Slot loaded:Volume Name * D:0:F:2:vol2 or D:Drive num:E - * D:1:F:42:vol42 + * D:1:F:42:vol42 * D:3:E * * Slot content: @@ -1099,8 +1062,8 @@ static void content_send_info(UAContext *ua, char type, int Slot, char *vol_name * I:11:E or I:Slot num:E * I:12:F:vol40 * - * If a drive is loaded, the slot *should* be empty - * + * If a drive is loaded, the slot *should* be empty + * * Output: * * Drive list: D|Drive num|Slot loaded|Volume Name @@ -1136,10 +1099,10 @@ void status_content(UAContext *ua, STORE *store) bstrncpy(dev_name, store->dev_name(), sizeof(dev_name)); bash_spaces(dev_name); /* Ask for autochanger list of volumes */ - bnet_fsend(sd, NT_("autochanger listall %s \n"), dev_name); + sd->fsend(NT_("autochanger listall %s \n"), dev_name); /* Read and organize list of Drive, Slots and I/O Slots */ - while (bnet_recv(sd) >= 0) { + while (sd->recv() >= 0) { strip_trailing_junk(sd->msg); /* Check for returned SD messages */ diff --git a/bacula/src/dird/ua_output.c b/bacula/src/dird/ua_output.c index adef8a5264..00a6c3be89 100644 --- a/bacula/src/dird/ua_output.c +++ b/bacula/src/dird/ua_output.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2012 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * @@ -96,14 +84,14 @@ int gui_cmd(UAContext *ua, const char *cmd) return 1; } -/* - * Enter with Resources locked +/* + * Enter with Resources locked */ static void show_disabled_jobs(UAContext *ua) { JOB *job; bool first = true; - foreach_res(job, R_JOB) { + foreach_res(job, R_JOB) { if (!acl_access_ok(ua, Job_ACL, job->name())) { continue; } @@ -238,8 +226,8 @@ bail_out: * list jobs - lists all jobs run * list jobid=nnn - list job data for jobid * list ujobid=uname - list job data for unique jobid - * list job=name - list all jobs with "name" - * list jobname=name - same as above + * list job=name - list all jobs with "name" + * list jobname=name - same as above * list jobmedia jobid= * list jobmedia job=name * list joblog jobid= @@ -347,7 +335,7 @@ static int do_list_cmd(UAContext *ua, const char *cmd, e_list_type llist) db_list_base_files_for_job(ua->jcr, ua->db, jobid, prtit, ua); } } - + /* List FILES */ } else if (strcasecmp(ua->argk[i], NT_("files")) == 0) { @@ -448,6 +436,7 @@ static int do_list_cmd(UAContext *ua, const char *cmd, e_list_type llist) free_pool_memory(VolumeName); done = true; } + /* if no job or jobid keyword found, then we list all media */ if (!done) { int num_pools; @@ -514,7 +503,7 @@ static int do_list_cmd(UAContext *ua, const char *cmd, e_list_type llist) } } else if (strcasecmp(ua->argk[j], NT_("limit")) == 0 && ua->argv[j]) { limit = atoi(ua->argv[j]); - } + } } db_list_copies_records(ua->jcr,ua->db,limit,jobids,prtit,ua,llist); } else if (strcasecmp(ua->argk[i], NT_("limit")) == 0 @@ -530,7 +519,7 @@ static int do_list_cmd(UAContext *ua, const char *cmd, e_list_type llist) static bool list_nextvol(UAContext *ua, int ndays) { JOB *job; - JCR *jcr; + JCR *jcr; USTORE store; RUN *run; utime_t runtime; @@ -608,9 +597,9 @@ RUN *find_next_run(RUN *run, JOB *job, utime_t &runtime, int ndays) SCHED *sched; struct tm tm, runtm; int mday, wday, month, wom, i; - int woy; + int woy, ldom; int day; - int is_scheduled; + bool is_scheduled; sched = job->schedule; if (sched == NULL) { /* scheduled? */ @@ -641,11 +630,16 @@ RUN *find_next_run(RUN *run, JOB *job, utime_t &runtime, int ndays) month = tm.tm_mon; wom = mday / 7; woy = tm_woy(future); + ldom = tm_ldom(month, tm.tm_year + 1900); + + is_scheduled = (bit_is_set(mday, run->mday) && + bit_is_set(wday, run->wday) && + bit_is_set(month, run->month) && + bit_is_set(wom, run->wom) && + bit_is_set(woy, run->woy)) || + (bit_is_set(month, run->month) && + bit_is_set(31, run->mday) && mday == ldom); - is_scheduled = bit_is_set(mday, run->mday) && bit_is_set(wday, run->wday) && - bit_is_set(month, run->month) && bit_is_set(wom, run->wom) && - bit_is_set(woy, run->woy); - #ifdef xxx Pmsg2(000, "day=%d is_scheduled=%d\n", day, is_scheduled); Pmsg1(000, "bit_set_mday=%d\n", bit_is_set(mday, run->mday)); @@ -710,11 +704,11 @@ bool complete_jcr_for_job(JCR *jcr, JOB *job, POOL *pool) } Dmsg0(100, "complete_jcr open db\n"); - jcr->db = db_init_database(jcr, jcr->catalog->db_driver, jcr->catalog->db_name, + jcr->db = db_init_database(jcr, jcr->catalog->db_driver, jcr->catalog->db_name, jcr->catalog->db_user, jcr->catalog->db_password, jcr->catalog->db_address, jcr->catalog->db_port, jcr->catalog->db_socket, - jcr->catalog->mult_db_connections, + jcr->catalog->mult_db_connections, jcr->catalog->disable_batch_insert); if (!jcr->db || !db_open_database(jcr, jcr->db)) { Jmsg(jcr, M_FATAL, 0, _("Could not open database \"%s\".\n"), @@ -886,7 +880,7 @@ void bmsg(UAContext *ua, const char *fmt, va_list arg_ptr) } #endif - + void bsendmsg(void *ctx, const char *fmt, ...) { va_list arg_ptr; @@ -900,7 +894,7 @@ void bsendmsg(void *ctx, const char *fmt, ...) * programs */ /* - * This is a message that should be displayed on the user's + * This is a message that should be displayed on the user's * console. */ void UAContext::send_msg(const char *fmt, ...) @@ -927,7 +921,7 @@ void UAContext::error_msg(const char *fmt, ...) va_end(arg_ptr); } -/* +/* * This is a warning message, that should bring up a warning * dialog box on the GUI. The command is not aborted, but something * went wrong. @@ -943,7 +937,7 @@ void UAContext::warning_msg(const char *fmt, ...) va_end(arg_ptr); } -/* +/* * This is an information message that should probably be put * into the status line of a GUI program. */ diff --git a/bacula/src/dird/ua_prune.c b/bacula/src/dird/ua_prune.c index 7380945a98..9a86f243a3 100644 --- a/bacula/src/dird/ua_prune.c +++ b/bacula/src/dird/ua_prune.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2002-2009 Free Software Foundation Europe e.V. + Copyright (C) 2002-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * @@ -41,6 +29,7 @@ /* Forward referenced functions */ static bool grow_del_list(struct del_ctx *del); +static bool prune_expired_volumes(UAContext*); /* * Called here to count entries to be deleted @@ -116,7 +105,7 @@ int prunecmd(UAContext *ua, const char *cmd) NT_("Stats"), NULL}; - if (!open_client_db(ua)) { + if (!open_new_client_db(ua)) { return false; } @@ -147,6 +136,7 @@ int prunecmd(UAContext *ua, const char *cmd) } prune_files(ua, client, pool); return true; + case 1: /* prune jobs */ if (!(client = get_client_resource(ua))) { return false; @@ -167,7 +157,14 @@ int prunecmd(UAContext *ua, const char *cmd) /* ****FIXME**** allow user to select JobType */ prune_jobs(ua, client, pool, JT_BACKUP); return 1; + case 2: /* prune volume */ + + /* Look for All expired volumes, mostly designed for runscript */ + if (find_arg(ua, "expired") >= 0) { + return prune_expired_volumes(ua); + } + if (!select_pool_and_media_dbr(ua, &pr, &mr)) { return false; } @@ -199,7 +196,7 @@ int prunecmd(UAContext *ua, const char *cmd) return true; } -/* Prune Job stat records from the database. +/* Prune Job stat records from the database. * */ int prune_stats(UAContext *ua, utime_t retention) @@ -209,7 +206,7 @@ int prune_stats(UAContext *ua, utime_t retention) utime_t now = (utime_t)time(NULL); db_lock(ua->db); - Mmsg(query, "DELETE FROM JobHisto WHERE JobTDate < %s", + Mmsg(query, "DELETE FROM JobHisto WHERE JobTDate < %s", edit_int64(now - retention, ed1)); db_sql_query(ua->db, query.c_str(), NULL, NULL); db_unlock(ua->db); @@ -219,8 +216,8 @@ int prune_stats(UAContext *ua, utime_t retention) return true; } -/* - * Use pool and client specified by user to select jobs to prune +/* + * Use pool and client specified by user to select jobs to prune * returns add_from string to add in FROM clause * add_where string to add in WHERE clause */ @@ -228,7 +225,7 @@ bool prune_set_filter(UAContext *ua, CLIENT *client, POOL *pool, utime_t period, POOL_MEM *add_from, POOL_MEM *add_where) { utime_t now; - char ed1[50], ed2[MAX_ESCAPE_NAME_LENGTH]; + char ed1[50], ed2[MAX_ESCAPE_NAME_LENGTH]; POOL_MEM tmp(PM_MESSAGE); now = (utime_t)time(NULL); @@ -238,16 +235,16 @@ bool prune_set_filter(UAContext *ua, CLIENT *client, POOL *pool, utime_t period, pm_strcat(*add_where, tmp.c_str()); db_lock(ua->db); - if (client) { - db_escape_string(ua->jcr, ua->db, ed2, + if (client) { + db_escape_string(ua->jcr, ua->db, ed2, client->name(), strlen(client->name())); Mmsg(tmp, " AND Client.Name = '%s' ", ed2); pm_strcat(*add_where, tmp.c_str()); pm_strcat(*add_from, " JOIN Client USING (ClientId) "); } - if (pool) { - db_escape_string(ua->jcr, ua->db, ed2, + if (pool) { + db_escape_string(ua->jcr, ua->db, ed2, pool->name(), strlen(pool->name())); Mmsg(tmp, " AND Pool.Name = '%s' ", ed2); pm_strcat(*add_where, tmp.c_str()); @@ -281,7 +278,7 @@ int prune_files(UAContext *ua, CLIENT *client, POOL *pool) POOL_MEM sql_from(PM_MESSAGE); utime_t period; char ed1[50]; - + memset(&del, 0, sizeof(del)); if (pool && pool->FileRetention > 0) { @@ -303,15 +300,15 @@ int prune_files(UAContext *ua, CLIENT *client, POOL *pool) // edit_utime(now-period, ed1, sizeof(ed1)); // Jmsg(ua->jcr, M_INFO, 0, _("Begin pruning Jobs older than %s secs.\n"), ed1); Jmsg(ua->jcr, M_INFO, 0, _("Begin pruning Files.\n")); - /* Select Jobs -- for counting */ - Mmsg(query, - "SELECT COUNT(1) FROM Job %s WHERE PurgedFiles=0 %s", + /* Select Jobs -- for counting */ + Mmsg(query, + "SELECT COUNT(1) FROM Job %s WHERE PurgedFiles=0 %s", sql_from.c_str(), sql_where.c_str()); - Dmsg1(050, "select sql=%s\n", query.c_str()); + Dmsg1(100, "select sql=%s\n", query.c_str()); cnt.count = 0; if (!db_sql_query(ua->db, query.c_str(), del_count_handler, (void *)&cnt)) { ua->error_msg("%s", db_strerror(ua->db)); - Dmsg0(050, "Count failed\n"); + Dmsg0(100, "Count failed\n"); goto bail_out; } @@ -332,9 +329,9 @@ int prune_files(UAContext *ua, CLIENT *client, POOL *pool) del.JobId = (JobId_t *)malloc(sizeof(JobId_t) * del.max_ids); /* Now process same set but making a delete list */ - Mmsg(query, "SELECT JobId FROM Job %s WHERE PurgedFiles=0 %s", + Mmsg(query, "SELECT JobId FROM Job %s WHERE PurgedFiles=0 %s", sql_from.c_str(), sql_where.c_str()); - Dmsg1(050, "select sql=%s\n", query.c_str()); + Dmsg1(100, "select sql=%s\n", query.c_str()); db_sql_query(ua->db, query.c_str(), file_delete_handler, (void *)&del); purge_files_from_job_list(ua, del); @@ -365,12 +362,12 @@ static bool create_temp_tables(UAContext *ua) /* Create temp tables and indicies */ if (!db_sql_query(ua->db, create_deltabs[db_get_type_index(ua->db)], NULL, (void *)NULL)) { ua->error_msg("%s", db_strerror(ua->db)); - Dmsg0(050, "create DelTables table failed\n"); + Dmsg0(100, "create DelTables table failed\n"); return false; } if (!db_sql_query(ua->db, create_delindex, NULL, (void *)NULL)) { ua->error_msg("%s", db_strerror(ua->db)); - Dmsg0(050, "create DelInx1 index failed\n"); + Dmsg0(100, "create DelInx1 index failed\n"); return false; } return true; @@ -393,7 +390,7 @@ static bool grow_del_list(struct del_ctx *del) struct accurate_check_ctx { DBId_t ClientId; /* Id of client */ - DBId_t FileSetId; /* Id of FileSet */ + DBId_t FileSetId; /* Id of FileSet */ }; /* row: Job.Name, FileSet, Client.Name, FileSetId, ClientId, Type */ @@ -496,7 +493,7 @@ int prune_jobs(UAContext *ua, CLIENT *client, POOL *pool, int JobType) * Select all files that are older than the JobRetention period * and add them into the "DeletionCandidates" table. */ - Mmsg(query, + Mmsg(query, "INSERT INTO DelCandidates " "SELECT JobId,PurgedFiles,FileSetId,JobFiles,JobStatus " "FROM Job %s " /* JOIN Pool/Client */ @@ -504,7 +501,7 @@ int prune_jobs(UAContext *ua, CLIENT *client, POOL *pool, int JobType) " %s ", /* Pool/Client + JobTDate */ sql_from.c_str(), sql_where.c_str()); - Dmsg1(050, "select sql=%s\n", query.c_str()); + Dmsg1(100, "select sql=%s\n", query.c_str()); if (!db_sql_query(ua->db, query.c_str(), NULL, (void *)NULL)) { if (ua->verbose) { ua->error_msg("%s", db_strerror(ua->db)); @@ -517,7 +514,7 @@ int prune_jobs(UAContext *ua, CLIENT *client, POOL *pool, int JobType) * Note: The DISTINCT could be more useful if we don't get FileSetId */ jobids_check = New(alist(10, owned_by_alist)); - Mmsg(query, + Mmsg(query, "SELECT DISTINCT Job.Name, FileSet, Client.Name, Job.FileSetId, " "Job.ClientId, Job.Type " "FROM DelCandidates " @@ -542,7 +539,7 @@ int prune_jobs(UAContext *ua, CLIENT *client, POOL *pool, int JobType) */ memset(&jr, 0, sizeof(jr)); /* To find useful jobs, we do like an incremental */ - jr.JobLevel = L_INCREMENTAL; + jr.JobLevel = L_INCREMENTAL; foreach_alist(elt, jobids_check) { jr.ClientId = elt->ClientId; /* should be always the same */ jr.FileSetId = elt->FileSetId; @@ -550,15 +547,15 @@ int prune_jobs(UAContext *ua, CLIENT *client, POOL *pool, int JobType) jobids.add(tempids); } - /* Discard latest Verify level=InitCatalog job + /* Discard latest Verify level=InitCatalog job * TODO: can have multiple fileset */ - Mmsg(query, + Mmsg(query, "SELECT JobId, JobTDate " "FROM Job %s " /* JOIN Client/Pool */ "WHERE Type='V' AND Level='V' " " %s " /* Pool, JobTDate, Client */ - "ORDER BY JobTDate DESC LIMIT 1", + "ORDER BY JobTDate DESC LIMIT 1", sql_from.c_str(), sql_where.c_str()); if (!db_sql_query(ua->db, query.c_str(), db_list_handler, &jobids)) { @@ -587,7 +584,7 @@ int prune_jobs(UAContext *ua, CLIENT *client, POOL *pool, int JobType) } /* We use DISTINCT because we can have two times the same job */ - Mmsg(query, + Mmsg(query, "SELECT DISTINCT DelCandidates.JobId,DelCandidates.PurgedFiles " "FROM DelCandidates"); if (!db_sql_query(ua->db, query.c_str(), job_delete_handler, (void *)&del)) { @@ -618,6 +615,79 @@ bail_out: return 1; } + +/* + * Prune a expired Volumes + */ +static bool prune_expired_volumes(UAContext *ua) +{ + bool ok=false; + POOL_MEM query(PM_MESSAGE); + POOL_MEM filter(PM_MESSAGE); + alist *lst=NULL; + int i=0; + char *val; + MEDIA_DBR mr; + + db_lock(ua->db); + /* We can restrict to a specific pool */ + if ((i = find_arg_with_value(ua, "pool")) >= 0) { + POOL_DBR pdbr; + memset(&pdbr, 0, sizeof(pdbr)); + bstrncpy(pdbr.Name, ua->argv[i], sizeof(pdbr.Name)); + if (!db_get_pool_record(ua->jcr, ua->db, &pdbr)) { + ua->error_msg("%s", db_strerror(ua->db)); + goto bail_out; + } + Mmsg(query, " AND PoolId = %lld ", (int64_t) pdbr.PoolId); + pm_strcat(filter, query.c_str()); + } + + /* We can restrict by MediaType */ + if ((i = find_arg_with_value(ua, "mediatype")) >= 0) { + char ed1[MAX_ESCAPE_NAME_LENGTH]; + db_escape_string(ua->jcr, ua->db, ed1, + ua->argv[i], strlen(ua->argv[i])); + Mmsg(query, " AND MediaType = '%s' ", ed1); + pm_strcat(filter, query.c_str()); + } + + /* Use a limit */ + if ((i = find_arg_with_value(ua, "limit")) >= 0) { + if (is_an_integer(ua->argv[i])) { + Mmsg(query, " LIMIT %s ", ua->argv[i]); + pm_strcat(filter, query.c_str()); + } else { + ua->error_msg(_("Expecting limit argument as integer\n")); + goto bail_out; + } + } + + lst = New(alist(5, owned_by_alist)); + + Mmsg(query, expired_volumes[db_get_type_index(ua->db)], filter.c_str()); + db_sql_query(ua->db, query.c_str(), db_string_list_handler, &lst); + + foreach_alist(val, lst) { + memset(&mr, 0, sizeof(mr)); + bstrncpy(mr.VolumeName, val, sizeof(mr.VolumeName)); + db_get_media_record(ua->jcr, ua->db, &mr); + Mmsg(query, _("Volume \"%s\""), val); + if (confirm_retention(ua, &mr.VolRetention, query.c_str())) { + prune_volume(ua, &mr); + } + } + + ok = true; + +bail_out: + db_unlock(ua->db); + if (lst) { + delete lst; + } + return ok; +} + /* * Prune a given Volume */ @@ -641,9 +711,9 @@ bool prune_volume(UAContext *ua, MEDIA_DBR *mr) /* Prune only Volumes with status "Full", or "Used" */ if (strcmp(mr->VolStatus, "Full") == 0 || strcmp(mr->VolStatus, "Used") == 0) { - Dmsg2(050, "get prune list MediaId=%d Volume %s\n", (int)mr->MediaId, mr->VolumeName); + Dmsg2(100, "get prune list MediaId=%d Volume %s\n", (int)mr->MediaId, mr->VolumeName); count = get_prune_list_for_volume(ua, mr, &del); - Dmsg1(050, "Num pruned = %d\n", count); + Dmsg1(100, "Num pruned = %d\n", count); if (count != 0) { purge_job_list_from_catalog(ua, del); } @@ -674,7 +744,7 @@ int get_prune_list_for_volume(UAContext *ua, MEDIA_DBR *mr, del_ctx *del) /* * Now add to the list of JobIds for Jobs written to this Volume */ - edit_int64(mr->MediaId, ed1); + edit_int64(mr->MediaId, ed1); period = mr->VolRetention; now = (utime_t)time(NULL); edit_int64(now-period, ed2); @@ -682,16 +752,16 @@ int get_prune_list_for_volume(UAContext *ua, MEDIA_DBR *mr, del_ctx *del) Dmsg3(250, "Now=%d period=%d now-period=%s\n", (int)now, (int)period, ed2); - Dmsg1(050, "Query=%s\n", query.c_str()); + Dmsg1(100, "Query=%s\n", query.c_str()); if (!db_sql_query(ua->db, query.c_str(), file_delete_handler, (void *)del)) { if (ua->verbose) { ua->error_msg("%s", db_strerror(ua->db)); } - Dmsg0(050, "Count failed\n"); + Dmsg0(100, "Count failed\n"); goto bail_out; } count = exclude_running_jobs_from_list(del); - + bail_out: return count; } @@ -709,14 +779,14 @@ int exclude_running_jobs_from_list(del_ctx *prune_list) int count = 0; JCR *jcr; bool skip; - int i; + int i; /* Do not prune any job currently running */ for (i=0; i < prune_list->num_ids; i++) { skip = false; foreach_jcr(jcr) { if (jcr->JobId == prune_list->JobId[i]) { - Dmsg2(050, "skip running job JobId[%d]=%d\n", i, (int)prune_list->JobId[i]); + Dmsg2(100, "skip running job JobId[%d]=%d\n", i, (int)prune_list->JobId[i]); prune_list->JobId[i] = 0; skip = true; break; @@ -726,7 +796,7 @@ int exclude_running_jobs_from_list(del_ctx *prune_list) if (skip) { continue; /* don't increment count */ } - Dmsg2(050, "accept JobId[%d]=%d\n", i, (int)prune_list->JobId[i]); + Dmsg2(100, "accept JobId[%d]=%d\n", i, (int)prune_list->JobId[i]); count++; } return count; diff --git a/bacula/src/dird/ua_purge.c b/bacula/src/dird/ua_purge.c index 550ab37c38..7d87c80d42 100644 --- a/bacula/src/dird/ua_purge.c +++ b/bacula/src/dird/ua_purge.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2002-2012 Free Software Foundation Europe e.V. + Copyright (C) 2002-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * @@ -43,7 +31,7 @@ /* Forward referenced functions */ static int purge_files_from_client(UAContext *ua, CLIENT *client); static int purge_jobs_from_client(UAContext *ua, CLIENT *client); -static int action_on_purge_cmd(UAContext *ua, const char *cmd); +int truncate_cmd(UAContext *ua, const char *cmd); static const char *select_jobsfiles_from_client = "SELECT JobId FROM Job " @@ -59,10 +47,11 @@ static const char *select_jobs_from_client = * * Purge Files (from) [Job|JobId|Client|Volume] * Purge Jobs (from) [Client|Volume] + * Purge Volumes * * N.B. Not all above is implemented yet. */ -int purgecmd(UAContext *ua, const char *cmd) +int purge_cmd(UAContext *ua, const char *cmd) { int i; CLIENT *client; @@ -86,15 +75,21 @@ int purgecmd(UAContext *ua, const char *cmd) NT_("Volume"), NULL}; - ua->warning_msg(_( - "\nThis command can be DANGEROUS!!!\n\n" - "It purges (deletes) all Files from a Job,\n" - "JobId, Client or Volume; or it purges (deletes)\n" - "all Jobs from a Client or Volume without regard\n" - "to retention periods. Normally you should use the\n" - "PRUNE command, which respects retention periods.\n")); + /* Special case for the "Action On Purge", this option is working only on + * Purged volume, so no jobs or files will be purged. + * We are skiping this message if "purge volume action=xxx" + */ + if (!(find_arg(ua, "volume") >= 0 && find_arg(ua, "action") >= 0)) { + ua->warning_msg(_( + "\nThis command can be DANGEROUS!!!\n\n" + "It purges (deletes) all Files from a Job,\n" + "JobId, Client or Volume; or it purges (deletes)\n" + "all Jobs from a Client or Volume without regard\n" + "to retention periods. Normally you should use the\n" + "PRUNE command, which respects retention periods.\n")); + } - if (!open_db(ua)) { + if (!open_new_client_db(ua)) { return 1; } switch (find_arg_keyword(ua, keywords)) { @@ -140,7 +135,7 @@ int purgecmd(UAContext *ua, const char *cmd) case 2: /* Perform ActionOnPurge (action=truncate) */ if (find_arg(ua, "action") >= 0) { - return action_on_purge_cmd(ua, ua->cmd); + return truncate_cmd(ua, ua->cmd); } while ((i=find_arg(ua, NT_("volume"))) >= 0) { @@ -250,7 +245,7 @@ static int purge_jobs_from_client(UAContext *ua, CLIENT *client) del.max_ids = 1000; del.JobId = (JobId_t *)malloc(sizeof(JobId_t) * del.max_ids); del.PurgedFiles = (char *)malloc(del.max_ids); - + ua->info_msg(_("Begin purging jobs from Client \"%s\"\n"), cr.Name); Mmsg(query, select_jobs_from_client, edit_int64(cr.ClientId, ed1)); @@ -292,6 +287,10 @@ void purge_files_from_jobs(UAContext *ua, char *jobs) db_sql_query(ua->db, query.c_str(), NULL, (void *)NULL); Dmsg1(050, "Delete BaseFiles sql=%s\n", query.c_str()); + Mmsg(query, "DELETE FROM PathVisibility WHERE JobId IN (%s)", jobs); + db_sql_query(ua->db, query.c_str(), NULL, (void *)NULL); + Dmsg1(050, "Delete PathVisibility sql=%s\n", query.c_str()); + /* * Now mark Job as having files purged. This is necessary to * avoid having too many Jobs to process in future prunings. If @@ -385,7 +384,7 @@ void purge_files_from_job_list(UAContext *ua, del_ctx &del) void upgrade_copies(UAContext *ua, char *jobs) { POOL_MEM query(PM_MESSAGE); - + db_lock(ua->db); /* Do it in two times for mysql */ @@ -427,10 +426,6 @@ void purge_jobs_from_catalog(UAContext *ua, char *jobs) db_sql_query(ua->db, query.c_str(), NULL, (void *)NULL); Dmsg1(050, "Delete RestoreObject sql=%s\n", query.c_str()); - Mmsg(query, "DELETE FROM PathVisibility WHERE JobId IN (%s)", jobs); - db_sql_query(ua->db, query.c_str(), NULL, (void *)NULL); - Dmsg1(050, "Delete PathVisibility sql=%s\n", query.c_str()); - upgrade_copies(ua, jobs); /* Now remove the Job record itself */ @@ -489,10 +484,10 @@ bool purge_jobs_from_volume(UAContext *ua, MEDIA_DBR *mr, bool force) purge_jobs_from_catalog(ua, jobids); } - ua->info_msg(_("%d File%s on Volume \"%s\" purged from catalog.\n"), + ua->info_msg(_("%d File%s on Volume \"%s\" purged from catalog.\n"), lst.count, lst.count<=1?"":"s", mr->VolumeName); - purged = is_volume_purged(ua, mr, force); + purged = is_volume_purged(ua, mr, force); bail_out: return purged; @@ -523,13 +518,14 @@ bool is_volume_purged(UAContext *ua, MEDIA_DBR *mr, bool force) } if (strcmp(mr->VolStatus, "Purged") == 0) { + Dmsg1(100, "Volume=%s already purged.\n", mr->VolumeName); purged = true; goto bail_out; } /* If purged, mark it so */ cnt.count = 0; - Mmsg(query, "SELECT 1 FROM JobMedia WHERE MediaId=%s LIMIT 1", + Mmsg(query, "SELECT 1 FROM JobMedia WHERE MediaId=%s LIMIT 1", edit_int64(mr->MediaId, ed1)); if (!db_sql_query(ua->db, query.c_str(), del_count_handler, (void *)&cnt)) { ua->error_msg("%s", db_strerror(ua->db)); @@ -540,6 +536,8 @@ bool is_volume_purged(UAContext *ua, MEDIA_DBR *mr, bool force) if (cnt.count == 0) { ua->warning_msg(_("There are no more Jobs associated with Volume \"%s\". Marking it purged.\n"), mr->VolumeName); + Dmsg1(100, "There are no more Jobs associated with Volume \"%s\". Marking it purged.\n", + mr->VolumeName); if (!(purged = mark_media_purged(ua, mr))) { ua->error_msg("%s", db_strerror(ua->db)); } @@ -548,33 +546,18 @@ bail_out: return purged; } -static BSOCK *open_sd_bsock(UAContext *ua) -{ - STORE *store = ua->jcr->wstore; - - if (!ua->jcr->store_bsock) { - ua->send_msg(_("Connecting to Storage daemon %s at %s:%d ...\n"), - store->name(), store->address, store->SDport); - if (!connect_to_storage_daemon(ua->jcr, 10, SDConnectTimeout, 1)) { - ua->error_msg(_("Failed to connect to Storage daemon.\n")); - return NULL; - } - } - return ua->jcr->store_bsock; -} - -/* +/* * Called here to send the appropriate commands to the SD * to do truncate on purge. */ -static void do_truncate_on_purge(UAContext *ua, MEDIA_DBR *mr, +static void do_truncate_on_purge(UAContext *ua, MEDIA_DBR *mr, char *pool, char *storage, int drive, BSOCK *sd) { int dvd; bool ok=false; uint64_t VolBytes = 0; - + /* TODO: Return if not mr->Recyle ? */ if (!mr->Recycle) { return; @@ -594,14 +577,14 @@ static void do_truncate_on_purge(UAContext *ua, MEDIA_DBR *mr, bash_spaces(mr->MediaType); bash_spaces(pool); bash_spaces(storage); - + /* Do it by relabeling the Volume, which truncates it */ sd->fsend("relabel %s OldName=%s NewName=%s PoolName=%s " "MediaType=%s Slot=%d drive=%d\n", storage, mr->VolumeName, mr->VolumeName, pool, mr->MediaType, mr->Slot, drive); - + unbash_spaces(mr->VolumeName); unbash_spaces(mr->MediaType); unbash_spaces(pool); @@ -628,44 +611,51 @@ static void do_truncate_on_purge(UAContext *ua, MEDIA_DBR *mr, } } -/* +/* * Implement Bacula bconsole command purge action - * purge action= pool= volume= storage= devicetype= + * purge action=truncate pool= volume= storage= mediatype= + * or + * truncate pool= volume= storage= mediatype= + * + * Note, later we might want to rename this action_on_purge_cmd() as + * was the original, but only if we add additional actions such as + * erase, ... For the moment, we only do a truncate. + * */ -static int action_on_purge_cmd(UAContext *ua, const char *cmd) +int truncate_cmd(UAContext *ua, const char *cmd) { bool allpools = false; int drive = -1; int nb = 0; uint32_t *results = NULL; - const char *action = "all"; + const char *action = "truncate"; STORE *store = NULL; POOL *pool = NULL; MEDIA_DBR mr; POOL_DBR pr; BSOCK *sd = NULL; - + memset(&pr, 0, sizeof(pr)); /* Look at arguments */ for (int i=1; iargc; i++) { if (strcasecmp(ua->argk[i], NT_("allpools")) == 0) { allpools = true; - - } else if (strcasecmp(ua->argk[i], NT_("volume")) == 0 + + } else if (strcasecmp(ua->argk[i], NT_("volume")) == 0 && is_name_valid(ua->argv[i], NULL)) { bstrncpy(mr.VolumeName, ua->argv[i], sizeof(mr.VolumeName)); - } else if (strcasecmp(ua->argk[i], NT_("devicetype")) == 0 + } else if (strcasecmp(ua->argk[i], NT_("mediatype")) == 0 && ua->argv[i]) { bstrncpy(mr.MediaType, ua->argv[i], sizeof(mr.MediaType)); - + } else if (strcasecmp(ua->argk[i], NT_("drive")) == 0 && ua->argv[i]) { drive = atoi(ua->argv[i]); - } else if (strcasecmp(ua->argk[i], NT_("action")) == 0 + } else if (strcasecmp(ua->argk[i], NT_("action")) == 0 && is_name_valid(ua->argv[i], NULL)) { - action=ua->argv[i]; + action = ua->argv[i]; } } @@ -695,7 +685,7 @@ static int action_on_purge_cmd(UAContext *ua, const char *cmd) mr.PoolId = pr.PoolId; } - /* + /* * Look for all Purged volumes that can be recycled, are enabled and * have more the 10,000 bytes. */ @@ -708,7 +698,7 @@ static int action_on_purge_cmd(UAContext *ua, const char *cmd) Dmsg0(100, "No results from db_get_media_ids\n"); goto bail_out; } - + if (!nb) { ua->send_msg(_("No Volumes found to perform %s action.\n"), action); goto bail_out; @@ -725,23 +715,19 @@ static int action_on_purge_cmd(UAContext *ua, const char *cmd) for (int i=0; i < nb; i++) { mr.clear(); mr.MediaId = results[i]; - if (db_get_media_record(ua->jcr, ua->db, &mr)) { + if (db_get_media_record(ua->jcr, ua->db, &mr)) { /* TODO: ask for drive and change Pool */ - if (!strcasecmp("truncate", action) || !strcasecmp("all", action)) { + if (strcasecmp("truncate", action) == 0) { do_truncate_on_purge(ua, &mr, pr.Name, store->dev_name(), drive, sd); } } else { - Dmsg1(0, "Can't find MediaId=%lld\n", (uint64_t) mr.MediaId); + Dmsg1(0, "Can't find MediaId=%lld\n", (uint64_t)mr.MediaId); } } bail_out: close_db(ua); - if (sd) { - sd->signal(BNET_TERMINATE); - sd->close(); - ua->jcr->store_bsock = NULL; - } + close_sd_bsock(ua); ua->jcr->wstore = NULL; if (results) { free(results); @@ -767,7 +753,6 @@ bool mark_media_purged(UAContext *ua, MEDIA_DBR *mr) return false; } pm_strcpy(jcr->VolumeName, mr->VolumeName); - generate_job_event(jcr, "VolumePurged"); generate_plugin_event(jcr, bDirEventVolumePurged); /* * If the RecyclePool is defined, move the volume there @@ -778,12 +763,12 @@ bool mark_media_purged(UAContext *ua, MEDIA_DBR *mr) memset(&newpr, 0, sizeof(POOL_DBR)); newpr.PoolId = mr->RecyclePoolId; oldpr.PoolId = mr->PoolId; - if ( db_get_pool_record(jcr, ua->db, &oldpr) - && db_get_pool_record(jcr, ua->db, &newpr)) + if ( db_get_pool_numvols(jcr, ua->db, &oldpr) + && db_get_pool_numvols(jcr, ua->db, &newpr)) { /* check if destination pool size is ok */ if (newpr.MaxVols > 0 && newpr.NumVols >= newpr.MaxVols) { - ua->error_msg(_("Unable move recycled Volume in full " + ua->error_msg(_("Unable move recycled Volume in full " "Pool \"%s\" MaxVols=%d\n"), newpr.Name, newpr.MaxVols); @@ -795,10 +780,10 @@ bool mark_media_purged(UAContext *ua, MEDIA_DBR *mr) } } - /* Send message to Job report, if it is a *real* job */ + /* Send message to Job report, if it is a *real* job */ if (jcr && jcr->JobId > 0) { Jmsg(jcr, M_INFO, 0, _("All records pruned from Volume \"%s\"; marking it \"Purged\"\n"), - mr->VolumeName); + mr->VolumeName); } return true; } else { diff --git a/bacula/src/dird/ua_query.c b/bacula/src/dird/ua_query.c index 354b596b49..f1aa8ab27a 100644 --- a/bacula/src/dird/ua_query.c +++ b/bacula/src/dird/ua_query.c @@ -9,29 +9,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2001-2006 Free Software Foundation Europe e.V. + Copyright (C) 2001-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ #include "bacula.h" @@ -257,7 +245,7 @@ int sqlquerycmd(UAContext *ua, const char *cmd) int len; const char *msg; - if (!open_client_db(ua)) { + if (!open_new_client_db(ua)) { return 1; } *query.c_str() = 0; diff --git a/bacula/src/dird/ua_restore.c b/bacula/src/dird/ua_restore.c index 9a9b44d603..ebe8d008f2 100644 --- a/bacula/src/dird/ua_restore.c +++ b/bacula/src/dird/ua_restore.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2002-2011 Free Software Foundation Europe e.V. + Copyright (C) 2002-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * @@ -93,44 +81,46 @@ int restore_cmd(UAContext *ua, const char *cmd) rx.BaseJobIds = get_pool_memory(PM_FNAME); rx.query = get_pool_memory(PM_FNAME); rx.bsr = new_bsr(); + rx.hardlinks_in_mem = true; - i = find_arg_with_value(ua, "comment"); - if (i >= 0) { - rx.comment = ua->argv[i]; - if (!is_comment_legal(ua, rx.comment)) { - goto bail_out; - } + if (!open_new_client_db(ua)) { + goto bail_out; } - i = find_arg_with_value(ua, "where"); - if (i >= 0) { - rx.where = ua->argv[i]; - } + for (i = 0; i < ua->argc ; i++) { + if (!ua->argv[i]) { + continue; /* skip if no value given */ + } + if (strcasecmp(ua->argk[i], "comment") == 0) { + rx.comment = ua->argv[i]; + if (!is_comment_legal(ua, rx.comment)) { + goto bail_out; + } - i = find_arg_with_value(ua, "replace"); - if (i >= 0) { - rx.replace = ua->argv[i]; - } - + } else if (strcasecmp(ua->argk[i], "where") == 0) { + rx.where = ua->argv[i]; - i = find_arg_with_value(ua, "strip_prefix"); - if (i >= 0) { - strip_prefix = ua->argv[i]; - } + } else if (strcasecmp(ua->argk[i], "replace") == 0) { + rx.replace = ua->argv[i]; - i = find_arg_with_value(ua, "add_prefix"); - if (i >= 0) { - add_prefix = ua->argv[i]; - } + } else if (strcasecmp(ua->argk[i], "strip_prefix") == 0) { + strip_prefix = ua->argv[i]; - i = find_arg_with_value(ua, "add_suffix"); - if (i >= 0) { - add_suffix = ua->argv[i]; - } + } else if (strcasecmp(ua->argk[i], "add_prefix") == 0) { + add_prefix = ua->argv[i]; - i = find_arg_with_value(ua, "regexwhere"); - if (i >= 0) { - rx.RegexWhere = ua->argv[i]; + } else if (strcasecmp(ua->argk[i], "add_suffix") == 0) { + add_suffix = ua->argv[i]; + + } else if (strcasecmp(ua->argk[i], "regexwhere") == 0) { + rx.RegexWhere = ua->argv[i]; + + } else if (strcasecmp(ua->argk[i], "optimizespeed") == 0) { + if (strcasecmp(ua->argv[i], "0") || strcasecmp(ua->argv[i], "no") || + strcasecmp(ua->argv[i], "false")) { + rx.hardlinks_in_mem = false; + } + } } if (strip_prefix || add_suffix || add_prefix) { @@ -157,10 +147,6 @@ int restore_cmd(UAContext *ua, const char *cmd) } } - if (!open_client_db(ua)) { - goto bail_out; - } - /* Ensure there is at least one Restore Job */ LockRes(); foreach_res(job, R_JOB) { @@ -214,7 +200,7 @@ int restore_cmd(UAContext *ua, const char *cmd) if (rx.selected_files==1) { ua->info_msg(_("\n1 file selected to be restored.\n\n")); } else { - ua->info_msg(_("\n%s files selected to be restored.\n\n"), + ua->info_msg(_("\n%s files selected to be restored.\n\n"), edit_uint64_with_commas(rx.selected_files, ed1)); } } else { @@ -250,14 +236,19 @@ int restore_cmd(UAContext *ua, const char *cmd) /* Build run command */ pm_strcpy(buf, ""); + if (rx.RestoreMediaType[0]) { + Mmsg(buf, " mediatype=\"%s\"", rx.RestoreMediaType); + pm_strcat(ua->cmd, buf); + pm_strcpy(buf, ""); + } if (rx.RegexWhere) { escaped_where_name = escape_filename(rx.RegexWhere); - Mmsg(buf, " regexwhere=\"%s\"", + Mmsg(buf, " regexwhere=\"%s\"", escaped_where_name ? escaped_where_name : rx.RegexWhere); } else if (rx.where) { escaped_where_name = escape_filename(rx.where); - Mmsg(buf," where=\"%s\"", + Mmsg(buf," where=\"%s\"", escaped_where_name ? escaped_where_name : rx.where); } pm_strcat(ua->cmd, buf); @@ -279,7 +270,7 @@ int restore_cmd(UAContext *ua, const char *cmd) if (escaped_where_name != NULL) { bfree(escaped_where_name); } - + if (regexp) { bfree(regexp); } @@ -288,7 +279,13 @@ int restore_cmd(UAContext *ua, const char *cmd) pm_strcat(ua->cmd, " yes"); /* pass it on to the run command */ } Dmsg1(200, "Submitting: %s\n", ua->cmd); - /* Transfer jobids to jcr to for picking up restore objects */ + /* + * Transfer jobids, to jcr to + * pass to run_cmd(). Note, these are fields and + * other things that are not passed on the command + * line. + */ + /* ***FIXME*** pass jobids on command line */ jcr->JobIds = rx.JobIds; rx.JobIds = NULL; parse_ua_args(ua); @@ -316,7 +313,7 @@ bail_out: } -/* +/* * Fill the rx->BaseJobIds and display the list */ static void get_and_display_basejobs(UAContext *ua, RESTORE_CTX *rx) @@ -326,7 +323,7 @@ static void get_and_display_basejobs(UAContext *ua, RESTORE_CTX *rx) if (!db_get_used_base_jobids(ua->jcr, ua->db, rx->JobIds, &jobids)) { ua->warning_msg("%s", db_strerror(ua->db)); } - + if (jobids.count) { POOL_MEM q; Mmsg(q, uar_print_jobs, jobids.list); @@ -393,7 +390,7 @@ static int get_client_name(UAContext *ua, RESTORE_CTX *rx) static int get_restore_client_name(UAContext *ua, RESTORE_CTX &rx) { /* Start with same name as backup client */ - bstrncpy(rx.RestoreClientName, rx.ClientName, sizeof(rx.RestoreClientName)); + bstrncpy(rx.RestoreClientName, rx.ClientName, sizeof(rx.RestoreClientName)); /* try command line argument */ int i = find_arg_with_value(ua, NT_("restoreclient")); @@ -487,6 +484,7 @@ static int user_select_jobids_or_files(UAContext *ua, RESTORE_CTX *rx) break; } } + if (!found_kw) { ua->error_msg(_("Unknown keyword: %s\n"), ua->argk[i]); return 0; @@ -769,7 +767,7 @@ static int user_select_jobids_or_files(UAContext *ua, RESTORE_CTX *rx) case 11: /* Choose a jobid and select jobs */ if (!get_cmd(ua, _("Enter JobId to get the state to restore: ")) || - !is_an_integer(ua->cmd)) + !is_an_integer(ua->cmd)) { return 0; } @@ -799,7 +797,7 @@ static int user_select_jobids_or_files(UAContext *ua, RESTORE_CTX *rx) POOLMEM *JobIds = get_pool_memory(PM_FNAME); *JobIds = 0; rx->TotalFiles = 0; - /* + /* * Find total number of files to be restored, and filter the JobId * list to contain only ones permitted by the ACL conditions. */ @@ -929,7 +927,7 @@ static bool insert_file_into_findex_list(UAContext *ua, RESTORE_CTX *rx, char *f strip_trailing_newline(file); split_path_and_filename(ua, rx, file); if (*rx->JobIds == 0) { - Mmsg(rx->query, uar_jobid_fileindex, date, rx->path, rx->fname, + Mmsg(rx->query, uar_jobid_fileindex, date, rx->path, rx->fname, rx->ClientName); } else { Mmsg(rx->query, uar_jobids_fileindex, rx->JobIds, date, @@ -955,7 +953,7 @@ static bool insert_file_into_findex_list(UAContext *ua, RESTORE_CTX *rx, char *f */ static bool insert_dir_into_findex_list(UAContext *ua, RESTORE_CTX *rx, char *dir, char *date) -{ +{ strip_trailing_junk(dir); if (*rx->JobIds == 0) { ua->error_msg(_("No JobId specified cannot continue.\n")); @@ -1099,6 +1097,7 @@ static void add_delta_list_findex(RESTORE_CTX *rx, struct delta_list *lst) add_findex(rx->bsr, lst->JobId, lst->FileIndex); } + static bool build_directory_tree(UAContext *ua, RESTORE_CTX *rx) { TREE_CTX tree; @@ -1114,6 +1113,7 @@ static bool build_directory_tree(UAContext *ua, RESTORE_CTX *rx) tree.root = new_tree(rx->TotalFiles); tree.ua = ua; tree.all = rx->all; + tree.hardlinks_in_mem = rx->hardlinks_in_mem; last_JobId = 0; /* * For display purposes, the same JobId, with different volumes may @@ -1139,8 +1139,8 @@ static bool build_directory_tree(UAContext *ua, RESTORE_CTX *rx) #define new_get_file_list #ifdef new_get_file_list - if (!db_get_file_list(ua->jcr, ua->db, - rx->JobIds, false /* do not use md5 */, + if (!db_get_file_list(ua->jcr, ua->db, + rx->JobIds, false /* do not use md5 */, true /* get delta */, insert_tree_handler, (void *)&tree)) { @@ -1167,10 +1167,10 @@ static bool build_directory_tree(UAContext *ua, RESTORE_CTX *rx) } } #endif - /* + /* * At this point, the tree is built, so we can garbage collect - * any memory released by the SQL engine that RedHat has - * not returned to the OS :-( + * any memory released by the SQL engine that RedHat has + * not returned to the OS :-( */ garbage_collect_memory(); @@ -1318,7 +1318,7 @@ static bool select_backups_before_date(UAContext *ua, RESTORE_CTX *rx, char *dat memset(&pr, 0, sizeof(pr)); bstrncpy(pr.Name, rx->pool->name(), sizeof(pr.Name)); if (db_get_pool_record(ua->jcr, ua->db, &pr)) { - bsnprintf(pool_select, sizeof(pool_select), "AND Media.PoolId=%s ", + bsnprintf(pool_select, sizeof(pool_select), "AND Media.PoolId=%s ", edit_int64(pr.PoolId, ed1)); } else { ua->warning_msg(_("Pool \"%s\" not found, using any pool.\n"), pr.Name); @@ -1385,7 +1385,7 @@ static bool select_backups_before_date(UAContext *ua, RESTORE_CTX *rx, char *dat if (rx->JobIds[0] != 0) { if (find_arg(ua, NT_("copies")) > 0) { /* Display a list of all copies */ - db_list_copies_records(ua->jcr, ua->db, 0, rx->JobIds, + db_list_copies_records(ua->jcr, ua->db, 0, rx->JobIds, prtit, ua, HORZ_LIST); } /* Display a list of Jobs selected for this restore */ @@ -1417,9 +1417,23 @@ static int restore_count_handler(void *ctx, int num_fields, char **row) static int jobid_fileindex_handler(void *ctx, int num_fields, char **row) { RESTORE_CTX *rx = (RESTORE_CTX *)ctx; + JobId_t JobId = str_to_int64(row[0]); + + Dmsg3(200, "JobId=%s JobIds=%s FileIndex=%s\n", row[0], rx->JobIds, row[1]); + + /* New JobId, add it to JobIds + * The list is sorted by JobId, so we need a cache for the previous value + * + * It will permit to find restore objects to send during the restore + */ + if (rx->JobId != JobId) { + if (*rx->JobIds) { + pm_strcat(rx->JobIds, ","); + } + pm_strcat(rx->JobIds, row[0]); + rx->JobId = JobId; + } - Dmsg2(200, "JobId=%s FileIndex=%s\n", row[0], row[1]); - rx->JobId = str_to_int64(row[0]); add_findex(rx->bsr, rx->JobId, str_to_int64(row[1])); rx->found = true; rx->selected_files++; @@ -1481,7 +1495,7 @@ static void free_name_list(NAME_LIST *name_list) name_list->num_ids = 0; } -void find_storage_resource(UAContext *ua, RESTORE_CTX &rx, char *Storage, char *MediaType) +void find_storage_resource(UAContext *ua, RESTORE_CTX &rx, char *Storage, char *MediaType) { STORE *store; @@ -1514,10 +1528,17 @@ void find_storage_resource(UAContext *ua, RESTORE_CTX &rx, char *Storage, char * } } if (store && (store != rx.store)) { - ua->info_msg(_("Warning default storage overridden by \"%s\" on command line.\n"), + ua->info_msg(_("\nWarning Storage is overridden by \"%s\" on the command line.\n"), store->name()); rx.store = store; - Dmsg1(200, "Set store=%s\n", rx.store->name()); + bstrncpy(rx.RestoreMediaType, MediaType, sizeof(rx.RestoreMediaType)); + if (strcmp(MediaType, store->media_type) != 0) { + ua->info_msg(_("This may not work because of two different MediaTypes:\n" + " Storage MediaType=\"%s\"\n" + " Volume MediaType=\"%s\".\n\n"), + store->media_type, MediaType); + } + Dmsg2(200, "Set store=%s MediaType=%s\n", rx.store->name(), rx.RestoreMediaType); } return; } diff --git a/bacula/src/dird/ua_run.c b/bacula/src/dird/ua_run.c index a9941ad1a8..45a925879f 100644 --- a/bacula/src/dird/ua_run.c +++ b/bacula/src/dird/ua_run.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2001-2012 Free Software Foundation Europe e.V. + Copyright (C) 2001-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * @@ -36,11 +24,13 @@ #include "bacula.h" #include "dird.h" +const char *get_command(int index); + class run_ctx { public: char *job_name, *level_name, *jid, *store_name, *pool_name; char *where, *fileset_name, *client_name, *bootstrap, *regexwhere; - char *restore_client_name, *comment; + char *restore_client_name, *comment, *media_type, *next_pool_name; const char *replace; char *when, *verify_job_name, *catalog_name; char *previous_job_name; @@ -50,37 +40,44 @@ public: JOB *job; JOB *verify_job; JOB *previous_job; + JOB_DBR jr; USTORE *store; CLIENT *client; FILESET *fileset; POOL *pool; + POOL *next_pool; CAT *catalog; + JobId_t JobId; + alist *JobIds; int Priority; int files; bool cloned; bool mod; + bool restart; + bool done; + bool alljobid; int spool_data; bool spool_data_set; int accurate; bool accurate_set; int ignoreduplicatecheck; bool ignoreduplicatecheck_set; - /* Methods */ - run_ctx() { memset(this, 0, sizeof(run_ctx)); + run_ctx() { memset(this, 0, sizeof(run_ctx)); store = new USTORE; }; ~run_ctx() { delete store; }; }; /* Forward referenced subroutines */ static void select_job_level(UAContext *ua, JCR *jcr); -static bool display_job_parameters(UAContext *ua, JCR *jcr, JOB *job, +static bool display_job_parameters(UAContext *ua, JCR *jcr, JOB *job, const char *verify_list, char *jid, const char *replace, char *client_name); static void select_where_regexp(UAContext *ua, JCR *jcr); -static bool scan_command_line_arguments(UAContext *ua, run_ctx &rc); -static bool reset_restore_context(UAContext *ua, JCR *jcr, run_ctx &rc); +static bool scan_run_command_line_arguments(UAContext *ua, run_ctx &rc); +static bool set_run_context_in_jcr(UAContext *ua, JCR *jcr, run_ctx &rc); static int modify_job_parameters(UAContext *ua, JCR *jcr, run_ctx &rc); +static JobId_t start_job(UAContext *ua, JCR *jcr, run_ctx &rc); /* Imported variables */ extern struct s_kw ReplaceOptions[]; @@ -90,7 +87,7 @@ extern struct s_kw ReplaceOptions[]; * run [job=] level= * * For Restore Jobs - * run + * run * * Returns: 0 on error * JobId if OK @@ -103,11 +100,11 @@ int run_cmd(UAContext *ua, const char *cmd) int status; if (!open_client_db(ua)) { - return 1; + goto bail_out; } - if (!scan_command_line_arguments(ua, rc)) { - return 0; + if (!scan_run_command_line_arguments(ua, rc)) { + goto bail_out; } if (find_arg(ua, NT_("fdcalled")) > 0) { @@ -115,108 +112,506 @@ int run_cmd(UAContext *ua, const char *cmd) ua->quit = true; } - /* - * Create JCR to run job. NOTE!!! after this point, free_jcr() - * before returning. - */ - if (!jcr) { - jcr = new_jcr(sizeof(JCR), dird_free_jcr); - set_jcr_defaults(jcr, rc.job); - jcr->unlink_bsr = ua->jcr->unlink_bsr; /* copy unlink flag from caller */ - ua->jcr->unlink_bsr = false; + for ( ;; ) { + /* + * Create JCR to run job. NOTE!!! after this point, free_jcr() + * before returning. + */ + if (!jcr) { + jcr = new_jcr(sizeof(JCR), dird_free_jcr); + set_jcr_defaults(jcr, rc.job); + jcr->unlink_bsr = ua->jcr->unlink_bsr; /* copy unlink flag from caller */ + ua->jcr->unlink_bsr = false; + } + /* Transfer JobIds to new restore Job */ + if (ua->jcr->JobIds) { + jcr->JobIds = ua->jcr->JobIds; + ua->jcr->JobIds = NULL; + } + if (!set_run_context_in_jcr(ua, jcr, rc)) { + break; /* error get out of while loop */ + } + + + /* Run without prompting? */ + if (ua->batch || find_arg(ua, NT_("yes")) > 0) { + return start_job(ua, jcr, rc); + } + + /* + * Prompt User to see if all run job parameters are correct, and + * allow him to modify them. + */ + if (!display_job_parameters(ua, jcr, rc.job, rc.verify_list, rc.jid, rc.replace, + rc.client_name)) { + break; /* error get out of while loop */ + } + + if (!get_cmd(ua, _("OK to run? (yes/mod/no): "))) { + break; /* error get out of while loop */ + } + + if (strncasecmp(ua->cmd, ".mod ", 5) == 0 || + (strncasecmp(ua->cmd, "mod ", 4) == 0 && strlen(ua->cmd) > 6)) { + parse_ua_args(ua); + rc.mod = true; + if (!scan_run_command_line_arguments(ua, rc)) { + break; /* error get out of while loop */ + } + continue; /* another round with while loop */ + } + + /* Allow the user to modify the settings */ + status = modify_job_parameters(ua, jcr, rc); + if (status == 0) { + continue; /* another round with while loop */ + } + if (status == -1) { /* error */ + break; /* error get out of while loop */ + } + + if (ua->cmd[0] == 0 || strncasecmp(ua->cmd, _("yes"), strlen(ua->cmd)) == 0) { + return start_job(ua, jcr, rc); + } + if (strncasecmp(ua->cmd, _("no"), strlen(ua->cmd)) == 0) { + break; /* get out of while loop */ + } + ua->send_msg(_("\nBad response: %s. You must answer yes, mod, or no.\n\n"), ua->cmd); } - /* Transfer JobIds to new restore Job */ - if (ua->jcr->JobIds) { - jcr->JobIds = ua->jcr->JobIds; - ua->jcr->JobIds = NULL; + +bail_out: + ua->send_msg(_("Job not run.\n")); + if (jcr) { + free_jcr(jcr); } + return 0; /* do not run */ +} -try_again: - if (!reset_restore_context(ua, jcr, rc)) { - goto bail_out; +static JobId_t start_job(UAContext *ua, JCR *jcr, run_ctx &rc) +{ + JobId_t JobId; + + Dmsg1(100, "Starting JobId=%d\n", rc.jr.JobId); + JobId = run_job(jcr); + Dmsg4(100, "JobId=%u NewJobId=%d pool=%s priority=%d\n", (int)jcr->JobId, + JobId, jcr->pool->name(), jcr->JobPriority); + free_jcr(jcr); /* release jcr */ + if (JobId == 0) { + ua->error_msg(_("Job failed.\n")); + } else { + char ed1[50]; + ua->send_msg(_("Job queued. JobId=%s\n"), edit_int64(JobId, ed1)); + } + return JobId; +} + +/* + * If no job_name defined in the run context, ask + * the user for it. + * Then put the job resource in the run context and + * check the access rights. + */ +static bool get_job(UAContext *ua, run_ctx &rc) +{ + if (rc.job_name) { + /* Find Job */ + rc.job = GetJobResWithName(rc.job_name); + if (!rc.job) { + if (*rc.job_name != 0) { + ua->send_msg(_("Job \"%s\" not found\n"), rc.job_name); + } + rc.job = select_job_resource(ua); + } else { + Dmsg1(100, "Found job=%s\n", rc.job_name); + } + } else if (!rc.job) { + ua->send_msg(_("A job name must be specified.\n")); + rc.job = select_job_resource(ua); + } + if (!rc.job) { + return false; + } else if (!acl_access_ok(ua, Job_ACL, rc.job->name())) { + ua->error_msg( _("No authorization. Job \"%s\".\n"), rc.job->name()); + return false; + } + return true; +} + +/* + * If no pool_name defined in the run context, ask + * the user for it. + * Then put the pool resource in the run context and + * check the access rights. + */ +static bool get_pool(UAContext *ua, run_ctx &rc) +{ + if (rc.pool_name) { + rc.pool = GetPoolResWithName(rc.pool_name); + if (!rc.pool) { + if (*rc.pool_name != 0) { + ua->warning_msg(_("Pool \"%s\" not found.\n"), rc.pool_name); + } + rc.pool = select_pool_resource(ua); + } + } else if (!rc.pool) { + rc.pool = rc.job->pool; /* use default */ + } + if (!rc.pool) { + return false; + } else if (!acl_access_ok(ua, Pool_ACL, rc.pool->name())) { + ua->error_msg(_("No authorization. Pool \"%s\".\n"), rc.pool->name()); + return false; + } + Dmsg1(100, "Using Pool=%s\n", rc.pool->name()); + return true; +} + +static bool get_next_pool(UAContext *ua, run_ctx &rc) +{ + if (rc.next_pool_name) { + Dmsg1(100, "Have next pool override=%s\n", rc.next_pool_name); + rc.next_pool = GetPoolResWithName(rc.next_pool_name); + if (!rc.next_pool) { + if (*rc.next_pool_name != 0) { + ua->warning_msg(_("NextPool \"%s\" not found.\n"), rc.next_pool_name); + } + rc.next_pool = select_pool_resource(ua); + } + } + if (!rc.next_pool) { + rc.next_pool = rc.pool->NextPool; /* use default */ + } + if (rc.next_pool && !acl_access_ok(ua, Pool_ACL, rc.next_pool->name())) { + ua->error_msg(_("No authorization. NextPool \"%s\".\n"), rc.next_pool->name()); + return false; + } + if (rc.next_pool) { + Dmsg1(100, "Using NextPool=%s\n", NPRT(rc.next_pool->name())); + } + return true; +} + + +/* + * Fill in client data according to what is setup + * in the run context, and make sure the user + * has authorized access to it. + */ +static bool get_client(UAContext *ua, run_ctx &rc) +{ + if (rc.client_name) { + rc.client = GetClientResWithName(rc.client_name); + if (!rc.client) { + if (*rc.client_name != 0) { + ua->warning_msg(_("Client \"%s\" not found.\n"), rc.client_name); + } + rc.client = select_client_resource(ua); + } + } else if (!rc.client) { + rc.client = rc.job->client; /* use default */ + } + if (!rc.client) { + return false; + } else if (!acl_access_ok(ua, Client_ACL, rc.client->name())) { + ua->error_msg(_("No authorization. Client \"%s\".\n"), + rc.client->name()); + return false; + } + Dmsg1(800, "Using client=%s\n", rc.client->name()); + + if (rc.restore_client_name) { + rc.client = GetClientResWithName(rc.restore_client_name); + if (!rc.client) { + if (*rc.restore_client_name != 0) { + ua->warning_msg(_("Restore Client \"%s\" not found.\n"), rc.restore_client_name); + } + rc.client = select_client_resource(ua); + } + } else if (!rc.client) { + rc.client = rc.job->client; /* use default */ + } + if (!rc.client) { + return false; + } else if (!acl_access_ok(ua, Client_ACL, rc.client->name())) { + ua->error_msg(_("No authorization. Client \"%s\".\n"), + rc.client->name()); + return false; + } + Dmsg1(800, "Using restore client=%s\n", rc.client->name()); + return true; +} + + +/* + * Fill in fileset data according to what is setup + * in the run context, and make sure the user + * has authorized access to it. + */ +static bool get_fileset(UAContext *ua, run_ctx &rc) +{ + if (rc.fileset_name) { + rc.fileset = GetFileSetResWithName(rc.fileset_name); + if (!rc.fileset) { + ua->send_msg(_("FileSet \"%s\" not found.\n"), rc.fileset_name); + rc.fileset = select_fileset_resource(ua); + } + } else if (!rc.fileset) { + rc.fileset = rc.job->fileset; /* use default */ + } + if (!rc.fileset) { + return false; + } else if (!acl_access_ok(ua, FileSet_ACL, rc.fileset->name())) { + ua->send_msg(_("No authorization. FileSet \"%s\".\n"), + rc.fileset->name()); + return false; } + return true; +} +/* + * Fill in storage data according to what is setup + * in the run context, and make sure the user + * has authorized access to it. + */ +static bool get_storage(UAContext *ua, run_ctx &rc) +{ + if (rc.store_name) { + rc.store->store = GetStoreResWithName(rc.store_name); + pm_strcpy(rc.store->store_source, _("command line")); + if (!rc.store->store) { + if (*rc.store_name != 0) { + ua->warning_msg(_("Storage \"%s\" not found.\n"), rc.store_name); + } + rc.store->store = select_storage_resource(ua); + pm_strcpy(rc.store->store_source, _("user selection")); + } + } else if (!rc.store->store) { + get_job_storage(rc.store, rc.job, NULL); /* use default */ + } + if (!rc.store->store) { + ua->error_msg(_("No storage specified.\n")); + return false; + } else if (!acl_access_ok(ua, Storage_ACL, rc.store->store->name())) { + ua->error_msg(_("No authorization. Storage \"%s\".\n"), + rc.store->store->name()); + return false; + } + Dmsg1(800, "Using storage=%s\n", rc.store->store->name()); + return true; +} - /* Run without prompting? */ - if (ua->batch || find_arg(ua, NT_("yes")) > 0) { - goto start_job; +/* + * Get and pass back a list of Jobids in rc.jid + */ +static bool get_jobid_list(UAContext *ua, sellist &sl, run_ctx &rc) +{ + int i, JobId; + JOB_DBR jr; + char *pJobId; + bool found = false; + + memset(&jr, 0, sizeof(jr)); + rc.jid = NULL; + /* See if any JobId is specified */ + if ((i=find_arg(ua, "jobid")) >= 0) { + rc.jid = ua->argv[i]; + if (!rc.jid) { + ua->send_msg(_("No JobId specified.\n")); + return false; + } + if (sl.set_string(ua->argv[i], true) < 0 && sl.get_errmsg()) { + ua->send_msg("%s", sl.get_errmsg()); + return false; + } + return true; } + /* No JobId list give, so see if he specified a Job */ + if ((i=find_arg(ua, "job")) >= 0) { + rc.job_name = ua->argv[i]; + if (!get_job(ua, rc)) { + ua->send_msg(_("Invalid or no Job name specified.\n")); + return false; + } + } + jr.limit = 100; /* max 100 records */ + if (rc.job_name) { + bstrncpy(jr.Name, rc.job_name, sizeof(jr.Name)); + } else { + jr.Name[0] = 0; + } + jr.JobStatus = rc.jr.JobStatus; + Dmsg2(100, "JobStatus=%d JobName=%s\n", jr.JobStatus, jr.Name); + /* rc.JobIds is alist of all records found and printed */ + rc.JobIds = db_list_job_records(ua->jcr, ua->db, &jr, prtit, ua, INCOMPLETE_JOBS); + if (!rc.JobIds || rc.JobIds->size()==0 || + !get_selection_list(ua, sl, _("Enter the JobId list to select: "), false)) { + return false; + } + Dmsg1(100, "list=%s\n", sl.get_list()); /* - * Prompt User to see if all run job parameters are correct, and - * allow him to modify them. + * Make sure each item entered is in the JobIds list */ - if (!display_job_parameters(ua, jcr, rc.job, rc.verify_list, rc.jid, rc.replace, - rc.client_name)) { - goto bail_out; + while ( (JobId = sl.next()) > 0) { + foreach_alist(pJobId, rc.JobIds) { + if (JobId == str_to_int64(pJobId)) { + pJobId[0] = 0; + found = true; + break; + } + } + if (!found) { + ua->error_msg(_("JobId=%d entered is not in the list.\n"), JobId); + return false; + } } + sl.begin(); /* reset to walk list again */ + rc.done = false; + return true; +} - if (!get_cmd(ua, _("OK to run? (yes/mod/no): "))) { - goto bail_out; +static bool get_jobid_from_list(UAContext *ua, sellist &sl, run_ctx &rc) +{ + int JobId; + + if (rc.done) { + return false; } + if ((JobId = sl.next()) < 0) { + Dmsg1(100, "sl.next()=%d\n", JobId); + rc.done = true; + return false; + } + rc.jr.JobId = rc.JobId = JobId; + Dmsg1(100, "Next JobId=%d\n", rc.JobId); + if (!db_get_job_record(ua->jcr, ua->db, &rc.jr)) { + ua->error_msg(_("Could not get job record for selected JobId=%d. ERR=%s"), + rc.JobId, db_strerror(ua->db)); + return false; + } + Dmsg3(100, "Job=%s JobId=%d JobStatus=%c\n", rc.jr.Name, rc.jr.JobId, + rc.jr.JobStatus); + rc.job_name = rc.jr.Name; + if (!get_job(ua, rc)) { + return false; + } + if (!get_pool(ua, rc)) { + return false; + } + get_job_storage(rc.store, rc.job, NULL); + rc.client_name = rc.job->client->hdr.name; + if (!get_client(ua, rc)) { + return false; + } + if (!get_fileset(ua, rc)) { + return false; + } + if (!get_storage(ua, rc)) { + return false; + } + return true; +} + +/* + * Restart Canceled or Failed + * + * Returns: 0 on error + * JobId if OK + * + */ +int restart_cmd(UAContext *ua, const char *cmd) +{ + JCR *jcr = NULL; + run_ctx rc; + sellist sl; + int i, j; + bool got_kw = false; + struct s_js { + const char *status_name; + int32_t job_status; + }; + struct s_js kw[] = { + {"Canceled", JS_Canceled}, + {"Failed", JS_FatalError}, + {"All", 0}, + {NULL, 0} + }; - if (strncasecmp(ua->cmd, ".mod ", 5) == 0 || - (strncasecmp(ua->cmd, "mod ", 4) == 0 && strlen(ua->cmd) > 6)) { - parse_ua_args(ua); - rc.mod = true; - if (!scan_command_line_arguments(ua, rc)) { + if (!open_client_db(ua)) { + return 0; + } + + rc.jr.JobStatus = 0; + for (i=1; iargc; i++) { + for (j=0; kw[j].status_name; j++) { + if (strcasecmp(ua->argk[i], kw[j].status_name) == 0) { + rc.jr.JobStatus = kw[j].job_status; + got_kw = true; + break; + } + } + } + if (!got_kw) { /* Must prompt user */ + start_prompt(ua, _("You have the following choices:\n")); + for (i=0; kw[i].status_name; i++) { + add_prompt(ua, kw[i].status_name); + } + i = do_prompt(ua, NULL, _("Select termination code: "), NULL, 0); + if (i < 0) { return 0; } - goto try_again; + rc.jr.JobStatus = kw[i].job_status; } - /* Allow the user to modify the settings */ - status = modify_job_parameters(ua, jcr, rc); - switch (status) { - case 0: - goto try_again; - case 1: - break; - case -1: - goto bail_out; - } + /* type now has what job termination code we want to look at */ + Dmsg1(100, "Termination code=%c\n", rc.jr.JobStatus); + /* Get a list of JobIds to restore */ + if (!get_jobid_list(ua, sl, rc)) { + if (rc.JobIds) { + rc.JobIds->destroy(); + } + return false; + } + Dmsg1(100, "list=%s\n", sl.get_list()); - if (ua->cmd[0] == 0 || strncasecmp(ua->cmd, _("yes"), strlen(ua->cmd)) == 0) { - JobId_t JobId; - Dmsg1(800, "Calling run_job job=%x\n", jcr->job); + while (get_jobid_from_list(ua, sl, rc)) { + /* + * Create JCR to run job. NOTE!!! after this point, free_jcr() + * before returning. + */ + if (!jcr) { + jcr = new_jcr(sizeof(JCR), dird_free_jcr); + set_jcr_defaults(jcr, rc.job); + jcr->unlink_bsr = ua->jcr->unlink_bsr; /* copy unlink flag from caller */ + ua->jcr->unlink_bsr = false; + } -start_job: - Dmsg3(100, "JobId=%u using pool %s priority=%d\n", (int)jcr->JobId, - jcr->pool->name(), jcr->JobPriority); - Dmsg1(900, "Running a job; its spool_data = %d\n", jcr->spool_data); - JobId = run_job(jcr); - Dmsg4(100, "JobId=%u NewJobId=%d using pool %s priority=%d\n", (int)jcr->JobId, - JobId, jcr->pool->name(), jcr->JobPriority); - free_jcr(jcr); /* release jcr */ - if (JobId == 0) { - ua->error_msg(_("Job failed.\n")); - } else { - char ed1[50]; - ua->send_msg(_("Job queued. JobId=%s\n"), edit_int64(JobId, ed1)); + if (!set_run_context_in_jcr(ua, jcr, rc)) { + break; } - return JobId; + start_job(ua, jcr, rc); + jcr = NULL; } - if (strncasecmp(ua->cmd, _("no"), strlen(ua->cmd)) == 0) { - goto bail_out; - } - ua->send_msg(_("\nBad response: %s. You must answer yes, mod, or no.\n\n"), ua->cmd); - goto try_again; -bail_out: - ua->send_msg(_("Job not run.\n")); - free_jcr(jcr); + if (jcr) { + free_jcr(jcr); + } + if (rc.JobIds) { + rc.JobIds->destroy(); + } return 0; /* do not run */ } + int modify_job_parameters(UAContext *ua, JCR *jcr, run_ctx &rc) { int i, opt; - + /* * At user request modify parameters of job to be run. */ - if (ua->cmd[0] != 0 && strncasecmp(ua->cmd, _("mod"), strlen(ua->cmd)) == 0) { + if (ua->cmd[0] != 0 && strncasecmp(ua->cmd, _("mod"), strlen(ua->cmd)) == 0){ FILE *fd; start_prompt(ua, _("Parameters to modify:\n")); @@ -236,13 +631,18 @@ int modify_job_parameters(UAContext *ua, JCR *jcr, run_ctx &rc) jcr->getJobType() == JT_MIGRATE || jcr->getJobType() == JT_VERIFY) { add_prompt(ua, _("Pool")); /* 7 */ - if (jcr->getJobType() == JT_VERIFY) { + if ((jcr->getJobType() == JT_BACKUP && /* Virtual full */ + jcr->is_JobLevel(L_VIRTUAL_FULL)) || + jcr->getJobType() == JT_COPY || + jcr->getJobType() == JT_MIGRATE) { + add_prompt(ua, _("NextPool")); /* 8 */ + } else if (jcr->getJobType() == JT_VERIFY) { add_prompt(ua, _("Verify Job")); /* 8 */ } } else if (jcr->getJobType() == JT_RESTORE) { add_prompt(ua, _("Bootstrap")); /* 7 */ add_prompt(ua, _("Where")); /* 8 */ - add_prompt(ua, _("File Relocation"));/* 9 */ + add_prompt(ua, _("File Relocation"));/* 9 */ add_prompt(ua, _("Replace")); /* 10 */ add_prompt(ua, _("JobId")); /* 11 */ } @@ -314,7 +714,7 @@ int modify_job_parameters(UAContext *ua, JCR *jcr, run_ctx &rc) jcr->JobPriority = ua->pint32_val; } goto try_again; - case 7: + case 7: /* Pool or Bootstrap depending on JobType */ if (jcr->getJobType() == JT_BACKUP || jcr->getJobType() == JT_COPY || @@ -352,6 +752,18 @@ int modify_job_parameters(UAContext *ua, JCR *jcr, run_ctx &rc) } goto try_again; case 8: + /* Specify Next Pool */ + if ((jcr->getJobType() == JT_BACKUP && /* Virtual full */ + jcr->is_JobLevel(L_VIRTUAL_FULL)) || + jcr->getJobType() == JT_COPY || + jcr->getJobType() == JT_MIGRATE) { + rc.next_pool = select_pool_resource(ua); + if (rc.next_pool) { + jcr->next_pool = rc.next_pool; + pm_strcpy(jcr->next_pool_source, _("Command input")); + goto try_again; + } + } /* Verify Job */ if (jcr->getJobType() == JT_VERIFY) { rc.verify_job = select_job_resource(ua); @@ -377,7 +789,7 @@ int modify_job_parameters(UAContext *ua, JCR *jcr, run_ctx &rc) } jcr->where = bstrdup(ua->cmd); goto try_again; - case 9: + case 9: /* File relocation */ select_where_regexp(ua, jcr); goto try_again; @@ -401,16 +813,7 @@ int modify_job_parameters(UAContext *ua, JCR *jcr, run_ctx &rc) ua->send_msg(_("You must set the bootstrap file to NULL to be able to specify a JobId.\n")); } goto try_again; - case 12: - /* Plugin Options */ - if (!get_cmd(ua, _("Please Plugin Options string: "))) { - break; - } - if (jcr->plugin_options) { - free(jcr->plugin_options); - jcr->plugin_options = NULL; - } - jcr->plugin_options = bstrdup(ua->cmd); + case 12: goto try_again; case -1: /* error or cancel */ goto bail_out; @@ -423,29 +826,44 @@ int modify_job_parameters(UAContext *ua, JCR *jcr, run_ctx &rc) bail_out: return -1; - try_again: return 0; } /* - * Reset the restore context. + * Put the run context that we have at this point into the JCR. + * That allows us to re-ask for the run context. * This subroutine can be called multiple times, so it * must keep any prior settings. */ -static bool reset_restore_context(UAContext *ua, JCR *jcr, run_ctx &rc) +static bool set_run_context_in_jcr(UAContext *ua, JCR *jcr, run_ctx &rc) { int i; jcr->verify_job = rc.verify_job; jcr->previous_job = rc.previous_job; jcr->pool = rc.pool; - if (jcr->pool != jcr->job->pool) { + jcr->next_pool = rc.next_pool; + if (rc.pool_name) { + pm_strcpy(jcr->pool_source, _("Command input")); + } else if (jcr->pool != jcr->job->pool) { pm_strcpy(jcr->pool_source, _("User input")); } + if (rc.next_pool_name) { + pm_strcpy(jcr->next_pool_source, _("Command input")); + } else if (jcr->next_pool != jcr->pool->NextPool) { + pm_strcpy(jcr->next_pool_source, _("User input")); + } + set_rwstorage(jcr, rc.store); jcr->client = rc.client; pm_strcpy(jcr->client_name, rc.client->name()); + if (rc.media_type) { + if (!jcr->media_type) { + jcr->media_type = get_pool_memory(PM_NAME); + } + pm_strcpy(jcr->media_type, rc.media_type); + } jcr->fileset = rc.fileset; jcr->ExpectedFiles = rc.files; if (rc.catalog) { @@ -467,7 +885,7 @@ static bool reset_restore_context(UAContext *ua, JCR *jcr, run_ctx &rc) if (jcr->RegexWhere) { free(jcr->RegexWhere); } - jcr->RegexWhere = bstrdup(rc.regexwhere); + jcr->RegexWhere = bstrdup(rc.regexwhere); rc.regexwhere = NULL; } @@ -535,13 +953,14 @@ static bool reset_restore_context(UAContext *ua, JCR *jcr, run_ctx &rc) /* If pool changed, update migration write storage */ if (jcr->is_JobType(JT_MIGRATE) || jcr->is_JobType(JT_COPY) || (jcr->is_JobType(JT_BACKUP) && jcr->is_JobLevel(L_VIRTUAL_FULL))) { - if (!set_migration_wstorage(jcr, rc.pool)) { + if (!set_mac_wstorage(ua, jcr, rc.pool, rc.next_pool, + _("Storage from NextPool override"))) { return false; } } rc.replace = ReplaceOptions[0].name; for (i=0; ReplaceOptions[i].name; i++) { - if (ReplaceOptions[i].token == jcr->replace) { + if (ReplaceOptions[i].token == (int)jcr->replace) { rc.replace = ReplaceOptions[i].name; } } @@ -555,6 +974,14 @@ static bool reset_restore_context(UAContext *ua, JCR *jcr, run_ctx &rc) if (rc.jid) { /* Note, this is also MigrateJobId and a VerifyJobId */ jcr->RestoreJobId = str_to_int64(rc.jid); + + /* Copy also this parameter for VirtualFull in jcr->JobIds */ + if (!jcr->JobIds) { + jcr->JobIds = get_pool_memory(PM_FNAME); + } + pm_strcpy(jcr->JobIds, rc.jid); + jcr->use_all_JobIds = rc.alljobid; /* if we found the "alljobid=" kw */ + rc.alljobid = false; rc.jid = 0; } @@ -596,7 +1023,7 @@ try_again_reg: add_prompt(ua, _("Enter a regexp")); /* 3 */ add_prompt(ua, _("Test filename manipulation")); /* 4 */ add_prompt(ua, _("Use this ?")); /* 5 */ - + switch (do_prompt(ua, "", _("Select parameter to modify"), NULL, 0)) { case 0: /* Strip prefix */ @@ -604,7 +1031,7 @@ try_again_reg: if (strip_prefix) bfree(strip_prefix); strip_prefix = bstrdup(ua->cmd); } - + goto try_again_reg; case 1: /* Add prefix */ @@ -622,7 +1049,7 @@ try_again_reg: if (get_cmd(ua, _("Please enter the file suffix to add: "))) { if (add_suffix) bfree(add_suffix); add_suffix = bstrdup(ua->cmd); - } + } goto try_again_reg; case 3: /* Add rwhere */ @@ -630,13 +1057,13 @@ try_again_reg: if (rwhere) bfree(rwhere); rwhere = bstrdup(ua->cmd); } - - goto try_again_reg; + + goto try_again_reg; case 4: - /* Test regexp */ + /* Test regexp */ char *result; char *regexp; - + if (rwhere && rwhere[0] != '\0') { regs = get_bregexps(rwhere); ua->send_msg(_("regexwhere=%s\n"), NPRT(rwhere)); @@ -647,7 +1074,7 @@ try_again_reg: regs = get_bregexps(regexp); ua->send_msg(_("strip_prefix=%s add_prefix=%s add_suffix=%s result=%s\n"), NPRT(strip_prefix), NPRT(add_prefix), NPRT(add_suffix), NPRT(regexp)); - + bfree(regexp); } @@ -777,7 +1204,7 @@ static void select_job_level(UAContext *ua, JCR *jcr) } static bool display_job_parameters(UAContext *ua, JCR *jcr, JOB *job, const char *verify_list, - char *jid, const char *replace, char *client_name) + char *jid, const char *replace, char *client_name) { char ec1[30]; char dt[MAX_TIME_LENGTH]; @@ -786,7 +1213,7 @@ static bool display_job_parameters(UAContext *ua, JCR *jcr, JOB *job, const char switch (jcr->getJobType()) { case JT_ADMIN: if (ua->api) { - ua->signal(BNET_RUN_CMD); + ua->signal(BNET_RUN_CMD); ua->send_msg("Type: Admin\n" "Title: Run Admin Job\n" "JobName: %s\n" @@ -820,9 +1247,15 @@ static bool display_job_parameters(UAContext *ua, JCR *jcr, JOB *job, const char break; case JT_BACKUP: case JT_VERIFY: + char next_pool[MAX_NAME_LENGTH + 50]; + next_pool[0] = 0; if (jcr->getJobType() == JT_BACKUP) { if (ua->api) { - ua->signal(BNET_RUN_CMD); + ua->signal(BNET_RUN_CMD); + if (jcr->is_JobLevel(L_VIRTUAL_FULL)) { + bsnprintf(next_pool, sizeof(next_pool), "NextPool: %s\n", + jcr->next_pool ? jcr->next_pool->name() : "*None*"); + } ua->send_msg("Type: Backup\n" "Title: Run Backup Job\n" "JobName: %s\n" @@ -830,43 +1263,45 @@ static bool display_job_parameters(UAContext *ua, JCR *jcr, JOB *job, const char "Client: %s\n" "FileSet: %s\n" "Pool: %s\n" + "%s" "Storage: %s\n" "When: %s\n" - "Priority: %d\n" - "%s%s%s", + "Priority: %d\n", job->name(), level_to_str(jcr->getJobLevel()), jcr->client->name(), jcr->fileset->name(), NPRT(jcr->pool->name()), + next_pool, jcr->wstore?jcr->wstore->name():"*None*", bstrutime(dt, sizeof(dt), jcr->sched_time), - jcr->JobPriority, - jcr->plugin_options?"Plugin Options: ":"", - jcr->plugin_options?jcr->plugin_options:"", - jcr->plugin_options?"\n":""); + jcr->JobPriority); } else { + if (jcr->is_JobLevel(L_VIRTUAL_FULL)) { + bsnprintf(next_pool, sizeof(next_pool), + "NextPool: %s (From %s)\n", + jcr->next_pool ? jcr->next_pool->name() : "*None*", + jcr->next_pool_source); + } ua->send_msg(_("Run Backup job\n" "JobName: %s\n" "Level: %s\n" "Client: %s\n" "FileSet: %s\n" "Pool: %s (From %s)\n" + "%s" "Storage: %s (From %s)\n" "When: %s\n" - "Priority: %d\n" - "%s%s%s"), + "Priority: %d\n"), job->name(), level_to_str(jcr->getJobLevel()), jcr->client->name(), jcr->fileset->name(), NPRT(jcr->pool->name()), jcr->pool_source, + next_pool, jcr->wstore?jcr->wstore->name():"*None*", jcr->wstore_source, bstrutime(dt, sizeof(dt), jcr->sched_time), - jcr->JobPriority, - jcr->plugin_options?"Plugin Options: ":"", - jcr->plugin_options?jcr->plugin_options:"", - jcr->plugin_options?"\n":""); + jcr->JobPriority); } } else { /* JT_VERIFY */ JOB_DBR jr; @@ -892,7 +1327,7 @@ static bool display_job_parameters(UAContext *ua, JCR *jcr, JOB *job, const char verify_list = ""; } if (ua->api) { - ua->signal(BNET_RUN_CMD); + ua->signal(BNET_RUN_CMD); ua->send_msg("Type: Verify\n" "Title: Run Verify Job\n" "JobName: %s\n" @@ -957,7 +1392,7 @@ static bool display_job_parameters(UAContext *ua, JCR *jcr, JOB *job, const char /* RegexWhere is take before RestoreWhere */ if (jcr->RegexWhere || (job->RegexWhere && !jcr->where)) { if (ua->api) { - ua->signal(BNET_RUN_CMD); + ua->signal(BNET_RUN_CMD); ua->send_msg("Type: Restore\n" "Title: Run Restore Job\n" "JobName: %s\n" @@ -970,10 +1405,9 @@ static bool display_job_parameters(UAContext *ua, JCR *jcr, JOB *job, const char "Storage: %s\n" "When: %s\n" "Catalog: %s\n" - "Priority: %d\n" - "Plugin Options: %s\n", + "Priority: %d\n", job->name(), - NPRT(jcr->RestoreBootstrap), + NPRT(jcr->RestoreBootstrap), jcr->RegexWhere?jcr->RegexWhere:job->RegexWhere, replace, jcr->fileset->name(), @@ -982,8 +1416,7 @@ static bool display_job_parameters(UAContext *ua, JCR *jcr, JOB *job, const char jcr->rstore->name(), bstrutime(dt, sizeof(dt), jcr->sched_time), jcr->catalog->name(), - jcr->JobPriority, - NPRT(jcr->plugin_options)); + jcr->JobPriority); } else { ua->send_msg(_("Run Restore job\n" "JobName: %s\n" @@ -996,10 +1429,9 @@ static bool display_job_parameters(UAContext *ua, JCR *jcr, JOB *job, const char "Storage: %s\n" "When: %s\n" "Catalog: %s\n" - "Priority: %d\n" - "Plugin Options: %s\n"), + "Priority: %d\n"), job->name(), - NPRT(jcr->RestoreBootstrap), + NPRT(jcr->RestoreBootstrap), jcr->RegexWhere?jcr->RegexWhere:job->RegexWhere, replace, jcr->fileset->name(), @@ -1008,12 +1440,11 @@ static bool display_job_parameters(UAContext *ua, JCR *jcr, JOB *job, const char jcr->rstore->name(), bstrutime(dt, sizeof(dt), jcr->sched_time), jcr->catalog->name(), - jcr->JobPriority, - NPRT(jcr->plugin_options)); + jcr->JobPriority); } } else { if (ua->api) { - ua->signal(BNET_RUN_CMD); + ua->signal(BNET_RUN_CMD); ua->send_msg("Type: Restore\n" "Title: Run Restore job\n" "JobName: %s\n" @@ -1026,11 +1457,10 @@ static bool display_job_parameters(UAContext *ua, JCR *jcr, JOB *job, const char "Storage: %s\n" "When: %s\n" "Catalog: %s\n" - "Priority: %d\n" - "Plugin Options: %s\n", + "Priority: %d\n", job->name(), - NPRT(jcr->RestoreBootstrap), - jcr->where?jcr->where:NPRT(job->RestoreWhere), + NPRT(jcr->RestoreBootstrap), + jcr->where?jcr->where:NPRT(job->RestoreWhere), replace, jcr->fileset->name(), client_name, @@ -1038,8 +1468,7 @@ static bool display_job_parameters(UAContext *ua, JCR *jcr, JOB *job, const char jcr->rstore->name(), bstrutime(dt, sizeof(dt), jcr->sched_time), jcr->catalog->name(), - jcr->JobPriority, - NPRT(jcr->plugin_options)); + jcr->JobPriority); } else { ua->send_msg(_("Run Restore job\n" "JobName: %s\n" @@ -1052,11 +1481,10 @@ static bool display_job_parameters(UAContext *ua, JCR *jcr, JOB *job, const char "Storage: %s\n" "When: %s\n" "Catalog: %s\n" - "Priority: %d\n" - "Plugin Options: %s\n"), + "Priority: %d\n"), job->name(), - NPRT(jcr->RestoreBootstrap), - jcr->where?jcr->where:NPRT(job->RestoreWhere), + NPRT(jcr->RestoreBootstrap), + jcr->where?jcr->where:NPRT(job->RestoreWhere), replace, jcr->fileset->name(), client_name, @@ -1064,20 +1492,19 @@ static bool display_job_parameters(UAContext *ua, JCR *jcr, JOB *job, const char jcr->rstore->name(), bstrutime(dt, sizeof(dt), jcr->sched_time), jcr->catalog->name(), - jcr->JobPriority, - NPRT(jcr->plugin_options)); + jcr->JobPriority); } } } else { /* ***FIXME*** This needs to be fixed for bat */ - if (ua->api) ua->signal(BNET_RUN_CMD); + if (ua->api) ua->signal(BNET_RUN_CMD); ua->send_msg(_("Run Restore job\n" "JobName: %s\n" "Bootstrap: %s\n"), job->name(), NPRT(jcr->RestoreBootstrap)); - + /* RegexWhere is take before RestoreWhere */ if (jcr->RegexWhere || (job->RegexWhere && !jcr->where)) { ua->send_msg(_("RegexWhere: %s\n"), @@ -1093,17 +1520,15 @@ static bool display_job_parameters(UAContext *ua, JCR *jcr, JOB *job, const char "JobId: %s\n" "When: %s\n" "Catalog: %s\n" - "Priority: %d\n" - "Plugin Options: %s\n"), + "Priority: %d\n"), replace, jcr->client->name(), jcr->rstore->name(), jcr->RestoreJobId==0?"*None*":edit_uint64(jcr->RestoreJobId, ec1), bstrutime(dt, sizeof(dt), jcr->sched_time), jcr->catalog->name(), - jcr->JobPriority, - NPRT(jcr->plugin_options)); - } + jcr->JobPriority); + } break; case JT_COPY: case JT_MIGRATE: @@ -1122,6 +1547,7 @@ static bool display_job_parameters(UAContext *ua, JCR *jcr, JOB *job, const char "Client: %s\n" "FileSet: %s\n" "Pool: %s\n" + "NextPool: %s\n" "Read Storage: %s\n" "Write Storage: %s\n" "JobId: %s\n" @@ -1134,6 +1560,7 @@ static bool display_job_parameters(UAContext *ua, JCR *jcr, JOB *job, const char jcr->client->name(), jcr->fileset->name(), NPRT(jcr->pool->name()), + jcr->next_pool?jcr->next_pool->name():"*None*", jcr->rstore->name(), jcr->wstore?jcr->wstore->name():"*None*", jcr->MigrateJobId==0?"*None*":edit_uint64(jcr->MigrateJobId, ec1), @@ -1152,6 +1579,7 @@ static bool display_job_parameters(UAContext *ua, JCR *jcr, JOB *job, const char "Client: %s\n" "FileSet: %s\n" "Pool: %s (From %s)\n" + "NextPool: %s (From %s)\n" "Read Storage: %s (From %s)\n" "Write Storage: %s (From %s)\n" "JobId: %s\n" @@ -1164,6 +1592,8 @@ static bool display_job_parameters(UAContext *ua, JCR *jcr, JOB *job, const char jcr->client->name(), jcr->fileset->name(), NPRT(jcr->pool->name()), jcr->pool_source, + jcr->next_pool?jcr->next_pool->name():"*None*", + NPRT(jcr->next_pool_source), jcr->rstore->name(), jcr->rstore_source, jcr->wstore?jcr->wstore->name():"*None*", jcr->wstore_source, jcr->MigrateJobId==0?"*None*":edit_uint64(jcr->MigrateJobId, ec1), @@ -1180,12 +1610,12 @@ static bool display_job_parameters(UAContext *ua, JCR *jcr, JOB *job, const char } -static bool scan_command_line_arguments(UAContext *ua, run_ctx &rc) +static bool scan_run_command_line_arguments(UAContext *ua, run_ctx &rc) { bool kw_ok; int i, j; static const char *kw[] = { /* command line arguments */ - "job", /* Used in a switch() */ + "alljobid", /* 0 Used in a switch() */ "jobid", /* 1 */ "client", /* 2 */ "fd", /* 3 */ @@ -1215,6 +1645,9 @@ static bool scan_command_line_arguments(UAContext *ua, run_ctx &rc) "comment", /* 27 */ "ignoreduplicatecheck", /* 28 */ "accurate", /* 29 */ + "job", /* 30 */ + "mediatype", /* 31 */ + "nextpool", /* 32 override next pool name */ NULL }; @@ -1223,8 +1656,10 @@ static bool scan_command_line_arguments(UAContext *ua, run_ctx &rc) rc.catalog_name = NULL; rc.job_name = NULL; rc.pool_name = NULL; + rc.next_pool_name = NULL; rc.store_name = NULL; rc.client_name = NULL; + rc.media_type = NULL; rc.restore_client_name = NULL; rc.fileset_name = NULL; rc.verify_job_name = NULL; @@ -1245,17 +1680,12 @@ static bool scan_command_line_arguments(UAContext *ua, run_ctx &rc) ua->send_msg(_("Value missing for keyword %s\n"), ua->argk[i]); return false; } - Dmsg1(800, "Got keyword=%s\n", NPRT(kw[j])); + Dmsg2(800, "Got j=%d keyword=%s\n", j, NPRT(kw[j])); switch (j) { - case 0: /* job */ - if (rc.job_name) { - ua->send_msg(_("Job name specified twice.\n")); - return false; - } - rc.job_name = ua->argv[i]; - kw_ok = true; - break; - case 1: /* JobId */ + case 0: /* alljobid */ + rc.alljobid = true; + /* Fall through wanted */ + case 1: /* JobId */ if (rc.jid && !rc.mod) { ua->send_msg(_("JobId specified twice.\n")); return false; @@ -1378,7 +1808,7 @@ static bool scan_command_line_arguments(UAContext *ua, run_ctx &rc) break; case 18: /* since */ rc.since = ua->argv[i]; - kw_ok = true; + kw_ok = true; break; case 19: /* cloned */ rc. cloned = true; @@ -1474,11 +1904,36 @@ static bool scan_command_line_arguments(UAContext *ua, run_ctx &rc) ua->send_msg(_("Invalid accurate flag.\n")); } break; + case 30: /* job */ + if (rc.job_name) { + ua->send_msg(_("Job name specified twice.\n")); + return false; + } + rc.job_name = ua->argv[i]; + kw_ok = true; + break; + case 31: /* mediatype */ + if (rc.media_type) { + ua->send_msg(_("Media Type specified twice.\n")); + return false; + } + rc.media_type = ua->argv[i]; + kw_ok = true; + break; + case 32: /* Next Pool */ + if (rc.next_pool_name) { + ua->send_msg(_("NextPool specified twice.\n")); + return false; + } + rc.next_pool_name = ua->argv[i]; + kw_ok = true; + break; default: break; } } /* end strcase compare */ } /* end keyword loop */ + /* * End of keyword for loop -- if not found, we got a bogus keyword */ @@ -1497,7 +1952,7 @@ static bool scan_command_line_arguments(UAContext *ua, run_ctx &rc) } } } /* end argc loop */ - + Dmsg0(800, "Done scan.\n"); if (rc.comment) { if (!is_comment_legal(ua, rc.comment)) { @@ -1517,124 +1972,28 @@ static bool scan_command_line_arguments(UAContext *ua, run_ctx &rc) } Dmsg1(800, "Using catalog=%s\n", NPRT(rc.catalog_name)); - if (rc.job_name) { - /* Find Job */ - rc.job = GetJobResWithName(rc.job_name); - if (!rc.job) { - if (*rc.job_name != 0) { - ua->send_msg(_("Job \"%s\" not found\n"), rc.job_name); - } - rc.job = select_job_resource(ua); - } else { - Dmsg1(800, "Found job=%s\n", rc.job_name); - } - } else if (!rc.job) { - ua->send_msg(_("A job name must be specified.\n")); - rc.job = select_job_resource(ua); - } - if (!rc.job) { - return false; - } else if (!acl_access_ok(ua, Job_ACL, rc.job->name())) { - ua->error_msg( _("No authorization. Job \"%s\".\n"), rc.job->name()); + if (!get_job(ua, rc)) { return false; } - if (rc.pool_name) { - rc.pool = GetPoolResWithName(rc.pool_name); - if (!rc.pool) { - if (*rc.pool_name != 0) { - ua->warning_msg(_("Pool \"%s\" not found.\n"), rc.pool_name); - } - rc.pool = select_pool_resource(ua); - } - } else if (!rc.pool) { - rc.pool = rc.job->pool; /* use default */ - } - if (!rc.pool) { - return false; - } else if (!acl_access_ok(ua, Pool_ACL, rc.pool->name())) { - ua->error_msg(_("No authorization. Pool \"%s\".\n"), rc.pool->name()); + if (!get_pool(ua, rc)) { return false; } - Dmsg1(100, "Using pool %s\n", rc.pool->name()); - if (rc.store_name) { - rc.store->store = GetStoreResWithName(rc.store_name); - pm_strcpy(rc.store->store_source, _("command line")); - if (!rc.store->store) { - if (*rc.store_name != 0) { - ua->warning_msg(_("Storage \"%s\" not found.\n"), rc.store_name); - } - rc.store->store = select_storage_resource(ua); - pm_strcpy(rc.store->store_source, _("user selection")); - } - } else if (!rc.store->store) { - get_job_storage(rc.store, rc.job, NULL); /* use default */ - } - if (!rc.store->store) { - ua->error_msg(_("No storage specified.\n")); - return false; - } else if (!acl_access_ok(ua, Storage_ACL, rc.store->store->name())) { - ua->error_msg(_("No authorization. Storage \"%s\".\n"), - rc.store->store->name()); + if (!get_next_pool(ua, rc)) { return false; } - Dmsg1(800, "Using storage=%s\n", rc.store->store->name()); - if (rc.client_name) { - rc.client = GetClientResWithName(rc.client_name); - if (!rc.client) { - if (*rc.client_name != 0) { - ua->warning_msg(_("Client \"%s\" not found.\n"), rc.client_name); - } - rc.client = select_client_resource(ua); - } - } else if (!rc.client) { - rc.client = rc.job->client; /* use default */ - } - if (!rc.client) { - return false; - } else if (!acl_access_ok(ua, Client_ACL, rc.client->name())) { - ua->error_msg(_("No authorization. Client \"%s\".\n"), - rc.client->name()); + if (!get_storage(ua, rc)) { return false; } - Dmsg1(800, "Using client=%s\n", rc.client->name()); - if (rc.restore_client_name) { - rc.client = GetClientResWithName(rc.restore_client_name); - if (!rc.client) { - if (*rc.restore_client_name != 0) { - ua->warning_msg(_("Restore Client \"%s\" not found.\n"), rc.restore_client_name); - } - rc.client = select_client_resource(ua); - } - } else if (!rc.client) { - rc.client = rc.job->client; /* use default */ - } - if (!rc.client) { - return false; - } else if (!acl_access_ok(ua, Client_ACL, rc.client->name())) { - ua->error_msg(_("No authorization. Client \"%s\".\n"), - rc.client->name()); + + if (!get_client(ua, rc)) { return false; } - Dmsg1(800, "Using restore client=%s\n", rc.client->name()); - if (rc.fileset_name) { - rc.fileset = GetFileSetResWithName(rc.fileset_name); - if (!rc.fileset) { - ua->send_msg(_("FileSet \"%s\" not found.\n"), rc.fileset_name); - rc.fileset = select_fileset_resource(ua); - } - } else if (!rc.fileset) { - rc.fileset = rc.job->fileset; /* use default */ - } - if (!rc.fileset) { - return false; - } else if (!acl_access_ok(ua, FileSet_ACL, rc.fileset->name())) { - ua->send_msg(_("No authorization. FileSet \"%s\".\n"), - rc.fileset->name()); + if (!get_fileset(ua, rc)) { return false; } diff --git a/bacula/src/dird/ua_select.c b/bacula/src/dird/ua_select.c index 0780aaa000..5f8bc332f5 100644 --- a/bacula/src/dird/ua_select.c +++ b/bacula/src/dird/ua_select.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2001-2012 Free Software Foundation Europe e.V. + Copyright (C) 2001-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * @@ -150,17 +138,28 @@ int do_keyword_prompt(UAContext *ua, const char *msg, const char **list) /* * Select a Storage resource from prompt list + * If unique is set storage resources that have the main address are + * combined into one (i.e. they are all part of the same) + * storage. Note, not all commands want this. */ -STORE *select_storage_resource(UAContext *ua) +STORE *select_storage_resource(UAContext *ua, bool unique) { char name[MAX_NAME_LENGTH]; STORE *store; + /* Does user want a full selection? */ + if (unique && find_arg(ua, NT_("select")) > 0) { + unique = false; + } start_prompt(ua, _("The defined Storage resources are:\n")); LockRes(); foreach_res(store, R_STORAGE) { if (acl_access_ok(ua, Storage_ACL, store->name())) { - add_prompt(ua, store->name()); + if (unique) { + add_prompt(ua, store->name(), store->address); + } else { + add_prompt(ua, store->name()); + } } } UnlockRes(); @@ -244,7 +243,7 @@ CAT *get_catalog_resource(UAContext *ua) /* - * Select a job to enable or disable + * Select a job to enable or disable */ JOB *select_enable_disable_job_resource(UAContext *ua, bool enable) { @@ -293,7 +292,7 @@ JOB *select_job_resource(UAContext *ua) return job; } -/* +/* * Select a Restore Job resource from argument or prompt */ JOB *get_restore_job(UAContext *ua) @@ -490,7 +489,7 @@ bool select_client_dbr(UAContext *ua, CLIENT_DBR *cr) bool get_pool_dbr(UAContext *ua, POOL_DBR *pr, const char *argk) { if (pr->Name[0]) { /* If name already supplied */ - if (db_get_pool_record(ua->jcr, ua->db, pr) && + if (db_get_pool_numvols(ua->jcr, ua->db, pr) && acl_access_ok(ua, Pool_ACL, pr->Name)) { return true; } @@ -517,7 +516,7 @@ bool select_pool_dbr(UAContext *ua, POOL_DBR *pr, const char *argk) if (strcasecmp(ua->argk[i], argk) == 0 && ua->argv[i] && acl_access_ok(ua, Pool_ACL, ua->argv[i])) { bstrncpy(pr->Name, ua->argv[i], sizeof(pr->Name)); - if (!db_get_pool_record(ua->jcr, ua->db, pr)) { + if (!db_get_pool_numvols(ua->jcr, ua->db, pr)) { ua->error_msg(_("Could not find Pool \"%s\": ERR=%s"), ua->argv[i], db_strerror(ua->db)); pr->PoolId = 0; @@ -543,7 +542,7 @@ bool select_pool_dbr(UAContext *ua, POOL_DBR *pr, const char *argk) } for (i=0; i < num_pools; i++) { opr.PoolId = ids[i]; - if (!db_get_pool_record(ua->jcr, ua->db, &opr) || + if (!db_get_pool_numvols(ua->jcr, ua->db, &opr) || !acl_access_ok(ua, Pool_ACL, opr.Name)) { continue; } @@ -562,7 +561,7 @@ bool select_pool_dbr(UAContext *ua, POOL_DBR *pr, const char *argk) if (!bstrcmp(name, _("*None*"))) { bstrncpy(opr.Name, name, sizeof(opr.Name)); - if (!db_get_pool_record(ua->jcr, ua->db, &opr)) { + if (!db_get_pool_numvols(ua->jcr, ua->db, &opr)) { ua->error_msg(_("Could not find Pool \"%s\": ERR=%s"), name, db_strerror(ua->db)); return false; } @@ -695,7 +694,7 @@ POOL *get_pool_resource(UAContext *ua) /* * List all jobs and ask user to select one */ -int select_job_dbr(UAContext *ua, JOB_DBR *jr) +static int select_job_dbr(UAContext *ua, JOB_DBR *jr) { db_list_job_records(ua->jcr, ua->db, jr, prtit, ua, HORZ_LIST); if (!get_pint(ua, _("Enter the JobId to select: "))) { @@ -769,28 +768,39 @@ void start_prompt(UAContext *ua, const char *msg) if (ua->max_prompts == 0) { ua->max_prompts = 10; ua->prompt = (char **)bmalloc(sizeof(char *) * ua->max_prompts); + ua->unique = (char **)bmalloc(sizeof(char *) * ua->max_prompts); } ua->num_prompts = 1; ua->prompt[0] = bstrdup(msg); + ua->unique[0] = NULL; } /* - * Add to prompts -- keeping them unique + * Add to prompts -- keeping them unique by name */ -void add_prompt(UAContext *ua, const char *prompt) +void add_prompt(UAContext *ua, const char *prompt, char *unique) { int i; if (ua->num_prompts == ua->max_prompts) { ua->max_prompts *= 2; ua->prompt = (char **)brealloc(ua->prompt, sizeof(char *) * ua->max_prompts); + ua->unique = (char **)brealloc(ua->unique, sizeof(char *) * + ua->max_prompts); } for (i=1; i < ua->num_prompts; i++) { if (strcmp(ua->prompt[i], prompt) == 0) { return; + } else if (unique && strcmp(ua->unique[i], unique) == 0) { + return; } } - ua->prompt[ua->num_prompts++] = bstrdup(prompt); + ua->prompt[ua->num_prompts] = bstrdup(prompt); + if (unique) { + ua->unique[ua->num_prompts++] = bstrdup(unique); + } else { + ua->unique[ua->num_prompts++] = NULL; + } } /* @@ -801,7 +811,7 @@ void add_prompt(UAContext *ua, const char *prompt) * is copied to prompt if not NULL * prompt is set to the chosen prompt item string */ -int do_prompt(UAContext *ua, const char *automsg, const char *msg, +int do_prompt(UAContext *ua, const char *automsg, const char *msg, char *prompt, int max_prompt) { int i, item; @@ -880,11 +890,101 @@ int do_prompt(UAContext *ua, const char *automsg, const char *msg, done: for (i=0; i < ua->num_prompts; i++) { free(ua->prompt[i]); + if (ua->unique[i]) free(ua->unique[i]); } ua->num_prompts = 0; return item>0 ? item-1 : item; } +/* + * Display prompts and get user's choice + * + * Returns: -1 on error + * number of items selected and the choices are + * copied to selected if not NULL + * selected is an alist of the prompts chosen + * Note! selected must already be initialized. + */ +int do_alist_prompt(UAContext *ua, const char *automsg, const char *msg, + alist *selected) +{ + int i, item; + char pmsg[MAXSTRING]; + BSOCK *user = ua->UA_sock; + sellist sl; + + /* First item is the prompt string, not the items */ + if (ua->num_prompts == 1) { + ua->error_msg(_("Selection list for \"%s\" is empty!\n"), automsg); + item = -1; /* list is empty ! */ + goto done; + } + if (ua->num_prompts == 2) { + item = 1; + selected->append(bstrdup(ua->prompt[1])); + ua->send_msg(_("Automatically selected %s: %s\n"), automsg, ua->prompt[1]); + goto done; + } + /* If running non-interactive, bail out */ + if (ua->batch) { + /* First print the choices he wanted to make */ + ua->send_msg(ua->prompt[0]); + for (i=1; i < ua->num_prompts; i++) { + ua->send_msg("%6d: %s\n", i, ua->prompt[i]); + } + /* Now print error message */ + ua->send_msg(_("Your request has multiple choices for \"%s\". Selection is not possible in batch mode.\n"), automsg); + item = -1; + goto done; + } + if (ua->api) user->signal(BNET_START_SELECT); + ua->send_msg(ua->prompt[0]); + for (i=1; i < ua->num_prompts; i++) { + if (ua->api) { + ua->send_msg("%s", ua->prompt[i]); + } else { + ua->send_msg("%6d: %s\n", i, ua->prompt[i]); + } + } + if (ua->api) user->signal(BNET_END_SELECT); + + sprintf(pmsg, "%s (1-%d): ", msg, ua->num_prompts-1); + + for ( ;; ) { + /* Either a . or an @ will get you out of the loop */ + if (ua->api) user->signal(BNET_SELECT_INPUT); + + if (!get_selection_list(ua, sl, pmsg, false)) { + item = -1; + break; + } + + if (sl.is_all()) { + for (i=1; i < ua->num_prompts; i++) { + selected->append(bstrdup(ua->prompt[i])); + } + } else { + while ( (item = sl.next()) > 0) { + if (item < 1 || item >= ua->num_prompts) { + ua->warning_msg(_("Please enter a number between 1 and %d\n"), ua->num_prompts-1); + continue; + } + selected->append(bstrdup(ua->prompt[item])); + } + } + item = selected->size(); + break; + } + +done: + for (i=0; i < ua->num_prompts; i++) { + free(ua->prompt[i]); + if (ua->unique[i]) free(ua->unique[i]); + } + ua->num_prompts = 0; + return item; +} + /* * We scan what the user has entered looking for @@ -897,7 +997,7 @@ done: * If use_default is set, we assume that any keyword without a value * is the name of the Storage resource wanted. */ -STORE *get_storage_resource(UAContext *ua, bool use_default) +STORE *get_storage_resource(UAContext *ua, bool use_default, bool unique) { char *store_name = NULL; STORE *store = NULL; @@ -963,14 +1063,15 @@ STORE *get_storage_resource(UAContext *ua, bool use_default) ua->error_msg(_("Expecting ujobid=xxx, got: %s.\n"), ua->argk[i]); return NULL; } - if (!(jcr=get_jcr_by_full_name(ua->argv[i]))) { - ua->error_msg(_("Job \"%s\" is not running.\n"), ua->argv[i]); - return NULL; + if ((jcr=get_jcr_by_full_name(ua->argv[i]))) { + store = jcr->wstore; + free_jcr(jcr); + /* The job might not be running, so we try to see other keywords */ + if (store) { + break; + } } - store = jcr->wstore; - free_jcr(jcr); - break; - } + } } } if (store && !acl_access_ok(ua, Storage_ACL, store->name())) { @@ -988,7 +1089,7 @@ STORE *get_storage_resource(UAContext *ua, bool use_default) } /* No keywords found, so present a selection list */ if (!store) { - store = select_storage_resource(ua); + store = select_storage_resource(ua, unique); } return store; } @@ -1072,6 +1173,7 @@ int get_media_type(UAContext *ua, char *MediaType, int max_media) return (do_prompt(ua, _("Media Type"), _("Select the Media Type"), MediaType, max_media) < 0) ? 0 : 1; } + bool get_level_from_name(JCR *jcr, const char *level_name) { /* Look up level name and pull code */ @@ -1085,3 +1187,187 @@ bool get_level_from_name(JCR *jcr, const char *level_name) } return found; } + +static int count_running_jobs(UAContext *ua) +{ + int tjobs = 0; /* total # number jobs */ + int njobs = 0; + JCR *jcr; + /* Count Jobs running */ + foreach_jcr(jcr) { + if (jcr->JobId == 0) { /* this is us */ + continue; + } + tjobs++; /* count of all jobs */ + if (!acl_access_ok(ua, Job_ACL, jcr->job->name())) { + continue; /* skip not authorized */ + } + njobs++; /* count of authorized jobs */ + } + endeach_jcr(jcr); + + if (njobs == 0) { /* no authorized */ + if (tjobs == 0) { + ua->send_msg(_("No Jobs running.\n")); + } else { + ua->send_msg(_("None of your jobs are running.\n")); + } + } + return njobs; +} + + +/* Get a list of running jobs + * "reason" is used in user messages + * can be: cancel, limit, ... + * Returns: -1 on error + * nb of JCR on success (should be free_jcr() after) + */ +int select_running_jobs(UAContext *ua, alist *jcrs, const char *reason) +{ + int i; + JCR *jcr = NULL; + int njobs = 0; + char JobName[MAX_NAME_LENGTH]; + char temp[256]; + alist *selected = NULL; + + for (i=1; iargc; i++) { + if (strcasecmp(ua->argk[i], NT_("jobid")) == 0) { + sellist sl; + int32_t JobId; + + if (sl.set_string(ua->argv[i], true) < 0 && sl.get_errmsg()) { + ua->send_msg("%s", sl.get_errmsg()); + break; + } + + foreach_sellist(JobId, &sl) { + jcr = get_jcr_by_id(JobId); + if (jcr && jcr->job && acl_access_ok(ua, Job_ACL, jcr->job->name())) { + jcrs->append(jcr); + + } else if (jcr) { + ua->error_msg(_("Unauthorized command from this console " + "for JobId=%d.\n"), JobId); + free_jcr(jcr); + + } else { + if (debug_level > 5) { + ua->warning_msg(_("Warning Job JobId=%d is not running. " + "Continuing anyway...\n"), JobId); + } + } + } + break; + + /* TODO: might want to implement filters (client, status, etc...) */ + } else if (strcasecmp(ua->argk[i], NT_("all")) == 0) { + foreach_jcr(jcr) { + if (jcr->JobId == 0) { /* this is us */ + continue; + } + if (!acl_access_ok(ua, Job_ACL, jcr->job->name())) { + continue; /* skip not authorized */ + } + jcr->inc_use_count(); + jcrs->append(jcr); + } + endeach_jcr(jcr); + + if (jcrs->size() > 0 && find_arg(ua, NT_("yes")) < 0) { + char nbuf[1000]; + bsnprintf(nbuf, sizeof(nbuf), _("Confirm %s of %d Job%s (yes/no): "), + reason, jcrs->size(), jcrs->size()>1?"s":""); + if (!get_yesno(ua, nbuf) || ua->pint32_val == 0) { + return -1; + } + } + break; + + } else if (strcasecmp(ua->argk[i], NT_("job")) == 0) { + if (!ua->argv[i]) { + break; + } + if (!(jcr=get_jcr_by_partial_name(ua->argv[i]))) { + ua->warning_msg(_("Warning Job %s is not running. Continuing anyway ...\n"), ua->argv[i]); + jcr = new_jcr(sizeof(JCR), dird_free_jcr); + bstrncpy(jcr->Job, ua->argv[i], sizeof(jcr->Job)); + } + if (jcr && jcr->job && acl_access_ok(ua, Job_ACL, jcr->job->name())) { + jcrs->append(jcr); + } + break; + + } else if (strcasecmp(ua->argk[i], NT_("ujobid")) == 0) { + if (!ua->argv[i]) { + break; + } + if (!(jcr=get_jcr_by_full_name(ua->argv[i]))) { + ua->warning_msg(_("Warning Job %s is not running. Continuing anyway ...\n"), ua->argv[i]); + jcr = new_jcr(sizeof(JCR), dird_free_jcr); + bstrncpy(jcr->Job, ua->argv[i], sizeof(jcr->Job)); + } + if (jcr && jcr->job && acl_access_ok(ua, Job_ACL, jcr->job->name())) { + jcrs->append(jcr); + } + break; + } + } + + if (jcrs->size() == 0) { + /* + * If we still do not have a jcr, + * throw up a list and ask the user to select one. + */ + char *item; + char buf[1000]; + njobs = count_running_jobs(ua); + if (njobs == 0) { + goto bail_out; + } + start_prompt(ua, _("Select Job(s):\n")); + foreach_jcr(jcr) { + char ed1[50]; + if (jcr->JobId == 0) { /* this is us */ + continue; + } + bsnprintf(buf, sizeof(buf), _("JobId=%s Job=%s"), edit_int64(jcr->JobId, ed1), jcr->Job); + add_prompt(ua, buf); + } + endeach_jcr(jcr); + bsnprintf(temp, sizeof(temp), _("Choose Job list to %s"), _(reason)); + selected = New(alist(5, owned_by_alist)); + if (do_alist_prompt(ua, _("Job"), temp, selected) < 0) { + goto bail_out; + } + /* Possibly ask for confirmation */ + if (selected->size() > 0 && find_arg(ua, NT_("yes")) < 0) { + char nbuf[1000]; + foreach_alist(item, selected) { + ua->send_msg("%s\n", item); + } + bsnprintf(nbuf, sizeof(nbuf), _("Confirm %s of %d Job%s (yes/no): "), + reason, selected->size(), selected->size()>1?"s":""); + if (!get_yesno(ua, nbuf) || ua->pint32_val == 0) { + goto bail_out; + } + } + + foreach_alist(item, selected) { + if (sscanf(item, "JobId=%d Job=%127s", &njobs, JobName) != 2) { + ua->warning_msg(_("Job \"%s\" not found.\n"), item); + continue; + } + jcr = get_jcr_by_full_name(JobName); + if (jcr) { + jcrs->append(jcr); + } else { + ua->warning_msg(_("Job \"%s\" not found.\n"), JobName); + } + } + } +bail_out: + if (selected) delete selected; + return jcrs->size(); +} diff --git a/bacula/src/dird/ua_server.c b/bacula/src/dird/ua_server.c index b602e0a1e0..b099fff98d 100644 --- a/bacula/src/dird/ua_server.c +++ b/bacula/src/dird/ua_server.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2007 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * @@ -31,7 +19,6 @@ * * Kern Sibbald, September MM * - * Version $Id$ */ #include "bacula.h" @@ -163,11 +150,14 @@ static void *handle_UA_client_request(void *arg) } if (!ua->api) user->signal(BNET_EOD); /* send end of command */ } - } else if (is_bnet_stop(user)) { + } else if (user->is_stop()) { ua->quit = true; } else { /* signal */ user->signal(BNET_POLL); } + + /* At the end of each command, revert to the main shared SQL link */ + ua->db = ua->shared_db; } getout: @@ -192,7 +182,7 @@ UAContext *new_ua_context(JCR *jcr) ua = (UAContext *)malloc(sizeof(UAContext)); memset(ua, 0, sizeof(UAContext)); ua->jcr = jcr; - ua->db = jcr->db; + ua->shared_db = ua->db = jcr->db; ua->cmd = get_pool_memory(PM_FNAME); ua->args = get_pool_memory(PM_FNAME); ua->errmsg = get_pool_memory(PM_FNAME); @@ -215,10 +205,10 @@ void free_ua_context(UAContext *ua) if (ua->prompt) { free(ua->prompt); } - if (ua->UA_sock) { - bnet_close(ua->UA_sock); - ua->UA_sock = NULL; + if (ua->unique) { + free(ua->unique); } + free_bsock(ua->UA_sock); free(ua); } diff --git a/bacula/src/dird/ua_status.c b/bacula/src/dird/ua_status.c index c2a2053e75..506363c973 100644 --- a/bacula/src/dird/ua_status.c +++ b/bacula/src/dird/ua_status.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2001-2012 Free Software Foundation Europe e.V. + Copyright (C) 2001-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * @@ -38,8 +26,10 @@ #include "dird.h" extern void *start_heap; +extern utime_t last_reload_time; static void list_scheduled_jobs(UAContext *ua); +static void llist_scheduled_jobs(UAContext *ua); static void list_running_jobs(UAContext *ua); static void list_terminated_jobs(UAContext *ua); static void do_storage_status(UAContext *ua, STORE *store, char *cmd); @@ -76,7 +66,7 @@ bool dot_status_cmd(UAContext *ua, const char *cmd) ua->send_msg(OKqstatus, ua->argk[2]); foreach_jcr(njcr) { if (njcr->JobId != 0 && acl_access_ok(ua, Job_ACL, njcr->job->name())) { - ua->send_msg(DotStatusJob, edit_int64(njcr->JobId, ed1), + ua->send_msg(DotStatusJob, edit_int64(njcr->JobId, ed1), njcr->JobStatus, njcr->JobErrors); } } @@ -86,7 +76,7 @@ bool dot_status_cmd(UAContext *ua, const char *cmd) if ((last_jobs) && (last_jobs->size() > 0)) { job = (s_last_job*)last_jobs->last(); if (acl_access_ok(ua, Job_ACL, job->Job)) { - ua->send_msg(DotStatusJob, edit_int64(job->JobId, ed1), + ua->send_msg(DotStatusJob, edit_int64(job->JobId, ed1), job->JobStatus, job->Errors); } } @@ -109,10 +99,12 @@ bool dot_status_cmd(UAContext *ua, const char *cmd) do_client_status(ua, client, ua->argk[2]); } } else if (strcasecmp(ua->argk[1], "storage") == 0) { - store = get_storage_resource(ua, false /*no default*/); - if (store) { - do_storage_status(ua, store, ua->argk[2]); + store = get_storage_resource(ua, false /*no default*/, true/*unique*/); + if (!store) { + ua->send_msg("1900 Bad .status command, wrong argument.\n"); + return false; } + do_storage_status(ua, store, ua->argk[2]); } else { ua->send_msg("1900 Bad .status command, wrong argument.\n"); return false; @@ -142,7 +134,11 @@ int status_cmd(UAContext *ua, const char *cmd) Dmsg1(20, "status:%s:\n", cmd); for (i=1; iargc; i++) { - if (strcasecmp(ua->argk[i], NT_("all")) == 0) { + if (strcasecmp(ua->argk[i], NT_("schedule")) == 0 || + strcasecmp(ua->argk[i], NT_("scheduled")) == 0) { + llist_scheduled_jobs(ua); + return 1; + } else if (strcasecmp(ua->argk[i], NT_("all")) == 0) { do_all_status(ua); return 1; } else if (strcasecmp(ua->argk[i], NT_("dir")) == 0 || @@ -156,7 +152,7 @@ int status_cmd(UAContext *ua, const char *cmd) } return 1; } else { - store = get_storage_resource(ua, false/*no default*/); + store = get_storage_resource(ua, false/*no default*/, true/*unique*/); if (store) { if (find_arg(ua, NT_("slots")) > 0) { status_slots(ua, store); @@ -175,6 +171,7 @@ int status_cmd(UAContext *ua, const char *cmd) add_prompt(ua, NT_("Director")); add_prompt(ua, NT_("Storage")); add_prompt(ua, NT_("Client")); + add_prompt(ua, NT_("Scheduled")); add_prompt(ua, NT_("All")); Dmsg0(20, "do_prompt: select daemon\n"); if ((item=do_prompt(ua, "", _("Select daemon type for status"), prmt, sizeof(prmt))) < 0) { @@ -186,7 +183,7 @@ int status_cmd(UAContext *ua, const char *cmd) do_director_status(ua); break; case 1: - store = select_storage_resource(ua); + store = select_storage_resource(ua, true/*unique*/); if (store) { do_storage_status(ua, store, NULL); } @@ -198,6 +195,9 @@ int status_cmd(UAContext *ua, const char *cmd) } break; case 3: + llist_scheduled_jobs(ua); + break; + case 4: do_all_status(ua); break; default: @@ -305,7 +305,7 @@ void list_dir_status_header(UAContext *ua) edit_uint64_with_commas(sm_max_buffers, b5)); /* TODO: use this function once for all daemons */ - if (debug_level > 0 && bplugin_list->size() > 0) { + if (bplugin_list->size() > 0) { int len; Plugin *plugin; POOL_MEM msg(PM_FNAME); @@ -348,6 +348,21 @@ static void do_storage_status(UAContext *ua, STORE *store, char *cmd) BSOCK *sd; USTORE lstore; + + if (!acl_access_ok(ua, Storage_ACL, store->name())) { + ua->error_msg(_("No authorization for Storage \"%s\"\n"), store->name()); + return; + } + /* + * The Storage daemon is problematic because it shows information + * related to multiple Jobs, so if there is a Client or Job + * ACL restriction, we forbid all access to the Storage. + */ + if (have_restricted_acl(ua, Client_ACL) || + have_restricted_acl(ua, Job_ACL)) { + ua->error_msg(_("Restricted Client or Job does not permit access to Storage daemons\n")); + return; + } lstore.store = store; pm_strcpy(lstore.store_source, _("unknown source")); set_wstorage(ua->jcr, &lstore); @@ -357,25 +372,28 @@ static void do_storage_status(UAContext *ua, STORE *store, char *cmd) if (!connect_to_storage_daemon(ua->jcr, 1, 15, 0)) { ua->send_msg(_("\nFailed to connect to Storage daemon %s.\n====\n"), store->name()); - if (ua->jcr->store_bsock) { - bnet_close(ua->jcr->store_bsock); - ua->jcr->store_bsock = NULL; - } + free_bsock(ua->jcr->store_bsock); return; } - Dmsg0(20, _("Connected to storage daemon\n")); + Dmsg0(20, "Connected to storage daemon\n"); sd = ua->jcr->store_bsock; if (cmd) { - sd->fsend(".status %s", cmd); + POOL_MEM devname; + int i = find_arg_with_value(ua, "device"); + if (i>0) { + Mmsg(devname, "device=%s", ua->argv[i]); + bash_spaces(devname.c_str()); + } + sd->fsend(".status %s api=%d api_opts=%s %s", + cmd, ua->api, ua->api_opts, devname.c_str()); } else { sd->fsend("status"); } while (sd->recv() >= 0) { ua->send_msg("%s", sd->msg); } - sd->signal( BNET_TERMINATE); - sd->close(); - ua->jcr->store_bsock = NULL; + sd->signal(BNET_TERMINATE); + free_bsock(ua->jcr->store_bsock); return; } @@ -383,8 +401,11 @@ static void do_client_status(UAContext *ua, CLIENT *client, char *cmd) { BSOCK *fd; + if (!acl_access_ok(ua, Client_ACL, client->name())) { + ua->error_msg(_("No authorization for Client \"%s\"\n"), client->name()); + return; + } /* Connect to File daemon */ - ua->jcr->client = client; /* Release any old dummy key */ if (ua->jcr->sd_auth_key) { @@ -399,16 +420,13 @@ static void do_client_status(UAContext *ua, CLIENT *client, char *cmd) if (!connect_to_file_daemon(ua->jcr, 1, 15, 0)) { ua->send_msg(_("Failed to connect to Client %s.\n====\n"), client->name()); - if (ua->jcr->file_bsock) { - bnet_close(ua->jcr->file_bsock); - ua->jcr->file_bsock = NULL; - } + free_bsock(ua->jcr->file_bsock); return; } Dmsg0(20, _("Connected to file daemon\n")); fd = ua->jcr->file_bsock; if (cmd) { - fd->fsend(".status %s", cmd); + fd->fsend(".status %s api=%d api_opts=%s", cmd, ua->api, ua->api_opts); } else { fd->fsend("status"); } @@ -416,8 +434,7 @@ static void do_client_status(UAContext *ua, CLIENT *client, char *cmd) ua->send_msg("%s", fd->msg); } fd->signal(BNET_TERMINATE); - fd->close(); - ua->jcr->file_bsock = NULL; + free_bsock(ua->jcr->file_bsock); return; } @@ -426,11 +443,21 @@ static void prt_runhdr(UAContext *ua) { if (!ua->api) { ua->send_msg(_("\nScheduled Jobs:\n")); - ua->send_msg(_("Level Type Pri Scheduled Name Volume\n")); + ua->send_msg(_("Level Type Pri Scheduled Job Name Volume\n")); ua->send_msg(_("===================================================================================\n")); } } +static void prt_lrunhdr(UAContext *ua) +{ + if (!ua->api) { + ua->send_msg(_("\nScheduled Jobs:\n")); + ua->send_msg(_("Level Type Pri Scheduled Job Name Schedule\n")); + ua->send_msg(_("=====================================================================================\n")); + } +} + + /* Scheduling packet */ struct sched_pkt { dlink link; /* keep this as first item!!! */ @@ -498,6 +525,182 @@ static void prt_runtime(UAContext *ua, sched_pkt *sp) jcr->setJobType(orig_jobtype); } +/* + * Detailed listing of all scheduler jobs + */ +static void llist_scheduled_jobs(UAContext *ua) +{ + utime_t runtime; + RUN *run; + JOB *job; + int level, num_jobs = 0; + int priority; + bool hdr_printed = false; + char sched_name[MAX_NAME_LENGTH]; + char job_name[MAX_NAME_LENGTH]; + SCHED *sched; + int days, i, limit; + time_t now = time(NULL); + time_t next; + const char *level_ptr; + + Dmsg0(200, "enter list_sched_jobs()\n"); + + i = find_arg_with_value(ua, NT_("days")); + if (i >= 0) { + days = atoi(ua->argv[i]); + if (((days < 0) || (days > 500)) && !ua->api) { + ua->send_msg(_("Ignoring invalid value for days. Max is 500.\n")); + days = 10; + } + } else { + days = 10; + } + + i = find_arg_with_value(ua, NT_("limit")); + if (i >= 0) { + limit = atoi(ua->argv[i]); + if (((limit < 0) || (limit > 2000)) && !ua->api) { + ua->send_msg(_("Ignoring invalid value for limit. Max is 2000.\n")); + limit = 100; + } + } else { + limit = 100; + } + + i = find_arg_with_value(ua, NT_("time")); + if (i >= 0) { + now = str_to_utime(ua->argv[i]); + if (now == 0) { + ua->send_msg(_("Ignoring invalid time.\n")); + now = time(NULL); + } + } + + i = find_arg_with_value(ua, NT_("schedule")); + if (i >= 0) { + bstrncpy(sched_name, ua->argv[i], sizeof(sched_name)); + } else { + sched_name[0] = 0; + } + + i = find_arg_with_value(ua, NT_("job")); + if (i >= 0) { + bstrncpy(job_name, ua->argv[i], sizeof(job_name)); + } else { + job_name[0] = 0; + } + + /* Loop through all jobs */ + LockRes(); + foreach_res(job, R_JOB) { + sched = job->schedule; + if (sched == NULL || !job->enabled) { /* scheduled? or enabled? */ + continue; /* no, skip this job */ + } + if (job_name[0] && bstrcmp(job_name, job->name()) != 0) { + continue; + } + for (run=sched->run; run; run=run->next) { + next = now; + for (i=0; imonth), + bit_is_set(mday, run->mday), + bit_is_set(wday, run->wday), + bit_is_set(wom, run->wom), + bit_is_set(woy, run->woy), + bit_is_set(31, run->mday)); +#endif + + ok = (bit_is_set(mday, run->mday) && + bit_is_set(wday, run->wday) && + bit_is_set(month, run->month) && + bit_is_set(wom, run->wom) && + bit_is_set(woy, run->woy)) || + (bit_is_set(month, run->month) && + bit_is_set(31, run->mday) && mday == ldom); + if (!ok) { + next += 24 * 60 * 60; /* Add one day */ + continue; + } + for (int j=0; j < 24; j++) { + if (bit_is_set(j, run->hour)) { + tm.tm_hour = j; + tm.tm_min = run->minute; + tm.tm_sec = 0; + runtime = mktime(&tm); + bstrftime_dn(dt, sizeof(dt), runtime); + break; + } + } + + level = job->JobLevel; + if (run->level) { + level = run->level; + } + switch (job->JobType) { + case JT_ADMIN: + case JT_RESTORE: + level_ptr = " "; + break; + default: + level_ptr = level_to_str(level); + break; + } + priority = job->Priority; + if (run->Priority) { + priority = run->Priority; + } + if (!hdr_printed) { + prt_lrunhdr(ua); + hdr_printed = true; + } + if (ua->api) { + ua->send_msg(_("%-14s\t%-8s\t%3d\t%-18s\t%-18s\t%s\n"), + level_ptr, job_type_to_str(job->JobType), priority, dt, + job->name(), sched->name()); + } else { + ua->send_msg(_("%-14s %-8s %3d %-18s %-18s %s\n"), + level_ptr, job_type_to_str(job->JobType), priority, dt, + job->name(), sched->name()); + } + next += 24 * 60 * 60; /* Add one day */ + num_jobs++; + if (num_jobs >= limit) { + goto get_out; + } + } + } /* end loop over run pkts */ + } /* end for loop over resources */ +get_out: + UnlockRes(); + if (num_jobs == 0 && !ua->api) { + ua->send_msg(_("No Scheduled Jobs.\n")); + } + if (!ua->api) ua->send_msg("====\n"); + Dmsg0(200, "Leave ;list_sched_jobs_runs()\n"); +} + + /* * Sort items by runtime, priority */ @@ -530,6 +733,7 @@ static void list_scheduled_jobs(UAContext *ua) int level, num_jobs = 0; int priority; bool hdr_printed = false; + char sched_name[MAX_NAME_LENGTH]; dlist sched; sched_pkt *sp; int days, i; @@ -545,6 +749,12 @@ static void list_scheduled_jobs(UAContext *ua) days = 1; } } + i = find_arg_with_value(ua, NT_("schedule")); + if (i >= 0) { + bstrncpy(sched_name, ua->argv[i], sizeof(sched_name)); + } else { + sched_name[0] = 0; + } /* Loop through all jobs */ LockRes(); @@ -552,6 +762,10 @@ static void list_scheduled_jobs(UAContext *ua) if (!acl_access_ok(ua, Job_ACL, job->name()) || !job->enabled) { continue; } + if (sched_name[0] && job->schedule && + strcasecmp(job->schedule->name(), sched_name) != 0) { + continue; + } for (run=NULL; (run = find_next_run(run, job, runtime, days)); ) { USTORE store; level = job->JobLevel; @@ -612,20 +826,22 @@ static void list_running_jobs(UAContext *ua) ua->send_msg(_("Console connected at %s\n"), dt); } continue; - } + } njobs++; } endeach_jcr(jcr); if (njobs == 0) { /* Note the following message is used in regress -- don't change */ - if (!ua->api) ua->send_msg(_("No Jobs running.\n====\n")); + if (!ua->api) { + ua->send_msg(_("No Jobs running.\n====\n")); + } Dmsg0(200, "leave list_run_jobs()\n"); return; } njobs = 0; if (!ua->api) { - ua->send_msg(_(" JobId Level Name Status\n")); + ua->send_msg(_(" JobId Type Level Files Bytes Name Status\n")); ua->send_msg(_("======================================================================\n")); } foreach_jcr(jcr) { @@ -699,11 +915,18 @@ static void list_running_jobs(UAContext *ua) msg = _("is waiting on max total jobs"); break; case JS_WaitStartTime: - msg = _("is waiting for its start time"); + emsg = (char *) get_pool_memory(PM_FNAME); + Mmsg(emsg, _("is waiting for its start time (%s)"), + bstrftime_ny(dt, sizeof(dt), jcr->sched_time)); + pool_mem = true; + msg = emsg; break; case JS_WaitPriority: msg = _("is waiting for higher priority jobs to finish"); break; + case JS_WaitDevice: + msg = _("is waiting for a Shared Storage device"); + break; case JS_DataCommitting: msg = _("SD committing Data"); break; @@ -779,18 +1002,21 @@ static void list_running_jobs(UAContext *ua) break; } - if (ua->api) { + if (ua->api == 1) { bash_spaces(jcr->comment); ua->send_msg(_("%6d\t%-6s\t%-20s\t%s\t%s\n"), jcr->JobId, level, jcr->Job, msg, jcr->comment); unbash_spaces(jcr->comment); } else { - ua->send_msg(_("%6d %-6s %-20s %s\n"), - jcr->JobId, level, jcr->Job, msg); - /* Display comments if any */ - if (*jcr->comment) { - ua->send_msg(_(" %-30s\n"), jcr->comment); - } + char b1[50], b2[50], b3[50]; + level[4] = 0; + bstrncpy(b1, job_type_to_str(jcr->getJobType()), sizeof(b1)); + b1[4] = 0; + ua->send_msg(_("%6d %-4s %-3s %10s %10s %-17s %s\n"), + jcr->JobId, b1, level, + edit_uint64_with_commas(jcr->JobFiles, b2), + edit_uint64_with_suffix(jcr->JobBytes, b3), + jcr->job->name(), msg); } if (pool_mem) { @@ -799,7 +1025,9 @@ static void list_running_jobs(UAContext *ua) } } endeach_jcr(jcr); - if (!ua->api) ua->send_msg("====\n"); + if (!ua->api) { + ua->send_msg("====\n"); + } Dmsg0(200, "leave list_run_jobs()\n"); } @@ -871,7 +1099,7 @@ static void list_terminated_jobs(UAContext *ua) termstat = _("Other"); break; } - if (ua->api) { + if (ua->api == 1) { ua->send_msg(_("%6d\t%-6s\t%8s\t%10s\t%-7s\t%-8s\t%s\n"), je->JobId, level, @@ -889,6 +1117,8 @@ static void list_terminated_jobs(UAContext *ua) dt, JobName); } } - if (!ua->api) ua->send_msg(_("\n")); + if (!ua->api) { + ua->send_msg(_("\n")); + } unlock_last_jobs_list(); } diff --git a/bacula/src/dird/ua_tree.c b/bacula/src/dird/ua_tree.c index 0f97b0a4d4..3cf5c15cdb 100644 --- a/bacula/src/dird/ua_tree.c +++ b/bacula/src/dird/ua_tree.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2002-2011 Free Software Foundation Europe e.V. + Copyright (C) 2002-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * @@ -171,7 +159,6 @@ bool user_select_files_from_tree(TREE_CTX *tree) return stat; } - /* * This callback routine is responsible for inserting the * items it gets into the directory tree. For each JobId selected @@ -193,6 +180,8 @@ int insert_tree_handler(void *ctx, int num_fields, char **row) int FileIndex; int32_t delta_seq; JobId_t JobId; + HL_ENTRY *entry = NULL; + int32_t LinkFI; Dmsg4(150, "Path=%s%s FI=%s JobId=%s\n", row[0], row[1], row[2], row[3]); @@ -205,13 +194,14 @@ int insert_tree_handler(void *ctx, int num_fields, char **row) } else { type = TN_FILE; } - hard_link = (decode_LinkFI(row[4], &statp, sizeof(statp)) != 0); + decode_stat(row[4], &statp, sizeof(statp), &LinkFI); + hard_link = (LinkFI != 0); node = insert_tree_node(row[0], row[1], type, tree->root, NULL); JobId = str_to_int64(row[3]); FileIndex = str_to_int64(row[2]); delta_seq = str_to_int64(row[5]); - Dmsg5(150, "node=0x%p JobId=%s FileIndex=%s Delta=%s node.delta=%d\n", - node, row[3], row[2], row[5], node->delta_seq); + Dmsg6(150, "node=0x%p JobId=%s FileIndex=%s Delta=%s node.delta=%d LinkFI=%d\n", + node, row[3], row[2], row[5], node->delta_seq, LinkFI); /* TODO: check with hardlinks */ if (delta_seq > 0) { @@ -227,7 +217,7 @@ int insert_tree_handler(void *ctx, int num_fields, char **row) tree->ua->warning_msg(_("Something is wrong with the Delta sequence of %s, " "skiping new parts. Current sequence is %d\n"), row[1], node->delta_seq); - + Dmsg3(0, "Something is wrong with Delta, skip it " "fname=%s d1=%d d2=%d\n", row[1], node->delta_seq, delta_seq); } @@ -265,6 +255,27 @@ int insert_tree_handler(void *ctx, int num_fields, char **row) node->extract_dir = true; /* if dir, extract it */ } } + /* insert file having hardlinks into hardlink hashtable */ + if (statp.st_nlink > 1 && type != TN_DIR && type != TN_DIR_NLS) { + if (!LinkFI) { + /* first occurrence - file hardlinked to */ + entry = (HL_ENTRY *)tree->root->hardlinks.hash_malloc(sizeof(HL_ENTRY)); + entry->key = (((uint64_t) JobId) << 32) + FileIndex; + entry->node = node; + tree->root->hardlinks.insert(entry->key, entry); + } else if (tree->hardlinks_in_mem) { + /* hardlink to known file index: lookup original file */ + uint64_t file_key = (((uint64_t) JobId) << 32) + LinkFI; + HL_ENTRY *first_hl = (HL_ENTRY *) tree->root->hardlinks.lookup(file_key); + if (first_hl && first_hl->node) { + /* then add hardlink entry to linked node*/ + entry = (HL_ENTRY *)tree->root->hardlinks.hash_malloc(sizeof(HL_ENTRY)); + entry->key = (((uint64_t) JobId) << 32) + FileIndex; + entry->node = first_hl->node; + tree->root->hardlinks.insert(entry->key, entry); + } + } + } } if (node->inserted) { tree->FileCount++; @@ -277,7 +288,6 @@ int insert_tree_handler(void *ctx, int num_fields, char **row) return 0; } - /* * Set extract to value passed. We recursively walk * down the tree setting all children if the @@ -286,8 +296,6 @@ int insert_tree_handler(void *ctx, int num_fields, char **row) static int set_extract(UAContext *ua, TREE_NODE *node, TREE_CTX *tree, bool extract) { TREE_NODE *n; - FILE_DBR fdbr; - struct stat statp; int count = 0; node->extract = extract; @@ -314,33 +322,41 @@ static int set_extract(UAContext *ua, TREE_NODE *node, TREE_CTX *tree, bool extr } } } else if (extract) { - char cwd[2000]; - /* - * Ordinary file, we get the full path, look up the - * attributes, decode them, and if we are hard linked to - * a file that was saved, we must load that file too. - */ - tree_getpath(node, cwd, sizeof(cwd)); - fdbr.FileId = 0; - fdbr.JobId = node->JobId; - if (node->hard_link && db_get_file_attributes_record(ua->jcr, ua->db, cwd, NULL, &fdbr)) { - int32_t LinkFI; - decode_stat(fdbr.LStat, &statp, sizeof(statp), &LinkFI); /* decode stat pkt */ + uint64_t key = 0; + if (tree->hardlinks_in_mem) { + if (node->hard_link) { + key = (((uint64_t) node->JobId) << 32) + node->FileIndex; /* every hardlink is in hashtable, and it points to linked file */ + } + } else { + /* Get the hard link if it exists */ + FILE_DBR fdbr; + struct stat statp; + char cwd[2000]; /* - * If we point to a hard linked file, traverse the tree to - * find that file, and mark it to be restored as well. It - * must have the Link we just obtained and the same JobId. + * Ordinary file, we get the full path, look up the + * attributes, decode them, and if we are hard linked to + * a file that was saved, we must load that file too. */ - if (LinkFI) { - for (n=first_tree_node(tree->root); n; n=next_tree_node(n)) { - if (n->FileIndex == LinkFI && n->JobId == node->JobId) { - n->extract = true; - if (n->type == TN_DIR || n->type == TN_DIR_NLS) { - n->extract_dir = true; - } - break; - } - } + tree_getpath(node, cwd, sizeof(cwd)); + fdbr.FileId = 0; + fdbr.JobId = node->JobId; + if (node->hard_link && db_get_file_attributes_record(ua->jcr, ua->db, cwd, NULL, &fdbr)) { + int32_t LinkFI; + decode_stat(fdbr.LStat, &statp, sizeof(statp), &LinkFI); /* decode stat pkt */ + key = (((uint64_t) node->JobId) << 32) + LinkFI; /* lookup by linked file's fileindex */ + } + } + /* If file hard linked and we have a key */ + if (node->hard_link && key != 0) { + /* + * If we point to a hard linked file, find that file in + * hardlinks hashmap, and mark it to be restored as well. + */ + HL_ENTRY *entry = (HL_ENTRY *)tree->root->hardlinks.lookup(key); + if (entry && entry->node) { + n = entry->node; + n->extract = true; + n->extract_dir = (n->type == TN_DIR || n->type == TN_DIR_NLS); } } } @@ -488,7 +504,7 @@ static int dot_lsdircmd(UAContext *ua, TREE_CTX *tree) } } } - + return 1; } @@ -516,7 +532,7 @@ static int dot_lscmd(UAContext *ua, TREE_CTX *tree) ua->send_msg("%s%s\n", node->fname, tree_node_has_child(node)?"/":""); } } - + return 1; } @@ -608,8 +624,8 @@ static int lsmarkcmd(UAContext *ua, TREE_CTX *tree) /* * This is actually the long form used for "dir" */ -static void ls_output(guid_list *guid, char *buf, const char *fname, const char *tag, - struct stat *statp, bool dot_cmd) +static void ls_output(guid_list *guid, char *buf, const char *fname, const char *tag, + struct stat *statp, bool dot_cmd) { char *p; const char *f; @@ -623,7 +639,7 @@ static void ls_output(guid_list *guid, char *buf, const char *fname, const char *p++ = ','; n = sprintf(p, "%d,", (uint32_t)statp->st_nlink); p += n; - n = sprintf(p, "%s,%s,", + n = sprintf(p, "%s,%s,", guid->uid_to_name(statp->st_uid, en1, sizeof(en1)), guid->gid_to_name(statp->st_gid, en2, sizeof(en2))); p += n; @@ -636,7 +652,7 @@ static void ls_output(guid_list *guid, char *buf, const char *fname, const char } else { n = sprintf(p, " %2d ", (uint32_t)statp->st_nlink); p += n; - n = sprintf(p, "%-8.8s %-8.8s", + n = sprintf(p, "%-8.8s %-8.8s", guid->uid_to_name(statp->st_uid, en1, sizeof(en1)), guid->gid_to_name(statp->st_gid, en2, sizeof(en2))); p += n; diff --git a/bacula/src/dird/ua_update.c b/bacula/src/dird/ua_update.c index 7433147cbb..65fe68e1cd 100644 --- a/bacula/src/dird/ua_update.c +++ b/bacula/src/dird/ua_update.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2012 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * @@ -285,7 +273,7 @@ static void update_volslot(UAContext *ua, char *val, MEDIA_DBR *mr) memset(&pr, 0, sizeof(POOL_DBR)); pr.PoolId = mr->PoolId; - if (!db_get_pool_record(ua->jcr, ua->db, &pr)) { + if (!db_get_pool_numvols(ua->jcr, ua->db, &pr)) { ua->error_msg("%s", db_strerror(ua->db)); return; } @@ -385,7 +373,7 @@ static void update_vol_from_pool(UAContext *ua, MEDIA_DBR *mr) memset(&pr, 0, sizeof(pr)); pr.PoolId = mr->PoolId; - if (!db_get_pool_record(ua->jcr, ua->db, &pr) || + if (!db_get_pool_numvols(ua->jcr, ua->db, &pr) || !acl_access_ok(ua, Pool_ACL, pr.Name)) { return; } @@ -402,7 +390,7 @@ static void update_vol_from_pool(UAContext *ua, MEDIA_DBR *mr) * Refresh the Volume information from the Pool record * for all Volumes */ -static void update_all_vols_from_pool(UAContext *ua, const char *pool_name) +static void update_all_vols_from_pool(UAContext *ua, const char *pool_name) { POOL_DBR pr; MEDIA_DBR mr; @@ -431,7 +419,7 @@ static void update_all_vols(UAContext *ua) MEDIA_DBR mr; memset(&pr, 0, sizeof(pr)); - + if (!db_get_pool_ids(ua->jcr, ua->db, &num_pools, &ids)) { ua->error_msg(_("Error obtaining pool ids. ERR=%s\n"), db_strerror(ua->db)); return; @@ -439,7 +427,7 @@ static void update_all_vols(UAContext *ua) for (i=0; ijcr, ua->db, &pr)) { /* ***FIXME*** use acl? */ + if (!db_get_pool_numvols(ua->jcr, ua->db, &pr)) { /* ***FIXME*** use acl? */ ua->warning_msg(_("Updating all pools, but skipped PoolId=%d. ERR=%s\n"), db_strerror(ua->db)); continue; } @@ -481,13 +469,13 @@ static void update_vol_actiononpurge(UAContext *ua, char *val, MEDIA_DBR *mr) } else { mr->ActionOnPurge = 0; } - + set_storageid_in_mr(NULL, mr); if (!db_update_media_record(ua->jcr, ua->db, mr)) { ua->error_msg(_("Error updating media record ActionOnPurge: ERR=%s"), db_strerror(ua->db)); } else { - ua->info_msg(_("New ActionOnPurge is: %s\n"), + ua->info_msg(_("New ActionOnPurge is: %s\n"), action_on_purge_to_string(mr->ActionOnPurge, ret)); } } @@ -569,7 +557,7 @@ static int update_volume(UAContext *ua) case 9: memset(&pr, 0, sizeof(POOL_DBR)); pr.PoolId = mr.PoolId; - if (!db_get_pool_record(ua->jcr, ua->db, &pr)) { + if (!db_get_pool_numvols(ua->jcr, ua->db, &pr)) { ua->error_msg("%s", db_strerror(ua->db)); break; } @@ -621,7 +609,7 @@ static int update_volume(UAContext *ua) add_prompt(ua, _("RecyclePool")), /* 15 */ add_prompt(ua, _("Action On Purge")), /* 16 */ add_prompt(ua, _("Done")); /* 17 */ - i = do_prompt(ua, "", _("Select parameter to modify"), NULL, 0); + i = do_prompt(ua, "", _("Select parameter to modify"), NULL, 0); /* For All Volumes, All Volumes from Pool, and Done, we don't need * a Volume record */ @@ -636,7 +624,7 @@ static int update_volume(UAContext *ua) /* Modify Volume Status */ ua->info_msg(_("Current Volume status is: %s\n"), mr.VolStatus); start_prompt(ua, _("Possible Values are:\n")); - add_prompt(ua, NT_("Append")); + add_prompt(ua, NT_("Append")); add_prompt(ua, NT_("Archive")); add_prompt(ua, NT_("Disabled")); add_prompt(ua, NT_("Full")); @@ -710,7 +698,7 @@ static int update_volume(UAContext *ua) } update_volslot(ua, ua->cmd, &mr); break; - + case 8: /* InChanger */ ua->info_msg(_("Current InChanger flag is: %d\n"), mr.InChanger); bsnprintf(buf, sizeof(buf), _("Set InChanger flag for Volume \"%s\": yes/no: "), @@ -761,7 +749,7 @@ static int update_volume(UAContext *ua) case 10: /* Volume's Pool */ memset(&pr, 0, sizeof(POOL_DBR)); pr.PoolId = mr.PoolId; - if (!db_get_pool_record(ua->jcr, ua->db, &pr)) { + if (!db_get_pool_numvols(ua->jcr, ua->db, &pr)) { ua->error_msg("%s", db_strerror(ua->db)); return 0; } @@ -791,22 +779,13 @@ static int update_volume(UAContext *ua) if (!get_cmd(ua, _("Enter new Enabled: "))) { return 0; } - if (strcasecmp(ua->cmd, "yes") == 0 || strcasecmp(ua->cmd, "true") == 0) { - mr.Enabled = 1; - } else if (strcasecmp(ua->cmd, "no") == 0 || strcasecmp(ua->cmd, "false") == 0) { - mr.Enabled = 0; - } else if (strcasecmp(ua->cmd, "archived") == 0) { - mr.Enabled = 2; - } else { - mr.Enabled = atoi(ua->cmd); - } update_volenabled(ua, ua->cmd, &mr); break; case 15: memset(&pr, 0, sizeof(POOL_DBR)); pr.PoolId = mr.RecyclePoolId; - if (db_get_pool_record(ua->jcr, ua->db, &pr)) { + if (db_get_pool_numvols(ua->jcr, ua->db, &pr)) { ua->info_msg(_("Current RecyclePool is: %s\n"), pr.Name); } else { ua->info_msg(_("No current RecyclePool\n")); @@ -819,7 +798,7 @@ static int update_volume(UAContext *ua) case 16: pm_strcpy(ret, ""); - ua->info_msg(_("Current ActionOnPurge is: %s\n"), + ua->info_msg(_("Current ActionOnPurge is: %s\n"), action_on_purge_to_string(mr.ActionOnPurge, ret)); if (!get_cmd(ua, _("Enter new ActionOnPurge (one of: Truncate, None): "))) { return 0; @@ -958,7 +937,7 @@ static bool update_job(UAContext *ua) return false; } delta_start = StartTime - jr.StartTime; - Dmsg3(200, "ST=%lld jr.ST=%lld delta=%lld\n", StartTime, + Dmsg3(200, "ST=%lld jr.ST=%lld delta=%lld\n", StartTime, (utime_t)jr.StartTime, delta_start); jr.StartTime = (time_t)StartTime; jr.SchedTime += (time_t)delta_start; @@ -970,12 +949,12 @@ static bool update_job(UAContext *ua) bstrutime(jr.cEndTime, sizeof(jr.cEndTime), jr.EndTime); } Mmsg(cmd, "UPDATE Job SET ClientId=%s,StartTime='%s',SchedTime='%s'," - "EndTime='%s',JobTDate=%s WHERE JobId=%s", - edit_int64(jr.ClientId, ed1), + "EndTime='%s',JobTDate=%s WHERE JobId=%s", + edit_int64(jr.ClientId, ed1), jr.cStartTime, jr.cSchedTime, jr.cEndTime, - edit_uint64(jr.JobTDate, ed1), + edit_uint64(jr.JobTDate, ed1), edit_int64(jr.JobId, ed2)); if (!db_sql_query(ua->db, cmd.c_str(), NULL, NULL)) { ua->error_msg("%s", db_strerror(ua->db)); diff --git a/bacula/src/dird/vbackup.c b/bacula/src/dird/vbackup.c index 2babd36d0d..8430c74dfd 100644 --- a/bacula/src/dird/vbackup.c +++ b/bacula/src/dird/vbackup.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2008-2012 Free Software Foundation Europe e.V. + Copyright (C) 2008-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * @@ -52,7 +40,7 @@ static const int dbglevel = 10; static bool create_bootstrap_file(JCR *jcr, char *jobids); void vbackup_cleanup(JCR *jcr, int TermCode); -/* +/* * Called here before the job is run to do the job * specific setup. */ @@ -79,7 +67,7 @@ bool do_vbackup_init(JCR *jcr) /* * Note, at this point, pool is the pool for this job. We * transfer it to rpool (read pool), and a bit later, - * pool will be changed to point to the write pool, + * pool will be changed to point to the write pool, * which comes from pool->NextPool. */ jcr->rpool = jcr->pool; /* save read pool */ @@ -97,28 +85,12 @@ bool do_vbackup_init(JCR *jcr) Jmsg(jcr, M_FATAL, 0, "%s", db_strerror(jcr->db)); } - - /* - * If the original backup pool has a NextPool, make sure a - * record exists in the database. Note, in this case, we - * will be backing up from pool to pool->NextPool. - */ - if (jcr->pool->NextPool) { - jcr->jr.PoolId = get_or_create_pool_record(jcr, jcr->pool->NextPool->name()); - if (jcr->jr.PoolId == 0) { - return false; - } - } - if (!set_migration_wstorage(jcr, jcr->pool)) { + if (!apply_wstorage_overrides(jcr, jcr->pool)) { return false; } - jcr->pool = jcr->pool->NextPool; - pm_strcpy(jcr->pool_source, _("Job Pool's NextPool resource")); Dmsg2(dbglevel, "Write pool=%s read rpool=%s\n", jcr->pool->name(), jcr->rpool->name()); -// create_clones(jcr); - return true; } @@ -131,13 +103,15 @@ bool do_vbackup_init(JCR *jcr) */ bool do_vbackup(JCR *jcr) { - char ed1[100]; - BSOCK *sd; - char *p; + char level_computed = L_FULL; + char ed1[100]; + BSOCK *sd; + char *p; + sellist sel; db_list_ctx jobids; Dmsg2(100, "rstorage=%p wstorage=%p\n", jcr->rstorage, jcr->wstorage); - Dmsg2(100, "Read store=%s, write store=%s\n", + Dmsg2(100, "Read store=%s, write store=%s\n", ((STORE *)jcr->rstorage->first())->name(), ((STORE *)jcr->wstorage->first())->name()); @@ -147,19 +121,100 @@ bool do_vbackup(JCR *jcr) Jmsg(jcr, M_INFO, 0, _("Start Virtual Backup JobId %s, Job=%s\n"), edit_uint64(jcr->JobId, ed1), jcr->Job); if (!jcr->accurate) { - Jmsg(jcr, M_WARNING, 0, + Jmsg(jcr, M_WARNING, 0, _("This Job is not an Accurate backup so is not equivalent to a Full backup.\n")); } - jcr->jr.JobLevel = L_VIRTUAL_FULL; - db_accurate_get_jobids(jcr, jcr->db, &jcr->jr, &jobids); - Dmsg1(10, "Accurate jobids=%s\n", jobids.list); + if (jcr->JobIds && *jcr->JobIds) { + JOB_DBR jr; + db_list_ctx status; + POOL_MEM query(PM_MESSAGE); + + memset(&jr, 0, sizeof(jr)); + + if (is_an_integer(jcr->JobIds)) { + /* Single JobId, so start the accurate code based on this id */ + + jr.JobId = str_to_int64(jcr->JobIds); + if (!db_get_job_record(jcr, jcr->db, &jr)) { + Jmsg(jcr, M_ERROR, 0, + _("Unable to get Job record for JobId=%s: ERR=%s\n"), + jcr->JobIds, db_strerror(jcr->db)); + return false; + } + Jmsg(jcr, M_INFO,0,_("Selecting jobs to build the Full state at %s\n"), + jr.cStartTime); + + jr.JobLevel = L_INCREMENTAL; /* Take Full+Diff+Incr */ + db_accurate_get_jobids(jcr, jcr->db, &jr, &jobids); + + } else if (sel.set_string(jcr->JobIds, true)) { + /* Found alljobid keyword */ + if (jcr->use_all_JobIds) { + jobids.count = sel.size(); + pm_strcpy(jobids.list, sel.get_expanded_list()); + + /* Need to apply some filter on the job name */ + } else { + Mmsg(query, + "SELECT JobId FROM Job " + "WHERE Job.Name = '%s' " + "AND Job.JobId IN (%s) " + "ORDER BY JobTDate ASC", + jcr->job->name(), + sel.get_expanded_list()); + + db_sql_query(jcr->db, query.c_str(), db_list_handler, &jobids); + } + + if (jobids.count == 0) { + Jmsg(jcr, M_FATAL, 0, _("No valid Jobs found from user selection.\n")); + return false; + } + + Jmsg(jcr, M_INFO, 0, _("Using user supplied JobIds=%s\n"), + jobids.list); + + /* Check status */ + Mmsg(query, + "SELECT Level FROM Job " + "WHERE Job.JobId IN (%s) " + "GROUP BY Level", + jobids.list); + + /* Will produce something like F,D,I or F,I */ + db_sql_query(jcr->db, query.c_str(), db_list_handler, &status); + + /* If no full found in the list, we build a "virtualdiff" or + * a "virtualinc". + */ + if (strchr(status.list, L_FULL) == NULL) { + if (strchr(status.list, L_DIFFERENTIAL)) { + level_computed = L_DIFFERENTIAL; + Jmsg(jcr, M_INFO, 0, _("No previous Full found in list, " + "using Differential level\n")); + + } else { + level_computed = L_INCREMENTAL; + Jmsg(jcr, M_INFO, 0, _("No previous Full found in list, " + "using Incremental level\n")); + } + } + } + + } else { /* No argument provided */ + jcr->jr.JobLevel = L_VIRTUAL_FULL; + db_accurate_get_jobids(jcr, jcr->db, &jcr->jr, &jobids); + Dmsg1(10, "Accurate jobids=%s\n", jobids.list); + } + if (jobids.count == 0) { Jmsg(jcr, M_FATAL, 0, _("No previous Jobs found.\n")); return false; } - jcr->jr.JobLevel = L_FULL; + /* Full by default, or might be Incr/Diff when jobid= is used */ + jcr->jr.JobLevel = level_computed; /* * Now we find the last job that ran and store it's info in @@ -211,14 +266,14 @@ _("This Job is not an Accurate backup so is not equivalent to a Full backup.\n") } Dmsg0(100, "Storage daemon connection OK\n"); - /* + /* * We re-update the job start record so that the start - * time is set after the run before job. This avoids + * time is set after the run before job. This avoids * that any files created by the run before job will * be saved twice. They will be backed up in the current * job, but not in the next one unless they are changed. * Without this, they will be backed up in this job and - * in the next job run because in that case, their date + * in the next job run because in that case, their date * is after the start of this run. */ jcr->start_time = time(NULL); @@ -295,8 +350,8 @@ void vbackup_cleanup(JCR *jcr, int TermCode) /* Update final items to set them to the previous job's values */ Mmsg(query, "UPDATE Job SET StartTime='%s',EndTime='%s'," - "JobTDate=%s WHERE JobId=%s", - jcr->previous_jr.cStartTime, jcr->previous_jr.cEndTime, + "JobTDate=%s WHERE JobId=%s", + jcr->previous_jr.cStartTime, jcr->previous_jr.cEndTime, edit_uint64(jcr->previous_jr.JobTDate, ec1), edit_uint64(jcr->JobId, ec3)); db_sql_query(jcr->db, query.c_str(), NULL, NULL); @@ -518,8 +573,8 @@ static bool create_bootstrap_file(JCR *jcr, char *jobids) complete_bsr(ua, rx.bsr); jcr->ExpectedFiles = write_bsr_file(ua, rx); - if (debug_level >= 10) { - Dmsg1(000, "Found %d files to consolidate.\n", jcr->ExpectedFiles); + if (chk_dbglvl(10)) { + Pmsg1(000, "Found %d files to consolidate.\n", jcr->ExpectedFiles); } if (jcr->ExpectedFiles == 0) { free_ua_context(ua); diff --git a/bacula/src/dird/verify.c b/bacula/src/dird/verify.c index 41fde6ac21..84575bac87 100644 --- a/bacula/src/dird/verify.c +++ b/bacula/src/dird/verify.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2011 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * @@ -47,25 +35,22 @@ /* Commands sent to File daemon */ static char verifycmd[] = "verify level=%s\n"; -static char storaddr[] = "storage address=%s port=%d ssl=0 Authorization=%s\n"; /* Responses received from File daemon */ static char OKverify[] = "2000 OK verify\n"; -static char OKstore[] = "2000 OK storage\n"; -/* Responses received from the Storage daemon */ +/* Commands received from Storage daemon */ static char OKbootstrap[] = "3000 OK bootstrap\n"; /* Forward referenced functions */ static void prt_fname(JCR *jcr); static int missing_handler(void *ctx, int num_fields, char **row); - -/* +/* * Called here before the job is run to do the job * specific setup. */ -bool do_verify_init(JCR *jcr) +bool do_verify_init(JCR *jcr) { if (!allow_duplicate_job(jcr)) { return false; @@ -100,11 +85,13 @@ bool do_verify_init(JCR *jcr) bool do_verify(JCR *jcr) { const char *level; - BSOCK *fd; + BSOCK *fd, *sd; int stat; char ed1[100]; JOB_DBR jr; JobId_t verify_jobid = 0; + char *store_address; + uint32_t store_port; const char *Name; free_wstorage(jcr); /* we don't write */ @@ -220,7 +207,6 @@ bool do_verify(JCR *jcr) edit_uint64(jcr->JobId, ed1), level_to_str(jcr->getJobLevel()), jcr->Job); if (jcr->getJobLevel() == L_VERIFY_VOLUME_TO_CATALOG) { - BSOCK *sd; /* * Start conversation with Storage daemon */ @@ -235,6 +221,7 @@ bool do_verify(JCR *jcr) return false; } sd = jcr->store_bsock; + jcr->sd_calls_client = jcr->client->sd_calls_client; /* * Send the bootstrap file -- what Volumes/files to restore */ @@ -242,17 +229,11 @@ bool do_verify(JCR *jcr) !response(jcr, sd, OKbootstrap, "Bootstrap", DISPLAY_ERROR)) { goto bail_out; } - if (!sd->fsend("run")) { - return false; - } - /* - * Now start a Storage daemon message thread - */ - if (!start_storage_daemon_message_thread(jcr)) { - return false; + if (!jcr->sd_calls_client) { + if (!run_storage_and_start_message_thread(jcr, sd)) { + return false; + } } - Dmsg0(50, "Storage daemon connection OK\n"); - } /* * OK, now connect to the File daemon @@ -289,15 +270,34 @@ bool do_verify(JCR *jcr) level = "catalog"; break; case L_VERIFY_VOLUME_TO_CATALOG: - /* - * send Storage daemon address to the File daemon - */ - if (jcr->rstore->SDDport == 0) { - jcr->rstore->SDDport = jcr->rstore->SDport; + if (jcr->sd_calls_client) { + if (jcr->FDVersion < 5) { + Jmsg(jcr, M_FATAL, 0, _("The File daemon does not support SDCallsClient.\n")); + goto bail_out; + } + + if (!send_client_addr_to_sd(jcr)) { + goto bail_out; + } + + if (!run_storage_and_start_message_thread(jcr, jcr->store_bsock)) { + return false; + } + store_address = jcr->rstore->address; /* dummy */ + store_port = 0; /* flag that SD calls FD */ + } else { + /* + * send Storage daemon address to the File daemon + */ + if (jcr->rstore->SDDport == 0) { + jcr->rstore->SDDport = jcr->rstore->SDport; + } + + store_address = get_storage_address(jcr->client, jcr->rstore); + store_port = jcr->rstore->SDDport; } - bnet_fsend(fd, storaddr, jcr->rstore->address, - jcr->rstore->SDDport, jcr->sd_auth_key); - if (!response(jcr, fd, OKstore, "Storage", DISPLAY_ERROR)) { + + if (!send_store_addr_to_fd(jcr, jcr->rstore, store_address, store_port)) { goto bail_out; } @@ -752,7 +752,7 @@ void get_attributes_and_compare_to_catalog(JCR *jcr, JobId_t JobId) } jcr->JobFiles = file_index; } - if (is_bnet_error(fd)) { + if (fd->is_error()) { berrno be; Jmsg2(jcr, M_FATAL, 0, _("bdird Makefile @$(ECHO) "# DO NOT DELETE: nice dependency list follows" >> Makefile - @$(CXX) -S -M $(CPPFLAGS) $(AFS_CFLAGS) $(XINC) $(PYTHON_INC) -I$(srcdir) -I$(basedir) *.c >> Makefile + @$(CXX) -S -M $(CPPFLAGS) $(XINC) $(LZO_INC) -I$(srcdir) -I$(basedir) *.c >> Makefile @if test -f Makefile ; then \ $(RMF) Makefile.bak; \ else \ diff --git a/bacula/src/filed/accurate.c b/bacula/src/filed/accurate.c index a4c7cc4429..4bf7974ebd 100644 --- a/bacula/src/filed/accurate.c +++ b/bacula/src/filed/accurate.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2011 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Version $Id $ @@ -116,7 +104,7 @@ static bool accurate_send_base_file_list(JCR *jcr) if (elt->seen) { Dmsg2(dbglvl, "base file fname=%s seen=%i\n", elt->fname, elt->seen); /* TODO: skip the decode and use directly the lstat field */ - decode_stat(elt->lstat, &statc, sizeof(statc), &LinkFIc); /* decode catalog stat */ + decode_stat(elt->lstat, &statc, sizeof(statc), &LinkFIc); /* decode catalog stat */ ff_pkt->fname = elt->fname; ff_pkt->statp = statc; encode_and_send_attributes(jcr, ff_pkt, stream); @@ -184,7 +172,7 @@ bool accurate_finish(JCR *jcr) { bool ret = true; - if (jcr->is_canceled() || jcr->is_incomplete()) { + if (jcr->is_canceled()) { accurate_free(jcr); return ret; } @@ -198,21 +186,21 @@ bool accurate_finish(JCR *jcr) } accurate_free(jcr); if (jcr->is_JobLevel(L_FULL)) { - Jmsg(jcr, M_INFO, 0, _("Space saved with Base jobs: %lld MB\n"), + Jmsg(jcr, M_INFO, 0, _("Space saved with Base jobs: %lld MB\n"), jcr->base_size/(1024*1024)); } } return ret; } -static bool accurate_add_file(JCR *jcr, uint32_t len, +static bool accurate_add_file(JCR *jcr, uint32_t len, char *fname, char *lstat, char *chksum, int32_t delta) { bool ret = true; CurFile *item; - /* we store CurFile, fname and ctime/mtime in the same chunk + /* we store CurFile, fname and ctime/mtime in the same chunk * we need one extra byte to handle an empty chksum */ item = (CurFile *)jcr->file_list->hash_malloc(sizeof(CurFile)+len+3); @@ -230,9 +218,9 @@ static bool accurate_add_file(JCR *jcr, uint32_t len, item->delta_seq = delta; - jcr->file_list->insert(item->fname, item); + jcr->file_list->insert(item->fname, item); - Dmsg4(dbglvl, "add fname=<%s> lstat=%s delta_seq=%i chksum=%s\n", + Dmsg4(dbglvl, "add fname=<%s> lstat=%s delta_seq=%i chksum=%s\n", fname, lstat, delta, chksum); return ret; } @@ -240,8 +228,8 @@ static bool accurate_add_file(JCR *jcr, uint32_t len, /* * This function is called for each file seen in fileset. * We check in file_list hash if fname have been backuped - * the last time. After we can compare Lstat field. - * Full Lstat usage have been removed on 6612 + * the last time. After we can compare Lstat field. + * Full Lstat usage have been removed on 6612 * * Returns: true if file has changed (must be backed up) * false file not changed @@ -270,12 +258,12 @@ bool accurate_check_file(JCR *jcr, FF_PKT *ff_pkt) } strip_path(ff_pkt); - + if (S_ISDIR(ff_pkt->statp.st_mode)) { fname = ff_pkt->link; } else { fname = ff_pkt->fname; - } + } if (!accurate_lookup(jcr, fname, &elt)) { Dmsg1(dbglvl, "accurate %s (not found)\n", fname); @@ -391,9 +379,9 @@ bool accurate_check_file(JCR *jcr, FF_PKT *ff_pkt) * The remainder of the function is all about getting the checksum. * First we initialise, then we read files, other streams and Finder Info. */ - if (!stat && ff_pkt->type != FT_LNKSAVED && - (S_ISREG(ff_pkt->statp.st_mode) && - ff_pkt->flags & (FO_MD5|FO_SHA1|FO_SHA256|FO_SHA512))) + if (!stat && ff_pkt->type != FT_LNKSAVED && + (S_ISREG(ff_pkt->statp.st_mode) && + ff_pkt->flags & (FO_MD5|FO_SHA1|FO_SHA256|FO_SHA512))) { if (!*elt.chksum && !jcr->rerunning) { @@ -410,20 +398,20 @@ bool accurate_check_file(JCR *jcr, FF_PKT *ff_pkt) if (ff_pkt->flags & FO_MD5) { digest = crypto_digest_new(jcr, CRYPTO_DIGEST_MD5); digest_stream = STREAM_MD5_DIGEST; - + } else if (ff_pkt->flags & FO_SHA1) { digest = crypto_digest_new(jcr, CRYPTO_DIGEST_SHA1); digest_stream = STREAM_SHA1_DIGEST; - + } else if (ff_pkt->flags & FO_SHA256) { digest = crypto_digest_new(jcr, CRYPTO_DIGEST_SHA256); digest_stream = STREAM_SHA256_DIGEST; - + } else if (ff_pkt->flags & FO_SHA512) { digest = crypto_digest_new(jcr, CRYPTO_DIGEST_SHA512); digest_stream = STREAM_SHA512_DIGEST; } - + /* Did digest initialization fail? */ if (digest_stream != STREAM_NONE && digest == NULL) { Jmsg(jcr, M_WARNING, 0, _("%s digest initialization failed\n"), @@ -434,19 +422,19 @@ bool accurate_check_file(JCR *jcr, FF_PKT *ff_pkt) if (digest) { char md[CRYPTO_DIGEST_MAX_SIZE]; uint32_t size; - + size = sizeof(md); - + if (digest_file(jcr, ff_pkt, digest) != 0) { jcr->JobErrors++; } else if (crypto_digest_finalize(digest, (uint8_t *)md, &size)) { char *digest_buf; const char *digest_name; - + digest_buf = (char *)malloc(BASE64_SIZE(size)); digest_name = crypto_digest_name(digest); - + bin_to_base64(digest_buf, BASE64_SIZE(size), md, size, true); if (strcmp(digest_buf, elt.chksum)) { @@ -457,7 +445,7 @@ bool accurate_check_file(JCR *jcr, FF_PKT *ff_pkt) digest_buf); stat = true; } - + free(digest_buf); } crypto_digest_free(digest); @@ -477,7 +465,7 @@ bool accurate_check_file(JCR *jcr, FF_PKT *ff_pkt) * When in Full+Base mode, we mark only if the file match exactly */ if (jcr->getJobLevel() == L_FULL) { - if (!stat) { + if (!stat) { /* compute space saved with basefile */ jcr->base_size += ff_pkt->statp.st_size; accurate_mark_file_as_seen(jcr, &elt); @@ -491,7 +479,7 @@ bail_out: return stat; } -/* +/* * TODO: use big buffer from htable */ int accurate_cmd(JCR *jcr) @@ -527,12 +515,12 @@ int accurate_cmd(JCR *jcr) chksum_pos = lstat_pos - 1; /* tweak: no checksum, point to the last \0 */ delta_seq = 0; } else { - delta_seq = str_to_int32(dir->msg + - chksum_pos + + delta_seq = str_to_int32(dir->msg + + chksum_pos + strlen(dir->msg + chksum_pos) + 1); } - accurate_add_file(jcr, dir->msglen, + accurate_add_file(jcr, dir->msglen, dir->msg, /* Path */ dir->msg + lstat_pos, /* LStat */ dir->msg + chksum_pos, /* CheckSum */ diff --git a/bacula/src/filed/acl.c b/bacula/src/filed/acl.c index 59eac94e27..ff250e4104 100644 --- a/bacula/src/filed/acl.c +++ b/bacula/src/filed/acl.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2004-2012 Free Software Foundation Europe e.V. + Copyright (C) 2004-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /** * Functions to handle ACLs for bacula. @@ -62,10 +50,10 @@ * Major rewrite by Marco van Wieringen, November 2008 * Major overhaul by Marco van Wieringen, January 2012 */ - + #include "bacula.h" #include "filed.h" - + #if !defined(HAVE_ACL) && !defined(HAVE_AFS_ACL) /** * Entry points when compiled without support for ACLs or on an unsupported platform. @@ -771,7 +759,7 @@ static bacl_exit_code generic_get_acl_from_os(JCR *jcr, bacl_type acltype) * From observation, IRIX's acl_get_file() seems to return a * non-NULL acl with a count field of -1 when a file has no ACL * defined, while IRIX's acl_to_text() returns NULL when presented - * with such an ACL. + * with such an ACL. * * For all other implmentations we check if there are more then * zero entries in the acl returned. @@ -822,7 +810,7 @@ static bacl_exit_code generic_get_acl_from_os(JCR *jcr, bacl_type acltype) Mmsg2(jcr->errmsg, _("acl_to_text error on file \"%s\": ERR=%s\n"), jcr->last_fname, be.bstrerror()); - Dmsg2(100, "acl_to_text error file=%s ERR=%s\n", + Dmsg2(100, "acl_to_text error file=%s ERR=%s\n", jcr->last_fname, be.bstrerror()); retval = bacl_exit_error; @@ -852,7 +840,7 @@ static bacl_exit_code generic_get_acl_from_os(JCR *jcr, bacl_type acltype) Mmsg2(jcr->errmsg, _("acl_get_file error on file \"%s\": ERR=%s\n"), jcr->last_fname, be.bstrerror()); - Dmsg2(100, "acl_get_file error file=%s ERR=%s\n", + Dmsg2(100, "acl_get_file error file=%s ERR=%s\n", jcr->last_fname, be.bstrerror()); retval = bacl_exit_error; @@ -922,7 +910,7 @@ static bacl_exit_code generic_set_acl_on_os(JCR *jcr, Mmsg2(jcr->errmsg, _("acl_from_text error on file \"%s\": ERR=%s\n"), jcr->last_fname, be.bstrerror()); - Dmsg3(100, "acl_from_text error acl=%s file=%s ERR=%s\n", + Dmsg3(100, "acl_from_text error acl=%s file=%s ERR=%s\n", content, jcr->last_fname, be.bstrerror()); return bacl_exit_error; } @@ -938,7 +926,7 @@ static bacl_exit_code generic_set_acl_on_os(JCR *jcr, Mmsg2(jcr->errmsg, _("acl_valid error on file \"%s\": ERR=%s\n"), jcr->last_fname, be.bstrerror()); - Dmsg3(100, "acl_valid error acl=%s file=%s ERR=%s\n", + Dmsg3(100, "acl_valid error acl=%s file=%s ERR=%s\n", content, jcr->last_fname, be.bstrerror()); acl_free(acl); return bacl_exit_error; @@ -1413,7 +1401,7 @@ static bacl_exit_code tru64_build_acl_streams(JCR *jcr, FF_PKT *ff_pkt) * Tru64 has next to BACL_TYPE_DEFAULT also BACL_TYPE_DEFAULT_DIR acls. * This is an inherited acl for all subdirs. * See http://www.helsinki.fi/atk/unix/dec_manuals/DOC_40D/AQ0R2DTE/DOCU_018.HTM - * Section 21.5 Default ACLs + * Section 21.5 Default ACLs */ if (generic_get_acl_from_os(jcr, BACL_TYPE_DEFAULT_DIR) == bacl_exit_fatal) { return bacl_exit_error; @@ -1530,7 +1518,7 @@ static bacl_exit_code hpux_build_acl_streams(JCR *jcr, FF_PKT *ff_pkt) Mmsg2(jcr->errmsg, _("getacl error on file \"%s\": ERR=%s\n"), jcr->last_fname, be.bstrerror()); - Dmsg2(100, "getacl error file=%s ERR=%s\n", + Dmsg2(100, "getacl error file=%s ERR=%s\n", jcr->last_fname, be.bstrerror()); pm_strcpy(jcr->acl_data->u.build->content, ""); @@ -1565,7 +1553,7 @@ static bacl_exit_code hpux_build_acl_streams(JCR *jcr, FF_PKT *ff_pkt) Mmsg2(jcr->errmsg, _("acltostr error on file \"%s\": ERR=%s\n"), jcr->last_fname, be.bstrerror()); - Dmsg3(100, "acltostr error acl=%s file=%s ERR=%s\n", + Dmsg3(100, "acltostr error acl=%s file=%s ERR=%s\n", jcr->acl_data->u.build->content, jcr->last_fname, be.bstrerror()); return bacl_exit_error; } @@ -1587,7 +1575,7 @@ static bacl_exit_code hpux_parse_acl_streams(JCR *jcr, Mmsg2(jcr->errmsg, _("strtoacl error on file \"%s\": ERR=%s\n"), jcr->last_fname, be.bstrerror()); - Dmsg3(100, "strtoacl error acl=%s file=%s ERR=%s\n", + Dmsg3(100, "strtoacl error acl=%s file=%s ERR=%s\n", content, jcr->last_fname, be.bstrerror()); return bacl_exit_error; } @@ -1597,7 +1585,7 @@ static bacl_exit_code hpux_parse_acl_streams(JCR *jcr, Mmsg2(jcr->errmsg, _("strtoacl error on file \"%s\": ERR=%s\n"), jcr->last_fname, be.bstrerror()); - Dmsg3(100, "strtoacl error acl=%s file=%s ERR=%s\n", + Dmsg3(100, "strtoacl error acl=%s file=%s ERR=%s\n", content, jcr->last_fname, be.bstrerror()); return bacl_exit_error; @@ -1737,7 +1725,7 @@ static bacl_exit_code solaris_build_acl_streams(JCR *jcr, FF_PKT *ff_pkt) Mmsg2(jcr->errmsg, _("pathconf error on file \"%s\": ERR=%s\n"), jcr->last_fname, be.bstrerror()); - Dmsg2(100, "pathconf error file=%s ERR=%s\n", + Dmsg2(100, "pathconf error file=%s ERR=%s\n", jcr->last_fname, be.bstrerror()); return bacl_exit_error; } @@ -1759,7 +1747,7 @@ static bacl_exit_code solaris_build_acl_streams(JCR *jcr, FF_PKT *ff_pkt) Mmsg2(jcr->errmsg, _("acl_get error on file \"%s\": ERR=%s\n"), jcr->last_fname, acl_strerror(errno)); - Dmsg2(100, "acl_get error file=%s ERR=%s\n", + Dmsg2(100, "acl_get error file=%s ERR=%s\n", jcr->last_fname, acl_strerror(errno)); return bacl_exit_error; } @@ -1844,7 +1832,7 @@ static bacl_exit_code solaris_parse_acl_streams(JCR *jcr, Mmsg2(jcr->errmsg, _("pathconf error on file \"%s\": ERR=%s\n"), jcr->last_fname, be.bstrerror()); - Dmsg3(100, "pathconf error acl=%s file=%s ERR=%s\n", + Dmsg3(100, "pathconf error acl=%s file=%s ERR=%s\n", content, jcr->last_fname, be.bstrerror()); return bacl_exit_error; } @@ -1889,7 +1877,7 @@ static bacl_exit_code solaris_parse_acl_streams(JCR *jcr, Mmsg2(jcr->errmsg, _("acl_fromtext error on file \"%s\": ERR=%s\n"), jcr->last_fname, acl_strerror(error)); - Dmsg3(100, "acl_fromtext error acl=%s file=%s ERR=%s\n", + Dmsg3(100, "acl_fromtext error acl=%s file=%s ERR=%s\n", content, jcr->last_fname, acl_strerror(error)); return bacl_exit_error; } @@ -1936,7 +1924,7 @@ static bacl_exit_code solaris_parse_acl_streams(JCR *jcr, Mmsg2(jcr->errmsg, _("acl_set error on file \"%s\": ERR=%s\n"), jcr->last_fname, acl_strerror(error)); - Dmsg3(100, "acl_set error acl=%s file=%s ERR=%s\n", + Dmsg3(100, "acl_set error acl=%s file=%s ERR=%s\n", content, jcr->last_fname, acl_strerror(error)); acl_free(aclp); return bacl_exit_error; @@ -2022,7 +2010,7 @@ static bacl_exit_code solaris_build_acl_streams(JCR *jcr, FF_PKT *ff_pkt) Mmsg2(jcr->errmsg, _("acltotext error on file \"%s\": ERR=%s\n"), jcr->last_fname, be.bstrerror()); - Dmsg3(100, "acltotext error acl=%s file=%s ERR=%s\n", + Dmsg3(100, "acltotext error acl=%s file=%s ERR=%s\n", jcr->acl_data->u.build->content, jcr->last_fname, be.bstrerror()); } @@ -2045,7 +2033,7 @@ static bacl_exit_code solaris_parse_acl_streams(JCR *jcr, Mmsg2(jcr->errmsg, _("aclfromtext error on file \"%s\": ERR=%s\n"), jcr->last_fname, be.bstrerror()); - Dmsg3(100, "aclfromtext error acl=%s file=%s ERR=%s\n", + Dmsg3(100, "aclfromtext error acl=%s file=%s ERR=%s\n", content, jcr->last_fname, be.bstrerror()); return bacl_exit_error; } diff --git a/bacula/src/filed/acl.h b/bacula/src/filed/acl.h index fddc90b0cf..bb63529411 100644 --- a/bacula/src/filed/acl.h +++ b/bacula/src/filed/acl.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2004-2008 Free Software Foundation Europe e.V. + Copyright (C) 2004-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Properties we use for getting and setting ACLs. diff --git a/bacula/src/filed/authenticate.c b/bacula/src/filed/authenticate.c index e9fc51988d..47184a654c 100644 --- a/bacula/src/filed/authenticate.c +++ b/bacula/src/filed/authenticate.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2010 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Authenticate Director who is attempting to connect. @@ -35,6 +23,8 @@ #include "bacula.h" #include "filed.h" +extern CLIENT *me; /* my resource */ + const int dbglvl = 50; /* Version at end of Hello @@ -43,9 +33,13 @@ const int dbglvl = 50; * 2 13Mar09 - added the ability to restore from multiple storages * 3 03Sep10 - added the restore object command for vss plugin 4.0 * 4 25Nov10 - added bandwidth command 5.1 - * 5 24Nov11 - added new restore object command format (pluginname) 6.0 + * 5 01Jan14 - added SD Calls Client and api version to status command */ -static char OK_hello[] = "2000 OK Hello 5\n"; +#define FD_VERSION 5 + +static char hello_sd[] = "Hello Bacula SD: Start Job %s %d\n"; + +static char hello_dir[] = "2000 OK Hello %d\n"; static char Dir_sorry[] = "2999 Authentication failed.\n"; static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; @@ -62,26 +56,20 @@ static bool authenticate(int rcode, BSOCK *bs, JCR* jcr) bool auth_success = false; alist *verify_list = NULL; btimer_t *tid = NULL; + int dir_version = 0; if (rcode != R_DIRECTOR) { Dmsg1(dbglvl, "I only authenticate directors, not %d\n", rcode); Jmsg1(jcr, M_FATAL, 0, _("I only authenticate directors, not %d\n"), rcode); goto auth_fatal; } - if (bs->msglen < 25 || bs->msglen > 500) { - Dmsg2(dbglvl, "Bad Hello command from Director at %s. Len=%d.\n", - bs->who(), bs->msglen); - char addr[64]; - char *who = bnet_get_peer(bs, addr, sizeof(addr)) ? bs->who() : addr; - Jmsg2(jcr, M_FATAL, 0, _("Bad Hello command from Director at %s. Len=%d.\n"), - who, bs->msglen); - goto auth_fatal; - } + dirname = check_pool_memory_size(dirname, bs->msglen); - if (sscanf(bs->msg, "Hello Director %s calling", dirname) != 1) { + if (sscanf(bs->msg, "Hello Director %s calling %d", dirname, &dir_version) != 2 && + sscanf(bs->msg, "Hello Director %s calling", dirname) != 1) { char addr[64]; - char *who = bnet_get_peer(bs, addr, sizeof(addr)) ? bs->who() : addr; + char *who = bs->get_peer(addr, sizeof(addr)) ? bs->who() : addr; bs->msg[100] = 0; Dmsg2(dbglvl, "Bad Hello command from Director at %s: %s\n", bs->who(), bs->msg); @@ -96,8 +84,8 @@ static bool authenticate(int rcode, BSOCK *bs, JCR* jcr) } if (!director) { char addr[64]; - char *who = bnet_get_peer(bs, addr, sizeof(addr)) ? bs->who() : addr; - Jmsg2(jcr, M_FATAL, 0, _("Connection from unknown Director %s at %s rejected.\n"), + char *who = bs->get_peer(addr, sizeof(addr)) ? bs->who() : addr; + Jmsg2(jcr, M_FATAL, 0, _("Connection from unknown Director %s at %s rejected.\n"), dirname, who); goto auth_fatal; } @@ -123,7 +111,7 @@ static bool authenticate(int rcode, BSOCK *bs, JCR* jcr) tid = start_bsock_timer(bs, AUTH_TIMEOUT); /* Challenge the director */ - auth_success = cram_md5_challenge(bs, director->password, tls_local_need, compatible); + auth_success = cram_md5_challenge(bs, director->password, tls_local_need, compatible); if (job_canceled(jcr)) { auth_success = false; goto auth_fatal; /* quick exit */ @@ -132,13 +120,13 @@ static bool authenticate(int rcode, BSOCK *bs, JCR* jcr) auth_success = cram_md5_respond(bs, director->password, &tls_remote_need, &compatible); if (!auth_success) { char addr[64]; - char *who = bnet_get_peer(bs, addr, sizeof(addr)) ? bs->who() : addr; - Dmsg1(dbglvl, "cram_get_auth failed for %s\n", who); + char *who = bs->get_peer(addr, sizeof(addr)) ? bs->who() : addr; + Dmsg1(dbglvl, "cram_get_auth respond failed for Director: %s\n", who); } } else { char addr[64]; - char *who = bnet_get_peer(bs, addr, sizeof(addr)) ? bs->who() : addr; - Dmsg1(dbglvl, "cram_auth failed for %s\n", who); + char *who = bs->get_peer(addr, sizeof(addr)) ? bs->who() : addr; + Dmsg1(dbglvl, "cram_auth challenge failed for Director %s\n", who); } if (!auth_success) { Emsg1(M_FATAL, 0, _("Incorrect password given by Director at %s.\n"), @@ -204,11 +192,11 @@ int authenticate_director(JCR *jcr) BSOCK *dir = jcr->dir_bsock; if (!authenticate(R_DIRECTOR, dir, jcr)) { - bnet_fsend(dir, "%s", Dir_sorry); + dir->fsend("%s", Dir_sorry); Emsg0(M_FATAL, 0, _("Unable to authenticate Director\n")); return 0; } - return bnet_fsend(dir, "%s", OK_hello); + return dir->fsend(hello_dir, FD_VERSION); } /* @@ -222,6 +210,7 @@ int authenticate_storagedaemon(JCR *jcr) int tls_remote_need = BNET_TLS_NONE; int compatible = true; bool auth_success = false; + int sd_version = 0; btimer_t *tid = start_bsock_timer(sd, AUTH_TIMEOUT); @@ -243,19 +232,25 @@ int authenticate_storagedaemon(JCR *jcr) goto auth_fatal; } + + sd->fsend(hello_sd, jcr->Job, FD_VERSION); + Dmsg1(100, "Send to SD: %s\n", sd->msg); + /* Respond to SD challenge */ + Dmsg0(050, "==== respond to SD challenge\n"); auth_success = cram_md5_respond(sd, jcr->sd_auth_key, &tls_remote_need, &compatible); if (job_canceled(jcr)) { auth_success = false; /* force quick exit */ goto auth_fatal; } if (!auth_success) { - Dmsg1(dbglvl, "cram_respond failed for %s\n", sd->who()); + Dmsg1(dbglvl, "cram_respond failed for SD: %s\n", sd->who()); } else { /* Now challenge him */ + Dmsg0(050, "==== Challenge SD\n"); auth_success = cram_md5_challenge(sd, jcr->sd_auth_key, tls_local_need, compatible); if (!auth_success) { - Dmsg1(dbglvl, "cram_challenge failed for %s\n", sd->who()); + Dmsg1(dbglvl, "cram_challenge failed for SD: %s\n", sd->who()); } } @@ -263,11 +258,13 @@ int authenticate_storagedaemon(JCR *jcr) Jmsg(jcr, M_FATAL, 0, _("Authorization key rejected by Storage daemon.\n" "Please see " MANUAL_AUTH_URL " for help.\n")); goto auth_fatal; + } else { + Dmsg0(050, "Authorization with SD is OK\n"); } /* Verify that the remote host is willing to meet our TLS requirements */ if (tls_remote_need < tls_local_need && tls_local_need != BNET_TLS_OK && tls_remote_need != BNET_TLS_OK) { - Jmsg(jcr, M_FATAL, 0, _("Authorization problem: Remote server did not" + Jmsg(jcr, M_FATAL, 0, _("Authorization problem: Remote server did not" " advertize required TLS support.\n")); Dmsg2(dbglvl, "remote_need=%d local_need=%d\n", tls_remote_need, tls_local_need); auth_success = false; @@ -293,6 +290,13 @@ int authenticate_storagedaemon(JCR *jcr) sd->free_tls(); /* yes, shutdown tls */ } } + if (sd->recv() <= 0) { + auth_success = false; + goto auth_fatal; + } + sscanf(sd->msg, "3000 OK Hello %d", &sd_version); + + /* At this point, we have successfully connected */ auth_fatal: /* Destroy session key */ diff --git a/bacula/src/filed/backup.c b/bacula/src/filed/backup.c index da9330feff..bd31cc71e8 100644 --- a/bacula/src/filed/backup.c +++ b/bacula/src/filed/backup.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2011 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /** * Bacula File Daemon backup.c send file attributes and data @@ -115,7 +103,7 @@ bool blast_data_to_storage_daemon(JCR *jcr, char *addr) * output_block_size = input_block_size + (input_block_size / 16) + 64 + 3 + sizeof(comp_stream_header) * * The zlib compression workset is initialized here to minimize - * the "per file" load. The jcr member is only set, if the init + * the "per file" load. The jcr member is only set, if the init * was successful. * * For the same reason, lzo compression is initialized here. @@ -127,11 +115,11 @@ bool blast_data_to_storage_daemon(JCR *jcr, char *addr) jcr->compress_buf_size = jcr->buf_size + ((jcr->buf_size+999) / 1000) + 30; jcr->compress_buf = get_memory(jcr->compress_buf_size); #endif - + #ifdef HAVE_LIBZ - z_stream *pZlibStream = (z_stream*)malloc(sizeof(z_stream)); + z_stream *pZlibStream = (z_stream*)malloc(sizeof(z_stream)); if (pZlibStream) { - pZlibStream->zalloc = Z_NULL; + pZlibStream->zalloc = Z_NULL; pZlibStream->zfree = Z_NULL; pZlibStream->opaque = Z_NULL; pZlibStream->state = Z_NULL; @@ -164,8 +152,8 @@ bool blast_data_to_storage_daemon(JCR *jcr, char *addr) /** in accurate mode, we overload the find_one check function */ if (jcr->accurate) { set_find_changed_function((FF_PKT *)jcr->ff, accurate_check_file); - } - + } + start_heartbeat_monitor(jcr); if (have_acl) { @@ -249,7 +237,7 @@ bool blast_data_to_storage_daemon(JCR *jcr, char *addr) static bool crypto_session_start(JCR *jcr) { - crypto_cipher_t cipher = CRYPTO_CIPHER_AES_128_CBC; + crypto_cipher_t cipher = (crypto_cipher_t) me->pki_cipher; /** * Create encryption session data and a cached, DER-encoded session data @@ -261,6 +249,10 @@ static bool crypto_session_start(JCR *jcr) /** Create per-job session encryption context */ jcr->crypto.pki_session = crypto_session_new(cipher, jcr->crypto.pki_recipients); + if (!jcr->crypto.pki_session) { + Jmsg(jcr, M_FATAL, 0, _("Unsupported cipher on this system.\n")); + return false; + } /** Get the session data size */ if (!crypto_session_encode(jcr->crypto.pki_session, (uint8_t *)0, &size)) { @@ -307,8 +299,8 @@ static bool crypto_session_send(JCR *jcr, BSOCK *sd) /** Send our header */ Dmsg2(100, "Send hdr fi=%ld stream=%d\n", jcr->JobFiles, STREAM_ENCRYPTED_SESSION_DATA); - sd->fsend("%ld %d 0", jcr->JobFiles, STREAM_ENCRYPTED_SESSION_DATA); - + sd->fsend("%ld %d %lld", jcr->JobFiles, STREAM_ENCRYPTED_SESSION_DATA, + (int64_t)jcr->ff->statp.st_size); msgsave = sd->msg; sd->msg = jcr->crypto.pki_session_encoded; sd->msglen = jcr->crypto.pki_session_encoded_size; @@ -337,7 +329,7 @@ int save_file(JCR *jcr, FF_PKT *ff_pkt, bool top_level) bool do_read = false; bool plugin_started = false; bool do_plugin_set = false; - int stat, data_stream; + int stat, data_stream; int rtnstat = 0; DIGEST *digest = NULL; DIGEST *signing_digest = NULL; @@ -345,15 +337,22 @@ int save_file(JCR *jcr, FF_PKT *ff_pkt, bool top_level) SIGNATURE *sig = NULL; bool has_file_data = false; struct save_pkt sp; /* use by option plugin */ - // TODO landonf: Allow the user to specify the digest algorithm -#ifdef HAVE_SHA2 - crypto_digest_t signing_algorithm = CRYPTO_DIGEST_SHA256; -#else - crypto_digest_t signing_algorithm = CRYPTO_DIGEST_SHA1; -#endif - BSOCK *sd = jcr->store_bsock; - if (jcr->is_canceled() || jcr->is_incomplete()) { + crypto_digest_t signing_algorithm = (crypto_digest_t) me->pki_digest; + + BSOCK *sd = jcr->store_bsock; + time_t now = time(NULL); + if (jcr->last_stat_time == 0) { + jcr->last_stat_time = now; + jcr->stat_interval = 30; /* Default 30 seconds */ + } else if (now >= jcr->last_stat_time + jcr->stat_interval) { + jcr->dir_bsock->fsend("Progress Job=x files=%ld bytes=%lld bps=%ld\n", + jcr->JobFiles, jcr->JobBytes, jcr->LastRate); + jcr->last_stat_time = now; + } + + if (jcr->is_canceled()) { + Dmsg0(100, "Job canceled by user.\n"); return 0; } @@ -433,7 +432,7 @@ int save_file(JCR *jcr, FF_PKT *ff_pkt, bool top_level) } case FT_NOFOLLOW: { berrno be; - Jmsg(jcr, M_NOTSAVED, 0, _(" Could not follow link \"%s\": ERR=%s\n"), + Jmsg(jcr, M_NOTSAVED, 0, _(" Could not follow link \"%s\": ERR=%s\n"), ff_pkt->fname, be.bstrerror(ff_pkt->ff_errno)); jcr->JobErrors++; return 1; @@ -454,7 +453,7 @@ int save_file(JCR *jcr, FF_PKT *ff_pkt, bool top_level) return 1; case FT_NOOPEN: { berrno be; - Jmsg(jcr, M_NOTSAVED, 0, _(" Could not open directory \"%s\": ERR=%s\n"), + Jmsg(jcr, M_NOTSAVED, 0, _(" Could not open directory \"%s\": ERR=%s\n"), ff_pkt->fname, be.bstrerror(ff_pkt->ff_errno)); jcr->JobErrors++; return 1; @@ -463,7 +462,7 @@ int save_file(JCR *jcr, FF_PKT *ff_pkt, bool top_level) Dmsg1(130, "FT_DELETED: %s\n", ff_pkt->fname); break; default: - Jmsg(jcr, M_NOTSAVED, 0, _(" Unknown file type %d; not saved: %s\n"), + Jmsg(jcr, M_NOTSAVED, 0, _(" Unknown file type %d; not saved: %s\n"), ff_pkt->type, ff_pkt->fname); jcr->JobErrors++; return 1; @@ -479,7 +478,7 @@ int save_file(JCR *jcr, FF_PKT *ff_pkt, bool top_level) * algorithms below. * * The signing digest is a single algorithm depending on - * whether or not we have SHA2. + * whether or not we have SHA2. * ****FIXME**** the signing algoritm should really be * determined a different way!!!!!! What happens if * sha2 was available during backup but not restore? @@ -543,7 +542,7 @@ int save_file(JCR *jcr, FF_PKT *ff_pkt, bool top_level) /* option and cmd plugin are not compatible together */ } else if (ff_pkt->opt_plugin) { - + /* ask the option plugin what to do with this file */ switch (plugin_option_handle_file(jcr, ff_pkt, &sp)) { case bRC_OK: @@ -600,7 +599,7 @@ int save_file(JCR *jcr, FF_PKT *ff_pkt, bool top_level) #ifdef HAVE_WIN32 do_read = !is_portable_backup(&ff_pkt->bfd) || ff_pkt->statp.st_size > 0; #else - do_read = ff_pkt->statp.st_size > 0; + do_read = ff_pkt->statp.st_size > 0; #endif } else if (ff_pkt->type == FT_RAW || ff_pkt->type == FT_FIFO || ff_pkt->type == FT_REPARSE || ff_pkt->type == FT_JUNCTION || @@ -622,7 +621,7 @@ int save_file(JCR *jcr, FF_PKT *ff_pkt, bool top_level) tid = NULL; } int noatime = ff_pkt->flags & FO_NOATIME ? O_NOATIME : 0; - ff_pkt->bfd.reparse_point = (ff_pkt->type == FT_REPARSE || + ff_pkt->bfd.reparse_point = (ff_pkt->type == FT_REPARSE || ff_pkt->type == FT_JUNCTION); if (bopen(&ff_pkt->bfd, ff_pkt->fname, O_RDONLY | O_BINARY | noatime, 0) < 0) { ff_pkt->ff_errno = errno; @@ -648,7 +647,7 @@ int save_file(JCR *jcr, FF_PKT *ff_pkt, bool top_level) } bclose(&ff_pkt->bfd); - + if (!stat) { goto bail_out; } @@ -765,7 +764,7 @@ int save_file(JCR *jcr, FF_PKT *ff_pkt, bool top_level) } if (!crypto_sign_add_signer(sig, signing_digest, jcr->crypto.pki_keypair)) { - Jmsg(jcr, M_FATAL, 0, _("An error occurred while signing the stream.\n")); + Jmsg(jcr, M_FATAL, 0, _("An error occurred while adding signer the stream.\n")); goto bail_out; } @@ -838,10 +837,11 @@ int save_file(JCR *jcr, FF_PKT *ff_pkt, bool top_level) } good_rtn: - rtnstat = jcr->is_canceled() ? 0 : 1; /* good return if not canceled */ + rtnstat = 1; bail_out: - if (jcr->is_incomplete() || jcr->is_canceled()) { + if (jcr->is_canceled()) { + Dmsg0(100, "Job canceled by user.\n"); rtnstat = 0; } if (plugin_started) { @@ -860,7 +860,7 @@ bail_out: crypto_digest_free(signing_digest); } if (sig) { - crypto_sign_free(sig); + crypto_sign_free(sig); } return rtnstat; } @@ -876,7 +876,7 @@ bail_out: * Currently this is not a problem as the only other stream, resource forks, * are not handled as sparse files. */ -static int send_data(JCR *jcr, int stream, FF_PKT *ff_pkt, DIGEST *digest, +static int send_data(JCR *jcr, int stream, FF_PKT *ff_pkt, DIGEST *digest, DIGEST *signing_digest) { BSOCK *sd = jcr->store_bsock; @@ -926,7 +926,7 @@ static int send_data(JCR *jcr, int stream, FF_PKT *ff_pkt, DIGEST *digest, if (((z_stream*)jcr->pZLIB_compress_workset)->total_in == 0) { /** set gzip compression level - must be done per file */ - if ((zstat=deflateParams((z_stream*)jcr->pZLIB_compress_workset, + if ((zstat=deflateParams((z_stream*)jcr->pZLIB_compress_workset, ff_pkt->Compress_level, Z_DEFAULT_STRATEGY)) != Z_OK) { Jmsg(jcr, M_FATAL, 0, _("Compression deflateParams error: %d\n"), zstat); jcr->setJobStatus(JS_ErrorTerminated); @@ -969,7 +969,7 @@ static int send_data(JCR *jcr, int stream, FF_PKT *ff_pkt, DIGEST *digest, goto err; } /** Allocate the cipher context */ - if ((cipher_ctx = crypto_cipher_new(jcr->crypto.pki_session, true, + if ((cipher_ctx = crypto_cipher_new(jcr->crypto.pki_session, true, &cipher_block_size)) == NULL) { /* Shouldn't happen! */ Jmsg0(jcr, M_FATAL, 0, _("Failed to initialize encryption context.\n")); @@ -983,8 +983,8 @@ static int send_data(JCR *jcr, int stream, FF_PKT *ff_pkt, DIGEST *digest, * could be returned for the given read buffer size. * (Using the larger of either rsize or max_compress_len) */ - jcr->crypto.crypto_buf = check_pool_memory_size(jcr->crypto.crypto_buf, - (MAX(rsize + (int)sizeof(uint32_t), (int32_t)max_compress_len) + + jcr->crypto.crypto_buf = check_pool_memory_size(jcr->crypto.crypto_buf, + (MAX(rsize + (int)sizeof(uint32_t), (int32_t)max_compress_len) + cipher_block_size - 1) / cipher_block_size * cipher_block_size); wbuf = jcr->crypto.crypto_buf; /* Encrypted, possibly compressed output here. */ @@ -992,9 +992,10 @@ static int send_data(JCR *jcr, int stream, FF_PKT *ff_pkt, DIGEST *digest, /** * Send Data header to Storage daemon - * + * */ - if (!sd->fsend("%ld %d 0", jcr->JobFiles, stream)) { + if (!sd->fsend("%ld %d %lld", jcr->JobFiles, stream, + (int64_t)ff_pkt->statp.st_size)) { if (!jcr->is_job_canceled()) { Jmsg1(jcr, M_FATAL, 0, _("Network send error to SD. ERR=%s\n"), sd->bstrerror()); @@ -1024,7 +1025,7 @@ static int send_data(JCR *jcr, int stream, FF_PKT *ff_pkt, DIGEST *digest, if (S_ISBLK(ff_pkt->statp.st_mode)) rsize = (rsize/512) * 512; #endif - + /** * Read the file data */ @@ -1075,7 +1076,7 @@ static int send_data(JCR *jcr, int stream, FF_PKT *ff_pkt, DIGEST *digest, /** Do compression if turned on */ if (ff_pkt->flags & FO_COMPRESS && ff_pkt->Compress_algo == COMPRESS_GZIP && jcr->pZLIB_compress_workset) { Dmsg3(400, "cbuf=0x%x rbuf=0x%x len=%u\n", cbuf, rbuf, sd->msglen); - + ((z_stream*)jcr->pZLIB_compress_workset)->next_in = (Bytef *)rbuf; ((z_stream*)jcr->pZLIB_compress_workset)->avail_in = sd->msglen; ((z_stream*)jcr->pZLIB_compress_workset)->next_out = (Bytef *)cbuf; @@ -1094,7 +1095,7 @@ static int send_data(JCR *jcr, int stream, FF_PKT *ff_pkt, DIGEST *digest, goto err; } - Dmsg2(400, "GZIP compressed len=%d uncompressed len=%d\n", compress_len, + Dmsg2(400, "GZIP compressed len=%d uncompressed len=%d\n", compress_len, sd->msglen); sd->msglen = compress_len; /* set compressed length */ @@ -1111,11 +1112,10 @@ static int send_data(JCR *jcr, int stream, FF_PKT *ff_pkt, DIGEST *digest, Dmsg3(400, "cbuf=0x%x rbuf=0x%x len=%u\n", cbuf, rbuf, sd->msglen); - lzores = lzo1x_1_compress((const unsigned char*)rbuf, sd->msglen, cbuf2, + lzores = lzo1x_1_compress((const unsigned char*)rbuf, sd->msglen, cbuf2, &len, jcr->LZO_compress_workset); compress_len = len; - if (lzores == LZO_E_OK && compress_len <= max_compress_len) - { + if (lzores == LZO_E_OK && compress_len <= max_compress_len) { /* complete header */ ser_uint32(COMPRESS_LZO1X); ser_uint32(compress_len); @@ -1128,7 +1128,7 @@ static int send_data(JCR *jcr, int stream, FF_PKT *ff_pkt, DIGEST *digest, goto err; } - Dmsg2(400, "LZO compressed len=%d uncompressed len=%d\n", compress_len, + Dmsg2(400, "LZO compressed len=%d uncompressed len=%d\n", compress_len, sd->msglen); compress_len += sizeof(comp_stream_header); /* add size of header */ @@ -1173,13 +1173,13 @@ static int send_data(JCR *jcr, int stream, FF_PKT *ff_pkt, DIGEST *digest, } /** Encrypt the input block */ - if (crypto_cipher_update(cipher_ctx, cipher_input, cipher_input_len, + if (crypto_cipher_update(cipher_ctx, cipher_input, cipher_input_len, (uint8_t *)&jcr->crypto.crypto_buf[initial_len], &encrypted_len)) { if ((initial_len + encrypted_len) == 0) { /** No full block of data available, read more data */ continue; } - Dmsg2(400, "encrypted len=%d unencrypted len=%d\n", encrypted_len, + Dmsg2(400, "encrypted len=%d unencrypted len=%d\n", encrypted_len, sd->msglen); sd->msglen = initial_len + encrypted_len; /* set encrypted length */ } else { @@ -1216,11 +1216,11 @@ static int send_data(JCR *jcr, int stream, FF_PKT *ff_pkt, DIGEST *digest, Jmsg(jcr, M_FATAL, 0, _("Too many errors. JobErrors=%d.\n"), jcr->JobErrors); } } else if (ff_pkt->flags & FO_ENCRYPT) { - /** + /** * For encryption, we must call finalize to push out any * buffered data. */ - if (!crypto_cipher_finalize(cipher_ctx, (uint8_t *)jcr->crypto.crypto_buf, + if (!crypto_cipher_finalize(cipher_ctx, (uint8_t *)jcr->crypto.crypto_buf, &encrypted_len)) { /* Padding failed. Shouldn't happen. */ Jmsg(jcr, M_FATAL, 0, _("Encryption padding error\n")); @@ -1269,7 +1269,7 @@ err: return 0; } -bool encode_and_send_attributes(JCR *jcr, FF_PKT *ff_pkt, int &data_stream) +bool encode_and_send_attributes(JCR *jcr, FF_PKT *ff_pkt, int &data_stream) { BSOCK *sd = jcr->store_bsock; char attribs[MAXSTRING]; @@ -1310,7 +1310,6 @@ bool encode_and_send_attributes(JCR *jcr, FF_PKT *ff_pkt, int &data_stream) /* Debug code: check if we must hangup */ if (hangup && (jcr->JobFiles > (uint32_t)hangup)) { - jcr->setJobStatus(JS_Incomplete); Jmsg1(jcr, M_FATAL, 0, "Debug hangup requested after %d files.\n", hangup); set_hangup(0); return false; @@ -1321,7 +1320,7 @@ bool encode_and_send_attributes(JCR *jcr, FF_PKT *ff_pkt, int &data_stream) * */ if (!sd->fsend("%ld %d 0", jcr->JobFiles, attr_stream)) { - if (!jcr->is_canceled() && !jcr->is_incomplete()) { + if (!jcr->is_canceled()) { Jmsg1(jcr, M_FATAL, 0, _("Network send error to SD. ERR=%s\n"), sd->bstrerror()); } @@ -1360,7 +1359,7 @@ bool encode_and_send_attributes(JCR *jcr, FF_PKT *ff_pkt, int &data_stream) case FT_LNKSAVED: Dmsg3(300, "Link %d %s to %s\n", jcr->JobFiles, ff_pkt->fname, ff_pkt->link); stat = sd->fsend("%ld %d %s%c%s%c%s%c%s%c%u%c", jcr->JobFiles, - ff_pkt->type, ff_pkt->fname, 0, attribs, 0, + ff_pkt->type, ff_pkt->fname, 0, attribs, 0, ff_pkt->link, 0, attribsEx, 0, ff_pkt->delta_seq, 0); break; case FT_DIREND: @@ -1368,7 +1367,7 @@ bool encode_and_send_attributes(JCR *jcr, FF_PKT *ff_pkt, int &data_stream) case FT_JUNCTION: /* Here link is the canonical filename (i.e. with trailing slash) */ stat = sd->fsend("%ld %d %s%c%s%c%c%s%c%u%c", jcr->JobFiles, - ff_pkt->type, ff_pkt->link, 0, attribs, 0, 0, + ff_pkt->type, ff_pkt->link, 0, attribs, 0, 0, attribsEx, 0, ff_pkt->delta_seq, 0); break; case FT_PLUGIN_CONFIG: @@ -1438,7 +1437,7 @@ static bool do_strip(int count, char *in) int numsep = 0; /** Copy to first path separator -- Win32 might have c: ... */ - while (*in && !IsPathSeparator(*in)) { + while (*in && !IsPathSeparator(*in)) { out++; in++; } if (*in) { /* Not at the end of the string */ @@ -1462,7 +1461,7 @@ static bool do_strip(int count, char *in) *out++ = *in++; } *out = 0; - Dmsg4(500, "stripped=%d count=%d numsep=%d sep>count=%d\n", + Dmsg4(500, "stripped=%d count=%d numsep=%d sep>count=%d\n", stripped, count, numsep, numsep>count); return stripped==count && numsep>count; } @@ -1481,7 +1480,7 @@ void strip_path(FF_PKT *ff_pkt) return; } if (!ff_pkt->fname_save) { - ff_pkt->fname_save = get_pool_memory(PM_FNAME); + ff_pkt->fname_save = get_pool_memory(PM_FNAME); ff_pkt->link_save = get_pool_memory(PM_FNAME); } pm_strcpy(ff_pkt->fname_save, ff_pkt->fname); @@ -1503,7 +1502,7 @@ void strip_path(FF_PKT *ff_pkt) if (!do_strip(ff_pkt->strip_path, ff_pkt->fname)) { unstrip_path(ff_pkt); goto rtn; - } + } /** Strip links but not symlinks */ if (ff_pkt->type != FT_LNK && ff_pkt->fname != ff_pkt->link) { if (!do_strip(ff_pkt->strip_path, ff_pkt->link)) { @@ -1512,7 +1511,7 @@ void strip_path(FF_PKT *ff_pkt) } rtn: - Dmsg3(100, "fname=%s stripped=%s link=%s\n", ff_pkt->fname_save, ff_pkt->fname, + Dmsg3(100, "fname=%s stripped=%s link=%s\n", ff_pkt->fname_save, ff_pkt->fname, ff_pkt->link); } @@ -1538,7 +1537,7 @@ static void close_vss_backup_session(JCR *jcr) /* STOP VSS ON WIN32 */ /* tell vss to close the backup session */ if (jcr->VSS) { - if (g_pVSSClient->CloseBackup()) { + if (g_pVSSClient->CloseBackup()) { /* inform user about writer states */ for (int i=0; i<(int)g_pVSSClient->GetWriterCount(); i++) { int msg_type = M_INFO; diff --git a/bacula/src/filed/bacula-fd.conf.in b/bacula/src/filed/bacula-fd.conf.in index 36f1061b5d..67171a9cd6 100644 --- a/bacula/src/filed/bacula-fd.conf.in +++ b/bacula/src/filed/bacula-fd.conf.in @@ -34,6 +34,7 @@ FileDaemon { # this is me WorkingDirectory = @working_dir@ Pid Directory = @piddir@ Maximum Concurrent Jobs = 20 +# Plugin Directory = @plugindir@ } # Send all messages except skipped files back to Director diff --git a/bacula/src/filed/estimate.c b/bacula/src/filed/estimate.c index c48a6f1a0b..26fe43fde6 100644 --- a/bacula/src/filed/estimate.c +++ b/bacula/src/filed/estimate.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2001-2008 Free Software Foundation Europe e.V. + Copyright (C) 2001-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Bacula File Daemon estimate.c @@ -53,7 +41,7 @@ int make_estimate(JCR *jcr) /* in accurate mode, we overwrite the find_one check function */ if (jcr->accurate) { set_find_changed_function((FF_PKT *)jcr->ff, accurate_check_file); - } + } stat = find_files(jcr, (FF_PKT *)jcr->ff, tally_file, plugin_estimate); accurate_free(jcr); @@ -64,7 +52,7 @@ int make_estimate(JCR *jcr) * Called here by find() for each file included. * */ -static int tally_file(JCR *jcr, FF_PKT *ff_pkt, bool top_level) +static int tally_file(JCR *jcr, FF_PKT *ff_pkt, bool top_level) { ATTR attr; @@ -121,5 +109,6 @@ static int tally_file(JCR *jcr, FF_PKT *ff_pkt, bool top_level) attr.olname = (POOLMEM *)ff_pkt->link; print_ls_output(jcr, &attr); } + /* TODO: Add loop over jcr->file_list to get Accurate deleted files*/ return 1; } diff --git a/bacula/src/filed/fd_plugins.c b/bacula/src/filed/fd_plugins.c index 994c11a4f8..84fba4b946 100644 --- a/bacula/src/filed/fd_plugins.c +++ b/bacula/src/filed/fd_plugins.c @@ -1,35 +1,23 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2007-2012 Free Software Foundation Europe e.V. + Copyright (C) 2007-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation, which is - listed in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /** * Main program to test loading and running Bacula plugins. * Destined to become Bacula pluginloader, ... * - * Kern Sibbald, October 2007 + * Written by Kern Sibbald, October 2007 */ #include "bacula.h" #include "filed.h" @@ -51,7 +39,7 @@ extern int save_file(JCR *jcr, FF_PKT *ff_pkt, bool top_level); extern bool check_changes(JCR *jcr, FF_PKT *ff_pkt); /* Function pointers to be set here */ -extern DLL_IMP_EXP int (*plugin_bopen)(BFILE *bfd, const char *fname, int flags, mode_t mode); +extern DLL_IMP_EXP int (*plugin_bopen)(BFILE *bfd, const char *fname, uint64_t flags, mode_t mode); extern DLL_IMP_EXP int (*plugin_bclose)(BFILE *bfd); extern DLL_IMP_EXP ssize_t (*plugin_bread)(BFILE *bfd, void *buf, size_t count); extern DLL_IMP_EXP ssize_t (*plugin_bwrite)(BFILE *bfd, void *buf, size_t count); @@ -86,7 +74,7 @@ static bRC baculaAcceptFile(bpContext *ctx, struct save_pkt *sp); * These will be plugged into the global pointer structure for * the findlib. */ -static int my_plugin_bopen(BFILE *bfd, const char *fname, int flags, mode_t mode); +static int my_plugin_bopen(BFILE *bfd, const char *fname, uint64_t flags, mode_t mode); static int my_plugin_bclose(BFILE *bfd); static ssize_t my_plugin_bread(BFILE *bfd, void *buf, size_t count); static ssize_t my_plugin_bwrite(BFILE *bfd, void *buf, size_t count); @@ -96,7 +84,7 @@ static boffset_t my_plugin_blseek(BFILE *bfd, boffset_t offset, int whence); /* Bacula info */ static bInfo binfo = { sizeof(bInfo), - FD_PLUGIN_INTERFACE_VERSION + FD_PLUGIN_INTERFACE_VERSION }; /* Bacula entry points */ @@ -122,7 +110,7 @@ static bFuncs bfuncs = { baculaAcceptFile }; -/* +/* * Bacula private context */ struct bacula_ctx { @@ -148,7 +136,7 @@ static bool for_this_plugin(Plugin *plugin, char *name, int len) } if (strcmp("*all*", name) == 0) { /* new v6.0 name for VSS job metadata */ return true; - } + } /* Check if this is the correct plugin */ if (len == plugin->file_len && strncmp(plugin->file, name, len) == 0) { return true; @@ -180,7 +168,7 @@ bool is_plugin_disabled(JCR *jcr) * Create a plugin event When receiving bEventCancelCommand, this function is * called by an other thread. */ -void generate_plugin_event(JCR *jcr, bEventType eventType, void *value) +void generate_plugin_event(JCR *jcr, bEventType eventType, void *value) { bpContext *plugin_ctx; bEvent event; @@ -195,7 +183,7 @@ void generate_plugin_event(JCR *jcr, bEventType eventType, void *value) if (!bplugin_list || !jcr || !jcr->plugin_ctx_list) { return; /* Return if no plugins loaded */ } - + /* * Some events are sent to only a particular plugin or must be * called even if the job is canceled @@ -253,17 +241,18 @@ void generate_plugin_event(JCR *jcr, bEventType eventType, void *value) */ foreach_alist_index(i, plugin, bplugin_list) { if (!for_this_plugin(plugin, name, len)) { - Dmsg2(dbglvl, "Not for this plugin name=%s NULL=%d\n", + Dmsg2(dbglvl, "Not for this plugin name=%s NULL=%d\n", name, name==NULL?1:0); continue; } /* - * Note, at this point do not change + * Note, at this point do not change * jcr->plugin or jcr->plugin_ctx */ Dsm_check(999); plugin_ctx = &plugin_ctx_list[i]; if (is_plugin_disabled(plugin_ctx)) { + Dmsg1(50, "Plugin %s disabled\n", plugin->file); continue; } if (eventType == bEventEndRestoreJob) { @@ -322,7 +311,7 @@ bool plugin_check_file(JCR *jcr, char *fname) } /* Get the first part of the the plugin command - * systemstate:/@SYSTEMSTATE/ + * systemstate:/@SYSTEMSTATE/ * => ret = 11 * => can use for_this_plugin(plug, cmd, ret); * @@ -371,14 +360,14 @@ static void update_ff_pkt(FF_PKT *ff_pkt, struct save_pkt *sp) ff_pkt->flags &= ~FO_DELTA; /* clean delta sequence number */ ff_pkt->delta_seq = 0; } - + if (sp->flags & FO_OFFSETS) { ff_pkt->flags |= FO_OFFSETS; } else { ff_pkt->flags &= ~FO_OFFSETS; } /* Sparse code doesn't work with plugins - * that use FIFO or STDOUT/IN to communicate + * that use FIFO or STDOUT/IN to communicate */ if (sp->flags & FO_SPARSE) { ff_pkt->flags |= FO_SPARSE; @@ -399,6 +388,7 @@ bRC plugin_option_handle_file(JCR *jcr, FF_PKT *ff_pkt, struct save_pkt *sp) { Plugin *plugin; bRC ret = bRC_Error; + bool found=false; char *cmd = ff_pkt->plugin; int len; int i=0; @@ -434,6 +424,8 @@ bRC plugin_option_handle_file(JCR *jcr, FF_PKT *ff_pkt, struct save_pkt *sp) continue; } + found=true; + Dsm_check(999); if (is_plugin_disabled(&plugin_ctx_list[i])) { goto bail_out; @@ -441,10 +433,10 @@ bRC plugin_option_handle_file(JCR *jcr, FF_PKT *ff_pkt, struct save_pkt *sp) jcr->plugin_ctx = &plugin_ctx_list[i]; jcr->plugin = plugin; - - ret = plug_func(plugin)->handlePluginEvent(&plugin_ctx_list[i], + + ret = plug_func(plugin)->handlePluginEvent(&plugin_ctx_list[i], &event, sp); - + /* TODO: would be better to set this in save_file() */ if (ret == bRC_OK) { jcr->opt_plugin = true; @@ -463,11 +455,14 @@ bRC plugin_option_handle_file(JCR *jcr, FF_PKT *ff_pkt, struct save_pkt *sp) goto bail_out; } /* end foreach loop */ bail_out: + if (!found) { + Jmsg1(jcr, M_FATAL, 0, "Options plugin \"%s\" not found.\n", cmd); + } Dsm_check(999); return ret; } -/** +/** * Sequence of calls for a backup: * 1. plugin_save() here is called with ff_pkt * 2. we find the plugin requested on the command string @@ -513,7 +508,7 @@ int plugin_save(JCR *jcr, FF_PKT *ff_pkt, bool top_level) if (!for_this_plugin(plugin, cmd, len)) { continue; } - /* + /* * We put the current plugin pointer, and the plugin context * into the jcr, because during save_file(), the plugin * will be called many times and these values are needed. @@ -531,7 +526,7 @@ int plugin_save(JCR *jcr, FF_PKT *ff_pkt, bool top_level) goto bail_out; } /* Loop getting filenames to backup then saving them */ - while (!jcr->is_job_canceled()) { + while (!jcr->is_job_canceled()) { memset(&sp, 0, sizeof(sp)); sp.pkt_size = sizeof(sp); sp.pkt_end = sizeof(sp); @@ -554,7 +549,7 @@ int plugin_save(JCR *jcr, FF_PKT *ff_pkt, bool top_level) jcr->plugin_sp = &sp; ff_pkt = jcr->ff; /* - * Copy fname and link because save_file() zaps them. This + * Copy fname and link because save_file() zaps them. This * avoids zaping the plugin's strings. */ ff_pkt->type = sp.type; @@ -590,7 +585,7 @@ int plugin_save(JCR *jcr, FF_PKT *ff_pkt, bool top_level) Dmsg2(dbglvl, "startBackup returned type=%d, fname=%s\n", sp.type, sp.fname); if (sp.object) { Dmsg2(dbglvl, "index=%d object=%s\n", sp.index, sp.object); - } + } /* Call Bacula core code to backup the plugin's file */ save_file(jcr, ff_pkt, true); bRC rc = plug_func(plugin)->endBackupFile(jcr->plugin_ctx); @@ -616,7 +611,7 @@ bail_out: } -/** +/** * Sequence of calls for a estimate: * 1. plugin_estimate() here is called with ff_pkt * 2. we find the plugin requested on the command string @@ -658,7 +653,7 @@ int plugin_estimate(JCR *jcr, FF_PKT *ff_pkt, bool top_level) if (!for_this_plugin(plugin, cmd, len)) { continue; } - /* + /* * We put the current plugin pointer, and the plugin context * into the jcr, because during save_file(), the plugin * will be called many times and these values are needed. @@ -676,7 +671,7 @@ int plugin_estimate(JCR *jcr, FF_PKT *ff_pkt, bool top_level) goto bail_out; } /* Loop getting filenames to backup then saving them */ - while (!jcr->is_job_canceled()) { + while (!jcr->is_job_canceled()) { Dsm_check(999); memset(&sp, 0, sizeof(sp)); sp.pkt_size = sizeof(sp); @@ -778,7 +773,7 @@ bool send_plugin_name(JCR *jcr, BSOCK *sd, bool start) if (jcr->is_job_canceled()) { return false; } - + if (start) { index++; /* JobFiles not incremented yet */ } @@ -819,7 +814,7 @@ bool send_plugin_name(JCR *jcr, BSOCK *sd, bool start) * Returns: true if start of stream * false if end of steam */ -bool plugin_name_stream(JCR *jcr, char *name) +bool plugin_name_stream(JCR *jcr, char *name) { char *p = name; char *cmd; @@ -844,7 +839,7 @@ bool plugin_name_stream(JCR *jcr, char *name) cmd = p; } else { /* - * End of plugin data, notify plugin, then clear flags + * End of plugin data, notify plugin, then clear flags */ Dmsg2(dbglvl, "End plugin data plugin=%p ctx=%p\n", jcr->plugin, jcr->plugin_ctx); if (jcr->plugin && jcr->plugin->restoreFileStarted) { @@ -862,7 +857,7 @@ bool plugin_name_stream(JCR *jcr, char *name) if (!plugin_ctx_list) { goto bail_out; } - + /* * After this point, we are dealing with a restore start */ @@ -871,7 +866,7 @@ bool plugin_name_stream(JCR *jcr, char *name) } /* - * Search for correct plugin as specified on the command + * Search for correct plugin as specified on the command */ Dsm_check(999); foreach_alist_index(i, plugin, bplugin_list) { @@ -888,8 +883,8 @@ bool plugin_name_stream(JCR *jcr, char *name) goto bail_out; } Dmsg1(dbglvl, "Restore Command plugin = %s\n", cmd); - event.eventType = bEventRestoreCommand; - if (plug_func(plugin)->handlePluginEvent(jcr->plugin_ctx, + event.eventType = bEventRestoreCommand; + if (plug_func(plugin)->handlePluginEvent(jcr->plugin_ctx, &event, cmd) != bRC_OK) { Dmsg1(dbglvl, "Handle event failed. Plugin=%s\n", cmd); goto bail_out; @@ -960,7 +955,7 @@ int plugin_create_file(JCR *jcr, ATTR *attr, BFILE *bfd, int replace) rp.RegexWhere = jcr->RegexWhere; rp.replace = jcr->replace; rp.create_status = CF_ERROR; - Dmsg4(dbglvl, "call plugin createFile stream=%d type=%d LinkFI=%d File=%s\n", + Dmsg4(dbglvl, "call plugin createFile stream=%d type=%d LinkFI=%d File=%s\n", rp.stream, rp.type, rp.LinkFI, rp.ofname); if (rp.attrEx) { Dmsg1(dbglvl, "attrEx=\"%s\"\n", rp.attrEx); @@ -1055,7 +1050,7 @@ bool plugin_set_attributes(JCR *jcr, ATTR *attr, BFILE *ofd) rp.create_status = CF_ERROR; plug_func(plugin)->setFileAttributes(jcr->plugin_ctx, &rp); - + if (rp.create_status == CF_CORE) { set_attributes(jcr, attr, ofd); } else { @@ -1122,7 +1117,7 @@ void load_fd_plugins(const char *plugin_dir) plugin_blseek = my_plugin_blseek; Dsm_check(999); - /* + /* * Verify that the plugin is acceptable, and print information * about it. */ @@ -1144,7 +1139,7 @@ static bool is_plugin_compatible(Plugin *plugin) pInfo *info = (pInfo *)plugin->pinfo; Dmsg0(dbglvl, "is_plugin_compatible called\n"); Dsm_check(999); - if (debug_level >= 50) { + if (chk_dbglvl(50)) { dump_fd_plugin(plugin, stdin); } if (strcmp(info->plugin_magic, FD_PLUGIN_MAGIC) != 0) { @@ -1176,7 +1171,7 @@ static bool is_plugin_compatible(Plugin *plugin) plugin->file, sizeof(pInfo), info->size); return false; } - + Dsm_check(999); return true; } @@ -1221,6 +1216,7 @@ void new_plugins(JCR *jcr) plugin_ctx_list[i].bContext = (void *)b_ctx; /* Bacula private context */ plugin_ctx_list[i].pContext = NULL; if (plug_func(plugin)->newPlugin(&plugin_ctx_list[i]) != bRC_OK) { + Dmsg1(000, "Plugin %s will be disabled\n", plugin->file); b_ctx->disabled = true; } } @@ -1246,7 +1242,7 @@ void free_plugins(JCR *jcr) Dsm_check(999); bpContext *plugin_ctx_list = (bpContext *)jcr->plugin_ctx_list; Dmsg2(dbglvl, "Free instance plugin_ctx=%p JobId=%d\n", plugin_ctx_list, jcr->JobId); - foreach_alist_index(i, plugin, bplugin_list) { + foreach_alist_index(i, plugin, bplugin_list) { /* Free the plugin instance */ plug_func(plugin)->freePlugin(&plugin_ctx_list[i]); free(plugin_ctx_list[i].bContext); /* free Bacula private context */ @@ -1257,7 +1253,7 @@ void free_plugins(JCR *jcr) jcr->plugin_ctx_list = NULL; } -static int my_plugin_bopen(BFILE *bfd, const char *fname, int flags, mode_t mode) +static int my_plugin_bopen(BFILE *bfd, const char *fname, uint64_t flags, mode_t mode) { JCR *jcr = bfd->jcr; Plugin *plugin = (Plugin *)jcr->plugin; @@ -1278,6 +1274,7 @@ static int my_plugin_bopen(BFILE *bfd, const char *fname, int flags, mode_t mode io.mode = mode; io.win32 = false; io.lerror = 0; + io.status = -1; plug_func(plugin)->pluginIO(jcr->plugin_ctx, &io); bfd->berrno = io.io_errno; if (io.win32) { @@ -1309,6 +1306,7 @@ static int my_plugin_bclose(BFILE *bfd) io.buf = NULL; io.win32 = false; io.lerror = 0; + io.status = -1; plug_func(plugin)->pluginIO(jcr->plugin_ctx, &io); bfd->berrno = io.io_errno; if (io.win32) { @@ -1341,6 +1339,7 @@ static ssize_t my_plugin_bread(BFILE *bfd, void *buf, size_t count) io.win32 = false; io.offset = 0; io.lerror = 0; + io.status = -1; plug_func(plugin)->pluginIO(jcr->plugin_ctx, &io); bfd->offset = io.offset; bfd->berrno = io.io_errno; @@ -1373,6 +1372,7 @@ static ssize_t my_plugin_bwrite(BFILE *bfd, void *buf, size_t count) io.buf = (char *)buf; io.win32 = false; io.lerror = 0; + io.status = -1; plug_func(plugin)->pluginIO(jcr->plugin_ctx, &io); bfd->berrno = io.io_errno; if (io.win32) { @@ -1448,6 +1448,10 @@ static bRC baculaGetValue(bpContext *ctx, bVariable var, void *value) case bVarBEEF: *((int *)value) = beef; break; + case bVarPrevJobName: + break; + case bVarPrefixLinks: + break; default: break; } @@ -1549,12 +1553,12 @@ static bRC baculaSetValue(bpContext *ctx, bVariable var, void *value) if (!jcr) { return bRC_Error; } -// Dmsg1(dbglvl, "Bacula: jcr=%p\n", jcr); +// Dmsg1(dbglvl, "Bacula: jcr=%p\n", jcr); switch (var) { case bVarFileSeen: if (!accurate_mark_file_as_seen(jcr, (char *)value)) { return bRC_Error; - } + } break; default: break; @@ -1680,7 +1684,7 @@ static bRC baculaAddExclude(bpContext *ctx, const char *file) return bRC_Error; } - if (!bctx->exclude) { + if (!bctx->exclude) { bctx->exclude = new_exclude(jcr); } @@ -1831,7 +1835,7 @@ static bRC baculaNewPreInclude(bpContext *ctx) return bRC_OK; } -/* +/* * Check if a file have to be backuped using Accurate code */ static bRC baculaCheckChanges(bpContext *ctx, struct save_pkt *sp) @@ -1848,10 +1852,10 @@ static bRC baculaCheckChanges(bpContext *ctx, struct save_pkt *sp) if (!sp) { goto bail_out; } - + ff_pkt = jcr->ff; /* - * Copy fname and link because save_file() zaps them. This + * Copy fname and link because save_file() zaps them. This * avoids zaping the plugin's strings. */ ff_pkt->type = sp->type; @@ -1871,7 +1875,7 @@ static bRC baculaCheckChanges(bpContext *ctx, struct save_pkt *sp) } /* check_changes() can update delta sequence number, return it to the - * plugin + * plugin */ sp->delta_seq = ff_pkt->delta_seq; sp->accurate_found = ff_pkt->accurate_found; @@ -1882,7 +1886,7 @@ bail_out: return ret; } -/* +/* * Check if a file would be saved using current Include/Exclude code */ static bRC baculaAcceptFile(bpContext *ctx, struct save_pkt *sp) @@ -1902,7 +1906,7 @@ static bRC baculaAcceptFile(bpContext *ctx, struct save_pkt *sp) if (!sp) { goto bail_out; } - + ff_pkt = jcr->ff; /* Probably not needed, but keep a copy */ @@ -1927,7 +1931,7 @@ bail_out: #ifdef TEST_PROGRAM -int (*plugin_bopen)(JCR *jcr, const char *fname, int flags, mode_t mode) = NULL; +int (*plugin_bopen)(JCR *jcr, const char *fname, uint64_t flags, mode_t mode) = NULL; int (*plugin_bclose)(JCR *jcr) = NULL; ssize_t (*plugin_bread)(JCR *jcr, void *buf, size_t count) = NULL; ssize_t (*plugin_bwrite)(JCR *jcr, void *buf, size_t count) = NULL; @@ -1951,7 +1955,7 @@ int main(int argc, char *argv[]) JCR *jcr2 = &mjcr2; strcpy(my_name, "test-fd"); - + getcwd(plugin_dir, sizeof(plugin_dir)-1); load_fd_plugins(plugin_dir); diff --git a/bacula/src/filed/fd_plugins.h b/bacula/src/filed/fd_plugins.h index 40994f814c..855327e0b5 100644 --- a/bacula/src/filed/fd_plugins.h +++ b/bacula/src/filed/fd_plugins.h @@ -1,38 +1,26 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2007-2012 Free Software Foundation Europe e.V. + Copyright (C) 2007-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation, which is - listed in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Application Programming Interface (API) definition for Bacula Plugins * - * Kern Sibbald, October 2007 + * Written by Kern Sibbald, October 2007 * */ - -#ifndef __FD_PLUGINS_H + +#ifndef __FD_PLUGINS_H #define __FD_PLUGINS_H #ifndef _BACULA_H @@ -81,7 +69,7 @@ struct restore_object_pkt { char *object_name; /* Object name */ char *object; /* restore object data to save */ char *plugin_name; /* Plugin name */ - int32_t object_type; /* FT_xx for this file */ + int32_t object_type; /* FT_xx for this file */ int32_t object_len; /* restore object length */ int32_t object_full_len; /* restore object uncompressed length */ int32_t object_index; /* restore object index */ @@ -99,7 +87,7 @@ struct save_pkt { char *fname; /* Full path and filename */ char *link; /* Link name if any */ struct stat statp; /* System stat() packet for file */ - int32_t type; /* FT_xx for this file */ + int32_t type; /* FT_xx for this file */ uint32_t flags; /* Bacula internal flags */ bool no_read; /* During the save, the file should not be saved */ bool portable; /* set if data format is portable */ @@ -153,7 +141,7 @@ struct io_pkt { char *buf; /* read/write buffer */ const char *fname; /* open filename */ int32_t status; /* return status */ - int32_t io_errno; /* errno code */ + int32_t io_errno; /* errno code */ int32_t lerror; /* Win32 error code */ int32_t whence; /* lseek argument */ boffset_t offset; /* lseek argument */ @@ -215,9 +203,9 @@ typedef enum { bEventEndFileSet = 19, bEventPluginCommand = 20, /* Sent during FileSet creation */ bEventVssBeforeCloseRestore = 21, - /* Add drives to VSS snapshot + /* Add drives to VSS snapshot * argument: char[27] drivelist - * You need to add them without duplicates, + * You need to add them without duplicates, * see fd_common.h add_drive() copy_drives() to get help */ bEventVssPrepareSnapshot = 22, @@ -244,7 +232,7 @@ void new_plugins(JCR *jcr); void free_plugins(JCR *jcr); void generate_plugin_event(JCR *jcr, bEventType event, void *value=NULL); bool send_plugin_name(JCR *jcr, BSOCK *sd, bool start); -bool plugin_name_stream(JCR *jcr, char *name); +bool plugin_name_stream(JCR *jcr, char *name); int plugin_create_file(JCR *jcr, ATTR *attr, BFILE *bfd, int replace); bool plugin_set_attributes(JCR *jcr, ATTR *attr, BFILE *ofd); int plugin_save(JCR *jcr, FF_PKT *ff_pkt, bool top_level); @@ -257,21 +245,21 @@ bRC plugin_option_handle_file(JCR *jcr, FF_PKT *ff_pkt, struct save_pkt *sp); extern "C" { #endif -/* - * Bacula interface version and function pointers -- +/* + * Bacula interface version and function pointers -- * i.e. callbacks from the plugin to Bacula */ -typedef struct s_baculaFuncs { +typedef struct s_baculaFuncs { uint32_t size; uint32_t version; bRC (*registerBaculaEvents)(bpContext *ctx, ...); bRC (*getBaculaValue)(bpContext *ctx, bVariable var, void *value); bRC (*setBaculaValue)(bpContext *ctx, bVariable var, void *value); - bRC (*JobMessage)(bpContext *ctx, const char *file, int line, - int type, utime_t mtime, const char *fmt, ...); + bRC (*JobMessage)(bpContext *ctx, const char *file, int line, + int type, utime_t mtime, const char *fmt, ...); bRC (*DebugMessage)(bpContext *ctx, const char *file, int line, int level, const char *fmt, ...); - void *(*baculaMalloc)(bpContext *ctx, const char *file, int line, + void *(*baculaMalloc)(bpContext *ctx, const char *file, int line, size_t size); void (*baculaFree)(bpContext *ctx, const char *file, int line, void *mem); bRC (*AddExclude)(bpContext *ctx, const char *file); @@ -300,9 +288,9 @@ typedef enum { pVarDescription = 2 } pVariable; -# define FD_PLUGIN_MAGIC "*FDPluginData*" +# define FD_PLUGIN_MAGIC "*FDPluginData*" -#define FD_PLUGIN_INTERFACE_VERSION 7 +#define FD_PLUGIN_INTERFACE_VERSION ( 12 ) typedef struct s_pluginInfo { uint32_t size; @@ -319,7 +307,7 @@ typedef struct s_pluginInfo { * This is a set of function pointers that Bacula can call * within the plugin. */ -typedef struct s_pluginFuncs { +typedef struct s_pluginFuncs { uint32_t size; uint32_t version; bRC (*newPlugin)(bpContext *ctx); diff --git a/bacula/src/filed/filed.c b/bacula/src/filed/filed.c index 9526879b52..69d5aa95f4 100644 --- a/bacula/src/filed/filed.c +++ b/bacula/src/filed/filed.c @@ -1,34 +1,22 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2010 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Bacula File Daemon * - * Kern Sibbald, March MM + * Written by Kern Sibbald, March MM * */ @@ -36,21 +24,8 @@ #include "filed.h" #include "lib/mntent_cache.h" -#ifdef HAVE_PYTHON - -#undef _POSIX_C_SOURCE -#include - -#include "lib/pythonlib.h" - -/* Imported Functions */ -extern PyObject *job_getattr(PyObject *self, char *attrname); -extern int job_setattr(PyObject *self, char *attrname, PyObject *value); - -#endif /* HAVE_PYTHON */ - /* Imported Functions */ -extern void *handle_client_request(void *dir_sock); +extern void *handle_connection_request(void *dir_sock); extern bool parse_fd_config(CONFIG *config, const char *configfile, int exit_code); /* Forward referenced functions */ @@ -60,6 +35,7 @@ static bool check_resources(); CLIENT *me; /* my resource */ bool no_signals = false; void *start_heap; +extern struct s_cmds cmds[]; #define CONFIG_FILE "bacula-fd.conf" /* default config file */ @@ -73,21 +49,22 @@ static void usage() { fprintf(stderr, _( PROG_COPYRIGHT -"\nVersion: %s (%s)\n\n" +"\n%sVersion: %s (%s)\n\n" "Usage: bacula-fd [-f -s] [-c config_file] [-d debug_level]\n" -" -c use as configuration file\n" -" -d set debug level to \n" -" -dt print a timestamp in debug output\n" -" -f run in foreground (for debugging)\n" -" -g groupid\n" -" -k keep readall capabilities\n" -" -m print kaboom output (for debugging)\n" -" -s no signals (for debugging)\n" -" -t test configuration file and exit\n" -" -u userid\n" -" -v verbose user messages\n" -" -? print this message.\n" -"\n"), 2000, VERSION, BDATE); +" -c use as configuration file\n" +" -d [,] set debug level to , debug tags to \n" +" -dt print a timestamp in debug output\n" +" -f run in foreground (for debugging)\n" +" -g groupid\n" +" -k keep readall capabilities\n" +" -m print kaboom output (for debugging)\n" +" -s no signals (for debugging)\n" +" -t test configuration file and exit\n" +" -T set trace on\n" +" -u userid\n" +" -v verbose user messages\n" +" -? print this message.\n" +"\n"), 2000, "", VERSION, BDATE); exit(1); } @@ -109,9 +86,6 @@ int main (int argc, char *argv[]) bool keep_readall_caps = false; char *uid = NULL; char *gid = NULL; -#ifdef HAVE_PYTHON - init_python_interpreter_args python_args; -#endif /* HAVE_PYTHON */ start_heap = sbrk(0); setlocale(LC_ALL, ""); @@ -123,7 +97,7 @@ int main (int argc, char *argv[]) init_msg(NULL, NULL); daemon_start_time = time(NULL); - while ((ch = getopt(argc, argv, "c:d:fg:kmstu:v?")) != -1) { + while ((ch = getopt(argc, argv, "c:d:fg:kmstTu:v?D:")) != -1) { switch (ch) { case 'c': /* configuration file */ if (configfile != NULL) { @@ -136,10 +110,18 @@ int main (int argc, char *argv[]) if (*optarg == 't') { dbg_timestamp = true; } else { + char *p; + /* We probably find a tag list -d 10,sql,bvfs */ + if ((p = strchr(optarg, ',')) != NULL) { + *p = 0; + } debug_level = atoi(optarg); if (debug_level <= 0) { debug_level = 1; } + if (p) { + debug_parse_tags(p+1, &debug_level); + } } break; @@ -167,6 +149,10 @@ int main (int argc, char *argv[]) test_config = true; break; + case 'T': + set_trace(true); + break; + case 'u': /* set userid */ uid = optarg; break; @@ -252,18 +238,6 @@ int main (int argc, char *argv[]) me += 1000000; #endif -#ifdef HAVE_PYTHON - python_args.progname = me->hdr.name; - python_args.scriptdir = me->scripts_directory; - python_args.modulename = "FDStartUp"; - python_args.configfile = configfile; - python_args.workingdir = me->working_directory; - python_args.job_getattr = job_getattr; - python_args.job_setattr = job_setattr; - - init_python_interpreter(&python_args); -#endif /* HAVE_PYTHON */ - if (!no_signals) { start_watchdog(); /* start watchdog thread */ init_jcr_subsystem(); /* start JCR watchdogs etc. */ @@ -275,7 +249,8 @@ int main (int argc, char *argv[]) foreach_dlist(p, me->FDaddrs) { Dmsg1(10, "filed: listening on port %d\n", p->get_port_host_order()); } - bnet_thread_server(me->FDaddrs, me->MaxConcurrentJobs, &dir_workq, handle_client_request); + bnet_thread_server(me->FDaddrs, me->MaxConcurrentJobs, &dir_workq, + handle_connection_request); terminate_filed(0); exit(0); /* should never get here */ @@ -326,6 +301,9 @@ void terminate_filed(int sig) */ static bool check_resources() { + int i; + bool found; + char *cmd; bool OK = true; DIRRES *director; bool need_tls; @@ -351,6 +329,37 @@ static bool check_resources() OK = false; } } + + /* Construct disabled command array */ + for (i=0; cmds[i].cmd; i++) { } /* Count commands */ + if (me->disable_cmds) { + me->disabled_cmds_array = (bool *)malloc(i); + memset(me->disabled_cmds_array, 0, i); + foreach_alist(cmd, me->disable_cmds) { + found = false; + for (i=0; cmds[i].cmd; i++) { + if (strncasecmp(cmds[i].cmd, cmd, strlen(cmd)) == 0) { + me->disabled_cmds_array[i] = true; + found = true; + break; + } + } + if (!found) { + Jmsg(NULL, M_FATAL, 0, _("Disable Command \"%s\" not found.\n"), + cmd); + OK = false; + } + } + } +#ifdef xxxDEBUG + for (i=0; cmds[i].cmd; i++) { } /* Count commands */ + while (i-- >= 0) { + if (me->disabled_cmds_array[i]) { + Dmsg1(050, "Command: %s disabled.\n", cmds[i].cmd); + } + } +#endif + /* tls_require implies tls_enable */ if (me->tls_require) { #ifndef HAVE_TLS @@ -378,7 +387,7 @@ static bool check_resources() me->tls_ca_certdir, me->tls_certfile, me->tls_keyfile, NULL, NULL, NULL, true); - if (!me->tls_ctx) { + if (!me->tls_ctx) { Emsg2(M_FATAL, 0, _("Failed to initialize TLS context for File daemon \"%s\" in %s.\n"), me->hdr.name, configfile); OK = false; @@ -474,6 +483,15 @@ static bool check_resources() me->pki_recipients->append(crypto_keypair_dup(me->pki_keypair)); } + /* Put a default cipher (not possible in the filed_conf.c structure */ + if (!me->pki_cipher) { + me->pki_cipher = CRYPTO_CIPHER_AES_128_CBC; + } + + /* Put a default digest (not possible in the filed_conf.c structure */ + if (!me->pki_digest) { + me->pki_digest = CRYPTO_DIGEST_DEFAULT; + } /* If additional keys have been specified, load them up */ if (me->pki_master_key_files) { @@ -509,7 +527,39 @@ static bool check_resources() OK = false; } - foreach_res(director, R_DIRECTOR) { + foreach_res(director, R_DIRECTOR) { + + /* Construct disabled command array */ + for (i=0; cmds[i].cmd; i++) { } /* Count commands */ + if (me->disable_cmds) { + director->disabled_cmds_array = (bool *)malloc(i); + memset(director->disabled_cmds_array, 0, i); + foreach_alist(cmd, director->disable_cmds) { + found = false; + for (i=0; cmds[i].cmd; i++) { + if (strncasecmp(cmds[i].cmd, cmd, strlen(cmd)) == 0) { + director->disabled_cmds_array[i] = true; + found = true; + break; + } + } + if (!found) { + Jmsg(NULL, M_FATAL, 0, _("Disable Command \"%s\" not found.\n"), + cmd); + OK = false; + } + } + } + +#ifdef xxxDEBUG + for (i=0; cmds[i].cmd; i++) { } /* Count commands */ + while (i-- >= 0) { + if (director->disabled_cmds_array[i]) { + Dmsg1(050, "Command: %s disabled for Director.\n", cmds[i].cmd); + } + } +#endif + /* tls_require implies tls_enable */ if (director->tls_require) { #ifndef HAVE_TLS @@ -553,7 +603,7 @@ static bool check_resources() director->tls_keyfile, NULL, NULL, director->tls_dhfile, director->tls_verify_peer); - if (!director->tls_ctx) { + if (!director->tls_ctx) { Emsg2(M_FATAL, 0, _("Failed to initialize TLS context for Director \"%s\" in %s.\n"), director->hdr.name, configfile); OK = false; diff --git a/bacula/src/filed/filed.h b/bacula/src/filed/filed.h index 71d26d69ec..308fb197fe 100644 --- a/bacula/src/filed/filed.h +++ b/bacula/src/filed/filed.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2001-2010 Free Software Foundation Europe e.V. + Copyright (C) 2001-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Bacula File Daemon specific configuration and defines @@ -82,6 +70,16 @@ typedef enum { #endif extern CLIENT *me; /* "Global" Client resource */ +extern bool win32decomp; /* Use decomposition of BackupRead data */ +extern bool no_win32_write_errors; /* Ignore certain errors */ void terminate_filed(int sig); +struct s_cmds { + const char *cmd; + int (*func)(JCR *); + int monitoraccess; /* specify if monitors have access to this function */ +}; + +void allow_os_suspensions(); +void prevent_os_suspensions(); diff --git a/bacula/src/filed/filed_conf.c b/bacula/src/filed/filed_conf.c index 04dc239817..7ecd4f24ef 100644 --- a/bacula/src/filed/filed_conf.c +++ b/bacula/src/filed/filed_conf.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2008 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Main configuration file parser for Bacula File Daemon (Client) @@ -44,9 +32,8 @@ * definitions as well as any specific store routines * for the resource records. * - * Kern Sibbald, September MM + * Written by Kern Sibbald, September MM * - * Version $Id$ */ #include "bacula.h" @@ -79,6 +66,10 @@ URES res_all; #endif int32_t res_all_size = sizeof(res_all); +/* Forward definition for encyption cipher/digest type */ +static void store_cipher_type(LEX *lc, RES_ITEM *item, int index, int pass); +static void store_digest_type(LEX *lc, RES_ITEM *item, int index, int pass); + /* Definition of records permitted within each * resource with the routine to process the record * information. @@ -109,6 +100,8 @@ static RES_ITEM cli_items[] = { {"pkikeypair", store_dir, ITEM(res_client.pki_keypair_file), 0, 0, 0}, {"pkisigner", store_alist_str, ITEM(res_client.pki_signing_key_files), 0, 0, 0}, {"pkimasterkey", store_alist_str, ITEM(res_client.pki_master_key_files), 0, 0, 0}, + {"pkicipher", store_cipher_type, ITEM(res_client.pki_cipher), 0, 0, 0}, + {"pkipigest", store_digest_type, ITEM(res_client.pki_digest), 0, 0, 0}, #endif {"tlsauthenticate", store_bool, ITEM(res_client.tls_authenticate), 0, 0, 0}, {"tlsenable", store_bool, ITEM(res_client.tls_enable), 0, 0, 0}, @@ -118,6 +111,8 @@ static RES_ITEM cli_items[] = { {"tlscertificate", store_dir, ITEM(res_client.tls_certfile), 0, 0, 0}, {"tlskey", store_dir, ITEM(res_client.tls_keyfile), 0, 0, 0}, {"verid", store_str, ITEM(res_client.verid), 0, 0, 0}, + {"maximumbandwidthperjob",store_speed, ITEM(res_client.max_bandwidth_per_job), 0, 0, 0}, + {"disablecommand", store_alist_str, ITEM(res_client.disable_cmds), 0, 0, 0}, {NULL, NULL, {0}, 0, 0, 0} }; @@ -138,6 +133,8 @@ static RES_ITEM dir_items[] = { {"tlskey", store_dir, ITEM(res_dir.tls_keyfile), 0, 0, 0}, {"tlsdhfile", store_dir, ITEM(res_dir.tls_dhfile), 0, 0, 0}, {"tlsallowedcn", store_alist_str, ITEM(res_dir.tls_allowed_cns), 0, 0, 0}, + {"maximumbandwidthperjob", store_speed, ITEM(res_dir.max_bandwidth_per_job), 0, 0, 0}, + {"disablecommand", store_alist_str, ITEM(res_dir.disable_cmds), 0, 0, 0}, {NULL, NULL, {0}, 0, 0, 0} }; @@ -156,6 +153,75 @@ RES_TABLE resources[] = { {NULL, NULL, 0} }; +/* Cipher/Digest keyword structure */ +struct s_ct { + const char *type_name; + int32_t type_value; +}; + +struct s_ct ciphertypes[] = { + {"aes128", CRYPTO_CIPHER_AES_128_CBC}, + {"aes192", CRYPTO_CIPHER_AES_192_CBC}, + {"aes256", CRYPTO_CIPHER_AES_256_CBC}, + {"blowfish", CRYPTO_CIPHER_BLOWFISH_CBC}, + {NULL, 0} +}; + +struct s_ct digesttypes[] = { + {"md5", CRYPTO_DIGEST_MD5}, + {"sha1", CRYPTO_DIGEST_SHA1}, + {"sha256", CRYPTO_DIGEST_SHA256}, +// {"sha512", CRYPTO_DIGEST_SHA512}, /* Not working yet */ + {NULL, 0} +}; + +/* + * Store cipher type + * + */ +static void store_cipher_type(LEX *lc, RES_ITEM *item, int index, int pass) +{ + int i; + + lex_get_token(lc, T_NAME); + /* Store the type both pass 1 and pass 2 */ + for (i=0; ciphertypes[i].type_name; i++) { + if (strcasecmp(lc->str, ciphertypes[i].type_name) == 0) { + *(uint32_t *)(item->value) = ciphertypes[i].type_value; + i = 0; + break; + } + } + if (i != 0) { + scan_err1(lc, _("Expected a Cipher Type keyword, got: %s"), lc->str); + } + scan_to_eol(lc); + set_bit(index, res_all.hdr.item_present); +} + +/* + * Store digest type + * + */ +static void store_digest_type(LEX *lc, RES_ITEM *item, int index, int pass) +{ + int i; + + lex_get_token(lc, T_NAME); + /* Store the type both pass 1 and pass 2 */ + for (i=0; digesttypes[i].type_name; i++) { + if (strcasecmp(lc->str, digesttypes[i].type_name) == 0) { + *(uint32_t *)(item->value) = digesttypes[i].type_value; + i = 0; + break; + } + } + if (i != 0) { + scan_err1(lc, _("Expected a Cipher Type keyword, got: %s"), lc->str); + } + scan_to_eol(lc); + set_bit(index, res_all.hdr.item_present); +} /* Dump contents of resource */ void dump_resource(int type, RES *reshdr, void sendit(void *sock, const char *fmt, ...), void *sock) @@ -227,7 +293,7 @@ void free_resource(RES *sres, int type) if (res->res_dir.address) { free(res->res_dir.address); } - if (res->res_dir.tls_ctx) { + if (res->res_dir.tls_ctx) { free_tls_context(res->res_dir.tls_ctx); } if (res->res_dir.tls_ca_certfile) { @@ -248,6 +314,12 @@ void free_resource(RES *sres, int type) if (res->res_dir.tls_allowed_cns) { delete res->res_dir.tls_allowed_cns; } + if (res->res_dir.disable_cmds) { + delete res->res_dir.disable_cmds; + } + if (res->res_dir.disabled_cmds_array) { + free(res->res_dir.disabled_cmds_array); + } break; case R_CLIENT: if (res->res_client.working_directory) { @@ -272,7 +344,7 @@ void free_resource(RES *sres, int type) free_addresses(res->res_client.FDsrc_addr); } - if (res->res_client.pki_keypair_file) { + if (res->res_client.pki_keypair_file) { free(res->res_client.pki_keypair_file); } if (res->res_client.pki_keypair) { @@ -302,7 +374,7 @@ void free_resource(RES *sres, int type) delete res->res_client.pki_recipients; } - if (res->res_client.tls_ctx) { + if (res->res_client.tls_ctx) { free_tls_context(res->res_client.tls_ctx); } if (res->res_client.tls_ca_certfile) { @@ -317,6 +389,12 @@ void free_resource(RES *sres, int type) if (res->res_client.tls_keyfile) { free(res->res_client.tls_keyfile); } + if (res->res_client.disable_cmds) { + delete res->res_client.disable_cmds; + } + if (res->res_client.disabled_cmds_array) { + free(res->res_client.disabled_cmds_array); + } if (res->res_client.verid) { free(res->res_client.verid); } diff --git a/bacula/src/filed/filed_conf.h b/bacula/src/filed/filed_conf.h index 903bfdf8c8..003c76b886 100644 --- a/bacula/src/filed/filed_conf.h +++ b/bacula/src/filed/filed_conf.h @@ -1,36 +1,22 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2007 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Bacula File Daemon specific configuration * * Kern Sibbald, Sep MM - * - * Version $Id$ */ /* @@ -69,7 +55,10 @@ struct DIRRES { char *tls_keyfile; /* TLS Server Key File */ char *tls_dhfile; /* TLS Diffie-Hellman Parameters */ alist *tls_allowed_cns; /* TLS Allowed Clients */ + uint64_t max_bandwidth_per_job; /* Bandwidth limitation (per director) */ TLS_CONTEXT *tls_ctx; /* Shared TLS Context */ + alist *disable_cmds; /* Commands to disable */ + bool *disabled_cmds_array; /* Disabled commands array */ }; struct CLIENT { @@ -91,6 +80,8 @@ struct CLIENT { char *pki_keypair_file; /* PKI Key Pair File */ alist *pki_signing_key_files; /* PKI Signing Key Files */ alist *pki_master_key_files; /* PKI Master Key Files */ + uint32_t pki_cipher; /* PKI Cipher type */ + uint32_t pki_digest; /* PKI Digest type */ bool tls_authenticate; /* Authenticate with TLS */ bool tls_enable; /* Enable TLS */ bool tls_require; /* Require TLS */ @@ -104,6 +95,9 @@ struct CLIENT { alist *pki_recipients; /* Shared PKI Recipients */ TLS_CONTEXT *tls_ctx; /* Shared TLS Context */ char *verid; /* Custom Id to print in version command */ + uint64_t max_bandwidth_per_job; /* Bandwidth limitation (global) */ + alist *disable_cmds; /* Commands to disable */ + bool *disabled_cmds_array; /* Disabled commands array */ }; diff --git a/bacula/src/filed/heartbeat.c b/bacula/src/filed/heartbeat.c index f39566bbd0..b83eef9cad 100644 --- a/bacula/src/filed/heartbeat.c +++ b/bacula/src/filed/heartbeat.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2003-2012 Free Software Foundation Europe e.V. + Copyright (C) 2003-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Bacula File Daemon heartbeat routines @@ -65,8 +53,8 @@ extern "C" void *sd_heartbeat_thread(void *arg) jcr->hb_bsock = sd; jcr->hb_started = true; jcr->hb_dir_bsock = dir; - dir->m_suppress_error_msgs = true; - sd->m_suppress_error_msgs = true; + dir->suppress_error_messages(true); + sd->suppress_error_messages(true); /* Hang reading the socket to the SD, and every time we get * a heartbeat or we get a wait timeout (5 seconds), we @@ -74,7 +62,7 @@ extern "C" void *sd_heartbeat_thread(void *arg) * Director. */ while (!sd->is_stop()) { - n = bnet_wait_data_intr(sd, WAIT_INTERVAL); + n = sd->wait_data_intr(WAIT_INTERVAL); if (n < 0 || sd->is_stop()) { break; } @@ -99,10 +87,14 @@ extern "C" void *sd_heartbeat_thread(void *arg) Dmsg2(100, "Got %d bytes from SD. MSG=%s\n", sd->msglen, sd->msg); } } - Dmsg2(200, "wait_intr=%d stop=%d\n", n, is_bnet_stop(sd)); + Dmsg2(200, "wait_intr=%d stop=%d\n", n, sd->is_stop()); } - sd->close(); - dir->close(); + /* + * Note, since sd and dir are local dupped sockets, this + * is one place where we can call destroy(). + */ + sd->destroy(); + dir->destroy(); jcr->hb_bsock = NULL; jcr->hb_started = false; jcr->hb_dir_bsock = NULL; @@ -176,7 +168,7 @@ extern "C" void *dir_heartbeat_thread(void *arg) jcr->hb_bsock = dir; jcr->hb_started = true; - dir->m_suppress_error_msgs = true; + dir->suppress_error_messages(true); while (!dir->is_stop()) { time_t now, next; @@ -192,7 +184,7 @@ extern "C" void *dir_heartbeat_thread(void *arg) } bmicrosleep(next, 0); } - dir->close(); + dir->destroy(); jcr->hb_bsock = NULL; jcr->hb_started = false; return NULL; diff --git a/bacula/src/filed/job.c b/bacula/src/filed/job.c index 328498c6c3..cbb95d2ba0 100644 --- a/bacula/src/filed/job.c +++ b/bacula/src/filed/job.c @@ -1,34 +1,22 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2011 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Bacula File Daemon Job processing * - * Kern Sibbald, October MM + * Written by Kern Sibbald, October MM * */ @@ -36,14 +24,12 @@ #include "filed.h" #include "ch.h" -#if defined(WIN32_VSS) -#include "vss.h" - -static pthread_mutex_t vss_mutex = PTHREAD_MUTEX_INITIALIZER; -static int enable_vss = 0; -#endif +/* Globals */ +bool win32decomp = false; +bool no_win32_write_errors = false; +static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; -/** +/* * As Windows saves ACLs as part of the standard backup stream * we just pretend here that is has implicit acl support. */ @@ -68,9 +54,9 @@ extern int accurate_cmd(JCR *jcr); /* Forward referenced functions */ static int backup_cmd(JCR *jcr); -static int bootstrap_cmd(JCR *jcr); static int cancel_cmd(JCR *jcr); static int setdebug_cmd(JCR *jcr); +static int setbandwidth_cmd(JCR *jcr); static int estimate_cmd(JCR *jcr); static int hello_cmd(JCR *jcr); static int job_cmd(JCR *jcr); @@ -98,19 +84,15 @@ static int exit_cmd(JCR *jcr); /* Exported functions */ -struct s_cmds { - const char *cmd; - int (*func)(JCR *); - int monitoraccess; /* specify if monitors have access to this function */ -}; -/** +/* * The following are the recognized commands from the Director. */ -static struct s_cmds cmds[] = { +struct s_cmds cmds[] = { {"backup", backup_cmd, 0}, {"cancel", cancel_cmd, 0}, {"setdebug=", setdebug_cmd, 0}, + {"setbandwidth=",setbandwidth_cmd, 0}, {"estimate", estimate_cmd, 0}, {"Hello", hello_cmd, 1}, {"fileset", fileset_cmd, 0}, @@ -123,7 +105,6 @@ static struct s_cmds cmds[] = { {".status", qstatus_cmd, 1}, {"storage ", storage_cmd, 0}, {"verify", verify_cmd, 0}, - {"bootstrap", bootstrap_cmd, 0}, {"RunBeforeNow", runbeforenow_cmd, 0}, {"RunBeforeJob", runbefore_cmd, 0}, {"RunAfterJob", runafter_cmd, 0}, @@ -142,9 +123,21 @@ static char jobcmd[] = "JobId=%d Job=%127s SDid=%d SDtime=%d Authorization= static char storaddr[] = "storage address=%s port=%d ssl=%d Authorization=%100s"; static char storaddr_v1[] = "storage address=%s port=%d ssl=%d"; static char sessioncmd[] = "session %127s %ld %ld %ld %ld %ld %ld\n"; -static char restorecmd[] = "restore replace=%c prelinks=%d where=%s\n"; + static char restorecmd1[] = "restore replace=%c prelinks=%d where=\n"; -static char restorecmdR[] = "restore replace=%c prelinks=%d regexwhere=%s\n"; +static char restorefcmd1[] = "restore files=%d replace=%c prelinks=%d where=\n"; + +/* The following restore commands may have a big where=/regexwhere= parameter + * the bsscanf is limiting the default %s to 1000c. To allow more than 1000 bytes, + * we can specify %xxxxs where xxxx is the size expected in bytes. + * + * So, the code will add %s\n to the end of the following restore commands + */ +static char restorecmd[] = "restore replace=%c prelinks=%d where="; +static char restorecmdR[] = "restore replace=%c prelinks=%d regexwhere="; +static char restorefcmd[] = "restore files=%d replace=%c prelinks=%d where="; +static char restorefcmdR[] = "restore files=%d replace=%c prelinks=%d regexwhere="; + static char restoreobjcmd[] = "restoreobject JobId=%u %d,%d,%d,%d,%d,%d,%s"; static char restoreobjcmd1[] = "restoreobject JobId=%u %d,%d,%d,%d,%d,%d\n"; static char endrestoreobjectcmd[] = "restoreobject end\n"; @@ -153,26 +146,27 @@ static char estimatecmd[] = "estimate listing=%d"; static char runbefore[] = "RunBeforeJob %s"; static char runafter[] = "RunAfterJob %s"; static char runscript[] = "Run OnSuccess=%d OnFailure=%d AbortOnError=%d When=%d Command=%s"; +static char setbandwidth[]= "setbandwidth=%lld Job=%127s"; /* Responses sent to Director */ static char errmsg[] = "2999 Invalid command\n"; static char no_auth[] = "2998 No Authorization\n"; static char invalid_cmd[] = "2997 Invalid command for a Director with Monitor directive enabled.\n"; +static char OKBandwidth[] = "2000 OK Bandwidth\n"; static char OKinc[] = "2000 OK include\n"; static char OKest[] = "2000 OK estimate files=%s bytes=%s\n"; static char OKlevel[] = "2000 OK level\n"; static char OKbackup[] = "2000 OK backup\n"; -static char OKbootstrap[] = "2000 OK bootstrap\n"; static char OKverify[] = "2000 OK verify\n"; static char OKrestore[] = "2000 OK restore\n"; static char OKsession[] = "2000 OK session\n"; static char OKstore[] = "2000 OK storage\n"; static char OKstoreend[] = "2000 OK storage end\n"; static char OKjob[] = "2000 OK Job %s (%s) %s,%s,%s"; -static char OKsetdebug[] = "2000 OK setdebug=%d trace=%d hangup=%d\n"; +static char OKsetdebug[] = "2000 OK setdebug=%ld trace=%ld hangup=%ld options=%s tags=%s\n"; static char BADjob[] = "2901 Bad Job\n"; -static char EndJob[] = "2800 End Job TermCode=%d JobFiles=%u ReadBytes=%s" - " JobBytes=%s Errors=%u VSS=%d Encrypt=%d\n"; +static char EndJob[] = "2800 End Job TermCode=%d JobFiles=%d ReadBytes=%lld" + " JobBytes=%lld Errors=%d VSS=%d Encrypt=%d\n"; static char OKRunBefore[] = "2000 OK RunBefore\n"; static char OKRunBeforeNow[] = "2000 OK RunBeforeNow\n"; static char OKRunAfter[] = "2000 OK RunAfter\n"; @@ -198,7 +192,7 @@ static char read_open[] = "read open session = %s %ld %ld %ld %ld %ld %ld\n"; static char read_data[] = "read data %d\n"; static char read_close[] = "read close session %d\n"; -/** +/* * Accept requests from a Director * * NOTE! We are running as a separate thread @@ -231,19 +225,18 @@ static char read_close[] = "read close session %d\n"; * 9. FD runs ClientRunAfterJob */ -void *handle_client_request(void *dirp) +static void *handle_director_request(BSOCK *dir) { int i; bool found, quit; + bool first = true; JCR *jcr; - BSOCK *dir = (BSOCK *)dirp; const char jobname[12] = "*Director*"; -// saveCWD save_cwd; jcr = new_jcr(sizeof(JCR), filed_free_jcr); /* create JCR */ + jcr->sd_calls_client = false; jcr->dir_bsock = dir; jcr->ff = init_find_files(); -// save_cwd.save(jcr); jcr->start_time = time(NULL); jcr->RunScripts = New(alist(10, not_owned_by_alist)); jcr->last_fname = get_pool_memory(PM_FNAME); @@ -257,15 +250,27 @@ void *handle_client_request(void *dirp) jcr->crypto.pki_signers = me->pki_signers; jcr->crypto.pki_recipients = me->pki_recipients; dir->set_jcr(jcr); - enable_backup_privileges(NULL, 1 /* ignore_errors */); + /* Initialize SD start condition variable */ + int errstat = pthread_cond_init(&jcr->job_start_wait, NULL); + if (errstat != 0) { + berrno be; + Jmsg1(jcr, M_FATAL, 0, _("Unable to init job cond variable: ERR=%s\n"), be.bstrerror(errstat)); + goto bail_out; + } - /**********FIXME******* add command handler error code */ + enable_backup_privileges(NULL, 1 /* ignore_errors */); for (quit=false; !quit;) { - /* Read command */ - if (dir->recv() < 0) { - break; /* connection terminated */ + if (!first) { /* first call the read is done */ + /* Read command */ + if (dir->recv() < 0) { + break; /* connection terminated */ + } + } + if (dir->msglen == 0) { /* Bad connection */ + break; } + first = false; dir->msg[dir->msglen] = 0; Dmsg1(100, "msg); found = false; @@ -283,7 +288,14 @@ void *handle_client_request(void *dirp) dir->signal(BNET_EOD); break; } - Dmsg1(100, "Executing %s command.\n", cmds[i].cmd); + if ((me->disabled_cmds_array && me->disabled_cmds_array[i]) || + (jcr->director && jcr->director->disabled_cmds_array && + jcr->director->disabled_cmds_array[i])) { + Jmsg(jcr, M_FATAL, 0, _("Command: \"%s\" is disabled.\n"), cmds[i].cmd); + quit = true; + break; + } + Dmsg1(100, "Executing Dir %s command.\n", dir->msg); if (!cmds[i].func(jcr)) { /* do command */ quit = true; /* error or fully terminated, get out */ Dmsg1(100, "Quit command loop. Canceled=%d\n", job_canceled(jcr)); @@ -307,18 +319,19 @@ void *handle_client_request(void *dirp) run_scripts(jcr, jcr->RunScripts, "ClientAfterJob"); if (jcr->JobId) { /* send EndJob if running a job */ - char ed1[50], ed2[50]; - /* Send termination status back to Dir */ + uint32_t vss, encrypt; + encrypt = jcr->crypto.pki_encrypt; + vss = jcr->VSS; dir->fsend(EndJob, jcr->JobStatus, jcr->JobFiles, - edit_uint64(jcr->ReadBytes, ed1), - edit_uint64(jcr->JobBytes, ed2), jcr->JobErrors, jcr->VSS, - jcr->crypto.pki_encrypt); - Dmsg1(110, "End FD msg: %s\n", dir->msg); + jcr->ReadBytes, jcr->JobBytes, jcr->JobErrors, vss, + encrypt); + //Dmsg0(0/*110*/, dir->msg); } generate_daemon_event(jcr, "JobEnd"); generate_plugin_event(jcr, bEventJobEnd); +bail_out: dequeue_messages(jcr); /* send any queued messages */ /* Inform Director that we are done */ @@ -398,10 +411,9 @@ void *handle_client_request(void *dirp) ff->fileset = NULL; Dmsg0(100, "Calling term_find_files\n"); term_find_files(jcr->ff); -// save_cwd.restore(jcr); -// save_cwd.release(); jcr->ff = NULL; Dmsg0(100, "Done with term_find_files\n"); + pthread_cond_destroy(&jcr->job_start_wait); free_jcr(jcr); /* destroy JCR record */ Dmsg0(100, "Done with free_jcr\n"); Dsm_check(100); @@ -409,6 +421,88 @@ void *handle_client_request(void *dirp) return NULL; } +/* + * Note, we handle the initial connection request here. + * We only get the jobname and the SD version, then we + * return, authentication will be done when the Director + * sends the storage command -- as is usually the case. + * This should be called only once by the SD. + */ +static void *handle_storage_request(BSOCK *sd) +{ + char job_name[500]; + char tbuf[150]; + int sd_version; + JCR *jcr; + + if (sscanf(sd->msg, "Hello FD: Bacula Storage calling Start Job %127s %d\n", + job_name, &sd_version) != 2) { + Jmsg(NULL, M_FATAL, 0, _("SD connect failed: Bad Hello command\n")); + return NULL; + } + Dmsg1(110, "Got a SD connection at %s\n", bstrftimes(tbuf, sizeof(tbuf), + (utime_t)time(NULL))); + Dmsg1(50, "%s", sd->msg); + + if (!(jcr=get_jcr_by_full_name(job_name))) { + Jmsg1(NULL, M_FATAL, 0, _("SD connect failed: Job name not found: %s\n"), job_name); + Dmsg1(3, "**** Job \"%s\" not found.\n", job_name); + sd->destroy(); + return NULL; + } + + Dmsg1(150, "Found Job %s\n", job_name); + + jcr->store_bsock = sd; + jcr->store_bsock->set_jcr(jcr); + + if (!jcr->max_bandwidth) { + if (jcr->director->max_bandwidth_per_job) { + jcr->max_bandwidth = jcr->director->max_bandwidth_per_job; + + } else if (me->max_bandwidth_per_job) { + jcr->max_bandwidth = me->max_bandwidth_per_job; + } + } + sd->set_bwlimit(jcr->max_bandwidth); + pthread_cond_signal(&jcr->job_start_wait); /* wake waiting job */ + free_jcr(jcr); + return NULL; +} + +/* + * Accept requests from a Director or a Storage daemon + */ +void *handle_connection_request(void *caller) +{ + BSOCK *bs = (BSOCK *)caller; + + if (bs->recv() > 0) { + if (strncmp(bs->msg, "Ping", 4) == 0) { + bs->fsend("2000 Ping OK\n"); + bs->destroy(); + return NULL; + } + if (bs->msglen < 25 || bs->msglen > 500) { + goto bail_out; + } + Dmsg1(100, "Got: %s", bs->msg); + if (strncmp(bs->msg, "Hello Director", 14) == 0) { + return handle_director_request(bs); + } + if (strncmp(bs->msg, "Hello FD: Bacula Storage", 20) ==0) { + return handle_storage_request(bs); + } + } +bail_out: + Dmsg2(100, "Bad command from %s. Len=%d.\n", bs->who(), bs->msglen); + char addr[64]; + char *who = bs->get_peer(addr, sizeof(addr)) ? bs->who() : addr; + Jmsg2(NULL, M_FATAL, 0, _("Bad command from %s. Len=%d.\n"), who, bs->msglen); + bs->destroy(); + return NULL; +} + static int sm_dump_cmd(JCR *jcr) { close_memory_pool(); @@ -439,6 +533,7 @@ static int hello_cmd(JCR *jcr) } Dmsg0(120, "OK Authenticate\n"); jcr->authenticated = true; + return 1; } @@ -450,26 +545,77 @@ static int cancel_cmd(JCR *jcr) BSOCK *dir = jcr->dir_bsock; char Job[MAX_NAME_LENGTH]; JCR *cjcr; + int status; + const char *reason; if (sscanf(dir->msg, "cancel Job=%127s", Job) == 1) { - if (!(cjcr=get_jcr_by_full_name(Job))) { + status = JS_Canceled; + reason = "canceled"; + } else { + dir->fsend(_("2902 Error scanning cancel command.\n")); + goto bail_out; + } + if (!(cjcr=get_jcr_by_full_name(Job))) { + dir->fsend(_("2901 Job %s not found.\n"), Job); + } else { + generate_plugin_event(cjcr, bEventCancelCommand, NULL); + cjcr->setJobStatus(status); + if (cjcr->store_bsock) { + cjcr->store_bsock->set_timed_out(); + cjcr->store_bsock->set_terminated(); + cjcr->my_thread_send_signal(TIMEOUT_SIGNAL); + } + free_jcr(cjcr); + dir->fsend(_("2001 Job \"%s\" marked to be %s.\n"), + Job, reason); + } + +bail_out: + dir->signal(BNET_EOD); + return 1; +} + +/** + * Set bandwidth limit as requested by the Director + * + */ +static int setbandwidth_cmd(JCR *jcr) +{ + BSOCK *dir = jcr->dir_bsock; + int64_t bw=0; + JCR *cjcr; + char Job[MAX_NAME_LENGTH]; + *Job=0; + + if (sscanf(dir->msg, setbandwidth, &bw, Job) != 2 || bw < 0) { + pm_strcpy(jcr->errmsg, dir->msg); + dir->fsend(_("2991 Bad setbandwidth command: %s\n"), jcr->errmsg); + return 0; + } + + if (*Job) { + if(!(cjcr=get_jcr_by_full_name(Job))) { dir->fsend(_("2901 Job %s not found.\n"), Job); } else { - generate_plugin_event(cjcr, bEventCancelCommand, NULL); - cjcr->setJobStatus(JS_Canceled); + cjcr->max_bandwidth = bw; if (cjcr->store_bsock) { - cjcr->store_bsock->set_timed_out(); - cjcr->store_bsock->set_terminated(); - cjcr->my_thread_send_signal(TIMEOUT_SIGNAL); + cjcr->store_bsock->set_bwlimit(bw); } free_jcr(cjcr); - dir->fsend(_("2001 Job %s marked to be canceled.\n"), Job); } - } else { - dir->fsend(_("2902 Error scanning cancel command.\n")); + + } else { /* No job requested, apply globally */ + me->max_bandwidth_per_job = bw; /* Overwrite directive */ + foreach_jcr(cjcr) { + cjcr->max_bandwidth = bw; + if (cjcr->store_bsock) { + cjcr->store_bsock->set_bwlimit(bw); + } + } + endeach_jcr(cjcr); } - dir->signal(BNET_EOD); - return 1; + + return dir->fsend(OKBandwidth); } /** @@ -479,29 +625,46 @@ static int cancel_cmd(JCR *jcr) static int setdebug_cmd(JCR *jcr) { BSOCK *dir = jcr->dir_bsock; - int32_t level, trace, hangup; + int32_t trace, hangup, lvl; + int64_t level; int scan; + char options[60]; + char tags[512]; Dmsg1(50, "setdebug_cmd: %s", dir->msg); - scan = sscanf(dir->msg, "setdebug=%d trace=%d hangup=%d", - &level, &trace, &hangup); - if (scan != 3) { - Dmsg2(20, "sscanf failed: msg=%s scan=%d\n", dir->msg, scan); - if (sscanf(dir->msg, "setdebug=%d trace=%d", &level, &trace) != 2) { - pm_strcpy(jcr->errmsg, dir->msg); - dir->fsend(_("2991 Bad setdebug command: %s\n"), jcr->errmsg); - return 0; - } else { - hangup = -1; + tags[0] = options[0] = 0; + scan = sscanf(dir->msg, "setdebug=%ld trace=%ld hangup=%ld options=%55s tags=%511s", + &lvl, &trace, &hangup, options, tags); + if (scan != 5) { + scan = sscanf(dir->msg, "setdebug=%ld trace=%ld hangup=%ld", + &lvl, &trace, &hangup); + if (scan != 3) { + Dmsg2(20, "sscanf failed: msg=%s scan=%d\n", dir->msg, scan); + if (sscanf(dir->msg, "setdebug=%ld trace=%ld", &lvl, &trace) != 2) { + pm_strcpy(jcr->errmsg, dir->msg); + dir->fsend(_("2991 Bad setdebug command: %s\n"), jcr->errmsg); + return 0; + } else { + hangup = -1; + } } } + level = lvl; + set_trace(trace); + set_hangup(hangup); + if (!debug_parse_tags(tags, &level)) { + *tags = 0; + } if (level >= 0) { debug_level = level; } - set_trace(trace); - set_hangup(hangup); - Dmsg3(50, "level=%d trace=%d hangup=%d\n", level, get_trace(), get_hangup()); - return dir->fsend(OKsetdebug, level, get_trace(), get_hangup()); + + /* handle other options */ + set_debug_flags(options); + + Dmsg5(150, "level=%ld trace=%ld hangup=%ld options=%s tags=%s\n", + lvl, get_trace(), get_hangup(), options, tags); + return dir->fsend(OKsetdebug, lvl, get_trace(), get_hangup(), options, tags); } @@ -533,7 +696,7 @@ static int job_cmd(JCR *jcr) sd_auth_key.check_size(dir->msglen); if (sscanf(dir->msg, jobcmd, &jcr->JobId, jcr->Job, - &jcr->VolSessionId, &jcr->VolSessionTime, + &jcr->VolSessionId, &jcr->VolSessionTime, sd_auth_key.c_str()) != 5) { pm_strcpy(jcr->errmsg, dir->msg); Jmsg(jcr, M_FATAL, 0, _("Bad Job Command: %s"), jcr->errmsg); @@ -545,18 +708,14 @@ static int job_cmd(JCR *jcr) Mmsg(jcr->errmsg, "JobId=%d Job=%s", jcr->JobId, jcr->Job); new_plugins(jcr); /* instantiate plugins for this jcr */ generate_plugin_event(jcr, bEventJobStart, (void *)jcr->errmsg); -#ifdef HAVE_WIN32 - return dir->fsend(OKjob, VERSION, LSMDATE, win_os, DISTNAME, DISTVER); -#else return dir->fsend(OKjob, VERSION, LSMDATE, HOST_OS, DISTNAME, DISTVER); -#endif } extern "C" char *job_code_callback_filed(JCR *jcr, const char* param) { switch (param[0]) { case 'D': - if (jcr->director) { + if (jcr->director) { return jcr->director->hdr.name; } break; @@ -656,7 +815,7 @@ static int runscript_cmd(JCR *jcr) Dmsg1(100, "runscript_cmd: '%s'\n", dir->msg); /* Note, we cannot sscanf into bools */ - if (sscanf(dir->msg, runscript, &on_success, + if (sscanf(dir->msg, runscript, &on_success, &on_failure, &fail_on_error, &cmd->when, @@ -699,21 +858,22 @@ static int restore_object_cmd(JCR *jcr) Dmsg1(100, "Enter restoreobject_cmd: %s", dir->msg); if (strcmp(dir->msg, endrestoreobjectcmd) == 0) { + Dmsg0(20, "Got endrestoreobject\n"); generate_plugin_event(jcr, bEventRestoreObject, NULL); return dir->fsend(OKRestoreObject); } - rop.plugin_name = (char *) malloc (dir->msglen); + rop.plugin_name = (char *)malloc(dir->msglen); *rop.plugin_name = 0; - if (sscanf(dir->msg, restoreobjcmd, &rop.JobId, &rop.object_len, - &rop.object_full_len, &rop.object_index, - &rop.object_type, &rop.object_compression, &FileIndex, + if (sscanf(dir->msg, restoreobjcmd, &rop.JobId, &rop.object_len, + &rop.object_full_len, &rop.object_index, + &rop.object_type, &rop.object_compression, &FileIndex, rop.plugin_name) != 8) { /* Old version, no plugin_name */ - if (sscanf(dir->msg, restoreobjcmd1, &rop.JobId, &rop.object_len, - &rop.object_full_len, &rop.object_index, + if (sscanf(dir->msg, restoreobjcmd1, &rop.JobId, &rop.object_len, + &rop.object_full_len, &rop.object_index, &rop.object_type, &rop.object_compression, &FileIndex) != 7) { Dmsg0(5, "Bad restore object command\n"); pm_strcpy(jcr->errmsg, dir->msg); @@ -726,7 +886,7 @@ static int restore_object_cmd(JCR *jcr) Dmsg7(100, "Recv object: JobId=%u objlen=%d full_len=%d objinx=%d objtype=%d " "FI=%d plugin_name=%s\n", - rop.JobId, rop.object_len, rop.object_full_len, + rop.JobId, rop.object_len, rop.object_full_len, rop.object_index, rop.object_type, FileIndex, rop.plugin_name); /* Read Object name */ if (dir->recv() < 0) { @@ -765,7 +925,7 @@ static int restore_object_cmd(JCR *jcr) Dmsg0(100, "got job metadata\n"); jcr->got_metadata = true; } - + generate_plugin_event(jcr, bEventRestoreObject, (void *)&rop); if (rop.object_name) { @@ -809,7 +969,7 @@ static bool init_fileset(JCR *jcr) return true; } -static void append_file(JCR *jcr, findINCEXE *incexe, +static void append_file(JCR *jcr, findINCEXE *incexe, const char *buf, bool is_file) { if (is_file) { @@ -820,13 +980,13 @@ static void append_file(JCR *jcr, findINCEXE *incexe, incexe->plugin_list.append(new_dlistString(buf)); } else { - Jmsg(jcr, M_FATAL, 0, + Jmsg(jcr, M_FATAL, 0, _("Plugin Directory not defined. Cannot use plugin: \"%s\"\n"), buf); } } -/** +/* * Add fname to include/exclude fileset list. First check for * | and < and if necessary perform command. */ @@ -873,7 +1033,7 @@ void add_file_to_fileset(JCR *jcr, const char *fname, bool is_file) p++; /* skip over < */ if ((ffd = fopen(p, "rb")) == NULL) { berrno be; - Jmsg(jcr, M_FATAL, 0, + Jmsg(jcr, M_FATAL, 0, _("Cannot open FileSet input file: %s. ERR=%s\n"), p, be.bstrerror()); return; @@ -1301,11 +1461,6 @@ static int set_options(findFOPTS *fo, const char *opts) const char *p; char strip[100]; -// Commented out as it is not backward compatible - KES -#ifdef HAVE_WIN32 -// fo->flags |= FO_IGNORECASE; /* always ignorecase under windows */ -#endif - for (p=opts; *p; p++) { switch (*p) { case 'a': /* alway replace */ @@ -1457,7 +1612,7 @@ static int set_options(findFOPTS *fo, const char *opts) fo->flags |= FO_XATTR; break; default: - Emsg1(M_ERROR, 0, _("Unknown include/exclude option: %c\n"), *p); + Jmsg1(NULL, M_ERROR, 0, _("Unknown include/exclude option: %c\n"), *p); break; } } @@ -1470,23 +1625,18 @@ static int set_options(findFOPTS *fo, const char *opts) */ static int fileset_cmd(JCR *jcr) { + POOL_MEM buf(PM_MESSAGE); BSOCK *dir = jcr->dir_bsock; int rtnstat; -#if defined(WIN32_VSS) - int vss = 0; - - sscanf(dir->msg, "fileset vss=%d", &vss); - enable_vss = vss; -#endif - if (!init_fileset(jcr)) { return 0; } while (dir->recv() >= 0) { strip_trailing_junk(dir->msg); Dmsg1(500, "Fileset: %s\n", dir->msg); - add_fileset(jcr, dir->msg); + pm_strcpy(buf, dir->msg); + add_fileset(jcr, buf.c_str()); } if (!term_fileset(jcr)) { return 0; @@ -1496,71 +1646,15 @@ static int fileset_cmd(JCR *jcr) return rtnstat; } -static void free_bootstrap(JCR *jcr) -{ - if (jcr->RestoreBootstrap) { - unlink(jcr->RestoreBootstrap); - free_pool_memory(jcr->RestoreBootstrap); - jcr->RestoreBootstrap = NULL; - } -} - - -static pthread_mutex_t bsr_mutex = PTHREAD_MUTEX_INITIALIZER; -static uint32_t bsr_uniq = 0; - -/** - * The Director sends us the bootstrap file, which - * we will in turn pass to the SD. - * Deprecated. The bsr is now sent directly from the - * Director to the SD. - */ -static int bootstrap_cmd(JCR *jcr) -{ - BSOCK *dir = jcr->dir_bsock; - POOLMEM *fname = get_pool_memory(PM_FNAME); - FILE *bs; - - free_bootstrap(jcr); - P(bsr_mutex); - bsr_uniq++; - Mmsg(fname, "%s/%s.%s.%d.bootstrap", me->working_directory, me->hdr.name, - jcr->Job, bsr_uniq); - V(bsr_mutex); - Dmsg1(400, "bootstrap=%s\n", fname); - jcr->RestoreBootstrap = fname; - bs = fopen(fname, "a+b"); /* create file */ - if (!bs) { - berrno be; - Jmsg(jcr, M_FATAL, 0, _("Could not create bootstrap file %s: ERR=%s\n"), - jcr->RestoreBootstrap, be.bstrerror()); - /* - * Suck up what he is sending to us so that he will then - * read our error message. - */ - while (dir->recv() >= 0) - { } - free_bootstrap(jcr); - jcr->setJobStatus(JS_ErrorTerminated); - return 0; - } - - while (dir->recv() >= 0) { - Dmsg1(200, "filedmsg); - fputs(dir->msg, bs); - } - fclose(bs); - /* - * Note, do not free the bootstrap yet -- it needs to be - * sent to the SD - */ - return dir->fsend(OKbootstrap); -} /** * Get backup level from Director * + * Note: there are odd things such as accurate_differential, + * and accurate_incremental that are passed in level, thus + * the calls to strstr() below. + * */ static int level_cmd(JCR *jcr) { @@ -1582,10 +1676,10 @@ static int level_cmd(JCR *jcr) goto bail_out; } /* Base backup requested? */ - if (strcmp(level, "base") == 0) { + if (strcasecmp(level, "base") == 0) { jcr->setJobLevel(L_BASE); /* Full backup requested? */ - } else if (strcmp(level, "full") == 0) { + } else if (strcasecmp(level, "full") == 0) { jcr->setJobLevel(L_FULL); } else if (strstr(level, "differential")) { jcr->setJobLevel(L_DIFFERENTIAL); @@ -1599,7 +1693,7 @@ static int level_cmd(JCR *jcr) * We get his UTC since time, then sync the clocks and correct it * to agree with our clock. */ - } else if (strcmp(level, "since_utime") == 0) { + } else if (strcasecmp(level, "since_utime") == 0) { buf = get_memory(dir->msglen+1); utime_t since_time, adj; btime_t his_time, bt_start, rt=0, bt_adj=0; @@ -1706,13 +1800,13 @@ static int session_cmd(JCR *jcr) static void set_storage_auth_key(JCR *jcr, char *key) { /* if no key don't update anything */ - if (!*key) { + if (!*key) { return; } /** * We can be contacting multiple storage daemons. - * So, make sure that any old jcr->store_bsock is cleaned up. + * So, make sure that any old jcr->store_bsock is cleaned up. */ if (jcr->store_bsock) { jcr->store_bsock->destroy(); @@ -1721,7 +1815,7 @@ static void set_storage_auth_key(JCR *jcr, char *key) /** * We can be contacting multiple storage daemons. - * So, make sure that any old jcr->sd_auth_key is cleaned up. + * So, make sure that any old jcr->sd_auth_key is cleaned up. */ if (jcr->sd_auth_key) { /* @@ -1734,7 +1828,7 @@ static void set_storage_auth_key(JCR *jcr, char *key) } jcr->sd_auth_key = bstrdup(key); - Dmsg0(5, "set sd auth key\n"); + Dmsg1(5, "set sd auth key %s\n", jcr->sd_auth_key); } /** @@ -1743,55 +1837,101 @@ static void set_storage_auth_key(JCR *jcr, char *key) */ static int storage_cmd(JCR *jcr) { - int stored_port; /* storage daemon port */ + int stored_port = 0; /* storage daemon port */ int enable_ssl; /* enable ssl to sd */ POOL_MEM sd_auth_key(PM_MESSAGE); BSOCK *dir = jcr->dir_bsock; - BSOCK *sd = new_bsock(); /* storage daemon bsock */ - + BSOCK *sd; Dmsg1(100, "StorageCmd: %s", dir->msg); sd_auth_key.check_size(dir->msglen); - if (sscanf(dir->msg, storaddr, &jcr->stored_addr, &stored_port, - &enable_ssl, sd_auth_key.c_str()) != 4) { - if (sscanf(dir->msg, storaddr_v1, &jcr->stored_addr, + if (sscanf(dir->msg, storaddr, &jcr->stored_addr, &stored_port, + &enable_ssl, sd_auth_key.c_str()) == 4) { + Dmsg1(100, "Set auth key %s\n", sd_auth_key.c_str()); + set_storage_auth_key(jcr, sd_auth_key.c_str()); + } else if (sscanf(dir->msg, storaddr_v1, &jcr->stored_addr, &stored_port, &enable_ssl) != 3) { - pm_strcpy(jcr->errmsg, dir->msg); - Jmsg(jcr, M_FATAL, 0, _("Bad storage command: %s"), jcr->errmsg); - goto bail_out; - } + pm_strcpy(jcr->errmsg, dir->msg); + Jmsg(jcr, M_FATAL, 0, _("Bad storage command: %s"), jcr->errmsg); + Pmsg1(010, "Bad storage command: %s", jcr->errmsg); + goto bail_out; } - set_storage_auth_key(jcr, sd_auth_key.c_str()); - Dmsg3(110, "Open storage: %s:%d ssl=%d\n", jcr->stored_addr, stored_port, - enable_ssl); - /* Open command communications with Storage daemon */ - /* Try to connect for 1 hour at 10 second intervals */ + /* TODO: see if we put limit on restore and backup... */ + if (!jcr->max_bandwidth) { + if (jcr->director->max_bandwidth_per_job) { + jcr->max_bandwidth = jcr->director->max_bandwidth_per_job; - sd->set_source_address(me->FDsrc_addr); - if (!sd->connect(jcr, 10, (int)me->SDConnectTimeout, me->heartbeat_interval, - _("Storage daemon"), jcr->stored_addr, NULL, stored_port, 1)) { - sd->destroy(); - sd = NULL; + } else if (me->max_bandwidth_per_job) { + jcr->max_bandwidth = me->max_bandwidth_per_job; + } } - if (sd == NULL) { - Jmsg(jcr, M_FATAL, 0, _("Failed to connect to Storage daemon: %s:%d\n"), - jcr->stored_addr, stored_port); - Dmsg2(100, "Failed to connect to Storage daemon: %s:%d\n", - jcr->stored_addr, stored_port); - goto bail_out; - } - Dmsg0(110, "Connection OK to SD.\n"); + if (stored_port != 0) { + jcr->sd_calls_client = false; /* We are doing the connecting */ + Dmsg3(110, "Connect to storage: %s:%d ssl=%d\n", jcr->stored_addr, stored_port, + enable_ssl); + sd = new_bsock(); + /* Open command communications with Storage daemon */ + /* Try to connect for 1 hour at 10 second intervals */ + sd->set_source_address(me->FDsrc_addr); + if (!sd->connect(jcr, 10, (int)me->SDConnectTimeout, me->heartbeat_interval, + _("Storage daemon"), jcr->stored_addr, NULL, stored_port, 1)) { + /* destroy() OK because sd is local */ + sd->destroy(); + Jmsg2(jcr, M_FATAL, 0, _("Failed to connect to Storage daemon: %s:%d\n"), + jcr->stored_addr, stored_port); + Dmsg2(100, "Failed to connect to Storage daemon: %s:%d\n", + jcr->stored_addr, stored_port); + goto bail_out; + } - jcr->store_bsock = sd; + Dmsg0(110, "Connection OK to SD.\n"); + jcr->store_bsock = sd; + } else { /* The storage daemon called us */ + struct timeval tv; + struct timezone tz; + struct timespec timeout; + int errstat; + + jcr->sd_calls_client = true; + /* + * Wait for the Storage daemon to contact us to start the Job, + * when he does, we will be released, unless the 30 minutes + * expires. + */ + gettimeofday(&tv, &tz); + timeout.tv_nsec = tv.tv_usec * 1000; + timeout.tv_sec = tv.tv_sec + 30 * 60; /* wait 30 minutes */ + P(mutex); + while (jcr->store_bsock == NULL && !jcr->is_job_canceled()) { + errstat = pthread_cond_timedwait(&jcr->job_start_wait, &mutex, &timeout); + if (errstat == ETIMEDOUT || errstat == EINVAL || errstat == EPERM) { + break; + } + Dmsg1(800, "=== Auth cond errstat=%d\n", errstat); + } + V(mutex); + Dmsg2(800, "Auth fail or cancel for jid=%d %p\n", jcr->JobId, jcr); + + /* We should already have a storage connection! */ + if (jcr->store_bsock == NULL) { + Pmsg0(000, "Failed connect from Storage daemon. SD bsock=NULL.\n"); + Pmsg1(000, "Storagecmd: %s", dir->msg); + Jmsg0(jcr, M_FATAL, 0, _("Failed connect from Storage daemon. SD bsock=NULL.\n")); + goto bail_out; + } + if (jcr->is_job_canceled()) { + goto bail_out; + } + } + jcr->store_bsock->set_bwlimit(jcr->max_bandwidth); - sd->fsend("Hello Start Job %s\n", jcr->Job); if (!authenticate_storagedaemon(jcr)) { - Jmsg(jcr, M_FATAL, 0, _("Failed to authenticate Storage daemon.\n")); goto bail_out; } + memset(jcr->sd_auth_key, 0, strlen(jcr->sd_auth_key)); Dmsg0(110, "Authenticated with SD.\n"); /* Send OK to Director */ @@ -1800,7 +1940,6 @@ static int storage_cmd(JCR *jcr) bail_out: dir->fsend(BADcmd, "storage"); return 0; - } @@ -1815,23 +1954,12 @@ static int backup_cmd(JCR *jcr) int SDJobStatus; int32_t FileIndex; -#if defined(WIN32_VSS) - // capture state here, if client is backed up by multiple directors - // and one enables vss and the other does not then enable_vss can change - // between here and where its evaluated after the job completes. - jcr->VSS = g_pVSSClient && enable_vss; - if (jcr->VSS) { - /* Run only one at a time */ - P(vss_mutex); - } -#endif - if (sscanf(dir->msg, "backup FileIndex=%ld\n", &FileIndex) == 1) { jcr->JobFiles = FileIndex; Dmsg1(100, "JobFiles=%ld\n", jcr->JobFiles); } - /** + /* * Validate some options given to the backup make sense for the compiled in * options of this filed. */ @@ -1890,66 +2018,23 @@ static int backup_cmd(JCR *jcr) if (!response(jcr, sd, OK_data, "Append Data")) { goto cleanup; } - + generate_daemon_event(jcr, "JobStart"); generate_plugin_event(jcr, bEventStartBackupJob); -#if defined(WIN32_VSS) - /* START VSS ON WIN32 */ - if (jcr->VSS) { - if (g_pVSSClient->InitializeForBackup(jcr)) { - generate_plugin_event(jcr, bEventVssBackupAddComponents); - /* tell vss which drives to snapshot */ - char szWinDriveLetters[27]; - *szWinDriveLetters=0; - /* Plugin driver can return drive letters */ - generate_plugin_event(jcr, bEventVssPrepareSnapshot, szWinDriveLetters); - if (get_win32_driveletters(jcr->ff, szWinDriveLetters)) { - Jmsg(jcr, M_INFO, 0, _("Generate VSS snapshots. Driver=\"%s\", Drive(s)=\"%s\"\n"), g_pVSSClient->GetDriverName(), szWinDriveLetters); - if (!g_pVSSClient->CreateSnapshots(szWinDriveLetters)) { - berrno be; - Jmsg(jcr, M_FATAL, 0, _("CreateSGenerate VSS snapshots failed. ERR=%s\n"), - be.bstrerror()); - } else { - /* tell user if snapshot creation of a specific drive failed */ - int i; - for (i=0; i < (int)strlen(szWinDriveLetters); i++) { - if (islower(szWinDriveLetters[i])) { - Jmsg(jcr, M_FATAL, 0, _("Generate VSS snapshot of drive \"%c:\\\" failed.\n"), szWinDriveLetters[i]); - } - } - /* inform user about writer states */ - for (i=0; i < (int)g_pVSSClient->GetWriterCount(); i++) { - if (g_pVSSClient->GetWriterState(i) < 1) { - Jmsg(jcr, M_INFO, 0, _("VSS Writer (PrepareForBackup): %s\n"), g_pVSSClient->GetWriterInfo(i)); - } - } - } - } else { - Jmsg(jcr, M_FATAL, 0, _("No drive letters found for generating VSS snapshots.\n")); - } - } else { - berrno be; - Jmsg(jcr, M_FATAL, 0, _("VSS was not initialized properly. ERR=%s\n"), - be.bstrerror()); - } - run_scripts(jcr, jcr->RunScripts, "ClientAfterVSS"); - } -#endif - - /** + /* * Send Files to Storage daemon */ Dmsg1(110, "begin blast ff=%p\n", (FF_PKT *)jcr->ff); if (!blast_data_to_storage_daemon(jcr, NULL)) { jcr->setJobStatus(JS_ErrorTerminated); - bnet_suppress_error_messages(sd, 1); + sd->suppress_error_messages(true); Dmsg0(110, "Error in blast_data.\n"); } else { jcr->setJobStatus(JS_Terminated); /* Note, the above set status will not override an error */ if (!(jcr->JobStatus == JS_Terminated || jcr->JobStatus == JS_Warnings)) { - bnet_suppress_error_messages(sd, 1); + sd->suppress_error_messages(true); goto cleanup; /* bail out now */ } /** @@ -1985,20 +2070,12 @@ static int backup_cmd(JCR *jcr) goto cleanup; } if (!(SDJobStatus == JS_Terminated || SDJobStatus == JS_Warnings)) { - Jmsg(jcr, M_FATAL, 0, _("Bad status %d returned from Storage Daemon.\n"), - SDJobStatus); + Jmsg(jcr, M_FATAL, 0, _("Bad status %d %c returned from Storage Daemon.\n"), + SDJobStatus, (char)SDJobStatus); } } cleanup: -#if defined(WIN32_VSS) - if (jcr->VSS) { - Win32ConvCleanupCache(); - g_pVSSClient->DestroyWriterInfo(); - V(vss_mutex); - } -#endif - generate_plugin_event(jcr, bEventEndBackupJob); return 0; /* return and stop command loop */ } @@ -2080,26 +2157,7 @@ static int verify_cmd(JCR *jcr) return 0; /* return and terminate command loop */ } -#if 0 -#ifdef WIN32_VSS -static bool vss_restore_init_callback(JCR *jcr, int init_type) -{ - switch (init_type) { - case VSS_INIT_RESTORE_AFTER_INIT: - generate_plugin_event(jcr, bEventVssRestoreLoadComponentMetadata); - return true; - case VSS_INIT_RESTORE_AFTER_GATHER: - generate_plugin_event(jcr, bEventVssRestoreSetComponentsSelected); - return true; - default: - return false; - break; - } -} -#endif -#endif - -/** +/* * Do a Restore for Director * */ @@ -2107,48 +2165,70 @@ static int restore_cmd(JCR *jcr) { BSOCK *dir = jcr->dir_bsock; BSOCK *sd = jcr->store_bsock; - POOLMEM *args; + POOLMEM *args=NULL, *restore_where=NULL, *restore_rwhere=NULL; bool use_regexwhere=false; int prefix_links; char replace; + bool scan_ok = true; + int files; + int ret = 0; /** * Scan WHERE (base directory for restore) from command */ Dmsg0(100, "restore command\n"); -#if defined(WIN32_VSS) - - /** - * No need to enable VSS for restore if we do not have plugin - * data to restore - */ - enable_vss = jcr->got_metadata; - Dmsg2(50, "g_pVSSClient = %p, enable_vss = %d\n", g_pVSSClient, enable_vss); - // capture state here, if client is backed up by multiple directors - // and one enables vss and the other does not then enable_vss can change - // between here and where its evaluated after the job completes. - jcr->VSS = g_pVSSClient && enable_vss; - if (jcr->VSS) { - /* Run only one at a time */ - P(vss_mutex); - } -#endif /* Pickup where string */ args = get_memory(dir->msglen+1); *args = 0; - if (sscanf(dir->msg, restorecmd, &replace, &prefix_links, args) != 3) { - if (sscanf(dir->msg, restorecmdR, &replace, &prefix_links, args) != 3){ - if (sscanf(dir->msg, restorecmd1, &replace, &prefix_links) != 2) { - pm_strcpy(jcr->errmsg, dir->msg); - Jmsg(jcr, M_FATAL, 0, _("Bad replace command. CMD=%s\n"), jcr->errmsg); - return 0; + restore_where = get_pool_memory(PM_FNAME); + restore_rwhere = get_pool_memory(PM_FNAME); + + /* We don't know the size of where/rwhere in advance, + * where= -> where=%202s\n + */ + Mmsg(restore_where, "%s%%%ds\n", restorefcmd, dir->msglen); + Mmsg(restore_rwhere, "%s%%%ds\n", restorefcmdR, dir->msglen); + + Dmsg2(200, "where=%srwhere=%s", restore_where, restore_rwhere); + + /* Scan for new form with number of files to restore */ + if (sscanf(dir->msg, restore_where, &files, &replace, &prefix_links, args) != 4) { + if (sscanf(dir->msg, restore_rwhere, &files, &replace, &prefix_links, args) != 4) { + if (sscanf(dir->msg, restorefcmd1, &files, &replace, &prefix_links) != 3) { + scan_ok = false; } - *args = 0; + *args = 0; /* No where argument */ + } else { + use_regexwhere = true; } - use_regexwhere = true; } + + if (scan_ok) { + jcr->ExpectedFiles = files; + } else { + /* Scan for old form without number of files */ + jcr->ExpectedFiles = 0; + + /* where= -> where=%202s\n */ + Mmsg(restore_where, "%s%%%ds\n", restorecmd, dir->msglen); + Mmsg(restore_rwhere, "%s%%%ds\n", restorecmdR, dir->msglen); + + if (sscanf(dir->msg, restore_where, &replace, &prefix_links, args) != 3) { + if (sscanf(dir->msg, restore_rwhere, &replace, &prefix_links, args) != 3){ + if (sscanf(dir->msg, restorecmd1, &replace, &prefix_links) != 2) { + pm_strcpy(jcr->errmsg, dir->msg); + Jmsg(jcr, M_FATAL, 0, _("Bad replace command. CMD=%s\n"), jcr->errmsg); + goto free_mempool; + } + *args = 0; /* No where argument */ + } else { + use_regexwhere = true; + } + } + } + /* Turn / into nothing */ if (IsPathSeparator(args[0]) && args[1] == '\0') { args[0] = '\0'; @@ -2158,7 +2238,7 @@ static int restore_cmd(JCR *jcr) unbash_spaces(args); /* Keep track of newly created directories to apply them correct attributes */ - if (replace == REPLACE_NEVER) { + if (replace == REPLACE_NEVER || replace == REPLACE_IFNEWER) { jcr->keep_path_list = true; } @@ -2166,14 +2246,12 @@ static int restore_cmd(JCR *jcr) jcr->where_bregexp = get_bregexps(args); if (!jcr->where_bregexp) { Jmsg(jcr, M_FATAL, 0, _("Bad where regexp. where=%s\n"), args); - free_pool_memory(args); - return 0; + goto free_mempool; } } else { jcr->where = bstrdup(args); } - free_pool_memory(args); jcr->replace = replace; jcr->prefix_links = prefix_links; @@ -2198,24 +2276,12 @@ static int restore_cmd(JCR *jcr) generate_daemon_event(jcr, "JobStart"); generate_plugin_event(jcr, bEventStartRestoreJob); -#if defined(WIN32_VSS) - /* START VSS ON WIN32 */ - if (jcr->VSS) { - if (!g_pVSSClient->InitializeForRestore(jcr)) { - berrno be; - Jmsg(jcr, M_WARNING, 0, _("VSS was not initialized properly. VSS support is disabled. ERR=%s\n"), be.bstrerror()); - } - //free_and_null_pool_memory(jcr->job_metadata); - run_scripts(jcr, jcr->RunScripts, "ClientAfterVSS"); - } -#endif - do_restore(jcr); stop_dir_heartbeat(jcr); jcr->setJobStatus(JS_Terminated); if (jcr->JobStatus != JS_Terminated) { - bnet_suppress_error_messages(sd, 1); + sd->suppress_error_messages(true); } /** @@ -2229,34 +2295,6 @@ static int restore_cmd(JCR *jcr) /* Inform Storage daemon that we are done */ sd->signal(BNET_TERMINATE); -#if defined(WIN32_VSS) - /* STOP VSS ON WIN32 */ - /* tell vss to close the restore session */ - Dmsg0(100, "About to call CloseRestore\n"); - if (jcr->VSS) { -#if 0 - generate_plugin_event(jcr, bEventVssBeforeCloseRestore); -#endif - Dmsg0(100, "Really about to call CloseRestore\n"); - if (g_pVSSClient->CloseRestore()) { - Dmsg0(100, "CloseRestore success\n"); -#if 0 - /* inform user about writer states */ - for (int i=0; i<(int)g_pVSSClient->GetWriterCount(); i++) { - int msg_type = M_INFO; - if (g_pVSSClient->GetWriterState(i) < 1) { - //msg_type = M_WARNING; - //jcr->JobErrors++; - } - Jmsg(jcr, msg_type, 0, _("VSS Writer (RestoreComplete): %s\n"), g_pVSSClient->GetWriterInfo(i)); - } -#endif - } - else - Dmsg1(100, "CloseRestore fail - %08x\n", errno); - V(vss_mutex); - } -#endif bail_out: bfree_and_null(jcr->where); @@ -2267,7 +2305,6 @@ bail_out: Dmsg0(100, "Done in job.c\n"); - int ret; if (jcr->multi_restore) { Dmsg0(100, OKstoreend); dir->fsend(OKstoreend); @@ -2283,10 +2320,16 @@ bail_out: if (ret == 0) { end_restore_cmd(jcr); /* stopping so send bEventEndRestoreJob */ } + +free_mempool: + free_and_null_pool_memory(args); + free_and_null_pool_memory(restore_where); + free_and_null_pool_memory(restore_rwhere); + return ret; } -static int end_restore_cmd(JCR *jcr) +static int end_restore_cmd(JCR *jcr) { Dmsg0(5, "end_restore_cmd\n"); generate_plugin_event(jcr, bEventEndRestoreJob); @@ -2348,10 +2391,8 @@ static int open_sd_read_session(JCR *jcr) */ static void filed_free_jcr(JCR *jcr) { - if (jcr->store_bsock) { - jcr->store_bsock->close(); - } - free_bootstrap(jcr); + free_bsock(jcr->dir_bsock); + free_bsock(jcr->store_bsock); if (jcr->last_fname) { free_pool_memory(jcr->last_fname); } @@ -2386,11 +2427,11 @@ int response(JCR *jcr, BSOCK *sd, char *resp, const char *cmd) if (job_canceled(jcr)) { return 0; /* if canceled avoid useless error messages */ } - if (is_bnet_error(sd)) { + if (sd->is_error()) { Jmsg2(jcr, M_FATAL, 0, _("Comm error with SD. bad response to %s. ERR=%s\n"), - cmd, bnet_strerror(sd)); + cmd, sd->bstrerror()); } else { - Jmsg3(jcr, M_FATAL, 0, _("Bad response to %s command. Wanted %s, got %s\n"), + Jmsg3(jcr, M_FATAL, 0, _("Bad response from SD to %s command. Wanted %s, got %s\n"), cmd, resp, sd->msg); } return 0; diff --git a/bacula/src/filed/protos.h b/bacula/src/filed/protos.h index e4191940d6..ac9863a9d6 100644 --- a/bacula/src/filed/protos.h +++ b/bacula/src/filed/protos.h @@ -1,32 +1,20 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2010 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* - * Written by Kern Sibbald, MM + * Written by Kern Sibbald, MM * */ @@ -72,7 +60,7 @@ findINCEXE *new_preinclude(JCR *jcr); findINCEXE *get_incexe(JCR *jcr); void set_incexe(JCR *jcr, findINCEXE *incexe); void new_options(JCR *jcr, findINCEXE *incexe); -void add_file_to_fileset(JCR *jcr, const char *fname, bool is_file); +void add_file_to_fileset(JCR *jcr, const char *fname, bool is_file); int add_options_to_fileset(JCR *jcr, const char *item); int add_wild_to_fileset(JCR *jcr, const char *item, int type); int add_regex_to_fileset(JCR *jcr, const char *item, int type); diff --git a/bacula/src/filed/pythonfd.c b/bacula/src/filed/pythonfd.c deleted file mode 100644 index ab15c6b9ad..0000000000 --- a/bacula/src/filed/pythonfd.c +++ /dev/null @@ -1,271 +0,0 @@ -/* - Bacula® - The Network Backup Solution - - Copyright (C) 2005-2008 Free Software Foundation Europe e.V. - - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. - - Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. -*/ -/* - * - * Bacula interface to Python for the File Daemon - * - * Kern Sibbald, March MMV - * - * Version $Id$ - * - */ - -#include "bacula.h" -#include "filed.h" - -#ifdef HAVE_PYTHON -#undef _POSIX_C_SOURCE -#include - -#include - -/* Forward referenced functions */ -static PyObject *set_job_events(PyObject *self, PyObject *arg); -static PyObject *job_write(PyObject *self, PyObject *arg); - -PyMethodDef JobMethods[] = { - {"set_events", set_job_events, METH_VARARGS, "Set Job events"}, - {"write", job_write, METH_VARARGS, "Write to output"}, - {NULL, NULL, 0, NULL} /* last item */ -}; - - -struct s_vars { - const char *name; - const char *fmt; -}; - -/* Read-only variables */ -static struct s_vars getvars[] = { - { NT_("FDName"), "s"}, /* 0 */ - { NT_("Level"), "s"}, /* 1 */ - { NT_("Type"), "s"}, /* 2 */ - { NT_("JobId"), "i"}, /* 3 */ - { NT_("Client"), "s"}, /* 4 */ - { NT_("JobName"), "s"}, /* 5 */ - { NT_("JobStatus"), "s"}, /* 6 */ - - { NULL, NULL} -}; - -/* Writable variables */ -static struct s_vars setvars[] = { - { NT_("JobReport"), "s"}, - - { NULL, NULL} -}; - -/* Return Job variables */ -PyObject *job_getattr(PyObject *self, char *attrname) -{ - JCR *jcr; - bool found = false; - int i; - char buf[10]; - char errmsg[200]; - - jcr = get_jcr_from_PyObject(self); - if (!jcr) { - bstrncpy(errmsg, _("Job pointer not found."), sizeof(errmsg)); - goto bail_out; - } - for (i=0; getvars[i].name; i++) { - if (strcmp(getvars[i].name, attrname) == 0) { - found = true; - break; - } - } - if (!found) { - /* Try our methods */ - return Py_FindMethod(JobMethods, self, attrname); - } - switch (i) { - case 0: /* FD's name */ - return Py_BuildValue((char *)getvars[i].fmt, my_name); - case 1: /* level */ - return Py_BuildValue((char *)getvars[i].fmt, job_level_to_str(jcr->getJobLevel())); - case 2: /* type */ - return Py_BuildValue((char *)getvars[i].fmt, job_type_to_str(jcr->getJobType())); - case 3: /* JobId */ - return Py_BuildValue((char *)getvars[i].fmt, jcr->JobId); - case 4: /* Client */ - return Py_BuildValue((char *)getvars[i].fmt, jcr->client_name); - case 5: /* JobName */ - return Py_BuildValue((char *)getvars[i].fmt, jcr->Job); - case 6: /* JobStatus */ - buf[1] = 0; - buf[0] = jcr->JobStatus; - return Py_BuildValue((char *)getvars[i].fmt, buf); - } - bsnprintf(errmsg, sizeof(errmsg), _("Attribute %s not found."), attrname); -bail_out: - PyErr_SetString(PyExc_AttributeError, errmsg); - return NULL; -} - -int job_setattr(PyObject *self, char *attrname, PyObject *value) -{ - JCR *jcr; - bool found = false; - char *strval = NULL; - char buf[200]; - char *errmsg; - int i; - - Dmsg2(100, "In job_setattr=%s val=%p.\n", attrname, value); - if (value == NULL) { /* Cannot delete variables */ - bsnprintf(buf, sizeof(buf), _("Cannot delete attribute %s"), attrname); - errmsg = buf; - goto bail_out; - } - jcr = get_jcr_from_PyObject(self); - if (!jcr) { - errmsg = _("Job pointer not found."); - goto bail_out; - } - - /* Find attribute name in list */ - for (i=0; setvars[i].name; i++) { - if (strcmp(setvars[i].name, attrname) == 0) { - found = true; - break; - } - } - if (!found) { - bsnprintf(buf, sizeof(buf), _("Cannot find attribute %s"), attrname); - errmsg = buf; - goto bail_out; - } - /* Get argument value ***FIXME*** handle other formats */ - if (setvars[i].fmt != NULL) { - if (!PyArg_Parse(value, (char *)setvars[i].fmt, &strval)) { - PyErr_SetString(PyExc_TypeError, _("Read-only attribute")); - return -1; - } - } - switch (i) { - case 0: /* JobReport */ - Jmsg(jcr, M_INFO, 0, "%s", strval); - return 0; - } - bsnprintf(buf, sizeof(buf), _("Cannot find attribute %s"), attrname); - errmsg = buf; -bail_out: - PyErr_SetString(PyExc_AttributeError, errmsg); - return -1; -} - - -static PyObject *job_write(PyObject *self, PyObject *args) -{ - char *text = NULL; - - if (!PyArg_ParseTuple(args, "s:write", &text)) { - Pmsg0(000, "Parse tuple error in job_write\n"); - return NULL; - } - if (text) { - Jmsg(NULL, M_INFO, 0, "%s", text); - } - Py_INCREF(Py_None); - return Py_None; -} - - -static PyObject *set_job_events(PyObject *self, PyObject *arg) -{ - PyObject *eObject; - JCR *jcr; - - Dmsg0(100, "In set_job_events.\n"); - if (!PyArg_ParseTuple(arg, "O", &eObject)) { - Pmsg0(000, "Parse error looking for Object argument\n"); - return NULL; - } - jcr = get_jcr_from_PyObject(self); - if (!jcr) { - PyErr_SetString(PyExc_AttributeError, _("Job pointer not found.")); - return NULL; - } - Py_XDECREF((PyObject *)jcr->Python_events); /* release any old events Object */ - Py_INCREF(eObject); - jcr->Python_events = (void *)eObject; /* set new events */ - - Py_INCREF(Py_None); - return Py_None; -} - - -int generate_job_event(JCR *jcr, const char *event) -{ - PyObject *method = NULL; - PyObject *Job = (PyObject *)jcr->Python_job; - PyObject *events = (PyObject *)jcr->Python_events; - PyObject *result = NULL; - int stat = 0; - - if (!Job || !events) { - return 0; - } - - lock_python(); -// PyEval_AcquireLock(); - - method = find_method(events, method, event); - if (!method) { - goto bail_out; - } - - bstrncpy(jcr->event, event, sizeof(jcr->event)); - result = PyObject_CallFunction(method, (char *)"O", Job); - jcr->event[0] = 0; /* no event in progress */ - if (result == NULL) { - if (PyErr_Occurred()) { - PyErr_Print(); - Pmsg1(000, "Error in Python method %s\n", event); - } - } else { - stat = 1; - } - Py_XDECREF(result); - -bail_out: - unlock_python(); -// PyEval_ReleaseLock(); - return stat; -} - - -#else - -/* Dummy if Python not configured */ -int generate_job_event(JCR *jcr, const char *event) -{ return 1; } - - -#endif /* HAVE_PYTHON */ diff --git a/bacula/src/filed/restore.c b/bacula/src/filed/restore.c index 96edcc808b..4aa4898638 100644 --- a/bacula/src/filed/restore.c +++ b/bacula/src/filed/restore.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2012 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Bacula File Daemon restore.c Restorefiles. @@ -368,7 +356,7 @@ void do_restore(JCR *jcr) r_ctx rctx; ATTR *attr; /* ***FIXME*** make configurable */ - crypto_digest_t signing_algorithm = have_sha2 ? + crypto_digest_t signing_algorithm = have_sha2 ? CRYPTO_DIGEST_SHA256 : CRYPTO_DIGEST_SHA1; memset(&rctx, 0, sizeof(rctx)); rctx.jcr = jcr; @@ -396,7 +384,7 @@ void do_restore(JCR *jcr) } else { buf_size = 0; /* use default */ } - if (!bnet_set_buffer_size(sd, buf_size, BNET_SETBUF_WRITE)) { + if (!sd->set_buffer_size(buf_size, BNET_SETBUF_WRITE)) { jcr->setJobStatus(JS_ErrorTerminated); return; } @@ -426,7 +414,7 @@ void do_restore(JCR *jcr) rctx.fork_cipher_ctx.buf = get_memory(CRYPTO_CIPHER_MAX_BLOCK_SIZE); } } - + /* * Get a record from the Storage daemon. We are guaranteed to * receive records in the following order: @@ -488,7 +476,7 @@ void do_restore(JCR *jcr) } /* Strip off new stream high bits */ rctx.stream = rctx.full_stream & STREAMMASK_TYPE; - Dmsg5(150, "Got hdr: Files=%d FilInx=%d size=%d Stream=%d, %s.\n", + Dmsg5(150, "Got hdr: Files=%d FilInx=%d size=%d Stream=%d, %s.\n", jcr->JobFiles, file_index, rctx.size, rctx.stream, stream_to_ascii(rctx.stream)); /* @@ -499,13 +487,13 @@ void do_restore(JCR *jcr) goto bail_out; } if (rctx.size != (uint32_t)sd->msglen) { - Jmsg2(jcr, M_FATAL, 0, _("Actual data size %d not same as header %d\n"), + Jmsg2(jcr, M_FATAL, 0, _("Actual data size %d not same as header %d\n"), sd->msglen, rctx.size); Dmsg2(50, "Actual data size %d not same as header %d\n", sd->msglen, rctx.size); goto bail_out; } - Dmsg3(130, "Got stream: %s len=%d extract=%d\n", stream_to_ascii(rctx.stream), + Dmsg3(130, "Got stream: %s len=%d extract=%d\n", stream_to_ascii(rctx.stream), sd->msglen, rctx.extract); /* @@ -544,7 +532,7 @@ void do_restore(JCR *jcr) } /* * Restore objects should be ignored here -- they are - * returned at the beginning of the restore. + * returned at the beginning of the restore. */ if (IS_FT_OBJECT(rctx.type)) { continue; @@ -557,14 +545,17 @@ void do_restore(JCR *jcr) goto bail_out; } - Dmsg3(100, "File %s\nattrib=%s\nattribsEx=%s\n", attr->fname, - attr->attr, attr->attrEx); + attr->data_stream = decode_stat(attr->attr, &attr->statp, sizeof(attr->statp), &attr->LinkFI); + + Dmsg5(100, "Stream %d: %s, File %s\nattrib=%s\nattribsEx=%s\n", + attr->data_stream, stream_to_ascii(attr->data_stream), + attr->fname, attr->attr, attr->attrEx); Dmsg3(100, "=== msglen=%d attrExlen=%d msg=%s\n", sd->msglen, strlen(attr->attrEx), sd->msg); - attr->data_stream = decode_stat(attr->attr, &attr->statp, sizeof(attr->statp), &attr->LinkFI); - if (!is_restore_stream_supported(attr->data_stream)) { + Dmsg2(15, "Non-supported data stream %d: %s\n", + attr->data_stream, stream_to_ascii(attr->data_stream)); if (!non_support_data++) { Jmsg(jcr, M_WARNING, 0, _("%s stream not supported on this Client.\n"), stream_to_ascii(attr->data_stream)); @@ -584,12 +575,12 @@ void do_restore(JCR *jcr) if (jcr->plugin) { stat = plugin_create_file(jcr, attr, &rctx.bfd, jcr->replace); - } - + } + if (stat == CF_CORE) { stat = create_file(jcr, attr, &rctx.bfd, jcr->replace); } - jcr->lock(); + jcr->lock(); pm_strcpy(jcr->last_fname, attr->ofname); jcr->last_type = attr->type; jcr->unlock(); @@ -675,7 +666,7 @@ void do_restore(JCR *jcr) if (jcr->crypto.digest) { crypto_digest_free(jcr->crypto.digest); - } + } jcr->crypto.digest = crypto_digest_new(jcr, signing_algorithm); if (!jcr->crypto.digest) { Jmsg0(jcr, M_FATAL, 0, _("Could not create digest.\n")); @@ -687,9 +678,9 @@ void do_restore(JCR *jcr) /* * Decode and save session keys. */ - cryptoerr = crypto_session_decode((uint8_t *)sd->msg, (uint32_t)sd->msglen, + cryptoerr = crypto_session_decode((uint8_t *)sd->msg, (uint32_t)sd->msglen, jcr->crypto.pki_recipients, &rctx.cs); - switch(cryptoerr) { + switch (cryptoerr) { case CRYPTO_ERROR_NONE: /* * Success @@ -701,11 +692,19 @@ void do_restore(JCR *jcr) case CRYPTO_ERROR_DECRYPTION: Jmsg(jcr, M_ERROR, 0, _("Decrypt of the session key failed.\n")); break; + case CRYPTO_ERROR_NOSIGNER: + Jmsg(jcr, M_ERROR, 0, _("Signer not found. Decryption failed.\n")); + break; + case CRYPTO_ERROR_INVALID_DIGEST: + Jmsg(jcr, M_ERROR, 0, _("Unsupported digest algorithm. Decrypt failed.\n")); + break; + case CRYPTO_ERROR_INVALID_CRYPTO: + Jmsg(jcr, M_ERROR, 0, _("Unsupported encryption algorithm. Decrypt failed.\n")); + break; default: - /* - * Shouldn't happen - */ - Jmsg1(jcr, M_ERROR, 0, _("An error occurred while decoding encrypted session data stream: %s\n"), crypto_strerror(cryptoerr)); + /* This shouldn't happen */ + Jmsg2(jcr, M_ERROR, 0, _("An error=%d occurred while decoding encrypted session data stream: ERR=%s\n"), + cryptoerr, crypto_strerror(cryptoerr)); break; } @@ -735,7 +734,7 @@ void do_restore(JCR *jcr) /* * Force an expected, consistent stream type here */ - if (rctx.extract && (rctx.prev_stream == rctx.stream + if (rctx.extract && (rctx.prev_stream == rctx.stream || rctx.prev_stream == STREAM_UNIX_ATTRIBUTES || rctx.prev_stream == STREAM_UNIX_ATTRIBUTES_EX || rctx.prev_stream == STREAM_ENCRYPTED_SESSION_DATA)) { @@ -747,7 +746,7 @@ void do_restore(JCR *jcr) rctx.flags |= FO_SPARSE; } - if (rctx.stream == STREAM_GZIP_DATA + if (rctx.stream == STREAM_GZIP_DATA || rctx.stream == STREAM_SPARSE_GZIP_DATA || rctx.stream == STREAM_WIN32_GZIP_DATA || rctx.stream == STREAM_ENCRYPTED_FILE_GZIP_DATA @@ -766,7 +765,7 @@ void do_restore(JCR *jcr) || rctx.stream == STREAM_ENCRYPTED_WIN32_DATA || rctx.stream == STREAM_ENCRYPTED_FILE_COMPRESSED_DATA || rctx.stream == STREAM_ENCRYPTED_WIN32_COMPRESSED_DATA - || rctx.stream == STREAM_ENCRYPTED_WIN32_GZIP_DATA) { + || rctx.stream == STREAM_ENCRYPTED_WIN32_GZIP_DATA) { /* * Set up a decryption context */ @@ -778,7 +777,7 @@ void do_restore(JCR *jcr) continue; } - if ((rctx.cipher_ctx.cipher = crypto_cipher_new(rctx.cs, false, + if ((rctx.cipher_ctx.cipher = crypto_cipher_new(rctx.cs, false, &rctx.cipher_ctx.block_size)) == NULL) { Jmsg1(jcr, M_ERROR, 0, _("Failed to initialize decryption context for %s\n"), jcr->last_fname); free_session(rctx); @@ -790,7 +789,8 @@ void do_restore(JCR *jcr) rctx.flags |= FO_ENCRYPT; } - if (is_win32_stream(rctx.stream) && !have_win32_api()) { + if (is_win32_stream(rctx.stream) && + (win32decomp || !have_win32_api())) { set_portable_backup(&rctx.bfd); /* * "decompose" BackupWrite data @@ -1019,7 +1019,7 @@ void do_restore(JCR *jcr) if (!close_previous_stream(jcr, rctx)) { goto bail_out; } - Dmsg1(50, "restore stream_plugin_name=%s\n", sd->msg); + Dmsg1(150, "restore stream_plugin_name=%s\n", sd->msg); plugin_name_stream(jcr, sd->msg); break; @@ -1182,7 +1182,7 @@ static const char *zlib_strerror(int stat) } #endif -static int do_file_digest(JCR *jcr, FF_PKT *ff_pkt, bool top_level) +static int do_file_digest(JCR *jcr, FF_PKT *ff_pkt, bool top_level) { Dmsg1(50, "do_file_digest jcr=%p\n", jcr); return (digest_file(jcr, ff_pkt, jcr->crypto.digest)); @@ -1201,7 +1201,7 @@ static bool verify_signature(JCR *jcr, r_ctx &rctx) DIGEST *digest = NULL; crypto_error_t err; uint64_t saved_bytes; - crypto_digest_t signing_algorithm = have_sha2 ? + crypto_digest_t signing_algorithm = have_sha2 ? CRYPTO_DIGEST_SHA256 : CRYPTO_DIGEST_SHA1; crypto_digest_t algorithm; SIGNATURE *sig = rctx.sig; @@ -1214,8 +1214,8 @@ static bool verify_signature(JCR *jcr, r_ctx &rctx) return true; } if (!sig) { - if (rctx.type == FT_REGE || rctx.type == FT_REG || rctx.type == FT_RAW) { - Jmsg1(jcr, M_ERROR, 0, _("Missing cryptographic signature for %s\n"), + if (rctx.type == FT_REGE || rctx.type == FT_REG || rctx.type == FT_RAW) { + Jmsg1(jcr, M_ERROR, 0, _("Missing cryptographic signature for %s\n"), jcr->last_fname); goto bail_out; } @@ -1232,15 +1232,15 @@ static bool verify_signature(JCR *jcr, r_ctx &rctx) Dmsg0(50, "== Got digest\n"); /* * We computed jcr->crypto.digest using signing_algorithm while writing - * the file. If it is not the same as the algorithm used for - * this file, punt by releasing the computed algorithm and + * the file. If it is not the same as the algorithm used for + * this file, punt by releasing the computed algorithm and * computing by re-reading the file. */ if (algorithm != signing_algorithm) { if (jcr->crypto.digest) { crypto_digest_free(jcr->crypto.digest); jcr->crypto.digest = NULL; - } + } } if (jcr->crypto.digest) { /* @@ -1248,13 +1248,13 @@ static bool verify_signature(JCR *jcr, r_ctx &rctx) */ if ((err = crypto_sign_verify(sig, keypair, jcr->crypto.digest)) != CRYPTO_ERROR_NONE) { Dmsg1(50, "Bad signature on %s\n", jcr->last_fname); - Jmsg2(jcr, M_ERROR, 0, _("Signature validation failed for file %s: ERR=%s\n"), + Jmsg2(jcr, M_ERROR, 0, _("Signature validation failed for file %s: ERR=%s\n"), jcr->last_fname, crypto_strerror(err)); goto bail_out; } - } else { + } else { /* - * Signature found, digest allocated. Old method, + * Signature found, digest allocated. Old method, * re-read the file and compute the digest */ jcr->crypto.digest = digest; @@ -1263,9 +1263,9 @@ static bool verify_signature(JCR *jcr, r_ctx &rctx) * Checksum the entire file * Make sure we don't modify JobBytes by saving and restoring it */ - saved_bytes = jcr->JobBytes; + saved_bytes = jcr->JobBytes; if (find_one_file(jcr, jcr->ff, do_file_digest, jcr->last_fname, (dev_t)-1, 1) != 0) { - Jmsg(jcr, M_ERROR, 0, _("Digest one file failed for file: %s\n"), + Jmsg(jcr, M_ERROR, 0, _("Digest one file failed for file: %s\n"), jcr->last_fname); jcr->JobBytes = saved_bytes; goto bail_out; @@ -1277,7 +1277,7 @@ static bool verify_signature(JCR *jcr, r_ctx &rctx) */ if ((err = crypto_sign_verify(sig, keypair, digest)) != CRYPTO_ERROR_NONE) { Dmsg1(50, "Bad signature on %s\n", jcr->last_fname); - Jmsg2(jcr, M_ERROR, 0, _("Signature validation failed for file %s: ERR=%s\n"), + Jmsg2(jcr, M_ERROR, 0, _("Signature validation failed for file %s: ERR=%s\n"), jcr->last_fname, crypto_strerror(err)); goto bail_out; } @@ -1333,7 +1333,7 @@ bool sparse_data(JCR *jcr, BFILE *bfd, uint64_t *addr, char **data, uint32_t *le if (blseek(bfd, (boffset_t)*addr, SEEK_SET) < 0) { berrno be; Jmsg3(jcr, M_ERROR, 0, _("Seek to %s error on %s: ERR=%s\n"), - edit_uint64(*addr, ec1), jcr->last_fname, + edit_uint64(*addr, ec1), jcr->last_fname, be.bstrerror(bfd->berrno)); return false; } @@ -1419,7 +1419,7 @@ bool decompress_data(JCR *jcr, int32_t stream, char **data, uint32_t *length) uLong compress_len; int stat; - /* + /* * NOTE! We only use uLong and Byte because they are * needed by the zlib routines, they should not otherwise * be used in Bacula. @@ -1465,23 +1465,55 @@ static void unser_crypto_packet_len(RESTORE_CIPHER_CTX *ctx) bool store_data(JCR *jcr, BFILE *bfd, char *data, const int32_t length, bool win32_decomp) { + ssize_t wstat; + if (jcr->crypto.digest) { crypto_digest_update(jcr->crypto.digest, (uint8_t *)data, length); } if (win32_decomp) { if (!processWin32BackupAPIBlock(bfd, data, length)) { berrno be; - Jmsg2(jcr, M_ERROR, 0, _("Write error in Win32 Block Decomposition on %s: %s\n"), + Jmsg2(jcr, M_ERROR, 0, _("Write error in Win32 Block Decomposition on %s: %s\n"), jcr->last_fname, be.bstrerror(bfd->berrno)); return false; } - } else if (bwrite(bfd, data, length) != (ssize_t)length) { + } else if ((wstat=bwrite(bfd, data, length)) != (ssize_t)length) { berrno be; - Jmsg2(jcr, M_ERROR, 0, _("Write error on %s: %s\n"), - jcr->last_fname, be.bstrerror(bfd->berrno)); + int type = M_ERROR; + int len = strlen(jcr->last_fname); + /* + * If this is the first write and the "file" is a directory + * or a drive letter, then only issue a warning as we are + * not able to reset the metadata, then continue. + * If the above is true and we have an error code 91 + * (directory not empty), supress the error entirely. + */ + if (bfd->block == 0 && len >= 2 && (jcr->last_fname[len-1] == '/' || + jcr->last_fname[len-1] == ':')) { + type = M_WARNING; + if (bfd->lerror == 91) { /* Directory not empty */ + type = 0; /* suppress error */ + } + } + if (type != 0) { + if (wstat >= 0) { + /* Insufficient bytes written */ + Jmsg4(jcr, type, 0, _("Wrong write size error at %lld block=%d wanted=%d wrote=%d\n"), + bfd->total_bytes, bfd->block, length, wstat); + } else { + /* Error */ + Jmsg6(jcr, type, 0, _("Write write error at %lld block=%d write_len=%d lerror=%d on %s: ERR=%s\n"), + bfd->total_bytes, bfd->block, length, bfd->lerror, + jcr->last_fname, be.bstrerror(bfd->berrno)); + } + } + + /* Ignore errors? */ + if (type == M_WARNING || type == 0 || no_win32_write_errors) { + return true; + } return false; } - return true; } @@ -1516,16 +1548,16 @@ int32_t extract_data(JCR *jcr, BFILE *bfd, POOLMEM *buf, int32_t buflen, * crypto_cipher_update() will process only whole blocks, * buffering the remaining input. */ - cipher_ctx->buf = check_pool_memory_size(cipher_ctx->buf, + cipher_ctx->buf = check_pool_memory_size(cipher_ctx->buf, cipher_ctx->buf_len + wsize + cipher_ctx->block_size); /* * Decrypt the input block */ - if (!crypto_cipher_update(cipher_ctx->cipher, - (const u_int8_t *)wbuf, - wsize, - (u_int8_t *)&cipher_ctx->buf[cipher_ctx->buf_len], + if (!crypto_cipher_update(cipher_ctx->cipher, + (const u_int8_t *)wbuf, + wsize, + (u_int8_t *)&cipher_ctx->buf[cipher_ctx->buf_len], &decrypted_len)) { /* * Decryption failed. Shouldn't happen. @@ -1597,7 +1629,7 @@ int32_t extract_data(JCR *jcr, BFILE *bfd, POOLMEM *buf, int32_t buflen, /* Move any remaining data to start of buffer */ if (cipher_ctx->buf_len > 0) { Dmsg1(130, "Moving %u buffered bytes to start of buffer\n", cipher_ctx->buf_len); - memmove(cipher_ctx->buf, &cipher_ctx->buf[cipher_ctx->packet_len], + memmove(cipher_ctx->buf, &cipher_ctx->buf[cipher_ctx->packet_len], cipher_ctx->buf_len); } /* @@ -1624,7 +1656,7 @@ static bool close_previous_stream(JCR *jcr, r_ctx &rctx) if (rctx.extract) { if (rctx.size > 0 && !is_bopen(&rctx.bfd)) { Jmsg0(rctx.jcr, M_ERROR, 0, _("Logic error: output file should be open\n")); - Dmsg2(000, "=== logic error size=%d bopen=%d\n", rctx.size, + Dmsg2(000, "=== logic error size=%d bopen=%d\n", rctx.size, is_bopen(&rctx.bfd)); } @@ -1687,7 +1719,7 @@ again: /* * Write out the remaining block and free the cipher context */ - cipher_ctx->buf = check_pool_memory_size(cipher_ctx->buf, cipher_ctx->buf_len + + cipher_ctx->buf = check_pool_memory_size(cipher_ctx->buf, cipher_ctx->buf_len + cipher_ctx->block_size); if (!crypto_cipher_finalize(cipher_ctx->cipher, (uint8_t *)&cipher_ctx->buf[cipher_ctx->buf_len], @@ -1695,7 +1727,7 @@ again: /* * Writing out the final, buffered block failed. Shouldn't happen. */ - Jmsg3(jcr, M_ERROR, 0, _("Decryption error. buf_len=%d decrypt_len=%d on file %s\n"), + Jmsg3(jcr, M_ERROR, 0, _("Decryption error. buf_len=%d decrypt_len=%d on file %s\n"), cipher_ctx->buf_len, decrypted_len, jcr->last_fname); } @@ -1743,7 +1775,7 @@ again: */ if (cipher_ctx->buf_len > 0) { Dmsg1(130, "Moving %u buffered bytes to start of buffer\n", cipher_ctx->buf_len); - memmove(cipher_ctx->buf, &cipher_ctx->buf[cipher_ctx->packet_len], + memmove(cipher_ctx->buf, &cipher_ctx->buf[cipher_ctx->packet_len], cipher_ctx->buf_len); } /* diff --git a/bacula/src/filed/restore.h b/bacula/src/filed/restore.h index 6a522688e6..779e49b02d 100644 --- a/bacula/src/filed/restore.h +++ b/bacula/src/filed/restore.h @@ -3,27 +3,15 @@ Copyright (C) 2009 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ #ifndef __RESTORE_H diff --git a/bacula/src/filed/status.c b/bacula/src/filed/status.c index 93e1c72417..5747057a74 100644 --- a/bacula/src/filed/status.c +++ b/bacula/src/filed/status.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2001-2011 Free Software Foundation Europe e.V. + Copyright (C) 2001-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Bacula File Daemon Status routines @@ -42,14 +30,12 @@ extern bool GetWindowsVersionString(char *buf, int maxsiz); /* Forward referenced functions */ -static void list_terminated_jobs(STATUS_PKT *sp); static void list_running_jobs(STATUS_PKT *sp); static void list_status_header(STATUS_PKT *sp); -static void sendit(const char *msg, int len, STATUS_PKT *sp); -static const char *level_to_str(int level); /* Static variables */ -static char qstatus[] = ".status %s\n"; +static char qstatus1[] = ".status %127s\n"; +static char qstatus2[] = ".status %127s api=%d api_opts=%127s"; static char OKqstatus[] = "2000 OK .status\n"; static char DotStatusJob[] = "JobId=%d JobStatus=%c JobErrors=%d\n"; @@ -72,9 +58,15 @@ void output_status(STATUS_PKT *sp) { list_status_header(sp); list_running_jobs(sp); - list_terminated_jobs(sp); + list_terminated_jobs(sp); /* defined in lib/status.h */ } +#if defined(HAVE_LZO) +static const bool have_lzo = true; +#else +static const bool have_lzo = false; +#endif + static void list_status_header(STATUS_PKT *sp) { POOL_MEM msg(PM_MESSAGE); @@ -82,8 +74,9 @@ static void list_status_header(STATUS_PKT *sp) int len; char dt[MAX_TIME_LENGTH]; - len = Mmsg(msg, _("%s Version: %s (%s) %s %s %s %s\n"), - my_name, VERSION, BDATE, VSS, HOST_OS, DISTNAME, DISTVER); + len = Mmsg(msg, _("%s Version: %s (%s) %s %s %s %s\n"), + my_name, VERSION, BDATE, VSS, HOST_OS, + DISTNAME, DISTVER); sendit(msg.c_str(), len, sp); bstrftime_nc(dt, sizeof(dt), daemon_start_time); len = Mmsg(msg, _("Daemon started %s. Jobs: run=%d running=%d.\n"), @@ -131,12 +124,13 @@ static void list_status_header(STATUS_PKT *sp) p_SetCurrentDirectoryA?"":"!", p_SetCurrentDirectoryW?"":"!"); sendit(msg.c_str(), len, sp); - len = Mmsg(msg, " %sGCDA,%sGCDW,%sGVPNW,%sGVNFVMPW\n", + len = Mmsg(msg, " %sGCDA,%sGCDW,%sGVPNW,%sGVNFVMPW,%sLZO\n", p_GetCurrentDirectoryA?"":"!", p_GetCurrentDirectoryW?"":"!", p_GetVolumePathNameW?"":"!", - p_GetVolumeNameForVolumeMountPointW?"":"!"); - sendit(msg.c_str(), len, sp); + p_GetVolumeNameForVolumeMountPointW?"":"!", + have_lzo?"":"!"); + sendit(msg.c_str(), len, sp); } #endif len = Mmsg(msg, _(" Heap: heap=%s smbytes=%s max_bytes=%s bufs=%s max_bufs=%s\n"), @@ -146,15 +140,25 @@ static void list_status_header(STATUS_PKT *sp) edit_uint64_with_commas(sm_buffers, b4), edit_uint64_with_commas(sm_max_buffers, b5)); sendit(msg.c_str(), len, sp); - len = Mmsg(msg, _(" Sizeof: boffset_t=%d size_t=%d debug=%d trace=%d\n"), - sizeof(boffset_t), sizeof(size_t), debug_level, get_trace()); + len = Mmsg(msg, _(" Sizes: boffset_t=%d size_t=%d debug=%s trace=%d " + "mode=%d,%d bwlimit=%skB/s\n"), + sizeof(boffset_t), sizeof(size_t), + edit_uint64(debug_level, b2), get_trace(), (int)DEVELOPER_MODE, (int)BEEF, + edit_uint64_with_commas(me->max_bandwidth_per_job/1024, b1)); sendit(msg.c_str(), len, sp); - if (debug_level > 0 && bplugin_list->size() > 0) { + if (bplugin_list->size() > 0) { Plugin *plugin; int len; - pm_strcpy(msg, "Plugin: "); + pm_strcpy(msg, " Plugin: "); foreach_alist(plugin, bplugin_list) { len = pm_strcat(msg, plugin->file); + /* Print plugin version when debug activated */ + if (debug_level > 0 && plugin->pinfo) { + pInfo *info = (pInfo *)plugin->pinfo; + pm_strcat(msg, "("); + pm_strcat(msg, NPRT(info->plugin_version)); + len = pm_strcat(msg, ")"); + } if (len > 80) { pm_strcat(msg, "\n "); } else { @@ -166,18 +170,20 @@ static void list_status_header(STATUS_PKT *sp) } } +/* + * List running jobs in for humans. + */ static void list_running_jobs_plain(STATUS_PKT *sp) { - int sec, bps; + int total_sec, inst_sec, total_bps, inst_bps; POOL_MEM msg(PM_MESSAGE); - char b1[32], b2[32], b3[32]; + char b1[50], b2[50], b3[50], b4[50], b5[50]; int len; bool found = false; JCR *njcr; + time_t now = time(NULL); char dt[MAX_TIME_LENGTH]; - /* - * List running jobs - */ + Dmsg0(1000, "Begin status jcr loop.\n"); len = Mmsg(msg, _("\nRunning Jobs:\n")); sendit(msg.c_str(), len, sp); @@ -196,26 +202,58 @@ static void list_running_jobs_plain(STATUS_PKT *sp) njcr->JobId, njcr->Job); sendit(msg.c_str(), len, sp); len = Mmsg(msg, _(" %s%s %s Job started: %s\n"), - vss, level_to_str(njcr->getJobLevel()), + vss, job_level_to_str(njcr->getJobLevel()), job_type_to_str(njcr->getJobType()), dt); } sendit(msg.c_str(), len, sp); if (njcr->JobId == 0) { continue; } - sec = time(NULL) - njcr->start_time; - if (sec <= 0) { - sec = 1; + if (njcr->last_time == 0) { + njcr->last_time = njcr->start_time; } - bps = (int)(njcr->JobBytes / sec); - len = Mmsg(msg, _(" Files=%s Bytes=%s Bytes/sec=%s Errors=%d\n"), + total_sec = now - njcr->start_time; + inst_sec = now - njcr->last_time; + if (total_sec <= 0) { + total_sec = 1; + } + if (inst_sec <= 0) { + inst_sec = 1; + } + /* Instanteous bps not smoothed */ + inst_bps = (njcr->JobBytes - njcr->LastJobBytes) / inst_sec; + if (njcr->LastRate <= 0) { + njcr->LastRate = inst_bps; + } + /* Smooth the instantaneous bps a bit */ + inst_bps = (2 * njcr->LastRate + inst_bps) / 3; + /* total bps (AveBytes/sec) since start of job */ + total_bps = njcr->JobBytes / total_sec; + len = Mmsg(msg, _(" Files=%s Bytes=%s AveBytes/sec=%s LastBytes/sec=%s Errors=%d\n" + " Bwlimit=%s\n"), edit_uint64_with_commas(njcr->JobFiles, b1), edit_uint64_with_commas(njcr->JobBytes, b2), - edit_uint64_with_commas(bps, b3), - njcr->JobErrors); + edit_uint64_with_commas(total_bps, b3), + edit_uint64_with_commas(inst_bps, b4), + njcr->JobErrors, edit_uint64_with_commas(njcr->max_bandwidth, b5)); sendit(msg.c_str(), len, sp); - len = Mmsg(msg, _(" Files Examined=%s\n"), - edit_uint64_with_commas(njcr->num_files_examined, b1)); + + if (njcr->is_JobType(JT_RESTORE) && njcr->ExpectedFiles > 0) { + len = Mmsg(msg, _(" Files: Restored=%s Expected=%s Completed=%d%%\n"), + edit_uint64_with_commas(njcr->num_files_examined, b1), + edit_uint64_with_commas(njcr->ExpectedFiles, b2), + (100*njcr->num_files_examined)/njcr->ExpectedFiles); + } else { + len = Mmsg(msg, _(" Files: Examined=%s Backed up=%s\n"), + edit_uint64_with_commas(njcr->num_files_examined, b1), + edit_uint64_with_commas(njcr->JobFiles, b2)); + } + /* Update only every 10 seconds */ + if (now - njcr->last_time > 10) { + njcr->LastRate = inst_bps; + njcr->LastJobBytes = njcr->JobBytes; + njcr->last_time = now; + } sendit(msg.c_str(), len, sp); if (njcr->JobFiles > 0) { njcr->lock(); @@ -269,7 +307,7 @@ static void list_running_jobs_api(STATUS_PKT *sp) njcr->JobId, njcr->Job); sendit(msg.c_str(), len, sp); len = Mmsg(msg," VSS=%d\n Level=%c\n JobType=%c\n JobStarted=%s\n", - vss, njcr->getJobLevel(), + vss, njcr->getJobLevel(), njcr->getJobType(), dt); } sendit(msg.c_str(), len, sp); @@ -316,114 +354,6 @@ static void list_running_jobs(STATUS_PKT *sp) } else { list_running_jobs_plain(sp); } -} - -static void list_terminated_jobs(STATUS_PKT *sp) -{ - char dt[MAX_TIME_LENGTH], b1[30], b2[30]; - char level[10]; - struct s_last_job *je; - const char *msg; - - if (!sp->api) { - msg = _("\nTerminated Jobs:\n"); - sendit(msg, strlen(msg), sp); - } - - if (last_jobs->size() == 0) { - if (!sp->api) sendit(_("====\n"), 5, sp); - return; - } - lock_last_jobs_list(); - if (!sp->api) { - msg = _(" JobId Level Files Bytes Status Finished Name \n"); - sendit(msg, strlen(msg), sp); - msg = _("======================================================================\n"); - sendit(msg, strlen(msg), sp); - } - foreach_dlist(je, last_jobs) { - char JobName[MAX_NAME_LENGTH]; - const char *termstat; - char buf[1000]; - - bstrftime_nc(dt, sizeof(dt), je->end_time); - switch (je->JobType) { - case JT_ADMIN: - case JT_RESTORE: - bstrncpy(level, " ", sizeof(level)); - break; - default: - bstrncpy(level, level_to_str(je->JobLevel), sizeof(level)); - level[4] = 0; - break; - } - switch (je->JobStatus) { - case JS_Created: - termstat = _("Created"); - break; - case JS_FatalError: - case JS_ErrorTerminated: - termstat = _("Error"); - break; - case JS_Differences: - termstat = _("Diffs"); - break; - case JS_Canceled: - termstat = _("Cancel"); - break; - case JS_Terminated: - termstat = _("OK"); - break; - default: - termstat = _("Other"); - break; - } - bstrncpy(JobName, je->Job, sizeof(JobName)); - /* There are three periods after the Job name */ - char *p; - for (int i=0; i<3; i++) { - if ((p=strrchr(JobName, '.')) != NULL) { - *p = 0; - } - } - if (sp->api) { - bsnprintf(buf, sizeof(buf), _("%6d\t%-6s\t%8s\t%10s\t%-7s\t%-8s\t%s\n"), - je->JobId, - level, - edit_uint64_with_commas(je->JobFiles, b1), - edit_uint64_with_suffix(je->JobBytes, b2), - termstat, - dt, JobName); - } else { - bsnprintf(buf, sizeof(buf), _("%6d %-6s %8s %10s %-7s %-8s %s\n"), - je->JobId, - level, - edit_uint64_with_commas(je->JobFiles, b1), - edit_uint64_with_suffix(je->JobBytes, b2), - termstat, - dt, JobName); - } - sendit(buf, strlen(buf), sp); - } - if (!sp->api) sendit(_("====\n"), 5, sp); - unlock_last_jobs_list(); -} - - -/* - * Send to bsock (Director or Console) - */ -static void sendit(const char *msg, int len, STATUS_PKT *sp) -{ - if (sp->bs) { - BSOCK *user = sp->bs; - user->msg = check_pool_memory_size(user->msg, len+1); - memcpy(user->msg, msg, len+1); - user->msglen = len+1; - user->send(); - } else { - sp->callback(msg, len, sp->context); - } } /* @@ -457,17 +387,19 @@ int qstatus_cmd(JCR *jcr) sp.bs = dir; cmd = get_memory(dir->msglen+1); - if (sscanf(dir->msg, qstatus, cmd) != 1) { - pm_strcpy(&jcr->errmsg, dir->msg); - Jmsg1(jcr, M_FATAL, 0, _("Bad .status command: %s\n"), jcr->errmsg); - dir->fsend(_("2900 Bad .status command, missing argument.\n")); - dir->signal(BNET_EOD); - free_memory(cmd); - return 0; + if (sscanf(dir->msg, qstatus2, cmd, &sp.api, sp.api_opts) != 3) { + if (sscanf(dir->msg, qstatus1, cmd) != 1) { + pm_strcpy(&jcr->errmsg, dir->msg); + Jmsg1(jcr, M_FATAL, 0, _("Bad .status command: %s\n"), jcr->errmsg); + dir->fsend(_("2900 Bad .status command, missing argument.\n")); + dir->signal(BNET_EOD); + free_memory(cmd); + return 0; + } } unbash_spaces(cmd); - if (strcmp(cmd, "current") == 0) { + if (strcasecmp(cmd, "current") == 0) { dir->fsend(OKqstatus, cmd); foreach_jcr(njcr) { if (njcr->JobId != 0) { @@ -475,7 +407,7 @@ int qstatus_cmd(JCR *jcr) } } endeach_jcr(njcr); - } else if (strcmp(cmd, "last") == 0) { + } else if (strcasecmp(cmd, "last") == 0) { dir->fsend(OKqstatus, cmd); if ((last_jobs) && (last_jobs->size() > 0)) { job = (s_last_job*)last_jobs->last(); @@ -488,8 +420,8 @@ int qstatus_cmd(JCR *jcr) sp.api = true; list_running_jobs(&sp); } else if (strcasecmp(cmd, "terminated") == 0) { - sp.api = true; - list_terminated_jobs(&sp); + sp.api = MAX(sp.api, 1); + list_terminated_jobs(&sp); /* defined in lib/status.h */ } else { pm_strcpy(&jcr->errmsg, dir->msg); Jmsg1(jcr, M_FATAL, 0, _("Bad .status command: %s\n"), jcr->errmsg); @@ -503,109 +435,3 @@ int qstatus_cmd(JCR *jcr) free_memory(cmd); return 1; } - -/* - * Convert Job Level into a string - */ -static const char *level_to_str(int level) -{ - const char *str; - - switch (level) { - case L_BASE: - str = _("Base"); - case L_FULL: - str = _("Full"); - break; - case L_INCREMENTAL: - str = _("Incremental"); - break; - case L_DIFFERENTIAL: - str = _("Differential"); - break; - case L_SINCE: - str = _("Since"); - break; - case L_VERIFY_CATALOG: - str = _("Verify Catalog"); - break; - case L_VERIFY_INIT: - str = _("Init Catalog"); - break; - case L_VERIFY_VOLUME_TO_CATALOG: - str = _("Volume to Catalog"); - break; - case L_VERIFY_DISK_TO_CATALOG: - str = _("Disk to Catalog"); - break; - case L_VERIFY_DATA: - str = _("Data"); - break; - case L_NONE: - str = " "; - break; - default: - str = _("Unknown Job Level"); - break; - } - return str; -} - - -#if defined(HAVE_WIN32) -int bacstat = 0; - -/* - * Put message in Window List Box - */ -char *bac_status(char *buf, int buf_len) -{ - JCR *njcr; - const char *termstat = _("Bacula Client: Idle"); - struct s_last_job *job; - int stat = 0; /* Idle */ - - if (!last_jobs) { - goto done; - } - Dmsg0(1000, "Begin bac_status jcr loop.\n"); - foreach_jcr(njcr) { - if (njcr->JobId != 0) { - stat = JS_Running; - termstat = _("Bacula Client: Running"); - break; - } - } - endeach_jcr(njcr); - - if (stat != 0) { - goto done; - } - if (last_jobs->size() > 0) { - job = (struct s_last_job *)last_jobs->last(); - stat = job->JobStatus; - switch (job->JobStatus) { - case JS_Canceled: - termstat = _("Bacula Client: Last Job Canceled"); - break; - case JS_ErrorTerminated: - case JS_FatalError: - termstat = _("Bacula Client: Last Job Failed"); - break; - default: - if (job->Errors) { - termstat = _("Bacula Client: Last Job had Warnings"); - } - break; - } - } - Dmsg0(1000, "End bac_status jcr loop.\n"); -done: - bacstat = stat; - if (buf) { - bstrncpy(buf, termstat, buf_len); - } - return buf; -} - -#endif /* HAVE_WIN32 */ diff --git a/bacula/src/filed/verify.c b/bacula/src/filed/verify.c index 8219ab3d5f..d4350f0930 100644 --- a/bacula/src/filed/verify.c +++ b/bacula/src/filed/verify.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2011 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Bacula File Daemon verify.c Verify files. @@ -107,7 +95,7 @@ static int verify_file(JCR *jcr, FF_PKT *ff_pkt, bool top_level) case FT_DIRBEGIN: jcr->num_files_examined--; /* correct file count */ return 1; /* ignored */ - case FT_REPARSE: + case FT_REPARSE: case FT_JUNCTION: case FT_DIREND: Dmsg1(30, "FT_DIR saving: %s\n", ff_pkt->fname); @@ -211,7 +199,7 @@ static int verify_file(JCR *jcr, FF_PKT *ff_pkt, bool top_level) } Dmsg2(20, "bfiled>bdird: attribs len=%d: msg=%s\n", dir->msglen, dir->msg); if (!stat) { - Jmsg(jcr, M_FATAL, 0, _("Network error in send to Director: ERR=%s\n"), bnet_strerror(dir)); + Jmsg(jcr, M_FATAL, 0, _("Network error in send to Director: ERR=%s\n"), dir->bstrerror()); return 0; } @@ -254,7 +242,7 @@ static int verify_file(JCR *jcr, FF_PKT *ff_pkt, bool top_level) uint32_t size; size = sizeof(md); - + if (digest_file(jcr, ff_pkt, digest) != 0) { jcr->JobErrors++; goto good_rtn; @@ -263,7 +251,7 @@ static int verify_file(JCR *jcr, FF_PKT *ff_pkt, bool top_level) if (crypto_digest_finalize(digest, (uint8_t *)md, &size)) { char *digest_buf; const char *digest_name; - + digest_buf = (char *)malloc(BASE64_SIZE(size)); digest_name = crypto_digest_name(digest); @@ -368,11 +356,11 @@ static int read_digest(BFILE *bfd, DIGEST *digest, JCR *jcr) continue; /* skip block of zeros */ } } - + crypto_digest_update(digest, (uint8_t *)buf, n); /* Can be used by BaseJobs or with accurate, update only for Verify - * jobs + * jobs */ if (jcr->getJobType() == JT_VERIFY) { jcr->JobBytes += n; diff --git a/bacula/src/filed/verify_vol.c b/bacula/src/filed/verify_vol.c index cae6a3d9fb..aba6650500 100644 --- a/bacula/src/filed/verify_vol.c +++ b/bacula/src/filed/verify_vol.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2002-2010 Free Software Foundation Europe e.V. + Copyright (C) 2002-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Bacula File Daemon verify-vol.c Verify files on a Volume @@ -76,7 +64,7 @@ void do_verify_volume(JCR *jcr) } else { buf_size = 0; /* use default */ } - if (!bnet_set_buffer_size(sd, buf_size, BNET_SETBUF_WRITE)) { + if (!sd->set_buffer_size(buf_size, BNET_SETBUF_WRITE)) { jcr->setJobStatus(JS_FatalError); return; } @@ -97,20 +85,20 @@ void do_verify_volume(JCR *jcr) Jmsg1(jcr, M_FATAL, 0, _("Record header scan error: %s\n"), sd->msg); goto bail_out; } - Dmsg2(30, "Got hdr: FilInx=%d Stream=%d.\n", file_index, stream); + Dmsg3(30, "Got hdr: FilInx=%d Stream=%d size=%d.\n", file_index, stream, size); /* * Now we expect the Stream Data */ if (bget_msg(sd) < 0) { - Jmsg1(jcr, M_FATAL, 0, _("Data record error. ERR=%s\n"), bnet_strerror(sd)); + Jmsg1(jcr, M_FATAL, 0, _("Data record error. ERR=%s\n"), sd->bstrerror()); goto bail_out; } if (size != ((uint32_t)sd->msglen)) { Jmsg2(jcr, M_FATAL, 0, _("Actual data size %d not same as header %d\n"), sd->msglen, size); goto bail_out; } - Dmsg1(30, "Got stream data, len=%d\n", sd->msglen); + Dmsg2(30, "Got stream data %s, len=%d\n", stream_to_ascii(stream), sd->msglen); /* File Attributes stream */ switch (stream) { @@ -157,7 +145,7 @@ void do_verify_volume(JCR *jcr) } *fp = *ap++; /* terminate filename & point to attribs */ - Dmsg1(200, "Attr=%s\n", ap); + Dmsg2(100, "File=%s Attr=%s\n", fname, ap); /* Skip to Link name */ if (type == FT_LNK || type == FT_LNKSAVED) { lp = ap; @@ -188,22 +176,22 @@ void do_verify_volume(JCR *jcr) /* Send file attributes to Director */ Dmsg2(200, "send ATTR inx=%d fname=%s\n", jcr->JobFiles, fname); if (type == FT_LNK || type == FT_LNKSAVED) { - stat = bnet_fsend(dir, "%d %d %s %s%c%s%c%s%c", jcr->JobFiles, + stat = dir->fsend("%d %d %s %s%c%s%c%s%c", jcr->JobFiles, STREAM_UNIX_ATTRIBUTES, "pinsug5", fname, 0, ap, 0, lname, 0); /* for a deleted record, we set fileindex=0 */ } else if (type == FT_DELETED) { - stat = bnet_fsend(dir,"%d %d %s %s%c%s%c%c", 0, + stat = dir->fsend("%d %d %s %s%c%s%c%c", 0, STREAM_UNIX_ATTRIBUTES, "pinsug5", fname, 0, ap, 0, 0); } else { - stat = bnet_fsend(dir,"%d %d %s %s%c%s%c%c", jcr->JobFiles, + stat = dir->fsend("%d %d %s %s%c%s%c%c", jcr->JobFiles, STREAM_UNIX_ATTRIBUTES, "pinsug5", fname, 0, ap, 0, 0); } Dmsg2(200, "bfiled>bdird: attribs len=%d: msg=%s\n", dir->msglen, dir->msg); if (!stat) { - Jmsg(jcr, M_FATAL, 0, _("Network error in send to Director: ERR=%s\n"), bnet_strerror(dir)); + Jmsg(jcr, M_FATAL, 0, _("Network error in send to Director: ERR=%s\n"), dir->bstrerror()); goto bail_out; } break; @@ -211,7 +199,7 @@ void do_verify_volume(JCR *jcr) case STREAM_MD5_DIGEST: bin_to_base64(digest, sizeof(digest), (char *)sd->msg, CRYPTO_DIGEST_MD5_SIZE, true); Dmsg2(400, "send inx=%d MD5=%s\n", jcr->JobFiles, digest); - bnet_fsend(dir, "%d %d %s *MD5-%d*", jcr->JobFiles, STREAM_MD5_DIGEST, digest, + dir->fsend("%d %d %s *MD5-%d*", jcr->JobFiles, STREAM_MD5_DIGEST, digest, jcr->JobFiles); Dmsg2(20, "bfiled>bdird: MD5 len=%d: msg=%s\n", dir->msglen, dir->msg); break; @@ -219,7 +207,7 @@ void do_verify_volume(JCR *jcr) case STREAM_SHA1_DIGEST: bin_to_base64(digest, sizeof(digest), (char *)sd->msg, CRYPTO_DIGEST_SHA1_SIZE, true); Dmsg2(400, "send inx=%d SHA1=%s\n", jcr->JobFiles, digest); - bnet_fsend(dir, "%d %d %s *SHA1-%d*", jcr->JobFiles, STREAM_SHA1_DIGEST, + dir->fsend("%d %d %s *SHA1-%d*", jcr->JobFiles, STREAM_SHA1_DIGEST, digest, jcr->JobFiles); Dmsg2(20, "bfiled>bdird: SHA1 len=%d: msg=%s\n", dir->msglen, dir->msg); break; @@ -227,7 +215,7 @@ void do_verify_volume(JCR *jcr) case STREAM_SHA256_DIGEST: bin_to_base64(digest, sizeof(digest), (char *)sd->msg, CRYPTO_DIGEST_SHA256_SIZE, true); Dmsg2(400, "send inx=%d SHA256=%s\n", jcr->JobFiles, digest); - bnet_fsend(dir, "%d %d %s *SHA256-%d*", jcr->JobFiles, STREAM_SHA256_DIGEST, + dir->fsend("%d %d %s *SHA256-%d*", jcr->JobFiles, STREAM_SHA256_DIGEST, digest, jcr->JobFiles); Dmsg2(20, "bfiled>bdird: SHA256 len=%d: msg=%s\n", dir->msglen, dir->msg); break; @@ -235,11 +223,21 @@ void do_verify_volume(JCR *jcr) case STREAM_SHA512_DIGEST: bin_to_base64(digest, sizeof(digest), (char *)sd->msg, CRYPTO_DIGEST_SHA512_SIZE, true); Dmsg2(400, "send inx=%d SHA512=%s\n", jcr->JobFiles, digest); - bnet_fsend(dir, "%d %d %s *SHA512-%d*", jcr->JobFiles, STREAM_SHA512_DIGEST, + dir->fsend("%d %d %s *SHA512-%d*", jcr->JobFiles, STREAM_SHA512_DIGEST, digest, jcr->JobFiles); Dmsg2(20, "bfiled>bdird: SHA512 len=%d: msg=%s\n", dir->msglen, dir->msg); break; + /* + * Restore stream object is counted, but not restored here + */ + case STREAM_RESTORE_OBJECT: + jcr->lock(); + jcr->JobFiles++; + jcr->num_files_examined++; + jcr->unlock(); + break; + /* Ignore everything else */ default: break; diff --git a/bacula/src/filed/xattr.c b/bacula/src/filed/xattr.c index 21a63650d8..64d3f9c7ff 100644 --- a/bacula/src/filed/xattr.c +++ b/bacula/src/filed/xattr.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2008-2012 Free Software Foundation Europe e.V. + Copyright (C) 2008-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /** * Functions to handle Extended Attributes for bacula. @@ -167,7 +155,7 @@ static void xattr_drop_internal_table(alist *xattr_value_list) * value - The actual content of the extended attribute * * This is repeated 1 or more times. - * + * */ static uint32_t serialize_xattr_stream(JCR *jcr, uint32_t expected_serialize_len, @@ -480,6 +468,7 @@ static bxattr_exit_code aix_xattr_build_streams(JCR *jcr, FF_PKT *ff_pkt) * Each xattr valuepair starts with a magic so we can parse it easier. */ current_xattr = (xattr_t *)malloc(sizeof(xattr_t)); + memset(current_xattr, 0, sizeof(xattr_t)); current_xattr->magic = XATTR_MAGIC; expected_serialize_len += sizeof(current_xattr->magic); @@ -778,6 +767,7 @@ static bxattr_exit_code irix_xattr_build_streams(JCR *jcr, FF_PKT *ff_pkt) * Each xattr valuepair starts with a magic so we can parse it easier. */ current_xattr = (xattr_t *)malloc(sizeof(xattr_t)); + memset(current_xattr, 0, sizeof(xattr_t)); current_xattr->magic = XATTR_MAGIC; expected_serialize_len += sizeof(current_xattr->magic); @@ -1741,8 +1731,8 @@ static bxattr_exit_code bsd_build_xattr_streams(JCR *jcr, FF_PKT *ff_pkt) * Each xattr valuepair starts with a magic so we can parse it easier. */ current_xattr = (xattr_t *)malloc(sizeof(xattr_t)); + memset(current_xattr, 0, sizeof(xattr_t)); current_xattr->magic = XATTR_MAGIC; - current_xattr->value = NULL; expected_serialize_len += sizeof(current_xattr->magic); /* @@ -2145,6 +2135,7 @@ static bxattr_exit_code tru64_build_xattr_streams(JCR *jcr, FF_PKT *ff_pkt) * Each xattr valuepair starts with a magic so we can parse it easier. */ current_xattr = (xattr_t *)malloc(sizeof(xattr_t)); + memset(current_xattr, 0, sizeof(xattr_t)); current_xattr->magic = XATTR_MAGIC; expected_serialize_len += sizeof(current_xattr->magic); @@ -2712,7 +2703,7 @@ static bxattr_exit_code solaris_save_xattrs(JCR *jcr, const char *xattr_namespac * This is stored as an opaque stream of bytes with the following encoding: * * \0\0\0 - * + * * or for a hardlinked or symlinked attribute * * \0\0\0 @@ -3008,7 +2999,7 @@ static bxattr_exit_code solaris_save_xattr(JCR *jcr, int fd, const char *xattr_n * available on this extended attribute. */ retval = solaris_save_xattrs(jcr, xattr_namespace, attrname); - + /* * The recursive call could change our working dir so change back to the wanted workdir. */ @@ -3047,7 +3038,7 @@ static bxattr_exit_code solaris_save_xattrs(JCR *jcr, const char *xattr_namespac struct dirent *dp; char current_xattr_namespace[PATH_MAX]; bxattr_exit_code retval = bxattr_exit_error; - + /* * Determine what argument to use. Use attr_parent when set * (recursive call) or jcr->last_fname for first call. Also save diff --git a/bacula/src/filed/xattr.h b/bacula/src/filed/xattr.h index b61ec11161..131e6c6c5f 100644 --- a/bacula/src/filed/xattr.h +++ b/bacula/src/filed/xattr.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2004-2009 Free Software Foundation Europe e.V. + Copyright (C) 2004-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ #ifndef __XATTR_H diff --git a/bacula/src/fileopts.h b/bacula/src/fileopts.h index 4767a5d227..5b3e87bf2f 100644 --- a/bacula/src/fileopts.h +++ b/bacula/src/fileopts.h @@ -1,32 +1,20 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2001-2010 Free Software Foundation Europe e.V. + Copyright (C) 2001-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* - * File types + * File types * * Kern Sibbald MMI * @@ -37,7 +25,7 @@ #ifndef __BFILEOPTS_H #define __BFILEOPTS_H -/* +/* * Options saved int "options" of the include/exclude lists. * They are directly jammed ito "flag" of ff packet */ diff --git a/bacula/src/filetypes.h b/bacula/src/filetypes.h index ea79966221..9d505869ca 100644 --- a/bacula/src/filetypes.h +++ b/bacula/src/filetypes.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2010 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /** * Stream definitions. Split from baconfig.h Nov 2010 @@ -63,7 +51,7 @@ #define FT_NOOPEN 15 /* Could not open directory */ #define FT_RAW 16 /* Raw block device */ #define FT_FIFO 17 /* Raw fifo device */ -/** +/** * The DIRBEGIN packet is sent to the FD file processing routine so * that it can filter packets, but otherwise, it is not used * or saved */ diff --git a/bacula/src/findlib/Makefile.in b/bacula/src/findlib/Makefile.in index 7946ec6908..cd3c2a3133 100644 --- a/bacula/src/findlib/Makefile.in +++ b/bacula/src/findlib/Makefile.in @@ -25,9 +25,8 @@ dummy: INCLUDE_FILES = bfile.h find.h protos.h # -LIBBACFIND_SRCS = find.c match.c find_one.c attribs.c create_file.c \ - bfile.c drivetype.c enable_priv.c fstype.c mkpath.c \ - savecwd.c +LIBBACFIND_SRCS = find.c match.c find_one.c file_attrs.c file_create.c \ + bfile.c drivetype.c priv.c fstype.c makepath.c LIBBACFIND_OBJS = $(LIBBACFIND_SRCS:.c=.o) LIBBACFIND_LOBJS = $(LIBBACFIND_SRCS:.c=.lo) diff --git a/bacula/src/findlib/attribs.c b/bacula/src/findlib/attribs.c deleted file mode 100644 index 0d6e7c2f69..0000000000 --- a/bacula/src/findlib/attribs.c +++ /dev/null @@ -1,822 +0,0 @@ -/* - Bacula® - The Network Backup Solution - - Copyright (C) 2002-2011 Free Software Foundation Europe e.V. - - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. - - Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. -*/ -/** - * Encode and decode standard Unix attributes and - * Extended attributes for Win32 and - * other non-Unix systems, or Unix systems with ACLs, ... - * - * Kern Sibbald, October MMII - * - */ - -#include "bacula.h" -#include "find.h" -#include "ch.h" - -static uid_t my_uid = 1; -static gid_t my_gid = 1; -static bool uid_set = false; - - -#if defined(HAVE_WIN32) -/* Forward referenced subroutines */ -static bool set_win32_attributes(JCR *jcr, ATTR *attr, BFILE *ofd); -void unix_name_to_win32(POOLMEM **win32_name, char *name); -void win_error(JCR *jcr, const char *prefix, POOLMEM *ofile); -HANDLE bget_handle(BFILE *bfd); -#endif /* HAVE_WIN32 */ - -/* For old systems that don't have lchown() use chown() */ -#ifndef HAVE_LCHOWN -#define lchown chown -#endif - -/*=============================================================*/ -/* */ -/* *** A l l S y s t e m s *** */ -/* */ -/*=============================================================*/ - -/** - * Return the data stream that will be used - */ -int select_data_stream(FF_PKT *ff_pkt) -{ - int stream; - - /* This is a plugin special restore object */ - if (ff_pkt->type == FT_RESTORE_FIRST) { - ff_pkt->flags = 0; - return STREAM_FILE_DATA; - } - - /** - * Fix all incompatible options - */ - /** No sparse option for encrypted data */ - if (ff_pkt->flags & FO_ENCRYPT) { - ff_pkt->flags &= ~FO_SPARSE; - } - - /** Note, no sparse option for win32_data */ - if (!is_portable_backup(&ff_pkt->bfd)) { - stream = STREAM_WIN32_DATA; - ff_pkt->flags &= ~FO_SPARSE; - } else if (ff_pkt->flags & FO_SPARSE) { - stream = STREAM_SPARSE_DATA; - } else { - stream = STREAM_FILE_DATA; - } - if (ff_pkt->flags & FO_OFFSETS) { - stream = STREAM_SPARSE_DATA; - } - - /** Encryption is only supported for file data */ - if (stream != STREAM_FILE_DATA && stream != STREAM_WIN32_DATA && - stream != STREAM_MACOS_FORK_DATA) { - ff_pkt->flags &= ~FO_ENCRYPT; - } - - /** Compression is not supported for Mac fork data */ - if (stream == STREAM_MACOS_FORK_DATA) { - ff_pkt->flags &= ~FO_COMPRESS; - } - - /** - * Handle compression and encryption options - */ -#if defined(HAVE_LIBZ) || defined(HAVE_LZO) - if (ff_pkt->flags & FO_COMPRESS) { - #ifdef HAVE_LIBZ - if(ff_pkt->Compress_algo == COMPRESS_GZIP) { - switch (stream) { - case STREAM_WIN32_DATA: - stream = STREAM_WIN32_GZIP_DATA; - break; - case STREAM_SPARSE_DATA: - stream = STREAM_SPARSE_GZIP_DATA; - break; - case STREAM_FILE_DATA: - stream = STREAM_GZIP_DATA; - break; - default: - /** - * All stream types that do not support compression should clear out - * FO_COMPRESS above, and this code block should be unreachable. - */ - ASSERT(!(ff_pkt->flags & FO_COMPRESS)); - return STREAM_NONE; - } - } - #endif - #ifdef HAVE_LZO - if(ff_pkt->Compress_algo == COMPRESS_LZO1X) { - switch (stream) { - case STREAM_WIN32_DATA: - stream = STREAM_WIN32_COMPRESSED_DATA; - break; - case STREAM_SPARSE_DATA: - stream = STREAM_SPARSE_COMPRESSED_DATA; - break; - case STREAM_FILE_DATA: - stream = STREAM_COMPRESSED_DATA; - break; - default: - /** - * All stream types that do not support compression should clear out - * FO_COMPRESS above, and this code block should be unreachable. - */ - ASSERT(!(ff_pkt->flags & FO_COMPRESS)); - return STREAM_NONE; - } - } - #endif - } -#endif -#ifdef HAVE_CRYPTO - if (ff_pkt->flags & FO_ENCRYPT) { - switch (stream) { - case STREAM_WIN32_DATA: - stream = STREAM_ENCRYPTED_WIN32_DATA; - break; - case STREAM_WIN32_GZIP_DATA: - stream = STREAM_ENCRYPTED_WIN32_GZIP_DATA; - break; - case STREAM_WIN32_COMPRESSED_DATA: - stream = STREAM_ENCRYPTED_WIN32_COMPRESSED_DATA; - break; - case STREAM_FILE_DATA: - stream = STREAM_ENCRYPTED_FILE_DATA; - break; - case STREAM_GZIP_DATA: - stream = STREAM_ENCRYPTED_FILE_GZIP_DATA; - break; - case STREAM_COMPRESSED_DATA: - stream = STREAM_ENCRYPTED_FILE_COMPRESSED_DATA; - break; - default: - /* All stream types that do not support encryption should clear out - * FO_ENCRYPT above, and this code block should be unreachable. */ - ASSERT(!(ff_pkt->flags & FO_ENCRYPT)); - return STREAM_NONE; - } - } -#endif - - return stream; -} - - -/** - * Encode a stat structure into a base64 character string - * All systems must create such a structure. - * In addition, we tack on the LinkFI, which is non-zero in - * the case of a hard linked file that has no data. This - * is a File Index pointing to the link that does have the - * data (always the first one encountered in a save). - * You may piggyback attributes on this packet by encoding - * them in the encode_attribsEx() subroutine, but this is - * not recommended. - */ -void encode_stat(char *buf, struct stat *statp, int stat_size, int32_t LinkFI, int data_stream) -{ - char *p = buf; - - /* - * We read the stat packet so make sure the caller's conception - * is the same as ours. They can be different if LARGEFILE is not - * the same when compiling this library and the calling program. - */ - ASSERT(stat_size == (int)sizeof(struct stat)); - - /** - * Encode a stat packet. I should have done this more intelligently - * with a length so that it could be easily expanded. - */ - p += to_base64((int64_t)statp->st_dev, p); - *p++ = ' '; /* separate fields with a space */ - p += to_base64((int64_t)statp->st_ino, p); - *p++ = ' '; - p += to_base64((int64_t)statp->st_mode, p); - *p++ = ' '; - p += to_base64((int64_t)statp->st_nlink, p); - *p++ = ' '; - p += to_base64((int64_t)statp->st_uid, p); - *p++ = ' '; - p += to_base64((int64_t)statp->st_gid, p); - *p++ = ' '; - p += to_base64((int64_t)statp->st_rdev, p); - *p++ = ' '; - p += to_base64((int64_t)statp->st_size, p); - *p++ = ' '; -#ifndef HAVE_MINGW - p += to_base64((int64_t)statp->st_blksize, p); - *p++ = ' '; - p += to_base64((int64_t)statp->st_blocks, p); - *p++ = ' '; -#else - p += to_base64((int64_t)0, p); /* output place holder */ - *p++ = ' '; - p += to_base64((int64_t)0, p); /* output place holder */ - *p++ = ' '; -#endif - p += to_base64((int64_t)statp->st_atime, p); - *p++ = ' '; - p += to_base64((int64_t)statp->st_mtime, p); - *p++ = ' '; - p += to_base64((int64_t)statp->st_ctime, p); - *p++ = ' '; - p += to_base64((int64_t)LinkFI, p); - *p++ = ' '; - -#ifdef HAVE_CHFLAGS - /* FreeBSD function */ - p += to_base64((int64_t)statp->st_flags, p); /* output st_flags */ -#else - p += to_base64((int64_t)0, p); /* output place holder */ -#endif - *p++ = ' '; - p += to_base64((int64_t)data_stream, p); - *p = 0; - return; -} - - -/* Do casting according to unknown type to keep compiler happy */ -#ifdef HAVE_TYPEOF - #define plug(st, val) st = (typeof st)val -#else - #if !HAVE_GCC & HAVE_SUN_OS - /* Sun compiler does not handle templates correctly */ - #define plug(st, val) st = val - #elif __sgi - #define plug(st, val) st = val - #else - /* Use templates to do the casting */ - template void plug(T &st, uint64_t val) - { st = static_cast(val); } - #endif -#endif - - -/** Decode a stat packet from base64 characters */ -int decode_stat(char *buf, struct stat *statp, int stat_size, int32_t *LinkFI) -{ - char *p = buf; - int64_t val; - - /* - * We store into the stat packet so make sure the caller's conception - * is the same as ours. They can be different if LARGEFILE is not - * the same when compiling this library and the calling program. - */ - ASSERT(stat_size == (int)sizeof(struct stat)); - - p += from_base64(&val, p); - plug(statp->st_dev, val); - p++; - p += from_base64(&val, p); - plug(statp->st_ino, val); - p++; - p += from_base64(&val, p); - plug(statp->st_mode, val); - p++; - p += from_base64(&val, p); - plug(statp->st_nlink, val); - p++; - p += from_base64(&val, p); - plug(statp->st_uid, val); - p++; - p += from_base64(&val, p); - plug(statp->st_gid, val); - p++; - p += from_base64(&val, p); - plug(statp->st_rdev, val); - p++; - p += from_base64(&val, p); - plug(statp->st_size, val); - p++; -#ifndef HAVE_MINGW - p += from_base64(&val, p); - plug(statp->st_blksize, val); - p++; - p += from_base64(&val, p); - plug(statp->st_blocks, val); - p++; -#else - p += from_base64(&val, p); -// plug(statp->st_blksize, val); - p++; - p += from_base64(&val, p); -// plug(statp->st_blocks, val); - p++; -#endif - p += from_base64(&val, p); - plug(statp->st_atime, val); - p++; - p += from_base64(&val, p); - plug(statp->st_mtime, val); - p++; - p += from_base64(&val, p); - plug(statp->st_ctime, val); - - /* Optional FileIndex of hard linked file data */ - if (*p == ' ' || (*p != 0 && *(p+1) == ' ')) { - p++; - p += from_base64(&val, p); - *LinkFI = (uint32_t)val; - } else { - *LinkFI = 0; - return 0; - } - - /* FreeBSD user flags */ - if (*p == ' ' || (*p != 0 && *(p+1) == ' ')) { - p++; - p += from_base64(&val, p); -#ifdef HAVE_CHFLAGS - plug(statp->st_flags, val); - } else { - statp->st_flags = 0; -#endif - } - - /* Look for data stream id */ - if (*p == ' ' || (*p != 0 && *(p+1) == ' ')) { - p++; - p += from_base64(&val, p); - } else { - val = 0; - } - return (int)val; -} - -/** Decode a LinkFI field of encoded stat packet */ -int32_t decode_LinkFI(char *buf, struct stat *statp, int stat_size) -{ - char *p = buf; - int64_t val; - /* - * We store into the stat packet so make sure the caller's conception - * is the same as ours. They can be different if LARGEFILE is not - * the same when compiling this library and the calling program. - */ - ASSERT(stat_size == (int)sizeof(struct stat)); - - skip_nonspaces(&p); /* st_dev */ - p++; /* skip space */ - skip_nonspaces(&p); /* st_ino */ - p++; - p += from_base64(&val, p); - plug(statp->st_mode, val); /* st_mode */ - p++; - skip_nonspaces(&p); /* st_nlink */ - p++; - skip_nonspaces(&p); /* st_uid */ - p++; - skip_nonspaces(&p); /* st_gid */ - p++; - skip_nonspaces(&p); /* st_rdev */ - p++; - skip_nonspaces(&p); /* st_size */ - p++; - skip_nonspaces(&p); /* st_blksize */ - p++; - skip_nonspaces(&p); /* st_blocks */ - p++; - skip_nonspaces(&p); /* st_atime */ - p++; - skip_nonspaces(&p); /* st_mtime */ - p++; - skip_nonspaces(&p); /* st_ctime */ - - /* Optional FileIndex of hard linked file data */ - if (*p == ' ' || (*p != 0 && *(p+1) == ' ')) { - p++; - p += from_base64(&val, p); - return (int32_t)val; - } - return 0; -} - -/** - * Set file modes, permissions and times - * - * fname is the original filename - * ofile is the output filename (may be in a different directory) - * - * Returns: true on success - * false on failure - */ -bool set_attributes(JCR *jcr, ATTR *attr, BFILE *ofd) -{ - struct utimbuf ut; - mode_t old_mask; - bool ok = true; - boffset_t fsize; - - if (uid_set) { - my_uid = getuid(); - my_gid = getgid(); - uid_set = true; - } - -#if defined(HAVE_WIN32) - if (attr->stream == STREAM_UNIX_ATTRIBUTES_EX && - set_win32_attributes(jcr, attr, ofd)) { - if (is_bopen(ofd)) { - bclose(ofd); - } - pm_strcpy(attr->ofname, "*none*"); - return true; - } - if (attr->data_stream == STREAM_WIN32_DATA || - attr->data_stream == STREAM_WIN32_GZIP_DATA || - attr->data_stream == STREAM_WIN32_COMPRESSED_DATA) { - if (is_bopen(ofd)) { - bclose(ofd); - } - pm_strcpy(attr->ofname, "*none*"); - return true; - } - - - /** - * If Windows stuff failed, e.g. attempt to restore Unix file - * to Windows, simply fall through and we will do it the - * universal way. - */ -#endif - - old_mask = umask(0); - if (is_bopen(ofd)) { - char ec1[50], ec2[50]; - fsize = blseek(ofd, 0, SEEK_END); - bclose(ofd); /* first close file */ - if (attr->type == FT_REG && fsize > 0 && attr->statp.st_size > 0 && - fsize != (boffset_t)attr->statp.st_size) { - Jmsg3(jcr, M_ERROR, 0, _("File size of restored file %s not correct. Original %s, restored %s.\n"), - attr->ofname, edit_uint64(attr->statp.st_size, ec1), - edit_uint64(fsize, ec2)); - } - } - - /** - * We do not restore sockets, so skip trying to restore their - * attributes. - */ - if (attr->type == FT_SPEC && S_ISSOCK(attr->statp.st_mode)) { - goto bail_out; - } - - ut.actime = attr->statp.st_atime; - ut.modtime = attr->statp.st_mtime; - - /* ***FIXME**** optimize -- don't do if already correct */ - /** - * For link, change owner of link using lchown, but don't - * try to do a chmod as that will update the file behind it. - */ - if (attr->type == FT_LNK) { - /** Change owner of link, not of real file */ - if (lchown(attr->ofname, attr->statp.st_uid, attr->statp.st_gid) < 0 && my_uid == 0) { - berrno be; - Jmsg2(jcr, M_ERROR, 0, _("Unable to set file owner %s: ERR=%s\n"), - attr->ofname, be.bstrerror()); - ok = false; - } - } else { - if (chown(attr->ofname, attr->statp.st_uid, attr->statp.st_gid) < 0 && my_uid == 0) { - berrno be; - Jmsg2(jcr, M_ERROR, 0, _("Unable to set file owner %s: ERR=%s\n"), - attr->ofname, be.bstrerror()); - ok = false; - } - if (chmod(attr->ofname, attr->statp.st_mode) < 0 && my_uid == 0) { - berrno be; - Jmsg2(jcr, M_ERROR, 0, _("Unable to set file modes %s: ERR=%s\n"), - attr->ofname, be.bstrerror()); - ok = false; - } - - /** - * Reset file times. - */ - if (utime(attr->ofname, &ut) < 0 && my_uid == 0) { - berrno be; - Jmsg2(jcr, M_ERROR, 0, _("Unable to set file times %s: ERR=%s\n"), - attr->ofname, be.bstrerror()); - ok = false; - } -#ifdef HAVE_CHFLAGS - /** - * FreeBSD user flags - * - * Note, this should really be done before the utime() above, - * but if the immutable bit is set, it will make the utimes() - * fail. - */ - if (chflags(attr->ofname, attr->statp.st_flags) < 0 && my_uid == 0) { - berrno be; - Jmsg2(jcr, M_ERROR, 0, _("Unable to set file flags %s: ERR=%s\n"), - attr->ofname, be.bstrerror()); - ok = false; - } -#endif - } - -bail_out: - pm_strcpy(attr->ofname, "*none*"); - umask(old_mask); - return ok; -} - - -/*=============================================================*/ -/* */ -/* * * * U n i x * * * * */ -/* */ -/*=============================================================*/ - -#if !defined(HAVE_WIN32) - -/** - * It is possible to piggyback additional data e.g. ACLs on - * the encode_stat() data by returning the extended attributes - * here. They must be "self-contained" (i.e. you keep track - * of your own length), and they must be in ASCII string - * format. Using this feature is not recommended. - * The code below shows how to return nothing. See the Win32 - * code below for returning something in the attributes. - */ -int encode_attribsEx(JCR *jcr, char *attribsEx, FF_PKT *ff_pkt) -{ -#ifdef HAVE_DARWIN_OS - /** - * We save the Mac resource fork length so that on a - * restore, we can be sure we put back the whole resource. - */ - char *p; - - *attribsEx = 0; /* no extended attributes (yet) */ - if (jcr->cmd_plugin || ff_pkt->type == FT_DELETED) { - return STREAM_UNIX_ATTRIBUTES; - } - p = attribsEx; - if (ff_pkt->flags & FO_HFSPLUS) { - p += to_base64((uint64_t)(ff_pkt->hfsinfo.rsrclength), p); - } - *p = 0; -#else - *attribsEx = 0; /* no extended attributes */ -#endif - return STREAM_UNIX_ATTRIBUTES; -} - -#endif - - - -/*=============================================================*/ -/* */ -/* * * * W i n 3 2 * * * * */ -/* */ -/*=============================================================*/ - -#if defined(HAVE_WIN32) - -int encode_attribsEx(JCR *jcr, char *attribsEx, FF_PKT *ff_pkt) -{ - char *p = attribsEx; - WIN32_FILE_ATTRIBUTE_DATA atts; - ULARGE_INTEGER li; - - attribsEx[0] = 0; /* no extended attributes */ - - if (jcr->cmd_plugin || ff_pkt->type == FT_DELETED) { - return STREAM_UNIX_ATTRIBUTES; - } - - unix_name_to_win32(&ff_pkt->sys_fname, ff_pkt->fname); - - /** try unicode version */ - if (p_GetFileAttributesExW) { - POOLMEM* pwszBuf = get_pool_memory(PM_FNAME); - make_win32_path_UTF8_2_wchar(&pwszBuf, ff_pkt->fname); - - BOOL b=p_GetFileAttributesExW((LPCWSTR)pwszBuf, GetFileExInfoStandard, - (LPVOID)&atts); - free_pool_memory(pwszBuf); - - if (!b) { - win_error(jcr, "GetFileAttributesExW:", ff_pkt->sys_fname); - return STREAM_UNIX_ATTRIBUTES; - } - } - else { - if (!p_GetFileAttributesExA) - return STREAM_UNIX_ATTRIBUTES; - - if (!p_GetFileAttributesExA(ff_pkt->sys_fname, GetFileExInfoStandard, - (LPVOID)&atts)) { - win_error(jcr, "GetFileAttributesExA:", ff_pkt->sys_fname); - return STREAM_UNIX_ATTRIBUTES; - } - } - - p += to_base64((uint64_t)atts.dwFileAttributes, p); - *p++ = ' '; /* separate fields with a space */ - li.LowPart = atts.ftCreationTime.dwLowDateTime; - li.HighPart = atts.ftCreationTime.dwHighDateTime; - p += to_base64((uint64_t)li.QuadPart, p); - *p++ = ' '; - li.LowPart = atts.ftLastAccessTime.dwLowDateTime; - li.HighPart = atts.ftLastAccessTime.dwHighDateTime; - p += to_base64((uint64_t)li.QuadPart, p); - *p++ = ' '; - li.LowPart = atts.ftLastWriteTime.dwLowDateTime; - li.HighPart = atts.ftLastWriteTime.dwHighDateTime; - p += to_base64((uint64_t)li.QuadPart, p); - *p++ = ' '; - p += to_base64((uint64_t)atts.nFileSizeHigh, p); - *p++ = ' '; - p += to_base64((uint64_t)atts.nFileSizeLow, p); - *p = 0; - return STREAM_UNIX_ATTRIBUTES_EX; -} - -/** Define attributes that are legal to set with SetFileAttributes() */ -#define SET_ATTRS ( \ - FILE_ATTRIBUTE_ARCHIVE| \ - FILE_ATTRIBUTE_HIDDEN| \ - FILE_ATTRIBUTE_NORMAL| \ - FILE_ATTRIBUTE_NOT_CONTENT_INDEXED| \ - FILE_ATTRIBUTE_OFFLINE| \ - FILE_ATTRIBUTE_READONLY| \ - FILE_ATTRIBUTE_SYSTEM| \ - FILE_ATTRIBUTE_TEMPORARY) - - -/** - * Set Extended File Attributes for Win32 - * - * fname is the original filename - * ofile is the output filename (may be in a different directory) - * - * Returns: true on success - * false on failure - */ -static bool set_win32_attributes(JCR *jcr, ATTR *attr, BFILE *ofd) -{ - char *p = attr->attrEx; - int64_t val; - WIN32_FILE_ATTRIBUTE_DATA atts; - ULARGE_INTEGER li; - POOLMEM *win32_ofile; - - /** if we have neither Win ansi nor wchar API, get out */ - if (!(p_SetFileAttributesW || p_SetFileAttributesA)) { - return false; - } - - if (!p || !*p) { /* we should have attributes */ - Dmsg2(100, "Attributes missing. of=%s ofd=%d\n", attr->ofname, ofd->fid); - if (is_bopen(ofd)) { - bclose(ofd); - } - return false; - } else { - Dmsg2(100, "Attribs %s = %s\n", attr->ofname, attr->attrEx); - } - - p += from_base64(&val, p); - plug(atts.dwFileAttributes, val); - p++; /* skip space */ - p += from_base64(&val, p); - li.QuadPart = val; - atts.ftCreationTime.dwLowDateTime = li.LowPart; - atts.ftCreationTime.dwHighDateTime = li.HighPart; - p++; /* skip space */ - p += from_base64(&val, p); - li.QuadPart = val; - atts.ftLastAccessTime.dwLowDateTime = li.LowPart; - atts.ftLastAccessTime.dwHighDateTime = li.HighPart; - p++; /* skip space */ - p += from_base64(&val, p); - li.QuadPart = val; - atts.ftLastWriteTime.dwLowDateTime = li.LowPart; - atts.ftLastWriteTime.dwHighDateTime = li.HighPart; - p++; - p += from_base64(&val, p); - plug(atts.nFileSizeHigh, val); - p++; - p += from_base64(&val, p); - plug(atts.nFileSizeLow, val); - - /** Convert to Windows path format */ - win32_ofile = get_pool_memory(PM_FNAME); - unix_name_to_win32(&win32_ofile, attr->ofname); - - /** At this point, we have reconstructed the WIN32_FILE_ATTRIBUTE_DATA pkt */ - - if (!is_bopen(ofd)) { - Dmsg1(100, "File not open: %s\n", attr->ofname); - bopen(ofd, attr->ofname, O_WRONLY|O_BINARY, 0); /* attempt to open the file */ - } - - if (is_bopen(ofd)) { - Dmsg1(100, "SetFileTime %s\n", attr->ofname); - if (!SetFileTime(bget_handle(ofd), - &atts.ftCreationTime, - &atts.ftLastAccessTime, - &atts.ftLastWriteTime)) { - win_error(jcr, "SetFileTime:", win32_ofile); - } - bclose(ofd); - } - - Dmsg1(100, "SetFileAtts %s\n", attr->ofname); - if (!(atts.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { - if (p_SetFileAttributesW) { - POOLMEM* pwszBuf = get_pool_memory(PM_FNAME); - make_win32_path_UTF8_2_wchar(&pwszBuf, attr->ofname); - - BOOL b=p_SetFileAttributesW((LPCWSTR)pwszBuf, atts.dwFileAttributes & SET_ATTRS); - free_pool_memory(pwszBuf); - - if (!b) - win_error(jcr, "SetFileAttributesW:", win32_ofile); - } - else { - if (!p_SetFileAttributesA(win32_ofile, atts.dwFileAttributes & SET_ATTRS)) { - win_error(jcr, "SetFileAttributesA:", win32_ofile); - } - } - } - free_pool_memory(win32_ofile); - return true; -} - -void win_error(JCR *jcr, const char *prefix, POOLMEM *win32_ofile) -{ - DWORD lerror = GetLastError(); - LPTSTR msg; - FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER| - FORMAT_MESSAGE_FROM_SYSTEM, - NULL, - lerror, - 0, - (LPTSTR)&msg, - 0, - NULL); - Dmsg3(100, "Error in %s on file %s: ERR=%s\n", prefix, win32_ofile, msg); - strip_trailing_junk(msg); - Jmsg3(jcr, M_ERROR, 0, _("Error in %s file %s: ERR=%s\n"), prefix, win32_ofile, msg); - LocalFree(msg); -} - -void win_error(JCR *jcr, const char *prefix, DWORD lerror) -{ - LPTSTR msg; - FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER| - FORMAT_MESSAGE_FROM_SYSTEM, - NULL, - lerror, - 0, - (LPTSTR)&msg, - 0, - NULL); - strip_trailing_junk(msg); - if (jcr) { - Jmsg2(jcr, M_ERROR, 0, _("Error in %s: ERR=%s\n"), prefix, msg); - } else { - MessageBox(NULL, msg, prefix, MB_OK); - } - LocalFree(msg); -} -#endif /* HAVE_WIN32 */ diff --git a/bacula/src/findlib/bfile.c b/bacula/src/findlib/bfile.c index e3156756c6..663e932040 100644 --- a/bacula/src/findlib/bfile.c +++ b/bacula/src/findlib/bfile.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2003-2010 Free Software Foundation Europe e.V. + Copyright (C) 2003-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Bacula low level File I/O routines. This routine simulates @@ -39,7 +27,7 @@ const int dbglvl = 200; -int (*plugin_bopen)(BFILE *bfd, const char *fname, int flags, mode_t mode) = NULL; +int (*plugin_bopen)(BFILE *bfd, const char *fname, uint64_t flags, mode_t mode) = NULL; int (*plugin_bclose)(BFILE *bfd) = NULL; ssize_t (*plugin_bread)(BFILE *bfd, void *buf, size_t count) = NULL; ssize_t (*plugin_bwrite)(BFILE *bfd, void *buf, size_t count) = NULL; @@ -153,6 +141,12 @@ const char *stream_to_ascii(int stream) return _("Encrypted Win32 Compressed data"); case STREAM_ENCRYPTED_MACOS_FORK_DATA: return _("Encrypted MacOS fork data"); + case STREAM_PLUGIN_NAME: + return _("Plugin Name"); + case STREAM_PLUGIN_DATA: + return _("Plugin Data"); + case STREAM_RESTORE_OBJECT: + return _("Restore Object"); case STREAM_ACL_AIX_TEXT: return _("AIX Specific ACL attribs"); case STREAM_ACL_DARWIN_ACCESS_ACL: @@ -219,7 +213,7 @@ const char *stream_to_ascii(int stream) } } -/** +/** * Convert a 64 bit little endian to a big endian */ void int64_LE2BE(int64_t* pBE, const int64_t v) @@ -236,7 +230,7 @@ void int64_LE2BE(int64_t* pBE, const int64_t v) rv[i] = pv[7 - i]; } memcpy(pBE, &rv, sizeof(int64_t)); - } + } } /** @@ -256,16 +250,16 @@ void int32_LE2BE(int32_t* pBE, const int32_t v) rv[i] = pv[3 - i]; } memcpy(pBE, &rv, sizeof(int32_t)); - } + } } -/** +/* * Read a BackupRead block and pull out the file data */ bool processWin32BackupAPIBlock (BFILE *bfd, void *pBuffer, ssize_t dwSize) { - /* pByte contains the buffer + /* pByte contains the buffer dwSize the len to be processed. function assumes to be called in successive incremental order over the complete BackupRead stream beginning at pos 0 and ending at the end. @@ -277,9 +271,9 @@ bool processWin32BackupAPIBlock (BFILE *bfd, void *pBuffer, ssize_t dwSize) int64_t dwDataLen; /* Win32 Stream Header size without name of stream. - * = sizeof (WIN32_STREAM_ID)- sizeof(WCHAR*); + * = sizeof (WIN32_STREAM_ID)- sizeof(WCHAR*); */ - int32_t dwSizeHeader = 20; + int32_t dwSizeHeader = 20; do { if (pContext->liNextHeader >= dwSize) { @@ -303,7 +297,7 @@ bool processWin32BackupAPIBlock (BFILE *bfd, void *pBuffer, ssize_t dwSize) if (pContext->liNextHeader < 0) { /* start of header was before this block, so we - * continue with the part in the current block + * continue with the part in the current block */ dwOffsetTarget = -pContext->liNextHeader; dwOffsetSource = 0; @@ -318,7 +312,7 @@ bool processWin32BackupAPIBlock (BFILE *bfd, void *pBuffer, ssize_t dwSize) if (dwHeaderPartLen <= dwSize-dwOffsetSource) { /* header (or rest of header) is completely available - in current block + in current block */ bHeaderIsComplete = true; } else { @@ -333,7 +327,7 @@ bool processWin32BackupAPIBlock (BFILE *bfd, void *pBuffer, ssize_t dwSize) /* recalculate position of next header */ if (bHeaderIsComplete) { /* convert stream name size (32 bit little endian) to machine type */ - int32_t dwNameSize; + int32_t dwNameSize; int32_LE2BE (&dwNameSize, pContext->header_stream.dwStreamNameSize); dwDataOffset = dwNameSize+pContext->liNextHeader+dwSizeHeader; @@ -360,475 +354,6 @@ bool processWin32BackupAPIBlock (BFILE *bfd, void *pBuffer, ssize_t dwSize) -/* =============================================================== - * - * W I N D O W S - * - * =============================================================== - */ - -#if defined(HAVE_WIN32) - -void unix_name_to_win32(POOLMEM **win32_name, char *name); -extern "C" HANDLE get_osfhandle(int fd); - - -void binit(BFILE *bfd) -{ - memset(bfd, 0, sizeof(BFILE)); - bfd->fid = -1; - bfd->mode = BF_CLOSED; - bfd->use_backup_api = have_win32_api(); - bfd->cmd_plugin = false; -} - -/* - * Enables using the Backup API (win32_data). - * Returns 1 if function worked - * Returns 0 if failed (i.e. do not have Backup API on this machine) - */ -bool set_win32_backup(BFILE *bfd) -{ - /* We enable if possible here */ - bfd->use_backup_api = have_win32_api(); - return bfd->use_backup_api; -} - - -bool set_portable_backup(BFILE *bfd) -{ - bfd->use_backup_api = false; - return true; -} - -bool set_cmd_plugin(BFILE *bfd, JCR *jcr) -{ - bfd->cmd_plugin = true; - bfd->jcr = jcr; - return true; -} - -/* - * Return 1 if we are NOT using Win32 BackupWrite() - * return 0 if are - */ -bool is_portable_backup(BFILE *bfd) -{ - return !bfd->use_backup_api; -} - -bool have_win32_api() -{ - return p_BackupRead && p_BackupWrite; -} - - -/* - * Return true if we support the stream - * false if we do not support the stream - * - * This code is running under Win32, so we - * do not need #ifdef on MACOS ... - */ -bool is_restore_stream_supported(int stream) -{ - switch (stream) { - -/* Streams known not to be supported */ -#ifndef HAVE_LIBZ - case STREAM_GZIP_DATA: - case STREAM_SPARSE_GZIP_DATA: - case STREAM_WIN32_GZIP_DATA: -#endif -#ifndef HAVE_LZO - case STREAM_COMPRESSED_DATA: - case STREAM_SPARSE_COMPRESSED_DATA: - case STREAM_WIN32_COMPRESSED_DATA: - case STREAM_ENCRYPTED_FILE_COMPRESSED_DATA: - case STREAM_ENCRYPTED_WIN32_COMPRESSED_DATA: -#endif - case STREAM_MACOS_FORK_DATA: - case STREAM_HFSPLUS_ATTRIBUTES: - case STREAM_ENCRYPTED_MACOS_FORK_DATA: - return false; - - /* Known streams */ -#ifdef HAVE_LIBZ - case STREAM_GZIP_DATA: - case STREAM_SPARSE_GZIP_DATA: - case STREAM_WIN32_GZIP_DATA: -#endif -#ifdef HAVE_LZO - case STREAM_COMPRESSED_DATA: - case STREAM_SPARSE_COMPRESSED_DATA: - case STREAM_WIN32_COMPRESSED_DATA: -#endif - case STREAM_WIN32_DATA: - case STREAM_UNIX_ATTRIBUTES: - case STREAM_FILE_DATA: - case STREAM_MD5_DIGEST: - case STREAM_UNIX_ATTRIBUTES_EX: - case STREAM_SPARSE_DATA: - case STREAM_PROGRAM_NAMES: - case STREAM_PROGRAM_DATA: - case STREAM_SHA1_DIGEST: -#ifdef HAVE_SHA2 - case STREAM_SHA256_DIGEST: - case STREAM_SHA512_DIGEST: -#endif -#ifdef HAVE_CRYPTO - case STREAM_SIGNED_DIGEST: - case STREAM_ENCRYPTED_FILE_DATA: - case STREAM_ENCRYPTED_FILE_GZIP_DATA: - case STREAM_ENCRYPTED_WIN32_DATA: - case STREAM_ENCRYPTED_WIN32_GZIP_DATA: -#ifdef HAVE_LZO - case STREAM_ENCRYPTED_FILE_COMPRESSED_DATA: - case STREAM_ENCRYPTED_WIN32_COMPRESSED_DATA: -#endif -#endif /* !HAVE_CRYPTO */ - case 0: /* compatibility with old tapes */ - return true; - } - return false; -} - -HANDLE bget_handle(BFILE *bfd) -{ - return bfd->fh; -} - -int bopen(BFILE *bfd, const char *fname, int flags, mode_t mode) -{ - POOLMEM *win32_fname; - POOLMEM *win32_fname_wchar; - - DWORD dwaccess, dwflags, dwshare; - - /* Convert to Windows path format */ - win32_fname = get_pool_memory(PM_FNAME); - win32_fname_wchar = get_pool_memory(PM_FNAME); - - unix_name_to_win32(&win32_fname, (char *)fname); - - if (bfd->cmd_plugin && plugin_bopen) { - int rtnstat; - Dmsg1(50, "call plugin_bopen fname=%s\n", fname); - rtnstat = plugin_bopen(bfd, fname, flags, mode); - Dmsg1(50, "return from plugin_bopen status=%d\n", rtnstat); - if (rtnstat >= 0) { - if (flags & O_CREAT || flags & O_WRONLY) { /* Open existing for write */ - Dmsg1(50, "plugin_open for write OK file=%s.\n", fname); - bfd->mode = BF_WRITE; - } else { - Dmsg1(50, "plugin_open for read OK file=%s.\n", fname); - bfd->mode = BF_READ; - } - } else { - bfd->mode = BF_CLOSED; - Dmsg1(000, "==== plugin_bopen returned bad status=%d\n", rtnstat); - } - free_pool_memory(win32_fname_wchar); - free_pool_memory(win32_fname); - return bfd->mode == BF_CLOSED ? -1 : 1; - } - Dmsg0(50, "=== NO plugin\n"); - - if (!(p_CreateFileA || p_CreateFileW)) { - Dmsg0(50, "No CreateFileA and no CreateFileW!!!!!\n"); - return 0; - } - - if (p_CreateFileW && p_MultiByteToWideChar) { - make_win32_path_UTF8_2_wchar(&win32_fname_wchar, fname); - } - - if (flags & O_CREAT) { /* Create */ - if (bfd->use_backup_api) { - dwaccess = GENERIC_WRITE|FILE_ALL_ACCESS|WRITE_OWNER|WRITE_DAC|ACCESS_SYSTEM_SECURITY; - dwflags = FILE_FLAG_BACKUP_SEMANTICS; - } else { - dwaccess = GENERIC_WRITE; - dwflags = 0; - } - - if (p_CreateFileW && p_MultiByteToWideChar) { - // unicode open for create write - Dmsg1(100, "Create CreateFileW=%s\n", win32_fname); - bfd->fh = p_CreateFileW((LPCWSTR)win32_fname_wchar, - dwaccess, /* Requested access */ - 0, /* Shared mode */ - NULL, /* SecurityAttributes */ - CREATE_ALWAYS, /* CreationDisposition */ - dwflags, /* Flags and attributes */ - NULL); /* TemplateFile */ - } else { - // ascii open - Dmsg1(100, "Create CreateFileA=%s\n", win32_fname); - bfd->fh = p_CreateFileA(win32_fname, - dwaccess, /* Requested access */ - 0, /* Shared mode */ - NULL, /* SecurityAttributes */ - CREATE_ALWAYS, /* CreationDisposition */ - dwflags, /* Flags and attributes */ - NULL); /* TemplateFile */ - } - - bfd->mode = BF_WRITE; - - } else if (flags & O_WRONLY) { /* Open existing for write */ - if (bfd->use_backup_api) { - dwaccess = GENERIC_WRITE|WRITE_OWNER|WRITE_DAC; - dwflags = FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OPEN_REPARSE_POINT; - } else { - dwaccess = GENERIC_WRITE; - dwflags = 0; - } - - if (p_CreateFileW && p_MultiByteToWideChar) { - // unicode open for open existing write - Dmsg1(100, "Write only CreateFileW=%s\n", win32_fname); - bfd->fh = p_CreateFileW((LPCWSTR)win32_fname_wchar, - dwaccess, /* Requested access */ - 0, /* Shared mode */ - NULL, /* SecurityAttributes */ - OPEN_EXISTING, /* CreationDisposition */ - dwflags, /* Flags and attributes */ - NULL); /* TemplateFile */ - } else { - // ascii open - Dmsg1(100, "Write only CreateFileA=%s\n", win32_fname); - bfd->fh = p_CreateFileA(win32_fname, - dwaccess, /* Requested access */ - 0, /* Shared mode */ - NULL, /* SecurityAttributes */ - OPEN_EXISTING, /* CreationDisposition */ - dwflags, /* Flags and attributes */ - NULL); /* TemplateFile */ - - } - - bfd->mode = BF_WRITE; - - } else { /* Read */ - if (bfd->use_backup_api) { - dwaccess = GENERIC_READ|READ_CONTROL|ACCESS_SYSTEM_SECURITY; - dwflags = FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_SEQUENTIAL_SCAN | - FILE_FLAG_OPEN_REPARSE_POINT; - dwshare = FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE; - } else { - dwaccess = GENERIC_READ; - dwflags = 0; - dwshare = FILE_SHARE_READ|FILE_SHARE_WRITE; - } - - if (p_CreateFileW && p_MultiByteToWideChar) { - // unicode open for open existing read - Dmsg1(100, "Read CreateFileW=%s\n", win32_fname); - bfd->fh = p_CreateFileW((LPCWSTR)win32_fname_wchar, - dwaccess, /* Requested access */ - dwshare, /* Share modes */ - NULL, /* SecurityAttributes */ - OPEN_EXISTING, /* CreationDisposition */ - dwflags, /* Flags and attributes */ - NULL); /* TemplateFile */ - } else { - // ascii open - Dmsg1(100, "Read CreateFileA=%s\n", win32_fname); - bfd->fh = p_CreateFileA(win32_fname, - dwaccess, /* Requested access */ - dwshare, /* Share modes */ - NULL, /* SecurityAttributes */ - OPEN_EXISTING, /* CreationDisposition */ - dwflags, /* Flags and attributes */ - NULL); /* TemplateFile */ - } - - bfd->mode = BF_READ; - } - - if (bfd->fh == INVALID_HANDLE_VALUE) { - bfd->lerror = GetLastError(); - bfd->berrno = b_errno_win32; - errno = b_errno_win32; - bfd->mode = BF_CLOSED; - } - bfd->errmsg = NULL; - bfd->lpContext = NULL; - bfd->win32DecompContext.bIsInData = false; - bfd->win32DecompContext.liNextHeader = 0; - free_pool_memory(win32_fname_wchar); - free_pool_memory(win32_fname); - return bfd->mode == BF_CLOSED ? -1 : 1; -} - -/* - * Returns 0 on success - * -1 on error - */ -int bclose(BFILE *bfd) -{ - int stat = 0; - - if (bfd->mode == BF_CLOSED) { - Dmsg0(50, "=== BFD already closed.\n"); - return 0; - } - - if (bfd->cmd_plugin && plugin_bclose) { - stat = plugin_bclose(bfd); - Dmsg0(50, "==== BFD closed!!!\n"); - goto all_done; - } - - /* - * We need to tell the API to release the buffer it - * allocated in lpContext. We do so by calling the - * API one more time, but with the Abort bit set. - */ - if (bfd->use_backup_api && bfd->mode == BF_READ) { - BYTE buf[10]; - if (bfd->lpContext && !p_BackupRead(bfd->fh, - buf, /* buffer */ - (DWORD)0, /* bytes to read */ - &bfd->rw_bytes, /* bytes read */ - 1, /* Abort */ - 1, /* ProcessSecurity */ - &bfd->lpContext)) { /* Read context */ - errno = b_errno_win32; - stat = -1; - } - } else if (bfd->use_backup_api && bfd->mode == BF_WRITE) { - BYTE buf[10]; - if (bfd->lpContext && !p_BackupWrite(bfd->fh, - buf, /* buffer */ - (DWORD)0, /* bytes to read */ - &bfd->rw_bytes, /* bytes written */ - 1, /* Abort */ - 1, /* ProcessSecurity */ - &bfd->lpContext)) { /* Write context */ - errno = b_errno_win32; - stat = -1; - } - } - if (!CloseHandle(bfd->fh)) { - stat = -1; - errno = b_errno_win32; - } - -all_done: - if (bfd->errmsg) { - free_pool_memory(bfd->errmsg); - bfd->errmsg = NULL; - } - bfd->mode = BF_CLOSED; - bfd->lpContext = NULL; - bfd->cmd_plugin = false; - return stat; -} - -/* Returns: bytes read on success - * 0 on EOF - * -1 on error - */ -ssize_t bread(BFILE *bfd, void *buf, size_t count) -{ - bfd->rw_bytes = 0; - - if (bfd->cmd_plugin && plugin_bread) { - return plugin_bread(bfd, buf, count); - } - - if (bfd->use_backup_api) { - if (!p_BackupRead(bfd->fh, - (BYTE *)buf, - count, - &bfd->rw_bytes, - 0, /* no Abort */ - 1, /* Process Security */ - &bfd->lpContext)) { /* Context */ - bfd->lerror = GetLastError(); - bfd->berrno = b_errno_win32; - errno = b_errno_win32; - return -1; - } - } else { - if (!ReadFile(bfd->fh, - buf, - count, - &bfd->rw_bytes, - NULL)) { - bfd->lerror = GetLastError(); - bfd->berrno = b_errno_win32; - errno = b_errno_win32; - return -1; - } - } - - return (ssize_t)bfd->rw_bytes; -} - -ssize_t bwrite(BFILE *bfd, void *buf, size_t count) -{ - bfd->rw_bytes = 0; - - if (bfd->cmd_plugin && plugin_bwrite) { - return plugin_bwrite(bfd, buf, count); - } - - if (bfd->use_backup_api) { - if (!p_BackupWrite(bfd->fh, - (BYTE *)buf, - count, - &bfd->rw_bytes, - 0, /* No abort */ - 1, /* Process Security */ - &bfd->lpContext)) { /* Context */ - bfd->lerror = GetLastError(); - bfd->berrno = b_errno_win32; - errno = b_errno_win32; - return -1; - } - } else { - if (!WriteFile(bfd->fh, - buf, - count, - &bfd->rw_bytes, - NULL)) { - bfd->lerror = GetLastError(); - bfd->berrno = b_errno_win32; - errno = b_errno_win32; - return -1; - } - } - return (ssize_t)bfd->rw_bytes; -} - -bool is_bopen(BFILE *bfd) -{ - return bfd->mode != BF_CLOSED; -} - -boffset_t blseek(BFILE *bfd, boffset_t offset, int whence) -{ - LONG offset_low = (LONG)offset; - LONG offset_high = (LONG)(offset >> 32); - DWORD dwResult; - - if (bfd->cmd_plugin && plugin_blseek) { - return plugin_blseek(bfd, offset, whence); - } - - dwResult = SetFilePointer(bfd->fh, offset_low, &offset_high, whence); - - if (dwResult == INVALID_SET_FILE_POINTER && GetLastError() != NO_ERROR) { - return (boffset_t)-1; - } - - return ((boffset_t)offset_high << 32) | dwResult; -} - -#else /* Unix systems */ /* =============================================================== * @@ -836,12 +361,14 @@ boffset_t blseek(BFILE *bfd, boffset_t offset, int whence) * * =============================================================== */ +/* Unix */ void binit(BFILE *bfd) { memset(bfd, 0, sizeof(BFILE)); bfd->fid = -1; } +/* Unix */ bool have_win32_api() { return false; /* no can do */ @@ -852,12 +379,14 @@ bool have_win32_api() * Returns true if function worked * Returns false if failed (i.e. do not have Backup API on this machine) */ +/* Unix */ bool set_win32_backup(BFILE *bfd) { return false; /* no can do */ } +/* Unix */ bool set_portable_backup(BFILE *bfd) { return true; /* no problem */ @@ -867,16 +396,19 @@ bool set_portable_backup(BFILE *bfd) * Return true if we are writing in portable format * return false if not */ +/* Unix */ bool is_portable_backup(BFILE *bfd) { return true; /* portable by definition */ } +/* Unix */ bool set_prog(BFILE *bfd, char *prog, JCR *jcr) { return false; } +/* Unix */ bool set_cmd_plugin(BFILE *bfd, JCR *jcr) { bfd->cmd_plugin = true; @@ -884,9 +416,10 @@ bool set_cmd_plugin(BFILE *bfd, JCR *jcr) return true; } -/* - * This code is running on a non-Win32 machine +/* + * This code is running on a non-Win32 machine */ +/* Unix */ bool is_restore_stream_supported(int stream) { /* No Win32 backup on this machine */ @@ -894,7 +427,7 @@ bool is_restore_stream_supported(int stream) #ifndef HAVE_LIBZ case STREAM_GZIP_DATA: case STREAM_SPARSE_GZIP_DATA: - case STREAM_WIN32_GZIP_DATA: + case STREAM_WIN32_GZIP_DATA: #endif #ifndef HAVE_LZO case STREAM_COMPRESSED_DATA: @@ -913,7 +446,7 @@ bool is_restore_stream_supported(int stream) #ifdef HAVE_LIBZ case STREAM_GZIP_DATA: case STREAM_SPARSE_GZIP_DATA: - case STREAM_WIN32_GZIP_DATA: + case STREAM_WIN32_GZIP_DATA: #endif #ifdef HAVE_LZO case STREAM_COMPRESSED_DATA: @@ -956,12 +489,13 @@ bool is_restore_stream_supported(int stream) return false; } -int bopen(BFILE *bfd, const char *fname, int flags, mode_t mode) +/* Unix */ +int bopen(BFILE *bfd, const char *fname, uint64_t flags, mode_t mode) { if (bfd->cmd_plugin && plugin_bopen) { Dmsg1(400, "call plugin_bopen fname=%s\n", fname); bfd->fid = plugin_bopen(bfd, fname, flags, mode); - Dmsg1(400, "Plugin bopen stat=%d\n", bfd->fid); + Dmsg2(400, "Plugin bopen fid=%d file=%s\n", bfd->fid, fname); return bfd->fid; } @@ -990,6 +524,8 @@ int bopen(BFILE *bfd, const char *fname, int flags, mode_t mode) } bfd->berrno = errno; bfd->m_flags = flags; + bfd->block = 0; + bfd->total_bytes = 0; Dmsg1(400, "Open file %d\n", bfd->fid); errno = bfd->berrno; @@ -1008,7 +544,7 @@ int bopen(BFILE *bfd, const char *fname, int flags, mode_t mode) #ifdef HAVE_DARWIN_OS /* Open the resource fork of a file. */ -int bopen_rsrc(BFILE *bfd, const char *fname, int flags, mode_t mode) +int bopen_rsrc(BFILE *bfd, const char *fname, uint64_t flags, mode_t mode) { POOLMEM *rsrc_fname; @@ -1020,28 +556,30 @@ int bopen_rsrc(BFILE *bfd, const char *fname, int flags, mode_t mode) return bfd->fid; } #else -int bopen_rsrc(BFILE *bfd, const char *fname, int flags, mode_t mode) +/* Unix */ +int bopen_rsrc(BFILE *bfd, const char *fname, uint64_t flags, mode_t mode) { return -1; } #endif +/* Unix */ int bclose(BFILE *bfd) { int stat; Dmsg1(400, "Close file %d\n", bfd->fid); + if (bfd->fid == -1) { + return 0; + } if (bfd->cmd_plugin && plugin_bclose) { stat = plugin_bclose(bfd); bfd->fid = -1; bfd->cmd_plugin = false; } - if (bfd->fid == -1) { - return 0; - } #if defined(HAVE_POSIX_FADVISE) && defined(POSIX_FADV_DONTNEED) if (bfd->m_flags & O_RDONLY) { fdatasync(bfd->fid); /* sync the file */ @@ -1058,6 +596,7 @@ int bclose(BFILE *bfd) return stat; } +/* Unix */ ssize_t bread(BFILE *bfd, void *buf, size_t count) { ssize_t stat; @@ -1068,9 +607,14 @@ ssize_t bread(BFILE *bfd, void *buf, size_t count) stat = read(bfd->fid, buf, count); bfd->berrno = errno; + bfd->block++; + if (stat > 0) { + bfd->total_bytes += stat; + } return stat; } +/* Unix */ ssize_t bwrite(BFILE *bfd, void *buf, size_t count) { ssize_t stat; @@ -1080,14 +624,20 @@ ssize_t bwrite(BFILE *bfd, void *buf, size_t count) } stat = write(bfd->fid, buf, count); bfd->berrno = errno; + bfd->block++; + if (stat > 0) { + bfd->total_bytes += stat; + } return stat; } +/* Unix */ bool is_bopen(BFILE *bfd) { return bfd->fid >= 0; } +/* Unix */ boffset_t blseek(BFILE *bfd, boffset_t offset, int whence) { boffset_t pos; @@ -1099,5 +649,3 @@ boffset_t blseek(BFILE *bfd, boffset_t offset, int whence) bfd->berrno = errno; return pos; } - -#endif diff --git a/bacula/src/findlib/bfile.h b/bacula/src/findlib/bfile.h index 2fe1cfec8d..e1b543a63f 100644 --- a/bacula/src/findlib/bfile.h +++ b/bacula/src/findlib/bfile.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2003-2010 Free Software Foundation Europe e.V. + Copyright (C) 2003-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Bacula low level File I/O routines. This routine simulates @@ -48,14 +36,14 @@ typedef struct _BWIN32_STREAM_ID { int32_t dwStreamId; int32_t dwStreamAttributes; int64_t Size; - int32_t dwStreamNameSize; + int32_t dwStreamNameSize; } BWIN32_STREAM_ID, *LPBWIN32_STREAM_ID ; typedef struct _PROCESS_WIN32_BACKUPAPIBLOCK_CONTEXT { int64_t liNextHeader; bool bIsInData; - BWIN32_STREAM_ID header_stream; + BWIN32_STREAM_ID header_stream; } PROCESS_WIN32_BACKUPAPIBLOCK_CONTEXT; /* ======================================================= @@ -85,11 +73,13 @@ struct BFILE { DWORD rw_bytes; /* Bytes read or written */ DWORD lerror; /* Last error code */ int berrno; /* errno */ + int block; /* Count of read/writes */ + uint64_t total_bytes; /* bytes written */ boffset_t offset; /* Delta offset */ JCR *jcr; /* jcr for editing job codes */ PROCESS_WIN32_BACKUPAPIBLOCK_CONTEXT win32DecompContext; /* context for decomposition of win32 backup streams */ int use_backup_decomp; /* set if using BackupRead Stream Decomposition */ - bool reparse_point; /* set if reparse point */ + bool reparse_point; /* set if reparse point */ bool cmd_plugin; /* set if we have a command plugin */ }; @@ -107,9 +97,11 @@ HANDLE bget_handle(BFILE *bfd); /* Basic Unix low level I/O file packet */ struct BFILE { int fid; /* file id on Unix */ - int m_flags; /* open flags */ int berrno; /* errno */ int32_t lerror; /* not used - simplies Win32 builds */ + int block; /* Count of read/writes */ + uint64_t m_flags; /* open flags */ + uint64_t total_bytes; /* bytes written */ boffset_t offset; /* Delta offset */ JCR *jcr; /* jcr for editing job codes */ PROCESS_WIN32_BACKUPAPIBLOCK_CONTEXT win32DecompContext; /* context for decomposition of win32 backup streams */ @@ -129,9 +121,8 @@ bool have_win32_api(); bool is_portable_backup(BFILE *bfd); bool is_restore_stream_supported(int stream); bool is_win32_stream(int stream); -char *xberror(BFILE *bfd); /* DO NOT USE -- use berrno class */ -int bopen(BFILE *bfd, const char *fname, int flags, mode_t mode); -int bopen_rsrc(BFILE *bfd, const char *fname, int flags, mode_t mode); +int bopen(BFILE *bfd, const char *fname, uint64_t flags, mode_t mode); +int bopen_rsrc(BFILE *bfd, const char *fname, uint64_t flags, mode_t mode); int bclose(BFILE *bfd); ssize_t bread(BFILE *bfd, void *buf, size_t count); ssize_t bwrite(BFILE *bfd, void *buf, size_t count); diff --git a/bacula/src/findlib/create_file.c b/bacula/src/findlib/create_file.c deleted file mode 100644 index b283af3cbf..0000000000 --- a/bacula/src/findlib/create_file.c +++ /dev/null @@ -1,482 +0,0 @@ -/* - Bacula® - The Network Backup Solution - - Copyright (C) 2000-2011 Free Software Foundation Europe e.V. - - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. - - Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. -*/ -/* - * Create a file, and reset the modes - * - * Kern Sibbald, November MM - * - * Version $Id$ - * - */ - -#include "bacula.h" -#include "find.h" - -#ifndef S_IRWXUGO -#define S_IRWXUGO (S_IRWXU | S_IRWXG | S_IRWXO) -#endif - -#ifndef IS_CTG -#define IS_CTG(x) 0 -#define O_CTG 0 -#endif - -static int separate_path_and_file(JCR *jcr, char *fname, char *ofile); -static int path_already_seen(JCR *jcr, char *path, int pnl); - - -/* - * Create the file, or the directory - * - * fname is the original filename - * ofile is the output filename (may be in a different directory) - * - * Returns: CF_SKIP if file should be skipped - * CF_ERROR on error - * CF_EXTRACT file created and data to restore - * CF_CREATED file created no data to restore - * - * Note, we create the file here, except for special files, - * we do not set the attributes because we want to first - * write the file, then when the writing is done, set the - * attributes. - * So, we return with the file descriptor open for normal - * files. - * - */ -int create_file(JCR *jcr, ATTR *attr, BFILE *bfd, int replace) -{ - mode_t new_mode, parent_mode; - int flags; - uid_t uid; - gid_t gid; - int pnl; - bool exists = false; - struct stat mstatp; - - bfd->reparse_point = false; - if (is_win32_stream(attr->data_stream)) { - set_win32_backup(bfd); - } else { - set_portable_backup(bfd); - } - - new_mode = attr->statp.st_mode; - Dmsg3(200, "type=%d newmode=%x file=%s\n", attr->type, new_mode, attr->ofname); - parent_mode = S_IWUSR | S_IXUSR | new_mode; - gid = attr->statp.st_gid; - uid = attr->statp.st_uid; - -#ifdef HAVE_WIN32 - if (!bfd->use_backup_api) { - // eliminate invalid windows filename characters from foreign filenames - char *ch = (char *)attr->ofname; - if (ch[0] != 0 && ch[1] != 0) { - ch += 2; - while (*ch) { - switch (*ch) { - case ':': - case '<': - case '>': - case '*': - case '?': - case '|': - *ch = '_'; - break; - } - ch++; - } - } - } -#endif - - Dmsg2(400, "Replace=%c %d\n", (char)replace, replace); - if (lstat(attr->ofname, &mstatp) == 0) { - exists = true; - switch (replace) { - case REPLACE_IFNEWER: - if (attr->statp.st_mtime <= mstatp.st_mtime) { - Qmsg(jcr, M_SKIPPED, 0, _("File skipped. Not newer: %s\n"), attr->ofname); - return CF_SKIP; - } - break; - - case REPLACE_IFOLDER: - if (attr->statp.st_mtime >= mstatp.st_mtime) { - Qmsg(jcr, M_SKIPPED, 0, _("File skipped. Not older: %s\n"), attr->ofname); - return CF_SKIP; - } - break; - - case REPLACE_NEVER: - /* Set attributes if we created this directory */ - if (attr->type == FT_DIREND && path_list_lookup(jcr, attr->ofname)) { - break; - } - Qmsg(jcr, M_SKIPPED, 0, _("File skipped. Already exists: %s\n"), attr->ofname); - return CF_SKIP; - - case REPLACE_ALWAYS: - break; - } - } - switch (attr->type) { - case FT_RAW: /* raw device to be written */ - case FT_FIFO: /* FIFO to be written to */ - case FT_LNKSAVED: /* Hard linked, file already saved */ - case FT_LNK: - case FT_SPEC: /* fifo, ... to be backed up */ - case FT_REGE: /* empty file */ - case FT_REG: /* regular file */ - /* - * Note, we do not delete FT_RAW because these are device files - * or FIFOs that should already exist. If we blow it away, - * we may blow away a FIFO that is being used to read the - * restore data, or we may blow away a partition definition. - */ - if (exists && attr->type != FT_RAW && attr->type != FT_FIFO) { - /* Get rid of old copy */ - Dmsg1(400, "unlink %s\n", attr->ofname); - if (unlink(attr->ofname) == -1) { - berrno be; - Qmsg(jcr, M_ERROR, 0, _("File %s already exists and could not be replaced. ERR=%s.\n"), - attr->ofname, be.bstrerror()); - /* Continue despite error */ - } - } - /* - * Here we do some preliminary work for all the above - * types to create the path to the file if it does - * not already exist. Below, we will split to - * do the file type specific work - */ - pnl = separate_path_and_file(jcr, attr->fname, attr->ofname); - if (pnl < 0) { - return CF_ERROR; - } - - /* - * If path length is <= 0 we are making a file in the root - * directory. Assume that the directory already exists. - */ - if (pnl > 0) { - char savechr; - savechr = attr->ofname[pnl]; - attr->ofname[pnl] = 0; /* terminate path */ - - if (!path_already_seen(jcr, attr->ofname, pnl)) { - Dmsg1(400, "Make path %s\n", attr->ofname); - /* - * If we need to make the directory, ensure that it is with - * execute bit set (i.e. parent_mode), and preserve what already - * exists. Normally, this should do nothing. - */ - if (!makepath(attr, attr->ofname, parent_mode, parent_mode, uid, gid, 1)) { - Dmsg1(10, "Could not make path. %s\n", attr->ofname); - attr->ofname[pnl] = savechr; /* restore full name */ - return CF_ERROR; - } - } - attr->ofname[pnl] = savechr; /* restore full name */ - } - - /* Now we do the specific work for each file type */ - switch(attr->type) { - case FT_REGE: - case FT_REG: - Dmsg1(100, "Create=%s\n", attr->ofname); - flags = O_WRONLY | O_CREAT | O_TRUNC | O_BINARY; /* O_NOFOLLOW; */ - if (IS_CTG(attr->statp.st_mode)) { - flags |= O_CTG; /* set contiguous bit if needed */ - } - if (is_bopen(bfd)) { - Qmsg1(jcr, M_ERROR, 0, _("bpkt already open fid=%d\n"), bfd->fid); - bclose(bfd); - } - - - if ((bopen(bfd, attr->ofname, flags, S_IRUSR | S_IWUSR)) < 0) { - berrno be; - be.set_errno(bfd->berrno); - Qmsg2(jcr, M_ERROR, 0, _("Could not create %s: ERR=%s\n"), - attr->ofname, be.bstrerror()); - Dmsg2(100,"Could not create %s: ERR=%s\n", attr->ofname, be.bstrerror()); - return CF_ERROR; - } - return CF_EXTRACT; - -#ifndef HAVE_WIN32 // none of these exist in MS Windows - case FT_RAW: /* Bacula raw device e.g. /dev/sda1 */ - case FT_FIFO: /* Bacula fifo to save data */ - case FT_SPEC: - if (S_ISFIFO(attr->statp.st_mode)) { - Dmsg1(400, "Restore fifo: %s\n", attr->ofname); - if (mkfifo(attr->ofname, attr->statp.st_mode) != 0 && errno != EEXIST) { - berrno be; - Qmsg2(jcr, M_ERROR, 0, _("Cannot make fifo %s: ERR=%s\n"), - attr->ofname, be.bstrerror()); - return CF_ERROR; - } - } else if (S_ISSOCK(attr->statp.st_mode)) { - Dmsg1(200, "Skipping restore of socket: %s\n", attr->ofname); -#ifdef S_IFDOOR // Solaris high speed RPC mechanism - } else if (S_ISDOOR(attr->statp.st_mode)) { - Dmsg1(200, "Skipping restore of door file: %s\n", attr->ofname); -#endif -#ifdef S_IFPORT // Solaris event port for handling AIO - } else if (S_ISPORT(attr->statp.st_mode)) { - Dmsg1(200, "Skipping restore of event port file: %s\n", attr->ofname); -#endif - } else { - Dmsg1(400, "Restore node: %s\n", attr->ofname); - if (mknod(attr->ofname, attr->statp.st_mode, attr->statp.st_rdev) != 0 && errno != EEXIST) { - berrno be; - Qmsg2(jcr, M_ERROR, 0, _("Cannot make node %s: ERR=%s\n"), - attr->ofname, be.bstrerror()); - return CF_ERROR; - } - } - /* - * Here we are going to attempt to restore to a FIFO, which - * means that the FIFO must already exist, AND there must - * be some process already attempting to read from the - * FIFO, so we open it write-only. - */ - if (attr->type == FT_RAW || attr->type == FT_FIFO) { - btimer_t *tid; - Dmsg1(400, "FT_RAW|FT_FIFO %s\n", attr->ofname); - flags = O_WRONLY | O_BINARY; - /* Timeout open() in 60 seconds */ - if (attr->type == FT_FIFO) { - Dmsg0(400, "Set FIFO timer\n"); - tid = start_thread_timer(jcr, pthread_self(), 60); - } else { - tid = NULL; - } - if (is_bopen(bfd)) { - Qmsg1(jcr, M_ERROR, 0, _("bpkt already open fid=%d\n"), bfd->fid); - } - Dmsg2(400, "open %s flags=0x%x\n", attr->ofname, flags); - if ((bopen(bfd, attr->ofname, flags, 0)) < 0) { - berrno be; - be.set_errno(bfd->berrno); - Qmsg2(jcr, M_ERROR, 0, _("Could not open %s: ERR=%s\n"), - attr->ofname, be.bstrerror()); - Dmsg2(400, "Could not open %s: ERR=%s\n", attr->ofname, be.bstrerror()); - stop_thread_timer(tid); - return CF_ERROR; - } - stop_thread_timer(tid); - return CF_EXTRACT; - } - Dmsg1(400, "FT_SPEC %s\n", attr->ofname); - return CF_CREATED; - - case FT_LNK: - Dmsg2(130, "FT_LNK should restore: %s -> %s\n", attr->ofname, attr->olname); - if (symlink(attr->olname, attr->ofname) != 0 && errno != EEXIST) { - berrno be; - Qmsg3(jcr, M_ERROR, 0, _("Could not symlink %s -> %s: ERR=%s\n"), - attr->ofname, attr->olname, be.bstrerror()); - return CF_ERROR; - } - return CF_CREATED; - - case FT_LNKSAVED: /* Hard linked, file already saved */ - Dmsg2(130, "Hard link %s => %s\n", attr->ofname, attr->olname); - if (link(attr->olname, attr->ofname) != 0) { - berrno be; -#ifdef HAVE_CHFLAGS - struct stat s; - - /* - * If using BSD user flags, maybe has a file flag - * preventing this. So attempt to disable, retry link, - * and reset flags. - * Note that BSD securelevel may prevent disabling flag. - */ - - if (stat(attr->olname, &s) == 0 && s.st_flags != 0) { - if (chflags(attr->olname, 0) == 0) { - if (link(attr->olname, attr->ofname) != 0) { - /* restore original file flags even when linking failed */ - if (chflags(attr->olname, s.st_flags) < 0) { - Qmsg2(jcr, M_ERROR, 0, _("Could not restore file flags for file %s: ERR=%s\n"), - attr->olname, be.bstrerror()); - } -#endif /* HAVE_CHFLAGS */ - Qmsg3(jcr, M_ERROR, 0, _("Could not hard link %s -> %s: ERR=%s\n"), - attr->ofname, attr->olname, be.bstrerror()); - Dmsg3(200, "Could not hard link %s -> %s: ERR=%s\n", - attr->ofname, attr->olname, be.bstrerror()); - return CF_ERROR; -#ifdef HAVE_CHFLAGS - } - /* finally restore original file flags */ - if (chflags(attr->olname, s.st_flags) < 0) { - Qmsg2(jcr, M_ERROR, 0, _("Could not restore file flags for file %s: ERR=%s\n"), - attr->olname, be.bstrerror()); - } - } else { - Qmsg2(jcr, M_ERROR, 0, _("Could not reset file flags for file %s: ERR=%s\n"), - attr->olname, be.bstrerror()); - } - } else { - Qmsg3(jcr, M_ERROR, 0, _("Could not hard link %s -> %s: ERR=%s\n"), - attr->ofname, attr->olname, be.bstrerror()); - return CF_ERROR; - } -#endif /* HAVE_CHFLAGS */ - - } - return CF_CREATED; -#endif - } /* End inner switch */ - - case FT_REPARSE: - case FT_JUNCTION: - bfd->reparse_point = true; - /* Fall through wanted */ - case FT_DIRBEGIN: - case FT_DIREND: - Dmsg2(200, "Make dir mode=%o dir=%s\n", new_mode, attr->ofname); - if (!makepath(attr, attr->ofname, new_mode, parent_mode, uid, gid, 0)) { - return CF_ERROR; - } - /* - * If we are using the Win32 Backup API, we open the - * directory so that the security info will be read - * and saved. - */ - if (!is_portable_backup(bfd)) { - if (is_bopen(bfd)) { - Qmsg1(jcr, M_ERROR, 0, _("bpkt already open fid=%d\n"), bfd->fid); - } - if ((bopen(bfd, attr->ofname, O_WRONLY|O_BINARY, 0)) < 0) { - berrno be; - be.set_errno(bfd->berrno); -#ifdef HAVE_WIN32 - /* Check for trying to create a drive, if so, skip */ - if (attr->ofname[1] == ':' && - IsPathSeparator(attr->ofname[2]) && - attr->ofname[3] == '\0') { - return CF_SKIP; - } -#endif - Qmsg2(jcr, M_ERROR, 0, _("Could not open %s: ERR=%s\n"), - attr->ofname, be.bstrerror()); - return CF_ERROR; - } - return CF_EXTRACT; - } else { - return CF_CREATED; - } - - case FT_DELETED: - Qmsg2(jcr, M_INFO, 0, _("Original file %s have been deleted: type=%d\n"), attr->fname, attr->type); - break; - /* The following should not occur */ - case FT_NOACCESS: - case FT_NOFOLLOW: - case FT_NOSTAT: - case FT_DIRNOCHG: - case FT_NOCHG: - case FT_ISARCH: - case FT_NORECURSE: - case FT_NOFSCHG: - case FT_NOOPEN: - Qmsg2(jcr, M_ERROR, 0, _("Original file %s not saved: type=%d\n"), attr->fname, attr->type); - break; - default: - Qmsg2(jcr, M_ERROR, 0, _("Unknown file type %d; not restored: %s\n"), attr->type, attr->fname); - break; - } - return CF_ERROR; -} - -/* - * Returns: > 0 index into path where last path char is. - * 0 no path - * -1 filename is zero length - */ -static int separate_path_and_file(JCR *jcr, char *fname, char *ofile) -{ - char *f, *p, *q; - int fnl, pnl; - - /* Separate pathname and filename */ - for (q=p=f=ofile; *p; p++) { -#ifdef HAVE_WIN32 - if (IsPathSeparator(*p)) { - f = q; - if (IsPathSeparator(p[1])) { - p++; - } - } - *q++ = *p; /* copy data */ -#else - if (IsPathSeparator(*p)) { - f = q; /* possible filename */ - } - q++; -#endif - } - - if (IsPathSeparator(*f)) { - f++; - } - *q = 0; /* terminate string */ - - fnl = q - f; - if (fnl == 0) { - /* The filename length must not be zero here because we - * are dealing with a file (i.e. FT_REGE or FT_REG). - */ - Jmsg1(jcr, M_ERROR, 0, _("Zero length filename: %s\n"), fname); - return -1; - } - pnl = f - ofile - 1; - return pnl; -} - -/* - * Primitive caching of path to prevent recreating a pathname - * each time as long as we remain in the same directory. - */ -static int path_already_seen(JCR *jcr, char *path, int pnl) -{ - if (!jcr->cached_path) { - jcr->cached_path = get_pool_memory(PM_FNAME); - } - if (jcr->cached_pnl == pnl && strcmp(path, jcr->cached_path) == 0) { - return 1; - } - pm_strcpy(jcr->cached_path, path); - jcr->cached_pnl = pnl; - return 0; -} diff --git a/bacula/src/findlib/drivetype.c b/bacula/src/findlib/drivetype.c index 453176108a..24c0802324 100644 --- a/bacula/src/findlib/drivetype.c +++ b/bacula/src/findlib/drivetype.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2006-2007 Free Software Foundation Europe e.V. + Copyright (C) 2006-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Implement routines to determine drive type (Windows specific). diff --git a/bacula/src/findlib/enable_priv.c b/bacula/src/findlib/enable_priv.c deleted file mode 100644 index 89b9b795da..0000000000 --- a/bacula/src/findlib/enable_priv.c +++ /dev/null @@ -1,167 +0,0 @@ -/* - Bacula® - The Network Backup Solution - - Copyright (C) 2003-2009 Free Software Foundation Europe e.V. - - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. - - Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. -*/ -/* - * Enable backup privileges for Win32 systems. - * - * Kern Sibbald, May MMIII - * - * Version $Id$ - * - */ - -#include "bacula.h" -#include "find.h" -#include "jcr.h" - - -/*=============================================================*/ -/* */ -/* * * * U n i x * * * * */ -/* */ -/*=============================================================*/ - -#if !defined(HAVE_WIN32) - -int enable_backup_privileges(JCR *jcr, int ignore_errors) - { return 0; } - - -#endif - - - -/*=============================================================*/ -/* */ -/* * * * W i n 3 2 * * * * */ -/* */ -/*=============================================================*/ - -#if defined(HAVE_WIN32) - -void win_error(JCR *jcr, const char *prefix, DWORD lerror); - -static int -enable_priv(JCR *jcr, HANDLE hToken, const char *name, int ignore_errors) -{ - TOKEN_PRIVILEGES tkp; - DWORD lerror; - - if (!(p_LookupPrivilegeValue && p_AdjustTokenPrivileges)) { - return 0; /* not avail on this OS */ - } - - // Get the LUID for the security privilege. - if (!p_LookupPrivilegeValue(NULL, name, &tkp.Privileges[0].Luid)) { - win_error(jcr, "LookupPrivilegeValue", GetLastError()); - return 0; - } - - /* Set the security privilege for this process. */ - tkp.PrivilegeCount = 1; - tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; - p_AdjustTokenPrivileges(hToken, FALSE, &tkp, sizeof(TOKEN_PRIVILEGES), NULL, NULL); - lerror = GetLastError(); - if (lerror != ERROR_SUCCESS) { - if (!ignore_errors) { - char buf[200]; - strcpy(buf, _("AdjustTokenPrivileges set ")); - bstrncat(buf, name, sizeof(buf)); - win_error(jcr, buf, lerror); - } - return 0; - } - return 1; -} - -/* - * Setup privileges we think we will need. We probably do not need - * the SE_SECURITY_NAME, but since nothing seems to be working, - * we get it hoping to fix the problems. - */ -int enable_backup_privileges(JCR *jcr, int ignore_errors) -{ - HANDLE hToken, hProcess; - int stat = 0; - - if (!p_OpenProcessToken) { - return 0; /* No avail on this OS */ - } - - hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, GetCurrentProcessId()); - - // Get a token for this process. - if (!p_OpenProcessToken(hProcess, - TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) { - if (!ignore_errors) { - win_error(jcr, "OpenProcessToken", GetLastError()); - } - /* Forge on anyway */ - } - - /* Return a bit map of permissions set. */ - if (enable_priv(jcr, hToken, SE_BACKUP_NAME, ignore_errors)) { - stat |= 1<<1; - } - if (enable_priv(jcr, hToken, SE_RESTORE_NAME, ignore_errors)) { - stat |= 1<<2; - } - if (enable_priv(jcr, hToken, SE_SECURITY_NAME, ignore_errors)) { - stat |= 1<<0; - } - if (enable_priv(jcr, hToken, SE_TAKE_OWNERSHIP_NAME, ignore_errors)) { - stat |= 1<<3; - } - if (enable_priv(jcr, hToken, SE_ASSIGNPRIMARYTOKEN_NAME, ignore_errors)) { - stat |= 1<<4; - } - if (enable_priv(jcr, hToken, SE_SYSTEM_ENVIRONMENT_NAME, ignore_errors)) { - stat |= 1<<5; - } - if (enable_priv(jcr, hToken, SE_CREATE_TOKEN_NAME, ignore_errors)) { - stat |= 1<<6; - } - if (enable_priv(jcr, hToken, SE_MACHINE_ACCOUNT_NAME, ignore_errors)) { - stat |= 1<<7; - } - if (enable_priv(jcr, hToken, SE_TCB_NAME, ignore_errors)) { - stat |= 1<<8; - } - if (enable_priv(jcr, hToken, SE_CREATE_PERMANENT_NAME, ignore_errors)) { - stat |= 1<<10; - } - - if (stat) { - stat |= 1<<9; - } - - CloseHandle(hToken); - CloseHandle(hProcess); - return stat; -} - -#endif /* HAVE_WIN32 */ diff --git a/bacula/src/findlib/file_attrs.c b/bacula/src/findlib/file_attrs.c new file mode 100644 index 0000000000..485d8ec628 --- /dev/null +++ b/bacula/src/findlib/file_attrs.c @@ -0,0 +1,667 @@ +/* + Bacula® - The Network Backup Solution + + Copyright (C) 2002-2014 Free Software Foundation Europe e.V. + + The main author of Bacula is Kern Sibbald, with contributions from + many others, a complete list can be found in the file AUTHORS. + This program is Free Software; you can redistribute it and/or + modify it under the terms of version three of the GNU Affero General Public + License as published by the Free Software Foundation and included + in the file LICENSE. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. + + Bacula® is a registered trademark of Kern Sibbald. + The licensor of Bacula is the Free Software Foundation Europe + (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, + Switzerland, email:ftf@fsfeurope.org. +*/ +/** + * Encode and decode standard Unix attributes and + * Extended attributes for Win32 and + * other non-Unix systems, or Unix systems with ACLs, ... + * + * Kern Sibbald, October MMII + * + */ + +//#define _POSIX_C_SOURCE 200809L +//#define _BSD_SOURCE 1 + +#include "bacula.h" +#include "find.h" +#include "ch.h" + +static uid_t my_uid = 1; +static gid_t my_gid = 1; +static bool uid_set = false; + +/* + * For old systems that don't have lchown() or lchmod() + */ +#ifndef HAVE_LCHOWN +#define lchown chown +#endif +#ifndef HAVE_LCHMOD +#define lchmod chmod +#endif + +/*=============================================================*/ +/* */ +/* *** A l l S y s t e m s *** */ +/* */ +/*=============================================================*/ + +/* + * To turn off use of fchown(), fchmod(), or futimes(), + * uncomment one or more of the following. + */ +//#undef HAVE_FCHOWN +//#undef HAVE_FCHMOD +//#undef HAVE_FUTIMES + +/* + * Print errors only if debug level defined or we are root. + * root should not get errors. Errors for users causes + * too much output. + */ +#define print_error (chk_dbglvl(100) || my_uid == 0) + +bool set_mod_own_time(JCR *jcr, BFILE *ofd, ATTR *attr) +{ + bool ok = true; + struct utimbuf ut; + + /* Do not try to set rights with f functions when using a plugin */ + if (is_bopen(ofd) && !ofd->cmd_plugin) { /* TODO: Look with opt_plugin */ + /* + * The #ifdefing is a bit ugly, but it is the only + * way we can ensure this works on older systems. + */ +#ifdef HAVE_FCHMOD + if (fchmod(ofd->fid, attr->statp.st_mode) < 0 && print_error) { +#else + if (lchmod(attr->ofname, attr->statp.st_mode) < 0 && print_error) { +#endif + berrno be; + Jmsg2(jcr, M_ERROR, 0, _("Unable to set file modes %s: ERR=%s\n"), + attr->ofname, be.bstrerror()); + ok = false; + } +#ifdef HAVE_FCHOWN + if (fchown(ofd->fid, attr->statp.st_uid, attr->statp.st_gid) < 0 && print_error) { +#else + if (lchown(attr->ofname, attr->statp.st_uid, attr->statp.st_gid) < 0 && print_error) { +#endif + berrno be; + Jmsg2(jcr, M_ERROR, 0, _("Unable to set file owner %s: ERR=%s\n"), + attr->ofname, be.bstrerror()); + ok = false; + } + +#ifdef HAVE_FUTIMES + struct timeval times[2]; + times[0].tv_sec = attr->statp.st_atime; + times[0].tv_usec = 0; + times[1].tv_sec = attr->statp.st_mtime; + times[1].tv_usec = 0; + if (futimes(ofd->fid, times) < 0 && print_error) { +#else + ut.actime = attr->statp.st_atime; + ut.modtime = attr->statp.st_mtime; + //bclose(ofd); + if (utime(attr->ofname, &ut) < 0 && print_error) { +#endif + berrno be; + Jmsg2(jcr, M_ERROR, 0, _("Unable to set file times %s: ERR=%s\n"), + attr->ofname, be.bstrerror()); + ok = false; + } + } else { + if (lchown(attr->ofname, attr->statp.st_uid, attr->statp.st_gid) < 0 && print_error) { + berrno be; + Jmsg2(jcr, M_ERROR, 0, _("Unable to set file owner %s: ERR=%s\n"), + attr->ofname, be.bstrerror()); + ok = false; + } + if (lchmod(attr->ofname, attr->statp.st_mode) < 0 && print_error) { + berrno be; + Jmsg2(jcr, M_ERROR, 0, _("Unable to set file modes %s: ERR=%s\n"), + attr->ofname, be.bstrerror()); + ok = false; + } + /* + * Reset file times. + */ + ut.actime = attr->statp.st_atime; + ut.modtime = attr->statp.st_mtime; + + if (utime(attr->ofname, &ut) < 0 && print_error) { + berrno be; + Jmsg2(jcr, M_ERROR, 0, _("Unable to set file times %s: ERR=%s\n"), + attr->ofname, be.bstrerror()); + ok = false; + } + } + return ok; +} + +/* + * Return the data stream that will be used + */ +int select_data_stream(FF_PKT *ff_pkt) +{ + int stream; + + /* This is a plugin special restore object */ + if (ff_pkt->type == FT_RESTORE_FIRST) { + ff_pkt->flags = 0; + return STREAM_FILE_DATA; + } + + /** + * Fix all incompatible options + */ + /** No sparse option for encrypted data */ + if (ff_pkt->flags & FO_ENCRYPT) { + ff_pkt->flags &= ~FO_SPARSE; + } + + /** Note, no sparse option for win32_data */ + if (!is_portable_backup(&ff_pkt->bfd)) { + stream = STREAM_WIN32_DATA; + ff_pkt->flags &= ~FO_SPARSE; + } else if (ff_pkt->flags & FO_SPARSE) { + stream = STREAM_SPARSE_DATA; + } else { + stream = STREAM_FILE_DATA; + } + if (ff_pkt->flags & FO_OFFSETS) { + stream = STREAM_SPARSE_DATA; + } + + /** Encryption is only supported for file data */ + if (stream != STREAM_FILE_DATA && stream != STREAM_WIN32_DATA && + stream != STREAM_MACOS_FORK_DATA) { + ff_pkt->flags &= ~FO_ENCRYPT; + } + + /** Compression is not supported for Mac fork data */ + if (stream == STREAM_MACOS_FORK_DATA) { + ff_pkt->flags &= ~FO_COMPRESS; + } + + /** + * Handle compression and encryption options + */ +#if defined(HAVE_LIBZ) || defined(HAVE_LZO) + if (ff_pkt->flags & FO_COMPRESS) { + #ifdef HAVE_LIBZ + if(ff_pkt->Compress_algo == COMPRESS_GZIP) { + switch (stream) { + case STREAM_WIN32_DATA: + stream = STREAM_WIN32_GZIP_DATA; + break; + case STREAM_SPARSE_DATA: + stream = STREAM_SPARSE_GZIP_DATA; + break; + case STREAM_FILE_DATA: + stream = STREAM_GZIP_DATA; + break; + default: + /** + * All stream types that do not support compression should clear out + * FO_COMPRESS above, and this code block should be unreachable. + */ + ASSERT(!(ff_pkt->flags & FO_COMPRESS)); + return STREAM_NONE; + } + } + #endif + #ifdef HAVE_LZO + if(ff_pkt->Compress_algo == COMPRESS_LZO1X) { + switch (stream) { + case STREAM_WIN32_DATA: + stream = STREAM_WIN32_COMPRESSED_DATA; + break; + case STREAM_SPARSE_DATA: + stream = STREAM_SPARSE_COMPRESSED_DATA; + break; + case STREAM_FILE_DATA: + stream = STREAM_COMPRESSED_DATA; + break; + default: + /** + * All stream types that do not support compression should clear out + * FO_COMPRESS above, and this code block should be unreachable. + */ + ASSERT(!(ff_pkt->flags & FO_COMPRESS)); + return STREAM_NONE; + } + } + #endif + } +#endif +#ifdef HAVE_CRYPTO + if (ff_pkt->flags & FO_ENCRYPT) { + switch (stream) { + case STREAM_WIN32_DATA: + stream = STREAM_ENCRYPTED_WIN32_DATA; + break; + case STREAM_WIN32_GZIP_DATA: + stream = STREAM_ENCRYPTED_WIN32_GZIP_DATA; + break; + case STREAM_WIN32_COMPRESSED_DATA: + stream = STREAM_ENCRYPTED_WIN32_COMPRESSED_DATA; + break; + case STREAM_FILE_DATA: + stream = STREAM_ENCRYPTED_FILE_DATA; + break; + case STREAM_GZIP_DATA: + stream = STREAM_ENCRYPTED_FILE_GZIP_DATA; + break; + case STREAM_COMPRESSED_DATA: + stream = STREAM_ENCRYPTED_FILE_COMPRESSED_DATA; + break; + default: + /* All stream types that do not support encryption should clear out + * FO_ENCRYPT above, and this code block should be unreachable. */ + ASSERT(!(ff_pkt->flags & FO_ENCRYPT)); + return STREAM_NONE; + } + } +#endif + + return stream; +} + + +/** + * Encode a stat structure into a base64 character string + * All systems must create such a structure. + * In addition, we tack on the LinkFI, which is non-zero in + * the case of a hard linked file that has no data. This + * is a File Index pointing to the link that does have the + * data (always the first one encountered in a save). + * You may piggyback attributes on this packet by encoding + * them in the encode_attribsEx() subroutine, but this is + * not recommended. + */ +void encode_stat(char *buf, struct stat *statp, int stat_size, int32_t LinkFI, int data_stream) +{ + char *p = buf; + + /* + * We read the stat packet so make sure the caller's conception + * is the same as ours. They can be different if LARGEFILE is not + * the same when compiling this library and the calling program. + */ + ASSERT(stat_size == (int)sizeof(struct stat)); + + /** + * Encode a stat packet. I should have done this more intelligently + * with a length so that it could be easily expanded. + */ + p += to_base64((int64_t)statp->st_dev, p); + *p++ = ' '; /* separate fields with a space */ + p += to_base64((int64_t)statp->st_ino, p); + *p++ = ' '; + p += to_base64((int64_t)statp->st_mode, p); + *p++ = ' '; + p += to_base64((int64_t)statp->st_nlink, p); + *p++ = ' '; + p += to_base64((int64_t)statp->st_uid, p); + *p++ = ' '; + p += to_base64((int64_t)statp->st_gid, p); + *p++ = ' '; + p += to_base64((int64_t)statp->st_rdev, p); + *p++ = ' '; + p += to_base64((int64_t)statp->st_size, p); + *p++ = ' '; +#ifndef HAVE_MINGW + p += to_base64((int64_t)statp->st_blksize, p); + *p++ = ' '; + p += to_base64((int64_t)statp->st_blocks, p); + *p++ = ' '; +#else + p += to_base64((int64_t)0, p); /* output place holder */ + *p++ = ' '; + p += to_base64((int64_t)0, p); /* output place holder */ + *p++ = ' '; +#endif + p += to_base64((int64_t)statp->st_atime, p); + *p++ = ' '; + p += to_base64((int64_t)statp->st_mtime, p); + *p++ = ' '; + p += to_base64((int64_t)statp->st_ctime, p); + *p++ = ' '; + p += to_base64((int64_t)LinkFI, p); + *p++ = ' '; + +#ifdef HAVE_CHFLAGS + /* FreeBSD function */ + p += to_base64((int64_t)statp->st_flags, p); /* output st_flags */ +#else + p += to_base64((int64_t)0, p); /* output place holder */ +#endif + *p++ = ' '; + p += to_base64((int64_t)data_stream, p); +#ifdef HAVE_MINGW + *p++ = ' '; + p += to_base64((int64_t)statp->st_fattrs, p); +#endif + *p = 0; + return; +} + + +/* Do casting according to unknown type to keep compiler happy */ +#ifdef HAVE_TYPEOF + #define plug(st, val) st = (typeof st)val +#else + #if !HAVE_GCC & HAVE_SUN_OS + /* Sun compiler does not handle templates correctly */ + #define plug(st, val) st = val + #elif __sgi + #define plug(st, val) st = val + #else + /* Use templates to do the casting */ + template void plug(T &st, uint64_t val) + { st = static_cast(val); } + #endif +#endif + + +/* + * Decode a stat packet from base64 characters + * returns: data_stream + */ +int decode_stat(char *buf, struct stat *statp, int stat_size, int32_t *LinkFI) +{ + char *p = buf; + int64_t val; + int data_stream; + + /* + * We store into the stat packet so make sure the caller's conception + * is the same as ours. They can be different if LARGEFILE is not + * the same when compiling this library and the calling program. + */ + ASSERT(stat_size == (int)sizeof(struct stat)); + + p += from_base64(&val, p); + plug(statp->st_dev, val); + p++; + p += from_base64(&val, p); + plug(statp->st_ino, val); + p++; + p += from_base64(&val, p); + plug(statp->st_mode, val); + p++; + p += from_base64(&val, p); + plug(statp->st_nlink, val); + p++; + p += from_base64(&val, p); + plug(statp->st_uid, val); + p++; + p += from_base64(&val, p); + plug(statp->st_gid, val); + p++; + p += from_base64(&val, p); + plug(statp->st_rdev, val); + p++; + p += from_base64(&val, p); + plug(statp->st_size, val); + p++; +#ifndef HAVE_MINGW + p += from_base64(&val, p); + plug(statp->st_blksize, val); + p++; + p += from_base64(&val, p); + plug(statp->st_blocks, val); + p++; +#else + p += from_base64(&val, p); +// plug(statp->st_blksize, val); + p++; + p += from_base64(&val, p); +// plug(statp->st_blocks, val); + p++; +#endif + p += from_base64(&val, p); + plug(statp->st_atime, val); + p++; + p += from_base64(&val, p); + plug(statp->st_mtime, val); + p++; + p += from_base64(&val, p); + plug(statp->st_ctime, val); + + /* Optional FileIndex of hard linked file data */ + if (*p == ' ' || (*p != 0 && *(p+1) == ' ')) { + p++; + p += from_base64(&val, p); + *LinkFI = (uint32_t)val; + } else { + *LinkFI = 0; + return 0; + } + + /* FreeBSD user flags */ + if (*p == ' ' || (*p != 0 && *(p+1) == ' ')) { + p++; + p += from_base64(&val, p); +#ifdef HAVE_CHFLAGS + plug(statp->st_flags, val); + } else { + statp->st_flags = 0; +#endif + } + + /* Look for data stream id */ + if (*p == ' ' || (*p != 0 && *(p+1) == ' ')) { + p++; + p += from_base64(&val, p); + } else { + val = 0; + } + data_stream = val; +#ifdef HAVE_MINGW + if (*p == ' ' || (*p != 0 && *(p+1) == ' ')) { + p++; + p += from_base64(&val, p); + plug(statp->st_fattrs, val); + } else { + statp->st_fattrs = 0; + val = 0; + } +#endif + return data_stream; +} + +/** Decode a LinkFI field of encoded stat packet */ +int32_t decode_LinkFI(char *buf, struct stat *statp, int stat_size) +{ + char *p = buf; + int64_t val; + /* + * We store into the stat packet so make sure the caller's conception + * is the same as ours. They can be different if LARGEFILE is not + * the same when compiling this library and the calling program. + */ + ASSERT(stat_size == (int)sizeof(struct stat)); + + skip_nonspaces(&p); /* st_dev */ + p++; /* skip space */ + skip_nonspaces(&p); /* st_ino */ + p++; + p += from_base64(&val, p); + plug(statp->st_mode, val); /* st_mode */ + p++; + skip_nonspaces(&p); /* st_nlink */ + p++; + skip_nonspaces(&p); /* st_uid */ + p++; + skip_nonspaces(&p); /* st_gid */ + p++; + skip_nonspaces(&p); /* st_rdev */ + p++; + skip_nonspaces(&p); /* st_size */ + p++; + skip_nonspaces(&p); /* st_blksize */ + p++; + skip_nonspaces(&p); /* st_blocks */ + p++; + skip_nonspaces(&p); /* st_atime */ + p++; + skip_nonspaces(&p); /* st_mtime */ + p++; + skip_nonspaces(&p); /* st_ctime */ + + /* Optional FileIndex of hard linked file data */ + if (*p == ' ' || (*p != 0 && *(p+1) == ' ')) { + p++; + p += from_base64(&val, p); + return (int32_t)val; + } + return 0; +} + +/** + * Set file modes, permissions and times + * + * fname is the original filename + * ofile is the output filename (may be in a different directory) + * + * Returns: true on success + * false on failure + */ +bool set_attributes(JCR *jcr, ATTR *attr, BFILE *ofd) +{ + mode_t old_mask; + bool ok = true; + boffset_t fsize; + + if (uid_set) { + my_uid = getuid(); + my_gid = getgid(); + uid_set = true; + } + + old_mask = umask(0); + if (is_bopen(ofd)) { + char ec1[50], ec2[50]; + fsize = blseek(ofd, 0, SEEK_END); + if (attr->type == FT_REG && fsize > 0 && attr->statp.st_size > 0 && + fsize != (boffset_t)attr->statp.st_size) { + Jmsg3(jcr, M_ERROR, 0, _("File size of restored file %s not correct. Original %s, restored %s.\n"), + attr->ofname, edit_uint64(attr->statp.st_size, ec1), + edit_uint64(fsize, ec2)); + } + } + + /* + * We do not restore sockets, so skip trying to restore their + * attributes. + */ + if (attr->type == FT_SPEC && S_ISSOCK(attr->statp.st_mode)) { + goto bail_out; + } + + /* ***FIXME**** optimize -- don't do if already correct */ + /* + * For link, change owner of link using lchown, but don't + * try to do a chmod as that will update the file behind it. + */ + if (attr->type == FT_LNK) { + /** Change owner of link, not of real file */ + if (lchown(attr->ofname, attr->statp.st_uid, attr->statp.st_gid) < 0 && print_error) { + berrno be; + Jmsg2(jcr, M_ERROR, 0, _("Unable to set file owner %s: ERR=%s\n"), + attr->ofname, be.bstrerror()); + ok = false; + } + } else { + /* + * At this point, we have a file that is not a LINK + */ + ok = set_mod_own_time(jcr, ofd, attr); + +#ifdef HAVE_CHFLAGS + /** + * FreeBSD user flags + * + * Note, this should really be done before the utime() above, + * but if the immutable bit is set, it will make the utimes() + * fail. + */ + if (chflags(attr->ofname, attr->statp.st_flags) < 0 && print_error) { + berrno be; + Jmsg2(jcr, M_ERROR, 0, _("Unable to set file flags %s: ERR=%s\n"), + attr->ofname, be.bstrerror()); + ok = false; + } +#endif + } + +bail_out: + if (is_bopen(ofd)) { + bclose(ofd); + } + pm_strcpy(attr->ofname, "*none*"); + umask(old_mask); + return ok; +} + + +/*=============================================================*/ +/* */ +/* * * * U n i x * * * * */ +/* */ +/*=============================================================*/ + +#if !defined(HAVE_WIN32) + +/** + * It is possible to piggyback additional data e.g. ACLs on + * the encode_stat() data by returning the extended attributes + * here. They must be "self-contained" (i.e. you keep track + * of your own length), and they must be in ASCII string + * format. Using this feature is not recommended. + * The code below shows how to return nothing. See the Win32 + * code below for returning something in the attributes. + */ +int encode_attribsEx(JCR *jcr, char *attribsEx, FF_PKT *ff_pkt) +{ +#ifdef HAVE_DARWIN_OS + /** + * We save the Mac resource fork length so that on a + * restore, we can be sure we put back the whole resource. + */ + char *p; + + *attribsEx = 0; /* no extended attributes (yet) */ + if (jcr->cmd_plugin || ff_pkt->type == FT_DELETED) { + return STREAM_UNIX_ATTRIBUTES; + } + p = attribsEx; + if (ff_pkt->flags & FO_HFSPLUS) { + p += to_base64((uint64_t)(ff_pkt->hfsinfo.rsrclength), p); + } + *p = 0; +#else + *attribsEx = 0; /* no extended attributes */ +#endif + return STREAM_UNIX_ATTRIBUTES; +} + +#endif diff --git a/bacula/src/findlib/file_create.c b/bacula/src/findlib/file_create.c new file mode 100644 index 0000000000..791a76532f --- /dev/null +++ b/bacula/src/findlib/file_create.c @@ -0,0 +1,435 @@ +/* + Bacula® - The Network Backup Solution + + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. + + The main author of Bacula is Kern Sibbald, with contributions from + many others, a complete list can be found in the file AUTHORS. + This program is Free Software; you can redistribute it and/or + modify it under the terms of version three of the GNU Affero General Public + License as published by the Free Software Foundation and included + in the file LICENSE. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. + + Bacula® is a registered trademark of Kern Sibbald. + The licensor of Bacula is the Free Software Foundation Europe + (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, + Switzerland, email:ftf@fsfeurope.org. +*/ +/* + * Create a file, and reset the modes + * + * Kern Sibbald, November MM + * + */ + +#include "bacula.h" +#include "find.h" + +#ifndef S_IRWXUGO +#define S_IRWXUGO (S_IRWXU | S_IRWXG | S_IRWXO) +#endif + +#ifndef IS_CTG +#define IS_CTG(x) 0 +#define O_CTG 0 +#endif + +#ifndef O_EXCL +#define O_EXCL 0 +#endif +#ifndef O_NOFOLLOW +#define O_NOFOLLOW 0 +#endif + +static int separate_path_and_file(JCR *jcr, char *fname, char *ofile); +static int path_already_seen(JCR *jcr, char *path, int pnl); + + +/* + * Create the file, or the directory + * + * fname is the original filename + * ofile is the output filename (may be in a different directory) + * + * Returns: CF_SKIP if file should be skipped + * CF_ERROR on error + * CF_EXTRACT file created and data to restore + * CF_CREATED file created no data to restore + * + * Note, we create the file here, except for special files, + * we do not set the attributes because we want to first + * write the file, then when the writing is done, set the + * attributes. + * So, we return with the file descriptor open for normal + * files. + * + */ +int create_file(JCR *jcr, ATTR *attr, BFILE *bfd, int replace) +{ + mode_t new_mode, parent_mode; + int flags; + uid_t uid; + gid_t gid; + int pnl; + bool exists = false; + struct stat mstatp; + + bfd->reparse_point = false; + set_portable_backup(bfd); + + new_mode = attr->statp.st_mode; + Dmsg3(200, "type=%d newmode=%x file=%s\n", attr->type, new_mode, attr->ofname); + parent_mode = S_IWUSR | S_IXUSR | new_mode; + gid = attr->statp.st_gid; + uid = attr->statp.st_uid; + + Dmsg2(400, "Replace=%c %d\n", (char)replace, replace); + if (lstat(attr->ofname, &mstatp) == 0) { + exists = true; + switch (replace) { + case REPLACE_IFNEWER: + if (attr->statp.st_mtime <= mstatp.st_mtime) { + Qmsg(jcr, M_SKIPPED, 0, _("File skipped. Not newer: %s\n"), attr->ofname); + return CF_SKIP; + } + break; + + case REPLACE_IFOLDER: + if (attr->statp.st_mtime >= mstatp.st_mtime) { + Qmsg(jcr, M_SKIPPED, 0, _("File skipped. Not older: %s\n"), attr->ofname); + return CF_SKIP; + } + break; + + case REPLACE_NEVER: + /* Set attributes if we created this directory */ + if (attr->type == FT_DIREND && path_list_lookup(jcr, attr->ofname)) { + break; + } + Qmsg(jcr, M_SKIPPED, 0, _("File skipped. Already exists: %s\n"), attr->ofname); + return CF_SKIP; + + case REPLACE_ALWAYS: + break; + } + } + switch (attr->type) { + case FT_RAW: /* raw device to be written */ + case FT_FIFO: /* FIFO to be written to */ + case FT_LNKSAVED: /* Hard linked, file already saved */ + case FT_LNK: + case FT_SPEC: /* fifo, ... to be backed up */ + case FT_REGE: /* empty file */ + case FT_REG: /* regular file */ + /* + * Note, we do not delete FT_RAW because these are device files + * or FIFOs that should already exist. If we blow it away, + * we may blow away a FIFO that is being used to read the + * restore data, or we may blow away a partition definition. + */ + if (exists && attr->type != FT_RAW && attr->type != FT_FIFO) { + /* Get rid of old copy */ + Dmsg1(400, "unlink %s\n", attr->ofname); + if (unlink(attr->ofname) == -1) { + berrno be; + Qmsg(jcr, M_ERROR, 0, _("File %s already exists and could not be replaced. ERR=%s.\n"), + attr->ofname, be.bstrerror()); + return CF_ERROR; + } + } + /* + * Here we do some preliminary work for all the above + * types to create the path to the file if it does + * not already exist. Below, we will split to + * do the file type specific work + */ + pnl = separate_path_and_file(jcr, attr->fname, attr->ofname); + if (pnl < 0) { + return CF_ERROR; + } + + /* + * If path length is <= 0 we are making a file in the root + * directory. Assume that the directory already exists. + */ + if (pnl > 0) { + char savechr; + savechr = attr->ofname[pnl]; + attr->ofname[pnl] = 0; /* terminate path */ + + if (!path_already_seen(jcr, attr->ofname, pnl)) { + Dmsg1(400, "Make path %s\n", attr->ofname); + /* + * If we need to make the directory, ensure that it is with + * execute bit set (i.e. parent_mode), and preserve what already + * exists. Normally, this should do nothing. + */ + if (!makepath(attr, attr->ofname, parent_mode, parent_mode, uid, gid, 1)) { + Dmsg1(10, "Could not make path. %s\n", attr->ofname); + attr->ofname[pnl] = savechr; /* restore full name */ + return CF_ERROR; + } + } + attr->ofname[pnl] = savechr; /* restore full name */ + } + + /* Now we do the specific work for each file type */ + switch(attr->type) { + case FT_REGE: + case FT_REG: + Dmsg1(100, "Create=%s\n", attr->ofname); + flags = O_WRONLY | O_CREAT | O_BINARY | O_EXCL; + if (IS_CTG(attr->statp.st_mode)) { + flags |= O_CTG; /* set contiguous bit if needed */ + } + if (is_bopen(bfd)) { + Qmsg1(jcr, M_ERROR, 0, _("bpkt already open fid=%d\n"), bfd->fid); + bclose(bfd); + } + + + if ((bopen(bfd, attr->ofname, flags, S_IRUSR | S_IWUSR)) < 0) { + berrno be; + be.set_errno(bfd->berrno); + Qmsg2(jcr, M_ERROR, 0, _("Could not create %s: ERR=%s\n"), + attr->ofname, be.bstrerror()); + Dmsg2(100,"Could not create %s: ERR=%s\n", attr->ofname, be.bstrerror()); + return CF_ERROR; + } + return CF_EXTRACT; + + case FT_RAW: /* Bacula raw device e.g. /dev/sda1 */ + case FT_FIFO: /* Bacula fifo to save data */ + case FT_SPEC: + if (S_ISFIFO(attr->statp.st_mode)) { + Dmsg1(400, "Restore fifo: %s\n", attr->ofname); + if (mkfifo(attr->ofname, attr->statp.st_mode) != 0 && errno != EEXIST) { + berrno be; + Qmsg2(jcr, M_ERROR, 0, _("Cannot make fifo %s: ERR=%s\n"), + attr->ofname, be.bstrerror()); + return CF_ERROR; + } + } else if (S_ISSOCK(attr->statp.st_mode)) { + Dmsg1(200, "Skipping restore of socket: %s\n", attr->ofname); +#ifdef S_IFDOOR // Solaris high speed RPC mechanism + } else if (S_ISDOOR(attr->statp.st_mode)) { + Dmsg1(200, "Skipping restore of door file: %s\n", attr->ofname); +#endif +#ifdef S_IFPORT // Solaris event port for handling AIO + } else if (S_ISPORT(attr->statp.st_mode)) { + Dmsg1(200, "Skipping restore of event port file: %s\n", attr->ofname); +#endif + } else { + Dmsg1(400, "Restore node: %s\n", attr->ofname); + if (mknod(attr->ofname, attr->statp.st_mode, attr->statp.st_rdev) != 0 && errno != EEXIST) { + berrno be; + Qmsg2(jcr, M_ERROR, 0, _("Cannot make node %s: ERR=%s\n"), + attr->ofname, be.bstrerror()); + return CF_ERROR; + } + } + /* + * Here we are going to attempt to restore to a FIFO, which + * means that the FIFO must already exist, AND there must + * be some process already attempting to read from the + * FIFO, so we open it write-only. + */ + if (attr->type == FT_RAW || attr->type == FT_FIFO) { + btimer_t *tid; + Dmsg1(400, "FT_RAW|FT_FIFO %s\n", attr->ofname); + flags = O_WRONLY | O_BINARY; + /* Timeout open() in 60 seconds */ + if (attr->type == FT_FIFO) { + Dmsg0(400, "Set FIFO timer\n"); + tid = start_thread_timer(jcr, pthread_self(), 60); + } else { + tid = NULL; + } + if (is_bopen(bfd)) { + Qmsg1(jcr, M_ERROR, 0, _("bpkt already open fid=%d\n"), bfd->fid); + } + Dmsg2(400, "open %s flags=0x%x\n", attr->ofname, flags); + if ((bopen(bfd, attr->ofname, flags, 0)) < 0) { + berrno be; + be.set_errno(bfd->berrno); + Qmsg2(jcr, M_ERROR, 0, _("Could not open %s: ERR=%s\n"), + attr->ofname, be.bstrerror()); + Dmsg2(400, "Could not open %s: ERR=%s\n", attr->ofname, be.bstrerror()); + stop_thread_timer(tid); + return CF_ERROR; + } + stop_thread_timer(tid); + return CF_EXTRACT; + } + Dmsg1(400, "FT_SPEC %s\n", attr->ofname); + return CF_CREATED; + + case FT_LNK: + Dmsg2(130, "FT_LNK should restore: %s -> %s\n", attr->ofname, attr->olname); + if (symlink(attr->olname, attr->ofname) != 0 && errno != EEXIST) { + berrno be; + Qmsg3(jcr, M_ERROR, 0, _("Could not symlink %s -> %s: ERR=%s\n"), + attr->ofname, attr->olname, be.bstrerror()); + return CF_ERROR; + } + return CF_CREATED; + + case FT_LNKSAVED: /* Hard linked, file already saved */ + Dmsg2(130, "Hard link %s => %s\n", attr->ofname, attr->olname); + if (link(attr->olname, attr->ofname) != 0) { + berrno be; +#ifdef HAVE_CHFLAGS + struct stat s; + /* + * If using BSD user flags, maybe has a file flag + * preventing this. So attempt to disable, retry link, + * and reset flags. + * Note that BSD securelevel may prevent disabling flag. + */ + if (stat(attr->olname, &s) == 0 && s.st_flags != 0) { + if (chflags(attr->olname, 0) == 0) { + if (link(attr->olname, attr->ofname) != 0) { + /* restore original file flags even when linking failed */ + if (chflags(attr->olname, s.st_flags) < 0) { + Qmsg2(jcr, M_ERROR, 0, _("Could not restore file flags for file %s: ERR=%s\n"), + attr->olname, be.bstrerror()); + } +#endif /* HAVE_CHFLAGS */ + Qmsg3(jcr, M_ERROR, 0, _("Could not hard link %s -> %s: ERR=%s\n"), + attr->ofname, attr->olname, be.bstrerror()); + Dmsg3(200, "Could not hard link %s -> %s: ERR=%s\n", + attr->ofname, attr->olname, be.bstrerror()); + return CF_ERROR; +#ifdef HAVE_CHFLAGS + } + /* finally restore original file flags */ + if (chflags(attr->olname, s.st_flags) < 0) { + Qmsg2(jcr, M_ERROR, 0, _("Could not restore file flags for file %s: ERR=%s\n"), + attr->olname, be.bstrerror()); + } + } else { + Qmsg2(jcr, M_ERROR, 0, _("Could not reset file flags for file %s: ERR=%s\n"), + attr->olname, be.bstrerror()); + } + } else { + Qmsg3(jcr, M_ERROR, 0, _("Could not hard link %s -> %s: ERR=%s\n"), + attr->ofname, attr->olname, be.bstrerror()); + return CF_ERROR; + } +#endif /* HAVE_CHFLAGS */ + + } + return CF_CREATED; + } /* End inner switch */ + + case FT_DIRBEGIN: + case FT_DIREND: + Dmsg2(200, "Make dir mode=%o dir=%s\n", new_mode, attr->ofname); + if (!makepath(attr, attr->ofname, new_mode, parent_mode, uid, gid, 0)) { + return CF_ERROR; + } + /* + * If we are using the Win32 Backup API, we open the + * directory so that the security info will be read + * and saved. + */ + if (!is_portable_backup(bfd)) { + if (is_bopen(bfd)) { + Qmsg1(jcr, M_ERROR, 0, _("bpkt already open fid=%d\n"), bfd->fid); + } + if ((bopen(bfd, attr->ofname, O_WRONLY|O_BINARY, 0)) < 0) { + berrno be; + be.set_errno(bfd->berrno); + Qmsg2(jcr, M_ERROR, 0, _("Could not open %s: ERR=%s\n"), + attr->ofname, be.bstrerror()); + return CF_ERROR; + } + return CF_EXTRACT; + } else { + return CF_CREATED; + } + + case FT_DELETED: + Qmsg2(jcr, M_INFO, 0, _("Original file %s have been deleted: type=%d\n"), attr->fname, attr->type); + break; + /* The following should not occur */ + case FT_NOACCESS: + case FT_NOFOLLOW: + case FT_NOSTAT: + case FT_DIRNOCHG: + case FT_NOCHG: + case FT_ISARCH: + case FT_NORECURSE: + case FT_NOFSCHG: + case FT_NOOPEN: + Qmsg2(jcr, M_ERROR, 0, _("Original file %s not saved: type=%d\n"), attr->fname, attr->type); + break; + default: + Qmsg2(jcr, M_ERROR, 0, _("Unknown file type %d; not restored: %s\n"), attr->type, attr->fname); + Pmsg2(000, "Unknown file type %d; not restored: %s\n", attr->type, attr->fname); + break; + } + return CF_ERROR; +} + +/* + * Returns: > 0 index into path where last path char is. + * 0 no path + * -1 filename is zero length + */ +static int separate_path_and_file(JCR *jcr, char *fname, char *ofile) +{ + char *f, *p, *q; + int fnl, pnl; + + /* Separate pathname and filename */ + for (q=p=f=ofile; *p; p++) { + if (IsPathSeparator(*p)) { + f = q; /* possible filename */ + } + q++; + } + + if (IsPathSeparator(*f)) { + f++; + } + *q = 0; /* terminate string */ + + fnl = q - f; + if (fnl == 0) { + /* The filename length must not be zero here because we + * are dealing with a file (i.e. FT_REGE or FT_REG). + */ + Jmsg1(jcr, M_ERROR, 0, _("Zero length filename: %s\n"), fname); + return -1; + } + pnl = f - ofile - 1; + return pnl; +} + +/* + * Primitive caching of path to prevent recreating a pathname + * each time as long as we remain in the same directory. + */ +static int path_already_seen(JCR *jcr, char *path, int pnl) +{ + if (!jcr->cached_path) { + jcr->cached_path = get_pool_memory(PM_FNAME); + } + if (jcr->cached_pnl == pnl && strcmp(path, jcr->cached_path) == 0) { + return 1; + } + pm_strcpy(jcr->cached_path, path); + jcr->cached_pnl = pnl; + return 0; +} diff --git a/bacula/src/findlib/find.c b/bacula/src/findlib/find.c index dba28bf36a..606b4f0081 100644 --- a/bacula/src/findlib/find.c +++ b/bacula/src/findlib/find.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2012 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Main routine for finding files on a file system. @@ -111,51 +99,12 @@ set_find_changed_function(FF_PKT *ff, bool check_fct(JCR *jcr, FF_PKT *ff)) * the function returns the number of used drives and * fills "drives" with up to 26 (A..Z) drive names * + * szDrives must be at least 27 bytes long */ int get_win32_driveletters(FF_PKT *ff, char* szDrives) { - /* szDrives must be at least 27 bytes long */ - -#if !defined(HAVE_WIN32) - return 0; -#endif - int nCount; - /* - * Can be already filled by plugin, so check that all - * letters are in upper case. There should be no duplicates. - */ - for (nCount = 0; nCount < 27 && szDrives[nCount] ; nCount++) { - szDrives[nCount] = toupper(szDrives[nCount]); - } - - findFILESET *fileset = ff->fileset; - if (fileset) { - int i; - dlistString *node; - - for (i=0; iinclude_list.size(); i++) { - findINCEXE *incexe = (findINCEXE *)fileset->include_list.get(i); - - /* look through all files and check */ - foreach_dlist(node, &incexe->name_list) { - char *fname = node->c_str(); - /* fname should match x:/ */ - if (strlen(fname) >= 2 && B_ISALPHA(fname[0]) - && fname[1] == ':') { - - /* always add in uppercase */ - char ch = toupper(fname[0]); - /* if not found in string, add drive letter */ - if (!strchr(szDrives,ch)) { - szDrives[nCount] = ch; - szDrives[nCount+1] = 0; - nCount++; - } - } - } - } - } + int nCount = 0; return nCount; } @@ -168,7 +117,7 @@ get_win32_driveletters(FF_PKT *ff, char* szDrives) */ int find_files(JCR *jcr, FF_PKT *ff, int file_save(JCR *jcr, FF_PKT *ff_pkt, bool top_level), - int plugin_save(JCR *jcr, FF_PKT *ff_pkt, bool top_level)) + int plugin_save(JCR *jcr, FF_PKT *ff_pkt, bool top_level)) { ff->file_save = file_save; ff->plugin_save = plugin_save; @@ -217,7 +166,7 @@ find_files(JCR *jcr, FF_PKT *ff, int file_save(JCR *jcr, FF_PKT *ff_pkt, bool to bstrncpy(ff->BaseJobOpts, fo->BaseJobOpts, sizeof(ff->BaseJobOpts)); } } - Dmsg4(50, "Verify=<%s> Accurate=<%s> BaseJob=<%s> flags=<%d>\n", + Dmsg4(50, "Verify=<%s> Accurate=<%s> BaseJob=<%s> flags=<%d>\n", ff->VerifyOpts, ff->AccurateOpts, ff->BaseJobOpts, ff->flags); dlistString *node; foreach_dlist(node, &incexe->name_list) { @@ -240,6 +189,14 @@ find_files(JCR *jcr, FF_PKT *ff, int file_save(JCR *jcr, FF_PKT *ff_pkt, bool to Dmsg1(dbglvl, "PluginCommand: %s\n", fname); ff->top_fname = fname; ff->cmd_plugin = true; + + /* Make sure that opt plugin is not set + * The current implementation doesn't allow option plugin + * and command plugin to run at the same time + */ + ff->opt_plugin = false; + ff->plugin = NULL; + plugin_save(jcr, ff, true); ff->cmd_plugin = false; if (job_canceled(jcr)) { @@ -253,7 +210,7 @@ find_files(JCR *jcr, FF_PKT *ff, int file_save(JCR *jcr, FF_PKT *ff_pkt, bool to /* * Test if the currently selected directory (in ff->fname) is - * explicitly in the Include list or explicitly in the Exclude + * explicitly in the Include list or explicitly in the Exclude * list. */ bool is_in_fileset(FF_PKT *ff) diff --git a/bacula/src/findlib/find.h b/bacula/src/findlib/find.h index 8d6be394b2..188245ee3c 100644 --- a/bacula/src/findlib/find.h +++ b/bacula/src/findlib/find.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2001-2010 Free Software Foundation Europe e.V. + Copyright (C) 2001-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * File types as returned by find_files() diff --git a/bacula/src/findlib/find_one.c b/bacula/src/findlib/find_one.c index d8549944c8..b87a57108f 100644 --- a/bacula/src/findlib/find_one.c +++ b/bacula/src/findlib/find_one.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2010 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* @@ -87,7 +75,7 @@ static inline int LINKHASH(const struct stat &info) /* * Create a new directory Find File packet, but copy * some of the essential info from the current packet. - * However, be careful to zero out the rest of the + * However, be careful to zero out the rest of the * packet. */ static FF_PKT *new_dir_ff_pkt(FF_PKT *ff_pkt) @@ -244,7 +232,7 @@ bool has_file_changed(JCR *jcr, FF_PKT *ff_pkt) if (lstat(ff_pkt->fname, &statp) != 0) { berrno be; - Jmsg(jcr, M_WARNING, 0, + Jmsg(jcr, M_WARNING, 0, _("Cannot stat file %s: ERR=%s\n"),ff_pkt->fname,be.bstrerror()); return true; } @@ -262,20 +250,12 @@ bool has_file_changed(JCR *jcr, FF_PKT *ff_pkt) (int64_t)ff_pkt->statp.st_ctime, (int64_t)statp.st_ctime); return true; } - - if (statp.st_size != ff_pkt->statp.st_size) { - /* TODO: add size change */ - Jmsg(jcr, M_ERROR, 0, _("%s size changed during backup.\n"),ff_pkt->fname); - Dmsg3(50, "%s size (%lld) changed during backup (%lld).\n", ff_pkt->fname, - (int64_t)ff_pkt->statp.st_size, (int64_t)statp.st_size); - return true; - } - if ((statp.st_blksize != ff_pkt->statp.st_blksize) || - (statp.st_blocks != ff_pkt->statp.st_blocks)) { - Jmsg(jcr, M_ERROR, 0, _("%s size changed during backup.\n"),ff_pkt->fname); + if ((int64_t)statp.st_size != (int64_t)ff_pkt->statp.st_size) { + Jmsg(jcr, M_ERROR, 0, _("%s size of %lld changed during backup to %lld.n"),ff_pkt->fname, + (int64_t)ff_pkt->statp.st_size, (int64_t)statp.st_size); Dmsg3(50, "%s size (%lld) changed during backup (%lld).\n", ff_pkt->fname, - (int64_t)ff_pkt->statp.st_blocks, (int64_t)statp.st_blocks); + (int64_t)ff_pkt->statp.st_size, (int64_t)statp.st_size); return true; } @@ -288,7 +268,7 @@ bool has_file_changed(JCR *jcr, FF_PKT *ff_pkt) */ bool check_changes(JCR *jcr, FF_PKT *ff_pkt) { - /* in special mode (like accurate backup), the programmer can + /* in special mode (like accurate backup), the programmer can * choose his comparison function. */ if (ff_pkt->check_fct) { @@ -301,10 +281,10 @@ bool check_changes(JCR *jcr, FF_PKT *ff_pkt) if (ff_pkt->incremental && (ff_pkt->statp.st_mtime < ff_pkt->save_time && ((ff_pkt->flags & FO_MTIMEONLY) || - ff_pkt->statp.st_ctime < ff_pkt->save_time))) + ff_pkt->statp.st_ctime < ff_pkt->save_time))) { return false; - } + } return true; } @@ -319,7 +299,7 @@ static bool have_ignoredir(FF_PKT *ff_pkt) return false; } ignoredir = ff_pkt->fileset->incexe->ignoredir; - + if (ignoredir) { if (!ff_pkt->ignoredir_fname) { ff_pkt->ignoredir_fname = get_pool_memory(PM_FNAME); @@ -329,12 +309,12 @@ static bool have_ignoredir(FF_PKT *ff_pkt) Dmsg2(100, "Directory '%s' ignored (found %s)\n", ff_pkt->fname, ignoredir); return true; /* Just ignore this directory */ - } + } } return false; } -/* +/* * When the current file is a hardlink, the backup code can compute * the checksum and store it into the link_t structure. */ @@ -359,7 +339,7 @@ ff_pkt_set_link_digest(FF_PKT *ff_pkt, * descending into a directory. */ int -find_one_file(JCR *jcr, FF_PKT *ff_pkt, +find_one_file(JCR *jcr, FF_PKT *ff_pkt, int handle_file(JCR *jcr, FF_PKT *ff, bool top_level), char *fname, dev_t parent_device, bool top_level) { @@ -435,8 +415,8 @@ find_one_file(JCR *jcr, FF_PKT *ff_pkt, * since our last "save_time", presumably the last Full save * or Incremental. */ - if ( !S_ISDIR(ff_pkt->statp.st_mode) - && !check_changes(jcr, ff_pkt)) + if ( !S_ISDIR(ff_pkt->statp.st_mode) + && !check_changes(jcr, ff_pkt)) { Dmsg1(500, "Non-directory incremental: %s\n", ff_pkt->fname); ff_pkt->type = FT_NOCHG; @@ -458,6 +438,7 @@ find_one_file(JCR *jcr, FF_PKT *ff_pkt, ff_pkt->ff_errno = errno; return handle_file(jcr, ff_pkt, top_level); } + return -1; /* ignore */ } #endif @@ -501,7 +482,7 @@ find_one_file(JCR *jcr, FF_PKT *ff_pkt, ff_pkt->digest_stream = lp->digest_stream; ff_pkt->digest_len = lp->digest_len; rtn_stat = handle_file(jcr, ff_pkt, top_level); - Dmsg3(400, "FT_LNKSAVED FI=%d LinkFI=%d file=%s\n", + Dmsg3(400, "FT_LNKSAVED FI=%d LinkFI=%d file=%s\n", ff_pkt->FileIndex, lp->FileIndex, lp->name); return rtn_stat; } @@ -542,11 +523,11 @@ find_one_file(JCR *jcr, FF_PKT *ff_pkt, if (ff_pkt->linked) { ff_pkt->linked->FileIndex = ff_pkt->FileIndex; } - Dmsg3(400, "FT_REG FI=%d linked=%d file=%s\n", ff_pkt->FileIndex, + Dmsg3(400, "FT_REG FI=%d linked=%d file=%s\n", ff_pkt->FileIndex, ff_pkt->linked ? 1 : 0, fname); if (ff_pkt->flags & FO_KEEPATIME) { utime(fname, &restore_times); - } + } return rtn_stat; @@ -613,32 +594,8 @@ find_one_file(JCR *jcr, FF_PKT *ff_pkt, } /* * We have set st_rdev to 1 if it is a reparse point, otherwise 0, - * if st_rdev is 2, it is a mount point + * if st_rdev is 2, it is a mount point */ -#if defined(HAVE_WIN32) - /* - * A reparse point (WIN32_REPARSE_POINT) - * is something special like one of the following: - * IO_REPARSE_TAG_DFS 0x8000000A - * IO_REPARSE_TAG_DFSR 0x80000012 - * IO_REPARSE_TAG_HSM 0xC0000004 - * IO_REPARSE_TAG_HSM2 0x80000006 - * IO_REPARSE_TAG_SIS 0x80000007 - * IO_REPARSE_TAG_SYMLINK 0xA000000C - * - * A junction point is a: - * IO_REPARSE_TAG_MOUNT_POINT 0xA0000003 - * which can be either a link to a Volume (WIN32_MOUNT_POINT) - * or a link to a directory (WIN32_JUNCTION_POINT) - * - * Ignore WIN32_REPARSE_POINT and WIN32_JUNCTION_POINT - */ - if (ff_pkt->statp.st_rdev == WIN32_REPARSE_POINT) { - ff_pkt->type = FT_REPARSE; - } else if (ff_pkt->statp.st_rdev == WIN32_JUNCTION_POINT) { - ff_pkt->type = FT_JUNCTION; - } -#endif /* * Note, we return the directory to the calling program (handle_file) * when we first see the directory (FT_DIRBEGIN. @@ -677,15 +634,10 @@ find_one_file(JCR *jcr, FF_PKT *ff_pkt, * to cross, or we may be restricted by a list of permitted * file systems. */ - bool is_win32_mount_point = false; -#if defined(HAVE_WIN32) - is_win32_mount_point = ff_pkt->statp.st_rdev == WIN32_MOUNT_POINT; -#endif if (!top_level && ff_pkt->flags & FO_NO_RECURSION) { ff_pkt->type = FT_NORECURSE; recurse = false; - } else if (!top_level && (parent_device != ff_pkt->statp.st_dev || - is_win32_mount_point)) { + } else if (!top_level && (parent_device != ff_pkt->statp.st_dev)) { if(!(ff_pkt->flags & FO_MULTIFS)) { ff_pkt->type = FT_NOFSCHG; recurse = false; @@ -833,7 +785,7 @@ int term_find_one(FF_PKT *ff) int count = 0; int i; - + if (ff->linkhash == NULL) return 0; for (i =0 ; i < LINK_HASHTABLE_SIZE; i ++) { diff --git a/bacula/src/findlib/fstype.c b/bacula/src/findlib/fstype.c index 4765f9415b..82d2b91dde 100644 --- a/bacula/src/findlib/fstype.c +++ b/bacula/src/findlib/fstype.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2004-2007 Free Software Foundation Europe e.V. + Copyright (C) 2004-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Implement routines to determine file system types. diff --git a/bacula/src/findlib/makepath.c b/bacula/src/findlib/makepath.c new file mode 100644 index 0000000000..511c62848a --- /dev/null +++ b/bacula/src/findlib/makepath.c @@ -0,0 +1,344 @@ +/* + Bacula® - The Network Backup Solution + + Copyright (C) 2007-2014 Free Software Foundation Europe e.V. + + The main author of Bacula is Kern Sibbald, with contributions from + many others, a complete list can be found in the file AUTHORS. + This program is Free Software; you can redistribute it and/or + modify it under the terms of version three of the GNU Affero General Public + License as published by the Free Software Foundation and included + in the file LICENSE. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. + + Bacula® is a registered trademark of Kern Sibbald. + The licensor of Bacula is the Free Software Foundation Europe + (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, + Switzerland, email:ftf@fsfeurope.org. +*/ + +/* + * Kern Sibbald, September MMVII + * + * This is tricky code, especially when writing from scratch. Fortunately, + * a non-copyrighted version of mkdir was available to consult. + */ +#include "bacula.h" +#include "jcr.h" + +#define dbglvl 50 + +/* + * For old systems that don't have lchown() or lchmod() + */ +#ifndef HAVE_LCHOWN +#define lchown chown +#endif +#ifndef HAVE_LCHMOD +#define lchmod chmod +#endif + + +typedef struct PrivateCurDir { + hlink link; + char fname[1]; +} CurDir; + +/* Initialize the path hash table */ +static bool path_list_init(JCR *jcr) +{ + CurDir *elt = NULL; + jcr->path_list = (htable *)malloc(sizeof(htable)); + + /* Hard to know in advance how many directories will + * be stored in this hash + */ + jcr->path_list->init(elt, &elt->link, 10000); + return true; +} + +/* Add a path to the hash when we create a directory + * with the replace=NEVER option + */ +bool path_list_add(JCR *jcr, uint32_t len, char *fname) +{ + bool ret = true; + CurDir *item; + + if (!jcr->path_list) { + path_list_init(jcr); + } + + /* we store CurDir, fname in the same chunk */ + item = (CurDir *)jcr->path_list->hash_malloc(sizeof(CurDir)+len+1); + + memset(item, 0, sizeof(CurDir)); + memcpy(item->fname, fname, len+1); + + jcr->path_list->insert(item->fname, item); + + Dmsg1(dbglvl, "add fname=<%s>\n", fname); + return ret; +} + +void free_path_list(JCR *jcr) +{ + if (jcr->path_list) { + jcr->path_list->destroy(); + free(jcr->path_list); + jcr->path_list = NULL; + } +} + +bool path_list_lookup(JCR *jcr, char *fname) +{ + bool found=false; + char bkp; + + if (!jcr->path_list) { + return false; + } + + /* Strip trailing / */ + int len = strlen(fname); + if (len == 0) { + return false; + } + len--; + bkp = fname[len]; + if (fname[len] == '/') { /* strip any trailing slash */ + fname[len] = 0; + } + + CurDir *temp = (CurDir *)jcr->path_list->lookup(fname); + if (temp) { + found=true; + } + + Dmsg2(dbglvl, "lookup <%s> %s\n", fname, found?"ok":"not ok"); + + fname[len] = bkp; /* restore last / */ + return found; +} + +static bool makedir(JCR *jcr, char *path, mode_t mode, int *created) +{ + struct stat statp; + + if (mkdir(path, mode) != 0) { + berrno be; + *created = false; + if (lstat(path, &statp) != 0) { + Jmsg2(jcr, M_ERROR, 0, _("Cannot create directory %s: ERR=%s\n"), + path, be.bstrerror()); + return false; + } else if (!S_ISDIR(statp.st_mode)) { + Jmsg1(jcr, M_ERROR, 0, _("%s exists but is not a directory.\n"), path); + return false; + } + return true; /* directory exists */ + } + if (S_ISLNK(statp.st_mode)) { + /* + * Note, we created a directory, not a link, so if we find a + * link, there is a security problem here. + */ + Jmsg1(jcr, M_FATAL, 0, _("Security problem!! We created directory %s, but it is a link.\n"), + path); + return false; + } + + if (jcr->keep_path_list) { + /* When replace=NEVER, we keep track of all directories newly created */ + path_list_add(jcr, strlen(path), path); + } + + *created = true; + return true; +} + +/* + * Restore the owner and permissions (mode) of a Directory. + * See attribs.c for the equivalent for files. + */ +static void set_own_mod(ATTR *attr, char *path, uid_t owner, gid_t group, mode_t mode) +{ + if (lchown(path, owner, group) != 0 && attr->uid == 0 +#ifdef AFS + && errno != EPERM +#endif + ) { + berrno be; + Jmsg2(attr->jcr, M_WARNING, 0, _("Cannot change owner and/or group of %s: ERR=%s\n"), + path, be.bstrerror()); + } + if (lchmod(path, mode) != 0 && attr->uid == 0) { + berrno be; + Jmsg2(attr->jcr, M_WARNING, 0, _("Cannot change permissions of %s: ERR=%s\n"), + path, be.bstrerror()); + } +} + +/* + * mode is the mode bits to use in creating a new directory + * + * parent_mode are the parent's modes if we need to create parent + * directories. + * + * owner and group are to set on any created dirs + * + * keep_dir_modes if set means don't change mode bits if dir exists + */ +bool makepath(ATTR *attr, const char *apath, mode_t mode, mode_t parent_mode, + uid_t owner, gid_t group, int keep_dir_modes) +{ + struct stat statp; + mode_t omask, tmode; + char *path = (char *)apath; + char *p; + int len; + bool ok = false; + int created; + char new_dir[5000]; + int ndir = 0; + int i = 0; + int max_dirs = (int)sizeof(new_dir); + JCR *jcr = attr->jcr; + + if (stat(path, &statp) == 0) { /* Does dir exist? */ + if (!S_ISDIR(statp.st_mode)) { + Jmsg1(jcr, M_ERROR, 0, _("%s exists but is not a directory.\n"), path); + return false; + } + /* Full path exists */ + if (keep_dir_modes) { + return true; + } + set_own_mod(attr, path, owner, group, mode); + return true; + } + omask = umask(0); + umask(omask); + len = strlen(apath); + path = (char *)alloca(len+1); + bstrncpy(path, apath, len+1); + strip_trailing_slashes(path); + /* + * Now for one of the complexities. If we are not running as root, + * then if the parent_mode does not have wx user perms, or we are + * setting the userid or group, and the parent_mode has setuid, setgid, + * or sticky bits, we must create the dir with open permissions, then + * go back and patch all the dirs up with the correct perms. + * Solution, set everything to 0777, then go back and reset them at the + * end. + */ + tmode = 0777; + +#if defined(HAVE_WIN32) + /* Validate drive letter */ + if (path[1] == ':') { + char drive[4] = "X:\\"; + + drive[0] = path[0]; + + UINT drive_type = GetDriveType(drive); + + if (drive_type == DRIVE_UNKNOWN || drive_type == DRIVE_NO_ROOT_DIR) { + Jmsg1(jcr, M_ERROR, 0, _("%c: is not a valid drive.\n"), path[0]); + goto bail_out; + } + + if (path[2] == '\0') { /* attempt to create a drive */ + ok = true; + goto bail_out; /* OK, it is already there */ + } + + p = &path[3]; + } else { + p = path; + } +#else + p = path; +#endif + + /* Skip leading slash(es) */ + while (IsPathSeparator(*p)) { + p++; + } + while ((p = first_path_separator(p))) { + char save_p; + save_p = *p; + *p = 0; + if (!makedir(jcr, path, tmode, &created)) { + goto bail_out; + } + if (ndir < max_dirs) { + new_dir[ndir++] = created; + } + *p = save_p; + while (IsPathSeparator(*p)) { + p++; + } + } + /* Create final component */ + if (!makedir(jcr, path, tmode, &created)) { + goto bail_out; + } + if (ndir < max_dirs) { + new_dir[ndir++] = created; + } + if (ndir >= max_dirs) { + Jmsg0(jcr, M_WARNING, 0, _("Too many subdirectories. Some permissions not reset.\n")); + } + + /* Now set the proper owner and modes */ +#if defined(HAVE_WIN32) + + /* Don't propagate the hidden or encrypted attributes to parent directories */ + parent_mode &= ~S_ISVTX; + parent_mode &= ~S_ISGID; + + if (path[1] == ':') { + p = &path[3]; + } else { + p = path; + } +#else + p = path; +#endif + /* Skip leading slash(es) */ + while (IsPathSeparator(*p)) { + p++; + } + while ((p = first_path_separator(p))) { + char save_p; + save_p = *p; + *p = 0; + if (i < ndir && new_dir[i++] && !keep_dir_modes) { + set_own_mod(attr, path, owner, group, parent_mode); + } + *p = save_p; + while (IsPathSeparator(*p)) { + p++; + } + } + + /* Set for final component */ + if (i < ndir && new_dir[i++]) { + set_own_mod(attr, path, owner, group, mode); + } + + ok = true; +bail_out: + umask(omask); + return ok; +} diff --git a/bacula/src/findlib/match.c b/bacula/src/findlib/match.c index beffad50bc..ba85de6fc8 100644 --- a/bacula/src/findlib/match.c +++ b/bacula/src/findlib/match.c @@ -1,39 +1,27 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2008 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* - * Old style + * Old style * * Routines used to keep and match include and exclude * filename/pathname patterns. * * Note, this file is used for the old style include and * excludes, so is deprecated. The new style code is - * found in find.c. + * found in find.c. * This code is still used for lists in testls and bextract. * * Kern E. Sibbald, December MMI @@ -236,14 +224,6 @@ void add_fname_to_include_list(FF_PKT *ff, int prefixed, const char *fname) break; } } -#if defined(HAVE_WIN32) - /* Convert any \'s into /'s */ - for (p=inc->fname; *p; p++) { - if (*p == '\\') { - *p = '/'; - } - } -#endif inc->next = NULL; /* Chain this one on the end of the list */ if (!ff->included_files_list) { @@ -256,7 +236,7 @@ void add_fname_to_include_list(FF_PKT *ff, int prefixed, const char *fname) { } next->next = inc; } - Dmsg4(100, "add_fname_to_include prefix=%d compres=%d alg= %d fname=%s\n", + Dmsg4(100, "add_fname_to_include prefix=%d compres=%d alg= %d fname=%s\n", prefixed, !!(inc->options & FO_COMPRESS), inc->algo, inc->fname); } @@ -283,14 +263,6 @@ void add_fname_to_exclude_list(FF_PKT *ff, const char *fname) exc->next = *list; exc->len = len; strcpy(exc->fname, fname); -#if defined(HAVE_WIN32) - /* Convert any \'s into /'s */ - for (char *p=exc->fname; *p; p++) { - if (*p == '\\') { - *p = '/'; - } - } -#endif *list = exc; } @@ -387,16 +359,6 @@ int file_is_excluded(FF_PKT *ff, const char *file) { const char *p; -#if defined(HAVE_WIN32) - /* - * ***NB*** this removes the drive from the exclude - * rule. Why????? - */ - if (file[1] == ':') { - file += 2; - } -#endif - if (file_in_excluded_list(ff->excluded_paths_list, file)) { return 1; } diff --git a/bacula/src/findlib/mkpath.c b/bacula/src/findlib/mkpath.c deleted file mode 100644 index 985fdd84b0..0000000000 --- a/bacula/src/findlib/mkpath.c +++ /dev/null @@ -1,326 +0,0 @@ -/* - Bacula® - The Network Backup Solution - - Copyright (C) 2007-2011 Free Software Foundation Europe e.V. - - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. - - Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. -*/ - -/* - * Kern Sibbald, September MMVII - * - * This is tricky code, especially when writing from scratch. Fortunately, - * a non-copyrighted version of mkdir was available to consult. - * - * ***FIXME*** the mkpath code could be significantly optimized by - * walking up the path chain from the bottom until it either gets - * to the top or finds an existing directory then walk back down - * creating the path components. Currently, it always starts at - * the top, which can be rather inefficient for long path names. - * - */ -#include "bacula.h" -#include "jcr.h" - -#define dbglvl 50 - -typedef struct PrivateCurDir { - hlink link; - char fname[1]; -} CurDir; - -/* Initialize the path hash table */ -static bool path_list_init(JCR *jcr) -{ - CurDir *elt = NULL; - jcr->path_list = (htable *)malloc(sizeof(htable)); - - /* Hard to know in advance how many directories will - * be stored in this hash - */ - jcr->path_list->init(elt, &elt->link, 10000); - return true; -} - -/* Add a path to the hash when we create a directory - * with the replace=NEVER option - */ -bool path_list_add(JCR *jcr, uint32_t len, char *fname) -{ - bool ret = true; - CurDir *item; - - if (!jcr->path_list) { - path_list_init(jcr); - } - - /* we store CurDir, fname in the same chunk */ - item = (CurDir *)jcr->path_list->hash_malloc(sizeof(CurDir)+len+1); - - memset(item, 0, sizeof(CurDir)); - memcpy(item->fname, fname, len+1); - - jcr->path_list->insert(item->fname, item); - - Dmsg1(dbglvl, "add fname=<%s>\n", fname); - return ret; -} - -void free_path_list(JCR *jcr) -{ - if (jcr->path_list) { - jcr->path_list->destroy(); - free(jcr->path_list); - jcr->path_list = NULL; - } -} - -bool path_list_lookup(JCR *jcr, char *fname) -{ - bool found=false; - char bkp; - - if (!jcr->path_list) { - return false; - } - - /* Strip trailing / */ - int len = strlen(fname); - if (len == 0) { - return false; - } - len--; - bkp = fname[len]; - if (fname[len] == '/') { /* strip any trailing slash */ - fname[len] = 0; - } - - CurDir *temp = (CurDir *)jcr->path_list->lookup(fname); - if (temp) { - found=true; - } - - Dmsg2(dbglvl, "lookup <%s> %s\n", fname, found?"ok":"not ok"); - - fname[len] = bkp; /* restore last / */ - return found; -} - -static bool makedir(JCR *jcr, char *path, mode_t mode, int *created) -{ - struct stat statp; - - if (mkdir(path, mode) != 0) { - berrno be; - *created = false; - if (stat(path, &statp) != 0) { - Jmsg2(jcr, M_ERROR, 0, _("Cannot create directory %s: ERR=%s\n"), - path, be.bstrerror()); - return false; - } else if (!S_ISDIR(statp.st_mode)) { - Jmsg1(jcr, M_ERROR, 0, _("%s exists but is not a directory.\n"), path); - return false; - } - return true; /* directory exists */ - } - - if (jcr->keep_path_list) { - /* When replace=NEVER, we keep track of all directories newly created */ - path_list_add(jcr, strlen(path), path); - } - - *created = true; - return true; -} - -static void set_own_mod(ATTR *attr, char *path, uid_t owner, gid_t group, mode_t mode) -{ - if (chown(path, owner, group) != 0 && attr->uid == 0 -#ifdef AFS - && errno != EPERM -#endif - ) { - berrno be; - Jmsg2(attr->jcr, M_WARNING, 0, _("Cannot change owner and/or group of %s: ERR=%s\n"), - path, be.bstrerror()); - } - if (chmod(path, mode) != 0 && attr->uid == 0) { - berrno be; - Jmsg2(attr->jcr, M_WARNING, 0, _("Cannot change permissions of %s: ERR=%s\n"), - path, be.bstrerror()); - } -} - -/* - * mode is the mode bits to use in creating a new directory - * - * parent_mode are the parent's modes if we need to create parent - * directories. - * - * owner and group are to set on any created dirs - * - * keep_dir_modes if set means don't change mode bits if dir exists - */ -bool makepath(ATTR *attr, const char *apath, mode_t mode, mode_t parent_mode, - uid_t owner, gid_t group, int keep_dir_modes) -{ - struct stat statp; - mode_t omask, tmode; - char *path = (char *)apath; - char *p; - int len; - bool ok = false; - int created; - char new_dir[5000]; - int ndir = 0; - int i = 0; - int max_dirs = (int)sizeof(new_dir); - JCR *jcr = attr->jcr; - - if (stat(path, &statp) == 0) { /* Does dir exist? */ - if (!S_ISDIR(statp.st_mode)) { - Jmsg1(jcr, M_ERROR, 0, _("%s exists but is not a directory.\n"), path); - return false; - } - /* Full path exists */ - if (keep_dir_modes) { - return true; - } - set_own_mod(attr, path, owner, group, mode); - return true; - } - omask = umask(0); - umask(omask); - len = strlen(apath); - path = (char *)alloca(len+1); - bstrncpy(path, apath, len+1); - strip_trailing_slashes(path); - /* - * Now for one of the complexities. If we are not running as root, - * then if the parent_mode does not have wx user perms, or we are - * setting the userid or group, and the parent_mode has setuid, setgid, - * or sticky bits, we must create the dir with open permissions, then - * go back and patch all the dirs up with the correct perms. - * Solution, set everything to 0777, then go back and reset them at the - * end. - */ - tmode = 0777; - -#if defined(HAVE_WIN32) - /* Validate drive letter */ - if (path[1] == ':') { - char drive[4] = "X:\\"; - - drive[0] = path[0]; - - UINT drive_type = GetDriveType(drive); - - if (drive_type == DRIVE_UNKNOWN || drive_type == DRIVE_NO_ROOT_DIR) { - Jmsg1(jcr, M_ERROR, 0, _("%c: is not a valid drive.\n"), path[0]); - goto bail_out; - } - - if (path[2] == '\0') { /* attempt to create a drive */ - ok = true; - goto bail_out; /* OK, it is already there */ - } - - p = &path[3]; - } else { - p = path; - } -#else - p = path; -#endif - - /* Skip leading slash(es) */ - while (IsPathSeparator(*p)) { - p++; - } - while ((p = first_path_separator(p))) { - char save_p; - save_p = *p; - *p = 0; - if (!makedir(jcr, path, tmode, &created)) { - goto bail_out; - } - if (ndir < max_dirs) { - new_dir[ndir++] = created; - } - *p = save_p; - while (IsPathSeparator(*p)) { - p++; - } - } - /* Create final component */ - if (!makedir(jcr, path, tmode, &created)) { - goto bail_out; - } - if (ndir < max_dirs) { - new_dir[ndir++] = created; - } - if (ndir >= max_dirs) { - Jmsg0(jcr, M_WARNING, 0, _("Too many subdirectories. Some permissions not reset.\n")); - } - - /* Now set the proper owner and modes */ -#if defined(HAVE_WIN32) - - /* Don't propagate the hidden attribute to parent directories */ - parent_mode &= ~S_ISVTX; - - if (path[1] == ':') { - p = &path[3]; - } else { - p = path; - } -#else - p = path; -#endif - /* Skip leading slash(es) */ - while (IsPathSeparator(*p)) { - p++; - } - while ((p = first_path_separator(p))) { - char save_p; - save_p = *p; - *p = 0; - if (i < ndir && new_dir[i++] && !keep_dir_modes) { - set_own_mod(attr, path, owner, group, parent_mode); - } - *p = save_p; - while (IsPathSeparator(*p)) { - p++; - } - } - - /* Set for final component */ - if (i < ndir && new_dir[i++]) { - set_own_mod(attr, path, owner, group, mode); - } - - ok = true; -bail_out: - umask(omask); - return ok; -} diff --git a/bacula/src/findlib/priv.c b/bacula/src/findlib/priv.c new file mode 100644 index 0000000000..0bd0495aa4 --- /dev/null +++ b/bacula/src/findlib/priv.c @@ -0,0 +1,47 @@ +/* + Bacula® - The Network Backup Solution + + Copyright (C) 2003-2014 Free Software Foundation Europe e.V. + + The main author of Bacula is Kern Sibbald, with contributions from + many others, a complete list can be found in the file AUTHORS. + This program is Free Software; you can redistribute it and/or + modify it under the terms of version three of the GNU Affero General Public + License as published by the Free Software Foundation and included + in the file LICENSE. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. + + Bacula® is a registered trademark of Kern Sibbald. + The licensor of Bacula is the Free Software Foundation Europe + (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, + Switzerland, email:ftf@fsfeurope.org. +*/ +/* + * Enable backup privileges for Win32 systems. + * + * Kern Sibbald, May MMIII + * + */ + +#include "bacula.h" +#include "jcr.h" + + +/*=============================================================*/ +/* */ +/* * * * U n i x * * * * */ +/* */ +/*=============================================================*/ + +int enable_backup_privileges(JCR *jcr, int ignore_errors) + { return 0; } + diff --git a/bacula/src/findlib/protos.h b/bacula/src/findlib/protos.h index 5b218b3ca3..caf331c5b9 100644 --- a/bacula/src/findlib/protos.h +++ b/bacula/src/findlib/protos.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2011 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Prototypes for finlib directory of Bacula @@ -64,13 +52,13 @@ struct s_included_file *get_next_included_file(FF_PKT *ff, struct s_included_file *inc); /* From find_one.c */ -int find_one_file(JCR *jcr, FF_PKT *ff, +int find_one_file(JCR *jcr, FF_PKT *ff, int handle_file(JCR *jcr, FF_PKT *ff_pkt, bool top_level), char *p, dev_t parent_device, bool top_level); int term_find_one(FF_PKT *ff); bool has_file_changed(JCR *jcr, FF_PKT *ff_pkt); bool check_changes(JCR *jcr, FF_PKT *ff_pkt); -void ff_pkt_set_link_digest(FF_PKT *ff_pkt, +void ff_pkt_set_link_digest(FF_PKT *ff_pkt, int32_t digest_stream, const char *digest, uint32_t len); /* From get_priv.c */ diff --git a/bacula/src/findlib/savecwd.c b/bacula/src/findlib/savecwd.c deleted file mode 100644 index c09766a790..0000000000 --- a/bacula/src/findlib/savecwd.c +++ /dev/null @@ -1,129 +0,0 @@ -/* - Bacula® - The Network Backup Solution - - Copyright (C) 2007-2010 Free Software Foundation Europe e.V. - - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. - - Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. -*/ - -/* - * Kern Sibbald, August MMVII - * - */ - -#include "bacula.h" -#include "savecwd.h" - -/* - * Attempt to save the current working directory by various means so that - * we can optimize code by doing a cwd and then restore the cwd. - */ - -#ifdef HAVE_FCHDIR -static bool fchdir_failed = false; /* set if we get a fchdir failure */ -#else -static bool fchdir_failed = true; /* set if we get a fchdir failure */ -#endif - -/* - * Save current working directory. - * Returns: true if OK - * false if failed - */ -bool saveCWD::save(JCR *jcr) -{ - release(); /* clean up */ - if (!fchdir_failed) { - m_fd = open(".", O_RDONLY); - if (m_fd < 0) { - berrno be; - Jmsg1(jcr, M_ERROR, 0, _("Cannot open current directory: ERR=%s\n"), be.bstrerror()); - m_saved = false; - return false; - } - } - - if (fchdir_failed) { - POOLMEM *buf = get_memory(5000); - m_cwd = (POOLMEM *)getcwd(buf, sizeof_pool_memory(buf)); - if (m_cwd == NULL) { - berrno be; - Jmsg1(jcr, M_ERROR, 0, _("Cannot get current directory: ERR=%s\n"), be.bstrerror()); - free_pool_memory(buf); - m_saved = false; - return false; - } - } - m_saved = true; - return true; -} - -/* - * Restore previous working directory. - * Returns: true if OK - * false if failed - */ -bool saveCWD::restore(JCR *jcr) -{ - if (!m_saved) { - return true; - } - m_saved = false; - if (m_fd >= 0) { - if (fchdir(m_fd) != 0) { - berrno be; - Jmsg1(jcr, M_ERROR, 0, _("Cannot reset current directory: ERR=%s\n"), be.bstrerror()); - close(m_fd); - m_fd = -1; - fchdir_failed = true; - chdir("/"); /* punt */ - return false; - } - return true; - } - if (chdir(m_cwd) < 0) { - berrno be; - Jmsg1(jcr, M_ERROR, 0, _("Cannot reset current directory: ERR=%s\n"), be.bstrerror()); - chdir("/"); - free_pool_memory(m_cwd); - m_cwd = NULL; - return false; - } - return true; -} - -void saveCWD::release() -{ - if (!m_saved) { - return; - } - m_saved = false; - if (m_fd >= 0) { - close(m_fd); - m_fd = -1; - } - if (m_cwd) { - free_pool_memory(m_cwd); - m_cwd = NULL; - } -} diff --git a/bacula/src/findlib/savecwd.h b/bacula/src/findlib/savecwd.h deleted file mode 100644 index bdd5032311..0000000000 --- a/bacula/src/findlib/savecwd.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - Bacula® - The Network Backup Solution - - Copyright (C) 2007-2010 Free Software Foundation Europe e.V. - - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. - - Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. -*/ - -/* - * Kern Sibbald, August MMVII - * - */ - -#ifndef _SAVECWD_H -#define _SAVECWD_H 1 - -class saveCWD { - bool m_saved; /* set if we should do chdir i.e. save_cwd worked */ - int m_fd; /* fd of current dir before chdir */ - char *m_cwd; /* cwd before chdir if fd fchdir() works */ - -public: - saveCWD() { m_saved=false; m_fd=-1; m_cwd=NULL; }; - ~saveCWD() { release(); }; - bool save(JCR *jcr); - bool restore(JCR *jcr); - void release(); - bool is_saved() { return m_saved; }; -}; - -#endif /* _SAVECWD_H */ diff --git a/bacula/src/findlib/testresults.txt b/bacula/src/findlib/testresults.txt deleted file mode 100644 index 16e7900a62..0000000000 --- a/bacula/src/findlib/testresults.txt +++ /dev/null @@ -1,44 +0,0 @@ -Ovni (Win2000 c:/) testfind results: -Err: Could not stat /PAGEFILE.SYS: Permission denied -Total files : 68155 -Max file length: 69 -Max path length: 132 -Files truncated: 0 -Paths truncated: 0 - -Minou (WinNT c:/ d:/) testfind results: -Err: Could not stat c:/pagefile.sys: Permission denied -Err: Could not stat d:/pagefile.sys: Permission denied -Total files : 33112 -Max file length: 91 -Max path length: 85 -Files truncated: 0 -Paths truncated: 0 - -Minimatou (Win98 c:/) testfind results: -Total files : 87276 -Max file length: 140 -Max path length: 107 -Files truncated: 0 -Paths truncated: 0 - -moby (Solaris) testfind results: -Total files : 248263 -Max file length: 82 -Max path length: 114 -Files truncated: 0 -Paths truncated: 0 - -polymatou (Linux) testfind results: -Total files : 207176 -Max file length: 82 -Max path length: 105 -Files truncated: 0 -Paths truncated: 0 - -rufus (Linux) testfind results: -Total files : 170280 -Max file length: 84 -Max path length: 121 -Files truncated: 0 -Paths truncated: 0 diff --git a/bacula/src/gcc-Wall b/bacula/src/gcc-Wall deleted file mode 100755 index 9c5ccc137c..0000000000 --- a/bacula/src/gcc-Wall +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/sh -# gcc -Wall plus other important warnings not included in -Wall - -for arg -do - case $arg in - -O*) Wuninitialized=-Wuninitialized;; # only makes sense with `-O' - esac -done - -exec gcc \ - -Wall $Wuninitialized \ - -Wwrite-strings \ - -Wcast-qual \ - -Wbad-function-cast \ - -Wpointer-arith \ - -Wstrict-prototypes \ - -Wmissing-prototypes \ - -Wmissing-declarations \ - -Wnested-externs \ - -Wtraditional \ - -Wconversion \ - -Wcomment \ - -Wcast-align \ - -Winline \ - -Wshadow \ - -Wredundant-decls \ - -Wid-clash-31 \ - "$@" - -# -Wall implies: -# -Wimplicit -# -Wreturn-type -# -Wunused -# -Wswitch -# -Wformat -# -Wchar-subscripts -# -Wparentheses -# -Wmissing-braces ------------------------------------------------------------------------------- diff --git a/bacula/src/host.h.in b/bacula/src/host.h.in index 3fdbb05f69..801e945c3d 100644 --- a/bacula/src/host.h.in +++ b/bacula/src/host.h.in @@ -3,27 +3,15 @@ Copyright (C) 2000-2010 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Define Host machine diff --git a/bacula/src/jcr.h b/bacula/src/jcr.h index 0ff93ab0c3..5ffc1421a0 100644 --- a/bacula/src/jcr.h +++ b/bacula/src/jcr.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2012 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Bacula JCR Structure definition for Daemons and the Library @@ -31,8 +19,7 @@ * to all daemons and used by the library routines, and a * daemon specific part that is enabled with #defines. * - * Kern Sibbald, Nov MM - * + * Written by Kern Sibbald, Nov MM */ @@ -75,7 +62,6 @@ #define JS_Differences 'D' /* Verify differences */ #define JS_ErrorTerminated 'E' /* Job terminated in error */ #define JS_WaitFD 'F' /* waiting on File daemon */ -#define JS_Incomplete 'I' /* Incomplete Job */ #define JS_DataCommitting 'L' /* Committing data (last despool) */ #define JS_WaitMount 'M' /* waiting for Mount */ #define JS_Running 'R' /* running */ @@ -95,7 +81,7 @@ #define JS_WaitPriority 'p' /* Waiting for higher priority jobs to finish */ #define JS_WaitDevice 'q' /* Queued waiting for device */ #define JS_WaitStoreRes 's' /* Waiting for storage resource */ -#define JS_WaitStartTime 't' /* Waiting for start time */ +#define JS_WaitStartTime 't' /* Waiting for start time */ /* Migration selection types */ @@ -140,8 +126,8 @@ enum { #define endeach_jcr(jcr) jcr_walk_end(jcr) -#define SD_APPEND 1 -#define SD_READ 0 +#define SD_APPEND true +#define SD_READ false /* Forward referenced structures */ class JCR; @@ -193,7 +179,6 @@ public: void destroy_mutex(void) {pthread_mutex_destroy(&mutex); }; bool is_job_canceled() {return job_canceled(this); }; bool is_canceled() {return job_canceled(this); }; - bool is_incomplete() { return JobStatus == JS_Incomplete; }; bool is_JobLevel(int32_t JobLevel) { return JobLevel == m_JobLevel; }; bool is_JobType(int32_t JobType) { return JobType == m_JobType; }; bool is_JobStatus(int32_t aJobStatus) { return aJobStatus == JobStatus; }; @@ -205,8 +190,7 @@ public: int32_t getJobLevel() const { return m_JobLevel; }; int32_t getJobStatus() const { return JobStatus; }; bool no_client_used() const { - return (m_JobType == JT_MIGRATE || m_JobType == JT_COPY || - m_JobLevel == L_VIRTUAL_FULL); + return (m_JobLevel == L_VIRTUAL_FULL); }; const char *get_OperationName(); /* in lib/jcr.c */ const char *get_ActionName(bool past); /* in lib/jcr.c */ @@ -244,11 +228,12 @@ public: uint32_t LastRate; /* Last sample bytes/sec */ uint64_t JobBytes; /* Number of bytes processed this job */ uint64_t LastJobBytes; /* Last sample number bytes */ - uint64_t ReadBytes; /* Bytes read -- before compression */ + uint64_t ReadBytes; /* Bytes read */ FileId_t FileId; /* Last FileId used */ volatile int32_t JobStatus; /* ready, running, blocked, terminated */ int32_t JobPriority; /* Job priority */ time_t sched_time; /* job schedule time, i.e. when it should start */ + time_t initial_sched_time; /* original sched time before any reschedules are done */ time_t start_time; /* when job actually started */ time_t run_time; /* used for computing speed */ time_t last_time; /* Last sample time */ @@ -280,6 +265,7 @@ public: bool HasBase; /* True if job use base jobs */ bool rerunning; /* rerunning an incomplete job */ bool job_started; /* Set when the job is actually started */ + bool sd_calls_client; /* Set for SD to call client (FD/SD) */ void *Python_job; /* Python Job Object */ void *Python_events; /* Python Events Object */ @@ -312,12 +298,14 @@ public: BSOCK *ua; /* User agent */ JOB *job; /* Job resource */ JOB *verify_job; /* Job resource of verify previous job */ + alist *plugin_config; /* List of ConfigFile needed for restore */ alist *rstorage; /* Read storage possibilities */ STORE *rstore; /* Selected read storage */ alist *wstorage; /* Write storage possibilities */ STORE *wstore; /* Selected write storage */ CLIENT *client; /* Client resource */ POOL *pool; /* Pool resource = write for migration */ + POOL *next_pool; /* Next pool override */ POOL *rpool; /* Read pool. Used only in migration */ POOL *full_pool; /* Full backup pool resource */ POOL *inc_pool; /* Incremental backup pool resource */ @@ -333,14 +321,13 @@ public: uint32_t ExpectedFiles; /* Expected restore files */ uint32_t MediaId; /* DB record IDs associated with this job */ uint32_t FileIndex; /* Last FileIndex processed */ - utime_t MaxRunSchedTime; /* max run time in seconds from Scheduled time*/ + utime_t MaxRunSchedTime; /* max run time in seconds from Initial Scheduled time */ POOLMEM *fname; /* name to put into catalog */ - POOLMEM *component_fname; /* Component info file name */ - FILE *component_fd; /* Component info file desc */ + POOLMEM *media_type; /* Set if user supplied Storage */ JOB_DBR jr; /* Job DB record for current job */ JOB_DBR previous_jr; /* previous job database record */ JOB *previous_job; /* Job resource of migration previous job */ - JCR *mig_jcr; /* JCR for migration/copy job */ + JCR *wjcr; /* JCR for migration/copy write job */ char FSCreateTime[MAX_TIME_LENGTH]; /* FileSet CreateTime as returned from DB */ char since[MAX_TIME_LENGTH]; /* since time */ char PrevJob[MAX_NAME_LENGTH]; /* Previous job name assiciated with since time */ @@ -350,6 +337,7 @@ public: }; POOLMEM *client_uname; /* client uname */ POOLMEM *pool_source; /* Where pool came from */ + POOLMEM *next_pool_source; /* Where next pool came from */ POOLMEM *rpool_source; /* Where migrate read pool came from */ POOLMEM *rstore_source; /* Where read storage came from */ POOLMEM *wstore_source; /* Where write storage came from */ @@ -358,6 +346,7 @@ public: int32_t NumVols; /* Number of Volume used in pool */ int32_t reschedule_count; /* Number of times rescheduled */ int32_t FDVersion; /* File daemon version number */ + int32_t SDVersion; /* Storage daemon version number */ int64_t spool_size; /* Spool size for this job */ volatile bool sd_msg_thread_done; /* Set when Storage message thread done */ bool wasVirtualFull; /* set if job was VirtualFull */ @@ -377,11 +366,14 @@ public: bool keep_sd_auth_key; /* Clear or not the SD auth key after connection*/ bool use_accurate_chksum; /* Use or not checksum option in accurate code */ bool run_pool_override; + bool run_next_pool_override; /* Next pool is overridden */ bool run_full_pool_override; bool run_inc_pool_override; bool run_diff_pool_override; bool sd_canceled; /* set if SD canceled */ bool RescheduleIncompleteJobs; /* set if incomplete can be rescheduled */ + bool use_all_JobIds; /* Use all jobids present in command line */ + bool sd_client; /* This job runs as SD client */ #endif /* DIRECTOR_DAEMON */ @@ -390,10 +382,13 @@ public: uint32_t num_files_examined; /* files examined this job */ POOLMEM *last_fname; /* last file saved/verified */ POOLMEM *job_metadata; /* VSS job metadata */ + pthread_cond_t job_start_wait; /* Wait for SD to start Job */ acl_data_t *acl_data; /* ACLs for backup/restore */ xattr_data_t *xattr_data; /* Extended Attributes for backup/restore */ int32_t last_type; /* type of last file saved/verified */ int incremental; /* set if incremental for SINCE */ + time_t last_stat_time; /* Last time stats sent to Dir */ + time_t stat_interval; /* Stats send interval */ utime_t mtime; /* begin time for SINCE */ int listing; /* job listing in estimate */ long Ticket; /* Ticket */ @@ -440,11 +435,16 @@ public: POOLMEM *job_name; /* base Job name (not unique) */ POOLMEM *fileset_name; /* FileSet */ POOLMEM *fileset_md5; /* MD5 for FileSet */ + char stored_addr[MAX_NAME_LENGTH]; /* storage daemon address */ + char client_addr[MAX_NAME_LENGTH]; /* client daemon address */ VOL_LIST *VolList; /* list to read */ int32_t NumWriteVolumes; /* number of volumes written */ int32_t NumReadVolumes; /* total number of volumes to read */ int32_t CurReadVolume; /* current read volume number */ int32_t label_errors; /* count of label errors */ + int32_t DIRVersion; /* Director version number */ + int32_t FDVersion; /* File daemon version number */ + int32_t SDVersion; /* Storage daemon version number */ bool session_opened; long Ticket; /* ticket for this job */ bool ignore_label_errors; /* ignore Volume label errors */ @@ -454,13 +454,14 @@ public: bool spool_data; /* set to spool data */ int32_t CurVol; /* Current Volume count */ DIRRES* director; /* Director resource */ - alist *write_store; /* list of write storage devices sent by DIR */ + alist *write_store; /* list of write storage devices sent by DIR */ alist *read_store; /* list of read devices sent by DIR */ alist *reserve_msgs; /* reserve fail messages */ bool write_part_after_job; /* Set to write part after job */ bool PreferMountedVols; /* Prefer mounted vols rather than new */ bool Resched; /* Job may be rescheduled */ bool bscan_insert_jobmedia_records; /*Bscan: needs to insert job media records */ + bool sd_client; /* Set if acting as client */ /* Parmaters for Open Read Session */ BSR *bsr; /* Bootstrap record -- has everything */ @@ -484,7 +485,7 @@ public: /* * Setting a NULL in tsd doesn't clear the tsd but instead tells - * pthreads not to call the tsd destructor. Consequently, we + * pthreads not to call the tsd destructor. Consequently, we * define this *invalid* jcr address and stuff it in the tsd * when the jcr is not valid. */ diff --git a/bacula/src/lib/Makefile.in b/bacula/src/lib/Makefile.in index 009f15742c..e29e906948 100644 --- a/bacula/src/lib/Makefile.in +++ b/bacula/src/lib/Makefile.in @@ -8,7 +8,6 @@ LIBBACCFG_LT_RELEASE = @LIBBACCFG_LT_RELEASE@ LIBBACPY_LT_RELEASE = @LIBBACPY_LT_RELEASE@ # -python = @PYTHON_INCDIR@ srcdir = . VPATH = . @@ -43,7 +42,7 @@ INCLUDE_FILES = ../baconfig.h ../bacula.h ../bc_types.h \ smartall.h status.h tls.h tree.h var.h \ waitq.h watchdog.h workq.h \ parse_conf.h ini.h \ - pythonlib.h lockmgr.h devlock.h + lockmgr.h devlock.h # # libbac @@ -73,7 +72,7 @@ LIBBACCFG_LOBJS = $(LIBBACCFG_SRCS:.c=.lo) # # libbacpy (python functions) # -LIBBACPY_SRCS = pythonlib.c +LIBBACPY_SRCS = LIBBACPY_OBJS = $(LIBBACPY_SRCS:.c=.o) LIBBACPY_LOBJS = $(LIBBACPY_SRCS:.c=.lo) @@ -84,29 +83,22 @@ LIBBACPY_LOBJS = $(LIBBACPY_SRCS:.c=.lo) # inference rules .c.o: @echo "Compiling $<" - $(NO_ECHO)$(CXX) $(DEFS) $(DEBUG) -c $(WCFLAGS) $(CPPFLAGS) $(PYTHON_INC) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) $< + $(NO_ECHO)$(CXX) $(DEFS) $(DEBUG) -c $(WCFLAGS) $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) $< .c.lo: @echo "Compiling $<" - $(NO_ECHO)$(LIBTOOL_COMPILE) $(CXX) $(DEFS) $(DEBUG) -c $(WCFLAGS) $(CPPFLAGS) $(PYTHON_INC) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) $< + $(NO_ECHO)$(LIBTOOL_COMPILE) $(CXX) $(DEFS) $(DEBUG) -c $(WCFLAGS) $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) $< .cc.o: @echo "Compiling $<" - $(NO_ECHO)$(CXX) $(DEFS) $(DEBUG) -c $(WCFLAGS) $(CPPFLAGS) $(PYTHON_INC) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) $< + $(NO_ECHO)$(CXX) $(DEFS) $(DEBUG) -c $(WCFLAGS) $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) $< .cc.lo: @echo "Compiling $<" - $(NO_ECHO)$(LIBTOOL_COMPILE) $(CXX) $(DEFS) $(DEBUG) -c $(WCFLAGS) $(CPPFLAGS) $(PYTHON_INC) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) $< + $(NO_ECHO)$(LIBTOOL_COMPILE) $(CXX) $(DEFS) $(DEBUG) -c $(WCFLAGS) $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) $< # specific build rules -pythonlib.o: pythonlib.c - @echo "Compiling $<" - $(NO_ECHO)$(CXX) $(DEFS) $(DEBUG) -c $(WCFLAGS) $(CPPFLAGS) $(python) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) $< - -pythonlib.lo: pythonlib.c - @echo "Compiling $<" - $(NO_ECHO)$(LIBTOOL_COMPILE) $(CXX) $(DEFS) $(DEBUG) -c $(WCFLAGS) $(CPPFLAGS) $(python) -I../configlib -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) $< #------------------------------------------------------------------------- all: Makefile libbac$(DEFAULT_ARCHIVE_TYPE) libbaccfg$(DEFAULT_ARCHIVE_TYPE) libbacpy$(DEFAULT_ARCHIVE_TYPE) @@ -138,7 +130,7 @@ libbacpy.a: $(LIBBACPY_OBJS) libbacpy.la: Makefile $(LIBBACPY_LOBJS) @echo "Making $@ ..." - $(LIBTOOL_LINK) $(CXX) $(DEFS) $(DEBUG) $(LDFLAGS) -o $@ $(LIBBACPY_LOBJS) -export-dynamic -rpath $(libdir) -release $(LIBBACPY_LT_RELEASE) $(PYTHON_LIBS) $(OPENSSL_LIBS) $(LIBS) + $(LIBTOOL_LINK) $(CXX) $(DEFS) $(DEBUG) $(LDFLAGS) -o $@ $(LIBBACPY_LOBJS) -export-dynamic -rpath $(libdir) -release $(LIBBACPY_LT_RELEASE) $(OPENSSL_LIBS) $(LIBS) Makefile: $(srcdir)/Makefile.in $(topdir)/config.status cd $(topdir) \ @@ -269,7 +261,7 @@ depend: @$(SED) "/^# DO NOT DELETE:/,$$ d" Makefile.bak > Makefile @$(ECHO) "# DO NOT DELETE: nice dependency list follows" >> Makefile @for src in $(LIBBAC_SRCS) $(LIBBACCFG_SRCS) $(LIBBACPY_SRCS); do \ - $(CXX) -S -M -MT `basename $$src .c`$(DEFAULT_OBJECT_TYPE) $(CPPFLAGS) $(XINC) $(PYTHON_INC) -I$(srcdir) -I$(basedir) $$src >> Makefile; \ + $(CXX) -S -M -MT `basename $$src .c`$(DEFAULT_OBJECT_TYPE) $(CPPFLAGS) $(XINC) -I$(srcdir) -I$(basedir) $$src >> Makefile; \ done @if test -f Makefile ; then \ $(RMF) Makefile.bak; \ diff --git a/bacula/src/lib/address_conf.c b/bacula/src/lib/address_conf.c index 871443e76d..c5ef4cac1e 100644 --- a/bacula/src/lib/address_conf.c +++ b/bacula/src/lib/address_conf.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2004-2011 Free Software Foundation Europe e.V. + Copyright (C) 2004-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Configuration file parser for IP-Addresse ipv4 and ipv6 @@ -132,6 +120,12 @@ int IPADDR::get_family() const return saddr->sa_family; } +/* + * Note, this returns the address of the socket structure + * not the address of the socket address. + * This socket address is a union of the different types + * of sockets (IPv4, ...) available, so it is portable. + */ struct sockaddr *IPADDR::get_sockaddr() { return saddr; @@ -151,7 +145,7 @@ void IPADDR::copy_addr(IPADDR *src) saddr4->sin_addr.s_addr = src->saddr4->sin_addr.s_addr; } #ifdef HAVE_IPV6 - else { + else if (saddr->sa_family == AF_INET6) { saddr6->sin6_addr = src->saddr6->sin6_addr; } #endif @@ -163,8 +157,8 @@ void IPADDR::set_addr_any() saddr4->sin_addr.s_addr = INADDR_ANY; } #ifdef HAVE_IPV6 - else { - saddr6->sin6_addr= in6addr_any; + else if (saddr->sa_family == AF_INET6) { + saddr6->sin6_addr = in6addr_any; } #endif } @@ -172,7 +166,7 @@ void IPADDR::set_addr_any() void IPADDR::set_addr4(struct in_addr *ip4) { if (saddr->sa_family != AF_INET) { - Emsg1(M_ERROR_TERM, 0, _("It was tried to assign a ipv6 address to a ipv4(%d)\n"), saddr->sa_family); + Emsg1(M_ERROR_TERM, 0, _("You tried to assign a ipv6 address to an ipv4(%d)\n"), saddr->sa_family); } saddr4->sin_addr = *ip4; } @@ -181,7 +175,7 @@ void IPADDR::set_addr4(struct in_addr *ip4) void IPADDR::set_addr6(struct in6_addr *ip6) { if (saddr->sa_family != AF_INET6) { - Emsg1(M_ERROR_TERM, 0, _("It was tried to assign a ipv4 address to a ipv6(%d)\n"), saddr->sa_family); + Emsg1(M_ERROR_TERM, 0, _("You tried to assign an ipv4 address to an ipv6(%d)\n"), saddr->sa_family); } saddr6->sin6_addr = *ip6; } @@ -207,9 +201,13 @@ const char *IPADDR::get_address(char *outputbuf, int outlen) const char *IPADDR::build_address_str(char *buf, int blen) { char tmp[1024]; - bsnprintf(buf, blen, "host[%s:%s:%hu] ", - get_family() == AF_INET ? "ipv4" : "ipv6", - get_address(tmp, sizeof(tmp) - 1), get_port_host_order()); + if (get_family() == AF_INET) { + bsnprintf(buf, blen, "%s:%hu ", + get_address(tmp, sizeof(tmp) - 1), get_port_host_order()); + } else { + bsnprintf(buf, blen, "[%s]:%hu ", + get_address(tmp, sizeof(tmp) - 1), get_port_host_order()); + } return buf; } @@ -255,13 +253,15 @@ int get_first_port_host_order(dlist *addrs) } } -void init_default_addresses(dlist **out, int port) +void init_default_addresses(dlist **addr_list, int port) { char buf[1024]; unsigned short sport = port; - if (!add_address(out, IPADDR::R_DEFAULT, htons(sport), AF_INET, 0, 0, buf, sizeof(buf))) { - Emsg1(M_ERROR_TERM, 0, _("Can't add default address (%s)\n"), buf); + if (!add_address(addr_list, IPADDR::R_DEFAULT, htons(sport), AF_INET, 0, 0, buf, sizeof(buf))) { + Emsg1(M_ERROR_TERM, 0, _("Can't add default IPv4 address (%s)\n"), buf); } + Dmsg1(20, "Initaddr %s\n", build_addresses_str(*addr_list, buf, sizeof(buf))); + } static int add_address(dlist **out, IPADDR::i_type type, unsigned short defaultport, int family, @@ -280,8 +280,8 @@ static int add_address(dlist **out, IPADDR::i_type type, unsigned short defaultp addrs = *out = New(dlist(tmp, &tmp->link)); } - type = (type == IPADDR::R_SINGLE_PORT - || type == IPADDR::R_SINGLE_ADDR) ? IPADDR::R_SINGLE : type; + type = (type == IPADDR::R_SINGLE_PORT || + type == IPADDR::R_SINGLE_ADDR) ? IPADDR::R_SINGLE : type; if (type != IPADDR::R_DEFAULT) { IPADDR *def = 0; foreach_dlist(iaddr, addrs) { @@ -289,7 +289,8 @@ static int add_address(dlist **out, IPADDR::i_type type, unsigned short defaultp def = iaddr; } else if (iaddr->get_type() != type) { bsnprintf(buf, buflen, - _("the old style addresses cannot be mixed with new style")); + _("Old style addresses cannot be mixed with new style. Try removing Port=nnn.")); + Dmsg1(20, "%s\n", buf); return 0; } } @@ -310,7 +311,8 @@ static int add_address(dlist **out, IPADDR::i_type type, unsigned short defaultp if (s) { port = s->s_port; } else { - bsnprintf(buf, buflen, _("can't resolve service(%s)"), port_str); + bsnprintf(buf, buflen, _("Cannot resolve service(%s)"), port_str); + Dmsg1(20, "%s\n", buf); return 0; } } @@ -319,8 +321,9 @@ static int add_address(dlist **out, IPADDR::i_type type, unsigned short defaultp const char *myerrstr; hostaddrs = bnet_host2ipaddrs(hostname_str, family, &myerrstr); if (!hostaddrs) { - bsnprintf(buf, buflen, _("can't resolve hostname(%s) %s"), hostname_str, + bsnprintf(buf, buflen, _("Cannot resolve hostname(%s) %s"), hostname_str, myerrstr); + Dmsg1(20, "%s\n", buf); return 0; } @@ -347,7 +350,7 @@ static int add_address(dlist **out, IPADDR::i_type type, unsigned short defaultp /* for duplicates */ foreach_dlist(jaddr, addrs) { if (iaddr->get_sockaddr_len() == jaddr->get_sockaddr_len() && - !memcmp(iaddr->get_sockaddr(), jaddr->get_sockaddr(), + !memcmp(iaddr->get_sockaddr(), jaddr->get_sockaddr(), iaddr->get_sockaddr_len())) { goto skip; /* no price */ @@ -366,6 +369,22 @@ static int add_address(dlist **out, IPADDR::i_type type, unsigned short defaultp } /* + * Some IPv6 rules from Wikipedia: + * + * For convenience, an IPv6 address may be abbreviated to shorter + * notations by application of the following rules, where possible. + * + * 1. One or more leading zeroes from any groups of hexadecimal + * digits are removed; this is usually done to either all or none of + * the leading zeroes. For example, the group 0042 is converted to + * 42. + * + * 2. Consecutive sections of zeroes are replaced with a double + * colon (::). The double colon may only be used once in an + * address, as multiple use would render the address indeterminate. + * RFC 5952 recommends that a double colon must not be used to + * denote an omitted single section of zeroes.[39] + * * my tests * positiv * = { ip = { addr = 1.2.3.4; port = 1205; } ipv4 = { addr = 1.2.3.4; port = http; } } @@ -389,8 +408,9 @@ static int add_address(dlist **out, IPADDR::i_type type, unsigned short defaultp * } * ip = { * addr = bluedot.thun.net - ( } + * } * } + * * negativ * = { ip = { } } * = { ipv4 { addr = doof.nowaytoheavenxyz.uhu; } } @@ -409,7 +429,7 @@ void store_addresses(LEX * lc, RES_ITEM * item, int index, int pass) token = lex_get_token(lc, T_SKIP_EOL); if (token != T_BOB) { - scan_err1(lc, _("Expected a block begin { , got: %s"), lc->str); + scan_err1(lc, _("Expected a block to begin with { but got: %s"), lc->str); } token = lex_get_token(lc, T_SKIP_EOL); @@ -418,36 +438,38 @@ void store_addresses(LEX * lc, RES_ITEM * item, int index, int pass) } do { if (!(token == T_UNQUOTED_STRING || token == T_IDENTIFIER)) { - scan_err1(lc, _("Expected a string, got: %s"), lc->str); + scan_err1(lc, _("Expected a string but got: %s"), lc->str); } - if (strcasecmp("ip", lc->str) == 0 || strcasecmp("ipv4", lc->str) == 0) { + if (strcasecmp("ip", lc->str) == 0) { + family = AF_INET6; + } else if (strcasecmp("ipv4", lc->str) == 0) { family = AF_INET; } #ifdef HAVE_IPV6 else if (strcasecmp("ipv6", lc->str) == 0) { family = AF_INET6; } else { - scan_err1(lc, _("Expected a string [ip|ipv4|ipv6], got: %s"), lc->str); + scan_err1(lc, _("Expected a string [ip|ipv4|ipv6] but got: %s"), lc->str); } #else else { - scan_err1(lc, _("Expected a string [ip|ipv4], got: %s"), lc->str); + scan_err1(lc, _("Expected a string [ip|ipv4] but got: %s"), lc->str); } #endif token = lex_get_token(lc, T_SKIP_EOL); if (token != T_EQUALS) { - scan_err1(lc, _("Expected a equal =, got: %s"), lc->str); + scan_err1(lc, _("Expected an equal = but got: %s"), lc->str); } token = lex_get_token(lc, T_SKIP_EOL); if (token != T_BOB) { - scan_err1(lc, _("Expected a block begin { , got: %s"), lc->str); + scan_err1(lc, _("Expected a block to begin with { but got: %s"), lc->str); } token = lex_get_token(lc, T_SKIP_EOL); exist = EMPTYLINE; port_str[0] = hostname_str[0] = '\0'; do { if (token != T_IDENTIFIER) { - scan_err1(lc, _("Expected a identifier [addr|port], got: %s"), lc->str); + scan_err1(lc, _("Expected an identifier [addr|port] but got: %s"), lc->str); } if (strcasecmp("port", lc->str) == 0) { next_line = PORTLINE; @@ -462,7 +484,7 @@ void store_addresses(LEX * lc, RES_ITEM * item, int index, int pass) } exist |= ADDRLINE; } else { - scan_err1(lc, _("Expected a identifier [addr|port], got: %s"), lc->str); + scan_err1(lc, _("Expected a identifier [addr|port] but got: %s"), lc->str); } token = lex_get_token(lc, T_SKIP_EOL); if (token != T_EQUALS) { @@ -472,15 +494,15 @@ void store_addresses(LEX * lc, RES_ITEM * item, int index, int pass) switch (next_line) { case PORTLINE: if (! - (token == T_UNQUOTED_STRING || token == T_NUMBER - || token == T_IDENTIFIER)) { - scan_err1(lc, _("Expected a number or a string, got: %s"), lc->str); + (token == T_UNQUOTED_STRING || token == T_NUMBER || + token == T_IDENTIFIER)) { + scan_err1(lc, _("Expected a number or a string but got: %s"), lc->str); } bstrncpy(port_str, lc->str, sizeof(port_str)); break; case ADDRLINE: if (!(token == T_UNQUOTED_STRING || token == T_IDENTIFIER)) { - scan_err1(lc, _("Expected an IP number or a hostname, got: %s"), + scan_err1(lc, _("Expected an IP number or a hostname but got: %s"), lc->str); } bstrncpy(hostname_str, lc->str, sizeof(hostname_str)); @@ -492,19 +514,19 @@ void store_addresses(LEX * lc, RES_ITEM * item, int index, int pass) token = lex_get_token(lc, T_SKIP_EOL); } while (token == T_IDENTIFIER); if (token != T_EOB) { - scan_err1(lc, _("Expected a end of block }, got: %s"), lc->str); + scan_err1(lc, _("Expected a end of block with } but got: %s"), lc->str); } if (pass == 1 && !add_address((dlist **)(item->value), IPADDR::R_MULTIPLE, - htons(item->default_value), family, hostname_str, port_str, + htons(item->default_value), family, hostname_str, port_str, errmsg, sizeof(errmsg))) { - scan_err3(lc, _("Can't add hostname(%s) and port(%s) to addrlist (%s)"), + scan_err3(lc, _("Cannot add hostname(%s) and port(%s) to addrlist (%s)"), hostname_str, port_str, errmsg); - } + } token = scan_to_next_not_eol(lc); } while ((token == T_IDENTIFIER || token == T_UNQUOTED_STRING)); if (token != T_EOB) { - scan_err1(lc, _("Expected a end of block }, got: %s"), lc->str); + scan_err1(lc, _("Expected an end of block with } but got: %s"), lc->str); } } @@ -516,9 +538,9 @@ void store_addresses_address(LEX * lc, RES_ITEM * item, int index, int pass) scan_err1(lc, _("Expected an IP number or a hostname, got: %s"), lc->str); } if (pass == 1 && !add_address((dlist **)(item->value), IPADDR::R_SINGLE_ADDR, - htons(item->default_value), AF_INET, lc->str, 0, + htons(item->default_value), AF_INET, lc->str, 0, errmsg, sizeof(errmsg))) { - scan_err2(lc, _("can't add port (%s) to (%s)"), lc->str, errmsg); + scan_err2(lc, _("Cannot add port (%s) to (%s)"), lc->str, errmsg); } } @@ -530,9 +552,9 @@ void store_addresses_port(LEX * lc, RES_ITEM * item, int index, int pass) scan_err1(lc, _("Expected a port number or string, got: %s"), lc->str); } if (pass == 1 && !add_address((dlist **)(item->value), IPADDR::R_SINGLE_PORT, - htons(item->default_value), AF_INET, 0, lc->str, + htons(item->default_value), AF_INET, 0, lc->str, errmsg, sizeof(errmsg))) { - scan_err2(lc, _("can't add port (%s) to (%s)"), lc->str, errmsg); + scan_err2(lc, _("Cannot add port (%s) to (%s)"), lc->str, errmsg); } } @@ -573,25 +595,72 @@ int sockaddr_get_port(const struct sockaddr *client_addr) } -char *sockaddr_to_ascii(const struct sockaddr *sa, char *buf, int len) +char *sockaddr_to_ascii(const struct sockaddr *sa, int socklen, char *buf, int buflen) { +#ifdef HAVE_GETNAMEINFO + /* This is the more modern way of doing it */ + char clienthost[NI_MAXHOST]; + char clientservice[NI_MAXSERV]; + int status; + status = getnameinfo(sa, socklen, clienthost, sizeof(clienthost), + clientservice, sizeof(clientservice), + NI_NUMERICHOST | NI_NUMERICSERV); + if (status == 0) { + /* Enclose IPv6 in [] */ + if (strchr(clienthost, ':') != NULL) { + bsnprintf(buf, buflen, "[%s]", clienthost); + } else { + bstrncpy(buf, clienthost, buflen); + } + } else { + bstrncpy(buf, "Hostname not found", buflen); + } + +#else #ifdef HAVE_INET_NTOP - /* MA Bug 5 the problem was that i mixed up sockaddr and in_addr */ inet_ntop(sa->sa_family, # ifdef HAVE_IPV6 - sa->sa_family == AF_INET ? + sa->sa_family == AF_INET ? (void*)&(((struct sockaddr_in*)sa)->sin_addr) : (void*)&(((struct sockaddr_in6*)sa)->sin6_addr), # else (void*)&(((struct sockaddr_in*)sa)->sin_addr), # endif /* HAVE_IPV6 */ - buf, len); + buf, buflen); #else - bstrncpy(buf, inet_ntoa(((struct sockaddr_in *)sa)->sin_addr), len); + bstrncpy(buf, inet_ntoa(((struct sockaddr_in *)sa)->sin_addr), buflen); +#endif #endif return buf; } +/* + * Remove duplicate IP addresses. + */ +void remove_duplicate_addresses(dlist *addr_list) +{ + IPADDR *ipaddr, *next, *duplicate; + /* + * Remove any duplicate addresses. + */ + for (ipaddr = (IPADDR *)addr_list->first(); ipaddr; + ipaddr = (IPADDR *)addr_list->next(ipaddr)) { + for (next = (IPADDR *)addr_list->next(ipaddr); next; ) { + duplicate = NULL; + if (ipaddr->get_sockaddr_len() == next->get_sockaddr_len() && + memcmp(ipaddr->get_sockaddr(), next->get_sockaddr(), + ipaddr->get_sockaddr_len()) == 0) { + duplicate = next; + } + next = (IPADDR *)addr_list->next(next); + if (duplicate) { + addr_list->remove(duplicate); /* remove from list */ + delete duplicate; /* free it */ + } + } + } +} + #ifdef HAVE_OLD_SOCKOPT int inet_aton(const char *cp, struct in_addr *inp) { diff --git a/bacula/src/lib/address_conf.h b/bacula/src/lib/address_conf.h index e161e73ee1..1035946cdd 100644 --- a/bacula/src/lib/address_conf.h +++ b/bacula/src/lib/address_conf.h @@ -1,35 +1,22 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2004-2007 Free Software Foundation Europe e.V. + Copyright (C) 2004-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * * Written by Meno Abels, June MMIV * - * Version $Id$ */ @@ -95,7 +82,7 @@ extern const char *build_addresses_str(dlist *addrs, char *buf, int blen); extern int sockaddr_get_port_net_order(const struct sockaddr *sa); extern int sockaddr_get_port(const struct sockaddr *sa); -extern char *sockaddr_to_ascii(const struct sockaddr *sa, char *buf, int len); +extern char *sockaddr_to_ascii(const struct sockaddr *sa, int socklen, char *buf, int buflen); #ifdef WIN32 #undef HAVE_OLD_SOCKOPT #endif diff --git a/bacula/src/lib/alist.c b/bacula/src/lib/alist.c index 6423058430..c569a04497 100644 --- a/bacula/src/lib/alist.c +++ b/bacula/src/lib/alist.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2003-2011 Free Software Foundation Europe e.V. + Copyright (C) 2003-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Bacula array list routines diff --git a/bacula/src/lib/alist.h b/bacula/src/lib/alist.h index d2f1d06fac..0f89ed350e 100644 --- a/bacula/src/lib/alist.h +++ b/bacula/src/lib/alist.h @@ -1,29 +1,17 @@ /* - Bacula(R) - The Network Backup Solution - - Copyright (C) 2003-2012 Free Software Foundation Europe e.V. - - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. - - Bacula(R) is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. + Bacula® - The Network Backup Solution + + Copyright (C) 2003-2014 Free Software Foundation Europe e.V. + + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. + + Bacula® is a registered trademark of Kern Sibbald. */ /* * Kern Sibbald, June MMIII @@ -77,9 +65,9 @@ class alist : public SMARTALLOC { bool own_items; void grow_list(void); public: - alist(int num = 1, bool own=true); + alist(int num = 10, bool own=true); ~alist(); - void init(int num = 1, bool own=true); + void init(int num = 10, bool own=true); void append(void *item); void prepend(void *item); void *remove(int index); diff --git a/bacula/src/lib/attr.c b/bacula/src/lib/attr.c index 2f37ef16a5..b6df46b8e2 100644 --- a/bacula/src/lib/attr.c +++ b/bacula/src/lib/attr.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2003-2011 Free Software Foundation Europe e.V. + Copyright (C) 2003-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * attr.c Unpack an Attribute record returned from the tape @@ -113,7 +101,7 @@ int unpack_attributes_record(JCR *jcr, int32_t stream, char *rec, int32_t reclen /* We have an object, so do a binary copy */ object_len = reclen + rec - p; attr->attrEx = check_pool_memory_size(attr->attrEx, object_len + 1); - memcpy(attr->attrEx, p, object_len); + memcpy(attr->attrEx, p, object_len); /* Add a EOS for those who attempt to print the object */ p = attr->attrEx + object_len; *p = 0; @@ -131,7 +119,7 @@ int unpack_attributes_record(JCR *jcr, int32_t stream, char *rec, int32_t reclen if (p - rec < reclen) { attr->delta_seq = str_to_int32(p); /* delta_seq */ } - } + } } Dmsg8(dbglvl, "unpack_attr FI=%d Type=%d fname=%s attr=%s lname=%s attrEx=%s datastr=%d delta_seq=%d\n", attr->file_index, attr->type, attr->fname, attr->attr, attr->lname, @@ -174,7 +162,7 @@ void build_attr_output_fnames(JCR *jcr, ATTR *attr) * */ - if (jcr->where_bregexp) { + if (jcr->where_bregexp) { char *ret; apply_bregexps(attr->fname, jcr->where_bregexp, &ret); pm_strcpy(attr->ofname, ret); @@ -192,7 +180,7 @@ void build_attr_output_fnames(JCR *jcr, ATTR *attr) pm_strcpy(attr->olname, attr->lname); } } - + } else if (jcr->where[0] == 0) { pm_strcpy(attr->ofname, attr->fname); pm_strcpy(attr->olname, attr->lname); @@ -236,8 +224,8 @@ void build_attr_output_fnames(JCR *jcr, ATTR *attr) #endif fn = attr->lname; /* take whole name */ /* Ensure where is terminated with a slash */ - if (add_link && - !IsPathSeparator(jcr->where[wherelen-1]) && + if (add_link && + !IsPathSeparator(jcr->where[wherelen-1]) && !IsPathSeparator(fn[0])) { pm_strcat(attr->olname, "/"); } @@ -266,7 +254,7 @@ void print_ls_output(JCR *jcr, ATTR *attr) if (attr->type == FT_DELETED) { /* TODO: change this to get last seen values */ bsnprintf(buf, sizeof(buf), - "---------- - - - - ---------- -------- %s\n", attr->ofname); + "---------- - - - - ---------- -------- %s\n", attr->ofname); Dmsg1(dbglvl, "%s", buf); Jmsg(jcr, M_RESTORED, 1, "%s", buf); return; @@ -278,7 +266,7 @@ void print_ls_output(JCR *jcr, ATTR *attr) guid = jcr->id_list; p = encode_mode(attr->statp.st_mode, buf); p += sprintf(p, " %2d ", (uint32_t)attr->statp.st_nlink); - p += sprintf(p, "%-8.8s %-8.8s", + p += sprintf(p, "%-8.8s %-8.8s", guid->uid_to_name(attr->statp.st_uid, en1, sizeof(en1)), guid->gid_to_name(attr->statp.st_gid, en2, sizeof(en2))); p += sprintf(p, "%12.12s ", edit_int64(attr->statp.st_size, ec1)); diff --git a/bacula/src/lib/attr.h b/bacula/src/lib/attr.h index aacdb35dae..495c1784f1 100644 --- a/bacula/src/lib/attr.h +++ b/bacula/src/lib/attr.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2003-2010 Free Software Foundation Europe e.V. + Copyright (C) 2003-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * attr.h Definition of attributes packet for unpacking from tape diff --git a/bacula/src/lib/base64.c b/bacula/src/lib/base64.c index 7975864ce0..0ffdeaea99 100644 --- a/bacula/src/lib/base64.c +++ b/bacula/src/lib/base64.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2007 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Generic base 64 input and output routines @@ -242,7 +230,7 @@ int base64_to_bin(char *dest, int dest_size, char *src, int srclen) *(bufout++) = (base64_map[bufin[2]] << 6 | base64_map[bufin[3]]); } *bufout = 0; - + return (bufout - (uint8_t *) dest); } diff --git a/bacula/src/lib/base64.h b/bacula/src/lib/base64.h index ae53cd86cf..a6fc1a5102 100644 --- a/bacula/src/lib/base64.h +++ b/bacula/src/lib/base64.h @@ -8,29 +8,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2006 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* Maximum size of len bytes after base64 encoding */ diff --git a/bacula/src/lib/berrno.c b/bacula/src/lib/berrno.c index 13ffb03125..a8973de038 100644 --- a/bacula/src/lib/berrno.c +++ b/bacula/src/lib/berrno.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2004-2011 Free Software Foundation Europe e.V. + Copyright (C) 2004-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Bacula errno handler @@ -33,7 +21,7 @@ * * See berrno.h for how to use berrno. * - * Kern Sibbald, July MMIV + * Written by Kern Sibbald, July MMIV * * */ @@ -50,7 +38,7 @@ const char *berrno::bstrerror() { *m_buf = 0; #ifdef HAVE_WIN32 - if (m_berrno & b_errno_win32) { + if (m_berrno & (b_errno_win32)) { format_win32_message(); return (const char *)m_buf; } diff --git a/bacula/src/lib/berrno.h b/bacula/src/lib/berrno.h index 731fbd7a6b..f524c285b2 100644 --- a/bacula/src/lib/berrno.h +++ b/bacula/src/lib/berrno.h @@ -1,34 +1,21 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2004-2009 Free Software Foundation Europe e.V. + Copyright (C) 2004-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* - * Version $Id$ * - * Kern Sibbald, July MMIV + * Written by Kern Sibbald, July MMIV * */ diff --git a/bacula/src/lib/bget_msg.c b/bacula/src/lib/bget_msg.c index 01873868e5..2a8a6a6cb9 100644 --- a/bacula/src/lib/bget_msg.c +++ b/bacula/src/lib/bget_msg.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2001-2011 Free Software Foundation Europe e.V. + Copyright (C) 2001-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Subroutines to receive network data and handle @@ -59,7 +47,7 @@ int bget_msg(BSOCK *sock) if (n >= 0) { /* normal return */ return n; } - if (is_bnet_stop(sock)) { /* error return */ + if (sock->is_stop()) { /* error return */ return n; } diff --git a/bacula/src/lib/binflate.c b/bacula/src/lib/binflate.c index de3e17191c..3e4cb2e91e 100644 --- a/bacula/src/lib/binflate.c +++ b/bacula/src/lib/binflate.c @@ -1,29 +1,17 @@ /* - Bacula® - The Network Backup Solution + Bacula® - The Network Backup Solution - Copyright (C) 2000-2011 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. - - Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf fsfeurope.org. + Bacula® is a registered trademark of Kern Sibbald. */ /* * Bacula zlib compression wrappers @@ -110,4 +98,3 @@ int Zinflate(char *in, int in_len, char *out, int &out_len) return 1; #endif } - diff --git a/bacula/src/lib/bits.h b/bacula/src/lib/bits.h index efebb06057..d961203b38 100644 --- a/bacula/src/lib/bits.h +++ b/bacula/src/lib/bits.h @@ -1,38 +1,25 @@ -/* Some elementary bit manipulations - * - * Kern Sibbald, MM - * - * NOTE: base 0 - * - * Version $Id$ - */ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2006 Free Software Foundation Europe e.V. - - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ +/* Some elementary bit manipulations + * + * Kern Sibbald, MM + * + * NOTE: base 0 + * + */ #ifndef __BITS_H_ #define __BITS_H_ diff --git a/bacula/src/lib/bnet.c b/bacula/src/lib/bnet.c index b6775230e0..91fd397096 100644 --- a/bacula/src/lib/bnet.c +++ b/bacula/src/lib/bnet.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2011 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Network Utility Routines @@ -35,6 +23,7 @@ * */ + #include "bacula.h" #include "jcr.h" #include @@ -62,6 +51,7 @@ static pthread_mutex_t ip_mutex = PTHREAD_MUTEX_INITIALIZER; * It is possible that the total bytes require in several * read requests */ + int32_t read_nbytes(BSOCK * bsock, char *ptr, int32_t nbytes) { int32_t nleft, nread; @@ -113,6 +103,9 @@ int32_t read_nbytes(BSOCK * bsock, char *ptr, int32_t nbytes) } nleft -= nread; ptr += nread; + if (bsock->use_bwlimit()) { + bsock->control_bwlimit(nread); + } } return nbytes - nleft; /* return >= 0 */ } @@ -131,8 +124,8 @@ int32_t write_nbytes(BSOCK * bsock, char *ptr, int32_t nbytes) if (nwritten != nbytes) { berrno be; bsock->b_errno = errno; - Qmsg1(bsock->jcr(), M_FATAL, 0, _("Attr spool write error. ERR=%s\n"), - be.bstrerror()); + Qmsg3(bsock->jcr(), M_FATAL, 0, _("Attr spool write error. wrote=%d wanted=%d bytes. ERR=%s\n"), + nbytes, nwritten, be.bstrerror()); Dmsg2(400, "nwritten=%d nbytes=%d.\n", nwritten, nbytes); errno = bsock->b_errno; return -1; @@ -196,73 +189,13 @@ int32_t write_nbytes(BSOCK * bsock, char *ptr, int32_t nbytes) } nleft -= nwritten; ptr += nwritten; + if (bsock->use_bwlimit()) { + bsock->control_bwlimit(nwritten); + } } return nbytes - nleft; } -/* - * Receive a message from the other end. Each message consists of - * two packets. The first is a header that contains the size - * of the data that follows in the second packet. - * Returns number of bytes read (may return zero) - * Returns -1 on signal (BNET_SIGNAL) - * Returns -2 on hard end of file (BNET_HARDEOF) - * Returns -3 on error (BNET_ERROR) - * - * Unfortunately, it is a bit complicated because we have these - * four return types: - * 1. Normal data - * 2. Signal including end of data stream - * 3. Hard end of file - * 4. Error - * Using is_bnet_stop() and is_bnet_error() you can figure this all out. - */ -int32_t bnet_recv(BSOCK * bsock) -{ - return bsock->recv(); -} - - -/* - * Return 1 if there are errors on this bsock or it is closed, - * i.e. stop communicating on this line. - */ -bool is_bnet_stop(BSOCK * bsock) -{ - return bsock->is_stop(); -} - -/* - * Return number of errors on socket - */ -int is_bnet_error(BSOCK * bsock) -{ - return bsock->is_error(); -} - -/* - * Call here after error during closing to suppress error - * messages which are due to the other end shutting down too. - */ -void bnet_suppress_error_messages(BSOCK * bsock, bool flag) -{ - bsock->m_suppress_error_msgs = flag; -} - -/* - * Send a message over the network. The send consists of - * two network packets. The first is sends a 32 bit integer containing - * the length of the data packet which follows. - * - * Returns: false on failure - * true on success - */ -bool bnet_send(BSOCK *bsock) -{ - return bsock->send(); -} - - /* * Establish a TLS connection -- server side * Returns: true on success @@ -273,7 +206,7 @@ bool bnet_tls_server(TLS_CONTEXT *ctx, BSOCK * bsock, alist *verify_list) { TLS_CONNECTION *tls; JCR *jcr = bsock->jcr(); - + tls = new_tls_connection(ctx, bsock->m_fd); if (!tls) { Qmsg0(bsock->jcr(), M_FATAL, 0, _("TLS connection initialization failed.\n")); @@ -310,7 +243,7 @@ err: * Returns: true on success * false on failure */ -bool bnet_tls_client(TLS_CONTEXT *ctx, BSOCK * bsock, alist *verify_list) +bool bnet_tls_client(TLS_CONTEXT *ctx, BSOCK *bsock, alist *verify_list) { TLS_CONNECTION *tls; JCR *jcr = bsock->jcr(); @@ -337,9 +270,11 @@ bool bnet_tls_client(TLS_CONTEXT *ctx, BSOCK * bsock, alist *verify_list) bsock->host()); goto err; } - } else { - if (!tls_postconnect_verify_host(jcr, tls, bsock->host())) { - Qmsg1(bsock->jcr(), M_FATAL, 0, _("TLS host certificate verification failed. Host name \"%s\" did not match presented certificate\n"), + } else if (!tls_postconnect_verify_host(jcr, tls, bsock->host())) { + /* If host is 127.0.0.1, try localhost */ + if (strcmp(bsock->host(), "127.0.0.1") != 0 || + !tls_postconnect_verify_host(jcr, tls, "localhost")) { + Qmsg1(bsock->jcr(), M_FATAL, 0, _("TLS host certificate verification failed. Host name \"%s\" did not match presented certificate\n"), bsock->host()); goto err; } @@ -368,27 +303,6 @@ bool bnet_tls_client(TLS_CONTEXT *ctx, BSOCK * bsock, alist *verify_list) #endif /* HAVE_TLS */ -/* - * Wait for a specified time for data to appear on - * the BSOCK connection. - * - * Returns: 1 if data available - * 0 if timeout - * -1 if error - */ -int bnet_wait_data(BSOCK * bsock, int sec) -{ - return bsock->wait_data(sec); -} - -/* - * As above, but returns on interrupt - */ -int bnet_wait_data_intr(BSOCK * bsock, int sec) -{ - return bsock->wait_data_intr(sec); -} - #ifndef NETDB_INTERNAL #define NETDB_INTERNAL -1 /* See errno. */ #endif @@ -465,7 +379,9 @@ const char *resolv_host(int family, const char *host, dlist *addr_list) freeaddrinfo(ai); return NULL; } + #else + /* * Get human readable error for gethostbyname() */ @@ -498,12 +414,14 @@ static const char *gethost_strerror() return msg; } -static const char *resolv_host(int family, const char *host, dlist *addr_list) +/* + * Note: this is the old way of resolving a host + * that does not use the new getaddrinfo() above. + */ +static const char *resolv_host(int family, const char *host, dlist * addr_list) { struct hostent *hp; const char *errmsg; - char **p; - IPADDR *addr; P(ip_mutex); /* gethostbyname() is not thread safe */ #ifdef HAVE_GETHOSTBYNAME2 @@ -516,23 +434,18 @@ static const char *resolv_host(int family, const char *host, dlist *addr_list) V(ip_mutex); return errmsg; } else { + char **p; for (p = hp->h_addr_list; *p != 0; p++) { - switch (hp->h_addrtype) { - case AF_INET: - addr = New(IPADDR(hp->h_addrtype)); - addr->set_type(IPADDR::R_MULTIPLE); - addr->set_addr4((struct in_addr *)*p); - break; + IPADDR *addr = New(IPADDR(hp->h_addrtype)); + addr->set_type(IPADDR::R_MULTIPLE); + if (addr->get_family() == AF_INET) { + addr->set_addr4((struct in_addr*)*p); + } #ifdef HAVE_IPV6 - case AF_INET6: - addr = New(IPADDR(hp->h_addrtype)); - addr->set_type(IPADDR::R_MULTIPLE); - addr->set_addr6((struct in6_addr *)*p); - break; -#endif - default: - continue; + else { + addr->set_addr6((struct in6_addr*)*p); } +#endif addr_list->append(addr); } V(ip_mutex); @@ -611,120 +524,6 @@ dlist *bnet_host2ipaddrs(const char *host, int family, const char **errstr) return addr_list; } -/* - * This is the "old" way of opening a connection. The preferred way is - * now to do what this subroutine does, but inline. That allows the - * connect() call to return error status, ... - */ -BSOCK *bnet_connect(JCR * jcr, int retry_interval, utime_t max_retry_time, - utime_t heart_beat, - const char *name, char *host, char *service, int port, - int verbose) -{ - BSOCK *bsock = new_bsock(); - if (!bsock->connect(jcr, retry_interval, max_retry_time, heart_beat, - name, host, service, port, verbose)) { - bsock->destroy(); - bsock = NULL; - } - return bsock; -} - -/* - * Return the string for the error that occurred - * on the socket. Only the first error is retained. - */ -const char *bnet_strerror(BSOCK * bsock) -{ - return bsock->bstrerror(); -} - -/* - * Format and send a message - * Returns: false on error - * true on success - */ -bool bnet_fsend(BSOCK * bs, const char *fmt, ...) -{ - va_list arg_ptr; - int maxlen; - - if (bs->errors || bs->is_terminated()) { - return false; - } - /* This probably won't work, but we vsnprintf, then if we - * get a negative length or a length greater than our buffer - * (depending on which library is used), the printf was truncated, so - * get a bigger buffer and try again. - */ - for (;;) { - maxlen = sizeof_pool_memory(bs->msg) - 1; - va_start(arg_ptr, fmt); - bs->msglen = bvsnprintf(bs->msg, maxlen, fmt, arg_ptr); - va_end(arg_ptr); - if (bs->msglen > 0 && bs->msglen < (maxlen - 5)) { - break; - } - bs->msg = realloc_pool_memory(bs->msg, maxlen + maxlen / 2); - } - return bs->send(); -} - -int bnet_get_peer(BSOCK *bs, char *buf, socklen_t buflen) -{ - return bs->get_peer(buf, buflen); -} - -/* - * Set the network buffer size, suggested size is in size. - * Actual size obtained is returned in bs->msglen - * - * Returns: 0 on failure - * 1 on success - */ -bool bnet_set_buffer_size(BSOCK * bs, uint32_t size, int rw) -{ - return bs->set_buffer_size(size, rw); -} - -/* - * Set socket non-blocking - * Returns previous socket flag - */ -int bnet_set_nonblocking(BSOCK *bsock) -{ - return bsock->set_nonblocking(); -} - -/* - * Set socket blocking - * Returns previous socket flags - */ -int bnet_set_blocking(BSOCK *bsock) -{ - return bsock->set_blocking(); -} - -/* - * Restores socket flags - */ -void bnet_restore_blocking (BSOCK *bsock, int flags) -{ - bsock->restore_blocking(flags); -} - -/* - * Send a network "signal" to the other end - * This consists of sending a negative packet length - * - * Returns: false on failure - * true on success - */ -bool bnet_sig(BSOCK * bs, int signal) -{ - return bs->signal(signal); -} - /* * Convert a network "signal" code into * human readable ASCII. @@ -777,11 +576,7 @@ BSOCK *init_bsock(JCR * jcr, int sockfd, const char *who, const char *host, int bsock->set_port(port); memset(&bsock->peer_addr, 0, sizeof(bsock->peer_addr)); memcpy(&bsock->client_addr, client_addr, sizeof(bsock->client_addr)); - /* - * ****FIXME**** reduce this to a few hours once - * heartbeats are implemented - */ - bsock->timeout = 60 * 60 * 6 * 24; /* 6 days timeout */ + bsock->timeout = BSOCK_TIMEOUT; bsock->set_jcr(jcr); return bsock; } @@ -805,13 +600,47 @@ BSOCK *dup_bsock(BSOCK *osock) return bsock; } -/* Close the network connection */ -void bnet_close(BSOCK * bsock) +int set_socket_errno(int sockstat) { - bsock->close(); -} - -void term_bsock(BSOCK * bsock) -{ - bsock->destroy(); +#ifdef HAVE_WIN32 + /* + * For Windows, we must simulate Unix errno on a socket + * error in order to handle errors correctly. + */ + if (sockstat == SOCKET_ERROR) { + berrno be; + DWORD err = WSAGetLastError(); + if (err == WSAEINTR) { + errno = EINTR; + return sockstat; + } else if (err == WSAEWOULDBLOCK) { + errno = EAGAIN; + return sockstat; + } else { + errno = b_errno_win32 | b_errno_WSA; + } + Dmsg2(20, "Socket error: err=%d %s\n", err, be.bstrerror(err)); + } +#else + if (sockstat == SOCKET_ERROR) { + /* Handle errrors from prior connections as EAGAIN */ + switch (errno) { + case ENETDOWN: + case EPROTO: + case ENOPROTOOPT: + case EHOSTDOWN: +#ifdef ENONET + case ENONET: +#endif + case EHOSTUNREACH: + case EOPNOTSUPP: + case ENETUNREACH: + errno = EAGAIN; + break; + default: + break; + } + } +#endif + return sockstat; } diff --git a/bacula/src/lib/bnet_server.c b/bacula/src/lib/bnet_server.c index 853c1c7e59..f00e8daabd 100644 --- a/bacula/src/lib/bnet_server.c +++ b/bacula/src/lib/bnet_server.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2011 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Originally written by Kern Sibbald for inclusion in apcupsd, @@ -67,7 +55,7 @@ void bnet_stop_thread_server(pthread_t tid) * Become Threaded Network Server * * This function is able to handle multiple server ips in - * ipv4 and ipv6 style. The Addresse are give in a comma + * ipv4 and ipv6 style. The Addresses are given in a comma * seperated string in bind_addr * * At the moment it is inpossible to bind different ports. @@ -77,13 +65,13 @@ void bnet_thread_server(dlist *addr_list, int max_clients, workq_t *client_wq, { int newsockfd, stat; socklen_t clilen; - struct sockaddr cli_addr; /* client's address */ + struct sockaddr_storage clientaddr; /* client's address */ int tlog; int turnon = 1; #ifdef HAVE_LIBWRAP struct request_info request; #endif - IPADDR *ipaddr, *next; + IPADDR *ipaddr; struct s_sockfd { dlink link; /* this MUST be the first item */ int fd; @@ -94,23 +82,13 @@ void bnet_thread_server(dlist *addr_list, int max_clients, workq_t *client_wq, char allbuf[256 * 10]; - /* - * Remove any duplicate addresses. - */ - for (ipaddr = (IPADDR *)addr_list->first(); ipaddr; - ipaddr = (IPADDR *)addr_list->next(ipaddr)) { - for (next = (IPADDR *)addr_list->next(ipaddr); next; - next = (IPADDR *)addr_list->next(next)) { - if (ipaddr->get_sockaddr_len() == next->get_sockaddr_len() && - memcmp(ipaddr->get_sockaddr(), next->get_sockaddr(), - ipaddr->get_sockaddr_len()) == 0) { - addr_list->remove(next); - } - } - } + remove_duplicate_addresses(addr_list); - Dmsg1(100, "Addresses %s\n", build_addresses_str(addr_list, allbuf, sizeof(allbuf))); + Dmsg1(20, "Addresses %s\n", build_addresses_str(addr_list, allbuf, sizeof(allbuf))); + /* + * Listen on each address provided. + */ foreach_dlist(ipaddr, addr_list) { /* Allocate on stack from -- no need to free */ fd_ptr = (s_sockfd *)alloca(sizeof(s_sockfd)); @@ -139,22 +117,35 @@ void bnet_thread_server(dlist *addr_list, int max_clients, workq_t *client_wq, be.bstrerror()); } - int tmax = 30 * (60 / 5); /* wait 30 minutes max */ - for (tlog = 0; bind(fd_ptr->fd, ipaddr->get_sockaddr(), ipaddr->get_sockaddr_len()) < 0; tlog -= 5) { + int tmax = 1 * (60 / 5); /* wait 1 minute max */ + for (tlog = 0; bind(fd_ptr->fd, ipaddr->get_sockaddr(), ipaddr->get_sockaddr_len()) == SOCKET_ERROR; tlog -= 5) { berrno be; if (tlog <= 0) { - tlog = 2 * 60; /* Complain every 2 minutes */ + tlog = 1 * 60; /* Complain every 1 minute */ Emsg2(M_WARNING, 0, _("Cannot bind port %d: ERR=%s: Retrying ...\n"), ntohs(fd_ptr->port), be.bstrerror()); + Dmsg2(20, "Cannot bind port %d: ERR=%s: Retrying ...\n", + ntohs(fd_ptr->port), be.bstrerror()); + } bmicrosleep(5, 0); if (--tmax <= 0) { Emsg2(M_ABORT, 0, _("Cannot bind port %d: ERR=%s.\n"), ntohs(fd_ptr->port), be.bstrerror()); + Pmsg2(000, "Aborting cannot bind port %d: ERR=%s.\n", ntohs(fd_ptr->port), + be.bstrerror()); } } - listen(fd_ptr->fd, 50); /* tell system we are ready */ - sockfds.append(fd_ptr); + if (listen(fd_ptr->fd, 50) < 0) { /* tell system we are ready */ + berrno be; + Emsg2(M_ABORT, 0, _("Cannot bind port %d: ERR=%s.\n"), ntohs(fd_ptr->port), + be.bstrerror()); + } else { + sockfds.append(fd_ptr); + } + } + if (sockfds.size() == 0) { + Emsg0(M_ABORT, 0, _("No addr/port found to listen on.\n")); } /* Start work queue thread */ if ((stat = workq_init(client_wq, max_clients, handle_client_request)) != 0) { @@ -187,10 +178,12 @@ void bnet_thread_server(dlist *addr_list, int max_clients, workq_t *client_wq, if (FD_ISSET(fd_ptr->fd, &sockset)) { /* Got a connection, now accept it. */ do { - clilen = sizeof(cli_addr); - newsockfd = accept(fd_ptr->fd, &cli_addr, &clilen); - } while (newsockfd < 0 && errno == EINTR); - if (newsockfd < 0) { + clilen = sizeof(clientaddr); + newsockfd = accept(fd_ptr->fd, (struct sockaddr *)&clientaddr, &clilen); + newsockfd = set_socket_errno(newsockfd); + } while (newsockfd == SOCKET_ERROR && (errno == EINTR || errno == EAGAIN)); + if (newsockfd == SOCKET_ERROR) { + Dmsg2(20, "Accept=%d errno=%d\n", newsockfd, errno); continue; } #ifdef HAVE_LIBWRAP @@ -201,8 +194,9 @@ void bnet_thread_server(dlist *addr_list, int max_clients, workq_t *client_wq, V(mutex); Jmsg2(NULL, M_SECURITY, 0, _("Connection from %s:%d refused by hosts.access\n"), - sockaddr_to_ascii(&cli_addr, buf, sizeof(buf)), - sockaddr_get_port(&cli_addr)); + sockaddr_to_ascii((struct sockaddr *)&clientaddr, + sizeof(clientaddr), buf, sizeof(buf)), + sockaddr_get_port((struct sockaddr *)&clientaddr)); close(newsockfd); continue; } @@ -221,10 +215,11 @@ void bnet_thread_server(dlist *addr_list, int max_clients, workq_t *client_wq, /* see who client is. i.e. who connected to us. */ P(mutex); - sockaddr_to_ascii(&cli_addr, buf, sizeof(buf)); + sockaddr_to_ascii((struct sockaddr *)&clientaddr, sizeof(clientaddr), buf, sizeof(buf)); V(mutex); BSOCK *bs; - bs = init_bsock(NULL, newsockfd, "client", buf, ntohs(fd_ptr->port), &cli_addr); + bs = init_bsock(NULL, newsockfd, "client", buf, ntohs(fd_ptr->port), + (struct sockaddr *)&clientaddr); if (bs == NULL) { Jmsg0(NULL, M_ABORT, 0, _("Could not create client BSOCK.\n")); } diff --git a/bacula/src/lib/bpipe.c b/bacula/src/lib/bpipe.c index ad2e7ad36d..44c516439e 100644 --- a/bacula/src/lib/bpipe.c +++ b/bacula/src/lib/bpipe.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2002-2011 Free Software Foundation Europe e.V. + Copyright (C) 2002-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * bpipe.c bi-directional pipe @@ -57,6 +45,15 @@ int num_execvp_errors = (int)(sizeof(execvp_errors)/sizeof(int)); #if !defined(HAVE_WIN32) static void build_argc_argv(char *cmd, int *bargc, char *bargv[], int max_arg); +void build_sh_argc_argv(char *cmd, int *bargc, char *bargv[], int max_arg) +{ + bargv[0] = (char *)"/bin/sh"; + bargv[1] = (char *)"-c"; + bargv[2] = cmd; + bargv[3] = NULL; + *bargc = 3; +} + /* * Run an external program. Optionally wait a specified number * of seconds. Program killed if wait exceeded. We open @@ -69,7 +66,7 @@ BPIPE *open_bpipe(char *prog, int wait, const char *mode) int bargc, i; int readp[2], writep[2]; POOLMEM *tprog; - int mode_read, mode_write; + int mode_read, mode_write, mode_shell; BPIPE *bpipe; int save_errno; @@ -77,10 +74,17 @@ BPIPE *open_bpipe(char *prog, int wait, const char *mode) memset(bpipe, 0, sizeof(BPIPE)); mode_read = (mode[0] == 'r'); mode_write = (mode[0] == 'w' || mode[1] == 'w'); + /* mode is at least 2 bytes long, can be 3, rs, rws, ws */ + mode_shell = (mode[1] == 's' || (mode[1] && mode[2] == 's')); /* Build arguments for running program. */ tprog = get_pool_memory(PM_FNAME); pm_strcpy(tprog, prog); - build_argc_argv(tprog, &bargc, bargv, MAX_ARGV); + if (mode_shell) { + build_sh_argc_argv(tprog, &bargc, bargv, MAX_ARGV); + + } else { + build_argc_argv(tprog, &bargc, bargv, MAX_ARGV); + } #ifdef xxxxxx printf("argc=%d\n", bargc); for (i=0; iextract_regexp(motif)) { Dmsg0(100, "bregexp: extract_regexp error\n"); free_bregexp(self); @@ -104,7 +92,7 @@ bool apply_bregexps(const char *fname, alist *bregexps, char **result) return ok; } -/* return an alist of BREGEXP or return NULL if it's not a +/* return an alist of BREGEXP or return NULL if it's not a * where=!tmp!opt!ig,!temp!opt!i */ alist *get_bregexps(const char *where) @@ -122,7 +110,7 @@ alist *get_bregexps(const char *where) } if (list->size()) { - return list; + return list; } else { delete list; return NULL; @@ -134,20 +122,21 @@ bool BREGEXP::extract_regexp(const char *motif) if ( !motif ) { return false; } - + char sep = motif[0]; - if (!(sep == '!' || - sep == ':' || - sep == ';' || - sep == '|' || - sep == ',' || - sep == '&' || - sep == '%' || - sep == '=' || + if (!(sep == '!' || + sep == ':' || + sep == ';' || + sep == '|' || + sep == ',' || + sep == '&' || + sep == '%' || + sep == '=' || sep == '~' || sep == '/' || - sep == '#' )) + sep == '<' || + sep == '#' )) { return false; } @@ -161,7 +150,7 @@ bool BREGEXP::extract_regexp(const char *motif) while (*search && !ok) { if (search[0] == '\\' && search[1] == sep) { - *dest++ = *++search; /* we skip separator */ + *dest++ = *++search; /* we skip separator */ } else if (search[0] == '\\' && search[1] == '\\') { *dest++ = *++search; /* we skip the second \ */ @@ -173,7 +162,7 @@ bool BREGEXP::extract_regexp(const char *motif) ok = true; } else { - *dest++ = *++search; /* we skip separator */ + *dest++ = *++search; /* we skip separator */ subst = dest; /* get replaced string */ } @@ -182,7 +171,7 @@ bool BREGEXP::extract_regexp(const char *motif) } } *dest = '\0'; /* in case of */ - + if (!ok || !subst) { /* bad regexp */ return false; @@ -245,7 +234,7 @@ char *BREGEXP::replace(const char *fname) } return result; -} +} char *BREGEXP::return_fname(const char *fname, int len) { @@ -278,10 +267,10 @@ int BREGEXP::compute_dest_len(const char *fname, regmatch_t pmatch[]) /* we check if the back reference exists */ /* references can not match if we are using (..)? */ - if (pmatch[no].rm_so >= 0 && pmatch[no].rm_eo >= 0) { + if (pmatch[no].rm_so >= 0 && pmatch[no].rm_eo >= 0) { len += pmatch[no].rm_eo - pmatch[no].rm_so; } - + } else { len++; } @@ -305,7 +294,7 @@ char *BREGEXP::edit_subst(const char *fname, regmatch_t pmatch[]) /* il faut recopier fname dans dest * on recopie le debut fname -> pmatch->start[0] */ - + for (i = 0; i < pmatch[0].rm_so ; i++) { result[i] = fname[i]; } @@ -352,7 +341,7 @@ char *bregexp_escape_string(char *dest, const char *src, const char sep) } *dest = '\0'; - return ret; + return ret; } static const char regexp_sep = '!'; @@ -360,12 +349,12 @@ static const char *str_strip_prefix = "!%s!!i"; static const char *str_add_prefix = "!^!%s!"; static const char *str_add_suffix = "!([^/])$!$1%s!"; -int bregexp_get_build_where_size(char *strip_prefix, - char *add_prefix, +int bregexp_get_build_where_size(char *strip_prefix, + char *add_prefix, char *add_suffix) { int str_size = ((strip_prefix?strlen(strip_prefix)+strlen(str_strip_prefix):0) + - (add_prefix?strlen(add_prefix)+strlen(str_add_prefix) :0) + + (add_prefix?strlen(add_prefix)+strlen(str_add_prefix) :0) + (add_suffix?strlen(add_suffix)+strlen(str_add_suffix) :0) ) /* escape + 3*, + \0 */ * 2 + 3 + 1; @@ -376,16 +365,16 @@ int bregexp_get_build_where_size(char *strip_prefix, /* build a regexp string with user arguments * Usage : - * + * * int len = bregexp_get_build_where_size(a,b,c) ; * char *dest = (char *) bmalloc (len * sizeof(char)); * bregexp_build_where(dest, len, a, b, c); * bfree(dest); - * + * */ char *bregexp_build_where(char *dest, int str_size, - char *strip_prefix, - char *add_prefix, + char *strip_prefix, + char *add_prefix, char *add_suffix) { int len=0; @@ -393,7 +382,7 @@ char *bregexp_build_where(char *dest, int str_size, POOLMEM *str_tmp = get_memory(str_size); *str_tmp = *dest = '\0'; - + if (strip_prefix) { len += bsnprintf(dest, str_size - len, str_strip_prefix, bregexp_escape_string(str_tmp, strip_prefix, regexp_sep)); @@ -409,7 +398,7 @@ char *bregexp_build_where(char *dest, int str_size, if (add_prefix) { if (len) dest[len++] = ','; - len += bsnprintf(dest + len, str_size - len, str_add_prefix, + len += bsnprintf(dest + len, str_size - len, str_add_prefix, bregexp_escape_string(str_tmp, add_prefix, regexp_sep)); } diff --git a/bacula/src/lib/breg.h b/bacula/src/lib/breg.h index 1a7d412371..cfb19d9ebc 100644 --- a/bacula/src/lib/breg.h +++ b/bacula/src/lib/breg.h @@ -6,29 +6,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2006-2006 Free Software Foundation Europe e.V. + Copyright (C) 2006-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ @@ -46,7 +34,7 @@ /* Usage: * * #include "lib/breg.h" - * + * * BREGEXP *breg = new_bregexp("!/prod!/test!"); * char *filename = breg->replace("/prod/data.dat"); * or @@ -81,10 +69,10 @@ public: }; /* create new BREGEXP and compile regex_t */ -BREGEXP *new_bregexp(const char *motif); +BREGEXP *new_bregexp(const char *motif); /* launch each bregexp on filename */ -int run_bregexp(alist *bregexps, const char *fname); +int run_bregexp(alist *bregexps, const char *fname); /* free BREGEXP (and all POOLMEM) */ void free_bregexp(BREGEXP *script); @@ -99,19 +87,19 @@ bool apply_bregexps(const char *fname, alist *bregexps, char **result); void free_bregexps(alist *bregexps); /* you have to free alist */ /* get regexp size */ -int bregexp_get_build_where_size(char *strip_prefix, - char *add_prefix, +int bregexp_get_build_where_size(char *strip_prefix, + char *add_prefix, char *add_suffix); -/* get a bregexp string from user arguments +/* get a bregexp string from user arguments * you must allocate it with bregexp_get_build_where_size(); */ char *bregexp_build_where(char *dest, int str_size, - char *strip_prefix, - char *add_prefix, + char *strip_prefix, + char *add_prefix, char *add_suffix); -/* escape a string to regexp format (sep and \) +/* escape a string to regexp format (sep and \) * dest must be long enough (dest = 2*src + 1) */ char *bregexp_escape_string(char *dest, const char *src, const char sep); diff --git a/bacula/src/lib/bregex.c b/bacula/src/lib/bregex.c index e07de3b48b..b6ef5d6f36 100644 --- a/bacula/src/lib/bregex.c +++ b/bacula/src/lib/bregex.c @@ -35,29 +35,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2006-2010 Free Software Foundation Europe e.V. + Copyright (C) 2006-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ @@ -726,7 +714,7 @@ void re_compile_fastmap(regex_t * bufp) bufp->fastmap_accurate = 1; } -/* +/* * star is coded as: * 1: failure_jump 2 * ... code for operand of star @@ -1465,7 +1453,7 @@ int regcomp(regex_t * bufp, const char *regex, int cflags) char *p, *lcase = bstrdup(regex); for( p = lcase; *p ; p++) { *p = tolower(*p); - } + } re_compile_pattern(bufp, (unsigned char *)lcase); bfree(lcase); } else { @@ -1477,12 +1465,12 @@ int regcomp(regex_t * bufp, const char *regex, int cflags) return 0; } -void re_registers_to_regmatch(regexp_registers_t old_regs, - regmatch_t pmatch[], +void re_registers_to_regmatch(regexp_registers_t old_regs, + regmatch_t pmatch[], size_t nmatch) { size_t i=0; - + /* We have to set the last entry to -1 */ nmatch = nmatch - 1; for (i=0; (i < nmatch) && (old_regs->start[i] > -1) ; i++) { @@ -1491,7 +1479,7 @@ void re_registers_to_regmatch(regexp_registers_t old_regs, } pmatch[i].rm_eo = pmatch[i].rm_so = -1; -} +} int regexec(regex_t * preg, const char *string, size_t nmatch, regmatch_t pmatch[], int eflags) @@ -1503,7 +1491,7 @@ int regexec(regex_t * preg, const char *string, size_t nmatch, if (stat >= 0) { re_registers_to_regmatch(®s, pmatch, nmatch); } - /* stat is the start position in the string base 0 where + /* stat is the start position in the string base 0 where * the pattern was found or negative if not found. */ return stat < 0 ? -1 : 0; diff --git a/bacula/src/lib/bregex.h b/bacula/src/lib/bregex.h index 84e60c0251..d115ef89e5 100644 --- a/bacula/src/lib/bregex.h +++ b/bacula/src/lib/bregex.h @@ -1,6 +1,7 @@ -#ifndef b_REGEXPR_H -#define b_REGEXPR_H +#ifndef __b_REGEXPR_H__ +#define __b_REGEXPR_H__ + #ifdef __cplusplus extern "C" { #endif @@ -20,42 +21,30 @@ extern "C" { * Created: Thu Sep 26 17:15:36 1991 ylo * Last modified: Mon Nov 4 15:49:46 1991 ylo * - * Modified to work with C++ for use in Bacula, + * Modified to work with C++ for use in Bacula, * Kern Sibbald April, 2006 - */ + */ /* Bacula® - The Network Backup Solution - Copyright (C) 2006-2010 Free Software Foundation Europe e.V. - - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + Copyright (C) 2006-2014 Free Software Foundation Europe e.V. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ #ifndef REGEXPR_H #define REGEXPR_H /* If we pull in this header, make sure we only get our own library - * bregex.c + * bregex.c */ #define regex_t b_regex_t #define regmatch_t b_regmatch_t @@ -108,7 +97,7 @@ struct regex_t char *errmsg; int cflags; /* compilation flags */ POOLMEM *lcase; /* used by REG_ICASE */ -}; +}; typedef struct re_registers @@ -190,7 +179,7 @@ void re_compile_fastmap(regex_t *compiled); int regcomp(regex_t *preg, const char *regex, int cflags); int regexec(regex_t *preg, const char *string, size_t nmatch, regmatch_t pmatch[], int eflags); -size_t regerror(int errcode, regex_t *preg, char *errbuf, +size_t regerror(int errcode, regex_t *preg, char *errbuf, size_t errbuf_size); void regfree(regex_t *preg); @@ -201,4 +190,4 @@ void regfree(regex_t *preg); #ifdef __cplusplus } #endif -#endif /* !b_REGEXPR_H */ +#endif /* !__b_REGEXPR_H__ */ diff --git a/bacula/src/lib/bsnprintf.c b/bacula/src/lib/bsnprintf.c index afef57c1d9..a1f21a6613 100644 --- a/bacula/src/lib/bsnprintf.c +++ b/bacula/src/lib/bsnprintf.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2005-2012 Free Software Foundation Europe e.V. + Copyright (C) 2005-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Copyright Patrick Powell 1995 @@ -52,7 +40,7 @@ * For Bacula we turn this off, and it silently ignores * formats that could pose a security problem. */ -#undef SECURITY_PROBLEM +#undef SECURITY_PROBLEM #ifdef USE_BSNPRINTF @@ -83,7 +71,7 @@ static int32_t fmtfp(char *buffer, int32_t currlen, int32_t maxlen, /* * NOTE!!!! do not use this #define with a construct such * as outch(--place);. It just will NOT work, because the - * decrement of place is done ONLY if there is room in the + * decrement of place is done ONLY if there is room in the * output buffer. */ #define outch(c) {int len=currlen; if (currlen < maxlen) \ @@ -124,8 +112,8 @@ static int32_t fmtfp(char *buffer, int32_t currlen, int32_t maxlen, /* You might ask why does Bacula have it's own printf routine? Well, There are two reasons: 1. Here (as opposed to library routines), we - define %d and %ld to be 32 bit; %lld and %q to be 64 bit. 2. We - disable %n for security reasons. + define %d and %ld to be 32 bit; %lld and %q to be 64 bit. 2. We + disable %n for security reasons. */ int bsnprintf(char *str, int32_t size, const char *fmt, ...) @@ -342,7 +330,7 @@ int bvsnprintf(char *buffer, int32_t maxlen, const char *format, va_list args) currlen = fmtfp(buffer, currlen, maxlen, fvalue, min, max, flags); break; case 'c': - ch = va_arg(args, int); + ch = va_arg(args, int); outch(ch); break; case 's': @@ -496,7 +484,7 @@ static int32_t fmtwstr(char *buffer, int32_t currlen, int32_t maxlen, --padlen; } while (*value && (cnt < max)) { - + ch = (*value++) & 0xff; outch(ch); ++cnt; @@ -661,12 +649,11 @@ static int32_t fmtfp(char *buffer, int32_t currlen, int32_t maxlen, int fplace = 0; int padlen = 0; /* amount to pad */ int zpadlen = 0; - int caps = 0; int64_t intpart; int64_t fracpart; const char *cvt_str; - /* + /* * AIX manpage says the default is 0, but Solaris says the default * is 6, and sprintf on AIX defaults to 6 */ @@ -682,16 +669,11 @@ static int32_t fmtfp(char *buffer, int32_t currlen, int32_t maxlen, else if (flags & DP_F_SPACE) signvalue = ' '; -#if 0 - if (flags & DP_F_UP) - caps = 1; /* Should characters be upper case? */ -#endif - #ifndef HAVE_FCVT intpart = (int64_t)ufvalue; - /* - * Sorry, we only support 9 digits past the decimal because of our + /* + * Sorry, we only support 9 digits past the decimal because of our * conversion method */ if (max > 9) @@ -713,7 +695,7 @@ static int32_t fmtfp(char *buffer, int32_t currlen, int32_t maxlen, #endif /* Convert integer part */ - cvt_str = caps ? "0123456789ABCDEF" : "0123456789abcdef"; + cvt_str = "0123456789"; do { iconvert[iplace++] = cvt_str[(int)(intpart % 10)]; intpart = (intpart / 10); @@ -725,11 +707,11 @@ static int32_t fmtfp(char *buffer, int32_t currlen, int32_t maxlen, iconvert[iplace] = 0; /* Convert fractional part */ - cvt_str = caps ? "0123456789ABCDEF" : "0123456789abcdef"; - do { + cvt_str = "0123456789"; + for (int fiter = max; fiter > 0; fiter--) { fconvert[fplace++] = cvt_str[fracpart % 10]; fracpart = (fracpart / 10); - } while (fracpart && (fplace < (int)sizeof(fconvert))); + } if (fplace == (int)sizeof(fconvert)) { fplace--; @@ -889,9 +871,10 @@ int main(int argc, char *argv[]) "%3.2f", "%.0f", "%.1f", + "%.2f", NULL }; - double fp_nums[] = { -1.5, 134.21, 91340.2, 341.1234, 0203.9, 0.96, 0.996, + double fp_nums[] = { 1.05, -1.5, 134.21, 91340.2, 341.1234, 0203.9, 0.96, 0.996, 0.9996, 1.996, 4.136, 6442452944.1234, 0, 23365.5 }; #endif @@ -968,8 +951,6 @@ int main(int argc, char *argv[]) }; const wchar_t *ls_nums[] = { L"abc", L"def", L"ghi", L"123", L"4567", L"a", L"bb", L"ccccccc", NULL}; - - int x, y; int fail = 0; int num = 0; diff --git a/bacula/src/lib/bsock.c b/bacula/src/lib/bsock.c index 4df45e5934..2aa9f095ed 100644 --- a/bacula/src/lib/bsock.c +++ b/bacula/src/lib/bsock.c @@ -1,34 +1,22 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2007-2011 Free Software Foundation Europe e.V. + Copyright (C) 2007-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Network Utility Routines * - * by Kern Sibbald + * Written by Kern Sibbald * */ @@ -46,17 +34,20 @@ #endif #ifdef HAVE_WIN32 +#include #define socketRead(fd, buf, len) ::recv(fd, buf, len, 0) #define socketWrite(fd, buf, len) ::send(fd, buf, len, 0) #define socketClose(fd) ::closesocket(fd) +static void win_close_wait(int fd); #else #define socketRead(fd, buf, len) ::read(fd, buf, len) #define socketWrite(fd, buf, len) ::write(fd, buf, len) #define socketClose(fd) ::close(fd) #endif + /* - * This is a non-class BSOCK "constructor" because we want to + * This is a non-class BSOCK "constructor" because we want to * call the Bacula smartalloc routines instead of new. */ BSOCK *new_bsock() @@ -69,30 +60,19 @@ BSOCK *new_bsock() void BSOCK::init() { memset(this, 0, sizeof(BSOCK)); + set_closed(); + set_terminated(); m_blocking = 1; msg = get_pool_memory(PM_BSOCK); errmsg = get_pool_memory(PM_MESSAGE); - /* - * ****FIXME**** reduce this to a few hours once - * heartbeats are implemented - */ - timeout = 60 * 60 * 6 * 24; /* 6 days timeout */ -} - -/* - * This is our "class destructor" that ensures that we use - * smartalloc rather than the system free(). - */ -void BSOCK::free_bsock() -{ - destroy(); + timeout = BSOCK_TIMEOUT; } void BSOCK::free_tls() { free_tls_connection(this->tls); this->tls = NULL; -} +} /* * Try to connect to host for max_retry_time at retry_time intervals. @@ -115,14 +95,14 @@ bool BSOCK::connect(JCR * jcr, int retry_interval, utime_t max_retry_time, if (max_retry_time) { tid = start_thread_timer(jcr, pthread_self(), (uint32_t)max_retry_time); } - + for (i = 0; !open(jcr, name, host, service, port, heart_beat, &fatal); i -= retry_interval) { berrno be; if (fatal || (jcr && job_canceled(jcr))) { goto bail_out; } - Dmsg4(100, "Unable to connect to %s on %s:%d. ERR=%s\n", + Dmsg4(50, "Unable to connect to %s on %s:%d. ERR=%s\n", name, host, port, be.bstrerror()); if (i < 0) { i = 60 * 5; /* complain again in 5 minutes */ @@ -148,14 +128,20 @@ bail_out: return ok; } -/* - * Finish initialization of the pocket structure. +/* + * Finish initialization of the packet structure. */ void BSOCK::fin_init(JCR * jcr, int sockfd, const char *who, const char *host, int port, struct sockaddr *lclient_addr) { Dmsg3(100, "who=%s host=%s port=%d\n", who, host, port); m_fd = sockfd; + if (m_who) { + free(m_who); + } + if (m_host) { + free(m_host); + } set_who(bstrdup(who)); set_host(bstrdup(host)); set_port(port); @@ -192,7 +178,7 @@ bool BSOCK::open(JCR *jcr, const char *name, char *host, char *service, { int sockfd = -1; dlist *addr_list; - IPADDR *ipaddr, *next; + IPADDR *ipaddr; bool connected = false; int turnon = 1; const char *errstr; @@ -204,7 +190,7 @@ bool BSOCK::open(JCR *jcr, const char *name, char *host, char *service, */ if ((addr_list = bnet_host2ipaddrs(host, 0, &errstr)) == NULL) { /* Note errstr is not malloc'ed */ - Qmsg2(jcr, M_ERROR, 0, _("bnet_host2ipaddrs() for host \"%s\" failed: ERR=%s\n"), + Qmsg2(jcr, M_ERROR, 0, _("gethostbyname() for host \"%s\" failed: ERR=%s\n"), host, errstr); Dmsg2(100, "bnet_host2ipaddrs() for host %s failed: ERR=%s\n", host, errstr); @@ -212,20 +198,7 @@ bool BSOCK::open(JCR *jcr, const char *name, char *host, char *service, return false; } - /* - * Remove any duplicate addresses. - */ - for (ipaddr = (IPADDR *)addr_list->first(); - ipaddr; ipaddr = (IPADDR *)addr_list->next(ipaddr)) { - for (next = (IPADDR *)addr_list->next(ipaddr); next; - next = (IPADDR *)addr_list->next(next)) { - if (ipaddr->get_sockaddr_len() == next->get_sockaddr_len() && - memcmp(ipaddr->get_sockaddr(), next->get_sockaddr(), - ipaddr->get_sockaddr_len()) == 0) { - addr_list->remove(next); - } - } - } + remove_duplicate_addresses(addr_list); foreach_dlist(ipaddr, addr_list) { ipaddr->set_port_net(htons(port)); @@ -239,24 +212,18 @@ bool BSOCK::open(JCR *jcr, const char *name, char *host, char *service, berrno be; save_errno = errno; switch (errno) { -#ifdef EPFNOSUPPORT - case EPFNOSUPPORT: - /* - * The name lookup of the host returned an address in a protocol family - * we don't support. Suppress the error and try the next address. - */ - break; -#endif #ifdef EAFNOSUPPORT case EAFNOSUPPORT: /* - * The name lookup of the host returned an address in a address family + * The name lookup of the host returned an address in a protocol family * we don't support. Suppress the error and try the next address. */ break; #endif default: *fatal = 1; + Qmsg3(jcr, M_ERROR, 0, _("Socket open error. proto=%d port=%d. ERR=%s\n"), + ipaddr->get_family(), ipaddr->get_port_host_order(), be.bstrerror()); Pmsg3(000, _("Socket open error. proto=%d port=%d. ERR=%s\n"), ipaddr->get_family(), ipaddr->get_port_host_order(), be.bstrerror()); break; @@ -270,8 +237,11 @@ bool BSOCK::open(JCR *jcr, const char *name, char *host, char *service, berrno be; save_errno = errno; *fatal = 1; + Qmsg2(jcr, M_ERROR, 0, _("Source address bind error. proto=%d. ERR=%s\n"), + src_addr->get_family(), be.bstrerror() ); Pmsg2(000, _("Source address bind error. proto=%d. ERR=%s\n"), src_addr->get_family(), be.bstrerror() ); + if (sockfd >= 0) socketClose(sockfd); continue; } } @@ -298,7 +268,7 @@ bool BSOCK::open(JCR *jcr, const char *name, char *host, char *service, /* connect to server */ if (::connect(sockfd, ipaddr->get_sockaddr(), ipaddr->get_sockaddr_len()) < 0) { save_errno = errno; - socketClose(sockfd); + if (sockfd >= 0) socketClose(sockfd); continue; } *fatal = 0; @@ -307,8 +277,11 @@ bool BSOCK::open(JCR *jcr, const char *name, char *host, char *service, } if (!connected) { + berrno be; free_addresses(addr_list); errno = save_errno | b_errno_win32; + Dmsg4(50, "Could not connect to server %s %s:%d. ERR=%s\n", + name, host, port, be.bstrerror()); return false; } /* @@ -322,6 +295,21 @@ bool BSOCK::open(JCR *jcr, const char *name, char *host, char *service, } fin_init(jcr, sockfd, name, host, port, ipaddr->get_sockaddr()); free_addresses(addr_list); + + /* Clean the packet a bit */ + m_closed = false; + m_duped = false; + m_spool = false; + m_use_locking = false; + m_timed_out = false; + m_terminated = false; + m_suppress_error_msgs = false; + errors = 0; + m_blocking = 0; + + Dmsg3(50, "OK connected to server %s %s:%d.\n", + name, host, port); + return true; } @@ -368,7 +356,15 @@ bool BSOCK::send() int32_t pktsiz; int32_t *hdr; bool ok = true; + int32_t save_msglen; + POOLMEM *save_msg; + if (is_closed()) { + if (!m_suppress_error_msgs) { + Qmsg0(m_jcr, M_ERROR, 0, _("Socket is closed\n")); + } + return false; + } if (errors) { if (!m_suppress_error_msgs) { Qmsg4(m_jcr, M_ERROR, 0, _("Socket has errors=%d on call to %s:%s:%d\n"), @@ -393,18 +389,21 @@ bool BSOCK::send() } if (m_use_locking) P(m_mutex); + save_msglen = msglen; + save_msg = msg; /* Compute total packet length */ if (msglen <= 0) { pktsiz = sizeof(pktsiz); /* signal, no data */ } else { pktsiz = msglen + sizeof(pktsiz); /* data */ } - /* Store packet length at head of message -- note, we + /* + * Store packet length at head of message -- note, we * have reserved an int32_t just before msg, so we can - * store there + * store there */ hdr = (int32_t *)(msg - (int)sizeof(pktsiz)); - *hdr = htonl(msglen); /* store signal/length */ + *hdr = htonl(msglen); /* store signal/length */ out_msg_no++; /* increment message number */ @@ -424,17 +423,19 @@ bool BSOCK::send() if (rc < 0) { if (!m_suppress_error_msgs) { Qmsg5(m_jcr, M_ERROR, 0, - _("Write error sending %d bytes to %s:%s:%d: ERR=%s\n"), - msglen, m_who, + _("Write error sending %d bytes to %s:%s:%d: ERR=%s\n"), + pktsiz, m_who, m_host, m_port, this->bstrerror()); } } else { Qmsg5(m_jcr, M_ERROR, 0, _("Wrote %d bytes to %s:%s:%d, but only %d accepted.\n"), - msglen, m_who, m_host, m_port, rc); + pktsiz, m_who, m_host, m_port, rc); } ok = false; } + msglen = save_msglen; + msg = save_msg; if (m_use_locking) V(m_mutex); return ok; } @@ -449,7 +450,7 @@ bool BSOCK::fsend(const char *fmt, ...) va_list arg_ptr; int maxlen; - if (errors || is_terminated()) { + if (errors || is_terminated() || is_closed()) { return false; } /* This probably won't work, but we vsnprintf, then if we @@ -485,20 +486,24 @@ bool BSOCK::fsend(const char *fmt, ...) * 2. Signal including end of data stream * 3. Hard end of file * 4. Error - * Using is_bnet_stop() and is_bnet_error() you can figure this all out. + * Using bsock->is_stop() and bsock->is_error() you can figure this all out. */ int32_t BSOCK::recv() { int32_t nbytes; int32_t pktsiz; + bool locked = false; msg[0] = 0; msglen = 0; - if (errors || is_terminated()) { + if (errors || is_terminated() || is_closed()) { return BNET_HARDEOF; } - if (m_use_locking) P(m_mutex); + if (m_use_locking) { + P(m_mutex); + locked = true; + } read_seqno++; /* bump sequence number */ timer_start = watchdog_time; /* set start wait time */ clear_timed_out(); @@ -538,9 +543,9 @@ int32_t BSOCK::recv() /* If signal or packet size too big */ if (pktsiz < 0 || pktsiz > 1000000) { if (pktsiz > 0) { /* if packet too big */ - Qmsg3(m_jcr, M_FATAL, 0, - _("Packet size too big from \"%s:%s:%d. Terminating connection.\n"), - m_who, m_host, m_port); + Qmsg4(m_jcr, M_FATAL, 0, + _("Packet size=%d too big from \"%s:%s:%d. Terminating connection.\n"), + pktsiz, m_who, m_host, m_port); pktsiz = BNET_TERMINATE; /* hang up */ } if (pktsiz == BNET_TERMINATE) { @@ -585,19 +590,20 @@ int32_t BSOCK::recv() nbytes = BNET_ERROR; goto get_out; } + /* always add a zero by to properly terminate any * string that was send to us. Note, we ensured above that the * buffer is at least one byte longer than the message length. */ msg[nbytes] = 0; /* terminate in case it is a string */ /* - * The following uses *lots* of resources so turn it on only for + * The following uses *lots* of resources so turn it on only for * serious debugging. */ Dsm_check(300); get_out: - if (m_use_locking) V(m_mutex); + if (locked) V(m_mutex); return nbytes; /* return actual length of message */ } @@ -613,7 +619,7 @@ bool BSOCK::signal(int signal) return send(); } -/* +/* * Despool spooled attributes */ bool BSOCK::despool(void update_attr_spool_size(ssize_t size), ssize_t tsize) @@ -642,8 +648,8 @@ bool BSOCK::despool(void update_attr_spool_size(ssize_t size), ssize_t tsize) if (nbytes != (size_t)msglen) { berrno be; Dmsg2(400, "nbytes=%d msglen=%d\n", nbytes, msglen); - Qmsg1(get_jcr(), M_FATAL, 0, _("fread attr spool error. ERR=%s\n"), - be.bstrerror()); + Qmsg3(get_jcr(), M_FATAL, 0, _("fread attr spool error. Wanted=%d got=%d bytes. ERR=%s\n"), + msglen, nbytes, be.bstrerror()); update_attr_spool_size(tsize - last); return false; } @@ -680,7 +686,7 @@ const char *BSOCK::bstrerror() return errmsg; } -int BSOCK::get_peer(char *buf, socklen_t buflen) +int BSOCK::get_peer(char *buf, socklen_t buflen) { #if !defined(HAVE_WIN32) if (peer_addr.sin_family == 0) { @@ -711,7 +717,7 @@ bool BSOCK::set_buffer_size(uint32_t size, int rw) #if defined(IP_TOS) && defined(IPTOS_THROUGHPUT) int opt; opt = IPTOS_THROUGHPUT; - setsockopt(fd, IPPROTO_IP, IP_TOS, (sockopt_val_t)&opt, sizeof(opt)); + setsockopt(m_fd, IPPROTO_IP, IP_TOS, (sockopt_val_t)&opt, sizeof(opt)); #endif if (size != 0) { @@ -851,7 +857,7 @@ void BSOCK::set_killable(bool killable) /* * Restores socket flags */ -void BSOCK::restore_blocking (int flags) +void BSOCK::restore_blocking (int flags) { #ifndef HAVE_WIN32 if ((fcntl(m_fd, F_SETFL, flags)) < 0) { @@ -933,23 +939,34 @@ int BSOCK::wait_data_intr(int sec, int usec) } /* - * Note, this routine closes and destroys all the sockets - * that are open including the duped ones. + * This routine closes the current BSOCK. + * It does not delete the socket packet + * resources, which are released int + * bsock->destroy(). */ #ifndef SHUT_RDWR #define SHUT_RDWR 2 #endif +/* + * Note, this routine closes the socket, but leaves the + * bsock memory in place. + */ void BSOCK::close() { BSOCK *bsock = this; BSOCK *next; + if (bsock->is_closed()) { + return; + } if (!m_duped) { clear_locking(); } for (; bsock; bsock = next) { next = bsock->m_next; /* get possible pointer to next before destoryed */ + bsock->set_closed(); + bsock->set_terminated(); if (!bsock->m_duped) { /* Shutdown tls cleanly. */ if (bsock->tls) { @@ -957,23 +974,36 @@ void BSOCK::close() free_tls_connection(bsock->tls); bsock->tls = NULL; } + +#ifdef HAVE_WIN32 + if (!bsock->is_timed_out()) { + win_close_wait(bsock->m_fd); /* Ensure that data is not discarded */ + } +#else if (bsock->is_timed_out()) { shutdown(bsock->m_fd, SHUT_RDWR); /* discard any pending I/O */ } +#endif + /* On Windows this discards data if we did not do a close_wait() */ socketClose(bsock->m_fd); /* normal close */ } - bsock->destroy(); } return; } +/* + * Destroy the socket (i.e. release all resources) + * including and duped sockets. + */ void BSOCK::destroy() { + this->close(); /* Ensure that socket is closed */ + if (msg) { free_pool_memory(msg); msg = NULL; } else { - ASSERT(1 == 0); /* double close */ + ASSERT2(1 == 0, "Two calls to destroy socket"); /* double destroy */ } if (errmsg) { free_pool_memory(errmsg); @@ -990,7 +1020,10 @@ void BSOCK::destroy() if (src_addr) { free(src_addr); src_addr = NULL; - } + } + if (m_next) { + m_next->destroy(); + } free(this); } @@ -1092,3 +1125,68 @@ bail_out: dir->host(), dir->port()); return false; } + +/* Try to limit the bandwidth of a network connection + */ +void BSOCK::control_bwlimit(int bytes) +{ + btime_t now, temp; + if (bytes == 0) { + return; + } + + now = get_current_btime(); /* microseconds */ + temp = now - m_last_tick; /* microseconds */ + + m_nb_bytes += bytes; + + /* Less than 0.1ms since the last call, see the next time */ + if (temp < 100) { + return; + } + + if (temp > 10000000) { /* Take care of clock problems (>10s) */ + m_nb_bytes = bytes; + m_last_tick = now; + return; + } + + /* Remove what was authorised to be written in temp us */ + m_nb_bytes -= (int64_t)(temp * ((double)m_bwlimit / 1000000.0)); + + if (m_nb_bytes < 0) { + m_nb_bytes = 0; + } + + /* What exceed should be converted in sleep time */ + int64_t usec_sleep = (int64_t)(m_nb_bytes /((double)m_bwlimit / 1000000.0)); + if (usec_sleep > 100) { + bmicrosleep(0, usec_sleep); /* TODO: Check that bmicrosleep slept enough or sleep again */ + m_last_tick = get_current_btime(); + m_nb_bytes = 0; + } else { + m_last_tick = now; + } +} + +#ifdef HAVE_WIN32 +/* + * closesocket is supposed to do a graceful disconnect under Window + * but it doesn't. Comments on http://msdn.microsoft.com/en-us/li + * confirm this behaviour. DisconnectEx is required instead, but + * that function needs to be retrieved via WS IOCTL + */ +static void +win_close_wait(int fd) +{ + int ret; + GUID disconnectex_guid = WSAID_DISCONNECTEX; + DWORD bytes_returned; + LPFN_DISCONNECTEX DisconnectEx; + ret = WSAIoctl(fd, SIO_GET_EXTENSION_FUNCTION_POINTER, &disconnectex_guid, sizeof(disconnectex_guid), &DisconnectEx, sizeof(DisconnectEx), &bytes_returned, NULL, NULL); + Dmsg1(100, "WSAIoctl(SIO_GET_EXTENSION_FUNCTION_POINTER, WSAID_DISCONNECTEX) ret = %d\n", ret); + if (!ret) { + DisconnectEx(fd, NULL, 0, 0); + } +} +#endif diff --git a/bacula/src/lib/bsock.h b/bacula/src/lib/bsock.h index fa2ad2a1ec..7c82db1c87 100644 --- a/bacula/src/lib/bsock.h +++ b/bacula/src/lib/bsock.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2009 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Bacula Sock Class definition @@ -38,7 +26,6 @@ * Negative msglen, is special "signal" (no data follows). * See below for SIGNAL codes. * - * Version $Id$ */ #ifndef __BSOCK_H_ @@ -46,12 +33,14 @@ struct btimer_t; /* forward reference */ class BSOCK; +/* Effectively disable the bsock time out */ +#define BSOCK_TIMEOUT 3600 * 24 * 200; /* default 200 days */ btimer_t *start_bsock_timer(BSOCK *bs, uint32_t wait); void stop_bsock_timer(btimer_t *wid); class BSOCK { -/* +/* * Note, keep this public part before the private otherwise * bat breaks on some systems such as RedHat. */ @@ -85,26 +74,32 @@ private: char *m_host; /* Host name/IP */ int m_port; /* desired port */ btimer_t *m_tid; /* timer id */ - boffset_t m_data_end; /* offset of last valid data written */ - int32_t m_FileIndex; /* last valid attr spool FI */ + boffset_t m_data_end; /* offset of data written */ + boffset_t m_last_data_end; /* offset of last valid data written */ + int32_t m_FileIndex; /* attr spool FI */ + int32_t m_lastFileIndex; /* last valid attr spool FI */ volatile bool m_timed_out: 1; /* timed out in read/write */ volatile bool m_terminated: 1; /* set when BNET_TERMINATE arrives */ + bool m_closed: 1; /* set when socket is closed */ bool m_duped: 1; /* set if duped BSOCK */ bool m_spool: 1; /* set for spooling */ bool m_use_locking: 1; /* set to use locking */ + int64_t m_bwlimit; /* set to limit bandwidth */ + int64_t m_nb_bytes; /* bytes sent/recv since the last tick */ + btime_t m_last_tick; /* last tick used by bwlimit */ + void fin_init(JCR * jcr, int sockfd, const char *who, const char *host, int port, struct sockaddr *lclient_addr); bool open(JCR *jcr, const char *name, char *host, char *service, int port, utime_t heart_beat, int *fatal); - + public: /* methods -- in bsock.c */ void init(); - void free_bsock(); void free_tls(); bool connect(JCR * jcr, int retry_interval, utime_t max_retry_time, - utime_t heart_beat, const char *name, char *host, + utime_t heart_beat, const char *name, char *host, char *service, int port, int verbose); int32_t recv(); bool send(); @@ -127,43 +122,53 @@ public: bool set_locking(); /* in bsock.c */ void clear_locking(); /* in bsock.c */ void set_source_address(dlist *src_addr_list); + void control_bwlimit(int bytes); /* in bsock.c */ /* Inline functions */ + void suppress_error_messages(bool flag) { m_suppress_error_msgs = flag; }; void set_jcr(JCR *jcr) { m_jcr = jcr; }; void set_who(char *who) { m_who = who; }; void set_host(char *host) { m_host = host; }; void set_port(int port) { m_port = port; }; - char *who() { return m_who; }; - char *host() { return m_host; }; - int port() { return m_port; }; - JCR *jcr() { return m_jcr; }; - JCR *get_jcr() { return m_jcr; }; - bool is_spooling() { return m_spool; }; - bool is_duped() { return m_duped; }; - bool is_terminated() { return m_terminated; }; - bool is_timed_out() { return m_timed_out; }; - bool is_stop() { return errors || is_terminated(); } - bool is_error() { errno = b_errno; return errors; } - void set_data_end(int32_t FileIndex) { + char *who() const { return m_who; }; + char *host() const { return m_host; }; + int port() const { return m_port; }; + JCR *jcr() const { return m_jcr; }; + JCR *get_jcr() const { return m_jcr; }; + bool is_spooling() const { return m_spool; }; + bool is_duped() const { return m_duped; }; + bool is_terminated() const { return m_terminated; }; + bool is_timed_out() const { return m_timed_out; }; + bool is_closed() const { return m_closed; }; + bool is_open() const { return !m_closed; }; + bool is_stop() const { return errors || is_terminated() || is_closed(); } + bool is_error() { errno = b_errno; return errors; }; + void set_data_end(int32_t FileIndex) { if (m_spool && FileIndex > m_FileIndex) { - m_FileIndex = FileIndex - 1; + m_lastFileIndex = m_FileIndex; + m_last_data_end = m_data_end; + m_FileIndex = FileIndex; m_data_end = ftello(m_spool_fd); } }; - boffset_t get_data_end() { return m_data_end; }; - int32_t get_FileIndex() { return m_FileIndex; }; + boffset_t get_last_data_end() { return m_last_data_end; }; + int32_t get_lastFileIndex() { return m_lastFileIndex; }; + void set_bwlimit(int64_t maxspeed) { m_bwlimit = maxspeed; }; + bool use_bwlimit() { return m_bwlimit > 0;}; void set_spooling() { m_spool = true; }; void clear_spooling() { m_spool = false; }; void set_duped() { m_duped = true; }; void set_timed_out() { m_timed_out = true; }; void clear_timed_out() { m_timed_out = false; }; void set_terminated() { m_terminated = true; }; + void set_closed() { m_closed = true; }; void start_timer(int sec) { m_tid = start_bsock_timer(this, sec); }; void stop_timer() { stop_bsock_timer(m_tid); }; + void swap_msgs(); }; -/* - * Signal definitions for use in bnet_sig() +/* + * Signal definitions for use in bsock->signal() * Note! These must be negative. There are signals that are generated * by the bsock software not by the OS ... */ @@ -193,7 +198,7 @@ enum { BNET_RUN_CMD = -23, /* Run command follows */ BNET_YESNO = -24, /* Request yes no response */ BNET_START_RTREE = -25, /* Start restore tree mode */ - BNET_END_RTREE = -26, /* End restore tree mode */ + BNET_END_RTREE = -26, /* End restore tree mode */ BNET_SUB_PROMPT = -27, /* Indicate we are at a subprompt */ BNET_TEXT_INPUT = -28 /* Get text input from user */ }; @@ -201,9 +206,9 @@ enum { #define BNET_SETBUF_READ 1 /* Arg for bnet_set_buffer_size */ #define BNET_SETBUF_WRITE 2 /* Arg for bnet_set_buffer_size */ -/* +/* * Return status from bnet_recv() - * Note, the HARDEOF and ERROR refer to comm status/problems + * Note, the HARDEOF and ERROR refer to comm status/problems * rather than the BNET_xxx above, which are software signals. */ enum { @@ -226,5 +231,14 @@ int32_t read_nbytes(BSOCK * bsock, char *ptr, int32_t nbytes); int32_t write_nbytes(BSOCK * bsock, char *ptr, int32_t nbytes); BSOCK *new_bsock(); +/* + * Completely release the socket packet, and NULL the pointer + */ +#define free_bsock(a) do{if(a){(a)->close(); (a)->destroy(); (a)=NULL;}} while(0) + +/* + * Does the socket exist and is it open? + */ +#define is_bsock_open(a) ((a) && (a)->is_open()) #endif /* __BSOCK_H_ */ diff --git a/bacula/src/lib/bsys.c b/bacula/src/lib/bsys.c index 7900e3cf58..b93b2b280b 100644 --- a/bacula/src/lib/bsys.c +++ b/bacula/src/lib/bsys.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2012 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Miscellaneous Bacula memory and thread safe routines @@ -44,10 +32,83 @@ static pthread_mutex_t timer_mutex = PTHREAD_MUTEX_INITIALIZER; static pthread_cond_t timer = PTHREAD_COND_INITIALIZER; +/* + * Quote a string + */ +POOLMEM *quote_string(POOLMEM *snew, const char *old) +{ + char *n; + int i; + + if (!old) { + strcpy(snew, "null"); + return snew; + } + n = snew; + *n++ = '"'; + for (i=0; old[i]; i++) { + switch (old[i]) { + case '"': + *n++ = '\\'; + *n++ = '"'; + break; + case '\\': + *n++ = '\\'; + *n++ = '\\'; + break; + default: + *n++ = old[i]; + break; + } + } + *n++ = '"'; + *n = 0; + return snew; +} + +/* + * Quote a where (list of addresses separated by spaces) + */ +POOLMEM *quote_where(POOLMEM *snew, const char *old) +{ + char *n; + int i; + + if (!old) { + strcpy(snew, "null"); + return snew; + } + n = snew; + *n++ = '"'; + for (i=0; old[i]; i++) { + switch (old[i]) { + case ' ': + *n++ = '"'; + *n++ = ','; + *n++ = '"'; + break; + case '"': + *n++ = '\\'; + *n++ = '"'; + break; + case '\\': + *n++ = '\\'; + *n++ = '\\'; + break; + default: + *n++ = old[i]; + break; + } + } + *n++ = '"'; + *n = 0; + return snew; +} + /* * This routine is a somewhat safer unlink in that it - * allows you to run a regex on the filename before - * excepting it. It also requires the file to be in + * allows you to run a regex on the filename before + * excepting it. It also requires the file to be in * the working directory. */ int safer_unlink(const char *pathname, const char *regx) @@ -119,7 +180,7 @@ int bmicrosleep(int32_t sec, int32_t usec) timeout.tv_sec++; } - Dmsg2(200, "pthread_cond_timedwait sec=%lld usec=%d\n", sec, usec); + Dmsg2(200, "pthread_cond_timedwait sec=%d usec=%d\n", sec, usec); /* Note, this unlocks mutex during the sleep */ P(timer_mutex); stat = pthread_cond_timedwait(&timer, &timer_mutex, &timeout); @@ -190,15 +251,26 @@ bool bstrcmp(const char *s1, const char *s2) return strcmp(s1, s2) == 0; } +/* + * Allows one or both pointers to be NULL + */ +bool bstrcasecmp(const char *s1, const char *s2) +{ + if (s1 == s2) return true; + if (s1 == NULL || s2 == NULL) return false; + return strcasecmp(s1, s2) == 0; +} + + /* * Get character length of UTF-8 string * * Valid UTF-8 codes - * U-00000000 - U-0000007F: 0xxxxxxx - * U-00000080 - U-000007FF: 110xxxxx 10xxxxxx - * U-00000800 - U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx - * U-00010000 - U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx - * U-00200000 - U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx + * U-00000000 - U-0000007F: 0xxxxxxx + * U-00000080 - U-000007FF: 110xxxxx 10xxxxxx + * U-00000800 - U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx + * U-00010000 - U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx + * U-00200000 - U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx * U-04000000 - U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx */ int cstrlen(const char *str) @@ -465,7 +537,7 @@ void create_pid_file(char *dir, const char *progname, int port) read(pidfd, &pidbuf, sizeof(pidbuf)) < 0 || sscanf(pidbuf, "%d", &oldpid) != 1) { berrno be; - Emsg2(M_ERROR_TERM, 0, _("Cannot open pid file. %s ERR=%s\n"), fname, + Emsg2(M_ERROR_TERM, 0, _("Cannot open pid file. %s ERR=%s\n"), fname, be.bstrerror()); } /* Some OSes (IRIX) don't bother to clean out the old pid files after a crash, and @@ -494,7 +566,7 @@ void create_pid_file(char *dir, const char *progname, int port) del_pid_file_ok = TRUE; /* we created it so we can delete it */ } else { berrno be; - Emsg2(M_ERROR_TERM, 0, _("Could not open pid file. %s ERR=%s\n"), fname, + Emsg2(M_ERROR_TERM, 0, _("Could not open pid file. %s ERR=%s\n"), fname, be.bstrerror()); } free_pool_memory(fname); @@ -553,7 +625,7 @@ void read_state_file(char *dir, const char *progname, int port) if ((sfd = open(fname, O_RDONLY|O_BINARY)) < 0) { berrno be; Dmsg3(010, "Could not open state file. sfd=%d size=%d: ERR=%s\n", - sfd, sizeof(hdr), be.bstrerror()); + sfd, (int)sizeof(hdr), be.bstrerror()); goto bail_out; } if ((stat=read(sfd, &hdr, hdr_size)) != hdr_size) { @@ -597,7 +669,7 @@ void write_state_file(char *dir, const char *progname, int port) int sfd; bool ok = false; POOLMEM *fname = get_pool_memory(PM_FNAME); - + P(state_mutex); /* Only one job at a time can call here */ Mmsg(&fname, "%s/%s.%d.state", dir, progname, port); /* Create new state file */ @@ -774,6 +846,19 @@ char *escape_filename(const char *file_path) return escaped_path; } +/* + * For the moment preventing suspensions is only + * implement on Windows. + */ +#ifndef HAVE_WIN32 +void prevent_os_suspensions() +{ } + +void allow_os_suspensions() +{ } +#endif + + #if HAVE_BACKTRACE && HAVE_GCC #include #include @@ -783,10 +868,10 @@ void stack_trace() size_t stack_depth; void *stack_addrs[max_depth]; char **stack_strings; - + stack_depth = backtrace(stack_addrs, max_depth); stack_strings = backtrace_symbols(stack_addrs, stack_depth); - + for (size_t i = 3; i < stack_depth; i++) { size_t sz = 200; /* just a guess, template names will go much wider */ char *function = (char *)actuallymalloc(sz); @@ -803,7 +888,7 @@ void stack_trace() *begin++ = '\0'; *end = '\0'; /* found our mangled name, now in [begin, end] */ - + int status; char *ret = abi::__cxa_demangle(begin, function, &sz, &status); if (ret) { diff --git a/bacula/src/lib/btime.c b/bacula/src/lib/btime.c index 175d77e26b..3a1a151bb5 100644 --- a/bacula/src/lib/btime.c +++ b/bacula/src/lib/btime.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2011 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Bacula floating point time and date routines -- John Walker @@ -32,8 +20,8 @@ * */ - -/* Concerning times. There are a number of differnt time standards +/* + * Concerning times. There are a number of different time standards * in Bacula (fdate_t, ftime_t, time_t (Unix standard), btime_t, and * utime_t). fdate_t and ftime_t are deprecated and should no longer * be used, and in general, Unix time time_t should no longer be used, @@ -74,8 +62,19 @@ char *bstrftimes(char *dt, int maxlen, utime_t utime) return dt; } +/* Formatted time with day name for user display: dd-Mon hh:mm */ +char *bstrftime_dn(char *dt, int maxlen, utime_t utime) +{ + time_t time = (time_t)utime; + struct tm tm; + + /* ***FIXME**** the format and localtime_r() should be user configurable */ + (void)localtime_r(&time, &tm); + strftime(dt, maxlen, "%a %d-%b %H:%M", &tm); + return dt; +} -/* Formatted time for user display: dd-Mon hh:mm */ +/* Formatted time (no year) for user display: dd-Mon hh:mm */ char *bstrftime_ny(char *dt, int maxlen, utime_t utime) { time_t time = (time_t)utime; @@ -182,10 +181,35 @@ utime_t btime_to_utime(btime_t bt) return (utime_t)(bt/1000000); } +/* + * Definition of a leap year from Wikipedia. + * I knew it anyway but better check. + */ +static bool is_leap_year(int year) +{ + if (year % 400 == 0) return true; + if (year % 100 == 0) return false; + if (year % 4 == 0) return true; + return false; +} + +/* + * Return the last day of the month, base 0 + * month=0-11, year is actual year + * ldom is base 0 + */ +int tm_ldom(int month, int year) +{ /* jan feb mar apr may jun jul aug sep oct nov dec */ + static int dom[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; + + if (is_leap_year(year) && month == 1) return 28; + return dom[month] - 1; +} + /* * Return the week of the month, base 0 (wom) * given tm_mday and tm_wday. Value returned - * can be from 0 to 4 => week1, ... week5 + * can be from 0 to 5 => week1, ... week6 */ int tm_wom(int mday, int wday) { @@ -223,7 +247,7 @@ int tm_woy(time_t stime) tm_yday = tm.tm_yday; tm.tm_mon = 0; tm.tm_mday = 4; - tm.tm_isdst = 0; /* 4 Jan is not DST */ + tm.tm_isdst = 0; /* 4 Jan is not DST */ time4 = mktime(&tm); (void)localtime_r(&time4, &tm); fty = 1 - tm.tm_wday; @@ -257,8 +281,8 @@ void get_current_time(struct date_time *dt) } -/* date_encode -- Encode civil date as a Julian day number. */ +/* date_encode -- Encode civil date as a Julian day number. */ /* Deprecated. Do not use. */ fdate_t date_encode(uint32_t year, uint8_t month, uint8_t day) { diff --git a/bacula/src/lib/btime.h b/bacula/src/lib/btime.h index c269327898..8da4f4d1dc 100644 --- a/bacula/src/lib/btime.h +++ b/bacula/src/lib/btime.h @@ -1,39 +1,24 @@ - -/* - - See btime.c for defintions. - - Version $Id$ - - */ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2006 Free Software Foundation Europe e.V. - - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ +/* + * See btime.c for defintions. + * Kern Sibbald, MM + */ + #ifndef __btime_INCLUDED #define __btime_INCLUDED @@ -45,12 +30,14 @@ utime_t btime_to_utime(btime_t bt); /* bacula time to utime_t */ int tm_wom(int mday, int wday); int tm_woy(time_t stime); +int tm_ldom(int month, int year); char *bstrutime(char *dt, int maxlen, utime_t tim); char *bstrftime(char *dt, int maxlen, utime_t tim); char *bstrftimes(char *dt, int maxlen, utime_t tim); char *bstrftime_ny(char *dt, int maxlen, utime_t tim); char *bstrftime_nc(char *dt, int maxlen, utime_t tim); +char *bstrftime_dn(char *dt, int maxlen, utime_t tim); utime_t str_to_utime(char *str); diff --git a/bacula/src/lib/btimers.c b/bacula/src/lib/btimers.c index 67093ec04f..d73b3c872d 100644 --- a/bacula/src/lib/btimers.c +++ b/bacula/src/lib/btimers.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2004-2011 Free Software Foundation Europe e.V. + Copyright (C) 2004-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Process and thread timer routines, built on top of watchdogs. @@ -176,7 +164,7 @@ btimer_t *start_bsock_timer(BSOCK *bsock, uint32_t wait) wid->type = TYPE_BSOCK; wid->tid = pthread_self(); wid->bsock = bsock; - wid->jcr = bsock->jcr(); + wid->jcr = bsock->jcr(); wid->wd->callback = callback_thread_timer; wid->wd->one_shot = true; diff --git a/bacula/src/lib/btimers.h b/bacula/src/lib/btimers.h index 72c2d1c917..a638aa5815 100644 --- a/bacula/src/lib/btimers.h +++ b/bacula/src/lib/btimers.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2003-2007 Free Software Foundation Europe e.V. + Copyright (C) 2003-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Process and thread timer routines, built on top of watchdogs. diff --git a/bacula/src/lib/cram-md5.c b/bacula/src/lib/cram-md5.c index f2aa2f7530..b1a9443b98 100644 --- a/bacula/src/lib/cram-md5.c +++ b/bacula/src/lib/cram-md5.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2001-2011 Free Software Foundation Europe e.V. + Copyright (C) 2001-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Challenge Response Authentication Method using MD5 (CRAM-MD5) @@ -69,23 +57,23 @@ bool cram_md5_challenge(BSOCK *bs, const char *password, int tls_local_need, int /* Send challenge -- no hashing yet */ bsnprintf(chal, sizeof(chal), "<%u.%u@%s>", (uint32_t)random(), (uint32_t)time(NULL), host); if (compatible) { - Dmsg2(dbglvl, "send: auth cram-md5 %s ssl=%d\n", chal, tls_local_need); + Dmsg2(dbglvl, "send: auth cram-md5 challenge %s ssl=%d\n", chal, tls_local_need); if (!bs->fsend("auth cram-md5 %s ssl=%d\n", chal, tls_local_need)) { - Dmsg1(dbglvl, "Bnet send challenge comm error. ERR=%s\n", bs->bstrerror()); + Dmsg1(dbglvl, "Send challenge comm error. ERR=%s\n", bs->bstrerror()); return false; } } else { /* Old non-compatible system */ - Dmsg2(dbglvl, "send: auth cram-md5 %s ssl=%d\n", chal, tls_local_need); + Dmsg2(dbglvl, "send: auth cram-md5 challenge %s ssl=%d\n", chal, tls_local_need); if (!bs->fsend("auth cram-md5 %s ssl=%d\n", chal, tls_local_need)) { - Dmsg1(dbglvl, "Bnet send challenge comm error. ERR=%s\n", bs->bstrerror()); + Dmsg1(dbglvl, "Send challenge comm error. ERR=%s\n", bs->bstrerror()); return false; } } /* Read hashed response to challenge */ if (bs->wait_data(180) <= 0 || bs->recv() <= 0) { - Dmsg1(dbglvl, "Bnet receive challenge response comm error. ERR=%s\n", bs->bstrerror()); + Dmsg1(dbglvl, "Receive cram-md5 response comm error. ERR=%s\n", bs->bstrerror()); bmicrosleep(5, 0); return false; } @@ -97,7 +85,7 @@ bool cram_md5_challenge(BSOCK *bs, const char *password, int tls_local_need, int if (ok) { Dmsg1(dbglvl, "Authenticate OK %s\n", host); } else { - bin_to_base64(host, sizeof(host), (char *)hmac, 16, false); + bin_to_base64(host, sizeof(host), (char *)hmac, 16, false); ok = strcmp(bs->msg, host) == 0; if (!ok) { Dmsg2(dbglvl, "Authenticate NOT OK: wanted %s, got %s\n", host, bs->msg); @@ -133,7 +121,7 @@ bool cram_md5_respond(BSOCK *bs, const char *password, int *tls_remote_need, int *compatible = true; } else if (sscanf(bs->msg, "auth cram-md5 %s ssl=%d", chal, tls_remote_need) != 2) { if (sscanf(bs->msg, "auth cram-md5 %s\n", chal) != 1) { - Dmsg1(dbglvl, "Cannot scan challenge: %s", bs->msg); + Dmsg1(dbglvl, "Cannot scan received response to challenge: %s", bs->msg); bs->fsend(_("1999 Authorization failed.\n")); bmicrosleep(5, 0); return false; @@ -142,6 +130,7 @@ bool cram_md5_respond(BSOCK *bs, const char *password, int *tls_remote_need, int hmac_md5((uint8_t *)chal, strlen(chal), (uint8_t *)password, strlen(password), hmac); bs->msglen = bin_to_base64(bs->msg, 50, (char *)hmac, 16, *compatible) + 1; +// Don't turn the following on except for local debugging -- security // Dmsg3(100, "get_auth: chal=%s pw=%s hmac=%s\n", chal, password, bs->msg); if (!bs->send()) { Dmsg1(dbglvl, "Send challenge failed. ERR=%s\n", bs->bstrerror()); @@ -149,7 +138,7 @@ bool cram_md5_respond(BSOCK *bs, const char *password, int *tls_remote_need, int } Dmsg1(99, "sending resp to challenge: %s\n", bs->msg); if (bs->wait_data(180) <= 0 || bs->recv() <= 0) { - Dmsg1(dbglvl, "Receive chanllenge response failed. ERR=%s\n", bs->bstrerror()); + Dmsg1(dbglvl, "Receive cram-md5 response failed. ERR=%s\n", bs->bstrerror()); bmicrosleep(5, 0); return false; } diff --git a/bacula/src/lib/crc32.c b/bacula/src/lib/crc32.c index ac2ff94098..b0ba199f67 100644 --- a/bacula/src/lib/crc32.c +++ b/bacula/src/lib/crc32.c @@ -1,25 +1,17 @@ /* - crc32.c 32 bit CRC + Bacula® - The Network Backup Solution Copyright (C) 2010 Joakim Tjernlund - This file is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This file is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with Bacula. If not, see . + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Original 32 bit CRC. Algorithm from RFC 2083 (png format) @@ -426,7 +418,7 @@ static void usage() * Reads a single ASCII file and prints the HEX md5 sum. */ #include -int main(int argc, char *argv[]) +int main(int argc, char *argv[]) { FILE *fd; char buf[5000]; @@ -457,7 +449,7 @@ int main(int argc, char *argv[]) uint32_t res; while (fgets(buf, sizeof(buf), fd)) { res = bcrc32((unsigned char *)buf, strlen(buf)); - printf("%02x\n", res); + printf("%02x\n", res); } printf(" %s\n", argv[0]); fclose(fd); diff --git a/bacula/src/lib/crypto.c b/bacula/src/lib/crypto.c index 7ffa20ecc5..f62e97ab7e 100644 --- a/bacula/src/lib/crypto.c +++ b/bacula/src/lib/crypto.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2005-2011 Free Software Foundation Europe e.V. + Copyright (C) 2005-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * crypto.c Encryption support functions @@ -232,7 +220,7 @@ IMPLEMENT_STACK_OF(RecipientInfo) #define sk_SignerInfo_is_sorted(st) SKM_sk_is_sorted(SignerInfo, (st)) #define d2i_ASN1_SET_OF_SignerInfo(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(SignerInfo, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) + SKM_ASN1_SET_OF_d2i(SignerInfo, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) #define i2d_ASN1_SET_OF_SignerInfo(st, pp, i2d_func, ex_tag, ex_class, is_set) \ SKM_ASN1_SET_OF_i2d(SignerInfo, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) #define ASN1_seq_pack_SignerInfo(st, i2d_func, buf, len) \ @@ -262,7 +250,7 @@ IMPLEMENT_STACK_OF(RecipientInfo) #define sk_RecipientInfo_is_sorted(st) SKM_sk_is_sorted(RecipientInfo, (st)) #define d2i_ASN1_SET_OF_RecipientInfo(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ - SKM_ASN1_SET_OF_d2i(RecipientInfo, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) + SKM_ASN1_SET_OF_d2i(RecipientInfo, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) #define i2d_ASN1_SET_OF_RecipientInfo(st, pp, i2d_func, ex_tag, ex_class, is_set) \ SKM_ASN1_SET_OF_i2d(RecipientInfo, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) #define ASN1_seq_pack_RecipientInfo(st, i2d_func, buf, len) \ @@ -369,7 +357,7 @@ static ASN1_OCTET_STRING *openssl_cert_keyid(X509 *cert) { * Returns: A pointer to a X509 KEYPAIR object on success. * NULL on failure. */ -X509_KEYPAIR *crypto_keypair_new(void) +X509_KEYPAIR *crypto_keypair_new(void) { X509_KEYPAIR *keypair; @@ -465,7 +453,7 @@ int crypto_keypair_load_cert(X509_KEYPAIR *keypair, const char *file) /* Validate the public key type (only RSA is supported) */ if (EVP_PKEY_type(keypair->pubkey->type) != EVP_PKEY_RSA) { - Jmsg1(NULL, M_ERROR, 0, + Jmsg1(NULL, M_ERROR, 0, _("Unsupported key type provided: %d\n"), EVP_PKEY_type(keypair->pubkey->type)); goto err; } @@ -656,7 +644,7 @@ bool crypto_digest_update(DIGEST *digest, const uint8_t *data, uint32_t length) Dmsg0(150, "digest update failed\n"); openssl_post_errors(digest->jcr, M_ERROR, _("OpenSSL digest update failed")); return false; - } else { + } else { return true; } } @@ -725,7 +713,7 @@ SIGNATURE *crypto_sign_new(JCR *jcr) * Returns: CRYPTO_ERROR_NONE on success, with the newly allocated DIGEST in digest. * A crypto_error_t value on failure. */ -crypto_error_t crypto_sign_get_digest(SIGNATURE *sig, X509_KEYPAIR *keypair, +crypto_error_t crypto_sign_get_digest(SIGNATURE *sig, X509_KEYPAIR *keypair, crypto_digest_t &type, DIGEST **digest) { STACK_OF(SignerInfo) *signers; @@ -1215,7 +1203,7 @@ crypto_error_t crypto_session_decode(const uint8_t *data, uint32_t length, alist /* Match against the subjectKeyIdentifier */ if (M_ASN1_OCTET_STRING_cmp(keypair->keyid, ri->subjectKeyIdentifier) == 0) { /* Match found, extract symmetric encryption session data */ - + /* RSA is required. */ assert(EVP_PKEY_type(keypair->privkey->type) == EVP_PKEY_RSA); @@ -1283,7 +1271,7 @@ CIPHER_CONTEXT *crypto_cipher_new(CRYPTO_SESSION *cs, bool encrypt, uint32_t *bl * Acquire a cipher instance for the given ASN.1 cipher NID */ if ((ec = EVP_get_cipherbyobj(cs->cryptoData->contentEncryptionAlgorithm)) == NULL) { - Jmsg1(NULL, M_ERROR, 0, + Jmsg1(NULL, M_ERROR, 0, _("Unsupported contentEncryptionAlgorithm: %d\n"), OBJ_obj2nid(cs->cryptoData->contentEncryptionAlgorithm)); free(cipher_ctx); return NULL; @@ -1316,7 +1304,7 @@ CIPHER_CONTEXT *crypto_cipher_new(CRYPTO_SESSION *cs, bool encrypt, uint32_t *bl openssl_post_errors(M_ERROR, _("Encryption session provided an invalid IV")); goto err; } - + /* Add the key and IV to the cipher context */ if (!EVP_CipherInit_ex(&cipher_ctx->ctx, NULL, NULL, cs->session_key, M_ASN1_STRING_data(cs->cryptoData->iv), -1)) { openssl_post_errors(M_ERROR, _("OpenSSL cipher context key/IV initialization failed")); @@ -1388,7 +1376,7 @@ int init_crypto (void) if ((stat = openssl_init_threads()) != 0) { berrno be; - Jmsg1(NULL, M_ABORT, 0, + Jmsg1(NULL, M_ABORT, 0, _("Unable to init OpenSSL threading: ERR=%s\n"), be.bstrerror(stat)); } @@ -1518,7 +1506,7 @@ bool crypto_digest_update(DIGEST *digest, const uint8_t *data, uint32_t length) } } -bool crypto_digest_finalize(DIGEST *digest, uint8_t *dest, uint32_t *length) +bool crypto_digest_finalize(DIGEST *digest, uint8_t *dest, uint32_t *length) { switch (digest->type) { case CRYPTO_DIGEST_MD5: @@ -1558,8 +1546,8 @@ int cleanup_crypto (void) { return 0; } SIGNATURE *crypto_sign_new(JCR *jcr) { return NULL; } -crypto_error_t crypto_sign_get_digest (SIGNATURE *sig, X509_KEYPAIR *keypair, - crypto_digest_t &type, DIGEST **digest) +crypto_error_t crypto_sign_get_digest (SIGNATURE *sig, X509_KEYPAIR *keypair, + crypto_digest_t &type, DIGEST **digest) { return CRYPTO_ERROR_INTERNAL; } crypto_error_t crypto_sign_verify (SIGNATURE *sig, X509_KEYPAIR *keypair, DIGEST *digest) { return CRYPTO_ERROR_INTERNAL; } @@ -1606,7 +1594,7 @@ int crypto_default_pem_callback(char *buf, int size, const void *userdata) * Returns the ASCII name of the digest type. * Returns: ASCII name of digest type. */ -const char *crypto_digest_name(DIGEST *digest) +const char *crypto_digest_name(DIGEST *digest) { switch (digest->type) { case CRYPTO_DIGEST_MD5: diff --git a/bacula/src/lib/crypto.h b/bacula/src/lib/crypto.h index d7a6299e6e..2a75302330 100644 --- a/bacula/src/lib/crypto.h +++ b/bacula/src/lib/crypto.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2005-2007 Free Software Foundation Europe e.V. + Copyright (C) 2005-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * crypto.h Encryption support functions @@ -76,10 +64,17 @@ typedef enum { CRYPTO_DIGEST_SHA512 = 4 } crypto_digest_t; + +#ifdef HAVE_SHA2 +# define CRYPTO_DIGEST_DEFAULT CRYPTO_DIGEST_SHA256 +#else +# define CRYPTO_DIGEST_DEFAULT CRYPTO_DIGEST_SHA1 +#endif + /* Cipher Types */ typedef enum { /* These are not stored on disk */ - CRYPTO_CIPHER_AES_128_CBC, + CRYPTO_CIPHER_AES_128_CBC, /* Keep AES128 as the first one */ CRYPTO_CIPHER_AES_192_CBC, CRYPTO_CIPHER_AES_256_CBC, CRYPTO_CIPHER_BLOWFISH_CBC diff --git a/bacula/src/lib/daemon.c b/bacula/src/lib/daemon.c index 72b3365caa..deb030fbe5 100644 --- a/bacula/src/lib/daemon.c +++ b/bacula/src/lib/daemon.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2011 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * daemon.c by Kern Sibbald 2000 @@ -40,7 +28,6 @@ #include "bacula.h" -extern int debug_level; void daemon_start() diff --git a/bacula/src/lib/devlock.c b/bacula/src/lib/devlock.c index 5b26545d3f..e716670929 100644 --- a/bacula/src/lib/devlock.c +++ b/bacula/src/lib/devlock.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2001-2011 Free Software Foundation Europe e.V. + Copyright (C) 2001-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Bacula Thread Read/Write locking code. It permits @@ -49,7 +37,7 @@ * errno on failure */ -devlock *new_devlock() +devlock *new_devlock() { devlock *lock; lock = (devlock *)malloc(sizeof (devlock)); @@ -57,14 +45,14 @@ devlock *new_devlock() return lock; } -int devlock::init(int priority) +int devlock::init(int init_priority) { int stat; devlock *rwl = this; rwl->r_active = rwl->w_active = 0; rwl->r_wait = rwl->w_wait = 0; - rwl->priority = priority; + rwl->priority = init_priority; if ((stat = pthread_mutex_init(&rwl->mutex, NULL)) != 0) { return stat; } @@ -273,7 +261,7 @@ int devlock::writelock(int areason, bool acan_take) rwl->w_active++; /* we are running */ rwl->writer_id = pthread_self(); /* save writer thread's id */ lmgr_post_lock(); - } + } rwl->reason = areason; rwl->can_take = acan_take; pthread_mutex_unlock(&rwl->mutex); diff --git a/bacula/src/lib/devlock.h b/bacula/src/lib/devlock.h index 779e53c399..2f3b6a3ab0 100644 --- a/bacula/src/lib/devlock.h +++ b/bacula/src/lib/devlock.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2001-2010 Free Software Foundation Europe e.V. + Copyright (C) 2001-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Bacula Thread Read/Write locking code. It permits @@ -66,14 +54,14 @@ private: public: devlock(int reason, bool can_take=false); ~devlock(); - int init(int initial_priority); + int init(int init_priority); int destroy(); int take_lock(take_lock_t *hold, int reason); int return_lock(take_lock_t *hold); void new_reason(int nreason) { prev_reason = reason; reason = nreason; }; void restore_reason() { reason = prev_reason; prev_reason = 0; }; - int writelock(int reason, bool can_take=false); + int writelock(int reason, bool can_take=false); int writetrylock(); int writeunlock(); void write_release(); diff --git a/bacula/src/lib/dlist.c b/bacula/src/lib/dlist.c index 2d4e507c49..1566265931 100644 --- a/bacula/src/lib/dlist.c +++ b/bacula/src/lib/dlist.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2003-2011 Free Software Foundation Europe e.V. + Copyright (C) 2003-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Bacula doubly linked list routines. @@ -270,7 +258,7 @@ void *dlist::binary_search(void *item, int compare(void *item1, void *item2)) } } /* - * low == high can only happen if low just + * low == high can only happen if low just * got incremented from cur, and we have * not yet tested cur+1 */ @@ -312,6 +300,7 @@ void dlist::remove(void *item) if (num_items == 0) { head = tail = NULL; } + ilink->prev = ilink->next = NULL; } void *dlist::next(void *item) @@ -420,7 +409,7 @@ int main() /* The following may seem a bit odd, but we create a chaing * of jcr objects. Within a jcr object, there is a buf - * that points to a malloced string containing data + * that points to a malloced string containing data */ jcr_chain = New(dlist(jcr, &jcr->link)); printf("append 20 items 0-19\n"); diff --git a/bacula/src/lib/dlist.h b/bacula/src/lib/dlist.h index dcb11f980a..4c28fc0b96 100644 --- a/bacula/src/lib/dlist.h +++ b/bacula/src/lib/dlist.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2004-2010 Free Software Foundation Europe e.V. + Copyright (C) 2004-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Written by Kern Sibbald MMIV @@ -34,7 +22,7 @@ /* ======================================================================== * * Doubly linked list -- dlist - * + * * See the end of the file for the dlistString class which * facilitates storing strings in a dlist. * @@ -92,7 +80,7 @@ public: void remove(void *item); bool empty() const; int size() const; - void *next(void *item); + void *next(void *item); void *prev(void *item); void destroy(); void *first() const; @@ -192,7 +180,7 @@ inline void * dlist::last() const } /* - * C string helper routines for dlist + * C string helper routines for dlist * The string (char *) is kept in the node * * Kern Sibbald, February 2007 @@ -200,12 +188,12 @@ inline void * dlist::last() const */ class dlistString { -public: +public: char *c_str() { return m_str; }; private: dlink m_link; - char m_str[1]; + char m_str[1]; /* !!! Don't put anything after this as this space is used * to hold the string in inline */ diff --git a/bacula/src/lib/edit.c b/bacula/src/lib/edit.c index dd7cb9002a..b5d0d5c1f5 100644 --- a/bacula/src/lib/edit.c +++ b/bacula/src/lib/edit.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2002-2011 Free Software Foundation Europe e.V. + Copyright (C) 2002-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * edit.c edit string to ascii, and ascii to internal @@ -331,7 +319,7 @@ char *edit_utime(utime_t val, char *buf, int buf_len) return buf; } -static bool strunit_to_uint64(char *str, int str_len, uint64_t *value, +static bool strunit_to_uint64(char *str, int str_len, uint64_t *value, const char **mod) { int i, mod_len; @@ -393,7 +381,7 @@ bool size_to_uint64(char *str, int str_len, uint64_t *value) bool speed_to_uint64(char *str, int str_len, uint64_t *value) { /* first item * not used */ - static const char *mod[] = {"*", "k/s", "kb/s", "m/s", "mb/s", NULL}; + static const char *mod[] = {"*", "k/s", "kb/s", "m/s", "mb/s", NULL}; return strunit_to_uint64(str, str_len, value, mod); } @@ -405,6 +393,10 @@ bool is_a_number(const char *n) { bool digit_seen = false; + if (n == NULL) { + return false; + } + if( *n == '-' || *n == '+' ) { n++; } @@ -429,8 +421,11 @@ bool is_a_number(const char *n) */ bool is_a_number_list(const char *n) { - bool previous_digit = false; + bool previous_digit = false; bool digit_seen = false; + if (n == NULL) { + return false; + } while (*n) { if (B_ISDIGIT(*n)) { previous_digit=true; @@ -442,7 +437,7 @@ bool is_a_number_list(const char *n) } n++; } - return digit_seen && *n==0; + return digit_seen && *n==0; } /* @@ -451,6 +446,9 @@ bool is_a_number_list(const char *n) bool is_an_integer(const char *n) { bool digit_seen = false; + if (n == NULL) { + return false; + } while (B_ISDIGIT(*n)) { digit_seen = true; n++; diff --git a/bacula/src/lib/fnmatch.c b/bacula/src/lib/fnmatch.c index b395b11e24..9f1658a62b 100644 --- a/bacula/src/lib/fnmatch.c +++ b/bacula/src/lib/fnmatch.c @@ -37,8 +37,6 @@ * Compares a filename or pathname to a pattern. */ -/* Version: $Id$ */ - /* Define SYS to use the system fnmatch() rather than ours */ /* #define SYS 1 */ @@ -65,7 +63,7 @@ static int rangematch(const char *, char, int, char **); static int r_fnmatch(const char *, const char *, int, int); -#ifdef SYS +#ifdef SYS int xfnmatch(const char *pattern, const char *string, int flags) #else int fnmatch(const char *pattern, const char *string, int flags) @@ -80,7 +78,7 @@ int fnmatch(const char *pattern, const char *string, int flags) return (e); } -static +static int r_fnmatch(const char *pattern, const char *string, int flags, int recur) { const char *stringstart; @@ -247,7 +245,7 @@ struct test { const char *pattern; const char *string; const int options; - const int result; + const int result; }; /* @@ -329,7 +327,7 @@ int main() for (int i=0; iname); free(item); - item = fitem; + item = fitem; } } bstrncpy(name, item->name, maxlen); @@ -174,7 +162,7 @@ char *guid_list::gid_to_name(gid_t gid, char *name, int maxlen) if (fitem != item) { /* item already there this shouldn't happen */ free(item->name); free(item); - item = fitem; + item = fitem; } } @@ -196,11 +184,11 @@ int main() printf("uid=%d name=%s gid=%d name=%s\n", i, list->uid_to_name(i, ed1, sizeof(ed1)), i, list->gid_to_name(i, ed2, sizeof(ed2))); } - + free_guid_list(list); sm_dump(false); /* unit test */ return 0; } - + #endif diff --git a/bacula/src/lib/guid_to_name.h b/bacula/src/lib/guid_to_name.h index f0ab466140..55515c850c 100644 --- a/bacula/src/lib/guid_to_name.h +++ b/bacula/src/lib/guid_to_name.h @@ -1,37 +1,24 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2007 Kern Sibbald + Copyright (C) 2007-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation, which is - listed in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Written by Kern Sibbald, July 2007 to replace idcache.c - * + * * Program to convert uid and gid into names, and cache the results * for preformance reasons. * - * Version $Id$ */ class guid_list { @@ -45,4 +32,3 @@ public: guid_list *new_guid_list(); void free_guid_list(guid_list *list); - diff --git a/bacula/src/lib/hmac.c b/bacula/src/lib/hmac.c index 0772df1538..92b9402516 100644 --- a/bacula/src/lib/hmac.c +++ b/bacula/src/lib/hmac.c @@ -1,39 +1,28 @@ -/* - * Hashed Message Authentication Code using MD5 (HMAC-MD5) - * - * hmac_md5 was based on sample code in RFC2104 (thanks guys). - * - * Adapted to Bacula by Kern E. Sibbald, February MMI. - * - */ /* Bacula® - The Network Backup Solution - Copyright (C) 2001-2006 Free Software Foundation Europe e.V. - - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version two of the GNU Lesser General - Public License as published by the Free Software Foundation plus - additions in the file LICENSE. + Copyright (C) 2001-2014 Free Software Foundation Europe e.V. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ +/* + * Hashed Message Authentication Code using MD5 (HMAC-MD5) + * + * hmac_md5 was based on sample code in RFC2104 (thanks guys). + * + * Adapted to Bacula by Kern E. Sibbald, February MMI. + * + */ + #include "bacula.h" #define PAD_LEN 64 /* PAD length */ diff --git a/bacula/src/lib/htable.c b/bacula/src/lib/htable.c index af3896037c..0e85f92099 100644 --- a/bacula/src/lib/htable.c +++ b/bacula/src/lib/htable.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2003-2011 Free Software Foundation Europe e.V. + Copyright (C) 2003-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Bacula hash table routines @@ -56,7 +44,8 @@ #define MIN_BUF_SIZE (MIN_PAGES * B_PAGE_SIZE) /* 128 Kb */ #define MAX_BUF_SIZE (MAX_PAGES * B_PAGE_SIZE) /* approx 10MB */ -static const int dbglvl = 500; +#define dbglvl 500 +#define dbglvl_mem DT_MEMORY|100 /* =================================================================== * htable @@ -76,7 +65,7 @@ void htable::malloc_big_buf(int size) mem_block = hmem; hmem->mem = mem_block->first; hmem->rem = (char *)hmem + size - hmem->mem; - Dmsg3(100, "malloc buf=%p size=%d rem=%d\n", hmem, size, hmem->rem); + Dmsg3(dbglvl_mem, "malloc buf=%p size=%d rem=%d\n", hmem, size, hmem->rem); } /* This routine frees the whole tree */ @@ -87,13 +76,13 @@ void htable::hash_big_free() for (hmem=mem_block; hmem; ) { rel = hmem; hmem = hmem->next; - Dmsg1(100, "free malloc buf=%p\n", rel); + Dmsg1(dbglvl_mem, "free malloc buf=%p\n", rel); free(rel); } } /* - * Normal hash malloc routine that gets a + * Normal hash malloc routine that gets a * "small" buffer from the big buffer */ char *htable::hash_malloc(int size) @@ -109,7 +98,7 @@ char *htable::hash_malloc(int size) mb_size = extend_length / 2; } malloc_big_buf(mb_size); - Dmsg1(100, "Created new big buffer of %ld bytes\n", mb_size); + Dmsg1(dbglvl_mem, "Created new big buffer of %ld bytes\n", mb_size); } mem_block->rem -= asize; buf = mem_block->mem; @@ -195,7 +184,7 @@ void htable::init(void *item, void *link, int tsize, int nr_pages) } malloc_big_buf(buffer_size); extend_length = buffer_size; - Dmsg1(100, "Allocated big buffer of %ld bytes\n", buffer_size); + Dmsg1(dbglvl_mem, "Allocated big buffer of %ld bytes\n", buffer_size); } uint32_t htable::size() @@ -205,7 +194,7 @@ uint32_t htable::size() /* * Take each hash link and walk down the chain of items - * that hash there counting them (i.e. the hits), + * that hash there counting them (i.e. the hits), * then report that number. * Obiously, the more hits in a chain, the more time * it takes to reference them. Empty chains are not so @@ -243,6 +232,7 @@ void htable::stats() printf("buckets=%d num_items=%d max_items=%d\n", buckets, num_items, max_items); printf("max hits in a bucket = %d\n", max); printf("total bytes malloced = %lld\n", (long long int)total_size); + printf("total bytes malloced = %lld\n", (long long int)total_size); printf("total blocks malloced = %d\n", blocks); } diff --git a/bacula/src/lib/htable.h b/bacula/src/lib/htable.h index 054f9509de..816fc793cf 100644 --- a/bacula/src/lib/htable.h +++ b/bacula/src/lib/htable.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2004-2011 Free Software Foundation Europe e.V. + Copyright (C) 2004-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Written by Kern Sibbald, MMIV diff --git a/bacula/src/lib/ini.c b/bacula/src/lib/ini.c index 61d9c39629..7be5a8618d 100644 --- a/bacula/src/lib/ini.c +++ b/bacula/src/lib/ini.c @@ -1,35 +1,23 @@ /* - Copyright (C) 2011-2011 Bacula Systems(R) SA + Bacula® - The Network Backup Solution - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can modify it under the terms of - version three of the GNU Affero General Public License as published by the - Free Software Foundation, which is listed in the file LICENSE. + Copyright (C) 2011-2014 Free Software Foundation Europe e.V. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - Bacula Systems(R) is a trademark of Bacula Systems SA. - Bacula Enterprise(TM) is a trademark of Bacula Systems SA. - - The licensor of Bacula Enterprise(TM) is Bacula Systems(R) SA, - Rue Galilee 5, 1400 Yverdon-les-Bains, Switzerland. */ - /* * Handle simple configuration file such as "ini" files. * key1 = val # comment * key2 = val # - * + * */ #include "bacula.h" @@ -57,8 +45,8 @@ static struct ini_store funcs[] = { {NULL, NULL, NULL} }; -/* - * Get handler code from handler @ +/* + * Get handler code from handler @ */ const char *ini_get_store_code(INI_ITEM_HANDLER *handler) { @@ -70,8 +58,8 @@ const char *ini_get_store_code(INI_ITEM_HANDLER *handler) return NULL; } -/* - * Get handler function from handler name +/* + * Get handler function from handler name */ INI_ITEM_HANDLER *ini_get_store_handler(const char *key) { @@ -79,7 +67,7 @@ INI_ITEM_HANDLER *ini_get_store_handler(const char *key) if (!strcmp(funcs[i].key, key)) { return funcs[i].handler; } - } + } return NULL; } @@ -108,13 +96,13 @@ static void s_err(const char *file, int line, LEX *lc, const char *msg, ...) buf, lc->line_no, lc->col_no, lc->fname, lc->line); // } else if (ini->ctx) { /* called from plugin */ -// ini->bfuncs->JobMessage(ini->ctx, __FILE__, __LINE__, M_FATAL, 0, +// ini->bfuncs->JobMessage(ini->ctx, __FILE__, __LINE__, M_FATAL, 0, // _("Config file error: %s\n" // " : Line %d, col %d of file %s\n%s\n"), // buf, lc->line_no, lc->col_no, lc->fname, lc->line); // } else { /* called from ??? */ - e_msg(file, line, M_ERROR, 0, + e_msg(file, line, M_ERROR, 0, _("Config file error: %s\n" " : Line %d, col %d of file %s\n%s\n"), buf, lc->line_no, lc->col_no, lc->fname, lc->line); @@ -137,7 +125,7 @@ void ConfigFile::clear_items() } else if (items[i].handler == ini_store_alist_str) { delete items[i].val.alistval; - items[i].val.alistval = NULL; + items[i].val.alistval = NULL; } items[i].found = false; } @@ -150,6 +138,7 @@ void ConfigFile::free_items() for (int i=0; items[i].name; i++) { bfree_and_null_const(items[i].name); bfree_and_null_const(items[i].comment); + bfree_and_null_const(items[i].default_value); } free(items); } @@ -184,7 +173,7 @@ bool ConfigFile::dump_string(const char *buf, int32_t len) out_fname = get_pool_memory(PM_FNAME); make_unique_filename(&out_fname, (int)(intptr_t)this, (char*)"configfile"); } - + fp = fopen(out_fname, "wb"); if (!fp) { return ret; @@ -209,7 +198,7 @@ bool ConfigFile::serialize(const char *fname) if (!items) { return ret; } - + fp = fopen(fname, "w"); if (!fp) { return ret; @@ -235,18 +224,18 @@ int ConfigFile::serialize(POOLMEM **buf) **buf = 0; return 0; } - + len = Mmsg(buf, "# Plugin configuration file\n# Version %d\n", version); tmp = get_pool_memory(PM_MESSAGE); for (int i=0; items[i].name ; i++) { if (items[i].comment) { - Mmsg(tmp, "OptPrompt=%s\n", items[i].comment); + Mmsg(tmp, "OptPrompt=\"%s\"\n", items[i].comment); pm_strcat(buf, tmp); } if (items[i].default_value) { - Mmsg(tmp, "OptDefault=%s\n", items[i].default_value); + Mmsg(tmp, "OptDefault=\"%s\"\n", items[i].default_value); pm_strcat(buf, tmp); } if (items[i].required) { @@ -255,7 +244,7 @@ int ConfigFile::serialize(POOLMEM **buf) } /* variable = @INT64@ */ - Mmsg(tmp, "%s=%s\n\n", + Mmsg(tmp, "%s=%s\n\n", items[i].name, ini_get_store_code(items[i].handler)); len = pm_strcat(buf, tmp); } @@ -407,7 +396,7 @@ bool ConfigFile::unserialize(const char *fname) } else if (strcasecmp("optdefault", lc->str) == 0) { assign = &(items[nb].default_value); - } else if (strcasecmp("optrequired", lc->str) == 0) { + } else if (strcasecmp("optrequired", lc->str) == 0) { items[nb].required = true; /* Don't use argument */ scan_to_eol(lc); continue; @@ -507,10 +496,10 @@ bool ini_store_alist_str(LEX *lc, ConfigFile *inifile, ini_items *item) if (item->val.alistval == NULL) { list = New(alist(10, owned_by_alist)); } else { - list = item->val.alistval; + list = item->val.alistval; } - Dmsg4(900, "Append %s to alist %p size=%d %s\n", + Dmsg4(900, "Append %s to alist %p size=%d %s\n", lc->str, list, list->size(), item->name); list->append(bstrdup(lc->str)); item->val.alistval = list; @@ -584,13 +573,21 @@ bool ini_store_bool(LEX *lc, ConfigFile *inifile, ini_items *item) if (lex_get_token(lc, T_NAME) == T_ERROR) { return false; } - if (strcasecmp(lc->str, "yes") == 0 || strcasecmp(lc->str, "true") == 0) { + if (strcasecmp(lc->str, "yes") == 0 || + strcasecmp(lc->str, "true") == 0 || + strcasecmp(lc->str, "on") == 0) + { item->val.boolval = true; - } else if (strcasecmp(lc->str, "no") == 0 || strcasecmp(lc->str, "false") == 0) { + + } else if (strcasecmp(lc->str, "no") == 0 || + strcasecmp(lc->str, "false") == 0 || + strcasecmp(lc->str, "off") == 0) + { item->val.boolval = false; + } else { /* YES and NO must not be translated */ - scan_err2(lc, _("Expect %s, got: %s"), "YES, NO, TRUE, or FALSE", lc->str); + scan_err2(lc, _("Expect %s, got: %s"), "YES, NO, ON, OFF, TRUE, or FALSE", lc->str); return false; } scan_to_eol(lc); @@ -723,12 +720,12 @@ int main() fclose(fp); ini->clear_items(); ini->free_items(); - + /* Test */ if ((fp = fopen("test2.cfg", "w")) == NULL) { exit (1); } - fprintf(fp, + fprintf(fp, "# this is a comment\n" "optprompt=\"Datastore Name\"\n" "datastore=@NAME@\n" @@ -767,7 +764,7 @@ int main() ok(ini->items[pos].val.int64val == 10, "Test int"); ok(ini->items[pos].required == true, "Check required"); - ok((pos = ini->get_item("bool")) == 4, "Check bool definition"); + ok((pos = ini->get_item("bool")) == 4, "Check bool definition"); ok(ini->items[pos].val.boolval == true, "Test bool"); ok(ini->dump_results(&buf), "Test to dump results"); @@ -776,7 +773,7 @@ int main() ini->clear_items(); ini->free_items(); report(); - + free_pool_memory(buf); exit (0); } diff --git a/bacula/src/lib/ini.h b/bacula/src/lib/ini.h index aa82bcdb5a..c68994bf12 100644 --- a/bacula/src/lib/ini.h +++ b/bacula/src/lib/ini.h @@ -4,7 +4,7 @@ The main author of Bacula is Kern Sibbald, with contributions from many others, a complete list can be found in the file AUTHORS. This program is Free Software; you can modify it under the terms of - version three of the GNU Affero General Public License as published by the + version three of the GNU Affero General Public License as published by the Free Software Foundation, which is listed in the file LICENSE. This program is distributed in the hope that it will be useful, but @@ -28,24 +28,24 @@ #ifndef INI_H #define INI_H -/* +/* * Plugin has a internal C structure that describes the configuration: * struct ini_items[] * * The ConfigFile object can generate a text file that describes the C * structure. This text format is saved as RestoreObject in the catalog. - * + * * struct ini_items[] -> register_items() -> serialize() -> RestoreObject R1 * * On the Director side, at the restore time, we can analyse this text to * get the C structure. - * + * * RestoreObject R1 -> write to disk -> unserialize() -> struct ini_items[] * * Once done, we can ask questions to the user at the restore time and fill * the C struct with answers. The Director can send back as a RestoreObject * the result of the questionnaire. - * + * * struct ini_items[] -> UAContext -> dump_result() -> FD as RestoreObject R2 * * On the Plugin side, it can get back the C structure and use it. @@ -66,8 +66,8 @@ typedef union { } item_value; /* These functions are used to convert a string to the appropriate value */ -typedef -bool (INI_ITEM_HANDLER)(LEX *lc, ConfigFile *inifile, +typedef +bool (INI_ITEM_HANDLER)(LEX *lc, ConfigFile *inifile, struct ini_items *item); /* If no items are registred at the scan time, we detect this list from @@ -79,9 +79,10 @@ struct ini_items { const char *comment; /* comment associated, used in prompt */ int required; /* optional required or not */ + const char *default_value; /* optional default value */ + const char *re_value; /* optional regexp associated */ const char *in_values; /* optional list of values */ - const char *default_value; /* optional default value */ bool found; /* if val is set */ item_value val; /* val contains the value */ @@ -119,19 +120,24 @@ public: JCR *jcr; /* JCR needed for Jmsg */ int version; /* Internal version check */ int sizeof_ini_items; /* Extra check when using dynamic loading */ + bool unlink_temp_file; /* Unlink temp file when destroying object */ struct ini_items *items; /* Structure of the config file */ POOLMEM *out_fname; /* Can be used to dump config to disk */ POOLMEM *edit; /* Can be used to build result file */ + char *plugin_name; /* Used to store owner of this ConfigFile */ ConfigFile() { lc = NULL; jcr = NULL; items = NULL; out_fname = NULL; + plugin_name = NULL; version = 1; items_allocated = false; + unlink_temp_file = true; edit = get_pool_memory(PM_FNAME); + edit[0] = 0; sizeof_ini_items = sizeof(struct ini_items); } @@ -143,20 +149,37 @@ public: free_pool_memory(edit); } if (out_fname) { - unlink(out_fname); + if (unlink_temp_file) { + unlink(out_fname); + } free_pool_memory(out_fname); } + if (plugin_name) { + free(plugin_name); + } + clear_items(); free_items(); } /* Dump a config string to out_fname */ bool dump_string(const char *buf, int32_t len); + void set_plugin_name(char *n) { + if (plugin_name) { + free(plugin_name); + } + plugin_name = bstrdup(n); + } + /* JCR needed for Jmsg */ void set_jcr(JCR *ajcr) { jcr = ajcr; } + void set_unlink_temp_file(bool val) { + unlink_temp_file = val; + } + /* Free malloced items such as char* or alist or items */ void free_items(); @@ -166,7 +189,7 @@ public: /* Dump the item table to a file (used on plugin side) */ bool serialize(const char *fname); - /* Dump the item table format to a buffer (used on plugin side) + /* Dump the item table format to a buffer (used on plugin side) * returns the length of the buffer, -1 if error */ int serialize(POOLMEM **buf); @@ -189,14 +212,20 @@ public: } return false; } - + /* Parse a ini file with a item list previously registred (plugin side) */ bool parse(const char *filename); /* Create a item list from a ini file (director side) */ bool unserialize(const char *filename); + + /* Get Menu for an entry */ + char *get_menu(int index, POOLMEM **dest); + + /* Check if an entry is a part of a menu */ + bool is_in_menu(int index, const char *menu); }; - + /* * Standard global parsers defined in ini.c * When called with lc=NULL, it converts the item value back in inifile->edit diff --git a/bacula/src/lib/jcr.c b/bacula/src/lib/jcr.c index 53679c4c83..baf664f75c 100644 --- a/bacula/src/lib/jcr.c +++ b/bacula/src/lib/jcr.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2012 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Manipulation routines for Job Control Records and @@ -41,7 +29,7 @@ * The result is that there is one lock/unlock for each entry * in the list while traversing it rather than a single lock * at the beginning of a traversal and one at the end. This - * incurs slightly more overhead, but effectively eliminates + * incurs slightly more overhead, but effectively eliminates * the possibilty of race conditions. In addition, with the * exception of the global locking of the list during the * re-reading of the config file, no recursion is needed. @@ -75,7 +63,7 @@ static void unlock_jcr_chain(); int num_jobs_run; dlist *last_jobs = NULL; const int max_last_jobs = 10; - + static dlist *jcrs = NULL; /* JCR chain */ static pthread_mutex_t jcr_lock = PTHREAD_MUTEX_INITIALIZER; @@ -85,7 +73,7 @@ static pthread_mutex_t last_jobs_mutex = PTHREAD_MUTEX_INITIALIZER; static pthread_key_t jcr_key; /* Pointer to jcr for each thread */ -pthread_once_t key_once = PTHREAD_ONCE_INIT; +pthread_once_t key_once = PTHREAD_ONCE_INIT; static char Job_status[] = "Status Job=%s JobStatus=%d\n"; @@ -352,9 +340,10 @@ JCR *new_jcr(int size, JCR_free_HANDLER *daemon_free_jcr) } jcr->job_end_push.init(1, false); jcr->sched_time = time(NULL); + jcr->initial_sched_time = jcr->sched_time; jcr->daemon_free_jcr = daemon_free_jcr; /* plug daemon free routine */ jcr->init_mutex(); - jcr->inc_use_count(); + jcr->inc_use_count(); jcr->VolumeName = get_pool_memory(PM_FNAME); jcr->VolumeName[0] = 0; jcr->errmsg = get_pool_memory(PM_MESSAGE); @@ -423,7 +412,6 @@ static void free_common_jcr(JCR *jcr) jcr->msg_queue = NULL; pthread_mutex_destroy(&jcr->msg_queue_mutex); } - close_msg(jcr); /* close messages for this job */ /* do this after closing messages */ if (jcr->client_name) { @@ -445,10 +433,8 @@ static void free_common_jcr(JCR *jcr) jcr->VolumeName = NULL; } - if (jcr->dir_bsock) { - bnet_close(jcr->dir_bsock); - jcr->dir_bsock = NULL; - } + free_bsock(jcr->dir_bsock); + if (jcr->errmsg) { free_pool_memory(jcr->errmsg); jcr->errmsg = NULL; @@ -498,7 +484,7 @@ void free_jcr(JCR *jcr) { struct s_last_job *je; - Dmsg3(dbglvl, "Enter free_jcr jid=%u use_count=%d Job=%s\n", + Dmsg3(dbglvl, "Enter free_jcr jid=%u use_count=%d Job=%s\n", jcr->JobId, jcr->use_count(), jcr->Job); #endif @@ -510,7 +496,7 @@ void free_jcr(JCR *jcr) jcr->use_count(), jcr->JobId); } if (jcr->JobId > 0) { - Dmsg3(dbglvl, "Dec free_jcr jid=%u use_count=%d Job=%s\n", + Dmsg3(dbglvl, "Dec free_jcr jid=%u use_count=%d Job=%s\n", jcr->JobId, jcr->use_count(), jcr->Job); } if (jcr->use_count() > 0) { /* if in use */ @@ -518,13 +504,14 @@ void free_jcr(JCR *jcr) return; } if (jcr->JobId > 0) { - Dmsg3(dbglvl, "remove jcr jid=%u use_count=%d Job=%s\n", + Dmsg3(dbglvl, "remove jcr jid=%u use_count=%d Job=%s\n", jcr->JobId, jcr->use_count(), jcr->Job); } remove_jcr(jcr); /* remove Jcr from chain */ unlock_jcr_chain(); dequeue_messages(jcr); + close_msg(jcr); /* close messages for this job */ job_end_pop(jcr); /* pop and call hooked routines */ Dmsg1(dbglvl, "End job=%d\n", jcr->JobId); @@ -577,7 +564,6 @@ void free_jcr(JCR *jcr) } free_common_jcr(jcr); - close_msg(NULL); /* flush any daemon messages */ Dmsg0(dbglvl, "Exit free_jcr\n"); } @@ -588,7 +574,7 @@ void free_jcr(JCR *jcr) void remove_jcr_from_tsd(JCR *jcr) { JCR *tjcr = get_jcr_from_tsd(); - if (tjcr == jcr) { + if (tjcr == jcr) { set_jcr_in_tsd(INVALID_JCR); } } @@ -598,11 +584,6 @@ void JCR::set_killable(bool killable) JCR *jcr = this; jcr->lock(); jcr->my_thread_killable = killable; - if (killable) { - jcr->my_thread_id = pthread_self(); - } else { - memset(&jcr->my_thread_id, 0, sizeof(jcr->my_thread_id)); - } jcr->unlock(); } @@ -616,7 +597,7 @@ void set_jcr_in_tsd(JCR *jcr) int status = pthread_setspecific(jcr_key, (void *)jcr); if (status != 0) { berrno be; - Jmsg1(jcr, M_ABORT, 0, _("pthread_setspecific failed: ERR=%s\n"), + Jmsg1(jcr, M_ABORT, 0, _("pthread_setspecific failed: ERR=%s\n"), be.bstrerror(status)); } } @@ -650,7 +631,7 @@ JCR *get_jcr_from_tsd() return jcr; } - + /* * Find which JobId corresponds to the current thread */ @@ -678,7 +659,7 @@ JCR *get_jcr_by_id(uint32_t JobId) foreach_jcr(jcr) { if (jcr->JobId == JobId) { jcr->inc_use_count(); - Dmsg3(dbglvl, "Inc get_jcr jid=%u use_count=%d Job=%s\n", + Dmsg3(dbglvl, "Inc get_jcr jid=%u use_count=%d Job=%s\n", jcr->JobId, jcr->use_count(), jcr->Job); break; } @@ -724,7 +705,7 @@ JCR *get_jcr_by_session(uint32_t SessionId, uint32_t SessionTime) if (jcr->VolSessionId == SessionId && jcr->VolSessionTime == SessionTime) { jcr->inc_use_count(); - Dmsg3(dbglvl, "Inc get_jcr jid=%u use_count=%d Job=%s\n", + Dmsg3(dbglvl, "Inc get_jcr jid=%u use_count=%d Job=%s\n", jcr->JobId, jcr->use_count(), jcr->Job); break; } @@ -753,7 +734,7 @@ JCR *get_jcr_by_partial_name(char *Job) foreach_jcr(jcr) { if (strncmp(Job, jcr->Job, len) == 0) { jcr->inc_use_count(); - Dmsg3(dbglvl, "Inc get_jcr jid=%u use_count=%d Job=%s\n", + Dmsg3(dbglvl, "Inc get_jcr jid=%u use_count=%d Job=%s\n", jcr->JobId, jcr->use_count(), jcr->Job); break; } @@ -779,7 +760,7 @@ JCR *get_jcr_by_full_name(char *Job) foreach_jcr(jcr) { if (strcmp(jcr->Job, Job) == 0) { jcr->inc_use_count(); - Dmsg3(dbglvl, "Inc get_jcr jid=%u use_count=%d Job=%s\n", + Dmsg3(dbglvl, "Inc get_jcr jid=%u use_count=%d Job=%s\n", jcr->JobId, jcr->use_count(), jcr->Job); break; } @@ -809,7 +790,7 @@ static void update_wait_time(JCR *jcr, int newJobStatus) enter_in_waittime = false; /* not a Wait situation */ break; } - + /* * If we were previously waiting and are not any more * we want to update the wait_time variable, which is @@ -840,16 +821,13 @@ static void update_wait_time(JCR *jcr, int newJobStatus) } } -/* +/* * Priority runs from 0 (lowest) to 10 (highest) */ static int get_status_priority(int JobStatus) { int priority = 0; switch (JobStatus) { - case JS_Incomplete: - priority = 10; - break; case JS_ErrorTerminated: case JS_FatalError: case JS_Canceled: @@ -874,7 +852,7 @@ bool JCR::sendJobStatus() if (jcr->dir_bsock) { return jcr->dir_bsock->fsend(Job_status, jcr->Job, jcr->JobStatus); } - return true; + return true; } /* @@ -889,7 +867,7 @@ bool JCR::sendJobStatus(int newJobStatus) return jcr->dir_bsock->fsend(Job_status, jcr->Job, jcr->JobStatus); } } - return true; + return true; } void JCR::setJobStarted() @@ -906,7 +884,7 @@ void JCR::setJobStatus(int newJobStatus) int oldJobStatus = jcr->JobStatus; priority = get_status_priority(newJobStatus); old_priority = get_status_priority(oldJobStatus); - + Dmsg2(800, "set_jcr_job_status(%s, %c)\n", Job, newJobStatus); /* Update wait_time depending on newJobStatus and oldJobStatus */ @@ -920,7 +898,7 @@ void JCR::setJobStatus(int newJobStatus) /* * If status priority is > than proposed new status, change it. * If status priority == new priority and both are zero, take - * the new status. + * the new status. * If it is not zero, then we keep the first non-zero "error" that * occurred. */ @@ -985,9 +963,9 @@ static void unlock_jcr_chain() * released with: * * free_jcr(jcr); - * + * */ -JCR *jcr_walk_start() +JCR *jcr_walk_start() { JCR *jcr; lock_jcr_chain(); @@ -995,7 +973,7 @@ JCR *jcr_walk_start() if (jcr) { jcr->inc_use_count(); if (jcr->JobId > 0) { - Dmsg3(dbglvl, "Inc walk_start jid=%u use_count=%d Job=%s\n", + Dmsg3(dbglvl, "Inc walk_start jid=%u use_count=%d Job=%s\n", jcr->JobId, jcr->use_count(), jcr->Job); } } @@ -1015,7 +993,7 @@ JCR *jcr_walk_next(JCR *prev_jcr) if (jcr) { jcr->inc_use_count(); if (jcr->JobId > 0) { - Dmsg3(dbglvl, "Inc walk_next jid=%u use_count=%d Job=%s\n", + Dmsg3(dbglvl, "Inc walk_next jid=%u use_count=%d Job=%s\n", jcr->JobId, jcr->use_count(), jcr->Job); } } @@ -1033,7 +1011,7 @@ void jcr_walk_end(JCR *jcr) { if (jcr) { if (jcr->JobId > 0) { - Dmsg3(dbglvl, "Free walk_end jid=%u use_count=%d Job=%s\n", + Dmsg3(dbglvl, "Free walk_end jid=%u use_count=%d Job=%s\n", jcr->JobId, jcr->use_count(), jcr->Job); } free_jcr(jcr); @@ -1101,7 +1079,7 @@ static void jcr_timeout_check(watchdog_t *self) bs->set_timed_out(); Qmsg(jcr, M_ERROR, 0, _( "Watchdog sending kill after %d secs to thread stalled reading Storage daemon.\n"), - watchdog_time - timer_start); + (int)(watchdog_time - timer_start)); jcr->my_thread_send_signal(TIMEOUT_SIGNAL); } } @@ -1113,7 +1091,7 @@ static void jcr_timeout_check(watchdog_t *self) bs->set_timed_out(); Qmsg(jcr, M_ERROR, 0, _( "Watchdog sending kill after %d secs to thread stalled reading File daemon.\n"), - watchdog_time - timer_start); + (int)(watchdog_time - timer_start)); jcr->my_thread_send_signal(TIMEOUT_SIGNAL); } } @@ -1125,7 +1103,7 @@ static void jcr_timeout_check(watchdog_t *self) bs->set_timed_out(); Qmsg(jcr, M_ERROR, 0, _( "Watchdog sending kill after %d secs to thread stalled reading Director.\n"), - watchdog_time - timer_start); + (int)(watchdog_time - timer_start)); jcr->my_thread_send_signal(TIMEOUT_SIGNAL); } } @@ -1135,8 +1113,8 @@ static void jcr_timeout_check(watchdog_t *self) Dmsg0(dbglvl, "Finished JCR timeout checks\n"); } -/* - * Return next JobId from comma separated list +/* + * Return next JobId from comma separated list * * Returns: * 1 if next JobId returned @@ -1178,7 +1156,7 @@ extern "C" void timeout_handler(int sig) return; /* thus interrupting the function */ } -/* Used to display specific daemon information after a fatal signal +/* Used to display specific daemon information after a fatal signal * (like B_DB in the director) */ #define MAX_DBG_HOOK 10 @@ -1191,8 +1169,14 @@ void dbg_jcr_add_hook(dbg_jcr_hook_t *hook) dbg_jcr_hooks[dbg_jcr_handler_count++] = hook; } +/* on win32, the pthread_t is a struct, so we don't display it */ +#ifdef HAVE_MINGW_W64 +# define get_threadid(a) (void *)0 +#else +# define get_threadid(a) (void *)(a) +#endif /* - * !!! WARNING !!! + * !!! WARNING !!! * * This function should be used ONLY after a fatal signal. We walk through the * JCR chain without doing any lock, Bacula should not be running. @@ -1207,11 +1191,11 @@ void dbg_print_jcr(FILE *fp) fprintf(fp, "Attempt to dump current JCRs. njcrs=%d\n", jcrs->size()); for (JCR *jcr = (JCR *)jcrs->first(); jcr ; jcr = (JCR *)jcrs->next(jcr)) { - fprintf(fp, "threadid=%p JobId=%d JobStatus=%c jcr=%p name=%s\n", - (void *)jcr->my_thread_id, (int)jcr->JobId, jcr->JobStatus, jcr, jcr->Job); + fprintf(fp, "threadid=%p JobId=%d JobStatus=%c jcr=%p name=%s\n", + get_threadid(jcr->my_thread_id), (int)jcr->JobId, jcr->JobStatus, jcr, jcr->Job); fprintf(fp, "threadid=%p killable=%d JobId=%d JobStatus=%c " "jcr=%p name=%s\n", - (void *)jcr->my_thread_id, jcr->is_killable(), + get_threadid(jcr->my_thread_id), jcr->is_killable(), (int)jcr->JobId, jcr->JobStatus, jcr, jcr->Job); fprintf(fp, "\tuse_count=%i\n", jcr->use_count()); fprintf(fp, "\tJobType=%c JobLevel=%c\n", @@ -1222,9 +1206,9 @@ void dbg_print_jcr(FILE *fp) bstrftime(buf4, sizeof(buf4), jcr->wait_time); fprintf(fp, "\tsched_time=%s start_time=%s\n\tend_time=%s wait_time=%s\n", buf1, buf2, buf3, buf4); - fprintf(fp, "\tdb=%p db_batch=%p batch_started=%i\n", + fprintf(fp, "\tdb=%p db_batch=%p batch_started=%i\n", jcr->db, jcr->db_batch, jcr->batch_started); - + /* * Call all the jcr debug hooks */ diff --git a/bacula/src/lib/lex.c b/bacula/src/lib/lex.c index c4c78d6ced..d8e7dd7137 100644 --- a/bacula/src/lib/lex.c +++ b/bacula/src/lib/lex.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2012 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Lexical scanner for Bacula configuration file @@ -35,8 +23,6 @@ #include "bacula.h" #include "lex.h" -extern int debug_level; - /* Debug level for this source file */ static const int dbglvl = 5000; @@ -91,7 +77,7 @@ static void s_err(const char *file, int line, LEX *lc, const char *msg, ...) _("Problem probably begins at line %d.\n"), lc->begin_line_no); } else { more[0] = 0; - } + } if (lc->line_no > 0) { e_msg(file, line, lc->err_type, 0, _("Config error: %s\n" " : line %d, col %d of file %s\n%s\n%s"), @@ -190,10 +176,10 @@ LEX *lex_open_file(LEX *lf, const char *filename, LEX_ERROR_HANDLER *scan_error) lf->next = nf; /* if have lf, push it behind new one */ lf->options = nf->options; /* preserve user options */ /* - * preserve err_type to prevent bacula exiting on 'reload' - * if config is invalid. Fixes bug #877 + * preserve err_type to prevent bacula exiting on 'reload' + * if config is invalid. Fixes bug #877 */ - lf->err_type = nf->err_type; + lf->err_type = nf->err_type; } else { lf = nf; /* start new packet */ memset(lf, 0, sizeof(LEX)); @@ -659,7 +645,7 @@ lex_get_token(LEX *lf, int expect) add_str(lf, ch); break; case lex_utf8_bom: - /* we only end up in this state if we have read an 0xEF + /* we only end up in this state if we have read an 0xEF as the first byte of the file, indicating we are probably reading a UTF-8 file */ if (ch == 0xBB && bom_bytes_seen == 1) { @@ -672,7 +658,7 @@ lex_get_token(LEX *lf, int expect) } break; case lex_utf16_le_bom: - /* we only end up in this state if we have read an 0xFF + /* we only end up in this state if we have read an 0xFF as the first byte of the file -- indicating that we are probably dealing with an Intel based (little endian) UTF-16 file*/ if (ch == 0xFE) { diff --git a/bacula/src/lib/lex.h b/bacula/src/lib/lex.h index b2a55c5f8b..08db120b30 100644 --- a/bacula/src/lib/lex.h +++ b/bacula/src/lib/lex.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2012 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * lex.h @@ -87,7 +75,7 @@ enum lex_state { lex_quoted_string, lex_include_quoted_string, lex_include, - lex_utf8_bom, /* we are parsing out a utf8 byte order mark */ + lex_utf8_bom, /* we are parsing out a utf8 byte order mark */ lex_utf16_le_bom /* we are parsing out a utf-16 (little endian) byte order mark */ }; @@ -97,7 +85,7 @@ enum lex_state { #define LOPT_NO_EXTERN 0x4 /* Don't follow @ command */ class BPIPE; /* forward reference */ - + /* Lexical context */ typedef struct s_lex_context { struct s_lex_context *next; /* pointer to next lexical context */ diff --git a/bacula/src/lib/lib.h b/bacula/src/lib/lib.h index b81f89f747..174e04bd39 100644 --- a/bacula/src/lib/lib.h +++ b/bacula/src/lib/lib.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2011 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Library includes for Bacula lib directory diff --git a/bacula/src/lib/lockmgr.c b/bacula/src/lib/lockmgr.c index 93654bac48..a72dd726eb 100644 --- a/bacula/src/lib/lockmgr.c +++ b/bacula/src/lib/lockmgr.c @@ -1,36 +1,24 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2008-2011 Free Software Foundation Europe e.V. + Copyright (C) 2008-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation, which is - listed in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* How to use mutex with bad order usage detection ------------------------------------------------ - Note: see file mutex_list.h for current mutexes with + Note: see file mutex_list.h for current mutexes with defined priorities. Instead of using: @@ -47,13 +35,13 @@ Mutex that doesn't need this extra check can be declared as pthread_mutex_t. You can use this object on pthread_mutex_lock/unlock/cond_wait/cond_timewait. - + With dynamic creation, you can use: bthread_mutex_t mutex; pthread_mutex_init(&mutex); bthread_mutex_set_priority(&mutex, 10); pthread_mutex_destroy(&mutex); - + */ #define _LOCKMGR_COMPLIANT @@ -70,8 +58,14 @@ Pmsg3(000, _("ASSERT failed at %s:%i: %s \n"), f, l, #x); \ jcr[0] = 0; } +#define ASSERT2_p(x,m,f,l) if (!(x)) { \ + char *jcr = NULL; \ + set_assert_msg(f, l, m); \ + Pmsg4(000, _("ASSERT failed at %s:%i: %s (%s)\n"), f, l, #x, m); \ + jcr[0] = 0; } + /* - Inspired from + Inspired from http://www.cs.berkeley.edu/~kamil/teaching/sp03/041403.pdf This lock manager will replace some pthread calls. It can be @@ -87,6 +81,7 @@ */ +#define DBGLEVEL_EVENT 50 /* * pthread_mutex_lock for memory allocator and other @@ -149,7 +144,7 @@ public: void init(void *n, void *c) { node = n; child = c; - seen = LMGR_WHITE; + seen = LMGR_WHITE; } void mark_as_seen(lmgr_color_t c) { @@ -172,10 +167,10 @@ class lmgr_lock_t: public SMARTALLOC { public: dlink link; - void *lock; + void *lock; /* Link to the mutex (or any value) */ lmgr_state_t state; int max_priority; - int priority; + int priority; /* Current node priority */ const char *file; int line; @@ -199,7 +194,7 @@ public: }; -/* +/* * Get the child list, ret must be already allocated */ static void search_all_node(dlist *g, lmgr_node_t *v, alist *ret) @@ -257,6 +252,34 @@ static bool contains_cycle(dlist *g) /****************************************************************/ +/* lmgr_thread_event struct, some call can add events, and they will + * be dumped during a lockdump + */ +typedef struct +{ + int32_t id; /* Id of the event */ + int32_t global_id; /* Current global id */ + int32_t flags; /* Flags for this event */ + + int32_t line; /* from which line in filename */ + const char *from; /* From where in the code (filename) */ + + char *comment; /* Comment */ + intptr_t user_data; /* Optionnal user data (will print address) */ + +} lmgr_thread_event; + +static int32_t global_event_id=0; + +/* Keep this number of event per thread */ +#ifdef _TEST_IT +# define LMGR_THREAD_EVENT_MAX 15 +#else +# define LMGR_THREAD_EVENT_MAX 1024 +#endif + +#define lmgr_thread_event_get_pos(x) ((x) % LMGR_THREAD_EVENT_MAX) + class lmgr_thread_t: public SMARTALLOC { public: @@ -268,30 +291,120 @@ public: int max; int max_priority; + lmgr_thread_event events[LMGR_THREAD_EVENT_MAX]; + int event_id; + lmgr_thread_t() { int status; if ((status = pthread_mutex_init(&mutex, NULL)) != 0) { berrno be; Pmsg1(000, _("pthread key create failed: ERR=%s\n"), be.bstrerror(status)); - ASSERT(0); + ASSERT2(0, "pthread_mutex_init failed"); } + event_id = 0; thread_id = pthread_self(); current = -1; max = 0; max_priority = 0; } + /* Add event to the event list of the thread */ + void add_event(const char *comment, intptr_t user_data, int32_t flags, + const char *from, int32_t line) + { + char *p; + int i = lmgr_thread_event_get_pos(event_id); + + events[i].flags = LMGR_EVENT_INVALID; + p = events[i].comment; + events[i].comment = (char *)"*Freed*"; + + /* Shared between thread, just an indication about timing */ + events[i].global_id = global_event_id++; + events[i].id = event_id; + events[i].line = line; + events[i].from = from; + + /* It means we are looping over the ring, so we need + * to check if the memory need to be freed + */ + if (event_id >= LMGR_THREAD_EVENT_MAX) { + if (events[i].flags & LMGR_EVENT_FREE) { + free(p); + } + } + + /* We need to copy the memory */ + if (flags & LMGR_EVENT_DUP) { + events[i].comment = bstrdup(comment); + flags |= LMGR_EVENT_FREE; /* force the free */ + + } else { + events[i].comment = (char *)comment; + } + events[i].user_data = user_data; + events[i].flags = flags; /* mark it valid */ + event_id++; + } + + void free_event_list() { + /* We first check how far we go in the event list */ + int max = MIN(event_id, LMGR_THREAD_EVENT_MAX); + char *p; + + for (int i = 0; i < max ; i++) { + if (events[i].flags & LMGR_EVENT_FREE) { + p = events[i].comment; + events[i].flags = LMGR_EVENT_INVALID; + events[i].comment = (char *)"*Freed*"; + free(p); + } + } + } + + void print_event(lmgr_thread_event *ev, FILE *fp) { + if (ev->flags & LMGR_EVENT_INVALID) { + return; + } + fprintf(fp, " %010d id=%010d %s data=%p at %s:%d\n", + ev->global_id, + ev->id, + NPRT(ev->comment), + (void *)ev->user_data, + ev->from, + ev->line); + } + void _dump(FILE *fp) { - fprintf(fp, "threadid=%p max=%i current=%i\n", + fprintf(fp, "threadid=%p max=%i current=%i\n", (void *)thread_id, max, current); for(int i=0; i<=current; i++) { - fprintf(fp, " lock=%p state=%s priority=%i %s:%i\n", - lock_list[i].lock, + fprintf(fp, " lock=%p state=%s priority=%i %s:%i\n", + lock_list[i].lock, (lock_list[i].state=='W')?"Wanted ":"Granted", lock_list[i].priority, lock_list[i].file, lock_list[i].line); - } + } + + if (debug_flags & DEBUG_PRINT_EVENT) { + /* Debug events */ + fprintf(fp, " events:\n"); + + /* Display events between (event_id % LMGR_THREAD_EVENT_MAX) and LMGR_THREAD_EVENT_MAX */ + if (event_id > LMGR_THREAD_EVENT_MAX) { + for (int i = event_id % LMGR_THREAD_EVENT_MAX ; i < LMGR_THREAD_EVENT_MAX ; i++) + { + print_event(&events[i], fp); + } + } + + /* Display events between 0 and event_id % LMGR_THREAD_EVENT_MAX*/ + for (int i = 0 ; i < (event_id % LMGR_THREAD_EVENT_MAX) ; i++) + { + print_event(&events[i], fp); + } + } } void dump(FILE *fp) { @@ -305,12 +418,20 @@ public: /* * Call before a lock operation (mark mutex as WANTED) */ - virtual void pre_P(void *m, int priority, - const char *f="*unknown*", int l=0) + virtual void pre_P(void *m, int priority, + const char *f="*unknown*", int l=0) { int max_prio = max_priority; - ASSERT_p(current < LMGR_MAX_LOCK, f, l); - ASSERT_p(current >= -1, f, l); + + if (chk_dbglvl(DBGLEVEL_EVENT) || debug_flags & DEBUG_MUTEX_EVENT) { + /* Keep track of this event */ + add_event("P()", (intptr_t)m, 0, f, l); + } + + /* Fail if too many locks in use */ + ASSERT2_p(current < LMGR_MAX_LOCK, "Too many locks in use", f, l); + /* Fail if the "current" value is out of bounds */ + ASSERT2_p(current >= -1, "current lock value is out of bounds", f, l); lmgr_p(&mutex); { current++; @@ -324,18 +445,29 @@ public: max_priority = MAX(priority, max_priority); } lmgr_v(&mutex); - ASSERT_p(!priority || priority >= max_prio, f, l); + + /* Fail if we tried to lock a mutex with a lower priority than + * the current value. It means that you need to lock mutex in a + * different order to ensure that the priority field is always + * increasing. The mutex priority list is defined in mutex_list.h. + * + * Look the *.lockdump generated to get the list of all mutexes, + * and where they were granted to find the priority problem. + */ + ASSERT2_p(!priority || priority >= max_prio, + "Mutex priority problem found, locking done in wrong order", + f, l); } /* * Call after the lock operation (mark mutex as GRANTED) */ virtual void post_P() { - ASSERT(current >= 0); + ASSERT2(current >= 0, "Lock stack when negative"); ASSERT(lock_list[current].state == LMGR_LOCK_WANTED); lock_list[current].state = LMGR_LOCK_GRANTED; } - + /* Using this function is some sort of bug */ void shift_list(int i) { for(int j=i+1; j<=current; j++) { @@ -357,7 +489,14 @@ public: * Remove the mutex from the list */ virtual void do_V(void *m, const char *f="*unknown*", int l=0) { - ASSERT_p(current >= 0, f, l); + int old_current = current; + + /* Keep track of this event */ + if (chk_dbglvl(DBGLEVEL_EVENT) || debug_flags & DEBUG_MUTEX_EVENT) { + add_event("V()", (intptr_t)m, 0, f, l); + } + + ASSERT2_p(current >= 0, "No previous P found, the mutex list is empty", f, l); lmgr_p(&mutex); { if (lock_list[current].lock == m) { @@ -365,16 +504,15 @@ public: lock_list[current].state = LMGR_LOCK_EMPTY; current--; } else { - ASSERT(current > 0); - Pmsg3(0, "ERROR: wrong P/V order search lock=%p %s:%i\n", m, f, l); - Pmsg4(000, "ERROR: wrong P/V order pos=%i lock=%p %s:%i\n", - current, lock_list[current].lock, lock_list[current].file, + Pmsg3(0, "ERROR: V out of order lock=%p %s:%i dumping locks...\n", m, f, l); + Pmsg4(000, " wrong P/V order pos=%i lock=%p %s:%i\n", + current, lock_list[current].lock, lock_list[current].file, lock_list[current].line); for (int i=current-1; i >= 0; i--) { /* already seen current */ - Pmsg4(000, "ERROR: wrong P/V order pos=%i lock=%p %s:%i\n", + Pmsg4(000, " wrong P/V order pos=%i lock=%p %s:%i\n", i, lock_list[i].lock, lock_list[i].file, lock_list[i].line); if (lock_list[i].lock == m) { - Pmsg3(000, "ERROR: FOUND P pos=%i %s:%i\n", i, f, l); + Pmsg3(000, "ERROR: FOUND P for out of order V at pos=%i %s:%i\n", i, f, l); shift_list(i); current--; break; @@ -383,17 +521,20 @@ public: } /* reset max_priority to the last one */ if (current >= 0) { - max_priority = lock_list[current].max_priority; + max_priority = lock_list[current].max_priority; } else { max_priority = 0; } } lmgr_v(&mutex); + /* ASSERT2 should be called outside from the mutex lock */ + ASSERT2_p(current != old_current, "V() called without a previous P()", f, l); } virtual ~lmgr_thread_t() {destroy();} void destroy() { + free_event_list(); pthread_mutex_destroy(&mutex); } } ; @@ -412,7 +553,7 @@ class lmgr_dummy_thread_t: public lmgr_thread_t * */ -pthread_once_t key_lmgr_once = PTHREAD_ONCE_INIT; +pthread_once_t key_lmgr_once = PTHREAD_ONCE_INIT; static pthread_key_t lmgr_key; /* used to get lgmr_thread_t object */ static dlist *global_mgr = NULL; /* used to store all lgmr_thread_t objects */ @@ -483,8 +624,8 @@ bool lmgr_detect_deadlock_unlocked() g->append(node); } } - } - + } + //foreach_dlist(node, g) { // printf("g n=%p c=%p\n", node->node, node->child); //} @@ -493,7 +634,7 @@ bool lmgr_detect_deadlock_unlocked() if (ret) { printf("Found a deadlock !!!!\n"); } - + delete g; return ret; } @@ -508,7 +649,7 @@ bool lmgr_detect_deadlock() bool ret=false; if (!lmgr_is_active()) { return ret; - } + } lmgr_p(&lmgr_global_mutex); { @@ -529,7 +670,7 @@ bool lmgr_detect_deadlock() } /* - * !!! WARNING !!! + * !!! WARNING !!! * Use this function is used only after a fatal signal * We don't use locking to display the information */ @@ -574,8 +715,12 @@ void *check_deadlock(void *) while (!bmicrosleep(30, 0)) { pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &old); if (lmgr_detect_deadlock()) { + /* If we have information about P()/V(), display them */ + if (debug_flags & DEBUG_MUTEX_EVENT || chk_dbglvl(DBGLEVEL_EVENT)) { + debug_flags |= DEBUG_PRINT_EVENT; + } lmgr_dump(); - ASSERT(0); + ASSERT2(0, "Lock deadlock"); /* Abort if we found a deadlock */ } pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, &old); pthread_testcancel(); @@ -610,7 +755,7 @@ void create_lmgr_key() berrno be; Pmsg1(000, _("pthread key create failed: ERR=%s\n"), be.bstrerror(status)); - ASSERT(0); + ASSERT2(0, "pthread_key_create failed"); } lmgr_thread_t *n=NULL; @@ -622,7 +767,7 @@ void create_lmgr_key() berrno be; Pmsg1(000, _("pthread_create failed: ERR=%s\n"), be.bstrerror(status)); - ASSERT(0); + ASSERT2(0, "pthread_create failed"); } } } @@ -638,7 +783,7 @@ void lmgr_init_thread() berrno be; Pmsg1(000, _("pthread key create failed: ERR=%s\n"), be.bstrerror(status)); - ASSERT(0); + ASSERT2(0, "pthread_once failed"); } lmgr_thread_t *l = New(lmgr_thread_t()); pthread_setspecific(lmgr_key, l); @@ -666,7 +811,7 @@ void lmgr_cleanup_thread() void lmgr_cleanup_main() { dlist *temp; - + if (!global_mgr) { return; } @@ -683,7 +828,14 @@ void lmgr_cleanup_main() lmgr_v(&lmgr_global_mutex); } -/* +void lmgr_add_event_p(const char *comment, intptr_t user_data, int32_t flags, + const char *file, int32_t line) +{ + lmgr_thread_t *self = lmgr_get_thread_info(); + self->add_event(comment, user_data, flags, file, line); +} + +/* * Set the priority of the lmgr mutex object */ void bthread_mutex_set_priority(bthread_mutex_t *m, int prio) @@ -710,14 +862,14 @@ int pthread_mutex_destroy(bthread_mutex_t *m) return pthread_mutex_destroy(&m->mutex); } -/* +/* * Replacement for pthread_kill (only with USE_LOCKMGR_SAFEKILL) */ -int bthread_kill(pthread_t thread, int sig, +int bthread_kill(pthread_t thread, int sig, const char *file, int line) { bool thread_found_in_process=false; - + /* We doesn't allow to send signal to ourself */ ASSERT(!pthread_equal(thread, pthread_self())); @@ -739,7 +891,7 @@ int bthread_kill(pthread_t thread, int sig, /* Sending a signal to non existing thread can create problem * so, we can stop here. */ - ASSERT(thread_found_in_process == true); + ASSERT2(thread_found_in_process, "Wanted to pthread_kill non-existant thread"); Dmsg3(100, "%s:%d send kill to existing thread %p\n", file, line, thread); return pthread_kill(thread, sig); @@ -747,14 +899,14 @@ int bthread_kill(pthread_t thread, int sig, /* * Replacement for pthread_mutex_lock() - * Returns always ok + * Returns always ok */ int bthread_mutex_lock_p(bthread_mutex_t *m, const char *file, int line) { lmgr_thread_t *self = lmgr_get_thread_info(); self->pre_P(m, m->priority, file, line); lmgr_p(&m->mutex); - self->post_P(); + self->post_P(); return 0; } @@ -772,14 +924,14 @@ int bthread_mutex_unlock_p(bthread_mutex_t *m, const char *file, int line) /* * Replacement for pthread_mutex_lock() but with real pthread_mutex_t - * Returns always ok + * Returns always ok */ int bthread_mutex_lock_p(pthread_mutex_t *m, const char *file, int line) { lmgr_thread_t *self = lmgr_get_thread_info(); self->pre_P(m, 0, file, line); lmgr_p(m); - self->post_P(); + self->post_P(); return 0; } @@ -804,7 +956,7 @@ int bthread_cond_wait_p(pthread_cond_t *cond, { int ret; lmgr_thread_t *self = lmgr_get_thread_info(); - self->do_V(m, file, line); + self->do_V(m, file, line); ret = pthread_cond_wait(cond, m); self->pre_P(m, 0, file, line); self->post_P(); @@ -820,7 +972,7 @@ int bthread_cond_timedwait_p(pthread_cond_t *cond, { int ret; lmgr_thread_t *self = lmgr_get_thread_info(); - self->do_V(m, file, line); + self->do_V(m, file, line); ret = pthread_cond_timedwait(cond, m, abstime); self->pre_P(m, 0, file, line); self->post_P(); @@ -835,7 +987,7 @@ int bthread_cond_wait_p(pthread_cond_t *cond, { int ret; lmgr_thread_t *self = lmgr_get_thread_info(); - self->do_V(m, file, line); + self->do_V(m, file, line); ret = pthread_cond_wait(cond, &m->mutex); self->pre_P(m, m->priority, file, line); self->post_P(); @@ -851,14 +1003,14 @@ int bthread_cond_timedwait_p(pthread_cond_t *cond, { int ret; lmgr_thread_t *self = lmgr_get_thread_info(); - self->do_V(m, file, line); + self->do_V(m, file, line); ret = pthread_cond_timedwait(cond, &m->mutex, abstime); self->pre_P(m, m->priority, file, line); self->post_P(); return ret; } -/* Test if this mutex is locked by the current thread +/* Test if this mutex is locked by the current thread * returns: * 0 - unlocked * 1 - locked by the current thread @@ -923,7 +1075,7 @@ typedef struct { void *arg; } lmgr_thread_arg_t; -extern "C" +extern "C" void *lmgr_thread_launcher(void *x) { void *ret=NULL; @@ -946,7 +1098,7 @@ int lmgr_thread_create(pthread_t *thread, void *(*start_routine)(void*), void *arg) { /* lmgr should be active (lmgr_init_thread() call in main()) */ - ASSERT(lmgr_is_active()); + ASSERT2(lmgr_is_active(), "Lock manager not active"); /* Will be freed by the child */ lmgr_thread_arg_t *a = (lmgr_thread_arg_t*) malloc(sizeof(lmgr_thread_arg_t)); a->start_routine = start_routine; @@ -957,7 +1109,7 @@ int lmgr_thread_create(pthread_t *thread, #else /* _USE_LOCKMGR */ /* - * !!! WARNING !!! + * !!! WARNING !!! * Use this function is used only after a fatal signal * We don't use locking to display information */ @@ -993,7 +1145,7 @@ void *self_lock(void *temp) P(mutex1); P(mutex1); V(mutex1); - + return NULL; } @@ -1039,7 +1191,7 @@ void *th2(void *temp) { P(mutex2); P(mutex1); - + lmgr_dump(); sleep(10); @@ -1055,7 +1207,7 @@ void *th1(void *temp) P(mutex1); sleep(2); P(mutex2); - + lmgr_dump(); sleep(10); @@ -1097,10 +1249,34 @@ void *th_prio(void *a) { char buf[512]; bstrncpy(buf, my_prog, sizeof(buf)); bstrncat(buf, " priority", sizeof(buf)); - int ret = system(buf); + intptr_t ret = system(buf); return (void*) ret; } +void *th_event1(void *a) { + for (int i=0; i < 10000; i++) { + if ((i % 7) == 0) { + lmgr_add_event_flag("strdup test", i, LMGR_EVENT_DUP); + } else { + lmgr_add_event("My comment", i); + } + } + sleep(5); + return NULL; +} + +void *th_event2(void *a) { + for (int i=0; i < 10000; i++) { + if ((i % 2) == 0) { + lmgr_add_event_flag(bstrdup("free test"), i, LMGR_EVENT_FREE); + } else { + lmgr_add_event("My comment", i); + } + } + sleep(5); + return NULL; +} + int err=0; int nb=0; void _ok(const char *file, int l, const char *op, int value, const char *label) @@ -1135,7 +1311,7 @@ int report() return err>0; } -/* +/* * TODO: * - Must detect multiple lock * - lock/unlock in wrong order @@ -1145,9 +1321,10 @@ int main(int argc, char **argv) { void *ret=NULL; lmgr_thread_t *self; - pthread_t id1, id2, id3, tab[200]; + pthread_t id1, id2, id3, id4, id5, tab[200]; bthread_mutex_t bmutex1; pthread_mutex_t pmutex2; + debug_level = 10; my_prog = argv[0]; use_undertaker = false; @@ -1194,7 +1371,7 @@ int main(int argc, char **argv) nok(lmgr_detect_deadlock(), "Check for multiple lock"); V(mutex1); pthread_join(id1, NULL); - pthread_join(id2, NULL); + pthread_join(id2, NULL); pthread_join(id3, NULL); @@ -1212,8 +1389,8 @@ int main(int argc, char **argv) nok(lmgr_detect_deadlock(), "Check for multiple rwlock"); pthread_join(id1, NULL); - pthread_join(id2, NULL); - pthread_join(id3, NULL); + pthread_join(id2, NULL); + pthread_join(id3, NULL); rwl_writelock(&wr); P(mutex1); @@ -1244,9 +1421,9 @@ int main(int argc, char **argv) P(mutex4); P(mutex5); P(mutex6); - ok(lmgr_mutex_is_locked(&mutex6) == 1, "Check if mutex is locked"); + ok(lmgr_mutex_is_locked(&mutex6) == 1, "Check if mutex is locked"); V(mutex6); - ok(lmgr_mutex_is_locked(&mutex6) == 0, "Check if mutex is locked"); + ok(lmgr_mutex_is_locked(&mutex6) == 0, "Check if mutex is locked"); V(mutex5); V(mutex4); @@ -1297,7 +1474,24 @@ int main(int argc, char **argv) V(mutex_p1); V(mutex_p2); -// lmgr_dump(); + for (int i=0; i < 10000; i++) { + if ((i % 7) == 0) { + lmgr_add_event_flag("xxxxxxxxxxxxxxxx strdup test xxxxxxxxxxxxxxxx", i, LMGR_EVENT_DUP); + } else { + lmgr_add_event("My comment", i); + } + } + + pthread_create(&id4, NULL, th_event1, NULL); + pthread_create(&id5, NULL, th_event2, NULL); + + sleep(2); + + lmgr_dump(); + + pthread_join(id4, NULL); + pthread_join(id5, NULL); + // // pthread_create(&id3, NULL, th3, NULL); // diff --git a/bacula/src/lib/lockmgr.h b/bacula/src/lib/lockmgr.h index 17dd2a9985..d112ee84ec 100644 --- a/bacula/src/lib/lockmgr.h +++ b/bacula/src/lib/lockmgr.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2008-2010 Free Software Foundation Europe e.V. + Copyright (C) 2008-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation, which is - listed in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ #ifndef _LOCKMGR_H @@ -46,7 +34,7 @@ typedef struct bthread_mutex_t int priority; } bthread_mutex_t; -/* +/* * We decide that a thread won't lock more than LMGR_MAX_LOCK at the same time */ #define LMGR_MAX_LOCK 32 @@ -71,7 +59,7 @@ int bthread_cond_timedwait_p(pthread_cond_t *cond, const char *file="*unknown*", int line=0); /* Replacement of pthread_mutex_lock() but with real pthread_mutex_t */ -int bthread_mutex_lock_p(pthread_mutex_t *m, +int bthread_mutex_lock_p(pthread_mutex_t *m, const char *file="*unknown*", int line=0); /* Replacement for pthread_mutex_unlock() but with real pthread_mutex_t */ @@ -79,11 +67,11 @@ int bthread_mutex_unlock_p(pthread_mutex_t *m, const char *file="*unknown*", int line=0); /* Replacement of pthread_mutex_lock() */ -int bthread_mutex_lock_p(bthread_mutex_t *m, +int bthread_mutex_lock_p(bthread_mutex_t *m, const char *file="*unknown*", int line=0); /* Replacement of pthread_mutex_unlock() */ -int bthread_mutex_unlock_p(bthread_mutex_t *m, +int bthread_mutex_unlock_p(bthread_mutex_t *m, const char *file="*unknown*", int line=0); /* Test if this mutex is locked by the current thread @@ -91,8 +79,8 @@ int bthread_mutex_unlock_p(bthread_mutex_t *m, * 1 - locked by the current thread */ int lmgr_mutex_is_locked(void *m); - -/* + +/* * Use them when you want use your lock yourself (ie rwlock) */ @@ -100,15 +88,15 @@ int lmgr_mutex_is_locked(void *m); void lmgr_pre_lock(void *m, int prio=0, const char *file="*unknown*", int line=0); -/* Call after getting it */ +/* Call after getting it */ void lmgr_post_lock(); /* Same as pre+post lock */ -void lmgr_do_lock(void *m, int prio=0, +void lmgr_do_lock(void *m, int prio=0, const char *file="*unknown*", int line=0); /* Call just before releasing the lock */ -void lmgr_do_unlock(void *m); +void lmgr_do_unlock(void *m); /* We use C++ mangling to make integration eaysier */ int pthread_mutex_init(bthread_mutex_t *m, const pthread_mutexattr_t *attr); @@ -128,7 +116,7 @@ void lmgr_init_thread(); void lmgr_cleanup_thread(); /* - * Call this at the end of the program, it will release the + * Call this at the end of the program, it will release the * global lock manager */ void lmgr_cleanup_main(); @@ -143,6 +131,19 @@ void lmgr_dump(); */ bool lmgr_detect_deadlock(); +/* Bit flags */ +#define LMGR_EVENT_NONE 0 +#define LMGR_EVENT_DUP 1 /* use strdup() to copy the comment (will set FREE) */ +#define LMGR_EVENT_FREE 2 /* use free() when overwriting/deleting the comment */ +#define LMGR_EVENT_INVALID 4 /* Used to mark the record invalid */ + +/* + * Add event to the thread event list + */ +void lmgr_add_event_p(const char *comment, intptr_t user_data, int32_t flags, const char *file, int32_t line); +#define lmgr_add_event(c, u) lmgr_add_event_p(c, u, 0, __FILE__, __LINE__) +#define lmgr_add_event_flag(c, u, f) lmgr_add_event_p(c, u, (f), __FILE__, __LINE__) + /* * Search a deadlock after a fatal signal * no lock are granted, so the program must be @@ -158,10 +159,10 @@ int lmgr_thread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void*), void *arg); -/* +/* * Can use SAFEKILL to check if the argument is a valid threadid */ -int bthread_kill(pthread_t thread, int sig, +int bthread_kill(pthread_t thread, int sig, const char *file="*unknown*", int line=0); #define BTHREAD_MUTEX_NO_PRIORITY {PTHREAD_MUTEX_INITIALIZER, 0} @@ -179,9 +180,11 @@ int bthread_kill(pthread_t thread, int sig, #define bthread_cond_wait(x,y) bthread_cond_wait_p(x,y, __FILE__, __LINE__) #define bthread_cond_timedwait(x,y,z) bthread_cond_timedwait_p(x,y,z, __FILE__, __LINE__) -/* +/* * Define _LOCKMGR_COMPLIANT to use real pthread functions */ +#define real_P(x) lmgr_p(&(x)) +#define real_V(x) lmgr_v(&(x)) #ifdef _LOCKMGR_COMPLIANT # define P(x) lmgr_p(&(x)) @@ -203,6 +206,8 @@ int bthread_kill(pthread_t thread, int sig, #else /* _USE_LOCKMGR */ # define lmgr_detect_deadloc() +# define lmgr_add_event_p(c, u, f, l) +# define lmgr_add_event(c, u) # define lmgr_dump() # define lmgr_init_thread() # define lmgr_cleanup_thread() diff --git a/bacula/src/lib/md5.c b/bacula/src/lib/md5.c index ba7eff1041..421b7a6f58 100644 --- a/bacula/src/lib/md5.c +++ b/bacula/src/lib/md5.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2011 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * This code implements the MD5 message-digest algorithm. @@ -132,7 +120,7 @@ void MD5Update(struct MD5Context *ctx, unsigned char *buf, unsigned len) } /* - * Final wrapup - pad to 64-byte boundary with the bit pattern + * Final wrapup - pad to 64-byte boundary with the bit pattern * 1 0* (64-bit count of bits processed, MSB-first) */ void MD5Final(unsigned char digest[16], struct MD5Context *ctx) @@ -173,7 +161,7 @@ void MD5Final(unsigned char digest[16], struct MD5Context *ctx) MD5Transform(ctx->buf, (uint32_t *) ctx->in); byteReverse((unsigned char *) ctx->buf, 4); memcpy(digest, ctx->buf, 16); - memset(ctx, 0, sizeof(ctx)); /* In case it's sensitive */ + memset(ctx, 0, sizeof(*ctx)); /* In case it's sensitive */ } @@ -298,7 +286,7 @@ static bool decode = false; * Reads a single ASCII file and prints the HEX md5 sum. */ #include -int main(int argc, char *argv[]) +int main(int argc, char *argv[]) { FILE *fd; MD5Context ctx; @@ -309,7 +297,7 @@ int main(int argc, char *argv[]) while ((ch = getopt(argc, argv, "d?")) != -1) { switch (ch) { case 'd': - decode = true; + decode = true; break; case '?': default: @@ -339,10 +327,10 @@ int main(int argc, char *argv[]) } MD5Final((unsigned char *)signature, &ctx); for (int i=0; i < 16; i++) { - printf("%02x", signature[i]& 0xFF); + printf("%02x", signature[i]& 0xFF); } #ifdef OUTPUT_BASE64 - char MD5buf[40]; /* 24 should do */ + char MD5buf[40]; /* 24 should do */ memset(MD5buf, 0, 40); bin_to_base64(MD5buf, sizeof(MD5buf), (char *)signature, 16, true); /* encode 16 bytes */ printf(" %s", MD5buf); diff --git a/bacula/src/lib/md5.h b/bacula/src/lib/md5.h index a4cb81bca2..3301481f5f 100644 --- a/bacula/src/lib/md5.h +++ b/bacula/src/lib/md5.h @@ -8,29 +8,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2001-2006 Free Software Foundation Europe e.V. + Copyright (C) 2001-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ #ifndef __BMD5_H diff --git a/bacula/src/lib/mem_pool.c b/bacula/src/lib/mem_pool.c index 566a346c81..84fec5c1cf 100644 --- a/bacula/src/lib/mem_pool.c +++ b/bacula/src/lib/mem_pool.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2011 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Bacula memory pool routines. @@ -47,6 +35,7 @@ */ #include "bacula.h" +#define dbglvl DT_MEMORY|800 #ifdef HAVE_MALLOC_TRIM extern "C" int malloc_trim (size_t pad); @@ -120,7 +109,7 @@ POOLMEM *sm_get_pool_memory(const char *fname, int lineno, int pool) pool_ctl[pool].max_used = pool_ctl[pool].in_use; } V(mutex); - Dmsg3(1800, "sm_get_pool_memory reuse %p to %s:%d\n", buf, fname, lineno); + Dmsg3(dbglvl, "sm_get_pool_memory reuse %p to %s:%d\n", buf, fname, lineno); sm_new_owner(fname, lineno, (char *)buf); return (POOLMEM *)((char *)buf+HEAD_SIZE); } @@ -136,7 +125,7 @@ POOLMEM *sm_get_pool_memory(const char *fname, int lineno, int pool) pool_ctl[pool].max_used = pool_ctl[pool].in_use; } V(mutex); - Dmsg3(1800, "sm_get_pool_memory give %p to %s:%d\n", buf, fname, lineno); + Dmsg3(dbglvl, "sm_get_pool_memory give %p to %s:%d\n", buf, fname, lineno); return (POOLMEM *)((char *)buf+HEAD_SIZE); } @@ -217,13 +206,15 @@ void sm_free_pool_memory(const char *fname, int lineno, POOLMEM *obuf) if (pool == 0) { free((char *)buf); /* free nonpooled memory */ } else { /* otherwise link it to the free pool chain */ -#ifdef DEBUG + + /* Disabled because it hangs in #5507 */ +#ifdef xDEBUG struct abufhead *next; /* Don't let him free the same buffer twice */ for (next=pool_ctl[pool].free_buf; next; next=next->next) { if (next == buf) { - Dmsg4(1800, "free_pool_memory %p pool=%d from %s:%d\n", buf, pool, fname, lineno); - Dmsg4(1800, "bad free_pool_memory %p pool=%d from %s:%d\n", buf, pool, fname, lineno); + Dmsg4(dbglvl, "free_pool_memory %p pool=%d from %s:%d\n", buf, pool, fname, lineno); + Dmsg4(dbglvl, "bad free_pool_memory %p pool=%d from %s:%d\n", buf, pool, fname, lineno); V(mutex); /* unblock the pool */ ASSERT(next != buf); /* attempt to free twice */ } @@ -232,7 +223,7 @@ void sm_free_pool_memory(const char *fname, int lineno, POOLMEM *obuf) buf->next = pool_ctl[pool].free_buf; pool_ctl[pool].free_buf = buf; } - Dmsg4(1800, "free_pool_memory %p pool=%d from %s:%d\n", buf, pool, fname, lineno); + Dmsg4(dbglvl, "free_pool_memory %p pool=%d from %s:%d\n", buf, pool, fname, lineno); V(mutex); } @@ -356,7 +347,7 @@ void free_pool_memory(POOLMEM *obuf) buf->next = pool_ctl[pool].free_buf; pool_ctl[pool].free_buf = buf; } - Dmsg2(1800, "free_pool_memory %p pool=%d\n", buf, pool); + Dmsg2(dbglvl, "free_pool_memory %p pool=%d\n", buf, pool); V(mutex); } #endif /* SMARTALLOC */ @@ -410,8 +401,8 @@ void close_memory_pool() } pool_ctl[i].free_buf = NULL; } - Dmsg2(001, "Freed mem_pool count=%d size=%s\n", count, edit_uint64_with_commas(bytes, ed1)); - if (debug_level >= 1) { + Dmsg2(DT_MEMORY|001, "Freed mem_pool count=%d size=%s\n", count, edit_uint64_with_commas(bytes, ed1)); + if (chk_dbglvl(DT_MEMORY|1)) { print_memory_pool_stats(); } V(mutex); diff --git a/bacula/src/lib/mem_pool.h b/bacula/src/lib/mem_pool.h index c1a2f4d998..cc74bbeea7 100644 --- a/bacula/src/lib/mem_pool.h +++ b/bacula/src/lib/mem_pool.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2011 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Memory Pool prototypes diff --git a/bacula/src/lib/message.c b/bacula/src/lib/message.c index 3ae4d37c05..bc5da5ce65 100644 --- a/bacula/src/lib/message.c +++ b/bacula/src/lib/message.c @@ -1,39 +1,27 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2012 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Bacula message handling routines * * NOTE: don't use any Jmsg or Qmsg calls within this file, - * except in q_msg or j_msg (setup routines), + * except in q_msg or j_msg (setup routines), * otherwise you may get into recursive calls if there are * errors, and that can lead to looping or deadlocks. * - * Kern Sibbald, April 2000 + * Written by Kern Sibbald, April 2000 * */ @@ -49,24 +37,28 @@ sql_escape_func p_sql_escape = NULL; * This is where we define "Globals" because all the * daemons include this file. */ -const char *working_directory = NULL; /* working directory path stored here */ -const char *assert_msg = (char *)NULL; /* ASSERT2 error message */ -int verbose = 0; /* increase User messages */ -int debug_level = 0; /* debug level */ -bool dbg_timestamp = false; /* print timestamp in debug output */ -bool prt_kaboom = false; /* Print kaboom output */ -utime_t daemon_start_time = 0; /* Daemon start time */ +const char *working_directory = NULL; /* working directory path stored here */ +const char *assert_msg = NULL; /* ASSERT2 error message */ const char *version = VERSION " (" BDATE ")"; const char *dist_name = DISTNAME " " DISTVER; -int beef = BEEF; -char my_name[30] = {0}; /* daemon name is stored here */ -char host_name[50] = {0}; /* host machine name */ char *exepath = (char *)NULL; char *exename = (char *)NULL; -int console_msg_pending = false; +char *catalog_db = NULL; /* database type */ char con_fname[500]; /* Console filename */ +char my_name[30] = {0}; /* daemon name is stored here */ +char host_name[50] = {0}; /* host machine name */ +char fail_time[30] = {0}; /* Time of failure */ +int verbose = 0; /* increase User messages */ +int64_t debug_level = 0; /* debug level */ +int32_t debug_flags = 0; /* debug flags */ +int beef = BEEF; +int console_msg_pending = false; +utime_t daemon_start_time = 0; /* Daemon start time */ FILE *con_fd = NULL; /* Console file descriptor */ brwlock_t con_lock; /* Console lock structure */ +bool dbg_timestamp = false; /* print timestamp in debug output */ +bool prt_kaboom = false; /* Print kaboom output */ +job_code_callback_t message_job_code_callback = NULL; /* Job code callback. Only used by director. */ /* Forward referenced functions */ @@ -81,7 +73,6 @@ void create_jcr_key(); /* Allow only one thread to tweak d->fd at a time */ static pthread_mutex_t fides_mutex = PTHREAD_MUTEX_INITIALIZER; static MSGS *daemon_msgs; /* global messages */ -static char *catalog_db = NULL; /* database type */ static void (*message_callback)(int type, char *msg) = NULL; static FILE *trace_fd = NULL; #if defined(HAVE_WIN32) @@ -98,7 +89,7 @@ const char *distver = DISTVER; /* * Walk back in a string from end looking for a - * path separator. + * path separator. * This routine is passed the start of the string and * the end of the string, it returns either the beginning * of the string or where it found a path separator. @@ -106,7 +97,7 @@ const char *distver = DISTVER; static const char *bstrrpath(const char *start, const char *end) { while ( end > start ) { - end--; + end--; if (IsPathSeparator(*end)) { break; } @@ -114,6 +105,16 @@ static const char *bstrrpath(const char *start, const char *end) return end; } +/* + * Returns: 0 if not configured + * -1 on error + * 1 OK + */ +int generate_daemon_event(JCR *jcr, const char *event) +{ + return 0; +} + /* Some message class methods */ void MSGS::lock() { @@ -174,7 +175,50 @@ static void delivery_error(const char *fmt,...) fflush(stdout); syslog(LOG_DAEMON|LOG_ERR, "%s", pool_buf); free_memory(pool_buf); -} +} + +void set_debug_flags(char *options) +{ + for (char *p = options; *p ; p++) { + switch(*p) { + case '0': /* clear flags */ + debug_flags = 0; + break; + + case 'i': /* used by FD */ + case 'd': /* used by FD */ + break; + + case 't': + dbg_timestamp = true; + break; + + case 'T': + dbg_timestamp = false; + break; + + case 'c': + /* truncate the trace file */ + if (trace && trace_fd) { + ftruncate(fileno(trace_fd), 0); + } + break; + + case 'l': + /* Turn on/off add_events for P()/V() */ + debug_flags |= DEBUG_MUTEX_EVENT; + break; + + case 'p': + /* Display event stack during lockdump */ + debug_flags |= DEBUG_PRINT_EVENT; + break; + + default: + Dmsg1(000, "Unknown debug flag %c\n", *p); + } + } +} void register_message_callback(void msg_callback(int type, char *msg)) { @@ -246,6 +290,16 @@ void my_name_is(int argc, char *argv[], const char *name) } } +/* Set special ASSERT2 message where debugger can find it */ +void +set_assert_msg(const char *file, int line, const char *msg) +{ + char buf[2000]; + bsnprintf(buf, sizeof(buf), "ASSERT at %s:%d-%u ERR=%s", + get_basename(file), line, get_jobid_from_tsd(), msg); + assert_msg = bstrdup(buf); +} + void set_db_type(const char *name) { @@ -264,7 +318,7 @@ set_db_type(const char *name) * non-NULL -> initialize jcr using Message resource */ void -init_msg(JCR *jcr, MSGS *msg) +init_msg(JCR *jcr, MSGS *msg, job_code_callback_t job_code_callback) { DEST *d, *dnew, *temp_chain = NULL; int i; @@ -277,6 +331,8 @@ init_msg(JCR *jcr, MSGS *msg) set_jcr_in_tsd(INVALID_JCR); } + message_job_code_callback = job_code_callback; + #if !defined(HAVE_WIN32) /* * Make sure we have fd's 0, 1, 2 open @@ -345,7 +401,6 @@ init_msg(JCR *jcr, MSGS *msg) } Dmsg2(250, "Copy message resource %p to %p\n", msg, temp_chain); - } /* Initialize so that the console (User Agent) can @@ -470,7 +525,7 @@ static BPIPE *open_mail_pipe(JCR *jcr, POOLMEM *&cmd, DEST *d) BPIPE *bpipe; if (d->mail_cmd) { - cmd = edit_job_codes(jcr, cmd, d->mail_cmd, d->where); + cmd = edit_job_codes(jcr, cmd, d->mail_cmd, d->where, message_job_code_callback); } else { Mmsg(cmd, "/usr/lib/sendmail -F Bacula %s", d->where); } @@ -613,13 +668,13 @@ void close_msg(JCR *jcr) } free_memory(line); rem_temp_file: - /* Remove temp file */ + /* Remove temp mail file */ if (d->fd) { - fclose(d->fd); - d->fd = NULL; + fclose(d->fd); + d->fd = NULL; } + /* Exclude spaces in mail_filename */ if (d->mail_filename) { - /* Exclude spaces in mail_filename */ safer_unlink(d->mail_filename, MAIL_REGEX); free_pool_memory(d->mail_filename); d->mail_filename = NULL; @@ -655,9 +710,11 @@ void free_msgs_res(MSGS *msgs) for (d=msgs->dest_chain; d; ) { if (d->where) { free(d->where); + d->where = NULL; } if (d->mail_cmd) { free(d->mail_cmd); + d->mail_cmd = NULL; } old = d; /* save pointer to release */ d = d->next; /* point to next buffer */ @@ -705,7 +762,7 @@ void term_msg() term_last_jobs_list(); } -static bool open_dest_file(JCR *jcr, DEST *d, const char *mode) +static bool open_dest_file(JCR *jcr, DEST *d, const char *mode) { d->fd = fopen(d->where, mode); if (!d->fd) { @@ -824,7 +881,7 @@ void dispatch_message(JCR *jcr, int type, utime_t mtime, char *msg) if (p_sql_query && p_sql_escape) { POOLMEM *cmd = get_pool_memory(PM_MESSAGE); POOLMEM *esc_msg = get_pool_memory(PM_MESSAGE); - + int len = strlen(msg) + 1; esc_msg = check_pool_memory_size(esc_msg, len * 2 + 1); if (p_sql_escape(jcr, jcr->db, esc_msg, msg, len)) { @@ -837,7 +894,7 @@ void dispatch_message(JCR *jcr, int type, utime_t mtime, char *msg) } else { delivery_error(_("Msg delivery error: Unable to store data in database.\n")); } - + free_pool_memory(cmd); free_pool_memory(esc_msg); } @@ -985,15 +1042,15 @@ send_to_file: /********************************************************************* * - * This subroutine returns the filename portion of a path. - * It is used because some compilers set __FILE__ + * This subroutine returns the filename portion of a path. + * It is used because some compilers set __FILE__ * to the full path. Try to return base + next higher path. */ const char *get_basename(const char *pathname) { const char *basename; - + if ((basename = bstrrpath(pathname, pathname+strlen(pathname))) == pathname) { /* empty */ } else if ((basename = bstrrpath(pathname, basename-1)) == pathname) { @@ -1005,7 +1062,7 @@ const char *get_basename(const char *pathname) } /* - * print or write output to trace file + * print or write output to trace file */ static void pt_out(char *buf) { @@ -1044,7 +1101,7 @@ static void pt_out(char *buf) * are not printed. */ void -d_msg(const char *file, int line, int level, const char *fmt,...) +d_msg(const char *file, int line, int64_t level, const char *fmt,...) { char buf[5000]; int len; @@ -1057,7 +1114,7 @@ d_msg(const char *file, int line, int level, const char *fmt,...) level = -level; } - if (level <= debug_level) { + if (chk_dbglvl(level)) { if (dbg_timestamp) { mtime = time(NULL); bstrftimes(buf, sizeof(buf), mtime); @@ -1066,10 +1123,10 @@ d_msg(const char *file, int line, int level, const char *fmt,...) buf[len] = 0; pt_out(buf); } - + #ifdef FULL_LOCATION if (details) { - len = bsnprintf(buf, sizeof(buf), "%s: %s:%d-%u ", + len = bsnprintf(buf, sizeof(buf), "%s: %s:%d-%u ", my_name, get_basename(file), line, get_jobid_from_tsd()); } else { len = 0; @@ -1140,7 +1197,7 @@ p_msg(const char *file, int line, int level, const char *fmt,...) #ifdef FULL_LOCATION if (level >= 0) { - len = bsnprintf(buf, sizeof(buf), "%s: %s:%d-%u ", + len = bsnprintf(buf, sizeof(buf), "%s: %s:%d-%u ", my_name, get_basename(file), line, get_jobid_from_tsd()); } else { len = 0; @@ -1153,7 +1210,7 @@ p_msg(const char *file, int line, int level, const char *fmt,...) bvsnprintf(buf+len, sizeof(buf)-len, (char *)fmt, arg_ptr); va_end(arg_ptr); - pt_out(buf); + pt_out(buf); } @@ -1168,7 +1225,7 @@ p_msg(const char *file, int line, int level, const char *fmt,...) * are not printed. */ void -t_msg(const char *file, int line, int level, const char *fmt,...) +t_msg(const char *file, int line, int64_t level, const char *fmt,...) { char buf[5000]; int len; @@ -1180,7 +1237,7 @@ t_msg(const char *file, int line, int level, const char *fmt,...) level = -level; } - if (level <= debug_level) { + if (chk_dbglvl(level)) { if (!trace_fd) { bsnprintf(buf, sizeof(buf), "%s/%s.trace", working_directory ? working_directory : ".", my_name); trace_fd = fopen(buf, "a+b"); @@ -1319,7 +1376,7 @@ Jmsg(JCR *jcr, int type, utime_t mtime, const char *fmt,...) if (jcr) { if (!jcr->dequeuing_msgs) { /* Avoid recursion */ /* Dequeue messages to keep the original order */ - dequeue_messages(jcr); + dequeue_messages(jcr); } msgs = jcr->jcr_msgs; JobId = jcr->JobId; @@ -1365,7 +1422,7 @@ Jmsg(JCR *jcr, int type, utime_t mtime, const char *fmt,...) } break; case M_SECURITY: - len = bsnprintf(rbuf, sizeof(rbuf), _("%s JobId %u: Security violation: "), + len = bsnprintf(rbuf, sizeof(rbuf), _("%s JobId %u: Security violation: "), my_name, JobId); break; default: @@ -1624,3 +1681,105 @@ void q_msg(const char *file, int line, JCR *jcr, int type, utime_t mtime, const Qmsg(jcr, type, mtime, "%s", pool_buf); free_memory(pool_buf); } + + +/* not all in alphabetical order. New commands are added after existing commands with similar letters + to prevent breakage of existing user scripts. */ +struct debugtags { + const char *tag; /* command */ + int64_t bit; /* bit to set */ + const char *help; /* main purpose */ +}; + +/* setdebug tag=all,-plugin */ +static struct debugtags debug_tags[] = { + { NT_("lock"), DT_LOCK, _("Debug lock information")}, + { NT_("network"), DT_NETWORK, _("Debug network information")}, + { NT_("plugin"), DT_PLUGIN, _("Debug plugin information")}, + { NT_("volume"), DT_VOLUME, _("Debug volume information")}, + { NT_("sql"), DT_SQL, _("Debug SQL queries")}, + { NT_("bvfs"), DT_BVFS, _("Debug BVFS queries")}, + { NT_("memory"), DT_MEMORY, _("Debug memory allocation")}, + { NT_("scheduler"), DT_SCHEDULER,_("Debug scheduler information")}, + { NT_("protocol"), DT_PROTOCOL, _("Debug protocol information")}, + { NT_("all"), DT_ALL, _("Debug all information")}, + { NULL, 0, NULL} +}; + +/* Allow +-, */ +bool debug_find_tag(const char *tagname, bool add, int64_t *current_level) +{ + Dmsg3(010, "add=%d tag=%s level=%lld\n", add, tagname, *current_level); + if (!*tagname) { + /* Nothing in the buffer */ + return true; + } + for (int i=0; debug_tags[i].tag ; i++) { + if (strcasecmp(debug_tags[i].tag, tagname) == 0) { + if (add) { + *current_level |= debug_tags[i].bit; + } else { + *current_level &= ~(debug_tags[i].bit); + } + return true; + } + } + return false; +} + +bool debug_parse_tags(const char *options, int64_t *current_level) +{ + bool operation; /* + => true, - false */ + char *p, *t, tag[256]; + int max = sizeof(tag) - 1; + bool ret=true; + int64_t level= *current_level; + + t = tag; + *tag = 0; + operation = true; /* add by default */ + + if (!options) { + Dmsg0(100, "No options for tags\n"); + return false; + } + + for (p = (char *)options; *p ; p++) { + if (*p == ',' || *p == '+' || *p == '-' || *p == '!') { + /* finish tag keyword */ + *t = 0; + /* handle tag */ + ret &= debug_find_tag(tag, operation, &level); + + if (*p == ',') { + /* reset tag */ + t = tag; + *tag = 0; + operation = true; + + } else { + /* reset tag */ + t = tag; + *tag = 0; + operation = (*p == '+'); + } + + } else if (isalpha(*p) && (t - tag) < max) { + *t++ = *p; + + } else { /* not isalpha or too long */ + Dmsg1(010, "invalid %c\n", *p); + return false; + } + } + + /* At the end, finish the string and look it */ + *t = 0; + if (t > tag) { /* something found */ + /* handle tag */ + ret &= debug_find_tag(tag, operation, &level); + } + + *current_level = level; + return ret; +} diff --git a/bacula/src/lib/message.h b/bacula/src/lib/message.h index fd6141e11b..382606f704 100644 --- a/bacula/src/lib/message.h +++ b/bacula/src/lib/message.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2011 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Define Message Types for Bacula @@ -139,12 +127,44 @@ struct MQUEUE_ITEM { char msg[1]; }; - -void d_msg(const char *file, int line, int level, const char *fmt,...); -void e_msg(const char *file, int line, int type, int level, const char *fmt,...); -void Jmsg(JCR *jcr, int type, utime_t mtime, const char *fmt,...); -void Qmsg(JCR *jcr, int type, utime_t mtime, const char *fmt,...); +/* Debug options */ +#define DEBUG_CLEAR_FLAGS /* 0 clear debug_flags */ +#define DEBUG_NO_WIN32_WRITE_ERROR /* i continue even after win32 errors */ +#define DEBUG_WIN32DECOMP /* d */ +#define DEBUG_DBG_TIMESTAMP /* t turn on timestamp in trace file */ +#define DEBUG_DBG_NO_TIMESTAMP /* T turn off timestamp in trace file */ +#define DEBUG_TRUNCATE_TRACE /* c clear trace file if opened */ + +/* Bits (1, 2, 4, ...) for debug_flags used by set_debug_flags() */ +#define DEBUG_MUTEX_EVENT (1 << 0) /* l */ +#define DEBUG_PRINT_EVENT (1 << 1) /* p */ + +/* Tags that can be used with the setdebug command + * We can extend this list to use 64bit + * When adding new ones, keep existing one + * Corresponding strings are defined in messages.c (debugtags) + */ +#define DT_LOCK (1<<30) /* lock */ +#define DT_NETWORK (1<<29) /* network */ +#define DT_PLUGIN (1<<28) /* plugin */ +#define DT_VOLUME (1<<27) /* volume */ +#define DT_SQL (1<<26) /* sql */ +#define DT_BVFS (1<<25) /* bvfs */ +#define DT_MEMORY (1<<24) /* memory */ +#define DT_SCHEDULER (1<<23) /* scheduler */ +#define DT_PROTOCOL (1<<22) /* protocol */ +#define DT_ALL (0x7FFF0000) /* all (up to debug_level 65635, 15 flags available) */ + +bool debug_find_tag(const char *tagname, bool add, int64_t *current_level); +bool debug_parse_tags(const char *options, int64_t *current_level); + + +void d_msg(const char *file, int line, int64_t level, const char *fmt,...) CHECK_FORMAT(printf, 4, 5); +void e_msg(const char *file, int line, int type, int level, const char *fmt,...) CHECK_FORMAT(printf, 5, 6);; +void Jmsg(JCR *jcr, int type, utime_t mtime, const char *fmt,...) CHECK_FORMAT(printf, 4, 5); +void Qmsg(JCR *jcr, int type, utime_t mtime, const char *fmt,...) CHECK_FORMAT(printf, 4, 5); bool get_trace(void); +void set_debug_flags(char *options); const char *get_basename(const char *pathname); class B_DB; @@ -154,12 +174,12 @@ typedef bool (*sql_escape_func)(JCR *jcr, B_DB *db, char *snew, char *old, int l extern DLL_IMP_EXP sql_query_func p_sql_query; extern DLL_IMP_EXP sql_escape_func p_sql_escape; -extern DLL_IMP_EXP int debug_level; +extern DLL_IMP_EXP int64_t debug_level; +extern DLL_IMP_EXP int32_t debug_flags; extern DLL_IMP_EXP bool dbg_timestamp; /* print timestamp in debug output */ extern DLL_IMP_EXP bool prt_kaboom; /* Print kaboom output */ extern DLL_IMP_EXP int verbose; extern DLL_IMP_EXP char my_name[]; -extern DLL_IMP_EXP const char *assert_msg; /* Assert error message */ extern DLL_IMP_EXP const char * working_directory; extern DLL_IMP_EXP utime_t daemon_start_time; diff --git a/bacula/src/lib/mntent_cache.c b/bacula/src/lib/mntent_cache.c index ca2c8a8db4..0b34c704bd 100644 --- a/bacula/src/lib/mntent_cache.c +++ b/bacula/src/lib/mntent_cache.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2009-2011 Free Software Foundation Europe e.V. + Copyright (C) 2009-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /** diff --git a/bacula/src/lib/mntent_cache.h b/bacula/src/lib/mntent_cache.h index 82c2f64f1f..9a064fb591 100644 --- a/bacula/src/lib/mntent_cache.h +++ b/bacula/src/lib/mntent_cache.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2009-2010 Free Software Foundation Europe e.V. + Copyright (C) 2009-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* diff --git a/bacula/src/lib/mutex_list.h b/bacula/src/lib/mutex_list.h index 2f07dd589b..ab76b14cf3 100644 --- a/bacula/src/lib/mutex_list.h +++ b/bacula/src/lib/mutex_list.h @@ -1,44 +1,33 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2009-2009 Free Software Foundation Europe e.V. + Copyright (C) 2009-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation, which is - listed in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ #ifndef MUTEX_LIST_H #define MUTEX_LIST_H 1 -/* +/* * Use this list to manage lock order and protect the Bacula from * race conditions and dead locks */ -#define PRIO_SD_DEV_ACQUIRE 4 /* dev.acquire_mutex */ -#define PRIO_SD_DEV_ACCESS 5 /* dev.m_mutex */ -#define PRIO_SD_VOL_LIST 0 /* vol_list_lock */ -#define PRIO_SD_READ_VOL_LIST 12 /* read_vol_list */ -#define PRIO_SD_DEV_SPOOL 14 /* dev.spool_mutex */ -#define PRIO_SD_ACH_ACCESS 16 /* autochanger lock mutex */ +#define PRIO_SD_DEV_ACQUIRE 4 /* dev.acquire_mutex */ +#define PRIO_SD_DEV_ACCESS 5 /* dev.m_mutex */ +#define PRIO_SD_VOL_LIST 0 /* vol_list_lock */ +#define PRIO_SD_VOL_INFO 12 /* vol_info_mutex */ +#define PRIO_SD_READ_VOL_LIST 13 /* read_vol_list */ +#define PRIO_SD_DEV_SPOOL 14 /* dev.spool_mutex */ +#define PRIO_SD_ACH_ACCESS 16 /* autochanger lock mutex */ #endif diff --git a/bacula/src/lib/openssl.c b/bacula/src/lib/openssl.c index 57fea7cacf..647f38eff1 100644 --- a/bacula/src/lib/openssl.c +++ b/bacula/src/lib/openssl.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2005-2011 Free Software Foundation Europe e.V. + Copyright (C) 2005-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * openssl.c OpenSSL support functions @@ -98,7 +86,7 @@ static unsigned long get_openssl_thread_id(void) return (unsigned long)getpid(); #else /* - * Comparison without use of pthread_equal() is mandated by the OpenSSL API + * Comparison without use of pthread_equal() is mandated by the OpenSSL API * * Note: this creates problems with the new Win32 pthreads * emulation code, which defines pthread_t as a structure. @@ -204,14 +192,14 @@ void openssl_cleanup_threads(void) /* Unset thread ID callback */ CRYPTO_set_id_callback(NULL); - + /* Deallocate static lock mutexes */ numlocks = CRYPTO_num_locks(); for (i = 0; i < numlocks; i++) { if ((stat = pthread_mutex_destroy(&mutexes[i])) != 0) { berrno be; /* We don't halt execution, reporting the error should be sufficient */ - Jmsg1(NULL, M_ERROR, 0, _("Unable to destroy mutex: ERR=%s\n"), + Jmsg1(NULL, M_ERROR, 0, _("Unable to destroy mutex: ERR=%s\n"), be.bstrerror(stat)); } } diff --git a/bacula/src/lib/openssl.h b/bacula/src/lib/openssl.h index da48dafbe0..339fafe079 100644 --- a/bacula/src/lib/openssl.h +++ b/bacula/src/lib/openssl.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2005-2007 Free Software Foundation Europe e.V. + Copyright (C) 2005-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * openssl.h OpenSSL support functions diff --git a/bacula/src/lib/parse_conf.c b/bacula/src/lib/parse_conf.c index b2a3a98f06..ced418c02e 100644 --- a/bacula/src/lib/parse_conf.c +++ b/bacula/src/lib/parse_conf.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2012 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Master Configuration routines. @@ -149,7 +137,7 @@ struct s_kw { }; /* - * Tape Label types permitted in Pool records + * Tape Label types permitted in Pool records * * tape label label code = token */ @@ -322,7 +310,7 @@ void store_msgs(LEX *lc, RES_ITEM *item, int index, int pass) */ static void scan_types(LEX *lc, MSGS *msg, int dest_code, char *where, char *cmd) { - int i; + int i; bool found, is_not; int msg_type = 0; char *str; @@ -531,7 +519,7 @@ void store_alist_res(LEX *lc, RES_ITEM *item, int index, int pass) item->name, lc->line_no, lc->line); return; } - Dmsg5(900, "Append %p to alist %p size=%d i=%d %s\n", + Dmsg5(900, "Append %p to alist %p size=%d i=%d %s\n", res, list, list->size(), i, item->name); list->append(res); (item->value)[i] = (char *)list; @@ -557,11 +545,11 @@ void store_alist_str(LEX *lc, RES_ITEM *item, int index, int pass) if (*(item->value) == NULL) { list = New(alist(10, owned_by_alist)); } else { - list = (alist *)(*(item->value)); + list = (alist *)(*(item->value)); } lex_get_token(lc, T_STRING); /* scan next item */ - Dmsg4(900, "Append %s to alist %p size=%d %s\n", + Dmsg4(900, "Append %s to alist %p size=%d %s\n", lc->str, list, list->size(), item->name); list->append(bstrdup(lc->str)); *(item->value) = (char *)list; @@ -634,7 +622,7 @@ enum store_unit_type { } ; /* Store a size in bytes */ -static void store_int_unit(LEX *lc, RES_ITEM *item, int index, int pass, +static void store_int_unit(LEX *lc, RES_ITEM *item, int index, int pass, bool size32, enum store_unit_type type) { int token; @@ -678,7 +666,7 @@ static void store_int_unit(LEX *lc, RES_ITEM *item, int index, int pass, } break; default: - scan_err2(lc, _("expected a %s, got: %s"), + scan_err2(lc, _("expected a %s, got: %s"), (type == STORE_SIZE)?_("size"):_("speed"), lc->str); return; } @@ -858,15 +846,15 @@ parse_config(const char *cf, LEX_ERROR_HANDLER *scan_error, int err_type) { int ok; CONFIG *config = new_config_parser(); - config->init(cf, scan_error, err_type, (void *)&res_all, res_all_size, + config->init(cf, scan_error, err_type, (void *)&res_all, res_all_size, r_first, r_last, resources, res_head); ok = config->parse_config(); free(config); return ok; } #endif - - + + bool CONFIG::parse_config() { LEX *lc = NULL; @@ -1067,7 +1055,7 @@ const char *get_default_configdir() /* * Returns false on error - * true on OK, with full_path set to where config file should be + * true on OK, with full_path set to where config file should be */ static bool find_config_file(const char *config_file, char *full_path, int max_path) diff --git a/bacula/src/lib/parse_conf.h b/bacula/src/lib/parse_conf.h index 0a83353567..88ac9d240d 100644 --- a/bacula/src/lib/parse_conf.h +++ b/bacula/src/lib/parse_conf.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2010 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * @@ -156,7 +144,7 @@ public: inline char *MSGS::name() const { return hdr.name; } -/* +/* * Old C style configuration routines -- deprecated do not use. */ //int parse_config(const char *cf, LEX_ERROR_HANDLER *scan_error = NULL, int err_type=M_ERROR_TERM); @@ -179,7 +167,7 @@ public: /* The below are not yet implemented */ int32_t m_r_first; /* first daemon resource type */ int32_t m_r_last; /* last daemon resource type */ - RES_TABLE *m_resources; /* pointer to table of permitted resources */ + RES_TABLE *m_resources; /* pointer to table of permitted resources */ RES **m_res_head; /* pointer to defined resources */ brwlock_t m_res_lock; /* resource lock */ @@ -200,7 +188,7 @@ public: RES **save_resources(); RES **new_res_head(); }; - + CONFIG *new_config_parser(); @@ -219,7 +207,7 @@ const char *res_to_str(int rcode); #ifdef HAVE_TYPEOF #define foreach_res(var, type) \ for((var)=NULL; ((var)=(typeof(var))GetNextRes((type), (RES *)var));) -#else +#else #define foreach_res(var, type) \ for(var=NULL; (*((void **)&(var))=(void *)GetNextRes((type), (RES *)var));) #endif diff --git a/bacula/src/lib/plugins.c b/bacula/src/lib/plugins.c index e6cf7b03ad..fef2787f33 100644 --- a/bacula/src/lib/plugins.c +++ b/bacula/src/lib/plugins.c @@ -1,29 +1,17 @@ /* - Bacula(R) - The Network Backup Solution + Bacula® - The Network Backup Solution - Copyright (C) 2007-2012 Free Software Foundation Europe e.V. + Copyright (C) 2007-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation, which is - listed in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. - - Bacula(R) is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. + Bacula® is a registered trademark of Kern Sibbald. */ /* * Plugin load/unloader for all Bacula daemons @@ -49,7 +37,7 @@ int readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result); static const int dbglvl = 50; -/* +/* * List of all loaded plugins. * * NOTE!!! This is a global do not try walking it with @@ -60,7 +48,7 @@ alist *bplugin_list = NULL; /* * Create a new plugin "class" entry and enter it in the * list of plugins. Note, this is not the same as - * an instance of the plugin. + * an instance of the plugin. */ Plugin *new_plugin() { @@ -91,7 +79,7 @@ static void close_plugin(Plugin *plugin) /* * Load all the plugins in the specified directory. */ -bool load_plugins(void *binfo, void *bfuncs, const char *plugin_dir, +bool load_plugins(void *binfo, void *bfuncs, const char *plugin_dir, const char *type, bool is_plugin_compatible(Plugin *plugin)) { bool found = false; @@ -114,13 +102,13 @@ bool load_plugins(void *binfo, void *bfuncs, const char *plugin_dir, if (!(dp = opendir(plugin_dir))) { berrno be; - Jmsg(NULL, M_ERROR_TERM, 0, _("Failed to open Plugin directory %s: ERR=%s\n"), + Jmsg(NULL, M_ERROR_TERM, 0, _("Failed to open Plugin directory %s: ERR=%s\n"), plugin_dir, be.bstrerror()); - Dmsg2(dbglvl, "Failed to open Plugin directory %s: ERR=%s\n", + Dmsg2(dbglvl, "Failed to open Plugin directory %s: ERR=%s\n", plugin_dir, be.bstrerror()); goto get_out; } - + len = strlen(plugin_dir); if (len > 0) { need_slash = !IsPathSeparator(plugin_dir[len - 1]); @@ -131,13 +119,13 @@ bool load_plugins(void *binfo, void *bfuncs, const char *plugin_dir, if ((readdir_r(dp, entry, &result) != 0) || (result == NULL)) { if (!found) { - Jmsg(NULL, M_WARNING, 0, _("Failed to find any plugins in %s\n"), + Jmsg(NULL, M_WARNING, 0, _("Failed to find any plugins in %s\n"), plugin_dir); Dmsg1(dbglvl, "Failed to find any plugins in %s\n", plugin_dir); } break; } - if (strcmp(result->d_name, ".") == 0 || + if (strcmp(result->d_name, ".") == 0 || strcmp(result->d_name, "..") == 0) { continue; } @@ -149,7 +137,7 @@ bool load_plugins(void *binfo, void *bfuncs, const char *plugin_dir, continue; } Dmsg2(dbglvl, "Found plugin: name=%s len=%d\n", result->d_name, len); - + pm_strcpy(fname, plugin_dir); if (need_slash) { pm_strcat(fname, "/"); @@ -165,9 +153,9 @@ bool load_plugins(void *binfo, void *bfuncs, const char *plugin_dir, plugin->pHandle = dlopen(fname.c_str(), RTLD_NOW); if (!plugin->pHandle) { const char *error = dlerror(); - Jmsg(NULL, M_ERROR, 0, _("dlopen plugin %s failed: ERR=%s\n"), + Jmsg(NULL, M_ERROR, 0, _("dlopen plugin %s failed: ERR=%s\n"), fname.c_str(), NPRT(error)); - Dmsg2(dbglvl, "dlopen plugin %s failed: ERR=%s\n", fname.c_str(), + Dmsg2(dbglvl, "dlopen plugin %s failed: ERR=%s\n", fname.c_str(), NPRT(error)); close_plugin(plugin); continue; @@ -178,7 +166,7 @@ bool load_plugins(void *binfo, void *bfuncs, const char *plugin_dir, if (!loadPlugin) { Jmsg(NULL, M_ERROR, 0, _("Lookup of loadPlugin in plugin %s failed: ERR=%s\n"), fname.c_str(), NPRT(dlerror())); - Dmsg2(dbglvl, "Lookup of loadPlugin in plugin %s failed: ERR=%s\n", + Dmsg2(dbglvl, "Lookup of loadPlugin in plugin %s failed: ERR=%s\n", fname.c_str(), NPRT(dlerror())); close_plugin(plugin); continue; @@ -199,7 +187,7 @@ bool load_plugins(void *binfo, void *bfuncs, const char *plugin_dir, continue; } if (!is_plugin_compatible) { - Dmsg0(50, "Plugin compatibility pointer not set.\n"); + Dmsg0(50, "Plugin compatibility pointer not set.\n"); } else if (!is_plugin_compatible(plugin)) { close_plugin(plugin); continue; @@ -223,7 +211,7 @@ get_out: } /* - * Unload all the loaded plugins + * Unload all the loaded plugins */ void unload_plugins() { diff --git a/bacula/src/lib/plugins.h b/bacula/src/lib/plugins.h index ff6901616f..b5f90210c7 100644 --- a/bacula/src/lib/plugins.h +++ b/bacula/src/lib/plugins.h @@ -1,29 +1,17 @@ /* - Bacula(R) - The Network Backup Solution - - Copyright (C) 2007-2011 Free Software Foundation Europe e.V. - - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation, which is - listed in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. - - Bacula(R) is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. + Bacula® - The Network Backup Solution + + Copyright (C) 2007-2014 Free Software Foundation Europe e.V. + + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. + + Bacula® is a registered trademark of Kern Sibbald. */ /* * Common plugin definitions @@ -86,7 +74,7 @@ public: /* Functions */ extern Plugin *new_plugin(); -extern bool load_plugins(void *binfo, void *bfuncs, const char *plugin_dir, +extern bool load_plugins(void *binfo, void *bfuncs, const char *plugin_dir, const char *type, bool is_plugin_compatible(Plugin *plugin)); extern void unload_plugins(); diff --git a/bacula/src/lib/priv.c b/bacula/src/lib/priv.c index cfa4ec7689..08f625e9cc 100644 --- a/bacula/src/lib/priv.c +++ b/bacula/src/lib/priv.c @@ -1,29 +1,17 @@ /* - Bacula® - The Network Backup Solution + Bacula® - The Network Backup Solution - Copyright (C) 2000-2011 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. - - Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. + Bacula® is a registered trademark of Kern Sibbald. */ #include "bacula.h" diff --git a/bacula/src/lib/protos.h b/bacula/src/lib/protos.h index d04c84746d..2e3f09b6fe 100644 --- a/bacula/src/lib/protos.h +++ b/bacula/src/lib/protos.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2012 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Prototypes for lib directory of Bacula @@ -35,6 +23,9 @@ class JCR; +/* address_conf.c */ +void remove_duplicate_addresses(dlist *addr_list); + /* attr.c */ ATTR *new_attr(JCR *jcr); void free_attr(ATTR *attr); @@ -46,16 +37,19 @@ void print_ls_output(JCR *jcr, ATTR *attr); void base64_init (void); int to_base64 (int64_t value, char *where); int from_base64 (int64_t *value, char *where); -int bin_to_base64 (char *buf, int buflen, char *bin, int binlen, +int bin_to_base64 (char *buf, int buflen, char *bin, int binlen, int compatible); int base64_to_bin(char *dest, int destlen, char *src, int srclen); /* bsys.c */ +POOLMEM *quote_string (POOLMEM *snew, const char *old); +POOLMEM *quote_where (POOLMEM *snew, const char *old); char *bstrncpy (char *dest, const char *src, int maxlen); char *bstrncpy (char *dest, POOL_MEM &src, int maxlen); char *bstrncat (char *dest, const char *src, int maxlen); char *bstrncat (char *dest, POOL_MEM &src, int maxlen); bool bstrcmp (const char *s1, const char *s2); +bool bstrcasecmp (const char *s1, const char *s2); int cstrlen (const char *str); void *b_malloc (const char *file, int line, size_t size); #ifndef bmalloc @@ -86,20 +80,10 @@ void stack_trace(); int safer_unlink(const char *pathname, const char *regex); /* bnet.c */ -int32_t bnet_recv (BSOCK *bsock); -bool bnet_send (BSOCK *bsock); -bool bnet_fsend (BSOCK *bs, const char *fmt, ...); -bool bnet_set_buffer_size (BSOCK *bs, uint32_t size, int rw); -bool bnet_sig (BSOCK *bs, int sig); bool bnet_tls_server (TLS_CONTEXT *ctx, BSOCK *bsock, alist *verify_list); bool bnet_tls_client (TLS_CONTEXT *ctx, BSOCK *bsock, alist *verify_list); -BSOCK * bnet_connect (JCR *jcr, int retry_interval, - utime_t max_retry_time, utime_t heart_beat, - const char *name, char *host, char *service, - int port, int verbose); -void bnet_close (BSOCK *bsock); BSOCK * init_bsock (JCR *jcr, int sockfd, const char *who, const char *ip, int port, struct sockaddr *client_addr); #ifdef HAVE_WIN32 @@ -112,15 +96,9 @@ BSOCK * dup_bsock (BSOCK *bsock); void term_bsock (BSOCK *bsock); const char *bnet_strerror (BSOCK *bsock); const char *bnet_sig_to_ascii (BSOCK *bsock); -int bnet_wait_data (BSOCK *bsock, int sec); -int bnet_wait_data_intr (BSOCK *bsock, int sec); -bool is_bnet_stop (BSOCK *bsock); -int is_bnet_error (BSOCK *bsock); -void bnet_suppress_error_messages(BSOCK *bsock, bool flag); dlist *bnet_host2ipaddrs(const char *host, int family, const char **errstr); -int bnet_set_blocking (BSOCK *sock); -int bnet_set_nonblocking (BSOCK *sock); void bnet_restore_blocking (BSOCK *sock, int flags); +int set_socket_errno(int sockstat); /* bget_msg.c */ int bget_msg(BSOCK *sock); @@ -147,7 +125,7 @@ bool crypto_digest_update (DIGEST *digest, const uint8_t *d bool crypto_digest_finalize (DIGEST *digest, uint8_t *dest, uint32_t *length); void crypto_digest_free (DIGEST *digest); SIGNATURE * crypto_sign_new (JCR *jcr); -crypto_error_t crypto_sign_get_digest (SIGNATURE *sig, X509_KEYPAIR *keypair, +crypto_error_t crypto_sign_get_digest (SIGNATURE *sig, X509_KEYPAIR *keypair, crypto_digest_t &algorithm, DIGEST **digest); crypto_error_t crypto_sign_verify (SIGNATURE *sig, X509_KEYPAIR *keypair, DIGEST *digest); int crypto_sign_add_signer (SIGNATURE *sig, DIGEST *digest, X509_KEYPAIR *keypair); @@ -157,7 +135,7 @@ void crypto_sign_free (SIGNATURE *sig); CRYPTO_SESSION * crypto_session_new (crypto_cipher_t cipher, alist *pubkeys); void crypto_session_free (CRYPTO_SESSION *cs); bool crypto_session_encode (CRYPTO_SESSION *cs, uint8_t *dest, uint32_t *length); -crypto_error_t crypto_session_decode (const uint8_t *data, uint32_t length, alist *keypairs, CRYPTO_SESSION **session); +crypto_error_t crypto_session_decode (const uint8_t *data, uint32_t length, alist *keypairs, CRYPTO_SESSION **session); CRYPTO_SESSION * crypto_session_decode (const uint8_t *data, uint32_t length); CIPHER_CONTEXT * crypto_cipher_new (CRYPTO_SESSION *cs, bool encrypt, uint32_t *blocksize); bool crypto_cipher_update (CIPHER_CONTEXT *cipher_ctx, const uint8_t *data, uint32_t length, const uint8_t *dest, uint32_t *written); @@ -214,7 +192,7 @@ int job_count(); JCR *get_jcr_from_tsd(); void set_jcr_in_tsd(JCR *jcr); void remove_jcr_from_tsd(JCR *jcr); -uint32_t get_jobid_from_tsd(); +uint32_t get_jobid_from_tsd(); uint32_t get_jobid_from_tid(pthread_t tid); @@ -228,9 +206,14 @@ int lex_get_token (LEX *lf, int expect); void lex_set_default_error_handler (LEX *lf); int lex_set_error_handler_error_type (LEX *lf, int err_type); +/* Required typedef, not in a C file */ +extern "C" { +typedef char *(*job_code_callback_t)(JCR *, const char *); +} + /* message.c */ void my_name_is (int argc, char *argv[], const char *name); -void init_msg (JCR *jcr, MSGS *msg); +void init_msg (JCR *jcr, MSGS *msg, job_code_callback_t job_code_callback = NULL); void term_msg (void); void close_msg (JCR *jcr); void add_msg_dest (MSGS *msg, int dest, int type, char *where, char *dest_code); @@ -245,6 +228,7 @@ bool get_trace (void); void set_hangup (int hangup_value); int get_hangup (void); void set_db_type (const char *name); +void set_assert_msg (const char *file, int line, const char *msg); void register_message_callback(void msg_callback(int type, char *msg)); /* bnet_server.c */ @@ -256,9 +240,7 @@ int net_connect (int port); BSOCK * bnet_bind (int port); BSOCK * bnet_accept (BSOCK *bsock, char *who); -/* pythonlib.c */ typedef int (EVENT_HANDLER)(JCR *jcr, const char *event); -//EVENT_HANDLER *generate_daemon_event; int generate_daemon_event(JCR *jcr, const char *event); /* signal.c */ @@ -312,11 +294,6 @@ bool get_tls_enable (TLS_CONTEXT *ctx); /* util.c */ - -extern "C" { -typedef char *(*job_code_callback_t)(JCR *, const char *); -} - bool is_buf_zero (char *buf, int len); void lcase (char *str); void bash_spaces (char *str); @@ -342,7 +319,6 @@ POOLMEM * edit_job_codes (JCR *jcr, char *omsg, char *imsg, cons void set_working_directory (char *wd); const char * last_path_separator (const char *str); - /* watchdog.c */ int start_watchdog(void); int stop_watchdog(void); diff --git a/bacula/src/lib/pythonlib.c b/bacula/src/lib/pythonlib.c deleted file mode 100644 index 4967968a45..0000000000 --- a/bacula/src/lib/pythonlib.c +++ /dev/null @@ -1,358 +0,0 @@ -/* - Bacula® - The Network Backup Solution - - Copyright (C) 2004-2011 Free Software Foundation Europe e.V. - - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. - - Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. -*/ -/* - * - * Bacula common code library interface to Python - * - * Kern Sibbald, November MMIV - * - */ - -#include "bacula.h" -#include "jcr.h" - -#ifdef HAVE_PYTHON - -#undef _POSIX_C_SOURCE -#include - -#include "pythonlib.h" - -/* Forward referenced subroutines */ -static void init_python_lock(); -static void term_python_lock(); - -static PyObject *bacula_module = NULL; /* We create this */ -static PyObject *StartUp_module = NULL; /* We import this */ - -/* These are the daemon events or methods that are defined */ -static PyObject *JobStart_method = NULL; -static PyObject *JobEnd_method = NULL; -static PyObject *Exit_method = NULL; - -static PyObject *set_bacula_events(PyObject *self, PyObject *args); -static PyObject *bacula_write(PyObject *self, PyObject *args); - -PyObject *find_method(PyObject *eventsObject, PyObject *method, const char *name); - -/* Define Bacula daemon method entry points */ -static PyMethodDef BaculaMethods[] = { - {"set_events", set_bacula_events, METH_VARARGS, "Define Bacula events."}, - {"write", bacula_write, METH_VARARGS, "Write output."}, - {NULL, NULL, 0, NULL} /* last item */ -}; - -static char my_version[] = VERSION " " BDATE; - -/* - * This is a Bacula Job type as defined in Python. We store a pointer - * to the jcr. That is all we need, but the user's script may keep - * local data attached to this. - */ -typedef struct s_JobObject { - PyObject_HEAD - JCR *jcr; -} JobObject; - -static PyTypeObject JobType = { - PyObject_HEAD_INIT(NULL) - /* Other items filled in in code below */ -}; - -/* Return the JCR pointer from the JobObject */ -JCR *get_jcr_from_PyObject(PyObject *self) -{ - if (!self) { - return NULL; - } - return ((JobObject *)self)->jcr; -} - -/* Start the interpreter */ -void init_python_interpreter(init_python_interpreter_args *args) -{ - char buf[MAXSTRING]; - - if (!args->scriptdir || args->scriptdir[0] == 0) { - Dmsg1(100, "No script dir. prog=%s\n", args->modulename); - return; - } - Dmsg2(100, "Script dir=%s prog=%s\n", args->scriptdir, args->modulename); - - Py_SetProgramName((char *)args->progname); - Py_Initialize(); - PyEval_InitThreads(); - bacula_module = Py_InitModule("bacula", BaculaMethods); - PyModule_AddStringConstant(bacula_module, "Name", my_name); - PyModule_AddStringConstant(bacula_module, "Version", my_version); - PyModule_AddStringConstant(bacula_module, "ConfigFile", (char *)args->configfile); - PyModule_AddStringConstant(bacula_module, "WorkingDir", (char *)args->workingdir); - if (!bacula_module) { - Jmsg0(NULL, M_ERROR_TERM, 0, _("Could not initialize Python\n")); - } - bsnprintf(buf, sizeof(buf), "import sys\n" - "sys.path.append('%s')\n", args->scriptdir); - if (PyRun_SimpleString(buf) != 0) { - Jmsg1(NULL, M_ERROR_TERM, 0, _("Could not Run Python string %s\n"), buf); - } - - /* Explicitly set values we want */ - JobType.tp_name = "Bacula.Job"; - JobType.tp_basicsize = sizeof(JobObject); - JobType.tp_flags = Py_TPFLAGS_DEFAULT; - JobType.tp_doc = "Bacula Job object"; - JobType.tp_getattr = args->job_getattr; - JobType.tp_setattr = args->job_setattr; - - if (PyType_Ready(&JobType) != 0) { - Jmsg0(NULL, M_ERROR_TERM, 0, _("Could not initialize Python Job type.\n")); - PyErr_Print(); - } - StartUp_module = PyImport_ImportModule((char *)args->modulename); - if (!StartUp_module) { - Emsg2(M_ERROR, 0, _("Could not import Python script %s/%s. Python disabled.\n"), - args->scriptdir, args->modulename); - if (PyErr_Occurred()) { - PyErr_Print(); - Dmsg0(000, "Python Import error.\n"); - } - } - PyEval_ReleaseLock(); - init_python_lock(); -} - -void term_python_interpreter() -{ - if (StartUp_module) { - Py_XDECREF(StartUp_module); - Py_Finalize(); - } - term_python_lock(); -} - -static PyObject *set_bacula_events(PyObject *self, PyObject *args) -{ - PyObject *eObject; - - Dmsg0(100, "In set_bacula_events.\n"); - if (!PyArg_ParseTuple(args, "O:set_bacula_events", &eObject)) { - return NULL; - } - JobStart_method = find_method(eObject, JobStart_method, "JobStart"); - JobEnd_method = find_method(eObject, JobEnd_method, "JobEnd"); - Exit_method = find_method(eObject, Exit_method, "Exit"); - - Py_XINCREF(eObject); - Py_INCREF(Py_None); - return Py_None; -} - -/* Write text to daemon output */ -static PyObject *bacula_write(PyObject *self, PyObject *args) -{ - char *text; - if (!PyArg_ParseTuple(args, "s:write", &text)) { - return NULL; - } - if (text) { - Jmsg(NULL, M_INFO, 0, "%s", text); - } - Py_INCREF(Py_None); - return Py_None; -} - -/* - * Check that a method exists and is callable. - */ -PyObject *find_method(PyObject *eventsObject, PyObject *method, const char *name) -{ - Py_XDECREF(method); /* release old method if any */ - method = PyObject_GetAttrString(eventsObject, (char *)name); - if (method == NULL) { - Dmsg1(000, "Python method %s not found\n", name); - } else if (PyCallable_Check(method) == 0) { - Dmsg1(000, "Python object %s found but not a method.\n", name); - Py_XDECREF(method); - method = NULL; - } else { - Dmsg1(100, "Got method %s\n", name); - } - return method; -} - - -/* - * Generate and process a Bacula event by importing a Python - * module and running it. - * - * Returns: 0 if Python not configured or module not found - * -1 on Python error - * 1 OK - */ -int generate_daemon_event(JCR *jcr, const char *event) -{ - PyObject *pJob; - int stat = -1; - PyObject *result = NULL; - char *obj_fmt = (char *)"O"; - - if (!StartUp_module) { - Dmsg0(100, "No startup module.\n"); - return 0; - } - - Dmsg1(100, "event=%s\n", event); - lock_python(); -// PyEval_AcquireLock(); - if (strcmp(event, "JobStart") == 0) { - if (!JobStart_method) { - stat = 0; - goto bail_out; - } - /* Create JCR argument to send to function */ - pJob = (PyObject *)PyObject_New(JobObject, &JobType); - if (!pJob) { - Jmsg(jcr, M_ERROR, 0, _("Could not create Python Job Object.\n")); - goto bail_out; - } - ((JobObject *)pJob)->jcr = jcr; - bstrncpy(jcr->event, event, sizeof(jcr->event)); - result = PyObject_CallFunction(JobStart_method, obj_fmt, pJob); - jcr->event[0] = 0; /* no event in progress */ - if (result == NULL) { - JobStart_method = NULL; - if (PyErr_Occurred()) { - PyErr_Print(); - Dmsg0(000, "Python JobStart error.\n"); - } - Jmsg(jcr, M_ERROR, 0, _("Python function \"%s\" not found.\n"), event); - Py_XDECREF(pJob); - goto bail_out; - } - jcr->Python_job = (void *)pJob; - stat = 1; /* OK */ - goto jobstart_ok; - - } else if (strcmp(event, "JobEnd") == 0) { - if (!JobEnd_method || !jcr->Python_job) { - stat = 0; /* probably already here */ - goto bail_out; - } - bstrncpy(jcr->event, event, sizeof(jcr->event)); - Dmsg1(100, "Call daemon event=%s\n", event); - result = PyObject_CallFunction(JobEnd_method, obj_fmt, jcr->Python_job); - jcr->event[0] = 0; /* no event in progress */ - if (result == NULL) { - if (PyErr_Occurred()) { - PyErr_Print(); - Dmsg2(000, "Python JobEnd error. job=%p JobId=%d\n", jcr->Python_job, - jcr->JobId); - JobEnd_method = NULL; - } - Jmsg(jcr, M_ERROR, 0, _("Python function \"%s\" not found.\n"), event); - goto bail_out; - } - stat = 1; /* OK */ - } else if (strcmp(event, "Exit") == 0) { - if (!Exit_method) { - stat = 0; - goto bail_out; - } - result = PyObject_CallFunction(Exit_method, NULL); - if (result == NULL) { - goto bail_out; - } - stat = 1; /* OK */ - } else { - Jmsg1(jcr, M_ABORT, 0, _("Unknown Python daemon event %s\n"), event); - } - -bail_out: - if (jcr) { - Py_XDECREF((PyObject *)jcr->Python_job); - jcr->Python_job = NULL; - Py_XDECREF((PyObject *)jcr->Python_events); - jcr->Python_events = NULL; - } - /* Fall through */ -jobstart_ok: - Py_XDECREF(result); - unlock_python(); -// PyEval_ReleaseLock(); - return stat; -} - -static brwlock_t python_rwlock; - -static void init_python_lock() -{ - int errstat; - if ((errstat=rwl_init(&python_rwlock)) != 0) { - berrno be; - Emsg1(M_ABORT, 0, _("Unable to initialize the Python lock. ERR=%s\n"), - be.bstrerror(errstat)); - } - -} - -static void term_python_lock() -{ - rwl_destroy(&python_rwlock); -} - -/* This applies to a drive and to Volumes */ -void lock_python() -{ - int errstat; - if ((errstat=rwl_writelock(&python_rwlock)) != 0) { - berrno be; - Emsg2(M_ABORT, 0, "Python rwl_writelock failure. stat=%d: ERR=%s\n", - errstat, be.bstrerror(errstat)); - } -} - -void unlock_python() -{ - int errstat; - if ((errstat=rwl_writeunlock(&python_rwlock)) != 0) { - berrno be; - Emsg2(M_ABORT, 0, "Python rwl_writeunlock failure. stat=%d: ERR=%s\n", - errstat, be.bstrerror(errstat)); - } -} - -#else - -/* - * No Python configured -- create external entry points and - * dummy routines so that library code can call this without - * problems even if it is not configured. - */ -int generate_daemon_event(JCR *jcr, const char *event) { return 0; } - -#endif /* HAVE_PYTHON */ diff --git a/bacula/src/lib/pythonlib.h b/bacula/src/lib/pythonlib.h deleted file mode 100644 index 92ad012fa7..0000000000 --- a/bacula/src/lib/pythonlib.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - Bacula® - The Network Backup Solution - - Copyright (C) 2004-2008 Free Software Foundation Europe e.V. - - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. - - Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. -*/ -/* - * - * Interface definitions of bacula <--> python interface - * - * Version $Id:$ - * - * Marco van Wieringen, October MMVIII - * - */ - -/* - * This is the argument struct passed to init_python_interpreter - * which initializes the python interpreter and makes sure we don't - * depend on global variables. - */ -typedef struct { - const char *progname; - const char *scriptdir; - const char *modulename; - const char *configfile; - const char *workingdir; - PyObject *(*job_getattr)(PyObject *, char *); - int (*job_setattr)(PyObject *, char *, PyObject *); -} init_python_interpreter_args; - -void init_python_interpreter(init_python_interpreter_args *args); -void term_python_interpreter(); -void lock_python(); -void unlock_python(); - -JCR *get_jcr_from_PyObject(PyObject *self); -PyObject *find_method(PyObject *eventsObject, PyObject *method, const char *name); - diff --git a/bacula/src/lib/queue.c b/bacula/src/lib/queue.c index 0bb25e1c04..bc64f02a35 100644 --- a/bacula/src/lib/queue.c +++ b/bacula/src/lib/queue.c @@ -13,29 +13,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2006 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ diff --git a/bacula/src/lib/queue.h b/bacula/src/lib/queue.h index e1186cfac1..f8d9ecc53c 100644 --- a/bacula/src/lib/queue.h +++ b/bacula/src/lib/queue.h @@ -6,29 +6,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2006 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ diff --git a/bacula/src/lib/rblist.c b/bacula/src/lib/rblist.c index 2d5477ff1a..81ef484159 100644 --- a/bacula/src/lib/rblist.c +++ b/bacula/src/lib/rblist.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2005-2011 Free Software Foundation Europe e.V. + Copyright (C) 2005-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Bacula red-black binary tree routines. @@ -31,7 +19,7 @@ * rblist is a binary tree with the links being in the data item. * * Developped in part from ideas obtained from several online University - * courses. + * courses. * * Kern Sibbald, November MMV * @@ -46,8 +34,8 @@ /* * Insert an item in the tree, but only if it is unique * otherwise, the item is returned non inserted - * The big trick is keeping the tree balanced after the - * insert. We use a parent pointer to make it simpler and + * The big trick is keeping the tree balanced after the + * insert. We use a parent pointer to make it simpler and * to avoid recursion. * * Returns: item if item inserted @@ -169,8 +157,8 @@ void *rblist::search(void *item, int compare(void *item1, void *item2)) return found; } -/* - * Get first item (i.e. lowest value) +/* + * Get first item (i.e. lowest value) */ void *rblist::first(void) { @@ -199,9 +187,9 @@ void *rblist::first(void) * was called once before calling this routine. * We always go down as far as we can to the left, then up, and * down one to the right, and again down as far as we can to the - * left. etc. + * left. etc. * - * Returns: pointer to next larger item + * Returns: pointer to next larger item * NULL when no more items in tree */ void *rblist::next(void *item) @@ -216,7 +204,7 @@ void *rblist::next(void *item) if ((down && !left(x) && right(x)) || (!down && right(x))) { /* Move down to right one */ down = true; - x = right(x); + x = right(x); /* Then all the way down left */ while (left(x)) { x = left(x); @@ -258,7 +246,7 @@ void *rblist::any(void *item) if ((down && !left(x) && right(x)) || (!down && right(x))) { /* Move down to right one */ down = true; - x = right(x); + x = right(x); /* Then all the way down left */ while (left(x)) { x = left(x); @@ -349,12 +337,12 @@ void rblist::destroy() } } if (!left(x) && !right(x)) { - if (head == x) { + if (head == x) { head = NULL; } // if (num_items<30) { // printf("free nitems=%d item=%p left=%p right=%p\n", num_items, x, left(x), right(x)); -// } +// } free((void *)x); /* free previous node */ num_items--; } @@ -460,7 +448,7 @@ int main() if ((jcr1=(MYJCR *)jcr_chain->search((void *)jcr, my_compare))) { printf("Search for AAA got %s\n", jcr1->buf); } else { - printf("Search for AAA not found\n"); + printf("Search for AAA not found\n"); } free(jcr->buf); @@ -468,7 +456,7 @@ int main() if ((jcr1 = (MYJCR *)jcr_chain->search((void *)jcr, my_compare))) { printf("Search for ZZZ got %s\n", jcr1->buf); } else { - printf("Search for ZZZ not found\n"); + printf("Search for ZZZ not found\n"); } free(jcr->buf); free(jcr); diff --git a/bacula/src/lib/rblist.h b/bacula/src/lib/rblist.h index 5551a5f679..d804cd2513 100644 --- a/bacula/src/lib/rblist.h +++ b/bacula/src/lib/rblist.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2005-2007 Free Software Foundation Europe e.V. + Copyright (C) 2005-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* diff --git a/bacula/src/lib/res.c b/bacula/src/lib/res.c index bb7e63aa72..9ee51f10b0 100644 --- a/bacula/src/lib/res.c +++ b/bacula/src/lib/res.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2011 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * This file handles locking and seaching resources @@ -54,7 +42,7 @@ void b_LockRes(const char *file, int line) { int errstat; #ifdef TRACE_RES - Pmsg4(000, "LockRes locked=%d w_active=%d at %s:%d\n", + Pmsg4(000, "LockRes locked=%d w_active=%d at %s:%d\n", res_locked, res_lock.w_active, file, line); if (res_locked) { Pmsg2(000, "LockRes writerid=%d myid=%d\n", res_lock.writer_id, @@ -77,7 +65,7 @@ void b_UnlockRes(const char *file, int line) } res_locked--; #ifdef TRACE_RES - Pmsg4(000, "UnLockRes locked=%d wactive=%d at %s:%d\n", + Pmsg4(000, "UnLockRes locked=%d wactive=%d at %s:%d\n", res_locked, res_lock.w_active, file, line); #endif } diff --git a/bacula/src/lib/runscript.c b/bacula/src/lib/runscript.c index a0bd899887..595021bc5a 100644 --- a/bacula/src/lib/runscript.c +++ b/bacula/src/lib/runscript.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2006-2011 Free Software Foundation Europe e.V. + Copyright (C) 2006-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Manipulation routines for RunScript list @@ -36,7 +24,7 @@ #include "bacula.h" #include "jcr.h" #include "runscript.h" - + /* * This function pointer is set only by the Director (dird.c), * and is not set in the File daemon, because the File @@ -51,7 +39,7 @@ RUNSCRIPT *new_runscript() RUNSCRIPT *cmd = (RUNSCRIPT *)malloc(sizeof(RUNSCRIPT)); memset(cmd, 0, sizeof(RUNSCRIPT)); cmd->reset_default(); - + return cmd; } @@ -63,7 +51,7 @@ void RUNSCRIPT::reset_default(bool free_strings) if (free_strings && target) { free_pool_memory(target); } - + target = NULL; command = NULL; on_success = true; @@ -87,7 +75,7 @@ RUNSCRIPT *copy_runscript(RUNSCRIPT *src) dst->set_command(src->command, src->cmd_type); dst->set_target(src->target); - return dst; + return dst; } void free_runscript(RUNSCRIPT *script) @@ -106,7 +94,7 @@ void free_runscript(RUNSCRIPT *script) int run_scripts(JCR *jcr, alist *runscripts, const char *label) { Dmsg2(200, "runscript: running all RUNSCRIPT object (%s) JobStatus=%c\n", label, jcr->JobStatus); - + RUNSCRIPT *script; bool runit; @@ -130,13 +118,13 @@ int run_scripts(JCR *jcr, alist *runscripts, const char *label) runit = false; if ((script->when & SCRIPT_Before) && (when & SCRIPT_Before)) { - if ((script->on_success && + if ((script->on_success && (jcr->JobStatus == JS_Running || jcr->JobStatus == JS_Created)) - || (script->on_failure && + || (script->on_failure && (job_canceled(jcr) || jcr->JobStatus == JS_Differences)) ) { - Dmsg4(200, "runscript: Run it because SCRIPT_Before (%s,%i,%i,%c)\n", + Dmsg4(200, "runscript: Run it because SCRIPT_Before (%s,%i,%i,%c)\n", script->command, script->on_success, script->on_failure, jcr->JobStatus ); runit = true; @@ -148,7 +136,7 @@ int run_scripts(JCR *jcr, alist *runscripts, const char *label) || (script->on_failure && job_canceled(jcr)) ) { - Dmsg4(200, "runscript: Run it because SCRIPT_AfterVSS (%s,%i,%i,%c)\n", + Dmsg4(200, "runscript: Run it because SCRIPT_AfterVSS (%s,%i,%i,%c)\n", script->command, script->on_success, script->on_failure, jcr->JobStatus ); runit = true; @@ -158,11 +146,11 @@ int run_scripts(JCR *jcr, alist *runscripts, const char *label) if ((script->when & SCRIPT_After) && (when & SCRIPT_After)) { if ((script->on_success && (jcr->JobStatus == JS_Terminated || jcr->JobStatus == JS_Warnings)) - || (script->on_failure && + || (script->on_failure && (job_canceled(jcr) || jcr->JobStatus == JS_Differences)) ) { - Dmsg4(200, "runscript: Run it because SCRIPT_After (%s,%i,%i,%c)\n", + Dmsg4(200, "runscript: Run it because SCRIPT_After (%s,%i,%i,%c)\n", script->command, script->on_success, script->on_failure, jcr->JobStatus ); runit = true; @@ -233,7 +221,7 @@ bool RUNSCRIPT::run(JCR *jcr, const char *name) ecmd = edit_job_codes(jcr, ecmd, this->command, "", this->job_code_callback); Dmsg1(100, "runscript: running '%s'...\n", ecmd); - Jmsg(jcr, M_INFO, 0, _("%s: run %s \"%s\"\n"), + Jmsg(jcr, M_INFO, 0, _("%s: run %s \"%s\"\n"), cmd_type==SHELL_CMD?"shell command":"console command", name, ecmd); switch (cmd_type) { @@ -303,7 +291,7 @@ void RUNSCRIPT::debug() Dmsg1(200, _(" --> RunWhen=%u\n"), when); } -void RUNSCRIPT::set_job_code_callback(job_code_callback_t arg_job_code_callback) +void RUNSCRIPT::set_job_code_callback(job_code_callback_t arg_job_code_callback) { this->job_code_callback = arg_job_code_callback; } diff --git a/bacula/src/lib/runscript.h b/bacula/src/lib/runscript.h index 27b28d1e0e..2adb2549e6 100644 --- a/bacula/src/lib/runscript.h +++ b/bacula/src/lib/runscript.h @@ -1,36 +1,24 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2006-2008 Free Software Foundation Europe e.V. + Copyright (C) 2006-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Bacula RUNSCRIPT Structure definition for FileDaemon and Director * Eric Bollengier May 2006 * Version $Id$ */ - + #ifndef __RUNSCRIPT_H_ #define __RUNSCRIPT_H_ 1 @@ -41,17 +29,17 @@ * * #define USE_RUNSCRIPT * #include "lib/runscript.h" - * + * * RUNSCRIPT *script = new_runscript(); * script->set_command("/bin/sleep 20"); * script->on_failure = true; * script->when = SCRIPT_After; - * + * * script->run("LabelBefore"); // the label must contain "Before" or "After" special keyword * free_runscript(script); */ -/* +/* * RUNSCRIPT->when can take following bit values: */ enum { @@ -64,7 +52,7 @@ enum { enum { SHELL_CMD = '|', - CONSOLE_CMD = '@' + CONSOLE_CMD = '@' }; /* @@ -97,13 +85,13 @@ public: }; /* create new RUNSCRIPT (set all value to 0) */ -RUNSCRIPT *new_runscript(); +RUNSCRIPT *new_runscript(); /* create new RUNSCRIPT from an other */ RUNSCRIPT *copy_runscript(RUNSCRIPT *src); /* launch each script from runscripts*/ -int run_scripts(JCR *jcr, alist *runscripts, const char *name); +int run_scripts(JCR *jcr, alist *runscripts, const char *name); /* free RUNSCRIPT (and all POOLMEM) */ void free_runscript(RUNSCRIPT *script); diff --git a/bacula/src/lib/rwlock.c b/bacula/src/lib/rwlock.c index bc001ac13c..a077a66ad8 100644 --- a/bacula/src/lib/rwlock.c +++ b/bacula/src/lib/rwlock.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2001-2011 Free Software Foundation Europe e.V. + Copyright (C) 2001-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Bacula Thread Read/Write locking code. It permits @@ -254,7 +242,7 @@ int rwl_writelock_p(brwlock_t *rwl, const char *file, int line) rwl->w_active++; /* we are running */ rwl->writer_id = pthread_self(); /* save writer thread's id */ lmgr_post_lock(); - } + } pthread_mutex_unlock(&rwl->mutex); return stat; } diff --git a/bacula/src/lib/rwlock.h b/bacula/src/lib/rwlock.h index 334938bcf5..ee5c947c27 100644 --- a/bacula/src/lib/rwlock.h +++ b/bacula/src/lib/rwlock.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2001-2010 Free Software Foundation Europe e.V. + Copyright (C) 2001-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Bacula Thread Read/Write locking code. It permits diff --git a/bacula/src/lib/scan.c b/bacula/src/lib/scan.c index d8dfab3835..158136577b 100644 --- a/bacula/src/lib/scan.c +++ b/bacula/src/lib/scan.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2011 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * scan.c -- scanning routines for Bacula @@ -172,13 +160,13 @@ int fstrsch(const char *a, const char *b) /* folded case search */ * Called with pointer to pointer to command line. This * pointer is updated to point to the remainder of the * command line. - * + * * Returns pointer to next argument -- don't store the result * in the pointer you passed as an argument ... * The next argument is terminated by a space unless within * quotes. Double quote characters (unless preceded by a \) are * stripped. - * + * */ char *next_arg(char **s) { @@ -264,14 +252,14 @@ int parse_args(POOLMEM *cmd, POOLMEM **args, int *argc, * This routine parses the input command line. * It makes a copy in args, then builds an * argc, argk, but no argv (values). - * This routine is useful for scanning command lines where the data + * This routine is useful for scanning command lines where the data * is a filename and no keywords are expected. If we scan a filename * for keywords, any = in the filename will be interpreted as the * end of a keyword, and this is not good. * * argc = count of arguments * argk[i] = argument keyword (part preceding =) - * argv[i] = NULL + * argv[i] = NULL * * example: arg1 arg2=abc arg3= * @@ -363,6 +351,10 @@ void split_path_and_filename(const char *fname, POOLMEM **path, int *pnl, /* * Extremely simple sscanf. Handles only %(u,d,ld,qd,qu,lu,lld,llu,c,nns) + * + * Note, BIG is the default maximum length when no length + * has been specified for %s. If it is not big enough, then + * simply add a length such as %10000s. */ const int BIG = 1000; int bsscanf(const char *buf, const char *fmt, ...) diff --git a/bacula/src/lib/sellist.c b/bacula/src/lib/sellist.c index 34d74df3be..3f58de04ec 100644 --- a/bacula/src/lib/sellist.c +++ b/bacula/src/lib/sellist.c @@ -1,29 +1,17 @@ /* - Bacula(R) - The Network Backup Solution - - Copyright (C) 2011-2012 Free Software Foundation Europe e.V. - - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. - - Bacula(R) is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. + Bacula® - The Network Backup Solution + + Copyright (C) 2011-2014 Free Software Foundation Europe e.V. + + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. + + Bacula® is a registered trademark of Kern Sibbald. */ /* * Kern Sibbald, January MMXII @@ -57,7 +45,7 @@ int64_t sellist::next() for (p=e; p && *p; p=e) { /* Check for list */ e = strchr(p, ','); - if (e) { + if (e) { /* have list */ esave = *e; *e++ = 0; } else { @@ -69,7 +57,7 @@ int64_t sellist::next() errmsg = _("Negative numbers not permitted.\n"); goto bail_out; } - if (h) { + if (h) { /* have range */ hsave = *h; *h++ = 0; if (!is_an_integer(h)) { @@ -87,9 +75,20 @@ int64_t sellist::next() errmsg = _("Range end not bigger than start.\n"); goto bail_out; } - } else { + } else { /* not list, not range */ hsave = 0; skip_spaces(&p); + /* Check for abort (.) */ + if (*p == '.') { + errmsg = _("User cancel requested.\n"); + goto bail_out; + } + /* Check for all keyword */ + if (strncasecmp(p, "all", 3) == 0) { + all = true; + errmsg = NULL; + return 0; + } if (!is_an_integer(p)) { errmsg = _("Input value is not an integer.\n"); goto bail_out; @@ -135,6 +134,10 @@ bool sellist::set_string(char *string, bool scan=true) * then scan through it once to find any * errors. */ + if (expanded) { + free(expanded); + expanded = NULL; + } if (str) { free(str); } @@ -156,10 +159,51 @@ bool sellist::set_string(char *string, bool scan=true) return true; } +/* Get the expanded list of all ids, very useful for SQL queries */ +char *sellist::get_expanded_list() +{ + int32_t expandedsize = 512; + int32_t len; + int64_t val; + char *p, *tmp; + char ed1[50]; + + if (!expanded) { + p = expanded = (char *)malloc(expandedsize * sizeof(char)); + *p = 0; + + while ((val = next()) >= 0) { + edit_int64(val, ed1); + len = strlen(ed1); + + /* Alloc more space if needed */ + if ((p + len + 1) > (expanded + expandedsize)) { + expandedsize = expandedsize * 2; + + tmp = (char *) realloc(expanded, expandedsize); + + /* Compute new addresses for p and expanded */ + p = tmp + (p - expanded); + expanded = tmp; + } + + /* If not at the begining of the string, add a "," */ + if (p != expanded) { + strcpy(p, ","); + p++; + } + + strcpy(p, ed1); + p += len; + } + } + return expanded; +} + #ifdef TEST_PROGRAM int main(int argc, char **argv, char **env) { - char *msg; + const char *msg; sellist sl; int i; @@ -171,27 +215,35 @@ int main(int argc, char **argv, char **env) strip_trailing_junk(argv[1]); sl.set_string(argv[1]); + + //Dmsg1(000, "get_list=%s\n", sl.get_list()); + + /* If the list is very long, Dmsg will truncate it */ + Dmsg1(000, "get_expanded_list=%s\n", NPRT(sl.get_expanded_list())); + if ((msg = sl.get_errmsg())) { goto bail_out; } - while ((i=sl.next()) >= 0) { - Dmsg1(000, "%d\n", i); + while ((i=sl.next()) > 0) { + Dmsg1(000, "rtn=%d\n", i); } if ((msg = sl.get_errmsg())) { goto bail_out; } - printf("\nPass 2\n"); + printf("\nPass 2 argv[1]=%s\n", argv[1]); sl.set_string(argv[1]); - while ((i=sl.next()) >= 0) { - Dmsg1(000, "%d\n", i); + while ((i=sl.next()) > 0) { + Dmsg1(000, "rtn=%d\n", i); } - if ((msg = sl.get_errmsg())) { + msg = sl.get_errmsg(); + Dmsg2(000, "rtn=%d msg=%s\n", i, NPRT(msg)); + if (msg) { goto bail_out; } return 0; bail_out: - Dmsg1(000, "Error: %s\n", msg); + Dmsg1(000, "Error: %s\n", NPRT(msg)); return 1; } diff --git a/bacula/src/lib/sellist.h b/bacula/src/lib/sellist.h index b87e39c23c..e075191e4f 100644 --- a/bacula/src/lib/sellist.h +++ b/bacula/src/lib/sellist.h @@ -1,29 +1,17 @@ /* - Bacula(R) - The Network Backup Solution + Bacula® - The Network Backup Solution - Copyright (C) 2011-2012 Free Software Foundation Europe e.V. + Copyright (C) 2011-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. - - Bacula(R) is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. + Bacula® is a registered trademark of Kern Sibbald. */ /* * Kern Sibbald, January MMXII @@ -33,6 +21,9 @@ * are also permitted. */ +#ifndef __SELLIST_H_ +#define __SELLIST_H_ + /* * Loop var through each member of list */ @@ -44,20 +35,25 @@ class sellist : public SMARTALLOC { const char *errmsg; char *p, *e, *h; char esave, hsave; + bool all; int64_t beg, end; int64_t max; int num_items; char *str; + char *expanded; public: sellist(); ~sellist(); bool set_string(char *string, bool scan); + bool is_all() { return all; }; int64_t first(); int64_t next(); void begin(); /* size() valid only if scan enabled on string */ int size() const { return num_items; }; char *get_list() { return str; }; + /* get the list of all jobids */ + char *get_expanded_list(); /* if errmsg == NULL, no error */ const char *get_errmsg() { return errmsg; }; }; @@ -69,20 +65,25 @@ inline sellist::sellist() { num_items = 0; max = 99999; + expanded = NULL; str = NULL; e = NULL; errmsg = NULL; -} +} /* * Destroy the list */ -inline sellist::~sellist() +inline sellist::~sellist() { if (str) { free(str); str = NULL; } + if (expanded) { + free(expanded); + expanded = NULL; + } } /* @@ -104,5 +105,8 @@ inline void sellist::begin() e = str; end = 0; beg = 1; + all = false; errmsg = NULL; } + +#endif /* __SELLIST_H_ */ diff --git a/bacula/src/lib/serial.c b/bacula/src/lib/serial.c index 2a2e48ddb2..560c6d60c8 100644 --- a/bacula/src/lib/serial.c +++ b/bacula/src/lib/serial.c @@ -6,29 +6,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2011 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ @@ -172,7 +160,7 @@ void serial_float64(uint8_t * * const ptr, const float64_t v) void serial_string(uint8_t * * const ptr, const char * const str) { - int i; + int i; char *dest = (char *)*ptr; char *src = (char *)str; for (i=0; src[i] != 0; i++) { @@ -306,7 +294,7 @@ float64_t unserial_float64(uint8_t * * const ptr) void unserial_string(uint8_t * * const ptr, char * const str, int max) { - int i; + int i; char *src = (char*)(*ptr); char *dest = str; for (i=0; i (int)sizeof(btpath)) { @@ -196,7 +193,7 @@ extern "C" void signal_handler(int sig) unlink("./core"); /* get rid of any old core file */ #ifdef DEVELOPER /* When DEVELOPER not set, this is done below */ - /* print information about the current state into working/.bactrace */ + /* print information about the current state into working/.lockdump */ dbg_print_bacula(); #endif @@ -243,15 +240,15 @@ extern "C" void signal_handler(int sig) if (WEXITSTATUS(chld_status) == 0) { fprintf(stderr, _("It looks like the traceback worked...\n")); } else { - fprintf(stderr, _("The btraceback call returned %d\n"), + fprintf(stderr, _("The btraceback call returned %d\n"), WEXITSTATUS(chld_status)); } /* If we want it printed, do so */ #ifdef direct_print if (prt_kaboom) { FILE *fd; - snprintf(buf, sizeof(buf), "%s/bacula.%s.traceback", working_directory, pid_buf); - fd = fopen(buf, "r"); + snprintf(buf, sizeof(buf), "%s/bacula.%s.traceback", working_directory, pid_buf); + fd = fopen(buf, "r"); if (fd != NULL) { printf("\n\n ==== Traceback output ====\n\n"); while (fgets(buf, (int)sizeof(buf), fd) != NULL) { @@ -271,7 +268,7 @@ extern "C" void signal_handler(int sig) #endif #ifndef DEVELOPER /* When DEVELOPER set, this is done above */ - /* print information about the current state into working/.bactrace */ + /* print information about the current state into working/.lockdump */ dbg_print_bacula(); #endif @@ -403,7 +400,7 @@ void init_signals(void terminate(int sig)) sigaction(SIGEMT, &sighandle, NULL); #endif #ifdef SIGIOT - sigaction(SIGIOT, &sighandle, NULL); + sigaction(SIGIOT, &sighandle, NULL); #endif sigaction(SIGBUS, &sighandle, NULL); sigaction(SIGFPE, &sighandle, NULL); diff --git a/bacula/src/lib/smartall.c b/bacula/src/lib/smartall.c index 70322727b0..b515419d62 100644 --- a/bacula/src/lib/smartall.c +++ b/bacula/src/lib/smartall.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2011 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* @@ -144,7 +132,7 @@ static void *smalloc(const char *fname, int lineno, unsigned int nbytes) } else { Emsg0(M_ABORT, 0, _("Out of memory\n")); } - Dmsg4(1150, "smalloc %d at %p from %s:%d\n", nbytes, buf, fname, lineno); + Dmsg4(DT_MEMORY|50, "smalloc %d at %p from %s:%d\n", nbytes, buf, fname, lineno); #if SMALLOC_SANITY_CHECK > 0 if (sm_bytes > SMALLOC_SANITY_CHECK) { Emsg0(M_ABORT, 0, _("Too much memory used.")); @@ -185,7 +173,7 @@ void sm_free(const char *file, int line, void *fp) struct abufhead *head = (struct abufhead *)cp; P(mutex); - Dmsg4(1150, "sm_free %d at %p from %s:%d\n", + Dmsg4(DT_MEMORY|50, "sm_free %d at %p from %s:%d\n", head->ablen, fp, get_basename(head->abfname), head->ablineno); @@ -212,7 +200,7 @@ void sm_free(const char *file, int line, void *fp) if (((unsigned char *)cp)[head->ablen - 1] != ((((intptr_t) cp) & 0xFF) ^ 0xC5)) { V(mutex); - Emsg6(M_ABORT, 0, _("Overrun buffer: len=%d addr=%p allocated: %s:%d called from %s:%d\n"), + Emsg6(M_ABORT, 0, _("Overrun buffer: len=%d addr=%p allocated: %s:%d called from %s:%d\n"), head->ablen, fp, get_basename(head->abfname), head->ablineno, file, line); } if (sm_buffers > 0) { @@ -288,7 +276,7 @@ void *sm_realloc(const char *fname, int lineno, void *ptr, unsigned int size) void *buf; char *cp = (char *) ptr; - Dmsg4(1400, "sm_realloc %s:%d %p %d\n", get_basename(fname), (uint32_t)lineno, ptr, size); + Dmsg4(DT_MEMORY|50, "sm_realloc %s:%d %p %d\n", get_basename(fname), (uint32_t)lineno, ptr, size); if (size <= 0) { e_msg(fname, lineno, M_ABORT, 0, _("sm_realloc size: %d\n"), size); } @@ -328,7 +316,7 @@ void *sm_realloc(const char *fname, int lineno, void *ptr, unsigned int size) /* All done. Free and dechain the original buffer. */ sm_free(fname, lineno, ptr); } - Dmsg4(4150, _("sm_realloc %d at %p from %s:%d\n"), size, buf, get_basename(fname), (uint32_t)lineno); + Dmsg4(DT_MEMORY|60, _("sm_realloc %d at %p from %s:%d\n"), size, buf, get_basename(fname), (uint32_t)lineno); return buf; } @@ -359,7 +347,7 @@ void *actuallycalloc(unsigned int nelem, unsigned int elsize) void *actuallyrealloc(void *ptr, unsigned int size) { - Dmsg2(1400, "Actuallyrealloc %p %d\n", ptr, size); + Dmsg2(DT_MEMORY|40, "Actuallyrealloc %p %d\n", ptr, size); return realloc(ptr, size); } @@ -374,7 +362,7 @@ void actuallyfree(void *cp) /* SM_DUMP -- Print orphaned buffers (and dump them if BUFDUMP is * True). */ -void sm_dump(bool bufdump, bool in_use) +void sm_dump(bool bufdump, bool in_use) { struct abufhead *ap; @@ -399,7 +387,7 @@ void sm_dump(bool bufdump, bool in_use) uint32_t memsize = ap->ablen - (HEAD_SIZE + 1); char *cp = ((char *)ap) + HEAD_SIZE; - Pmsg6(0, "%s buffer: %s %d bytes at %p from %s:%d\n", + Pmsg6(0, "%s buffer: %s %d bytes at %p from %s:%d\n", in_use?"In use":"Orphaned", my_name, memsize, cp, get_basename(ap->abfname), ap->ablineno); if (bufdump) { @@ -465,7 +453,7 @@ int sm_check_rtn(const char *fname, int lineno, bool bufdump) } badbuf |= bad; if (bad) { - Pmsg2(0, + Pmsg2(0, _("\nDamaged buffers found at %s:%d\n"), get_basename(fname), (uint32_t)lineno); if (bad & 0x1) { @@ -490,7 +478,7 @@ int sm_check_rtn(const char *fname, int lineno, bool bufdump) uint32_t memsize = ap->ablen - (HEAD_SIZE + 1); char errmsg[80]; - Pmsg4(0, + Pmsg4(0, _("Damaged buffer: %6u bytes allocated at line %d of %s %s\n"), memsize, ap->ablineno, my_name, get_basename(ap->abfname) ); diff --git a/bacula/src/lib/smartall.h b/bacula/src/lib/smartall.h index 4973f4fa25..de2a0402f2 100644 --- a/bacula/src/lib/smartall.h +++ b/bacula/src/lib/smartall.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2010 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* @@ -139,7 +127,7 @@ void operator delete(void *ptr, const char * /*fname*/, int /*line*/) { free(ptr); } -void operator delete[](void *ptr, size_t /*i*/, +void operator delete[](void *ptr, size_t /*i*/, const char * /*fname*/, int /*line*/) { free(ptr); @@ -175,5 +163,5 @@ class SMARTALLOC } }; #endif /* SMARTALLOC */ - + #endif /* !SMARTALLOC_H */ diff --git a/bacula/src/lib/status.h b/bacula/src/lib/status.h index 607d1264b5..8dacd1800b 100644 --- a/bacula/src/lib/status.h +++ b/bacula/src/lib/status.h @@ -1,32 +1,20 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2008-2008 Free Software Foundation Europe e.V. + Copyright (C) 2008-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* - * Status packet definition that is used in both the SD and FD. It + * Status packet definition that is used in both the SD and FD. It * permits Win32 to call output_status() and get the output back * at the callback address line by line, and for Linux code, * the output can be sent directly to a BSOCK. @@ -48,7 +36,8 @@ public: BSOCK *bs; /* used on Unix machines */ void *context; /* Win32 */ void (*callback)(const char *msg, int len, void *context); /* Win32 */ - bool api; /* set if we want API output */ + char api_opts[MAX_NAME_LENGTH]; + int api; /* set if we want API output, with api level */ /* Methods */ STATUS_PKT() { memset(this, 0, sizeof(STATUS_PKT)); }; @@ -57,5 +46,176 @@ public: extern void output_status(STATUS_PKT *sp); +/* + * Send to bsock (Director or Console) + */ +static void sendit(const char *msg, int len, STATUS_PKT *sp) +{ + if (sp->bs) { + BSOCK *user = sp->bs; + user->msg = check_pool_memory_size(user->msg, len+1); + memcpy(user->msg, msg, len+1); + user->msglen = len+1; + user->send(); + } else { + sp->callback(msg, len, sp->context); + } +} + +/* common to SD/FD */ +static void list_terminated_jobs(STATUS_PKT *sp) +{ + char dt[MAX_TIME_LENGTH], b1[30], b2[30]; + char level[10]; + struct s_last_job *je; + const char *msg; + + msg = _("\nTerminated Jobs:\n"); + if (!sp->api) sendit(msg, strlen(msg), sp); + if (last_jobs->size() == 0) { + if (!sp->api) sendit("====\n", 5, sp); + return; + } + lock_last_jobs_list(); + msg = _(" JobId Level Files Bytes Status Finished Name \n"); + if (!sp->api) sendit(msg, strlen(msg), sp); + msg = _("===================================================================\n"); + if (!sp->api) sendit(msg, strlen(msg), sp); + foreach_dlist(je, last_jobs) { + char JobName[MAX_NAME_LENGTH]; + const char *termstat; + char buf[1000]; + + bstrftime_nc(dt, sizeof(dt), je->end_time); + switch (je->JobType) { + case JT_ADMIN: + case JT_RESTORE: + bstrncpy(level, " ", sizeof(level)); + break; + default: + bstrncpy(level, job_level_to_str(je->JobLevel), sizeof(level)); + level[4] = 0; + break; + } + switch (je->JobStatus) { + case JS_Created: + termstat = _("Created"); + break; + case JS_FatalError: + case JS_ErrorTerminated: + termstat = _("Error"); + break; + case JS_Differences: + termstat = _("Diffs"); + break; + case JS_Canceled: + termstat = _("Cancel"); + break; + case JS_Terminated: + termstat = _("OK"); + break; + case JS_Warnings: + termstat = _("OK -- with warnings"); + break; + break; + default: + termstat = _("Other"); + break; + } + bstrncpy(JobName, je->Job, sizeof(JobName)); + /* There are three periods after the Job name */ + char *p; + for (int i=0; i<3; i++) { + if ((p=strrchr(JobName, '.')) != NULL) { + *p = 0; + } + } + if (sp->api == 1) { + bsnprintf(buf, sizeof(buf), _("%6d\t%-6s\t%8s\t%10s\t%-7s\t%-8s\t%s\n"), + je->JobId, + level, + edit_uint64_with_commas(je->JobFiles, b1), + edit_uint64_with_suffix(je->JobBytes, b2), + termstat, + dt, JobName); + } else { + bsnprintf(buf, sizeof(buf), _("%6d %-6s %8s %10s %-7s %-8s %s\n"), + je->JobId, + level, + edit_uint64_with_commas(je->JobFiles, b1), + edit_uint64_with_suffix(je->JobBytes, b2), + termstat, + dt, JobName); + } + sendit(buf, strlen(buf), sp); + } + unlock_last_jobs_list(); + if (!sp->api) { + sendit("====\n", 5, sp); + } +} + +#if defined(HAVE_WIN32) +int bacstat = 0; + +#ifdef FILE_DAEMON +# define BAC_COMPONENT "Client" +#else +# define BAC_COMPONENT "Storage" +#endif + +/* Return a one line status for the tray monitor */ +char *bac_status(char *buf, int buf_len) +{ + JCR *njcr; + const char *termstat = _("Bacula " BAC_COMPONENT ": Idle"); + struct s_last_job *job; + int stat = 0; /* Idle */ + + if (!last_jobs) { + goto done; + } + Dmsg0(1000, "Begin bac_status jcr loop.\n"); + foreach_jcr(njcr) { + if (njcr->JobId != 0) { + stat = JS_Running; + termstat = _("Bacula " BAC_COMPONENT ": Running"); + break; + } + } + endeach_jcr(njcr); + + if (stat != 0) { + goto done; + } + if (last_jobs->size() > 0) { + job = (struct s_last_job *)last_jobs->last(); + stat = job->JobStatus; + switch (job->JobStatus) { + case JS_Canceled: + termstat = _("Bacula " BAC_COMPONENT ": Last Job Canceled"); + break; + case JS_ErrorTerminated: + case JS_FatalError: + termstat = _("Bacula " BAC_COMPONENT ": Last Job Failed"); + break; + default: + if (job->Errors) { + termstat = _("Bacula " BAC_COMPONENT ": Last Job had Warnings"); + } + break; + } + } + Dmsg0(1000, "End bac_status jcr loop.\n"); +done: + bacstat = stat; + if (buf) { + bstrncpy(buf, termstat, buf_len); + } + return buf; +} + +#endif /* HAVE_WIN32 */ + #endif diff --git a/bacula/src/lib/tls.c b/bacula/src/lib/tls.c index fc447c2eb9..959a559246 100644 --- a/bacula/src/lib/tls.c +++ b/bacula/src/lib/tls.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2005-2010 Free Software Foundation Europe e.V. + Copyright (C) 2005-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * tls.c TLS support functions @@ -229,12 +217,12 @@ void free_tls_context(TLS_CONTEXT *ctx) free(ctx); } -bool get_tls_require(TLS_CONTEXT *ctx) +bool get_tls_require(TLS_CONTEXT *ctx) { return ctx->tls_require; } -bool get_tls_enable(TLS_CONTEXT *ctx) +bool get_tls_enable(TLS_CONTEXT *ctx) { return ctx->tls_enable; } @@ -300,8 +288,9 @@ bool tls_postconnect_verify_host(JCR *jcr, TLS_CONNECTION *tls, const char *host /* Check if peer provided a certificate */ if (!(cert = SSL_get_peer_certificate(ssl))) { - Qmsg1(jcr, M_ERROR, 0, + Qmsg1(jcr, M_ERROR, 0, _("Peer %s failed to present a TLS certificate\n"), host); + Dmsg1(250, _("Peer %s failed to present a TLS certificate\n"), host); return false; } @@ -358,6 +347,7 @@ bool tls_postconnect_verify_host(JCR *jcr, TLS_CONNECTION *tls, const char *host val = method->i2v(method, extstr, NULL); /* dNSName shortname is "DNS" */ + Dmsg0(250, "Check DNS name\n"); for (j = 0; j < sk_CONF_VALUE_num(val); j++) { nval = sk_CONF_VALUE_value(val, j); if (strcmp(nval->name, "DNS") == 0) { @@ -365,6 +355,7 @@ bool tls_postconnect_verify_host(JCR *jcr, TLS_CONNECTION *tls, const char *host auth_success = true; goto success; } + Dmsg2(250, "No DNS name match. Host=%s cert=%s\n", host, nval->value); } } } @@ -373,6 +364,7 @@ bool tls_postconnect_verify_host(JCR *jcr, TLS_CONNECTION *tls, const char *host /* Try verifying against the subject name */ if (!auth_success) { + Dmsg0(250, "Check subject name name\n"); if ((subject = X509_get_subject_name(cert)) != NULL) { /* Loop through all CNs */ for (;;) { @@ -386,13 +378,13 @@ bool tls_postconnect_verify_host(JCR *jcr, TLS_CONNECTION *tls, const char *host auth_success = true; break; } + Dmsg2(250, "No subject name match. Host=%s cert=%s\n", host, (const char*)asn1CN->data); } } } success: X509_free(cert); - return auth_success; } @@ -474,7 +466,7 @@ static inline bool openssl_bsock_session_start(BSOCK *bsock, bool server) bsock->clear_timed_out(); bsock->set_killable(false); - for (;;) { + for (;;) { if (server) { err = SSL_accept(tls->openssl); } else { @@ -624,7 +616,7 @@ static inline int openssl_bsock_readwrite(BSOCK *bsock, char *ptr, int nbytes, b nleft = nbytes; - while (nleft > 0) { + while (nleft > 0) { if (write) { nwritten = SSL_write(tls->openssl, ptr, nleft); } else { @@ -702,13 +694,13 @@ cleanup: } -int tls_bsock_writen(BSOCK *bsock, char *ptr, int32_t nbytes) +int tls_bsock_writen(BSOCK *bsock, char *ptr, int32_t nbytes) { /* SSL_write(bsock->tls->openssl, ptr, nbytes) */ return openssl_bsock_readwrite(bsock, ptr, nbytes, true); } -int tls_bsock_readn(BSOCK *bsock, char *ptr, int32_t nbytes) +int tls_bsock_readn(BSOCK *bsock, char *ptr, int32_t nbytes) { /* SSL_read(bsock->tls->openssl, ptr, nbytes) */ return openssl_bsock_readwrite(bsock, ptr, nbytes, false); @@ -737,12 +729,12 @@ void tls_bsock_shutdown(BSOCK *bsock) { } void free_tls_connection(TLS_CONNECTION *tls) { } -bool get_tls_require(TLS_CONTEXT *ctx) +bool get_tls_require(TLS_CONTEXT *ctx) { return false; } -bool get_tls_enable(TLS_CONTEXT *ctx) +bool get_tls_enable(TLS_CONTEXT *ctx) { return false; } diff --git a/bacula/src/lib/tls.h b/bacula/src/lib/tls.h index 3740bc1d70..e9c90ebcfb 100644 --- a/bacula/src/lib/tls.h +++ b/bacula/src/lib/tls.h @@ -1,37 +1,23 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2005-2009 Free Software Foundation Europe e.V. + Copyright (C) 2005-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version two of the GNU Lesser General - Public License as published by the Free Software Foundation plus - additions in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * tls.h TLS support functions * * Author: Landon Fuller * - * Version $Id$ - * * This file was contributed to the Bacula project by Landon Fuller * and Three Rings Design, Inc. * diff --git a/bacula/src/lib/tree.c b/bacula/src/lib/tree.c index 008e25a883..1012f17e0c 100644 --- a/bacula/src/lib/tree.c +++ b/bacula/src/lib/tree.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2002-2012 Free Software Foundation Europe e.V. + Copyright (C) 2002-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Directory tree build/traverse routines @@ -102,6 +90,8 @@ TREE_ROOT *new_tree(int count) root->cached_path = get_pool_memory(PM_FNAME); root->type = TN_ROOT; root->fname = ""; + HL_ENTRY* entry = NULL; + root->hardlinks.init(entry, &entry->link, 0, 1); return root; } @@ -172,6 +162,7 @@ void free_tree(TREE_ROOT *root) struct s_mem *mem, *rel; uint32_t freed_blocks = 0; + root->hardlinks.destroy(); for (mem=root->mem; mem; ) { rel = mem; mem = mem->next; @@ -192,7 +183,7 @@ void free_tree(TREE_ROOT *root) void tree_add_delta_part(TREE_ROOT *root, TREE_NODE *node, JobId_t JobId, int32_t FileIndex) { - struct delta_list *elt = + struct delta_list *elt = (struct delta_list*) tree_alloc(root, sizeof(struct delta_list)); elt->next = node->delta_list; @@ -386,7 +377,7 @@ TREE_NODE *tree_cwd(char *path, TREE_ROOT *root, TREE_NODE *node) /* Handle relative path */ if (path[0] == '.' && path[1] == '.' && (IsPathSeparator(path[2]) || path[2] == '\0')) { TREE_NODE *parent = node->parent ? node->parent : node; - if (path[2] == 0) { + if (path[2] == 0) { return parent; } else { return tree_cwd(path+3, root, parent); diff --git a/bacula/src/lib/tree.h b/bacula/src/lib/tree.h index 3464cb1965..f2e7ec6418 100644 --- a/bacula/src/lib/tree.h +++ b/bacula/src/lib/tree.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2002-2009 Free Software Foundation Europe e.V. + Copyright (C) 2002-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Directory tree build/traverse routines @@ -32,6 +20,8 @@ * */ +#include "htable.h" + struct s_mem { struct s_mem *next; /* next buffer */ int rem; /* remaining bytes */ @@ -112,9 +102,17 @@ struct s_tree_root { int cached_path_len; /* length of cached path */ char *cached_path; /* cached current path */ TREE_NODE *cached_parent; /* cached parent for above path */ + htable hardlinks; /* references to first occurrence of hardlinks */ }; typedef struct s_tree_root TREE_ROOT; +/* hardlink hashtable entry */ +struct s_hl_entry { + uint64_t key; + hlink link; + TREE_NODE *node; +}; +typedef struct s_hl_entry HL_ENTRY; /* type values */ #define TN_ROOT 1 /* root node */ @@ -130,7 +128,7 @@ TREE_NODE *insert_tree_node(char *path, char *fname, int type, TREE_NODE *make_tree_path(char *path, TREE_ROOT *root); TREE_NODE *tree_cwd(char *path, TREE_ROOT *root, TREE_NODE *node); TREE_NODE *tree_relcwd(char *path, TREE_ROOT *root, TREE_NODE *node); -void tree_add_delta_part(TREE_ROOT *root, TREE_NODE *node, +void tree_add_delta_part(TREE_ROOT *root, TREE_NODE *node, JobId_t JobId, int32_t FileIndex); void free_tree(TREE_ROOT *root); int tree_getpath(TREE_NODE *node, char *buf, int buf_size); diff --git a/bacula/src/lib/util.c b/bacula/src/lib/util.c index 0f9b9857af..c64e2224c7 100644 --- a/bacula/src/lib/util.c +++ b/bacula/src/lib/util.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2011 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * util.c miscellaneous utility subroutines for Bacula @@ -188,9 +176,6 @@ void jobstatus_to_ascii(int JobStatus, char *msg, int maxlen) case JS_Terminated: jobstat = _("OK"); break; - case JS_Incomplete: - jobstat = _("Error: incomplete job"); - break; case JS_FatalError: case JS_ErrorTerminated: jobstat = _("Error"); @@ -394,7 +379,7 @@ const char *job_type_to_str(int type) } if (!str) { str = _("Unknown Type"); - } + } return str; } @@ -612,9 +597,7 @@ void make_session_key(char *key, char *seed, int mode) LARGE_INTEGER li; DWORD length; FILETIME ft; - char *p; - p = s; bsnprintf(s + strlen(s), ss, "%lu", (uint32_t)GetCurrentProcessId()); (void)getcwd(s + strlen(s), 256); bsnprintf(s + strlen(s), ss, "%lu", (uint32_t)GetTickCount()); @@ -833,6 +816,10 @@ POOLMEM *edit_job_codes(JCR *jcr, char *omsg, char *imsg, const char *to, job_co str = _("*none*"); } break; + case 'P': + edit_uint64(getpid(), add); + str = add; + break; default: str = NULL; if (callback != NULL) { diff --git a/bacula/src/lib/var.c b/bacula/src/lib/var.c index e5278307a0..3e52682df8 100644 --- a/bacula/src/lib/var.c +++ b/bacula/src/lib/var.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2003-2011 Free Software Foundation Europe e.V. + Copyright (C) 2003-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* ** OSSP var - Variable Expansion @@ -1991,7 +1979,7 @@ parse_variable_complex( goto error_return; } if ((inc = (*p++ == '+'))) { - p++; /* skip the + */ + p++; /* skip the + */ } /* lookup the variable value now */ @@ -2415,7 +2403,7 @@ var_create( return VAR_RC(VAR_ERR_INVALID_ARGUMENT); if ((var = (var_t *)malloc(sizeof(var_t))) == NULL) return VAR_RC(VAR_ERR_OUT_OF_MEMORY); - memset(var, 0, sizeof(var)); + memset(var, 0, sizeof(*var)); var_config(var, VAR_CONFIG_SYNTAX, &var_syntax_default); *pvar = var; return VAR_OK; diff --git a/bacula/src/lib/var.h b/bacula/src/lib/var.h index 5f430f54c4..0e6005638b 100644 --- a/bacula/src/lib/var.h +++ b/bacula/src/lib/var.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2003-2009 Free Software Foundation Europe e.V. + Copyright (C) 2003-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* ** OSSP var - Variable Expansion diff --git a/bacula/src/lib/waitq.h b/bacula/src/lib/waitq.h index 729af2b959..69a69274e3 100644 --- a/bacula/src/lib/waitq.h +++ b/bacula/src/lib/waitq.h @@ -13,29 +13,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2001-2009 Free Software Foundation Europe e.V. + Copyright (C) 2001-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ #ifndef __WAITQ_H diff --git a/bacula/src/lib/watchdog.c b/bacula/src/lib/watchdog.c index 9a224e705d..97953970b1 100644 --- a/bacula/src/lib/watchdog.c +++ b/bacula/src/lib/watchdog.c @@ -1,32 +1,20 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2002-2011 Free Software Foundation Europe e.V. + Copyright (C) 2002-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* - * Bacula thread watchdog routine. General routine that + * Bacula thread watchdog routine. General routine that * allows setting a watchdog timer with a callback that is * called when the timer goes off. * @@ -60,7 +48,7 @@ static pthread_t wd_tid; static dlist *wd_queue; static dlist *wd_inactive; -/* +/* * Returns: 0 if the current thread is NOT the watchdog * 1 if the current thread is the watchdog */ @@ -269,7 +257,7 @@ extern "C" void *watchdog_thread(void *arg) * * NOTE. lock_jcr_chain removed, but the message below * was left until we are sure there are no deadlocks. - * + * * We lock the jcr chain here because a good number of the * callback routines lock the jcr chain. We need to lock * it here *before* the watchdog lock because the SD message diff --git a/bacula/src/lib/watchdog.h b/bacula/src/lib/watchdog.h index 673d9c9770..3688cc1280 100644 --- a/bacula/src/lib/watchdog.h +++ b/bacula/src/lib/watchdog.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2002-2009 Free Software Foundation Europe e.V. + Copyright (C) 2002-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Watchdog timer routines diff --git a/bacula/src/lib/workq.c b/bacula/src/lib/workq.c index e3f751747e..6a754d1d29 100644 --- a/bacula/src/lib/workq.c +++ b/bacula/src/lib/workq.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2001-2012 Free Software Foundation Europe e.V. + Copyright (C) 2001-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Bacula work queue routines. Permits passing work to @@ -310,16 +298,7 @@ void *workq_server(void *arg) * Wait 2 seconds, then if no more work, exit */ Dmsg0(1400, "pthread_cond_timedwait()\n"); -#ifdef xxxxxxxxxxxxxxxx_was_HAVE_CYGWIN - /* CYGWIN dies with a page fault the second - * time that pthread_cond_timedwait() is called - * so fake it out. - */ - P(wq->mutex); - stat = ETIMEDOUT; -#else stat = pthread_cond_timedwait(&wq->work, &wq->mutex, &timeout); -#endif Dmsg1(1400, "timedwait=%d\n", stat); if (stat == ETIMEDOUT) { timedout = 1; diff --git a/bacula/src/lib/workq.h b/bacula/src/lib/workq.h index 5e3c4642c5..90521cce70 100644 --- a/bacula/src/lib/workq.h +++ b/bacula/src/lib/workq.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2001-2009 Free Software Foundation Europe e.V. + Copyright (C) 2001-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Bacula work queue routines. Permits passing work to diff --git a/bacula/src/plugins/dir/Makefile.in b/bacula/src/plugins/dir/Makefile.in index 2c767e7e66..f49565c2c1 100644 --- a/bacula/src/plugins/dir/Makefile.in +++ b/bacula/src/plugins/dir/Makefile.in @@ -1,8 +1,6 @@ # # Simple Makefile for building test FD plugins for Bacula # -# Version $Id: Makefile.in 7841 2008-10-19 10:34:03Z kerns $ -# @MCOMMON@ @@ -39,7 +37,8 @@ clean: @LIBTOOL_CLEAN_TARGET@ rm -f main *.so *.o 1 2 3 distclean: clean - rm -f Makefile + rm -f Makefile *.la *.lo + rm -rf .libs libtool-uninstall: $(LIBTOOL_UNINSTALL) $(RMF) $(DESTDIR)$(plugindir)/example-plugin-dir.la diff --git a/bacula/src/plugins/dir/example-plugin-dir.c b/bacula/src/plugins/dir/example-plugin-dir.c index c307860aae..ea32d42146 100644 --- a/bacula/src/plugins/dir/example-plugin-dir.c +++ b/bacula/src/plugins/dir/example-plugin-dir.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2007-2010 Free Software Foundation Europe e.V. + Copyright (C) 2007-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation, which is - listed in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Sample Plugin program @@ -91,7 +79,7 @@ bRC loadPlugin(bDirInfo *lbinfo, bDirFuncs *lbfuncs, pDirInfo **pinfo, pDirFuncs return bRC_OK; } -bRC unloadPlugin() +bRC unloadPlugin() { printf("plugin: Unloaded\n"); return bRC_OK; @@ -114,13 +102,13 @@ static bRC freePlugin(bpContext *ctx) return bRC_OK; } -static bRC getPluginValue(bpContext *ctx, pDirVariable var, void *value) +static bRC getPluginValue(bpContext *ctx, pDirVariable var, void *value) { printf("plugin: getPluginValue var=%d\n", var); return bRC_OK; } -static bRC setPluginValue(bpContext *ctx, pDirVariable var, void *value) +static bRC setPluginValue(bpContext *ctx, pDirVariable var, void *value) { printf("plugin: setPluginValue var=%d\n", var); return bRC_OK; diff --git a/bacula/src/plugins/fd/Makefile.in b/bacula/src/plugins/fd/Makefile.in index 207590c166..0255f497c3 100644 --- a/bacula/src/plugins/fd/Makefile.in +++ b/bacula/src/plugins/fd/Makefile.in @@ -63,7 +63,8 @@ clean: libtool-clean @rm -f main *.so *.o 1 2 3 distclean: clean - @rm -f Makefile + @rm -f Makefile *.la *.lo + @rm -rf .libs libtool-uninstall: $(LIBTOOL_UNINSTALL) $(RMF) $(DESTDIR)$(plugindir)/bpipe-fd.so diff --git a/bacula/src/plugins/fd/bpipe-fd.c b/bacula/src/plugins/fd/bpipe-fd.c index f4269ef583..3338514156 100644 --- a/bacula/src/plugins/fd/bpipe-fd.c +++ b/bacula/src/plugins/fd/bpipe-fd.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2007-2012 Free Software Foundation Europe e.V. + Copyright (C) 2007-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation, which is - listed in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * A simple pipe plugin for the Bacula File Daemon @@ -142,16 +130,16 @@ bRC loadPlugin(bInfo *lbinfo, bFuncs *lbfuncs, pInfo **pinfo, pFuncs **pfuncs) } /* - * External entry point to unload the plugin + * External entry point to unload the plugin */ -bRC unloadPlugin() +bRC unloadPlugin() { // printf("bpipe-fd: Unloaded\n"); return bRC_OK; } /* - * The following entry points are accessed through the function + * The following entry points are accessed through the function * pointers we supplied to Bacula. Each plugin type (dir, fd, sd) * has its own set of entry points that the plugin must define. */ @@ -189,7 +177,7 @@ static bRC freePlugin(bpContext *ctx) /* * Return some plugin value (none defined) */ -static bRC getPluginValue(bpContext *ctx, pVariable var, void *value) +static bRC getPluginValue(bpContext *ctx, pVariable var, void *value) { return bRC_OK; } @@ -197,7 +185,7 @@ static bRC getPluginValue(bpContext *ctx, pVariable var, void *value) /* * Set a plugin value (none defined) */ -static bRC setPluginValue(bpContext *ctx, pVariable var, void *value) +static bRC setPluginValue(bpContext *ctx, pVariable var, void *value) { return bRC_OK; } @@ -221,7 +209,7 @@ static bRC handlePluginEvent(bpContext *ctx, bEvent *event, void *value) */ switch (event->eventType) { case bEventPluginCommand: - bfuncs->DebugMessage(ctx, fi, li, dbglvl, + bfuncs->DebugMessage(ctx, fi, li, dbglvl, "bpipe-fd: PluginCommand=%s\n", (char *)value); break; case bEventJobStart: @@ -282,7 +270,7 @@ static bRC handlePluginEvent(bpContext *ctx, bEvent *event, void *value) } *p++ = 0; /* terminate reader string */ p_ctx->writer = p; -// printf("bpipe-fd: plugin=%s fname=%s reader=%s writer=%s\n", +// printf("bpipe-fd: plugin=%s fname=%s reader=%s writer=%s\n", // p_ctx->cmd, p_ctx->fname, p_ctx->reader, p_ctx->writer); break; @@ -293,7 +281,7 @@ static bRC handlePluginEvent(bpContext *ctx, bEvent *event, void *value) return bRC_OK; } -/* +/* * Start the backup of a specific file */ static bRC startBackupFile(bpContext *ctx, struct save_pkt *sp) @@ -339,7 +327,7 @@ static bRC pluginIO(bpContext *ctx, struct io_pkt *io) if (!p_ctx) { return bRC_Error; } - + io->status = 0; io->io_errno = 0; switch(io->func) { @@ -349,11 +337,11 @@ static bRC pluginIO(bpContext *ctx, struct io_pkt *io) char *writer_codes = apply_rp_codes(p_ctx); p_ctx->fd = popen(writer_codes, "w"); - bfuncs->DebugMessage(ctx, fi, li, dbglvl, "bpipe-fd: IO_OPEN fd=%d writer=%s\n", + bfuncs->DebugMessage(ctx, fi, li, dbglvl, "bpipe-fd: IO_OPEN fd=%d writer=%s\n", p_ctx->fd, writer_codes); if (!p_ctx->fd) { io->io_errno = errno; - bfuncs->JobMessage(ctx, fi, li, M_FATAL, 0, + bfuncs->JobMessage(ctx, fi, li, M_FATAL, 0, "Open pipe writer=%s failed: ERR=%s\n", writer_codes, strerror(errno)); if (writer_codes) { free(writer_codes); @@ -365,11 +353,11 @@ static bRC pluginIO(bpContext *ctx, struct io_pkt *io) } } else { p_ctx->fd = popen(p_ctx->reader, "r"); - bfuncs->DebugMessage(ctx, fi, li, dbglvl, "bpipe-fd: IO_OPEN fd=%p reader=%s\n", + bfuncs->DebugMessage(ctx, fi, li, dbglvl, "bpipe-fd: IO_OPEN fd=%p reader=%s\n", p_ctx->fd, p_ctx->reader); if (!p_ctx->fd) { io->io_errno = errno; - bfuncs->JobMessage(ctx, fi, li, M_FATAL, 0, + bfuncs->JobMessage(ctx, fi, li, M_FATAL, 0, "Open pipe reader=%s failed: ERR=%s\n", p_ctx->reader, strerror(errno)); return bRC_Error; } @@ -385,9 +373,9 @@ static bRC pluginIO(bpContext *ctx, struct io_pkt *io) io->status = fread(io->buf, 1, io->count, p_ctx->fd); // bfuncs->DebugMessage(ctx, fi, li, dbglvl, "bpipe-fd: IO_READ buf=%p len=%d\n", io->buf, io->status); if (io->status == 0 && ferror(p_ctx->fd)) { - bfuncs->JobMessage(ctx, fi, li, M_FATAL, 0, + bfuncs->JobMessage(ctx, fi, li, M_FATAL, 0, "Pipe read error: ERR=%s\n", strerror(errno)); - bfuncs->DebugMessage(ctx, fi, li, dbglvl, + bfuncs->DebugMessage(ctx, fi, li, dbglvl, "Pipe read error: ERR=%s\n", strerror(errno)); return bRC_Error; } @@ -402,9 +390,9 @@ static bRC pluginIO(bpContext *ctx, struct io_pkt *io) io->status = fwrite(io->buf, 1, io->count, p_ctx->fd); // printf("bpipe-fd: IO_WRITE buf=%p len=%d\n", io->buf, io->status); if (io->status == 0 && ferror(p_ctx->fd)) { - bfuncs->JobMessage(ctx, fi, li, M_FATAL, 0, + bfuncs->JobMessage(ctx, fi, li, M_FATAL, 0, "Pipe write error\n"); - bfuncs->DebugMessage(ctx, fi, li, dbglvl, + bfuncs->DebugMessage(ctx, fi, li, dbglvl, "Pipe read error: ERR=%s\n", strerror(errno)); return bRC_Error; } @@ -416,6 +404,28 @@ static bRC pluginIO(bpContext *ctx, struct io_pkt *io) return bRC_Error; } io->status = pclose(p_ctx->fd); + + /* Problem during execution */ + if (io->status < 0) { + io->io_errno = errno; + bfuncs->JobMessage(ctx, fi, li, M_ERROR, 0, "bpipe-fd: Error closing stream for pseudo file %s: %d (%s)\n", + p_ctx->fname, io->status, strerror(errno)); + + /* Problem inside the subprogram */ + } else if (io->status > 0) { + int status=1; + if (WIFEXITED(io->status)) { /* process exit()ed */ + status = WEXITSTATUS(io->status); + + } else if (WIFSIGNALED(io->status)) { /* process died */ +#ifndef HAVE_WIN32 + status = WTERMSIG(io->status); +#endif + } + bfuncs->DebugMessage(ctx, fi, li, dbglvl, "bpipe-fd: exit=%d\n", io->status); + bfuncs->JobMessage(ctx, fi, li, M_ERROR, 0, "bpipe-fd: Error closing stream for pseudo file %s: exit %d\n", + p_ctx->fname, status); + } break; case IO_SEEK: @@ -448,7 +458,7 @@ static bRC endRestoreFile(bpContext *ctx) /* * This is called during restore to create the file (if necessary) * We must return in rp->create_status: - * + * * CF_ERROR -- error * CF_SKIP -- skip processing this file * CF_EXTRACT -- extract the file (i.e.call i/o routines) @@ -526,9 +536,9 @@ static char *apply_rp_codes(struct plugin_ctx * p_ctx) } } - /* Required mem: - * len(imsg) - * + number of "where" codes * (len(where)-2) + /* Required mem: + * len(imsg) + * + number of "where" codes * (len(where)-2) * - number of "replace" codes */ omsg = (char*)malloc(strlen(imsg) + (w_count * (strlen(p_ctx->where)-2)) - r_count + 1); diff --git a/bacula/src/plugins/fd/example-plugin-fd.c b/bacula/src/plugins/fd/example-plugin-fd.c index 47d5239a91..3a6f843f61 100644 --- a/bacula/src/plugins/fd/example-plugin-fd.c +++ b/bacula/src/plugins/fd/example-plugin-fd.c @@ -1,13 +1,17 @@ /* + Bacula® - The Network Backup Solution - Copyright (C) 2007-2012 Kern Sibbald + Copyright (C) 2010-2014 Free Software Foundation Europe e.V. - You may freely use this code to create your own plugin provided - it is to write a plugin for Bacula licensed under AGPLv3 - (as Bacula is), and in that case, you may also remove - the above Copyright and this notice as well as modify - the code in any way. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. + + Bacula® is a registered trademark of Kern Sibbald. */ #define BUILD_PLUGIN @@ -98,7 +102,7 @@ loadPlugin(bInfo *lbinfo, bFuncs *lbfuncs, pInfo **pinfo, pFuncs **pfuncs) * Bacula is going to exit. */ bRC DLL_IMP_EXP -unloadPlugin() +unloadPlugin() { printf("plugin: Unloaded\n"); return bRC_OK; @@ -121,7 +125,7 @@ static bRC newPlugin(bpContext *ctx) } /* - * Release everything concerning a particular instance of a + * Release everything concerning a particular instance of a * plugin. Normally called when the Job terminates. */ static bRC freePlugin(bpContext *ctx) @@ -136,17 +140,17 @@ static bRC freePlugin(bpContext *ctx) * Called by core code to get a variable from the plugin. * Not currently used. */ -static bRC getPluginValue(bpContext *ctx, pVariable var, void *value) +static bRC getPluginValue(bpContext *ctx, pVariable var, void *value) { // printf("plugin: getPluginValue var=%d\n", var); return bRC_OK; } -/* +/* * Called by core code to set a plugin variable. * Not currently used. */ -static bRC setPluginValue(bpContext *ctx, pVariable var, void *value) +static bRC setPluginValue(bpContext *ctx, pVariable var, void *value) { // printf("plugin: setPluginValue var=%d\n", var); return bRC_OK; @@ -224,13 +228,13 @@ static bRC startBackupFile(bpContext *ctx, struct save_pkt *sp) * Done backing up a file. */ static bRC endBackupFile(bpContext *ctx) -{ +{ return bRC_OK; } /* * Do actual I/O. Bacula calls this after startBackupFile - * or after startRestoreFile to do the actual file + * or after startRestoreFile to do the actual file * input or output. */ static bRC pluginIO(bpContext *ctx, struct io_pkt *io) diff --git a/bacula/src/plugins/fd/fd_common.h b/bacula/src/plugins/fd/fd_common.h index 666c24cd2a..a1215e0c25 100644 --- a/bacula/src/plugins/fd/fd_common.h +++ b/bacula/src/plugins/fd/fd_common.h @@ -1,30 +1,19 @@ /* - Bacula(R) - The Network Backup Solution - - Copyright (C) 2010-2011 Bacula Systems(R) SA +/* + Bacula® - The Network Backup Solution - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can modify it under the terms of - version three of the GNU Affero General Public License as published by the Free - Software Foundation, which is listed in the file LICENSE. + Copyright (C) 2010-2014 Free Software Foundation Europe e.V. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. - Bacula(R) is a registered trademark of Kern Sibbald. - Bacula Systems(R) is a trademark of Bacula Systems SA. - Bacula Enterprise(TM) is a trademark of Bacula Systems SA. + Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula Enterprise(TM) is Bacula Systems(R) SA, - Rue Galilee 5, 1400 Yverdon-les-Bains, Switzerland. */ /* You can include this file to your plugin to have @@ -126,7 +115,7 @@ static void add_drive(char *drives, int *nCount, char *fname) { drives[*nCount] = ch; drives[*nCount+1] = 0; (*nCount)++; - } + } } } diff --git a/bacula/src/plugins/fd/test-deltaseq-fd.c b/bacula/src/plugins/fd/test-deltaseq-fd.c index b365711901..71bbc8df8b 100644 --- a/bacula/src/plugins/fd/test-deltaseq-fd.c +++ b/bacula/src/plugins/fd/test-deltaseq-fd.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2007-2011 Free Software Foundation Europe e.V. + Copyright (C) 2007-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation, which is - listed in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * A simple delta plugin for the Bacula File Daemon @@ -117,7 +105,7 @@ public: bool done; int level; - delta_test(bpContext *bpc) { + delta_test(bpContext *bpc) { fd = NULL; ctx = bpc; done = false; @@ -154,16 +142,16 @@ bRC loadPlugin(bInfo *lbinfo, bFuncs *lbfuncs, pInfo **pinfo, pFuncs **pfuncs) } /* - * External entry point to unload the plugin + * External entry point to unload the plugin */ -bRC unloadPlugin() +bRC unloadPlugin() { // Dmsg(NULL, dbglvl, "delta-test-fd: Unloaded\n"); return bRC_OK; } /* - * The following entry points are accessed through the function + * The following entry points are accessed through the function * pointers we supplied to Bacula. Each plugin type (dir, fd, sd) * has its own set of entry points that the plugin must define. */ @@ -196,7 +184,7 @@ static bRC freePlugin(bpContext *ctx) /* * Return some plugin value (none defined) */ -static bRC getPluginValue(bpContext *ctx, pVariable var, void *value) +static bRC getPluginValue(bpContext *ctx, pVariable var, void *value) { return bRC_OK; } @@ -204,7 +192,7 @@ static bRC getPluginValue(bpContext *ctx, pVariable var, void *value) /* * Set a plugin value (none defined) */ -static bRC setPluginValue(bpContext *ctx, pVariable var, void *value) +static bRC setPluginValue(bpContext *ctx, pVariable var, void *value) { return bRC_OK; } @@ -230,7 +218,7 @@ static bRC handlePluginEvent(bpContext *ctx, bEvent *event, void *value) */ switch (event->eventType) { case bEventPluginCommand: -// Dmsg(ctx, dbglvl, +// Dmsg(ctx, dbglvl, // "delta-test-fd: PluginCommand=%s\n", (char *)value); break; case bEventJobStart: @@ -271,7 +259,7 @@ static bRC handlePluginEvent(bpContext *ctx, bEvent *event, void *value) if (self->level == 'I' || self->level == 'D') { bfuncs->getBaculaValue(ctx, bVarAccurate, (void *)&accurate); if (!accurate) { /* can be changed to FATAL */ - Jmsg(ctx, M_FATAL, + Jmsg(ctx, M_FATAL, "Accurate mode should be turned on when using the " "delta-test plugin\n"); return bRC_Error; @@ -294,7 +282,7 @@ static const char *files[] = { }; static int nb_files = 4; -/* +/* * Start the backup of a specific file */ static bRC startBackupFile(bpContext *ctx, struct save_pkt *sp) @@ -321,7 +309,7 @@ static bRC startBackupFile(bpContext *ctx, struct save_pkt *sp) self->delta = sp->delta_seq + 1; } pm_strcpy(self->fname, files[self->delta % nb_files]); - Dmsg(ctx, dbglvl, "delta-test-fd: delta_seq=%i delta=%i fname=%s\n", + Dmsg(ctx, dbglvl, "delta-test-fd: delta_seq=%i delta=%i fname=%s\n", sp->delta_seq, self->delta, self->fname); // Dmsg(ctx, dbglvl, "delta-test-fd: startBackupFile\n"); return bRC_OK; @@ -350,7 +338,7 @@ static bRC pluginIO(bpContext *ctx, struct io_pkt *io) if (!self) { return bRC_Error; } - + io->status = 0; io->io_errno = 0; switch(io->func) { @@ -365,7 +353,7 @@ static bRC pluginIO(bpContext *ctx, struct io_pkt *io) } if (!self->fd) { io->io_errno = errno; - Jmsg(ctx, M_FATAL, + Jmsg(ctx, M_FATAL, "Open failed: ERR=%s\n", strerror(errno)); return bRC_Error; } @@ -374,7 +362,7 @@ static bRC pluginIO(bpContext *ctx, struct io_pkt *io) self->fd = fopen(self->fname, "r"); if (!self->fd) { io->io_errno = errno; - Jmsg(ctx, M_FATAL, + Jmsg(ctx, M_FATAL, "Open failed: ERR=%s\n", strerror(errno)); return bRC_Error; } @@ -391,7 +379,7 @@ static bRC pluginIO(bpContext *ctx, struct io_pkt *io) } else { /* first time, read 300, then replace 50-250 by other data */ if (self->delta == 0) { - io->status = fread(io->buf, 1, 400, self->fd); + io->status = fread(io->buf, 1, 400, self->fd); } else { io->offset = self->delta * 100 / 2; /* chunks are melted */ io->status = fread(io->buf, 1, 100, self->fd); @@ -400,9 +388,9 @@ static bRC pluginIO(bpContext *ctx, struct io_pkt *io) self->done = true; } if (io->status == 0 && ferror(self->fd)) { - Jmsg(ctx, M_FATAL, + Jmsg(ctx, M_FATAL, "Pipe read error: ERR=%s\n", strerror(errno)); - Dmsg(ctx, dbglvl, + Dmsg(ctx, dbglvl, "Pipe read error: ERR=%s\n", strerror(errno)); return bRC_Error; } @@ -417,9 +405,9 @@ static bRC pluginIO(bpContext *ctx, struct io_pkt *io) Dmsg(ctx, dbglvl, "delta-test-fd: WRITE count=%lld\n", (int64_t)io->count); io->status = fwrite(io->buf, 1, io->count, self->fd); if (io->status == 0 && ferror(self->fd)) { - Jmsg(ctx, M_FATAL, + Jmsg(ctx, M_FATAL, "Pipe write error\n"); - Dmsg(ctx, dbglvl, + Dmsg(ctx, dbglvl, "Pipe read error: ERR=%s\n", strerror(errno)); return bRC_Error; } @@ -469,7 +457,7 @@ static bRC endRestoreFile(bpContext *ctx) /* * This is called during restore to create the file (if necessary) * We must return in rp->create_status: - * + * * CF_ERROR -- error * CF_SKIP -- skip processing this file * CF_EXTRACT -- extract the file (i.e.call i/o routines) diff --git a/bacula/src/plugins/fd/test-plugin-fd.c b/bacula/src/plugins/fd/test-plugin-fd.c index 765903ffd8..0dff4c1716 100644 --- a/bacula/src/plugins/fd/test-plugin-fd.c +++ b/bacula/src/plugins/fd/test-plugin-fd.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2007-2012 Free Software Foundation Europe e.V. + Copyright (C) 2007-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation, which is - listed in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * A simple test plugin for the Bacula File Daemon derived from @@ -114,7 +102,7 @@ static struct ini_items test_items[] = { { "string2", ini_store_str, "2nd String", 0}, { "ok", ini_store_bool, "boolean", 0}, -// We can also use the ITEMS_DEFAULT +// We can also use the ITEMS_DEFAULT // { "ok", ini_store_bool, "boolean", 0, ITEMS_DEFAULT}, { NULL, NULL, NULL, 0} }; @@ -156,16 +144,16 @@ bRC loadPlugin(bInfo *lbinfo, bFuncs *lbfuncs, pInfo **pinfo, pFuncs **pfuncs) } /* - * External entry point to unload the plugin + * External entry point to unload the plugin */ -bRC unloadPlugin() +bRC unloadPlugin() { // printf("test-plugin-fd: Unloaded\n"); return bRC_OK; } /* - * The following entry points are accessed through the function + * The following entry points are accessed through the function * pointers we supplied to Bacula. Each plugin type (dir, fd, sd) * has its own set of entry points that the plugin must define. */ @@ -206,7 +194,7 @@ static bRC freePlugin(bpContext *ctx) /* * Return some plugin value (none defined) */ -static bRC getPluginValue(bpContext *ctx, pVariable var, void *value) +static bRC getPluginValue(bpContext *ctx, pVariable var, void *value) { return bRC_OK; } @@ -214,7 +202,7 @@ static bRC getPluginValue(bpContext *ctx, pVariable var, void *value) /* * Set a plugin value (none defined) */ -static bRC setPluginValue(bpContext *ctx, pVariable var, void *value) +static bRC setPluginValue(bpContext *ctx, pVariable var, void *value) { return bRC_OK; } @@ -266,7 +254,7 @@ static bRC handlePluginEvent(bpContext *ctx, bEvent *event, void *value) break; } rop = (restore_object_pkt *)value; - bfuncs->DebugMessage(ctx, fi, li, dbglvl, + bfuncs->DebugMessage(ctx, fi, li, dbglvl, "Get RestoreObject len=%d JobId=%d oname=%s type=%d data=%.127s\n", rop->object_len, rop->JobId, rop->object_name, rop->object_type, rop->object); @@ -292,7 +280,7 @@ static bRC handlePluginEvent(bpContext *ctx, bEvent *event, void *value) } ini.register_items(test_items, sizeof(struct ini_items)); if (ini.parse(ini.out_fname)) { - bfuncs->JobMessage(ctx, fi, li, M_INFO, 0, "string1 = %s\n", + bfuncs->JobMessage(ctx, fi, li, M_INFO, 0, "string1 = %s\n", ini.items[0].val.strval); } else { bfuncs->JobMessage(ctx, fi, li, M_ERROR, 0, "Can't parse config\n"); @@ -332,7 +320,7 @@ static bRC handlePluginEvent(bpContext *ctx, bEvent *event, void *value) } *p++ = 0; /* terminate reader string */ p_ctx->writer = p; - printf("test-plugin-fd: plugin=%s fname=%s reader=%s writer=%s\n", + printf("test-plugin-fd: plugin=%s fname=%s reader=%s writer=%s\n", p_ctx->cmd, p_ctx->fname, p_ctx->reader, p_ctx->writer); break; } @@ -351,7 +339,7 @@ static bRC handlePluginEvent(bpContext *ctx, bEvent *event, void *value) return bRC_OK; } -/* +/* * Start the backup of a specific file */ static bRC startBackupFile(bpContext *ctx, struct save_pkt *sp) @@ -363,15 +351,15 @@ static bRC startBackupFile(bpContext *ctx, struct save_pkt *sp) if (p_ctx->nb_obj == 0) { sp->fname = (char *)"takeme.h"; - bfuncs->DebugMessage(ctx, fi, li, dbglvl, "AcceptFile=%s = %d\n", + bfuncs->DebugMessage(ctx, fi, li, dbglvl, "AcceptFile=%s = %d\n", sp->fname, bfuncs->AcceptFile(ctx, sp)); sp->fname = (char *)"/path/to/excludeme.o"; - bfuncs->DebugMessage(ctx, fi, li, dbglvl, "AcceptFile=%s = %d\n", + bfuncs->DebugMessage(ctx, fi, li, dbglvl, "AcceptFile=%s = %d\n", sp->fname, bfuncs->AcceptFile(ctx, sp)); sp->fname = (char *)"/path/to/excludeme.c"; - bfuncs->DebugMessage(ctx, fi, li, dbglvl, "AcceptFile=%s = %d\n", + bfuncs->DebugMessage(ctx, fi, li, dbglvl, "AcceptFile=%s = %d\n", sp->fname, bfuncs->AcceptFile(ctx, sp)); } @@ -586,7 +574,7 @@ static bRC startBackupFile(bpContext *ctx, struct save_pkt *sp) fclose(fp); } free_pool_memory(q); - + } else if (p_ctx->nb_obj == 1) { ConfigFile ini; p_ctx->buf = get_pool_memory(PM_BSOCK); @@ -598,7 +586,7 @@ static bRC startBackupFile(bpContext *ctx, struct save_pkt *sp) sp->type = FT_PLUGIN_CONFIG; Dmsg1(0, "RestoreOptions=<%s>\n", p_ctx->buf); - } + } time_t now = time(NULL); sp->index = ++p_ctx->nb_obj; @@ -610,7 +598,7 @@ static bRC startBackupFile(bpContext *ctx, struct save_pkt *sp) sp->statp.st_blksize = 4096; sp->statp.st_blocks = 1; bfuncs->DebugMessage(ctx, fi, li, dbglvl, - "Creating RestoreObject len=%d oname=%s data=%.127s\n", + "Creating RestoreObject len=%d oname=%s data=%.127s\n", sp->object_len, sp->object_name, sp->object); printf("test-plugin-fd: startBackupFile\n"); @@ -639,7 +627,7 @@ static bRC pluginIO(bpContext *ctx, struct io_pkt *io) if (!p_ctx) { return bRC_Error; } - + io->status = 0; io->io_errno = 0; return bRC_OK; @@ -668,7 +656,7 @@ static bRC endRestoreFile(bpContext *ctx) /* * This is called during restore to create the file (if necessary) * We must return in rp->create_status: - * + * * CF_ERROR -- error * CF_SKIP -- skip processing this file * CF_EXTRACT -- extract the file (i.e.call i/o routines) diff --git a/bacula/src/plugins/sd/Makefile.in b/bacula/src/plugins/sd/Makefile.in index 7a3ae2603e..d06554d292 100644 --- a/bacula/src/plugins/sd/Makefile.in +++ b/bacula/src/plugins/sd/Makefile.in @@ -1,7 +1,6 @@ # # Simple Makefile for building test FD plugins for Bacula # -# Version $Id: Makefile.in 7841 2008-10-19 10:34:03Z kerns $ # @MCOMMON@ @@ -33,13 +32,16 @@ install: all libtool-clean: find . -name '*.lo' -print | xargs $(LIBTOOL_CLEAN) $(RMF) $(RMF) *.la - $(RMF) -r .libs _libs + $(RMF) -rf .libs _libs clean: @LIBTOOL_CLEAN_TARGET@ - rm -f main *.so *.o 1 2 3 + rm -f main *.so *.o 1 2 3 *.la *.lo + rm -rf .libs + distclean: clean - rm -f Makefile + rm -f Makefile *.la *.lo + rm -rf .libs libtool-uninstall: $(LIBTOOL_UNINSTALL) $(RMF) $(DESTDIR)$(plugindir)/example-plugin-sd.so diff --git a/bacula/src/plugins/sd/example-plugin-sd.c b/bacula/src/plugins/sd/example-plugin-sd.c index f391123e7d..b3f2c2cf24 100644 --- a/bacula/src/plugins/sd/example-plugin-sd.c +++ b/bacula/src/plugins/sd/example-plugin-sd.c @@ -1,29 +1,17 @@ /* - Bacula(R) - The Network Backup Solution - - Copyright (C) 2007-2011 Free Software Foundation Europe e.V. - - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation, which is - listed in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. - - Bacula(R) is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. + Bacula® - The Network Backup Solution + + Copyright (C) 2007-2014 Free Software Foundation Europe e.V. + + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. + + Bacula® is a registered trademark of Kern Sibbald. */ /* * Sample Storage daemon Plugin program @@ -99,17 +87,17 @@ loadPlugin(bsdInfo *lbinfo, bsdFuncs *lbfuncs, psdInfo **pinfo, psdFuncs **pfunc } /* - * External entry point to unload the plugin + * External entry point to unload the plugin */ bRC DLL_IMP_EXP -unloadPlugin() +unloadPlugin() { printf("example-plugin-sd: Unloaded\n"); return bRC_OK; } /* - * The following entry points are accessed through the function + * The following entry points are accessed through the function * pointers we supplied to Bacula. Each plugin type (dir, fd, sd) * has its own set of entry points that the plugin must define. */ @@ -139,7 +127,7 @@ static bRC freePlugin(bpContext *ctx) /* * Return some plugin value (none defined) */ -static bRC getPluginValue(bpContext *ctx, psdVariable var, void *value) +static bRC getPluginValue(bpContext *ctx, psdVariable var, void *value) { printf("example-plugin-sd: getPluginValue var=%d\n", var); return bRC_OK; @@ -148,7 +136,7 @@ static bRC getPluginValue(bpContext *ctx, psdVariable var, void *value) /* * Set a plugin value (none defined) */ -static bRC setPluginValue(bpContext *ctx, psdVariable var, void *value) +static bRC setPluginValue(bpContext *ctx, psdVariable var, void *value) { printf("example-plugin-sd: setPluginValue var=%d\n", var); return bRC_OK; diff --git a/bacula/src/plugins/sd/main.c b/bacula/src/plugins/sd/main.c index 0b3fee559a..07100ee0e9 100644 --- a/bacula/src/plugins/sd/main.c +++ b/bacula/src/plugins/sd/main.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2007-2010 Free Software Foundation Europe e.V. + Copyright (C) 2007-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation, which is - listed in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Main program to test loading and running Bacula plugins. @@ -53,7 +41,7 @@ static bFuncs bfuncs = { NULL, NULL }; - + @@ -63,7 +51,7 @@ int main(int argc, char *argv[]) bpContext ctx; bEvent event; Plugin *plugin; - + bplugin_list = New(alist(10, not_owned_by_alist)); ctx.bContext = NULL; @@ -73,23 +61,23 @@ int main(int argc, char *argv[]) load_plugins((void *)&bfuncs, plugin_dir, plugin_type); foreach_alist(plugin, bplugin_list) { - printf("bacula: plugin_size=%d plugin_version=%d\n", + printf("bacula: plugin_size=%d plugin_version=%d\n", pref(plugin)->size, pref(plugin)->interface); printf("License: %s\nAuthor: %s\nDate: %s\nVersion: %s\nDescription: %s\n", - pref(plugin)->plugin_license, pref(plugin)->plugin_author, - pref(plugin)->plugin_date, pref(plugin)->plugin_version, + pref(plugin)->plugin_license, pref(plugin)->plugin_author, + pref(plugin)->plugin_date, pref(plugin)->plugin_version, pref(plugin)->plugin_description); /* Start a new instance of the plugin */ pref(plugin)->newPlugin(&ctx); - event.eventType = bEventNewVolume; + event.eventType = bEventNewVolume; pref(plugin)->handlePluginEvent(&ctx, &event); /* Free the plugin instance */ pref(plugin)->freePlugin(&ctx); /* Start a new instance of the plugin */ pref(plugin)->newPlugin(&ctx); - event.eventType = bEventNewVolume; + event.eventType = bEventNewVolume; pref(plugin)->handlePluginEvent(&ctx, &event); /* Free the plugin instance */ pref(plugin)->freePlugin(&ctx); diff --git a/bacula/src/qt-console/bat.h b/bacula/src/qt-console/bat.h index 315210ba77..2bbdbe1bab 100644 --- a/bacula/src/qt-console/bat.h +++ b/bacula/src/qt-console/bat.h @@ -4,29 +4,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2007-2011 Free Software Foundation Europe e.V. + Copyright (C) 2007-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Kern Sibbald, January 2007 diff --git a/bacula/src/qt-console/bat_conf.cpp b/bacula/src/qt-console/bat_conf.cpp index feea10eee6..279e7faf92 100644 --- a/bacula/src/qt-console/bat_conf.cpp +++ b/bacula/src/qt-console/bat_conf.cpp @@ -3,27 +3,15 @@ Copyright (C) 2000-2009 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Main configuration file parser for Bacula User Agent @@ -108,6 +96,7 @@ static RES_ITEM con_items[] = { {"tlscertificate", store_dir, ITEM(con_res.tls_certfile), 0, 0, 0}, {"tlskey", store_dir, ITEM(con_res.tls_keyfile), 0, 0, 0}, {"heartbeatinterval", store_time, ITEM(con_res.heartbeat_interval), 0, ITEM_DEFAULT, 0}, + {"director", store_str, ITEM(con_res.director), 0, 0, 0}, {NULL, NULL, {0}, 0, 0, 0} }; @@ -194,7 +183,7 @@ void free_resource(RES *sres, int type) if (res->dir_res.address) { free(res->dir_res.address); } - if (res->dir_res.tls_ctx) { + if (res->dir_res.tls_ctx) { free_tls_context(res->dir_res.tls_ctx); } if (res->dir_res.tls_ca_certfile) { @@ -214,7 +203,7 @@ void free_resource(RES *sres, int type) if (res->con_res.password) { free(res->con_res.password); } - if (res->con_res.tls_ctx) { + if (res->con_res.tls_ctx) { free_tls_context(res->con_res.tls_ctx); } if (res->con_res.tls_ca_certfile) { @@ -229,6 +218,9 @@ void free_resource(RES *sres, int type) if (res->con_res.tls_keyfile) { free(res->con_res.tls_keyfile); } + if (res->con_res.director) { + free(res->con_res.director); + } break; case R_CONSOLE_FONT: if (res->con_font.fontface) { diff --git a/bacula/src/qt-console/bat_conf.h b/bacula/src/qt-console/bat_conf.h index 16868586f0..e9e41f76d5 100644 --- a/bacula/src/qt-console/bat_conf.h +++ b/bacula/src/qt-console/bat_conf.h @@ -1,32 +1,20 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2002-2007 Free Software Foundation Europe e.V. + Copyright (C) 2002-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* - * Bacula Adminstration Tool (bat) + * Bacula Adminstration Tool (bat) * * Kern Sibbald, March 2002 * @@ -101,6 +89,7 @@ public: char *tls_ca_certdir; /* TLS CA Certificate Directory */ char *tls_certfile; /* TLS Client Certificate File */ char *tls_keyfile; /* TLS Client Key File */ + char *director; /* bind to director */ utime_t heartbeat_interval; /* Cons heartbeat interval */ TLS_CONTEXT *tls_ctx; /* Shared TLS Context */ diff --git a/bacula/src/qt-console/bcomm/dircomm.cpp b/bacula/src/qt-console/bcomm/dircomm.cpp index b2261f9508..4b81699d4c 100644 --- a/bacula/src/qt-console/bcomm/dircomm.cpp +++ b/bacula/src/qt-console/bcomm/dircomm.cpp @@ -3,34 +3,22 @@ Copyright (C) 2007-2011 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * DirComm, Director communications,class * * Kern Sibbald, January MMVII * - */ + */ #include "bat.h" #include "console.h" @@ -70,13 +58,12 @@ void DirComm::terminate() } if (mainWin->m_connDebug) Pmsg2(000, "DirComm %i terminating connections %s\n", m_conn, m_console->m_dir->name()); - m_sock->close(); - m_sock = NULL; + free_bsock(m_sock); } } /* - * Connect to Director. + * Connect to Director. */ bool DirComm::connect_dir() { @@ -84,10 +71,16 @@ bool DirComm::connect_dir() utime_t heart_beat; char buf[1024]; CONRES *cons; - + int numcon = 0; + int i = 0; + buf[0] = 0; - if (m_sock) { + foreach_res(cons, R_CONSOLE) { + numcon++; + } + + if (m_sock && !is_bsock_open(m_sock)) { mainWin->set_status( tr("Already connected.")); m_console->display_textf(_("Already connected\"%s\".\n"), m_console->m_dir->name()); @@ -107,21 +100,47 @@ bool DirComm::connect_dir() /* Give GUI a chance */ app->processEvents(); - + LockRes(); /* If cons==NULL, default console will be used */ - cons = (CONRES *)GetNextRes(R_CONSOLE, NULL); + for (i=0; idirector && strcasecmp(cons->director, m_console->m_dir->name()) == 0) { + break; + } + if (i == (numcon - 1)) { + cons = NULL; + } + } + + /* Look for the first non-linked console */ + if (cons == NULL) { + for (i=0; idirector == NULL) { + break; + } + if (i == (numcon - 1)) { + cons = NULL; + } + } + } + + /* If no console, take first one */ + if (!cons) { + cons = (CONRES *)GetNextRes(R_CONSOLE, (RES *)NULL); + } UnlockRes(); /* Initialize Console TLS context once */ if (cons && !cons->tls_ctx && (cons->tls_enable || cons->tls_require)) { /* Generate passphrase prompt */ - bsnprintf(buf, sizeof(buf), "Passphrase for Console \"%s\" TLS private key: ", + bsnprintf(buf, sizeof(buf), "Passphrase for Console \"%s\" TLS private key: ", cons->name()); /* Initialize TLS context: * Args: CA certfile, CA certdir, Certfile, Keyfile, - * Keyfile PEM Callback, Keyfile CB Userdata, DHfile, Verify Peer + * Keyfile PEM Callback, Keyfile CB Userdata, DHfile, Verify Peer */ cons->tls_ctx = new_tls_context(cons->tls_ca_certfile, cons->tls_ca_certdir, cons->tls_certfile, @@ -140,7 +159,7 @@ bool DirComm::connect_dir() /* Initialize Director TLS context once */ if (!m_console->m_dir->tls_ctx && (m_console->m_dir->tls_enable || m_console->m_dir->tls_require)) { /* Generate passphrase prompt */ - bsnprintf(buf, sizeof(buf), "Passphrase for Director \"%s\" TLS private key: ", + bsnprintf(buf, sizeof(buf), "Passphrase for Director \"%s\" TLS private key: ", m_console->m_dir->name()); /* Initialize TLS context: @@ -167,11 +186,17 @@ bool DirComm::connect_dir() heart_beat = cons->heartbeat_interval; } else { heart_beat = 0; - } + } - m_sock = bnet_connect(NULL, 5, 15, heart_beat, + if (!m_sock) { + m_sock = new_bsock(); + } + if (!m_sock->connect(NULL, 5, 15, heart_beat, _("Director daemon"), m_console->m_dir->address, - NULL, m_console->m_dir->DIRport, 0); + NULL, m_console->m_dir->DIRport, 0)) { + m_sock->destroy(); + m_sock = NULL; + } if (m_sock == NULL) { mainWin->set_status("Connection failed"); if (mainWin->m_connDebug) { @@ -207,7 +232,7 @@ bool DirComm::connect_dir() mainWin->set_status(_("Initializing ...")); - /* + /* * Set up input notifier */ m_notifier = new QSocketNotifier(m_sock->m_fd, QSocketNotifier::Read, 0); @@ -236,8 +261,8 @@ bail_out: return false; } -/* - * This should be moved into a bSocket class +/* + * This should be moved into a bSocket class */ char *DirComm::msg() { @@ -290,7 +315,7 @@ int DirComm::sock_read() return stat; } -/* +/* * Blocking read from director */ int DirComm::read() @@ -306,7 +331,7 @@ int DirComm::read() stat = m_sock->wait_data_intr(0, 50000); if (stat > 0) { break; - } + } app->processEvents(); if (m_api_set && m_console->is_messagesPending() && is_notify_enabled() && m_console->hasFocus()) { if (mainWin->m_commDebug) Pmsg1(000, "conn %i process_events\n", m_conn); @@ -369,7 +394,7 @@ int DirComm::read() mainWin->set_status(_("At prompt waiting for input ...")); break; case BNET_TEXT_INPUT: - if (mainWin->m_commDebug) Pmsg4(000, "conn %i TEXT_INPUT at_prompt=%d m_in_select=%d notify=%d\n", + if (mainWin->m_commDebug) Pmsg4(000, "conn %i TEXT_INPUT at_prompt=%d m_in_select=%d notify=%d\n", m_conn, m_at_prompt, m_in_select, is_notify_enabled()); //if (!m_in_select && is_notify_enabled()) { if (!m_in_select) { @@ -445,11 +470,10 @@ int DirComm::read() stat = BNET_HARDEOF; return stat; } - if (is_bnet_stop(m_sock)) { /* error or term request */ + if (m_sock->is_stop()) { /* error or term request */ if (mainWin->m_commDebug) Pmsg1(000, "conn %i BNET STOP\n", m_conn); m_console->stopTimer(); - m_sock->close(); - m_sock = NULL; + free_bsock(m_sock); mainWin->actionConnect->setIcon(QIcon(":images/disconnected.png")); QBrush redBrush(Qt::red); QTreeWidgetItem *item = mainWin->getFromHash(m_console); @@ -464,7 +488,7 @@ int DirComm::read() stat = BNET_HARDEOF; } break; - } + } return stat; } @@ -488,7 +512,7 @@ void DirComm::notify_read_dir(int /* fd */) /* * When the notifier is enabled, read_dir() will automatically be - * called by the Qt event loop when ever there is any output + * called by the Qt event loop when ever there is any output * from the Director, and read_dir() will then display it on * the console. * @@ -496,13 +520,13 @@ void DirComm::notify_read_dir(int /* fd */) * from the Directory, so we set notify to off. * m_console->notify(false); */ -bool DirComm::notify(bool enable) -{ +bool DirComm::notify(bool enable) +{ bool prev_enabled = false; /* Set global flag */ mainWin->m_notify = enable; if (m_notifier) { - prev_enabled = m_notifier->isEnabled(); + prev_enabled = m_notifier->isEnabled(); m_notifier->setEnabled(enable); m_notify = enable; if (mainWin->m_connDebug) Pmsg3(000, "conn=%i set_notify=%d prev=%d\n", m_conn, enable, prev_enabled); @@ -519,7 +543,7 @@ bool DirComm::is_notify_enabled() const /* * Call-back for reading a passphrase for an encrypted PEM file - * This function uses getpass(), + * This function uses getpass(), * which uses a static buffer and is NOT thread-safe. */ static int tls_pem_callback(char *buf, int size, const void *userdata) diff --git a/bacula/src/qt-console/bcomm/dircomm.h b/bacula/src/qt-console/bcomm/dircomm.h index b0989140f0..630c071f5e 100644 --- a/bacula/src/qt-console/bcomm/dircomm.h +++ b/bacula/src/qt-console/bcomm/dircomm.h @@ -3,29 +3,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2007-2009 Free Software Foundation Europe e.V. + Copyright (C) 2007-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Version $Id$ @@ -57,7 +45,7 @@ public: ~DirComm(); Console *m_console; int sock_read(); - bool authenticate_director(JCR *jcr, DIRRES *director, CONRES *cons, + bool authenticate_director(JCR *jcr, DIRRES *director, CONRES *cons, char *buf, int buflen); bool is_connected() { return m_sock != NULL; }; bool is_ready() { return is_connected() && m_at_prompt && m_at_main_prompt; }; @@ -66,7 +54,7 @@ public: bool is_notify_enabled() const; bool is_in_command() const { return m_in_command > 0; }; void terminate(); - bool connect_dir(); + bool connect_dir(); int read(void); int write(const char *msg); int write(QString msg); @@ -75,7 +63,7 @@ public slots: void notify_read_dir(int fd); private: - BSOCK *m_sock; + BSOCK *m_sock; bool m_at_prompt; bool m_at_main_prompt; bool m_sent_blank; diff --git a/bacula/src/qt-console/bcomm/dircomm_auth.cpp b/bacula/src/qt-console/bcomm/dircomm_auth.cpp index 331a628ae2..548a26e577 100644 --- a/bacula/src/qt-console/bcomm/dircomm_auth.cpp +++ b/bacula/src/qt-console/bcomm/dircomm_auth.cpp @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2001-2009 Free Software Foundation Europe e.V. + Copyright (C) 2001-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* @@ -33,31 +21,38 @@ * * Kern Sibbald, June MMI adapted to bat, Jan MMVI * - * Version $Id$ - * */ #include "bat.h" +/* + * Version at end of Hello + * prior to 06Aug13 no version + * 1 21Oct13 - added comm line compression + */ +#define BAT_VERSION 1 + /* Commands sent to Director */ -static char hello[] = "Hello %s calling\n"; +static char hello[] = "Hello %s calling %d\n"; /* Response from Director */ -static char OKhello[] = "1000 OK:"; +static char oldOKhello[] = "1000 OK:"; +static char newOKhello[] = "1000 OK: %d"; /* Forward referenced functions */ /* * Authenticate Director */ -bool DirComm::authenticate_director(JCR *jcr, DIRRES *director, CONRES *cons, - char *errmsg, int errmsg_len) +bool DirComm::authenticate_director(JCR *jcr, DIRRES *director, CONRES *cons, + char *errmsg, int errmsg_len) { BSOCK *dir = jcr->dir_bsock; int tls_local_need = BNET_TLS_NONE; int tls_remote_need = BNET_TLS_NONE; + int dir_version = 0; bool tls_authenticate; int compatible = true; char bashed_name[MAX_NAME_LENGTH]; @@ -103,7 +98,7 @@ bool DirComm::authenticate_director(JCR *jcr, DIRRES *director, CONRES *cons, /* Timeout Hello after 15 secs */ dir->start_timer(15); - dir->fsend(hello, bashed_name); + dir->fsend(hello, bashed_name, BAT_VERSION); /* respond to Dir challenge */ if (!cram_md5_respond(dir, password, &tls_remote_need, &compatible) || @@ -155,14 +150,17 @@ bool DirComm::authenticate_director(JCR *jcr, DIRRES *director, CONRES *cons, dir->stop_timer(); Dmsg1(10, "msg); - if (strncmp(dir->msg, OKhello, sizeof(OKhello)-1) != 0) { + if (strncmp(dir->msg, oldOKhello, sizeof(oldOKhello)-1) != 0) { bsnprintf(errmsg, errmsg_len, _("Director at \"%s:%d\" rejected Hello command\n"), dir->host(), dir->port()); return false; } else { - if (m_conn == 0) { - bsnprintf(errmsg, errmsg_len, "%s", dir->msg); - } + /* If Dir version exists, get it */ + sscanf(dir->msg, newOKhello, &dir_version); + } + + if (m_conn == 0) { + bsnprintf(errmsg, errmsg_len, "%s", dir->msg); } return true; diff --git a/bacula/src/qt-console/clients/clients.cpp b/bacula/src/qt-console/clients/clients.cpp index 4726a1cb36..6ba383de71 100644 --- a/bacula/src/qt-console/clients/clients.cpp +++ b/bacula/src/qt-console/clients/clients.cpp @@ -3,29 +3,17 @@ Copyright (C) 2007-2009 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ - + /* * Version $Id$ * @@ -33,7 +21,7 @@ * * Dirk Bartley, March 2007 * - */ + */ #include "bat.h" #include @@ -67,7 +55,7 @@ Clients::~Clients() } /* - * The main meat of the class!! The function that queries the director and + * The main meat of the class!! The function that queries the director and * creates the widgets with appropriate values. */ void Clients::populateTable() @@ -162,7 +150,7 @@ void Clients::populateTable() /* set default sorting */ tableWidget->sortByColumn(sortcol, sortord); tableWidget->setSortingEnabled(true); - + /* Resize rows and columns */ tableWidget->resizeColumnsToContents(); tableWidget->resizeRowsToContents(); @@ -226,8 +214,8 @@ void Clients::tableItemChanged(QTableWidgetItem *currentwidgetitem, QTableWidget } } -/* - * Setup a context menu +/* + * Setup a context menu * Made separate from populate so that it would not create context menu over and * over as the tree is repopulated. */ @@ -286,7 +274,7 @@ void Clients::currentStackItem() } /* - * Function responding to actionPurgeJobs + * Function responding to actionPurgeJobs */ void Clients::consolePurgeJobs() { diff --git a/bacula/src/qt-console/clients/clients.h b/bacula/src/qt-console/clients/clients.h index 13d32c7376..4a7dbf8e2f 100644 --- a/bacula/src/qt-console/clients/clients.h +++ b/bacula/src/qt-console/clients/clients.h @@ -3,29 +3,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2007-2007 Free Software Foundation Europe e.V. + Copyright (C) 2007-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Version $Id$ @@ -40,7 +28,7 @@ class Clients : public Pages, public Ui::ClientForm { - Q_OBJECT + Q_OBJECT public: Clients(); diff --git a/bacula/src/qt-console/console/console.cpp b/bacula/src/qt-console/console/console.cpp index 65656a88ec..ade97e5b76 100644 --- a/bacula/src/qt-console/console/console.cpp +++ b/bacula/src/qt-console/console/console.cpp @@ -1,36 +1,24 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2007-2010 Free Software Foundation Europe e.V. + Copyright (C) 2007-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Console Class * - * Kern Sibbald, January MMVII + * Written by Kern Sibbald, January MMVII * - */ + */ #include "bat.h" #include "console.h" @@ -49,7 +37,7 @@ Console::Console(QTabWidget *parent) : Pages() m_warningPrevent = false; m_dircommCounter = 0; - /* + /* * Create a connection to the Director and put it in a hash table */ m_dircommHash.insert(m_dircommCounter, new DirComm(this, m_dircommCounter)); @@ -140,7 +128,7 @@ void Console::connect_dir() beginNewCommand(0); } mainWin->set_status(_("Connected")); - + startTimer(); /* start message timer */ } @@ -154,7 +142,7 @@ void Console::populateLists(bool /*forcenew*/) if (!getDirComm(conn)) { if (mainWin->m_connDebug) Pmsg0(000, "call newDirComm\n"); if (!newDirComm(conn)) { - Emsg1(M_ABORT, 0, "Failed to connect to %s for populateLists.\n", m_dir->name()); + Emsg1(M_INFO, 0, "Failed to connect to %s for populateLists.\n", m_dir->name()); return; } } @@ -178,7 +166,7 @@ void Console::populateLists(int conn) dir_cmd(conn, ".jobs", job_list); dir_cmd(conn, ".jobs type=R", restore_list); dir_cmd(conn, ".clients", client_list); - dir_cmd(conn, ".filesets", fileset_list); + dir_cmd(conn, ".filesets", fileset_list); dir_cmd(conn, ".msgs", messages_list); dir_cmd(conn, ".pools", pool_list); dir_cmd(conn, ".storage", storage_list); @@ -231,7 +219,7 @@ bool Console::dir_cmd(const char *cmd, QStringList &results) /* * Send a command to the Director, and return the - * results in a QStringList. + * results in a QStringList. */ bool Console::dir_cmd(int conn, const char *cmd, QStringList &results) { @@ -290,7 +278,7 @@ bool Console::sql_cmd(const char *query, QStringList &results) /* * Send an sql query to the Director, and return the - * results in a QStringList. + * results in a QStringList. */ bool Console::sql_cmd(int &conn, const char *query, QStringList &results, bool donotify) { @@ -308,7 +296,7 @@ bool Console::sql_cmd(int &conn, const char *query, QStringList &results, bool d dircomm->notify(false); } mainWin->waitEnter(); - + pm_strcpy(cmd, ".sql query=\""); pm_strcat(cmd, query); pm_strcat(cmd, "\""); @@ -341,7 +329,7 @@ bool Console::sql_cmd(int &conn, const char *query, QStringList &results, bool d return !mainWin->isClosing(); /* return false if closing */ } -/* +/* * Overloads for * Sending a command to the Director */ @@ -408,9 +396,9 @@ bool Console::get_job_defaults(int &conn, struct job_defaults &job_defs) return get_job_defaults(conn, job_defs, true); } -/* +/* * Send a job name to the director, and read all the resulting - * defaults. + * defaults. */ bool Console::get_job_defaults(int &conn, struct job_defaults &job_defs, bool donotify) { @@ -521,7 +509,7 @@ void Console::writeSettings() * Read and restore user settings associated with this console */ void Console::readSettings() -{ +{ QFont font = get_font(); QSettings settings(m_dir->name(), "bat"); @@ -636,7 +624,7 @@ void Console::beginNewCommand(int conn) } void Console::displayToPrompt(int conn) -{ +{ DirComm *dircomm = m_dircommHash.value(conn); int stat = 0; @@ -678,7 +666,7 @@ void Console::discardToPrompt(int conn) } QString Console::returnFromPrompt(int conn) -{ +{ DirComm *dircomm = m_dircommHash.value(conn); QString text(""); @@ -698,7 +686,7 @@ QString Console::returnFromPrompt(int conn) /* * When the notifier is enabled, read_dir() will automatically be - * called by the Qt event loop when ever there is any output + * called by the Qt event loop when ever there is any output * from the Director, and read_dir() will then display it on * the console. * @@ -709,7 +697,7 @@ QString Console::returnFromPrompt(int conn) /* dual purpose function to turn notify off and return a connection */ int Console::notifyOff() -{ +{ int conn = 0; if (getDirComm(conn)) { notify(conn, false); @@ -719,7 +707,7 @@ int Console::notifyOff() /* knowing a connection, turn notify off or on */ bool Console::notify(int conn, bool enable) -{ +{ DirComm *dircomm = m_dircommHash.value(conn); if (dircomm) { return dircomm->notify(enable); @@ -744,8 +732,8 @@ void Console::setDirectorTreeItem(QTreeWidgetItem *item) m_directorTreeItem = item; } -void Console::setDirRes(DIRRES *dir) -{ +void Console::setDirRes(DIRRES *dir) +{ m_dir = dir; } @@ -781,7 +769,7 @@ bool Console::hasFocus() return false; } -/* For adding feature to have the gui's messages button change when +/* For adding feature to have the gui's messages button change when * messages are pending */ bool Console::messagesPending(bool pend) { @@ -876,13 +864,13 @@ bool Console::getDirComm(int &conn) /* * Try to find a free (unused but established) connection * KES: Note, I think there is a problem here because for - * some reason, the notifier is often turned off on file + * some reason, the notifier is often turned off on file * descriptors that seem to me to be available. That means * that we do not use a free descriptor and thus we will create * a new connection that is maybe not necessary. Someone needs * to look into whether or not notify() is correctly turned on * when we are back at the command prompt and idle. - * + * */ bool Console::findDirComm(int &conn) { @@ -894,7 +882,7 @@ bool Console::findDirComm(int &conn) return true; } if (mainWin->m_connDebug) { - Pmsg4(000, "currentDirComm=%d at_prompt=%d at_main=%d && notify=%d\n", + Pmsg4(000, "currentDirComm=%d at_prompt=%d at_main=%d && notify=%d\n", dircomm->m_conn, dircomm->m_at_prompt, dircomm->m_at_main_prompt, dircomm->is_notify_enabled()); } ++iter; diff --git a/bacula/src/qt-console/console/console.h b/bacula/src/qt-console/console/console.h index 8d23a6c035..1d16764837 100644 --- a/bacula/src/qt-console/console/console.h +++ b/bacula/src/qt-console/console/console.h @@ -3,29 +3,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2007-2009 Free Software Foundation Europe e.V. + Copyright (C) 2007-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Version $Id$ @@ -66,7 +54,7 @@ struct job_defaults { class Console : public Pages, public Ui::ConsoleForm { - Q_OBJECT + Q_OBJECT friend class DirComm; public: @@ -80,7 +68,7 @@ public: int notifyOff(); // enables/disables socket notification - returns the previous state bool notify(int conn, bool enable); // enables/disables socket notification - returns the previous state bool is_notify_enabled(int conn) const; - bool getDirComm(int &conn); + bool getDirComm(int &conn); bool findDirComm(int &conn); void displayToPrompt(int conn); QString returnFromPrompt(int conn); @@ -140,7 +128,7 @@ public: QStringList location_list; public slots: - void connect_dir(); + void connect_dir(); void status_dir(void); void messages(void); void set_font(void); diff --git a/bacula/src/qt-console/fileset/fileset.cpp b/bacula/src/qt-console/fileset/fileset.cpp index 6efe7ae6a7..a3f49b10dc 100644 --- a/bacula/src/qt-console/fileset/fileset.cpp +++ b/bacula/src/qt-console/fileset/fileset.cpp @@ -3,29 +3,17 @@ Copyright (C) 2007-2009 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ - + /* * Version $Id$ * @@ -33,7 +21,7 @@ * * Dirk Bartley, March 2007 * - */ + */ #include "bat.h" #include @@ -65,7 +53,7 @@ FileSet::~FileSet() } /* - * The main meat of the class!! The function that querries the director and + * The main meat of the class!! The function that querries the director and * creates the widgets with appropriate values. */ void FileSet::populateTable() @@ -127,7 +115,7 @@ void FileSet::populateTable() if (indexOf != -1) { notFoundList.removeAt(indexOf); } TableItemFormatter item(*tableWidget, row); - + /* Iterate through fields in the record */ QStringListIterator fld(fieldlist); int col = 0; @@ -150,11 +138,11 @@ void FileSet::populateTable() item.setTextFld(0, filesetName); row++; } - + /* set default sorting */ tableWidget->sortByColumn(headerlist.indexOf(tr("FileSet Name")), Qt::AscendingOrder); tableWidget->setSortingEnabled(true); - + /* Resize rows and columns */ tableWidget->resizeColumnsToContents(); tableWidget->resizeRowsToContents(); @@ -215,8 +203,8 @@ void FileSet::tableItemChanged(QTableWidgetItem *currentwidgetitem, QTableWidget } } -/* - * Setup a context menu +/* + * Setup a context menu * Made separate from populate so that it would not create context menu over and * over as the tree is repopulated. */ @@ -274,7 +262,7 @@ void FileSet::writeSettings() * Read and restore user settings associated with this page */ void FileSet::readSettings() -{ +{ QSettings settings(m_console->m_dir->name(), "bat"); settings.beginGroup("FileSet"); restoreGeometry(settings.value("geometry").toByteArray()); diff --git a/bacula/src/qt-console/fileset/fileset.h b/bacula/src/qt-console/fileset/fileset.h index 852e811bc4..d75b112024 100644 --- a/bacula/src/qt-console/fileset/fileset.h +++ b/bacula/src/qt-console/fileset/fileset.h @@ -3,29 +3,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2007-2009 Free Software Foundation Europe e.V. + Copyright (C) 2007-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Version $Id$ @@ -40,7 +28,7 @@ class FileSet : public Pages, public Ui::FileSetForm { - Q_OBJECT + Q_OBJECT public: FileSet(); diff --git a/bacula/src/qt-console/help/help.cpp b/bacula/src/qt-console/help/help.cpp index 051dc5af05..dad2dacb1b 100644 --- a/bacula/src/qt-console/help/help.cpp +++ b/bacula/src/qt-console/help/help.cpp @@ -3,35 +3,23 @@ Copyright (C) 2007-2010 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ - + /* * Help Window class * * Kern Sibbald, May MMVII * - */ + */ #include "bat.h" #include "help.h" diff --git a/bacula/src/qt-console/help/help.h b/bacula/src/qt-console/help/help.h index d4eb3839db..e2f9a290b9 100644 --- a/bacula/src/qt-console/help/help.h +++ b/bacula/src/qt-console/help/help.h @@ -4,31 +4,19 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2007-2009 Free Software Foundation Europe e.V. + Copyright (C) 2007-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ - + /* * Help Window class * @@ -37,14 +25,14 @@ * Kern Sibbald, May MMVII * * $Id$ - */ + */ #include "bat.h" #include "ui_help.h" class Help : public QWidget, public Ui::helpForm { - Q_OBJECT + Q_OBJECT public: Help(const QString &path, const QString &file, QWidget *parent = NULL); diff --git a/bacula/src/qt-console/job/job.cpp b/bacula/src/qt-console/job/job.cpp index 245ed7e72e..ca27d00b05 100644 --- a/bacula/src/qt-console/job/job.cpp +++ b/bacula/src/qt-console/job/job.cpp @@ -1,31 +1,19 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2007-2009 Free Software Foundation Europe e.V. + Copyright (C) 2007-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ - + #include "bat.h" #include "job.h" #include "util/fmtwidgetitem.h" @@ -143,7 +131,7 @@ void Job::populateText() if (mainWin->m_sqlDebug) { Pmsg1(000, "Log query cmd : %s\n", query.toUtf8().data()); } - + QStringList results; if (m_console->sql_cmd(query, results)) { @@ -153,13 +141,13 @@ void Job::populateText() "It is possible you may need to add \"catalog = all\" " "to the Messages resource for this job.\n"), QMessageBox::Ok); return; - } + } QString jobstr("JobId "); /* FIXME: should this be translated ? */ jobstr += m_jobId; QString htmlbuf("
");
-  
+
       /* Iterate through the lines of results. */
       QString field;
       QStringList fieldlist;
@@ -167,7 +155,7 @@ void Job::populateText()
       QString lastSvc;
       foreach (QString resultline, results) {
          fieldlist = resultline.split("\t");
-         
+
          if (fieldlist.size() < 2)
             continue;
 
@@ -176,12 +164,12 @@ void Job::populateText()
          field = fieldlist[1].trimmed();
          int colon = field.indexOf(":");
          if (colon > 0) {
-            /* string is like  : ..." 
-             * we split at ':' then remove the jobId xxxx string (always the same) */ 
+            /* string is like  : ..."
+             * we split at ':' then remove the jobId xxxx string (always the same) */
             QString curSvc(field.left(colon).replace(jobstr,"").trimmed());
             if (curSvc == lastSvc  && curTime == lastTime) {
                curTime.clear();
-               curSvc.clear(); 
+               curSvc.clear();
             } else {
                lastTime = curTime;
                lastSvc = curSvc;
@@ -208,7 +196,7 @@ void Job::populateText()
 //          htmlbuf += "
"; htmlbuf += "\n" + field ; } - + } /* foreach resultline */ htmlbuf += ""; @@ -216,11 +204,11 @@ void Job::populateText() /* full text ready. Here a custom sheet is used to align columns */ QString logSheet(".err {color:#FF0000;}"); textJobLog->document()->setDefaultStyleSheet(logSheet); - textJobLog->document()->setHtml(htmlbuf); + textJobLog->document()->setHtml(htmlbuf); textJobLog->moveCursor(QTextCursor::Start); } /* if results from query */ - + } @@ -253,10 +241,10 @@ void Job::updateRunInfo() QRegExp oldline("Files=([\\d,]+) Bytes=([\\d,]+) Bytes/sec=([\\d,]+) Errors=([\\d,]+)"); QString com(","); QString empty(""); - + if (m_console->dir_cmd(cmd, results)) { foreach (QString mline, results) { - foreach (QString line, mline.split("\n")) { + foreach (QString line, mline.split("\n")) { line = line.trimmed(); if (oldline.indexIn(line) >= 0) { if (parseit) { @@ -277,12 +265,12 @@ void Job::updateRunInfo() lst.removeFirst(); } else { - if (mainWin->m_miscDebug) + if (mainWin->m_miscDebug) Pmsg1(0, "bad line=%s\n", line.toUtf8().data()); continue; } if (lst.count() < 2) { - if (mainWin->m_miscDebug) + if (mainWin->m_miscDebug) Pmsg2(0, "bad line=%s count=%d\n", line.toUtf8().data(), lst.count()); } if (lst[0] == "JobId") { @@ -295,11 +283,11 @@ void Job::updateRunInfo() if (!parseit) { continue; } - + // } else if (lst[0] == "Job") { // grpRun->setTitle(lst[1]); - -// + +// // } else if (lst[0] == "VSS") { // } else if (lst[0] == "Level") { @@ -312,19 +300,19 @@ void Job::updateRunInfo() if (lst[0] == "Errors") { label_JobErrors->setText(lst[1]); - + } else if (lst[0] == "Bytes/sec") { label_Speed->setText(convertBytesSI(lst[1].toULongLong())+"/s"); - + } else if (lst[0] == "Files") { label_JobFiles->setText(lst[1]); - + } else if (lst[0] == "Bytes") { label_JobBytes->setText(convertBytesSI(lst[1].toULongLong())); - + } else if (lst[0] == "Files Examined") { label_FilesExamined->setText(lst[1]); - + } else if (lst[0] == "Processing file") { label_CurrentFile->setText(lst[1]); } @@ -340,14 +328,14 @@ void Job::populateForm() { QString stat, err; char buf[256]; - QString query = + QString query = "SELECT JobId, Job.Name, Level, Client.Name, Pool.Name, FileSet," "SchedTime, StartTime, EndTime, EndTime-StartTime AS Duration, " "JobBytes, JobFiles, JobErrors, JobStatus, PurgedFiles " "FROM Job JOIN Client USING (ClientId) " "LEFT JOIN Pool ON (Job.PoolId = Pool.PoolId) " "LEFT JOIN FileSet ON (Job.FileSetId = FileSet.FileSetId)" - "WHERE JobId=" + m_jobId; + "WHERE JobId=" + m_jobId; QStringList results; if (m_console->sql_cmd(query, results)) { QString resultline, duration; @@ -358,7 +346,7 @@ void Job::populateForm() QStringListIterator fld(fieldlist); label_JobId->setText(fld.next()); label_Name->setText(fld.next()); - + label_Level->setText(job_level_to_str(fld.next()[0].toAscii())); m_client = fld.next(); @@ -369,9 +357,9 @@ void Job::populateForm() label_StartTime->setText(fld.next()); label_EndTime->setText(fld.next()); duration = fld.next(); - /* + /* * Note: if we have a negative duration, it is because the EndTime - * is zero (i.e. the Job is still running). We should use + * is zero (i.e. the Job is still running). We should use * duration = StartTime - current_time */ if (duration.left(1) == "-") { @@ -417,16 +405,16 @@ void Job::populateForm() } } } - + void Job::populateVolumes() { - QString query = + QString query = "SELECT DISTINCT VolumeName, InChanger, Slot " "FROM Job JOIN JobMedia USING (JobId) JOIN Media USING (MediaId) " - "WHERE JobId=" + m_jobId + " ORDER BY VolumeName "; + "WHERE JobId=" + m_jobId + " ORDER BY VolumeName "; if (mainWin->m_sqlDebug) Pmsg1(0, "Query cmd : %s\n",query.toUtf8().data()); - + QStringList results; if (m_console->sql_cmd(query, results)) { @@ -436,7 +424,7 @@ void Job::populateVolumes() foreach (resultline, results) { // should have only one result fieldlist = resultline.split("\t"); QStringListIterator fld(fieldlist); -// QListWidgetItem(QIcon(":/images/inchanger" + fld.next() + ".png"), +// QListWidgetItem(QIcon(":/images/inchanger" + fld.next() + ".png"), // fld.next(), list_Volume); list_Volume->addItem(fld.next()); } diff --git a/bacula/src/qt-console/job/job.h b/bacula/src/qt-console/job/job.h index 8d7f0cbf88..9c08c175d2 100644 --- a/bacula/src/qt-console/job/job.h +++ b/bacula/src/qt-console/job/job.h @@ -3,29 +3,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2007 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ #include @@ -34,7 +22,7 @@ class Job : public Pages, public Ui::JobForm { - Q_OBJECT + Q_OBJECT public: Job(QString &jobId, QTreeWidgetItem *parentTreeWidgetItem); diff --git a/bacula/src/qt-console/jobgraphs/jobplot.cpp b/bacula/src/qt-console/jobgraphs/jobplot.cpp index 95dc4a7b81..510d9f0e84 100644 --- a/bacula/src/qt-console/jobgraphs/jobplot.cpp +++ b/bacula/src/qt-console/jobgraphs/jobplot.cpp @@ -3,29 +3,17 @@ Copyright (C) 2007-2007 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ - + /* * Version $Id$ * @@ -33,7 +21,7 @@ * * Dirk Bartley, March 2007 * - */ + */ #include "bat.h" #include @@ -193,7 +181,7 @@ void JobPlot::setupControls() controls->limitSpinBox->setValue(mainWin->m_recordLimitVal); controls->daysCheckBox->setCheckState(mainWin->m_daysLimitCheck ? Qt::Checked : Qt::Unchecked); controls->daysSpinBox->setValue(mainWin->m_daysLimitVal); - } + } } /* @@ -260,7 +248,7 @@ void JobPlot::runQuery() QString field; QStringList fieldlist; - + int row = 0; /* Iterate through the record returned from the query */ foreach (resultline, results) { @@ -283,7 +271,7 @@ void JobPlot::runQuery() } row++; } - } + } if ((controls->volumeComboBox->itemText(volumeIndex) != tr("Any")) && (results.count() == 0)){ /* for context sensitive searches, let the user know if there were no * * results */ @@ -320,7 +308,7 @@ void JobPlot::setupUserInterface() area->setObjectName(QString::fromUtf8("area")); controls = new JobPlotControls(); area->setWidget(controls); - + m_splitter->addWidget(m_jobPlot); m_splitter->addWidget(area); @@ -398,7 +386,7 @@ void JobPlot::addCurve() } QDateTime mdt = QDateTime::fromString(monthBegin, mainWin->m_dtformat); double monbeg = mdt.toTime_t(); - + // ...a vertical line at the first of each month QwtPlotMarker *mX = new QwtPlotMarker(); mX->setLabel(mdt.toString("MMM-d")); @@ -448,7 +436,7 @@ void JobPlot::setPlotType(QString currentText) void JobPlot::fillSymbolCombo(QComboBox *q) { q->addItem( tr("Ellipse"), (int)QwtSymbol::Ellipse); - q->addItem( tr("Rect"), (int)QwtSymbol::Rect); + q->addItem( tr("Rect"), (int)QwtSymbol::Rect); q->addItem( tr("Diamond"), (int)QwtSymbol::Diamond); q->addItem( tr("Triangle"), (int)QwtSymbol::Triangle); q->addItem( tr("DTrianle"), (int)QwtSymbol::DTriangle); @@ -461,7 +449,7 @@ void JobPlot::fillSymbolCombo(QComboBox *q) q->addItem( tr("Vline"), (int)QwtSymbol::VLine); q->addItem( tr("Star1"), (int)QwtSymbol::Star1); q->addItem( tr("Star2"), (int)QwtSymbol::Star2); - q->addItem( tr("Hexagon"), (int)QwtSymbol::Hexagon); + q->addItem( tr("Hexagon"), (int)QwtSymbol::Hexagon); q->addItem( tr("None"), (int)QwtSymbol::NoSymbol); } @@ -490,7 +478,7 @@ void JobPlot::setSymbolType(int index, int type) sym.setStyle( (QwtSymbol::Style)style.toInt() ); sym.setBrush(QColor(Qt::yellow)); m_fileCurve->setSymbol(sym); - + } else { style = controls->byteSymbolTypeCombo->itemData(index); sym.setStyle( (QwtSymbol::Style)style.toInt() ); @@ -545,7 +533,7 @@ void JobPlot::writeSettings() settings.endGroup(); } -/* +/* * Read settings values for Controls */ void JobPlot::readControlSettings() @@ -571,7 +559,7 @@ void JobPlot::readSplitterSettings() { QSettings settings(m_console->m_dir->name(), "bat"); settings.beginGroup("JobPlot"); - if (settings.contains("m_splitterSizes")) { + if (settings.contains("m_splitterSizes")) { m_splitter->restoreState(settings.value("m_splitterSizes").toByteArray()); } settings.endGroup(); diff --git a/bacula/src/qt-console/jobgraphs/jobplot.h b/bacula/src/qt-console/jobgraphs/jobplot.h index da61205590..c418bff90e 100644 --- a/bacula/src/qt-console/jobgraphs/jobplot.h +++ b/bacula/src/qt-console/jobgraphs/jobplot.h @@ -3,29 +3,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2007-2007 Free Software Foundation Europe e.V. + Copyright (C) 2007-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Version $Id$ @@ -60,7 +48,7 @@ struct PlotJobData /* * Class for the purpose of having a single object to pass data to the JobPlot - * Constructor. The other option was a constructor with this many passed + * Constructor. The other option was a constructor with this many passed * values or some sort of code to parse a list. I liked this best at the time. */ class JobPlotPass @@ -112,7 +100,7 @@ public: */ class JobPlot : public Pages { - Q_OBJECT + Q_OBJECT public: JobPlot(QTreeWidgetItem *parentTreeWidgetItem, JobPlotPass &); diff --git a/bacula/src/qt-console/joblist/joblist.cpp b/bacula/src/qt-console/joblist/joblist.cpp index cab9abdd68..222043a8aa 100644 --- a/bacula/src/qt-console/joblist/joblist.cpp +++ b/bacula/src/qt-console/joblist/joblist.cpp @@ -3,34 +3,22 @@ Copyright (C) 2007-2009 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Version $Id$ * * Dirk Bartley, March 2007 */ - + #include "bat.h" #include #include @@ -122,8 +110,8 @@ void JobList::populateTable() /* Set up the Header for the table */ QStringList headerlist = (QStringList() - << tr("Job Id") << tr("Job Name") << tr("Client") << tr("Job Starttime") - << tr("Job Type") << tr("Job Level") << tr("Job Files") + << tr("Job Id") << tr("Job Name") << tr("Client") << tr("Job Starttime") + << tr("Job Type") << tr("Job Level") << tr("Job Files") << tr("Job Bytes") << tr("Job Status") << tr("Purged") << tr("File Set") << tr("Pool Name") << tr("First Volume") << tr("VolCount")); @@ -169,7 +157,7 @@ void JobList::populateTable() continue; /* some fields missing, ignore row */ TableItemFormatter jobitem(*mp_tableWidget, row); - + /* Iterate through fields in the record */ QStringListIterator fld(fieldlist); int col = 0; @@ -217,11 +205,11 @@ void JobList::populateTable() jobitem.setNumericFld(col++, fld.next()); row++; } - } + } /* set default sorting */ mp_tableWidget->sortByColumn(m_jobIdIndex, Qt::DescendingOrder); mp_tableWidget->setSortingEnabled(true); - + /* Resize the columns */ mp_tableWidget->resizeColumnsToContents(); mp_tableWidget->resizeRowsToContents(); @@ -278,7 +266,7 @@ void JobList::fillQueryString(QString &query) m_mediaName = volumeComboBox->itemText(volumeIndex); QString distinct = ""; if (m_mediaName != tr("Any")) { distinct = "DISTINCT "; } - query += "SELECT " + distinct + "Job.JobId AS JobId, Job.Name AS JobName, " + query += "SELECT " + distinct + "Job.JobId AS JobId, Job.Name AS JobName, " " Client.Name AS Client," " Job.Starttime AS JobStart, Job.Type AS JobType," " Job.Level AS BackupLevel, Job.Jobfiles AS FileCount," @@ -396,7 +384,7 @@ void JobList::treeWidgetName(QString &desc) */ void JobList::createConnections() { - /* connect to the action specific to this pages class that shows up in the + /* connect to the action specific to this pages class that shows up in the * page selector tree */ connect(actionRefreshJobList, SIGNAL(triggered()), this, SLOT(populateTable())); connect(refreshButton, SIGNAL(pressed()), this, SLOT(populateTable())); diff --git a/bacula/src/qt-console/joblist/joblist.h b/bacula/src/qt-console/joblist/joblist.h index dceaf205fe..9f13912ab7 100644 --- a/bacula/src/qt-console/joblist/joblist.h +++ b/bacula/src/qt-console/joblist/joblist.h @@ -3,29 +3,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2007-2007 Free Software Foundation Europe e.V. + Copyright (C) 2007-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Version $Id$ @@ -40,10 +28,10 @@ class JobList : public Pages, public Ui::JobListForm { - Q_OBJECT + Q_OBJECT public: - JobList(const QString &medianame, const QString &clientname, + JobList(const QString &medianame, const QString &clientname, const QString &jobname, const QString &filesetname, QTreeWidgetItem *); ~JobList(); virtual void PgSeltreeWidgetClicked(); diff --git a/bacula/src/qt-console/joblog/joblog.cpp b/bacula/src/qt-console/joblog/joblog.cpp index 25e4c6fe69..871edb3e8d 100644 --- a/bacula/src/qt-console/joblog/joblog.cpp +++ b/bacula/src/qt-console/joblog/joblog.cpp @@ -3,29 +3,17 @@ Copyright (C) 2007-2009 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ - + /* * Version $Id$ * @@ -33,7 +21,7 @@ * * Dirk Bartley, March 2007 * - */ + */ #include "bat.h" #include "joblog.h" @@ -81,7 +69,7 @@ void JobLog::populateText() if (mainWin->m_sqlDebug) { Pmsg1(000, "Log query cmd : %s\n", query.toUtf8().data()); } - + QStringList results; if (m_console->sql_cmd(query, results)) { @@ -91,14 +79,14 @@ void JobLog::populateText() "It is possible you may need to add \"catalog = all\" " "to the Messages resource for this job.\n"), QMessageBox::Ok); return; - } + } QString jobstr("JobId "); /* FIXME: should this be translated ? */ jobstr += m_jobId; QString htmlbuf("" + tr("Log records for job %1").arg(m_jobId) ); htmlbuf += "
" + curTime + "
"; - + /* Iterate through the lines of results. */ QString field; QStringList fieldlist; @@ -106,7 +94,7 @@ void JobLog::populateText() QString lastSvc; foreach (QString resultline, results) { fieldlist = resultline.split("\t"); - + if (fieldlist.size() < 2) continue; @@ -117,12 +105,12 @@ void JobLog::populateText() field = fieldlist[1].trimmed(); int colon = field.indexOf(":"); if (colon > 0) { - /* string is like : ..." - * we split at ':' then remove the jobId xxxx string (always the same) */ + /* string is like : ..." + * we split at ':' then remove the jobId xxxx string (always the same) */ QString curSvc(field.left(colon).replace(jobstr,"").trimmed()); if (curSvc == lastSvc && curTime == lastTime) { curTime.clear(); - curSvc.clear(); + curSvc.clear(); } else { lastTime = curTime; lastSvc = curSvc; @@ -151,7 +139,7 @@ void JobLog::populateText() } htmlbuf += ""; - + } /* foreach resultline */ htmlbuf += "
"; @@ -159,10 +147,10 @@ void JobLog::populateText() /* full text ready. Here a custom sheet is used to align columns */ QString logSheet("p,pre,.err {margin-left: 10px} .err {color:#FF0000;}"); textEdit->document()->setDefaultStyleSheet(logSheet); - textEdit->document()->setHtml(htmlbuf); + textEdit->document()->setHtml(htmlbuf); textEdit->moveCursor(QTextCursor::Start); } /* if results from query */ - + } - + diff --git a/bacula/src/qt-console/joblog/joblog.h b/bacula/src/qt-console/joblog/joblog.h index 9e5043e54b..e890497b23 100644 --- a/bacula/src/qt-console/joblog/joblog.h +++ b/bacula/src/qt-console/joblog/joblog.h @@ -3,29 +3,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2007 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Version $Id$ @@ -39,7 +27,7 @@ class JobLog : public Pages, public Ui::JobLogForm { - Q_OBJECT + Q_OBJECT public: JobLog(QString &jobId, QTreeWidgetItem *parentTreeWidgetItem); diff --git a/bacula/src/qt-console/jobs/jobs.cpp b/bacula/src/qt-console/jobs/jobs.cpp index 9cf4afee3b..2dbff1494b 100644 --- a/bacula/src/qt-console/jobs/jobs.cpp +++ b/bacula/src/qt-console/jobs/jobs.cpp @@ -1,39 +1,24 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2007-2009 Free Software Foundation Europe e.V. + Copyright (C) 2007-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ - + /* - * Version $Id$ - * * Jobs Class * * Dirk Bartley, March 2007 - * - */ + */ #include "bat.h" #include "jobs/jobs.h" @@ -66,7 +51,7 @@ Jobs::~Jobs() } /* - * The main meat of the class!! The function that querries the director and + * The main meat of the class!! The function that querries the director and * creates the widgets with appropriate values. */ void Jobs::populateTable() @@ -80,9 +65,9 @@ void Jobs::populateTable() m_checkcurwidget = false; tableWidget->clear(); m_checkcurwidget = true; - QStringList headerlist = (QStringList() << tr("Job Name") - << tr("Pool") << tr("Messages") << tr("Client") - << tr("Storage") << tr("Level") << tr("Type") + QStringList headerlist = (QStringList() << tr("Job Name") + << tr("Pool") << tr("Messages") << tr("Client") + << tr("Storage") << tr("Level") << tr("Type") << tr("FileSet") << tr("Catalog") << tr("Enabled") << tr("Where")); @@ -104,7 +89,7 @@ void Jobs::populateTable() if (m_console->get_job_defaults(job_defs)) { int col = 0; TableItemFormatter jobsItem(*tableWidget, row); - jobsItem.setTextFld(col++, jobName); + jobsItem.setTextFld(col++, jobName); jobsItem.setTextFld(col++, job_defs.pool_name); jobsItem.setTextFld(col++, job_defs.messages_name); jobsItem.setTextFld(col++, job_defs.client_name); @@ -121,7 +106,7 @@ void Jobs::populateTable() /* set default sorting */ tableWidget->sortByColumn(headerlist.indexOf(tr("Job Name")), Qt::AscendingOrder); tableWidget->setSortingEnabled(true); - + /* Resize rows and columns */ tableWidget->resizeColumnsToContents(); tableWidget->resizeRowsToContents(); @@ -180,8 +165,8 @@ void Jobs::tableItemChanged(QTableWidgetItem *currentwidgetitem, QTableWidgetIte } } -/* - * Setup a context menu +/* + * Setup a context menu * Made separate from populate so that it would not create context menu over and * over as the table is repopulated. */ @@ -267,7 +252,7 @@ void Jobs::listJobs() } /* - * Open a new job run page with the currently selected job + * Open a new job run page with the currently selected job * defaulted In */ void Jobs::runJob() diff --git a/bacula/src/qt-console/jobs/jobs.h b/bacula/src/qt-console/jobs/jobs.h index fb9de96585..0b77ac5e5b 100644 --- a/bacula/src/qt-console/jobs/jobs.h +++ b/bacula/src/qt-console/jobs/jobs.h @@ -3,29 +3,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2007-2007 Free Software Foundation Europe e.V. + Copyright (C) 2007-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Version $Id$ @@ -40,7 +28,7 @@ class Jobs : public Pages, public Ui::jobsForm { - Q_OBJECT + Q_OBJECT public: Jobs(); diff --git a/bacula/src/qt-console/label/label.cpp b/bacula/src/qt-console/label/label.cpp index 3afbae22bc..914e4276d8 100644 --- a/bacula/src/qt-console/label/label.cpp +++ b/bacula/src/qt-console/label/label.cpp @@ -3,35 +3,23 @@ Copyright (C) 2007-2011 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ - + /* * Label Page class * * Kern Sibbald, February MMVII * - */ + */ #include "bat.h" #include "label.h" @@ -93,7 +81,7 @@ void labelPage::okButtonPushed() scmd = QString("label volume=\"%1\" pool=\"%2\" storage=\"%3\" slot=%4\n") .arg(volumeName->text()) .arg(poolCombo->currentText()) - .arg(storageCombo->currentText()) + .arg(storageCombo->currentText()) .arg(slotSpin->value()); if (mainWin->m_commandDebug) { Pmsg1(000, "sending command : %s\n", scmd.toUtf8().data()); diff --git a/bacula/src/qt-console/label/label.h b/bacula/src/qt-console/label/label.h index 61d4dcd38f..6f5bd2b4b0 100644 --- a/bacula/src/qt-console/label/label.h +++ b/bacula/src/qt-console/label/label.h @@ -1,31 +1,19 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2007-2007 Free Software Foundation Europe e.V. + Copyright (C) 2007-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ -/* +/* * Kern Sibbald, February MMVII */ @@ -39,7 +27,7 @@ class labelPage : public Pages, public Ui::labelForm { - Q_OBJECT + Q_OBJECT public: labelPage(); diff --git a/bacula/src/qt-console/main.cpp b/bacula/src/qt-console/main.cpp index 7c1f55bfbe..870cabca0f 100644 --- a/bacula/src/qt-console/main.cpp +++ b/bacula/src/qt-console/main.cpp @@ -1,36 +1,24 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2007-2012 Free Software Foundation Europe e.V. + Copyright (C) 2007-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Main program for bat (qt-console) * - * Kern Sibbald, January MMVII + * Written by Kern Sibbald, January MMVII * - */ + */ #include "bat.h" @@ -50,7 +38,7 @@ MainWin *mainWin; QApplication *app; /* Forward referenced functions */ -void terminate_console(int sig); +void terminate_console(int sig); static void usage(); static int check_resources(); @@ -71,10 +59,11 @@ int main(int argc, char *argv[]) bool test_config = false; - app = new QApplication(argc, argv); + app = new QApplication(argc, argv); + app->setStyle(new QPlastiqueStyle()); app->setQuitOnLastWindowClosed(true); QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8")); - + QTranslator qtTranslator; qtTranslator.load(QString("qt_") + QLocale::system().name(),QLibraryInfo::location(QLibraryInfo::TranslationsPath)); app->installTranslator(&qtTranslator); @@ -236,7 +225,7 @@ static int check_resources() ok = false; } } - + if (numdir == 0) { Emsg1(M_FATAL, 0, _("No Director resource defined in %s\n" "Without that I don't how to speak to the Director :-(\n"), configfile); diff --git a/bacula/src/qt-console/mainwin.cpp b/bacula/src/qt-console/mainwin.cpp index ed9852e746..6425ca3c84 100644 --- a/bacula/src/qt-console/mainwin.cpp +++ b/bacula/src/qt-console/mainwin.cpp @@ -3,27 +3,15 @@ Copyright (C) 2007-2010 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* @@ -32,7 +20,7 @@ * * Kern Sibbald, January MMVII * - */ + */ #include "bat.h" #include "version.h" @@ -56,7 +44,7 @@ #include "status/dirstat.h" #include "util/fmtwidgetitem.h" -/* +/* * Daemon message callback */ void message_callback(int /* type */, char *msg) @@ -97,7 +85,7 @@ MainWin::MainWin(QWidget *parent) : QMainWindow(parent) foreach(Console *console, m_consoleHash) { console->connect_dir(); } - /* + /* * Note, the notifier is now a global flag, although each notifier * can be individually turned on and off at a socket level. Once * the notifier is turned off, we don't accept anything from anyone @@ -169,8 +157,8 @@ void MainWin::createPages() item->setForeground(0, redBrush); /* - * Create instances in alphabetic order of the rest - * of the classes that will by default exist under each Director. + * Create instances in alphabetic order of the rest + * of the classes that will by default exist under each Director. */ new bRestore(); new Clients(); @@ -317,7 +305,7 @@ void MainWin::disconnectSignals() */ void MainWin::waitEnter() { - if (m_waitState || m_isClosing) { + if (m_waitState || m_isClosing) { return; } m_waitState = true; @@ -363,7 +351,7 @@ void MainWin::disconnectConsoleSignals(Console *console) } -/* +/* * Two functions to respond to menu items to repop lists and execute reload and repopulate * the lists for jobs, clients, filesets .. .. */ @@ -378,8 +366,8 @@ void MainWin::reloadRepopLists() m_currentConsole->populateLists(false); } -/* - * Reimplementation of QWidget closeEvent virtual function +/* + * Reimplementation of QWidget closeEvent virtual function */ void MainWin::closeEvent(QCloseEvent *event) { @@ -425,7 +413,7 @@ void MainWin::writeSettings() } void MainWin::readSettings() -{ +{ QSettings settings("bacula.org", "bat"); settings.beginGroup("MainWin"); @@ -437,7 +425,7 @@ void MainWin::readSettings() /* * This subroutine is called with an item in the Page Selection window - * is clicked + * is clicked */ void MainWin::treeItemClicked(QTreeWidgetItem *item, int /*column*/) { @@ -490,7 +478,7 @@ void MainWin::treeItemChanged(QTreeWidgetItem *currentitem, QTreeWidgetItem *pre nextPage = NULL; nextConsole = NULL; } - + /* The Previous item */ /* this condition prevents a segfault. The first time there is no previousitem*/ @@ -518,7 +506,7 @@ void MainWin::treeItemChanged(QTreeWidgetItem *currentitem, QTreeWidgetItem *pre } /* process the current (next) item */ - + if ((nextPage) || (nextConsole)) { if (nextConsole != previousConsole) { /* make connections to the current console */ @@ -533,7 +521,7 @@ void MainWin::treeItemChanged(QTreeWidgetItem *currentitem, QTreeWidgetItem *pre /* set the value for the currently active console */ int stackindex = tabWidget->indexOf(nextPage); nextPage->firstUseDock(); - + /* Is this page currently on the stack or is it undocked */ if (stackindex >= 0) { /* put this page on the top of the stack */ @@ -556,22 +544,22 @@ void MainWin::treeItemChanged(QTreeWidgetItem *currentitem, QTreeWidgetItem *pre } } -void MainWin::labelButtonClicked() +void MainWin::labelButtonClicked() { new labelPage(); } -void MainWin::runButtonClicked() +void MainWin::runButtonClicked() { new runPage(""); } -void MainWin::estimateButtonClicked() +void MainWin::estimateButtonClicked() { new estimatePage(); } -void MainWin::browseButtonClicked() +void MainWin::browseButtonClicked() { // new restoreTree(); } @@ -593,7 +581,7 @@ void MainWin::statusPageButtonClicked() } } -void MainWin::restoreButtonClicked() +void MainWin::restoreButtonClicked() { new prerestorePage(); if (mainWin->m_miscDebug) Pmsg0(000, "in restoreButtonClicked after prerestorePage\n"); @@ -636,8 +624,9 @@ void MainWin::input_line() void MainWin::about() { QMessageBox::about(this, tr("About bat"), - tr("

bat %1 (%2), by Dirk H Bartley and Kern Sibbald

" + tr("

Bat %1 (%2), by Dirk H Bartley and Kern Sibbald

" "

Copyright © 2007-%3 Free Software Foundation Europe e.V." + "

Improved by Bacula Systems SA." "

The bat is an administrative console" " interface to the Director.").arg(VERSION).arg(BDATE).arg(BYEAR)); } @@ -684,14 +673,14 @@ void MainWin::undockWindowButton() } /* - * Function to respond to action on page selector context menu to toggle the + * Function to respond to action on page selector context menu to toggle the * dock status of the window associated with the page selectors current * tree widget item. */ void MainWin::toggleDockContextWindow() { QTreeWidgetItem *currentitem = treeWidget->currentItem(); - + /* Is this a page that has been inserted into the hash */ if (getFromHash(currentitem)) { Pages* page = getFromHash(currentitem); @@ -787,8 +776,8 @@ void MainWin::closePage(int item) if (getFromHash(currentitem)) { page = getFromHash(currentitem); } - } - + } + if (page) { if (page->isCloseable()) { page->closeStackPage(); @@ -978,7 +967,7 @@ void MainWin::readPreferences() settings.beginGroup("Misc"); m_longList = settings.value("longList", false).toBool(); ItemFormatterBase::setBytesConversion( - (ItemFormatterBase::BYTES_CONVERSION) settings.value("byteConvert", + (ItemFormatterBase::BYTES_CONVERSION) settings.value("byteConvert", ItemFormatterBase::BYTES_CONVERSION_IEC).toInt()); m_openPlot = settings.value("openplot", false).toBool(); m_openBrowser = settings.value("openbrowser", false).toBool(); diff --git a/bacula/src/qt-console/mainwin.h b/bacula/src/qt-console/mainwin.h index b748da0baf..f29464a55a 100644 --- a/bacula/src/qt-console/mainwin.h +++ b/bacula/src/qt-console/mainwin.h @@ -1,31 +1,19 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2007-2009 Free Software Foundation Europe e.V. + Copyright (C) 2007-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ -/* +/* * Version $Id$ * * qt-console main window class definition. @@ -43,7 +31,7 @@ class Console; class Pages; -class MainWin : public QMainWindow, public Ui::MainForm +class MainWin : public QMainWindow, public Ui::MainForm { Q_OBJECT @@ -142,8 +130,8 @@ protected: private: void connectConsole(); void createPages(); - void connectSignals(); - void disconnectSignals(); + void connectSignals(); + void disconnectSignals(); void connectConsoleSignals(); void disconnectConsoleSignals(Console *console); diff --git a/bacula/src/qt-console/mediaedit/mediaedit.cpp b/bacula/src/qt-console/mediaedit/mediaedit.cpp index 3e3b6d03bc..12b1cfa1b7 100644 --- a/bacula/src/qt-console/mediaedit/mediaedit.cpp +++ b/bacula/src/qt-console/mediaedit/mediaedit.cpp @@ -3,34 +3,22 @@ Copyright (C) 2007-2009 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Version $Id$ * * Dirk Bartley, March 2007 */ - + #include "bat.h" #include #include @@ -38,9 +26,9 @@ #include "mediaedit.h" /* - * A constructor + * A constructor */ -MediaEdit::MediaEdit(QTreeWidgetItem *parentWidget, QString &mediaId) +MediaEdit::MediaEdit(QTreeWidgetItem *parentWidget, QString &mediaId) : Pages() { setupUi(this); @@ -67,7 +55,7 @@ MediaEdit::MediaEdit(QTreeWidgetItem *parentWidget, QString &mediaId) poolCombo->addItems(m_console->pool_list); /* The media's Status */ - QStringList statusList = (QStringList() << "Full" << "Used" << "Append" + QStringList statusList = (QStringList() << "Full" << "Used" << "Append" << "Error" << "Purged" << "Recycle" << "Read-Only" << "Cleaning"); statusCombo->addItems(statusList); @@ -302,7 +290,7 @@ void MediaEdit::useDurationChanged() void MediaEdit::setSpins(int value) { int years, months, days, hours, minutes, seconds, left; - + years = abs(value / 31536000); left = value - years * 31536000; months = abs(left / 2592000); @@ -376,7 +364,7 @@ void MediaEdit::durationChanged() connectSpins(); if (retentionRadio->isChecked()) { int retention; - retention = secondsSpin->value() + minutesSpin->value() * 60 + + retention = secondsSpin->value() + minutesSpin->value() * 60 + hoursSpin->value() * 3600 + daysSpin->value() * 86400 + monthsSpin->value() * 2592000 + yearsSpin->value() * 31536000; @@ -386,7 +374,7 @@ void MediaEdit::durationChanged() } if (useDurationRadio->isChecked()) { int useDuration; - useDuration = secondsSpin->value() + minutesSpin->value() * 60 + + useDuration = secondsSpin->value() + minutesSpin->value() * 60 + hoursSpin->value() * 3600 + daysSpin->value() * 86400 + monthsSpin->value() * 2592000 + yearsSpin->value() * 31536000; diff --git a/bacula/src/qt-console/mediaedit/mediaedit.h b/bacula/src/qt-console/mediaedit/mediaedit.h index 843cc1c5a2..252fc44cd0 100644 --- a/bacula/src/qt-console/mediaedit/mediaedit.h +++ b/bacula/src/qt-console/mediaedit/mediaedit.h @@ -3,29 +3,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2007-2007 Free Software Foundation Europe e.V. + Copyright (C) 2007-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Version $Id$ @@ -40,7 +28,7 @@ class MediaEdit : public Pages, public Ui::mediaEditForm { - Q_OBJECT + Q_OBJECT public: MediaEdit(QTreeWidgetItem *parentWidget, QString &mediaId); diff --git a/bacula/src/qt-console/mediainfo/mediainfo.cpp b/bacula/src/qt-console/mediainfo/mediainfo.cpp index f9ba661f15..040192ad78 100644 --- a/bacula/src/qt-console/mediainfo/mediainfo.cpp +++ b/bacula/src/qt-console/mediainfo/mediainfo.cpp @@ -3,29 +3,17 @@ Copyright (C) 2007-2009 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ - + #include "bat.h" #include #include @@ -38,9 +26,9 @@ #include "job/job.h" /* - * A constructor + * A constructor */ -MediaInfo::MediaInfo(QTreeWidgetItem *parentWidget, QString &mediaName) +MediaInfo::MediaInfo(QTreeWidgetItem *parentWidget, QString &mediaName) : Pages() { setupUi(this); @@ -53,7 +41,7 @@ MediaInfo::MediaInfo(QTreeWidgetItem *parentWidget, QString &mediaName) connect(pbDelete, SIGNAL(clicked()), this, SLOT(deleteVol())); connect(pbEdit, SIGNAL(clicked()), this, SLOT(editVol())); connect(tableJob, SIGNAL(itemDoubleClicked(QTableWidgetItem*)), this, SLOT(showInfoForJob(QTableWidgetItem *))); - + dockPage(); setCurrent(); populateForm(); @@ -133,7 +121,7 @@ void MediaInfo::populateForm() QString stat, LastWritten; struct tm tm; char buf[256]; - QString query = + QString query = "SELECT MediaId, VolumeName, Pool.Name, MediaType, FirstWritten," "LastWritten, VolMounts, VolBytes, Media.Enabled," "Location.Location, VolStatus, RecyclePool.Name, Media.Recycle, " @@ -171,7 +159,7 @@ void MediaInfo::populateForm() label_Location->setText(fld.next()); label_VolStatus->setText(fld.next()); label_RecyclePool->setText(fld.next()); - chkbox_Recycle->setCheckState(fld.next().toInt()?Qt::Checked:Qt::Unchecked); + chkbox_Recycle->setCheckState(fld.next().toInt()?Qt::Checked:Qt::Unchecked); edit_utime(fld.next().toULongLong(), buf, sizeof(buf)); label_VolReadTime->setText(QString(buf)); @@ -193,7 +181,7 @@ void MediaInfo::populateForm() t = str_to_utime(LastWritten.toAscii().data()); t = t + stat.toULongLong(); ttime = t; - localtime_r(&ttime, &tm); + localtime_r(&ttime, &tm); strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", &tm); label_Expire->setText(QString(buf)); } @@ -205,11 +193,11 @@ void MediaInfo::populateForm() // jobstatus_to_ascii_gui(stat[0].toAscii(), buf, sizeof(buf)); // stat = buf; -// +// } } - query = + query = "SELECT DISTINCT JobId, Name, StartTime, Type, Level, JobFiles," "JobBytes,JobStatus " "FROM Job JOIN JobMedia USING (JobId) JOIN Media USING (MediaId) " @@ -231,7 +219,7 @@ void MediaInfo::populateForm() TableItemFormatter jobitem(*tableJob, row); /* JobId */ - jobitem.setNumericFld(index++, fld.next()); + jobitem.setNumericFld(index++, fld.next()); /* job name */ jobitem.setTextFld(index++, fld.next()); diff --git a/bacula/src/qt-console/mediainfo/mediainfo.h b/bacula/src/qt-console/mediainfo/mediainfo.h index f9d8e88b23..c9194c2722 100644 --- a/bacula/src/qt-console/mediainfo/mediainfo.h +++ b/bacula/src/qt-console/mediainfo/mediainfo.h @@ -3,29 +3,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2007-2009 Free Software Foundation Europe e.V. + Copyright (C) 2007-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Version $Id$ @@ -39,7 +27,7 @@ class MediaInfo : public Pages, public Ui::mediaInfoForm { - Q_OBJECT + Q_OBJECT public: MediaInfo(QTreeWidgetItem *parentWidget, QString &mediaId); diff --git a/bacula/src/qt-console/medialist/medialist.cpp b/bacula/src/qt-console/medialist/medialist.cpp index 670241f381..262784073a 100644 --- a/bacula/src/qt-console/medialist/medialist.cpp +++ b/bacula/src/qt-console/medialist/medialist.cpp @@ -3,35 +3,23 @@ Copyright (C) 2007-2010 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ - + /* * MediaList Class * * Dirk Bartley, March 2007 * - */ + */ #include "bat.h" #include @@ -69,7 +57,7 @@ MediaList::~MediaList() } /* - * The main meat of the class!! The function that querries the director and + * The main meat of the class!! The function that querries the director and * creates the widgets with appropriate values. */ void MediaList::populateTree() @@ -98,7 +86,7 @@ void MediaList::populateTree() m_topItem->setText(0, tr("Pools")); m_topItem->setData(0, Qt::UserRole, 0); m_topItem->setExpanded(true); - + mp_treeWidget->setHeaderLabels(headerlist); QSettings settings(m_console->m_dir->name(), "bat"); @@ -172,15 +160,15 @@ void MediaList::populateTree() int index = 0; TreeItemFormatter mediaitem(*pooltreeitem, 2); - + /* Iterate through fields in the record */ QStringListIterator fld(fieldlist); /* volname */ - mediaitem.setTextFld(index++, fld.next()); + mediaitem.setTextFld(index++, fld.next()); /* id */ - mediaitem.setNumericFld(index++, fld.next()); + mediaitem.setNumericFld(index++, fld.next()); /* status */ mediaitem.setVolStatusFld(index++, fld.next()); @@ -192,24 +180,24 @@ void MediaList::populateTree() mediaitem.setBytesFld(index++, fld.next()); /* files */ - mediaitem.setNumericFld(index++, fld.next()); + mediaitem.setNumericFld(index++, fld.next()); /* jobs */ - mediaitem.setNumericFld(index++, fld.next()); + mediaitem.setNumericFld(index++, fld.next()); /* retention */ mediaitem.setDurationFld(index++, fld.next()); /* media type */ - mediaitem.setTextFld(index++, fld.next()); + mediaitem.setTextFld(index++, fld.next()); /* inchanger + slot */ int inchanger = fld.next().toInt(); if (inchanger) { - mediaitem.setNumericFld(index++, fld.next()); + mediaitem.setNumericFld(index++, fld.next()); } else { /* volume not in changer, show blank slot */ - mediaitem.setNumericFld(index++, ""); + mediaitem.setNumericFld(index++, ""); fld.next(); } @@ -217,10 +205,10 @@ void MediaList::populateTree() mediaitem.setDurationFld(index++, fld.next()); /* max jobs */ - mediaitem.setNumericFld(index++, fld.next()); + mediaitem.setNumericFld(index++, fld.next()); /* max files */ - mediaitem.setNumericFld(index++, fld.next()); + mediaitem.setNumericFld(index++, fld.next()); /* max bytes */ mediaitem.setBytesFld(index++, fld.next()); @@ -229,10 +217,10 @@ void MediaList::populateTree() mediaitem.setBoolFld(index++, fld.next()); /* last written */ - mediaitem.setTextFld(index++, fld.next()); + mediaitem.setTextFld(index++, fld.next()); /* first written */ - mediaitem.setTextFld(index++, fld.next()); + mediaitem.setTextFld(index++, fld.next()); /* read time */ mediaitem.setDurationFld(index++, fld.next()); @@ -241,10 +229,10 @@ void MediaList::populateTree() mediaitem.setDurationFld(index++, fld.next()); /* Recycle Count */ - mediaitem.setNumericFld(index++, fld.next()); + mediaitem.setNumericFld(index++, fld.next()); /* recycle pool */ - mediaitem.setTextFld(index++, fld.next()); + mediaitem.setTextFld(index++, fld.next()); } /* foreach resultline */ counter += 1; @@ -334,8 +322,8 @@ void MediaList::treeItemChanged(QTreeWidgetItem *currentwidgetitem, QTreeWidgetI } } -/* - * Setup a context menu +/* + * Setup a context menu * Made separate from populate so that it would not create context menu over and * over as the tree is repopulated. */ diff --git a/bacula/src/qt-console/medialist/medialist.h b/bacula/src/qt-console/medialist/medialist.h index 47bf0669ed..3ce2e0cec1 100644 --- a/bacula/src/qt-console/medialist/medialist.h +++ b/bacula/src/qt-console/medialist/medialist.h @@ -3,29 +3,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2007-2010 Free Software Foundation Europe e.V. + Copyright (C) 2007-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Dirk Bartley, March 2007 @@ -38,7 +26,7 @@ class MediaList : public Pages, public Ui::MediaListForm { - Q_OBJECT + Q_OBJECT public: MediaList(); diff --git a/bacula/src/qt-console/medialist/mediaview.cpp b/bacula/src/qt-console/medialist/mediaview.cpp index 7a44e15652..1475297e4a 100644 --- a/bacula/src/qt-console/medialist/mediaview.cpp +++ b/bacula/src/qt-console/medialist/mediaview.cpp @@ -3,29 +3,17 @@ Copyright (C) 2007-2010 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ - + #include "bat.h" #include #include @@ -50,7 +38,7 @@ MediaView::MediaView() : Pages() connect(m_pbPurge, SIGNAL(pressed()), this, SLOT(purgePushed())); connect(m_pbDelete, SIGNAL(pressed()), this, SLOT(deletePushed())); connect(m_pbPrune, SIGNAL(pressed()), this, SLOT(prunePushed())); - connect(m_tableMedia, SIGNAL(itemDoubleClicked(QTableWidgetItem*)), + connect(m_tableMedia, SIGNAL(itemDoubleClicked(QTableWidgetItem*)), this, SLOT(showInfoForMedia(QTableWidgetItem *))); /* mp_treeWidget, Storage Tree Tree Widget inherited from ui_medialist.h */ @@ -82,7 +70,7 @@ void MediaView::editPushed() QStringList sel; QString cmd; getSelection(sel); - + for(int i=0; igetFromHash(this), cmd); @@ -205,7 +193,7 @@ void MediaView::populateForm() m_cbLocation->addItems(m_console->location_list); } -/* +/* * If chkExpired button is checked, we can remove all non Expired * entries */ @@ -237,7 +225,7 @@ void MediaView::filterExipired(QStringList &list) } /* - * The main meat of the class!! The function that querries the director and + * The main meat of the class!! The function that querries the director and * creates the widgets with appropriate values. */ void MediaView::populateTable() @@ -260,7 +248,7 @@ void MediaView::populateTable() if (m_cbPool->currentText() != "") { cmd = " Pool.Name = '" + m_cbPool->currentText() + "'"; where.append(cmd); - } + } if (m_cbStatus->currentText() != "") { cmd = " Media.VolStatus = '" + m_cbStatus->currentText() + "'"; @@ -305,22 +293,22 @@ void MediaView::populateTable() if (m_console->sql_cmd(query, results)) { foreach (resultline, results) { fieldlist = resultline.split("\t"); - if (fieldlist.at(1).toInt() >= 1) { + if (fieldlist.at(1).toInt() >= 1) { // MediaType - hash_size[fieldlist.at(2)] - = fieldlist.at(0).toFloat(); + hash_size[fieldlist.at(2)] + = fieldlist.at(0).toFloat(); } } - } - + } + m_tableMedia->clearContents(); - query = + query = "SELECT VolumeName, InChanger, " "Slot, MediaType, VolStatus, VolBytes, Pool.Name, " "LastWritten, Media.VolRetention " "FROM Media JOIN Pool USING (PoolId) " "LEFT JOIN Location ON (Media.LocationId=Location.LocationId) " - + cmd + + + cmd + " ORDER BY VolumeName LIMIT " + m_sbLimit->cleanText(); m_tableMedia->sortByColumn(0, Qt::AscendingOrder); @@ -345,8 +333,8 @@ void MediaView::populateTable() TableItemFormatter mediaitem(*m_tableMedia, row); /* VolumeName */ - mediaitem.setTextFld(index++, fld.next()); - + mediaitem.setTextFld(index++, fld.next()); + /* Online */ mediaitem.setInChanger(index++, fld.next()); @@ -384,10 +372,10 @@ void MediaView::populateTable() t = str_to_utime(LastWritten.toAscii().data()); t = t + stat.toULongLong(); ttime = t; - localtime_r(&ttime, &tm); + localtime_r(&ttime, &tm); strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", &tm); } - + /* LastWritten */ mediaitem.setTextFld(index++, LastWritten); @@ -439,7 +427,7 @@ void MediaView::currentStackItem() // setConsoleCurrent(); // new relabelDialog(m_console, m_currentVolumeName); // } -// +// // /* // * Called from the signal of the context sensitive menu to purge! // */ @@ -449,14 +437,14 @@ void MediaView::currentStackItem() // consoleCommand(cmd); // populateTable(); // } -// +// // void MediaView::allVolumes() // { // QString cmd = "update volume allfrompools"; // consoleCommand(cmd); // populateTable(); // } -// +// // /* // * Called from the signal of the context sensitive menu to purge! // */ @@ -470,4 +458,4 @@ void MediaView::currentStackItem() // consoleCommand(cmd); // populateTable(); // } -// +// diff --git a/bacula/src/qt-console/medialist/mediaview.h b/bacula/src/qt-console/medialist/mediaview.h index 778cb26cf9..d11d271ace 100644 --- a/bacula/src/qt-console/medialist/mediaview.h +++ b/bacula/src/qt-console/medialist/mediaview.h @@ -3,29 +3,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2007-2009 Free Software Foundation Europe e.V. + Copyright (C) 2007-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ #include @@ -35,7 +23,7 @@ class MediaView : public Pages, public Ui::MediaViewForm { - Q_OBJECT + Q_OBJECT public: MediaView(); diff --git a/bacula/src/qt-console/mount/mount.cpp b/bacula/src/qt-console/mount/mount.cpp index 3324a583cc..188004abd1 100644 --- a/bacula/src/qt-console/mount/mount.cpp +++ b/bacula/src/qt-console/mount/mount.cpp @@ -3,42 +3,30 @@ Copyright (C) 2007-2007 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ - + /* * Label Dialog class * * Kern Sibbald, February MMVII * - */ + */ #include "bat.h" #include "mount/mount.h" #include /* - * A constructor + * A constructor */ mountDialog::mountDialog(Console *console, QString &storageName) : QDialog() { diff --git a/bacula/src/qt-console/mount/mount.h b/bacula/src/qt-console/mount/mount.h index 0cea8f4c05..157c851d8d 100644 --- a/bacula/src/qt-console/mount/mount.h +++ b/bacula/src/qt-console/mount/mount.h @@ -1,31 +1,19 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2007-2007 Free Software Foundation Europe e.V. + Copyright (C) 2007-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ -/* +/* * Kern Sibbald, February MMVII */ @@ -38,7 +26,7 @@ class mountDialog : public QDialog, public Ui::mountForm { - Q_OBJECT + Q_OBJECT public: mountDialog(Console *console, QString &storage); diff --git a/bacula/src/qt-console/pages.cpp b/bacula/src/qt-console/pages.cpp index b22e6bf71a..0a7c70c903 100644 --- a/bacula/src/qt-console/pages.cpp +++ b/bacula/src/qt-console/pages.cpp @@ -3,27 +3,15 @@ Copyright (C) 2007-2011 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Dirk Bartley, March 2007 @@ -33,7 +21,7 @@ #include "pages.h" /* A global function */ -bool isWin32Path(QString &fullPath) +bool isWin32Path(QString &fullPath) { if (fullPath.size()<2) { return false; @@ -133,8 +121,8 @@ void Pages::undockPage() } /* - * This function is intended to be called with the subclasses. When it is - * called the specific sublclass does not have to be known to Pages. When it + * This function is intended to be called with the subclasses. When it is + * called the specific sublclass does not have to be known to Pages. When it * is called this function will change the page from it's current state of being * docked or undocked and change it to the other. */ @@ -149,7 +137,7 @@ void Pages::togglePageDocking() } /* - * This function is because I wanted for some reason to keep it protected but still + * This function is because I wanted for some reason to keep it protected but still * give any subclasses the ability to find out if it is currently stacked or not. */ bool Pages::isDocked() @@ -206,8 +194,8 @@ void Pages::closeEvent(QCloseEvent* event) /* this fixes my woes of getting the widget to show up on top when closed */ event->ignore(); - /* Set the current tree widget item in the Page Selector window to the item - * which represents "this" + /* Set the current tree widget item in the Page Selector window to the item + * which represents "this" * Which will also bring "this" to the top of the stacked widget */ setCurrent(); } @@ -277,7 +265,7 @@ void Pages::pgInitialize(const QString &tname, QTreeWidgetItem *parentTreeWidget } QTreeWidgetItem *item = new QTreeWidgetItem(parentTreeWidgetItem); - QString name; + QString name; treeWidgetName(name); item->setText(0, name); mainWin->hashInsert(item, this); @@ -379,7 +367,7 @@ void Pages::setCurrent() /* * Function to set the text of the toggle dock context menu when page and - * widget item are NOT known. + * widget item are NOT known. */ void Pages::setContextMenuDockText() { @@ -390,7 +378,7 @@ void Pages::setContextMenuDockText() } else { docktext = tr("ReDock %1 Window").arg(item->text(0)); } - + mainWin->actionToggleDock->setText(docktext); setTreeWidgetItemDockColor(); } diff --git a/bacula/src/qt-console/pages.h b/bacula/src/qt-console/pages.h index 6dc2d478f6..bc460ca740 100644 --- a/bacula/src/qt-console/pages.h +++ b/bacula/src/qt-console/pages.h @@ -3,29 +3,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2007-2011 Free Software Foundation Europe e.V. + Copyright (C) 2007-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Dirk Bartley, March 2007 @@ -43,7 +31,7 @@ * of or into the stack. It also provides virtual functions called * from in mainwin so that subclasses can contain functions to allow them * to populate the screens at the time of first viewing, (when selected) as - * opposed to the first creation of the console connection. The + * opposed to the first creation of the console connection. The * console is not connected until after the page selector tree has been * populated. */ diff --git a/bacula/src/qt-console/relabel/relabel.cpp b/bacula/src/qt-console/relabel/relabel.cpp index b089c8f69e..fb967f6250 100644 --- a/bacula/src/qt-console/relabel/relabel.cpp +++ b/bacula/src/qt-console/relabel/relabel.cpp @@ -3,35 +3,23 @@ Copyright (C) 2007-2009 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ - + /* * Label Dialog class * * Kern Sibbald, February MMVII * - */ + */ #include "bat.h" #include "relabel.h" @@ -93,7 +81,7 @@ void relabelDialog::accept() return; } if (m_fromVolume == volumeName->text().toUtf8()) { - QMessageBox::warning(this, tr("New name must be different"), + QMessageBox::warning(this, tr("New name must be different"), tr("New name must be different"), QMessageBox::Ok, QMessageBox::Ok); return; diff --git a/bacula/src/qt-console/relabel/relabel.h b/bacula/src/qt-console/relabel/relabel.h index aebf961f18..c4aa63640b 100644 --- a/bacula/src/qt-console/relabel/relabel.h +++ b/bacula/src/qt-console/relabel/relabel.h @@ -1,31 +1,19 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2007-2007 Free Software Foundation Europe e.V. + Copyright (C) 2007-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ -/* +/* * Kern Sibbald, February MMVII */ @@ -38,7 +26,7 @@ class relabelDialog : public QDialog, public Ui::relabelForm { - Q_OBJECT + Q_OBJECT public: relabelDialog(Console *console, QString &fromVolume); diff --git a/bacula/src/qt-console/restore/brestore.cpp b/bacula/src/qt-console/restore/brestore.cpp index f397b4ee2d..980bd8e952 100644 --- a/bacula/src/qt-console/restore/brestore.cpp +++ b/bacula/src/qt-console/restore/brestore.cpp @@ -3,36 +3,24 @@ Copyright (C) 2007-2011 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ - + /* * * bRestore Class (Eric's brestore) * * Kern Sibbald, January MMVII * - */ + */ #include "bat.h" #include "restore.h" @@ -195,7 +183,7 @@ void bRestore::displayFiles(int64_t pathid, QString path) LocationEntry->setText(m_path); QString offset = QString().setNum(Offset1Spin->value()); QString limit=QString().setNum(Offset2Spin->value() - Offset1Spin->value()); - QString q = ".bvfs_lsdir jobid=" + m_jobids + arg + QString q = ".bvfs_lsdir jobid=" + m_jobids + arg + " limit=" + limit + " offset=" + offset ; if (mainWin->m_miscDebug) qDebug() << q; if (m_console->dir_cmd(q, results)) { @@ -232,7 +220,7 @@ void bRestore::displayFiles(int64_t pathid, QString path) fieldlist = resultline.split("\t"); TableItemFormatter item(*FileList, row++); item.setTextFld(col++, fieldlist.at(5)); // name - decode_stat(fieldlist.at(4).toLocal8Bit().data(), + decode_stat(fieldlist.at(4).toLocal8Bit().data(), &statp, sizeof(statp), &LinkFI); item.setBytesFld(col++, QString().setNum(statp.st_size)); item.setDateFld(col++, statp.st_mtime); @@ -257,7 +245,7 @@ void bRestore::PgSeltreeWidgetClicked() } // Display all versions of a file for this client -void bRestore::displayFileVersion(QString pathid, QString fnid, +void bRestore::displayFileVersion(QString pathid, QString fnid, QString client, QString filename) { int row=0; @@ -265,10 +253,10 @@ void bRestore::displayFileVersion(QString pathid, QString fnid, int32_t LinkFI; Freeze frz_rev(*FileRevisions); /* disable updating*/ FileRevisions->clearContents(); - + QString q = ".bvfs_versions jobid=" + m_jobids + - " pathid=" + pathid + - " fnid=" + fnid + + " pathid=" + pathid + + " fnid=" + fnid + " client=" + client; if (VersionsChk->checkState() == Qt::Checked) { @@ -289,7 +277,7 @@ void bRestore::displayFileVersion(QString pathid, QString fnid, item.setInChanger(col++, fieldlist.at(7)); // inchanger item.setTextFld(col++, fieldlist.at(6)); // Volume item.setNumericFld(col++, fieldlist.at(3)); // JobId - decode_stat(fieldlist.at(4).toLocal8Bit().data(), + decode_stat(fieldlist.at(4).toLocal8Bit().data(), &statp, sizeof(statp), &LinkFI); item.setBytesFld(col++, QString().setNum(statp.st_size)); // size item.setDateFld(col++, statp.st_mtime); // date @@ -355,9 +343,9 @@ void bRestore::setupPage() ClientList->addItems(m_console->client_list); connect(ClientList, SIGNAL(currentIndexChanged(int)), this, SLOT(setClient())); connect(JobList, SIGNAL(currentIndexChanged(int)), this, SLOT(setJob())); - connect(FileList, SIGNAL(itemClicked(QTableWidgetItem*)), + connect(FileList, SIGNAL(itemClicked(QTableWidgetItem*)), this, SLOT(clearVersions(QTableWidgetItem *))); - connect(FileList, SIGNAL(itemDoubleClicked(QTableWidgetItem*)), + connect(FileList, SIGNAL(itemDoubleClicked(QTableWidgetItem*)), this, SLOT(showInfoForFile(QTableWidgetItem *))); connect(LocationBp, SIGNAL(pressed()), this, SLOT(applyLocation())); connect(MergeChk, SIGNAL(clicked()), this, SLOT(setJob())); @@ -462,7 +450,7 @@ void bRestoreTable::dropEvent(QDropEvent *event) item.setFileType(0, "folder"); } item.setTextFld(col++, fields.at(5)); // filename - decode_stat(fields.at(4).toLocal8Bit().data(), + decode_stat(fields.at(4).toLocal8Bit().data(), &statp, sizeof(statp), &LinkFI); item.setBytesFld(col++, QString().setNum(statp.st_size)); // size item.setDateFld(col++, statp.st_mtime); // date @@ -546,7 +534,7 @@ bRunRestore::bRunRestore(bRestore *parent) computeVolumeList(); } -void bRestore::get_info_from_selection(QStringList &fileids, +void bRestore::get_info_from_selection(QStringList &fileids, QStringList &jobids, QStringList &dirids, QStringList &findexes) @@ -560,7 +548,7 @@ void bRestore::get_info_from_selection(QStringList &fileids, if (lst.at(1) != "0") { // skip path fileids << lst.at(2); jobids << lst.at(3); - decode_stat(lst.at(4).toLocal8Bit().data(), + decode_stat(lst.at(4).toLocal8Bit().data(), &statp, sizeof(statp), &LinkFI); if (LinkFI) { findexes << lst.at(3) + "," + QString().setNum(LinkFI); @@ -588,7 +576,7 @@ void bRunRestore::computeVolumeList() QString q = " SELECT DISTINCT VolumeName, Enabled, InChanger " " FROM File, " - " ( " // -- Get all media from this job + " ( " // -- Get all media from this job " SELECT MIN(FirstIndex) AS FirstIndex, MAX(LastIndex) AS LastIndex, " " VolumeName, Enabled, Inchanger " " FROM JobMedia JOIN Media USING (MediaId) " @@ -605,7 +593,7 @@ void bRunRestore::computeVolumeList() TableMedia->setRowCount(results.size()); /* Iterate through the record returned from the query */ foreach (QString resultline, results) { - // 0 1 2 + // 0 1 2 //volname, enabled, inchanger fieldlist = resultline.split("\t"); int col=0; @@ -683,7 +671,7 @@ int64_t bRunRestore::runRestore(QString tablename) q += " file=\"?" + tablename + "\""; q += " when=\"" + WhenEditor->dateTime().toString("yyyy-MM-dd hh:mm:ss") + "\""; q += " done yes"; - + if (mainWin->m_miscDebug) qDebug() << q; QStringList results; if (brestore->console()->dir_cmd(q, results)) { @@ -719,5 +707,5 @@ void bRunRestore::computeRestore() q = ".bvfs_cleanup path=b2123"; brestore->console()->dir_cmd(q, results); } - } + } } diff --git a/bacula/src/qt-console/restore/prerestore.cpp b/bacula/src/qt-console/restore/prerestore.cpp index 8a89188508..50cf3e73a5 100644 --- a/bacula/src/qt-console/restore/prerestore.cpp +++ b/bacula/src/qt-console/restore/prerestore.cpp @@ -3,35 +3,23 @@ Copyright (C) 2007-2010 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ - + /* * preRestore -> dialog put up to determine the restore type * * Kern Sibbald, February MMVII * - */ + */ #include "bat.h" #include "restore.h" @@ -167,10 +155,10 @@ void prerestorePage::okButtonPushed() if (mainWin->m_commandDebug) { Pmsg1(000, "preRestore command \'%s\'\n", cmd.toUtf8().data()); } - /* + /* * Send off command that looks something like: * - * restore fileset="Full Set" client="timmy-fd" + * restore fileset="Full Set" client="timmy-fd" * storage="File" current select */ m_console->write_dir(m_conn, cmd.toUtf8().data()); @@ -359,7 +347,7 @@ void prerestorePage::jobRadioClicked(bool checked) selectJobIdsRadio->setChecked(true); } if (mainWin->m_miscDebug) { - Pmsg2(000, "jobRadio=%d jobidsRadio=%d\n", selectJobRadio->isChecked(), + Pmsg2(000, "jobRadio=%d jobidsRadio=%d\n", selectJobRadio->isChecked(), selectJobIdsRadio->isChecked()); } } @@ -392,7 +380,7 @@ void prerestorePage::jobidsRadioClicked(bool checked) selectJobIdsRadio->setChecked(false); } if (mainWin->m_miscDebug) { - Pmsg2(000, "jobRadio=%d jobidsRadio=%d\n", selectJobRadio->isChecked(), + Pmsg2(000, "jobRadio=%d jobidsRadio=%d\n", selectJobRadio->isChecked(), selectJobIdsRadio->isChecked()); } } diff --git a/bacula/src/qt-console/restore/restore.cpp b/bacula/src/qt-console/restore/restore.cpp index 7bf915d8bb..caeefee950 100644 --- a/bacula/src/qt-console/restore/restore.cpp +++ b/bacula/src/qt-console/restore/restore.cpp @@ -3,35 +3,23 @@ Copyright (C) 2007-2010 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ - + /* - * Restore Class + * Restore Class * * Kern Sibbald, February MMVII * - */ + */ #include "bat.h" #include "restore.h" @@ -52,7 +40,7 @@ restorePage::restorePage(int conn) : Pages() m_console->notify(m_conn, false); /* this should already be off */ - connect(fileWidget, SIGNAL(itemDoubleClicked(QTreeWidgetItem*, int)), + connect(fileWidget, SIGNAL(itemDoubleClicked(QTreeWidgetItem*, int)), this, SLOT(fileDoubleClicked(QTreeWidgetItem *, int))); connect(directoryWidget, SIGNAL( currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)), @@ -72,14 +60,14 @@ restorePage::restorePage(int conn) : Pages() setFont(m_console->get_font()); m_console->displayToPrompt(m_conn); - titles << tr("Mark") << tr("File") << tr("Mode") << tr("User") + titles << tr("Mark") << tr("File") << tr("Mode") << tr("User") << tr("Group") << tr("Size") << tr("Date"); fileWidget->setHeaderLabels(titles); get_cwd(); readSettings(); - /* wait was entered from pre-restore + /* wait was entered from pre-restore * will exit, but will reenter in fillDirectory */ mainWin->waitExit(); fillDirectory(); @@ -221,11 +209,11 @@ void restorePage::addDirectory(QString &newdirr) directoryWidget->setCurrentItem(NULL); } } else { - // Unix add / first if not already there + // Unix add / first if not already there if (m_dirPaths.empty()) { QTreeWidgetItem *item = new QTreeWidgetItem(directoryWidget); item->setIcon(0,QIcon(QString::fromUtf8(":images/folder.png"))); - + QString text("/"); item->setText(0, text.toUtf8().data()); if (mainWin->m_miscDebug) { @@ -235,7 +223,7 @@ void restorePage::addDirectory(QString &newdirr) m_dirTreeItems.insert(item, text); } } - + /* Does it already exist ?? */ if (!m_dirPaths.contains(fullpath)) { QTreeWidgetItem *item = NULL; @@ -337,8 +325,8 @@ void restorePage::fileDoubleClicked(QTreeWidgetItem *item, int column) m_console->displayToPrompt(m_conn); mainWin->waitExit(); return; - } - /* + } + /* * Double clicking other than column 0 means to decend into * the directory -- or nothing if it is not a directory. */ @@ -434,7 +422,7 @@ void restorePage::unmarkButtonPushed() } /* - * Change current working directory + * Change current working directory */ bool restorePage::cwd(const char *dir) { @@ -461,7 +449,7 @@ bool restorePage::cwd(const char *dir) } /* - * Return cwd when in tree restore mode + * Return cwd when in tree restore mode */ char *restorePage::get_cwd() { @@ -476,7 +464,7 @@ char *restorePage::get_cwd() Dmsg1(dbglvl, "Something went wrong read stat=%d\n", stat); QMessageBox::critical(this, "Error", tr(".pwd command failed"), QMessageBox::Ok); } - m_console->discardToPrompt(m_conn); + m_console->discardToPrompt(m_conn); mainWin->waitExit(); return m_cwd.toUtf8().data(); } @@ -500,7 +488,7 @@ void restorePage::readSettings() m_splitText = "splitterSizes_2"; QSettings settings(m_console->m_dir->name(), "bat"); settings.beginGroup("RestorePage"); - if (settings.contains(m_splitText)) { + if (settings.contains(m_splitText)) { splitter->restoreState(settings.value(m_splitText).toByteArray()); } settings.endGroup(); diff --git a/bacula/src/qt-console/restore/restore.h b/bacula/src/qt-console/restore/restore.h index c0b5bffe74..ac79fd4bd5 100644 --- a/bacula/src/qt-console/restore/restore.h +++ b/bacula/src/qt-console/restore/restore.h @@ -4,29 +4,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2007-2010 Free Software Foundation Europe e.V. + Copyright (C) 2007-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * @@ -41,7 +29,7 @@ class bRestoreTable : public QTableWidget { - Q_OBJECT + Q_OBJECT private: QPoint dragStartPosition; public: @@ -73,7 +61,7 @@ enum { */ class prerestorePage : public Pages, public Ui::prerestoreForm { - Q_OBJECT + Q_OBJECT public: prerestorePage(); @@ -97,14 +85,14 @@ private: unsigned int m_dataInType; }; -/* +/* * The restore dialog is brought up once we are in the Bacula * restore tree routines. It handles putting up a GUI tree * representation of the files to be restored. */ class restorePage : public Pages, public Ui::restoreForm { - Q_OBJECT + Q_OBJECT public: restorePage(int conn); @@ -136,7 +124,7 @@ private: class bRestore : public Pages, public Ui::bRestoreForm { - Q_OBJECT + Q_OBJECT public: bRestore(); @@ -163,13 +151,13 @@ private: void setupPage(); bool m_populated; void displayFiles(int64_t pathid, QString path); - void displayFileVersion(QString pathid, QString fnid, + void displayFileVersion(QString pathid, QString fnid, QString client, QString filename); }; class bRunRestore : public QDialog, public Ui::bRunRestoreForm { - Q_OBJECT + Q_OBJECT private: bRestore *brestore; QStringList m_fileids, m_jobids, m_dirids, m_findexes; diff --git a/bacula/src/qt-console/restore/restoretree.cpp b/bacula/src/qt-console/restore/restoretree.cpp index e9eb0caf40..c44f6f32e4 100644 --- a/bacula/src/qt-console/restore/restoretree.cpp +++ b/bacula/src/qt-console/restore/restoretree.cpp @@ -3,36 +3,24 @@ Copyright (C) 2007-2010 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ - + /* * - * Restore Class + * Restore Class * * Kern Sibbald, February MMVII * - */ + */ #include "bat.h" #include "restoretree.h" @@ -171,7 +159,7 @@ void restoreTree::populateDirectoryTree() updateRefresh(); int taskcount = 3, ontask = 1; if (m_dropdownChanged) taskcount += 1; - + /* Set progress bars and repaint */ prBar1->setVisible(true); prBar1->setRange(0,taskcount); @@ -292,7 +280,7 @@ void restoreTree::populateDirectoryTree() /* * Function to set m_checkedJobs from the jobs that are checked in the table * of jobs - */ + */ void restoreTree::setJobsCheckedList() { m_JobsCheckedList = ""; @@ -336,7 +324,7 @@ void restoreTree::parseDirectory(const QString &dir_in) QTreeWidgetItem *item = NULL; QTreeWidgetItem *parentItem = m_dirPaths.value(parent); - + if (parentItem==0) { // recurse to build parent... parseDirectory(parent); @@ -421,7 +409,7 @@ void restoreTree::directoryCurrentItemChanged(QTreeWidgetItem *item, QTreeWidget fileTable->setColumnCount(headerlist.size()); fileTable->setHorizontalHeaderLabels(headerlist); fileTable->setRowCount(0); - + m_fileCheckStateList.clear(); disconnect(fileTable, SIGNAL(itemChanged(QTableWidgetItem *)), this, SLOT(fileTableItemChanged(QTableWidgetItem *))); @@ -442,12 +430,12 @@ void restoreTree::directoryCurrentItemChanged(QTreeWidgetItem *item, QTreeWidget QStringList results; if (m_console->sql_cmd(cmd, results)) { - + QTableWidgetItem* tableItem; QString field; QStringList fieldlist; fileTable->setRowCount(results.size()); - + int row = 0; /* Iterate through the record returned from the query */ foreach (QString resultline, results) { @@ -458,7 +446,7 @@ void restoreTree::directoryCurrentItemChanged(QTreeWidgetItem *item, QTreeWidget field = field.trimmed(); /* strip leading & trailing spaces */ tableItem = new QTableWidgetItem(field, 1); /* Possible flags are Qt::ItemFlags flag = Qt::ItemIsSelectable | Qt::ItemIsEditablex - * | Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled | Qt::ItemIsUserCheckable + * | Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled | Qt::ItemIsUserCheckable * | Qt::ItemIsEnabled | Qt::ItemIsTristate; */ tableItem->setForeground(blackBrush); /* Just in case a column ever gets added */ @@ -520,16 +508,16 @@ void restoreTree::fileCurrentItemChanged(QTableWidgetItem *currentFileTableItem, QBrush blackBrush(Qt::black); - QStringList headerlist = (QStringList() + QStringList headerlist = (QStringList() << tr("Job Id") << tr("Type") << tr("End Time") << tr("Hash") << tr("FileId") << tr("Job Type") << tr("First Volume")); versionTable->clear(); versionTable->setColumnCount(headerlist.size()); versionTable->setHorizontalHeaderLabels(headerlist); versionTable->setRowCount(0); - + int pathid = m_directoryPathIdHash.value(directory, -1); if ((pathid != -1) && (fileNameId != -1)) { - QString cmd = + QString cmd = "SELECT Job.JobId AS JobId, Job.Level AS Type," " Job.EndTime AS EndTime, File.MD5 AS MD5," " File.FileId AS FileId, Job.Type AS JobType," @@ -543,16 +531,16 @@ void restoreTree::fileCurrentItemChanged(QTableWidgetItem *currentFileTableItem, " AND Filename.FilenameId=" + QString("%1").arg(fileNameId) + " AND Job.Jobid IN (" + m_checkedJobs + ")" " ORDER BY Job.EndTime DESC"; - + if (mainWin->m_sqlDebug) Pmsg1(000, "Query cmd : %s\n", cmd.toUtf8().data()); QStringList results; if (m_console->sql_cmd(cmd, results)) { - + QTableWidgetItem* tableItem; QString field; QStringList fieldlist; versionTable->setRowCount(results.size()); - + int row = 0; /* Iterate through the record returned from the query */ foreach (QString resultline, results) { @@ -650,7 +638,7 @@ void restoreTree::populateJobTable() QBrush blackBrush(Qt::black); if (mainWin->m_rtPopDirDebug) Pmsg0(000, "Repopulating the Job Table\n"); - QStringList headerlist = (QStringList() + QStringList headerlist = (QStringList() << tr("Job Id") << tr("End Time") << tr("Level") << tr("Type") << tr("Name") << tr("Purged") << tr("TU") << tr("TD")); m_toggleUpIndex = headerlist.indexOf(tr("TU")); @@ -696,7 +684,7 @@ void restoreTree::populateJobTable() QStringList results; if (m_console->sql_cmd(jobQuery, results)) { - + QTableWidgetItem* tableItem; QString field; QStringList fieldlist; @@ -726,7 +714,7 @@ void restoreTree::populateJobTable() if (mainWin->m_sqlDebug) Pmsg1(000, "Column=%d\n", column); if (column == 0) { bool ok; - int purged = fieldlist[purgedIndex].toInt(&ok, 10); + int purged = fieldlist[purgedIndex].toInt(&ok, 10); if (!((ok) && (purged == 1))) { Qt::ItemFlags flag = Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsTristate; tableItem->setFlags(flag); @@ -1313,7 +1301,7 @@ void restoreTree::directoryIconStateRemove() QStringList paths; fullPathtoSubPaths(paths, keyPath); - /* if the state of the item in m_fileExceptionHash is checked + /* if the state of the item in m_fileExceptionHash is checked * each of the subpaths should be "Checked Green" */ if (state == Qt::Checked) { @@ -1473,7 +1461,7 @@ void restoreTree::restoreButtonPushed() if (mainWin->m_rtRestore1Debug) Pmsg1(000, "Directory Checked=\"%s\"\n", directory.toUtf8().data()); /* With a checked directory, query for the files in the directory */ - + QString cmd = "SELECT Filename.Name AS Filename, t1.JobId AS JobId, File.FileIndex AS FileIndex" " FROM" @@ -1490,12 +1478,12 @@ void restoreTree::restoreButtonPushed() " AND File.FilenameId=t1.FilenameId" " AND Job.Jobid=t1.JobId" " ORDER BY Filename"; - + if (mainWin->m_sqlDebug) Pmsg1(000, "Query cmd : %s\n", cmd.toUtf8().data()); QStringList results; if (m_console->sql_cmd(cmd, results)) { QStringList fieldlist; - + int row = 0; /* Iterate through the record returned from the query */ foreach (QString resultline, results) { @@ -1519,7 +1507,7 @@ void restoreTree::restoreButtonPushed() column++; } fileExcpState = m_fileExceptionHash.value(fullPath, (Qt::CheckState)3); - + int excpVersion = m_versionExceptionHash.value(fullPath, 0); if (fileExcpState != Qt::Unchecked) { QString debugtext; @@ -1686,7 +1674,7 @@ int restoreTree::mostRecentVersionfromFullPath(QString &fullPath) " AND Filename.Name='" + fileName + "'" " AND File.FilenameId!=" + QString("%1").arg(m_nullFileNameId) + " GROUP BY Filename.Name"; - + if (mainWin->m_sqlDebug) Pmsg1(000, "Query cmd : %s\n", cmd.toUtf8().data()); QStringList results; if (m_console->sql_cmd(cmd, results)) { diff --git a/bacula/src/qt-console/restore/restoretree.h b/bacula/src/qt-console/restore/restoretree.h index 312b21b1b1..7e203a4513 100644 --- a/bacula/src/qt-console/restore/restoretree.h +++ b/bacula/src/qt-console/restore/restoretree.h @@ -4,29 +4,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2007-2007 Free Software Foundation Europe e.V. + Copyright (C) 2007-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Version $Id$ @@ -39,12 +27,12 @@ #include "ui_restoretree.h" -/* +/* * A restore tree to view files in the catalog */ class restoreTree : public Pages, public Ui::restoreTreeForm { - Q_OBJECT + Q_OBJECT public: restoreTree(); diff --git a/bacula/src/qt-console/run/estimate.cpp b/bacula/src/qt-console/run/estimate.cpp index 4b829b5270..28399da919 100644 --- a/bacula/src/qt-console/run/estimate.cpp +++ b/bacula/src/qt-console/run/estimate.cpp @@ -3,36 +3,24 @@ Copyright (C) 2007-2009 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ - + /* * Run Dialog class * * Kern Sibbald, February MMVII * * $Id$ - */ + */ #include "bat.h" #include "run.h" @@ -73,7 +61,7 @@ void estimatePage::okButtonPushed() m_aButtonPushed = true; this->hide(); QString cmd; - QTextStream(&cmd) << "estimate" << + QTextStream(&cmd) << "estimate" << " job=\"" << jobCombo->currentText() << "\"" << " fileset=\"" << filesetCombo->currentText() << "\"" << " level=\"" << levelCombo->currentText() << "\"" << diff --git a/bacula/src/qt-console/run/prune.cpp b/bacula/src/qt-console/run/prune.cpp index fbe8d324a4..2836312395 100644 --- a/bacula/src/qt-console/run/prune.cpp +++ b/bacula/src/qt-console/run/prune.cpp @@ -3,36 +3,24 @@ Copyright (C) 2007-2009 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ - + /* * Run Dialog class * * Kern Sibbald, February MMVII * * $Id$ - */ + */ #include "bat.h" #include "run.h" diff --git a/bacula/src/qt-console/run/run.cpp b/bacula/src/qt-console/run/run.cpp index e586c3d771..d7585aee8f 100644 --- a/bacula/src/qt-console/run/run.cpp +++ b/bacula/src/qt-console/run/run.cpp @@ -3,35 +3,23 @@ Copyright (C) 2007-2011 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ - + /* * Run Dialog class * * Kern Sibbald, February MMVII * - */ + */ #include "bat.h" #include "run.h" @@ -53,7 +41,7 @@ runPage::runPage(const QString &defJob) : Pages() } -runPage::runPage(const QString &defJob, const QString &level, +runPage::runPage(const QString &defJob, const QString &level, const QString &pool, const QString &storage, const QString &client, const QString &fileset) : Pages() @@ -69,7 +57,7 @@ runPage::runPage(const QString &defJob, const QString &level, poolCombo->setCurrentIndex(poolCombo->findText(pool, Qt::MatchExactly)); if (storage != "") { // TODO: enable storage - storageCombo->setCurrentIndex(storageCombo->findText(storage, + storageCombo->setCurrentIndex(storageCombo->findText(storage, Qt::MatchExactly)); } show(); @@ -82,7 +70,7 @@ runPage::runPage(const QString &defJob, const QString &level, void runPage::init() { QDateTime dt; - QDesktopWidget *desk = QApplication::desktop(); + QDesktopWidget *desk = QApplication::desktop(); QRect scrn; m_name = tr("Run"); @@ -126,7 +114,7 @@ void runPage::okButtonPushed() { this->hide(); QString cmd; - QTextStream(&cmd) << "run" << + QTextStream(&cmd) << "run" << " job=\"" << jobCombo->currentText() << "\"" << " fileset=\"" << filesetCombo->currentText() << "\"" << " level=\"" << levelCombo->currentText() << "\"" << @@ -141,7 +129,7 @@ void runPage::okButtonPushed() * with a job */ #endif if (bootstrap->text() != "") { - cmd += " bootstrap=\"" + bootstrap->text() + "\""; + cmd += " bootstrap=\"" + bootstrap->text() + "\""; } cmd += " yes"; diff --git a/bacula/src/qt-console/run/run.h b/bacula/src/qt-console/run/run.h index 8eea1c7a2b..4838d4a45b 100644 --- a/bacula/src/qt-console/run/run.h +++ b/bacula/src/qt-console/run/run.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2007-2009 Free Software Foundation Europe e.V. + Copyright (C) 2007-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation, which is - listed in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ #ifndef _RUN_H_ @@ -38,14 +26,14 @@ class runPage : public Pages, public Ui::runForm { - Q_OBJECT + Q_OBJECT public: runPage(); runPage(const QString &defJob); - runPage(const QString &defJob, + runPage(const QString &defJob, const QString &level, const QString &pool, const QString &storage, @@ -64,7 +52,7 @@ private: class runCmdPage : public Pages, public Ui::runCmdForm { - Q_OBJECT + Q_OBJECT public: runCmdPage(int conn); @@ -80,7 +68,7 @@ private: class estimatePage : public Pages, public Ui::estimateForm { - Q_OBJECT + Q_OBJECT public: estimatePage(); @@ -97,7 +85,7 @@ private: class prunePage : public Pages, public Ui::pruneForm { - Q_OBJECT + Q_OBJECT public: prunePage(const QString &volume, const QString &client); diff --git a/bacula/src/qt-console/run/runcmd.cpp b/bacula/src/qt-console/run/runcmd.cpp index f66bcf29be..e9369ca7fe 100644 --- a/bacula/src/qt-console/run/runcmd.cpp +++ b/bacula/src/qt-console/run/runcmd.cpp @@ -3,41 +3,29 @@ Copyright (C) 2007-2010 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ - + /* * Run Command Dialog class * * This is called when a Run Command signal is received from the - * Director. We parse the Director's output and throw up a + * Director. We parse the Director's output and throw up a * dialog box. This happens, for example, after the user finishes * selecting files to be restored. The Director will then submit a * run command, that causes this page to be popped up. * * Kern Sibbald, March MMVII * - */ + */ #include "bat.h" #include "run.h" @@ -74,7 +62,7 @@ void runCmdPage::fill() clientCombo->addItems(m_console->client_list); filesetCombo->addItems(m_console->fileset_list); - replaceCombo->addItems(QStringList() << tr("never") << tr("always") << tr("ifnewer") + replaceCombo->addItems(QStringList() << tr("never") << tr("always") << tr("ifnewer") << tr("ifolder")); replaceCombo->setCurrentIndex(replaceCombo->findText(tr("never"), Qt::MatchExactly)); storageCombo->addItems(m_console->storage_list); @@ -127,7 +115,7 @@ void runCmdPage::fill() if (item.startsWith("Priority:")) { bool okay; int pri = val.toInt(&okay, 10); - if (okay) + if (okay) prioritySpin->setValue(pri); continue; } @@ -154,7 +142,7 @@ void runCmdPage::okButtonPushed() QTextStream(&pri) << " priority=\"" << prioritySpin->value() << "\""; cmd += pri; cmd += " yes\n"; - + setConsoleCurrent(); QString displayhtml(""); displayhtml += cmd + "\n"; diff --git a/bacula/src/qt-console/select/select.cpp b/bacula/src/qt-console/select/select.cpp index 3b330fd2d0..9184581be1 100644 --- a/bacula/src/qt-console/select/select.cpp +++ b/bacula/src/qt-console/select/select.cpp @@ -3,35 +3,23 @@ Copyright (C) 2007-2010 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ - + /* * Select dialog class * * Kern Sibbald, March MMVII * - */ + */ #include "bat.h" #include "select.h" diff --git a/bacula/src/qt-console/select/select.h b/bacula/src/qt-console/select/select.h index 1d3aabbb99..fdeee45af9 100644 --- a/bacula/src/qt-console/select/select.h +++ b/bacula/src/qt-console/select/select.h @@ -1,3 +1,18 @@ +/* + Bacula® - The Network Backup Solution + + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. + + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. + + Bacula® is a registered trademark of Kern Sibbald. +*/ #ifndef _SELECT_H_ #define _SELECT_H_ @@ -8,7 +23,7 @@ class selectDialog : public QDialog, public Ui::selectForm { - Q_OBJECT + Q_OBJECT public: selectDialog(Console *console, int conn); @@ -26,7 +41,7 @@ private: class yesnoPopUp : public QDialog { - Q_OBJECT + Q_OBJECT public: yesnoPopUp(Console *console, int conn); diff --git a/bacula/src/qt-console/select/textinput.cpp b/bacula/src/qt-console/select/textinput.cpp index 9c91ba8b52..a085bce5f7 100644 --- a/bacula/src/qt-console/select/textinput.cpp +++ b/bacula/src/qt-console/select/textinput.cpp @@ -3,35 +3,23 @@ Copyright (C) 2007-2010 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ - + /* * Select dialog class * * Kern Sibbald, March MMVII * - */ + */ #include "bat.h" #include "textinput.h" @@ -39,7 +27,7 @@ /* * Read input text box */ -textInputDialog::textInputDialog(Console *console, int conn) +textInputDialog::textInputDialog(Console *console, int conn) { m_conn = conn; QDateTime dt; diff --git a/bacula/src/qt-console/select/textinput.h b/bacula/src/qt-console/select/textinput.h index 602121a8d3..cfbcf070e6 100644 --- a/bacula/src/qt-console/select/textinput.h +++ b/bacula/src/qt-console/select/textinput.h @@ -1,3 +1,18 @@ +/* + Bacula® - The Network Backup Solution + + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. + + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. + + Bacula® is a registered trademark of Kern Sibbald. +*/ #ifndef _TEXTENTRY_H_ #define _TEXTENTRY_H_ @@ -8,7 +23,7 @@ class textInputDialog : public QDialog, public Ui::textInputForm { - Q_OBJECT + Q_OBJECT public: textInputDialog(Console *console, int conn); diff --git a/bacula/src/qt-console/status/clientstat.cpp b/bacula/src/qt-console/status/clientstat.cpp index 5794032aa4..40968309a1 100644 --- a/bacula/src/qt-console/status/clientstat.cpp +++ b/bacula/src/qt-console/status/clientstat.cpp @@ -3,32 +3,20 @@ Copyright (C) 2007-2010 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Dirk Bartley, March 2007 */ - + #include "bat.h" #include #include diff --git a/bacula/src/qt-console/status/clientstat.h b/bacula/src/qt-console/status/clientstat.h index 341130f2e1..2c4c88db2b 100644 --- a/bacula/src/qt-console/status/clientstat.h +++ b/bacula/src/qt-console/status/clientstat.h @@ -3,29 +3,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2007-2007 Free Software Foundation Europe e.V. + Copyright (C) 2007-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Version $Id: clientstat.h 5372 2007-08-17 12:17:04Z kerns $ @@ -40,7 +28,7 @@ class ClientStat : public Pages, public Ui::ClientStatForm { - Q_OBJECT + Q_OBJECT public: ClientStat(QString&, QTreeWidgetItem*); diff --git a/bacula/src/qt-console/status/dirstat.cpp b/bacula/src/qt-console/status/dirstat.cpp index 24813b6397..4190de60fe 100644 --- a/bacula/src/qt-console/status/dirstat.cpp +++ b/bacula/src/qt-console/status/dirstat.cpp @@ -3,33 +3,21 @@ Copyright (C) 2007-2010 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * * Dirk Bartley, March 2007 */ - + #include "bat.h" #include #include @@ -143,10 +131,10 @@ void DirStat::populateTerminated() terminatedTable->clear(); QStringList headerlist = (QStringList() << tr("Job Id") << tr("Job Level") << tr("Job Files") - << tr("Job Bytes") << tr("Job Status") << tr("Job Time") + << tr("Job Bytes") << tr("Job Status") << tr("Job Time") << tr("Job Name")); QStringList flaglist = (QStringList() - << "R" << "L" << "R" << "R" << "LC" + << "R" << "L" << "R" << "R" << "LC" << "L" << "L"); terminatedTable->setColumnCount(headerlist.size()); @@ -199,7 +187,7 @@ void DirStat::populateScheduled() scheduledTable->clear(); QStringList headerlist = (QStringList() - << tr("Job Level") << tr("Job Type") << tr("Priority") << tr("Job Time") + << tr("Job Level") << tr("Job Type") << tr("Priority") << tr("Job Time") << tr("Job Name") << tr("Volume")); QStringList flaglist = (QStringList() << "L" << "L" << "R" << "L" << "L" << "L"); diff --git a/bacula/src/qt-console/status/dirstat.h b/bacula/src/qt-console/status/dirstat.h index 017f4de3b4..501ccf4398 100644 --- a/bacula/src/qt-console/status/dirstat.h +++ b/bacula/src/qt-console/status/dirstat.h @@ -3,29 +3,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2007-2007 Free Software Foundation Europe e.V. + Copyright (C) 2007-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Version $Id: dirstat.h 5372 2007-08-17 12:17:04Z kerns $ @@ -40,7 +28,7 @@ class DirStat : public Pages, public Ui::DirStatForm { - Q_OBJECT + Q_OBJECT public: DirStat(); diff --git a/bacula/src/qt-console/status/storstat.cpp b/bacula/src/qt-console/status/storstat.cpp index 5e35162b06..59bca7049a 100644 --- a/bacula/src/qt-console/status/storstat.cpp +++ b/bacula/src/qt-console/status/storstat.cpp @@ -3,33 +3,21 @@ Copyright (C) 2007-2010 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * * Dirk Bartley, March 2007 */ - + #include "bat.h" #include #include @@ -41,7 +29,7 @@ static bool working = false; /* prevent timer recursion */ /* .status storage= -where is the storage name in the Director, and +where is the storage name in the Director, and is one of the following: header running @@ -240,10 +228,10 @@ void StorStat::populateTerminated() terminatedTable->clear(); QStringList headerlist = (QStringList() << tr("Job Id") << tr("Job Level") << tr("Job Files") - << tr("Job Bytes") << tr("Job Status") << tr("Job Time") + << tr("Job Bytes") << tr("Job Status") << tr("Job Time") << tr("Job Name")); QStringList flaglist = (QStringList() - << "R" << "L" << "R" << "R" << "LC" + << "R" << "L" << "R" << "R" << "LC" << "L" << "L"); terminatedTable->setColumnCount(headerlist.size()); @@ -449,4 +437,4 @@ void StorStat::releaseButtonPushed() void StorStat::labelButtonPushed() { new labelPage(m_storage); -} +} diff --git a/bacula/src/qt-console/status/storstat.h b/bacula/src/qt-console/status/storstat.h index 7d99e34d17..66cd155a44 100644 --- a/bacula/src/qt-console/status/storstat.h +++ b/bacula/src/qt-console/status/storstat.h @@ -3,29 +3,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2007-2007 Free Software Foundation Europe e.V. + Copyright (C) 2007-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Version $Id: dirstat.h 5372 2007-08-17 12:17:04Z kerns $ @@ -40,7 +28,7 @@ class StorStat : public Pages, public Ui::StorStatForm { - Q_OBJECT + Q_OBJECT public: StorStat(QString &, QTreeWidgetItem *); diff --git a/bacula/src/qt-console/storage/content.cpp b/bacula/src/qt-console/storage/content.cpp index 9794be0916..a41f8737bb 100644 --- a/bacula/src/qt-console/storage/content.cpp +++ b/bacula/src/qt-console/storage/content.cpp @@ -3,29 +3,17 @@ Copyright (C) 2007-2009 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ - + #include "bat.h" #include #include @@ -36,11 +24,11 @@ #include "util/fmtwidgetitem.h" #include "status/storstat.h" -// +// // TODO: List tray // List drives in autochanger // use user selection to add slot= argument -// +// Content::Content(QString storage, QTreeWidgetItem *parentWidget) : Pages() { @@ -104,7 +92,7 @@ void table_get_selection(QTableWidget *table, QString &sel) */ int s = table->rowCount(); bool *tab = (bool *)malloc(s * sizeof(bool)); - memset(tab, 0, s); + memset(tab, 0, s); foreach (item, table->selectedItems()) { current = item->row(); @@ -173,7 +161,7 @@ void Content::statusStorageWindow() } /* - * The main meat of the class!! The function that querries the director and + * The main meat of the class!! The function that querries the director and * creates the widgets with appropriate values. */ void Content::populateContent() @@ -224,33 +212,33 @@ void Content::populateContent() } /* Slot */ - slotitem.setNumericFld(index++, fld.next()); + slotitem.setNumericFld(index++, fld.next()); /* Real Slot */ if (fld.next() != "") { /* Volume */ slotitem.setTextFld(index++, fld.next()); - + /* Bytes */ slotitem.setBytesFld(index++, fld.next()); - + /* Status */ slotitem.setVolStatusFld(index++, fld.next()); - + /* MediaType */ slotitem.setTextFld(index++, fld.next()); - + /* Pool */ slotitem.setTextFld(index++, fld.next()); - + tim = fld.next().toInt(); if (tim > 0) { /* LastW */ localtime_r(&tim, &tm); strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", &tm); slotitem.setTextFld(index++, QString(buf)); - + /* Expire */ tim = fld.next().toInt(); localtime_r(&tim, &tm); @@ -293,14 +281,14 @@ void Content::populateContent() fld.next(); /* Number */ - slotitem.setNumericFld(index++, fld.next()); + slotitem.setNumericFld(index++, fld.next()); /* Slot */ fld.next(); - + /* Volume */ slotitem.setTextFld(index++, fld.next()); - + row++; } @@ -328,7 +316,7 @@ void Content::consoleUpdateSlots() { QString sel = ""; table_get_selection(tableContent, sel); - + QString cmd("update slots"); if (sel != "") { cmd += sel; diff --git a/bacula/src/qt-console/storage/content.h b/bacula/src/qt-console/storage/content.h index e1eac6792c..9f86c5d165 100644 --- a/bacula/src/qt-console/storage/content.h +++ b/bacula/src/qt-console/storage/content.h @@ -3,29 +3,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2007-2009 Free Software Foundation Europe e.V. + Copyright (C) 2007-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ #include @@ -35,7 +23,7 @@ class Content : public Pages, public Ui::ContentForm { - Q_OBJECT + Q_OBJECT public: Content(QString storage, QTreeWidgetItem *parentWidget); diff --git a/bacula/src/qt-console/storage/storage.cpp b/bacula/src/qt-console/storage/storage.cpp index 7a3021cc9c..da61da6964 100644 --- a/bacula/src/qt-console/storage/storage.cpp +++ b/bacula/src/qt-console/storage/storage.cpp @@ -3,36 +3,24 @@ Copyright (C) 2007-2010 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ - + /* * * Storage Class * * Dirk Bartley, March 2007 * - */ + */ #include "bat.h" #include @@ -69,7 +57,7 @@ Storage::~Storage() } /* - * The main meat of the class!! The function that querries the director and + * The main meat of the class!! The function that querries the director and * creates the widgets with appropriate values. */ void Storage::populateTree() @@ -85,7 +73,7 @@ void Storage::populateTree() m_checkcurwidget = true; QStringList headerlist = (QStringList() << tr("Name") << tr("Id") - << tr("Changer") << tr("Slot") << tr("Status") << tr("Enabled") << tr("Pool") + << tr("Changer") << tr("Slot") << tr("Status") << tr("Enabled") << tr("Pool") << tr("Media Type") ); m_topItem = new QTreeWidgetItem(mp_treeWidget); @@ -144,7 +132,7 @@ void Storage::populateTree() int index = 1; QStringListIterator fld(fieldlist); - + /* storage id */ storageItem.setNumericFld(index++, fld.next()); @@ -171,7 +159,7 @@ void Storage::mediaList(QTreeWidgetItem *parent, const QString &storageID) { QString query("SELECT Media.VolumeName AS Media, Media.Slot AS Slot," " Media.VolStatus AS VolStatus, Media.Enabled AS Enabled," - " Pool.Name AS MediaPool, Media.MediaType AS MediaType" + " Pool.Name AS MediaPool, Media.MediaType AS MediaType" " From Media" " JOIN Pool ON (Media.PoolId=Pool.PoolId)" " WHERE Media.StorageId='" + storageID + "'" @@ -187,11 +175,11 @@ void Storage::mediaList(QTreeWidgetItem *parent, const QString &storageID) QString resultline; QString field; QStringList fieldlist; - + foreach (resultline, results) { fieldlist = resultline.split("\t"); if (fieldlist.size() < 6) - continue; + continue; /* Iterate through fields in the record */ QStringListIterator fld(fieldlist); @@ -199,8 +187,8 @@ void Storage::mediaList(QTreeWidgetItem *parent, const QString &storageID) TreeItemFormatter fmt(*parent, 2); /* volname */ - fmt.setTextFld(index++, fld.next()); - + fmt.setTextFld(index++, fld.next()); + /* skip the next two columns, unused by media */ index += 2; @@ -211,13 +199,13 @@ void Storage::mediaList(QTreeWidgetItem *parent, const QString &storageID) fmt.setVolStatusFld(index++, fld.next()); /* enabled */ - fmt.setBoolFld(index++, fld.next()); + fmt.setBoolFld(index++, fld.next()); /* pool */ - fmt.setTextFld(index++, fld.next()); + fmt.setTextFld(index++, fld.next()); /* media type */ - fmt.setTextFld(index++, fld.next()); + fmt.setTextFld(index++, fld.next()); } } @@ -297,8 +285,8 @@ void Storage::treeItemChanged(QTreeWidgetItem *currentwidgetitem, QTreeWidgetIte } } -/* - * Setup a context menu +/* + * Setup a context menu * Made separate from populate so that it would not create context menu over and * over as the tree is repopulated. */ @@ -335,7 +323,7 @@ void Storage::createContextMenu() void Storage::contentWindow() { - if (m_currentStorage != "" && m_currentAutoChanger) { + if (m_currentStorage != "" && m_currentAutoChanger) { QTreeWidgetItem *parentItem = mainWin->getFromHash(this); new Content(m_currentStorage, parentItem); } diff --git a/bacula/src/qt-console/storage/storage.h b/bacula/src/qt-console/storage/storage.h index ae0f8e2f1e..2eee35547f 100644 --- a/bacula/src/qt-console/storage/storage.h +++ b/bacula/src/qt-console/storage/storage.h @@ -3,29 +3,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2007-2007 Free Software Foundation Europe e.V. + Copyright (C) 2007-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Version $Id$ @@ -40,7 +28,7 @@ class Storage : public Pages, public Ui::StorageForm { - Q_OBJECT + Q_OBJECT public: Storage(); diff --git a/bacula/src/qt-console/tray-monitor/authenticate.cpp b/bacula/src/qt-console/tray-monitor/authenticate.cpp index c9b09bc694..91f4da62c4 100644 --- a/bacula/src/qt-console/tray-monitor/authenticate.cpp +++ b/bacula/src/qt-console/tray-monitor/authenticate.cpp @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2004-2008 Free Software Foundation Europe e.V. + Copyright (C) 2004-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * diff --git a/bacula/src/qt-console/tray-monitor/tray-monitor.cpp b/bacula/src/qt-console/tray-monitor/tray-monitor.cpp index cd38ad75be..9a01a8a7b2 100644 --- a/bacula/src/qt-console/tray-monitor/tray-monitor.cpp +++ b/bacula/src/qt-console/tray-monitor/tray-monitor.cpp @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2004-2011 Free Software Foundation Europe e.V. + Copyright (C) 2004-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ #include "tray-ui.h" @@ -96,7 +84,7 @@ void dotest() void get_list(monitoritem *item, const char *cmd, QStringList &lst) { int stat; - + doconnect(item); item->writecmd(cmd); while((stat = bnet_recv(item->D_sock)) >= 0) { @@ -121,7 +109,7 @@ void refresh_item() break; case R_STORAGE: cmd = "status"; - break; + break; default: exit(1); break; @@ -136,7 +124,7 @@ void refresh_item() * */ int main(int argc, char *argv[]) -{ +{ int ch, i, dir_index=-1; bool test_config = false; DIRRES* dird; @@ -287,7 +275,7 @@ int main(int argc, char *argv[]) break; case R_STORAGE: cmd = "status"; - break; + break; default: exit(1); break; @@ -311,7 +299,7 @@ int main(int argc, char *argv[]) (void)WSACleanup(); /* Cleanup Windows sockets */ - + config->free_resources(); free(config); config = NULL; @@ -344,7 +332,7 @@ void changeStatusMessage(monitoritem*, const char *fmt,...) { tray->statusbar->showMessage(QString(buf)); } -int doconnect(monitoritem* item) +int doconnect(monitoritem* item) { if (!item->D_sock) { memset(&jcr, 0, sizeof(jcr)); @@ -357,21 +345,21 @@ int doconnect(monitoritem* item) case R_DIRECTOR: dird = (DIRRES*)item->resource; changeStatusMessage(item, _("Connecting to Director %s:%d"), dird->address, dird->DIRport); - item->D_sock = bnet_connect(NULL, monitor->DIRConnectTimeout, + item->D_sock = bnet_connect(NULL, monitor->DIRConnectTimeout, 0, 0, _("Director daemon"), dird->address, NULL, dird->DIRport, 0); jcr.dir_bsock = item->D_sock; break; case R_CLIENT: filed = (CLIENT*)item->resource; changeStatusMessage(item, _("Connecting to Client %s:%d"), filed->address, filed->FDport); - item->D_sock = bnet_connect(NULL, monitor->FDConnectTimeout, + item->D_sock = bnet_connect(NULL, monitor->FDConnectTimeout, 0, 0, _("File daemon"), filed->address, NULL, filed->FDport, 0); jcr.file_bsock = item->D_sock; break; case R_STORAGE: stored = (STORE*)item->resource; changeStatusMessage(item, _("Connecting to Storage %s:%d"), stored->address, stored->SDport); - item->D_sock = bnet_connect(NULL, monitor->SDConnectTimeout, + item->D_sock = bnet_connect(NULL, monitor->SDConnectTimeout, 0, 0, _("Storage daemon"), stored->address, NULL, stored->SDport, 0); jcr.store_bsock = item->D_sock; break; @@ -418,7 +406,7 @@ int doconnect(monitoritem* item) return 1; } -int docmd(monitoritem* item, const char* command) +int docmd(monitoritem* item, const char* command) { int stat; //qDebug() << "docmd(" << item->get_name() << "," << command << ")"; diff --git a/bacula/src/qt-console/tray-monitor/tray-monitor.h b/bacula/src/qt-console/tray-monitor/tray-monitor.h index ac2c2578e3..9d06ce6ced 100644 --- a/bacula/src/qt-console/tray-monitor/tray-monitor.h +++ b/bacula/src/qt-console/tray-monitor/tray-monitor.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2004-2011 Free Software Foundation Europe e.V. + Copyright (C) 2004-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Includes specific to the tray monitor @@ -129,7 +117,7 @@ public: /* Pointer to default value */ *def++ = 0; strip_trailing_junk(def); - + if (strcmp(dircomm->msg, "job") == 0) { if (strcmp(def, job_defs.job_name.toUtf8().data()) != 0) { goto bail_out; diff --git a/bacula/src/qt-console/tray-monitor/tray-ui.h b/bacula/src/qt-console/tray-monitor/tray-ui.h index 1119e26f16..0c2b959049 100644 --- a/bacula/src/qt-console/tray-monitor/tray-ui.h +++ b/bacula/src/qt-console/tray-monitor/tray-ui.h @@ -1,30 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2011-2011 Free Software Foundation Europe e.V. + Copyright (C) 2011-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation, which is - listed in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ #ifndef TRAYUI_H @@ -83,7 +70,7 @@ public: qDebug() << "start getting elements"; get_list(item, ".jobs type=B", res.job_list); - + if (res.job_list.length() == 0) { QMessageBox msgBox; msgBox.setText("This restricted console doesn't have access to Backup jobs"); @@ -205,7 +192,7 @@ public: return hash.value(QString(title)); } - void clearText(char *title) + void clearText(char *title) { QPlainTextEdit *w = getTextEdit(title); if (!w) { @@ -214,7 +201,7 @@ public: w->clear(); } - void appendText(char *title, char *line) + void appendText(char *title, char *line) { QPlainTextEdit *w = getTextEdit(title); if (!w) { @@ -257,7 +244,7 @@ public: director = NULL; if (TrayMonitor->objectName().isEmpty()) TrayMonitor->setObjectName(QString::fromUtf8("TrayMonitor")); - TrayMonitor->setWindowIcon(QIcon(":/images/cartridge1.png")); + TrayMonitor->setWindowIcon(QIcon(":/images/cartridge1.png")); TrayMonitor->resize(789, 595); centralwidget = new QWidget(TrayMonitor); centralwidget->setObjectName(QString::fromUtf8("centralwidget")); @@ -311,15 +298,15 @@ public: QAction* actAbout = new QAction(QApplication::translate("TrayMonitor", "About", 0, QApplication::UnicodeUTF8),TrayMonitor); - QAction* actRun = new QAction(QApplication::translate("TrayMonitor", + QAction* actRun = new QAction(QApplication::translate("TrayMonitor", "Run...", 0, QApplication::UnicodeUTF8),TrayMonitor); - stmenu->addAction(actShow); + stmenu->addAction(actShow); stmenu->addAction(actRun); stmenu->addAction(actAbout); stmenu->addSeparator(); - stmenu->addAction(actQuit); - + stmenu->addAction(actQuit); + connect(actRun, SIGNAL(triggered()), this, SLOT(cb_run())); connect(actShow, SIGNAL(triggered()), this, SLOT(cb_show())); connect(actQuit, SIGNAL(triggered()), this, SLOT(cb_quit())); @@ -328,11 +315,11 @@ public: connect(tray, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(cb_trayIconActivated(QSystemTrayIcon::ActivationReason))); - tray->setContextMenu(stmenu); - QIcon icon(":/images/cartridge1.png"); - tray->setIcon(icon); + tray->setContextMenu(stmenu); + QIcon icon(":/images/cartridge1.png"); + tray->setIcon(icon); tray->setToolTip(QString("Bacula Tray Monitor")); - tray->show(); + tray->show(); retranslateUi(TrayMonitor); QMetaObject::connectSlotsByName(TrayMonitor); diff --git a/bacula/src/qt-console/tray-monitor/tray_conf.cpp b/bacula/src/qt-console/tray-monitor/tray_conf.cpp index c56fdf76c6..a6bbbf250c 100644 --- a/bacula/src/qt-console/tray-monitor/tray_conf.cpp +++ b/bacula/src/qt-console/tray-monitor/tray_conf.cpp @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2004-2011 Free Software Foundation Europe e.V. + Copyright (C) 2004-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Main configuration file parser for Bacula Tray Monitor. @@ -174,7 +162,7 @@ void dump_resource(int type, RES *reshdr, void sendit(void *sock, const char *fm } switch (type) { case R_MONITOR: - sendit(sock, _("Monitor: name=%s FDtimeout=%s SDtimeout=%s\n"), + sendit(sock, _("Monitor: name=%s FDtimeout=%s SDtimeout=%s\n"), reshdr->name, edit_uint64(res->res_monitor.FDConnectTimeout, ed1), edit_uint64(res->res_monitor.SDConnectTimeout, ed2)); diff --git a/bacula/src/qt-console/tray-monitor/tray_conf.h b/bacula/src/qt-console/tray-monitor/tray_conf.h index 140ce3455d..a75a56e583 100644 --- a/bacula/src/qt-console/tray-monitor/tray_conf.h +++ b/bacula/src/qt-console/tray-monitor/tray_conf.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2004-2011 Free Software Foundation Europe e.V. + Copyright (C) 2004-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Tray Monitor specific configuration and defines diff --git a/bacula/src/qt-console/util/comboutil.cpp b/bacula/src/qt-console/util/comboutil.cpp index 57c97418b8..1abc5c281c 100644 --- a/bacula/src/qt-console/util/comboutil.cpp +++ b/bacula/src/qt-console/util/comboutil.cpp @@ -3,27 +3,15 @@ Copyright (C) 2007-2009 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* diff --git a/bacula/src/qt-console/util/comboutil.h b/bacula/src/qt-console/util/comboutil.h index f0cf5e44e0..d440f82a8c 100644 --- a/bacula/src/qt-console/util/comboutil.h +++ b/bacula/src/qt-console/util/comboutil.h @@ -3,34 +3,22 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2007-2009 Free Software Foundation Europe e.V. + Copyright (C) 2007-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Version $Id$ * - * Combobox helpers - Riccardo Ghetta, May 2008 + * Combobox helpers - Riccardo Ghetta, May 2008 */ class QComboBox; diff --git a/bacula/src/qt-console/util/fmtwidgetitem.cpp b/bacula/src/qt-console/util/fmtwidgetitem.cpp index ef742bf518..dd0812902f 100644 --- a/bacula/src/qt-console/util/fmtwidgetitem.cpp +++ b/bacula/src/qt-console/util/fmtwidgetitem.cpp @@ -3,36 +3,24 @@ Copyright (C) 2007-2010 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ - + /* * * Helper functions for tree widget formatting * * Riccardo Ghetta, May 2008 * - */ + */ #include "bat.h" #include @@ -68,13 +56,13 @@ QString convertJobStatus(const QString &sts) Freeze::Freeze(QWidget &q): qw(&q) { - qw->setUpdatesEnabled(false); + qw->setUpdatesEnabled(false); } Freeze::~Freeze() { if (qw) { - qw->setUpdatesEnabled(true); + qw->setUpdatesEnabled(true); qw->update(); } } @@ -101,15 +89,15 @@ QString convertBytesIEC(qint64 qfld) smaller unit (e.g. GB for a TB number and so on) */ char suffix; if (qfld >= EB) { - qfld /= PB; + qfld /= PB; suffix = 'E'; } else if (qfld >= PB) { - qfld /= TB; + qfld /= TB; suffix = 'P'; } else if (qfld >= TB) { - qfld /= GB; + qfld /= GB; suffix = 'T'; } else if (qfld >= GB) { @@ -125,7 +113,7 @@ QString convertBytesIEC(qint64 qfld) } else { /* plain bytes, no need to reformat */ - return QString("%1 B").arg(qfld); + return QString("%1 B").arg(qfld); } /* having divided for a smaller unit, now we can safely convert to double and @@ -147,15 +135,15 @@ QString convertBytesSI(qint64 qfld) smaller unit (e.g. GB for a TB number and so on) */ char suffix; if (qfld >= EB) { - qfld /= PB; + qfld /= PB; suffix = 'E'; } else if (qfld >= PB) { - qfld /= TB; + qfld /= TB; suffix = 'P'; } else if (qfld >= TB) { - qfld /= GB; + qfld /= GB; suffix = 'T'; } else if (qfld >= GB) { @@ -171,7 +159,7 @@ QString convertBytesSI(qint64 qfld) } else { /* plain bytes, no need to reformat */ - return QString("%1 B").arg(qfld); + return QString("%1 B").arg(qfld); } /* having divided for a smaller unit, now we can safely convert to double and @@ -222,7 +210,7 @@ void ItemFormatterBase::setPercent(int index, float value) /* By default, the setPixmap implementation with tooltip don't implement * the tooltip stuff */ -void ItemFormatterBase::setPixmap(int index, const QPixmap &pix, +void ItemFormatterBase::setPixmap(int index, const QPixmap &pix, const QString & /* tip */) { setPixmap(index, pix); @@ -387,7 +375,7 @@ void ItemFormatterBase::setJobStatusFld(int index, const QString &status, bool c setBackground(index, Qt::green); } else if (redchars.contains(st, Qt::CaseSensitive)) { setBackground(index, Qt::red); - } else if (yellowchars.contains(st, Qt::CaseSensitive)){ + } else if (yellowchars.contains(st, Qt::CaseSensitive)){ setBackground(index, Qt::yellow); } } @@ -467,7 +455,7 @@ void TableItemFormatter::BatSortingTableItem::setSortData(const QVariant &d) setData(SORTDATA_ROLE, d); } -bool TableItemFormatter::BatSortingTableItem::operator< ( const QTableWidgetItem & o ) const +bool TableItemFormatter::BatSortingTableItem::operator< ( const QTableWidgetItem & o ) const { QVariant my = data(SORTDATA_ROLE); QVariant other = o.data(SORTDATA_ROLE); @@ -476,11 +464,11 @@ bool TableItemFormatter::BatSortingTableItem::operator< ( const QTableWidgetItem /* 64bit integers must be handled separately, others can be converted to double */ if (QVariant::ULongLong == my.type()) { - return my.toULongLong() < other.toULongLong(); + return my.toULongLong() < other.toULongLong(); } else if (QVariant::LongLong == my.type()) { - return my.toLongLong() < other.toLongLong(); + return my.toLongLong() < other.toLongLong(); } else if (my.canConvert(QVariant::Double)) { - return my.toDouble() < other.toDouble(); + return my.toDouble() < other.toDouble(); } else { return QTableWidgetItem::operator< (o); /* invalid combination, revert to default sorting */ } @@ -508,7 +496,7 @@ void TableItemFormatter::setPixmap(int index, const QPixmap &pix) parent->setCellWidget(row, index, lbl); } -void TableItemFormatter::setPixmap(int index, const QPixmap &pix, +void TableItemFormatter::setPixmap(int index, const QPixmap &pix, const QString &tips) { // Centered, but not sortable ! diff --git a/bacula/src/qt-console/util/fmtwidgetitem.h b/bacula/src/qt-console/util/fmtwidgetitem.h index 364697362d..05da32e60e 100644 --- a/bacula/src/qt-console/util/fmtwidgetitem.h +++ b/bacula/src/qt-console/util/fmtwidgetitem.h @@ -3,32 +3,20 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2007-2010 Free Software Foundation Europe e.V. + Copyright (C) 2007-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* - * TreeView formatting helpers - Riccardo Ghetta, May 2008 + * TreeView formatting helpers - Riccardo Ghetta, May 2008 */ class QWidget; @@ -80,7 +68,7 @@ public: }; public: - virtual ~ItemFormatterBase(); + virtual ~ItemFormatterBase(); /* Prints Yes if fld is != 0, No otherwise. Centers field if center true*/ void setBoolFld(int index, const QString &fld, bool center = true); @@ -110,19 +98,19 @@ public: /* fld value interpreted as volume status. Colored accordingly */ void setVolStatusFld(int index, const QString &fld, bool center = true); - + /* fld value interpreted as job status. Colored accordingly */ void setJobStatusFld(int index, const QString &status, bool center = true); - + /* fld value interpreted as job type. */ void setJobTypeFld(int index, const QString &fld, bool center = false); - + /* fld value interpreted as job level. */ void setJobLevelFld(int index, const QString &fld, bool center = false); /* fld value interpreted as Online/Offline */ void setInChanger(int index, const QString &InChanger); - + /* fld value interpreted as file or folder */ void setFileType(int index, const QString &type); @@ -186,14 +174,14 @@ class TableItemFormatter : public ItemFormatterBase { private: - /* specialized widget item - allows an optional data property for sorting */ + /* specialized widget item - allows an optional data property for sorting */ class BatSortingTableItem : public QTableWidgetItem { private: static const int SORTDATA_ROLE = Qt::UserRole + 100; public: BatSortingTableItem(); - + /* uses the sort data if available, reverts to default behavior othervise */ virtual bool operator< ( const QTableWidgetItem & o ) const; diff --git a/bacula/src/stored/Makefile.in b/bacula/src/stored/Makefile.in index 27d68a5454..4e2740ea09 100644 --- a/bacula/src/stored/Makefile.in +++ b/bacula/src/stored/Makefile.in @@ -24,50 +24,65 @@ first_rule: all dummy: # bacula-sd -SDOBJS = stored.o ansi_label.o vtape.o \ +SDOBJS = stored.o ansi_label.o vtape_dev.o \ autochanger.o acquire.o append.o \ askdir.o authenticate.o \ - block.o butil.o dev.o \ - device.o dircmd.o dvd.o ebcdic.o fd_cmds.o job.o \ - label.o lock.o mac.o match_bsr.o mount.o parse_bsr.o \ - pythonsd.o read.o read_record.o record.o \ + block.o block_util.o butil.o dev.o os.o file_dev.o tape_dev.o \ + device.o dircmd.o ebcdic.o fd_cmds.o job.o \ + label.o lock.o match_bsr.o mount.o parse_bsr.o \ + read.o read_records.o \ + record_read.o record_write.o record_util.o \ reserve.o scan.o sd_plugins.o \ - spool.o status.o stored_conf.o vol_mgr.o wait.o + spool.o status.o stored_conf.o \ + vbackup.o vol_mgr.o wait.o # btape -TAPEOBJS = btape.o block.o butil.o dev.o device.o label.o vtape.o \ - lock.o ansi_label.o dvd.o ebcdic.o \ - autochanger.o acquire.o mount.o record.o read_record.o \ +TAPEOBJS = btape.o block.o block_util.o butil.o \ + dev.o os.o file_dev.o tape_dev.o \ + device.o label.o vtape_dev.o \ + lock.o ansi_label.o ebcdic.o \ + autochanger.o acquire.o mount.o record_util.o \ + read_records.o record_read.o record_write.o \ reserve.o stored_conf.o match_bsr.o parse_bsr.o scan.o \ - sd_plugins.o spool.o vol_mgr.o wait.o + sd_plugins.o status.o spool.o vol_mgr.o wait.o # bls -BLSOBJS = bls.o block.o butil.o device.o dev.o label.o match_bsr.o vtape.o \ - ansi_label.o dvd.o ebcdic.o lock.o \ - autochanger.o acquire.o mount.o parse_bsr.o record.o \ - read_record.o reserve.o scan.o stored_conf.o spool.o \ - sd_plugins.o vol_mgr.o wait.o +BLSOBJS = bls.o block.o block_util.o butil.o device.o \ + dev.o os.o file_dev.o tape_dev.o label.o match_bsr.o vtape_dev.o \ + ansi_label.o ebcdic.o lock.o \ + autochanger.o acquire.o mount.o parse_bsr.o \ + record_read.o record_write.o record_util.o \ + read_records.o reserve.o scan.o stored_conf.o spool.o \ + sd_plugins.o status.o vol_mgr.o wait.o # bextract -BEXTOBJS = bextract.o block.o device.o dev.o label.o record.o vtape.o \ - ansi_label.o dvd.o ebcdic.o lock.o \ +BEXTOBJS = bextract.o block.o block_util.o device.o \ + dev.o os.o file_dev.o tape_dev.o label.o vtape_dev.o \ + ansi_label.o ebcdic.o lock.o \ autochanger.o acquire.o mount.o match_bsr.o parse_bsr.o butil.o \ - read_record.o reserve.o scan.o stored_conf.o spool.o \ - sd_plugins.o vol_mgr.o wait.o + read_records.o record_read.o record_write.o record_util.o \ + reserve.o scan.o stored_conf.o spool.o \ + sd_plugins.o status.o vol_mgr.o wait.o # bscan -SCNOBJS = bscan.o block.o device.o dev.o label.o vtape.o \ - ansi_label.o dvd.o ebcdic.o lock.o \ - autochanger.o acquire.o mount.o record.o match_bsr.o parse_bsr.o \ - butil.o read_record.o scan.o reserve.o stored_conf.o spool.o \ - sd_plugins.o vol_mgr.o wait.o +SCNOBJS = bscan.o block.o block_util.o device.o \ + dev.o os.o file_dev.o tape_dev.o label.o vtape_dev.o \ + ansi_label.o ebcdic.o lock.o \ + autochanger.o acquire.o mount.o \ + record_read.o record_write.o read_records.o record_util.o \ + match_bsr.o parse_bsr.o \ + butil.o scan.o reserve.o stored_conf.o spool.o \ + sd_plugins.o status.o vol_mgr.o wait.o # bcopy -COPYOBJS = bcopy.o block.o device.o dev.o label.o vtape.o \ - ansi_label.o dvd.o ebcdic.o lock.o \ - autochanger.o acquire.o mount.o record.o match_bsr.o parse_bsr.o \ - butil.o read_record.o reserve.o \ - sd_plugins.o scan.o stored_conf.o spool.o vol_mgr.o wait.o +COPYOBJS = bcopy.o block.o block_util.o device.o \ + dev.o os.o file_dev.o tape_dev.o label.o vtape_dev.o \ + ansi_label.o ebcdic.o lock.o \ + autochanger.o acquire.o mount.o \ + record_read.o record_write.o read_records.o record_util.o \ + match_bsr.o parse_bsr.o butil.o reserve.o \ + sd_plugins.o scan.o status.o stored_conf.o spool.o \ + vol_mgr.o wait.o @@ -76,7 +91,8 @@ EXTRAOBJS = @OBJLIST@ CAP_LIBS = @CAP_LIBS@ ZLIBS=@ZLIBS@ -LZOLIBS = @LZOLIBS@ +LZO_LIBS= @LZO_LIBS@ +LZO_INC= @LZO_INC@ .SUFFIXES: .c .o @@ -127,11 +143,11 @@ bls: Makefile $(BLSOBJS) ../findlib/libbacfind$(DEFAULT_ARCHIVE_TYPE) ../lib/lib bextract.o: bextract.c @echo "Compiling $<" $(NO_ECHO)$(CXX) $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) \ - -I$(basedir) $(DINCLUDE) $(CFLAGS) $< + -I$(basedir) $(DINCLUDE) $(CFLAGS) $(LZO_INC) $< bextract: Makefile $(BEXTOBJS) ../findlib/libbacfind$(DEFAULT_ARCHIVE_TYPE) ../lib/libbaccfg$(DEFAULT_ARCHIVE_TYPE) ../lib/libbac$(DEFAULT_ARCHIVE_TYPE) @echo "Compiling $<" - $(LIBTOOL_LINK) $(CXX) $(TTOOL_LDFLAGS) $(LDFLAGS) -L../lib -L../findlib -o $@ $(BEXTOBJS) $(DLIB) $(ZLIBS) $(LZOLIBS) \ + $(LIBTOOL_LINK) $(CXX) $(TTOOL_LDFLAGS) $(LDFLAGS) -L../lib -L../findlib -o $@ $(BEXTOBJS) $(DLIB) $(ZLIBS) $(LZO_LIBS) \ -lbacfind -lbaccfg -lbac -lm $(LIBS) $(GETTEXT_LIBS) $(OPENSSL_LIBS) bscan.o: bscan.c diff --git a/bacula/src/stored/acquire.c b/bacula/src/stored/acquire.c index ef31f74f62..a64b14da63 100644 --- a/bacula/src/stored/acquire.c +++ b/bacula/src/stored/acquire.c @@ -1,34 +1,22 @@ /* - Bacula(R) - The Network Backup Solution - - Copyright (C) 2002-2013 Free Software Foundation Europe e.V. - - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. - - Bacula(R) is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. + Bacula® - The Network Backup Solution + + Copyright (C) 2002-2014 Free Software Foundation Europe e.V. + + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. + + Bacula® is a registered trademark of Kern Sibbald. */ /* * Routines to acquire and release a device for read/write * - * Kern Sibbald, August MMII + * Written by Kern Sibbald, August MMII * */ @@ -38,13 +26,11 @@ static int const rdbglvl = 100; /* Forward referenced functions */ -static void attach_dcr_to_dev(DCR *dcr); -static void detach_dcr_from_dev(DCR *dcr); static void set_dcr_from_vol(DCR *dcr, VOL_LIST *vol); /********************************************************************* - * Acquire device for reading. - * The drive should have previously been reserved by calling + * Acquire device for reading. + * The drive should have previously been reserved by calling * reserve_device_for_read(). We read the Volume label from the block and * leave the block pointers just after the label. * @@ -62,7 +48,7 @@ bool acquire_device_for_read(DCR *dcr) int i; int vol_label_status; int retry = 0; - + Enter(rdbglvl); dev = dcr->dev; dev->Lock_read_acquire(); @@ -71,7 +57,7 @@ bool acquire_device_for_read(DCR *dcr) dev->dblock(BST_DOING_ACQUIRE); if (dev->num_writers > 0) { - Jmsg2(jcr, M_FATAL, 0, _("Acquire read: num_writers=%d not zero. Job %d canceled.\n"), + Jmsg2(jcr, M_FATAL, 0, _("Acquire read: num_writers=%d not zero. Job %d canceled.\n"), dev->num_writers, jcr->JobId); goto get_out; } @@ -80,7 +66,7 @@ bool acquire_device_for_read(DCR *dcr) vol = jcr->VolList; if (!vol) { char ed1[50]; - Jmsg(jcr, M_FATAL, 0, _("No volumes specified for reading. Job %s canceled.\n"), + Jmsg(jcr, M_FATAL, 0, _("No volumes specified for reading. Job %s canceled.\n"), edit_int64(jcr->JobId, ed1)); goto get_out; } @@ -91,12 +77,17 @@ bool acquire_device_for_read(DCR *dcr) if (!vol) { Jmsg(jcr, M_FATAL, 0, _("Logic error: no next volume to read. Numvol=%d Curvol=%d\n"), jcr->NumReadVolumes, jcr->CurReadVolume); - goto get_out; /* should not happen */ + goto get_out; /* should not happen */ } set_dcr_from_vol(dcr, vol); + if (generate_plugin_event(jcr, bsdEventDeviceOpen, dcr) != bRC_OK) { + Jmsg(jcr, M_FATAL, 0, _("generate_plugin_event(bsdEventDeviceOpen) Failed\n")); + goto get_out; + } + Dmsg2(rdbglvl, "Want Vol=%s Slot=%d\n", vol->VolumeName, vol->Slot); - + /* * If the MediaType requested for this volume is not the * same as the current drive, we attempt to find the same @@ -115,12 +106,16 @@ bool acquire_device_for_read(DCR *dcr) DIRSTORE *store; int stat; - Jmsg3(jcr, M_INFO, 0, _("Changing read device. Want Media Type=\"%s\" have=\"%s\"\n" - " device=%s\n"), - dcr->media_type, dev->device->media_type, dev->print_name()); - Dmsg3(rdbglvl, "Changing read device. Want Media Type=\"%s\" have=\"%s\"\n" - " device=%s\n", - dcr->media_type, dev->device->media_type, dev->print_name()); + Jmsg4(jcr, M_INFO, 0, _("Changing read device. Want Media Type=\"%s\" have=\"%s\"\n" + " %s device=%s\n"), + dcr->media_type, dev->device->media_type, dev->print_type(), + dev->print_name()); + Dmsg4(rdbglvl, "Changing read device. Want Media Type=\"%s\" have=\"%s\"\n" + " %s device=%s\n", + dcr->media_type, dev->device->media_type, + dev->print_type(), dev->print_name()); + + generate_plugin_event(jcr, bsdEventDeviceClose, dcr); dev->dunblock(DEV_UNLOCKED); @@ -133,14 +128,14 @@ bool acquire_device_for_read(DCR *dcr) rctx.device_name = vol->device; store = new DIRSTORE; memset(store, 0, sizeof(DIRSTORE)); - store->name[0] = 0; /* No dir name */ + store->name[0] = 0; /* No storage name */ bstrncpy(store->media_type, vol->MediaType, sizeof(store->media_type)); bstrncpy(store->pool_name, dcr->pool_name, sizeof(store->pool_name)); bstrncpy(store->pool_type, dcr->pool_type, sizeof(store->pool_type)); store->append = false; rctx.store = store; clean_device(dcr); /* clean up the dcr */ - + /* * Search for a new device */ @@ -156,17 +151,22 @@ bool acquire_device_for_read(DCR *dcr) dcr->dev->Lock_read_acquire(); /* lock new one */ dev->Unlock_read_acquire(); /* release old one */ dev = dcr->dev; /* get new device pointer */ - dev->dblock(BST_DOING_ACQUIRE); + dev->dblock(BST_DOING_ACQUIRE); dcr->VolumeName[0] = 0; - Jmsg(jcr, M_INFO, 0, _("Media Type change. New read device %s chosen.\n"), - dev->print_name()); - Dmsg1(50, "Media Type change. New read device %s chosen.\n", dev->print_name()); + Jmsg(jcr, M_INFO, 0, _("Media Type change. New read %s device %s chosen.\n"), + dev->print_type(), dev->print_name()); + Dmsg2(50, "Media Type change. New read %s device %s chosen.\n", + dev->print_type(), dev->print_name()); + if (generate_plugin_event(jcr, bsdEventDeviceOpen, dcr) != bRC_OK) { + Jmsg(jcr, M_FATAL, 0, _("generate_plugin_event(bsdEventDeviceOpen) Failed\n")); + goto get_out; + } bstrncpy(dcr->VolumeName, vol->VolumeName, sizeof(dcr->VolumeName)); dcr->setVolCatName(vol->VolumeName); bstrncpy(dcr->media_type, vol->MediaType, sizeof(dcr->media_type)); dcr->VolCatInfo.Slot = vol->Slot; - dcr->VolCatInfo.InChanger = vol->Slot > 0; + dcr->VolCatInfo.InChanger = vol->Slot > 0; bstrncpy(dcr->pool_name, store->pool_name, sizeof(dcr->pool_name)); bstrncpy(dcr->pool_type, store->pool_type, sizeof(dcr->pool_type)); } else { @@ -196,12 +196,12 @@ bool acquire_device_for_read(DCR *dcr) /* Volume info is always needed because of VolParts */ Dmsg1(rdbglvl, "dir_get_volume_info vol=%s\n", dcr->VolumeName); if (!dir_get_volume_info(dcr, GET_VOL_INFO_FOR_READ)) { - Dmsg2(rdbglvl, "dir_get_vol_info failed for vol=%s: %s\n", + Dmsg2(rdbglvl, "dir_get_vol_info failed for vol=%s: %s\n", dcr->VolumeName, jcr->errmsg); Jmsg1(jcr, M_WARNING, 0, "Read acquire: %s", jcr->errmsg); } dev->set_load(); /* set to load volume */ - + for ( ;; ) { /* If not polling limit retries */ if (!dev->poll && retry++ > 10) { @@ -216,8 +216,8 @@ bool acquire_device_for_read(DCR *dcr) } dcr->do_unload(); - dcr->do_swapping(false/*!is_writing*/); - dcr->do_load(false /*!is_writing*/); + dcr->do_swapping(SD_READ); + dcr->do_load(SD_READ); set_dcr_from_vol(dcr, vol); /* refresh dcr with desired volume info */ /* @@ -228,13 +228,13 @@ bool acquire_device_for_read(DCR *dcr) Dmsg1(rdbglvl, "open vol=%s\n", dcr->VolumeName); if (!dev->open(dcr, OPEN_READ_ONLY)) { if (!dev->poll) { - Jmsg3(jcr, M_WARNING, 0, _("Read open device %s Volume \"%s\" failed: ERR=%s\n"), - dev->print_name(), dcr->VolumeName, dev->bstrerror()); + Jmsg4(jcr, M_WARNING, 0, _("Read open %s device %s Volume \"%s\" failed: ERR=%s\n"), + dev->print_type(), dev->print_name(), dcr->VolumeName, dev->bstrerror()); } goto default_path; } Dmsg1(rdbglvl, "opened dev %s OK\n", dev->print_name()); - + /* Read Volume Label */ Dmsg0(rdbglvl, "calling read-vol-label\n"); vol_label_status = read_dev_volume_label(dcr); @@ -255,8 +255,11 @@ bool acquire_device_for_read(DCR *dcr) Jmsg(jcr, M_WARNING, 0, "Read acquire: %s", jcr->errmsg); } goto default_path; + case VOL_TYPE_ERROR: + Jmsg(jcr, M_FATAL, 0, dev->errmsg); + goto get_out; case VOL_NAME_ERROR: - Dmsg3(rdbglvl, "Vol name=%s want=%s drv=%s.\n", dev->VolHdr.VolumeName, + Dmsg3(rdbglvl, "Vol name=%s want=%s drv=%s.\n", dev->VolHdr.VolumeName, dcr->VolumeName, dev->print_name()); if (dev->is_volume_to_unload()) { goto default_path; @@ -264,7 +267,7 @@ bool acquire_device_for_read(DCR *dcr) dev->set_unload(); /* force unload of unwanted tape */ if (!unload_autochanger(dcr, -1)) { /* at least free the device so we can re-open with correct volume */ - dev->close(); + dev->close(); free_volume(dev); } dev->set_load(); @@ -274,7 +277,7 @@ bool acquire_device_for_read(DCR *dcr) default_path: Dmsg0(rdbglvl, "default path\n"); tape_previously_mounted = true; - + /* * If the device requires mount, close it, so the device can be ejected. */ @@ -282,29 +285,29 @@ default_path: dev->close(); free_volume(dev); } - + /* Call autochanger only once unless ask_sysop called */ if (try_autochanger) { int stat; Dmsg2(rdbglvl, "calling autoload Vol=%s Slot=%d\n", dcr->VolumeName, dcr->VolCatInfo.Slot); - stat = autoload_device(dcr, 0, NULL); + stat = autoload_device(dcr, SD_READ, NULL); if (stat > 0) { try_autochanger = false; continue; /* try reading volume mounted */ } } - + /* Mount a specific volume and no other */ Dmsg0(rdbglvl, "calling dir_ask_sysop\n"); - if (!dir_ask_sysop_to_mount_volume(dcr, ST_READ)) { + if (!dir_ask_sysop_to_mount_volume(dcr, SD_READ)) { goto get_out; /* error return */ } /* Volume info is always needed because of VolParts */ Dmsg1(150, "dir_get_volume_info vol=%s\n", dcr->VolumeName); if (!dir_get_volume_info(dcr, GET_VOL_INFO_FOR_READ)) { - Dmsg2(150, "dir_get_vol_info failed for vol=%s: %s\n", + Dmsg2(150, "dir_get_vol_info failed for vol=%s: %s\n", dcr->VolumeName, jcr->errmsg); Jmsg1(jcr, M_WARNING, 0, "Read acquire: %s", jcr->errmsg); } @@ -318,24 +321,28 @@ default_path: } /* end for loop */ if (!ok) { - Jmsg1(jcr, M_FATAL, 0, _("Too many errors trying to mount device %s for reading.\n"), - dev->print_name()); + Jmsg2(jcr, M_FATAL, 0, _("Too many errors trying to mount %s device %s for reading.\n"), + dev->print_type(), dev->print_name()); goto get_out; } dev->clear_append(); dev->set_read(); jcr->sendJobStatus(JS_Running); - Jmsg(jcr, M_INFO, 0, _("Ready to read from volume \"%s\" on device %s.\n"), - dcr->VolumeName, dev->print_name()); + Jmsg(jcr, M_INFO, 0, _("Ready to read from volume \"%s\" on %s device %s.\n"), + dcr->VolumeName, dev->print_type(), dev->print_name()); get_out: dev->Lock(); dcr->clear_reserved(); - /* - * Normally we are blocked, but in at least one error case above + /* If failed and not writing plugin close device */ + if (!ok && dev->num_writers == 0 && dev->num_reserved() == 0) { + generate_plugin_event(jcr, bsdEventDeviceClose, dcr); + } + /* + * Normally we are blocked, but in at least one error case above * we are not blocked because we unsuccessfully tried changing - * devices. + * devices. */ if (dev->is_blocked()) { dev->dunblock(DEV_LOCKED); @@ -372,14 +379,14 @@ DCR *acquire_device_for_append(DCR *dcr) dev->Lock(); Dmsg1(100, "acquire_append device is %s\n", dev->is_tape()?"tape": (dev->is_dvd()?"DVD":"disk")); - - /* * With the reservation system, this should not happen */ if (dev->can_read()) { - Jmsg1(jcr, M_FATAL, 0, _("Want to append, but device %s is busy reading.\n"), dev->print_name()); - Dmsg1(200, "Want to append but device %s is busy reading.\n", dev->print_name()); + Mmsg2(jcr->errmsg, "Want to append but %s device %s is busy reading.\n", + dev->print_type(), dev->print_name()); + Jmsg(jcr, M_FATAL, 0, jcr->errmsg); + Dmsg0(50, jcr->errmsg); goto get_out; } @@ -411,10 +418,10 @@ DCR *acquire_device_for_append(DCR *dcr) if (!dcr->mount_next_write_volume()) { if (!job_canceled(jcr)) { /* Reduce "noise" -- don't print if job canceled */ - Jmsg(jcr, M_FATAL, 0, _("Could not ready device %s for append.\n"), - dev->print_name()); - Dmsg1(200, "Could not ready device %s for append.\n", - dev->print_name()); + Mmsg2(jcr->errmsg, _("Could not ready %s device %s for append.\n"), + dev->print_type(), dev->print_name()); + Jmsg(jcr, M_FATAL, 0, jcr->errmsg); + Dmsg0(50, jcr->errmsg); } dev->Lock(); unblock_device(dev); @@ -425,13 +432,20 @@ DCR *acquire_device_for_append(DCR *dcr) unblock_device(dev); } + if (generate_plugin_event(jcr, bsdEventDeviceOpen, dcr) != bRC_OK) { + Mmsg0(jcr->errmsg, _("generate_plugin_event(bsdEventDeviceOpen) Failed\n")); + Jmsg(jcr, M_FATAL, 0, jcr->errmsg); + Dmsg0(50, jcr->errmsg); + goto get_out; + } + dev->num_writers++; /* we are now a writer */ if (jcr->NumWriteVolumes == 0) { jcr->NumWriteVolumes = 1; } dev->VolCatInfo.VolCatJobs++; /* increment number of jobs on vol */ - Dmsg4(100, "=== nwriters=%d nres=%d vcatjob=%d dev=%s\n", - dev->num_writers, dev->num_reserved(), dev->VolCatInfo.VolCatJobs, + Dmsg4(100, "=== nwriters=%d nres=%d vcatjob=%d dev=%s\n", + dev->num_writers, dev->num_reserved(), dev->VolCatInfo.VolCatJobs, dev->print_name()); dir_update_volume_info(dcr, false, false); /* send Volume info to Director */ ok = true; @@ -462,6 +476,7 @@ bool release_device(DCR *dcr) char tbuf[100]; int was_blocked = BST_NOT_BLOCKED; + dev->Lock(); if (!dev->is_blocked()) { block_device(dev, BST_RELEASING); @@ -477,6 +492,7 @@ bool release_device(DCR *dcr) if (dev->can_read()) { VOLUME_CAT_INFO *vol = &dev->VolCatInfo; + generate_plugin_event(jcr, bsdEventDeviceClose, dcr); dev->clear_read(); /* clear read bit */ Dmsg2(150, "dir_update_vol_info. label=%d Vol=%s\n", dev->is_labeled(), vol->VolCatName); @@ -486,7 +502,7 @@ bool release_device(DCR *dcr) volume_unused(dcr); } } else if (dev->num_writers > 0) { - /* + /* * Note if WEOT is set, we are at the end of the tape * and may not be positioned correctly, so the * job_media_record and update_vol_info have already been @@ -495,7 +511,7 @@ bool release_device(DCR *dcr) dev->num_writers--; Dmsg1(100, "There are %d writers in release_device\n", dev->num_writers); if (dev->is_labeled()) { - Dmsg2(200, "dir_create_jobmedia. Release vol=%s dev=%s\n", + Dmsg2(200, "dir_create_jobmedia. Release vol=%s dev=%s\n", dev->getVolCatName(), dev->print_name()); if (!dev->at_weot() && !dir_create_jobmedia_record(dcr)) { Jmsg2(jcr, M_FATAL, 0, _("Could not create JobMedia record for Volume=\"%s\" Job=%s\n"), @@ -507,31 +523,33 @@ bool release_device(DCR *dcr) write_ansi_ibm_labels(dcr, ANSI_EOF_LABEL, dev->VolHdr.VolumeName); } if (!dev->at_weot()) { - dev->VolCatInfo.VolCatFiles = dev->file; /* set number of files */ + dev->VolCatInfo.VolCatFiles = dev->get_file(); /* set number of files */ /* Note! do volume update before close, which zaps VolCatInfo */ dir_update_volume_info(dcr, false, false); /* send Volume info to Director */ - Dmsg2(200, "dir_update_vol_info. Release vol=%s dev=%s\n", + Dmsg2(200, "dir_update_vol_info. Release vol=%s dev=%s\n", dev->getVolCatName(), dev->print_name()); } if (dev->num_writers == 0) { /* if not being used */ volume_unused(dcr); /* we obviously are not using the volume */ + generate_plugin_event(jcr, bsdEventDeviceClose, dcr); } } } else { - /* + /* * If we reach here, it is most likely because the job * has failed, since the device is not in read mode and * there are no writers. It was probably reserved. */ volume_unused(dcr); + generate_plugin_event(jcr, bsdEventDeviceClose, dcr); } Dmsg3(100, "%d writers, %d reserve, dev=%s\n", dev->num_writers, dev->num_reserved(), dev->print_name()); /* If no writers, close if file or !CAP_ALWAYS_OPEN */ if (dev->num_writers == 0 && (!dev->is_tape() || !dev->has_cap(CAP_ALWAYSOPEN))) { - dvd_remove_empty_part(dcr); /* get rid of any empty spool part */ + generate_plugin_event(jcr, bsdEventDeviceClose, dcr); dev->close(); free_volume(dev); } @@ -565,7 +583,7 @@ bool release_device(DCR *dcr) free_pool_memory(alert); } pthread_cond_broadcast(&dev->wait_next_vol); - Dmsg2(100, "JobId=%u broadcast wait_device_release at %s\n", + Dmsg2(100, "JobId=%u broadcast wait_device_release at %s\n", (uint32_t)jcr->JobId, bstrftimes(tbuf, sizeof(tbuf), (utime_t)time(NULL))); pthread_cond_broadcast(&wait_device_release); @@ -581,7 +599,7 @@ bool release_device(DCR *dcr) } if (dcr->keep_dcr) { - detach_dcr_from_dev(dcr); + dev->detach_dcr_from_dev(dcr); } else { free_dcr(dcr); } @@ -605,7 +623,7 @@ bool clean_device(DCR *dcr) /* * Create a new Device Control Record and attach * it to the device (if this is a real job). - * Note, this has been updated so that it can be called first + * Note, this has been updated so that it can be called first * without a DEVICE, then a second or third time with a DEVICE, * and each time, it should cleanup and point to the new device. * This should facilitate switching devices. @@ -615,41 +633,30 @@ bool clean_device(DCR *dcr) * this dcr in the right place * */ -DCR *new_dcr(JCR *jcr, DCR *dcr, DEVICE *dev) +DCR *new_dcr(JCR *jcr, DCR *dcr, DEVICE *dev, bool writing) { + DEVICE *odev; if (!dcr) { - int errstat; dcr = (DCR *)malloc(sizeof(DCR)); memset(dcr, 0, sizeof(DCR)); dcr->tid = pthread_self(); dcr->spool_fd = -1; - if ((errstat = pthread_mutex_init(&dcr->m_mutex, NULL)) != 0) { - berrno be; - dev->dev_errno = errstat; - Mmsg1(dev->errmsg, _("Unable to init mutex: ERR=%s\n"), be.bstrerror(errstat)); - Jmsg0(jcr, M_ERROR_TERM, 0, dev->errmsg); - } - if ((errstat = pthread_mutex_init(&dcr->r_mutex, NULL)) != 0) { - berrno be; - dev->dev_errno = errstat; - Mmsg1(dev->errmsg, _("Unable to init r_mutex: ERR=%s\n"), be.bstrerror(errstat)); - Jmsg0(jcr, M_ERROR_TERM, 0, dev->errmsg); - } } dcr->jcr = jcr; /* point back to jcr */ + odev = dcr->dev; + if (dcr->attached_to_dev && odev) { + Dmsg2(100, "Detach 0x%x from olddev %s\n", dcr, odev->print_name()); + odev->detach_dcr_from_dev(dcr); + } + ASSERT2(!dcr->attached_to_dev, "DCR is attached. Wrong!"); /* Set device information, possibly change device */ if (dev) { - if (dcr->block) { - free_block(dcr->block); - } + dcr->free_blocks(); dcr->block = new_block(dev); if (dcr->rec) { free_record(dcr->rec); } dcr->rec = new_record(); - if (dcr->attached_to_dev) { - detach_dcr_from_dev(dcr); - } /* Use job spoolsize prior to device spoolsize */ if (jcr && jcr->spool_size) { dcr->max_job_spool_size = jcr->spool_size; @@ -658,7 +665,13 @@ DCR *new_dcr(JCR *jcr, DCR *dcr, DEVICE *dev) } dcr->device = dev->device; dcr->set_dev(dev); - attach_dcr_to_dev(dcr); + Dmsg2(100, "Attach 0x%x to dev %s\n", dcr, dev->print_name()); + dev->attach_dcr_to_dev(dcr); + } + if (writing) { + dcr->set_writing(); + } else { + dcr->clear_writing(); } return dcr; } @@ -692,57 +705,46 @@ static void remove_dcr_from_dcrs(DCR *dcr) } #endif -static void attach_dcr_to_dev(DCR *dcr) +void DEVICE::attach_dcr_to_dev(DCR *dcr) { - DEVICE *dev; - JCR *jcr; + JCR *jcr = dcr->jcr; - P(dcr->m_mutex); - dev = dcr->dev; + Lock_dcrs(); jcr = dcr->jcr; if (jcr) Dmsg1(500, "JobId=%u enter attach_dcr_to_dev\n", (uint32_t)jcr->JobId); /* ***FIXME*** return error if dev not initiated */ - if (!dcr->attached_to_dev && dev->initiated && jcr && jcr->getJobType() != JT_SYSTEM) { - dev->Lock(); - Dmsg4(200, "Attach Jid=%d dcr=%p size=%d dev=%s\n", (uint32_t)jcr->JobId, - dcr, dev->attached_dcrs->size(), dev->print_name()); - dev->attached_dcrs->append(dcr); /* attach dcr to device */ - dev->Unlock(); + if (!dcr->attached_to_dev && initiated && jcr && jcr->getJobType() != JT_SYSTEM) { + Dmsg4(200, "Attach Jid=%d dcr=%p size=%d dev=%s\n", (uint32_t)jcr->JobId, + dcr, attached_dcrs->size(), print_name()); + attached_dcrs->append(dcr); /* attach dcr to device */ dcr->attached_to_dev = true; } - V(dcr->m_mutex); + Unlock_dcrs(); } -/* - * DCR is locked before calling this routine +/* + * Note!! Do not enter with dev->Lock() since unreserve_device() + * is going to lock it too. */ -static void locked_detach_dcr_from_dev(DCR *dcr) +void DEVICE::detach_dcr_from_dev(DCR *dcr) { - DEVICE *dev = dcr->dev; Dmsg0(500, "Enter detach_dcr_from_dev\n"); /* jcr is NULL in some cases */ + Lock(); + Lock_dcrs(); /* Detach this dcr only if attached */ - if (dcr->attached_to_dev && dev) { - dcr->unreserve_device(); - dev->Lock(); - Dmsg4(200, "Detach Jid=%d dcr=%p size=%d to dev=%s\n", (uint32_t)dcr->jcr->JobId, - dcr, dev->attached_dcrs->size(), dev->print_name()); + if (dcr->attached_to_dev) { + dcr->unreserve_device(true); + Dmsg4(200, "Detach Jid=%d dcr=%p size=%d to dev=%s\n", (uint32_t)dcr->jcr->JobId, + dcr, attached_dcrs->size(), print_name()); dcr->attached_to_dev = false; - if (dev->attached_dcrs->size()) { - dev->attached_dcrs->remove(dcr); /* detach dcr from device */ + if (attached_dcrs->size()) { + attached_dcrs->remove(dcr); /* detach dcr from device */ } -// remove_dcr_from_dcrs(dcr); /* remove dcr from jcr list */ - dev->Unlock(); } dcr->attached_to_dev = false; -} - - -static void detach_dcr_from_dev(DCR *dcr) -{ - P(dcr->m_mutex); - locked_detach_dcr_from_dev(dcr); - V(dcr->m_mutex); + Unlock_dcrs(); + Unlock(); } /* @@ -753,14 +755,13 @@ void free_dcr(DCR *dcr) { JCR *jcr; - P(dcr->m_mutex); jcr = dcr->jcr; - locked_detach_dcr_from_dev(dcr); - - if (dcr->block) { - free_block(dcr->block); + if (dcr->dev) { + dcr->dev->detach_dcr_from_dev(dcr); } + + dcr->free_blocks(); if (dcr->rec) { free_record(dcr->rec); } @@ -770,21 +771,18 @@ void free_dcr(DCR *dcr) if (jcr && jcr->read_dcr == dcr) { jcr->read_dcr = NULL; } - V(dcr->m_mutex); - pthread_mutex_destroy(&dcr->m_mutex); - pthread_mutex_destroy(&dcr->r_mutex); free(dcr); } static void set_dcr_from_vol(DCR *dcr, VOL_LIST *vol) { - /* - * Note, if we want to be able to work from a .bsr file only + /* + * Note, if we want to be able to work from a .bsr file only * for disaster recovery, we must "simulate" reading the catalog */ bstrncpy(dcr->VolumeName, vol->VolumeName, sizeof(dcr->VolumeName)); dcr->setVolCatName(vol->VolumeName); bstrncpy(dcr->media_type, vol->MediaType, sizeof(dcr->media_type)); dcr->VolCatInfo.Slot = vol->Slot; - dcr->VolCatInfo.InChanger = vol->Slot > 0; + dcr->VolCatInfo.InChanger = vol->Slot > 0; } diff --git a/bacula/src/stored/ansi_label.c b/bacula/src/stored/ansi_label.c index 8f6ca4965e..31a74e7a1d 100644 --- a/bacula/src/stored/ansi_label.c +++ b/bacula/src/stored/ansi_label.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2005-2009 Free Software Foundation Europe e.V. + Copyright (C) 2005-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * @@ -32,9 +20,6 @@ * * Kern Sibbald, MMV * - * - * - * Version $Id$ */ #include "bacula.h" /* pull in global headers */ @@ -51,7 +36,7 @@ static bool same_label_names(char *bacula_name, char *ansi_name); /* * We read an ANSI label and compare the Volume name. We require * a VOL1 record of 80 characters followed by a HDR1 record containing - * BACULA.DATA in the filename field. We then read up to 3 more + * BACULA.DATA in the filename field. We then read up to 3 more * header records (they are not required) and an EOF, at which * point, all is good. * @@ -61,9 +46,9 @@ static bool same_label_names(char *bacula_name, char *ansi_name); * VOL_IO_ERROR I/O error on read * VOL_NAME_ERROR Wrong name in VOL1 record * VOL_LABEL_ERROR Probably an ANSI label, but something wrong - * - */ -int read_ansi_ibm_label(DCR *dcr) + * + */ +int read_ansi_ibm_label(DCR *dcr) { DEVICE * volatile dev = dcr->dev; JCR *jcr = dcr->jcr; @@ -125,7 +110,7 @@ int read_ansi_ibm_label(DCR *dcr) Dmsg0(100, "Found IBM label.\n"); Dmsg0(100, "Got IBM VOL1 label\n"); } - } + } } if (!ok) { Dmsg0(100, "No VOL1 label\n"); @@ -135,10 +120,10 @@ int read_ansi_ibm_label(DCR *dcr) /* Compare Volume Names allow special wild card */ - if (VolName && *VolName && *VolName != '*') { + if (VolName && *VolName && *VolName != '*') { if (!same_label_names(VolName, &label[4])) { char *p = &label[4]; - char *q; + char *q; free_volume(dev); /* Store new Volume name */ @@ -206,7 +191,7 @@ int read_ansi_ibm_label(DCR *dcr) Dmsg0(100, "Too many records in ANSI/IBM label.\n"); Mmsg0(jcr->errmsg, _("Too many records in while reading ANSI/IBM label.\n")); return VOL_LABEL_ERROR; -} +} /* * ANSI/IBM VOL1 label @@ -214,7 +199,7 @@ int read_ansi_ibm_label(DCR *dcr) * Pos count Function What Bacula puts * 0-3 4 "VOL1" VOL1 * 4-9 6 Volume name Volume name - * 10-10 1 Access code + * 10-10 1 Access code * 11-36 26 Unused * * ANSI @@ -254,7 +239,7 @@ int read_ansi_ibm_label(DCR *dcr) * 5-9 5 Block length 32000 * 10-14 5 Rec length 32000 * 15-15 1 Density - * 16-16 1 Continued + * 16-16 1 Continued * 17-33 17 Job * 34-35 2 Recording * 36-36 1 cr/lf ctl @@ -264,7 +249,7 @@ int read_ansi_ibm_label(DCR *dcr) * 50-51 2 offset * 52-79 28 reserved - */ + */ static const char *labels[] = {"HDR", "EOF", "EOV"}; diff --git a/bacula/src/stored/append.c b/bacula/src/stored/append.c index 7b69a4c44e..fa3946fcd6 100644 --- a/bacula/src/stored/append.c +++ b/bacula/src/stored/append.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2012 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Append code for Storage daemon @@ -39,22 +27,15 @@ static char OK_data[] = "3000 OK data\n"; static char OK_append[] = "3000 OK append data\n"; -/* Forward referenced functions */ - - -/* - */ -void possible_incomplete_job(JCR *jcr, int32_t last_file_index) -{ -} /* - * Append Data sent from File daemon + * Append Data sent from Client (FD/SD) * */ bool do_append_data(JCR *jcr) { int32_t n; int32_t file_index, stream, last_file_index; + uint64_t stream_len; BSOCK *fd = jcr->file_bsock; bool ok = true; DEV_RECORD rec; @@ -64,15 +45,17 @@ bool do_append_data(JCR *jcr) char ec[50]; - if (!dcr) { - Jmsg0(jcr, M_FATAL, 0, _("DCR is NULL!!!\n")); + if (!dcr) { + pm_strcpy(jcr->errmsg, _("DCR is NULL!!!\n")); + Jmsg0(jcr, M_FATAL, 0, jcr->errmsg); return false; - } + } dev = dcr->dev; - if (!dev) { - Jmsg0(jcr, M_FATAL, 0, _("DEVICE is NULL!!!\n")); + if (!dev) { + pm_strcpy(jcr->errmsg, _("DEVICE is NULL!!!\n")); + Jmsg0(jcr, M_FATAL, 0, jcr->errmsg); return false; - } + } Dmsg1(100, "Start append data. res=%d\n", dev->num_reserved()); @@ -80,7 +63,8 @@ bool do_append_data(JCR *jcr) if (!fd->set_buffer_size(dcr->device->max_network_buffer_size, BNET_SETBUF_WRITE)) { jcr->setJobStatus(JS_ErrorTerminated); - Jmsg0(jcr, M_FATAL, 0, _("Unable to set network buffer size.\n")); + pm_strcpy(jcr->errmsg, _("Unable to set network buffer size.\n")); + Jmsg0(jcr, M_FATAL, 0, jcr->errmsg); return false; } @@ -91,6 +75,7 @@ bool do_append_data(JCR *jcr) jcr->sendJobStatus(JS_Running); + //ASSERT(dev->VolCatInfo.VolCatName[0]); if (dev->VolCatInfo.VolCatName[0] == 0) { Pmsg0(000, _("NULL Volume name. This shouldn't happen!!!\n")); } @@ -100,6 +85,7 @@ bool do_append_data(JCR *jcr) begin_attribute_spool(jcr); Dmsg0(100, "Just after acquire_device_for_append\n"); + //ASSERT(dev->VolCatInfo.VolCatName[0]); if (dev->VolCatInfo.VolCatName[0] == 0) { Pmsg0(000, _("NULL Volume name. This shouldn't happen!!!\n")); } @@ -112,6 +98,7 @@ bool do_append_data(JCR *jcr) jcr->setJobStatus(JS_ErrorTerminated); ok = false; } + //ASSERT(dev->VolCatInfo.VolCatName[0]); if (dev->VolCatInfo.VolCatName[0] == 0) { Pmsg0(000, _("NULL Volume name. This shouldn't happen!!!\n")); } @@ -149,44 +136,43 @@ bool do_append_data(JCR *jcr) * The stream header consists of the following: * file_index (sequential Bacula file index, base 1) * stream (Bacula number to distinguish parts of data) - * info (Info for Storage daemon -- compressed, encrypted, ...) - * info is not currently used, so is read, but ignored! + * stream_len (Expected length of this stream. This + * will be the size backed up if the file does not + * grow during the backup. */ if ((n=bget_msg(fd)) <= 0) { if (n == BNET_SIGNAL && fd->msglen == BNET_EOD) { + Dmsg0(200, "Got EOD on reading header.\n"); break; /* end of data */ } - Jmsg1(jcr, M_FATAL, 0, _("Error reading data header from FD. ERR=%s\n"), - fd->bstrerror()); - possible_incomplete_job(jcr, last_file_index); + Jmsg3(jcr, M_FATAL, 0, _("Error reading data header from FD. n=%d msglen=%d ERR=%s\n"), + n, fd->msglen, fd->bstrerror()); ok = false; break; } - if (sscanf(fd->msg, "%ld %ld", &file_index, &stream) != 2) { + if (sscanf(fd->msg, "%ld %ld %lld", &file_index, &stream, &stream_len) != 3) { Jmsg1(jcr, M_FATAL, 0, _("Malformed data header from FD: %s\n"), fd->msg); ok = false; - possible_incomplete_job(jcr, last_file_index); break; } - Dmsg2(890, "rerunning && file_index > 0 && last_file_index == 0) { goto fi_checked; } + Dmsg2(400, "file_index=%d last_file_index=%d\n", file_index, last_file_index); if (file_index > 0 && (file_index == last_file_index || file_index == last_file_index + 1)) { goto fi_checked; } - Jmsg2(jcr, M_FATAL, 0, _("FI=%d from FD not positive or sequential=%d\n"), + Jmsg2(jcr, M_FATAL, 0, _("FI=%d from FD not positive or last_FI=%d\n"), file_index, last_file_index); - possible_incomplete_job(jcr, last_file_index); ok = false; break; @@ -204,12 +190,13 @@ fi_checked: rec.VolSessionTime = jcr->VolSessionTime; rec.FileIndex = file_index; rec.Stream = stream; + rec.StreamLen = stream_len; rec.maskedStream = stream & STREAMMASK_TYPE; /* strip high bits */ rec.data_len = fd->msglen; rec.data = fd->msg; /* use message buffer */ Dmsg4(850, "before writ_rec FI=%d SessId=%d Strm=%s len=%d\n", - rec.FileIndex, rec.VolSessionId, + rec.FileIndex, rec.VolSessionId, stream_to_ascii(buf1, rec.Stream,rec.FileIndex), rec.data_len); @@ -227,14 +214,13 @@ fi_checked: send_attrs_to_dir(jcr, &rec); Dmsg0(650, "Enter bnet_get\n"); } - Dmsg1(650, "End read loop with FD. Stat=%d\n", n); + Dmsg2(650, "End read loop with FD. JobFiles=%d Stat=%d\n", jcr->JobFiles, n); if (fd->is_error()) { if (!jcr->is_job_canceled()) { Dmsg1(350, "Network read error from FD. ERR=%s\n", fd->bstrerror()); Jmsg1(jcr, M_FATAL, 0, _("Network error reading from FD. ERR=%s\n"), fd->bstrerror()); - possible_incomplete_job(jcr, last_file_index); } ok = false; break; @@ -245,9 +231,9 @@ fi_checked: jcr->setJobStatus(ok?JS_Terminated:JS_ErrorTerminated); if (ok) { - /* Terminate connection with FD */ + /* Terminate connection with Client */ fd->fsend(OK_append); - do_fd_commands(jcr); /* finish dialog with FD */ + do_client_commands(jcr); /* finish dialog with Client */ } else { fd->fsend("3999 Failed append\n"); } @@ -264,12 +250,10 @@ fi_checked: if (ok && !jcr->is_job_canceled()) { Jmsg1(jcr, M_FATAL, 0, _("Error writing end session label. ERR=%s\n"), dev->bstrerror()); - possible_incomplete_job(jcr, last_file_index); } jcr->setJobStatus(JS_ErrorTerminated); ok = false; } - Dmsg0(90, "back from write_end_session_label()\n"); /* Flush out final partial block of this session */ if (!dcr->write_block_to_device()) { /* Print only if ok and not cancelled to avoid spurious messages */ @@ -277,24 +261,19 @@ fi_checked: Jmsg2(jcr, M_FATAL, 0, _("Fatal append error on device %s: ERR=%s\n"), dev->print_name(), dev->bstrerror()); Dmsg0(100, _("Set ok=FALSE after write_block_to_device.\n")); - possible_incomplete_job(jcr, last_file_index); } jcr->setJobStatus(JS_ErrorTerminated); ok = false; } } - if (!ok && !jcr->is_JobStatus(JS_Incomplete)) { + if (!ok) { discard_data_spool(dcr); } else { /* Note: if commit is OK, the device will remain blocked */ commit_data_spool(dcr); } - if (ok) { - ok = dvd_close_job(dcr); /* do DVD cleanup if any */ - } - /* * Don't use time_t for job_elapsed as time_t can be 32 or 64 bits, * and the subsequent Jmsg() editing will break @@ -308,14 +287,14 @@ fi_checked: Jmsg(dcr->jcr, M_INFO, 0, _("Elapsed time=%02d:%02d:%02d, Transfer rate=%s Bytes/second\n"), job_elapsed / 3600, job_elapsed % 3600 / 60, job_elapsed % 60, edit_uint64_with_suffix(jcr->JobBytes / job_elapsed, ec)); - + /* * Release the device -- and send final Vol info to DIR * and unlock it. */ release_device(dcr); - if ((!ok || jcr->is_job_canceled()) && !jcr->is_JobStatus(JS_Incomplete)) { + if (!ok || jcr->is_job_canceled()) { discard_attribute_spool(jcr); } else { commit_attribute_spool(jcr); @@ -331,7 +310,7 @@ fi_checked: /* Send attributes and digest to Director for Catalog */ bool send_attrs_to_dir(JCR *jcr, DEV_RECORD *rec) { - if (rec->maskedStream == STREAM_UNIX_ATTRIBUTES || + if (rec->maskedStream == STREAM_UNIX_ATTRIBUTES || rec->maskedStream == STREAM_UNIX_ATTRIBUTES_EX || rec->maskedStream == STREAM_RESTORE_OBJECT || crypto_digest_stream_type(rec->maskedStream) != CRYPTO_DIGEST_NONE) { @@ -340,7 +319,7 @@ bool send_attrs_to_dir(JCR *jcr, DEV_RECORD *rec) if (are_attributes_spooled(jcr)) { dir->set_spooling(); } - Dmsg0(850, "Send attributes to dir.\n"); + Dmsg1(850, "Send attributes to dir. FI=%d\n", rec->FileIndex); if (!dir_update_file_attributes(jcr->dcr, rec)) { Jmsg(jcr, M_FATAL, 0, _("Error updating file attributes. ERR=%s\n"), dir->bstrerror()); diff --git a/bacula/src/stored/askdir.c b/bacula/src/stored/askdir.c index 9a899275ab..f31a30f471 100644 --- a/bacula/src/stored/askdir.c +++ b/bacula/src/stored/askdir.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2012 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Subroutines to handle Catalog reqests sent to the Director @@ -53,16 +41,17 @@ static char FileAttributes[] = "UpdCat Job=%s FileAttributes "; /* Responses received from the Director */ static char OK_media[] = "1000 OK VolName=%127s VolJobs=%u VolFiles=%lu" - " VolBlocks=%lu VolBytes=%lld VolMounts=%lu VolErrors=%lu VolWrites=%lu" + " VolBlocks=%lu VolBytes=%lld VolMounts=%lu" + " VolErrors=%lu VolWrites=%lu" " MaxVolBytes=%lld VolCapacityBytes=%lld VolStatus=%20s" " Slot=%ld MaxVolJobs=%lu MaxVolFiles=%lu InChanger=%ld" " VolReadTime=%lld VolWriteTime=%lld EndFile=%lu EndBlock=%lu" - " VolParts=%lu LabelType=%ld MediaId=%lld\n"; + " VolParts=%lu LabelType=%ld MediaId=%lld ScratchPoolId=%lld\n"; static char OK_create[] = "1000 OK CreateJobMedia\n"; -static pthread_mutex_t vol_info_mutex = PTHREAD_MUTEX_INITIALIZER; +static bthread_mutex_t vol_info_mutex = BTHREAD_MUTEX_PRIORITY(PRIO_SD_VOL_INFO); #ifdef needed @@ -81,7 +70,7 @@ bool dir_update_device(JCR *jcr, DEVICE *dev) POOL_MEM dev_name, VolumeName, MediaType, ChangerName; DEVRES *device = dev->device; bool ok; - + pm_strcpy(dev_name, device->hdr.name); bash_spaces(dev_name); if (dev->is_labeled()) { @@ -98,15 +87,15 @@ bool dir_update_device(JCR *jcr, DEVICE *dev) } else { pm_strcpy(ChangerName, "*"); } - ok = dir->fsend(Device_update, + ok = dir->fsend(Device_update, jcr->Job, dev_name.c_str(), dev->can_append()!=0, - dev->can_read()!=0, dev->num_writers, + dev->can_read()!=0, dev->num_writers, dev->is_open()!=0, dev->is_labeled()!=0, - dev->is_offline()!=0, dev->reserved_device, + dev->is_offline()!=0, dev->reserved_device, dev->is_tape()?100000:1, - dev->autoselect, 0, + dev->autoselect, 0, ChangerName.c_str(), MediaType.c_str(), VolumeName.c_str()); Dmsg1(dbglvl, ">dird: %s\n", dir->msg); return ok; @@ -183,28 +172,36 @@ static bool do_get_volume_info(DCR *dcr) Dmsg1(dbglvl, "msg); n = sscanf(dir->msg, OK_media, vol.VolCatName, &vol.VolCatJobs, &vol.VolCatFiles, - &vol.VolCatBlocks, &vol.VolCatBytes, + &vol.VolCatBlocks, &vol.VolCatAmetaBytes, &vol.VolCatMounts, &vol.VolCatErrors, &vol.VolCatWrites, &vol.VolCatMaxBytes, &vol.VolCatCapacityBytes, vol.VolCatStatus, &vol.Slot, &vol.VolCatMaxJobs, &vol.VolCatMaxFiles, &InChanger, &vol.VolReadTime, &vol.VolWriteTime, &vol.EndFile, &vol.EndBlock, &vol.VolCatParts, - &vol.LabelType, &vol.VolMediaId); - if (n != 22) { - Dmsg3(dbglvl, "Bad response from Dir fields=%d, len=%d: %s", - n, dir->msglen, dir->msg); + &vol.LabelType, &vol.VolMediaId, &vol.VolScratchPoolId); + if (n != 23) { + Dmsg1(dbglvl, "get_volume_info failed: ERR=%s", dir->msg); + /* + * Note, we can get an error here either because there is + * a comm problem, or if the volume is not a suitable + * volume to use, so do not issue a Jmsg() here, do it + * in the calling routine. + */ Mmsg(jcr->errmsg, _("Error getting Volume info: %s"), dir->msg); return false; } vol.InChanger = InChanger; /* bool in structure */ vol.is_valid = true; + vol.VolCatBytes = vol.VolCatAmetaBytes; unbash_spaces(vol.VolCatName); bstrncpy(dcr->VolumeName, vol.VolCatName, sizeof(dcr->VolumeName)); dcr->VolCatInfo = vol; /* structure assignment */ Dmsg2(dbglvl, "do_reqest_vol_info return true slot=%d Volume=%s\n", vol.Slot, vol.VolCatName); + Dmsg3(dbglvl, "Dir returned VolCatAmetaBytes=%lld Status=%s Vol=%s\n", + vol.VolCatAmetaBytes, vol.VolCatStatus, vol.VolCatName); return true; } @@ -244,7 +241,7 @@ bool dir_get_volume_info(DCR *dcr, enum get_vol_info_rw writing) * Returns: true on success dcr->VolumeName is volume * reserve_volume() called on Volume name * false on failure dcr->VolumeName[0] == 0 - * also sets dcr->found_in_use if at least one + * also sets dcr->found_in_use if at least one * in use volume was found. * * Volume information returned in dcr @@ -257,11 +254,12 @@ bool dir_find_next_appendable_volume(DCR *dcr) bool rtn; char lastVolume[MAX_NAME_LENGTH]; - Dmsg2(dbglvl, "dir_find_next_appendable_volume: reserved=%d Vol=%s\n", + Dmsg2(dbglvl, "dir_find_next_appendable_volume: reserved=%d Vol=%s\n", dcr->is_reserved(), dcr->VolumeName); + Mmsg(jcr->errmsg, "Unknown error\n"); /* - * Try the twenty oldest or most available volumes. Note, + * Try the thirty oldest or most available volumes. Note, * the most available could already be mounted on another * drive, so we continue looking for a not in use Volume. */ @@ -269,7 +267,7 @@ bool dir_find_next_appendable_volume(DCR *dcr) P(vol_info_mutex); dcr->clear_found_in_use(); lastVolume[0] = 0; - for (int vol_index=1; vol_index < 20; vol_index++) { + for (int vol_index=1; vol_index < 30; vol_index++) { bash_spaces(dcr->media_type); bash_spaces(dcr->pool_name); dir->fsend(Find_media, jcr->Job, vol_index, dcr->pool_name, dcr->media_type); @@ -279,6 +277,8 @@ bool dir_find_next_appendable_volume(DCR *dcr) if (do_get_volume_info(dcr)) { /* Give up if we get the same volume name twice */ if (lastVolume[0] && strcmp(lastVolume, dcr->VolumeName) == 0) { + Mmsg(jcr->errmsg, "Director returned same volume name=%s twice.\n", + lastVolume); Dmsg1(dbglvl, "Got same vol = %s\n", lastVolume); break; } @@ -286,8 +286,12 @@ bool dir_find_next_appendable_volume(DCR *dcr) if (dcr->can_i_write_volume()) { Dmsg1(dbglvl, "Call reserve_volume for write. Vol=%s\n", dcr->VolumeName); if (reserve_volume(dcr, dcr->VolumeName) == NULL) { - Dmsg2(dbglvl, "Could not reserve volume %s on %s\n", dcr->VolumeName, - dcr->dev->print_name()); + Dmsg1(dbglvl, "%s", jcr->errmsg); + if (dcr->dev->must_wait()) { + rtn = false; + dcr->VolumeName[0] = 0; + goto get_out; + } continue; } Dmsg1(dbglvl, "dir_find_next_appendable_volume return true. vol=%s\n", @@ -295,6 +299,7 @@ bool dir_find_next_appendable_volume(DCR *dcr) rtn = true; goto get_out; } else { + Mmsg(jcr->errmsg, "Volume %s is in use.\n", dcr->VolumeName); Dmsg1(dbglvl, "Volume %s is in use.\n", dcr->VolumeName); /* If volume is not usable, it is in use by someone else */ dcr->set_found_in_use(); @@ -311,11 +316,20 @@ bool dir_find_next_appendable_volume(DCR *dcr) get_out: V(vol_info_mutex); unlock_volumes(); + if (!rtn && dcr->VolCatInfo.VolScratchPoolId != 0) { + Jmsg(jcr, M_WARNING, 0, "%s", jcr->errmsg); + Dmsg2(000, "!!!!!!!!! Volume=%s rejected ScratchPoolId=%lld\n", dcr->VolumeName, + dcr->VolCatInfo.VolScratchPoolId); + Dmsg1(000, "%s", jcr->errmsg); + //} else { + // Dmsg3(000, "Rtn=%d Volume=%s ScratchPoolId=%lld\n", rtn, dcr->VolumeName, + // dcr->VolCatInfo.VolScratchPoolId); + } return rtn; } -/** +/* * After writing a Volume, send the updated statistics * back to the director. The information comes from the * dev record. @@ -325,8 +339,8 @@ bool dir_update_volume_info(DCR *dcr, bool label, bool update_LastWritten) JCR *jcr = dcr->jcr; BSOCK *dir = jcr->dir_bsock; DEVICE *dev = dcr->dev; - VOLUME_CAT_INFO *vol = &dev->VolCatInfo; - char ed1[50], ed2[50], ed3[50], ed4[50], ed5[50], ed6[50]; + VOLUME_CAT_INFO *vol; + char ed1[50], ed4[50], ed5[50], ed6[50], ed7[50], ed8[50]; int InChanger; bool ok = false; POOL_MEM VolumeName; @@ -336,6 +350,7 @@ bool dir_update_volume_info(DCR *dcr, bool label, bool update_LastWritten) return true; } + vol = &dev->VolCatInfo; if (vol->VolCatName[0] == 0) { Jmsg0(jcr, M_FATAL, 0, _("NULL Volume name. This shouldn't happen!!!\n")); Pmsg0(000, _("NULL Volume name. This shouldn't happen!!!\n")); @@ -344,10 +359,10 @@ bool dir_update_volume_info(DCR *dcr, bool label, bool update_LastWritten) /* Lock during Volume update */ P(vol_info_mutex); - Dmsg1(dbglvl, "Update cat VolBytes=%lld\n", vol->VolCatBytes); + dev->Lock_VolCatInfo(); /* Just labeled or relabeled the tape */ if (label) { - bstrncpy(vol->VolCatStatus, "Append", sizeof(vol->VolCatStatus)); + dev->setVolCatStatus("Append"); } // if (update_LastWritten) { vol->VolLastWritten = time(NULL); @@ -357,33 +372,42 @@ bool dir_update_volume_info(DCR *dcr, bool label, bool update_LastWritten) InChanger = vol->InChanger; dir->fsend(Update_media, jcr->Job, VolumeName.c_str(), vol->VolCatJobs, vol->VolCatFiles, - vol->VolCatBlocks, edit_uint64(vol->VolCatBytes, ed1), + vol->VolCatBlocks, edit_uint64(vol->VolCatAmetaBytes, ed1), vol->VolCatMounts, vol->VolCatErrors, - vol->VolCatWrites, edit_uint64(vol->VolCatMaxBytes, ed2), - edit_uint64(vol->VolLastWritten, ed6), + vol->VolCatWrites, edit_uint64(vol->VolCatMaxBytes, ed4), + edit_uint64(vol->VolLastWritten, ed5), vol->VolCatStatus, vol->Slot, label, InChanger, /* bool in structure */ - edit_int64(vol->VolReadTime, ed3), - edit_int64(vol->VolWriteTime, ed4), - edit_uint64(vol->VolFirstWritten, ed5), + edit_int64(vol->VolReadTime, ed6), + edit_int64(vol->VolWriteTime, ed7), + edit_uint64(vol->VolFirstWritten, ed8), vol->VolCatParts); - Dmsg1(dbglvl, ">dird %s", dir->msg); + Dmsg1(100, ">dird %s", dir->msg); /* Do not lock device here because it may be locked from label */ if (!jcr->is_canceled()) { + /* + * We sent info directly from dev to the Director. + * What the Director sends back is first read into + * the dcr with do_get_volume_info() + */ if (!do_get_volume_info(dcr)) { Jmsg(jcr, M_FATAL, 0, "%s", jcr->errmsg); - Dmsg2(dbglvl, _("Didn't get vol info vol=%s: ERR=%s"), + Dmsg2(dbglvl, _("Didn't get vol info vol=%s: ERR=%s"), vol->VolCatName, jcr->errmsg); goto bail_out; } - Dmsg1(420, "get_volume_info() %s", dir->msg); + Dmsg1(100, "get_volume_info() %s", dir->msg); /* Update dev Volume info in case something changed (e.g. expired) */ - dev->VolCatInfo = dcr->VolCatInfo; + dcr->VolCatInfo.VolCatAmetaBytes = dev->VolCatInfo.VolCatAmetaBytes; + dcr->VolCatInfo.VolCatFiles = dev->VolCatInfo.VolCatFiles; + bstrncpy(vol->VolCatStatus, dcr->VolCatInfo.VolCatStatus, sizeof(vol->VolCatStatus)); + /* ***FIXME*** copy other fields that can change, if any */ ok = true; } bail_out: + dev->Unlock_VolCatInfo(); V(vol_info_mutex); return ok; } @@ -397,22 +421,27 @@ bool dir_create_jobmedia_record(DCR *dcr, bool zero) BSOCK *dir = jcr->dir_bsock; char ed1[50]; + if (!dcr->WroteVol) { + return true; /* nothing written to the Volume */ + } + /* If system job, do not update catalog */ if (jcr->getJobType() == JT_SYSTEM) { return true; } /* Throw out records where FI is zero -- i.e. nothing done */ - if (!zero && dcr->VolFirstIndex == 0 && + if (!zero && dcr->VolFirstIndex == 0 && (dcr->StartBlock != 0 || dcr->EndBlock != 0)) { - Dmsg0(dbglvl, "JobMedia FI=0 StartBlock!=0 record suppressed\n"); + Dmsg7(dbglvl, "Discard: JobMedia Vol=%s wrote=%d MediaId=%d FI=%d LI=%d StartBlock=%d EndBlock=%d Suppressed\n", + dcr->VolumeName, dcr->WroteVol, dcr->VolMediaId, + dcr->VolFirstIndex, dcr->VolLastIndex, dcr->StartBlock, dcr->EndBlock); return true; } - if (!dcr->WroteVol) { - return true; /* nothing written to tape */ - } - + Dmsg7(100, "JobMedia Vol=%s wrote=%d MediaId=%d FI=%d LI=%d StartBlock=%d EndBlock=%d Wrote\n", + dcr->VolumeName, dcr->WroteVol, dcr->VolMediaId, + dcr->VolFirstIndex, dcr->VolLastIndex, dcr->StartBlock, dcr->EndBlock); dcr->WroteVol = false; if (zero) { /* Send dummy place holder to avoid purging */ @@ -422,8 +451,8 @@ bool dir_create_jobmedia_record(DCR *dcr, bool zero) dir->fsend(Create_job_media, jcr->Job, dcr->VolFirstIndex, dcr->VolLastIndex, dcr->StartFile, dcr->EndFile, - dcr->StartBlock, dcr->EndBlock, - dcr->Copy, dcr->Stripe, + dcr->StartBlock, dcr->EndBlock, + dcr->Copy, dcr->Stripe, edit_uint64(dcr->VolMediaId, ed1)); } Dmsg1(dbglvl, ">dird %s", dir->msg); @@ -433,7 +462,7 @@ bool dir_create_jobmedia_record(DCR *dcr, bool zero) dir->bstrerror()); return false; } - Dmsg1(dbglvl, "msg); + Dmsg1(210, "msg); if (strcmp(dir->msg, OK_create) != 0) { Dmsg1(dbglvl, "Bad response from Dir: %s\n", dir->msg); Jmsg(jcr, M_FATAL, 0, _("Error creating JobMedia record: %s\n"), dir->msg); @@ -446,7 +475,7 @@ bool dir_create_jobmedia_record(DCR *dcr, bool zero) /** * Update File Attribute data * We do the following: - * 1. expand the bsock buffer to be large enough + * 1. expand the bsock buffer to be large enough * 2. Write a "header" into the buffer with serialized data * VolSessionId * VolSeesionTime @@ -482,6 +511,11 @@ bool dir_update_file_attributes(DCR *dcr, DEV_RECORD *rec) ser_bytes(rec->data, rec->data_len); dir->msglen = ser_length(dir->msg); Dmsg1(1800, ">dird %s\n", dir->msg); /* Attributes */ + if (rec->maskedStream == STREAM_UNIX_ATTRIBUTES || + rec->maskedStream == STREAM_UNIX_ATTRIBUTES_EX) { + Dmsg2(1500, "==== set_data_end FI=%ld %s\n", rec->FileIndex, rec->data); + dir->set_data_end(rec->FileIndex); /* set offset of valid data */ + } return dir->send(); } @@ -514,7 +548,7 @@ bool dir_ask_sysop_to_create_appendable_volume(DCR *dcr) if (job_canceled(jcr)) { return false; } - Dmsg0(dbglvl, "enter dir_ask_sysop_to_create_appendable_volume\n"); + Dmsg0(400, "enter dir_ask_sysop_to_create_appendable_volume\n"); ASSERT(dev->blocked()); for ( ;; ) { if (job_canceled(jcr)) { @@ -528,6 +562,7 @@ bool dir_ask_sysop_to_create_appendable_volume(DCR *dcr) if (got_vol) { goto get_out; } else { + dev->clear_wait(); if (stat == W_TIMEOUT || stat == W_MOUNT) { Mmsg(dev->errmsg, _( "Job %s is waiting. Cannot find any appendable volumes.\n" @@ -574,7 +609,7 @@ bool dir_ask_sysop_to_create_appendable_volume(DCR *dcr) get_out: jcr->sendJobStatus(JS_Running); - Dmsg0(dbglvl, "leave dir_ask_sysop_to_mount_create_appendable_volume\n"); + Dmsg0(dbglvl, "leave dir_ask_sysop_to_create_appendable_volume\n"); return true; } @@ -590,18 +625,18 @@ get_out: * Note, must create dev->errmsg on error return. * */ -bool dir_ask_sysop_to_mount_volume(DCR *dcr, int mode) +bool dir_ask_sysop_to_mount_volume(DCR *dcr, bool write_access) { int stat = W_TIMEOUT; DEVICE *dev = dcr->dev; JCR *jcr = dcr->jcr; - Dmsg0(dbglvl, "enter dir_ask_sysop_to_mount_volume\n"); + Dmsg0(400, "enter dir_ask_sysop_to_mount_volume\n"); if (!dcr->VolumeName[0]) { Mmsg0(dev->errmsg, _("Cannot request another volume: no volume name given.\n")); return false; } - ASSERT(dev->blocked()); + for ( ;; ) { if (job_canceled(jcr)) { Mmsg(dev->errmsg, _("Job %s canceled while waiting for mount on Storage Device %s.\n"), @@ -609,10 +644,10 @@ bool dir_ask_sysop_to_mount_volume(DCR *dcr, int mode) return false; } - if (dev->is_dvd()) { + if (dev->is_dvd()) { dev->unmount(0); } - + /* * If we are not polling, and the wait timeout or the * user explicitly did a mount, send him the message. @@ -620,36 +655,37 @@ bool dir_ask_sysop_to_mount_volume(DCR *dcr, int mode) */ if (!dev->poll && (stat == W_TIMEOUT || stat == W_MOUNT)) { char *msg; - if (mode == ST_APPEND) { - msg = _("Please mount append Volume \"%s\" or label a new one for:\n" + if (write_access) { + msg = _("%sPlease mount append Volume \"%s\" or label a new one for:\n" " Job: %s\n" " Storage: %s\n" " Pool: %s\n" " Media type: %s\n"); } else { - msg = _("Please mount read Volume \"%s\" for:\n" + msg = _("%sPlease mount read Volume \"%s\" for:\n" " Job: %s\n" " Storage: %s\n" " Pool: %s\n" " Media type: %s\n"); } - Jmsg(jcr, M_MOUNT, 0, msg, + Jmsg(jcr, M_MOUNT, 0, msg, + dev->is_nospace()?_("\n\nWARNING: device is full! Please add more disk space then ...\n\n"):"", dcr->VolumeName, jcr->Job, dev->print_name(), dcr->pool_name, dcr->media_type); - Dmsg3(dbglvl, "Mount \"%s\" on device \"%s\" for Job %s\n", + Dmsg3(400, "Mount \"%s\" on device \"%s\" for Job %s\n", dcr->VolumeName, dev->print_name(), jcr->Job); } jcr->sendJobStatus(JS_WaitMount); stat = wait_for_sysop(dcr); /* wait on device */ - Dmsg1(dbglvl, "Back from wait_for_sysop stat=%d\n", stat); + Dmsg1(100, "Back from wait_for_sysop stat=%d\n", stat); if (dev->poll) { - Dmsg1(dbglvl, "Poll timeout in mount vol on device %s\n", dev->print_name()); - Dmsg1(dbglvl, "Blocked=%s\n", dev->print_blocked()); + Dmsg1(100, "Poll timeout in mount vol on device %s\n", dev->print_name()); + Dmsg1(100, "Blocked=%s\n", dev->print_blocked()); goto get_out; } @@ -658,7 +694,7 @@ bool dir_ask_sysop_to_mount_volume(DCR *dcr, int mode) Mmsg(dev->errmsg, _("Max time exceeded waiting to mount Storage Device %s for Job %s\n"), dev->print_name(), jcr->Job); Jmsg(jcr, M_FATAL, 0, "%s", dev->errmsg); - Dmsg1(dbglvl, "Gave up waiting on device %s\n", dev->print_name()); + Dmsg1(400, "Gave up waiting on device %s\n", dev->print_name()); return false; /* exceeded maximum waits */ } continue; @@ -669,12 +705,12 @@ bool dir_ask_sysop_to_mount_volume(DCR *dcr, int mode) Jmsg(jcr, M_FATAL, 0, "%s", dev->errmsg); return false; } - Dmsg1(dbglvl, "Someone woke me for device %s\n", dev->print_name()); + Dmsg1(100, "Someone woke me for device %s\n", dev->print_name()); break; } get_out: jcr->sendJobStatus(JS_Running); - Dmsg0(dbglvl, "leave dir_ask_sysop_to_mount_volume\n"); + Dmsg0(100, "leave dir_ask_sysop_to_mount_volume\n"); return true; } diff --git a/bacula/src/stored/authenticate.c b/bacula/src/stored/authenticate.c index 0b7a97fa63..2289c30109 100644 --- a/bacula/src/stored/authenticate.c +++ b/bacula/src/stored/authenticate.c @@ -1,34 +1,22 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2011 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Authenticate caller * - * Kern Sibbald, October 2000 + * Written by Kern Sibbald, October 2000 * */ @@ -36,11 +24,26 @@ #include "bacula.h" #include "stored.h" +extern STORES *me; /* our Global resource */ + + const int dbglvl = 50; +/* Version at end of Hello + * prior to 06Aug13 no version + * 1 06Aug13 - added comm line compression + * 2 13Dec13 - added api version to status command + * 3 22Feb14 - Added SD->SD with SD_Calls_Client + */ +#define SD_VERSION 3 +#define FD_VERSION 10 +static char hello_sd[] = "Hello Bacula SD: Start Job %s %d %d\n"; + + static char Dir_sorry[] = "3999 No go\n"; -static char OK_hello[] = "3000 OK Hello\n"; +static char OK_hello[] = "3000 OK Hello %d\n"; +static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; /********************************************************************* * @@ -55,6 +58,7 @@ static int authenticate(int rcode, BSOCK *bs, JCR* jcr) int compatible = true; /* require md5 compatible DIR */ bool auth_success = false; alist *verify_list = NULL; + int dir_version = 0; if (rcode != R_DIRECTOR) { Dmsg1(dbglvl, "I only authenticate Directors, not %d\n", rcode); @@ -71,18 +75,22 @@ static int authenticate(int rcode, BSOCK *bs, JCR* jcr) dirname = get_pool_memory(PM_MESSAGE); dirname = check_pool_memory_size(dirname, bs->msglen); - if (sscanf(bs->msg, "Hello Director %127s calling", dirname) != 1) { + if (sscanf(bs->msg, "Hello SD: Bacula Director %127s calling %d", + dirname, &dir_version) != 2 && + sscanf(bs->msg, "Hello SD: Bacula Director %127s calling", + dirname) != 1) { bs->msg[100] = 0; Dmsg2(dbglvl, "Bad Hello command from Director at %s: %s\n", bs->who(), bs->msg); Jmsg2(jcr, M_FATAL, 0, _("Bad Hello command from Director at %s: %s\n"), bs->who(), bs->msg); + free_pool_memory(dirname); return 0; } director = NULL; unbash_spaces(dirname); foreach_res(director, rcode) { - if (strcmp(director->hdr.name, dirname) == 0) { + if (strcasecmp(director->hdr.name, dirname) == 0) { break; } } @@ -119,10 +127,10 @@ static int authenticate(int rcode, BSOCK *bs, JCR* jcr) if (auth_success) { auth_success = cram_md5_respond(bs, director->password, &tls_remote_need, &compatible); if (!auth_success) { - Dmsg1(dbglvl, "cram_get_auth failed with %s\n", bs->who()); + Dmsg1(dbglvl, "cram_get_auth respond failed with Director %s\n", bs->who()); } } else { - Dmsg1(dbglvl, "cram_auth failed with %s\n", bs->who()); + Dmsg1(dbglvl, "cram_auth challenge failed with Director %s\n", bs->who()); } if (!auth_success) { @@ -134,7 +142,7 @@ static int authenticate(int rcode, BSOCK *bs, JCR* jcr) /* Verify that the remote host is willing to meet our TLS requirements */ if (tls_remote_need < tls_local_need && tls_local_need != BNET_TLS_OK && tls_remote_need != BNET_TLS_OK) { - Jmsg0(jcr, M_FATAL, 0, _("Authorization problem: Remote server did not" + Jmsg0(jcr, M_FATAL, 0, _("Authorization problem: Remote server did not" " advertize required TLS support.\n")); Dmsg2(dbglvl, "remote_need=%d local_need=%d\n", tls_remote_need, tls_local_need); auth_success = false; @@ -186,13 +194,13 @@ int authenticate_director(JCR *jcr) BSOCK *dir = jcr->dir_bsock; if (!authenticate(R_DIRECTOR, dir, jcr)) { - dir->fsend("%s", Dir_sorry); + dir->fsend(Dir_sorry); Dmsg1(dbglvl, "Unable to authenticate Director at %s.\n", dir->who()); Jmsg1(jcr, M_ERROR, 0, _("Unable to authenticate Director at %s.\n"), dir->who()); bmicrosleep(5, 0); return 0; } - return dir->fsend("%s", OK_hello); + return dir->fsend(OK_hello, SD_VERSION); } int authenticate_filed(JCR *jcr) @@ -224,15 +232,17 @@ int authenticate_filed(JCR *jcr) /* Timeout Hello after 5 mins */ btimer_t *tid = start_bsock_timer(fd, AUTH_TIMEOUT); /* Challenge FD */ + Dmsg0(050, "Challenge FD\n"); auth_success = cram_md5_challenge(fd, jcr->sd_auth_key, tls_local_need, compatible); if (auth_success) { /* Respond to his challenge */ + Dmsg0(050, "Respond to FD challenge\n"); auth_success = cram_md5_respond(fd, jcr->sd_auth_key, &tls_remote_need, &compatible); if (!auth_success) { - Dmsg1(dbglvl, "Respond cram-get-auth failed with %s\n", fd->who()); + Dmsg1(dbglvl, "Respond cram-get-auth respond failed with FD: %s\n", fd->who()); } } else { - Dmsg1(dbglvl, "Challenge cram-auth failed with %s\n", fd->who()); + Dmsg1(dbglvl, "Challenge cram-auth failed with FD: %s\n", fd->who()); } if (!auth_success) { @@ -245,7 +255,7 @@ int authenticate_filed(JCR *jcr) /* Verify that the remote host is willing to meet our TLS requirements */ if (tls_remote_need < tls_local_need && tls_local_need != BNET_TLS_OK && tls_remote_need != BNET_TLS_OK) { - Jmsg(jcr, M_FATAL, 0, _("Authorization problem: Remote server did not" + Jmsg(jcr, M_FATAL, 0, _("Authorization problem: Remote server did not" " advertize required TLS support.\n")); Dmsg2(dbglvl, "remote_need=%d local_need=%d\n", tls_remote_need, tls_local_need); auth_success = false; @@ -281,5 +291,122 @@ auth_fatal: fd->who()); } jcr->authenticated = auth_success; + if (auth_success && jcr->FDVersion >= 5) { + /* Send hello and our version to FD */ + fd->fsend(OK_hello, SD_VERSION); + } + return auth_success; +} + +/* + * First prove our identity to the Storage daemon, then + * make him prove his identity. + */ +bool authenticate_storagedaemon(JCR *jcr, char *Job) +{ + BSOCK *sd = jcr->store_bsock; + int tls_local_need = BNET_TLS_NONE; + int tls_remote_need = BNET_TLS_NONE; + int compatible = true; + bool auth_success = false; + int sd_version = 0; + + btimer_t *tid = start_bsock_timer(sd, AUTH_TIMEOUT); + + /* TLS Requirement */ + if (have_tls && me->tls_enable) { + if (me->tls_require) { + tls_local_need = BNET_TLS_REQUIRED; + } else { + tls_local_need = BNET_TLS_OK; + } + } + + if (me->tls_authenticate) { + tls_local_need = BNET_TLS_REQUIRED; + } + + if (job_canceled(jcr)) { + auth_success = false; /* force quick exit */ + goto auth_fatal; + } + + + bash_spaces(Job); + sd->fsend(hello_sd, Job, FD_VERSION, SD_VERSION); + Dmsg1(100, "Send to SD: %s\n", sd->msg); + + /* Respond to SD challenge */ + Dmsg0(050, "Respond to SD challenge\n"); + auth_success = cram_md5_respond(sd, jcr->sd_auth_key, &tls_remote_need, &compatible); + if (job_canceled(jcr)) { + auth_success = false; /* force quick exit */ + goto auth_fatal; + } + if (!auth_success) { + Dmsg1(dbglvl, "cram_respond failed for SD: %s\n", sd->who()); + } else { + /* Now challenge him */ + Dmsg0(050, "Challenge SD\n"); + auth_success = cram_md5_challenge(sd, jcr->sd_auth_key, tls_local_need, compatible); + if (!auth_success) { + Dmsg1(dbglvl, "cram_challenge failed for SD: %s\n", sd->who()); + } + } + + if (!auth_success) { + Jmsg(jcr, M_FATAL, 0, _("Authorization key rejected by Storage daemon.\n" + "Please see " MANUAL_AUTH_URL " for help.\n")); + goto auth_fatal; + } else { + Dmsg0(050, "Authorization with SD is OK\n"); + } + + /* Verify that the remote host is willing to meet our TLS requirements */ + if (tls_remote_need < tls_local_need && tls_local_need != BNET_TLS_OK && tls_remote_need != BNET_TLS_OK) { + Jmsg(jcr, M_FATAL, 0, _("Authorization problem: Remote server did not" + " advertize required TLS support.\n")); + Dmsg2(dbglvl, "remote_need=%d local_need=%d\n", tls_remote_need, tls_local_need); + auth_success = false; + goto auth_fatal; + } + + /* Verify that we are willing to meet the remote host's requirements */ + if (tls_remote_need > tls_local_need && tls_local_need != BNET_TLS_OK && tls_remote_need != BNET_TLS_OK) { + Jmsg(jcr, M_FATAL, 0, _("Authorization problem: Remote server requires TLS.\n")); + Dmsg2(dbglvl, "remote_need=%d local_need=%d\n", tls_remote_need, tls_local_need); + auth_success = false; + goto auth_fatal; + } + + if (tls_local_need >= BNET_TLS_OK && tls_remote_need >= BNET_TLS_OK) { + /* Engage TLS! Full Speed Ahead! */ + if (!bnet_tls_client(me->tls_ctx, sd, NULL)) { + Jmsg(jcr, M_FATAL, 0, _("TLS negotiation failed.\n")); + auth_success = false; + goto auth_fatal; + } + if (me->tls_authenticate) { /* tls authentication only? */ + sd->free_tls(); /* yes, shutdown tls */ + } + } + if (sd->recv() <= 0) { + auth_success = false; + goto auth_fatal; + } + sscanf(sd->msg, "3000 OK Hello %d", &sd_version); + + /* At this point, we have successfully connected */ + +auth_fatal: + /* Destroy session key */ + memset(jcr->sd_auth_key, 0, strlen(jcr->sd_auth_key)); + stop_bsock_timer(tid); + /* Single thread all failures to avoid DOS */ + if (!auth_success) { + P(mutex); + bmicrosleep(6, 0); + V(mutex); + } return auth_success; } diff --git a/bacula/src/stored/autochanger.c b/bacula/src/stored/autochanger.c index 219f579da1..4f294e6a70 100644 --- a/bacula/src/stored/autochanger.c +++ b/bacula/src/stored/autochanger.c @@ -1,46 +1,43 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2002-2012 Free Software Foundation Europe e.V. + Copyright (C) 2002-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * * Routines for handling the autochanger. * - * Kern Sibbald, August MMII - * + * Written by Kern Sibbald, August MMII + * */ #include "bacula.h" /* pull in global headers */ #include "stored.h" /* pull in Storage Deamon headers */ +static const int dbglvl = 60; + /* Forward referenced functions */ static void lock_changer(DCR *dcr); static void unlock_changer(DCR *dcr); static bool unload_other_drive(DCR *dcr, int slot); +bool DCR::is_virtual_autochanger() +{ + return device->changer_command && + (device->changer_command[0] == 0 || + strcmp(device->changer_command, "/dev/null") == 0); +} + /* Init all the autochanger resources found */ bool init_autochangers() { @@ -52,7 +49,7 @@ bool init_autochangers() foreach_alist(device, changer->device) { /* * If the device does not have a changer name or changer command - * defined, used the one from the Autochanger resource + * defined, used the one from the Autochanger resource */ if (!device->changer_name && changer->changer_name) { device->changer_name = bstrdup(changer->changer_name); @@ -61,17 +58,17 @@ bool init_autochangers() device->changer_command = bstrdup(changer->changer_command); } if (!device->changer_name) { - Jmsg(NULL, M_ERROR, 0, + Jmsg(NULL, M_ERROR, 0, _("No Changer Name given for device %s. Cannot continue.\n"), device->hdr.name); OK = false; - } + } if (!device->changer_command) { - Jmsg(NULL, M_ERROR, 0, + Jmsg(NULL, M_ERROR, 0, _("No Changer Command given for device %s. Cannot continue.\n"), device->hdr.name); OK = false; - } + } } } return OK; @@ -92,7 +89,7 @@ bool init_autochangers() * 0 on failure (no changer available) * -1 on error on autochanger */ -int autoload_device(DCR *dcr, int writing, BSOCK *dir) +int autoload_device(DCR *dcr, bool writing, BSOCK *dir) { JCR *jcr = dcr->jcr; DEVICE * volatile dev = dcr->dev; @@ -102,19 +99,17 @@ int autoload_device(DCR *dcr, int writing, BSOCK *dir) POOLMEM *changer; if (!dev->is_autochanger()) { - Dmsg1(100, "Device %s is not an autochanger\n", dev->print_name()); + Dmsg1(dbglvl, "Device %s is not an autochanger\n", dev->print_name()); return 0; } /* An empty ChangerCommand => virtual disk autochanger */ - if (dcr->device->changer_command && dcr->device->changer_command[0] == 0) { - Dmsg0(100, "ChangerCommand=0, virtual disk changer\n"); + if (dcr->is_virtual_autochanger()) { + Dmsg0(dbglvl, "ChangerCommand=0, virtual disk changer\n"); return 1; /* nothing to load */ } slot = dcr->VolCatInfo.InChanger ? dcr->VolCatInfo.Slot : 0; - Dmsg3(100, "autoload: slot=%d InChgr=%d Vol=%s\n", dcr->VolCatInfo.Slot, - dcr->VolCatInfo.InChanger, dcr->getVolCatName()); /* * Handle autoloaders here. If we cannot autoload it, we * will return 0 so that the sysop will be asked to load it. @@ -128,15 +123,18 @@ int autoload_device(DCR *dcr, int writing, BSOCK *dir) slot = dcr->VolCatInfo.InChanger ? dcr->VolCatInfo.Slot : 0; } else { slot = 0; + dev->clear_wait(); } } - Dmsg1(400, "Want changer slot=%d\n", slot); + Dmsg4(dbglvl, "Want slot=%d drive=%d InChgr=%d Vol=%s\n", + dcr->VolCatInfo.Slot, drive, + dcr->VolCatInfo.InChanger, dcr->getVolCatName()); changer = get_pool_memory(PM_FNAME); if (slot <= 0) { /* Suppress info when polling */ if (!dev->poll) { - Jmsg(jcr, M_INFO, 0, _("No slot defined in catalog (slot=%d) for Volume \"%s\" on %s.\n"), + Jmsg(jcr, M_INFO, 0, _("No slot defined in catalog (slot=%d) for Volume \"%s\" on %s.\n"), slot, dcr->getVolCatName(), dev->print_name()); Jmsg(jcr, M_INFO, 0, _("Cartridge change or \"update slots\" may be required.\n")); } @@ -157,20 +155,23 @@ int autoload_device(DCR *dcr, int writing, BSOCK *dir) rtn_stat = 0; } else { /* Attempt to load the Volume */ - uint32_t timeout = dcr->device->max_changer_wait; int loaded, status; loaded = get_autochanger_loaded_slot(dcr); + if (loaded < 0) { /* Autochanger error, try again */ + loaded = get_autochanger_loaded_slot(dcr); + } + Dmsg2(dbglvl, "Found loaded=%d drive=%d\n", loaded, drive); - if (loaded != slot) { + if (loaded <= 0 || loaded != slot) { POOL_MEM results(PM_MESSAGE); /* Unload anything in our drive */ if (!unload_autochanger(dcr, loaded)) { goto bail_out; } - + /* Make sure desired slot is unloaded */ if (!unload_other_drive(dcr, slot)) { goto bail_out; @@ -180,19 +181,19 @@ int autoload_device(DCR *dcr, int writing, BSOCK *dir) * Load the desired cassette */ lock_changer(dcr); - Dmsg2(100, "Doing changer load slot %d %s\n", slot, dev->print_name()); + Dmsg2(dbglvl, "Doing changer load slot %d %s\n", slot, dev->print_name()); Jmsg(jcr, M_INFO, 0, _("3304 Issuing autochanger \"load slot %d, drive %d\" command.\n"), slot, drive); dcr->VolCatInfo.Slot = slot; /* slot to be loaded */ changer = edit_device_codes(dcr, changer, dcr->device->changer_command, "load"); dev->close(); - Dmsg1(200, "Run program=%s\n", changer); + Dmsg1(dbglvl, "Run program=%s\n", changer); status = run_program_full_output(changer, timeout, results.addr()); if (status == 0) { Jmsg(jcr, M_INFO, 0, _("3305 Autochanger \"load slot %d, drive %d\", status is OK.\n"), slot, drive); - Dmsg2(100, "load slot %d, drive %d, status is OK.\n", slot, drive); + Dmsg2(dbglvl, "OK: load slot %d, drive %d.\n", slot, drive); dev->set_slot(slot); /* set currently loaded slot */ if (dev->vol) { /* We just swapped this Volume so it cannot be swapping any more */ @@ -201,21 +202,20 @@ int autoload_device(DCR *dcr, int writing, BSOCK *dir) } else { berrno be; be.set_errno(status); - Dmsg3(100, "load slot %d, drive %d, bad stats=%s.\n", slot, drive, - be.bstrerror()); + Dmsg4(dbglvl, "Error: load slot %d, drive %d, bad stats=%s.\nResults=%s\n", slot, drive, + be.bstrerror(), results.c_str()); Jmsg(jcr, M_FATAL, 0, _("3992 Bad autochanger \"load slot %d, drive %d\": " "ERR=%s.\nResults=%s\n"), slot, drive, be.bstrerror(), results.c_str()); rtn_stat = -1; /* hard error */ - dev->set_slot(-1); /* mark unknown */ + dev->clear_slot(); /* mark unknown */ } - Dmsg2(100, "load slot %d status=%d\n", slot, status); unlock_changer(dcr); } else { status = 0; /* we got what we want */ dev->set_slot(slot); /* set currently loaded slot */ } - Dmsg1(100, "After changer, status=%d\n", status); + Dmsg1(dbglvl, "After changer, status=%d\n", status); if (status == 0) { /* did we succeed? */ rtn_stat = 1; /* tape loaded by changer */ } @@ -251,12 +251,14 @@ int get_autochanger_loaded_slot(DCR *dcr) if (!dcr->device->changer_command) { return -1; } - if (dev->get_slot() > 0) { + + if (dev->get_slot() > 0 && dev->has_cap(CAP_ALWAYSOPEN)) { + Dmsg1(dbglvl, "Return cached slot=%d\n", dev->get_slot()); return dev->get_slot(); } /* Virtual disk autochanger */ - if (dcr->device->changer_command[0] == 0) { + if (dcr->is_virtual_autochanger()) { return 1; } @@ -264,26 +266,26 @@ int get_autochanger_loaded_slot(DCR *dcr) changer = get_pool_memory(PM_FNAME); lock_changer(dcr); /* Suppress info when polling */ - if (!dev->poll && debug_level >= 1) { + if (!dev->poll && chk_dbglvl(1)) { Jmsg(jcr, M_INFO, 0, _("3301 Issuing autochanger \"loaded? drive %d\" command.\n"), drive); } changer = edit_device_codes(dcr, changer, dcr->device->changer_command, "loaded"); - Dmsg1(100, "Run program=%s\n", changer); + Dmsg1(dbglvl, "Run program=%s\n", changer); status = run_program_full_output(changer, timeout, results.addr()); - Dmsg3(100, "run_prog: %s stat=%d result=%s", changer, status, results.c_str()); + Dmsg3(dbglvl, "run_prog: %s stat=%d result=%s", changer, status, results.c_str()); if (status == 0) { loaded = str_to_int32(results.c_str()); if (loaded > 0) { /* Suppress info when polling */ - if (!dev->poll && debug_level >= 1) { + if (!dev->poll && chk_dbglvl(1)) { Jmsg(jcr, M_INFO, 0, _("3302 Autochanger \"loaded? drive %d\", result is Slot %d.\n"), drive, loaded); } dev->set_slot(loaded); } else { /* Suppress info when polling */ - if (!dev->poll && debug_level >= 1) { + if (!dev->poll && chk_dbglvl(1)) { Jmsg(jcr, M_INFO, 0, _("3302 Autochanger \"loaded? drive %d\", result: nothing loaded.\n"), drive); } @@ -298,7 +300,10 @@ int get_autochanger_loaded_slot(DCR *dcr) be.set_errno(status); Jmsg(jcr, M_INFO, 0, _("3991 Bad autochanger \"loaded? drive %d\" command: " "ERR=%s.\nResults=%s\n"), drive, be.bstrerror(), results.c_str()); + Dmsg3(dbglvl, "Error: autochanger loaded? drive %d " + "ERR=%s.\nResults=%s\n", drive, be.bstrerror(), results.c_str()); loaded = -1; /* force unload */ + dev->clear_slot(); /* slot unknown */ } unlock_changer(dcr); free_pool_memory(changer); @@ -310,7 +315,7 @@ static void lock_changer(DCR *dcr) AUTOCHANGER *changer_res = dcr->device->changer_res; if (changer_res) { int errstat; - Dmsg1(200, "Locking changer %s\n", changer_res->hdr.name); + Dmsg1(dbglvl, "Locking changer %s\n", changer_res->hdr.name); if ((errstat=rwl_writelock(&changer_res->changer_lock)) != 0) { berrno be; Jmsg(dcr->jcr, M_ERROR_TERM, 0, _("Lock failure on autochanger. ERR=%s\n"), @@ -324,7 +329,7 @@ static void unlock_changer(DCR *dcr) AUTOCHANGER *changer_res = dcr->device->changer_res; if (changer_res) { int errstat; - Dmsg1(200, "Unlocking changer %s\n", changer_res->hdr.name); + Dmsg1(dbglvl, "Unlocking changer %s\n", changer_res->hdr.name); if ((errstat=rwl_writeunlock(&changer_res->changer_lock)) != 0) { berrno be; Jmsg(dcr->jcr, M_ERROR_TERM, 0, _("Unlock failure on autochanger. ERR=%s\n"), @@ -357,7 +362,7 @@ bool unload_autochanger(DCR *dcr, int loaded) } /* Virtual disk autochanger */ - if (dcr->device->changer_command[0] == 0) { + if (dcr->is_virtual_autochanger()) { dev->clear_unload(); return true; } @@ -365,6 +370,9 @@ bool unload_autochanger(DCR *dcr, int loaded) lock_changer(dcr); if (loaded < 0) { loaded = get_autochanger_loaded_slot(dcr); + if (loaded < 0) { /* try again, maybe autochanger error */ + loaded = get_autochanger_loaded_slot(dcr); + } } if (loaded > 0) { @@ -375,10 +383,10 @@ bool unload_autochanger(DCR *dcr, int loaded) loaded, dev->drive_index); slot = dcr->VolCatInfo.Slot; dcr->VolCatInfo.Slot = loaded; - changer = edit_device_codes(dcr, changer, + changer = edit_device_codes(dcr, changer, dcr->device->changer_command, "unload"); dev->close(); - Dmsg1(100, "Run program=%s\n", changer); + Dmsg1(dbglvl, "Run program=%s\n", changer); int stat = run_program_full_output(changer, timeout, results.addr()); dcr->VolCatInfo.Slot = slot; if (stat != 0) { @@ -387,22 +395,21 @@ bool unload_autochanger(DCR *dcr, int loaded) Jmsg(jcr, M_INFO, 0, _("3995 Bad autochanger \"unload slot %d, drive %d\": " "ERR=%s\nResults=%s\n"), loaded, dev->drive_index, be.bstrerror(), results.c_str()); + Dmsg4(dbglvl, "Error: load slot %d, drive %d, bad stats=%s.\nResults=%s\n", + loaded, dev->drive_index, + be.bstrerror(), results.c_str()); ok = false; dev->clear_slot(); /* unknown */ } else { - dev->set_slot(0); /* nothing loaded */ + dev->set_slot(0); /* unload is OK, mark nothing loaded */ + dev->clear_unload(); } - free_pool_memory(changer); } unlock_changer(dcr); - if (loaded > 0) { /* free_volume outside from changer lock */ - free_volume(dev); /* Free any volume associated with this drive */ - } - if (ok) { - dev->clear_unload(); + free_volume(dev); } return ok; } @@ -418,6 +425,8 @@ static bool unload_other_drive(DCR *dcr, int slot) AUTOCHANGER *changer = dcr->dev->device->changer_res; DEVRES *device; int retries = 0; /* wait for device retries */ + int loaded; + int i; if (!changer) { return false; @@ -431,40 +440,56 @@ static bool unload_other_drive(DCR *dcr, int slot) * we want in other drives, and if possible, unload * it. */ - Dmsg0(100, "Wiffle through devices looking for slot\n"); - foreach_alist(device, changer->device) { + Dmsg1(dbglvl, "Begin wiffle through devices looking for slot=%d\n", slot); + /* + * foreach_alist(device, changer->device) { + * + * The above fails to loop through all devices. It is + * probably a compiler bug. + */ + for (i=0; i < changer->device->size(); i++) { + device = (DEVRES *)changer->device->get(i); dev = device->dev; if (!dev) { + Dmsg0(dbglvl, "No dev attached to device\n"); continue; } + dev_save = dcr->dev; dcr->set_dev(dev); - if (dev->get_slot() <= 0 && get_autochanger_loaded_slot(dcr) <= 0) { - dcr->set_dev(dev_save); - continue; - } + loaded = get_autochanger_loaded_slot(dcr); dcr->set_dev(dev_save); - if (dev->get_slot() == slot) { - found = true; - break; + + if (loaded > 0) { + Dmsg4(dbglvl, "Want slot=%d, drive=%d loaded=%d dev=%s\n", + slot, dev->drive_index, loaded, dev->print_name()); + if (loaded == slot) { + found = true; + break; + } + } else { + Dmsg4(dbglvl, "After slot=%d drive=%d loaded=%d dev=%s\n", + slot, dev->drive_index, loaded, dev->print_name()); } } + Dmsg1(dbglvl, "End wiffle through devices looking for slot=%d\n", slot); if (!found) { - Dmsg1(100, "Slot=%d not found in another device\n", slot); + Dmsg1(dbglvl, "Slot=%d not found in another device\n", slot); return true; } else { - Dmsg1(100, "Slot=%d found in another device\n", slot); - } + Dmsg3(dbglvl, "Slot=%d drive=%d found in dev=%s\n", slot, dev->drive_index, dev->print_name()); + } /* The Volume we want is on another device. */ if (dev->is_busy()) { - Dmsg4(100, "Vol %s for dev=%s in use dev=%s slot=%d\n", + Dmsg4(dbglvl, "Vol %s for dev=%s in use dev=%s slot=%d\n", dcr->VolumeName, dcr->dev->print_name(), dev->print_name(), slot); - } + } for (int i=0; i < 3; i++) { if (dev->is_busy()) { - wait_for_device(dcr->jcr, retries); + Dmsg0(40, "Device is busy. Calling wait_for_device()\n"); + wait_for_device(dcr, retries); continue; } break; @@ -472,9 +497,9 @@ static bool unload_other_drive(DCR *dcr, int slot) if (dev->is_busy()) { Jmsg(dcr->jcr, M_WARNING, 0, _("Volume \"%s\" wanted on %s is in use by device %s\n"), dcr->VolumeName, dcr->dev->print_name(), dev->print_name()); - Dmsg4(100, "Vol %s for dev=%s is busy dev=%s slot=%d\n", + Dmsg4(dbglvl, "Vol %s for dev=%s is busy dev=%s slot=%d\n", dcr->VolumeName, dcr->dev->print_name(), dev->print_name(), dev->get_slot()); - Dmsg2(100, "num_writ=%d reserv=%d\n", dev->num_writers, dev->num_reserved()); + Dmsg2(dbglvl, "num_writ=%d reserv=%d\n", dev->num_writers, dev->num_reserved()); volume_unused(dcr); return false; } @@ -500,21 +525,21 @@ bool unload_dev(DCR *dcr, DEVICE *dev) save_dev = dcr->dev; /* save dcr device */ dcr->set_dev(dev); /* temporarily point dcr at other device */ - /* Update slot if not set or not always_open */ - if (dev->get_slot() <= 0 || !dev->has_cap(CAP_ALWAYSOPEN)) { - get_autochanger_loaded_slot(dcr); - } + get_autochanger_loaded_slot(dcr); /* Fail if we have no slot to unload */ if (dev->get_slot() <= 0) { + if (dev->get_slot() < 0) { + Dmsg1(dbglvl, "Cannot unload, slot not defined. dev=%s\n", + dev->print_name()); + } dcr->set_dev(save_dev); return false; } - + save_slot = dcr->VolCatInfo.Slot; dcr->VolCatInfo.Slot = dev->get_slot(); -// dev->dlock(); POOLMEM *changer_cmd = get_pool_memory(PM_FNAME); POOL_MEM results(PM_MESSAGE); @@ -523,40 +548,38 @@ bool unload_dev(DCR *dcr, DEVICE *dev) _("3307 Issuing autochanger \"unload slot %d, drive %d\" command.\n"), dev->get_slot(), dev->drive_index); - Dmsg2(100, "Issuing autochanger \"unload slot %d, drive %d\" command.\n", + Dmsg2(dbglvl, "Issuing autochanger \"unload slot %d, drive %d\" command.\n", dev->get_slot(), dev->drive_index); - changer_cmd = edit_device_codes(dcr, changer_cmd, + changer_cmd = edit_device_codes(dcr, changer_cmd, dcr->device->changer_command, "unload"); dev->close(); - Dmsg2(200, "close dev=%s reserve=%d\n", dev->print_name(), + Dmsg2(dbglvl, "close dev=%s reserve=%d\n", dev->print_name(), dev->num_reserved()); - Dmsg1(100, "Run program=%s\n", changer_cmd); + Dmsg1(dbglvl, "Run program=%s\n", changer_cmd); int stat = run_program_full_output(changer_cmd, timeout, results.addr()); dcr->VolCatInfo.Slot = save_slot; - dcr->set_dev(save_dev); if (stat != 0) { berrno be; be.set_errno(stat); Jmsg(jcr, M_INFO, 0, _("3997 Bad autochanger \"unload slot %d, drive %d\": ERR=%s.\n"), dev->get_slot(), dev->drive_index, be.bstrerror()); - - Dmsg3(100, "Bad autochanger \"unload slot %d, drive %d\": ERR=%s.\n", - dev->get_slot(), dev->drive_index, be.bstrerror()); + Dmsg4(dbglvl, "Error: load slot %d, drive %d, bad stats=%s.\nResults=%s\n", + dev->get_slot(), dev->drive_index, + be.bstrerror(), results.c_str()); ok = false; dev->clear_slot(); /* unknown */ } else { - Dmsg2(100, "Slot %d unloaded %s\n", dev->get_slot(), dev->print_name()); - dev->set_slot(0); /* nothing loaded */ - } - if (ok) { + Dmsg2(dbglvl, "Slot %d unloaded %s\n", dev->get_slot(), dev->print_name()); + dev->set_slot(0); /* unload OK, mark nothing loaded */ dev->clear_unload(); } unlock_changer(dcr); -// dev->dunlock(); - - free_volume(dev); /* Free any volume associated with this drive */ + if (ok) { + free_volume(dev); + } + dcr->set_dev(save_dev); free_pool_memory(changer_cmd); return ok; } @@ -568,7 +591,7 @@ bool unload_dev(DCR *dcr, DEVICE *dev) * with their barcodes. * We assume that it is always the Console that is calling us. */ -bool autochanger_cmd(DCR *dcr, BSOCK *dir, const char *cmd) +bool autochanger_cmd(DCR *dcr, BSOCK *dir, const char *cmd) { DEVICE *dev = dcr->dev; uint32_t timeout = dcr->device->max_changer_wait; @@ -579,7 +602,7 @@ bool autochanger_cmd(DCR *dcr, BSOCK *dir, const char *cmd) if (!dev->is_autochanger() || !dcr->device->changer_name || !dcr->device->changer_command) { - if (strcmp(cmd, "drives") == 0) { + if (strcasecmp(cmd, "drives") == 0) { dir->fsend("drives=1\n"); } dir->fsend(_("3993 Device %s not an autochanger device.\n"), @@ -587,19 +610,19 @@ bool autochanger_cmd(DCR *dcr, BSOCK *dir, const char *cmd) return false; } - if (strcmp(cmd, "drives") == 0) { + if (strcasecmp(cmd, "drives") == 0) { AUTOCHANGER *changer_res = dcr->device->changer_res; int drives = 1; if (changer_res) { drives = changer_res->device->size(); } dir->fsend("drives=%d\n", drives); - Dmsg1(100, "drives=%d\n", drives); + Dmsg1(dbglvl, "drives=%d\n", drives); return true; } /* If listing, reprobe changer */ - if (bstrcmp(cmd, "list") || bstrcmp(cmd, "listall")) { + if (bstrcasecmp(cmd, "list") || bstrcasecmp(cmd, "listall")) { dcr->dev->set_slot(0); get_autochanger_loaded_slot(dcr); } @@ -607,7 +630,7 @@ bool autochanger_cmd(DCR *dcr, BSOCK *dir, const char *cmd) changer = get_pool_memory(PM_FNAME); lock_changer(dcr); /* Now issue the command */ - changer = edit_device_codes(dcr, changer, + changer = edit_device_codes(dcr, changer, dcr->device->changer_command, cmd); dir->fsend(_("3306 Issuing autochanger \"%s\" command.\n"), cmd); bpipe = open_bpipe(changer, timeout, "r"); @@ -615,14 +638,14 @@ bool autochanger_cmd(DCR *dcr, BSOCK *dir, const char *cmd) dir->fsend(_("3996 Open bpipe failed.\n")); goto bail_out; /* TODO: check if we need to return false */ } - if (bstrcmp(cmd, "list") || bstrcmp(cmd, "listall")) { + if (bstrcasecmp(cmd, "list") || bstrcasecmp(cmd, "listall")) { /* Get output from changer */ while (fgets(dir->msg, len, bpipe->rfd)) { dir->msglen = strlen(dir->msg); - Dmsg1(100, "msg); - bnet_send(dir); + Dmsg1(dbglvl, "msg); + dir->send(); } - } else if (strcmp(cmd, "slots") == 0 ) { + } else if (strcasecmp(cmd, "slots") == 0 ) { char buf[100], *p; /* For slots command, read a single line */ buf[0] = 0; @@ -632,9 +655,9 @@ bool autochanger_cmd(DCR *dcr, BSOCK *dir, const char *cmd) for (p=buf; B_ISSPACE(*p); p++) { } dir->fsend("slots=%s", p); - Dmsg1(100, "msg); - } - + Dmsg1(dbglvl, "msg); + } + stat = close_bpipe(bpipe); if (stat != 0) { berrno be; @@ -657,6 +680,7 @@ bail_out: * %d = changer drive index * %f = Client's name * %j = Job name + * %l = archive control channel name * %o = command * %s = Slot base 0 * %S = Slot base 1 @@ -688,6 +712,9 @@ char *edit_device_codes(DCR *dcr, char *omsg, const char *imsg, const char *cmd) case 'c': str = NPRT(dcr->device->changer_name); break; + case 'l': + str = NPRT(dcr->device->control_name); + break; case 'd': sprintf(add, "%d", dcr->dev->drive_index); str = add; diff --git a/bacula/src/stored/bacula-sd.conf.in b/bacula/src/stored/bacula-sd.conf.in index 7537cff90a..e3357abff1 100644 --- a/bacula/src/stored/bacula-sd.conf.in +++ b/bacula/src/stored/bacula-sd.conf.in @@ -5,14 +5,14 @@ # # You may need to change the name of your tape drive # on the "Archive Device" directive in the Device -# resource. If you change the Name and/or the +# resource. If you change the Name and/or the # "Media Type" in the Device resource, please ensure # that dird.conf has corresponding changes. # Storage { # definition of myself Name = @basename@-sd - SDPort = @sd_port@ # Director's port + SDPort = @sd_port@ # Director's port WorkingDirectory = "@working_dir@" Pid Directory = "@piddir@" Maximum Concurrent Jobs = 20 @@ -46,20 +46,79 @@ Director { # # Devices supported by this Storage daemon # To connect, the Director's bacula-dir.conf must have the -# same Name and MediaType. +# same Name and MediaType. # +# +# Define a Virtual autochanger +# +Autochanger { + Name = FileChgr1 + Device = FileChgr1-Dev1, FileChgr1-Dev2 + Changer Command = "" + Changer Device = /dev/null +} + +Device { + Name = FileChgr1-Dev1 + Media Type = File1 + Archive Device = @archivedir@ + LabelMedia = yes; # lets Bacula label unlabeled media + Random Access = Yes; + AutomaticMount = yes; # when device opened, read it + RemovableMedia = no; + AlwaysOpen = no; + Maximum Concurrent Jobs = 5 +} + +Device { + Name = FileChgr1-Dev2 + Media Type = File1 + Archive Device = @archivedir@ + LabelMedia = yes; # lets Bacula label unlabeled media + Random Access = Yes; + AutomaticMount = yes; # when device opened, read it + RemovableMedia = no; + AlwaysOpen = no; + Maximum Concurrent Jobs = 5 +} + +# +# Define a second Virtual autochanger +# +Autochanger { + Name = FileChgr2 + Device = FileChgr2-Dev1, FileChgr2-Dev2 + Changer Command = "" + Changer Device = /dev/null +} + +Device { + Name = FileChgr2-Dev1 + Media Type = File2 + Archive Device = @archivedir@ + LabelMedia = yes; # lets Bacula label unlabeled media + Random Access = Yes; + AutomaticMount = yes; # when device opened, read it + RemovableMedia = no; + AlwaysOpen = no; + Maximum Concurrent Jobs = 5 +} + Device { - Name = FileStorage - Media Type = File + Name = FileChgr2-Dev2 + Media Type = File2 Archive Device = @archivedir@ LabelMedia = yes; # lets Bacula label unlabeled media Random Access = Yes; AutomaticMount = yes; # when device opened, read it RemovableMedia = no; AlwaysOpen = no; + Maximum Concurrent Jobs = 5 } + + # # An autochanger device with two drives # @@ -84,13 +143,13 @@ Device { # # # # Enable the Alert command only if you have the mtx package loaded # # Note, apparently on some systems, tapeinfo resets the SCSI controller -# # thus if you turn this on, make sure it does not reset your SCSI +# # thus if you turn this on, make sure it does not reset your SCSI # # controller. I have never had any problems, and smartctl does # # not seem to cause such problems. # # # Alert Command = "sh -c 'tapeinfo -f %c |grep TapeAlert|cat'" -# If you have smartctl, enable this, it has more info than tapeinfo -# Alert Command = "sh -c 'smartctl -H -l error %c'" +# If you have smartctl, enable this, it has more info than tapeinfo +# Alert Command = "sh -c 'smartctl -H -l error %c'" #} #Device { @@ -105,8 +164,8 @@ Device { # AutoChanger = yes # # Enable the Alert command only if you have the mtx package loaded # Alert Command = "sh -c 'tapeinfo -f %c |grep TapeAlert|cat'" -# If you have smartctl, enable this, it has more info than tapeinfo -# Alert Command = "sh -c 'smartctl -H -l error %c'" +# If you have smartctl, enable this, it has more info than tapeinfo +# Alert Command = "sh -c 'smartctl -H -l error %c'" #} # @@ -126,8 +185,8 @@ Device { ## AutoChanger = yes # # Enable the Alert command only if you have the mtx package loaded ## Alert Command = "sh -c 'tapeinfo -f %c |grep TapeAlert|cat'" -## If you have smartctl, enable this, it has more info than tapeinfo -## Alert Command = "sh -c 'smartctl -H -l error %c'" +## If you have smartctl, enable this, it has more info than tapeinfo +## Alert Command = "sh -c 'smartctl -H -l error %c'" #} # @@ -147,8 +206,8 @@ Device { ## AutoChanger = yes # # Enable the Alert command only if you have the mtx package loaded ## Alert Command = "sh -c 'tapeinfo -f %c |grep TapeAlert|cat'" -## If you have smartctl, enable this, it has more info than tapeinfo -## Alert Command = "sh -c 'smartctl -H -l error %c'" +## If you have smartctl, enable this, it has more info than tapeinfo +## Alert Command = "sh -c 'smartctl -H -l error %c'" #} # @@ -168,18 +227,38 @@ Device { ## AutoChanger = yes # # Enable the Alert command only if you have the mtx package loaded ## Alert Command = "sh -c 'tapeinfo -f %c |grep TapeAlert|cat'" -## If you have smartctl, enable this, it has more info than tapeinfo -## Alert Command = "sh -c 'smartctl -H -l error %c'" +## If you have smartctl, enable this, it has more info than tapeinfo +## Alert Command = "sh -c 'smartctl -H -l error %c'" #} - - +# +# An HP-UX tape drive +# +#Device { +# Name = Drive-1 # +# Drive Index = 0 +# Media Type = DLT-8000 +# Archive Device = /dev/rmt/1mnb +# AutomaticMount = yes; # when device opened, read it +# AlwaysOpen = yes; +# RemovableMedia = yes; +# RandomAccess = no; +# AutoChanger = no +# Two EOF = yes +# Hardware End of Medium = no +# Fast Forward Space File = no +# # +# # Enable the Alert command only if you have the mtx package loaded +# Alert Command = "sh -c 'tapeinfo -f %c |grep TapeAlert|cat'" +# If you have smartctl, enable this, it has more info than tapeinfo +# Alert Command = "sh -c 'smartctl -H -l error %c'" +#} # # A FreeBSD tape drive # #Device { -# Name = DDS-4 +# Name = DDS-4 # Description = "DDS-4 for FreeBSD" # Media Type = DDS-4 # Archive Device = /dev/nsa1 @@ -191,12 +270,12 @@ Device { # Backward Space Record = no # Fast Forward Space File = no # TWO EOF = yes -# If you have smartctl, enable this, it has more info than tapeinfo -# Alert Command = "sh -c 'smartctl -H -l error %c'" +# If you have smartctl, enable this, it has more info than tapeinfo +# Alert Command = "sh -c 'smartctl -H -l error %c'" #} -# -# Send all messages to the Director, +# +# Send all messages to the Director, # mount messages also are sent to the email address # Messages { diff --git a/bacula/src/stored/bcopy.c b/bacula/src/stored/bcopy.c index 8db3259c8a..5fe76df129 100644 --- a/bacula/src/stored/bcopy.c +++ b/bacula/src/stored/bcopy.c @@ -1,35 +1,23 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2002-2012 Free Software Foundation Europe e.V. + Copyright (C) 2002-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * * Program to copy a Bacula from one volume to another. * - * Kern E. Sibbald, October 2002 + * Written by Kern E. Sibbald, October 2002 * */ @@ -60,6 +48,8 @@ static SESSION_LABEL sessrec; static CONFIG *config; #define CONFIG_FILE "bacula-sd.conf" + +void *start_heap; char *configfile = NULL; STORES *me = NULL; /* our Global resource */ bool forge_on = false; /* proceed inspite of I/O errors */ @@ -172,10 +162,12 @@ int main (int argc, char *argv[]) config = new_config_parser(); parse_sd_config(config, configfile, M_ERROR_TERM); + setup_me(); + load_sd_plugins(me->plugin_directory); /* Setup and acquire input device for reading */ Dmsg0(100, "About to setup input jcr\n"); - in_jcr = setup_jcr("bcopy", argv[0], bsr, iVolumeName, 1); /* read device */ + in_jcr = setup_jcr("bcopy", argv[0], bsr, iVolumeName, SD_READ); /* read device */ if (!in_jcr) { exit(1); } @@ -187,7 +179,7 @@ int main (int argc, char *argv[]) /* Setup output device for writing */ Dmsg0(100, "About to setup output jcr\n"); - out_jcr = setup_jcr("bcopy", argv[1], bsr, oVolumeName, 0); /* no acquire */ + out_jcr = setup_jcr("bcopy", argv[1], bsr, oVolumeName, SD_APPEND); /* no acquire */ if (!out_jcr) { exit(1); } @@ -367,7 +359,7 @@ bool dir_update_file_attributes(DCR *dcr, DEV_RECORD *rec) { return 1;} bool dir_send_job_status(JCR *jcr) {return 1;} -bool dir_ask_sysop_to_mount_volume(DCR *dcr, int /*mode*/) +bool dir_ask_sysop_to_mount_volume(DCR *dcr, bool /*writing*/) { DEVICE *dev = dcr->dev; fprintf(stderr, _("Mount Volume \"%s\" on device %s and press return when ready: "), @@ -381,7 +373,9 @@ bool dir_get_volume_info(DCR *dcr, enum get_vol_info_rw writing) { Dmsg0(100, "Fake dir_get_volume_info\n"); dcr->setVolCatName(dcr->VolumeName); +#ifdef BUILD_DVD dcr->VolCatInfo.VolCatParts = find_num_dvd_parts(dcr); +#endif Dmsg2(500, "Vol=%s num_parts=%d\n", dcr->getVolCatName(), dcr->VolCatInfo.VolCatParts); return 1; } diff --git a/bacula/src/stored/bextract.c b/bacula/src/stored/bextract.c index e3f30fafca..5e2664a672 100644 --- a/bacula/src/stored/bextract.c +++ b/bacula/src/stored/bextract.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2011 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * @@ -38,6 +26,11 @@ #include "ch.h" #include "findlib/find.h" +#ifdef HAVE_LZO +#include +#include +#endif + extern bool parse_sd_config(CONFIG *config, const char *configfile, int exit_code); static void do_extract(char *fname); @@ -67,6 +60,8 @@ static uint64_t fileAddr = 0; /* file write address */ static CONFIG *config; #define CONFIG_FILE "bacula-sd.conf" + +void *start_heap; char *configfile = NULL; STORES *me = NULL; /* our Global resource */ bool forge_on = false; @@ -203,6 +198,8 @@ int main (int argc, char *argv[]) config = new_config_parser(); parse_sd_config(config, configfile, M_ERROR_TERM); + setup_me(); + load_sd_plugins(me->plugin_directory); if (!got_inc) { /* If no include file, */ add_fname_to_include_list(ff, 0, "/"); /* include everything */ @@ -233,7 +230,7 @@ static void do_extract(char *devname) enable_backup_privileges(NULL, 1); - jcr = setup_jcr("bextract", devname, bsr, VolumeName, 1); /* acquire for read */ + jcr = setup_jcr("bextract", devname, bsr, VolumeName, SD_READ); if (!jcr) { exit(1); } @@ -606,7 +603,7 @@ bool dir_update_file_attributes(DCR *dcr, DEV_RECORD *rec) { return 1;} bool dir_send_job_status(JCR *jcr) {return 1;} -bool dir_ask_sysop_to_mount_volume(DCR *dcr, int /*mode*/) +bool dir_ask_sysop_to_mount_volume(DCR *dcr, bool /*writing*/) { DEVICE *dev = dcr->dev; fprintf(stderr, _("Mount Volume \"%s\" on device %s and press return when ready: "), @@ -620,7 +617,9 @@ bool dir_get_volume_info(DCR *dcr, enum get_vol_info_rw writing) { Dmsg0(100, "Fake dir_get_volume_info\n"); dcr->setVolCatName(dcr->VolumeName); +#ifdef BUILD_DVD dcr->VolCatInfo.VolCatParts = find_num_dvd_parts(dcr); +#endif Dmsg2(500, "Vol=%s num_parts=%d\n", dcr->getVolCatName(), dcr->VolCatInfo.VolCatParts); return 1; } diff --git a/bacula/src/stored/block.c b/bacula/src/stored/block.c index e731320b88..3cf0dbb368 100644 --- a/bacula/src/stored/block.c +++ b/bacula/src/stored/block.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2001-2012 Free Software Foundation Europe e.V. + Copyright (C) 2001-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * @@ -51,299 +39,12 @@ static const bool no_tape_write_test = false; #endif -static bool terminate_writing_volume(DCR *dcr); -static bool do_new_file_bookkeeping(DCR *dcr); -static bool do_dvd_size_checks(DCR *dcr); -static void reread_last_block(DCR *dcr); - -/* - * Dump the block header, then walk through - * the block printing out the record headers. - */ -void dump_block(DEV_BLOCK *b, const char *msg) -{ - ser_declare; - char *p; - char Id[BLKHDR_ID_LENGTH+1]; - uint32_t CheckSum, BlockCheckSum; - uint32_t block_len; - uint32_t BlockNumber; - uint32_t VolSessionId, VolSessionTime, data_len; - int32_t FileIndex; - int32_t Stream; - int bhl, rhl; - char buf1[100], buf2[100]; - - unser_begin(b->buf, BLKHDR1_LENGTH); - unser_uint32(CheckSum); - unser_uint32(block_len); - unser_uint32(BlockNumber); - unser_bytes(Id, BLKHDR_ID_LENGTH); - ASSERT(unser_length(b->buf) == BLKHDR1_LENGTH); - Id[BLKHDR_ID_LENGTH] = 0; - if (Id[3] == '2') { - unser_uint32(VolSessionId); - unser_uint32(VolSessionTime); - bhl = BLKHDR2_LENGTH; - rhl = RECHDR2_LENGTH; - } else { - VolSessionId = VolSessionTime = 0; - bhl = BLKHDR1_LENGTH; - rhl = RECHDR1_LENGTH; - } - - if (block_len > 4000000) { - Dmsg3(20, "Dump block %s 0x%x blocksize too big %u\n", msg, b, block_len); - return; - } - - BlockCheckSum = bcrc32((uint8_t *)b->buf+BLKHDR_CS_LENGTH, - block_len-BLKHDR_CS_LENGTH); - Pmsg6(000, _("Dump block %s %x: size=%d BlkNum=%d\n" -" Hdrcksum=%x cksum=%x\n"), - msg, b, block_len, BlockNumber, CheckSum, BlockCheckSum); - p = b->buf + bhl; - while (p < (b->buf + block_len+WRITE_RECHDR_LENGTH)) { - unser_begin(p, WRITE_RECHDR_LENGTH); - if (rhl == RECHDR1_LENGTH) { - unser_uint32(VolSessionId); - unser_uint32(VolSessionTime); - } - unser_int32(FileIndex); - unser_int32(Stream); - unser_uint32(data_len); - Pmsg6(000, _(" Rec: VId=%u VT=%u FI=%s Strm=%s len=%d p=%x\n"), - VolSessionId, VolSessionTime, FI_to_ascii(buf1, FileIndex), - stream_to_ascii(buf2, Stream, FileIndex), data_len, p); - p += data_len + rhl; - } -} - -/* - * Create a new block structure. - * We pass device so that the block can inherit the - * min and max block sizes. - */ -DEV_BLOCK *new_block(DEVICE *dev) -{ - DEV_BLOCK *block = (DEV_BLOCK *)get_memory(sizeof(DEV_BLOCK)); - - memset(block, 0, sizeof(DEV_BLOCK)); - - /* If the user has specified a max_block_size, use it as the default */ - if (dev->max_block_size == 0) { - block->buf_len = DEFAULT_BLOCK_SIZE; - } else { - block->buf_len = dev->max_block_size; - } - block->dev = dev; - block->block_len = block->buf_len; /* default block size */ - block->buf = get_memory(block->buf_len); - empty_block(block); - block->BlockVer = BLOCK_VER; /* default write version */ - Dmsg1(650, "Returning new block=%x\n", block); - return block; -} - - -/* - * Duplicate an existing block (eblock) - */ -DEV_BLOCK *dup_block(DEV_BLOCK *eblock) -{ - DEV_BLOCK *block = (DEV_BLOCK *)get_memory(sizeof(DEV_BLOCK)); - int buf_len = sizeof_pool_memory(eblock->buf); - - memcpy(block, eblock, sizeof(DEV_BLOCK)); - block->buf = get_memory(buf_len); - memcpy(block->buf, eblock->buf, buf_len); - return block; -} - - -/* - * Only the first block checksum error was reported. - * If there are more, report it now. - */ -void print_block_read_errors(JCR *jcr, DEV_BLOCK *block) -{ - if (block->read_errors > 1) { - Jmsg(jcr, M_ERROR, 0, _("%d block read errors not printed.\n"), - block->read_errors); - } -} - -/* - * Free block - */ -void free_block(DEV_BLOCK *block) -{ - if (block) { - Dmsg1(999, "free_block buffer %x\n", block->buf); - free_memory(block->buf); - Dmsg1(999, "free_block block %x\n", block); - free_memory((POOLMEM *)block); - } -} - -/* Empty the block -- for writing */ -void empty_block(DEV_BLOCK *block) -{ - block->binbuf = WRITE_BLKHDR_LENGTH; - block->bufp = block->buf + block->binbuf; - block->read_len = 0; - block->write_failed = false; - block->block_read = false; - block->FirstIndex = block->LastIndex = 0; -} - -/* - * Create block header just before write. The space - * in the buffer should have already been reserved by - * init_block. - */ -static uint32_t ser_block_header(DEV_BLOCK *block, bool do_checksum) -{ - ser_declare; - uint32_t CheckSum = 0; - uint32_t block_len = block->binbuf; - - Dmsg1(1390, "ser_block_header: block_len=%d\n", block_len); - ser_begin(block->buf, BLKHDR2_LENGTH); - ser_uint32(CheckSum); - ser_uint32(block_len); - ser_uint32(block->BlockNumber); - ser_bytes(WRITE_BLKHDR_ID, BLKHDR_ID_LENGTH); - if (BLOCK_VER >= 2) { - ser_uint32(block->VolSessionId); - ser_uint32(block->VolSessionTime); - } - - /* Checksum whole block except for the checksum */ - if (do_checksum) { - CheckSum = bcrc32((uint8_t *)block->buf+BLKHDR_CS_LENGTH, - block_len-BLKHDR_CS_LENGTH); - } - Dmsg1(1390, "ser_bloc_header: checksum=%x\n", CheckSum); - ser_begin(block->buf, BLKHDR2_LENGTH); - ser_uint32(CheckSum); /* now add checksum to block header */ - return CheckSum; -} - -/* - * Unserialize the block header for reading block. - * This includes setting all the buffer pointers correctly. - * - * Returns: false on failure (not a block) - * true on success - */ -static bool unser_block_header(JCR *jcr, DEVICE *dev, DEV_BLOCK *block) -{ - ser_declare; - char Id[BLKHDR_ID_LENGTH+1]; - uint32_t CheckSum, BlockCheckSum; - uint32_t block_len; - uint32_t block_end; - uint32_t BlockNumber; - int bhl; - - unser_begin(block->buf, BLKHDR_LENGTH); - unser_uint32(CheckSum); - unser_uint32(block_len); - unser_uint32(BlockNumber); - unser_bytes(Id, BLKHDR_ID_LENGTH); - ASSERT(unser_length(block->buf) == BLKHDR1_LENGTH); - - Id[BLKHDR_ID_LENGTH] = 0; - if (Id[3] == '1') { - bhl = BLKHDR1_LENGTH; - block->BlockVer = 1; - block->bufp = block->buf + bhl; - if (strncmp(Id, BLKHDR1_ID, BLKHDR_ID_LENGTH) != 0) { - dev->dev_errno = EIO; - Mmsg4(dev->errmsg, _("Volume data error at %u:%u! Wanted ID: \"%s\", got \"%s\". Buffer discarded.\n"), - dev->file, dev->block_num, BLKHDR1_ID, Id); - if (block->read_errors == 0 || verbose >= 2) { - Jmsg(jcr, M_ERROR, 0, "%s", dev->errmsg); - } - block->read_errors++; - return false; - } - } else if (Id[3] == '2') { - unser_uint32(block->VolSessionId); - unser_uint32(block->VolSessionTime); - bhl = BLKHDR2_LENGTH; - block->BlockVer = 2; - block->bufp = block->buf + bhl; - if (strncmp(Id, BLKHDR2_ID, BLKHDR_ID_LENGTH) != 0) { - dev->dev_errno = EIO; - Mmsg4(dev->errmsg, _("Volume data error at %u:%u! Wanted ID: \"%s\", got \"%s\". Buffer discarded.\n"), - dev->file, dev->block_num, BLKHDR2_ID, Id); - if (block->read_errors == 0 || verbose >= 2) { - Jmsg(jcr, M_ERROR, 0, "%s", dev->errmsg); - } - block->read_errors++; - return false; - } - } else { - dev->dev_errno = EIO; - Mmsg4(dev->errmsg, _("Volume data error at %u:%u! Wanted ID: \"%s\", got \"%s\". Buffer discarded.\n"), - dev->file, dev->block_num, BLKHDR2_ID, Id); - Dmsg1(50, "%s", dev->errmsg); - if (block->read_errors == 0 || verbose >= 2) { - Jmsg(jcr, M_ERROR, 0, "%s", dev->errmsg); - } - block->read_errors++; - unser_uint32(block->VolSessionId); - unser_uint32(block->VolSessionTime); - return false; - } - - /* Sanity check */ - if (block_len > MAX_BLOCK_LENGTH) { - dev->dev_errno = EIO; - Mmsg3(dev->errmsg, _("Volume data error at %u:%u! Block length %u is insane (too large), probably due to a bad archive.\n"), - dev->file, dev->block_num, block_len); - if (block->read_errors == 0 || verbose >= 2) { - Jmsg(jcr, M_ERROR, 0, "%s", dev->errmsg); - } - block->read_errors++; - return false; - } - - Dmsg1(390, "unser_block_header block_len=%d\n", block_len); - /* Find end of block or end of buffer whichever is smaller */ - if (block_len > block->read_len) { - block_end = block->read_len; - } else { - block_end = block_len; - } - block->binbuf = block_end - bhl; - block->block_len = block_len; - block->BlockNumber = BlockNumber; - Dmsg3(390, "Read binbuf = %d %d block_len=%d\n", block->binbuf, - bhl, block_len); - if (block_len <= block->read_len && dev->do_checksum()) { - BlockCheckSum = bcrc32((uint8_t *)block->buf+BLKHDR_CS_LENGTH, - block_len-BLKHDR_CS_LENGTH); - if (BlockCheckSum != CheckSum) { - dev->dev_errno = EIO; - Mmsg6(dev->errmsg, _("Volume data error at %u:%u!\n" - "Block checksum mismatch in block=%u len=%d: calc=%x blk=%x\n"), - dev->file, dev->block_num, (unsigned)BlockNumber, - block_len, BlockCheckSum, CheckSum); - if (block->read_errors == 0 || verbose >= 2) { - Jmsg(jcr, M_ERROR, 0, "%s", dev->errmsg); - dump_block(block, "with checksum error"); - } - block->read_errors++; - if (!forge_on) { - return false; - } - } - } - return true; -} +bool do_new_file_bookkeeping(DCR *dcr); +//bool do_dvd_size_checks(DCR *dcr); +void reread_last_block(DCR *dcr); +uint32_t get_len_and_clear_block(DEV_BLOCK *block, DEVICE *dev, uint32_t &pad); +uint32_t ser_block_header(DEV_BLOCK *block, bool do_checksum); +bool unser_block_header(JCR *jcr, DEVICE *dev, DEV_BLOCK *block); /* * Write a block to the device, with locking and unlocking @@ -358,54 +59,33 @@ bool DCR::write_block_to_device() DCR *dcr = this; if (dcr->spooling) { - Dmsg0(100, "Write to spool\n"); + Dmsg0(200, "Write to spool\n"); stat = write_block_to_spool_file(dcr); return stat; } - if (!dcr->is_dev_locked()) { /* device already locked? */ - /* note, do not change this to dcr->r_dlock */ - dev->rLock(); /* no, lock it */ + if (!is_dev_locked()) { /* device already locked? */ + /* note, do not change this to dcr->rLock */ + dev->rLock(false); /* no, lock it */ } - /* - * If a new volume has been mounted since our last write - * Create a JobMedia record for the previous volume written, - * and set new parameters to write this volume - * The same applies for if we are in a new file. - */ - if (dcr->NewVol || dcr->NewFile) { - if (job_canceled(jcr)) { - stat = false; - Dmsg0(100, "Canceled\n"); - goto bail_out; - } - /* Create a jobmedia record for this job */ - if (!dir_create_jobmedia_record(dcr)) { - dev->dev_errno = EIO; - Jmsg2(jcr, M_FATAL, 0, _("Could not create JobMedia record for Volume=\"%s\" Job=%s\n"), - dcr->getVolCatName(), jcr->Job); - set_new_volume_parameters(dcr); + if (!check_for_newvol_or_newfile(dcr)) { + stat = false; + goto bail_out; /* fatal error */ + } + + Dmsg1(500, "Write block to dev=%p\n", dcr->dev); + if (!write_block_to_dev()) { + if (job_canceled(jcr) || jcr->getJobType() == JT_SYSTEM) { stat = false; - Dmsg0(100, "cannot create media record\n"); - goto bail_out; - } - if (dcr->NewVol) { - /* Note, setting a new volume also handles any pending new file */ - set_new_volume_parameters(dcr); + Dmsg2(40, "cancel=%d or SYSTEM=%d\n", job_canceled(jcr), + jcr->getJobType() == JT_SYSTEM); } else { - set_new_file_parameters(dcr); + Dmsg0(40, "Calling fixup_device ...\n"); + stat = fixup_device_block_write_error(dcr); } } - if (!dcr->write_block_to_dev()) { - if (job_canceled(jcr) || jcr->getJobType() == JT_SYSTEM) { - stat = false; - } else { - stat = fixup_device_block_write_error(dcr); - } - } - bail_out: if (!dcr->is_dev_locked()) { /* did we lock dev above? */ /* note, do not change this to dcr->dunlock */ @@ -424,10 +104,10 @@ bool DCR::write_block_to_dev() { ssize_t stat = 0; uint32_t wlen; /* length to write */ - int hit_max1, hit_max2; bool ok = true; DCR *dcr = this; uint32_t checksum; + uint32_t pad; /* padding or zeros written */ if (no_tape_write_test) { empty_block(block); @@ -437,96 +117,66 @@ bool DCR::write_block_to_dev() return false; } - ASSERT(block->binbuf == ((uint32_t) (block->bufp - block->buf))); + Dmsg3(200, "fd=%d bufp-buf=%d binbuf=%d\n", dev->fd(), + block->bufp-block->buf, block->binbuf); + ASSERT2(block->binbuf == ((uint32_t)(block->bufp - block->buf)), "binbuf badly set"); - wlen = block->binbuf; - if (wlen <= WRITE_BLKHDR_LENGTH) { /* Does block have data in it? */ - Dmsg0(100, "return write_block_to_dev no data to write\n"); + if (is_block_empty(block)) { /* Does block have data in it? */ + Dmsg0(150, "return write_block_to_dev no data to write\n"); return true; } - /* dump_block(block, "before write"); */ + dump_block(block, "before write"); if (dev->at_weot()) { - Dmsg0(100, "return write_block_to_dev with ST_WEOT\n"); + Dmsg0(50, "==== FATAL: At EOM with ST_WEOT.\n"); dev->dev_errno = ENOSPC; Jmsg1(jcr, M_FATAL, 0, _("Cannot write block. Device at EOM. dev=%s\n"), dev->print_name()); - Dmsg1(100, "Attempt to write on read-only Volume. dev=%s\n", dev->print_name()); return false; } if (!dev->can_append()) { dev->dev_errno = EIO; Jmsg1(jcr, M_FATAL, 0, _("Attempt to write on read-only Volume. dev=%s\n"), dev->print_name()); - Dmsg1(100, "Attempt to write on read-only Volume. dev=%s\n", dev->print_name()); + Dmsg1(50, "Attempt to write on read-only Volume. dev=%s\n", dev->print_name()); return false; } - + if (!dev->is_open()) { Jmsg1(jcr, M_FATAL, 0, _("Attempt to write on closed device=%s\n"), dev->print_name()); - Dmsg1(100, "Attempt to write on closed device=%s\n", dev->print_name()); + Dmsg1(50, "Attempt to write on closed device=%s\n", dev->print_name()); return false; } - /* - * Clear to the end of the buffer if it is not full, - * and on tape devices, apply min and fixed blocking. - */ - if (wlen != block->buf_len) { - uint32_t blen; /* current buffer length */ - - Dmsg2(250, "binbuf=%d buf_len=%d\n", block->binbuf, block->buf_len); - blen = wlen; - - /* Adjust write size to min/max for tapes only */ - if (dev->is_tape()) { - /* check for fixed block size */ - if (dev->min_block_size == dev->max_block_size) { - wlen = block->buf_len; /* fixed block size already rounded */ - /* Check for min block size */ - } else if (wlen < dev->min_block_size) { - wlen = ((dev->min_block_size + TAPE_BSIZE - 1) / TAPE_BSIZE) * TAPE_BSIZE; - /* Ensure size is rounded */ - } else { - wlen = ((wlen + TAPE_BSIZE - 1) / TAPE_BSIZE) * TAPE_BSIZE; - } - } - if (wlen-blen > 0) { - memset(block->bufp, 0, wlen-blen); /* clear garbage */ - } - } + wlen = get_len_and_clear_block(block, dev, pad); + block->block_len = wlen; checksum = ser_block_header(block, dev->do_checksum()); - /* Limit maximum Volume size to value specified by user */ - hit_max1 = (dev->max_volume_size > 0) && - ((dev->VolCatInfo.VolCatBytes + block->binbuf)) >= dev->max_volume_size; - hit_max2 = (dev->VolCatInfo.VolCatMaxBytes > 0) && - ((dev->VolCatInfo.VolCatBytes + block->binbuf)) >= dev->VolCatInfo.VolCatMaxBytes; - if (hit_max1 || hit_max2) { - char ed1[50]; - uint64_t max_cap; - Dmsg0(100, "==== Output bytes Triggered medium max capacity.\n"); - if (hit_max1) { - max_cap = dev->max_volume_size; - } else { - max_cap = dev->VolCatInfo.VolCatMaxBytes; - } - Jmsg(jcr, M_INFO, 0, _("User defined maximum volume capacity %s exceeded on device %s.\n"), - edit_uint64_with_commas(max_cap, ed1), dev->print_name()); + /* Handle max vol size here */ + if (user_volume_size_reached(dcr, true)) { + Dmsg0(40, "Calling terminate_writing_volume\n"); terminate_writing_volume(dcr); - reread_last_block(dcr); /* DEBUG */ + reread_last_block(dcr); /* Only used on tapes */ dev->dev_errno = ENOSPC; return false; } - /* Limit maximum File size on volume to user specified value */ + /* + * Limit maximum File size on volume to user specified value. + * In practical terms, this means to put an EOF mark on + * a tape after every X bytes. This effectively determines + * how many index records we have (JobMedia). If you set + * max_file_size too small, it will cause a lot of shoe-shine + * on very fast modern tape (LTO-3 and above). + */ if ((dev->max_file_size > 0) && (dev->file_size+block->binbuf) >= dev->max_file_size) { dev->file_size = 0; /* reset file size */ if (!dev->weof(1)) { /* write eof */ Dmsg0(50, "WEOF error in max file size.\n"); - Jmsg(jcr, M_FATAL, 0, _("Unable to write EOF. ERR=%s\n"), + Jmsg(jcr, M_FATAL, 0, _("Unable to write EOF. ERR=%s\n"), dev->bstrerror()); + Dmsg0(40, "Calling terminate_writing_volume\n"); terminate_writing_volume(dcr); dev->dev_errno = ENOSPC; return false; @@ -540,14 +190,9 @@ bool DCR::write_block_to_dev() return false; } } - - if (!do_dvd_size_checks(dcr)) { - /* Error message already sent */ - return false; - } - dev->VolCatInfo.VolCatWrites++; - Dmsg1(1300, "Write block of %u bytes\n", wlen); + dev->updateVolCatWrites(1); + #ifdef DEBUG_BLOCK_ZEROING uint32_t *bp = (uint32_t *)block->buf; if (bp[0] == 0 && bp[1] == 0 && bp[2] == 0 && block->buf[12] == 0) { @@ -556,9 +201,9 @@ bool DCR::write_block_to_dev() #endif /* - * Do write here, make a somewhat feeble attempt to recover from + * Do write here, make a somewhat feeble attempt to recover from * I/O errors, or from the OS telling us it is busy. - */ + */ int retry = 0; errno = 0; stat = 0; @@ -571,7 +216,9 @@ bool DCR::write_block_to_dev() dev->clrerror(-1); } stat = dev->write(block->buf, (size_t)wlen); - + Dmsg4(110, "Write() BlockAddr=%lld NextAddr=%lld Vol=%s wlen=%d\n", + block->BlockAddr, dev->lseek(dcr, 0, SEEK_CUR), + dev->VolHdr.VolumeName, wlen); } while (stat == -1 && (errno == EBUSY || errno == EIO) && retry++ < 3); if (debug_block_checksum) { @@ -598,7 +245,7 @@ bool DCR::write_block_to_dev() */ if (stat == -1) { berrno be; - dev->clrerror(-1); + dev->clrerror(-1); /* saves errno in dev->dev_errno */ if (dev->dev_errno == 0) { dev->dev_errno = ENOSPC; /* out of space */ } @@ -611,21 +258,20 @@ bool DCR::write_block_to_dev() dev->dev_errno = ENOSPC; /* out of space */ } if (dev->dev_errno == ENOSPC) { + dev->clear_nospace(); Jmsg(jcr, M_INFO, 0, _("End of Volume \"%s\" at %u:%u on device %s. Write of %u bytes got %d.\n"), dev->getVolCatName(), dev->file, dev->block_num, dev->print_name(), wlen, stat); } - if (debug_level >= 100) { + if (chk_dbglvl(100)) { berrno be; - Dmsg7(100, "=== Write error. fd=%d size=%u rtn=%d dev_blk=%d blk_blk=%d errno=%d: ERR=%s\n", - dev->fd(), wlen, stat, dev->block_num, block->BlockNumber, + Dmsg7(90, "==== Write error. fd=%d size=%u rtn=%d dev_blk=%d blk_blk=%d errno=%d: ERR=%s\n", + dev->fd(), wlen, stat, dev->block_num, block->BlockNumber, dev->dev_errno, be.bstrerror(dev->dev_errno)); } + Dmsg0(40, "Calling terminate_writing_volume\n"); ok = terminate_writing_volume(dcr); - if (!ok && !forge_on) { - return false; - } if (ok) { reread_last_block(dcr); } @@ -633,10 +279,12 @@ bool DCR::write_block_to_dev() } /* We successfully wrote the block, now do housekeeping */ - Dmsg2(1300, "VolCatBytes=%d newVolCatBytes=%d\n", (int)dev->VolCatInfo.VolCatBytes, - (int)(dev->VolCatInfo.VolCatBytes+wlen)); - dev->VolCatInfo.VolCatBytes += wlen; - dev->VolCatInfo.VolCatBlocks++; + Dmsg2(1300, "VolCatBytes=%lld newVolCatBytes=%lld\n", dev->VolCatInfo.VolCatBytes, + (dev->VolCatInfo.VolCatBytes+wlen)); + dev->updateVolCatBytes(wlen); + Dmsg2(200, "AmetaBytes=%lld Bytes=%lld\n", + dev->VolCatInfo.VolCatAmetaBytes, dev->VolCatInfo.VolCatBytes); + dev->updateVolCatBlocks(1); dev->EndBlock = dev->block_num; dev->EndFile = dev->file; dev->LastBlock = block->BlockNumber; @@ -650,12 +298,24 @@ bool DCR::write_block_to_dev() } else { /* Save address of block just written */ uint64_t addr = dev->file_addr + wlen - 1; + if (dcr->EndBlock > (uint32_t)addr || + dcr->EndFile > (uint32_t)(addr >> 32)) { + Pmsg4(000, "Incorrect EndBlock/EndFile oldEndBlock=%d newEndBlock=%d oldEndFile=%d newEndFile=%d\n", + dcr->EndBlock, (uint32_t)addr, dcr->EndFile, (uint32_t)(addr >> 32)); + } dcr->EndBlock = (uint32_t)addr; dcr->EndFile = (uint32_t)(addr >> 32); - dev->block_num = dcr->EndBlock; - dev->file = dcr->EndFile; + dev->block_num = (uint32_t)addr; + dev->file = (uint32_t)(addr >> 32); + block->BlockAddr = dev->file_addr + wlen; + Dmsg3(150, "Set block->BlockAddr=%lld wlen=%d block=%x\n", + block->BlockAddr, wlen, block); + Dmsg2(200, "AmetaBytes=%lld Bytes=%lld\n", + dev->VolCatInfo.VolCatAmetaBytes, dev->VolCatInfo.VolCatBytes); } dcr->VolMediaId = dev->VolCatInfo.VolMediaId; + Dmsg3(150, "VolFirstIndex=%d blockFirstIndex=%d Vol=%s\n", + dcr->VolFirstIndex, block->FirstIndex, dcr->VolumeName); if (dcr->VolFirstIndex == 0 && block->FirstIndex > 0) { dcr->VolFirstIndex = block->FirstIndex; } @@ -666,287 +326,13 @@ bool DCR::write_block_to_dev() dev->file_addr += wlen; /* update file address */ dev->file_size += wlen; dev->part_size += wlen; + dev->setVolCatInfo(false); /* Needs update */ Dmsg2(1300, "write_block: wrote block %d bytes=%d\n", dev->block_num, wlen); empty_block(block); return true; } -static void reread_last_block(DCR *dcr) -{ -#define CHECK_LAST_BLOCK -#ifdef CHECK_LAST_BLOCK - bool ok = true; - DEVICE *dev = dcr->dev; - JCR *jcr = dcr->jcr; - DEV_BLOCK *block = dcr->block; - /* - * If the device is a tape and it supports backspace record, - * we backspace over one or two eof marks depending on - * how many we just wrote, then over the last record, - * then re-read it and verify that the block number is - * correct. - */ - if (dev->is_tape() && dev->has_cap(CAP_BSR)) { - /* Now back up over what we wrote and read the last block */ - if (!dev->bsf(1)) { - berrno be; - ok = false; - Jmsg(jcr, M_ERROR, 0, _("Backspace file at EOT failed. ERR=%s\n"), - be.bstrerror(dev->dev_errno)); - } - if (ok && dev->has_cap(CAP_TWOEOF) && !dev->bsf(1)) { - berrno be; - ok = false; - Jmsg(jcr, M_ERROR, 0, _("Backspace file at EOT failed. ERR=%s\n"), - be.bstrerror(dev->dev_errno)); - } - /* Backspace over record */ - if (ok && !dev->bsr(1)) { - berrno be; - ok = false; - Jmsg(jcr, M_ERROR, 0, _("Backspace record at EOT failed. ERR=%s\n"), - be.bstrerror(dev->dev_errno)); - /* - * On FreeBSD systems, if the user got here, it is likely that his/her - * tape drive is "frozen". The correct thing to do is a - * rewind(), but if we do that, higher levels in cleaning up, will - * most likely write the EOS record over the beginning of the - * tape. The rewind *is* done later in mount.c when another - * tape is requested. Note, the clrerror() call in bsr() - * calls ioctl(MTCERRSTAT), which *should* fix the problem. - */ - } - if (ok) { - DEV_BLOCK *lblock = new_block(dev); - /* Note, this can destroy dev->errmsg */ - dcr->block = lblock; - if (!dcr->read_block_from_dev(NO_BLOCK_NUMBER_CHECK)) { - Jmsg(jcr, M_ERROR, 0, _("Re-read last block at EOT failed. ERR=%s"), - dev->errmsg); - } else { - /* - * If we wrote block and the block numbers don't agree - * we have a possible problem. - */ - if (lblock->BlockNumber != dev->LastBlock) { - if (dev->LastBlock > (lblock->BlockNumber + 1)) { - Jmsg(jcr, M_FATAL, 0, _( -"Re-read of last block: block numbers differ by more than one.\n" -"Probable tape misconfiguration and data loss. Read block=%u Want block=%u.\n"), - lblock->BlockNumber, dev->LastBlock); - } else { - Jmsg(jcr, M_ERROR, 0, _( -"Re-read of last block OK, but block numbers differ. Read block=%u Want block=%u.\n"), - lblock->BlockNumber, dev->LastBlock); - } - } else { - Jmsg(jcr, M_INFO, 0, _("Re-read of last block succeeded.\n")); - } - } - free_block(lblock); - dcr->block = block; - } - } -#endif -} - -/* - * If this routine is called, we do our bookkeeping and - * then assure that the volume will not be written any - * more. - */ -static bool terminate_writing_volume(DCR *dcr) -{ - DEVICE *dev = dcr->dev; - bool ok = true; - - /* Create a JobMedia record to indicated end of tape */ - dev->VolCatInfo.VolCatFiles = dev->file; - if (!dir_create_jobmedia_record(dcr)) { - Dmsg0(50, "Error from create JobMedia\n"); - dev->dev_errno = EIO; - Mmsg2(dev->errmsg, _("Could not create JobMedia record for Volume=\"%s\" Job=%s\n"), - dcr->getVolCatName(), dcr->jcr->Job); - Jmsg(dcr->jcr, M_FATAL, 0, "%s", dev->errmsg); - ok = false; - } - dcr->block->write_failed = true; - if (!dev->weof(1)) { /* end the tape */ - dev->VolCatInfo.VolCatErrors++; - Jmsg(dcr->jcr, M_ERROR, 0, _("Error writing final EOF to tape. This Volume may not be readable.\n" - "%s"), dev->errmsg); - ok = false; - Dmsg0(50, "Error writing final EOF to volume.\n"); - } - if (ok) { - ok = write_ansi_ibm_labels(dcr, ANSI_EOV_LABEL, dev->VolHdr.VolumeName); - } - bstrncpy(dev->VolCatInfo.VolCatStatus, "Full", sizeof(dev->VolCatInfo.VolCatStatus)); - dev->VolCatInfo.VolCatFiles = dev->file; /* set number of files */ - - if (dev->is_dvd()) { - if (!dvd_write_part(dcr)) { /* write last part */ - dev->VolCatInfo.VolCatErrors++; - Jmsg(dcr->jcr, M_FATAL, 0, _("Error writing final part to DVD. " - "This Volume may not be readable.\n%s"), - dev->errmsg); - ok = false; - Dmsg0(100, "dvd_write_part error.\n"); - } - dev->VolCatInfo.VolCatParts = dev->num_dvd_parts; - } - - if (!dir_update_volume_info(dcr, false, true)) { - Mmsg(dev->errmsg, _("Error sending Volume info to Director.\n")); - ok = false; - Dmsg0(50, "Error updating volume info.\n"); - } - Dmsg1(50, "dir_update_volume_info terminate writing -- %s\n", ok?"OK":"ERROR"); - - /* - * Walk through all attached dcrs setting flag to call - * set_new_file_parameters() when that dcr is next used. - */ - DCR *mdcr; - foreach_dlist(mdcr, dev->attached_dcrs) { - if (mdcr->jcr->JobId == 0) { - continue; - } - mdcr->NewFile = true; /* set reminder to do set_new_file_params */ - } - /* Set new file/block parameters for current dcr */ - set_new_file_parameters(dcr); - - if (ok && dev->has_cap(CAP_TWOEOF) && !dev->weof(1)) { /* end the tape */ - dev->VolCatInfo.VolCatErrors++; - /* This may not be fatal since we already wrote an EOF */ - Jmsg(dcr->jcr, M_ERROR, 0, "%s", dev->errmsg); - Dmsg0(50, "Writing second EOF failed.\n"); - } - - dev->set_ateot(); /* no more writing this tape */ - Dmsg1(50, "*** Leave terminate_writing_volume -- %s\n", ok?"OK":"ERROR"); - return ok; -} - -/* - * Do bookkeeping when a new file is created on a Volume. This is - * also done for disk files to generate the jobmedia records for - * quick seeking. - */ -static bool do_new_file_bookkeeping(DCR *dcr) -{ - DEVICE *dev = dcr->dev; - JCR *jcr = dcr->jcr; - - /* Create a JobMedia record so restore can seek */ - if (!dir_create_jobmedia_record(dcr)) { - Dmsg0(50, "Error from create_job_media.\n"); - dev->dev_errno = EIO; - Jmsg2(jcr, M_FATAL, 0, _("Could not create JobMedia record for Volume=\"%s\" Job=%s\n"), - dcr->getVolCatName(), jcr->Job); - terminate_writing_volume(dcr); - dev->dev_errno = EIO; - return false; - } - dev->VolCatInfo.VolCatFiles = dev->file; - if (!dir_update_volume_info(dcr, false, false)) { - Dmsg0(50, "Error from update_vol_info.\n"); - terminate_writing_volume(dcr); - dev->dev_errno = EIO; - return false; - } - Dmsg0(100, "dir_update_volume_info max file size -- OK\n"); - - /* - * Walk through all attached dcrs setting flag to call - * set_new_file_parameters() when that dcr is next used. - */ - DCR *mdcr; - foreach_dlist(mdcr, dev->attached_dcrs) { - if (mdcr->jcr->JobId == 0) { - continue; - } - mdcr->NewFile = true; /* set reminder to do set_new_file_params */ - } - /* Set new file/block parameters for current dcr */ - set_new_file_parameters(dcr); - return true; -} - -/* - * Do all checks for DVD sizes during writing. - */ -static bool do_dvd_size_checks(DCR *dcr) -{ - DEVICE *dev = dcr->dev; - JCR *jcr = dcr->jcr; - DEV_BLOCK *block = dcr->block; - - /* Don't go further if the device is not a dvd */ - if (!dev->is_dvd()) { - return true; - } - - /* Limit maximum part size to value specified by user - */ - if (dev->max_part_size > 0 && ((dev->part_size + block->binbuf) >= dev->max_part_size)) { - if (dev->part < dev->num_dvd_parts) { - Jmsg3(dcr->jcr, M_FATAL, 0, _("Error while writing, current part number" - " is less than the total number of parts (%d/%d, device=%s)\n"), - dev->part, dev->num_dvd_parts, dev->print_name()); - dev->dev_errno = EIO; - return false; - } - - if (dvd_open_next_part(dcr) < 0) { - Jmsg2(dcr->jcr, M_FATAL, 0, _("Unable to open device next part %s: ERR=%s\n"), - dev->print_name(), dev->bstrerror()); - dev->dev_errno = EIO; - return false; - } - - dev->VolCatInfo.VolCatParts = dev->num_dvd_parts; - - if (!dir_update_volume_info(dcr, false, false)) { - Dmsg0(190, "Error from update_vol_info.\n"); - dev->dev_errno = EIO; - return false; - } - } - - dev->update_freespace(); - - if (!dev->is_freespace_ok()) { /* Error while getting free space */ - char ed1[50], ed2[50]; - Dmsg1(100, "Cannot get free space on the device ERR=%s.\n", dev->errmsg); - Jmsg(jcr, M_FATAL, 0, _("End of Volume \"%s\" at %u:%u on device %s " - "(part_size=%s, free_space=%s, free_space_errno=%d, errmsg=%s).\n"), - dev->getVolCatName(), - dev->file, dev->block_num, dev->print_name(), - edit_uint64_with_commas(dev->part_size, ed1), edit_uint64_with_commas(dev->free_space, ed2), - dev->free_space_errno, dev->errmsg); - dev->dev_errno = dev->free_space_errno; - return false; - } - - if ((dev->is_freespace_ok() && (dev->part_size + block->binbuf) >= dev->free_space)) { - char ed1[50], ed2[50]; - Dmsg0(100, "==== Just enough free space on the device to write the current part...\n"); - Jmsg(jcr, M_INFO, 0, _("End of Volume \"%s\" at %u:%u on device %s " - "(part_size=%s, free_space=%s, free_space_errno=%d).\n"), - dev->getVolCatName(), - dev->file, dev->block_num, dev->print_name(), - edit_uint64_with_commas(dev->part_size, ed1), edit_uint64_with_commas(dev->free_space, ed2), - dev->free_space_errno); - terminate_writing_volume(dcr); - dev->dev_errno = ENOSPC; - return false; - } - return true; -} - /* * Read block with locking @@ -957,9 +343,9 @@ bool DCR::read_block_from_device(bool check_block_numbers) bool ok; Dmsg0(250, "Enter read_block_from_device\n"); - dev->rLock(); + dev->rLock(false); ok = read_block_from_dev(check_block_numbers); - dev->Unlock(); + dev->rUnlock(); Dmsg0(250, "Leave read_block_from_device\n"); return ok; } @@ -981,20 +367,21 @@ bool DCR::read_block_from_dev(bool check_block_numbers) block->read_len = 0; return false; } - + if (dev->at_eot()) { Mmsg(dev->errmsg, _("Attempt to read past end of tape or file.\n")); block->read_len = 0; return false; } looping = 0; - Dmsg1(250, "Full read in read_block_from_device() len=%d\n", - block->buf_len); + Dmsg1(250, "Full read in read_block_from_device() len=%d\n", block->buf_len); if (!dev->is_open()) { Mmsg4(dev->errmsg, _("Attempt to read closed device: fd=%d at file:blk %u:%u on device %s\n"), dev->fd(), dev->file, dev->block_num, dev->print_name()); - Jmsg(dcr->jcr, M_WARNING, 0, "%s", dev->errmsg); + Jmsg(dcr->jcr, M_FATAL, 0, "%s", dev->errmsg); + Pmsg2(000, "Fatal: dev=%p dcr=%p\n", dev, dcr); + Pmsg1(000, "%s", dev->errmsg); block->read_len = 0; return false; } @@ -1008,23 +395,14 @@ reread: block->read_len = 0; return false; } - - /* Check for DVD part file end */ - if (dev->at_eof() && dev->is_dvd() && dev->num_dvd_parts > 0 && - dev->part <= dev->num_dvd_parts) { - Dmsg0(400, "Call dvd_open_next_part\n"); - if (dvd_open_next_part(dcr) < 0) { - Mmsg3(dev->errmsg, _("Unable to open device part=%d %s: ERR=%s\n"), - dev->part, dev->print_name(), dev->bstrerror()); - Jmsg(dcr->jcr, M_FATAL, 0, "%s", dev->errmsg); - dev->dev_errno = EIO; - return false; - } - } - + + dump_block(block, "before read"); + retry = 0; errno = 0; stat = 0; + + boffset_t pos = dev->lseek(dcr, (boffset_t)0, SEEK_CUR); /* get curr pos */ do { if ((retry > 0 && stat == -1 && errno == EBUSY)) { berrno be; @@ -1036,38 +414,50 @@ reread: stat = dev->read(block->buf, (size_t)block->buf_len); } while (stat == -1 && (errno == EBUSY || errno == EINTR || errno == EIO) && retry++ < 3); + Dmsg3(110, "Read() vol=%s nbytes=%d addr=%lld\n", + dev->VolHdr.VolumeName, stat, pos); if (stat < 0) { berrno be; dev->clrerror(-1); - Dmsg1(250, "Read device got: ERR=%s\n", be.bstrerror()); + Dmsg2(90, "Read device fd=%d got: ERR=%s\n", dev->fd(), be.bstrerror()); block->read_len = 0; - Mmsg5(dev->errmsg, _("Read error on fd=%d at file:blk %u:%u on device %s. ERR=%s.\n"), - dev->fd(), dev->file, dev->block_num, dev->print_name(), be.bstrerror()); + if (dev->file == 0 && dev->block_num == 0) { /* Attempt to read label */ + Mmsg(dev->errmsg, _("The Volume=%s on device=%s appears to be unlabeled.\n"), + dev->VolCatInfo.VolCatName, dev->print_name()); + } else { + Mmsg5(dev->errmsg, _("Read error on fd=%d at file:blk %u:%u on device %s. ERR=%s.\n"), + dev->fd(), dev->file, dev->block_num, dev->print_name(), be.bstrerror()); + } Jmsg(jcr, M_ERROR, 0, "%s", dev->errmsg); if (dev->at_eof()) { /* EOF just seen? */ dev->set_eot(); /* yes, error => EOT */ } return false; } - Dmsg3(250, "Read device got %d bytes at %u:%u\n", stat, - dev->file, dev->block_num); if (stat == 0) { /* Got EOF ! */ + if (dev->file == 0 && dev->block_num == 0) { /* Attempt to read label */ + Mmsg2(dev->errmsg, _("The Volume=%s on device=%s appears to be unlabeled.\n"), + dev->VolCatInfo.VolCatName, dev->print_name()); + } else { + Mmsg3(dev->errmsg, _("Read zero bytes Vol=%s at %lld on device %s.\n"), + dev->VolCatInfo.VolCatName, pos, dev->print_name()); + } dev->block_num = 0; block->read_len = 0; - Mmsg3(dev->errmsg, _("Read zero bytes at %u:%u on device %s.\n"), - dev->file, dev->block_num, dev->print_name()); + Dmsg1(100, "%s", dev->errmsg); if (dev->at_eof()) { /* EOF already read? */ dev->set_eot(); /* yes, 2 EOFs => EOT */ - return 0; + return false; } dev->set_ateof(); + Dmsg2(150, "==== Read zero bytes. vol=%s at %lld\n", dev->VolCatInfo.VolCatName, pos); return false; /* return eof */ } /* Continue here for successful read */ block->read_len = stat; /* save length read */ - if (block->read_len == 80 && + if (block->read_len == 80 && (dcr->VolCatInfo.LabelType != B_BACULA_LABEL || dcr->device->label_type != B_BACULA_LABEL)) { /* ***FIXME*** should check label */ @@ -1075,19 +465,19 @@ reread: dev->clear_eof(); goto reread; /* skip ANSI/IBM label */ } - + if (block->read_len < BLKHDR2_LENGTH) { dev->dev_errno = EIO; Mmsg4(dev->errmsg, _("Volume data error at %u:%u! Very short block of %d bytes on device %s discarded.\n"), dev->file, dev->block_num, block->read_len, dev->print_name()); Jmsg(jcr, M_ERROR, 0, "%s", dev->errmsg); - dev->set_short_block(); + dev->set_short_block(); block->read_len = block->binbuf = 0; - Dmsg2(200, "set block=%p binbuf=%d\n", block, block->binbuf); + Dmsg2(50, "set block=%p binbuf=%d\n", block, block->binbuf); return false; /* return error */ } -// BlockNumber = block->BlockNumber + 1; + //BlockNumber = block->BlockNumber + 1; if (!unser_block_header(jcr, dev, block)) { if (forge_on) { dev->file_addr += block->read_len; @@ -1102,6 +492,7 @@ reread: * re-reading the block, allocate a buffer of the correct size, * and go re-read. */ + Dmsg2(150, "block_len=%d buf_len=%d\n", block->block_len, block->buf_len); if (block->block_len > block->buf_len) { dev->dev_errno = EIO; Mmsg2(dev->errmsg, _("Block length %u is greater than buffer %u. Attempting recovery.\n"), @@ -1149,8 +540,8 @@ reread: dev->clear_short_block(); dev->clear_eof(); - dev->VolCatInfo.VolCatReads++; - dev->VolCatInfo.VolCatRBytes += block->read_len; + dev->updateVolCatReads(1); + dev->updateVolCatReadBytes(block->read_len); dev->EndBlock = dev->block_num; dev->EndFile = dev->file; @@ -1162,14 +553,14 @@ reread: dcr->EndFile = dev->EndFile; } else { /* We need to take care about a short block in EndBlock/File - * computation + * computation */ uint32_t len = MIN(block->read_len, block->block_len); uint64_t addr = dev->file_addr + len - 1; dcr->EndBlock = (uint32_t)addr; dcr->EndFile = (uint32_t)(addr >> 32); - dev->block_num = dev->EndBlock = dcr->EndBlock; - dev->file = dev->EndFile = dcr->EndFile; + dev->block_num = dev->EndBlock = (uint32_t)addr; + dev->file = dev->EndFile = (uint32_t)(addr >> 32); } dcr->VolMediaId = dev->VolCatInfo.VolMediaId; dev->file_addr += block->read_len; @@ -1195,14 +586,14 @@ reread: Dmsg1(250, "Current lseek pos=%s\n", edit_int64(pos, ed1)); pos -= (block->read_len - block->block_len); dev->lseek(dcr, pos, SEEK_SET); - Dmsg3(250, "Did lseek pos=%s blk_size=%d rdlen=%d\n", + Dmsg3(250, "Did lseek pos=%s blk_size=%d rdlen=%d\n", edit_int64(pos, ed1), block->block_len, block->read_len); dev->file_addr = pos; dev->file_size = pos; } - Dmsg2(250, "Exit read_block read_len=%d block_len=%d\n", - block->read_len, block->block_len); + Dmsg3(150, "Exit read_block read_len=%d block_len=%d binbuf=%d\n", + block->read_len, block->block_len, block->binbuf); block->block_read = true; return true; } diff --git a/bacula/src/stored/block.h b/bacula/src/stored/block.h index 320058d1bc..a438350423 100644 --- a/bacula/src/stored/block.h +++ b/bacula/src/stored/block.h @@ -1,34 +1,22 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2012 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Block definitions for Bacula media data format. * - * Kern Sibbald, MM + * Written by Kern Sibbald, MM * */ @@ -53,7 +41,13 @@ /* Record header definitions */ #define RECHDR1_LENGTH 20 -#define RECHDR2_LENGTH 12 +/* + * Record header consists of: + * int32_t FileIndex + * int32_t Stream + * uint32_t data_length + */ +#define RECHDR2_LENGTH (3*sizeof(int32_t)) #define WRITE_RECHDR_LENGTH RECHDR2_LENGTH /* Tape label and version definitions */ @@ -66,16 +60,23 @@ /* * This is the Media structure for a block header * Note, when written, it is serialized. + 16 bytes uint32_t CheckSum; uint32_t block_len; uint32_t BlockNumber; char Id[BLKHDR_ID_LENGTH]; - * for BB02 block, we also have + * for BB02 block, we have + 24 bytes + uint32_t CheckSum; + uint32_t block_len; + uint32_t BlockNumber; + char Id[BLKHDR_ID_LENGTH]; uint32_t VolSessionId; uint32_t VolSessionTime; + */ class DEVICE; /* for forward reference */ @@ -96,20 +97,29 @@ struct DEV_BLOCK { * For writes, it is bytes not yet written. * For reads, it is remaining bytes not yet read. */ + uint64_t BlockAddr; /* Block address */ uint32_t binbuf; /* bytes in buffer */ uint32_t block_len; /* length of current block read */ uint32_t buf_len; /* max/default block length */ + uint32_t reclen; /* Last record length put in block */ uint32_t BlockNumber; /* sequential Bacula block number */ uint32_t read_len; /* bytes read into buffer, if zero, block empty */ uint32_t VolSessionId; /* */ uint32_t VolSessionTime; /* */ uint32_t read_errors; /* block errors (checksum, header, ...) */ + uint32_t CheckSum; /* Block checksum */ int BlockVer; /* block version 1 or 2 */ bool write_failed; /* set if write failed */ bool block_read; /* set when block read */ + bool needs_write; /* block must be written */ + bool no_header; /* Set if no block header */ + bool new_fi; /* New FI arrived */ int32_t FirstIndex; /* first index this block */ int32_t LastIndex; /* last index this block */ + int32_t rechdr_items; /* number of items in rechdr queue */ char *bufp; /* pointer into buffer */ + char ser_buf[BLKHDR2_LENGTH]; /* Serial buffer for data */ + POOLMEM *rechdr_queue; /* record header queue */ POOLMEM *buf; /* actual data buffer */ }; diff --git a/bacula/src/stored/block_util.c b/bacula/src/stored/block_util.c new file mode 100644 index 0000000000..790dad89b7 --- /dev/null +++ b/bacula/src/stored/block_util.c @@ -0,0 +1,674 @@ +/* + Bacula® - The Network Backup Solution + + Copyright (C) 2001-2014 Free Software Foundation Europe e.V. + + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. + + Bacula® is a registered trademark of Kern Sibbald. +*/ +/* + * + * block_util.c -- tape block utility functions + * + * Kern Sibbald, split from block.c March MMXII + * + */ + + +#include "bacula.h" +#include "stored.h" + +static const int dbgel = 160; + +#ifdef DEBUG_BLOCK_CHECKSUM +static const bool debug_block_checksum = true; +#else +static const bool debug_block_checksum = false; +#endif + +#ifdef NO_TAPE_WRITE_TEST +static const bool no_tape_write_test = true; +#else +static const bool no_tape_write_test = false; +#endif + +/* + * Dump the block header, then walk through + * the block printing out the record headers. + */ +void dump_block(DEV_BLOCK *b, const char *msg) +{ + ser_declare; + char *p; + char Id[BLKHDR_ID_LENGTH+1]; + uint32_t CheckSum, BlockCheckSum; + uint32_t block_len, reclen; + uint32_t BlockNumber; + uint32_t VolSessionId, VolSessionTime, data_len; + int32_t FileIndex; + int32_t Stream; + int bhl, rhl; + char buf1[100], buf2[100]; + + if ((debug_level & ~DT_ALL) < 250) { + return; + } + unser_begin(b->buf, BLKHDR1_LENGTH); + unser_uint32(CheckSum); + unser_uint32(block_len); + unser_uint32(BlockNumber); + unser_bytes(Id, BLKHDR_ID_LENGTH); + ASSERT(unser_length(b->buf) == BLKHDR1_LENGTH); + Id[BLKHDR_ID_LENGTH] = 0; + if (Id[3] == '2') { + unser_uint32(VolSessionId); + unser_uint32(VolSessionTime); + bhl = BLKHDR2_LENGTH; + rhl = RECHDR2_LENGTH; + } else { + VolSessionId = VolSessionTime = 0; + bhl = BLKHDR1_LENGTH; + rhl = RECHDR1_LENGTH; + } + + if (block_len > 4000000) { + Dmsg3(20, "!!!Dump block %s 0x%x blocksize too big %u\n", msg, b, block_len); + return; + } + + BlockCheckSum = bcrc32((uint8_t *)b->buf+BLKHDR_CS_LENGTH, + block_len-BLKHDR_CS_LENGTH); + Pmsg6(000, _("Dump block %s %p: size=%d BlkNum=%d\n" +" Hdrcksum=%x cksum=%x\n"), + msg, b, block_len, BlockNumber, CheckSum, BlockCheckSum); + p = b->buf + bhl; + while (p < b->bufp) { + unser_begin(p, WRITE_RECHDR_LENGTH); + if (rhl == RECHDR1_LENGTH) { + unser_uint32(VolSessionId); + unser_uint32(VolSessionTime); + } + unser_int32(FileIndex); + unser_int32(Stream); + unser_uint32(data_len); + reclen = 0; + p += data_len + rhl; + Pmsg6(000, _(" Rec: VId=%u VT=%u FI=%s Strm=%s len=%d reclen=%d\n"), + VolSessionId, VolSessionTime, FI_to_ascii(buf1, FileIndex), + stream_to_ascii(buf2, Stream, FileIndex), data_len, reclen); + } +} + +/* + * Create a new block structure. + * We pass device so that the block can inherit the + * min and max block sizes. + */ +DEV_BLOCK *new_block(DEVICE *dev) +{ + DEV_BLOCK *block = (DEV_BLOCK *)get_memory(sizeof(DEV_BLOCK)); + int len; + + memset(block, 0, sizeof(DEV_BLOCK)); + + /* If the user has specified a max_block_size, use it as the default */ + if (dev->max_block_size == 0) { + len = DEFAULT_BLOCK_SIZE; + } else { + len = dev->max_block_size; + } + block->dev = dev; + /* + * Round to multiple of block size + ensure that + * the data length is a multiple of the block size + */ + block->buf_len = len; + block->buf = get_memory(block->buf_len); + block->rechdr_queue = get_memory(block->buf_len); + block->rechdr_items = 0; + empty_block(block); + block->BlockVer = BLOCK_VER; /* default write version */ + Dmsg2(150, "New block len=%d block=%p\n", len, block); + return block; +} + + +/* + * Duplicate an existing block (eblock) + */ +DEV_BLOCK *dup_block(DEV_BLOCK *eblock) +{ + DEV_BLOCK *block = (DEV_BLOCK *)get_memory(sizeof(DEV_BLOCK)); + int buf_len = sizeof_pool_memory(eblock->buf); + + memcpy(block, eblock, sizeof(DEV_BLOCK)); + block->buf = get_memory(buf_len); + memcpy(block->buf, eblock->buf, buf_len); + return block; +} + + +/* + * Only the first block checksum error was reported. + * If there are more, report it now. + */ +void print_block_read_errors(JCR *jcr, DEV_BLOCK *block) +{ + if (block->read_errors > 1) { + Jmsg(jcr, M_ERROR, 0, _("%d block read errors not printed.\n"), + block->read_errors); + } +} + + +void DCR::free_blocks() +{ + if (block) { + free_block(block); + } +} + +/* + * Free block + */ +void free_block(DEV_BLOCK *block) +{ + if (block) { + Dmsg1(999, "free_block buffer %x\n", block->buf); + free_memory(block->buf); + free_memory(block->rechdr_queue); + Dmsg1(999, "free_block block %x\n", block); + free_memory((POOLMEM *)block); + } +} + +bool is_block_empty(DEV_BLOCK *block) +{ + return block->binbuf <= WRITE_BLKHDR_LENGTH; +} + +/* Empty the block -- for writing */ +void empty_block(DEV_BLOCK *block) +{ + block->binbuf = WRITE_BLKHDR_LENGTH; + Dmsg3(200, "empty len=%d block=%p set binbuf=%d\n", + block->buf_len, block, block->binbuf); + block->bufp = block->buf + block->binbuf; + block->buf[0] = 0; /* clear for debugging */ + block->bufp[0] = 0; /* clear for debugging */ + block->read_len = 0; + block->write_failed = false; + block->block_read = false; + block->needs_write = false; + block->FirstIndex = block->LastIndex = 0; +} + +/* + * Create block header just before write. The space + * in the buffer should have already been reserved by + * init_block. + */ +uint32_t ser_block_header(DEV_BLOCK *block, bool do_checksum) +{ + ser_declare; + uint32_t block_len = block->binbuf; + + block->CheckSum = 0; + Dmsg1(160, "block_header: block_len=%d\n", block_len); + ser_begin(block->buf, BLKHDR2_LENGTH); + ser_uint32(block->CheckSum); + ser_uint32(block_len); + ser_uint32(block->BlockNumber); + ser_bytes(WRITE_BLKHDR_ID, BLKHDR_ID_LENGTH); + if (BLOCK_VER >= 2) { + ser_uint32(block->VolSessionId); + ser_uint32(block->VolSessionTime); + } + + /* Checksum whole block except for the checksum */ + if (do_checksum) { + block->CheckSum = bcrc32((uint8_t *)block->buf+BLKHDR_CS_LENGTH, + block_len-BLKHDR_CS_LENGTH); + } + Dmsg1(160, "ser_block_header: checksum=%x\n", block->CheckSum); + ser_begin(block->buf, BLKHDR2_LENGTH); + ser_uint32(block->CheckSum); /* now add checksum to block header */ + return block->CheckSum; +} + +/* + * Unserialize the block header for reading block. + * This includes setting all the buffer pointers correctly. + * + * Returns: false on failure (not a block) + * true on success + */ +bool unser_block_header(JCR *jcr, DEVICE *dev, DEV_BLOCK *block) +{ + ser_declare; + char Id[BLKHDR_ID_LENGTH+1]; + uint32_t BlockCheckSum; + uint32_t block_len; + uint32_t block_end; + uint32_t BlockNumber; + int bhl; + + if (block->no_header) { + return true; + } + unser_begin(block->buf, BLKHDR_LENGTH); + unser_uint32(block->CheckSum); + unser_uint32(block_len); + unser_uint32(BlockNumber); + unser_bytes(Id, BLKHDR_ID_LENGTH); + ASSERT(unser_length(block->buf) == BLKHDR1_LENGTH); + + Id[BLKHDR_ID_LENGTH] = 0; + if (Id[3] == '1') { + bhl = BLKHDR1_LENGTH; + block->BlockVer = 1; + block->bufp = block->buf + bhl; + //Dmsg3(100, "Block=%p buf=%p bufp=%p\n", block, block->buf, block->bufp); + if (strncmp(Id, BLKHDR1_ID, BLKHDR_ID_LENGTH) != 0) { + dev->dev_errno = EIO; + Mmsg4(dev->errmsg, _("Volume data error at %u:%u! Wanted ID: \"%s\", got \"%s\". Buffer discarded.\n"), + dev->file, dev->block_num, BLKHDR1_ID, Id); + if (block->read_errors == 0 || verbose >= 2) { + Jmsg(jcr, M_ERROR, 0, "%s", dev->errmsg); + } + block->read_errors++; + return false; + } + } else if (Id[3] == '2') { + unser_uint32(block->VolSessionId); + unser_uint32(block->VolSessionTime); + bhl = BLKHDR2_LENGTH; + block->BlockVer = 2; + block->bufp = block->buf + bhl; + if (strncmp(Id, BLKHDR2_ID, BLKHDR_ID_LENGTH) != 0) { + dev->dev_errno = EIO; + Mmsg4(dev->errmsg, _("Volume data error at %u:%u! Wanted ID: \"%s\", got \"%s\". Buffer discarded.\n"), + dev->file, dev->block_num, BLKHDR2_ID, Id); + if (block->read_errors == 0 || verbose >= 2) { + Jmsg(jcr, M_ERROR, 0, "%s", dev->errmsg); + } + block->read_errors++; + return false; + } + } else { + dev->dev_errno = EIO; + Mmsg4(dev->errmsg, _("Volume data error at %u:%u! Wanted ID: \"%s\", got \"%s\". Buffer discarded.\n"), + dev->file, dev->block_num, BLKHDR2_ID, Id); + Dmsg1(50, "%s", dev->errmsg); + if (block->read_errors == 0 || verbose >= 2) { + Jmsg(jcr, M_ERROR, 0, "%s", dev->errmsg); + } + block->read_errors++; + unser_uint32(block->VolSessionId); + unser_uint32(block->VolSessionTime); + return false; + } + + /* Sanity check */ + if (block_len > MAX_BLOCK_LENGTH) { + dev->dev_errno = EIO; + Mmsg3(dev->errmsg, _("Volume data error at %u:%u! Block length %u is insane (too large), probably due to a bad archive.\n"), + dev->file, dev->block_num, block_len); + if (block->read_errors == 0 || verbose >= 2) { + Jmsg(jcr, M_ERROR, 0, "%s", dev->errmsg); + } + block->read_errors++; + return false; + } + + Dmsg1(390, "unser_block_header block_len=%d\n", block_len); + /* Find end of block or end of buffer whichever is smaller */ + if (block_len > block->read_len) { + block_end = block->read_len; + } else { + block_end = block_len; + } + block->binbuf = block_end - bhl; + Dmsg2(200, "set block=%p binbuf=%d\n", block, block->binbuf); + block->block_len = block_len; + block->BlockNumber = BlockNumber; + Dmsg3(390, "Read binbuf = %d %d block_len=%d\n", block->binbuf, + bhl, block_len); + if (block_len <= block->read_len && dev->do_checksum()) { + BlockCheckSum = bcrc32((uint8_t *)block->buf+BLKHDR_CS_LENGTH, + block_len-BLKHDR_CS_LENGTH); + if (BlockCheckSum != block->CheckSum) { + dev->dev_errno = EIO; + Mmsg6(dev->errmsg, _("Volume data error at %u:%u!\n" + "Block checksum mismatch in block=%u len=%d: calc=%x blk=%x\n"), + dev->file, dev->block_num, (unsigned)BlockNumber, + block_len, BlockCheckSum, block->CheckSum); + if (block->read_errors == 0 || verbose >= 2) { + Jmsg(jcr, M_ERROR, 0, "%s", dev->errmsg); + dump_block(block, "with checksum error"); + } + block->read_errors++; + if (!forge_on) { + return false; + } + } + } + return true; +} + +/* + * Calculate how many bytes to write and then clear to end + * of block. + */ +uint32_t get_len_and_clear_block(DEV_BLOCK *block, DEVICE *dev, uint32_t &pad) +{ + uint32_t wlen; + /* + * Clear to the end of the buffer if it is not full, + * and on tape devices, apply min and fixed blocking. + */ + wlen = block->binbuf; + if (wlen != block->buf_len) { + Dmsg2(250, "binbuf=%d buf_len=%d\n", block->binbuf, block->buf_len); + + /* Adjust write size to min/max for tapes only */ + if (dev->is_tape()) { + /* check for fixed block size */ + if (dev->min_block_size == dev->max_block_size) { + wlen = block->buf_len; /* fixed block size already rounded */ + /* Check for min block size */ + } else if (wlen < dev->min_block_size) { + wlen = ((dev->min_block_size + TAPE_BSIZE - 1) / TAPE_BSIZE) * TAPE_BSIZE; + /* Ensure size is rounded */ + } else { + wlen = ((wlen + TAPE_BSIZE - 1) / TAPE_BSIZE) * TAPE_BSIZE; + } + } + ASSERT(wlen <= block->buf_len); + /* Clear from end of data to end of block */ + if (wlen-block->binbuf > 0) { + memset(block->bufp, 0, wlen-block->binbuf); /* clear garbage */ + } + pad = wlen - block->binbuf; /* padding or zeros written */ + Dmsg4(150, "Zero end blk: cleared=%d buf_len=%d wlen=%d binbuf=%d\n", + pad, block->buf_len, wlen, block->binbuf); + } else { + pad = 0; + } + + return wlen; /* bytes to write */ +} + +/* + * Determine if user defined volume size has been + * reached, and if so, return true, otherwise + * return false. + */ +bool user_volume_size_reached(DCR *dcr, bool quiet) +{ + bool hit_max1, hit_max2; + uint64_t size, max_size; + DEVICE *dev = dcr->dev; + char ed1[50]; + bool rtn = false; + + Enter(dbgel); + size = dev->VolCatInfo.VolCatBytes + dcr->block->binbuf; + /* Limit maximum Volume size to value specified by user */ + hit_max1 = (dev->max_volume_size > 0) && (size >= dev->max_volume_size); + hit_max2 = (dev->VolCatInfo.VolCatMaxBytes > 0) && + (size >= dev->VolCatInfo.VolCatMaxBytes); + if (hit_max1) { + max_size = dev->max_volume_size; + } else { + max_size = dev->VolCatInfo.VolCatMaxBytes; + } + if (hit_max1 || hit_max2) { + if (!quiet) { + Jmsg(dcr->jcr, M_INFO, 0, _("User defined maximum volume size %s will be exceeded on device %s.\n" + " Marking Volume \"%s\" as Full.\n"), + edit_uint64_with_commas(max_size, ed1), dev->print_name(), + dev->getVolCatName()); + } + Dmsg4(100, "Maximum volume size %s exceeded Vol=%s device=%s.\n" + "Marking Volume \"%s\" as Full.\n", + edit_uint64_with_commas(max_size, ed1), dev->getVolCatName(), + dev->print_name(), dev->getVolCatName()); + rtn = true; + } + Dmsg1(dbgel, "Return from user_volume_size_reached=%d\n", rtn); + Leave(dbgel); + return rtn; +} + + +void reread_last_block(DCR *dcr) +{ +#define CHECK_LAST_BLOCK +#ifdef CHECK_LAST_BLOCK + bool ok = true; + DEVICE *dev = dcr->dev; + JCR *jcr = dcr->jcr; + DEV_BLOCK *block = dcr->block; + /* + * If the device is a tape and it supports backspace record, + * we backspace over one or two eof marks depending on + * how many we just wrote, then over the last record, + * then re-read it and verify that the block number is + * correct. + */ + if (dev->is_tape() && dev->has_cap(CAP_BSR)) { + /* Now back up over what we wrote and read the last block */ + if (!dev->bsf(1)) { + berrno be; + ok = false; + Jmsg(jcr, M_ERROR, 0, _("Backspace file at EOT failed. ERR=%s\n"), + be.bstrerror(dev->dev_errno)); + } + if (ok && dev->has_cap(CAP_TWOEOF) && !dev->bsf(1)) { + berrno be; + ok = false; + Jmsg(jcr, M_ERROR, 0, _("Backspace file at EOT failed. ERR=%s\n"), + be.bstrerror(dev->dev_errno)); + } + /* Backspace over record */ + if (ok && !dev->bsr(1)) { + berrno be; + ok = false; + Jmsg(jcr, M_ERROR, 0, _("Backspace record at EOT failed. ERR=%s\n"), + be.bstrerror(dev->dev_errno)); + /* + * On FreeBSD systems, if the user got here, it is likely that his/her + * tape drive is "frozen". The correct thing to do is a + * rewind(), but if we do that, higher levels in cleaning up, will + * most likely write the EOS record over the beginning of the + * tape. The rewind *is* done later in mount.c when another + * tape is requested. Note, the clrerror() call in bsr() + * calls ioctl(MTCERRSTAT), which *should* fix the problem. + */ + } + if (ok) { + DEV_BLOCK *lblock = new_block(dev); + /* Note, this can destroy dev->errmsg */ + dcr->block = lblock; + if (!dcr->read_block_from_dev(NO_BLOCK_NUMBER_CHECK)) { + Jmsg(jcr, M_ERROR, 0, _("Re-read last block at EOT failed. ERR=%s"), + dev->errmsg); + } else { + /* + * If we wrote block and the block numbers don't agree + * we have a possible problem. + */ + if (lblock->BlockNumber != dev->LastBlock) { + if (dev->LastBlock > (lblock->BlockNumber + 1)) { + Jmsg(jcr, M_FATAL, 0, _( +"Re-read of last block: block numbers differ by more than one.\n" +"Probable tape misconfiguration and data loss. Read block=%u Want block=%u.\n"), + lblock->BlockNumber, dev->LastBlock); + } else { + Jmsg(jcr, M_ERROR, 0, _( +"Re-read of last block OK, but block numbers differ. Read block=%u Want block=%u.\n"), + lblock->BlockNumber, dev->LastBlock); + } + } else { + Jmsg(jcr, M_INFO, 0, _("Re-read of last block succeeded.\n")); + } + } + free_block(lblock); + dcr->block = block; + } + } +#endif +} + +/* + * If this routine is called, we do our bookkeeping and + * then assure that the volume will not be written any + * more. + */ +bool terminate_writing_volume(DCR *dcr) +{ + DEVICE *dev = dcr->dev; + bool ok = true; + + Enter(dbgel); + + if (dev->is_ateot()) { + return ok; /* already been here return now */ + } + + /* Create a JobMedia record to indicated end of medium */ + dev->VolCatInfo.VolCatFiles = dev->get_file(); + if (!dir_create_jobmedia_record(dcr)) { + Dmsg0(50, "Error from create JobMedia\n"); + dev->dev_errno = EIO; + Mmsg2(dev->errmsg, _("Could not create JobMedia record for Volume=\"%s\" Job=%s\n"), + dev->getVolCatName(), dcr->jcr->Job); + Jmsg(dcr->jcr, M_FATAL, 0, "%s", dev->errmsg); + ok = false; + } + dcr->block->write_failed = true; + if (dev->can_append() && !dev->weof(1)) { /* end the tape */ + dev->VolCatInfo.VolCatErrors++; + Jmsg(dcr->jcr, M_ERROR, 0, _("Error writing final EOF to tape. This Volume may not be readable.\n" + "%s"), dev->errmsg); + ok = false; + Dmsg0(50, "Error writing final EOF to volume.\n"); + } + if (ok) { + ok = write_ansi_ibm_labels(dcr, ANSI_EOV_LABEL, dev->VolHdr.VolumeName); + } + + Dmsg2(100, "Set VolCatStatus Full size=%lld vol=%s\n", + dev->VolCatInfo.VolCatBytes, dev->VolCatInfo.VolCatName); + + /* If still in append mode mark volume Full */ + if (bstrcmp(dev->VolCatInfo.VolCatStatus, "Append")) { + dev->setVolCatStatus("Full"); + } + + if (!dir_update_volume_info(dcr, false, true)) { + Mmsg(dev->errmsg, _("Error sending Volume info to Director.\n")); + ok = false; + Dmsg0(50, "Error updating volume info.\n"); + } + Dmsg2(150, "dir_update_volume_info vol=%s to terminate writing -- %s\n", + dev->getVolCatName(), ok?"OK":"ERROR"); + + dev->notify_newvol_in_attached_dcrs(NULL); + + /* Set new file/block parameters for current dcr */ + set_new_file_parameters(dcr); + + if (ok && dev->has_cap(CAP_TWOEOF) && dev->can_append() && !dev->weof(1)) { /* end the tape */ + dev->VolCatInfo.VolCatErrors++; + /* This may not be fatal since we already wrote an EOF */ + Jmsg(dcr->jcr, M_ERROR, 0, "%s", dev->errmsg); + Dmsg0(50, "Writing second EOF failed.\n"); + } + + dev->set_ateot(); /* no more writing this tape */ + Dmsg2(150, "Leave terminate_writing_volume=%s -- %s\n", + dev->getVolCatName(), ok?"OK":"ERROR"); + Leave(dbgel); + return ok; +} + +/* + * If a new volume has been mounted since our last write + * Create a JobMedia record for the previous volume written, + * and set new parameters to write this volume + * The same applies for if we are in a new file. + */ +bool check_for_newvol_or_newfile(DCR *dcr) +{ + JCR *jcr = dcr->jcr; + + if (dcr->NewVol || dcr->NewFile) { + if (job_canceled(jcr)) { + Dmsg0(100, "Canceled\n"); + return false; + } + /* Create a jobmedia record for this job */ + if (!dir_create_jobmedia_record(dcr)) { + dcr->dev->dev_errno = EIO; + Jmsg2(jcr, M_FATAL, 0, _("Could not create JobMedia record for Volume=\"%s\" Job=%s\n"), + dcr->getVolCatName(), jcr->Job); + set_new_volume_parameters(dcr); + Dmsg0(100, "cannot create media record\n"); + return false; + } + if (dcr->NewVol) { + /* Note, setting a new volume also handles any pending new file */ + set_new_volume_parameters(dcr); + } else { + set_new_file_parameters(dcr); + } + } + return true; +} + +/* + * Do bookkeeping when a new file is created on a Volume. This is + * also done for disk files to generate the jobmedia records for + * quick seeking. + */ +bool do_new_file_bookkeeping(DCR *dcr) +{ + DEVICE *dev = dcr->dev; + JCR *jcr = dcr->jcr; + + /* Create a JobMedia record so restore can seek */ + if (!dir_create_jobmedia_record(dcr)) { + Dmsg0(40, "Error from create_job_media.\n"); + dev->dev_errno = EIO; + Jmsg2(jcr, M_FATAL, 0, _("Could not create JobMedia record for Volume=\"%s\" Job=%s\n"), + dcr->getVolCatName(), jcr->Job); + Dmsg0(40, "Call terminate_writing_volume\n"); + terminate_writing_volume(dcr); + dev->dev_errno = EIO; + return false; + } + dev->VolCatInfo.VolCatFiles = dev->get_file(); + if (!dir_update_volume_info(dcr, false, false)) { + Dmsg0(50, "Error from update_vol_info.\n"); + Dmsg0(40, "Call terminate_writing_volume\n"); + terminate_writing_volume(dcr); + dev->dev_errno = EIO; + return false; + } + Dmsg0(100, "dir_update_volume_info max file size -- OK\n"); + + dev->notify_newfile_in_attached_dcrs(); + + /* Set new file/block parameters for current dcr */ + set_new_file_parameters(dcr); + return true; +} diff --git a/bacula/src/stored/bls.c b/bacula/src/stored/bls.c index 771f855484..c7d1957014 100644 --- a/bacula/src/stored/bls.c +++ b/bacula/src/stored/bls.c @@ -1,34 +1,22 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2012 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * * Dumb program to do an "ls" of a Bacula 1.0 mortal file. - * + * * Kern Sibbald, MM * */ @@ -60,6 +48,7 @@ static uint32_t num_files = 0; static ATTR *attr; static CONFIG *config; +void *start_heap; #define CONFIG_FILE "bacula-sd.conf" char *configfile = NULL; STORES *me = NULL; /* our Global resource */ @@ -218,6 +207,8 @@ int main (int argc, char *argv[]) config = new_config_parser(); parse_sd_config(config, configfile, M_ERROR_TERM); + setup_me(); + load_sd_plugins(me->plugin_directory); if (ff->included_files_list == NULL) { add_fname_to_include_list(ff, 0, "/"); @@ -227,7 +218,7 @@ int main (int argc, char *argv[]) if (bsrName) { bsr = parse_bsr(NULL, bsrName); } - jcr = setup_jcr("bls", argv[i], bsr, VolumeName, 1); /* acquire for read */ + jcr = setup_jcr("bls", argv[i], bsr, VolumeName, SD_READ); if (!jcr) { exit(1); } @@ -374,10 +365,18 @@ static void do_ls(char *infname) */ static bool record_cb(DCR *dcr, DEV_RECORD *rec) { - if (rec->FileIndex < 0) { - get_session_record(dev, rec, &sessrec); + if (verbose && rec->FileIndex < 0) { + dump_label_record(dcr->dev, rec, verbose); return true; } + if (verbose) { + char buf1[100], buf2[100]; + Pmsg6(000, "Record: FI=%s SessId=%d Strm=%s len=%u remlen=%d data_len=%d\n", + FI_to_ascii(buf1, rec->FileIndex), rec->VolSessionId, + stream_to_ascii(buf2, rec->Stream, rec->FileIndex), rec->data_bytes, rec->remlen, + rec->data_len); + } + /* File Attributes stream */ if (rec->maskedStream == STREAM_UNIX_ATTRIBUTES || rec->maskedStream == STREAM_UNIX_ATTRIBUTES_EX) { @@ -396,7 +395,7 @@ static bool record_cb(DCR *dcr, DEV_RECORD *rec) if (file_is_included(ff, attr->fname) && !file_is_excluded(ff, attr->fname)) { if (verbose) { - Pmsg5(-1, _("FileIndex=%d VolSessionId=%d VolSessionTime=%d Stream=%d DataLen=%d\n"), + Pmsg5(000, _("FileIndex=%d VolSessionId=%d VolSessionTime=%d Stream=%d DataLen=%d\n"), rec->FileIndex, rec->VolSessionId, rec->VolSessionTime, rec->Stream, rec->data_len); } print_ls_output(jcr, attr); @@ -406,11 +405,11 @@ static bool record_cb(DCR *dcr, DEV_RECORD *rec) char data[100]; int len = MIN(rec->data_len+1, sizeof(data)); bstrncpy(data, rec->data, len); - Pmsg1(000, "Plugin data: %s\n", data); + Dmsg1(100, "Plugin data: %s\n", data); } else if (rec->Stream == STREAM_RESTORE_OBJECT) { - Pmsg0(000, "Restore Object record\n"); + Dmsg0(100, "Restore Object record\n"); } - + return true; } @@ -451,7 +450,7 @@ static void get_session_record(DEVICE *dev, DEV_RECORD *rec, SESSION_LABEL *sess break; default: rtype = _("Unknown"); - Dmsg1(10, "FI rtype=%d unknown\n", rec->FileIndex); + Dmsg1(10, "FI rtype=%d unknown\n", rec->FileIndex); break; } Dmsg5(10, "%s Record: VolSessionId=%d VolSessionTime=%d JobId=%d DataLen=%d\n", @@ -471,9 +470,9 @@ bool dir_ask_sysop_to_create_appendable_volume(DCR *dcr) { return 1; } bool dir_update_file_attributes(DCR *dcr, DEV_RECORD *rec) { return 1;} bool dir_send_job_status(JCR *jcr) {return 1;} int generate_job_event(JCR *jcr, const char *event) { return 1; } - -bool dir_ask_sysop_to_mount_volume(DCR *dcr, int /*mode*/) + +bool dir_ask_sysop_to_mount_volume(DCR *dcr, bool /*writing*/) { DEVICE *dev = dcr->dev; fprintf(stderr, _("Mount Volume \"%s\" on device %s and press return when ready: "), @@ -487,7 +486,9 @@ bool dir_get_volume_info(DCR *dcr, enum get_vol_info_rw writing) { Dmsg0(100, "Fake dir_get_volume_info\n"); dcr->setVolCatName(dcr->VolumeName); +#ifdef BUILD_DVD dcr->VolCatInfo.VolCatParts = find_num_dvd_parts(dcr); +#endif Dmsg2(500, "Vol=%s num_parts=%d\n", dcr->getVolCatName(), dcr->VolCatInfo.VolCatParts); return 1; } diff --git a/bacula/src/stored/bscan.c b/bacula/src/stored/bscan.c index e0f635f3a5..fbfe75a3b7 100644 --- a/bacula/src/stored/bscan.c +++ b/bacula/src/stored/bscan.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2001-2011 Free Software Foundation Europe e.V. + Copyright (C) 2001-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * @@ -40,7 +28,7 @@ #include "findlib/find.h" #include "cats/cats.h" #include "cats/sql_glue.h" - + /* Dummy functions */ int generate_daemon_event(JCR *jcr, const char *event) { return 1; } extern bool parse_sd_config(CONFIG *config, const char *configfile, int exit_code); @@ -104,6 +92,8 @@ static int num_files = 0; static CONFIG *config; #define CONFIG_FILE "bacula-sd.conf" + +void *start_heap; char *configfile = NULL; STORES *me = NULL; /* our Global resource */ bool forge_on = false; /* proceed inspite of I/O errors */ @@ -135,7 +125,8 @@ PROG_COPYRIGHT " -v verbose\n" " -V specify Volume names (separated by |)\n" " -w

specify working directory (default from conf file)\n" -" -? print this message\n\n"), 2001, VERSION, BDATE); +" -? print this message\n\n"), + 2001, VERSION, BDATE); exit(1); } @@ -190,7 +181,7 @@ int main (int argc, char *argv[]) case 'h': db_host = optarg; break; - + case 't': db_port = atoi(optarg); break; @@ -255,14 +246,9 @@ int main (int argc, char *argv[]) config = new_config_parser(); parse_sd_config(config, configfile, M_ERROR_TERM); - LockRes(); - me = (STORES *)GetNextRes(R_STORAGE, NULL); - if (!me) { - UnlockRes(); - Emsg1(M_ERROR_TERM, 0, _("No Storage resource defined in %s. Cannot continue.\n"), - configfile); - } - UnlockRes(); + setup_me(); + load_sd_plugins(me->plugin_directory); + /* Check if -w option given, otherwise use resource for working directory */ if (wd) { working_directory = wd; @@ -283,7 +269,7 @@ int main (int argc, char *argv[]) working_directory); } - bjcr = setup_jcr("bscan", argv[0], bsr, VolumeName, 1); /* read device */ + bjcr = setup_jcr("bscan", argv[0], bsr, VolumeName, SD_READ); if (!bjcr) { exit(1); } @@ -293,7 +279,7 @@ int main (int argc, char *argv[]) struct stat sb; fstat(dev->fd(), &sb); currentVolumeSize = sb.st_size; - Pmsg1(000, _("First Volume Size = %s\n"), + Pmsg1(000, _("First Volume Size = %s\n"), edit_uint64(currentVolumeSize, ed1)); } @@ -335,7 +321,7 @@ static bool bscan_mount_next_read_volume(DCR *dcr) Dmsg1(100, "Walk attached jcrs. Volume=%s\n", dev->getVolCatName()); foreach_dlist(mdcr, dev->attached_dcrs) { JCR *mjcr = mdcr->jcr; - Dmsg1(000, "========== JobId=%u ========\n", mjcr->JobId); + Dmsg1(100, "========== JobId=%u ========\n", mjcr->JobId); if (mjcr->JobId == 0) { continue; } @@ -369,7 +355,7 @@ static bool bscan_mount_next_read_volume(DCR *dcr) struct stat sb; fstat(dev->fd(), &sb); currentVolumeSize = sb.st_size; - Pmsg1(000, _("First Volume Size = %s\n"), + Pmsg1(000, _("First Volume Size = %s\n"), edit_uint64(currentVolumeSize, ed1)); } return stat; @@ -451,7 +437,7 @@ static bool record_cb(DCR *dcr, DEV_RECORD *rec) bstrncpy(pr.Name, dev->VolHdr.PoolName, sizeof(pr.Name)); bstrncpy(pr.PoolType, dev->VolHdr.PoolType, sizeof(pr.PoolType)); num_pools++; - if (db_get_pool_record(bjcr, db, &pr)) { + if (db_get_pool_numvols(bjcr, db, &pr)) { if (verbose) { Pmsg1(000, _("Pool record for %s found in DB.\n"), pr.Name); } @@ -554,15 +540,15 @@ static bool record_cb(DCR *dcr, DEV_RECORD *rec) bstrncpy(dcr->pool_type, label.PoolType, sizeof(dcr->pool_type)); bstrncpy(dcr->pool_name, label.PoolName, sizeof(dcr->pool_name)); - /* Look for existing Job Media records for this job. If there are - any, no new ones need be created. This may occur if File + /* Look for existing Job Media records for this job. If there are + any, no new ones need be created. This may occur if File Retention has expired before Job Retention, or if the volume has already been bscan'd */ Mmsg(sql_buffer, "SELECT count(*) from JobMedia where JobId=%d", jr.JobId); - db_sql_query(db, sql_buffer.c_str(), db_int64_handler, &jmr_count); + db_sql_query(db, sql_buffer.c_str(), db_int64_handler, &jmr_count); if( jmr_count.value > 0 ) { //FIELD NAME TO BE DEFINED/CONFIRMED (maybe a struct?) - mjcr->bscan_insert_jobmedia_records = false; + mjcr->bscan_insert_jobmedia_records = false; } else { mjcr->bscan_insert_jobmedia_records = true; } @@ -612,7 +598,7 @@ static bool record_cb(DCR *dcr, DEV_RECORD *rec) /* Create JobMedia record */ mjcr->read_dcr->VolLastIndex = dcr->VolLastIndex; if( mjcr->bscan_insert_jobmedia_records ) { - create_jobmedia_record(db, mjcr); + create_jobmedia_record(db, mjcr); } free_dcr(mjcr->read_dcr); free_jcr(mjcr); @@ -740,11 +726,11 @@ static bool record_cb(DCR *dcr, DEV_RECORD *rec) case STREAM_ENCRYPTED_FILE_COMPRESSED_DATA: case STREAM_ENCRYPTED_WIN32_GZIP_DATA: case STREAM_ENCRYPTED_WIN32_COMPRESSED_DATA: - /* No correct, we should (decrypt and) expand it - done using JCR + /* No correct, we should (decrypt and) expand it + done using JCR */ mjcr->JobBytes += rec->data_len; - free_jcr(mjcr); + free_jcr(mjcr); break; case STREAM_SPARSE_GZIP_DATA: @@ -874,14 +860,8 @@ static void bscan_free_jcr(JCR *jcr) { Dmsg0(200, "Start bscan free_jcr\n"); - if (jcr->file_bsock) { - Dmsg0(200, "Close File bsock\n"); - jcr->file_bsock->close(); - } - if (jcr->store_bsock) { - Dmsg0(200, "Close Store bsock\n"); - jcr->store_bsock->close(); - } + free_bsock(jcr->file_bsock); + free_bsock(jcr->store_bsock); if (jcr->RestoreBootstrap) { free(jcr->RestoreBootstrap); } @@ -1041,7 +1021,7 @@ static int create_pool_record(B_DB *db, POOL_DBR *pr) static int create_client_record(B_DB *db, CLIENT_DBR *cr) { /* - * Note, update_db can temporarily be set false while + * Note, update_db can temporarily be set false while * updating the database, so we must ensure that ClientId is non-zero. */ if (!update_db) { @@ -1197,7 +1177,7 @@ static int update_job_record(B_DB *db, JOB_DBR *jr, SESSION_LABEL *elabel, return 0; } if (verbose) { - Pmsg3(000, _("Updated Job termination record for JobId=%u Level=%s TermStat=%c\n"), + Pmsg3(000, _("Updated Job termination record for JobId=%u Level=%s TermStat=%c\n"), jr->JobId, job_level_to_str(mjcr->getJobLevel()), jr->JobStatus); } if (verbose > 1) { @@ -1352,7 +1332,7 @@ static JCR *create_jcr(JOB_DBR *jr, DEV_RECORD *rec, uint32_t JobId) jobjcr->VolSessionId = rec->VolSessionId; jobjcr->VolSessionTime = rec->VolSessionTime; jobjcr->ClientId = jr->ClientId; - jobjcr->dcr = jobjcr->read_dcr = new_dcr(jobjcr, NULL, dev); + jobjcr->dcr = jobjcr->read_dcr = new_dcr(jobjcr, NULL, dev, SD_READ); return jobjcr; } @@ -1366,7 +1346,7 @@ bool dir_update_file_attributes(DCR *dcr, DEV_RECORD *rec) { return 1;} bool dir_send_job_status(JCR *jcr) {return 1;} int generate_job_event(JCR *jcr, const char *event) { return 1; } -bool dir_ask_sysop_to_mount_volume(DCR *dcr, int /*mode*/) +bool dir_ask_sysop_to_mount_volume(DCR *dcr, bool /*writing*/) { DEVICE *dev = dcr->dev; Dmsg0(20, "Enter dir_ask_sysop_to_mount_volume\n"); @@ -1378,11 +1358,13 @@ bool dir_ask_sysop_to_mount_volume(DCR *dcr, int /*mode*/) return true; } -bool dir_get_volume_info(DCR *dcr, enum get_vol_info_rw writing) +bool dir_get_volume_info(DCR *dcr, enum get_vol_info_rw writing) { Dmsg0(100, "Fake dir_get_volume_info\n"); dcr->setVolCatName(dcr->VolumeName); +#ifdef BUILD_DVD dcr->VolCatInfo.VolCatParts = find_num_dvd_parts(dcr); +#endif Dmsg2(500, "Vol=%s num_parts=%d\n", dcr->getVolCatName(), dcr->VolCatInfo.VolCatParts); return 1; } diff --git a/bacula/src/stored/bsr.h b/bacula/src/stored/bsr.h index 11af2cc6f1..577a268c59 100644 --- a/bacula/src/stored/bsr.h +++ b/bacula/src/stored/bsr.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2002-2008 Free Software Foundation Europe e.V. + Copyright (C) 2002-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * BootStrap record definition -- for restoring files. diff --git a/bacula/src/stored/btape.c b/bacula/src/stored/btape.c index a3f751c964..4082de27d9 100644 --- a/bacula/src/stored/btape.c +++ b/bacula/src/stored/btape.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2012 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * @@ -43,7 +31,7 @@ #include "stored.h" #ifdef USE_VTAPE -#include "vtape.h" +#include "vtape_dev.h" #endif /* Dummy functions */ @@ -54,6 +42,7 @@ extern bool parse_sd_config(CONFIG *config, const char *configfile, int exit_cod extern void free_config_resources(); /* Exported variables */ +void *start_heap; int quit = 0; char buf[100000]; int bsize = TAPE_BSIZE; @@ -166,7 +155,7 @@ int main(int margc, char *margv[]) uint32_t x32, y32; uint64_t x64, y64; char buf[1000]; - + setlocale(LC_ALL, ""); bindtextdomain("bacula", LOCALEDIR); textdomain("bacula"); @@ -198,7 +187,7 @@ int main(int margc, char *margv[]) bsnprintf(buf, sizeof(buf), "%" llu, x64); i = bsscanf(buf, "%llu", &y64); if (i != 1 || x64 != y64) { - Pmsg3(-1, _("64 bit printf/scanf problem. i=%d x64=%" llu " y64=%" llu "\n"), + Pmsg3(-1, _("64 bit printf/scanf problem. i=%d x64=%" llu " y64=%" llu "\n"), i, x64, y64); exit(1); } @@ -273,6 +262,8 @@ int main(int margc, char *margv[]) config = new_config_parser(); parse_sd_config(config, configfile, M_ERROR_TERM); + setup_me(); + load_sd_plugins(me->plugin_directory); /* See if we can open a device */ if (margc == 0) { @@ -285,7 +276,7 @@ int main(int margc, char *margv[]) exit(1); } - jcr = setup_jcr("btape", margv[0], bsr, NULL, 0); /* write */ + jcr = setup_jcr("btape", margv[0], bsr, NULL, SD_APPEND); if (!jcr) { exit(1); } @@ -321,14 +312,6 @@ static void terminate_btape(int stat) free_jcr(jcr); jcr = NULL; - if (configfile) { - free(configfile); - } - if (config) { - config->free_resources(); - free(config); - config = NULL; - } if (args) { free_pool_memory(args); args = NULL; @@ -349,11 +332,22 @@ static void terminate_btape(int stat) dev->term(); } - if (debug_level > 10) + if (configfile) { + free(configfile); + } + + if (config) { + config->free_resources(); + free(config); + config = NULL; + } + + if (chk_dbglvl(10)) print_memory_pool_stats(); if (this_block) { free_block(this_block); + this_block = NULL; } stop_watchdog(); @@ -381,7 +375,7 @@ static void print_total_speed() char ec1[50], ec2[50]; uint64_t rate = total_size / total_time; Pmsg2(000, _("Total Volume bytes=%sB. Total Write rate = %sB/s\n"), - edit_uint64_with_suffix(total_size, ec1), + edit_uint64_with_suffix(total_size, ec1), edit_uint64_with_suffix(rate, ec2)); } @@ -467,7 +461,7 @@ static bool open_the_device() bool ok = true; block = new_block(dev); - dev->rLock(); + dev->rLock(false); Dmsg1(200, "Opening device %s\n", dcr->VolumeName); if (!dev->open(dcr, OPEN_READ_WRITE)) { Emsg1(M_FATAL, 0, _("dev open failed: %s\n"), dev->errmsg); @@ -517,7 +511,7 @@ static void labelcmd() */ static void readlabelcmd() { - int save_debug_level = debug_level; + int64_t save_debug_level = debug_level; int stat; stat = read_dev_volume_label(dcr); @@ -531,6 +525,9 @@ static void readlabelcmd() case VOL_IO_ERROR: Pmsg1(0, _("I/O error on device: ERR=%s"), dev->bstrerror()); break; + case VOL_TYPE_ERROR: + Pmsg1(0, _("Volume type error: ERR=%s\n"), dev->errmsg); + break; case VOL_NAME_ERROR: Pmsg0(0, _("Volume name error\n")); break; @@ -904,7 +901,7 @@ static bool speed_test_raw(fill_mode_t mode, uint64_t nb_gb, uint32_t nb) init_total_speed(); fill_buffer(mode, block->buf, block->buf_len); - Pmsg3(0, _("Begin writing %i files of %sB with raw blocks of %u bytes.\n"), + Pmsg3(0, _("Begin writing %i files of %sB with raw blocks of %u bytes.\n"), nb, edit_uint64_with_suffix(nb_gb, ed1), block->buf_len); for (uint32_t j=0; jdata, rec->data_len); - Pmsg3(0, _("Begin writing %i files of %sB with blocks of %u bytes.\n"), + Pmsg3(0, _("Begin writing %i files of %sB with blocks of %u bytes.\n"), nb, edit_uint64_with_suffix(nb_gb, ed1), block->buf_len); for (uint32_t j=0; jrewind(dcr); - if (do_zero) { + if (do_zero) { Pmsg0(0, _("Test with zero data, should give the " "maximum throughput.\n")); if (file_size) { @@ -1066,7 +1063,7 @@ static void speed_test() } } - if (do_random) { + if (do_random) { Pmsg0(0, _("Test with random data, should give the minimum " "throughput.\n")); if (file_size) { @@ -1085,14 +1082,14 @@ static void speed_test() Pmsg0(0, _("Test with zero data and bacula block structure.\n")); if (file_size) { ok(speed_test_bacula(FILL_ZERO, file_size, nb_file)); - } else { + } else { ok(speed_test_bacula(FILL_ZERO, 1, nb_file)); ok(speed_test_bacula(FILL_ZERO, 2, nb_file)); ok(speed_test_bacula(FILL_ZERO, 4, nb_file)); } } - - if (do_random) { + + if (do_random) { Pmsg0(0, _("Test with random data, should give the minimum " "throughput.\n")); if (file_size) { @@ -1258,7 +1255,7 @@ read_again: bail_out: free_record(rec); if (!rc) { - exit_code = 1; + exit_code = 1; } return rc; } @@ -1493,7 +1490,7 @@ try_again: dcr->VolCatInfo.Slot = slot; /* Find out what is loaded, zero means device is unloaded */ Pmsg0(-1, _("3301 Issuing autochanger \"loaded\" command.\n")); - changer = edit_device_codes(dcr, changer, + changer = edit_device_codes(dcr, changer, dcr->device->changer_command, "loaded"); status = run_program(changer, timeout, results); Dmsg3(100, "run_prog: %s stat=%d result=\"%s\"\n", changer, status, results); @@ -1517,7 +1514,7 @@ try_again: dev->close(); Pmsg2(-1, _("3302 Issuing autochanger \"unload %d %d\" command.\n"), loaded, dev->drive_index); - changer = edit_device_codes(dcr, changer, + changer = edit_device_codes(dcr, changer, dcr->device->changer_command, "unload"); status = run_program(changer, timeout, results); Pmsg2(-1, _("unload status=%s %d\n"), status==0?_("OK"):_("Bad"), status); @@ -1536,7 +1533,7 @@ try_again: dcr->VolCatInfo.Slot = slot; Pmsg2(-1, _("3303 Issuing autochanger \"load %d %d\" command.\n"), slot, dev->drive_index); - changer = edit_device_codes(dcr, changer, + changer = edit_device_codes(dcr, changer, dcr->device->changer_command, "load"); Dmsg1(100, "Changer=%s\n", changer); dev->close(); @@ -2136,7 +2133,7 @@ bail_out: static void statcmd() { - int debug = debug_level; + int64_t debug = debug_level; debug_level = 30; Pmsg2(0, _("Device status: %u. ERR=%s\n"), status_dev(dev), dev->bstrerror()); #ifdef xxxx @@ -2270,7 +2267,7 @@ static void fillcmd() mix_buffer(FILL_RANDOM, rec.data, rec.data_len); Dmsg4(250, "before write_rec FI=%d SessId=%d Strm=%s len=%d\n", - rec.FileIndex, rec.VolSessionId, + rec.FileIndex, rec.VolSessionId, stream_to_ascii(buf1, rec.Stream, rec.FileIndex), rec.data_len); @@ -2334,7 +2331,7 @@ static void fillcmd() /* Get out after writing 1000 blocks to the second tape */ if (BlockNumber > 1000 && stop != 0) { /* get out */ char ed1[50]; - Pmsg1(-1, "Done writing %s records ...\n", + Pmsg1(-1, "Done writing %s records ...\n", edit_uint64_with_commas(write_count, ed1)); break; } @@ -2635,6 +2632,7 @@ bail_out: free_block(last_block1); free_block(last_block2); free_block(first_block); + last_block = first_block = last_block1 = last_block2 = NULL; return rc; } @@ -2699,7 +2697,7 @@ static int flush_block(DEV_BLOCK *block, int dump) DEV_BLOCK *tblock; uint32_t this_file, this_block_num; - dev->rLock(); + dev->rLock(false); if (!this_block) { this_block = new_block(dev); } @@ -2745,7 +2743,7 @@ static int flush_block(DEV_BLOCK *block, int dump) vol_size = dev->VolCatInfo.VolCatBytes; Pmsg4(000, _("End of tape %d:%d. Volume Bytes=%s. Write rate = %sB/s\n"), dev->file, dev->block_num, - edit_uint64_with_commas(dev->VolCatInfo.VolCatBytes, ec1), + edit_uint64_with_commas(dev->VolCatInfo.VolCatBytes, ec1), edit_uint64_with_suffix(rate, ec2)); if (simple) { @@ -2878,7 +2876,7 @@ static void rawfill_cmd() berrno be; printf(_("Write failed at block %u. stat=%d ERR=%s\n"), block_num, stat, be.bstrerror(my_errno)); - + print_speed(jcr->JobBytes); weofcmd(); } @@ -3035,7 +3033,7 @@ bool dir_find_next_appendable_volume(DCR *dcr) return dcr->VolumeName[0] != 0; } -bool dir_ask_sysop_to_mount_volume(DCR *dcr, int /* mode */) +bool dir_ask_sysop_to_mount_volume(DCR *dcr, bool /* writing */) { DEVICE *dev = dcr->dev; Dmsg0(20, "Enter dir_ask_sysop_to_mount_volume\n"); @@ -3107,7 +3105,7 @@ static bool my_mount_next_read_volume(DCR *dcr) } rate = VolBytes / now; Pmsg3(-1, _("Read block=%u, VolBytes=%s rate=%sB/s\n"), block->BlockNumber, - edit_uint64_with_commas(VolBytes, ec1), + edit_uint64_with_commas(VolBytes, ec1), edit_uint64_with_suffix(rate, ec2)); if (strcmp(dcr->VolumeName, "TestVolume2") == 0) { diff --git a/bacula/src/stored/butil.c b/bacula/src/stored/butil.c index f6385f7d7a..471d328009 100644 --- a/bacula/src/stored/butil.c +++ b/bacula/src/stored/butil.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2010 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * @@ -36,15 +24,14 @@ * daemon because we interact more directly with the user * i.e. printf, ... * - * Version $Id$ */ #include "bacula.h" #include "stored.h" /* Forward referenced functions */ -static DCR *setup_to_access_device(JCR *jcr, char *dev_name, const char *VolumeName, int mode); -static DEVRES *find_device_res(char *device_name, int mode); +static DCR *setup_to_access_device(JCR *jcr, char *dev_name, const char *VolumeName, bool writing); +static DEVRES *find_device_res(char *device_name, bool writing); static void my_free_jcr(JCR *jcr); /* Imported variables -- eliminate some day */ @@ -77,12 +64,27 @@ char *rec_state_bits_to_str(DEV_RECORD *rec) } #endif +/* + * Setup a pointer to my resource me + */ +void setup_me() +{ + LockRes(); + me = (STORES *)GetNextRes(R_STORAGE, NULL); + if (!me) { + UnlockRes(); + Emsg1(M_ERROR_TERM, 0, _("No Storage resource defined in %s. Cannot continue.\n"), + configfile); + } + UnlockRes(); +} + /* * Setup a "daemon" JCR for the various standalone * tools (e.g. bls, bextract, bscan, ...) */ JCR *setup_jcr(const char *name, char *dev_name, BSR *bsr, - const char *VolumeName, int mode) + const char *VolumeName, bool writing) { DCR *dcr; JCR *jcr = new_jcr(sizeof(JCR), my_free_jcr); @@ -105,12 +107,10 @@ JCR *setup_jcr(const char *name, char *dev_name, BSR *bsr, pm_strcpy(jcr->fileset_name, "Dummy.fileset.name"); jcr->fileset_md5 = get_pool_memory(PM_FNAME); pm_strcpy(jcr->fileset_md5, "Dummy.fileset.md5"); - jcr->comment = get_pool_memory(PM_MESSAGE); - *jcr->comment = '\0'; init_autochangers(); create_volume_lists(); - dcr = setup_to_access_device(jcr, dev_name, VolumeName, mode); + dcr = setup_to_access_device(jcr, dev_name, VolumeName, writing); if (!dcr) { return NULL; } @@ -127,8 +127,8 @@ JCR *setup_jcr(const char *name, char *dev_name, BSR *bsr, * If the caller wants read access, acquire the device, otherwise, * the caller will do it. */ -static DCR *setup_to_access_device(JCR *jcr, char *dev_name, - const char *VolumeName, int mode) +static DCR *setup_to_access_device(JCR *jcr, char *dev_name, + const char *VolumeName, bool writing) { DEVICE *dev; char *p; @@ -164,7 +164,7 @@ static DCR *setup_to_access_device(JCR *jcr, char *dev_name, } } - if ((device=find_device_res(dev_name, mode)) == NULL) { + if ((device=find_device_res(dev_name, writing)) == NULL) { Jmsg2(jcr, M_FATAL, 0, _("Cannot find device \"%s\" in config file %s.\n"), dev_name, configfile); return NULL; @@ -176,7 +176,7 @@ static DCR *setup_to_access_device(JCR *jcr, char *dev_name, return NULL; } device->dev = dev; - jcr->dcr = dcr = new_dcr(jcr, NULL, dev); + jcr->dcr = dcr = new_dcr(jcr, NULL, dev, writing); if (VolName[0]) { bstrncpy(dcr->VolumeName, VolName, sizeof(dcr->VolumeName)); } @@ -184,7 +184,7 @@ static DCR *setup_to_access_device(JCR *jcr, char *dev_name, create_restore_volume_list(jcr); - if (mode) { /* read only access? */ + if (!writing) { /* read only access? */ Dmsg0(100, "Acquire device for read\n"); if (!acquire_device_for_read(dcr)) { return NULL; @@ -245,7 +245,7 @@ static void my_free_jcr(JCR *jcr) * Returns: NULL on failure * Device resource pointer on success */ -static DEVRES *find_device_res(char *device_name, int read_access) +static DEVRES *find_device_res(char *device_name, bool write_access) { bool found = false; DEVRES *device; @@ -283,11 +283,10 @@ static DEVRES *find_device_res(char *device_name, int read_access) configfile); return NULL; } - if (read_access) { - Pmsg1(0, _("Using device: \"%s\" for reading.\n"), device_name); - } - else { + if (write_access) { Pmsg1(0, _("Using device: \"%s\" for writing.\n"), device_name); + } else { + Pmsg1(0, _("Using device: \"%s\" for reading.\n"), device_name); } return device; } diff --git a/bacula/src/stored/dev.c b/bacula/src/stored/dev.c index 3d4e44bc58..263a881863 100644 --- a/bacula/src/stored/dev.c +++ b/bacula/src/stored/dev.c @@ -1,35 +1,23 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2012 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * * dev.c -- low level operations on device (storage device) * - * Kern Sibbald, MM + * written by, Kern Sibbald, MM * * NOTE!!!! None of these routines are reentrant. You must * use dev->rLock() and dev->Unlock() at a higher level, @@ -77,19 +65,35 @@ * business with no lost data. */ - #include "bacula.h" #include "stored.h" -#ifndef O_NONBLOCK +#ifndef O_NONBLOCK #define O_NONBLOCK 0 #endif +/* Imported functions */ +extern void set_os_device_parameters(DCR *dcr); +extern bool dev_get_os_pos(DEVICE *dev, struct mtget *mt_stat); +extern uint32_t status_dev(DEVICE *dev); + /* Forward referenced functions */ -void set_os_device_parameters(DCR *dcr); -static bool dev_get_os_pos(DEVICE *dev, struct mtget *mt_stat); -static const char *mode_to_str(int mode); -static DEVICE *m_init_dev(JCR *jcr, DEVRES *device, bool new_init); +const char *mode_to_str(int mode); +DEVICE *m_init_dev(JCR *jcr, DEVRES *device, bool alt); +/* + * Device types for printing + */ +static const char *prt_dev_types[] = { + "*none*", + "file", + "tape", + "DVD", + "FIFO", + "Vtape", + "FTP", + "VTL", + "virtual" +}; /* * Allocate and initialize the DEVICE structure @@ -102,15 +106,14 @@ static DEVICE *m_init_dev(JCR *jcr, DEVRES *device, bool new_init); * is the directory in which the file will be placed. * */ -DEVICE * -init_dev(JCR *jcr, DEVRES *device) +DEVICE *init_dev(JCR *jcr, DEVRES *device) { + generate_global_plugin_event(bsdGlobalEventDeviceInit, device); DEVICE *dev = m_init_dev(jcr, device, false); return dev; } -static DEVICE * -m_init_dev(JCR *jcr, DEVRES *device, bool new_init) +DEVICE *m_init_dev(JCR *jcr, DEVRES *device, bool alt) { struct stat statp; int errstat; @@ -118,13 +121,12 @@ m_init_dev(JCR *jcr, DEVRES *device, bool new_init) DEVICE *dev; uint32_t max_bs; - /* If no device type specified, try to guess */ if (!device->dev_type) { /* Check that device is available */ if (stat(device->device_name, &statp) < 0) { berrno be; - Jmsg2(jcr, M_ERROR, 0, _("Unable to stat device %s: ERR=%s\n"), + Jmsg2(jcr, M_ERROR, 0, _("Unable to stat device %s: ERR=%s\n"), device->device_name, be.bstrerror()); return NULL; } @@ -135,10 +137,10 @@ m_init_dev(JCR *jcr, DEVRES *device, bool new_init) } else if (S_ISFIFO(statp.st_mode)) { device->dev_type = B_FIFO_DEV; #ifdef USE_VTAPE - /* must set DeviceType = Vtape + /* must set DeviceType = Vtape * in normal mode, autodetection is disabled */ - } else if (S_ISREG(statp.st_mode)) { + } else if (S_ISREG(statp.st_mode)) { device->dev_type = B_VTAPE_DEV; #endif } else if (!(device->cap_bits & CAP_REQMOUNT)) { @@ -152,7 +154,10 @@ m_init_dev(JCR *jcr, DEVRES *device, bool new_init) } switch (device->dev_type) { case B_DVD_DEV: - Jmsg0(jcr, M_FATAL, 0, _("DVD support is now deprecated\n")); + Jmsg0(jcr, M_FATAL, 0, _("DVD support is now deprecated.\n")); + return NULL; + case B_VIRTUAL_DEV: + Jmsg0(jcr, M_FATAL, 0, _("Aligned device not supported. Please use \"DeviceType = File\"\n")); return NULL; case B_VTAPE_DEV: dev = New(vtape); @@ -162,19 +167,22 @@ m_init_dev(JCR *jcr, DEVRES *device, bool new_init) dev = New(ftp_device); break; #endif -#ifdef HAVE_WIN32 +#ifdef xHAVE_WIN32 /* TODO: defined in src/win32/stored/mtops.cpp */ case B_TAPE_DEV: - dev = New(win32_tape_device); + dev = New(win_tape_dev); break; case B_FILE_DEV: - dev = New(win32_file_device); + dev = New(win_file_dev); break; #else case B_TAPE_DEV: + dev = New(tape_dev); + break; case B_FILE_DEV: case B_FIFO_DEV: - dev = New(DEVICE); + dev = New(file_dev); + break; break; #endif default: @@ -198,11 +206,11 @@ m_init_dev(JCR *jcr, DEVRES *device, bool new_init) dev->volume_capacity = device->volume_capacity; dev->max_rewind_wait = device->max_rewind_wait; dev->max_open_wait = device->max_open_wait; - dev->max_open_vols = device->max_open_vols; dev->vol_poll_interval = device->vol_poll_interval; dev->max_spool_size = device->max_spool_size; dev->drive_index = device->drive_index; dev->autoselect = device->autoselect; + dev->read_only = device->read_only; dev->dev_type = device->dev_type; dev->device = device; if (dev->is_tape()) { /* No parts on tapes */ @@ -214,6 +222,23 @@ m_init_dev(JCR *jcr, DEVRES *device, bool new_init) if (dev->vol_poll_interval && dev->vol_poll_interval < 60) { dev->vol_poll_interval = 60; } + /* + * ***FIXME*** remove this when we implement write device + * switching. + * + * We limit aligned Jobs to run one at a time. + * This is required because: + * 1. BlockAddr must be local for each JCR, today it + * is global. + * 2. When flushing buffers, all other processes must + * be locked out, and they currently are not. + * 3. We need to reserve the full space for a job, but + * currently space for only one block is reserved. + * 4. In the case that the file grows, we must be able + * to create multiple references to the correct data + * blocks, if they are not contiguous. + */ + device->dev = dev; if (dev->is_fifo()) { @@ -221,17 +246,17 @@ m_init_dev(JCR *jcr, DEVRES *device, bool new_init) } /* If the device requires mount : - * - Check that the mount point is available + * - Check that the mount point is available * - Check that (un)mount commands are defined */ if (dev->is_file() && dev->requires_mount()) { if (!device->mount_point || stat(device->mount_point, &statp) < 0) { berrno be; dev->dev_errno = errno; - Jmsg2(jcr, M_ERROR_TERM, 0, _("Unable to stat mount point %s: ERR=%s\n"), + Jmsg2(jcr, M_ERROR_TERM, 0, _("Unable to stat mount point %s: ERR=%s\n"), device->mount_point, be.bstrerror()); } - + if (!device->mount_command || !device->unmount_command) { Jmsg0(jcr, M_ERROR_TERM, 0, _("Mount and unmount commands must defined for a device which requires mount.\n")); } @@ -244,7 +269,7 @@ m_init_dev(JCR *jcr, DEVRES *device, bool new_init) max_bs = dev->max_block_size; } if (dev->min_block_size > max_bs) { - Jmsg(jcr, M_ERROR_TERM, 0, _("Min block size > max on device %s\n"), + Jmsg(jcr, M_ERROR_TERM, 0, _("Min block size > max on device %s\n"), dev->print_name()); } if (dev->max_block_size > 4096000) { @@ -257,7 +282,7 @@ m_init_dev(JCR *jcr, DEVRES *device, bool new_init) dev->max_block_size, dev->print_name(), TAPE_BSIZE); } if (dev->max_volume_size != 0 && dev->max_volume_size < (dev->max_block_size << 4)) { - Jmsg(jcr, M_ERROR_TERM, 0, _("Max Vol Size < 8 * Max Block Size for device %s\n"), + Jmsg(jcr, M_ERROR_TERM, 0, _("Max Vol Size < 8 * Max Block Size for device %s\n"), dev->print_name()); } @@ -300,10 +325,21 @@ m_init_dev(JCR *jcr, DEVRES *device, bool new_init) Mmsg1(dev->errmsg, _("Unable to init read acquire mutex: ERR=%s\n"), be.bstrerror(errstat)); Jmsg0(jcr, M_ERROR_TERM, 0, dev->errmsg); } + if ((errstat = dev->init_volcat_mutex()) != 0) { + berrno be; + dev->dev_errno = errstat; + Mmsg1(dev->errmsg, _("Unable to init volcat mutex: ERR=%s\n"), be.bstrerror(errstat)); + Jmsg0(jcr, M_ERROR_TERM, 0, dev->errmsg); + } + if ((errstat = dev->init_dcrs_mutex()) != 0) { + berrno be; + dev->dev_errno = errstat; + Mmsg1(dev->errmsg, _("Unable to init dcrs mutex: ERR=%s\n"), be.bstrerror(errstat)); + Jmsg0(jcr, M_ERROR_TERM, 0, dev->errmsg); + } dev->set_mutex_priorities(); - #ifdef xxx if ((errstat = rwl_init(&dev->lock)) != 0) { berrno be; @@ -317,34 +353,8 @@ m_init_dev(JCR *jcr, DEVRES *device, bool new_init) dev->attached_dcrs = New(dlist(dcr, &dcr->dev_link)); Dmsg2(100, "init_dev: tape=%d dev_name=%s\n", dev->is_tape(), dev->dev_name); dev->initiated = true; - - return dev; -} - -/* default primitives are designed for file */ -int DEVICE::d_open(const char *pathname, int flags) -{ - return ::open(pathname, flags); -} - -int DEVICE::d_close(int fd) -{ - return ::close(fd); -} - -int DEVICE::d_ioctl(int fd, ioctl_req_t request, char *mt_com) -{ - return ::ioctl(fd, request, mt_com); -} -ssize_t DEVICE::d_read(int fd, void *buffer, size_t count) -{ - return ::read(fd, buffer, count); -} - -ssize_t DEVICE::d_write(int fd, const void *buffer, size_t count) -{ - return ::write(fd, buffer, count); + return dev; } /* @@ -360,17 +370,16 @@ ssize_t DEVICE::d_write(int fd, const void *buffer, size_t count) * In the case of a file, the full name is the device name * (archive_name) with the VolName concatenated. */ -bool -DEVICE::open(DCR *dcr, int omode) +bool DEVICE::open(DCR *dcr, int omode) { int preserve = 0; if (is_open()) { if (openmode == omode) { return true; } else { + Dmsg1(200, "Close fd=%d for mode change in open().\n", m_fd); d_close(m_fd); clear_opened(); - Dmsg0(100, "Close fd for mode change.\n"); preserve = state & (ST_LABEL|ST_APPEND|ST_READ); } } @@ -379,25 +388,26 @@ DEVICE::open(DCR *dcr, int omode) VolCatInfo = dcr->VolCatInfo; /* structure assign */ } - Dmsg4(100, "open dev: type=%d dev_name=%s vol=%s mode=%s\n", dev_type, - print_name(), getVolCatName(), mode_to_str(omode)); - state &= ~(ST_LABEL|ST_APPEND|ST_READ|ST_EOT|ST_WEOT|ST_EOF); + state &= ~(ST_NOSPACE|ST_LABEL|ST_APPEND|ST_READ|ST_EOT|ST_WEOT|ST_EOF); label_type = B_BACULA_LABEL; if (is_tape() || is_fifo()) { open_tape_device(dcr, omode); } else if (is_ftp()) { - open_device(dcr, omode); + this->open_device(dcr, omode); } else { Dmsg1(100, "call open_file_device mode=%s\n", mode_to_str(omode)); open_file_device(dcr, omode); } state |= preserve; /* reset any important state info */ Dmsg2(100, "preserve=0x%x fd=%d\n", preserve, m_fd); + + Dmsg7(100, "open dev: fd=%d dev=%p dcr=%p vol=%s type=%d dev_name=%s mode=%s\n", + m_fd, getVolCatName(), this, dcr, dev_type, print_name(), mode_to_str(omode)); return m_fd >= 0; } -void DEVICE::set_mode(int new_mode) +void DEVICE::set_mode(int new_mode) { switch (new_mode) { case CREATE_READ_WRITE: @@ -417,260 +427,19 @@ void DEVICE::set_mode(int new_mode) } } -/* - */ -void DEVICE::open_tape_device(DCR *dcr, int omode) -{ - file_size = 0; - int timeout = max_open_wait; -#if !defined(HAVE_WIN32) - struct mtop mt_com; - utime_t start_time = time(NULL); -#endif - - mount(1); /* do mount if required */ - - Dmsg0(100, "Open dev: device is tape\n"); - - get_autochanger_loaded_slot(dcr); - - openmode = omode; - set_mode(omode); - - if (timeout < 1) { - timeout = 1; - } - errno = 0; - if (is_fifo() && timeout) { - /* Set open timer */ - tid = start_thread_timer(dcr->jcr, pthread_self(), timeout); - } - Dmsg2(100, "Try open %s mode=%s\n", print_name(), mode_to_str(omode)); -#if defined(HAVE_WIN32) - - /* Windows Code */ - if ((m_fd = d_open(dev_name, mode)) < 0) { - dev_errno = errno; - } - -#else - - /* UNIX Code */ - /* If busy retry each second for max_open_wait seconds */ - for ( ;; ) { - /* Try non-blocking open */ - m_fd = d_open(dev_name, mode+O_NONBLOCK); - if (m_fd < 0) { - berrno be; - dev_errno = errno; - Dmsg5(100, "Open error on %s omode=%d mode=%x errno=%d: ERR=%s\n", - print_name(), omode, mode, errno, be.bstrerror()); - } else { - /* Tape open, now rewind it */ - Dmsg0(100, "Rewind after open\n"); - mt_com.mt_op = MTREW; - mt_com.mt_count = 1; - /* rewind only if dev is a tape */ - if (is_tape() && (d_ioctl(m_fd, MTIOCTOP, (char *)&mt_com) < 0)) { - berrno be; - dev_errno = errno; /* set error status from rewind */ - d_close(m_fd); - clear_opened(); - Dmsg2(100, "Rewind error on %s close: ERR=%s\n", print_name(), - be.bstrerror(dev_errno)); - /* If we get busy, device is probably rewinding, try again */ - if (dev_errno != EBUSY) { - break; /* error -- no medium */ - } - } else { - /* Got fd and rewind worked, so we must have medium in drive */ - d_close(m_fd); - m_fd = d_open(dev_name, mode); /* open normally */ - if (m_fd < 0) { - berrno be; - dev_errno = errno; - Dmsg5(100, "Open error on %s omode=%d mode=%x errno=%d: ERR=%s\n", - print_name(), omode, mode, errno, be.bstrerror()); - break; - } - dev_errno = 0; - lock_door(); - set_os_device_parameters(dcr); /* do system dependent stuff */ - break; /* Successfully opened and rewound */ - } - } - bmicrosleep(5, 0); - /* Exceed wait time ? */ - if (time(NULL) - start_time >= max_open_wait) { - break; /* yes, get out */ - } - } -#endif - - if (!is_open()) { - berrno be; - Mmsg2(errmsg, _("Unable to open device %s: ERR=%s\n"), - print_name(), be.bstrerror(dev_errno)); - Dmsg1(100, "%s", errmsg); - } - - /* Stop any open() timer we started */ - if (tid) { - stop_thread_timer(tid); - tid = 0; - } - Dmsg1(100, "open dev: tape %d opened\n", m_fd); -} void DEVICE::open_device(DCR *dcr, int omode) { /* do nothing waiting to split open_file/tape_device */ } -/* - * Open a file device. - */ -void DEVICE::open_file_device(DCR *dcr, int omode) -{ - POOL_MEM archive_name(PM_FNAME); - - get_autochanger_loaded_slot(dcr); - - /* - * Handle opening of File Archive (not a tape) - */ - - pm_strcpy(archive_name, dev_name); - /* - * If this is a virtual autochanger (i.e. changer_res != NULL) - * we simply use the device name, assuming it has been - * appropriately setup by the "autochanger". - */ - if (!device->changer_res || device->changer_command[0] == 0) { - if (VolCatInfo.VolCatName[0] == 0) { - Mmsg(errmsg, _("Could not open file device %s. No Volume name given.\n"), - print_name()); - clear_opened(); - return; - } - - if (!IsPathSeparator(archive_name.c_str()[strlen(archive_name.c_str())-1])) { - pm_strcat(archive_name, "/"); - } - pm_strcat(archive_name, getVolCatName()); - } - - mount(1); /* do mount if required */ - - openmode = omode; - set_mode(omode); - /* If creating file, give 0640 permissions */ - Dmsg3(100, "open disk: mode=%s open(%s, 0x%x, 0640)\n", mode_to_str(omode), - archive_name.c_str(), mode); - /* Use system open() */ - if ((m_fd = ::open(archive_name.c_str(), mode, 0640)) < 0) { - berrno be; - dev_errno = errno; - Mmsg2(errmsg, _("Could not open: %s, ERR=%s\n"), archive_name.c_str(), - be.bstrerror()); - Dmsg1(100, "open failed: %s", errmsg); - } - if (m_fd >= 0) { - dev_errno = 0; - file = 0; - file_addr = 0; - } - Dmsg4(100, "open dev: disk fd=%d opened, part=%d/%d, part_size=%u\n", - m_fd, part, num_dvd_parts, part_size); -} - -/* - * Rewind the device. - * Returns: true on success - * false on failure - */ -bool DEVICE::rewind(DCR *dcr) -{ - struct mtop mt_com; - unsigned int i; - bool first = true; - - Dmsg3(400, "rewind res=%d fd=%d %s\n", num_reserved(), m_fd, print_name()); - state &= ~(ST_EOT|ST_EOF|ST_WEOT); /* remove EOF/EOT flags */ - block_num = file = 0; - file_size = 0; - file_addr = 0; - if (m_fd < 0) { - return false; - } - if (is_tape()) { - mt_com.mt_op = MTREW; - mt_com.mt_count = 1; - /* If we get an I/O error on rewind, it is probably because - * the drive is actually busy. We loop for (about 5 minutes) - * retrying every 5 seconds. - */ - for (i=max_rewind_wait; ; i -= 5) { - if (d_ioctl(m_fd, MTIOCTOP, (char *)&mt_com) < 0) { - berrno be; - clrerror(MTREW); - if (i == max_rewind_wait) { - Dmsg1(200, "Rewind error, %s. retrying ...\n", be.bstrerror()); - } - /* - * This is a gross hack, because if the user has the - * device mounted (i.e. open), then uses mtx to load - * a tape, the current open file descriptor is invalid. - * So, we close the drive and re-open it. - */ - if (first && dcr) { - int open_mode = openmode; - d_close(m_fd); - clear_opened(); - open(dcr, open_mode); - if (m_fd < 0) { - return false; - } - first = false; - continue; - } -#ifdef HAVE_SUN_OS - if (dev_errno == EIO) { - Mmsg1(errmsg, _("No tape loaded or drive offline on %s.\n"), print_name()); - return false; - } -#else - if (dev_errno == EIO && i > 0) { - Dmsg0(200, "Sleeping 5 seconds.\n"); - bmicrosleep(5, 0); - continue; - } -#endif - Mmsg2(errmsg, _("Rewind error on %s. ERR=%s.\n"), - print_name(), be.bstrerror()); - return false; - } - break; - } - } else if (is_file()) { - if (lseek(dcr, (boffset_t)0, SEEK_SET) < 0) { - berrno be; - dev_errno = errno; - Mmsg2(errmsg, _("lseek error on %s. ERR=%s.\n"), - print_name(), be.bstrerror()); - return false; - } - } - return true; -} - /* * Called to indicate that we have just read an * EOF from the device. */ -void DEVICE::set_ateof() -{ +void DEVICE::set_ateof() +{ set_eof(); if (is_tape()) { file++; @@ -684,170 +453,14 @@ void DEVICE::set_ateof() * Called to indicate we are now at the end of the tape, and * writing is not possible. */ -void DEVICE::set_ateot() +void DEVICE::set_ateot() { /* Make tape effectively read-only */ + Dmsg0(200, "==== Set AtEof\n"); state |= (ST_EOF|ST_EOT|ST_WEOT); clear_append(); } -/* - * Position device to end of medium (end of data) - * Returns: true on succes - * false on error - */ -bool DEVICE::eod(DCR *dcr) -{ - struct mtop mt_com; - bool ok = true; - boffset_t pos; - int32_t os_file; - - if (m_fd < 0) { - dev_errno = EBADF; - Mmsg1(errmsg, _("Bad call to eod. Device %s not open\n"), print_name()); - return false; - } - -#if defined (__digital__) && defined (__unix__) - return fsf(VolCatInfo.VolCatFiles); -#endif - - Dmsg0(100, "Enter eod\n"); - if (at_eot()) { - return true; - } - clear_eof(); /* remove EOF flag */ - block_num = file = 0; - file_size = 0; - file_addr = 0; - if (is_fifo()) { - return true; - } - if (!is_tape()) { - pos = lseek(dcr, (boffset_t)0, SEEK_END); - Dmsg1(200, "====== Seek to %lld\n", pos); - if (pos >= 0) { - update_pos(dcr); - set_eot(); - return true; - } - dev_errno = errno; - berrno be; - Mmsg2(errmsg, _("lseek error on %s. ERR=%s.\n"), - print_name(), be.bstrerror()); - Dmsg0(100, errmsg); - return false; - } -#ifdef MTEOM - if (has_cap(CAP_FASTFSF) && !has_cap(CAP_EOM)) { - Dmsg0(100,"Using FAST FSF for EOM\n"); - /* If unknown position, rewind */ - if (get_os_tape_file() < 0) { - if (!rewind(NULL)) { - Dmsg0(100, "Rewind error\n"); - return false; - } - } - mt_com.mt_op = MTFSF; - /* - * ***FIXME*** fix code to handle case that INT16_MAX is - * not large enough. - */ - mt_com.mt_count = INT16_MAX; /* use big positive number */ - if (mt_com.mt_count < 0) { - mt_com.mt_count = INT16_MAX; /* brain damaged system */ - } - } - - if (has_cap(CAP_MTIOCGET) && (has_cap(CAP_FASTFSF) || has_cap(CAP_EOM))) { - if (has_cap(CAP_EOM)) { - Dmsg0(100,"Using EOM for EOM\n"); - mt_com.mt_op = MTEOM; - mt_com.mt_count = 1; - } - - if (d_ioctl(m_fd, MTIOCTOP, (char *)&mt_com) < 0) { - berrno be; - clrerror(mt_com.mt_op); - Dmsg1(50, "ioctl error: %s\n", be.bstrerror()); - update_pos(dcr); - Mmsg2(errmsg, _("ioctl MTEOM error on %s. ERR=%s.\n"), - print_name(), be.bstrerror()); - Dmsg0(100, errmsg); - return false; - } - - os_file = get_os_tape_file(); - if (os_file < 0) { - berrno be; - clrerror(-1); - Mmsg2(errmsg, _("ioctl MTIOCGET error on %s. ERR=%s.\n"), - print_name(), be.bstrerror()); - Dmsg0(100, errmsg); - return false; - } - Dmsg1(100, "EOD file=%d\n", os_file); - set_ateof(); - file = os_file; - } else { -#else - { -#endif - /* - * Rewind then use FSF until EOT reached - */ - if (!rewind(NULL)) { - Dmsg0(100, "Rewind error.\n"); - return false; - } - /* - * Move file by file to the end of the tape - */ - int file_num; - for (file_num=file; !at_eot(); file_num++) { - Dmsg0(200, "eod: doing fsf 1\n"); - if (!fsf(1)) { - Dmsg0(100, "fsf error.\n"); - return false; - } - /* - * Avoid infinite loop by ensuring we advance. - */ - if (!at_eot() && file_num == (int)file) { - Dmsg1(100, "fsf did not advance from file %d\n", file_num); - set_ateof(); - os_file = get_os_tape_file(); - if (os_file >= 0) { - Dmsg2(100, "Adjust file from %d to %d\n", file_num, os_file); - file = os_file; - } - break; - } - } - } - /* - * Some drivers leave us after second EOF when doing - * MTEOM, so we must backup so that appending overwrites - * the second EOF. - */ - if (has_cap(CAP_BSFATEOM)) { - /* Backup over EOF */ - ok = bsf(1); - /* If BSF worked and fileno is known (not -1), set file */ - os_file = get_os_tape_file(); - if (os_file >= 0) { - Dmsg2(100, "BSFATEOF adjust file from %d to %d\n", file , os_file); - file = os_file; - } else { - file++; /* wing it -- not correct on all OSes */ - } - } else { - update_pos(dcr); /* update position */ - } - Dmsg1(200, "EOD dev->file=%d\n", file); - return ok; -} /* * Set the position of the device -- only for files and DVD @@ -887,869 +500,59 @@ bool DEVICE::update_pos(DCR *dcr) return ok; } -/* - * Return the status of the device. This was meant - * to be a generic routine. Unfortunately, it doesn't - * seem possible (at least I do not know how to do it - * currently), which means that for the moment, this - * routine has very little value. - * - * Returns: status - */ -uint32_t status_dev(DEVICE *dev) +void DEVICE::set_slot(int32_t slot) { - struct mtget mt_stat; - uint32_t stat = 0; - - if (dev->state & (ST_EOT | ST_WEOT)) { - stat |= BMT_EOD; - Pmsg0(-20, " EOD"); - } - if (dev->state & ST_EOF) { - stat |= BMT_EOF; - Pmsg0(-20, " EOF"); - } - if (dev->is_tape()) { - stat |= BMT_TAPE; - Pmsg0(-20,_(" Bacula status:")); - Pmsg2(-20,_(" file=%d block=%d\n"), dev->file, dev->block_num); - if (dev->d_ioctl(dev->fd(), MTIOCGET, (char *)&mt_stat) < 0) { - berrno be; - dev->dev_errno = errno; - Mmsg2(dev->errmsg, _("ioctl MTIOCGET error on %s. ERR=%s.\n"), - dev->print_name(), be.bstrerror()); - return 0; - } - Pmsg0(-20, _(" Device status:")); - -#if defined(HAVE_LINUX_OS) - if (GMT_EOF(mt_stat.mt_gstat)) { - stat |= BMT_EOF; - Pmsg0(-20, " EOF"); - } - if (GMT_BOT(mt_stat.mt_gstat)) { - stat |= BMT_BOT; - Pmsg0(-20, " BOT"); - } - if (GMT_EOT(mt_stat.mt_gstat)) { - stat |= BMT_EOT; - Pmsg0(-20, " EOT"); - } - if (GMT_SM(mt_stat.mt_gstat)) { - stat |= BMT_SM; - Pmsg0(-20, " SM"); - } - if (GMT_EOD(mt_stat.mt_gstat)) { - stat |= BMT_EOD; - Pmsg0(-20, " EOD"); - } - if (GMT_WR_PROT(mt_stat.mt_gstat)) { - stat |= BMT_WR_PROT; - Pmsg0(-20, " WR_PROT"); - } - if (GMT_ONLINE(mt_stat.mt_gstat)) { - stat |= BMT_ONLINE; - Pmsg0(-20, " ONLINE"); - } - if (GMT_DR_OPEN(mt_stat.mt_gstat)) { - stat |= BMT_DR_OPEN; - Pmsg0(-20, " DR_OPEN"); - } - if (GMT_IM_REP_EN(mt_stat.mt_gstat)) { - stat |= BMT_IM_REP_EN; - Pmsg0(-20, " IM_REP_EN"); - } -#elif defined(HAVE_WIN32) - if (GMT_EOF(mt_stat.mt_gstat)) { - stat |= BMT_EOF; - Pmsg0(-20, " EOF"); - } - if (GMT_BOT(mt_stat.mt_gstat)) { - stat |= BMT_BOT; - Pmsg0(-20, " BOT"); - } - if (GMT_EOT(mt_stat.mt_gstat)) { - stat |= BMT_EOT; - Pmsg0(-20, " EOT"); - } - if (GMT_EOD(mt_stat.mt_gstat)) { - stat |= BMT_EOD; - Pmsg0(-20, " EOD"); - } - if (GMT_WR_PROT(mt_stat.mt_gstat)) { - stat |= BMT_WR_PROT; - Pmsg0(-20, " WR_PROT"); - } - if (GMT_ONLINE(mt_stat.mt_gstat)) { - stat |= BMT_ONLINE; - Pmsg0(-20, " ONLINE"); - } - if (GMT_DR_OPEN(mt_stat.mt_gstat)) { - stat |= BMT_DR_OPEN; - Pmsg0(-20, " DR_OPEN"); - } - if (GMT_IM_REP_EN(mt_stat.mt_gstat)) { - stat |= BMT_IM_REP_EN; - Pmsg0(-20, " IM_REP_EN"); - } + m_slot = slot; + if (vol) vol->clear_slot(); +} -#endif /* !SunOS && !OSF */ - if (dev->has_cap(CAP_MTIOCGET)) { - Pmsg2(-20, _(" file=%d block=%d\n"), mt_stat.mt_fileno, mt_stat.mt_blkno); - } else { - Pmsg2(-20, _(" file=%d block=%d\n"), -1, -1); - } - } else { - stat |= BMT_ONLINE | BMT_BOT; - } - return stat; +void DEVICE::clear_slot() +{ + m_slot = -1; + if (vol) vol->set_slot(-1); } +const char *DEVICE::print_type() const +{ + return prt_dev_types[device->dev_type]; +} /* - * Load medium in device - * Returns: true on success - * false on failure + * Set to unload the current volume in the drive */ -bool load_dev(DEVICE *dev) +void DEVICE::set_unload() { -#ifdef MTLOAD - struct mtop mt_com; -#endif - - if (dev->fd() < 0) { - dev->dev_errno = EBADF; - Mmsg0(dev->errmsg, _("Bad call to load_dev. Device not open\n")); - Emsg0(M_FATAL, 0, dev->errmsg); - return false; - } - if (!(dev->is_tape())) { - return true; + if (!m_unload && VolHdr.VolumeName[0] != 0) { + m_unload = true; + memcpy(UnloadVolName, VolHdr.VolumeName, sizeof(UnloadVolName)); + notify_newvol_in_attached_dcrs(NULL); } -#ifndef MTLOAD - Dmsg0(200, "stored: MTLOAD command not available\n"); - berrno be; - dev->dev_errno = ENOTTY; /* function not available */ - Mmsg2(dev->errmsg, _("ioctl MTLOAD error on %s. ERR=%s.\n"), - dev->print_name(), be.bstrerror()); - return false; -#else +} - dev->block_num = dev->file = 0; - dev->file_size = 0; - dev->file_addr = 0; - mt_com.mt_op = MTLOAD; - mt_com.mt_count = 1; - if (dev->d_ioctl(dev->fd(), MTIOCTOP, (char *)&mt_com) < 0) { - berrno be; - dev->dev_errno = errno; - Mmsg2(dev->errmsg, _("ioctl MTLOAD error on %s. ERR=%s.\n"), - dev->print_name(), be.bstrerror()); - return false; - } - return true; -#endif +/* + * Clear volume header + */ +void DEVICE::clear_volhdr() +{ + Dmsg1(100, "Clear volhdr vol=%s\n", VolHdr.VolumeName); + memset(&VolHdr, 0, sizeof(VolHdr)); + setVolCatInfo(false); } + /* - * Rewind device and put it offline - * Returns: true on success - * false on failure + * Close the device */ -bool DEVICE::offline() +void DEVICE::close() { - struct mtop mt_com; + Dmsg4(40, "close_dev vol=%s fd=%d dev=%p dev=%s\n", + VolHdr.VolumeName, m_fd, this, print_name()); + offline_or_rewind(); - if (!is_tape()) { - return true; /* device not open */ - } - - state &= ~(ST_APPEND|ST_READ|ST_EOT|ST_EOF|ST_WEOT); /* remove EOF/EOT flags */ - block_num = file = 0; - file_size = 0; - file_addr = 0; - unlock_door(); - mt_com.mt_op = MTOFFL; - mt_com.mt_count = 1; - if (d_ioctl(m_fd, MTIOCTOP, (char *)&mt_com) < 0) { - berrno be; - dev_errno = errno; - Mmsg2(errmsg, _("ioctl MTOFFL error on %s. ERR=%s.\n"), - print_name(), be.bstrerror()); - return false; - } - Dmsg1(100, "Offlined device %s\n", print_name()); - return true; -} - -bool DEVICE::offline_or_rewind() -{ - if (m_fd < 0) { - return false; - } - if (has_cap(CAP_OFFLINEUNMOUNT)) { - return offline(); - } else { - /* - * Note, this rewind probably should not be here (it wasn't - * in prior versions of Bacula), but on FreeBSD, this is - * needed in the case the tape was "frozen" due to an error - * such as backspacing after writing and EOF. If it is not - * done, all future references to the drive get and I/O error. - */ - clrerror(MTREW); - return rewind(NULL); - } -} - -/* - * Foward space a file - * Returns: true on success - * false on failure - */ -bool DEVICE::fsf(int num) -{ - int32_t os_file = 0; - struct mtop mt_com; - int stat = 0; - - if (!is_open()) { - dev_errno = EBADF; - Mmsg0(errmsg, _("Bad call to fsf. Device not open\n")); - Emsg0(M_FATAL, 0, errmsg); - return false; - } - - if (!is_tape()) { - return true; - } - - if (at_eot()) { - dev_errno = 0; - Mmsg1(errmsg, _("Device %s at End of Tape.\n"), print_name()); - return false; - } - if (at_eof()) { - Dmsg0(200, "ST_EOF set on entry to FSF\n"); - } - - Dmsg0(100, "fsf\n"); - block_num = 0; - /* - * If Fast forward space file is set, then we - * use MTFSF to forward space and MTIOCGET - * to get the file position. We assume that - * the SCSI driver will ensure that we do not - * forward space past the end of the medium. - */ - if (has_cap(CAP_FSF) && has_cap(CAP_MTIOCGET) && has_cap(CAP_FASTFSF)) { - int my_errno = 0; - mt_com.mt_op = MTFSF; - mt_com.mt_count = num; - stat = d_ioctl(m_fd, MTIOCTOP, (char *)&mt_com); - if (stat < 0) { - my_errno = errno; /* save errno */ - } else if ((os_file=get_os_tape_file()) < 0) { - my_errno = errno; /* save errno */ - } - if (my_errno != 0) { - berrno be; - set_eot(); - Dmsg0(200, "Set ST_EOT\n"); - clrerror(MTFSF); - Mmsg2(errmsg, _("ioctl MTFSF error on %s. ERR=%s.\n"), - print_name(), be.bstrerror(my_errno)); - Dmsg1(200, "%s", errmsg); - return false; - } - - Dmsg1(200, "fsf file=%d\n", os_file); - set_ateof(); - file = os_file; - return true; - - /* - * Here if CAP_FSF is set, and virtually all drives - * these days support it, we read a record, then forward - * space one file. Using this procedure, which is slow, - * is the only way we can be sure that we don't read - * two consecutive EOF marks, which means End of Data. - */ - } else if (has_cap(CAP_FSF)) { - POOLMEM *rbuf; - int rbuf_len; - Dmsg0(200, "FSF has cap_fsf\n"); - if (max_block_size == 0) { - rbuf_len = DEFAULT_BLOCK_SIZE; - } else { - rbuf_len = max_block_size; - } - rbuf = get_memory(rbuf_len); - mt_com.mt_op = MTFSF; - mt_com.mt_count = 1; - while (num-- && !at_eot()) { - Dmsg0(100, "Doing read before fsf\n"); - if ((stat = this->read((char *)rbuf, rbuf_len)) < 0) { - if (errno == ENOMEM) { /* tape record exceeds buf len */ - stat = rbuf_len; /* This is OK */ - /* - * On IBM drives, they return ENOSPC at EOM - * instead of EOF status - */ - } else if (at_eof() && errno == ENOSPC) { - stat = 0; - } else { - berrno be; - set_eot(); - clrerror(-1); - Dmsg2(100, "Set ST_EOT read errno=%d. ERR=%s\n", dev_errno, - be.bstrerror()); - Mmsg2(errmsg, _("read error on %s. ERR=%s.\n"), - print_name(), be.bstrerror()); - Dmsg1(100, "%s", errmsg); - break; - } - } - if (stat == 0) { /* EOF */ - Dmsg1(100, "End of File mark from read. File=%d\n", file+1); - /* Two reads of zero means end of tape */ - if (at_eof()) { - set_eot(); - Dmsg0(100, "Set ST_EOT\n"); - break; - } else { - set_ateof(); - continue; - } - } else { /* Got data */ - clear_eot(); - clear_eof(); - } - - Dmsg0(100, "Doing MTFSF\n"); - stat = d_ioctl(m_fd, MTIOCTOP, (char *)&mt_com); - if (stat < 0) { /* error => EOT */ - berrno be; - set_eot(); - Dmsg0(100, "Set ST_EOT\n"); - clrerror(MTFSF); - Mmsg2(errmsg, _("ioctl MTFSF error on %s. ERR=%s.\n"), - print_name(), be.bstrerror()); - Dmsg0(100, "Got < 0 for MTFSF\n"); - Dmsg1(100, "%s", errmsg); - } else { - set_ateof(); - } - } - free_memory(rbuf); - - /* - * No FSF, so use FSR to simulate it - */ - } else { - Dmsg0(200, "Doing FSR for FSF\n"); - while (num-- && !at_eot()) { - fsr(INT32_MAX); /* returns -1 on EOF or EOT */ - } - if (at_eot()) { - dev_errno = 0; - Mmsg1(errmsg, _("Device %s at End of Tape.\n"), print_name()); - stat = -1; - } else { - stat = 0; - } - } - Dmsg1(200, "Return %d from FSF\n", stat); - if (at_eof()) { - Dmsg0(200, "ST_EOF set on exit FSF\n"); - } - if (at_eot()) { - Dmsg0(200, "ST_EOT set on exit FSF\n"); - } - Dmsg1(200, "Return from FSF file=%d\n", file); - return stat == 0; -} - -/* - * Backward space a file - * Returns: false on failure - * true on success - */ -bool DEVICE::bsf(int num) -{ - struct mtop mt_com; - int stat; - - if (!is_open()) { - dev_errno = EBADF; - Mmsg0(errmsg, _("Bad call to bsf. Device not open\n")); - Emsg0(M_FATAL, 0, errmsg); - return false; - } - - if (!is_tape()) { - Mmsg1(errmsg, _("Device %s cannot BSF because it is not a tape.\n"), - print_name()); - return false; - } - - Dmsg0(100, "bsf\n"); - clear_eot(); - clear_eof(); - file -= num; - file_addr = 0; - file_size = 0; - mt_com.mt_op = MTBSF; - mt_com.mt_count = num; - stat = d_ioctl(m_fd, MTIOCTOP, (char *)&mt_com); - if (stat < 0) { - berrno be; - clrerror(MTBSF); - Mmsg2(errmsg, _("ioctl MTBSF error on %s. ERR=%s.\n"), - print_name(), be.bstrerror()); - } - return stat == 0; -} - - -/* - * Foward space num records - * Returns: false on failure - * true on success - */ -bool DEVICE::fsr(int num) -{ - struct mtop mt_com; - int stat; - - if (!is_open()) { - dev_errno = EBADF; - Mmsg0(errmsg, _("Bad call to fsr. Device not open\n")); - Emsg0(M_FATAL, 0, errmsg); - return false; - } - - if (!is_tape()) { - return false; - } - - if (!has_cap(CAP_FSR)) { - Mmsg1(errmsg, _("ioctl MTFSR not permitted on %s.\n"), print_name()); - return false; - } - - Dmsg1(100, "fsr %d\n", num); - mt_com.mt_op = MTFSR; - mt_com.mt_count = num; - stat = d_ioctl(m_fd, MTIOCTOP, (char *)&mt_com); - if (stat == 0) { - clear_eof(); - block_num += num; - } else { - berrno be; - struct mtget mt_stat; - clrerror(MTFSR); - Dmsg1(100, "FSF fail: ERR=%s\n", be.bstrerror()); - if (dev_get_os_pos(this, &mt_stat)) { - Dmsg4(100, "Adjust from %d:%d to %d:%d\n", file, - block_num, mt_stat.mt_fileno, mt_stat.mt_blkno); - file = mt_stat.mt_fileno; - block_num = mt_stat.mt_blkno; - } else { - if (at_eof()) { - set_eot(); - } else { - set_ateof(); - } - } - Mmsg3(errmsg, _("ioctl MTFSR %d error on %s. ERR=%s.\n"), - num, print_name(), be.bstrerror()); - } - return stat == 0; -} - -/* - * Backward space a record - * Returns: false on failure - * true on success - */ -bool DEVICE::bsr(int num) -{ - struct mtop mt_com; - int stat; - - if (!is_open()) { - dev_errno = EBADF; - Mmsg0(errmsg, _("Bad call to bsr_dev. Device not open\n")); - Emsg0(M_FATAL, 0, errmsg); - return false; - } - - if (!is_tape()) { - return false; - } - - if (!has_cap(CAP_BSR)) { - Mmsg1(errmsg, _("ioctl MTBSR not permitted on %s.\n"), print_name()); - return false; - } - - Dmsg0(100, "bsr_dev\n"); - block_num -= num; - clear_eof(); - clear_eot(); - mt_com.mt_op = MTBSR; - mt_com.mt_count = num; - stat = d_ioctl(m_fd, MTIOCTOP, (char *)&mt_com); - if (stat < 0) { - berrno be; - clrerror(MTBSR); - Mmsg2(errmsg, _("ioctl MTBSR error on %s. ERR=%s.\n"), - print_name(), be.bstrerror()); - } - return stat == 0; -} - -void DEVICE::lock_door() -{ -#ifdef MTLOCK - struct mtop mt_com; - if (!is_tape()) return; - mt_com.mt_op = MTLOCK; - mt_com.mt_count = 1; - d_ioctl(m_fd, MTIOCTOP, (char *)&mt_com); -#endif -} - -void DEVICE::unlock_door() -{ -#ifdef MTUNLOCK - struct mtop mt_com; - if (!is_tape()) return; - mt_com.mt_op = MTUNLOCK; - mt_com.mt_count = 1; - d_ioctl(m_fd, MTIOCTOP, (char *)&mt_com); -#endif -} - -void DEVICE::set_slot(int32_t slot) -{ - m_slot = slot; - if (vol) vol->clear_slot(); -} - -void DEVICE::clear_slot() -{ - m_slot = -1; - if (vol) vol->set_slot(-1); -} - - - -/* - * Reposition the device to file, block - * Returns: false on failure - * true on success - */ -bool DEVICE::reposition(DCR *dcr, uint32_t rfile, uint32_t rblock) -{ - if (!is_open()) { - dev_errno = EBADF; - Mmsg0(errmsg, _("Bad call to reposition. Device not open\n")); - Emsg0(M_FATAL, 0, errmsg); - return false; - } - - if (!is_tape()) { - boffset_t pos = (((boffset_t)rfile)<<32) | rblock; - Dmsg1(100, "===== lseek to %d\n", (int)pos); - if (lseek(dcr, pos, SEEK_SET) == (boffset_t)-1) { - berrno be; - dev_errno = errno; - Mmsg2(errmsg, _("lseek error on %s. ERR=%s.\n"), - print_name(), be.bstrerror()); - return false; - } - file = rfile; - block_num = rblock; - file_addr = pos; - return true; - } - - /* After this point, we are tape only */ - Dmsg4(100, "reposition from %u:%u to %u:%u\n", file, block_num, rfile, rblock); - if (rfile < file) { - Dmsg0(100, "Rewind\n"); - if (!rewind(NULL)) { - return false; - } - } - if (rfile > file) { - Dmsg1(100, "fsf %d\n", rfile-file); - if (!fsf(rfile-file)) { - Dmsg1(100, "fsf failed! ERR=%s\n", bstrerror()); - return false; - } - Dmsg2(100, "wanted_file=%d at_file=%d\n", rfile, file); - } - if (rblock < block_num) { - Dmsg2(100, "wanted_blk=%d at_blk=%d\n", rblock, block_num); - Dmsg0(100, "bsf 1\n"); - bsf(1); - Dmsg0(100, "fsf 1\n"); - fsf(1); - Dmsg2(100, "wanted_blk=%d at_blk=%d\n", rblock, block_num); - } - if (has_cap(CAP_POSITIONBLOCKS) && rblock > block_num) { - /* Ignore errors as Bacula can read to the correct block */ - Dmsg1(100, "fsr %d\n", rblock-block_num); - return fsr(rblock-block_num); - } else { - while (rblock > block_num) { - if (!dcr->read_block_from_dev(NO_BLOCK_NUMBER_CHECK)) { - berrno be; - dev_errno = errno; - Dmsg2(30, "Failed to find requested block on %s: ERR=%s", - print_name(), be.bstrerror()); - return false; - } - Dmsg2(300, "moving forward wanted_blk=%d at_blk=%d\n", rblock, block_num); - } - } - return true; -} - - - -/* - * Write an end of file on the device - * Returns: true on success - * false on failure - */ -bool DEVICE::weof(int num) -{ - struct mtop mt_com; - int stat; - Dmsg1(129, "=== weof_dev=%s\n", print_name()); - - if (!is_open()) { - dev_errno = EBADF; - Mmsg0(errmsg, _("Bad call to weof_dev. Device not open\n")); - Emsg0(M_FATAL, 0, errmsg); - return false; - } - file_size = 0; - - if (!is_tape()) { - return true; - } - if (!can_append()) { - Mmsg0(errmsg, _("Attempt to WEOF on non-appendable Volume\n")); - Emsg0(M_FATAL, 0, errmsg); - return false; - } - - clear_eof(); - clear_eot(); - mt_com.mt_op = MTWEOF; - mt_com.mt_count = num; - stat = d_ioctl(m_fd, MTIOCTOP, (char *)&mt_com); - if (stat == 0) { - block_num = 0; - file += num; - file_addr = 0; - } else { - berrno be; - clrerror(MTWEOF); - if (stat == -1) { - Mmsg2(errmsg, _("ioctl MTWEOF error on %s. ERR=%s.\n"), - print_name(), be.bstrerror()); - } - } - return stat == 0; -} - - -/* - * If implemented in system, clear the tape - * error status. - */ -void DEVICE::clrerror(int func) -{ - const char *msg = NULL; - char buf[100]; - - dev_errno = errno; /* save errno */ - if (errno == EIO) { - VolCatInfo.VolCatErrors++; - } - - if (!is_tape()) { - return; - } - - if (errno == ENOTTY || errno == ENOSYS) { /* Function not implemented */ - switch (func) { - case -1: - break; /* ignore message printed later */ - case MTWEOF: - msg = "WTWEOF"; - clear_cap(CAP_EOF); /* turn off feature */ - break; -#ifdef MTEOM - case MTEOM: - msg = "WTEOM"; - clear_cap(CAP_EOM); /* turn off feature */ - break; -#endif - case MTFSF: - msg = "MTFSF"; - clear_cap(CAP_FSF); /* turn off feature */ - break; - case MTBSF: - msg = "MTBSF"; - clear_cap(CAP_BSF); /* turn off feature */ - break; - case MTFSR: - msg = "MTFSR"; - clear_cap(CAP_FSR); /* turn off feature */ - break; - case MTBSR: - msg = "MTBSR"; - clear_cap(CAP_BSR); /* turn off feature */ - break; - case MTREW: - msg = "MTREW"; - break; -#ifdef MTSETBLK - case MTSETBLK: - msg = "MTSETBLK"; - break; -#endif -#ifdef MTSETDRVBUFFER - case MTSETDRVBUFFER: - msg = "MTSETDRVBUFFER"; - break; -#endif -#ifdef MTRESET - case MTRESET: - msg = "MTRESET"; - break; -#endif - -#ifdef MTSETBSIZ - case MTSETBSIZ: - msg = "MTSETBSIZ"; - break; -#endif -#ifdef MTSRSZ - case MTSRSZ: - msg = "MTSRSZ"; - break; -#endif -#ifdef MTLOAD - case MTLOAD: - msg = "MTLOAD"; - break; -#endif -#ifdef MTUNLOCK - case MTUNLOCK: - msg = "MTUNLOCK"; - break; -#endif - case MTOFFL: - msg = "MTOFFL"; - break; - default: - bsnprintf(buf, sizeof(buf), _("unknown func code %d"), func); - msg = buf; - break; - } - if (msg != NULL) { - dev_errno = ENOSYS; - Mmsg1(errmsg, _("I/O function \"%s\" not supported on this device.\n"), msg); - Emsg0(M_ERROR, 0, errmsg); - } - } - - /* - * Now we try different methods of clearing the error - * status on the drive so that it is not locked for - * further operations. - */ - - /* On some systems such as NetBSD, this clears all errors */ - get_os_tape_file(); - -/* Found on Solaris */ -#ifdef MTIOCLRERR -{ - d_ioctl(m_fd, MTIOCLRERR); - Dmsg0(200, "Did MTIOCLRERR\n"); -} -#endif - -/* Typically on FreeBSD */ -#ifdef MTIOCERRSTAT -{ - berrno be; - /* Read and clear SCSI error status */ - union mterrstat mt_errstat; - Dmsg2(200, "Doing MTIOCERRSTAT errno=%d ERR=%s\n", dev_errno, - be.bstrerror(dev_errno)); - d_ioctl(m_fd, MTIOCERRSTAT, (char *)&mt_errstat); -} -#endif - -/* Clear Subsystem Exception TRU64 */ -#ifdef MTCSE -{ - struct mtop mt_com; - mt_com.mt_op = MTCSE; - mt_com.mt_count = 1; - /* Clear any error condition on the tape */ - d_ioctl(m_fd, MTIOCTOP, (char *)&mt_com); - Dmsg0(200, "Did MTCSE\n"); -} -#endif -} - - -/* - * Set to unload the current volume in the drive - */ -void DEVICE::set_unload() -{ - if (!m_unload && VolHdr.VolumeName[0] != 0) { - m_unload = true; - memcpy(UnloadVolName, VolHdr.VolumeName, sizeof(UnloadVolName)); - } -} - - -/* - * Clear volume header - */ -void DEVICE::clear_volhdr() -{ - Dmsg1(100, "Clear volhdr vol=%s\n", VolHdr.VolumeName); - memset(&VolHdr, 0, sizeof(VolHdr)); - setVolCatInfo(false); -} - - -/* - * Close the device - */ -void DEVICE::close() -{ - Dmsg1(100, "close_dev %s\n", print_name()); - offline_or_rewind(); - - if (!is_open()) { - Dmsg2(100, "device %s already closed vol=%s\n", print_name(), - VolHdr.VolumeName); - return; /* already closed */ + if (!is_open()) { + Dmsg2(200, "device %s already closed vol=%s\n", print_name(), + VolHdr.VolumeName); + return; /* already closed */ } switch (dev_type) { @@ -1767,12 +570,13 @@ void DEVICE::close() /* Clean up device packet so it can be reused */ clear_opened(); + /* * Be careful not to clear items needed by the DVD driver * when it is closing a single part. */ state &= ~(ST_LABEL|ST_READ|ST_APPEND|ST_EOT|ST_WEOT|ST_EOF| - ST_MOUNTED|ST_MEDIA|ST_SHORT); + ST_NOSPACE|ST_MOUNTED|ST_MEDIA|ST_SHORT); label_type = B_BACULA_LABEL; file = block_num = 0; file_size = 0; @@ -1793,7 +597,7 @@ void DEVICE::close() * difference between close_part() and close() is that close_part() * saves the state information of the device (e.g. the Volume lable, * the Volume Catalog record, ... This permits opening and closing - * the Volume parts multiple times without losing track of what the + * the Volume parts multiple times without losing track of what the * main Volume parameters are. */ void DEVICE::close_part(DCR * /*dcr*/) @@ -1809,104 +613,12 @@ void DEVICE::close_part(DCR * /*dcr*/) VolCatInfo = saveVolCatInfo; /* structure assignment */ } -boffset_t DEVICE::lseek(DCR *dcr, boffset_t offset, int whence) -{ - switch (dev_type) { - case B_FILE_DEV: -#if defined(HAVE_WIN32) - return ::_lseeki64(m_fd, (__int64)offset, whence); -#else - return ::lseek(m_fd, offset, whence); -#endif - } - return -1; -} - -/* - * Truncate a volume. - */ -bool DEVICE::truncate(DCR *dcr) /* We need the DCR for DVD-writing */ -{ - struct stat st; - DEVICE *dev = this; - - Dmsg1(100, "truncate %s\n", print_name()); - switch (dev_type) { - case B_VTL_DEV: - case B_VTAPE_DEV: - case B_TAPE_DEV: - /* maybe we should rewind and write and eof ???? */ - return true; /* we don't really truncate tapes */ - case B_FILE_DEV: - for ( ;; ) { - if (ftruncate(dev->m_fd, 0) != 0) { - berrno be; - Mmsg2(errmsg, _("Unable to truncate device %s. ERR=%s\n"), - print_name(), be.bstrerror()); - return false; - } - - /* - * Check for a successful ftruncate() and issue a work-around for devices - * (mostly cheap NAS) that don't support truncation. - * Workaround supplied by Martin Schmid as a solution to bug #1011. - * 1. close file - * 2. delete file - * 3. open new file with same mode - * 4. change ownership to original - */ - - if (fstat(dev->m_fd, &st) != 0) { - berrno be; - Mmsg2(errmsg, _("Unable to stat device %s. ERR=%s\n"), - print_name(), be.bstrerror()); - return false; - } - - if (st.st_size != 0) { /* ftruncate() didn't work */ - POOL_MEM archive_name(PM_FNAME); - - pm_strcpy(archive_name, dev_name); - if (!IsPathSeparator(archive_name.c_str()[strlen(archive_name.c_str())-1])) { - pm_strcat(archive_name, "/"); - } - pm_strcat(archive_name, dcr->VolumeName); - - Mmsg2(errmsg, _("Device %s doesn't support ftruncate(). Recreating file %s.\n"), - print_name(), archive_name.c_str()); - - /* Close file and blow it away */ - ::close(dev->m_fd); - ::unlink(archive_name.c_str()); - - /* Recreate the file -- of course, empty */ - dev->set_mode(CREATE_READ_WRITE); - if ((dev->m_fd = ::open(archive_name.c_str(), mode, st.st_mode)) < 0) { - berrno be; - dev_errno = errno; - Mmsg2(errmsg, _("Could not reopen: %s, ERR=%s\n"), archive_name.c_str(), - be.bstrerror()); - Dmsg1(100, "reopen failed: %s", errmsg); - Emsg0(M_FATAL, 0, errmsg); - return false; - } - - /* Reset proper owner */ - chown(archive_name.c_str(), st.st_uid, st.st_gid); - } - break; - } - return true; - } - return false; -} - /* * Mount the device. * If timeout, wait until the mount command returns 0. * If !timeout, try to mount the device only once. */ -bool DEVICE::mount(int timeout) +bool DEVICE::mount(int timeout) { Dmsg0(190, "Enter mount\n"); @@ -1939,7 +651,7 @@ bool DEVICE::mount(int timeout) * If timeout, wait until the unmount command returns 0. * If !timeout, try to unmount the device only once. */ -bool DEVICE::unmount(int timeout) +bool DEVICE::unmount(int timeout) { Dmsg0(100, "Enter unmount\n"); @@ -1968,187 +680,6 @@ bool DEVICE::unmount(int timeout) return true; } -/* - * (Un)mount the device (for tape devices) - */ -bool DEVICE::do_tape_mount(int mount, int dotimeout) -{ - POOL_MEM ocmd(PM_FNAME); - POOLMEM *results; - char *icmd; - int status, tries; - berrno be; - - Dsm_check(200); - if (mount) { - icmd = device->mount_command; - } else { - icmd = device->unmount_command; - } - - edit_mount_codes(ocmd, icmd); - - Dmsg2(100, "do_tape_mount: cmd=%s mounted=%d\n", ocmd.c_str(), !!is_mounted()); - - if (dotimeout) { - /* Try at most 10 times to (un)mount the device. This should perhaps be configurable. */ - tries = 10; - } else { - tries = 1; - } - results = get_memory(4000); - - /* If busy retry each second */ - Dmsg1(100, "do_tape_mount run_prog=%s\n", ocmd.c_str()); - while ((status = run_program_full_output(ocmd.c_str(), max_open_wait/2, results)) != 0) { - if (tries-- > 0) { - continue; - } - - Dmsg5(100, "Device %s cannot be %smounted. stat=%d result=%s ERR=%s\n", print_name(), - (mount ? "" : "un"), status, results, be.bstrerror(status)); - Mmsg(errmsg, _("Device %s cannot be %smounted. ERR=%s\n"), - print_name(), (mount ? "" : "un"), be.bstrerror(status)); - - set_mounted(false); - free_pool_memory(results); - Dmsg0(200, "============ mount=0\n"); - Dsm_check(200); - return false; - } - - set_mounted(mount); /* set/clear mounted flag */ - free_pool_memory(results); - Dmsg1(200, "============ mount=%d\n", mount); - return true; -} - -/* - * (Un)mount the device (either a FILE or DVD device) - */ -bool DEVICE::do_file_mount(int mount, int dotimeout) -{ - POOL_MEM ocmd(PM_FNAME); - POOLMEM *results; - DIR* dp; - char *icmd; - struct dirent *entry, *result; - int status, tries, name_max, count; - berrno be; - - Dsm_check(200); - if (mount) { - icmd = device->mount_command; - } else { - icmd = device->unmount_command; - } - - clear_freespace_ok(); - edit_mount_codes(ocmd, icmd); - - Dmsg2(100, "do_file_mount: cmd=%s mounted=%d\n", ocmd.c_str(), !!is_mounted()); - - if (dotimeout) { - /* Try at most 10 times to (un)mount the device. This should perhaps be configurable. */ - tries = 10; - } else { - tries = 1; - } - results = get_memory(4000); - - /* If busy retry each second */ - Dmsg1(100, "do_file_mount run_prog=%s\n", ocmd.c_str()); - while ((status = run_program_full_output(ocmd.c_str(), max_open_wait/2, results)) != 0) { - /* Doesn't work with internationalization (This is not a problem) */ - if (mount && fnmatch("*is already mounted on*", results, 0) == 0) { - break; - } - if (!mount && fnmatch("* not mounted*", results, 0) == 0) { - break; - } - if (tries-- > 0) { - /* Sometimes the device cannot be mounted because it is already mounted. - * Try to unmount it, then remount it */ - if (mount) { - Dmsg1(400, "Trying to unmount the device %s...\n", print_name()); - do_file_mount(0, 0); - } - bmicrosleep(1, 0); - continue; - } - Dmsg5(100, "Device %s cannot be %smounted. stat=%d result=%s ERR=%s\n", print_name(), - (mount ? "" : "un"), status, results, be.bstrerror(status)); - Mmsg(errmsg, _("Device %s cannot be %smounted. ERR=%s\n"), - print_name(), (mount ? "" : "un"), be.bstrerror(status)); - - /* - * Now, just to be sure it is not mounted, try to read the filesystem. - */ - name_max = pathconf(".", _PC_NAME_MAX); - if (name_max < 1024) { - name_max = 1024; - } - - if (!(dp = opendir(device->mount_point))) { - berrno be; - dev_errno = errno; - Dmsg3(100, "do_file_mount: failed to open dir %s (dev=%s), ERR=%s\n", - device->mount_point, print_name(), be.bstrerror()); - goto get_out; - } - - entry = (struct dirent *)malloc(sizeof(struct dirent) + name_max + 1000); - count = 0; - while (1) { - if ((readdir_r(dp, entry, &result) != 0) || (result == NULL)) { - dev_errno = EIO; - Dmsg2(129, "do_file_mount: failed to find suitable file in dir %s (dev=%s)\n", - device->mount_point, print_name()); - break; - } - if ((strcmp(result->d_name, ".")) && (strcmp(result->d_name, "..")) && (strcmp(result->d_name, ".keep"))) { - count++; /* result->d_name != ., .. or .keep (Gentoo-specific) */ - break; - } else { - Dmsg2(129, "do_file_mount: ignoring %s in %s\n", result->d_name, device->mount_point); - } - } - free(entry); - closedir(dp); - - Dmsg1(100, "do_file_mount: got %d files in the mount point (not counting ., .. and .keep)\n", count); - - if (count > 0) { - /* If we got more than ., .. and .keep */ - /* there must be something mounted */ - if (mount) { - Dmsg1(100, "Did Mount by count=%d\n", count); - break; - } else { - /* An unmount request. We failed to unmount - report an error */ - set_mounted(true); - free_pool_memory(results); - Dmsg0(200, "== error mount=1 wanted unmount\n"); - return false; - } - } -get_out: - set_mounted(false); - free_pool_memory(results); - Dmsg0(200, "============ mount=0\n"); - Dsm_check(200); - return false; - } - - set_mounted(mount); /* set/clear mounted flag */ - free_pool_memory(results); - /* Do not check free space when unmounting */ - if (mount && !update_freespace()) { - return false; - } - Dmsg1(200, "============ mount=%d\n", mount); - return true; -} /* * Edit codes into (Un)MountCommand, Write(First)PartCommand @@ -2168,7 +699,7 @@ void DEVICE::edit_mount_codes(POOL_MEM &omsg, const char *imsg) const char *p; const char *str; char add[20]; - + POOL_MEM archive_name(PM_FNAME); omsg.c_str()[0] = 0; @@ -2200,10 +731,6 @@ void DEVICE::edit_mount_codes(POOL_MEM &omsg, const char *imsg) case 'm': str = device->mount_point; break; - case 'v': - make_spooled_dvd_filename(this, archive_name); - str = archive_name.c_str(); - break; default: add[0] = '%'; add[1] = *p; @@ -2222,7 +749,7 @@ void DEVICE::edit_mount_codes(POOL_MEM &omsg, const char *imsg) } } -/* return the last timer interval (ms) +/* return the last timer interval (ms) * or 0 if something goes wrong */ btime_t DEVICE::get_timer_count() @@ -2251,7 +778,7 @@ ssize_t DEVICE::read(void *buf, size_t len) DevReadBytes += read_len; } - return read_len; + return read_len; } /* write to fd */ @@ -2272,7 +799,7 @@ ssize_t DEVICE::write(const void *buf, size_t len) DevWriteBytes += write_len; } - return write_len; + return write_len; } /* Return the resource name for the device */ @@ -2281,24 +808,71 @@ const char *DEVICE::name() const return device->hdr.name; } -/* Returns file position on tape or -1 */ -int32_t DEVICE::get_os_tape_file() +uint32_t DEVICE::get_file() { - struct mtget mt_stat; + if (is_dvd() || is_tape()) { + return file; + } else { + uint64_t bytes = VolCatInfo.VolCatAmetaBytes; + return (uint32_t)(bytes >> 32); + } +} - if (has_cap(CAP_MTIOCGET) && - d_ioctl(m_fd, MTIOCGET, (char *)&mt_stat) == 0) { - return mt_stat.mt_fileno; +uint32_t DEVICE::get_block_num() +{ + if (is_dvd() || is_tape()) { + return block_num; + } else { + return VolCatInfo.VolCatAmetaBlocks; } - return -1; } -char * -dev_vol_name(DEVICE *dev) +/* + * Walk through all attached jcrs indicating the volume has changed + * Note: If you have the new VolumeName, it is passed here, + * otherwise pass a NULL. + */ +void +DEVICE::notify_newvol_in_attached_dcrs(const char *newVolumeName) { - return dev->getVolCatName(); + Dmsg2(140, "Notify dcrs of vol change. oldVolume=%s NewVolume=%s\n", + getVolCatName(), newVolumeName?"*None*":newVolumeName); + Lock_dcrs(); + DCR *mdcr; + foreach_dlist(mdcr, attached_dcrs) { + if (mdcr->jcr->JobId == 0) { + continue; /* ignore console */ + } + mdcr->NewVol = true; + mdcr->NewFile = true; + if (newVolumeName && mdcr->VolumeName != newVolumeName) { + bstrncpy(mdcr->VolumeName, newVolumeName, sizeof(mdcr->VolumeName)); + Dmsg2(140, "Set NewVol=%s in JobId=%d\n", mdcr->VolumeName, mdcr->jcr->JobId); + } + } + Unlock_dcrs(); } +/* + * Walk through all attached jcrs indicating the File has changed + */ +void +DEVICE::notify_newfile_in_attached_dcrs() +{ + Dmsg1(140, "Notify dcrs of file change. Volume=%s\n", getVolCatName()); + Lock_dcrs(); + DCR *mdcr; + foreach_dlist(mdcr, attached_dcrs) { + if (mdcr->jcr->JobId == 0) { + continue; /* ignore console */ + } + Dmsg1(140, "Notify JobI=%d\n", mdcr->jcr->JobId); + mdcr->NewFile = true; + } + Unlock_dcrs(); +} + + /* * Free memory allocated for the device @@ -2324,7 +898,6 @@ void DEVICE::term(void) pthread_cond_destroy(&wait); pthread_cond_destroy(&wait_next_vol); pthread_mutex_destroy(&spool_mutex); -// rwl_destroy(&lock); if (attached_dcrs) { delete attached_dcrs; attached_dcrs = NULL; @@ -2377,7 +950,7 @@ void init_jcr_device_wait_timers(JCR *jcr) /* - * The dev timers are used for waiting on a particular device + * The dev timers are used for waiting on a particular device * * Returns: true if time doubled * false if max time expired @@ -2396,118 +969,6 @@ bool double_dev_wait_time(DEVICE *dev) return true; } - -void set_os_device_parameters(DCR *dcr) -{ - DEVICE *dev = dcr->dev; - - if (strcmp(dev->dev_name, "/dev/null") == 0) { - return; /* no use trying to set /dev/null */ - } - -#if defined(HAVE_LINUX_OS) || defined(HAVE_WIN32) - struct mtop mt_com; - - Dmsg0(100, "In set_os_device_parameters\n"); -#if defined(MTSETBLK) - if (dev->min_block_size == dev->max_block_size && - dev->min_block_size == 0) { /* variable block mode */ - mt_com.mt_op = MTSETBLK; - mt_com.mt_count = 0; - Dmsg0(100, "Set block size to zero\n"); - if (dev->d_ioctl(dev->fd(), MTIOCTOP, (char *)&mt_com) < 0) { - dev->clrerror(MTSETBLK); - } - } -#endif -#if defined(MTSETDRVBUFFER) - if (getuid() == 0) { /* Only root can do this */ - mt_com.mt_op = MTSETDRVBUFFER; - mt_com.mt_count = MT_ST_CLEARBOOLEANS; - if (!dev->has_cap(CAP_TWOEOF)) { - mt_com.mt_count |= MT_ST_TWO_FM; - } - if (dev->has_cap(CAP_EOM)) { - mt_com.mt_count |= MT_ST_FAST_MTEOM; - } - Dmsg0(100, "MTSETDRVBUFFER\n"); - if (dev->d_ioctl(dev->fd(), MTIOCTOP, (char *)&mt_com) < 0) { - dev->clrerror(MTSETDRVBUFFER); - } - } -#endif - return; -#endif - -#ifdef HAVE_NETBSD_OS - struct mtop mt_com; - if (dev->min_block_size == dev->max_block_size && - dev->min_block_size == 0) { /* variable block mode */ - mt_com.mt_op = MTSETBSIZ; - mt_com.mt_count = 0; - if (dev->d_ioctl(dev->fd(), MTIOCTOP, (char *)&mt_com) < 0) { - dev->clrerror(MTSETBSIZ); - } - /* Get notified at logical end of tape */ - mt_com.mt_op = MTEWARN; - mt_com.mt_count = 1; - if (dev->d_ioctl(dev->fd(), MTIOCTOP, (char *)&mt_com) < 0) { - dev->clrerror(MTEWARN); - } - } - return; -#endif - -#if HAVE_FREEBSD_OS || HAVE_OPENBSD_OS - struct mtop mt_com; - if (dev->min_block_size == dev->max_block_size && - dev->min_block_size == 0) { /* variable block mode */ - mt_com.mt_op = MTSETBSIZ; - mt_com.mt_count = 0; - if (dev->d_ioctl(dev->fd(), MTIOCTOP, (char *)&mt_com) < 0) { - dev->clrerror(MTSETBSIZ); - } - } -#if defined(MTIOCSETEOTMODEL) - uint32_t neof; - if (dev->has_cap(CAP_TWOEOF)) { - neof = 2; - } else { - neof = 1; - } - if (dev->d_ioctl(dev->fd(), MTIOCSETEOTMODEL, (caddr_t)&neof) < 0) { - berrno be; - dev->dev_errno = errno; /* save errno */ - Mmsg2(dev->errmsg, _("Unable to set eotmodel on device %s: ERR=%s\n"), - dev->print_name(), be.bstrerror(dev->dev_errno)); - Jmsg(dcr->jcr, M_FATAL, 0, dev->errmsg); - } -#endif - return; -#endif - -#ifdef HAVE_SUN_OS - struct mtop mt_com; - if (dev->min_block_size == dev->max_block_size && - dev->min_block_size == 0) { /* variable block mode */ - mt_com.mt_op = MTSRSZ; - mt_com.mt_count = 0; - if (dev->d_ioctl(dev->fd(), MTIOCTOP, (char *)&mt_com) < 0) { - dev->clrerror(MTSRSZ); - } - } - return; -#endif -} - -static bool dev_get_os_pos(DEVICE *dev, struct mtget *mt_stat) -{ - Dmsg0(100, "dev_get_os_pos\n"); - return dev->has_cap(CAP_MTIOCGET) && - dev->d_ioctl(dev->fd(), MTIOCGET, (char *)mt_stat) == 0 && - mt_stat->mt_fileno >= 0; -} - static const char *modes[] = { "CREATE_READ_WRITE", "OPEN_READ_WRITE", @@ -2516,7 +977,7 @@ static const char *modes[] = { }; -static const char *mode_to_str(int mode) +const char *mode_to_str(int mode) { static char buf[100]; if (mode < 1 || mode > 4) { diff --git a/bacula/src/stored/dev.h b/bacula/src/stored/dev.h index c7a01cfbf9..f773267ddd 100644 --- a/bacula/src/stored/dev.h +++ b/bacula/src/stored/dev.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2012 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Definitions for using the Device functions in Bacula @@ -34,14 +22,7 @@ */ /* - * Some details of how volume and device reservations work - * - * class VOLRES: - * set_in_use() volume being used on current drive - * clear_in_use() no longer being used. Can be re-used or moved. - * set_swapping() set volume being moved to another drive - * is_swapping() volume is being moved to another drive - * clear_swapping() volume normal + * Some details of how device reservations work * * class DEVICE: * set_load() set to load volume @@ -86,7 +67,11 @@ enum { OPEN_WRITE_ONLY }; -/* Device types */ +/* + * Device types + * If you update this table, be sure to add an + * entry in prt_dev_types[] in dev.c + */ enum { B_FILE_DEV = 1, B_TAPE_DEV, @@ -94,7 +79,8 @@ enum { B_FIFO_DEV, B_VTAPE_DEV, /* change to B_TAPE_DEV after init */ B_FTP_DEV, - B_VTL_DEV + B_VTL_DEV, + B_VIRTUAL_DEV /* Virtual device */ }; /* Generic status bits returned from status_dev() */ @@ -160,22 +146,30 @@ enum { #define ST_MEDIA (1<<16) /* Media found in mounted device */ #define ST_OFFLINE (1<<17) /* set offline by operator */ #define ST_PART_SPOOLED (1<<18) /* spooling part */ -#define ST_FREESPACE_OK (1<<19) /* Have valid freespace for DVD */ +#define ST_FREESPACE_OK (1<<19) /* Have valid freespace */ +#define ST_NOSPACE (1<<20) /* No space on device */ /* Volume Catalog Information structure definition */ struct VOLUME_CAT_INFO { /* Media info for the current Volume */ - uint32_t VolCatJobs; /* number of jobs on this Volume */ + uint64_t VolCatBytes; /* Total bytes written */ + uint64_t VolCatAmetaBytes; /* Ameta bytes written */ + uint64_t VolCatPadding; /* Total padding bytes written */ + uint32_t VolCatBlocks; /* Total blocks */ + uint32_t VolCatAmetaBlocks; /* Ameta blocks */ + uint32_t VolCatWrites; /* Total writes this volume */ + uint32_t VolCatAmetaWrites; /* Ameta writes this volume */ + uint32_t VolCatReads; /* Total reads this volume */ + uint32_t VolCatAmetaReads; /* Ameta reads this volume */ + uint64_t VolCatRBytes; /* Total bytes read */ + uint64_t VolCatAmetaRBytes; /* Ameta bytes read */ + + uint32_t VolCatJobs; /* Number of jobs on this Volume */ uint32_t VolCatFiles; /* Number of files */ - uint32_t VolCatBlocks; /* Number of blocks */ - uint64_t VolCatBytes; /* Number of bytes written */ uint32_t VolCatParts; /* Number of parts written */ uint32_t VolCatMounts; /* Number of mounts this volume */ uint32_t VolCatErrors; /* Number of errors this volume */ - uint32_t VolCatWrites; /* Number of writes this volume */ - uint32_t VolCatReads; /* Number of reads this volume */ - uint64_t VolCatRBytes; /* Number of bytes read */ uint32_t VolCatRecycles; /* Number of recycles this volume */ uint32_t EndFile; /* Last file number */ uint32_t EndBlock; /* Last block number */ @@ -188,6 +182,7 @@ struct VOLUME_CAT_INFO { btime_t VolReadTime; /* time spent reading */ btime_t VolWriteTime; /* time spent writing this Volume */ int64_t VolMediaId; /* MediaId */ + int64_t VolScratchPoolId; /* ScratchPoolId */ utime_t VolFirstWritten; /* Time of first write */ utime_t VolLastWritten; /* Time of last write */ bool InChanger; /* Set if vol in current magazine */ @@ -212,20 +207,24 @@ private: int m_blocked; /* set if we must wait (i.e. change tape) */ int m_count; /* Mutex use count -- DEBUG only */ int m_num_reserved; /* counter of device reservations */ - int32_t m_slot; /* slot loaded in drive or -1 if none */ + bool m_append_reserve; /* reserved for append or read in m_num_reserved set */ + int32_t m_slot; /* slot loaded in drive or -1 if none */ pthread_t m_pid; /* Thread that locked -- DEBUG only */ bool m_unload; /* set when Volume must be unloaded */ bool m_load; /* set when Volume must be loaded */ + bool m_wait; /* must wait for device to free volume */ + bthread_mutex_t m_mutex; /* access control */ + bthread_mutex_t acquire_mutex; /* mutex for acquire code */ + pthread_mutex_t read_acquire_mutex; /* mutex for acquire read code */ + pthread_mutex_t volcat_mutex; /* VolCatInfo mutex */ + pthread_mutex_t dcrs_mutex; /* Attached dcr mutex */ public: DEVICE() {}; virtual ~DEVICE() {}; DEVICE * volatile swap_dev; /* Swap vol from this device */ dlist *attached_dcrs; /* attached DCR list */ - bthread_mutex_t m_mutex; /* access control */ bthread_mutex_t spool_mutex; /* mutex for updating spool_size */ - bthread_mutex_t acquire_mutex; /* mutex for acquire code */ - pthread_mutex_t read_acquire_mutex; /* mutex for acquire read code */ pthread_cond_t wait; /* thread wait variable */ pthread_cond_t wait_next_vol; /* wait for tape to be mounted */ pthread_t no_wait_id; /* this thread must not wait */ @@ -239,7 +238,13 @@ public: int openmode; /* parameter passed to open_dev (useful to reopen the device) */ int dev_type; /* device type */ bool autoselect; /* Autoselect in autochanger */ + bool read_only; /* Device is read only */ bool initiated; /* set when init_dev() called */ + bool m_shstore; /* Shares storage can be used */ + bool m_shstore_lock; /* set if shared lock set */ + bool m_shstore_user_lock; /* set if user set shared lock */ + bool m_shstore_register; /* set if register key set */ + bool m_shstore_blocked; /* Set if I am blocked */ int label_type; /* Bacula/ANSI/IBM label types */ uint32_t drive_index; /* Autochanger drive index (base 0) */ POOLMEM *dev_name; /* Physical device name */ @@ -262,20 +267,20 @@ public: uint64_t spool_size; /* current spool size for this device */ uint32_t max_rewind_wait; /* max secs to allow for rewind */ uint32_t max_open_wait; /* max secs to allow for open */ - uint32_t max_open_vols; /* max simultaneous open volumes */ - + uint64_t max_part_size; /* max part size */ uint64_t part_size; /* current part size */ uint32_t part; /* current part number (starts at 0) */ uint64_t part_start; /* current part start address (relative to the whole volume) */ uint32_t num_dvd_parts; /* number of parts WRITTEN on the DVD */ /* state ST_FREESPACE_OK is set if free_space is valid */ - uint64_t free_space; /* current free space on medium (without the current part) */ + uint64_t free_space; /* current free space on device */ + uint64_t min_free_space; /* Minimum free disk space */ int free_space_errno; /* indicates errno getting freespace */ bool truncating; /* if set, we are currently truncating the DVD */ bool blank_dvd; /* if set, we have a blank DVD in the drive */ - - + + utime_t vol_poll_interval; /* interval between polling Vol mount */ DEVRES *device; /* pointer to Device Resource */ VOLRES *vol; /* Pointer to Volume reservation item */ @@ -287,6 +292,7 @@ public: char pool_type[MAX_NAME_LENGTH]; /* pool type */ char UnloadVolName[MAX_NAME_LENGTH]; /* Last wrong Volume mounted */ + char lock_holder[12]; /* holder of SCSI lock */ bool poll; /* set to poll Volume */ /* Device wait times ***FIXME*** look at durations */ int min_wait; @@ -314,7 +320,7 @@ public: int is_autochanger() const { return capabilities & CAP_AUTOCHANGER; } int requires_mount() const { return capabilities & CAP_REQMOUNT; } int is_removable() const { return capabilities & CAP_REM; } - int is_tape() const { return (dev_type == B_TAPE_DEV || + int is_tape() const { return (dev_type == B_TAPE_DEV || dev_type == B_VTAPE_DEV); } int is_ftp() const { return dev_type == B_FTP_DEV; } int is_file() const { return (dev_type == B_FILE_DEV); } @@ -332,11 +338,14 @@ public: int have_media() const { return state & ST_MEDIA; } int is_short_block() const { return state & ST_SHORT; } int is_busy() const { return (state & ST_READ) || num_writers || num_reserved(); } + bool is_reserved_for_read() const { return num_reserved() && !m_append_reserve; } + bool is_ateot() const { return (state & ST_EOF) && (state & ST_EOT) && (state & ST_WEOT); } int at_eof() const { return state & ST_EOF; } int at_eot() const { return state & ST_EOT; } int at_weot() const { return state & ST_WEOT; } int can_append() const { return state & ST_APPEND; } int is_freespace_ok() const { return state & ST_FREESPACE_OK; } + int is_nospace() const { return (is_freespace_ok() && (state & ST_NOSPACE)); }; /* * can_write() is meant for checking at the end of a job to see * if we still have a tape (perhaps not if at end of tape @@ -344,12 +353,12 @@ public: */ int can_write() const { return is_open() && can_append() && is_labeled() && !at_weot(); } - int can_read() const { return state & ST_READ; } + bool can_read() const { return (state & ST_READ) != 0; } bool can_steal_lock() const { return m_blocked && (m_blocked == BST_UNMOUNTED || m_blocked == BST_WAITING_FOR_SYSOP || m_blocked == BST_UNMOUNTED_WAITING_FOR_SYSOP); }; - bool waiting_for_mount() const { return + bool waiting_for_mount() const { return (m_blocked == BST_UNMOUNTED || m_blocked == BST_WAITING_FOR_SYSOP || m_blocked == BST_UNMOUNTED_WAITING_FOR_SYSOP); }; @@ -359,13 +368,12 @@ public: const char *archive_name() const; const char *name() const; const char *print_name() const; /* Name for display purposes */ + const char *print_type() const; /* in dev.c */ void set_ateof(); /* in dev.c */ void set_ateot(); /* in dev.c */ void set_eot() { state |= ST_EOT; }; void set_eof() { state |= ST_EOF; }; - void set_append() { state |= ST_APPEND; }; void set_labeled() { state |= ST_LABEL; }; - inline void set_read() { state |= ST_READ; }; void set_offline() { state |= ST_OFFLINE; }; void set_mounted() { state |= ST_MOUNTED; }; void set_media() { state |= ST_MEDIA; }; @@ -377,12 +385,15 @@ public: bool is_volume_to_unload() const { \ return m_unload && strcmp(VolHdr.VolumeName, UnloadVolName) == 0; }; void set_load() { m_load = true; }; + void set_wait() { m_wait = true; }; + void clear_wait() { m_wait = false; }; + bool must_wait() const { return m_wait; }; void inc_reserved() { m_num_reserved++; } void set_mounted(int val) { if (val) state |= ST_MOUNTED; \ else state &= ~ST_MOUNTED; }; void dec_reserved() { m_num_reserved--; ASSERT(m_num_reserved>=0); }; - void clear_append() { state &= ~ST_APPEND; }; - void clear_read() { state &= ~ST_READ; }; + void set_read_reserve() { m_append_reserve = false; }; + void set_append_reserve() { m_append_reserve = true; }; void clear_labeled() { state &= ~ST_LABEL; }; void clear_offline() { state &= ~ST_OFFLINE; }; void clear_eot() { state &= ~ST_EOT; }; @@ -403,13 +414,27 @@ public: bstrncpy(VolCatInfo.VolCatName, name, sizeof(VolCatInfo.VolCatName)); setVolCatInfo(false); }; + void setVolCatStatus(const char *status) { + bstrncpy(VolCatInfo.VolCatStatus, status, sizeof(VolCatInfo.VolCatStatus)); + setVolCatInfo(false); + }; + + void clearVolCatBytes() { + VolCatInfo.VolCatBytes = 0; + VolCatInfo.VolCatAmetaBytes = 0; + }; + char *getVolCatName() { return VolCatInfo.VolCatName; }; + void set_nospace(); /* in aligned.c */ + void set_append(); /* in aligned.c */ + void set_read(); /* in aligned.c */ + void clear_nospace(); /* in aligned.c */ + void clear_append(); /* in aligned.c */ + void clear_read(); /* in aligned.c */ void set_unload(); /* in dev.c */ void clear_volhdr(); /* in dev.c */ - void close(); /* in dev.c */ void close_part(DCR *dcr); /* in dev.c */ - bool open(DCR *dcr, int mode); /* in dev.c */ void term(void); /* in dev.c */ ssize_t read(void *buf, size_t len); /* in dev.c */ ssize_t write(const void *buf, size_t len); /* in dev.c */ @@ -417,30 +442,32 @@ public: bool unmount(int timeout); /* in dev.c */ void edit_mount_codes(POOL_MEM &omsg, const char *imsg); /* in dev.c */ bool offline_or_rewind(); /* in dev.c */ - bool offline(); /* in dev.c */ - bool bsf(int count); /* in dev.c */ bool eod(DCR *dcr); /* in dev.c */ bool fsr(int num); /* in dev.c */ - bool fsf(int num); /* in dev.c */ bool bsr(int num); /* in dev.c */ bool weof(int num); /* in dev.c */ - void lock_door(); /* in dev.c */ - void unlock_door(); /* in dev.c */ int32_t get_os_tape_file(); /* in dev.c */ bool scan_dir_for_volume(DCR *dcr); /* in scan.c */ - bool reposition(DCR *dcr, uint32_t rfile, uint32_t rblock); /* in dev.c */ void clrerror(int func); /* in dev.c */ void set_slot(int32_t slot); /* in dev.c */ void clear_slot(); /* in dev.c */ + void notify_newvol_in_attached_dcrs(const char *VolumeName); /* in dev.c */ + void notify_newfile_in_attached_dcrs();/* in dev.c */ + void attach_dcr_to_dev(DCR *dcr); /* in acquire.c */ + void detach_dcr_from_dev(DCR *dcr); /* in acquire.c */ + void updateVolCatBytes(uint64_t); /* in dev.c */ + void updateVolCatBlocks(uint32_t); /* in dev.c */ + void updateVolCatWrites(uint32_t); /* in dev.c */ + void updateVolCatReads(uint32_t); /* in dev.c */ + void updateVolCatReadBytes(uint64_t); /* in dev.c */ - bool update_freespace(); /* in dvd.c */ + uint32_t get_file(); /* in dev.c */ + uint32_t get_block_num(); /* in dev.c */ - uint32_t get_file() const { return file; }; - uint32_t get_block_num() const { return block_num; }; int fd() const { return m_fd; }; - /* low level operations */ + /* Virtual functions that can be overridden */ virtual int d_ioctl(int fd, ioctl_req_t request, char *mt_com=NULL); virtual int d_open(const char *pathname, int flags); virtual int d_close(int fd); @@ -451,23 +478,43 @@ public: virtual bool rewind(DCR *dcr); virtual bool truncate(DCR *dcr); virtual void open_device(DCR *dcr, int omode); - /* + virtual void close(); /* in dev.c */ + virtual bool open(DCR *dcr, int mode); /* in dev.c */ + + /* These could probably be made tape_dev only */ + virtual bool bsf(int count) { return true; } + virtual bool fsf(int num) { return true; } + virtual bool offline() { return true; } + virtual void lock_door() { return; } + virtual void unlock_door() { return; } + virtual bool reposition(DCR *dcr, uint32_t rfile, uint32_t rblock); + + + /* * Locking and blocking calls */ -#ifdef SD_DEBUG_LOCK - void dbg_rLock(const char *, int, bool locked=false); /* in lock.c */ - void dbg_rUnlock(const char *, int); /* in lock.c */ +#ifdef DEV_DEBUG_LOCK void dbg_Lock(const char *, int); /* in lock.c */ void dbg_Unlock(const char *, int); /* in lock.c */ + void dbg_rLock(const char *, int, bool locked=false); /* in lock.c */ + void dbg_rUnlock(const char *, int); /* in lock.c */ +#else + void Lock(); /* in lock.c */ + void Unlock(); /* in lock.c */ + void rLock(bool locked=false); /* in lock.c */ + void rUnlock(); /* in lock.c */ +#endif + void Lock_dcrs() { P(dcrs_mutex); }; + void Unlock_dcrs() { V(dcrs_mutex); }; + +#ifdef SD_DEBUG_LOCK void dbg_Lock_acquire(const char *, int); /* in lock.c */ void dbg_Unlock_acquire(const char *, int); /* in lock.c */ void dbg_Lock_read_acquire(const char *, int); /* in lock.c */ void dbg_Unlock_read_acquire(const char *, int); /* in lock.c */ + void dbg_Lock_VolCatInfo(const char *, int); /* in lock.c */ + void dbg_Unlock_VolCatInfo(const char *, int); /* in lock.c */ #else - void rLock(bool locked=false); /* in lock.c */ - void rUnlock(); /* in lock.c */ - void Lock(); /* in lock.c */ - void Unlock(); /* in lock.c */ void Lock_acquire(); /* in lock.c */ void Unlock_acquire(); /* in lock.c */ void Lock_read_acquire(); /* in lock.c */ @@ -479,6 +526,7 @@ public: int init_acquire_mutex(); /* in lock.c */ int init_read_acquire_mutex(); /* in lock.c */ int init_volcat_mutex(); /* in lock.c */ + int init_dcrs_mutex(); /* in lock.c */ void set_mutex_priorities(); /* in lock.c */ int next_vol_timedwait(const struct timespec *timeout); /* in lock.c */ void dblock(int why); /* in lock.c */ @@ -488,15 +536,14 @@ public: int blocked() const { return m_blocked; }; bool is_blocked() const { return m_blocked != BST_NOT_BLOCKED; }; const char *print_blocked() const; /* in dev.c */ + void open_tape_device(DCR *dcr, int omode); /* in dev.c */ + void open_file_device(DCR *dcr, int omode); /* in dev.c */ private: bool do_tape_mount(int mount, int dotimeout); /* in dev.c */ bool do_file_mount(int mount, int dotimeout); /* in dev.c */ void set_mode(int omode); /* in dev.c */ - void open_tape_device(DCR *dcr, int omode); /* in dev.c */ - void open_file_device(DCR *dcr, int omode); /* in dev.c */ }; - inline const char *DEVICE::strerror() const { return errmsg; } inline const char *DEVICE::archive_name() const { return dev_name; } inline const char *DEVICE::print_name() const { return prt_name; } @@ -510,10 +557,10 @@ inline const char *DEVICE::print_name() const { return prt_name; } * There is one of these records for each Job that is using * the device. Items in this record are "local" to the Job and * do not affect other Jobs. Note, a job can have multiple - * DCRs open, each pointing to a different device. + * DCRs open, each pointing to a different device. * Normally, there is only one JCR thread per DCR. However, the * big and important exception to this is when a Job is being - * canceled. At that time, there may be two threads using the + * canceled. At that time, there may be two threads using the * same DCR. Consequently, when creating/attaching/detaching * and freeing the DCR we must lock it (m_mutex). */ @@ -523,13 +570,13 @@ private: int m_dev_lock; /* non-zero if rLock already called */ bool m_reserved; /* set if reserved device */ bool m_found_in_use; /* set if a volume found in use */ + bool m_writing; /* set when DCR used for writing */ public: dlink dev_link; /* link to attach to dev */ JCR *jcr; /* pointer to JCR */ - bthread_mutex_t m_mutex; /* access control */ - pthread_mutex_t r_mutex; /* rLock pre-mutex */ DEVICE * volatile dev; /* pointer to device */ + DEVICE *ameta_dev; /* pointer to ameta_dev */ DEVRES *device; /* pointer to device resource */ DEV_BLOCK *block; /* pointer to block */ DEV_RECORD *rec; /* pointer to record */ @@ -566,14 +613,20 @@ public: VOLUME_CAT_INFO VolCatInfo; /* Catalog info for desired volume */ /* Methods */ - void set_dev(DEVICE *ndev) { dev = ndev; }; + void set_dev(DEVICE *ndev) { dev = ndev; ameta_dev = ndev; }; + void set_dev_locked() { m_dev_locked = true; }; + void set_writing() { m_writing = true; }; + void clear_writing() { m_writing = false; }; + bool is_reading() const { return !m_writing; }; + bool is_writing() const { return m_writing; }; + void clear_dev_locked() { m_dev_locked = false; }; void inc_dev_lock() { m_dev_lock++; }; void dec_dev_lock() { m_dev_lock--; }; bool found_in_use() const { return m_found_in_use; }; void set_found_in_use() { m_found_in_use = true; }; void clear_found_in_use() { m_found_in_use = false; }; bool is_reserved() const { return m_reserved; }; - bool is_dev_locked() { return m_dev_locked; } + bool is_dev_locked() const { return m_dev_locked; } void setVolCatInfo(bool valid) { VolCatInfo.is_valid = valid; }; bool haveVolCatInfo() const { return VolCatInfo.is_valid; }; void setVolCatName(const char *name) { @@ -582,23 +635,27 @@ public: }; char *getVolCatName() { return VolCatInfo.VolCatName; }; + /* Methods in autochanger.c */ + bool is_virtual_autochanger(); + /* Methods in lock.c */ void dblock(int why) { dev->dblock(why); } -#ifdef SD_DEBUG_LOCK - void dbg_mLock(const char *, int, bool locked); /* in lock.c */ - void dbg_mUnlock(const char *, int); /* in lock.c */ -#else - void mLock(bool locked); - void mUnlock(); -#endif /* Methods in record.c */ bool write_record(DEV_RECORD *rec); + /* Methods in read_record.c */ + bool read_records( + bool record_cb(DCR *dcr, DEV_RECORD *rec), + bool mount_cb(DCR *dcr)); + bool try_repositioning(DEV_RECORD *rec); + BSR *position_to_first_file(); + /* Methods in reserve.c */ void clear_reserved(); - void set_reserved(); - void unreserve_device(); + void set_reserved_for_read(); + void set_reserved_for_append(); + void unreserve_device(bool locked); /* Methods in vol_mgr.c */ bool can_i_use_volume(); @@ -621,6 +678,7 @@ public: bool is_tape_position_ok(); /* Methods in block.c */ + void free_blocks(); bool write_block_to_device(); bool write_block_to_dev(); bool read_block_from_device(bool check_block_numbers); @@ -628,7 +686,7 @@ public: /* Methods in label.c */ bool rewrite_volume_label(bool recycle); - + }; /* Get some definition of function to position diff --git a/bacula/src/stored/device.c b/bacula/src/stored/device.c index 1f4084d64d..3743bcee90 100644 --- a/bacula/src/stored/device.c +++ b/bacula/src/stored/device.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2012 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * @@ -39,7 +27,7 @@ * Obviously, no zzz_dev() is allowed to call * a www_device() or everything falls apart. * - * Concerning the routines dev->r_lock()() and block_device() + * Concerning the routines dev->rLock()() and block_device() * see the end of this module for details. In general, * blocking a device leaves it in a state where all threads * other than the current thread block when they attempt to @@ -53,12 +41,20 @@ * * Kern Sibbald, MM, MMI * - * Version $Id$ */ #include "bacula.h" /* pull in global headers */ +#ifdef HAVE_SYS_STATVFS_H +#include +#else +#define statvfs statfs +#endif +/* statvfs.h defines ST_APPEND, which is also used by Bacula */ +#undef ST_APPEND + #include "stored.h" /* pull in Storage Deamon headers */ + /* Forward referenced functions */ /* @@ -76,7 +72,7 @@ * We enter with device locked, and * exit with device locked. * - * Note, we are called only from one place in block.c for the daemons. + * Note, we are called only from one place in block.c for the daemons. * The btape utility calls it from btape.c. * * Returns: true on success @@ -86,15 +82,19 @@ bool fixup_device_block_write_error(DCR *dcr, int retries) { char PrevVolName[MAX_NAME_LENGTH]; DEV_BLOCK *label_blk; - DEV_BLOCK *block = dcr->block; + DEV_BLOCK *block; char b1[30], b2[30]; time_t wait_time; char dt[MAX_TIME_LENGTH]; JCR *jcr = dcr->jcr; - DEVICE *dev = dcr->dev; - int blocked = dev->blocked(); /* save any previous blocked status */ + DEVICE *dev; + int blocked; /* save any previous blocked status */ bool ok = false; + dev = dcr->dev; + blocked = dev->blocked(); + block = dcr->block; + wait_time = time(NULL); Dmsg0(100, "=== Enter fixup_device_block_write_error\n"); @@ -122,15 +122,22 @@ bool fixup_device_block_write_error(DCR *dcr, int retries) edit_uint64_with_commas(dev->VolCatInfo.VolCatBlocks, b2), bstrftime(dt, sizeof(dt), time(NULL))); - Dmsg1(050, "set_unload dev=%s\n", dev->print_name()); + Dmsg1(150, "set_unload dev=%s\n", dev->print_name()); dev->set_unload(); + + /* Clear DCR Start/End Block/File positions */ + dcr->StartBlock = dcr->EndBlock = 0; + dcr->StartFile = dcr->EndFile = 0; + if (!dcr->mount_next_write_volume()) { free_block(label_blk); dcr->block = block; - dev->Lock(); + dev->Lock(); goto bail_out; } - Dmsg2(050, "must_unload=%d dev=%s\n", dev->must_unload(), dev->print_name()); + Dmsg2(150, "must_unload=%d dev=%s\n", dev->must_unload(), dev->print_name()); + + dev->notify_newvol_in_attached_dcrs(dcr->VolumeName); dev->Lock(); /* lock again */ dev->VolCatInfo.VolCatJobs++; /* increment number of jobs on vol */ @@ -157,22 +164,6 @@ bool fixup_device_block_write_error(DCR *dcr, int retries) free_block(label_blk); dcr->block = block; - /* - * Walk through all attached jcrs indicating the volume has changed - */ - Dmsg1(100, "Notify vol change. Volume=%s\n", dev->getVolCatName()); - DCR *mdcr; - foreach_dlist(mdcr, dev->attached_dcrs) { - JCR *mjcr = mdcr->jcr; - if (mjcr->JobId == 0) { - continue; /* ignore console */ - } - mdcr->NewVol = true; - if (jcr != mjcr) { - bstrncpy(mdcr->VolumeName, dcr->VolumeName, sizeof(mdcr->VolumeName)); - } - } - /* Clear NewVol now because dir_get_volume_info() already done */ jcr->dcr->NewVol = false; set_new_volume_parameters(dcr); @@ -187,7 +178,7 @@ bool fixup_device_block_write_error(DCR *dcr, int retries) be.bstrerror(dev->dev_errno)); /* Note: recursive call */ if (retries-- <= 0 || !fixup_device_block_write_error(dcr, retries)) { - Jmsg2(jcr, M_FATAL, 0, + Jmsg2(jcr, M_FATAL, 0, _("Catastrophic error. Cannot write overflow block to device %s. ERR=%s"), dev->print_name(), be.bstrerror(dev->dev_errno)); goto bail_out; @@ -216,8 +207,11 @@ void set_start_vol_position(DCR *dcr) dcr->StartBlock = dev->block_num; dcr->StartFile = dev->file; } else { - dcr->StartBlock = (uint32_t)dev->file_addr; - dcr->StartFile = (uint32_t)(dev->file_addr >> 32); + /* + * Note: we only update the DCR values for blocks + */ + dcr->StartBlock = dcr->EndBlock = (uint32_t)dev->file_addr; + dcr->StartFile = dcr->EndFile = (uint32_t)(dev->file_addr >> 32); } } @@ -229,8 +223,17 @@ void set_start_vol_position(DCR *dcr) void set_new_volume_parameters(DCR *dcr) { JCR *jcr = dcr->jcr; - if (dcr->NewVol && !dir_get_volume_info(dcr, GET_VOL_INFO_FOR_WRITE)) { - Jmsg1(jcr, M_ERROR, 0, "%s", jcr->errmsg); + Dmsg1(40, "set_new_volume_parameters dev=%s\n", dcr->dev->print_name()); + if (dcr->NewVol) { + while (dcr->VolumeName[0] == 0) { + int retries = 5; + wait_for_device(dcr, retries); + } + if (dir_get_volume_info(dcr, GET_VOL_INFO_FOR_WRITE)) { + dcr->dev->clear_wait(); + } else { + Dmsg1(40, "getvolinfo failed. No new Vol: %s", jcr->errmsg); + } } set_new_file_parameters(dcr); jcr->NumWriteVolumes++; @@ -247,6 +250,8 @@ void set_new_file_parameters(DCR *dcr) set_start_vol_position(dcr); /* Reset indicies */ + Dmsg3(1000, "Reset indices Vol=%s were: FI=%d LI=%d\n", dcr->VolumeName, + dcr->VolFirstIndex, dcr->VolLastIndex); dcr->VolFirstIndex = 0; dcr->VolLastIndex = 0; dcr->NewFile = false; @@ -279,7 +284,7 @@ bool first_open_device(DCR *dcr) return false; } - dev->rLock(); + dev->rLock(false); /* Defer opening files */ if (!dev->is_tape()) { @@ -302,14 +307,14 @@ bool first_open_device(DCR *dcr) Dmsg1(129, "open dev %s OK\n", dev->print_name()); bail_out: - dev->Unlock(); + dev->rUnlock(); return ok; } /* * Make sure device is open, if not do so */ -bool open_device(DCR *dcr) +bool open_dev(DCR *dcr) { DEVICE *dev = dcr->dev; /* Open device */ @@ -326,10 +331,103 @@ bool open_device(DCR *dcr) if (!dev->poll && !dev->is_dvd() && !dev->is_removable()) { Jmsg2(dcr->jcr, M_FATAL, 0, _("Unable to open device %s: ERR=%s\n"), dev->print_name(), dev->bstrerror()); - Pmsg2(000, _("Unable to open archive %s: ERR=%s\n"), + Pmsg2(000, _("Unable to open archive %s: ERR=%s\n"), dev->print_name(), dev->bstrerror()); } return false; } return true; } + +/* + */ +void DEVICE::updateVolCatBytes(uint64_t bytes) +{ + DEVICE *dev; + Lock_VolCatInfo(); + dev = this; + dev->VolCatInfo.VolCatAmetaBytes += bytes; + dev->VolCatInfo.VolCatBytes += bytes; + setVolCatInfo(false); + Unlock_VolCatInfo(); +} + +void DEVICE::updateVolCatBlocks(uint32_t blocks) +{ + DEVICE *dev; + Lock_VolCatInfo(); + dev = this; + dev->VolCatInfo.VolCatAmetaBlocks += blocks; + dev->VolCatInfo.VolCatBlocks += blocks; + setVolCatInfo(false); + Unlock_VolCatInfo(); +} + +void DEVICE::updateVolCatWrites(uint32_t writes) +{ + DEVICE *dev; + Lock_VolCatInfo(); + dev = this; + dev->VolCatInfo.VolCatAmetaWrites += writes; + dev->VolCatInfo.VolCatWrites += writes; + setVolCatInfo(false); + Unlock_VolCatInfo(); +} + +void DEVICE::updateVolCatReads(uint32_t reads) +{ + DEVICE *dev; + Lock_VolCatInfo(); + dev = this; + dev->VolCatInfo.VolCatAmetaReads += reads; + dev->VolCatInfo.VolCatReads += reads; + setVolCatInfo(false); + Unlock_VolCatInfo(); +} + +void DEVICE::updateVolCatReadBytes(uint64_t bytes) +{ + DEVICE *dev; + Lock_VolCatInfo(); + dev = this; + dev->VolCatInfo.VolCatAmetaRBytes += bytes; + dev->VolCatInfo.VolCatRBytes += bytes; + setVolCatInfo(false); + Unlock_VolCatInfo(); +} + +void DEVICE::set_nospace() +{ + state |= ST_NOSPACE; +} + +void DEVICE::clear_nospace() +{ + state &= ~ST_NOSPACE; +} + +/* Put device in append mode */ +void DEVICE::set_append() +{ + state &= ~(ST_NOSPACE|ST_READ|ST_EOT|ST_EOF|ST_WEOT); /* remove EOF/EOT flags */ + state |= ST_APPEND; +} + +/* Clear append mode */ +void DEVICE::clear_append() +{ + state &= ~ST_APPEND; +} + +/* Put device in read mode */ +void DEVICE::set_read() +{ + state &= ~(ST_APPEND|ST_EOT|ST_EOF|ST_WEOT); /* remove EOF/EOT flags */ + state |= ST_READ; +} + +/* Clear read mode */ +void DEVICE::clear_read() +{ + state &= ~ST_READ; +} diff --git a/bacula/src/stored/dircmd.c b/bacula/src/stored/dircmd.c index a463802c8c..391883f0e8 100644 --- a/bacula/src/stored/dircmd.c +++ b/bacula/src/stored/dircmd.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2001-2012 Free Software Foundation Europe e.V. + Copyright (C) 2001-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * This file handles accepting Director Commands @@ -34,14 +22,14 @@ * in job.c. * * N.B. in this file, in general we must use P(dev->mutex) rather - * than dev->r_lock() so that we can examine the blocked + * than dev->rLock() so that we can examine the blocked * state rather than blocking ourselves because a Job * thread has the device blocked. In some "safe" cases, * we can do things to a blocked device. CAREFUL!!!! * * File daemon commands are handled in fdcmd.c * - * Kern Sibbald, May MMI + * Written by Kern Sibbald, May MMI * */ @@ -57,10 +45,11 @@ extern bool init_done; /* Static variables */ static char derrmsg[] = "3900 Invalid command:"; -static char OKsetdebug[] = "3000 OK setdebug=%d\n"; +static char OKsetdebug[] = "3000 OK setdebug=%ld trace=%ld options=%s tags=%s\n"; static char invalid_cmd[] = "3997 Invalid command for a Director with Monitor directive enabled.\n"; static char OK_bootstrap[] = "3000 OK bootstrap\n"; static char ERROR_bootstrap[] = "3904 Error bootstrap\n"; +static char OKclient[] = "3000 OK client command\n"; /* Imported functions */ extern void terminate_child(); @@ -72,6 +61,8 @@ extern bool qstatus_cmd(JCR *jcr); //extern bool query_cmd(JCR *jcr); /* Forward referenced functions */ +static bool client_cmd(JCR *jcr); +static bool storage_cmd(JCR *jcr); static bool label_cmd(JCR *jcr); static bool die_cmd(JCR *jcr); static bool relabel_cmd(JCR *jcr); @@ -85,7 +76,8 @@ static bool unmount_cmd(JCR *jcr); static bool bootstrap_cmd(JCR *jcr); static bool changer_cmd(JCR *sjcr); static bool do_label(JCR *jcr, int relabel); -static DCR *find_device(JCR *jcr, POOL_MEM &dev_name, int drive); +static DCR *find_device(JCR *jcr, POOL_MEM &dev_name, + POOLMEM *media_type, int drive); static void read_volume_label(JCR *jcr, DCR *dcr, DEVICE *dev, int Slot); static void label_volume_if_ok(DCR *dcr, char *oldname, char *newname, char *poolname, @@ -93,6 +85,13 @@ static void label_volume_if_ok(DCR *dcr, char *oldname, static bool try_autoload_device(JCR *jcr, DCR *dcr, int slot, const char *VolName); static void send_dir_busy_message(BSOCK *dir, DEVICE *dev); +/* Responses send to Director for storage command */ +static char BADcmd[] = "2902 Bad %s\n"; +static char OKstore[] = "2000 OK storage\n"; + +/* Commands received from director that need scanning */ +static char storaddr[] = "storage address=%s port=%d ssl=%d Job=%127s Authentication=%127s"; + struct s_cmds { const char *cmd; bool (*func)(JCR *jcr); @@ -107,6 +106,7 @@ static struct s_cmds cmds[] = { {"autochanger", changer_cmd, 0}, {"bootstrap", bootstrap_cmd, 0}, {"cancel", cancel_cmd, 0}, + {"client", client_cmd, 0}, /* client address */ {".die", die_cmd, 0}, {"label", label_cmd, 0}, /* label a tape */ {"mount", mount_cmd, 0}, @@ -116,8 +116,9 @@ static struct s_cmds cmds[] = { {"setdebug=", setdebug_cmd, 0}, /* set debug level */ {"status", status_cmd, 1}, {".status", qstatus_cmd, 1}, + {"stop", cancel_cmd, 0}, + {"storage", storage_cmd, 0}, /* get SD addr from Dir */ {"unmount", unmount_cmd, 0}, -// {"action_on_purge", action_on_purge_cmd, 0}, {"use storage=", use_cmd, 0}, {"run", run_cmd, 0}, // {"query", query_cmd, 0}, @@ -146,15 +147,16 @@ void *handle_connection_request(void *arg) BSOCK *bs = (BSOCK *)arg; JCR *jcr; int i; + int fd_version, sd_version; bool found, quit; int bnet_stat = 0; char name[500]; char tbuf[100]; if (bs->recv() <= 0) { - Emsg1(M_ERROR, 0, _("Connection request from %s failed.\n"), bs->who()); + Jmsg1(NULL, M_ERROR, 0, _("Connection request from %s failed.\n"), bs->who()); bmicrosleep(5, 0); /* make user wait 5 seconds */ - bs->close(); + bs->destroy(); return NULL; } @@ -162,32 +164,34 @@ void *handle_connection_request(void *arg) * Do a sanity check on the message received */ if (bs->msglen < 25 || bs->msglen > (int)sizeof(name)) { - Dmsg1(000, "msg); - Emsg2(M_ERROR, 0, _("Invalid connection from %s. Len=%d\n"), bs->who(), bs->msglen); + Pmsg1(000, "msg); + Jmsg2(NULL, M_ERROR, 0, _("Invalid connection from %s. Len=%d\n"), bs->who(), bs->msglen); bmicrosleep(5, 0); /* make user wait 5 seconds */ - bs->close(); + bs->destroy(); return NULL; } + + Dmsg1(100, "Conn: %s", bs->msg); + fd_version = 0; + sd_version = 0; /* * See if this is a File daemon connection. If so * call FD handler. */ - Dmsg1(110, "Conn: %s", bs->msg); - if (debug_level == 3) { - Dmsg1(000, "msg); - } - if (sscanf(bs->msg, "Hello Start Job %127s", name) == 1) { - Dmsg1(110, "Got a FD connection at %s\n", bstrftimes(tbuf, sizeof(tbuf), + if (sscanf(bs->msg, "Hello Bacula SD: Start Job %127s %d %d", name, &fd_version, &sd_version) == 3 || + sscanf(bs->msg, "Hello FD: Bacula Storage calling Start Job %127s %d", name, &sd_version) == 2 || + sscanf(bs->msg, "Hello Start Job %127s", name) == 1) { + Dmsg1(050, "Got a FD connection at %s\n", bstrftimes(tbuf, sizeof(tbuf), (utime_t)time(NULL))); Dmsg1(50, "%s", bs->msg); - handle_filed_connection(bs, name); + handle_filed_connection(bs, name, fd_version, sd_version); return NULL; } - /* - * This is a connection from the Director, so setup a JCR + /* + * This is a connection from the Director, so setup a JCR */ - Dmsg1(110, "Got a DIR connection at %s\n", bstrftimes(tbuf, sizeof(tbuf), + Dmsg1(050, "Got a DIR connection at %s\n", bstrftimes(tbuf, sizeof(tbuf), (utime_t)time(NULL))); jcr = new_jcr(sizeof(JCR), stored_free_jcr); /* create Job Control Record */ jcr->dir_bsock = bs; /* save Director bsock */ @@ -206,6 +210,7 @@ void *handle_connection_request(void *arg) /* * Authenticate the Director */ + /* We should have: Hello SD: Bacula Director calling */ if (!authenticate_director(jcr)) { Jmsg(jcr, M_FATAL, 0, _("Unable to authenticate Director\n")); goto bail_out; @@ -275,7 +280,7 @@ static bool die_cmd(JCR *jcr) P(m); P(m); } - + Pmsg1(000, "I have been requested to die ... (%s)\n", dir->msg); a = djcr->JobId; /* ref NULL pointer */ djcr->JobId = a; @@ -283,7 +288,140 @@ static bool die_cmd(JCR *jcr) return 0; } - +/* + * Get address of client from Director + * We attempt to connect to the client (an FD or SD) and + * authenticate it. + */ +static bool client_cmd(JCR *jcr) +{ + int client_port; /* client port */ + int enable_ssl; /* enable ssl */ + BSOCK *dir = jcr->dir_bsock; + BSOCK *cl = new_bsock(); /* client bsock */ + + Dmsg1(100, "ClientCmd: %s", dir->msg); + jcr->sd_calls_client = true; + if (sscanf(dir->msg, "client address=%s port=%d ssl=%d", &jcr->client_addr, &client_port, + &enable_ssl) != 3) { + pm_strcpy(jcr->errmsg, dir->msg); + Jmsg(jcr, M_FATAL, 0, _("Bad client command: %s"), jcr->errmsg); + Dmsg1(050, "Bad client command: %s", jcr->errmsg); + goto bail_out; + } + + Dmsg3(110, "Connect to client: %s:%d ssl=%d\n", jcr->client_addr, client_port, + enable_ssl); + /* Open command communications with Client */ + /* Try to connect for 1 hour at 10 second intervals */ + if (!cl->connect(jcr, 10, (int)me->ClientConnectTimeout, me->heartbeat_interval, + _("Client daemon"), jcr->client_addr, NULL, client_port, 1)) { + /* destroy() OK because cl is local */ + cl->destroy(); + Jmsg(jcr, M_FATAL, 0, _("Failed to connect to Client daemon: %s:%d\n"), + jcr->client_addr, client_port); + Dmsg2(100, "Failed to connect to Client daemon: %s:%d\n", + jcr->client_addr, client_port); + goto bail_out; + } + Dmsg0(110, "SD connection OK to Client.\n"); + + /* Send Hello */ + cl->fsend("Hello FD: Bacula Storage calling Start Job %s 1\n", jcr->Job); + jcr->file_bsock = cl; + jcr->file_bsock->set_jcr(jcr); + /* Send OK to Director */ + return dir->fsend(OKclient); + +bail_out: + jcr->setJobStatus(JS_ErrorTerminated); + dir->fsend("3902 Bad %s cmd\n", "client"); + return 0; +} + +/* + * Get address of storage daemon from Director + */ +static bool storage_cmd(JCR *jcr) +{ + int stored_port; /* storage daemon port */ + int enable_ssl; /* enable ssl to sd */ + char sd_auth_key[200]; + BSOCK *dir = jcr->dir_bsock; + BSOCK *sd = new_bsock(); /* storage daemon bsock */ + char Job[MAX_NAME_LENGTH]; + + Dmsg1(050, "StorageCmd: %s", dir->msg); + if (sscanf(dir->msg, storaddr, &jcr->stored_addr, &stored_port, + &enable_ssl, Job, sd_auth_key) != 5) { + pm_strcpy(jcr->errmsg, dir->msg); + Jmsg(jcr, M_FATAL, 0, _("Bad storage command: %s"), jcr->errmsg); + Pmsg1(010, "Bad storage command: %s", jcr->errmsg); + goto bail_out; + } + + unbash_spaces(Job); + if (jcr->sd_auth_key) { + bfree_and_null(jcr->sd_auth_key); + jcr->sd_auth_key = bstrdup(sd_auth_key); + } + if (stored_port != 0) { + Dmsg2(050, "sd_calls=%d sd_client=%d\n", jcr->sd_calls_client, + jcr->sd_client); + jcr->sd_calls_client = false; /* We are doing the connecting */ + Dmsg3(050, "Connect to storage and wait: %s:%d ssl=%d\n", jcr->stored_addr, stored_port, + enable_ssl); + /* Open command communications with Storage daemon */ + /* Try to connect for 1 hour at 10 second intervals */ + if (!sd->connect(jcr, 10, (int)me->ClientConnectTimeout, me->heartbeat_interval, + _("Storage daemon"), jcr->stored_addr, NULL, stored_port, 1)) { + /* destroy() OK because sd is local */ + sd->destroy(); + Jmsg(jcr, M_FATAL, 0, _("Failed to connect to Storage daemon: %s:%d\n"), + jcr->stored_addr, stored_port); + Dmsg2(010, "Failed to connect to Storage daemon: %s:%d\n", + jcr->stored_addr, stored_port); + goto bail_out; + } + + Dmsg0(050, "Connection OK to SD.\n"); + + jcr->store_bsock = sd; + } else { /* The storage daemon called us */ + jcr->sd_calls_client = true; + /* We should already have a storage connection! */ + if (jcr->file_bsock && jcr->store_bsock == NULL) { + jcr->store_bsock = jcr->file_bsock; + } + if (jcr->store_bsock == NULL) { + Jmsg0(jcr, M_FATAL, 0, _("In storage_cmd port==0, no prior Storage connection.\n")); + Pmsg0(010, "In storage_cmd port==0, no prior Storage connection.\n"); + goto bail_out; + } + } + + if (!authenticate_storagedaemon(jcr, Job)) { + goto bail_out; + } + /* + * We are a client so we read from the socket we just + * opened as if we were a FD, so set file_bsock and + * clear the store_bsock. + */ + jcr->file_bsock = jcr->store_bsock; + jcr->store_bsock = NULL; + jcr->authenticated = true; /* Dir authentication is sufficient */ + Dmsg1(050, "=== Storage_cmd authenticated Job=%s with SD.\n", Job); + + /* Send OK to Director */ + return dir->fsend(OKstore); + +bail_out: + Dmsg0(100, "Send storage command failed.\n"); + dir->fsend(BADcmd, "storage"); + return false; +} + /* * Set debug level as requested by the Director @@ -292,16 +430,31 @@ static bool die_cmd(JCR *jcr) static bool setdebug_cmd(JCR *jcr) { BSOCK *dir = jcr->dir_bsock; - int32_t level, trace_flag; + int32_t trace_flag, lvl, hangup; /* hangup is ignored right now */ + int64_t level; + char options[60]; + char tags[512]; + *tags = *options = 0; Dmsg1(10, "setdebug_cmd: %s", dir->msg); - if (sscanf(dir->msg, "setdebug=%d trace=%d", &level, &trace_flag) != 2 || level < 0) { - dir->fsend(_("3991 Bad setdebug command: %s\n"), dir->msg); - return 0; + + if (sscanf(dir->msg, "setdebug=%ld trace=%ld hangup=%ld options=%55s tags=%511s", + &lvl, &trace_flag, &hangup, options, tags) != 5) + { + if (sscanf(dir->msg, "setdebug=%ld trace=%ld", &lvl, &trace_flag) != 2 || lvl < 0) { + dir->fsend(_("3991 Bad setdebug command: %s\n"), dir->msg); + return 0; + } } - debug_level = level; + level = lvl; set_trace(trace_flag); - return dir->fsend(OKsetdebug, level); + set_debug_flags(options); + if (!debug_parse_tags(tags, &level)) { + *tags = 0; + } + debug_level = level; + + return dir->fsend(OKsetdebug, lvl, trace_flag, options, tags); } @@ -355,7 +508,7 @@ static bool cancel_cmd(JCR *cjcr) Dmsg1(100, "JobId=%u broadcast wait_device_release\n", (uint32_t)jcr->JobId); pthread_cond_broadcast(&wait_device_release); } - dir->fsend(_("3000 JobId=%ld Job=\"%s\" marked to be %s.\n"), + dir->fsend(_("3000 JobId=%ld Job=\"%s\" marked to be %s.\n"), jcr->JobId, jcr->Job, reason); free_jcr(jcr); } @@ -396,14 +549,14 @@ static bool do_label(JCR *jcr, int relabel) if (relabel) { if (sscanf(dir->msg, "relabel %127s OldName=%127s NewName=%127s PoolName=%127s " "MediaType=%127s Slot=%d drive=%d", - dev_name.c_str(), oldname, newname, poolname, mtype, + dev_name.c_str(), oldname, newname, poolname, mtype, &slot, &drive) == 7) { ok = true; } } else { *oldname = 0; if (sscanf(dir->msg, "label %127s VolumeName=%127s PoolName=%127s " - "MediaType=%127s Slot=%d drive=%d", + "MediaType=%127s Slot=%d drive=%d", dev_name.c_str(), newname, poolname, mtype, &slot, &drive) == 6) { ok = true; } @@ -413,7 +566,7 @@ static bool do_label(JCR *jcr, int relabel) unbash_spaces(oldname); unbash_spaces(poolname); unbash_spaces(mtype); - dcr = find_device(jcr, dev_name, drive); + dcr = find_device(jcr, dev_name, mtype, drive); if (dcr) { dev = dcr->dev; dev->Lock(); /* Use P to avoid indefinite block */ @@ -470,7 +623,6 @@ static void label_volume_if_ok(DCR *dcr, char *oldname, steal_device_lock(dev, &hold, BST_WRITING_LABEL); Dmsg1(100, "Stole device %s lock, writing label.\n", dev->print_name()); - Dmsg0(90, "try_autoload_device - looking for volume_info\n"); if (!try_autoload_device(dcr->jcr, dcr, slot, volname)) { goto bail_out; /* error */ @@ -491,12 +643,12 @@ static void label_volume_if_ok(DCR *dcr, char *oldname, if (!dev->open(dcr, mode)) { dir->fsend(_("3910 Unable to open device \"%s\": ERR=%s\n"), dev->print_name(), dev->bstrerror()); - goto bail_out; + goto bail_out; } /* See what we have for a Volume */ label_status = read_dev_volume_label(dcr); - + /* Set new volume name */ dcr->setVolCatName(newname); switch(label_status) { @@ -523,7 +675,7 @@ static void label_volume_if_ok(DCR *dcr, char *oldname, /* Fall through wanted! */ case VOL_IO_ERROR: case VOL_NO_LABEL: - if (!write_new_volume_label_to_dev(dcr, newname, poolname, + if (!write_new_volume_label_to_dev(dcr, newname, poolname, relabel, true /* write dvd now */)) { dir->fsend(_("3912 Failed to label Volume: ERR=%s\n"), dev->bstrerror()); break; @@ -534,6 +686,9 @@ static void label_volume_if_ok(DCR *dcr, char *oldname, edit_uint64(dev->VolCatInfo.VolCatBytes, ed1), dev->is_dvd()?1:0, newname, dev->print_name()); break; + case VOL_TYPE_ERROR: + dir->fsend(_("3915 Failed to label Volume: ERR=%s\n"), dev->errmsg); + break; case VOL_NO_MEDIA: dir->fsend(_("3914 Failed to label Volume (no media): ERR=%s\n"), dev->bstrerror()); break; @@ -589,11 +744,12 @@ static bool read_label(DCR *dcr) return ok; } -/* +/* * Searches for device by name, and if found, creates a dcr and * returns it. */ -static DCR *find_device(JCR *jcr, POOL_MEM &devname, int drive) +static DCR *find_device(JCR *jcr, POOL_MEM &devname, + POOLMEM *media_type, int drive) { DEVRES *device; AUTOCHANGER *changer; @@ -603,7 +759,8 @@ static DCR *find_device(JCR *jcr, POOL_MEM &devname, int drive) unbash_spaces(devname); foreach_res(device, R_DEVICE) { /* Find resource, and make sure we were able to open it */ - if (strcmp(device->hdr.name, devname.c_str()) == 0) { + if (strcmp(device->hdr.name, devname.c_str()) == 0 && + (!media_type || strcmp(device->media_type, media_type) ==0)) { if (!device->dev) { device->dev = init_dev(jcr, device); } @@ -639,7 +796,8 @@ static DCR *find_device(JCR *jcr, POOL_MEM &devname, int drive) Dmsg1(100, "Device %s not autoselect skipped.\n", devname.c_str()); continue; /* device is not available */ } - if (drive < 0 || drive == (int)device->dev->drive_index) { + if ((drive < 0 || drive == (int)device->dev->drive_index) && + (!media_type || strcmp(device->media_type, media_type) ==0)) { Dmsg1(20, "Found changer device %s\n", device->hdr.name); found = true; break; @@ -674,27 +832,28 @@ static bool mount_cmd(JCR *jcr) int32_t slot = 0; bool ok; - ok = sscanf(dir->msg, "mount %127s drive=%d slot=%d", devname.c_str(), + ok = sscanf(dir->msg, "mount %127s drive=%d slot=%d", devname.c_str(), &drive, &slot) == 3; if (!ok) { ok = sscanf(dir->msg, "mount %127s drive=%d", devname.c_str(), &drive) == 2; } Dmsg3(100, "ok=%d drive=%d slot=%d\n", ok, drive, slot); if (ok) { - dcr = find_device(jcr, devname, drive); + dcr = find_device(jcr, devname, NULL, drive); if (dcr) { dev = dcr->dev; dev->Lock(); /* Use P to avoid indefinite block */ - Dmsg2(100, "mount cmd blocked=%d must_unload=%d\n", dev->blocked(), + Dmsg2(100, "mount cmd blocked=%d must_unload=%d\n", dev->blocked(), dev->must_unload()); switch (dev->blocked()) { /* device blocked? */ case BST_WAITING_FOR_SYSOP: /* Someone is waiting, wake him */ Dmsg0(100, "Waiting for mount. Attempting to wake thread\n"); dev->set_blocked(BST_MOUNT); - dir->fsend("3001 OK mount requested. %sDevice=%s\n", + dir->fsend("3001 OK mount requested. %sDevice=%s\n", slot>0?_("Specified slot ignored. "):"", dev->print_name()); + Dmsg1(100, "JobId=%u broadcast wait_next_vol\n", (uint32_t)dcr->jcr->JobId); pthread_cond_broadcast(&dev->wait_next_vol); Dmsg1(100, "JobId=%u broadcast wait_device_release\n", (uint32_t)dcr->jcr->JobId); pthread_cond_broadcast(&wait_device_release); @@ -747,7 +906,7 @@ static bool mount_cmd(JCR *jcr) break; case BST_WRITING_LABEL: - dir->fsend(_("3903 Device \"%s\" is being labeled.\n"), + dir->fsend(_("3903 Device \"%s\" is being labeled.\n"), dev->print_name()); break; @@ -788,7 +947,7 @@ static bool mount_cmd(JCR *jcr) dir->fsend(_("3002 Device \"%s\" is mounted.\n"), dev->print_name()); } else { dir->fsend(_("3907 %s"), dev->bstrerror()); - } + } } else { /* must be file */ dir->fsend(_("3906 File device \"%s\" is always mounted.\n"), dev->print_name()); @@ -831,31 +990,34 @@ static bool unmount_cmd(JCR *jcr) int32_t drive; if (sscanf(dir->msg, "unmount %127s drive=%d", devname.c_str(), &drive) == 2) { - dcr = find_device(jcr, devname, drive); + dcr = find_device(jcr, devname, NULL, drive); if (dcr) { dev = dcr->dev; dev->Lock(); /* Use P to avoid indefinite block */ if (!dev->is_open()) { if (!dev->is_busy()) { - unload_autochanger(dcr, -1); + unload_autochanger(dcr, -1); } if (dev->is_unmountable()) { if (dev->unmount(0)) { - dir->fsend(_("3002 Device \"%s\" unmounted.\n"), + dir->fsend(_("3002 Device \"%s\" unmounted.\n"), dev->print_name()); } else { dir->fsend(_("3907 %s"), dev->bstrerror()); - } + } } else { Dmsg0(90, "Device already unmounted\n"); - dir->fsend(_("3901 Device \"%s\" is already unmounted.\n"), + dir->fsend(_("3901 Device \"%s\" is already unmounted.\n"), dev->print_name()); } } else if (dev->blocked() == BST_WAITING_FOR_SYSOP) { Dmsg2(90, "%d waiter dev_block=%d. doing unmount\n", dev->num_waiting, dev->blocked()); if (!unload_autochanger(dcr, -1)) { - /* ***FIXME**** what is this ???? */ + /* + * ***FIXME**** what is this ???? -- probably we had + * the wrong volume so we must free it and try again. KES + */ dev->close(); free_volume(dev); } @@ -863,16 +1025,16 @@ static bool unmount_cmd(JCR *jcr) dir->fsend(_("3907 %s"), dev->bstrerror()); } else { dev->set_blocked(BST_UNMOUNTED_WAITING_FOR_SYSOP); - dir->fsend(_("3001 Device \"%s\" unmounted.\n"), + dir->fsend(_("3001 Device \"%s\" unmounted.\n"), dev->print_name()); } } else if (dev->blocked() == BST_DOING_ACQUIRE) { - dir->fsend(_("3902 Device \"%s\" is busy in acquire.\n"), + dir->fsend(_("3902 Device \"%s\" is busy in acquire.\n"), dev->print_name()); } else if (dev->blocked() == BST_WRITING_LABEL) { - dir->fsend(_("3903 Device \"%s\" is being labeled.\n"), + dir->fsend(_("3903 Device \"%s\" is being labeled.\n"), dev->print_name()); } else if (dev->is_busy()) { @@ -894,7 +1056,7 @@ static bool unmount_cmd(JCR *jcr) if (dev->is_unmountable() && !dev->unmount(0)) { dir->fsend(_("3907 %s"), dev->bstrerror()); } else { - dir->fsend(_("3002 Device \"%s\" unmounted.\n"), + dir->fsend(_("3002 Device \"%s\" unmounted.\n"), dev->print_name()); } } @@ -930,9 +1092,9 @@ static bool action_on_purge_cmd(JCR *jcr) int32_t action; /* TODO: Need to find a free device and ask for slot to the director */ - if (sscanf(dir->msg, + if (sscanf(dir->msg, "action_on_purge %127s vol=%127s action=%d", - devname, volumename, &action)!= 5) + devname, volumename, &action)!= 5) { dir->fsend(_("3916 Error scanning action_on_purge command\n")); goto done; @@ -943,7 +1105,7 @@ static bool action_on_purge_cmd(JCR *jcr) /* Check if action is correct */ if (action & AOP_TRUNCTATE) { - } + } /* ... */ done: @@ -968,7 +1130,7 @@ static bool release_cmd(JCR *jcr) int32_t drive; if (sscanf(dir->msg, "release %127s drive=%d", devname.c_str(), &drive) == 2) { - dcr = find_device(jcr, devname, drive); + dcr = find_device(jcr, devname, NULL, drive); if (dcr) { dev = dcr->dev; dev->Lock(); /* Use P to avoid indefinite block */ @@ -977,28 +1139,28 @@ static bool release_cmd(JCR *jcr) unload_autochanger(dcr, -1); } Dmsg0(90, "Device already released\n"); - dir->fsend(_("3921 Device \"%s\" already released.\n"), + dir->fsend(_("3921 Device \"%s\" already released.\n"), dev->print_name()); } else if (dev->blocked() == BST_WAITING_FOR_SYSOP) { Dmsg2(90, "%d waiter dev_block=%d.\n", dev->num_waiting, dev->blocked()); unload_autochanger(dcr, -1); - dir->fsend(_("3922 Device \"%s\" waiting for sysop.\n"), + dir->fsend(_("3922 Device \"%s\" waiting for sysop.\n"), dev->print_name()); } else if (dev->blocked() == BST_UNMOUNTED_WAITING_FOR_SYSOP) { Dmsg2(90, "%d waiter dev_block=%d. doing unmount\n", dev->num_waiting, dev->blocked()); - dir->fsend(_("3922 Device \"%s\" waiting for mount.\n"), + dir->fsend(_("3922 Device \"%s\" waiting for mount.\n"), dev->print_name()); } else if (dev->blocked() == BST_DOING_ACQUIRE) { - dir->fsend(_("3923 Device \"%s\" is busy in acquire.\n"), + dir->fsend(_("3923 Device \"%s\" is busy in acquire.\n"), dev->print_name()); } else if (dev->blocked() == BST_WRITING_LABEL) { - dir->fsend(_("3914 Device \"%s\" is being labeled.\n"), + dir->fsend(_("3914 Device \"%s\" is being labeled.\n"), dev->print_name()); } else if (dev->is_busy()) { @@ -1006,7 +1168,7 @@ static bool release_cmd(JCR *jcr) } else { /* device not being used */ Dmsg0(90, "Device not in use, releasing\n"); dcr->release_volume(); - dir->fsend(_("3022 Device \"%s\" released.\n"), + dir->fsend(_("3022 Device \"%s\" released.\n"), dev->print_name()); } dev->Unlock(); @@ -1050,19 +1212,19 @@ static bool get_bootstrap_file(JCR *jcr, BSOCK *sock) jcr->RestoreBootstrap, be.bstrerror()); goto bail_out; } - Dmsg0(10, "=== Bootstrap file ===\n"); + Dmsg0(150, "=== Bootstrap file ===\n"); while (sock->recv() >= 0) { - Dmsg1(10, "%s", sock->msg); + Dmsg1(150, "%s", sock->msg); fputs(sock->msg, bs); } fclose(bs); - Dmsg0(10, "=== end bootstrap file ===\n"); + Dmsg0(150, "=== end bootstrap file ===\n"); jcr->bsr = parse_bsr(jcr, jcr->RestoreBootstrap); if (!jcr->bsr) { Jmsg(jcr, M_FATAL, 0, _("Error parsing bootstrap file.\n")); goto bail_out; } - if (debug_level >= 10) { + if (chk_dbglvl(150)) { dump_bsr(jcr->bsr, true); } /* If we got a bootstrap, we are reading, so create read volume list */ @@ -1116,12 +1278,12 @@ static bool changer_cmd(JCR *jcr) safe_cmd = ok = true; } if (ok) { - dcr = find_device(jcr, devname, -1); + dcr = find_device(jcr, devname, NULL, -1); if (dcr) { dev = dcr->dev; dev->Lock(); /* Use P to avoid indefinite block */ if (!dev->device->changer_res) { - dir->fsend(_("3998 Device \"%s\" is not an autochanger.\n"), + dir->fsend(_("3998 Device \"%s\" is not an autochanger.\n"), dev->print_name()); /* Under certain "safe" conditions, we can steal the lock */ } else if (safe_cmd || !dev->is_open() || dev->can_steal_lock()) { @@ -1156,9 +1318,9 @@ static bool readlabel_cmd(JCR *jcr) DCR *dcr; int32_t Slot, drive; - if (sscanf(dir->msg, "readlabel %127s Slot=%d drive=%d", devname.c_str(), + if (sscanf(dir->msg, "readlabel %127s Slot=%d drive=%d", devname.c_str(), &Slot, &drive) == 3) { - dcr = find_device(jcr, devname, drive); + dcr = find_device(jcr, devname, NULL, drive); if (dcr) { dev = dcr->dev; dev->Lock(); /* Use P to avoid indefinite block */ diff --git a/bacula/src/stored/dvd.c b/bacula/src/stored/dvd.c deleted file mode 100644 index 5b8ea26c9f..0000000000 --- a/bacula/src/stored/dvd.c +++ /dev/null @@ -1,825 +0,0 @@ -/* - Bacula® - The Network Backup Solution - - Copyright (C) 2005-2012 Free Software Foundation Europe e.V. - - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. - - Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. -*/ -/* - * - * dvd.c -- Routines specific to DVD devices (and - * possibly other removable hard media). - * - * Nicolas Boichat, MMV - * - */ - -#include "bacula.h" -#include "stored.h" - -/* Forward referenced functions */ -static void add_file_and_part_name(DEVICE *dev, POOL_MEM &archive_name); - -/* - * Write the current volume/part filename to archive_name. - */ -void make_mounted_dvd_filename(DEVICE *dev, POOL_MEM &archive_name) -{ - pm_strcpy(archive_name, dev->device->mount_point); - add_file_and_part_name(dev, archive_name); -} - -void make_spooled_dvd_filename(DEVICE *dev, POOL_MEM &archive_name) -{ - /* Use the working directory if spool directory is not defined */ - if (dev->device->spool_directory) { - pm_strcpy(archive_name, dev->device->spool_directory); - } else { - pm_strcpy(archive_name, working_directory); - } - add_file_and_part_name(dev, archive_name); -} - -static void add_file_and_part_name(DEVICE *dev, POOL_MEM &archive_name) -{ - char partnumber[20]; - - if (!IsPathSeparator(archive_name.c_str()[strlen(archive_name.c_str())-1])) { - pm_strcat(archive_name, "/"); - } - - pm_strcat(archive_name, dev->getVolCatName()); - /* if part > 1, append .# to the filename (where # is the part number) */ - if (dev->part > 1) { - pm_strcat(archive_name, "."); - bsnprintf(partnumber, sizeof(partnumber), "%d", dev->part); - pm_strcat(archive_name, partnumber); - } - Dmsg2(400, "Exit add_file_part_name: arch=%s, part=%d\n", - archive_name.c_str(), dev->part); -} - -/* Update the free space on the device */ -bool DEVICE::update_freespace() -{ - POOL_MEM ocmd(PM_FNAME); - POOLMEM* results; - char* icmd; - int timeout; - uint64_t free; - char ed1[50]; - bool ok = false; - int status; - - if (!is_dvd() || is_freespace_ok()) { - return true; - } - - /* The device must be mounted in order to dvd-freespace to work */ - mount(1); - - Dsm_check(400); - icmd = device->free_space_command; - - if (!icmd) { - free_space = 0; - free_space_errno = 0; - clear_freespace_ok(); /* No valid freespace */ - clear_media(); - Dmsg2(29, "ERROR: update_free_space_dev: free_space=%s, free_space_errno=%d (!icmd)\n", - edit_uint64(free_space, ed1), free_space_errno); - Mmsg(errmsg, _("No FreeSpace command defined.\n")); - return false; - } - - edit_mount_codes(ocmd, icmd); - - Dmsg1(29, "update_freespace: cmd=%s\n", ocmd.c_str()); - - results = get_pool_memory(PM_MESSAGE); - - /* Try at most 3 times to get the free space on the device. This should perhaps be configurable. */ - timeout = 3; - - while (1) { - berrno be; - Dmsg1(20, "Run freespace prog=%s\n", ocmd.c_str()); - status = run_program_full_output(ocmd.c_str(), max_open_wait/2, results); - Dmsg2(500, "Freespace status=%d result=%s\n", status, results); - if (status == 0) { - free = str_to_int64(results); - Dmsg1(400, "Free space program run: Freespace=%s\n", results); - if (free >= 0) { - free_space = free; - free_space_errno = 0; - set_freespace_ok(); /* have valid freespace */ - set_media(); - Mmsg(errmsg, ""); - ok = true; - break; - } - } - free_space = 0; - free_space_errno = EPIPE; - clear_freespace_ok(); /* no valid freespace */ - Mmsg2(errmsg, _("Cannot run free space command. Results=%s ERR=%s\n"), - results, be.bstrerror(status)); - - if (--timeout > 0) { - Dmsg4(40, "Cannot get free space on device %s. free_space=%s, " - "free_space_errno=%d ERR=%s\n", print_name(), - edit_uint64(free_space, ed1), free_space_errno, - errmsg); - bmicrosleep(1, 0); - continue; - } - - dev_errno = free_space_errno; - Dmsg4(40, "Cannot get free space on device %s. free_space=%s, " - "free_space_errno=%d ERR=%s\n", - print_name(), edit_uint64(free_space, ed1), - free_space_errno, errmsg); - break; - } - - free_pool_memory(results); - Dmsg4(29, "leave update_freespace: free_space=%s freespace_ok=%d free_space_errno=%d have_media=%d\n", - edit_uint64(free_space, ed1), !!is_freespace_ok(), free_space_errno, !!have_media()); - Dsm_check(400); - return ok; -} - -/* - * Note!!!! Part numbers now begin at 1. The part number is - * suppressed from the first part, which is just the Volume - * name. Each subsequent part is the Volumename.partnumber. - * - * Write a part (Vol, Vol.2, ...) from the spool to the DVD - * This routine does not update the part number, so normally, you - * should call open_next_part() - * - * It is also called from truncate_dvd to "blank" the medium, as - * well as from block.c when the DVD is full to write the last part. - */ -bool dvd_write_part(DCR *dcr) -{ - DEVICE *dev = dcr->dev; - POOL_MEM archive_name(PM_FNAME); - - /* - * Don't write empty part files. - * This is only useful when growisofs does not support write beyond - * the 4GB boundary. - * Example : - * - 3.9 GB on the volume, dvd-freespace reports 0.4 GB free - * - Write 0.2 GB on the volume, Bacula thinks it could still - * append data, it creates a new empty part. - * - dvd-freespace reports 0 GB free, as the 4GB boundary has - * been crossed - * - Bacula thinks he must finish to write to the device, so it - * tries to write the last part (0-byte), but dvd-writepart fails... - * - * There is one exception: when recycling a volume, we write a blank part - * file, so, then, we need to accept to write it. - */ - if (dev->part_size == 0 && !dev->truncating) { - Dmsg2(29, "dvd_write_part: device is %s, won't write blank part %d\n", dev->print_name(), dev->part); - /* Delete spool file */ - make_spooled_dvd_filename(dev, archive_name); - unlink(archive_name.c_str()); - dev->set_part_spooled(false); - Dmsg1(29, "========= unlink(%s)\n", archive_name.c_str()); - Dsm_check(400); - return true; - } - - POOL_MEM ocmd(PM_FNAME); - POOL_MEM results(PM_MESSAGE); - char* icmd; - int status; - int timeout; - char ed1[50]; - - dev->clear_freespace_ok(); /* need to update freespace */ - - Dsm_check(400); - Dmsg3(29, "dvd_write_part: device is %s, part is %d, is_mounted=%d\n", dev->print_name(), dev->part, dev->is_mounted()); - icmd = dev->device->write_part_command; - - dev->edit_mount_codes(ocmd, icmd); - - /* - * original line follows - * timeout = dev->max_open_wait + (dev->max_part_size/(1350*1024/2)); - * I modified this for a longer timeout; pre-formatting, blanking and - * writing can take quite a while - */ - - /* Explanation of the timeout value, when writing the first part, - * by Arno Lehmann : - * 9 GB, write speed 1x: 6990 seconds (almost 2 hours...) - * Overhead: 900 seconds (starting, initializing, finalizing,probably - * reloading 15 minutes) - * Sum: 15780. - * A reasonable last-exit timeout would be 16000 seconds. Quite long - - * almost 4.5 hours, but hopefully, that timeout will only ever be needed - * in case of a serious emergency. - */ - - if (dev->part == 1) { - timeout = 16000; - } else { - timeout = dev->max_open_wait + (dev->part_size/(1350*1024/4)); - } - - Dmsg2(20, "Write part: cmd=%s timeout=%d\n", ocmd.c_str(), timeout); - status = run_program_full_output(ocmd.c_str(), timeout, results.addr()); - Dmsg2(20, "Write part status=%d result=%s\n", status, results.c_str()); - - dev->blank_dvd = false; - if (status != 0) { - Jmsg2(dcr->jcr, M_FATAL, 0, _("Error writing part %d to the DVD: ERR=%s\n"), - dev->part, results.c_str()); - Mmsg1(dev->errmsg, _("Error while writing current part to the DVD: %s"), - results.c_str()); - Dmsg1(100, "%s\n", dev->errmsg); - dev->dev_errno = EIO; - if (!dev->truncating) { - dcr->mark_volume_in_error(); - } - Dsm_check(400); - return false; - } - Jmsg(dcr->jcr, M_INFO, 0, _("Part %d (%lld bytes) written to DVD.\n"), dev->part, dev->part_size); - Dmsg3(400, "dvd_write_part: Part %d (%lld bytes) written to DVD\nResults: %s\n", - dev->part, dev->part_size, results.c_str()); - - dev->num_dvd_parts++; /* there is now one more part on DVD */ - dev->VolCatInfo.VolCatParts = dev->num_dvd_parts; - dcr->VolCatInfo.VolCatParts = dev->num_dvd_parts; - Dmsg1(100, "Update num_parts=%d\n", dev->num_dvd_parts); - - /* Delete spool file */ - make_spooled_dvd_filename(dev, archive_name); - unlink(archive_name.c_str()); - dev->set_part_spooled(false); - Dmsg1(29, "========= unlink(%s)\n", archive_name.c_str()); - Dsm_check(400); - - /* growisofs umounted the device, so remount it (it will update the free space) */ - dev->clear_mounted(); - dev->mount(1); - Jmsg(dcr->jcr, M_INFO, 0, _("Remaining free space %s on %s\n"), - edit_uint64_with_commas(dev->free_space, ed1), dev->print_name()); - Dsm_check(400); - return true; -} - -/* - * Open the next part file. - * - Close the fd - * - Increment part number - * - Reopen the device - */ -int dvd_open_next_part(DCR *dcr) -{ - DEVICE *dev = dcr->dev; - - Dmsg6(29, "Enter: == open_next_part part=%d npart=%d dev=%s vol=%s mode=%d file_addr=%d\n", - dev->part, dev->num_dvd_parts, dev->print_name(), - dev->getVolCatName(), dev->openmode, dev->file_addr); - if (!dev->is_dvd()) { - Dmsg1(100, "Device %s is not dvd!!!!\n", dev->print_name()); - return -1; - } - - /* When appending, do not open a new part if the current is empty */ - if (dev->can_append() && (dev->part > dev->num_dvd_parts) && - (dev->part_size == 0)) { - Dmsg0(29, "open_next_part exited immediately (dev->part_size == 0).\n"); - return dev->fd(); - } - - dev->close_part(dcr); /* close current part */ - - /* - * If we have a spooled part open, write it to the - * DVD before opening the next part. - */ - if (dev->is_part_spooled()) { - Dmsg2(100, "Before open next write previous. part=%d num_parts=%d\n", - dev->part, dev->num_dvd_parts); - if (!dvd_write_part(dcr)) { - Dmsg0(29, "Error in dvd_write part.\n"); - return -1; - } - } - - dev->part_start += dev->part_size; - dev->part++; - Dmsg2(29, "Inc part=%d num_dvd_parts=%d\n", dev->part, dev->num_dvd_parts); - - /* Are we working on a part past what is written in the DVD? */ - if (dev->num_dvd_parts < dev->part) { - POOL_MEM archive_name(PM_FNAME); - struct stat buf; - /* - * First check what is on DVD. If our part is there, we - * are in trouble, so bail out. - * NB: This is however not a problem if we are writing the first part. - * It simply means that we are over writing an existing volume... - */ - if (dev->num_dvd_parts > 0) { - make_mounted_dvd_filename(dev, archive_name); /* makes dvd name */ - Dmsg1(100, "Check if part on DVD: %s\n", archive_name.c_str()); - if (stat(archive_name.c_str(), &buf) == 0) { - /* bad news bail out */ - dev->set_part_spooled(false); - Mmsg1(&dev->errmsg, _("Next Volume part already exists on DVD. Cannot continue: %s\n"), - archive_name.c_str()); - return -1; - } - } - } - - Dmsg2(400, "Call dev->open(vol=%s, mode=%d)\n", dcr->getVolCatName(), - dev->openmode); - - /* Open next part. Note, this sets part_size for part opened. */ - if (!dev->open(dcr, OPEN_READ_ONLY)) { - return -1; - } - dev->set_labeled(); /* all next parts are "labeled" */ - - return dev->fd(); -} - -/* - * Open the first part file. - * - Close the fd - * - Reopen the device - */ -static bool dvd_open_first_part(DCR *dcr, int mode) -{ - DEVICE *dev = dcr->dev; - - Dmsg5(29, "Enter: ==== open_first_part dev=%s Vol=%s mode=%d num_dvd_parts=%d append=%d\n", dev->print_name(), - dev->getVolCatName(), dev->openmode, dev->num_dvd_parts, dev->can_append()); - - - dev->close_part(dcr); - - Dmsg2(400, "Call dev->open(vol=%s, mode=%d)\n", dcr->getVolCatName(), - mode); - Dmsg0(100, "Set part=1\n"); - dev->part = 1; - dev->part_start = 0; - - if (!dev->open(dcr, mode)) { - Dmsg0(400, "open dev() failed\n"); - return false; - } - Dmsg2(400, "Leave open_first_part state=%s append=%d\n", dev->is_open()?"open":"not open", dev->can_append()); - - return true; -} - - -/* - * Do an lseek on a DVD handling all the different parts - */ -boffset_t lseek_dvd(DCR *dcr, boffset_t offset, int whence) -{ - DEVICE *dev; - boffset_t pos; - char ed1[50], ed2[50]; - - if (!dcr) { /* can be NULL when called from rewind(NULL) */ - return -1; - } - dev = dcr->dev; - - Dmsg5(400, "Enter lseek_dvd fd=%d off=%s w=%d part=%d nparts=%d\n", dev->fd(), - edit_int64(offset, ed1), whence, dev->part, dev->num_dvd_parts); - - switch(whence) { - case SEEK_SET: - Dmsg2(400, "lseek_dvd SEEK_SET to %s (part_start=%s)\n", - edit_int64(offset, ed1), edit_uint64(dev->part_start, ed2)); - if ((uint64_t)offset >= dev->part_start) { - if ((uint64_t)offset == dev->part_start || - (uint64_t)offset < dev->part_start+dev->part_size) { - /* We are staying in the current part, just seek */ -#if defined(HAVE_WIN32) - pos = _lseeki64(dev->fd(), offset-dev->part_start, SEEK_SET); -#else - pos = lseek(dev->fd(), offset-dev->part_start, SEEK_SET); -#endif - if (pos < 0) { - return pos; - } else { - return pos + dev->part_start; - } - } else { - /* Load next part, and start again */ - Dmsg0(100, "lseek open next part\n"); - if (dvd_open_next_part(dcr) < 0) { - Dmsg0(400, "lseek_dvd failed while trying to open the next part\n"); - return -1; - } - Dmsg2(100, "Recurse lseek after open next part=%d num_part=%d\n", - dev->part, dev->num_dvd_parts); - return lseek_dvd(dcr, offset, SEEK_SET); - } - } else { - /* - * pos < dev->part_start : - * We need to access a previous part, - * so just load the first one, and seek again - * until the right one is loaded - */ - Dmsg0(100, "lseek open first part\n"); - if (!dvd_open_first_part(dcr, dev->openmode)) { - Dmsg0(400, "lseek_dvd failed while trying to open the first part\n"); - return -1; - } - Dmsg2(100, "Recurse lseek after open first part=%d num_part=%d\n", - dev->part, dev->num_dvd_parts); - return lseek_dvd(dcr, offset, SEEK_SET); /* system lseek */ - } - break; - case SEEK_CUR: - Dmsg1(400, "lseek_dvd SEEK_CUR to %s\n", edit_int64(offset, ed1)); - if ((pos = lseek(dev->fd(), 0, SEEK_CUR)) < 0) { - Dmsg0(400, "Seek error.\n"); - return pos; - } - pos += dev->part_start; - if (offset == 0) { - Dmsg1(400, "lseek_dvd SEEK_CUR returns %s\n", edit_uint64(pos, ed1)); - return pos; - } else { - Dmsg1(400, "do lseek_dvd SEEK_SET %s\n", edit_uint64(pos, ed1)); - return lseek_dvd(dcr, pos, SEEK_SET); - } - break; - case SEEK_END: - Dmsg1(400, "lseek_dvd SEEK_END to %s\n", edit_int64(offset, ed1)); - /* - * Bacula does not use offsets for SEEK_END - * Also, Bacula uses seek_end only when it wants to - * append to the volume, so for a dvd that means - * that the volume must be spooled since the DVD - * itself is read-only (as currently implemented). - */ - if (offset > 0) { /* Not used by bacula */ - Dmsg1(400, "lseek_dvd SEEK_END called with an invalid offset %s\n", - edit_uint64(offset, ed1)); - errno = EINVAL; - return -1; - } - /* If we are already on a spooled part and have the - * right part number, simply seek - */ - if (dev->is_part_spooled() && dev->part > dev->num_dvd_parts) { - if ((pos = lseek(dev->fd(), 0, SEEK_END)) < 0) { - return pos; - } else { - Dmsg1(400, "lseek_dvd SEEK_END returns %s\n", - edit_uint64(pos + dev->part_start, ed1)); - return pos + dev->part_start; - } - } else { - /* - * Load the first part, then load the next until we reach the last one. - * This is the only way to be sure we compute the right file address. - * - * Save previous openmode, and open all but last part read-only - * (useful for DVDs) - */ - int modesave = dev->openmode; - if (!dvd_open_first_part(dcr, OPEN_READ_ONLY)) { - Dmsg0(400, "lseek_dvd failed while trying to open the first part\n"); - return -1; - } - if (dev->num_dvd_parts > 0) { - while (dev->part < dev->num_dvd_parts) { - if (dvd_open_next_part(dcr) < 0) { - Dmsg0(400, "lseek_dvd failed while trying to open the next part\n"); - return -1; - } - } - dev->openmode = modesave; - if (dvd_open_next_part(dcr) < 0) { - Dmsg0(400, "lseek_dvd failed while trying to open the next part\n"); - return -1; - } - } - return lseek_dvd(dcr, 0, SEEK_END); - } - break; - default: - Dmsg0(400, "Seek call error.\n"); - errno = EINVAL; - return -1; - } -} - -bool dvd_close_job(DCR *dcr) -{ - DEVICE *dev = dcr->dev; - JCR *jcr = dcr->jcr; - bool ok = true; - - /* - * If the device is a dvd and WritePartAfterJob - * is set to yes, open the next part, so, in case of a device - * that requires mount, it will be written to the device. - */ - if (dev->is_dvd() && jcr->write_part_after_job && (dev->part_size > 0)) { - Dmsg1(400, "Writing last part=%d write_partafter_job is set.\n", - dev->part); - if (dev->part < dev->num_dvd_parts+1) { - Jmsg3(jcr, M_FATAL, 0, _("Error writing. Current part less than total number of parts (%d/%d, device=%s)\n"), - dev->part, dev->num_dvd_parts, dev->print_name()); - dev->dev_errno = EIO; - ok = false; - } - - if (ok && !dvd_write_part(dcr)) { - Jmsg2(jcr, M_FATAL, 0, _("Unable to write last on %s: ERR=%s\n"), - dev->print_name(), dev->bstrerror()); - dev->dev_errno = EIO; - ok = false; - } - } - return ok; -} - -void dvd_remove_empty_part(DCR *dcr) -{ - DEVICE *dev = dcr->dev; - - /* Remove the last part file if it is empty */ - if (dev->is_dvd() && dev->num_dvd_parts > 0) { - struct stat statp; - uint32_t part_save = dev->part; - POOL_MEM archive_name(PM_FNAME); - int status; - - dev->part = dev->num_dvd_parts; - make_spooled_dvd_filename(dev, archive_name); - /* Check that the part file is empty */ - status = stat(archive_name.c_str(), &statp); - if (status == 0 && statp.st_size == 0) { - Dmsg3(100, "Unlink empty part in close call make_dvd_filename. part=%d num=%d vol=%s\n", - part_save, dev->num_dvd_parts, dev->getVolCatName()); - Dmsg1(100, "unlink(%s)\n", archive_name.c_str()); - unlink(archive_name.c_str()); - if (part_save == dev->part) { - dev->set_part_spooled(false); /* no spooled part left */ - } - } else if (status < 0) { - if (part_save == dev->part) { - dev->set_part_spooled(false); /* spool doesn't exit */ - } - } - dev->part = part_save; /* restore part number */ - } -} - -bool truncate_dvd(DCR *dcr) -{ - DEVICE* dev = dcr->dev; - - dev->clear_freespace_ok(); /* need to update freespace */ - dev->close_part(dcr); - - if (!dev->unmount(1)) { - Dmsg0(400, "truncate_dvd: Failed to unmount DVD\n"); - return false; - } - - /* If necessary, delete its spool file. */ - if (dev->is_part_spooled()) { - POOL_MEM archive_name(PM_FNAME); - /* Delete spool file */ - make_spooled_dvd_filename(dev, archive_name); - unlink(archive_name.c_str()); - dev->set_part_spooled(false); - } - - /* Set num_dvd_parts to zero (on disk) */ - dev->part = 0; - dev->num_dvd_parts = 0; - dcr->VolCatInfo.VolCatParts = 0; - dev->VolCatInfo.VolCatParts = 0; - - Dmsg0(400, "truncate_dvd: Opening first part (1)...\n"); - - dev->truncating = true; - /* This creates a zero length spool file and sets part=1 */ - if (!dvd_open_first_part(dcr, CREATE_READ_WRITE)) { - Dmsg0(400, "truncate_dvd: Error while opening first part (1).\n"); - dev->truncating = false; - return false; - } - - dev->close_part(dcr); - - Dmsg0(400, "truncate_dvd: Opening first part (2)...\n"); - - /* - * Now actually truncate the DVD which is done by writing - * a zero length part to the DVD/ - */ - if (!dvd_write_part(dcr)) { - Dmsg0(400, "truncate_dvd: Error while writing to DVD.\n"); - dev->truncating = false; - return false; - } - dev->truncating = false; - - /* Set num_dvd_parts to zero (on disk) */ - dev->part = 0; - dev->num_dvd_parts = 0; - dcr->VolCatInfo.VolCatParts = 0; - dev->VolCatInfo.VolCatParts = 0; - /* Clear the size of the volume */ - dev->VolCatInfo.VolCatBytes = 0; - dcr->VolCatInfo.VolCatBytes = 0; - - /* Update catalog */ - if (!dir_update_volume_info(dcr, false, true)) { - return false; - } - - return true; -} - -/* - * Checks if we can write on a non-blank DVD: meaning that it just have been - * truncated (there is only one zero-sized file on the DVD). - * - * Note! Normally if we can mount the device, which should be the case - * when we get here, it is not a blank DVD. Hence we check if - * if all files are of zero length (i.e. no data), in which case we allow it. - * - */ -bool check_can_write_on_non_blank_dvd(DCR *dcr) -{ - DEVICE* dev = dcr->dev; - DIR* dp; - struct dirent *entry, *result; - int name_max; - struct stat filestat; - bool ok = true; - - name_max = pathconf(".", _PC_NAME_MAX); - if (name_max < 1024) { - name_max = 1024; - } - - if (!(dp = opendir(dev->device->mount_point))) { - berrno be; - dev->dev_errno = errno; - Dmsg3(29, "check_can_write_on_non_blank_dvd: failed to open dir %s (dev=%s), ERR=%s\n", - dev->device->mount_point, dev->print_name(), be.bstrerror()); - return false; - } - - entry = (struct dirent *)malloc(sizeof(struct dirent) + name_max + 1000); - for ( ;; ) { - if ((readdir_r(dp, entry, &result) != 0) || (result == NULL)) { - dev->dev_errno = EIO; - Dmsg2(129, "check_can_write_on_non_blank_dvd: no more files in dir %s (dev=%s)\n", - dev->device->mount_point, dev->print_name()); - break; - } else { - Dmsg2(99, "check_can_write_on_non_blank_dvd: found %s (versus %s)\n", - result->d_name, dev->getVolCatName()); - if (strcmp(result->d_name, ".") && strcmp(result->d_name, "..") && - strcmp(result->d_name, ".keep")) { - /* Found a file, checking it is empty */ - POOL_MEM filename(PM_FNAME); - pm_strcpy(filename, dev->device->mount_point); - if (!IsPathSeparator(filename.c_str()[strlen(filename.c_str())-1])) { - pm_strcat(filename, "/"); - } - pm_strcat(filename, result->d_name); - if (stat(filename.c_str(), &filestat) < 0) { - berrno be; - dev->dev_errno = errno; - Dmsg2(29, "check_can_write_on_non_blank_dvd: cannot stat file (file=%s), ERR=%s\n", - filename.c_str(), be.bstrerror()); - ok = false; - break; - } - Dmsg2(99, "check_can_write_on_non_blank_dvd: size of %s is %lld\n", - filename.c_str(), filestat.st_size); - if (filestat.st_size != 0) { - ok = false; - break; - } - } - } - } - free(entry); - closedir(dp); - - Dmsg1(29, "OK can_write_on_non_blank_dvd: OK=%d\n", ok); - return ok; -} - -/* - * Mount a DVD device, then scan to find out how many parts - * there are. - */ -int find_num_dvd_parts(DCR *dcr) -{ - DEVICE *dev = dcr->dev; - int num_parts = 0; - - if (!dev->is_dvd()) { - return 0; - } - - if (dev->mount(1)) { - DIR* dp; - struct dirent *entry, *result; - int name_max; - int len = strlen(dcr->getVolCatName()); - - /* Now count the number of parts */ - name_max = pathconf(".", _PC_NAME_MAX); - if (name_max < 1024) { - name_max = 1024; - } - - if (!(dp = opendir(dev->device->mount_point))) { - berrno be; - dev->dev_errno = errno; - Dmsg3(29, "find_num_dvd_parts: failed to open dir %s (dev=%s), ERR=%s\n", - dev->device->mount_point, dev->print_name(), be.bstrerror()); - goto get_out; - } - - entry = (struct dirent *)malloc(sizeof(struct dirent) + name_max + 1000); - - Dmsg1(100, "Looking for Vol=%s\n", dcr->getVolCatName()); - for ( ;; ) { - int flen; - bool ignore; - if ((readdir_r(dp, entry, &result) != 0) || (result == NULL)) { - dev->dev_errno = EIO; - Dmsg2(129, "find_num_dvd_parts: failed to find suitable file in dir %s (dev=%s)\n", - dev->device->mount_point, dev->print_name()); - break; - } - flen = strlen(result->d_name); - ignore = true; - if (flen >= len) { - result->d_name[len] = 0; - if (strcmp(dcr->getVolCatName(), result->d_name) == 0) { - num_parts++; - Dmsg1(100, "find_num_dvd_parts: found part: %s\n", result->d_name); - ignore = false; - } - } - if (ignore) { - Dmsg2(129, "find_num_dvd_parts: ignoring %s in %s\n", - result->d_name, dev->device->mount_point); - } - } - free(entry); - closedir(dp); - Dmsg1(29, "find_num_dvd_parts = %d\n", num_parts); - } - -get_out: - dev->set_freespace_ok(); - if (dev->is_mounted()) { - dev->unmount(0); - } - return num_parts; -} diff --git a/bacula/src/stored/ebcdic.c b/bacula/src/stored/ebcdic.c index 15f59a4509..2e7d4bdd6b 100644 --- a/bacula/src/stored/ebcdic.c +++ b/bacula/src/stored/ebcdic.c @@ -1,33 +1,21 @@ /* - * Taken from the public domain ansitape program for + * Taken from the public domain ansitape program for * integration into Bacula. KES - Mar 2005 */ /* Bacula® - The Network Backup Solution - Copyright (C) 2006-2006 Free Software Foundation Europe e.V. + Copyright (C) 2006-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ @@ -170,7 +158,7 @@ static char to_ebcdic_table[256] = { /* - * Convert from ASCII to EBCDIC + * Convert from ASCII to EBCDIC */ void ascii_to_ebcdic(char *dst, char *src, int count) { diff --git a/bacula/src/stored/fd_cmds.c b/bacula/src/stored/fd_cmds.c index a97f832a7a..b2d7709a6c 100644 --- a/bacula/src/stored/fd_cmds.c +++ b/bacula/src/stored/fd_cmds.c @@ -1,34 +1,22 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2011 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * This file handles commands from the File daemon. * - * Kern Sibbald, MM + * Written by Kern Sibbald, MM * * We get here because the Director has initiated a Job with * the Storage daemon, then done the same with the File daemon, @@ -42,6 +30,9 @@ #include "bacula.h" #include "stored.h" +/* Forward referenced functions */ +static bool response(JCR *jcr, BSOCK *bs, const char *resp, const char *cmd); + /* Imported variables */ extern STORES *me; @@ -51,6 +42,7 @@ static char ferrmsg[] = "3900 Invalid command\n"; /* Imported functions */ extern bool do_append_data(JCR *jcr); extern bool do_read_data(JCR *jcr); +extern bool do_backup_job(JCR *jcr); /* Forward referenced FD commands */ static bool append_open_session(JCR *jcr); @@ -92,19 +84,20 @@ static char NOT_opened[] = "3902 Error session not opened\n"; static char OK_end[] = "3000 OK end\n"; static char OK_close[] = "3000 OK close Status = %d\n"; static char OK_open[] = "3000 OK open ticket = %d\n"; -static char ERROR_append[] = "3903 Error append data\n"; +static char ERROR_append[] = "3903 Error append data: %s\n"; /* Information sent to the Director */ static char Job_start[] = "3010 Job %s start\n"; -char Job_end[] = +char Job_end[] = "3099 Job %s end JobStatus=%d JobFiles=%d JobBytes=%s JobErrors=%u\n"; /* - * Run a File daemon Job -- File daemon already authorized - * Director sends us this command. + * Run a Client Job -- Client already authorized + * Note: this can be either a backup or restore or + * migrate/copy job. * * Basic task here is: - * - Read a command from the File daemon + * - Read a command from the Client -- FD or SD * - Execute it * */ @@ -119,7 +112,40 @@ void run_job(JCR *jcr) jcr->start_time = time(NULL); jcr->run_time = jcr->start_time; jcr->sendJobStatus(JS_Running); - do_fd_commands(jcr); + /* + * A migrate or copy job does both a restore (read_data) and + * a backup (append_data). + * Otherwise we do the commands that the client sends + * which are for normal backup or restore jobs. + */ + Dmsg3(050, "==== JobType=%c run_job=%d sd_client=%d\n", jcr->getJobType(), jcr->JobId, jcr->sd_client); + if (jcr->is_JobType(JT_BACKUP) && jcr->sd_client) { + jcr->session_opened = true; + Dmsg0(050, "Do: receive for 3000 OK data then append"); + if (!response(jcr, jcr->file_bsock, "3000 OK data\n", "Append data")) { + Dmsg1(050, "Expect: 3000 OK data, got: %s", jcr->file_bsock->msg); + Jmsg0(jcr, M_FATAL, 0, "Append data not accepted\n"); + goto bail_out; + } + append_data_cmd(jcr); + append_end_session(jcr); + } else if (jcr->is_JobType(JT_MIGRATE) || jcr->is_JobType(JT_COPY)) { + jcr->session_opened = true; + Dmsg1(050, "Do: read_data_cmd file_bsock=%p\n", jcr->file_bsock); + read_data_cmd(jcr); + if (!response(jcr, jcr->file_bsock, "3000 OK data\n", "Data received")) { + Dmsg1(050, "Expect 3000 OK data, got: %s", jcr->file_bsock->msg); + Jmsg0(jcr, M_FATAL, 0, "Read data not accepted\n"); + jcr->file_bsock->signal(BNET_EOD); + goto bail_out; + } + jcr->file_bsock->signal(BNET_EOD); + } else { + /* Either a Backup or Restore job */ + Dmsg0(050, "Do: do_client_commands\n"); + do_client_commands(jcr); + } +bail_out: jcr->end_time = time(NULL); dequeue_messages(jcr); /* send any queued messages */ jcr->setJobStatus(JS_Terminated); @@ -127,15 +153,16 @@ void run_job(JCR *jcr) generate_plugin_event(jcr, bsdEventJobEnd); dir->fsend(Job_end, jcr->Job, jcr->JobStatus, jcr->JobFiles, edit_uint64(jcr->JobBytes, ec1), jcr->JobErrors); + Dmsg1(100, "==== %s", dir->msg); dir->signal(BNET_EOD); /* send EOD to Director daemon */ free_plugins(jcr); /* release instantiated plugins */ return; } /* - * Now talk to the FD and do what he says + * Now talk to the Client (FD/SD) and do what he says */ -void do_fd_commands(JCR *jcr) +void do_client_commands(JCR *jcr) { int i; bool found, quit; @@ -147,7 +174,7 @@ void do_fd_commands(JCR *jcr) /* Read command coming from the File daemon */ stat = fd->recv(); - if (is_bnet_stop(fd)) { /* hardeof or error */ + if (fd->is_stop()) { /* hard eof or error */ break; /* connection terminated */ } if (stat <= 0) { @@ -163,7 +190,7 @@ void do_fd_commands(JCR *jcr) /* Note fd->msg command may be destroyed by comm activity */ if (!job_canceled(jcr)) { if (jcr->errmsg[0]) { - Jmsg1(jcr, M_FATAL, 0, _("Command error with FD, hanging up. %s\n"), + Jmsg1(jcr, M_FATAL, 0, _("Command error with FD, hanging up. ERR=%s\n"), jcr->errmsg); } else { Jmsg0(jcr, M_FATAL, 0, _("Command error with FD, hanging up.\n")); @@ -200,12 +227,12 @@ static bool append_data_cmd(JCR *jcr) if (jcr->session_opened) { Dmsg1(110, "msg); jcr->setJobType(JT_BACKUP); + jcr->errmsg[0] = 0; if (do_append_data(jcr)) { return true; } else { - pm_strcpy(jcr->errmsg, _("Append data error.\n")); - bnet_suppress_error_messages(fd, 1); /* ignore errors at this point */ - fd->fsend(ERROR_append); + fd->suppress_error_messages(true); /* ignore errors at this point */ + fd->fsend(ERROR_append, jcr->errmsg); } } else { pm_strcpy(jcr->errmsg, _("Attempt to append on non-open session.\n")); @@ -363,3 +390,30 @@ static bool read_close_session(JCR *jcr) jcr->session_opened = false; return true; } + +/* + * Get response from FD or SD + * sent. Check that the response agrees with what we expect. + * + * Returns: false on failure + * true on success + */ +static bool response(JCR *jcr, BSOCK *bs, const char *resp, const char *cmd) +{ + int n; + + if (bs->is_error()) { + return false; + } + if ((n = bs->recv()) >= 0) { + if (strcmp(bs->msg, resp) == 0) { + return true; + } + Jmsg(jcr, M_FATAL, 0, _("Bad response to %s command: wanted %s, got %s\n"), + cmd, resp, bs->msg); + return false; + } + Jmsg(jcr, M_FATAL, 0, _("Socket error on %s command: ERR=%s\n"), + cmd, bs->bstrerror()); + return false; +} diff --git a/bacula/src/stored/file_dev.c b/bacula/src/stored/file_dev.c new file mode 100644 index 0000000000..e5ad02f859 --- /dev/null +++ b/bacula/src/stored/file_dev.c @@ -0,0 +1,384 @@ +/* + Bacula® - The Network Backup Solution + + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. + + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. + + Bacula® is a registered trademark of Kern Sibbald. +*/ +/* + * + * file_dev.c -- low level operations on file devices + * + * written by, Kern Sibbald, MM + * separated from dev.c February 2014 + * + */ + +#include "bacula.h" +#include "stored.h" + +/* Imported functions */ +const char *mode_to_str(int mode); + + +/* default primitives are designed for file */ +int DEVICE::d_open(const char *pathname, int flags) +{ + return ::open(pathname, flags); +} + +int DEVICE::d_close(int fd) +{ + return ::close(fd); +} + +int DEVICE::d_ioctl(int fd, ioctl_req_t request, char *mt_com) +{ + return ::ioctl(fd, request, mt_com); +} + +ssize_t DEVICE::d_read(int fd, void *buffer, size_t count) +{ + return ::read(fd, buffer, count); +} + +ssize_t DEVICE::d_write(int fd, const void *buffer, size_t count) +{ + return ::write(fd, buffer, count); +} + +/* Rewind file device */ +bool DEVICE::rewind(DCR *dcr) +{ + Dmsg3(400, "rewind res=%d fd=%d %s\n", num_reserved(), m_fd, print_name()); + state &= ~(ST_EOT|ST_EOF|ST_WEOT); /* remove EOF/EOT flags */ + block_num = file = 0; + file_size = 0; + file_addr = 0; + if (m_fd < 0) { + return false; + } + if (is_file()) { + if (lseek(dcr, (boffset_t)0, SEEK_SET) < 0) { + berrno be; + dev_errno = errno; + Mmsg2(errmsg, _("lseek error on %s. ERR=%s.\n"), + print_name(), be.bstrerror()); + return false; + } + } + return true; +} + +/* + * Reposition the device to file, block + * Returns: false on failure + * true on success + */ +bool DEVICE::reposition(DCR *dcr, uint32_t rfile, uint32_t rblock) +{ + if (!is_open()) { + dev_errno = EBADF; + Mmsg0(errmsg, _("Bad call to reposition. Device not open\n")); + Emsg0(M_FATAL, 0, errmsg); + return false; + } + + boffset_t pos = (((boffset_t)rfile)<<32) | rblock; + Dmsg1(100, "===== lseek to %d\n", (int)pos); + if (lseek(dcr, pos, SEEK_SET) == (boffset_t)-1) { + berrno be; + dev_errno = errno; + Mmsg2(errmsg, _("lseek error on %s. ERR=%s.\n"), + print_name(), be.bstrerror()); + return false; + } + file = rfile; + block_num = rblock; + file_addr = pos; + return true; +} + + +/* Seek to specified place */ +boffset_t DEVICE::lseek(DCR *dcr, boffset_t offset, int whence) +{ + switch (dev_type) { + case B_FILE_DEV: +#if defined(HAVE_WIN32) + return ::_lseeki64(m_fd, (__int64)offset, whence); +#else + return ::lseek(m_fd, offset, whence); +#endif + } + return -1; +} + +/* + * Open a file device. For Aligned type we open both Volumes + */ +void DEVICE::open_file_device(DCR *dcr, int omode) +{ + POOL_MEM archive_name(PM_FNAME); + POOL_MEM aligned_name(PM_FNAME); + + get_autochanger_loaded_slot(dcr); + + /* + * Handle opening of File Archive (not a tape) + */ + + pm_strcpy(archive_name, dev_name); + /* + * If this is a virtual autochanger (i.e. changer_res != NULL) + * we simply use the device name, assuming it has been + * appropriately setup by the "autochanger". + */ + if (!device->changer_res || device->changer_command[0] == 0 || + strcmp(device->changer_command, "/dev/null") == 0) { + if (VolCatInfo.VolCatName[0] == 0) { + Mmsg(errmsg, _("Could not open file device %s. No Volume name given.\n"), + print_name()); + clear_opened(); + return; + } + + if (!IsPathSeparator(archive_name.c_str()[strlen(archive_name.c_str())-1])) { + pm_strcat(archive_name, "/"); + } + pm_strcat(archive_name, getVolCatName()); + } + + mount(1); /* do mount if required */ + + openmode = omode; + set_mode(omode); + /* If creating file, give 0640 permissions */ + Dmsg3(100, "open disk: mode=%s open(%s, 0x%x, 0640)\n", mode_to_str(omode), + archive_name.c_str(), mode); + /* Use system open() */ + if ((m_fd = ::open(archive_name.c_str(), mode, 0640)) < 0) { + berrno be; + dev_errno = errno; + Mmsg3(errmsg, _("Could not open(%s,%s,0640): ERR=%s\n"), + archive_name.c_str(), mode_to_str(omode), be.bstrerror()); + Dmsg1(40, "open failed: %s", errmsg); + } + if (m_fd >= 0) { + dev_errno = 0; + file = 0; + file_addr = 0; + } + Dmsg1(100, "open dev: disk fd=%d opened\n", m_fd); +} + + +/* + * Truncate a volume. If this is aligned disk, we + * truncate both volumes. + */ +bool DEVICE::truncate(DCR *dcr) /* We need the DCR for DVD-writing */ +{ + struct stat st; + DEVICE *dev = this; + + Dmsg1(100, "truncate %s\n", print_name()); + switch (dev_type) { + case B_VTL_DEV: + case B_VTAPE_DEV: + case B_TAPE_DEV: + /* maybe we should rewind and write and eof ???? */ + return true; /* we don't really truncate tapes */ + case B_FILE_DEV: + Dmsg1(100, "Truncate fd=%d\n", dev->m_fd); + if (ftruncate(dev->m_fd, 0) != 0) { + berrno be; + Mmsg2(errmsg, _("Unable to truncate device %s. ERR=%s\n"), + print_name(), be.bstrerror()); + return false; + } + + /* + * Check for a successful ftruncate() and issue a work-around for devices + * (mostly cheap NAS) that don't support truncation. + * Workaround supplied by Martin Schmid as a solution to bug #1011. + * 1. close file + * 2. delete file + * 3. open new file with same mode + * 4. change ownership to original + */ + + if (fstat(dev->m_fd, &st) != 0) { + berrno be; + Mmsg2(errmsg, _("Unable to stat device %s. ERR=%s\n"), + print_name(), be.bstrerror()); + return false; + } + + if (st.st_size != 0) { /* ftruncate() didn't work */ + POOL_MEM archive_name(PM_FNAME); + + pm_strcpy(archive_name, dev_name); + if (!IsPathSeparator(archive_name.c_str()[strlen(archive_name.c_str())-1])) { + pm_strcat(archive_name, "/"); + } + pm_strcat(archive_name, dcr->VolumeName); + + Mmsg2(errmsg, _("Device %s doesn't support ftruncate(). Recreating file %s.\n"), + print_name(), archive_name.c_str()); + + /* Close file and blow it away */ + ::close(dev->m_fd); + ::unlink(archive_name.c_str()); + + /* Recreate the file -- of course, empty */ + dev->set_mode(CREATE_READ_WRITE); + if ((dev->m_fd = ::open(archive_name.c_str(), mode, st.st_mode)) < 0) { + berrno be; + dev_errno = errno; + Mmsg2(errmsg, _("Could not reopen: %s, ERR=%s\n"), archive_name.c_str(), + be.bstrerror()); + Dmsg1(40, "reopen failed: %s", errmsg); + Emsg0(M_FATAL, 0, errmsg); + return false; + } + + /* Reset proper owner */ + chown(archive_name.c_str(), st.st_uid, st.st_gid); + } + return true; + } + return false; +} + + +/* + * (Un)mount the device (either a FILE or DVD device) + */ +bool DEVICE::do_file_mount(int mount, int dotimeout) +{ + POOL_MEM ocmd(PM_FNAME); + POOLMEM *results; + DIR* dp; + char *icmd; + struct dirent *entry, *result; + int status, tries, name_max, count; + berrno be; + + Dsm_check(200); + if (mount) { + icmd = device->mount_command; + } else { + icmd = device->unmount_command; + } + + clear_freespace_ok(); + edit_mount_codes(ocmd, icmd); + + Dmsg2(100, "do_file_mount: cmd=%s mounted=%d\n", ocmd.c_str(), !!is_mounted()); + + if (dotimeout) { + /* Try at most 10 times to (un)mount the device. This should perhaps be configurable. */ + tries = 10; + } else { + tries = 1; + } + results = get_memory(4000); + + /* If busy retry each second */ + Dmsg1(100, "do_file_mount run_prog=%s\n", ocmd.c_str()); + while ((status = run_program_full_output(ocmd.c_str(), max_open_wait/2, results)) != 0) { + /* Doesn't work with internationalization (This is not a problem) */ + if (mount && fnmatch("*is already mounted on*", results, 0) == 0) { + break; + } + if (!mount && fnmatch("* not mounted*", results, 0) == 0) { + break; + } + if (tries-- > 0) { + /* Sometimes the device cannot be mounted because it is already mounted. + * Try to unmount it, then remount it */ + if (mount) { + Dmsg1(400, "Trying to unmount the device %s...\n", print_name()); + do_file_mount(0, 0); + } + bmicrosleep(1, 0); + continue; + } + Dmsg5(100, "Device %s cannot be %smounted. stat=%d result=%s ERR=%s\n", print_name(), + (mount ? "" : "un"), status, results, be.bstrerror(status)); + Mmsg(errmsg, _("Device %s cannot be %smounted. ERR=%s\n"), + print_name(), (mount ? "" : "un"), be.bstrerror(status)); + + /* + * Now, just to be sure it is not mounted, try to read the filesystem. + */ + name_max = pathconf(".", _PC_NAME_MAX); + if (name_max < 1024) { + name_max = 1024; + } + + if (!(dp = opendir(device->mount_point))) { + berrno be; + dev_errno = errno; + Dmsg3(100, "do_file_mount: failed to open dir %s (dev=%s), ERR=%s\n", + device->mount_point, print_name(), be.bstrerror()); + goto get_out; + } + + entry = (struct dirent *)malloc(sizeof(struct dirent) + name_max + 1000); + count = 0; + while (1) { + if ((readdir_r(dp, entry, &result) != 0) || (result == NULL)) { + dev_errno = EIO; + Dmsg2(129, "do_file_mount: failed to find suitable file in dir %s (dev=%s)\n", + device->mount_point, print_name()); + break; + } + if ((strcmp(result->d_name, ".")) && (strcmp(result->d_name, "..")) && (strcmp(result->d_name, ".keep"))) { + count++; /* result->d_name != ., .. or .keep (Gentoo-specific) */ + break; + } else { + Dmsg2(129, "do_file_mount: ignoring %s in %s\n", result->d_name, device->mount_point); + } + } + free(entry); + closedir(dp); + + Dmsg1(100, "do_file_mount: got %d files in the mount point (not counting ., .. and .keep)\n", count); + + if (count > 0) { + /* If we got more than ., .. and .keep */ + /* there must be something mounted */ + if (mount) { + Dmsg1(100, "Did Mount by count=%d\n", count); + break; + } else { + /* An unmount request. We failed to unmount - report an error */ + set_mounted(true); + free_pool_memory(results); + Dmsg0(200, "== error mount=1 wanted unmount\n"); + return false; + } + } +get_out: + set_mounted(false); + free_pool_memory(results); + Dmsg0(200, "============ mount=0\n"); + Dsm_check(200); + return false; + } + + set_mounted(mount); /* set/clear mounted flag */ + free_pool_memory(results); + Dmsg1(200, "============ mount=%d\n", mount); + return true; +} diff --git a/bacula/src/stored/file_dev.h b/bacula/src/stored/file_dev.h new file mode 100644 index 0000000000..eef61b29d6 --- /dev/null +++ b/bacula/src/stored/file_dev.h @@ -0,0 +1,30 @@ +/* + Bacula® - The Network Backup Solution + + Copyright (C) 2014-2014 Free Software Foundation Europe e.V. + + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. + + Bacula® is a registered trademark of Kern Sibbald. +*/ +/* + * Inspired by vtape.h + */ + +#ifndef __FILE_DEV_ +#define __FILE_DEV_ + +class file_dev : public DEVICE { +public: + + file_dev() { }; + ~file_dev() { m_fd = -1; }; +}; + +#endif /* __FILE_DEV_ */ diff --git a/bacula/src/stored/job.c b/bacula/src/stored/job.c index 9d8cd7cab2..d24b8369bd 100644 --- a/bacula/src/stored/job.c +++ b/bacula/src/stored/job.c @@ -1,34 +1,22 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2011 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Job control and execution for Storage Daemon * - * Kern Sibbald, MM + * Written by Kern Sibbald, MM * */ @@ -38,18 +26,19 @@ static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; /* Imported variables */ +extern STORES *me; /* our Global resource */ extern uint32_t VolSessionTime; /* Imported functions */ extern uint32_t newVolSessionId(); -extern bool do_mac(JCR *jcr); +extern bool do_vbackup(JCR *jcr); /* Requests from the Director daemon */ -/* Added in 3.1.4 14Sep09 KES */ static char jobcmd[] = "JobId=%d job=%127s job_name=%127s client_name=%127s " "type=%d level=%d FileSet=%127s NoAttr=%d SpoolAttr=%d FileSetMD5=%127s " "SpoolData=%d WritePartAfterJob=%d PreferMountedVols=%d SpoolSize=%s " - "rerunning=%d VolSessionId=%d VolSessionTime=%d\n"; + "rerunning=%d VolSessionId=%d VolSessionTime=%d sd_client=%d " + "Authorization=%s\n"; /* Responses sent to Director daemon */ static char OKjob[] = "3000 OK Job SDid=%u SDtime=%u Authorization=%s\n"; @@ -68,13 +57,14 @@ static char BAD_job[] = "3915 Bad Job command. stat=%d CMD: %s\n"; bool job_cmd(JCR *jcr) { int32_t JobId; - char auth_key[100]; + char sd_auth_key[200]; char spool_size[30]; char seed[100]; BSOCK *dir = jcr->dir_bsock; POOL_MEM job_name, client_name, job, fileset_name, fileset_md5; int32_t JobType, level, spool_attributes, no_attributes, spool_data; int32_t write_part_after_job, PreferMountedVols, rerunning; + int32_t is_client; int stat; JCR *ojcr; @@ -88,8 +78,9 @@ bool job_cmd(JCR *jcr) &JobType, &level, fileset_name.c_str(), &no_attributes, &spool_attributes, fileset_md5.c_str(), &spool_data, &write_part_after_job, &PreferMountedVols, spool_size, - &rerunning, &jcr->VolSessionId, &jcr->VolSessionTime); - if (stat != 17) { + &rerunning, &jcr->VolSessionId, &jcr->VolSessionTime, + &is_client, &sd_auth_key); + if (stat != 19) { pm_strcpy(jcr->errmsg, dir->msg); dir->fsend(BAD_job, stat, jcr->errmsg); Dmsg1(100, ">dird: %s", dir->msg); @@ -97,6 +88,10 @@ bool job_cmd(JCR *jcr) return false; } jcr->rerunning = (rerunning) ? true : false; + jcr->sd_client = is_client; + if (is_client) { + jcr->sd_auth_key = bstrdup(sd_auth_key); + } Dmsg3(100, "rerunning=%d VolSesId=%d VolSesTime=%d\n", jcr->rerunning, jcr->VolSessionId, jcr->VolSessionTime); /* @@ -113,11 +108,6 @@ bool job_cmd(JCR *jcr) Dmsg2(800, "Start JobId=%d %p\n", JobId, jcr); set_jcr_in_tsd(jcr); - /* - * If job rescheduled because previous was incomplete, - * the Resched flag is set and VolSessionId and VolSessionTime - * are given to us (same as restarted job). - */ if (!jcr->rerunning) { jcr->VolSessionId = newVolSessionId(); jcr->VolSessionTime = VolSessionTime; @@ -149,12 +139,19 @@ bool job_cmd(JCR *jcr) /* * Pass back an authorization key for the File daemon */ - bsnprintf(seed, sizeof(seed), "%p%d", jcr, JobId); - make_session_key(auth_key, seed, 1); - dir->fsend(OKjob, jcr->VolSessionId, jcr->VolSessionTime, auth_key); - Dmsg2(50, ">dird jid=%u: %s", (uint32_t)jcr->JobId, dir->msg); - jcr->sd_auth_key = bstrdup(auth_key); - memset(auth_key, 0, sizeof(auth_key)); + if (jcr->sd_client) { + bstrncpy(sd_auth_key, "xxx", 3); + } else { + bsnprintf(seed, sizeof(seed), "%p%d", jcr, JobId); + make_session_key(sd_auth_key, seed, 1); + } + dir->fsend(OKjob, jcr->VolSessionId, jcr->VolSessionTime, sd_auth_key); + Dmsg2(150, ">dird jid=%u: %s", (uint32_t)jcr->JobId, dir->msg); + /* If not client, set key, otherwise it is already set */ + if (!jcr->sd_client) { + jcr->sd_auth_key = bstrdup(sd_auth_key); + memset(sd_auth_key, 0, sizeof(sd_auth_key)); + } new_plugins(jcr); /* instantiate the plugins */ generate_daemon_event(jcr, "JobStart"); generate_plugin_event(jcr, bsdEventJobStart, (void *)"JobStart"); @@ -167,45 +164,100 @@ bool run_cmd(JCR *jcr) struct timezone tz; struct timespec timeout; int errstat = 0; + BSOCK *cl; + int fd_version = 0; + int sd_version = 0; + char job_name[500]; + int i; + int stat; Dsm_check(200); Dmsg1(200, "Run_cmd: %s\n", jcr->dir_bsock->msg); - /* If we do not need the FD, we are doing a migrate, copy, or virtual - * backup. - */ + /* If we do not need the FD, we are doing a virtual backup. */ if (jcr->no_client_used()) { - do_mac(jcr); + do_vbackup(jcr); return false; } jcr->sendJobStatus(JS_WaitFD); /* wait for FD to connect */ - gettimeofday(&tv, &tz); - timeout.tv_nsec = tv.tv_usec * 1000; - timeout.tv_sec = tv.tv_sec + me->client_wait; - - Dmsg3(50, "%s waiting %d sec for FD to contact SD key=%s\n", - jcr->Job, (int)(timeout.tv_sec-time(NULL)), jcr->sd_auth_key); - Dmsg2(800, "Wait FD for jid=%d %p\n", jcr->JobId, jcr); - - /* - * Wait for the File daemon to contact us to start the Job, - * when he does, we will be released, unless the 30 minutes - * expires. - */ - P(mutex); - while ( !jcr->authenticated && !job_canceled(jcr) ) { - errstat = pthread_cond_timedwait(&jcr->job_start_wait, &mutex, &timeout); - if (errstat == ETIMEDOUT || errstat == EINVAL || errstat == EPERM) { - break; + Dmsg2(050, "sd_calls_client=%d sd_client=%d\n", jcr->sd_calls_client, jcr->sd_client); + if (jcr->sd_calls_client) { + /* We connected to Client, so finish work */ + cl = jcr->file_bsock; + if (!cl) { + Jmsg0(jcr, M_FATAL, 0, _("Client socket not open. Could not connect to Client.\n")); + Dmsg0(050, "Client socket not open. Could not connect to Client.\n"); + return false; } - Dmsg1(800, "=== Auth cond errstat=%d\n", errstat); + /* Get response to Hello command sent earlier */ + Dmsg0(050, "Read Hello command from Client\n"); + for (i=0; i<60; i++) { + stat = cl->recv(); + if (stat <= 0) { + bmicrosleep(1, 0); + } else { + break; + } + if (stat <= 0) { + berrno be; + Jmsg1(jcr, M_FATAL, 0, _("Recv request to Client failed. ERR=%s\n"), + be.bstrerror()); + Dmsg1(050, _("Recv request to Client failed. ERR=%s\n"), be.bstrerror()); + return false; + } + } + Dmsg1(050, "Got from FD: %s\n", cl->msg); + if (sscanf(cl->msg, "Hello Bacula SD: Start Job %127s %d %d", job_name, &fd_version, &sd_version) != 3) { + Jmsg1(jcr, M_FATAL, 0, _("Bad Hello from Client: %s.\n"), cl->msg); + Dmsg1(050, _("Bad Hello from Client: %s.\n"), cl->msg); + return false; + } + unbash_spaces(job_name); + jcr->FDVersion = fd_version; + jcr->SDVersion = sd_version; + Dmsg1(050, "FDVersion=%d\n", fd_version); + + /* + * Authenticate the File daemon + */ + Dmsg0(050, "=== Authenticate FD\n"); + if (jcr->authenticated || !authenticate_filed(jcr)) { + Dmsg1(050, "Authentication failed Job %s\n", jcr->Job); + Jmsg(jcr, M_FATAL, 0, _("Unable to authenticate File daemon\n")); + } else { + jcr->authenticated = true; + } + } else if (!jcr->sd_client) { + /* We wait to receive connection from Client */ + gettimeofday(&tv, &tz); + timeout.tv_nsec = tv.tv_usec * 1000; + timeout.tv_sec = tv.tv_sec + me->client_wait; + + Dmsg3(050, "%s waiting %d sec for FD to contact SD key=%s\n", + jcr->Job, (int)(timeout.tv_sec-time(NULL)), jcr->sd_auth_key); + + Dmsg3(800, "=== Block Job=%s jid=%d %p\n", jcr->Job, jcr->JobId, jcr); + + /* + * Wait for the File daemon to contact us to start the Job, + * when he does, we will be released, unless the 30 minutes + * expires. + */ + P(mutex); + while ( !jcr->authenticated && !job_canceled(jcr) ) { + errstat = pthread_cond_timedwait(&jcr->job_start_wait, &mutex, &timeout); + if (errstat == ETIMEDOUT || errstat == EINVAL || errstat == EPERM) { + break; + } + Dmsg1(800, "=== Auth cond errstat=%d\n", errstat); + } + Dmsg4(050, "=== Auth=%d jid=%d canceled=%d errstat=%d\n", + jcr->JobId, jcr->authenticated, job_canceled(jcr), errstat); + V(mutex); + Dmsg2(800, "Auth fail or cancel for jid=%d %p\n", jcr->JobId, jcr); } - Dmsg3(50, "Auth=%d canceled=%d errstat=%d\n", jcr->authenticated, - job_canceled(jcr), errstat); - V(mutex); - Dmsg2(800, "Auth fail or cancel for jid=%d %p\n", jcr->JobId, jcr); memset(jcr->sd_auth_key, 0, strlen(jcr->sd_auth_key)); @@ -221,37 +273,35 @@ bool run_cmd(JCR *jcr) * After receiving a connection (in dircmd.c) if it is * from the File daemon, this routine is called. */ -void handle_filed_connection(BSOCK *fd, char *job_name) +void handle_filed_connection(BSOCK *fd, char *job_name, int fd_version, + int sd_version) { JCR *jcr; -/* - * With the following bmicrosleep on, running the - * SD under the debugger fails. - */ -// bmicrosleep(0, 50000); /* wait 50 millisecs */ if (!(jcr=get_jcr_by_full_name(job_name))) { Jmsg1(NULL, M_FATAL, 0, _("FD connect failed: Job name not found: %s\n"), job_name); Dmsg1(3, "**** Job \"%s\" not found.\n", job_name); - fd->close(); + fd->destroy(); return; } - - Dmsg1(50, "Found Job %s\n", job_name); + Dmsg1(100, "Found Filed Job %s\n", job_name); if (jcr->authenticated) { Jmsg2(jcr, M_FATAL, 0, _("Hey!!!! JobId %u Job %s already authenticated.\n"), (uint32_t)jcr->JobId, jcr->Job); - Dmsg2(50, "Hey!!!! JobId %u Job %s already authenticated.\n", + Dmsg2(050, "Hey!!!! JobId %u Job %s already authenticated.\n", (uint32_t)jcr->JobId, jcr->Job); - fd->close(); + fd->destroy(); free_jcr(jcr); return; } jcr->file_bsock = fd; jcr->file_bsock->set_jcr(jcr); + jcr->FDVersion = fd_version; + jcr->SDVersion = sd_version; + Dmsg2(050, "fd_version=%d sd_version=%d\n", fd_version, sd_version); /* * Authenticate the File daemon @@ -261,12 +311,16 @@ void handle_filed_connection(BSOCK *fd, char *job_name) Jmsg(jcr, M_FATAL, 0, _("Unable to authenticate File daemon\n")); } else { jcr->authenticated = true; - Dmsg2(50, "OK Authentication jid=%u Job %s\n", (uint32_t)jcr->JobId, jcr->Job); + Dmsg2(050, "OK Authentication jid=%u Job %s\n", (uint32_t)jcr->JobId, jcr->Job); } if (!jcr->authenticated) { jcr->setJobStatus(JS_ErrorTerminated); } + Dmsg3(050, "=== Auth OK, unblock Job %s jid=%d sd_ver=%d\n", job_name, jcr->JobId, sd_version); + if (sd_version > 0) { + jcr->sd_client = true; + } pthread_cond_signal(&jcr->job_start_wait); /* wake waiting job */ free_jcr(jcr); return; @@ -303,7 +357,7 @@ bool query_cmd(JCR *jcr) } if (!device->dev) { break; - } + } ok = dir_update_device(jcr, device->dev); if (ok) { ok = dir->fsend(OK_query); @@ -358,10 +412,7 @@ void stored_free_jcr(JCR *jcr) jcr->dir_bsock->signal(BNET_EOD); jcr->dir_bsock->signal(BNET_TERMINATE); } - if (jcr->file_bsock) { - jcr->file_bsock->close(); - jcr->file_bsock = NULL; - } + free_bsock(jcr->file_bsock); if (jcr->job_name) { free_pool_memory(jcr->job_name); } diff --git a/bacula/src/stored/label.c b/bacula/src/stored/label.c index c7ce4d1a00..86155f2534 100644 --- a/bacula/src/stored/label.c +++ b/bacula/src/stored/label.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2012 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * @@ -37,7 +25,10 @@ #include "stored.h" /* pull in Storage Deamon headers */ /* Forward referenced functions */ -static void create_volume_label_record(DCR *dcr, DEVICE *dev, DEV_RECORD *rec); +static void create_volume_label_record(DCR *dcr, DEVICE *dev, DEV_RECORD *rec, bool alt); +static bool sub_write_volume_label_to_block(DCR *dcr); +static bool sub_write_new_volume_label_to_dev(DCR *dcr, const char *VolName, + const char *PoolName, bool relabel, bool dvdnow); /* * Read the volume label @@ -61,6 +52,7 @@ static void create_volume_label_record(DCR *dcr, DEVICE *dev, DEV_RECORD *rec); * * The dcr block is emptied on return, and the Volume is * rewound. + * */ int read_dev_volume_label(DCR *dcr) { @@ -74,12 +66,14 @@ int read_dev_volume_label(DCR *dcr) bool want_ansi_label; bool have_ansi_label = false; + Enter(200); Dmsg4(100, "Enter read_volume_label res=%d device=%s vol=%s dev_Vol=%s\n", - dev->num_reserved(), dev->print_name(), VolName, + dev->num_reserved(), dev->print_name(), VolName, dev->VolHdr.VolumeName[0]?dev->VolHdr.VolumeName:"*NULL*"); if (!dev->is_open()) { if (!dev->open(dcr, OPEN_READ_ONLY)) { + Leave(200); return VOL_IO_ERROR; } } @@ -90,9 +84,10 @@ int read_dev_volume_label(DCR *dcr) dev->label_type = B_BACULA_LABEL; if (!dev->rewind(dcr)) { - Mmsg(jcr->errmsg, _("Couldn't rewind device %s: ERR=%s\n"), - dev->print_name(), dev->print_errmsg()); + Mmsg(jcr->errmsg, _("Couldn't rewind %s device %s: ERR=%s\n"), + dev->print_type(), dev->print_name(), dev->print_errmsg()); Dmsg1(130, "return VOL_NO_MEDIA: %s", jcr->errmsg); + Leave(200); return VOL_NO_MEDIA; } bstrncpy(dev->VolHdr.Id, "**error**", sizeof(dev->VolHdr.Id)); @@ -101,14 +96,14 @@ int read_dev_volume_label(DCR *dcr) want_ansi_label = dcr->VolCatInfo.LabelType != B_BACULA_LABEL || dcr->device->label_type != B_BACULA_LABEL; if (want_ansi_label || dev->has_cap(CAP_CHECKLABELS)) { - stat = read_ansi_ibm_label(dcr); + stat = read_ansi_ibm_label(dcr); /* If we want a label and didn't find it, return error */ if (want_ansi_label && stat != VOL_OK) { goto bail_out; } if (stat == VOL_NAME_ERROR || stat == VOL_LABEL_ERROR) { - Mmsg(jcr->errmsg, _("Wrong Volume mounted on device %s: Wanted %s have %s\n"), - dev->print_name(), VolName, dev->VolHdr.VolumeName); + Mmsg(jcr->errmsg, _("Wrong Volume mounted on %s device %s: Wanted %s have %s\n"), + dev->print_type(), dev->print_name(), VolName, dev->VolHdr.VolumeName); if (!dev->poll && jcr->label_errors++ > 100) { Jmsg(jcr, M_FATAL, 0, _("Too many tries: %s"), jcr->errmsg); } @@ -120,16 +115,16 @@ int read_dev_volume_label(DCR *dcr) have_ansi_label = true; } } - + /* Read the Bacula Volume label block */ record = new_record(); empty_block(block); Dmsg0(130, "Big if statement in read_volume_label\n"); if (!dcr->read_block_from_dev(NO_BLOCK_NUMBER_CHECK)) { - Mmsg(jcr->errmsg, _("Requested Volume \"%s\" on %s is not a Bacula " - "labeled Volume, because: ERR=%s"), NPRT(VolName), - dev->print_name(), dev->print_errmsg()); + Mmsg(jcr->errmsg, _("Requested Volume \"%s\" on %s device %s is not a Bacula " + "labeled Volume, because: ERR=%s"), NPRT(VolName), + dev->print_type(), dev->print_name(), dev->print_errmsg()); Dmsg1(130, "%s", jcr->errmsg); } else if (!read_record_from_block(dcr, record)) { Mmsg(jcr->errmsg, _("Could not read Volume label from block.\n")); @@ -152,10 +147,11 @@ int read_dev_volume_label(DCR *dcr) } if (!ok) { - if (forge_on || jcr->ignore_label_errors) { + if (jcr->ignore_label_errors) { dev->set_labeled(); /* set has Bacula label */ Jmsg(jcr, M_ERROR, 0, "%s", jcr->errmsg); empty_block(block); + Leave(100); return VOL_OK; } Dmsg0(100, "No volume label - bailing out\n"); @@ -172,8 +168,8 @@ int read_dev_volume_label(DCR *dcr) if (dev->VolHdr.VerNum != BaculaTapeVersion && dev->VolHdr.VerNum != OldCompatibleBaculaTapeVersion1 && dev->VolHdr.VerNum != OldCompatibleBaculaTapeVersion2) { - Mmsg(jcr->errmsg, _("Volume on %s has wrong Bacula version. Wanted %d got %d\n"), - dev->print_name(), BaculaTapeVersion, dev->VolHdr.VerNum); + Mmsg(jcr->errmsg, _("Volume on %s device %s has wrong Bacula version. Wanted %d got %d\n"), + dev->print_type(), dev->print_name(), BaculaTapeVersion, dev->VolHdr.VerNum); Dmsg1(130, "VOL_VERSION_ERROR: %s", jcr->errmsg); stat = VOL_VERSION_ERROR; goto bail_out; @@ -183,8 +179,8 @@ int read_dev_volume_label(DCR *dcr) * a Bacula volume label (VOL_LABEL) */ if (dev->VolHdr.LabelType != PRE_LABEL && dev->VolHdr.LabelType != VOL_LABEL) { - Mmsg(jcr->errmsg, _("Volume on %s has bad Bacula label type: %x\n"), - dev->print_name(), dev->VolHdr.LabelType); + Mmsg(jcr->errmsg, _("Volume on %s device %s has bad Bacula label type: %x\n"), + dev->print_type(), dev->print_name(), dev->VolHdr.LabelType); Dmsg1(130, "%s", jcr->errmsg); if (!dev->poll && jcr->label_errors++ > 100) { Jmsg(jcr, M_FATAL, 0, _("Too many tries: %s"), jcr->errmsg); @@ -199,8 +195,8 @@ int read_dev_volume_label(DCR *dcr) /* Compare Volume Names */ Dmsg2(130, "Compare Vol names: VolName=%s hdr=%s\n", VolName?VolName:"*", dev->VolHdr.VolumeName); if (VolName && *VolName && *VolName != '*' && strcmp(dev->VolHdr.VolumeName, VolName) != 0) { - Mmsg(jcr->errmsg, _("Wrong Volume mounted on device %s: Wanted %s have %s\n"), - dev->print_name(), VolName, dev->VolHdr.VolumeName); + Mmsg(jcr->errmsg, _("Wrong Volume mounted on %s device %s: Wanted %s have %s\n"), + dev->print_type(), dev->print_name(), VolName, dev->VolHdr.VolumeName); Dmsg1(130, "%s", jcr->errmsg); /* * Cancel Job if too many label errors @@ -214,8 +210,7 @@ int read_dev_volume_label(DCR *dcr) goto bail_out; } - - if (debug_level >= 200) { + if (chk_dbglvl(100)) { dump_volume_label(dev); } Dmsg0(130, "Leave read_volume_label() VOL_OK\n"); @@ -223,7 +218,7 @@ int read_dev_volume_label(DCR *dcr) if (!dev->has_cap(CAP_STREAM)) { dev->rewind(dcr); if (have_ansi_label) { - stat = read_ansi_ibm_label(dcr); + stat = read_ansi_ibm_label(dcr); /* If we want a label and didn't find it, return error */ if (stat != VOL_OK) { goto bail_out; @@ -233,58 +228,90 @@ int read_dev_volume_label(DCR *dcr) Dmsg1(100, "Call reserve_volume=%s\n", dev->VolHdr.VolumeName); if (reserve_volume(dcr, dev->VolHdr.VolumeName) == NULL) { - Mmsg2(jcr->errmsg, _("Could not reserve volume %s on %s\n"), - dev->VolHdr.VolumeName, dev->print_name()); + if (!jcr->errmsg[0]) { + Mmsg3(jcr->errmsg, _("Could not reserve volume %s on %s device %s\n"), + dev->VolHdr.VolumeName, dev->print_type(), dev->print_name()); + } Dmsg2(150, "Could not reserve volume %s on %s\n", dev->VolHdr.VolumeName, dev->print_name()); stat = VOL_NAME_ERROR; goto bail_out; } empty_block(block); + + Leave(200); return VOL_OK; bail_out: empty_block(block); dev->rewind(dcr); Dmsg1(150, "return %d\n", stat); + Leave(200); return stat; } + /* - * Put a volume label into the block + * Create and put a volume label into the block * * Returns: false on failure * true on success + * */ static bool write_volume_label_to_block(DCR *dcr) { - DEVICE *dev = dcr->dev; - DEV_BLOCK *block = dcr->block; - DEV_RECORD rec; - JCR *jcr = dcr->jcr; + bool ok; + Enter(100); Dmsg0(130, "write Label in write_volume_label_to_block()\n"); + Dmsg0(100, "Call sub_write_vol_label\n"); + ok = sub_write_volume_label_to_block(dcr); + if (!ok) { + goto get_out; + } + +get_out: + Leave(100); + return ok; +} + +static bool sub_write_volume_label_to_block(DCR *dcr) +{ + DEVICE *dev; + DEV_BLOCK *block; + DEV_RECORD rec; + JCR *jcr = dcr->jcr; + bool ok = true; + + Enter(100); + dev = dcr->dev; + block = dcr->block; memset(&rec, 0, sizeof(rec)); rec.data = get_memory(SER_LENGTH_Volume_Label); + memset(rec.data, 0, SER_LENGTH_Volume_Label); empty_block(block); /* Volume label always at beginning */ - create_volume_label_record(dcr, dev, &rec); + create_volume_label_record(dcr, dcr->dev, &rec, false); block->BlockNumber = 0; + Dmsg0(100, "write_record_to_block\n"); if (!write_record_to_block(dcr, &rec)) { free_pool_memory(rec.data); - Jmsg1(jcr, M_FATAL, 0, _("Cannot write Volume label to block for device %s\n"), - dev->print_name()); - return false; + Jmsg2(jcr, M_FATAL, 0, _("Cannot write Volume label to block for %s device %s\n"), + dev->print_type(), dev->print_name()); + ok = false; + goto get_out; } else { - Dmsg2(130, "Wrote label of %d bytes to block. Vol=%s\n", rec.data_len, - dcr->VolumeName); + Dmsg3(100, "Wrote fd=%d label of %d bytes to block. Vol=%s\n", + dev->fd(), rec.data_len, dcr->VolumeName); } free_pool_memory(rec.data); - return true; -} +get_out: + Leave(100); + return ok; +} /* * Write a Volume Label @@ -293,13 +320,17 @@ static bool write_volume_label_to_block(DCR *dcr) * after the label will be destroyed, * in fact, we write the label 5 times !!!! * - * This routine should be used only when labeling a blank tape. + * This routine should be used only when labeling a blank tape or + * when recylcing a volume. + * */ -bool write_new_volume_label_to_dev(DCR *dcr, const char *VolName, +bool write_new_volume_label_to_dev(DCR *dcr, const char *VolName, const char *PoolName, bool relabel, bool dvdnow) { - DEVICE *dev = dcr->dev; - DEV_BLOCK *block = dcr->block; + DEVICE *dev; + + Enter(100); + dev = dcr->dev; Dmsg0(150, "write_volume_label()\n"); if (*VolName == 0) { @@ -321,93 +352,118 @@ bool write_new_volume_label_to_dev(DCR *dcr, const char *VolName, /* Set the new filename for open, ... */ dev->setVolCatName(VolName); dcr->setVolCatName(VolName); - Dmsg1(150, "New VolName=%s\n", VolName); + dev->clearVolCatBytes(); + + Dmsg1(100, "New VolName=%s\n", VolName); if (!dev->open(dcr, OPEN_READ_WRITE)) { /* If device is not tape, attempt to create it */ if (dev->is_tape() || !dev->open(dcr, CREATE_READ_WRITE)) { - Jmsg3(dcr->jcr, M_WARNING, 0, _("Open device %s Volume \"%s\" failed: ERR=%s\n"), - dev->print_name(), dcr->VolumeName, dev->bstrerror()); + Jmsg4(dcr->jcr, M_WARNING, 0, _("Open %s device %s Volume \"%s\" failed: ERR=%s\n"), + dev->print_type(), dev->print_name(), dcr->VolumeName, dev->bstrerror()); goto bail_out; } } Dmsg1(150, "Label type=%d\n", dev->label_type); - for ( ;; ) { - empty_block(block); - if (!dev->rewind(dcr)) { - Dmsg2(130, "Bad status on %s from rewind: ERR=%s\n", dev->print_name(), dev->print_errmsg()); - if (!forge_on) { - goto bail_out; - } + if (!sub_write_new_volume_label_to_dev(dcr, VolName, PoolName, relabel, dvdnow)) { + goto bail_out; + } + if (dev->weof(1)) { + dev->set_labeled(); + write_ansi_ibm_labels(dcr, ANSI_EOF_LABEL, dev->VolHdr.VolumeName); + } + + if (chk_dbglvl(100)) { + dump_volume_label(dev); + } + Dmsg0(50, "Call reserve_volume\n"); + /**** ***FIXME*** if dev changes, dcr must be updated */ + if (reserve_volume(dcr, VolName) == NULL) { + if (!dcr->jcr->errmsg[0]) { + Mmsg3(dcr->jcr->errmsg, _("Could not reserve volume %s on %s device %s\n"), + dev->VolHdr.VolumeName, dev->print_type(), dev->print_name()); } + Dmsg1(50, "%s", dcr->jcr->errmsg); + goto bail_out; + } + dev = dcr->dev; /* may have changed in reserve_volume */ + dev->clear_append(); /* remove append since this is PRE_LABEL */ + Leave(100); + return true; - /* Temporarily mark in append state to enable writing */ - dev->set_append(); +bail_out: + volume_unused(dcr); + dcr->dev->clear_append(); /* remove append since this is PRE_LABEL */ + Leave(100); + return false; +} - /* Create PRE_LABEL or VOL_LABEL if DVD */ - create_volume_label(dev, VolName, PoolName, dvdnow); +static bool sub_write_new_volume_label_to_dev(DCR *dcr, const char *VolName, + const char *PoolName, bool relabel, bool dvdnow) +{ + DEVICE *dev; + DEV_BLOCK *block; - /* - * If we have already detected an ANSI label, re-read it - * to skip past it. Otherwise, we write a new one if - * so requested. - */ - if (dev->label_type != B_BACULA_LABEL) { - if (read_ansi_ibm_label(dcr) != VOL_OK) { - dev->rewind(dcr); - goto bail_out; - } - } else if (!write_ansi_ibm_labels(dcr, ANSI_VOL_LABEL, VolName)) { - goto bail_out; - } + Enter(100); + dev = dcr->dev; + block = dcr->block; - create_volume_label_record(dcr, dev, dcr->rec); - dcr->rec->Stream = 0; - dcr->rec->maskedStream = 0; + empty_block(block); + if (!dev->rewind(dcr)) { + Dmsg2(130, "Bad status on %s from rewind: ERR=%s\n", dev->print_name(), dev->print_errmsg()); + goto bail_out; + } - if (!write_record_to_block(dcr, dcr->rec)) { - Dmsg2(130, "Bad Label write on %s: ERR=%s\n", dev->print_name(), dev->print_errmsg()); - goto bail_out; - } else { - Dmsg2(130, "Wrote label of %d bytes to %s\n", dcr->rec->data_len, dev->print_name()); - } + /* Temporarily mark in append state to enable writing */ + dev->set_append(); - Dmsg0(130, "Call write_block_to_dev()\n"); - if (!dcr->write_block_to_dev()) { - Dmsg2(130, "Bad Label write on %s: ERR=%s\n", dev->print_name(), dev->print_errmsg()); + /* Create PRE_LABEL or VOL_LABEL if DVD */ + create_volume_header(dev, VolName, PoolName, dvdnow); + + /* + * If we have already detected an ANSI label, re-read it + * to skip past it. Otherwise, we write a new one if + * so requested. + */ + if (dev->label_type != B_BACULA_LABEL) { + if (read_ansi_ibm_label(dcr) != VOL_OK) { + dev->rewind(dcr); goto bail_out; } - break; + } else if (!write_ansi_ibm_labels(dcr, ANSI_VOL_LABEL, VolName)) { + goto bail_out; } - dev = dcr->dev; + create_volume_label_record(dcr, dev, dcr->rec, false); + dcr->rec->Stream = 0; + dcr->rec->maskedStream = 0; - Dmsg0(130, " Wrote block to device\n"); - - if (dev->weof(1)) { - dev->set_labeled(); - write_ansi_ibm_labels(dcr, ANSI_EOF_LABEL, dev->VolHdr.VolumeName); - } + Dmsg1(100, "write_record_to_block FI=%d\n", dcr->rec->FileIndex); - if (debug_level >= 20) { - dump_volume_label(dev); + if (!write_record_to_block(dcr, dcr->rec)) { + Dmsg2(40, "Bad Label write on %s: ERR=%s\n", dev->print_name(), dev->print_errmsg()); + goto bail_out; + } else { + Dmsg2(100, "Wrote label=%d bytes block: %s\n", dcr->rec->data_len, dev->print_name()); } - Dmsg0(100, "Call reserve_volume\n"); - if (reserve_volume(dcr, VolName) == NULL) { - Mmsg2(dcr->jcr->errmsg, _("Could not reserve volume %s on %s\n"), - dev->VolHdr.VolumeName, dev->print_name()); - Dmsg1(100, "%s", dcr->jcr->errmsg); + Dmsg2(100, "New label VolCatBytes=%lld VolCatStatus=%s\n", + dev->VolCatInfo.VolCatBytes, dev->VolCatInfo.VolCatStatus); + + Dmsg3(130, "Call write_block_to_dev() fd=%d block=%p Addr=%lld\n", + dcr->dev->fd(), dcr->block, block->dev->lseek(dcr, 0, SEEK_CUR)); + Dmsg0(100, "write_record_to_dev\n"); + /* Write block to device */ + if (!dcr->write_block_to_dev()) { + Dmsg2(40, "Bad Label write on %s: ERR=%s\n", dev->print_name(), dev->print_errmsg()); goto bail_out; } - dev = dcr->dev; /* may have changed in reserve_volume */ - - dev->clear_append(); /* remove append since this is PRE_LABEL */ + Dmsg2(100, "New label VolCatBytes=%lld VolCatStatus=%s\n", + dev->VolCatInfo.VolCatBytes, dev->VolCatInfo.VolCatStatus); + Leave(100); return true; bail_out: - volume_unused(dcr); - dev->clear_volhdr(); - dev->clear_append(); /* remove append since this is PRE_LABEL */ + Leave(100); return false; } @@ -415,6 +471,8 @@ bail_out: * Write a volume label. This is ONLY called if we have a valid Bacula * label of type PRE_LABEL or we are recyling an existing Volume. * + * By calling write_volume_label_to_block + * * Returns: true if OK * false if unable to write it */ @@ -422,71 +480,87 @@ bool DCR::rewrite_volume_label(bool recycle) { DCR *dcr = this; + Enter(100); + ASSERT(dcr->VolumeName[0]); if (!dev->open(dcr, OPEN_READ_WRITE)) { - Jmsg3(jcr, M_WARNING, 0, _("Open device %s Volume \"%s\" failed: ERR=%s\n"), - dev->print_name(), dcr->VolumeName, dev->bstrerror()); + Jmsg4(jcr, M_WARNING, 0, _("Open %s device %s Volume \"%s\" failed: ERR=%s\n"), + dev->print_type(), dev->print_name(), dcr->VolumeName, dev->bstrerror()); + Leave(100); return false; } Dmsg2(190, "set append found freshly labeled volume. fd=%d dev=%x\n", dev->fd(), dev); dev->VolHdr.LabelType = VOL_LABEL; /* set Volume label */ dev->set_append(); - if (!write_volume_label_to_block(dcr)) { - Dmsg0(200, "Error from write volume label.\n"); - return false; - } - Dmsg1(150, "wrote vol label to block. Vol=%s\n", dcr->VolumeName); + Dmsg0(100, "Rewrite_volume_label set volcatbytes=0\n"); + dev->clearVolCatBytes(); + dev->setVolCatStatus("Append"); /* set append status */ - dev->setVolCatInfo(false); - dev->VolCatInfo.VolCatBytes = 0; /* reset byte count */ - - /* - * If we are not dealing with a streaming device, - * write the block now to ensure we have write permission. - * It is better to find out now rather than later. - * We do not write the block now if this is an ANSI label. This - * avoids re-writing the ANSI label, which we do not want to do. - */ if (!dev->has_cap(CAP_STREAM)) { if (!dev->rewind(dcr)) { - Jmsg2(jcr, M_FATAL, 0, _("Rewind error on device %s: ERR=%s\n"), - dev->print_name(), dev->print_errmsg()); + Jmsg3(jcr, M_FATAL, 0, _("Rewind error on %s device %s: ERR=%s\n"), + dev->print_type(), dev->print_name(), dev->print_errmsg()); + Leave(100); return false; } if (recycle) { Dmsg1(150, "Doing recycle. Vol=%s\n", dcr->VolumeName); if (!dev->truncate(dcr)) { - Jmsg2(jcr, M_FATAL, 0, _("Truncate error on device %s: ERR=%s\n"), - dev->print_name(), dev->print_errmsg()); + Jmsg3(jcr, M_FATAL, 0, _("Truncate error on %s device %s: ERR=%s\n"), + dev->print_type(), dev->print_name(), dev->print_errmsg()); + Leave(100); return false; } if (!dev->open(dcr, OPEN_READ_WRITE)) { - Jmsg2(jcr, M_FATAL, 0, - _("Failed to re-open DVD after truncate on device %s: ERR=%s\n"), - dev->print_name(), dev->print_errmsg()); + Jmsg3(jcr, M_FATAL, 0, + _("Failed to re-open DVD after truncate on %s device %s: ERR=%s\n"), + dev->print_type(), dev->print_name(), dev->print_errmsg()); + Leave(100); return false; } } + } + + if (!write_volume_label_to_block(dcr)) { + Dmsg0(150, "Error from write volume label.\n"); + Leave(100); + return false; + } + Dmsg1(100, "wrote vol label to block. Vol=%s\n", dcr->VolumeName); + + ASSERT(dcr->VolumeName[0]); + dev->setVolCatInfo(false); + /* + * If we are not dealing with a streaming device, + * write the block now to ensure we have write permission. + * It is better to find out now rather than later. + * We do not write the block now if this is an ANSI label. This + * avoids re-writing the ANSI label, which we do not want to do. + */ + if (!dev->has_cap(CAP_STREAM)) { /* * If we have already detected an ANSI label, re-read it - * to skip past it. Otherwise, we write a new one if - * so requested. + * to skip past it. Otherwise, we write a new one if + * so requested. */ if (dev->label_type != B_BACULA_LABEL) { if (read_ansi_ibm_label(dcr) != VOL_OK) { dev->rewind(dcr); + Leave(100); return false; } } else if (!write_ansi_ibm_labels(dcr, ANSI_VOL_LABEL, dev->VolHdr.VolumeName)) { + Leave(100); return false; } /* Attempt write to check write permission */ Dmsg1(200, "Attempt to write to device fd=%d.\n", dev->fd()); if (!dcr->write_block_to_dev()) { - Jmsg2(jcr, M_ERROR, 0, _("Unable to write device %s: ERR=%s\n"), - dev->print_name(), dev->print_errmsg()); + Jmsg3(jcr, M_ERROR, 0, _("Unable to write %s device %s: ERR=%s\n"), + dev->print_type(), dev->print_name(), dev->print_errmsg()); Dmsg0(200, "===ERROR write block to dev\n"); + Leave(100); return false; } } @@ -507,25 +581,28 @@ bool DCR::rewrite_volume_label(bool recycle) dev->VolCatInfo.VolCatWrites = 1; dev->VolCatInfo.VolCatReads = 1; } - Dmsg1(150, "dir_update_vol_info. Set Append vol=%s\n", dcr->VolumeName); + Dmsg1(100, "dir_update_vol_info. Set Append vol=%s\n", dcr->VolumeName); dev->VolCatInfo.VolFirstWritten = time(NULL); - bstrncpy(dev->VolCatInfo.VolCatStatus, "Append", sizeof(dev->VolCatInfo.VolCatStatus)); + dev->setVolCatStatus("Append"); + ASSERT(dcr->VolumeName[0]); dev->setVolCatName(dcr->VolumeName); if (!dir_update_volume_info(dcr, true, true)) { /* indicate doing relabel */ + Leave(100); return false; } if (recycle) { - Jmsg(jcr, M_INFO, 0, _("Recycled volume \"%s\" on device %s, all previous data lost.\n"), - dcr->VolumeName, dev->print_name()); + Jmsg(jcr, M_INFO, 0, _("Recycled volume \"%s\" on %s device %s, all previous data lost.\n"), + dcr->VolumeName, dev->print_type(), dev->print_name()); } else { - Jmsg(jcr, M_INFO, 0, _("Wrote label to prelabeled Volume \"%s\" on device %s\n"), - dcr->VolumeName, dev->print_name()); + Jmsg(jcr, M_INFO, 0, _("Wrote label to prelabeled Volume \"%s\" on %s device %s\n"), + dcr->VolumeName, dev->print_type(), dev->print_name()); } /* * End writing real Volume label (from pre-labeled tape), or recycling * the volume. */ - Dmsg1(150, "OK from rewrite vol label. Vol=%s\n", dcr->VolumeName); + Dmsg1(100, "OK from rewrite vol label. Vol=%s\n", dcr->VolumeName); + Leave(100); return true; } @@ -536,7 +613,8 @@ bool DCR::rewrite_volume_label(bool recycle) * Assumes that the dev->VolHdr structure is properly * initialized. */ -static void create_volume_label_record(DCR *dcr, DEVICE *dev, DEV_RECORD *rec) +static void create_volume_label_record(DCR *dcr, DEVICE *dev, + DEV_RECORD *rec, bool alt) { ser_declare; struct date_time dt; @@ -545,7 +623,9 @@ static void create_volume_label_record(DCR *dcr, DEVICE *dev, DEV_RECORD *rec) /* Serialize the label into the device record. */ + Enter(100); rec->data = check_pool_memory_size(rec->data, SER_LENGTH_Volume_Label); + memset(rec->data, 0, SER_LENGTH_Volume_Label); ser_begin(rec->data, SER_LENGTH_Volume_Label); ser_string(dev->VolHdr.Id); @@ -578,34 +658,36 @@ static void create_volume_label_record(DCR *dcr, DEVICE *dev, DEV_RECORD *rec) ser_string(dev->VolHdr.LabelProg); ser_string(dev->VolHdr.ProgVersion); ser_string(dev->VolHdr.ProgDate); - + ser_end(rec->data, SER_LENGTH_Volume_Label); bstrncpy(dcr->VolumeName, dev->VolHdr.VolumeName, sizeof(dcr->VolumeName)); + ASSERT(dcr->VolumeName[0]); rec->data_len = ser_length(rec->data); rec->FileIndex = dev->VolHdr.LabelType; + Dmsg1(100, "LabelType=%d\n", dev->VolHdr.LabelType); rec->VolSessionId = jcr->VolSessionId; rec->VolSessionTime = jcr->VolSessionTime; rec->Stream = jcr->NumWriteVolumes; rec->maskedStream = jcr->NumWriteVolumes; - Dmsg2(150, "Created Vol label rec: FI=%s len=%d\n", FI_to_ascii(buf, rec->FileIndex), + Dmsg2(100, "Created Vol label rec: FI=%s len=%d\n", FI_to_ascii(buf, rec->FileIndex), rec->data_len); + Dmsg2(100, "reclen=%d recdata=%s\n", rec->data_len, rec->data); + Leave(100); } /* - * Create a volume label in memory + * Create a volume header in memory */ -void create_volume_label(DEVICE *dev, const char *VolName, +void create_volume_header(DEVICE *dev, const char *VolName, const char *PoolName, bool dvdnow) { DEVRES *device = (DEVRES *)dev->device; - Dmsg0(130, "Start create_volume_label()\n"); + Dmsg0(130, "Start create_volume_header()\n"); ASSERT(dev != NULL); - dev->clear_volhdr(); /* clear any old volume info */ - bstrncpy(dev->VolHdr.Id, BaculaId, sizeof(dev->VolHdr.Id)); dev->VolHdr.VerNum = BaculaTapeVersion; if (dev->is_dvd() && dvdnow) { @@ -628,10 +710,10 @@ void create_volume_label(DEVICE *dev, const char *VolName, dev->VolHdr.HostName[0] = 0; } bstrncpy(dev->VolHdr.LabelProg, my_name, sizeof(dev->VolHdr.LabelProg)); - sprintf(dev->VolHdr.ProgVersion, "Ver. %s %s", VERSION, BDATE); - sprintf(dev->VolHdr.ProgDate, "Build %s %s", __DATE__, __TIME__); + sprintf(dev->VolHdr.ProgVersion, "Ver. %s %s ", VERSION, BDATE); + sprintf(dev->VolHdr.ProgDate, "Build %s %s ", __DATE__, __TIME__); dev->set_labeled(); /* set has Bacula label */ - if (debug_level >= 90) { + if (chk_dbglvl(100)) { dump_volume_label(dev); } } @@ -645,6 +727,7 @@ void create_session_label(DCR *dcr, DEV_RECORD *rec, int label) JCR *jcr = dcr->jcr; ser_declare; + Enter(100); rec->VolSessionId = jcr->VolSessionId; rec->VolSessionTime = jcr->VolSessionTime; rec->Stream = jcr->JobId; @@ -688,6 +771,7 @@ void create_session_label(DCR *dcr, DEV_RECORD *rec, int label) } ser_end(rec->data, SER_LENGTH_Session_Label); rec->data_len = ser_length(rec->data); + Leave(100); } /* Write session label @@ -702,6 +786,7 @@ bool write_session_label(DCR *dcr, int label) DEV_BLOCK *block = dcr->block; char buf1[100], buf2[100]; + Enter(100); rec = new_record(); Dmsg1(130, "session_label record=%x\n", rec); switch (label) { @@ -718,7 +803,7 @@ bool write_session_label(DCR *dcr, int label) } break; default: - Jmsg1(jcr, M_ABORT, 0, _("Bad Volume session label = %d\n"), label); + Jmsg1(jcr, M_ABORT, 0, _("Bad Volume session label request=%d\n"), label); break; } create_session_label(dcr, rec, label); @@ -736,11 +821,18 @@ bool write_session_label(DCR *dcr, int label) if (!dcr->write_block_to_device()) { Dmsg0(130, "Got session label write_block_to_dev error.\n"); free_record(rec); + Leave(100); return false; } } - if (!write_record_to_block(dcr, rec)) { + /* + * We use write_record() because it handles the case that + * the maximum user size has been reached. + */ + if (!dcr->write_record(rec)) { + Dmsg0(150, "Bad return from write_record\n"); free_record(rec); + Leave(100); return false; } @@ -753,6 +845,7 @@ bool write_session_label(DCR *dcr, int label) free_record(rec); Dmsg2(150, "Leave write_session_label Block=%ud File=%ud\n", dev->get_block_num(), dev->get_file()); + Leave(100); return true; } @@ -772,12 +865,14 @@ bool unser_volume_label(DEVICE *dev, DEV_RECORD *rec) ser_declare; char buf1[100], buf2[100]; + Enter(100); if (rec->FileIndex != VOL_LABEL && rec->FileIndex != PRE_LABEL) { Mmsg3(dev->errmsg, _("Expecting Volume Label, got FI=%s Stream=%s len=%d\n"), FI_to_ascii(buf1, rec->FileIndex), stream_to_ascii(buf2, rec->Stream, rec->FileIndex), rec->data_len); if (!forge_on) { + Leave(100); return false; } } @@ -787,7 +882,9 @@ bool unser_volume_label(DEVICE *dev, DEV_RECORD *rec) /* Unserialize the record into the Volume Header */ + Dmsg2(100, "reclen=%d recdata=%s\n", rec->data_len, rec->data); rec->data = check_pool_memory_size(rec->data, SER_LENGTH_Volume_Label); + Dmsg2(100, "reclen=%d recdata=%s\n", rec->data_len, rec->data); ser_begin(rec->data, SER_LENGTH_Volume_Label); unser_string(dev->VolHdr.Id); unser_uint32(dev->VolHdr.VerNum); @@ -815,9 +912,10 @@ bool unser_volume_label(DEVICE *dev, DEV_RECORD *rec) ser_end(rec->data, SER_LENGTH_Volume_Label); Dmsg0(190, "unser_vol_label\n"); - if (debug_level >= 190) { + if (chk_dbglvl(100)) { dump_volume_label(dev); } + Leave(100); return true; } @@ -826,6 +924,7 @@ bool unser_session_label(SESSION_LABEL *label, DEV_RECORD *rec) { ser_declare; + Enter(100); rec->data = check_pool_memory_size(rec->data, SER_LENGTH_Session_Label); unser_begin(rec->data, SER_LENGTH_Session_Label); unser_string(label->Id); @@ -866,12 +965,13 @@ bool unser_session_label(SESSION_LABEL *label, DEV_RECORD *rec) label->JobStatus = JS_Terminated; /* kludge */ } } + Leave(100); return true; } void dump_volume_label(DEVICE *dev) { - int dbl = debug_level; + int64_t dbl = debug_level; uint32_t File; const char *LabelType; char buf[30]; @@ -943,7 +1043,7 @@ bail_out: static void dump_session_label(DEV_RECORD *rec, const char *type) { - int dbl; + int64_t dbl; struct date_time dt; struct tm tm; SESSION_LABEL label; @@ -1010,7 +1110,7 @@ static void dump_session_label(DEV_RECORD *rec, const char *type) void dump_label_record(DEVICE *dev, DEV_RECORD *rec, int verbose) { const char *type; - int dbl; + int64_t dbl; if (rec->FileIndex == 0 && rec->VolSessionId == 0 && rec->VolSessionTime == 0) { return; @@ -1055,15 +1155,15 @@ void dump_label_record(DEVICE *dev, DEV_RECORD *rec, int verbose) break; case EOM_LABEL: Pmsg7(-1, _("%s Record: File:blk=%u:%u SessId=%d SessTime=%d JobId=%d DataLen=%d\n"), - type, dev->file, dev->block_num, rec->VolSessionId, + type, dev->file, dev->block_num, rec->VolSessionId, rec->VolSessionTime, rec->Stream, rec->data_len); break; case EOT_LABEL: - Pmsg0(-1, _("End of physical tape.\n")); + Pmsg0(-1, _("Bacula \"End of Tape\" label found.\n")); break; default: Pmsg7(-1, _("%s Record: File:blk=%u:%u SessId=%d SessTime=%d JobId=%d DataLen=%d\n"), - type, dev->file, dev->block_num, rec->VolSessionId, + type, dev->file, dev->block_num, rec->VolSessionId, rec->VolSessionTime, rec->Stream, rec->data_len); break; } @@ -1096,7 +1196,7 @@ void dump_label_record(DEVICE *dev, DEV_RECORD *rec, int verbose) case VOL_LABEL: default: Pmsg7(-1, _("%s Record: File:blk=%u:%u SessId=%d SessTime=%d JobId=%d DataLen=%d\n"), - type, dev->file, dev->block_num, rec->VolSessionId, rec->VolSessionTime, + type, dev->file, dev->block_num, rec->VolSessionId, rec->VolSessionTime, rec->Stream, rec->data_len); break; case EOT_LABEL: diff --git a/bacula/src/stored/lock.c b/bacula/src/stored/lock.c index 73d1a669df..f0459e912e 100644 --- a/bacula/src/stored/lock.c +++ b/bacula/src/stored/lock.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2012 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Collection of Bacula Storage daemon locking software @@ -36,7 +24,7 @@ #include "stored.h" /* pull in Storage Deamon headers */ #ifdef SD_DEBUG_LOCK -const int dbglvl = 0; +const int dbglvl = 300; #else const int dbglvl = 500; #endif @@ -53,7 +41,7 @@ const int dbglvl = 500; called the device is unlocked. * 2. Lock() simple mutex that locks the device structure. A Lock * can be acquired while a device is blocked if it is not - * locked. + * locked. * 3. rLock(locked) "recursive" Lock, when means that a Lock (mutex) * will be acquired on the device if it is not blocked * by some other thread. If the device was blocked by @@ -68,18 +56,18 @@ const int dbglvl = 500; * i.e. it will wait until the device is not blocked. * A block is normally set during long operations like writing to * the device. - * If you are writing the device, you will normally block and + * If you are writing the device, you will normally block and * lock it. * A lock cannot be violated. No other thread can touch the - * device while a lock is set. + * device while a lock is set. * When a block is set, every thread accept the thread that set * the block will block if rLock is called. * A device can be blocked for multiple reasons, labeling, writing, * acquiring (opening) the device, waiting for the operator, unmounted, * ... - * Under certain conditions the block that is set on a device can be + * Under certain conditions the block that is set on a device can be * stolen and the device can be used by another thread. For example, - * a device is blocked because it is waiting for the operator to + * a device is blocked because it is waiting for the operator to * mount a tape. The operator can then unmount the device, and label * a tape, re-mount it, give back the block, and the job will continue. * @@ -95,14 +83,14 @@ const int dbglvl = 500; * Lock() * if blocked and not same thread that locked * pthread_cond_wait - * leaves device locked + * leaves device locked * * DEVICE::rUnlock() unlocks but does not unblock * same as Unlock(); * - * DEVICE::dblock(why) does + * DEVICE::dblock(why) does * rLock(); (recursive device lock) - * block_device(this, why) + * block_device(this, why) * rUnlock() * * DEVICE::dunblock does @@ -110,7 +98,7 @@ const int dbglvl = 500; * unblock_device() * Unlock() * - * block_device() does (must be locked and not blocked at entry) + * block_device() does (must be locked and not blocked at entry) * set blocked status * set our pid * @@ -155,160 +143,167 @@ void DEVICE::dunblock(bool locked) } -#ifdef SD_DEBUG_LOCK /* - * Debug DCR locks N.B. + * Debug DEVICE locks N.B. * */ -void DCR::dbg_mLock(const char *file, int line, bool locked) -{ - real_P(r_mutex); - if (is_dev_locked()) { - real_V(r_mutex); - return; - } - Dmsg3(sd_dbglvl, "mLock %d from %s:%d\n", locked, file, line); - dev->dbg_rLock(file,line,locked); - inc_dev_lock(); - real_V(r_mutex); - return; -} -void DCR::dbg_mUnlock(const char *file, int line) -{ - Dmsg2(sd_dbglvl, "mUnlock from %s:%d\n", file, line); - real_P(r_mutex); - if (!is_dev_locked()) { - real_P(r_mutex); - ASSERT2(0, "Call on dcr mUnlock when not locked"); - return; - } - dec_dev_lock(); - /* When the count goes to zero, unlock it */ - if (!is_dev_locked()) { - dev->dbg_rUnlock(file,line); - } - real_V(r_mutex); - return; -} +#ifdef DEV_DEBUG_LOCK -/* - * Debug DEVICE locks N.B. - * - */ void DEVICE::dbg_Lock(const char *file, int line) { - Dmsg3(sd_dbglvl, "Lock from %s:%d precnt=%d\n", file, line, m_count); - /* Note, this *really* should be protected by a mutex, but - * since it is only debug code we don't worry too much. - */ - if (m_count > 0 && pthread_equal(m_pid, pthread_self())) { - Dmsg4(sd_dbglvl, "Possible DEADLOCK!! lock held by JobId=%u from %s:%d m_count=%d\n", - get_jobid_from_tid(m_pid), - file, line, m_count); - } + Dmsg3(sd_dbglvl, "Lock from %s:%d precnt=%d\n", file, line, m_count); bthread_mutex_lock_p(&m_mutex, file, line); m_pid = pthread_self(); - m_count++; + m_count++; } void DEVICE::dbg_Unlock(const char *file, int line) { - m_count--; - Dmsg3(sd_dbglvl, "Unlock from %s:%d postcnt=%d\n", file, line, m_count); + m_count--; + Dmsg3(sd_dbglvl, "Unlock from %s:%d postcnt=%d\n", file, line, m_count); bthread_mutex_unlock_p(&m_mutex, file, line); } void DEVICE::dbg_rUnlock(const char *file, int line) { - Dmsg2(sd_dbglvl, "rUnlock from %s:%d\n", file, line); + Dmsg2(sd_dbglvl, "rUnlock from %s:%d\n", file, line); dbg_Unlock(file, line); } -void DEVICE::dbg_Lock_acquire(const char *file, int line) -{ - Dmsg2(sd_dbglvl, "Lock_acquire from %s:%d\n", file, line); - bthread_mutex_lock_p(&acquire_mutex, file, line); -} +#else -void DEVICE::dbg_Unlock_acquire(const char *file, int line) +/* + * DEVICE locks N.B. + * + */ + + +void DEVICE::rUnlock() { - Dmsg2(sd_dbglvl, "Unlock_acquire from %s:%d\n", file, line); - bthread_mutex_unlock_p(&acquire_mutex, file, line); + Unlock(); } -void DEVICE::dbg_Lock_read_acquire(const char *file, int line) +void DEVICE::Lock() { - Dmsg2(sd_dbglvl, "Lock_read_acquire from %s:%d\n", file, line); - bthread_mutex_lock_p(&read_acquire_mutex, file, line); + P(m_mutex); } -void DEVICE::dbg_Unlock_read_acquire(const char *file, int line) +void DEVICE::Unlock() { - Dmsg2(sd_dbglvl, "Unlock_read_acquire from %s:%d\n", file, line); - bthread_mutex_unlock_p(&read_acquire_mutex, file, line); + V(m_mutex); } - -#else +#endif /* DEV_DEBUG_LOCK */ /* - * DCR locks N.B. + * This is a recursive lock that checks if the device is blocked. * + * When blocked is set, all threads EXCEPT thread with id no_wait_id + * must wait. The no_wait_id thread is out obtaining a new volume + * and preparing the label. */ -/* Multiple rLock implementation */ -void DCR::mLock(bool locked) +#ifdef DEV_DEBUG_LOCK +void DEVICE::dbg_rLock(const char *file, int line, bool locked) { - P(r_mutex); - if (is_dev_locked()) { - V(r_mutex); - return; + Dmsg3(sd_dbglvl, "rLock blked=%s from %s:%d\n", print_blocked(), + file, line); + + if (!locked) { + /* lockmgr version of P(m_mutex) */ + bthread_mutex_lock_p(&m_mutex, file, line); + m_count++; + } + + if (blocked() && !pthread_equal(no_wait_id, pthread_self())) { + num_waiting++; /* indicate that I am waiting */ + while (blocked()) { + int stat; +#ifndef HAVE_WIN32 + /* thread id on Win32 may be a struct */ + Dmsg3(sd_dbglvl, "rLock blked=%s no_wait=%p me=%p\n", print_blocked(), + no_wait_id, pthread_self()); +#endif + if ((stat = bthread_cond_wait_p(&this->wait, &m_mutex, file, line)) != 0) { + berrno be; + this->dbg_Unlock(file, line); + Emsg1(M_ABORT, 0, _("pthread_cond_wait failure. ERR=%s\n"), + be.bstrerror(stat)); + } + } + num_waiting--; /* no longer waiting */ } - dev->rLock(locked); - inc_dev_lock(); - V(r_mutex); - return; } +#else /* DEV_DEBUG_LOCK */ -/* Multiple rUnlock implementation */ -void DCR::mUnlock() +void DEVICE::rLock(bool locked) { - P(r_mutex); - if (!is_dev_locked()) { - V(r_mutex); - ASSERT2(0, "Call on dcr mUnlock when not locked"); - return; + if (!locked) { + Lock(); + m_count++; } - dec_dev_lock(); - /* When the count goes to zero, unlock it */ - if (!is_dev_locked()) { - dev->rUnlock(); + + if (blocked() && !pthread_equal(no_wait_id, pthread_self())) { + num_waiting++; /* indicate that I am waiting */ + while (blocked()) { + int stat; +#ifndef HAVE_WIN32 + /* thread id on Win32 may be a struct */ + Dmsg3(sd_dbglvl, "rLock blked=%s no_wait=%p me=%p\n", print_blocked(), + no_wait_id, pthread_self()); +#endif + if ((stat = pthread_cond_wait(&this->wait, &m_mutex)) != 0) { + berrno be; + this->Unlock(); + Emsg1(M_ABORT, 0, _("pthread_cond_wait failure. ERR=%s\n"), + be.bstrerror(stat)); + } + } + num_waiting--; /* no longer waiting */ } - V(r_mutex); - return; } -/* - * DEVICE locks N.B. - * - */ +#endif /* DEV_DEBUG_LOCK */ -void DEVICE::rUnlock() +#ifdef SD_DEBUG_LOCK + +void DEVICE::dbg_Lock_acquire(const char *file, int line) { - Unlock(); + Dmsg2(sd_dbglvl, "Lock_acquire from %s:%d\n", file, line); + bthread_mutex_lock_p(&acquire_mutex, file, line); } -void DEVICE::Lock() +void DEVICE::dbg_Unlock_acquire(const char *file, int line) { - P(m_mutex); + Dmsg2(sd_dbglvl, "Unlock_acquire from %s:%d\n", file, line); + bthread_mutex_unlock_p(&acquire_mutex, file, line); } -void DEVICE::Unlock() +void DEVICE::dbg_Lock_read_acquire(const char *file, int line) { - V(m_mutex); + Dmsg2(sd_dbglvl, "Lock_read_acquire from %s:%d\n", file, line); + bthread_mutex_lock_p(&read_acquire_mutex, file, line); +} + +void DEVICE::dbg_Unlock_read_acquire(const char *file, int line) +{ + Dmsg2(sd_dbglvl, "Unlock_read_acquire from %s:%d\n", file, line); + bthread_mutex_unlock_p(&read_acquire_mutex, file, line); } +void DEVICE::dbg_Lock_VolCatInfo(const char *file, int line) +{ + bthread_mutex_lock_p(&volcat_mutex, file, line); +} + +void DEVICE::dbg_Unlock_VolCatInfo(const char *file, int line) +{ + bthread_mutex_unlock_p(&volcat_mutex, file, line); +} + +#else + void DEVICE::Lock_acquire() { P(acquire_mutex); @@ -329,6 +324,18 @@ void DEVICE::Unlock_read_acquire() V(read_acquire_mutex); } +void DEVICE::Lock_VolCatInfo() +{ + P(volcat_mutex); +} + +void DEVICE::Unlock_VolCatInfo() +{ + V(volcat_mutex); +} + + + #endif /* Main device access control */ @@ -349,6 +356,18 @@ int DEVICE::init_read_acquire_mutex() return pthread_mutex_init(&read_acquire_mutex, NULL); } +/* VolCatInfo mutex */ +int DEVICE::init_volcat_mutex() +{ + return pthread_mutex_init(&volcat_mutex, NULL); +} + +/* dcrs mutex */ +int DEVICE::init_dcrs_mutex() +{ + return pthread_mutex_init(&dcrs_mutex, NULL); +} + /* Set order in which device locks must be acquired */ void DEVICE::set_mutex_priorities() { @@ -364,52 +383,6 @@ int DEVICE::next_vol_timedwait(const struct timespec *timeout) } -/* - * This is a recursive lock that checks if the device is blocked. - * - * When blocked is set, all threads EXCEPT thread with id no_wait_id - * must wait. The no_wait_id thread is out obtaining a new volume - * and preparing the label. - */ -#ifdef SD_DEBUG_LOCK -void DEVICE::dbg_rLock(const char *file, int line, bool locked) -{ - Dmsg3(sd_dbglvl, "rLock blked=%s from %s:%d\n", print_blocked(), - file, line); - if (!locked) { - /* lockmgr version of P(m_mutex) */ - bthread_mutex_lock_p(&m_mutex, file, line); - m_count++; - } -#else -void DEVICE::rLock(bool locked) -{ - if (!locked) { - Lock(); - m_count++; - } -#endif - - if (blocked() && !pthread_equal(no_wait_id, pthread_self())) { - num_waiting++; /* indicate that I am waiting */ - while (blocked()) { - int stat; -#ifndef HAVE_WIN32 - /* thread id on Win32 may be a struct */ - Dmsg3(sd_dbglvl, "rLock blked=%s no_wait=%p me=%p\n", print_blocked(), - no_wait_id, pthread_self()); -#endif - if ((stat = pthread_cond_wait(&this->wait, &m_mutex)) != 0) { - berrno be; - this->Unlock(); - Emsg1(M_ABORT, 0, _("pthread_cond_wait failure. ERR=%s\n"), - be.bstrerror(stat)); - } - } - num_waiting--; /* no longer waiting */ - } -} - /* * Block all other threads from using the device * Device must already be locked. After this call, @@ -420,8 +393,7 @@ void DEVICE::rLock(bool locked) */ void _block_device(const char *file, int line, DEVICE *dev, int state) { -// ASSERT(lmgr_mutex_is_locked(&dev->m_mutex) == 1); - ASSERT(dev->blocked() == BST_NOT_BLOCKED); + ASSERT2(dev->blocked() == BST_NOT_BLOCKED, "Block request of device already blocked"); dev->set_blocked(state); /* make other threads wait */ dev->no_wait_id = pthread_self(); /* allow us to continue */ Dmsg3(sd_dbglvl, "set blocked=%s from %s:%d\n", dev->print_blocked(), file, line); @@ -435,8 +407,7 @@ void _block_device(const char *file, int line, DEVICE *dev, int state) void _unblock_device(const char *file, int line, DEVICE *dev) { Dmsg3(sd_dbglvl, "unblock %s from %s:%d\n", dev->print_blocked(), file, line); -// ASSERT(lmgr_mutex_is_locked(&dev->m_mutex) == 1); - ASSERT(dev->blocked()); + ASSERT2(dev->blocked(), "Unblock request of device not blocked"); dev->set_blocked(BST_NOT_BLOCKED); clear_thread_id(dev->no_wait_id); if (dev->num_waiting > 0) { @@ -479,7 +450,7 @@ void _give_back_device_lock(const char *file, int line, DEVICE *dev, bsteal_lock } } -const char *DEVICE::print_blocked() const +const char *DEVICE::print_blocked() const { switch (m_blocked) { case BST_NOT_BLOCKED: diff --git a/bacula/src/stored/lock.h b/bacula/src/stored/lock.h index 795bc31248..16b47bb924 100644 --- a/bacula/src/stored/lock.h +++ b/bacula/src/stored/lock.h @@ -1,48 +1,86 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2007 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Definitions for locking and blocking functions in the SD * * Kern Sibbald, pulled out of dev.h June 2007 * - * Version $Id$ - * */ #ifndef __LOCK_H #define __LOCK_H 1 +void _lock_reservations(const char *file="**Unknown**", int line=0); +void _unlock_reservations(); +void _lock_volumes(const char *file="**Unknown**", int line=0); +void _unlock_volumes(); + +#ifdef SD_DEBUG_LOCK + +#define lock_reservations() \ + do { Dmsg3(sd_dbglvl, "lock_reservations at %s:%d precnt=%d\n", \ + __FILE__, __LINE__, \ + reservations_lock_count); \ + _lock_reservations(__FILE__, __LINE__); \ + Dmsg0(sd_dbglvl, "lock_reservations: got lock\n"); \ + } while (0) +#define unlock_reservations() \ + do { Dmsg3(sd_dbglvl, "unlock_reservations at %s:%d precnt=%d\n", \ + __FILE__, __LINE__, \ + reservations_lock_count); \ + _unlock_reservations(); } while (0) + +#define lock_volumes() \ + do { Dmsg3(sd_dbglvl, "lock_volumes at %s:%d precnt=%d\n", \ + __FILE__, __LINE__, \ + vol_list_lock_count); \ + _lock_volumes(__FILE__, __LINE__); \ + Dmsg0(sd_dbglvl, "lock_volumes: got lock\n"); \ + } while (0) + +#define unlock_volumes() \ + do { Dmsg3(sd_dbglvl, "unlock_volumes at %s:%d precnt=%d\n", \ + __FILE__, __LINE__, \ + vol_list_lock_count); \ + _unlock_volumes(); } while (0) + +#else + +#define lock_reservations() _lock_reservations(__FILE__, __LINE__) +#define unlock_reservations() _unlock_reservations() +#define lock_volumes() _lock_volumes(__FILE__, __LINE__) +#define unlock_volumes() _unlock_volumes() + +#endif + +#ifdef DEV_DEBUG_LOCK +#define Lock() dbg_Lock(__FILE__, __LINE__) +#define Unlock() dbg_Unlock(__FILE__, __LINE__) +#define rLock(locked) dbg_rLock(__FILE__, __LINE__, locked) +#define rUnlock() dbg_rUnlock(__FILE__, __LINE__) +#endif + #ifdef SD_DEBUG_LOCK -#define r_dlock() _r_dlock(__FILE__, __LINE__); /* in lock.c */ -#define r_dunlock() _r_dunlock(__FILE__, __LINE__); /* in lock.c */ -#define dlock() _dlock(__FILE__, __LINE__); /* in lock.c */ -#define dunlock() _dunlock(__FILE__, __LINE__); /* in lock.c */ +#define Lock_acquire() dbg_Lock_acquire(__FILE__, __LINE__) +#define Unlock_acquire() dbg_Unlock_acquire(__FILE__, __LINE__) +#define Lock_read_acquire() dbg_Lock_read_acquire(__FILE__, __LINE__) +#define Unlock_read_acquire() dbg_Unlock_read_acquire(__FILE__, __LINE__) +#define Lock_VolCatInfo() dbg_Lock_VolCatInfo(__FILE__, __LINE__) +#define Unlock_VolCatInfo() dbg_Unlock_VolCatInfo(__FILE__, __LINE__) #endif #define block_device(d, s) _block_device(__FILE__, __LINE__, (d), s) diff --git a/bacula/src/stored/mac.c b/bacula/src/stored/mac.c deleted file mode 100644 index 7883c9da65..0000000000 --- a/bacula/src/stored/mac.c +++ /dev/null @@ -1,282 +0,0 @@ -/* - Bacula® - The Network Backup Solution - - Copyright (C) 2006-2012 Free Software Foundation Europe e.V. - - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. - - Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. -*/ -/* - * SD -- mac.c -- responsible for doing - * migration, archive, copy, and virtual backup jobs. - * - * Kern Sibbald, January MMVI - * - */ - -#include "bacula.h" -#include "stored.h" - -/* Import functions */ -extern char Job_end[]; - -/* Forward referenced subroutines */ -static bool record_cb(DCR *dcr, DEV_RECORD *rec); - - -/* - * Read Data and send to File Daemon - * Returns: false on failure - * true on success - */ -bool do_mac(JCR *jcr) -{ - bool ok = true; - BSOCK *dir = jcr->dir_bsock; - const char *Type; - char ec1[50]; - DEVICE *dev; - - switch(jcr->getJobType()) { - case JT_MIGRATE: - Type = "Migration"; - break; - case JT_ARCHIVE: - Type = "Archive"; - break; - case JT_COPY: - Type = "Copy"; - break; - case JT_BACKUP: - Type = "Virtual Backup"; - break; - default: - Type = "Unknown"; - break; - } - - - Dmsg0(20, "Start read data.\n"); - - if (!jcr->read_dcr || !jcr->dcr) { - Jmsg(jcr, M_FATAL, 0, _("Read and write devices not properly initialized.\n")); - goto bail_out; - } - Dmsg2(100, "read_dcr=%p write_dcr=%p\n", jcr->read_dcr, jcr->dcr); - - if (jcr->NumReadVolumes == 0) { - Jmsg(jcr, M_FATAL, 0, _("No Volume names found for %s.\n"), Type); - goto bail_out; - } - - Dmsg3(200, "Found %d volumes names for %s. First=%s\n", jcr->NumReadVolumes, - jcr->VolList->VolumeName, Type); - - /* Ready devices for reading and writing */ - if (!acquire_device_for_read(jcr->read_dcr) || - !acquire_device_for_append(jcr->dcr)) { - jcr->setJobStatus(JS_ErrorTerminated); - goto bail_out; - } - - Dmsg2(200, "===== After acquire pos %u:%u\n", jcr->dcr->dev->file, jcr->dcr->dev->block_num); - - jcr->sendJobStatus(JS_Running); - - begin_data_spool(jcr->dcr); - begin_attribute_spool(jcr); - - jcr->dcr->VolFirstIndex = jcr->dcr->VolLastIndex = 0; - jcr->run_time = time(NULL); - set_start_vol_position(jcr->dcr); - - jcr->JobFiles = 0; - ok = read_records(jcr->read_dcr, record_cb, mount_next_read_volume); - goto ok_out; - -bail_out: - ok = false; - -ok_out: - if (jcr->dcr) { - dev = jcr->dcr->dev; - Dmsg1(100, "ok=%d\n", ok); - if (ok || dev->can_write()) { - /* Flush out final partial block of this session */ - if (!jcr->dcr->write_block_to_device()) { - Jmsg2(jcr, M_FATAL, 0, _("Fatal append error on device %s: ERR=%s\n"), - dev->print_name(), dev->bstrerror()); - Dmsg0(100, _("Set ok=FALSE after write_block_to_device.\n")); - ok = false; - } - Dmsg2(200, "Flush block to device pos %u:%u\n", dev->file, dev->block_num); - } - - if (!ok) { - discard_data_spool(jcr->dcr); - } else { - /* Note: if commit is OK, the device will remain blocked */ - commit_data_spool(jcr->dcr); - } - - /* - * Don't use time_t for job_elapsed as time_t can be 32 or 64 bits, - * and the subsequent Jmsg() editing will break - */ - int32_t job_elapsed = time(NULL) - jcr->run_time; - - if (job_elapsed <= 0) { - job_elapsed = 1; - } - - Jmsg(jcr, M_INFO, 0, _("Elapsed time=%02d:%02d:%02d, Transfer rate=%s Bytes/second\n"), - job_elapsed / 3600, job_elapsed % 3600 / 60, job_elapsed % 60, - edit_uint64_with_suffix(jcr->JobBytes / job_elapsed, ec1)); - - if (ok && dev->is_dvd()) { - ok = dvd_close_job(jcr->dcr); /* do DVD cleanup if any */ - } - /* Release the device -- and send final Vol info to DIR */ - release_device(jcr->dcr); - - if (!ok || job_canceled(jcr)) { - discard_attribute_spool(jcr); - } else { - commit_attribute_spool(jcr); - } - } - - if (jcr->read_dcr) { - if (!release_device(jcr->read_dcr)) { - ok = false; - } - } - - jcr->sendJobStatus(); /* update director */ - - Dmsg0(30, "Done reading.\n"); - jcr->end_time = time(NULL); - dequeue_messages(jcr); /* send any queued messages */ - if (ok) { - jcr->setJobStatus(JS_Terminated); - } - generate_daemon_event(jcr, "JobEnd"); - generate_plugin_event(jcr, bsdEventJobEnd); - dir->fsend(Job_end, jcr->Job, jcr->JobStatus, jcr->JobFiles, - edit_uint64(jcr->JobBytes, ec1), jcr->JobErrors); - Dmsg4(100, Job_end, jcr->Job, jcr->JobStatus, jcr->JobFiles, ec1); - - dir->signal(BNET_EOD); /* send EOD to Director daemon */ - free_plugins(jcr); /* release instantiated plugins */ - - return ok; -} - -/* - * Called here for each record from read_records() - * Returns: true if OK - * false if error - */ -static bool record_cb(DCR *dcr, DEV_RECORD *rec) -{ - JCR *jcr = dcr->jcr; - DEVICE *dev = jcr->dcr->dev; - char buf1[100], buf2[100]; - -#ifdef xxx - Dmsg5(000, "on entry JobId=%d FI=%s SessId=%d Strm=%s len=%d\n", - jcr->JobId, - FI_to_ascii(buf1, rec->FileIndex), rec->VolSessionId, - stream_to_ascii(buf2, rec->Stream, rec->FileIndex), rec->data_len); -#endif - /* If label and not for us, discard it */ - if (rec->FileIndex < 0 && rec->match_stat <= 0) { - return true; - } - /* We want to write SOS_LABEL and EOS_LABEL discard all others */ - switch (rec->FileIndex) { - case PRE_LABEL: - case VOL_LABEL: - case EOT_LABEL: - case EOM_LABEL: - return true; /* don't write vol labels */ - } -// if (jcr->getJobType() == JT_BACKUP) { - /* - * For normal migration jobs, FileIndex values are sequential because - * we are dealing with one job. However, for Vbackup (consolidation), - * we will be getting records from multiple jobs and writing them back - * out, so we need to ensure that the output FileIndex is sequential. - * We do so by detecting a FileIndex change and incrementing the - * JobFiles, which we then use as the output FileIndex. - */ - if (rec->FileIndex >= 0) { - /* If something changed, increment FileIndex */ - if (rec->VolSessionId != rec->last_VolSessionId || - rec->VolSessionTime != rec->last_VolSessionTime || - rec->FileIndex != rec->last_FileIndex) { - jcr->JobFiles++; - rec->last_VolSessionId = rec->VolSessionId; - rec->last_VolSessionTime = rec->VolSessionTime; - rec->last_FileIndex = rec->FileIndex; - } - rec->FileIndex = jcr->JobFiles; /* set sequential output FileIndex */ - } -// } - /* - * Modify record SessionId and SessionTime to correspond to - * output. - */ - rec->VolSessionId = jcr->VolSessionId; - rec->VolSessionTime = jcr->VolSessionTime; - Dmsg5(200, "before write JobId=%d FI=%s SessId=%d Strm=%s len=%d\n", - jcr->JobId, - FI_to_ascii(buf1, rec->FileIndex), rec->VolSessionId, - stream_to_ascii(buf2, rec->Stream, rec->FileIndex), rec->data_len); - while (!write_record_to_block(jcr->dcr, rec)) { - Dmsg4(200, "!write_record_to_block blkpos=%u:%u len=%d rem=%d\n", - dev->file, dev->block_num, rec->data_len, rec->remainder); - if (!jcr->dcr->write_block_to_device()) { - Dmsg2(90, "Got write_block_to_dev error on device %s. %s\n", - dev->print_name(), dev->bstrerror()); - Jmsg2(jcr, M_FATAL, 0, _("Fatal append error on device %s: ERR=%s\n"), - dev->print_name(), dev->bstrerror()); - return false; - } - Dmsg2(200, "===== Wrote block new pos %u:%u\n", dev->file, dev->block_num); - } - /* Restore packet */ - rec->VolSessionId = rec->last_VolSessionId; - rec->VolSessionTime = rec->last_VolSessionTime; - if (rec->FileIndex < 0) { - return true; /* don't send LABELs to Dir */ - } - jcr->JobBytes += rec->data_len; /* increment bytes this job */ - Dmsg5(500, "wrote_record JobId=%d FI=%s SessId=%d Strm=%s len=%d\n", - jcr->JobId, - FI_to_ascii(buf1, rec->FileIndex), rec->VolSessionId, - stream_to_ascii(buf2, rec->Stream, rec->FileIndex), rec->data_len); - - send_attrs_to_dir(jcr, rec); - - return true; -} diff --git a/bacula/src/stored/match_bsr.c b/bacula/src/stored/match_bsr.c index 698ed29f2c..28b08bbb3e 100644 --- a/bacula/src/stored/match_bsr.c +++ b/bacula/src/stored/match_bsr.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2002-2010 Free Software Foundation Europe e.V. + Copyright (C) 2002-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Match Bootstrap Records (used for restores) against @@ -36,7 +24,7 @@ /* * ***FIXME*** * Also for efficiency, once a bsr is done, it really should be - * delinked from the bsr chain. This will avoid the above + * delinked from the bsr chain. This will avoid the above * problem and make traversal of the bsr chain more efficient. * * To be done ... @@ -275,7 +263,7 @@ static bool get_smallest_voladdr(BSR_VOLADDR *va, uint64_t *ret) * that has already been consumed, and this will cause the * bsr to be used, thus we may seek back and re-read the * same records, causing an error. This deficiency must - * be fixed. For the moment, it has been kludged in + * be fixed. For the moment, it has been kludged in * read_record.c to avoid seeking back if find_next_bsr * returns a bsr pointing to a smaller address (file/block). * @@ -317,7 +305,7 @@ static BSR *find_smallest_volfile(BSR *found_bsr, BSR *bsr) bsr_sfile = vf->sfile; } } - + /* if the bsr file is less than the found_bsr file, return bsr */ if (found_bsr_sfile > bsr_sfile) { return_bsr = bsr; @@ -402,7 +390,7 @@ static int match_all(BSR *bsr, DEV_RECORD *rec, VOLUME_LABEL *volrec, if (!match_volfile(bsr, bsr->volfile, rec, 1)) { if (bsr->volfile) { - Dmsg3(dbglevel, "Fail on file=%u. bsr=%u,%u\n", + Dmsg3(dbglevel, "Fail on file=%u. bsr=%u,%u\n", rec->File, bsr->volfile->sfile, bsr->volfile->efile); } goto no_match; @@ -410,7 +398,7 @@ static int match_all(BSR *bsr, DEV_RECORD *rec, VOLUME_LABEL *volrec, if (!match_voladdr(bsr, bsr->voladdr, rec, 1)) { if (bsr->voladdr) { - Dmsg3(dbglevel, "Fail on Addr=%llu. bsr=%llu,%llu\n", + Dmsg3(dbglevel, "Fail on Addr=%llu. bsr=%llu,%llu\n", get_record_address(rec), bsr->voladdr->saddr, bsr->voladdr->eaddr); } goto no_match; @@ -435,11 +423,13 @@ static int match_all(BSR *bsr, DEV_RECORD *rec, VOLUME_LABEL *volrec, rec->FileIndex, bsr->FileIndex->findex, bsr->FileIndex->findex2); goto no_match; } - Dmsg3(dbglevel, "match on findex=%d. bsr=%d,%d\n", - rec->FileIndex, bsr->FileIndex->findex, bsr->FileIndex->findex2); + if (bsr->FileIndex) { + Dmsg3(dbglevel, "match on findex=%d. bsr=%d,%d\n", + rec->FileIndex, bsr->FileIndex->findex, bsr->FileIndex->findex2); + } if (!match_fileregex(bsr, rec, jcr)) { - Dmsg1(dbglevel, "Fail on fileregex='%s'\n", bsr->fileregex); + Dmsg1(dbglevel, "Fail on fileregex='%s'\n", NPRT(bsr->fileregex)); goto no_match; } @@ -712,7 +702,7 @@ static int match_sesstime(BSR *bsr, BSR_SESSTIME *sesstime, DEV_RECORD *rec, boo return 0; } -/* +/* * Note, we cannot mark bsr done based on session id because we may * have interleaved records, and there may be more of what we want * later. @@ -774,7 +764,7 @@ uint64_t get_bsr_start_addr(BSR *bsr, uint32_t *file, uint32_t *block) bsr_addr = bsr->voladdr->saddr; sfile = bsr_addr>>32; sblock = (uint32_t)bsr_addr; - + } else if (bsr->volfile && bsr->volblock) { bsr_addr = (((uint64_t)bsr->volfile->sfile)<<32)|bsr->volblock->sblock; sfile = bsr->volfile->sfile; diff --git a/bacula/src/stored/mount.c b/bacula/src/stored/mount.c index a825123ba7..fc92b14d11 100644 --- a/bacula/src/stored/mount.c +++ b/bacula/src/stored/mount.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2002-2012 Free Software Foundation Europe e.V. + Copyright (C) 2002-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * @@ -75,32 +63,33 @@ bool DCR::mount_next_write_volume() int mode; DCR *dcr = this; - Dmsg2(150, "Enter mount_next_volume(release=%d) dev=%s\n", dev->must_unload(), + Enter(200); + Dmsg2(100, "Enter mount_next_volume(release=%d) dev=%s\n", dev->must_unload(), dev->print_name()); init_device_wait_timers(dcr); P(mount_mutex); - + /* * Attempt to mount the next volume. If something non-fatal goes * wrong, we come back here to re-try (new op messages, re-read * Volume, ...) */ mount_next_vol: - Dmsg1(150, "mount_next_vol retry=%d\n", retry); + Dmsg1(100, "mount_next_vol retry=%d\n", retry); /* Ignore retry if this is poll request */ - if (retry++ > 4) { + if (dev->is_nospace() || retry++ > 4) { /* Last ditch effort before giving up, force operator to respond */ VolCatInfo.Slot = 0; V(mount_mutex); - if (!dir_ask_sysop_to_mount_volume(dcr, ST_APPEND)) { - Jmsg(jcr, M_FATAL, 0, _("Too many errors trying to mount device %s.\n"), - dev->print_name()); + if (!dir_ask_sysop_to_mount_volume(dcr, SD_APPEND)) { + Jmsg(jcr, M_FATAL, 0, _("Too many errors trying to mount %s device %s.\n"), + dev->print_type(), dev->print_name()); goto no_lock_bail_out; } P(mount_mutex); - Dmsg1(150, "Continue after dir_ask_sysop_to_mount. must_load=%d\n", dev->must_load()); + Dmsg1(90, "Continue after dir_ask_sysop_to_mount. must_load=%d\n", dev->must_load()); } if (job_canceled(jcr)) { Jmsg(jcr, M_FATAL, 0, _("Job %d canceled.\n"), jcr->JobId); @@ -112,8 +101,8 @@ mount_next_vol: ask = true; /* ask operator to mount tape */ } do_unload(); - do_swapping(true /*is_writing*/); - do_load(true /*is_writing*/); + do_swapping(SD_APPEND); + do_load(SD_APPEND); if (!find_a_volume()) { goto bail_out; @@ -122,9 +111,11 @@ mount_next_vol: if (job_canceled(jcr)) { goto bail_out; } - Dmsg3(150, "After find_next_append. Vol=%s Slot=%d Parts=%d\n", + Dmsg3(100, "After find_a_volume. Vol=%s Slot=%d Parts=%d\n", getVolCatName(), VolCatInfo.Slot, VolCatInfo.VolCatParts); - + + dev->notify_newvol_in_attached_dcrs(getVolCatName()); + /* * Get next volume and ready it for append * This code ensures that the device is ready for @@ -137,7 +128,7 @@ mount_next_vol: * */ dcr->setVolCatInfo(false); /* out of date when Vols unlocked */ - if (autoload_device(dcr, true/*writing*/, NULL) > 0) { + if (autoload_device(dcr, SD_APPEND, NULL) > 0) { autochanger = true; ask = false; } else { @@ -145,7 +136,7 @@ mount_next_vol: VolCatInfo.Slot = 0; ask = retry >= 2; } - Dmsg1(150, "autoload_dev returns %d\n", autochanger); + Dmsg1(100, "autoload_dev returns %d\n", autochanger); /* * If we autochanged to correct Volume or (we have not just * released the Volume AND we can automount) we go ahead @@ -161,12 +152,12 @@ mount_next_vol: Dmsg0(250, "(2)Ask=0\n"); ask = false; } - Dmsg2(250, "Ask=%d autochanger=%d\n", ask, autochanger); + Dmsg2(100, "Ask=%d autochanger=%d\n", ask, autochanger); if (ask) { V(mount_mutex); dcr->setVolCatInfo(false); /* out of date when Vols unlocked */ - if (!dir_ask_sysop_to_mount_volume(dcr, ST_APPEND)) { + if (!dir_ask_sysop_to_mount_volume(dcr, SD_APPEND)) { Dmsg0(150, "Error return ask_sysop ...\n"); goto no_lock_bail_out; } @@ -175,7 +166,7 @@ mount_next_vol: if (job_canceled(jcr)) { goto bail_out; } - Dmsg3(150, "want vol=%s devvol=%s dev=%s\n", VolumeName, + Dmsg3(100, "want vol=%s devvol=%s dev=%s\n", VolumeName, dev->VolHdr.VolumeName, dev->print_name()); if (dev->poll && dev->has_cap(CAP_CLOSEONPOLL)) { @@ -190,11 +181,13 @@ mount_next_vol: mode = OPEN_READ_WRITE; } /* Try autolabel if enabled */ + Dmsg1(100, "Try open Vol=%s\n", getVolCatName()); if (!dev->open(dcr, mode)) { + Dmsg1(100, "Try autolabel Vol=%s\n", getVolCatName()); try_autolabel(false); /* try to create a new volume label */ } while (!dev->open(dcr, mode)) { - Dmsg1(150, "open_device failed: ERR=%s\n", dev->bstrerror()); + Dmsg1(100, "open_device failed: ERR=%s\n", dev->bstrerror()); if ((dev->is_file() && dev->is_removable()) || dev->is_dvd()) { bool ok = true; Dmsg0(150, "call scan_dir_for_vol\n"); @@ -215,12 +208,12 @@ mount_next_vol: if (try_autolabel(false) == try_read_vol) { break; /* created a new volume label */ } - Jmsg3(jcr, M_WARNING, 0, _("Open device %s Volume \"%s\" failed: ERR=%s\n"), - dev->print_name(), dcr->VolumeName, dev->bstrerror()); - Dmsg0(50, "set_unload\n"); + Jmsg4(jcr, M_WARNING, 0, _("Open of %s device %s Volume \"%s\" failed: ERR=%s\n"), + dev->print_type(), dev->print_name(), dcr->VolumeName, dev->bstrerror()); + Dmsg0(100, "set_unload\n"); dev->set_unload(); /* force ask sysop */ ask = true; - Dmsg0(150, "goto mount_next_vol\n"); + Dmsg0(100, "goto mount_next_vol\n"); goto mount_next_vol; } @@ -232,7 +225,7 @@ read_volume: case check_next_vol: Dmsg0(50, "set_unload\n"); dev->set_unload(); /* want a different Volume */ - Dmsg0(150, "goto mount_next_vol\n"); + Dmsg0(100, "goto mount_next_vol\n"); goto mount_next_vol; case check_read_vol: goto read_volume; @@ -242,10 +235,10 @@ read_volume: break; } /* - * Check that volcatinfo is good + * Check that volcatinfo is good */ if (!dev->haveVolCatInfo()) { - Dmsg0(210, "Do not have volcatinfo\n"); + Dmsg0(100, "Do not have volcatinfo\n"); if (!find_a_volume()) { goto mount_next_vol; } @@ -267,6 +260,7 @@ read_volume: */ recycle = strcmp(dev->VolCatInfo.VolCatStatus, "Recycle") == 0; if (dev->VolHdr.LabelType == PRE_LABEL || recycle) { + dcr->WroteVol = false; if (!dcr->rewrite_volume_label(recycle)) { mark_volume_in_error(); goto mount_next_vol; @@ -283,13 +277,14 @@ read_volume: VolumeName); if (!dev->eod(dcr)) { - Dmsg2(050, "Unable to position to end of data on device %s: ERR=%s\n", - dev->print_name(), dev->bstrerror()); - Jmsg(jcr, M_ERROR, 0, _("Unable to position to end of data on device %s: ERR=%s\n"), - dev->print_name(), dev->bstrerror()); + Dmsg3(050, "Unable to position to end of data on %s device %s: ERR=%s\n", + dev->print_type(), dev->print_name(), dev->bstrerror()); + Jmsg(jcr, M_ERROR, 0, _("Unable to position to end of data on %s device %s: ERR=%s\n"), + dev->print_type(), dev->print_name(), dev->bstrerror()); mark_volume_in_error(); goto mount_next_vol; } + if (!is_eod_valid()) { Dmsg0(100, "goto mount_next_vol\n"); goto mount_next_vol; @@ -300,7 +295,7 @@ read_volume: if (!dir_update_volume_info(dcr, false, false)) { goto bail_out; } - + /* Return an empty block */ empty_block(block); /* we used it for reading so set for write */ } @@ -315,6 +310,7 @@ bail_out: V(mount_mutex); no_lock_bail_out: + Leave(200); return false; } @@ -328,6 +324,7 @@ no_lock_bail_out: bool DCR::find_a_volume() { DCR *dcr = this; + bool ok; if (!is_suitable_volume_mounted()) { bool have_vol = false; @@ -347,17 +344,26 @@ bool DCR::find_a_volume() if (job_canceled(jcr)) { return false; } + /* + * Unlock the mount mutex while waiting or + * the Director for a new volume + */ V(mount_mutex); - if (!dir_ask_sysop_to_create_appendable_volume(dcr)) { - P(mount_mutex); + if (dev->must_wait()) { + int retries = 5; + Dmsg0(40, "No appendable volume. Calling wait_for_device\n"); + wait_for_device(dcr, retries); + ok = true; + } else { + ok = dir_ask_sysop_to_create_appendable_volume(dcr); + } + P(mount_mutex); + if (!ok || job_canceled(jcr)) { return false; - } - P(mount_mutex); - if (job_canceled(jcr)) { - return false; - } - Dmsg0(150, "Again dir_find_next_append...\n"); + } + Dmsg0(150, "Again dir_find_next_append...\n"); } + dev->clear_wait(); } } if (dcr->haveVolCatInfo()) { @@ -369,13 +375,16 @@ bool DCR::find_a_volume() int DCR::check_volume_label(bool &ask, bool &autochanger) { int vol_label_status; + + Enter(200); + /* * If we are writing to a stream device, ASSUME the volume label * is correct. */ if (dev->has_cap(CAP_STREAM)) { vol_label_status = VOL_OK; - create_volume_label(dev, VolumeName, "Default", false /* not DVD */); + create_volume_header(dev, VolumeName, "Default", false /* not DVD */); dev->VolHdr.LabelType = PRE_LABEL; } else { vol_label_status = read_dev_volume_label(this); @@ -408,8 +417,8 @@ int DCR::check_volume_label(bool &ask, bool &autochanger) /* If not removable, Volume is broken */ if (!dev->is_removable()) { - Jmsg(jcr, M_WARNING, 0, _("Volume \"%s\" not on device %s.\n"), - VolumeName, dev->print_name()); + Jmsg(jcr, M_WARNING, 0, _("Volume \"%s\" not on %s device %s.\n"), + VolumeName, dev->print_type(), dev->print_name()); mark_volume_in_error(); goto check_next_volume; } @@ -434,7 +443,7 @@ int DCR::check_volume_label(bool &ask, bool &autochanger) if (autochanger && !dir_get_volume_info(this, GET_VOL_INFO_FOR_READ)) { /* * If we get here, we know we cannot write on the Volume, - * and we know that we cannot read it either, so it + * and we know that we cannot read it either, so it * is not in the autochanger. */ mark_volume_not_inchanger(); @@ -460,8 +469,12 @@ int DCR::check_volume_label(bool &ask, bool &autochanger) dev->VolCatInfo = VolCatInfo; /* structure assignment */ Dmsg1(100, "Call reserve_volume=%s\n", dev->VolHdr.VolumeName); if (reserve_volume(this, dev->VolHdr.VolumeName) == NULL) { - Jmsg2(jcr, M_WARNING, 0, _("Could not reserve volume %s on %s\n"), - dev->VolHdr.VolumeName, dev->print_name()); + if (!jcr->errmsg[0]) { + Jmsg3(jcr, M_WARNING, 0, _("Could not reserve volume %s on %s device %s\n"), + dev->VolHdr.VolumeName, dev->print_type(), dev->print_name()); + } else { + Jmsg(jcr, M_WARNING, 0, "%s", jcr->errmsg); + } ask = true; dev->setVolCatInfo(false); setVolCatInfo(false); @@ -506,17 +519,21 @@ int DCR::check_volume_label(bool &ask, bool &autochanger) } goto check_next_volume; } + Leave(200); return check_ok; check_next_volume: dev->setVolCatInfo(false); setVolCatInfo(false); + Leave(200); return check_next_vol; check_bail_out: + Leave(200); return check_error; check_read_volume: + Leave(200); return check_read_vol; } @@ -524,12 +541,19 @@ check_read_volume: bool DCR::is_suitable_volume_mounted() { + bool ok; + /* Volume mounted? */ if (dev->VolHdr.VolumeName[0] == 0 || dev->swap_dev || dev->must_unload()) { return false; /* no */ } bstrncpy(VolumeName, dev->VolHdr.VolumeName, sizeof(VolumeName)); - return dir_get_volume_info(this, GET_VOL_INFO_FOR_WRITE); + ok = dir_get_volume_info(this, GET_VOL_INFO_FOR_WRITE); + if (!ok) { + Dmsg1(40, "dir_get_volume_info failed: %s\n", jcr->errmsg); + dev->set_wait(); + } + return ok; } bool DCR::do_unload() @@ -544,7 +568,7 @@ bool DCR::do_unload() bool DCR::do_load(bool is_writing) { if (dev->must_load()) { - Dmsg1(100, "Must load %s\n", dev->print_name()); + Dmsg1(100, "Must load dev=%s\n", dev->print_name()); if (autoload_device(this, is_writing, NULL) > 0) { dev->clear_load(); return true; @@ -586,7 +610,11 @@ void DCR::do_swapping(bool is_writing) dev->print_name(), dev->swap_dev->print_name()); dev->swap_dev = NULL; } else { - Dmsg0(100, "No swap_dev set\n"); + if (dev->vol) { + Dmsg1(100, "No swap_dev set. dev->vol=%p\n", dev->vol); + } else { + Dmsg1(100, "No swap_dev set. dev->vol=%p\n", dev->vol); + } } } @@ -601,14 +629,14 @@ bool DCR::is_eod_valid() char ed1[50], ed2[50]; if (dev->VolCatInfo.VolCatBytes == dev->part_start + dev->part_size) { Jmsg(jcr, M_INFO, 0, _("Ready to append to end of Volume \"%s\"" - " part=%d size=%s\n"), VolumeName, - dev->part, edit_uint64(dev->VolCatInfo.VolCatBytes,ed1)); + " part=%d size=%s\n"), VolumeName, + dev->part, edit_uint64_with_commas(dev->VolCatInfo.VolCatBytes,ed1)); } else { Jmsg(jcr, M_ERROR, 0, _("Bacula cannot write on DVD Volume \"%s\" because: " "The sizes do not match! Volume=%s Catalog=%s\n"), VolumeName, - edit_uint64(dev->part_start + dev->part_size, ed1), - edit_uint64(dev->VolCatInfo.VolCatBytes, ed2)); + edit_uint64_with_commas(dev->part_start + dev->part_size, ed1), + edit_uint64_with_commas(dev->VolCatInfo.VolCatBytes, ed2)); mark_volume_in_error(); return false; } @@ -639,21 +667,28 @@ bool DCR::is_eod_valid() mark_volume_in_error(); return false; } + /* + * File device. + */ } else if (dev->is_file()) { char ed1[50], ed2[50]; boffset_t pos; + pos = dev->lseek(this, (boffset_t)0, SEEK_END); - if (dev->VolCatInfo.VolCatBytes == (uint64_t)pos) { - Jmsg(jcr, M_INFO, 0, _("Ready to append to end of Volume \"%s\"" - " size=%s\n"), VolumeName, - edit_uint64(dev->VolCatInfo.VolCatBytes, ed1)); - } else if ((uint64_t)pos > dev->VolCatInfo.VolCatBytes) { - Jmsg(jcr, M_WARNING, 0, _("For Volume \"%s\":\n" - "The sizes do not match! Volume=%s Catalog=%s\n" - "Correcting Catalog\n"), - VolumeName, edit_uint64(pos, ed1), - edit_uint64(dev->VolCatInfo.VolCatBytes, ed2)); - dev->VolCatInfo.VolCatBytes = (uint64_t)pos; + if (dev->VolCatInfo.VolCatAmetaBytes == (uint64_t)pos) { + Jmsg(jcr, M_INFO, 0, _("Ready to append to end of Volume \"%s\"" + " size=%s\n"), VolumeName, + edit_uint64_with_commas(dev->VolCatInfo.VolCatAmetaBytes, ed1)); + } else if ((uint64_t)pos >= dev->VolCatInfo.VolCatAmetaBytes) { + if ((uint64_t)pos != dev->VolCatInfo.VolCatAmetaBytes) { + Jmsg(jcr, M_WARNING, 0, _("For Volume \"%s\":\n" + " The sizes do not match! Volume=%s Catalog=%s\n" + " Correcting Catalog\n"), + VolumeName, edit_uint64_with_commas(pos, ed1), + edit_uint64_with_commas(dev->VolCatInfo.VolCatAmetaBytes, ed2)); + } + dev->VolCatInfo.VolCatAmetaBytes = pos; + dev->VolCatInfo.VolCatBytes = pos; dev->VolCatInfo.VolCatFiles = (uint32_t)(pos >> 32); if (!dir_update_volume_info(this, false, true)) { Jmsg(jcr, M_WARNING, 0, _("Error updating Catalog\n")); @@ -664,10 +699,10 @@ bool DCR::is_eod_valid() Mmsg(jcr->errmsg, _("Bacula cannot write on disk Volume \"%s\" because: " "The sizes do not match! Volume=%s Catalog=%s\n"), VolumeName, - edit_uint64(pos, ed1), - edit_uint64(dev->VolCatInfo.VolCatBytes, ed2)); + edit_uint64_with_commas(pos, ed1), + edit_uint64_with_commas(dev->VolCatInfo.VolCatBytes, ed2)); Jmsg(jcr, M_ERROR, 0, jcr->errmsg); - Dmsg0(050, jcr->errmsg); + Dmsg0(100, jcr->errmsg); mark_volume_in_error(); return false; } @@ -698,6 +733,7 @@ int DCR::try_autolabel(bool opened) DCR *dcr = this; if (dev->poll && !dev->is_tape()) { + Dmsg0(100, "No autolabel because polling.\n"); return try_default; /* if polling, don't try to create new labels */ } /* For a tape require it to be opened and read before labeling */ @@ -707,13 +743,13 @@ int DCR::try_autolabel(bool opened) if (dev->has_cap(CAP_LABEL) && (VolCatInfo.VolCatBytes == 0 || (!dev->is_tape() && strcmp(VolCatInfo.VolCatStatus, "Recycle") == 0))) { - Dmsg0(150, "Create volume label\n"); + Dmsg1(40, "Create new volume label vol=%s\n", VolumeName); /* Create a new Volume label and write it to the device */ if (!write_new_volume_label_to_dev(dcr, VolumeName, pool_name, false, /* no relabel */ false /* defer DVD label */)) { - Dmsg2(150, "write_vol_label failed. vol=%s, pool=%s\n", + Dmsg2(100, "write_vol_label failed. vol=%s, pool=%s\n", VolumeName, pool_name); - if (opened) { + if (opened) { mark_volume_in_error(); } return try_next_vol; @@ -722,20 +758,31 @@ int DCR::try_autolabel(bool opened) /* Copy Director's info into the device info */ dev->VolCatInfo = VolCatInfo; /* structure assignment */ if (!dir_update_volume_info(dcr, true, true)) { /* indicate tape labeled */ + Dmsg3(100, "Update_vol_info failed no autolabel Volume \"%s\" on %s device %s.\n", + VolumeName, dev->print_type(), dev->print_name()); return try_error; } - Jmsg(dcr->jcr, M_INFO, 0, _("Labeled new Volume \"%s\" on device %s.\n"), - VolumeName, dev->print_name()); + Jmsg(dcr->jcr, M_INFO, 0, _("Labeled new Volume \"%s\" on %s device %s.\n"), + VolumeName, dev->print_type(), dev->print_name()); + Dmsg3(100, "Labeled new Volume \"%s\" on %s device %s.\n", + VolumeName, dev->print_type(), dev->print_name()); return try_read_vol; /* read label we just wrote */ + } else { + Dmsg4(40, "=== Cannot autolabel: cap_label=%d VolCatBytes=%lld is_tape=%d VolCatStatus=%s\n", + dev->has_cap(CAP_LABEL), VolCatInfo.VolCatBytes, dev->is_tape(), + VolCatInfo.VolCatStatus); } if (!dev->has_cap(CAP_LABEL) && VolCatInfo.VolCatBytes == 0) { - Jmsg(jcr, M_WARNING, 0, _("Device %s not configured to autolabel Volumes.\n"), - dev->print_name()); + Jmsg(jcr, M_WARNING, 0, _("%s device %s not configured to autolabel Volumes.\n"), + dev->print_type(), dev->print_name()); } /* If not removable, Volume is broken */ if (!dev->is_removable()) { - Jmsg(jcr, M_WARNING, 0, _("Volume \"%s\" not on device %s.\n"), - VolumeName, dev->print_name()); + Jmsg(jcr, M_WARNING, 0, _("Volume \"%s\" not on %s device %s.\n"), + VolumeName, dev->print_type(), dev->print_name()); + Dmsg3(100, "Volume \"%s\" not on %s device %s.\n", + VolumeName, dev->print_type(), dev->print_name()); + mark_volume_in_error(); return try_next_vol; } @@ -751,7 +798,7 @@ void DCR::mark_volume_in_error() Jmsg(jcr, M_INFO, 0, _("Marking Volume \"%s\" in Error in Catalog.\n"), VolumeName); dev->VolCatInfo = VolCatInfo; /* structure assignment */ - bstrncpy(dev->VolCatInfo.VolCatStatus, "Error", sizeof(dev->VolCatInfo.VolCatStatus)); + dev->setVolCatStatus("Error"); Dmsg0(150, "dir_update_vol_info. Set Error.\n"); dir_update_volume_info(this, false, false); volume_unused(this); @@ -787,8 +834,19 @@ void DCR::release_volume() Jmsg0(jcr, M_ERROR, 0, _("Hey!!!!! WroteVol non-zero !!!!!\n")); Pmsg0(190, "Hey!!!!! WroteVol non-zero !!!!!\n"); } + + if (dev->is_open() && (!dev->is_tape() || !dev->has_cap(CAP_ALWAYSOPEN))) { + generate_plugin_event(jcr, bsdEventDeviceClose, this); + dev->close(); + } + + /* If we have not closed the device, then at least rewind the tape */ + if (dev->is_open()) { + dev->offline_or_rewind(); + } + /* - * First erase all memory of the current volume + * Erase all memory of the current volume */ free_volume(dev); dev->block_num = dev->file = 0; @@ -802,26 +860,18 @@ void DCR::release_volume() dev->label_type = B_BACULA_LABEL; VolumeName[0] = 0; - if (dev->is_open() && (!dev->is_tape() || !dev->has_cap(CAP_ALWAYSOPEN))) { - dev->close(); - } - - /* If we have not closed the device, then at least rewind the tape */ - if (dev->is_open()) { - dev->offline_or_rewind(); - } Dmsg0(190, "release_volume\n"); } /* - * Insanity check + * Insanity check * * Check to see if the tape position as defined by the OS is - * the same as our concept. If it is not, + * the same as our concept. If it is not, * it means the user has probably manually rewound the tape. * Note, we check only if num_writers == 0, but this code will * also work fine for any number of writers. If num_writers > 0, - * we probably should cancel all jobs using this device, or + * we probably should cancel all jobs using this device, or * perhaps even abort the SD, or at a minimum, mark the tape * in error. Another strategy with num_writers == 0, would be * to rewind the tape and do a new eod() request. @@ -831,10 +881,10 @@ bool DCR::is_tape_position_ok() if (dev->is_tape() && dev->num_writers == 0) { int32_t file = dev->get_os_tape_file(); if (file >= 0 && file != (int32_t)dev->get_file()) { - Jmsg(jcr, M_ERROR, 0, _("Invalid tape position on volume \"%s\"" - " on device %s. Expected %d, got %d\n"), + Jmsg(jcr, M_ERROR, 0, _("Invalid tape position on volume \"%s\"" + " on device %s. Expected %d, got %d\n"), dev->VolHdr.VolumeName, dev->print_name(), dev->get_file(), file); - /* + /* * If the current file is greater than zero, it means we probably * have some bad count of EOF marks, so mark tape in error. Otherwise * the operator might have moved the tape, so we just release it @@ -869,11 +919,11 @@ bool mount_next_read_volume(DCR *dcr) dev->Lock(); dev->close(); dev->set_read(); - dcr->set_reserved(); + dcr->set_reserved_for_read(); dev->Unlock(); if (!acquire_device_for_read(dcr)) { - Jmsg2(jcr, M_FATAL, 0, _("Cannot open Dev=%s, Vol=%s\n"), dev->print_name(), - dcr->VolumeName); + Jmsg3(jcr, M_FATAL, 0, _("Cannot open %s Dev=%s, Vol=%s for reading.\n"), + dev->print_type(), dev->print_name(), dcr->VolumeName); return false; } return true; /* next volume mounted */ diff --git a/bacula/src/stored/os.c b/bacula/src/stored/os.c new file mode 100644 index 0000000000..c726f1d382 --- /dev/null +++ b/bacula/src/stored/os.c @@ -0,0 +1,415 @@ +/* + Bacula® - The Network Backup Solution + + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. + + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. + + Bacula® is a registered trademark of Kern Sibbald. +*/ +/* + * + * os.c -- Operating System dependent dev.c routines + * + * written by, Kern Sibbald, MM + * separated from dev.c February 2014 + * + * Note, this is the device dependent code, and may have + * to be modified for each system. + */ + + +#include "bacula.h" +#include "stored.h" + +/* Returns file position on tape or -1 */ +int32_t DEVICE::get_os_tape_file() +{ + struct mtget mt_stat; + + if (has_cap(CAP_MTIOCGET) && + d_ioctl(m_fd, MTIOCGET, (char *)&mt_stat) == 0) { + return mt_stat.mt_fileno; + } + return -1; +} + + +void set_os_device_parameters(DCR *dcr) +{ + DEVICE *dev = dcr->dev; + + if (strcmp(dev->dev_name, "/dev/null") == 0) { + return; /* no use trying to set /dev/null */ + } + +#if defined(HAVE_LINUX_OS) || defined(HAVE_WIN32) + struct mtop mt_com; + + Dmsg0(100, "In set_os_device_parameters\n"); +#if defined(MTSETBLK) + if (dev->min_block_size == dev->max_block_size && + dev->min_block_size == 0) { /* variable block mode */ + mt_com.mt_op = MTSETBLK; + mt_com.mt_count = 0; + Dmsg0(100, "Set block size to zero\n"); + if (dev->d_ioctl(dev->fd(), MTIOCTOP, (char *)&mt_com) < 0) { + dev->clrerror(MTSETBLK); + } + } +#endif +#if defined(MTSETDRVBUFFER) + if (getuid() == 0) { /* Only root can do this */ + mt_com.mt_op = MTSETDRVBUFFER; + mt_com.mt_count = MT_ST_CLEARBOOLEANS; + if (!dev->has_cap(CAP_TWOEOF)) { + mt_com.mt_count |= MT_ST_TWO_FM; + } + if (dev->has_cap(CAP_EOM)) { + mt_com.mt_count |= MT_ST_FAST_MTEOM; + } + Dmsg0(100, "MTSETDRVBUFFER\n"); + if (dev->d_ioctl(dev->fd(), MTIOCTOP, (char *)&mt_com) < 0) { + dev->clrerror(MTSETDRVBUFFER); + } + } +#endif + return; +#endif + +#ifdef HAVE_NETBSD_OS + struct mtop mt_com; + if (dev->min_block_size == dev->max_block_size && + dev->min_block_size == 0) { /* variable block mode */ + mt_com.mt_op = MTSETBSIZ; + mt_com.mt_count = 0; + if (dev->d_ioctl(dev->fd(), MTIOCTOP, (char *)&mt_com) < 0) { + dev->clrerror(MTSETBSIZ); + } + /* Get notified at logical end of tape */ + mt_com.mt_op = MTEWARN; + mt_com.mt_count = 1; + if (dev->d_ioctl(dev->fd(), MTIOCTOP, (char *)&mt_com) < 0) { + dev->clrerror(MTEWARN); + } + } + return; +#endif + +#if HAVE_FREEBSD_OS || HAVE_OPENBSD_OS + struct mtop mt_com; + if (dev->min_block_size == dev->max_block_size && + dev->min_block_size == 0) { /* variable block mode */ + mt_com.mt_op = MTSETBSIZ; + mt_com.mt_count = 0; + if (dev->d_ioctl(dev->fd(), MTIOCTOP, (char *)&mt_com) < 0) { + dev->clrerror(MTSETBSIZ); + } + } +#if defined(MTIOCSETEOTMODEL) + uint32_t neof; + if (dev->has_cap(CAP_TWOEOF)) { + neof = 2; + } else { + neof = 1; + } + if (dev->d_ioctl(dev->fd(), MTIOCSETEOTMODEL, (caddr_t)&neof) < 0) { + berrno be; + dev->dev_errno = errno; /* save errno */ + Mmsg2(dev->errmsg, _("Unable to set eotmodel on device %s: ERR=%s\n"), + dev->print_name(), be.bstrerror(dev->dev_errno)); + Jmsg(dcr->jcr, M_FATAL, 0, dev->errmsg); + } +#endif + return; +#endif + +#ifdef HAVE_SUN_OS + struct mtop mt_com; + if (dev->min_block_size == dev->max_block_size && + dev->min_block_size == 0) { /* variable block mode */ + mt_com.mt_op = MTSRSZ; + mt_com.mt_count = 0; + if (dev->d_ioctl(dev->fd(), MTIOCTOP, (char *)&mt_com) < 0) { + dev->clrerror(MTSRSZ); + } + } + return; +#endif +} + +bool dev_get_os_pos(DEVICE *dev, struct mtget *mt_stat) +{ + Dmsg0(100, "dev_get_os_pos\n"); + return dev->has_cap(CAP_MTIOCGET) && + dev->d_ioctl(dev->fd(), MTIOCGET, (char *)mt_stat) == 0 && + mt_stat->mt_fileno >= 0; +} + +/* + * Return the status of the device. This was meant + * to be a generic routine. Unfortunately, it doesn't + * seem possible (at least I do not know how to do it + * currently), which means that for the moment, this + * routine has very little value. + * + * Returns: status + */ +uint32_t status_dev(DEVICE *dev) +{ + struct mtget mt_stat; + uint32_t stat = 0; + + if (dev->state & (ST_EOT | ST_WEOT)) { + stat |= BMT_EOD; + Pmsg0(-20, " EOD"); + } + if (dev->state & ST_EOF) { + stat |= BMT_EOF; + Pmsg0(-20, " EOF"); + } + if (dev->is_tape()) { + stat |= BMT_TAPE; + Pmsg0(-20,_(" Bacula status:")); + Pmsg2(-20,_(" file=%d block=%d\n"), dev->file, dev->block_num); + if (dev->d_ioctl(dev->fd(), MTIOCGET, (char *)&mt_stat) < 0) { + berrno be; + dev->dev_errno = errno; + Mmsg2(dev->errmsg, _("ioctl MTIOCGET error on %s. ERR=%s.\n"), + dev->print_name(), be.bstrerror()); + return 0; + } + Pmsg0(-20, _(" Device status:")); + +#if defined(HAVE_LINUX_OS) + if (GMT_EOF(mt_stat.mt_gstat)) { + stat |= BMT_EOF; + Pmsg0(-20, " EOF"); + } + if (GMT_BOT(mt_stat.mt_gstat)) { + stat |= BMT_BOT; + Pmsg0(-20, " BOT"); + } + if (GMT_EOT(mt_stat.mt_gstat)) { + stat |= BMT_EOT; + Pmsg0(-20, " EOT"); + } + if (GMT_SM(mt_stat.mt_gstat)) { + stat |= BMT_SM; + Pmsg0(-20, " SM"); + } + if (GMT_EOD(mt_stat.mt_gstat)) { + stat |= BMT_EOD; + Pmsg0(-20, " EOD"); + } + if (GMT_WR_PROT(mt_stat.mt_gstat)) { + stat |= BMT_WR_PROT; + Pmsg0(-20, " WR_PROT"); + } + if (GMT_ONLINE(mt_stat.mt_gstat)) { + stat |= BMT_ONLINE; + Pmsg0(-20, " ONLINE"); + } + if (GMT_DR_OPEN(mt_stat.mt_gstat)) { + stat |= BMT_DR_OPEN; + Pmsg0(-20, " DR_OPEN"); + } + if (GMT_IM_REP_EN(mt_stat.mt_gstat)) { + stat |= BMT_IM_REP_EN; + Pmsg0(-20, " IM_REP_EN"); + } +#elif defined(HAVE_WIN32) + if (GMT_EOF(mt_stat.mt_gstat)) { + stat |= BMT_EOF; + Pmsg0(-20, " EOF"); + } + if (GMT_BOT(mt_stat.mt_gstat)) { + stat |= BMT_BOT; + Pmsg0(-20, " BOT"); + } + if (GMT_EOT(mt_stat.mt_gstat)) { + stat |= BMT_EOT; + Pmsg0(-20, " EOT"); + } + if (GMT_EOD(mt_stat.mt_gstat)) { + stat |= BMT_EOD; + Pmsg0(-20, " EOD"); + } + if (GMT_WR_PROT(mt_stat.mt_gstat)) { + stat |= BMT_WR_PROT; + Pmsg0(-20, " WR_PROT"); + } + if (GMT_ONLINE(mt_stat.mt_gstat)) { + stat |= BMT_ONLINE; + Pmsg0(-20, " ONLINE"); + } + if (GMT_DR_OPEN(mt_stat.mt_gstat)) { + stat |= BMT_DR_OPEN; + Pmsg0(-20, " DR_OPEN"); + } + if (GMT_IM_REP_EN(mt_stat.mt_gstat)) { + stat |= BMT_IM_REP_EN; + Pmsg0(-20, " IM_REP_EN"); + } + +#endif /* !SunOS && !OSF */ + if (dev->has_cap(CAP_MTIOCGET)) { + Pmsg2(-20, _(" file=%d block=%d\n"), mt_stat.mt_fileno, mt_stat.mt_blkno); + } else { + Pmsg2(-20, _(" file=%d block=%d\n"), -1, -1); + } + } else { + stat |= BMT_ONLINE | BMT_BOT; + } + return stat; +} + +/* + * If implemented in system, clear the tape + * error status. + */ +void DEVICE::clrerror(int func) +{ + const char *msg = NULL; + char buf[100]; + + dev_errno = errno; /* save errno */ + if (errno == EIO) { + VolCatInfo.VolCatErrors++; + } + + if (!is_tape()) { + return; + } + + if (errno == ENOTTY || errno == ENOSYS) { /* Function not implemented */ + switch (func) { + case -1: + break; /* ignore message printed later */ + case MTWEOF: + msg = "WTWEOF"; + clear_cap(CAP_EOF); /* turn off feature */ + break; +#ifdef MTEOM + case MTEOM: + msg = "WTEOM"; + clear_cap(CAP_EOM); /* turn off feature */ + break; +#endif + case MTFSF: + msg = "MTFSF"; + clear_cap(CAP_FSF); /* turn off feature */ + break; + case MTBSF: + msg = "MTBSF"; + clear_cap(CAP_BSF); /* turn off feature */ + break; + case MTFSR: + msg = "MTFSR"; + clear_cap(CAP_FSR); /* turn off feature */ + break; + case MTBSR: + msg = "MTBSR"; + clear_cap(CAP_BSR); /* turn off feature */ + break; + case MTREW: + msg = "MTREW"; + break; +#ifdef MTSETBLK + case MTSETBLK: + msg = "MTSETBLK"; + break; +#endif +#ifdef MTSETDRVBUFFER + case MTSETDRVBUFFER: + msg = "MTSETDRVBUFFER"; + break; +#endif +#ifdef MTRESET + case MTRESET: + msg = "MTRESET"; + break; +#endif + +#ifdef MTSETBSIZ + case MTSETBSIZ: + msg = "MTSETBSIZ"; + break; +#endif +#ifdef MTSRSZ + case MTSRSZ: + msg = "MTSRSZ"; + break; +#endif +#ifdef MTLOAD + case MTLOAD: + msg = "MTLOAD"; + break; +#endif +#ifdef MTUNLOCK + case MTUNLOCK: + msg = "MTUNLOCK"; + break; +#endif + case MTOFFL: + msg = "MTOFFL"; + break; + default: + bsnprintf(buf, sizeof(buf), _("unknown func code %d"), func); + msg = buf; + break; + } + if (msg != NULL) { + dev_errno = ENOSYS; + Mmsg1(errmsg, _("I/O function \"%s\" not supported on this device.\n"), msg); + Emsg0(M_ERROR, 0, errmsg); + } + } + + /* + * Now we try different methods of clearing the error + * status on the drive so that it is not locked for + * further operations. + */ + + /* On some systems such as NetBSD, this clears all errors */ + get_os_tape_file(); + +/* Found on Solaris */ +#ifdef MTIOCLRERR +{ + d_ioctl(m_fd, MTIOCLRERR); + Dmsg0(200, "Did MTIOCLRERR\n"); +} +#endif + +/* Typically on FreeBSD */ +#ifdef MTIOCERRSTAT +{ + berrno be; + /* Read and clear SCSI error status */ + union mterrstat mt_errstat; + Dmsg2(200, "Doing MTIOCERRSTAT errno=%d ERR=%s\n", dev_errno, + be.bstrerror(dev_errno)); + d_ioctl(m_fd, MTIOCERRSTAT, (char *)&mt_errstat); +} +#endif + +/* Clear Subsystem Exception TRU64 */ +#ifdef MTCSE +{ + struct mtop mt_com; + mt_com.mt_op = MTCSE; + mt_com.mt_count = 1; + /* Clear any error condition on the tape */ + d_ioctl(m_fd, MTIOCTOP, (char *)&mt_com); + Dmsg0(200, "Did MTCSE\n"); +} +#endif +} diff --git a/bacula/src/stored/parse_bsr.c b/bacula/src/stored/parse_bsr.c index f9fb517bea..1cd2979b8c 100644 --- a/bacula/src/stored/parse_bsr.c +++ b/bacula/src/stored/parse_bsr.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2002-2012 Free Software Foundation Europe e.V. + Copyright (C) 2002-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Parse a Bootstrap Records (used for restores) @@ -36,29 +24,32 @@ #include "bacula.h" #include "stored.h" +static void s_err(const char *file, int line, LEX *lc, const char *msg, ...); +static bool add_restore_volume(JCR *jcr, VOL_LIST *vol); + typedef BSR * (ITEM_HANDLER)(LEX *lc, BSR *bsr); -static BSR *store_vol(LEX *lc, BSR *bsr); -static BSR *store_mediatype(LEX *lc, BSR *bsr); -static BSR *store_device(LEX *lc, BSR *bsr); static BSR *store_client(LEX *lc, BSR *bsr); -static BSR *store_job(LEX *lc, BSR *bsr); -static BSR *store_jobid(LEX *lc, BSR *bsr); static BSR *store_count(LEX *lc, BSR *bsr); -static BSR *store_jobtype(LEX *lc, BSR *bsr); -static BSR *store_joblevel(LEX *lc, BSR *bsr); +static BSR *store_device(LEX *lc, BSR *bsr); +static BSR *store_exclude(LEX *lc, BSR *bsr); +static BSR *store_fileregex(LEX *lc, BSR *bsr); static BSR *store_findex(LEX *lc, BSR *bsr); +static BSR *store_include(LEX *lc, BSR *bsr); +static BSR *store_jobid(LEX *lc, BSR *bsr); +static BSR *store_joblevel(LEX *lc, BSR *bsr); +static BSR *store_job(LEX *lc, BSR *bsr); +static BSR *store_jobtype(LEX *lc, BSR *bsr); +static BSR *store_mediatype(LEX *lc, BSR *bsr); +static BSR *store_nothing(LEX *lc, BSR *bsr); static BSR *store_sessid(LEX *lc, BSR *bsr); -static BSR *store_volfile(LEX *lc, BSR *bsr); -static BSR *store_volblock(LEX *lc, BSR *bsr); -static BSR *store_voladdr(LEX *lc, BSR *bsr); static BSR *store_sesstime(LEX *lc, BSR *bsr); -static BSR *store_include(LEX *lc, BSR *bsr); -static BSR *store_exclude(LEX *lc, BSR *bsr); -static BSR *store_stream(LEX *lc, BSR *bsr); static BSR *store_slot(LEX *lc, BSR *bsr); -static BSR *store_fileregex(LEX *lc, BSR *bsr); -static BSR *store_nothing(LEX *lc, BSR *bsr); +static BSR *store_stream(LEX *lc, BSR *bsr); +static BSR *store_voladdr(LEX *lc, BSR *bsr); +static BSR *store_volblock(LEX *lc, BSR *bsr); +static BSR *store_volfile(LEX *lc, BSR *bsr); +static BSR *store_vol(LEX *lc, BSR *bsr); static bool is_fast_rejection_ok(BSR *bsr); static bool is_positioning_ok(BSR *bsr); @@ -71,27 +62,27 @@ struct kw_items { * List of all keywords permitted in bsr files and their handlers */ struct kw_items items[] = { - {"volume", store_vol}, - {"mediatype", store_mediatype}, - {"client", store_client}, - {"job", store_job}, - {"jobid", store_jobid}, - {"count", store_count}, + {"client", store_client}, + {"count", store_count}, + {"device", store_device}, + {"exclude", store_exclude}, {"fileindex", store_findex}, - {"jobtype", store_jobtype}, - {"joblevel", store_joblevel}, - {"volsessionid", store_sessid}, - {"volsessiontime", store_sesstime}, - {"include", store_include}, - {"exclude", store_exclude}, - {"volfile", store_volfile}, - {"volblock", store_volblock}, - {"voladdr", store_voladdr}, - {"stream", store_stream}, - {"slot", store_slot}, - {"device", store_device}, {"fileregex", store_fileregex}, - {"storage", store_nothing}, + {"include", store_include}, + {"jobid", store_jobid}, + {"joblevel", store_joblevel}, + {"job", store_job}, + {"jobtype", store_jobtype}, + {"mediatype", store_mediatype}, + {"slot", store_slot}, + {"storage", store_nothing}, + {"stream", store_stream}, + {"voladdr", store_voladdr}, + {"volblock", store_volblock}, + {"volume", store_vol}, + {"volfile", store_volfile}, + {"volsessionid", store_sessid}, + {"volsessiontime", store_sesstime}, {NULL, NULL} }; @@ -105,30 +96,6 @@ static BSR *new_bsr() return bsr; } -/* - * Format a scanner error message - */ -static void s_err(const char *file, int line, LEX *lc, const char *msg, ...) -{ - JCR *jcr = (JCR *)(lc->caller_ctx); - va_list arg_ptr; - char buf[MAXSTRING]; - - va_start(arg_ptr, msg); - bvsnprintf(buf, sizeof(buf), msg, arg_ptr); - va_end(arg_ptr); - - if (jcr) { - Jmsg(jcr, M_FATAL, 0, _("Bootstrap file error: %s\n" -" : Line %d, col %d of file %s\n%s\n"), - buf, lc->line_no, lc->col_no, lc->fname, lc->line); - } else { - e_msg(file, line, M_FATAL, 0, _("Bootstrap file error: %s\n" -" : Line %d, col %d of file %s\n%s\n"), - buf, lc->line_no, lc->col_no, lc->fname, lc->line); - } -} - /********************************************************************* * @@ -196,105 +163,46 @@ BSR *parse_bsr(JCR *jcr, char *fname) return root_bsr; } -static bool is_fast_rejection_ok(BSR *bsr) -{ - /* - * Although, this can be optimized, for the moment, require - * all bsrs to have both sesstime and sessid set before - * we do fast rejection. - */ - for ( ; bsr; bsr=bsr->next) { - if (!(bsr->sesstime && bsr->sessid)) { - return false; - } - } - return true; -} - -static bool is_positioning_ok(BSR *bsr) -{ - /* - * Every bsr should have a volfile entry and a volblock entry - * or a VolAddr - * if we are going to use positioning - */ - for ( ; bsr; bsr=bsr->next) { - if (!((bsr->volfile && bsr->volblock) || bsr->voladdr)) { - return false; - } - } - return true; -} - -static BSR *store_vol(LEX *lc, BSR *bsr) +static BSR *store_client(LEX *lc, BSR *bsr) { int token; - BSR_VOLUME *volume; - char *p, *n; + BSR_CLIENT *client; - token = lex_get_token(lc, T_STRING); - if (token == T_ERROR) { - return NULL; - } - if (bsr->volume) { - bsr->next = new_bsr(); - bsr->next->prev = bsr; - bsr = bsr->next; - } - /* This may actually be more than one volume separated by a | - * If so, separate them. - */ - for (p=lc->str; p && *p; ) { - n = strchr(p, '|'); - if (n) { - *n++ = 0; + for (;;) { + token = lex_get_token(lc, T_NAME); + if (token == T_ERROR) { + return NULL; } - volume = (BSR_VOLUME *)malloc(sizeof(BSR_VOLUME)); - memset(volume, 0, sizeof(BSR_VOLUME)); - bstrncpy(volume->VolumeName, p, sizeof(volume->VolumeName)); - /* Add it to the end of the volume chain */ - if (!bsr->volume) { - bsr->volume = volume; + client = (BSR_CLIENT *)malloc(sizeof(BSR_CLIENT)); + memset(client, 0, sizeof(BSR_CLIENT)); + bstrncpy(client->ClientName, lc->str, sizeof(client->ClientName)); + /* Add it to the end of the client chain */ + if (!bsr->client) { + bsr->client = client; } else { - BSR_VOLUME *bc = bsr->volume; + BSR_CLIENT *bc = bsr->client; for ( ;bc->next; bc=bc->next) { } - bc->next = volume; + bc->next = client; + } + token = lex_get_token(lc, T_ALL); + if (token != T_COMMA) { + break; } - p = n; - } - return bsr; -} - -/* Shove the MediaType in each Volume in the current bsr */ -static BSR *store_mediatype(LEX *lc, BSR *bsr) -{ - int token; - - token = lex_get_token(lc, T_STRING); - if (token == T_ERROR) { - return NULL; - } - if (!bsr->volume) { - Emsg1(M_ERROR,0, _("MediaType %s in bsr at inappropriate place.\n"), - lc->str); - return bsr; - } - BSR_VOLUME *bv; - for (bv=bsr->volume; bv; bv=bv->next) { - bstrncpy(bv->MediaType, lc->str, sizeof(bv->MediaType)); } return bsr; } -static BSR *store_nothing(LEX *lc, BSR *bsr) +static BSR *store_count(LEX *lc, BSR *bsr) { int token; - token = lex_get_token(lc, T_STRING); + token = lex_get_token(lc, T_PINT32); if (token == T_ERROR) { return NULL; } + bsr->count = lc->pint32_val; + scan_to_eol(lc); return bsr; } @@ -319,69 +227,6 @@ static BSR *store_device(LEX *lc, BSR *bsr) return bsr; } - - -static BSR *store_client(LEX *lc, BSR *bsr) -{ - int token; - BSR_CLIENT *client; - - for (;;) { - token = lex_get_token(lc, T_NAME); - if (token == T_ERROR) { - return NULL; - } - client = (BSR_CLIENT *)malloc(sizeof(BSR_CLIENT)); - memset(client, 0, sizeof(BSR_CLIENT)); - bstrncpy(client->ClientName, lc->str, sizeof(client->ClientName)); - /* Add it to the end of the client chain */ - if (!bsr->client) { - bsr->client = client; - } else { - BSR_CLIENT *bc = bsr->client; - for ( ;bc->next; bc=bc->next) - { } - bc->next = client; - } - token = lex_get_token(lc, T_ALL); - if (token != T_COMMA) { - break; - } - } - return bsr; -} - -static BSR *store_job(LEX *lc, BSR *bsr) -{ - int token; - BSR_JOB *job; - - for (;;) { - token = lex_get_token(lc, T_NAME); - if (token == T_ERROR) { - return NULL; - } - job = (BSR_JOB *)malloc(sizeof(BSR_JOB)); - memset(job, 0, sizeof(BSR_JOB)); - bstrncpy(job->Job, lc->str, sizeof(job->Job)); - /* Add it to the end of the client chain */ - if (!bsr->job) { - bsr->job = job; - } else { - /* Add to end of chain */ - BSR_JOB *bc = bsr->job; - for ( ;bc->next; bc=bc->next) - { } - bc->next = job; - } - token = lex_get_token(lc, T_ALL); - if (token != T_COMMA) { - break; - } - } - return bsr; -} - static BSR *store_findex(LEX *lc, BSR *bsr) { int token; @@ -414,6 +259,32 @@ static BSR *store_findex(LEX *lc, BSR *bsr) return bsr; } +static BSR *store_fileregex(LEX *lc, BSR *bsr) +{ + int token; + int rc; + + token = lex_get_token(lc, T_STRING); + if (token == T_ERROR) { + return NULL; + } + + if (bsr->fileregex) free(bsr->fileregex); + bsr->fileregex = bstrdup(lc->str); + + if (bsr->fileregex_re == NULL) + bsr->fileregex_re = (regex_t *)bmalloc(sizeof(regex_t)); + + rc = regcomp(bsr->fileregex_re, bsr->fileregex, REG_EXTENDED|REG_NOSUB); + if (rc != 0) { + char prbuf[500]; + regerror(rc, bsr->fileregex_re, prbuf, sizeof(prbuf)); + Emsg2(M_ERROR, 0, _("REGEX '%s' compile error. ERR=%s\n"), + bsr->fileregex, prbuf); + return NULL; + } + return bsr; +} static BSR *store_jobid(LEX *lc, BSR *bsr) { @@ -434,10 +305,57 @@ static BSR *store_jobid(LEX *lc, BSR *bsr) bsr->JobId = jobid; } else { /* Add to end of chain */ - BSR_JOBID *bs = bsr->JobId; - for ( ;bs->next; bs=bs->next) - { } - bs->next = jobid; + BSR_JOBID *bs = bsr->JobId; + for ( ;bs->next; bs=bs->next) + { } + bs->next = jobid; + } + token = lex_get_token(lc, T_ALL); + if (token != T_COMMA) { + break; + } + } + return bsr; +} + + +static BSR *store_jobtype(LEX *lc, BSR *bsr) +{ + /* *****FIXME****** */ + Pmsg0(-1, _("JobType not yet implemented\n")); + return bsr; +} + + +static BSR *store_joblevel(LEX *lc, BSR *bsr) +{ + /* *****FIXME****** */ + Pmsg0(-1, _("JobLevel not yet implemented\n")); + return bsr; +} + +static BSR *store_job(LEX *lc, BSR *bsr) +{ + int token; + BSR_JOB *job; + + for (;;) { + token = lex_get_token(lc, T_NAME); + if (token == T_ERROR) { + return NULL; + } + job = (BSR_JOB *)malloc(sizeof(BSR_JOB)); + memset(job, 0, sizeof(BSR_JOB)); + bstrncpy(job->Job, lc->str, sizeof(job->Job)); + /* Add it to the end of the client chain */ + if (!bsr->job) { + bsr->job = job; + } else { + /* Add to end of chain */ + BSR_JOB *bc = bsr->job; + for ( ;bc->next; bc=bc->next) + { } + bc->next = job; } token = lex_get_token(lc, T_ALL); if (token != T_COMMA) { @@ -447,65 +365,111 @@ static BSR *store_jobid(LEX *lc, BSR *bsr) return bsr; } - -static BSR *store_count(LEX *lc, BSR *bsr) +/* Shove the MediaType in each Volume in the current bsr */ +static BSR *store_mediatype(LEX *lc, BSR *bsr) { int token; - token = lex_get_token(lc, T_PINT32); + token = lex_get_token(lc, T_STRING); if (token == T_ERROR) { return NULL; } - bsr->count = lc->pint32_val; - scan_to_eol(lc); + if (!bsr->volume) { + Emsg1(M_ERROR,0, _("MediaType %s in bsr at inappropriate place.\n"), + lc->str); + return bsr; + } + BSR_VOLUME *bv; + for (bv=bsr->volume; bv; bv=bv->next) { + bstrncpy(bv->MediaType, lc->str, sizeof(bv->MediaType)); + } return bsr; } -static BSR *store_fileregex(LEX *lc, BSR *bsr) +static BSR *store_vol(LEX *lc, BSR *bsr) { int token; - int rc; - + BSR_VOLUME *volume; + char *p, *n; + token = lex_get_token(lc, T_STRING); if (token == T_ERROR) { return NULL; } - - if (bsr->fileregex) free(bsr->fileregex); - bsr->fileregex = bstrdup(lc->str); - - if (bsr->fileregex_re == NULL) - bsr->fileregex_re = (regex_t *)bmalloc(sizeof(regex_t)); - - rc = regcomp(bsr->fileregex_re, bsr->fileregex, REG_EXTENDED|REG_NOSUB); - if (rc != 0) { - char prbuf[500]; - regerror(rc, bsr->fileregex_re, prbuf, sizeof(prbuf)); - Emsg2(M_ERROR, 0, _("REGEX '%s' compile error. ERR=%s\n"), - bsr->fileregex, prbuf); - return NULL; + if (bsr->volume) { + bsr->next = new_bsr(); + bsr->next->prev = bsr; + bsr = bsr->next; + } + /* This may actually be more than one volume separated by a | + * If so, separate them. + */ + for (p=lc->str; p && *p; ) { + n = strchr(p, '|'); + if (n) { + *n++ = 0; + } + volume = (BSR_VOLUME *)malloc(sizeof(BSR_VOLUME)); + memset(volume, 0, sizeof(BSR_VOLUME)); + bstrncpy(volume->VolumeName, p, sizeof(volume->VolumeName)); + /* Add it to the end of the volume chain */ + if (!bsr->volume) { + bsr->volume = volume; + } else { + BSR_VOLUME *bc = bsr->volume; + for ( ;bc->next; bc=bc->next) + { } + bc->next = volume; + } + p = n; } return bsr; } -static BSR *store_jobtype(LEX *lc, BSR *bsr) +static bool is_positioning_ok(BSR *bsr) { - /* *****FIXME****** */ - Pmsg0(-1, _("JobType not yet implemented\n")); - return bsr; + /* + * Every bsr should have a volfile entry and a volblock entry + * or a VolAddr + * if we are going to use positioning + */ + for ( ; bsr; bsr=bsr->next) { + if (!((bsr->volfile && bsr->volblock) || bsr->voladdr)) { + return false; + } + } + return true; +} + +static bool is_fast_rejection_ok(BSR *bsr) +{ + /* + * Although, this can be optimized, for the moment, require + * all bsrs to have both sesstime and sessid set before + * we do fast rejection. + */ + for ( ; bsr; bsr=bsr->next) { + if (!(bsr->sesstime && bsr->sessid)) { + return false; + } + } + return true; } -static BSR *store_joblevel(LEX *lc, BSR *bsr) +static BSR *store_nothing(LEX *lc, BSR *bsr) { - /* *****FIXME****** */ - Pmsg0(-1, _("JobLevel not yet implemented\n")); + int token; + + token = lex_get_token(lc, T_STRING); + if (token == T_ERROR) { + return NULL; + } return bsr; } - /* * Routine to handle Volume start/end file */ @@ -836,7 +800,7 @@ void dump_sesstime(BSR_SESSTIME *sesstime) void dump_bsr(BSR *bsr, bool recurse) { - int save_debug = debug_level; + int64_t save_debug = debug_level; debug_level = 1; if (!bsr) { Pmsg0(-1, _("BSR is NULL\n")); @@ -949,59 +913,6 @@ static VOL_LIST *new_restore_volume() return vol; } -/* - * Add current volume to end of list, only if the Volume - * is not already in the list. - * - * returns: 1 if volume added - * 0 if volume already in list - */ -static bool add_restore_volume(JCR *jcr, VOL_LIST *vol) -{ - VOL_LIST *next = jcr->VolList; - - /* Add volume to volume manager's read list */ - add_read_volume(jcr, vol->VolumeName); - - if (!next) { /* list empty ? */ - jcr->VolList = vol; /* yes, add volume */ - } else { - /* Loop through all but last */ - for ( ; next->next; next=next->next) { - if (strcmp(vol->VolumeName, next->VolumeName) == 0) { - /* Save smallest start file */ - if (vol->start_file < next->start_file) { - next->start_file = vol->start_file; - } - return false; /* already in list */ - } - } - /* Check last volume in list */ - if (strcmp(vol->VolumeName, next->VolumeName) == 0) { - if (vol->start_file < next->start_file) { - next->start_file = vol->start_file; - } - return false; /* already in list */ - } - next->next = vol; /* add volume */ - } - return true; -} - -void free_restore_volume_list(JCR *jcr) -{ - VOL_LIST *vol = jcr->VolList; - VOL_LIST *tmp; - - for ( ; vol; ) { - tmp = vol->next; - remove_read_volume(jcr, vol->VolumeName); - free(vol); - vol = tmp; - } - jcr->VolList = NULL; -} - /* * Create a list of Volumes (and Slots and Start positions) to be * used in the current restore job. @@ -1018,7 +929,7 @@ void create_restore_volume_list(JCR *jcr) jcr->CurReadVolume = 0; if (jcr->bsr) { BSR *bsr = jcr->bsr; - if (!bsr->volume || !bsr->volume->VolumeName) { + if (!bsr->volume || !bsr->volume->VolumeName[0]) { return; } for ( ; bsr; bsr=bsr->next) { @@ -1070,3 +981,81 @@ void create_restore_volume_list(JCR *jcr) } } } + +/* + * Add current volume to end of list, only if the Volume + * is not already in the list. + * + * returns: 1 if volume added + * 0 if volume already in list + */ +static bool add_restore_volume(JCR *jcr, VOL_LIST *vol) +{ + VOL_LIST *next = jcr->VolList; + + /* Add volume to volume manager's read list */ + add_read_volume(jcr, vol->VolumeName); + + if (!next) { /* list empty ? */ + jcr->VolList = vol; /* yes, add volume */ + } else { + /* Loop through all but last */ + for ( ; next->next; next=next->next) { + if (strcmp(vol->VolumeName, next->VolumeName) == 0) { + /* Save smallest start file */ + if (vol->start_file < next->start_file) { + next->start_file = vol->start_file; + } + return false; /* already in list */ + } + } + /* Check last volume in list */ + if (strcmp(vol->VolumeName, next->VolumeName) == 0) { + if (vol->start_file < next->start_file) { + next->start_file = vol->start_file; + } + return false; /* already in list */ + } + next->next = vol; /* add volume */ + } + return true; +} + +void free_restore_volume_list(JCR *jcr) +{ + VOL_LIST *vol = jcr->VolList; + VOL_LIST *tmp; + + for ( ; vol; ) { + tmp = vol->next; + remove_read_volume(jcr, vol->VolumeName); + free(vol); + vol = tmp; + } + jcr->VolList = NULL; +} + + +/* + * Format a scanner error message + */ +static void s_err(const char *file, int line, LEX *lc, const char *msg, ...) +{ + JCR *jcr = (JCR *)(lc->caller_ctx); + va_list arg_ptr; + char buf[MAXSTRING]; + + va_start(arg_ptr, msg); + bvsnprintf(buf, sizeof(buf), msg, arg_ptr); + va_end(arg_ptr); + + if (jcr) { + Jmsg(jcr, M_FATAL, 0, _("Bootstrap file error: %s\n" +" : Line %d, col %d of file %s\n%s\n"), + buf, lc->line_no, lc->col_no, lc->fname, lc->line); + } else { + e_msg(file, line, M_FATAL, 0, _("Bootstrap file error: %s\n" +" : Line %d, col %d of file %s\n%s\n"), + buf, lc->line_no, lc->col_no, lc->fname, lc->line); + } +} diff --git a/bacula/src/stored/protos.h b/bacula/src/stored/protos.h index ed9badf6ed..a0572acecd 100644 --- a/bacula/src/stored/protos.h +++ b/bacula/src/stored/protos.h @@ -1,33 +1,22 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2012 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* - * Protypes for stored -- Kern Sibbald MM + * Protypes for stored * + * Written by Kern Sibbald, MM */ /* From stored.c */ @@ -38,7 +27,7 @@ DCR *acquire_device_for_append(DCR *dcr); bool acquire_device_for_read(DCR *dcr); bool release_device(DCR *dcr); bool clean_device(DCR *dcr); -DCR *new_dcr(JCR *jcr, DCR *dcr, DEVICE *dev); +DCR *new_dcr(JCR *jcr, DCR *dcr, DEVICE *dev, bool writing=true); void free_dcr(DCR *dcr); /* From append.c */ @@ -53,7 +42,7 @@ bool dir_get_volume_info(DCR *dcr, enum get_vol_info_rw); bool dir_find_next_appendable_volume(DCR *dcr); bool dir_update_volume_info(DCR *dcr, bool label, bool update_LastWritten); bool dir_ask_sysop_to_create_appendable_volume(DCR *dcr); -bool dir_ask_sysop_to_mount_volume(DCR *dcr, int mode); +bool dir_ask_sysop_to_mount_volume(DCR *dcr, bool read_access); bool dir_update_file_attributes(DCR *dcr, DEV_RECORD *rec); bool dir_send_job_status(JCR *jcr); bool dir_create_jobmedia_record(DCR *dcr, bool zero=false); @@ -63,10 +52,11 @@ bool dir_update_changer(JCR *jcr, AUTOCHANGER *changer); /* authenticate.c */ int authenticate_director(JCR *jcr); int authenticate_filed(JCR *jcr); +bool authenticate_storagedaemon(JCR *jcr, char *Job); /* From autochanger.c */ bool init_autochangers(); -int autoload_device(DCR *dcr, int writing, BSOCK *dir); +int autoload_device(DCR *dcr, bool writing, BSOCK *dir); bool autochanger_cmd(DCR *dcr, BSOCK *dir, const char *cmd); bool unload_autochanger(DCR *dcr, int loaded); bool unload_dev(DCR *dcr, DEVICE *dev); @@ -82,11 +72,19 @@ void empty_block(DEV_BLOCK *block); void free_block(DEV_BLOCK *block); void print_block_read_errors(JCR *jcr, DEV_BLOCK *block); void ser_block_header(DEV_BLOCK *block); +bool is_block_empty(DEV_BLOCK *block); +bool terminate_writing_volume(DCR *dcr); + +/* From block_util.c */ +bool terminate_writing_volume(DCR *dcr); +bool user_volume_size_reached(DCR *dcr, bool quiet); +bool check_for_newvol_or_newfile(DCR *dcr); /* From butil.c -- utilities for SD tool programs */ +void setup_me(); void print_ls_output(const char *fname, const char *link, int type, struct stat *statp); JCR *setup_jcr(const char *name, char *dev_name, BSR *bsr, - const char *VolumeName, int mode); + const char *VolumeName, bool writing); void display_tape_error_status(JCR *jcr, DEVICE *dev); @@ -103,12 +101,9 @@ void init_device_wait_timers(DCR *dcr); void init_jcr_device_wait_timers(JCR *jcr); bool double_dev_wait_time(DEVICE *dev); -/* Get info about device */ -char * dev_vol_name(DEVICE *dev); - /* From dvd.c */ int dvd_open_next_part(DCR *dcr); -bool dvd_write_part(DCR *dcr); +bool dvd_write_part(DCR *dcr); bool dvd_close_job(DCR *dcr); void make_mounted_dvd_filename(DEVICE *dev, POOL_MEM &archive_name); void make_spooled_dvd_filename(DEVICE *dev, POOL_MEM &archive_name); @@ -119,7 +114,7 @@ boffset_t lseek_dvd(DCR *dcr, boffset_t offset, int whence); void dvd_remove_empty_part(DCR *dcr); /* From device.c */ -bool open_device(DCR *dcr); +bool open_dev(DCR *dcr); bool first_open_device(DCR *dcr); bool fixup_device_block_write_error(DCR *dcr, int retries=4); void set_start_vol_position(DCR *dcr); @@ -132,18 +127,19 @@ void *handle_connection_request(void *arg); /* From fd_cmds.c */ void run_job(JCR *jcr); -void do_fd_commands(JCR *jcr); +void do_client_commands(JCR *jcr); /* From job.c */ void stored_free_jcr(JCR *jcr); void connection_from_filed(void *arg); -void handle_filed_connection(BSOCK *fd, char *job_name); +void handle_filed_connection(BSOCK *fd, char *job_name, + int fdversion, int sdversion); /* From label.c */ int read_dev_volume_label(DCR *dcr); int read_dvd_volume_label(DCR *dcr, bool write); void create_session_label(DCR *dcr, DEV_RECORD *rec, int label); -void create_volume_label(DEVICE *dev, const char *VolName, const char *PoolName, bool dvdnow); +void create_volume_header(DEVICE *dev, const char *VolName, const char *PoolName, bool dvdnow); #define ANSI_VOL_LABEL 0 #define ANSI_EOF_LABEL 1 #define ANSI_EOV_LABEL 2 @@ -154,7 +150,7 @@ void dump_volume_label(DEVICE *dev); void dump_label_record(DEVICE *dev, DEV_RECORD *rec, int verbose); bool unser_volume_label(DEVICE *dev, DEV_RECORD *rec); bool unser_session_label(SESSION_LABEL *label, DEV_RECORD *rec); -bool write_new_volume_label_to_dev(DCR *dcr, const char *VolName, +bool write_new_volume_label_to_dev(DCR *dcr, const char *VolName, const char *PoolName, bool relabel, bool dvdnow); /* From locks.c */ @@ -173,7 +169,7 @@ int match_bsr_block(BSR *bsr, DEV_BLOCK *block); void position_bsr_block(BSR *bsr, DEV_BLOCK *block); BSR *find_next_bsr(BSR *root_bsr, DEVICE *dev); bool is_this_bsr_done(BSR *bsr, DEV_RECORD *rec); -uint64_t get_bsr_start_addr(BSR *bsr, +uint64_t get_bsr_start_addr(BSR *bsr, uint32_t *file=NULL, uint32_t *block=NULL); @@ -197,7 +193,7 @@ bool read_record_from_block(DCR *dcr, DEV_RECORD *rec); DEV_RECORD *new_record(); void free_record(DEV_RECORD *rec); void empty_record(DEV_RECORD *rec); -uint64_t get_record_address(DEV_RECORD *rec); +uint64_t get_record_address(DEV_RECORD *rec); /* From read_record.c */ bool read_records(DCR *dcr, @@ -207,11 +203,6 @@ bool read_records(DCR *dcr, /* From reserve.c */ void init_reservations_lock(); void term_reservations_lock(); -void _lock_reservations(const char *file="**Unknown**", int line=0); -void _unlock_reservations(); -void _lock_volumes(const char *file="**Unknown**", int line=0); -void _unlock_volumes(); -void unreserve_device(DCR *dcr); void send_drive_reserve_messages(JCR *jcr, void sendit(const char *msg, int len, void *sarg), void *arg); bool find_suitable_device_for_job(JCR *jcr, RCTX &rctx); int search_res_for_device(RCTX &rctx); @@ -219,49 +210,15 @@ void release_reserve_messages(JCR *jcr); extern int reservations_lock_count; -#ifdef SD_DEBUG_LOCK - -#define lock_reservations() \ - do { Dmsg3(sd_dbglvl, "lock_reservations at %s:%d precnt=%d\n", \ - __FILE__, __LINE__, \ - reservations_lock_count); \ - _lock_reservations(__FILE__, __LINE__); \ - Dmsg0(sd_dbglvl, "lock_reservations: got lock\n"); \ - } while (0) -#define unlock_reservations() \ - do { Dmsg3(sd_dbglvl, "unlock_reservations at %s:%d precnt=%d\n", \ - __FILE__, __LINE__, \ - reservations_lock_count); \ - _unlock_reservations(); } while (0) - -#define lock_volumes() \ - do { Dmsg3(sd_dbglvl, "lock_volumes at %s:%d precnt=%d\n", \ - __FILE__, __LINE__, \ - vol_list_lock_count); \ - _lock_volumes(__FILE__, __LINE__); \ - Dmsg0(sd_dbglvl, "lock_volumes: got lock\n"); \ - } while (0) - -#define unlock_volumes() \ - do { Dmsg3(sd_dbglvl, "unlock_volumes at %s:%d precnt=%d\n", \ - __FILE__, __LINE__, \ - vol_list_lock_count); \ - _unlock_volumes(); } while (0) - -#else - -#define lock_reservations() _lock_reservations(__FILE__, __LINE__) -#define unlock_reservations() _unlock_reservations() -#define lock_volumes() _lock_volumes(__FILE__, __LINE__) -#define unlock_volumes() _unlock_volumes() - -#endif +/* From status.c */ +void _dbg_list_one_device(DEVICE *dev, const char *f, int l); +#define dbg_list_one_device(x, dev) if (chk_dbglvl(x)) \ + _dbg_list_one_device(dev, __FILE__, __LINE__) /* From vol_mgr.c */ void init_vol_list_lock(); void term_vol_list_lock(); VOLRES *reserve_volume(DCR *dcr, const char *VolumeName); -VOLRES *find_volume(const char *VolumeName); bool free_volume(DEVICE *dev); bool is_vol_list_empty(); dlist *dup_vol_list(JCR *jcr); @@ -289,4 +246,9 @@ void list_spool_stats (void sendit(const char *msg, int len, void *s /* From wait.c */ int wait_for_sysop(DCR *dcr); -bool wait_for_device(JCR *jcr, int &retries); +bool wait_for_any_device(JCR *jcr, int &retries); +bool wait_for_device(DCR *dcr, int &retries); + +/* stored_conf.c */ +void store_devtype(LEX *lc, RES_ITEM *item, int index, int pass); +void store_maxblocksize(LEX *lc, RES_ITEM *item, int index, int pass); diff --git a/bacula/src/stored/pythonsd.c b/bacula/src/stored/pythonsd.c deleted file mode 100644 index 978cc656d8..0000000000 --- a/bacula/src/stored/pythonsd.c +++ /dev/null @@ -1,282 +0,0 @@ -/* - Bacula® - The Network Backup Solution - - Copyright (C) 2005-2011 Free Software Foundation Europe e.V. - - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. - - Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. -*/ -/* - * - * Bacula interface to Python for the Storage Daemon - * - * Kern Sibbald, January MMV - * - * SD Python interface removed 17 December 2011 (KES) - * - */ - - -#include "bacula.h" -#include "stored.h" - -#ifdef xxxxHAVE_PYTHON -#undef _POSIX_C_SOURCE -#include - -#include - -static PyObject *set_job_events(PyObject *self, PyObject *arg); -static PyObject *job_write(PyObject *self, PyObject *arg); - -PyMethodDef JobMethods[] = { - {"set_events", set_job_events, METH_VARARGS, "Set Job events"}, - {"write", job_write, METH_VARARGS, "Write to output"}, - {NULL, NULL, 0, NULL} /* last item */ -}; - - -struct s_vars { - const char *name; - const char *fmt; -}; - -static struct s_vars getvars[] = { - { NT_("Job"), "s"}, /* 0 */ - { NT_("SDName"), "s"}, /* 1 */ - { NT_("Level"), "s"}, /* 2 */ - { NT_("Type"), "s"}, /* 3 */ - { NT_("JobId"), "i"}, /* 4 */ - { NT_("Client"), "s"}, /* 5 */ - { NT_("Pool"), "s"}, /* 6 */ - { NT_("MediaType"), "s"}, /* 7 */ - { NT_("JobName"), "s"}, /* 8 */ - { NT_("JobStatus"), "s"}, /* 9 */ - { NT_("VolumeName"), "s"}, /* 10 */ - { NT_("Device"), "s"}, /* 11 */ - - { NULL, NULL} -}; - - -/* Writable variables */ -static struct s_vars setvars[] = { - { NT_("JobReport"), "s"}, - - { NULL, NULL} -}; - - -/* Return Job variables */ -PyObject *job_getattr(PyObject *self, char *attrname) -{ - JCR *jcr; - bool found = false; - int i; - char buf[10]; - char errmsg[200]; - - Dmsg1(100, "In job_getattr=%s\n", attrname); - jcr = get_jcr_from_PyObject(self); - if (!jcr) { - bstrncpy(errmsg, _("Job pointer not found."), sizeof(errmsg)); - goto bail_out; - } - - for (i=0; getvars[i].name; i++) { - if (strcmp(getvars[i].name, attrname) == 0) { - found = true; - break; - } - } - if (!found) { - /* Try our methods */ - return Py_FindMethod(JobMethods, self, attrname); - } - switch (i) { - case 0: /* Job */ - return Py_BuildValue((char *)getvars[i].fmt, jcr->job_name); /* Non-unique name */ - case 1: /* SD's name */ - return Py_BuildValue((char *)getvars[i].fmt, my_name); - case 2: /* level */ - return Py_BuildValue((char *)getvars[i].fmt, job_level_to_str(jcr->getJobLevel())); - case 3: /* type */ - return Py_BuildValue((char *)getvars[i].fmt, job_type_to_str(jcr->getJobType())); - case 4: /* JobId */ - return Py_BuildValue((char *)getvars[i].fmt, jcr->JobId); - case 5: /* Client */ - return Py_BuildValue((char *)getvars[i].fmt, jcr->client_name); - case 6: /* Pool */ - return Py_BuildValue((char *)getvars[i].fmt, jcr->dcr->pool_name); - case 7: /* MediaType */ - return Py_BuildValue((char *)getvars[i].fmt, jcr->dcr->media_type); - case 8: /* JobName */ - return Py_BuildValue((char *)getvars[i].fmt, jcr->Job); - case 9: /* JobStatus */ - buf[1] = 0; - buf[0] = jcr->JobStatus; - return Py_BuildValue((char *)getvars[i].fmt, buf); - case 10: - return Py_BuildValue((char *)getvars[i].fmt, jcr->dcr->VolumeName); - case 11: - return Py_BuildValue((char *)getvars[i].fmt, jcr->dcr->dev_name); - } - bsnprintf(errmsg, sizeof(errmsg), _("Attribute %s not found."), attrname); -bail_out: - PyErr_SetString(PyExc_AttributeError, errmsg); - return NULL; -} - -int job_setattr(PyObject *self, char *attrname, PyObject *value) -{ - JCR *jcr; - bool found = false; - char *strval = NULL; - char buf[200]; - char *errmsg; - int i; - - Dmsg2(100, "In job_setattr=%s val=%p.\n", attrname, value); - if (value == NULL) { /* Cannot delete variables */ - bsnprintf(buf, sizeof(buf), _("Cannot delete attribute %s"), attrname); - errmsg = buf; - goto bail_out; - } - jcr = get_jcr_from_PyObject(self); - if (!jcr) { - errmsg = _("Job pointer not found."); - goto bail_out; - } - - /* Find attribute name in list */ - for (i=0; setvars[i].name; i++) { - if (strcmp(setvars[i].name, attrname) == 0) { - found = true; - break; - } - } - if (!found) { - goto not_found; - } - /* Get argument value ***FIXME*** handle other formats */ - if (setvars[i].fmt != NULL) { - if (!PyArg_Parse(value, (char *)setvars[i].fmt, &strval)) { - PyErr_SetString(PyExc_TypeError, _("Read-only attribute")); - return -1; - } - } - switch (i) { - case 0: /* JobReport */ - Jmsg(jcr, M_INFO, 0, "%s", strval); - return 0; - } -not_found: - bsnprintf(buf, sizeof(buf), _("Cannot find attribute %s"), attrname); - errmsg = buf; -bail_out: - PyErr_SetString(PyExc_AttributeError, errmsg); - return -1; -} - - -static PyObject *set_job_events(PyObject *self, PyObject *arg) -{ - PyObject *eObject; - JCR *jcr; - - Dmsg0(100, "In set_job_events.\n"); - if (!PyArg_ParseTuple(arg, "O:set_events", &eObject)) { - Pmsg0(000, _("Error in ParseTuple\n")); - return NULL; - } - jcr = get_jcr_from_PyObject(self); - Py_XDECREF((PyObject *)jcr->Python_events); - Py_INCREF(eObject); - jcr->Python_events = (void *)eObject; - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *job_write(PyObject *self, PyObject *args) -{ - char *text = NULL; - - if (!PyArg_ParseTuple(args, "s:write", &text)) { - Pmsg0(000, _("Parse tuple error in job_write\n")); - return NULL; - } - if (text) { - Jmsg(NULL, M_INFO, 0, "%s", text); - } - Py_INCREF(Py_None); - return Py_None; -} - - -int generate_job_event(JCR *jcr, const char *event) -{ - PyObject *method = NULL; - PyObject *Job = (PyObject *)jcr->Python_job; - PyObject *events = (PyObject *)jcr->Python_events; - PyObject *result = NULL; - int stat = 0; - - if (!Job || !events) { - return 0; - } - - lock_python(); -// PyEval_AcquireLock(); - - method = find_method(events, method, event); - if (!method) { - goto bail_out; - } - - bstrncpy(jcr->event, event, sizeof(jcr->event)); - result = PyObject_CallFunction(method, (char *)"O", Job); - jcr->event[0] = 0; /* no event in progress */ - if (result == NULL) { - if (PyErr_Occurred()) { - PyErr_Print(); - Dmsg1(000, _("Error in Python method %s\n"), event); - } - } else { - stat = 1; - } - Py_XDECREF(result); - -bail_out: - unlock_python(); -// PyEval_ReleaseLock(); - return stat; -} - - -#else - -/* Dummy if Python not configured */ -int generate_job_event(JCR *jcr, const char *event) -{ return 1; } - - -#endif /* xxxxHAVE_PYTHON */ diff --git a/bacula/src/stored/read.c b/bacula/src/stored/read.c index 3f46f25884..55134dc525 100644 --- a/bacula/src/stored/read.c +++ b/bacula/src/stored/read.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2011 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Read code for Storage daemon @@ -36,7 +24,8 @@ #include "stored.h" /* Forward referenced subroutines */ -static bool record_cb(DCR *dcr, DEV_RECORD *rec); +static bool read_record_cb(DCR *dcr, DEV_RECORD *rec); +static bool mac_record_cb(DCR *dcr, DEV_RECORD *rec); /* Responses sent to the File daemon */ @@ -54,10 +43,11 @@ bool do_read_data(JCR *jcr) BSOCK *fd = jcr->file_bsock; bool ok = true; DCR *dcr = jcr->read_dcr; + char ec[50]; - Dmsg0(20, "Start read data.\n"); + Dmsg0(100, "Start read data.\n"); - if (!bnet_set_buffer_size(fd, dcr->device->max_network_buffer_size, BNET_SETBUF_WRITE)) { + if (!fd->set_buffer_size(dcr->device->max_network_buffer_size, BNET_SETBUF_WRITE)) { return false; } @@ -78,8 +68,30 @@ bool do_read_data(JCR *jcr) /* Tell File daemon we will send data */ fd->fsend(OK_data); + jcr->sendJobStatus(JS_Running); - ok = read_records(dcr, record_cb, mount_next_read_volume); + jcr->run_time = time(NULL); + jcr->JobFiles = 0; + + if (jcr->is_JobType(JT_MIGRATE) || jcr->is_JobType(JT_COPY)) { + ok = read_records(dcr, mac_record_cb, mount_next_read_volume); + } else { + ok = read_records(dcr, read_record_cb, mount_next_read_volume); + } + + /* + * Don't use time_t for job_elapsed as time_t can be 32 or 64 bits, + * and the subsequent Jmsg() editing will break + */ + int32_t job_elapsed = time(NULL) - jcr->run_time; + + if (job_elapsed <= 0) { + job_elapsed = 1; + } + + Jmsg(dcr->jcr, M_INFO, 0, _("Elapsed time=%02d:%02d:%02d, Transfer rate=%s Bytes/second\n"), + job_elapsed / 3600, job_elapsed % 3600 / 60, job_elapsed % 60, + edit_uint64_with_suffix(jcr->JobBytes / job_elapsed, ec)); /* Send end of data to FD */ fd->signal(BNET_EOD); @@ -93,11 +105,11 @@ bool do_read_data(JCR *jcr) } /* - * Called here for each record from read_records() + * Called here for reading (restore) for each record from read_records() * Returns: true if OK * false if error */ -static bool record_cb(DCR *dcr, DEV_RECORD *rec) +static bool read_record_cb(DCR *dcr, DEV_RECORD *rec) { JCR *jcr = dcr->jcr; BSOCK *fd = jcr->file_bsock; @@ -109,7 +121,7 @@ static bool record_cb(DCR *dcr, DEV_RECORD *rec) return true; } Dmsg5(400, "Send to FD: SessId=%u SessTim=%u FI=%s Strm=%s, len=%d\n", - rec->VolSessionId, rec->VolSessionTime, + rec->VolSessionId, rec->VolSessionTime, FI_to_ascii(ec1, rec->FileIndex), stream_to_ascii(ec2, rec->Stream, rec->FileIndex), rec->data_len); @@ -121,15 +133,33 @@ static bool record_cb(DCR *dcr, DEV_RECORD *rec) Jmsg1(jcr, M_FATAL, 0, _("Error sending to File daemon. ERR=%s\n"), fd->bstrerror()); return false; - } else { - Dmsg1(400, ">filed: Hdr=%s\n", fd->msg); } + /* + * For normal migration jobs, FileIndex values are sequential because + * we are dealing with one job. However, for Vbackup (consolidation), + * we will be getting records from multiple jobs and writing them back + * out, so we need to ensure that the output FileIndex is sequential. + * We do so by detecting a FileIndex change and incrementing the + * JobFiles, which we then use as the output FileIndex. + */ + if (rec->FileIndex >= 0) { + /* If something changed, increment FileIndex */ + if (rec->VolSessionId != rec->last_VolSessionId || + rec->VolSessionTime != rec->last_VolSessionTime || + rec->FileIndex != rec->last_FileIndex) { + jcr->JobFiles++; + rec->last_VolSessionId = rec->VolSessionId; + rec->last_VolSessionTime = rec->VolSessionTime; + rec->last_FileIndex = rec->FileIndex; + } + } /* Send data record to File daemon */ save_msg = fd->msg; /* save fd message pointer */ fd->msg = rec->data; /* pass data directly to the FD */ fd->msglen = rec->data_len; + jcr->JobBytes += rec->data_len; /* increment bytes this job */ Dmsg1(400, ">filed: send %d bytes data.\n", fd->msglen); if (!fd->send()) { Pmsg1(000, _("Error sending to FD. ERR=%s\n"), fd->bstrerror()); @@ -141,3 +171,108 @@ static bool record_cb(DCR *dcr, DEV_RECORD *rec) fd->msg = save_msg; /* restore fd message pointer */ return ok; } + +/* + * New routine after to SD->SD implementation + * Called here for each record from read_records() + * Returns: true if OK + * false if error + */ +static bool mac_record_cb(DCR *dcr, DEV_RECORD *rec) +{ + JCR *jcr = dcr->jcr; + BSOCK *fd = jcr->file_bsock; + char buf1[100], buf2[100]; + bool new_header = false; + POOLMEM *save_msg; + char ec1[50], ec2[50]; + bool ok = true; + +#ifdef xxx + Pmsg5(000, "on entry JobId=%d FI=%s SessId=%d Strm=%s len=%d\n", + jcr->JobId, + FI_to_ascii(buf1, rec->FileIndex), rec->VolSessionId, + stream_to_ascii(buf2, rec->Stream, rec->FileIndex), rec->data_len); +#endif + + /* If label and not for us, discard it */ + if (rec->FileIndex < 0) { + Dmsg1(100, "FileIndex=%d\n", rec->FileIndex); + return true; + } + + /* + * For normal migration jobs, FileIndex values are sequential because + * we are dealing with one job. However, for Vbackup (consolidation), + * we will be getting records from multiple jobs and writing them back + * out, so we need to ensure that the output FileIndex is sequential. + * We do so by detecting a FileIndex change and incrementing the + * JobFiles, which we then use as the output FileIndex. + */ + if (rec->FileIndex >= 0) { + /* If something changed, increment FileIndex */ + if (rec->VolSessionId != rec->last_VolSessionId || + rec->VolSessionTime != rec->last_VolSessionTime || + rec->FileIndex != rec->last_FileIndex || + rec->Stream != rec->last_Stream) { + + /* Something changed */ + if (rec->last_VolSessionId != 0) { /* Not first record */ + Dmsg1(200, "Send EOD jobfiles=%d\n", jcr->JobFiles); + if (!fd->signal(BNET_EOD)) { /* End of previous stream */ + Jmsg(jcr, M_FATAL, 0, _("Error sending to File daemon. ERR=%s\n"), + fd->bstrerror()); + return false; + } + } + new_header = true; + if (rec->FileIndex != rec->last_FileIndex) { + jcr->JobFiles++; + } + rec->last_VolSessionId = rec->VolSessionId; + rec->last_VolSessionTime = rec->VolSessionTime; + rec->last_FileIndex = rec->FileIndex; + rec->last_Stream = rec->Stream; + } + rec->FileIndex = jcr->JobFiles; /* set sequential output FileIndex */ + } + + if (new_header) { + new_header = false; + Dmsg5(400, "Send header to FD: SessId=%u SessTim=%u FI=%s Strm=%s, len=%d\n", + rec->VolSessionId, rec->VolSessionTime, + FI_to_ascii(ec1, rec->FileIndex), + stream_to_ascii(ec2, rec->Stream, rec->FileIndex), + rec->data_len); + + /* Send data header to File daemon */ + if (!fd->fsend("%ld %ld %lld", rec->FileIndex, rec->Stream, rec->data_len)) { + Pmsg1(000, _(">filed: Error Hdr=%s\n"), fd->msg); + Jmsg1(jcr, M_FATAL, 0, _("Error sending to File daemon. ERR=%s\n"), + fd->bstrerror()); + return false; + } + } + + Dmsg1(400, "FI=%d\n", rec->FileIndex); + /* Send data record to File daemon */ + save_msg = fd->msg; /* save fd message pointer */ + fd->msg = rec->data; /* pass data directly to the FD */ + fd->msglen = rec->data_len; + jcr->JobBytes += rec->data_len; /* increment bytes this job */ + Dmsg1(400, ">filed: send %d bytes data.\n", fd->msglen); + if (!fd->send()) { + Pmsg1(000, _("Error sending to FD. ERR=%s\n"), fd->bstrerror()); + Jmsg1(jcr, M_FATAL, 0, _("Error sending to File daemon. ERR=%s\n"), + fd->bstrerror()); + ok = false; + } + fd->msg = save_msg; /* restore fd message pointer */ + + Dmsg5(500, "wrote_record JobId=%d FI=%s SessId=%d Strm=%s len=%d\n", + jcr->JobId, + FI_to_ascii(buf1, rec->FileIndex), rec->VolSessionId, + stream_to_ascii(buf2, rec->Stream, rec->FileIndex), rec->data_len); + + return ok; +} diff --git a/bacula/src/stored/read_record.c b/bacula/src/stored/read_record.c deleted file mode 100644 index 92383abc09..0000000000 --- a/bacula/src/stored/read_record.c +++ /dev/null @@ -1,464 +0,0 @@ -/* - Bacula® - The Network Backup Solution - - Copyright (C) 2002-2010 Free Software Foundation Europe e.V. - - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. - - Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. -*/ -/* - * - * This routine provides a routine that will handle all - * the gory little details of reading a record from a Bacula - * archive. It uses a callback to pass you each record in turn, - * as well as a callback for mounting the next tape. It takes - * care of reading blocks, applying the bsr, ... - * Note, this routine is really the heart of the restore routines, - * and we are *really* bit pushing here so be careful about making - * any modifications. - * - * Kern E. Sibbald, August MMII - * - */ - -#include "bacula.h" -#include "stored.h" - -/* Forward referenced functions */ -static void handle_session_record(DEVICE *dev, DEV_RECORD *rec, SESSION_LABEL *sessrec); -static BSR *position_to_first_file(JCR *jcr, DCR *dcr); -static bool try_repositioning(JCR *jcr, DEV_RECORD *rec, DCR *dcr); -#ifdef DEBUG -static char *rec_state_bits_to_str(DEV_RECORD *rec); -#endif - -static const int dbglvl = 500; -static const int no_FileIndex = -999999; - -/* - * This subroutine reads all the records and passes them back to your - * callback routine (also mount routine at EOM). - * You must not change any values in the DEV_RECORD packet - */ -bool read_records(DCR *dcr, - bool record_cb(DCR *dcr, DEV_RECORD *rec), - bool mount_cb(DCR *dcr)) -{ - JCR *jcr = dcr->jcr; - DEVICE *dev = dcr->dev; - DEV_BLOCK *block = dcr->block; - DEV_RECORD *rec = NULL; - uint32_t record; - int32_t lastFileIndex; - bool ok = true; - bool done = false; - SESSION_LABEL sessrec; - dlist *recs; /* linked list of rec packets open */ - - recs = New(dlist(rec, &rec->link)); - position_to_first_file(jcr, dcr); - jcr->mount_next_volume = false; - - for ( ; ok && !done; ) { - if (job_canceled(jcr)) { - ok = false; - break; - } - if (!dcr->read_block_from_device(CHECK_BLOCK_NUMBERS)) { - if (dev->at_eot()) { - DEV_RECORD *trec = new_record(); - Jmsg(jcr, M_INFO, 0, _("End of Volume at file %u on device %s, Volume \"%s\"\n"), - dev->file, dev->print_name(), dcr->VolumeName); - volume_unused(dcr); /* mark volume unused */ - if (!mount_cb(dcr)) { - Jmsg(jcr, M_INFO, 0, _("End of all volumes.\n")); - ok = false; /* Stop everything */ - /* - * Create EOT Label so that Media record may - * be properly updated because this is the last - * tape. - */ - trec->FileIndex = EOT_LABEL; - trec->File = dev->file; - ok = record_cb(dcr, trec); - free_record(trec); - if (jcr->mount_next_volume) { - jcr->mount_next_volume = false; - dev->clear_eot(); - } - break; - } - jcr->mount_next_volume = false; - /* - * The Device can change at the end of a tape, so refresh it - * and the block from the dcr. - */ - dev = dcr->dev; - block = dcr->block; - /* - * We just have a new tape up, now read the label (first record) - * and pass it off to the callback routine, then continue - * most likely reading the previous record. - */ - dcr->read_block_from_device(NO_BLOCK_NUMBER_CHECK); - read_record_from_block(dcr, trec); - handle_session_record(dev, trec, &sessrec); - ok = record_cb(dcr, trec); - free_record(trec); - position_to_first_file(jcr, dcr); - /* After reading label, we must read first data block */ - continue; - - } else if (dev->at_eof()) { -#ifdef neeeded_xxx - if (verbose) { - char *fp; - uint32_t fp_num; - if (dev->is_dvd()) { - fp = _("part"); - fp_num = dev->part; - } else { - fp = _("file"); - fp_num = dev->file; - } - Jmsg(jcr, M_INFO, 0, _("End of %s %u on device %s, Volume \"%s\"\n"), - fp, fp_num, dev->print_name(), dcr->VolumeName); - } -#endif - Dmsg3(200, "End of file %u on device %s, Volume \"%s\"\n", - dev->file, dev->print_name(), dcr->VolumeName); - continue; - } else if (dev->is_short_block()) { - Jmsg1(jcr, M_ERROR, 0, "%s", dev->errmsg); - continue; - } else { - /* I/O error or strange end of tape */ - display_tape_error_status(jcr, dev); - if (forge_on || jcr->ignore_label_errors) { - dev->fsr(1); /* try skipping bad record */ - Pmsg0(000, _("Did fsr in attemp to skip bad record.\n")); - continue; /* try to continue */ - } - ok = false; /* stop everything */ - break; - } - } - Dmsg2(dbglvl, "Read new block at pos=%u:%u\n", dev->file, dev->block_num); -#ifdef if_and_when_FAST_BLOCK_REJECTION_is_working - /* this does not stop when file/block are too big */ - if (!match_bsr_block(jcr->bsr, block)) { - if (try_repositioning(jcr, rec, dcr)) { - break; /* get next volume */ - } - continue; /* skip this record */ - } -#endif - - /* - * Get a new record for each Job as defined by - * VolSessionId and VolSessionTime - */ - bool found = false; - foreach_dlist(rec, recs) { - if (rec->VolSessionId == block->VolSessionId && - rec->VolSessionTime == block->VolSessionTime) { - found = true; - break; - } - } - if (!found) { - rec = new_record(); - recs->prepend(rec); - Dmsg3(dbglvl, "New record for state=%s SI=%d ST=%d\n", - rec_state_bits_to_str(rec), - block->VolSessionId, block->VolSessionTime); - } - Dmsg3(dbglvl, "Before read rec loop. stat=%s blk=%d rem=%d\n", rec_state_bits_to_str(rec), - block->BlockNumber, rec->remainder); - record = 0; - rec->state_bits = 0; - lastFileIndex = no_FileIndex; - Dmsg1(dbglvl, "Block %s empty\n", is_block_empty(rec)?"is":"NOT"); - for (rec->state_bits=0; ok && !is_block_empty(rec); ) { - if (!read_record_from_block(dcr, rec)) { - Dmsg3(400, "!read-break. state_bits=%s blk=%d rem=%d\n", rec_state_bits_to_str(rec), - block->BlockNumber, rec->remainder); - break; - } - Dmsg5(dbglvl, "read-OK. state_bits=%s blk=%d rem=%d file:block=%u:%u\n", - rec_state_bits_to_str(rec), block->BlockNumber, rec->remainder, - dev->file, dev->block_num); - /* - * At this point, we have at least a record header. - * Now decide if we want this record or not, but remember - * before accessing the record, we may need to read again to - * get all the data. - */ - record++; - Dmsg6(dbglvl, "recno=%d state_bits=%s blk=%d SI=%d ST=%d FI=%d\n", record, - rec_state_bits_to_str(rec), block->BlockNumber, - rec->VolSessionId, rec->VolSessionTime, rec->FileIndex); - - if (rec->FileIndex == EOM_LABEL) { /* end of tape? */ - Dmsg0(40, "Get EOM LABEL\n"); - break; /* yes, get out */ - } - - /* Some sort of label? */ - if (rec->FileIndex < 0) { - handle_session_record(dev, rec, &sessrec); - if (jcr->bsr) { - /* We just check block FI and FT not FileIndex */ - rec->match_stat = match_bsr_block(jcr->bsr, block); - } else { - rec->match_stat = 0; - } - /* - * Note, we pass *all* labels to the callback routine. If - * he wants to know if they matched the bsr, then he must - * check the match_stat in the record */ - ok = record_cb(dcr, rec); -#ifdef xxx - /* - * If this is the end of the Session (EOS) for this record - * we can remove the record. Note, there is a separate - * record to read each session. If a new session is seen - * a new record will be created at approx line 157 above. - * However, it seg faults in the for line at lineno 196. - */ - if (rec->FileIndex == EOS_LABEL) { - Dmsg2(dbglvl, "Remove EOS rec. SI=%d ST=%d\n", rec->VolSessionId, - rec->VolSessionTime); - recs->remove(rec); - free_record(rec); - } -#endif - continue; - } /* end if label record */ - - /* - * Apply BSR filter - */ - if (jcr->bsr) { - rec->match_stat = match_bsr(jcr->bsr, rec, &dev->VolHdr, &sessrec, jcr); - if (rec->match_stat == -1) { /* no more possible matches */ - done = true; /* all items found, stop */ - Dmsg2(dbglvl, "All done=(file:block) %u:%u\n", dev->file, dev->block_num); - break; - } else if (rec->match_stat == 0) { /* no match */ - Dmsg4(dbglvl, "BSR no match: clear rem=%d FI=%d before set_eof pos %u:%u\n", - rec->remainder, rec->FileIndex, dev->file, dev->block_num); - rec->remainder = 0; - rec->state_bits &= ~REC_PARTIAL_RECORD; - if (try_repositioning(jcr, rec, dcr)) { - break; - } - continue; /* we don't want record, read next one */ - } - } - dcr->VolLastIndex = rec->FileIndex; /* let caller know where we are */ - if (is_partial_record(rec)) { - Dmsg6(dbglvl, "Partial, break. recno=%d state_bits=%s blk=%d SI=%d ST=%d FI=%d\n", record, - rec_state_bits_to_str(rec), block->BlockNumber, - rec->VolSessionId, rec->VolSessionTime, rec->FileIndex); - break; /* read second part of record */ - } - - Dmsg6(dbglvl, "OK callback. recno=%d state_bits=%s blk=%d SI=%d ST=%d FI=%d\n", record, - rec_state_bits_to_str(rec), block->BlockNumber, - rec->VolSessionId, rec->VolSessionTime, rec->FileIndex); - if (lastFileIndex != no_FileIndex && lastFileIndex != rec->FileIndex) { - if (is_this_bsr_done(jcr->bsr, rec) && try_repositioning(jcr, rec, dcr)) { - Dmsg2(dbglvl, "This bsr done, break pos %u:%u\n", - dev->file, dev->block_num); - break; - } - Dmsg2(dbglvl, "==== inside LastIndex=%d FileIndex=%d\n", lastFileIndex, rec->FileIndex); - } - Dmsg2(dbglvl, "==== LastIndex=%d FileIndex=%d\n", lastFileIndex, rec->FileIndex); - lastFileIndex = rec->FileIndex; - ok = record_cb(dcr, rec); -#if 0 - /* - * If we have a digest stream, we check to see if we have - * finished the current bsr, and if so, repositioning will - * be turned on. - */ - if (crypto_digest_stream_type(rec->Stream) != CRYPTO_DIGEST_NONE) { - Dmsg3(dbglvl, "=== Have digest FI=%u before bsr check pos %u:%u\n", rec->FileIndex, - dev->file, dev->block_num); - if (is_this_bsr_done(jcr->bsr, rec) && try_repositioning(jcr, rec, dcr)) { - Dmsg1(dbglvl, "==== BSR done at FI=%d\n", rec->FileIndex); - Dmsg2(dbglvl, "This bsr done, break pos %u:%u\n", - dev->file, dev->block_num); - break; - } - Dmsg2(900, "After is_bsr_done pos %u:%u\n", dev->file, dev->block_num); - } -#endif - } /* end for loop over records */ - Dmsg2(dbglvl, "After end recs in block. pos=%u:%u\n", dev->file, dev->block_num); - } /* end for loop over blocks */ -// Dmsg2(dbglvl, "Position=(file:block) %u:%u\n", dev->file, dev->block_num); - - /* Walk down list and free all remaining allocated recs */ - while (!recs->empty()) { - rec = (DEV_RECORD *)recs->first(); - recs->remove(rec); - free_record(rec); - } - delete recs; - print_block_read_errors(jcr, block); - return ok; -} - -/* - * See if we can reposition. - * Returns: true if at end of volume - * false otherwise - */ -static bool try_repositioning(JCR *jcr, DEV_RECORD *rec, DCR *dcr) -{ - BSR *bsr; - DEVICE *dev = dcr->dev; - - bsr = find_next_bsr(jcr->bsr, dev); - if (bsr == NULL && jcr->bsr->mount_next_volume) { - Dmsg0(dbglvl, "Would mount next volume here\n"); - Dmsg2(dbglvl, "Current postion (file:block) %u:%u\n", - dev->file, dev->block_num); - jcr->bsr->mount_next_volume = false; - if (!dev->at_eot()) { - /* Set EOT flag to force mount of next Volume */ - jcr->mount_next_volume = true; - dev->set_eot(); - } - rec->Block = 0; - return true; - } - if (bsr) { - /* - * ***FIXME*** gross kludge to make disk seeking work. Remove - * when find_next_bsr() is fixed not to return a bsr already - * completed. - */ - uint32_t block, file; - /* TODO: use dev->file_addr ? */ - uint64_t dev_addr = (((uint64_t) dev->file)<<32) | dev->block_num; - uint64_t bsr_addr = get_bsr_start_addr(bsr, &file, &block); - - if (dev_addr > bsr_addr) { - return false; - } - Dmsg4(dbglvl, "Try_Reposition from (file:block) %u:%u to %u:%u\n", - dev->file, dev->block_num, file, block); - dev->reposition(dcr, file, block); - rec->Block = 0; - } - return false; -} - -/* - * Position to the first file on this volume - */ -static BSR *position_to_first_file(JCR *jcr, DCR *dcr) -{ - BSR *bsr = NULL; - DEVICE *dev = dcr->dev; - uint32_t file, block; - /* - * Now find and position to first file and block - * on this tape. - */ - if (jcr->bsr) { - jcr->bsr->reposition = true; /* force repositioning */ - bsr = find_next_bsr(jcr->bsr, dev); - - if (get_bsr_start_addr(bsr, &file, &block) > 0) { - Jmsg(jcr, M_INFO, 0, _("Forward spacing Volume \"%s\" to file:block %u:%u.\n"), - dev->VolHdr.VolumeName, file, block); - dev->reposition(dcr, file, block); - } - } - return bsr; -} - - -static void handle_session_record(DEVICE *dev, DEV_RECORD *rec, SESSION_LABEL *sessrec) -{ - const char *rtype; - char buf[100]; - - memset(sessrec, 0, sizeof(SESSION_LABEL)); - switch (rec->FileIndex) { - case PRE_LABEL: - rtype = _("Fresh Volume Label"); - break; - case VOL_LABEL: - rtype = _("Volume Label"); - unser_volume_label(dev, rec); - break; - case SOS_LABEL: - rtype = _("Begin Session"); - unser_session_label(sessrec, rec); - break; - case EOS_LABEL: - rtype = _("End Session"); - break; - case EOM_LABEL: - rtype = _("End of Media"); - break; - default: - bsnprintf(buf, sizeof(buf), _("Unknown code %d\n"), rec->FileIndex); - rtype = buf; - break; - } - Dmsg5(dbglvl, _("%s Record: VolSessionId=%d VolSessionTime=%d JobId=%d DataLen=%d\n"), - rtype, rec->VolSessionId, rec->VolSessionTime, rec->Stream, rec->data_len); -} - -#ifdef DEBUG -static char *rec_state_bits_to_str(DEV_RECORD *rec) -{ - static char buf[200]; - buf[0] = 0; - if (rec->state_bits & REC_NO_HEADER) { - bstrncat(buf, "Nohdr,", sizeof(buf)); - } - if (is_partial_record(rec)) { - bstrncat(buf, "partial,", sizeof(buf)); - } - if (rec->state_bits & REC_BLOCK_EMPTY) { - bstrncat(buf, "empty,", sizeof(buf)); - } - if (rec->state_bits & REC_NO_MATCH) { - bstrncat(buf, "Nomatch,", sizeof(buf)); - } - if (rec->state_bits & REC_CONTINUATION) { - bstrncat(buf, "cont,", sizeof(buf)); - } - if (buf[0]) { - buf[strlen(buf)-1] = 0; - } - return buf; -} -#endif diff --git a/bacula/src/stored/read_records.c b/bacula/src/stored/read_records.c new file mode 100644 index 0000000000..249437e4a2 --- /dev/null +++ b/bacula/src/stored/read_records.c @@ -0,0 +1,437 @@ +/* + Bacula® - The Network Backup Solution + + Copyright (C) 2002-2014 Free Software Foundation Europe e.V. + + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. + + Bacula® is a registered trademark of Kern Sibbald. +*/ +/* + * + * This routine provides a routine that will handle all + * the gory little details of reading a record from a Bacula + * archive. It uses a callback to pass you each record in turn, + * as well as a callback for mounting the next tape. It takes + * care of reading blocks, applying the bsr, ... + * Note, this routine is really the heart of the restore routines, + * and we are *really* bit pushing here so be careful about making + * any modifications. + * + * Kern E. Sibbald, August MMII + * + */ + +#include "bacula.h" +#include "stored.h" + +/* Forward referenced functions */ +static void handle_session_record(DEVICE *dev, DEV_RECORD *rec, SESSION_LABEL *sessrec); +static BSR *position_to_first_file(JCR *jcr, DCR *dcr); +static bool try_repositioning(JCR *jcr, DEV_RECORD *rec, DCR *dcr); +#ifdef DEBUG +static char *rec_state_bits_to_str(DEV_RECORD *rec); +#endif + +static const int dbglvl = 190; +static const int no_FileIndex = -999999; + +/* + * This subroutine reads all the records and passes them back to your + * callback routine (also mount routine at EOM). + * You must not change any values in the DEV_RECORD packet + */ +bool read_records(DCR *dcr, + bool record_cb(DCR *dcr, DEV_RECORD *rec), + bool mount_cb(DCR *dcr)) +{ + JCR *jcr = dcr->jcr; + DEVICE *dev = dcr->dev; + DEV_BLOCK *block = dcr->block; + DEV_RECORD *rec = NULL; + uint32_t record; + int32_t lastFileIndex; + bool ok = true; + bool done = false; + SESSION_LABEL sessrec; + dlist *recs; /* linked list of rec packets open */ + + recs = New(dlist(rec, &rec->link)); + position_to_first_file(jcr, dcr); + jcr->mount_next_volume = false; + + for ( ; ok && !done; ) { + if (job_canceled(jcr)) { + ok = false; + break; + } + if (!dcr->read_block_from_device(CHECK_BLOCK_NUMBERS)) { + if (dev->at_eot()) { + DEV_RECORD *trec = new_record(); + Jmsg(jcr, M_INFO, 0, _("End of Volume at file %u on device %s, Volume \"%s\"\n"), + dev->file, dev->print_name(), dcr->VolumeName); + volume_unused(dcr); /* mark volume unused */ + if (!mount_cb(dcr)) { + Jmsg(jcr, M_INFO, 0, _("End of all volumes.\n")); + ok = false; /* Stop everything */ + /* + * Create EOT Label so that Media record may + * be properly updated because this is the last + * tape. + */ + trec->FileIndex = EOT_LABEL; + trec->File = dev->file; + ok = record_cb(dcr, trec); + free_record(trec); + if (jcr->mount_next_volume) { + jcr->mount_next_volume = false; + dev->clear_eot(); + } + break; + } + jcr->mount_next_volume = false; + /* + * The Device can change at the end of a tape, so refresh it + * and the block from the dcr. + */ + dev = dcr->dev; + block = dcr->block; + /* + * We just have a new tape up, now read the label (first record) + * and pass it off to the callback routine, then continue + * most likely reading the previous record. + */ + dcr->read_block_from_device(NO_BLOCK_NUMBER_CHECK); + read_record_from_block(dcr, trec); + handle_session_record(dev, trec, &sessrec); + ok = record_cb(dcr, trec); + free_record(trec); + position_to_first_file(jcr, dcr); + /* After reading label, we must read first data block */ + continue; + + } else if (dev->at_eof()) { + Dmsg3(200, "End of file %u on device %s, Volume \"%s\"\n", + dev->file, dev->print_name(), dcr->VolumeName); + continue; + } else if (dev->is_short_block()) { + Jmsg1(jcr, M_ERROR, 0, "%s", dev->errmsg); + continue; + } else { + /* I/O error or strange end of tape */ + display_tape_error_status(jcr, dev); + if (forge_on || jcr->ignore_label_errors) { + dev->fsr(1); /* try skipping bad record */ + Pmsg0(000, _("Did fsr in attemp to skip bad record.\n")); + continue; /* try to continue */ + } + ok = false; /* stop everything */ + break; + } + } + Dmsg2(dbglvl, "Read new block at pos=%u:%u\n", dev->file, dev->block_num); +#ifdef if_and_when_FAST_BLOCK_REJECTION_is_working + /* this does not stop when file/block are too big */ + if (!match_bsr_block(jcr->bsr, block)) { + if (try_repositioning(jcr, rec, dcr)) { + break; /* get next volume */ + } + continue; /* skip this record */ + } +#endif + + /* + * Get a new record for each Job as defined by + * VolSessionId and VolSessionTime + */ + bool found = false; + foreach_dlist(rec, recs) { + if (rec->VolSessionId == block->VolSessionId && + rec->VolSessionTime == block->VolSessionTime) { + found = true; + break; + } + } + if (!found) { + rec = new_record(); + recs->prepend(rec); + Dmsg3(dbglvl, "New record for state=%s SI=%d ST=%d\n", + rec_state_bits_to_str(rec), + block->VolSessionId, block->VolSessionTime); + } + Dmsg3(dbglvl, "Before read rec loop. stat=%s blk=%d rem=%d\n", rec_state_bits_to_str(rec), + block->BlockNumber, rec->remainder); + record = 0; + rec->state_bits = 0; + lastFileIndex = no_FileIndex; + Dmsg1(dbglvl, "Block %s empty\n", is_block_marked_empty(rec)?"is":"NOT"); + for (rec->state_bits=0; ok && !is_block_marked_empty(rec); ) { + if (!read_record_from_block(dcr, rec)) { + Dmsg3(200, "!read-break. state_bits=%s blk=%d rem=%d\n", rec_state_bits_to_str(rec), + block->BlockNumber, rec->remainder); + break; + } + Dmsg5(dbglvl, "read-OK. state_bits=%s blk=%d rem=%d file:block=%u:%u\n", + rec_state_bits_to_str(rec), block->BlockNumber, rec->remainder, + dev->file, dev->block_num); + /* + * At this point, we have at least a record header. + * Now decide if we want this record or not, but remember + * before accessing the record, we may need to read again to + * get all the data. + */ + record++; + Dmsg6(dbglvl, "recno=%d state_bits=%s blk=%d SI=%d ST=%d FI=%d\n", record, + rec_state_bits_to_str(rec), block->BlockNumber, + rec->VolSessionId, rec->VolSessionTime, rec->FileIndex); + + if (rec->FileIndex == EOM_LABEL) { /* end of tape? */ + Dmsg0(40, "Get EOM LABEL\n"); + break; /* yes, get out */ + } + + /* Some sort of label? */ + if (rec->FileIndex < 0) { + handle_session_record(dev, rec, &sessrec); + if (jcr->bsr) { + /* We just check block FI and FT not FileIndex */ + rec->match_stat = match_bsr_block(jcr->bsr, block); + } else { + rec->match_stat = 0; + } + /* + * Note, we pass *all* labels to the callback routine. If + * he wants to know if they matched the bsr, then he must + * check the match_stat in the record */ + ok = record_cb(dcr, rec); +#ifdef xxx + /* + * If this is the end of the Session (EOS) for this record + * we can remove the record. Note, there is a separate + * record to read each session. If a new session is seen + * a new record will be created at approx line 157 above. + * However, it seg faults in the for line at lineno 196. + */ + if (rec->FileIndex == EOS_LABEL) { + Dmsg2(dbglvl, "Remove EOS rec. SI=%d ST=%d\n", rec->VolSessionId, + rec->VolSessionTime); + recs->remove(rec); + free_record(rec); + } +#endif + continue; + } /* end if label record */ + + /* + * Apply BSR filter + */ + if (jcr->bsr) { + rec->match_stat = match_bsr(jcr->bsr, rec, &dev->VolHdr, &sessrec, jcr); + if (rec->match_stat == -1) { /* no more possible matches */ + done = true; /* all items found, stop */ + Dmsg2(dbglvl, "All done=(file:block) %u:%u\n", dev->file, dev->block_num); + break; + } else if (rec->match_stat == 0) { /* no match */ + Dmsg4(dbglvl, "BSR no match: clear rem=%d FI=%d before set_eof pos %u:%u\n", + rec->remainder, rec->FileIndex, dev->file, dev->block_num); + rec->remainder = 0; + rec->state_bits &= ~REC_PARTIAL_RECORD; + if (try_repositioning(jcr, rec, dcr)) { + break; + } + continue; /* we don't want record, read next one */ + } + } + dcr->VolLastIndex = rec->FileIndex; /* let caller know where we are */ + if (is_partial_record(rec)) { + Dmsg6(dbglvl, "Partial, break. recno=%d state_bits=%s blk=%d SI=%d ST=%d FI=%d\n", record, + rec_state_bits_to_str(rec), block->BlockNumber, + rec->VolSessionId, rec->VolSessionTime, rec->FileIndex); + break; /* read second part of record */ + } + + Dmsg6(dbglvl, "OK callback. recno=%d state_bits=%s blk=%d SI=%d ST=%d FI=%d\n", record, + rec_state_bits_to_str(rec), block->BlockNumber, + rec->VolSessionId, rec->VolSessionTime, rec->FileIndex); + if (lastFileIndex != no_FileIndex && lastFileIndex != rec->FileIndex) { + if (is_this_bsr_done(jcr->bsr, rec) && try_repositioning(jcr, rec, dcr)) { + Dmsg2(dbglvl, "This bsr done, break pos %u:%u\n", + dev->file, dev->block_num); + break; + } + Dmsg2(dbglvl, "==== inside LastIndex=%d FileIndex=%d\n", lastFileIndex, rec->FileIndex); + } + Dmsg2(dbglvl, "==== LastIndex=%d FileIndex=%d\n", lastFileIndex, rec->FileIndex); + lastFileIndex = rec->FileIndex; + ok = record_cb(dcr, rec); +#if 0 + /* + * If we have a digest stream, we check to see if we have + * finished the current bsr, and if so, repositioning will + * be turned on. + */ + if (crypto_digest_stream_type(rec->Stream) != CRYPTO_DIGEST_NONE) { + Dmsg3(dbglvl, "=== Have digest FI=%u before bsr check pos %u:%u\n", rec->FileIndex, + dev->file, dev->block_num); + if (is_this_bsr_done(jcr->bsr, rec) && try_repositioning(jcr, rec, dcr)) { + Dmsg1(dbglvl, "==== BSR done at FI=%d\n", rec->FileIndex); + Dmsg2(dbglvl, "This bsr done, break pos %u:%u\n", + dev->file, dev->block_num); + break; + } + Dmsg2(900, "After is_bsr_done pos %u:%u\n", dev->file, dev->block_num); + } +#endif + } /* end for loop over records */ + Dmsg2(dbglvl, "After end recs in block. pos=%u:%u\n", dev->file, dev->block_num); + } /* end for loop over blocks */ +// Dmsg2(dbglvl, "Position=(file:block) %u:%u\n", dev->file, dev->block_num); + + /* Walk down list and free all remaining allocated recs */ + while (!recs->empty()) { + rec = (DEV_RECORD *)recs->first(); + recs->remove(rec); + free_record(rec); + } + delete recs; + print_block_read_errors(jcr, block); + return ok; +} + +/* + * See if we can reposition. + * Returns: true if at end of volume + * false otherwise + */ +static bool try_repositioning(JCR *jcr, DEV_RECORD *rec, DCR *dcr) +{ + BSR *bsr; + DEVICE *dev = dcr->dev; + + bsr = find_next_bsr(jcr->bsr, dev); + if (bsr == NULL && jcr->bsr->mount_next_volume) { + Dmsg0(dbglvl, "Would mount next volume here\n"); + Dmsg2(dbglvl, "Current postion (file:block) %u:%u\n", + dev->file, dev->block_num); + jcr->bsr->mount_next_volume = false; + if (!dev->at_eot()) { + /* Set EOT flag to force mount of next Volume */ + jcr->mount_next_volume = true; + dev->set_eot(); + } + rec->Block = 0; + return true; + } + if (bsr) { + /* + * ***FIXME*** gross kludge to make disk seeking work. Remove + * when find_next_bsr() is fixed not to return a bsr already + * completed. + */ + uint32_t block, file; + /* TODO: use dev->file_addr ? */ + uint64_t dev_addr = (((uint64_t) dev->file)<<32) | dev->block_num; + uint64_t bsr_addr = get_bsr_start_addr(bsr, &file, &block); + + if (dev_addr > bsr_addr) { + return false; + } + Dmsg4(dbglvl, "Try_Reposition from (file:block) %u:%u to %u:%u\n", + dev->file, dev->block_num, file, block); + dev->reposition(dcr, file, block); + rec->Block = 0; + } + return false; +} + +/* + * Position to the first file on this volume + */ +static BSR *position_to_first_file(JCR *jcr, DCR *dcr) +{ + BSR *bsr = NULL; + DEVICE *dev = dcr->dev; + uint32_t file, block; + /* + * Now find and position to first file and block + * on this tape. + */ + if (jcr->bsr) { + jcr->bsr->reposition = true; /* force repositioning */ + bsr = find_next_bsr(jcr->bsr, dev); + + if (get_bsr_start_addr(bsr, &file, &block) > 0) { + Jmsg(jcr, M_INFO, 0, _("Forward spacing Volume \"%s\" to file:block %u:%u.\n"), + dev->VolHdr.VolumeName, file, block); + dev->reposition(dcr, file, block); + } + } + return bsr; +} + + +static void handle_session_record(DEVICE *dev, DEV_RECORD *rec, SESSION_LABEL *sessrec) +{ + const char *rtype; + char buf[100]; + + memset(sessrec, 0, sizeof(SESSION_LABEL)); + switch (rec->FileIndex) { + case PRE_LABEL: + rtype = _("Fresh Volume Label"); + break; + case VOL_LABEL: + rtype = _("Volume Label"); + unser_volume_label(dev, rec); + break; + case SOS_LABEL: + rtype = _("Begin Session"); + unser_session_label(sessrec, rec); + break; + case EOS_LABEL: + rtype = _("End Session"); + break; + case EOM_LABEL: + rtype = _("End of Media"); + break; + default: + bsnprintf(buf, sizeof(buf), _("Unknown code %d\n"), rec->FileIndex); + rtype = buf; + break; + } + Dmsg5(dbglvl, _("%s Record: VolSessionId=%d VolSessionTime=%d JobId=%d DataLen=%d\n"), + rtype, rec->VolSessionId, rec->VolSessionTime, rec->Stream, rec->data_len); +} + +#ifdef DEBUG +static char *rec_state_bits_to_str(DEV_RECORD *rec) +{ + static char buf[200]; + buf[0] = 0; + if (rec->state_bits & REC_NO_HEADER) { + bstrncat(buf, "Nohdr,", sizeof(buf)); + } + if (is_partial_record(rec)) { + bstrncat(buf, "partial,", sizeof(buf)); + } + if (rec->state_bits & REC_BLOCK_EMPTY) { + bstrncat(buf, "empty,", sizeof(buf)); + } + if (rec->state_bits & REC_NO_MATCH) { + bstrncat(buf, "Nomatch,", sizeof(buf)); + } + if (rec->state_bits & REC_CONTINUATION) { + bstrncat(buf, "cont,", sizeof(buf)); + } + if (buf[0]) { + buf[strlen(buf)-1] = 0; + } + return buf; +} +#endif diff --git a/bacula/src/stored/record.c b/bacula/src/stored/record.c index 73f0c9f713..d60647fe7c 100644 --- a/bacula/src/stored/record.c +++ b/bacula/src/stored/record.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2001-2012 Free Software Foundation Europe e.V. + Copyright (C) 2001-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * @@ -662,7 +650,7 @@ bool read_record_from_block(DCR *dcr, DEV_RECORD *rec) /* Sanity check */ if (data_bytes >= MAX_BLOCK_LENGTH) { /* - * Something is wrong, force read of next block, abort + * Something is wrong, force read of next block, abort * continuing with this block. */ rec->state_bits |= (REC_NO_HEADER | REC_BLOCK_EMPTY); diff --git a/bacula/src/stored/record.h b/bacula/src/stored/record.h index 62c245d7d2..c8f5273c93 100644 --- a/bacula/src/stored/record.h +++ b/bacula/src/stored/record.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2012 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Record, and label definitions for Bacula @@ -47,14 +35,15 @@ enum { VOL_CREATE_ERROR, /* Error creating label */ VOL_VERSION_ERROR, /* Bacula version error */ VOL_LABEL_ERROR, /* Bad label type */ - VOL_NO_MEDIA /* Hard error -- no media present */ + VOL_NO_MEDIA, /* Hard error -- no media present */ + VOL_TYPE_ERROR /* Volume type (aligned/non-aligned) error */ }; enum rec_state { st_none, /* No state */ st_header, /* Write header */ - st_header_cont, - st_data, + st_cont_header, /* Write continuation header */ + st_data /* Write data record */ }; @@ -80,13 +69,13 @@ enum rec_state { /* Record state bit definitions */ #define REC_NO_HEADER (1<<0) /* No header read */ #define REC_PARTIAL_RECORD (1<<1) /* returning partial record */ -#define REC_BLOCK_EMPTY (1<<2) /* not enough data in block */ +#define REC_BLOCK_EMPTY (1<<2) /* Not enough data in block */ #define REC_NO_MATCH (1<<3) /* No match on continuation data */ #define REC_CONTINUATION (1<<4) /* Continuation record found */ #define REC_ISTAPE (1<<5) /* Set if device is tape */ #define is_partial_record(r) ((r)->state_bits & REC_PARTIAL_RECORD) -#define is_block_empty(r) ((r)->state_bits & REC_BLOCK_EMPTY) +#define is_block_marked_empty(r) ((r)->state_bits & (REC_BLOCK_EMPTY)) /* * DEV_RECORD for reading and writing records. @@ -100,20 +89,25 @@ struct DEV_RECORD { /* File and Block are always returned during reading * and writing records. */ + uint64_t StreamLen; /* Expected data stream length */ uint32_t File; /* File number */ uint32_t Block; /* Block number */ uint32_t VolSessionId; /* sequential id within this session */ uint32_t VolSessionTime; /* session start time */ int32_t FileIndex; /* sequential file number */ int32_t Stream; /* Full Stream number with high bits */ + int32_t last_FI; /* previous fi for adata */ + int32_t last_Stream; /* previous stream for adata */ int32_t maskedStream; /* Masked Stream without high bits */ uint32_t data_len; /* current record length */ uint32_t remainder; /* remaining bytes to read/write */ + uint32_t adata_remainder; /* remaining adata bytes to read/write */ uint32_t remlen; /* temp remainder bytes */ + uint32_t data_bytes; /* data_bytes */ uint32_t state_bits; /* state bits */ - rec_state state; /* state of write_record_to_block */ + rec_state wstate; /* state of write_record_to_block */ + rec_state rstate; /* state of read_record_from_block */ BSR *bsr; /* pointer to bsr that matched */ - uint8_t ser_buf[WRITE_RECHDR_LENGTH]; /* serialized record header goes here */ POOLMEM *data; /* Record data. This MUST be a memory pool item */ int32_t match_stat; /* bsr match status */ uint32_t last_VolSessionId; /* used in sequencing FI for Vbackup */ @@ -181,7 +175,6 @@ struct Volume_Label { char LabelProg[50]; /* Label program name */ char ProgVersion[50]; /* Program version */ char ProgDate[50]; /* Program build date/time */ - }; #define SER_LENGTH_Volume_Label 1024 /* max serialised length of volume label */ diff --git a/bacula/src/stored/record_read.c b/bacula/src/stored/record_read.c new file mode 100644 index 0000000000..f1b9d432d3 --- /dev/null +++ b/bacula/src/stored/record_read.c @@ -0,0 +1,273 @@ +/* + Bacula® - The Network Backup Solution + + Copyright (C) 2001-2014 Free Software Foundation Europe e.V. + + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. + + Bacula® is a registered trademark of Kern Sibbald. +*/ +/* + * + * record_read.c -- Volume (tape/disk) record read functions + * + * Kern Sibbald, April MMI + * added BB02 format October MMII + */ + + +#include "bacula.h" +#include "stored.h" + +/* Imported subroutines */ + + +static const int read_dbglvl = 200; +static const int dbgep = 200; /* debug execution path */ + +/* + * Read the header record + */ +static bool read_header(DCR *dcr, DEV_BLOCK *block, DEV_RECORD *rec) +{ + ser_declare; + uint32_t VolSessionId; + uint32_t VolSessionTime; + int32_t FileIndex; + int32_t Stream; + uint32_t rhl; + char buf1[100], buf2[100]; + + Dmsg0(dbgep, "=== rpath 1 read_header\n"); + /* Clear state flags */ + rec->state_bits = 0; + if (block->dev->is_tape()) { + rec->state_bits |= REC_ISTAPE; + } + rec->Block = ((DEVICE *)block->dev)->EndBlock; + rec->File = ((DEVICE *)block->dev)->EndFile; + + /* + * Get the header. There is always a full header, + * otherwise we find it in the next block. + */ + Dmsg3(read_dbglvl, "Block=%d Ver=%d block_len=%u\n", + block->BlockNumber, block->BlockVer, block->block_len); + if (block->BlockVer == 1) { + rhl = RECHDR1_LENGTH; + } else { + rhl = RECHDR2_LENGTH; + } + if (rec->remlen >= rhl) { + Dmsg0(dbgep, "=== rpath 2 begin unserial header\n"); + Dmsg4(read_dbglvl, "read_header: remlen=%d data_len=%d rem=%d blkver=%d\n", + rec->remlen, rec->data_len, rec->remainder, block->BlockVer); + + unser_begin(block->bufp, WRITE_RECHDR_LENGTH); + if (block->BlockVer == 1) { + unser_uint32(VolSessionId); + unser_uint32(VolSessionTime); + } else { + VolSessionId = block->VolSessionId; + VolSessionTime = block->VolSessionTime; + } + unser_int32(FileIndex); + unser_int32(Stream); + unser_uint32(rec->data_bytes); + + block->bufp += rhl; + block->binbuf -= rhl; + rec->remlen -= rhl; + + /* If we are looking for more (remainder!=0), we reject anything + * where the VolSessionId and VolSessionTime don't agree + */ + if (rec->remainder && (rec->VolSessionId != VolSessionId || + rec->VolSessionTime != VolSessionTime)) { + rec->state_bits |= REC_NO_MATCH; + Dmsg0(read_dbglvl, "remainder and VolSession doesn't match\n"); + Dmsg0(dbgep, "=== rpath 4 VolSession no match\n"); + return false; /* This is from some other Session */ + } + + /* if Stream is negative, it means that this is a continuation + * of a previous partially written record. + */ + if (Stream < 0) { /* continuation record? */ + Dmsg0(dbgep, "=== rpath 5 negative stream\n"); + Dmsg1(read_dbglvl, "Got negative Stream => continuation. remainder=%d\n", + rec->remainder); + rec->state_bits |= REC_CONTINUATION; + if (!rec->remainder) { /* if we didn't read previously */ + Dmsg0(dbgep, "=== rpath 6 no remainder\n"); + rec->data_len = 0; /* return data as if no continuation */ + } else if (rec->Stream != -Stream) { + Dmsg0(dbgep, "=== rpath 7 wrong cont stream\n"); + rec->state_bits |= REC_NO_MATCH; + return false; /* This is from some other Session */ + } + rec->Stream = -Stream; /* set correct Stream */ + rec->maskedStream = rec->Stream & STREAMMASK_TYPE; + } else { /* Regular record */ + Dmsg0(dbgep, "=== rpath 8 normal stream\n"); + rec->Stream = Stream; + rec->maskedStream = rec->Stream & STREAMMASK_TYPE; + rec->data_len = 0; /* transfer to beginning of data */ + } + rec->VolSessionId = VolSessionId; + rec->VolSessionTime = VolSessionTime; + rec->FileIndex = FileIndex; + if (FileIndex > 0) { + Dmsg0(dbgep, "=== rpath 9 FileIndex>0\n"); + if (block->FirstIndex == 0) { + Dmsg0(dbgep, "=== rpath 10 FirstIndex\n"); + block->FirstIndex = FileIndex; + } + block->LastIndex = rec->FileIndex; + } + + Dmsg6(read_dbglvl, "read_header: FI=%s SessId=%d Strm=%s len=%u rec->remlen=%d data_len=%d\n", + FI_to_ascii(buf1, rec->FileIndex), rec->VolSessionId, + stream_to_ascii(buf2, rec->Stream, rec->FileIndex), rec->data_bytes, rec->remlen, + rec->data_len); + } else { + Dmsg0(dbgep, "=== rpath 11a block out of records\n"); + /* + * No more records in this block because the number + * of remaining bytes are less than a record header + * length, so return empty handed, but indicate that + * he must read again. By returning, we allow the + * higher level routine to fetch the next block and + * then reread. + */ + Dmsg0(read_dbglvl, "read_header: End of block\n"); + rec->state_bits |= (REC_NO_HEADER | REC_BLOCK_EMPTY); + empty_block(block); /* mark block empty */ + return false; + } + + /* Sanity check */ + if (rec->data_bytes >= MAX_BLOCK_LENGTH) { + Dmsg0(dbgep, "=== rpath 11b maxlen too big\n"); + /* + * Something is wrong, force read of next block, abort + * continuing with this block. + */ + rec->state_bits |= (REC_NO_HEADER | REC_BLOCK_EMPTY); + empty_block(block); + Jmsg2(dcr->jcr, M_WARNING, 0, _("Sanity check failed. maxlen=%d datalen=%d. Block discarded.\n"), + MAX_BLOCK_LENGTH, rec->data_bytes); + return false; + } + + rec->data = check_pool_memory_size(rec->data, rec->data_len+rec->data_bytes); + rec->rstate = st_data; + return true; +} + +/* + * We have just read a header, now read the data into the record. + * Note, if we do not read the full record, we will return to + * read the next header, which will then come back here later + * to finish reading the full record. + */ +static void read_data(DEV_BLOCK *block, DEV_RECORD *rec) +{ + char buf1[100], buf2[100]; + + Dmsg0(dbgep, "=== rpath 22 read_data\n"); + /* + * At this point, we have read the header, now we + * must transfer as much of the data record as + * possible taking into account: 1. A partial + * data record may have previously been transferred, + * 2. The current block may not contain the whole data + * record. + */ + if (rec->remlen >= rec->data_bytes) { + Dmsg0(dbgep, "=== rpath 23 full record\n"); + /* Got whole record */ + memcpy(rec->data+rec->data_len, block->bufp, rec->data_bytes); + block->bufp += rec->data_bytes; + block->binbuf -= rec->data_bytes; + rec->data_len += rec->data_bytes; + rec->remainder = 0; + Dmsg5(190, "Rdata full FI=%s SessId=%d Strm=%s len=%d block=%p\n", + FI_to_ascii(buf1, rec->FileIndex), rec->VolSessionId, + stream_to_ascii(buf2, rec->Stream, rec->FileIndex), rec->data_len, + block); + } else { + Dmsg0(dbgep, "=== rpath 24 partial record\n"); + /* Partial record */ + memcpy(rec->data+rec->data_len, block->bufp, rec->remlen); + block->bufp += rec->remlen; + block->binbuf -= rec->remlen; + rec->data_len += rec->remlen; + rec->remainder = 1; /* partial record transferred */ + Dmsg1(read_dbglvl, "read_data: partial xfered=%d\n", rec->data_len); + rec->state_bits |= (REC_PARTIAL_RECORD | REC_BLOCK_EMPTY); + } +} + + +/* + * Read a Record from the block + * Returns: false if nothing read or if the continuation record does not match. + * In both of these cases, a block read must be done. + * true if at least the record header was read, this + * routine may have to be called again with a new + * block if the entire record was not read. + */ +bool read_record_from_block(DCR *dcr, DEV_RECORD *rec) +{ + bool rtn; + + Dmsg0(dbgep, "=== rpath 1 Enter read_record_from block\n"); + for ( ;; ) { + switch (rec->rstate) { + case st_none: + dump_block(dcr->block, "st_none"); + case st_header: + Dmsg0(dbgep, "=== rpath 33 st_header\n"); + rec->remlen = dcr->block->binbuf; + /* Note read_header sets rec->rstate on return true */ + if (!read_header(dcr, dcr->block, rec)) { /* sets state */ + Dmsg0(dbgep, "=== rpath 34 failed read header\n"); + Dmsg0(read_dbglvl, "read_header returned EOF.\n"); + goto fail_out; + } + continue; + + case st_data: + Dmsg0(dbgep, "=== rpath 37 st_data\n"); + read_data(dcr->block, rec); + rec->rstate = st_header; /* next pass look for a header */ + goto get_out; + + default: + Dmsg0(dbgep, "=== rpath 50 default\n"); + Dmsg0(0, "======= In default !!!!!\n"); + Pmsg1(190, "Read: unknown state=%d\n", rec->rstate); + goto fail_out; + } + } +get_out: + char buf1[100], buf2[100]; + Dmsg5(read_dbglvl, "read_rec return: FI=%s Strm=%s len=%d rem=%d remainder=%d\n", + FI_to_ascii(buf1, rec->FileIndex), + stream_to_ascii(buf2, rec->Stream, rec->FileIndex), rec->data_len, + rec->remlen, rec->remainder); + rtn = true; + goto out; +fail_out: + rec->rstate = st_none; + rtn = false; +out: + return rtn; +} diff --git a/bacula/src/stored/record_util.c b/bacula/src/stored/record_util.c new file mode 100644 index 0000000000..acac86460d --- /dev/null +++ b/bacula/src/stored/record_util.c @@ -0,0 +1,295 @@ +/* + Bacula® - The Network Backup Solution + + Copyright (C) 2001-2014 Free Software Foundation Europe e.V. + + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. + + Bacula® is a registered trademark of Kern Sibbald. +*/ +/* + * + * record-util.c -- Utilities for record handling + * + * Kern Sibbald, October MMXII + * + */ + +#include "bacula.h" +#include "stored.h" + +/* + * Convert a FileIndex into a printable + * ASCII string. Not reentrant. + * If the FileIndex is negative, it flags the + * record as a Label, otherwise it is simply + * the FileIndex of the current file. + */ +const char *FI_to_ascii(char *buf, int fi) +{ + if (fi >= 0) { + sprintf(buf, "%d", fi); + return buf; + } + switch (fi) { + case PRE_LABEL: + return "PRE_LABEL"; + case VOL_LABEL: + return "VOL_LABEL"; + case EOM_LABEL: + return "EOM_LABEL"; + case SOS_LABEL: + return "SOS_LABEL"; + case EOS_LABEL: + return "EOS_LABEL"; + case EOT_LABEL: + return "EOT_LABEL"; + break; + case SOB_LABEL: + return "SOB_LABEL"; + break; + case EOB_LABEL: + return "EOB_LABEL"; + break; + default: + sprintf(buf, _("unknown: %d"), fi); + return buf; + } +} + +/* + * Convert a Stream ID into a printable + * ASCII string. Not reentrant. + + * A negative stream number represents + * stream data that is continued from a + * record in the previous block. + * If the FileIndex is negative, we are + * dealing with a Label, hence the + * stream is the JobId. + */ +const char *stream_to_ascii(char *buf, int stream, int fi) +{ + + if (fi < 0) { + sprintf(buf, "%d", stream); + return buf; + } + if (stream < 0) { + stream = -stream; + stream &= STREAMMASK_TYPE; + /* Stream was negative => all are continuation items */ + switch (stream) { + case STREAM_UNIX_ATTRIBUTES: + return "contUATTR"; + case STREAM_FILE_DATA: + return "contDATA"; + case STREAM_WIN32_DATA: + return "contWIN32-DATA"; + case STREAM_WIN32_GZIP_DATA: + return "contWIN32-GZIP"; + case STREAM_WIN32_COMPRESSED_DATA: + return "contWIN32-COMPRESSED"; + case STREAM_MD5_DIGEST: + return "contMD5"; + case STREAM_SHA1_DIGEST: + return "contSHA1"; + case STREAM_GZIP_DATA: + return "contGZIP"; + case STREAM_COMPRESSED_DATA: + return "contCOMPRESSED"; + case STREAM_UNIX_ATTRIBUTES_EX: + return "contUNIX-ATTR-EX"; + case STREAM_RESTORE_OBJECT: + return "contRESTORE-OBJECT"; + case STREAM_SPARSE_DATA: + return "contSPARSE-DATA"; + case STREAM_SPARSE_GZIP_DATA: + return "contSPARSE-GZIP"; + case STREAM_SPARSE_COMPRESSED_DATA: + return "contSPARSE-COMPRESSED"; + case STREAM_PROGRAM_NAMES: + return "contPROG-NAMES"; + case STREAM_PROGRAM_DATA: + return "contPROG-DATA"; + case STREAM_MACOS_FORK_DATA: + return "contMACOS-RSRC"; + case STREAM_HFSPLUS_ATTRIBUTES: + return "contHFSPLUS-ATTR"; + case STREAM_SHA256_DIGEST: + return "contSHA256"; + case STREAM_SHA512_DIGEST: + return "contSHA512"; + case STREAM_SIGNED_DIGEST: + return "contSIGNED-DIGEST"; + case STREAM_ENCRYPTED_SESSION_DATA: + return "contENCRYPTED-SESSION-DATA"; + case STREAM_ENCRYPTED_FILE_DATA: + return "contENCRYPTED-FILE"; + case STREAM_ENCRYPTED_FILE_GZIP_DATA: + return "contENCRYPTED-GZIP"; + case STREAM_ENCRYPTED_FILE_COMPRESSED_DATA: + return "contENCRYPTED-COMPRESSED"; + case STREAM_ENCRYPTED_WIN32_DATA: + return "contENCRYPTED-WIN32-DATA"; + case STREAM_ENCRYPTED_WIN32_GZIP_DATA: + return "contENCRYPTED-WIN32-GZIP"; + case STREAM_ENCRYPTED_WIN32_COMPRESSED_DATA: + return "contENCRYPTED-WIN32-COMPRESSED"; + case STREAM_ENCRYPTED_MACOS_FORK_DATA: + return "contENCRYPTED-MACOS-RSRC"; + case STREAM_PLUGIN_NAME: + return "contPLUGIN-NAME"; + + default: + sprintf(buf, "%d", -stream); + return buf; + } + } + + switch (stream & STREAMMASK_TYPE) { + case STREAM_UNIX_ATTRIBUTES: + return "UATTR"; + case STREAM_FILE_DATA: + return "DATA"; + case STREAM_WIN32_DATA: + return "WIN32-DATA"; + case STREAM_WIN32_GZIP_DATA: + return "WIN32-GZIP"; + case STREAM_WIN32_COMPRESSED_DATA: + return "WIN32-COMPRESSED"; + case STREAM_MD5_DIGEST: + return "MD5"; + case STREAM_SHA1_DIGEST: + return "SHA1"; + case STREAM_GZIP_DATA: + return "GZIP"; + case STREAM_COMPRESSED_DATA: + return "COMPRESSED"; + case STREAM_UNIX_ATTRIBUTES_EX: + return "UNIX-ATTR-EX"; + case STREAM_RESTORE_OBJECT: + return "RESTORE-OBJECT"; + case STREAM_SPARSE_DATA: + return "SPARSE-DATA"; + case STREAM_SPARSE_GZIP_DATA: + return "SPARSE-GZIP"; + case STREAM_SPARSE_COMPRESSED_DATA: + return "SPARSE-COMPRESSED"; + case STREAM_PROGRAM_NAMES: + return "PROG-NAMES"; + case STREAM_PROGRAM_DATA: + return "PROG-DATA"; + case STREAM_PLUGIN_NAME: + return "PLUGIN-NAME"; + case STREAM_MACOS_FORK_DATA: + return "MACOS-RSRC"; + case STREAM_HFSPLUS_ATTRIBUTES: + return "HFSPLUS-ATTR"; + case STREAM_SHA256_DIGEST: + return "SHA256"; + case STREAM_SHA512_DIGEST: + return "SHA512"; + case STREAM_SIGNED_DIGEST: + return "SIGNED-DIGEST"; + case STREAM_ENCRYPTED_SESSION_DATA: + return "ENCRYPTED-SESSION-DATA"; + case STREAM_ENCRYPTED_FILE_DATA: + return "ENCRYPTED-FILE"; + case STREAM_ENCRYPTED_FILE_GZIP_DATA: + return "ENCRYPTED-GZIP"; + case STREAM_ENCRYPTED_FILE_COMPRESSED_DATA: + return "ENCRYPTED-COMPRESSED"; + case STREAM_ENCRYPTED_WIN32_DATA: + return "ENCRYPTED-WIN32-DATA"; + case STREAM_ENCRYPTED_WIN32_GZIP_DATA: + return "ENCRYPTED-WIN32-GZIP"; + case STREAM_ENCRYPTED_WIN32_COMPRESSED_DATA: + return "ENCRYPTED-WIN32-COMPRESSED"; + case STREAM_ENCRYPTED_MACOS_FORK_DATA: + return "ENCRYPTED-MACOS-RSRC"; + + default: + sprintf(buf, "%d", stream); + return buf; + } +} + +/* + * Return a new record entity + */ +DEV_RECORD *new_record(void) +{ + DEV_RECORD *rec; + + rec = (DEV_RECORD *)get_memory(sizeof(DEV_RECORD)); + memset(rec, 0, sizeof(DEV_RECORD)); + rec->data = get_pool_memory(PM_MESSAGE); + rec->wstate = st_none; + rec->rstate = st_none; + return rec; +} + +void empty_record(DEV_RECORD *rec) +{ + rec->File = rec->Block = 0; + rec->VolSessionId = rec->VolSessionTime = 0; + rec->FileIndex = rec->Stream = 0; + rec->data_len = rec->remainder = 0; + rec->state_bits &= ~(REC_PARTIAL_RECORD|REC_BLOCK_EMPTY|REC_NO_MATCH|REC_CONTINUATION); + rec->wstate = st_none; + rec->rstate = st_none; +} + +/* + * Free the record entity + * + */ +void free_record(DEV_RECORD *rec) +{ + Dmsg0(950, "Enter free_record.\n"); + if (rec->data) { + free_pool_memory(rec->data); + } + Dmsg0(950, "Data buf is freed.\n"); + free_pool_memory((POOLMEM *)rec); + Dmsg0(950, "Leave free_record.\n"); +} + +/* + * Test if we can write whole record to the block + * + * Returns: false on failure + * true on success (all bytes can be written) + */ +bool can_write_record_to_block(DEV_BLOCK *block, DEV_RECORD *rec) +{ + uint32_t remlen; + + remlen = block->buf_len - block->binbuf; + if (rec->remainder == 0) { + if (remlen >= WRITE_RECHDR_LENGTH) { + remlen -= WRITE_RECHDR_LENGTH; + rec->remainder = rec->data_len; + } else { + return false; + } + } else { + return false; + } + if (rec->remainder > 0 && remlen < rec->remainder) { + return false; + } + return true; +} + +uint64_t get_record_address(DEV_RECORD *rec) +{ + return ((uint64_t)rec->File)<<32 | rec->Block; +} diff --git a/bacula/src/stored/record_write.c b/bacula/src/stored/record_write.c new file mode 100644 index 0000000000..e078e7f8cb --- /dev/null +++ b/bacula/src/stored/record_write.c @@ -0,0 +1,353 @@ +/* + Bacula® - The Network Backup Solution + + Copyright (C) 20xx-2014 Free Software Foundation Europe e.V. + + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. + + Bacula® is a registered trademark of Kern Sibbald. +*/ +/* + * + * record_write.c -- Volume (tape/disk) record write functions + * + * Kern Sibbald, April MMI + * added BB02 format October MMII + * added aligned format November MMXII + * + */ + + +#include "bacula.h" +#include "stored.h" + +/* Imported functions */ + +static const int dbgep = 250; /* debug execution path */ +static const int dbgel = 250; /* debug Enter/Leave code */ + +struct rechdr { + int32_t FileIndex; + uint32_t data_len; + uint32_t reclen; + int32_t Stream; + int32_t oStream; +}; + +/* + * Flush block to disk + */ +bool flush_block(DCR *dcr) +{ + bool rtn = false; + + if (!is_block_empty(dcr->block)) { + Dmsg0(dbgep, "=== wpath 53 flush_block\n"); + Dmsg3(190, "Call flush_block BlockAddr=%lld nbytes=%d block=%x\n", + dcr->block->BlockAddr, dcr->block->binbuf, dcr->block); + dump_block(dcr->block, "Flush_block"); + if (dcr->jcr->is_canceled() || !dcr->write_block_to_device()) { + Dmsg0(dbgep, "=== wpath 54 flush_block\n"); + Dmsg0(190, "Failed to write block to device, return false.\n"); + goto get_out; + } + empty_block(dcr->block); + } + rtn = true; + +get_out: + return rtn; +} + +/* + * Write a header record to the block. + */ +static bool write_header_to_block(DCR *dcr, DEV_BLOCK *block, DEV_RECORD *rec) +{ + ser_declare; + + Dmsg0(dbgep, "=== wpath 11 write_header_to_block\n"); + rec->remlen = block->buf_len - block->binbuf; + /* Require enough room to write a full header */ + if (rec->remlen < WRITE_RECHDR_LENGTH) { + Dmsg0(dbgep, "=== wpath 12 write_header_to_block\n"); + Dmsg4(190, "Fail remlen=%d<%d reclen buf_len=%d binbuf=%d\n", + rec->remlen, WRITE_RECHDR_LENGTH, block->buf_len, block->binbuf); + rec->remainder = rec->data_len + WRITE_RECHDR_LENGTH; + return false; + } + ser_begin(block->bufp, WRITE_RECHDR_LENGTH); + if (BLOCK_VER == 1) { + Dmsg0(dbgep, "=== wpath 13 write_header_to_block\n"); + ser_uint32(rec->VolSessionId); + ser_uint32(rec->VolSessionTime); + } else { + Dmsg0(dbgep, "=== wpath 14 write_header_to_block\n"); + block->VolSessionId = rec->VolSessionId; + block->VolSessionTime = rec->VolSessionTime; + } + ser_int32(rec->FileIndex); + ser_int32(rec->Stream); + ser_uint32(rec->data_len); + + block->bufp += WRITE_RECHDR_LENGTH; + block->binbuf += WRITE_RECHDR_LENGTH; + rec->remlen -= WRITE_RECHDR_LENGTH; + rec->remainder = rec->data_len; + if (rec->FileIndex > 0) { + Dmsg0(dbgep, "=== wpath 15 write_header_to_block\n"); + /* If data record, update what we have in this block */ + if (block->FirstIndex == 0) { + Dmsg0(dbgep, "=== wpath 16 write_header_to_block\n"); + block->FirstIndex = rec->FileIndex; + } + block->LastIndex = rec->FileIndex; + } + + //dump_block(block, "Add header"); + return true; +} + +/* + * If the prior block was not big enough to hold the + * whole record, write a continuation header record. + */ +static void write_continue_header_to_block(DCR *dcr, DEV_BLOCK *block, DEV_RECORD *rec) +{ + ser_declare; + + Dmsg0(dbgep, "=== wpath 17 write_cont_hdr_to_block\n"); + rec->remlen = block->buf_len - block->binbuf; + /* + * We have unwritten bytes from a previous + * time. Presumably we have a new buffer (possibly + * containing a volume label), so the new header + * should be able to fit in the block -- otherwise we have + * an error. Note, we have to continue splitting the + * data record if it is longer than the block. + * + * First, write the header. + * + * Every time we write a header and it is a continuation + * of a previous partially written record, we store the + * Stream as -Stream in the record header. + */ + ser_begin(block->bufp, WRITE_RECHDR_LENGTH); + if (BLOCK_VER == 1) { + Dmsg0(dbgep, "=== wpath 18 write_cont_hdr_to_block\n"); + ser_uint32(rec->VolSessionId); + ser_uint32(rec->VolSessionTime); + } else { + Dmsg0(dbgep, "=== wpath 19 write_cont_hdr_to_block\n"); + block->VolSessionId = rec->VolSessionId; + block->VolSessionTime = rec->VolSessionTime; + } + ser_int32(rec->FileIndex); + if (rec->remainder > rec->data_len) { + Dmsg0(dbgep, "=== wpath 20 write_cont_hdr_to_block\n"); + ser_int32(rec->Stream); /* normal full header */ + ser_uint32(rec->data_len); + rec->remainder = rec->data_len; /* must still do data record */ + } else { + Dmsg0(dbgep, "=== wpath 21 write_cont_hdr_to_block\n"); + ser_int32(-rec->Stream); /* mark this as a continuation record */ + ser_uint32(rec->remainder); /* bytes to do */ + } + + /* Require enough room to write a full header */ + ASSERT(rec->remlen >= WRITE_RECHDR_LENGTH); + + block->bufp += WRITE_RECHDR_LENGTH; + block->binbuf += WRITE_RECHDR_LENGTH; + rec->remlen -= WRITE_RECHDR_LENGTH; + if (rec->FileIndex > 0) { + Dmsg0(dbgep, "=== wpath 22 write_cont_hdr_to_block\n"); + /* If data record, update what we have in this block */ + if (block->FirstIndex == 0) { + Dmsg0(dbgep, "=== wpath 23 write_cont_hdr_to_block\n"); + block->FirstIndex = rec->FileIndex; + } + block->LastIndex = rec->FileIndex; + } + //dump_block(block, "Add cont header"); +} + +/* + */ +static bool write_data_to_block(DCR *dcr, DEV_BLOCK *block, DEV_RECORD *rec) +{ + Dmsg0(dbgep, "=== wpath 24 write_data_to_block\n"); + rec->remlen = block->buf_len - block->binbuf; + /* Write as much of data as possible */ + if (rec->remlen >= rec->remainder) { + Dmsg0(dbgep, "=== wpath 25 write_data_to_block\n"); + memcpy(block->bufp, rec->data+rec->data_len-rec->remainder, + rec->remainder); + block->bufp += rec->remainder; + block->binbuf += rec->remainder; + rec->remainder = 0; + } else { + Dmsg0(dbgep, "=== wpath 26 write_data_to_block\n"); + memcpy(block->bufp, rec->data+rec->data_len-rec->remainder, + rec->remlen); + block->bufp += rec->remlen; + block->binbuf += rec->remlen; + rec->remainder -= rec->remlen; + return false; /* did partial transfer */ + } + return true; +} + +/* + * Write a record to the block -- handles writing out full + * blocks by writing them to the device. + * + * Returns: false means the block could not be written to tape/disk. + * true on success (all bytes written to the block). + */ +bool DCR::write_record(DEV_RECORD *rec) +{ + Enter(dbgel); + Dmsg0(dbgep, "=== wpath 33 write_record\n"); + while (!write_record_to_block(this, rec)) { + Dmsg2(850, "!write_record_to_block data_len=%d rem=%d\n", rec->data_len, + rec->remainder); + if (jcr->is_canceled()) { + Leave(dbgel); + return false; + } + if (!write_block_to_device()) { + Dmsg0(dbgep, "=== wpath 34 write_record\n"); + Pmsg2(000, "Got write_block_to_dev error on device %s. %s\n", + dev->print_name(), dev->bstrerror()); + Leave(dbgel); + return false; + } + Dmsg2(850, "!write_record_to_block data_len=%d rem=%d\n", rec->data_len, + rec->remainder); + } + Leave(dbgel); + return true; +} + +/* + * Write a record to the block + * + * Returns: false on failure (none or partially written) + * true on success (all bytes written) + * + * and remainder returned in packet. + * + * We require enough room for the header, and we deal with + * two special cases. 1. Only part of the record may have + * been transferred the last time (when remainder is + * non-zero), and 2. The remaining bytes to write may not + * all fit into the block. + * + */ +bool write_record_to_block(DCR *dcr, DEV_RECORD *rec) +{ + char buf1[100], buf2[100]; + bool rtn; + + Enter(dbgel); + Dmsg0(dbgep, "=== wpath 35 enter write_record_to_block\n"); + Dmsg7(200, "write_record_to_block() state=%d FI=%s SessId=%d" + " Strm=%s len=%d rem=%d remainder=%d\n", rec->wstate, + FI_to_ascii(buf1, rec->FileIndex), rec->VolSessionId, + stream_to_ascii(buf2, rec->Stream, rec->FileIndex), rec->data_len, + rec->remlen, rec->remainder); + Dmsg4(160, "write_rec Strm=%s len=%d rem=%d remainder=%d\n", + stream_to_ascii(buf2, rec->Stream, rec->FileIndex), rec->data_len, + rec->remlen, rec->remainder); + + for ( ;; ) { + Dmsg0(dbgep, "=== wpath 37 top of for loop\n"); + ASSERT(dcr->block->binbuf == (uint32_t) (dcr->block->bufp - dcr->block->buf)); + ASSERT(dcr->block->buf_len >= dcr->block->binbuf); + + switch (rec->wstate) { + case st_none: + Dmsg0(dbgep, "=== wpath 38 st_none\n"); + /* Figure out what to do */ + rec->wstate = st_header; + if (rec->FileIndex < 0) { + /* Label record */ + rec->wstate = st_header; + continue; + } + continue; /* go to next state */ + + case st_header: + /* + * Write header + * + * If rec->remainder is non-zero, we have been called a + * second (or subsequent) time to finish writing a record + * that did not previously fit into the block. + */ + Dmsg0(dbgep, "=== wpath 42 st_header\n"); + if (!write_header_to_block(dcr, dcr->block, rec)) { + Dmsg0(dbgep, "=== wpath 43 st_header\n"); + rec->wstate = st_cont_header; + goto fail_out; + } + Dmsg0(dbgep, "=== wpath 44 st_header\n"); + rec->wstate = st_data; + continue; + + case st_cont_header: + Dmsg0(dbgep, "=== wpath 45 st_cont_header\n"); + write_continue_header_to_block(dcr, dcr->block, rec); + rec->wstate = st_data; + if (rec->remlen == 0) { + Dmsg0(dbgep, "=== wpath 46 st_cont_header\n"); + goto fail_out; + } + continue; + + /* + * We come here only once for each record + */ + case st_data: + /* + * Write data + * + * Part of it may have already been transferred, and we + * may not have enough room to transfer the whole this time. + */ + Dmsg0(dbgep, "=== wpath 47 st_data\n"); + if (rec->remainder > 0) { + Dmsg0(dbgep, "=== wpath 48 st_data\n"); + if (!write_data_to_block(dcr, dcr->block, rec)) { + Dmsg0(dbgep, "=== wpath 49 st_data\n"); + rec->wstate = st_cont_header; + goto fail_out; + } + } + rec->remainder = 0; /* did whole transfer */ + rec->wstate = st_none; + goto get_out; + + default: + Dmsg0(dbgep, "=== wpath 67!!!! default\n"); + Dmsg0(50, "Something went wrong. Default state.\n"); + rec->wstate = st_none; + goto get_out; + } + } +get_out: + rtn = true; + goto out; +fail_out: + rtn = false; +out: + Leave(dbgel); + return rtn; +} diff --git a/bacula/src/stored/reserve.c b/bacula/src/stored/reserve.c index 10cc4f8da2..5f696a37cf 100644 --- a/bacula/src/stored/reserve.c +++ b/bacula/src/stored/reserve.c @@ -1,34 +1,22 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2012 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Drive reservation functions for Storage Daemon * - * Kern Sibbald, MM + * Written by Kern Sibbald, MM * * Split from job.c and acquire.c June 2005 * @@ -40,41 +28,30 @@ const int dbglvl = 150; static brwlock_t reservation_lock; +int reservations_lock_count = 0; /* Forward referenced functions */ -static int can_reserve_drive(DCR *dcr, RCTX &rctx); -static int reserve_device(RCTX &rctx); -static bool reserve_device_for_read(DCR *dcr); +static int can_reserve_drive(DCR *dcr, RCTX &rctx); +static bool is_vol_in_autochanger(RCTX &rctx, VOLRES *vol); static bool reserve_device_for_append(DCR *dcr, RCTX &rctx); +static bool reserve_device_for_read(DCR *dcr); static bool use_device_cmd(JCR *jcr); -static void queue_reserve_message(JCR *jcr); +static int reserve_device(RCTX &rctx); static void pop_reserve_messages(JCR *jcr); +static void queue_reserve_message(JCR *jcr); //void switch_device(DCR *dcr, DEVICE *dev); /* Requests from the Director daemon */ static char use_storage[] = "use storage=%127s media_type=%127s " - "pool_name=%127s pool_type=%127s append=%d copy=%d stripe=%d\n"; + "pool_name=%127s pool_type=%127s append=%d copy=%d stripe=%d\n"; static char use_device[] = "use device=%127s\n"; /* Responses sent to Director daemon */ static char OK_device[] = "3000 OK use device device=%s\n"; static char NO_device[] = "3924 Device \"%s\" not in SD Device" - " resources or no matching Media Type.\n"; + " resources or no matching Media Type.\n"; static char BAD_use[] = "3913 Bad use command: %s\n"; -bool use_cmd(JCR *jcr) -{ - /* - * Get the device, media, and pool information - */ - if (!use_device_cmd(jcr)) { - jcr->setJobStatus(JS_ErrorTerminated); - memset(jcr->sd_auth_key, 0, strlen(jcr->sd_auth_key)); - return false; - } - return true; -} - /* * This allows a given thread to recursively call lock_reservations. * It must, of course, call unlock_... the same number of times. @@ -91,13 +68,6 @@ void init_reservations_lock() init_vol_list_lock(); } -void term_reservations_lock() -{ - rwl_destroy(&reservation_lock); - term_vol_list_lock(); -} - -int reservations_lock_count = 0; /* This applies to a drive and to Volumes */ void _lock_reservations(const char *file, int line) @@ -122,11 +92,10 @@ void _unlock_reservations() } } -void DCR::set_reserved() +void term_reservations_lock() { - m_reserved = true; - Dmsg2(dbglvl, "Inc reserve=%d dev=%s\n", dev->num_reserved(), dev->print_name()); - dev->inc_reserved(); + rwl_destroy(&reservation_lock); + term_vol_list_lock(); } void DCR::clear_reserved() @@ -138,18 +107,37 @@ void DCR::clear_reserved() } } -/* +void DCR::set_reserved_for_append() +{ + m_reserved = true; + dev->set_append_reserve(); + Dmsg2(dbglvl, "Inc reserve=%d dev=%s\n", dev->num_reserved(), dev->print_name()); + dev->inc_reserved(); +} + +void DCR::set_reserved_for_read() +{ + m_reserved = true; + dev->set_read_reserve(); + Dmsg2(dbglvl, "Inc reserve=%d dev=%s\n", dev->num_reserved(), dev->print_name()); + dev->inc_reserved(); +} + +/* * Remove any reservation from a drive and tell the system * that the volume is unused at least by us. */ -void DCR::unreserve_device() +void DCR::unreserve_device(bool locked) { - dev->Lock(); + if (!locked) { + dev->Lock(); + } if (is_reserved()) { clear_reserved(); reserved_volume = false; /* If we set read mode in reserving, remove it */ if (dev->can_read()) { + remove_read_volume(jcr, this->VolumeName); dev->clear_read(); } if (dev->num_writers < 0) { @@ -161,7 +149,22 @@ void DCR::unreserve_device() volume_unused(this); } } - dev->Unlock(); + if (!locked) { + dev->Unlock(); + } +} + +bool use_cmd(JCR *jcr) +{ + /* + * Get the device, media, and pool information + */ + if (!use_device_cmd(jcr)) { + jcr->setJobStatus(JS_ErrorTerminated); + memset(jcr->sd_auth_key, 0, strlen(jcr->sd_auth_key)); + return false; + } + return true; } /* @@ -180,7 +183,7 @@ static bool use_device_cmd(JCR *jcr) POOL_MEM store_name, dev_name, media_type, pool_name, pool_type; BSOCK *dir = jcr->dir_bsock; int32_t append; - bool ok; + bool ok; int32_t Copy, Stripe; DIRSTORE *store; RCTX rctx; @@ -193,11 +196,11 @@ static bool use_device_cmd(JCR *jcr) * use_device for each device that it wants to use. */ dirstore = New(alist(10, not_owned_by_alist)); - jcr->reserve_msgs = New(alist(10, not_owned_by_alist)); + jcr->reserve_msgs = New(alist(10, not_owned_by_alist)); do { Dmsg1(dbglvl, "msg); - ok = sscanf(dir->msg, use_storage, store_name.c_str(), - media_type.c_str(), pool_name.c_str(), + ok = sscanf(dir->msg, use_storage, store_name.c_str(), + media_type.c_str(), pool_name.c_str(), pool_type.c_str(), &append, &Copy, &Stripe) == 7; if (!ok) { break; @@ -235,12 +238,12 @@ static bool use_device_cmd(JCR *jcr) } while (ok && dir->recv() >= 0); #ifdef xxxx - /* Developer debug code */ + /* Developers debug code */ char *device_name; if (debug_level >= dbglvl) { foreach_alist(store, dirstore) { - Dmsg5(dbglvl, "Storage=%s media_type=%s pool=%s pool_type=%s append=%d\n", - store->name, store->media_type, store->pool_name, + Dmsg5(dbglvl, "Storage=%s media_type=%s pool=%s pool_type=%s append=%d\n", + store->name, store->media_type, store->pool_name, store->pool_type, store->append); foreach_alist(device_name, store->device) { Dmsg1(dbglvl, " Device=%s\n", device_name); @@ -250,24 +253,24 @@ static bool use_device_cmd(JCR *jcr) #endif init_jcr_device_wait_timers(jcr); - jcr->dcr = new_dcr(jcr, NULL, NULL); /* get a dcr */ + jcr->dcr = new_dcr(jcr, NULL, NULL, !rctx.append); /* get a dcr */ if (!jcr->dcr) { BSOCK *dir = jcr->dir_bsock; dir->fsend(_("3939 Could not get dcr\n")); Dmsg1(dbglvl, ">dird: %s", dir->msg); ok = false; } - /* + /* * At this point, we have a list of all the Director's Storage * resources indicated for this Job, which include Pool, PoolType, - * storage name, and Media type. + * storage name, and Media type. * Then for each of the Storage resources, we have a list of * device names that were given. * * Wiffle through them and find one that can do the backup. */ if (ok) { - int wait_for_device_retries = 0; + int wait_for_device_retries = 0; int repeat = 0; bool fail = false; rctx.notify_dir = true; @@ -293,7 +296,7 @@ static bool use_device_cmd(JCR *jcr) */ rctx.num_writers = 20000000; /* start with impossible number */ rctx.low_use_drive = NULL; - rctx.PreferMountedVols = false; + rctx.PreferMountedVols = false; rctx.exact_match = false; rctx.autochanger_only = true; if ((ok = find_suitable_device_for_job(jcr, rctx))) { @@ -335,7 +338,7 @@ static bool use_device_cmd(JCR *jcr) } /* Keep reservations locked *except* during wait_for_device() */ unlock_reservations(); - /* + /* * The idea of looping on repeat a few times it to ensure * that if there is some subtle timing problem between two * jobs, we will simply try again, and most likely succeed. @@ -344,15 +347,16 @@ static bool use_device_cmd(JCR *jcr) */ if (repeat++ > 1) { /* try algorithm 3 times */ bmicrosleep(30, 0); /* wait a bit */ - Dmsg0(dbglvl, "repeat reserve algorithm\n"); - } else if (!rctx.suitable_device || !wait_for_device(jcr, wait_for_device_retries)) { - Dmsg0(dbglvl, "Fail. !suitable_device || !wait_for_device\n"); + Dmsg1(100, "repeat reserve algorithm JobId=%d\n", jcr->JobId); + } else if (!rctx.suitable_device || !wait_for_any_device(jcr, wait_for_device_retries)) { + Dmsg0(100, "Fail. !suitable_device || !wait_for_device\n"); fail = true; - } + } lock_reservations(); dir->signal(BNET_HEARTBEAT); /* Inform Dir that we are alive */ } unlock_reservations(); + if (!ok) { /* * If we get here, there are no suitable devices available, which @@ -361,7 +365,7 @@ static bool use_device_cmd(JCR *jcr) */ unbash_spaces(dir->msg); pm_strcpy(jcr->errmsg, dir->msg); - Jmsg(jcr, M_FATAL, 0, _("Device reservation failed for JobId=%d: %s\n"), + Jmsg(jcr, M_FATAL, 0, _("Device reservation failed for JobId=%d: %s\n"), jcr->JobId, jcr->errmsg); dir->fsend(NO_device, dev_name.c_str()); @@ -379,33 +383,12 @@ static bool use_device_cmd(JCR *jcr) return ok; } - -/* - * Walk through the autochanger resources and check if - * the volume is in one of them. - * - * Returns: true if volume is in device - * false otherwise - */ -static bool is_vol_in_autochanger(RCTX &rctx, VOLRES *vol) -{ - AUTOCHANGER *changer = vol->dev->device->changer_res; - - /* Find resource, and make sure we were able to open it */ - if (strcmp(rctx.device_name, changer->hdr.name) == 0) { - Dmsg1(dbglvl, "Found changer device %s\n", vol->dev->device->hdr.name); - return true; - } - Dmsg1(dbglvl, "Incorrect changer device %s\n", changer->hdr.name); - return false; -} - /* * Search for a device suitable for this job. - * Note, this routine sets sets rctx.suitable_device if any + * Note, this routine sets sets rctx.suitable_device if any * device exists within the SD. The device may not be actually * useable. - * It also returns if it finds a useable device. + * It also returns if it finds a useable device. */ bool find_suitable_device_for_job(JCR *jcr, RCTX &rctx) { @@ -424,7 +407,7 @@ bool find_suitable_device_for_job(JCR *jcr, RCTX &rctx) rctx.PreferMountedVols, rctx.exact_match, rctx.suitable_device, rctx.autochanger_only, rctx.any_drive); - /* + /* * If the appropriate conditions of this if are met, namely that * we are appending and the user wants mounted drive (or we * force try a mounted drive because they are all busy), we @@ -457,9 +440,12 @@ bool find_suitable_device_for_job(JCR *jcr, RCTX &rctx) rctx.device_name = device_name; rctx.device = vol->dev->device; + if (vol->dev->read_only) { + continue; + } if (vol->dev->is_autochanger()) { Dmsg1(dbglvl, "vol=%s is in changer\n", vol->vol_name); - if (!is_vol_in_autochanger(rctx, vol) || !vol->dev->autoselect) { + if (!is_vol_in_autochanger(rctx, vol) || vol->dev->autoselect) { continue; } } else if (strcmp(device_name, vol->dev->device->hdr.name) != 0) { @@ -503,8 +489,8 @@ bool find_suitable_device_for_job(JCR *jcr, RCTX &rctx) return true; } - /* - * No reserved volume we can use, so now search for an available device. + /* + * No reserved volume we can use, so now search for an available device. * * For each storage device that the user specified, we * search and see if there is a resource for that device. @@ -514,7 +500,7 @@ bool find_suitable_device_for_job(JCR *jcr, RCTX &rctx) foreach_alist(device_name, store->device) { int stat; rctx.device_name = device_name; - stat = search_res_for_device(rctx); + stat = search_res_for_device(rctx); if (stat == 1) { /* found available device */ Dmsg1(dbglvl, "available device found=%s\n", device_name); ok = true; @@ -542,7 +528,7 @@ bool find_suitable_device_for_job(JCR *jcr, RCTX &rctx) * Search for a particular storage device with particular storage * characteristics (MediaType). */ -int search_res_for_device(RCTX &rctx) +int search_res_for_device(RCTX &rctx) { AUTOCHANGER *changer; int stat; @@ -556,6 +542,9 @@ int search_res_for_device(RCTX &rctx) /* Try each device in this AutoChanger */ foreach_alist(rctx.device, changer->device) { Dmsg1(dbglvl, "Try changer device %s\n", rctx.device->hdr.name); + if (rctx.store->append && rctx.device->read_only) { + continue; + } if (!rctx.device->autoselect) { Dmsg1(100, "Device %s not autoselect skipped.\n", rctx.device->hdr.name); @@ -566,11 +555,11 @@ int search_res_for_device(RCTX &rctx) continue; } /* Debug code */ - if (rctx.store->append == SD_APPEND) { - Dmsg2(dbglvl, "Device %s reserved=%d for append.\n", + if (rctx.store->append) { + Dmsg2(dbglvl, "Device %s reserved=%d for append.\n", rctx.device->hdr.name, rctx.jcr->dcr->dev->num_reserved()); } else { - Dmsg2(dbglvl, "Device %s reserved=%d for read.\n", + Dmsg2(dbglvl, "Device %s reserved=%d for read.\n", rctx.device->hdr.name, rctx.jcr->read_dcr->dev->num_reserved()); } return stat; @@ -589,11 +578,11 @@ int search_res_for_device(RCTX &rctx) continue; } /* Debug code */ - if (rctx.store->append == SD_APPEND) { - Dmsg2(dbglvl, "Device %s reserved=%d for append.\n", + if (rctx.store->append) { + Dmsg2(dbglvl, "Device %s reserved=%d for append.\n", rctx.device->hdr.name, rctx.jcr->dcr->dev->num_reserved()); } else { - Dmsg2(dbglvl, "Device %s reserved=%d for read.\n", + Dmsg2(dbglvl, "Device %s reserved=%d for read.\n", rctx.device->hdr.name, rctx.jcr->read_dcr->dev->num_reserved()); } return stat; @@ -603,6 +592,27 @@ int search_res_for_device(RCTX &rctx) return -1; /* nothing found */ } +/* + * Walk through the autochanger resources and check if + * the volume is in one of them. + * + * Returns: true if volume is in device + * false otherwise + */ +static bool is_vol_in_autochanger(RCTX &rctx, VOLRES *vol) +{ + AUTOCHANGER *changer = vol->dev->device->changer_res; + + /* Find resource, and make sure we were able to open it */ + if (changer && strcmp(rctx.device_name, changer->hdr.name) == 0) { + Dmsg1(dbglvl, "Found changer device %s\n", vol->dev->device->hdr.name); + return true; + } + Dmsg1(dbglvl, "Incorrect changer device %s\n", changer->hdr.name); + return false; +} + + /* * Try to reserve a specific device. * @@ -638,14 +648,14 @@ static int reserve_device(RCTX &rctx) rctx.device_name); } return -1; /* no use waiting */ - } + } rctx.suitable_device = true; Dmsg1(dbglvl, "try reserve %s\n", rctx.device->hdr.name); if (rctx.store->append) { - dcr = new_dcr(rctx.jcr, rctx.jcr->dcr, rctx.device->dev); + dcr = new_dcr(rctx.jcr, rctx.jcr->dcr, rctx.device->dev, SD_APPEND); } else { - dcr = new_dcr(rctx.jcr, rctx.jcr->read_dcr, rctx.device->dev); + dcr = new_dcr(rctx.jcr, rctx.jcr->read_dcr, rctx.device->dev, SD_READ); } if (!dcr) { BSOCK *dir = rctx.jcr->dir_bsock; @@ -657,8 +667,8 @@ static int reserve_device(RCTX &rctx) bstrncpy(dcr->pool_type, rctx.store->pool_type, name_len); bstrncpy(dcr->media_type, rctx.store->media_type, name_len); bstrncpy(dcr->dev_name, rctx.device_name, name_len); - if (rctx.store->append == SD_APPEND) { - Dmsg2(dbglvl, "call reserve for append: have_vol=%d vol=%s\n", rctx.have_volume, rctx.VolumeName); + if (rctx.store->append) { + Dmsg2(dbglvl, "call reserve for append: have_vol=%d vol=%s\n", rctx.have_volume, rctx.VolumeName); ok = reserve_device_for_append(dcr, rctx); if (!ok) { goto bail_out; @@ -668,7 +678,7 @@ static int reserve_device(RCTX &rctx) Dmsg5(dbglvl, "Reserved=%d dev_name=%s mediatype=%s pool=%s ok=%d\n", dcr->dev->num_reserved(), dcr->dev_name, dcr->media_type, dcr->pool_name, ok); - Dmsg3(dbglvl, "Vol=%s num_writers=%d, have_vol=%d\n", + Dmsg3(dbglvl, "Vol=%s num_writers=%d, have_vol=%d\n", rctx.VolumeName, dcr->dev->num_writers, rctx.have_volume); if (rctx.have_volume) { Dmsg0(dbglvl, "Call reserve_volume for append.\n"); @@ -686,6 +696,7 @@ static int reserve_device(RCTX &rctx) rctx.have_volume = true; Dmsg1(dbglvl, "looking for Volume=%s\n", rctx.VolumeName); } else { + dcr->dev->clear_wait(); Dmsg0(dbglvl, "No next volume found\n"); rctx.have_volume = false; rctx.VolumeName[0] = 0; @@ -699,7 +710,7 @@ static int reserve_device(RCTX &rctx) if (dcr->found_in_use() && !rctx.PreferMountedVols) { rctx.PreferMountedVols = true; if (dcr->VolumeName[0]) { - dcr->unreserve_device(); + dcr->unreserve_device(false); } goto bail_out; } @@ -709,14 +720,14 @@ static int reserve_device(RCTX &rctx) * drive, and in that case, the call above to find the next * volume will fail because in attempting to reserve the Volume * the code will realize that we already have a tape mounted, - * and it will fail. This *should* only happen if there are + * and it will fail. This *should* only happen if there are * writers, thus the following test. In that case, we simply * bail out, and continue waiting, rather than plunging on - * and hoping that the operator can resolve the problem. + * and hoping that the operator can resolve the problem. */ if (dcr->dev->num_writers != 0) { if (dcr->VolumeName[0]) { - dcr->unreserve_device(); + dcr->unreserve_device(false); } goto bail_out; } @@ -742,6 +753,9 @@ static int reserve_device(RCTX &rctx) bash_spaces(dev_name); ok = dir->fsend(OK_device, dev_name.c_str()); /* Return real device name */ Dmsg1(dbglvl, ">dird: %s", dir->msg); + if (!ok) { + dcr->unreserve_device(false); + } } else { ok = true; } @@ -754,66 +768,14 @@ bail_out: return 0; } -/* - * We "reserve" the drive by setting the ST_READ bit. No one else - * should touch the drive until that is cleared. - * This allows the DIR to "reserve" the device before actually - * starting the job. - */ -static bool reserve_device_for_read(DCR *dcr) -{ - DEVICE *dev = dcr->dev; - JCR *jcr = dcr->jcr; - bool ok = false; - - ASSERT(dcr); - if (job_canceled(jcr)) { - return false; - } - - dev->Lock(); - - if (dev->is_device_unmounted()) { - Dmsg1(dbglvl, "Device %s is BLOCKED due to user unmount.\n", dev->print_name()); - Mmsg(jcr->errmsg, _("3601 JobId=%u device %s is BLOCKED due to user unmount.\n"), - jcr->JobId, dev->print_name()); - queue_reserve_message(jcr); - goto bail_out; - } - - if (dev->is_busy()) { - Dmsg4(dbglvl, "Device %s is busy ST_READ=%d num_writers=%d reserved=%d.\n", - dev->print_name(), - dev->state & ST_READ?1:0, dev->num_writers, dev->num_reserved()); - Mmsg(jcr->errmsg, _("3602 JobId=%u device %s is busy (already reading/writing).\n"), - jcr->JobId, dev->print_name()); - queue_reserve_message(jcr); - goto bail_out; - } - - /* Note: on failure this returns jcr->errmsg properly edited */ - if (generate_plugin_event(jcr, bsdEventDeviceTryOpen, dcr) != bRC_OK) { - queue_reserve_message(jcr); - goto bail_out; - } - dev->clear_append(); - dev->set_read(); - dcr->set_reserved(); - ok = true; - -bail_out: - dev->Unlock(); - return ok; -} - /* * We reserve the device for appending by incrementing * num_reserved(). We do virtually all the same work that * is done in acquire_device_for_append(), but we do * not attempt to mount the device. This routine allows - * the DIR to reserve multiple devices before *really* - * starting the job. It also permits the SD to refuse + * the DIR to reserve multiple devices before *really* + * starting the job. It also permits the SD to refuse * certain devices (not up, ...). * * Note, in reserving a device, if the device is for the @@ -828,32 +790,32 @@ static bool reserve_device_for_append(DCR *dcr, RCTX &rctx) DEVICE *dev = dcr->dev; bool ok = false; - ASSERT(dcr); + ASSERT2(dcr, "No dcr in reserve_device_for_append!"); if (job_canceled(jcr)) { return false; } dev->Lock(); - /* If device is being read, we cannot write it */ - if (dev->can_read()) { - Mmsg(jcr->errmsg, _("3603 JobId=%u device %s is busy reading.\n"), - jcr->JobId, dev->print_name()); - Dmsg1(dbglvl, "Failed: %s", jcr->errmsg); + /* If device is being read or reserved for read, we cannot write it */ + if (dev->can_read() || dev->is_reserved_for_read()) { + Mmsg(jcr->errmsg, _("3603 JobId=%u %s device %s is busy reading.\n"), + jcr->JobId, dev->print_type(), dev->print_name()); queue_reserve_message(jcr); + Dmsg1(dbglvl, "Failed: %s", jcr->errmsg); goto bail_out; } /* If device is unmounted, we are out of luck */ if (dev->is_device_unmounted()) { - Mmsg(jcr->errmsg, _("3604 JobId=%u device %s is BLOCKED due to user unmount.\n"), - jcr->JobId, dev->print_name()); - Dmsg1(dbglvl, "Failed: %s", jcr->errmsg); + Mmsg(jcr->errmsg, _("3604 JobId=%u %s device %s is BLOCKED due to user unmount.\n"), + jcr->JobId, dev->print_type(), dev->print_name()); queue_reserve_message(jcr); + Dmsg1(dbglvl, "Failed: %s", jcr->errmsg); goto bail_out; } - Dmsg1(dbglvl, "reserve_append device is %s\n", dev->print_name()); + Dmsg2(dbglvl, "reserve_append %s device is %s\n", dev->print_type(), dev->print_name()); /* Now do detailed tests ... */ if (can_reserve_drive(dcr, rctx) != 1) { @@ -866,7 +828,7 @@ static bool reserve_device_for_append(DCR *dcr, RCTX &rctx) queue_reserve_message(jcr); goto bail_out; } - dcr->set_reserved(); + dcr->set_reserved_for_append(); ok = true; bail_out: @@ -874,30 +836,60 @@ bail_out: return ok; } -static int is_pool_ok(DCR *dcr) +/* + * We "reserve" the drive by setting the ST_READ bit. No one else + * should touch the drive until that is cleared. + * This allows the DIR to "reserve" the device before actually + * starting the job. + */ +static bool reserve_device_for_read(DCR *dcr) { DEVICE *dev = dcr->dev; JCR *jcr = dcr->jcr; + bool ok = false; - /* Now check if we want the same Pool and pool type */ - if (strcmp(dev->pool_name, dcr->pool_name) == 0 && - strcmp(dev->pool_type, dcr->pool_type) == 0) { - /* OK, compatible device */ - Dmsg1(dbglvl, "OK dev: %s num_writers=0, reserved, pool matches\n", dev->print_name()); - return 1; - } else { - /* Drive Pool not suitable for us */ - Mmsg(jcr->errmsg, _( -"3608 JobId=%u wants Pool=\"%s\" but have Pool=\"%s\" nreserve=%d on drive %s.\n"), - (uint32_t)jcr->JobId, dcr->pool_name, dev->pool_name, - dev->num_reserved(), dev->print_name()); - Dmsg1(dbglvl, "Failed: %s", jcr->errmsg); + ASSERT2(dcr, "No dcr in reserve_device_for_read!"); + if (job_canceled(jcr)) { + return false; + } + + dev->Lock(); + + if (dev->is_device_unmounted()) { + Mmsg(jcr->errmsg, _("3601 JobId=%u %s device %s is BLOCKED due to user unmount.\n"), + jcr->JobId, dev->print_type(), dev->print_name()); queue_reserve_message(jcr); + Dmsg1(dbglvl, "Device %s is BLOCKED due to user unmount.\n", dev->print_name()); + goto bail_out; } - return 0; + + if (dev->is_busy()) { + Mmsg(jcr->errmsg, _("3602 JobId=%u %s device %s is busy (already reading/writing)." + " read=%d, writers=%d reserved=%d\n"), + jcr->JobId, dev->print_type(), dev->print_name(), + dev->state & ST_READ?1:0, dev->num_writers, dev->num_reserved()); + queue_reserve_message(jcr); + Dmsg4(dbglvl, "Device %s is busy ST_READ=%d num_writers=%d reserved=%d.\n", + dev->print_name(), + dev->state & ST_READ?1:0, dev->num_writers, dev->num_reserved()); + goto bail_out; + } + + /* Note: on failure this returns jcr->errmsg properly edited */ + if (generate_plugin_event(jcr, bsdEventDeviceTryOpen, dcr) != bRC_OK) { + queue_reserve_message(jcr); + goto bail_out; + } + dev->clear_append(); + dcr->set_reserved_for_read(); + ok = true; + +bail_out: + dev->Unlock(); + return ok; } -static bool is_max_jobs_ok(DCR *dcr) +static bool is_max_jobs_ok(DCR *dcr) { DEVICE *dev = dcr->dev; JCR *jcr = dcr->jcr; @@ -908,36 +900,63 @@ static bool is_max_jobs_ok(DCR *dcr) dcr->VolCatInfo.VolCatStatus, dcr->VolumeName); /* Limit max concurrent jobs on this drive */ - if (dev->max_concurrent_jobs > 0 && dev->max_concurrent_jobs <= + if (dev->max_concurrent_jobs > 0 && dev->max_concurrent_jobs <= (uint32_t)(dev->num_writers + dev->num_reserved())) { /* Max Concurrent Jobs depassed or already reserved */ - Mmsg(jcr->errmsg, _("3609 JobId=%u Max concurrent jobs exceeded on drive %s.\n"), - (uint32_t)jcr->JobId, dev->print_name()); - Dmsg1(dbglvl, "Failed: %s", jcr->errmsg); + Mmsg(jcr->errmsg, _("3609 JobId=%u Max concurrent jobs=%d exceeded on %s device %s.\n"), + (uint32_t)jcr->JobId, dev->max_concurrent_jobs, + dev->print_type(), dev->print_name()); queue_reserve_message(jcr); + Dmsg1(dbglvl, "Failed: %s", jcr->errmsg); return false; } if (strcmp(dcr->VolCatInfo.VolCatStatus, "Recycle") == 0) { return true; } + if (dcr->VolCatInfo.VolCatMaxJobs > 0 && dcr->VolCatInfo.VolCatMaxJobs <= (dcr->VolCatInfo.VolCatJobs + dev->num_reserved())) { /* Max Job Vols depassed or already reserved */ - Mmsg(jcr->errmsg, _("3610 JobId=%u Volume max jobs exceeded on drive %s.\n"), - (uint32_t)jcr->JobId, dev->print_name()); - Dmsg1(dbglvl, "reserve dev failed: %s", jcr->errmsg); + Mmsg(jcr->errmsg, _("3611 JobId=%u Volume max jobs=%d exceeded on %s device %s.\n"), + (uint32_t)jcr->JobId, dcr->VolCatInfo.VolCatMaxJobs, + dev->print_type(), dev->print_name()); queue_reserve_message(jcr); + Dmsg1(dbglvl, "reserve dev failed: %s", jcr->errmsg); return false; /* wait */ } return true; } + +static int is_pool_ok(DCR *dcr) +{ + DEVICE *dev = dcr->dev; + JCR *jcr = dcr->jcr; + + /* Now check if we want the same Pool and pool type */ + if (strcmp(dev->pool_name, dcr->pool_name) == 0 && + strcmp(dev->pool_type, dcr->pool_type) == 0) { + /* OK, compatible device */ + Dmsg1(dbglvl, "OK dev: %s num_writers=0, reserved, pool matches\n", dev->print_name()); + return 1; + } else { + /* Drive Pool not suitable for us */ + Mmsg(jcr->errmsg, _( +"3608 JobId=%u wants Pool=\"%s\" but have Pool=\"%s\" nreserve=%d on %s device %s.\n"), + (uint32_t)jcr->JobId, dcr->pool_name, dev->pool_name, + dev->num_reserved(), dev->print_type(), dev->print_name()); + Dmsg1(dbglvl, "Failed: %s", jcr->errmsg); + queue_reserve_message(jcr); + } + return 0; +} + /* * Returns: 1 if drive can be reserved * 0 if we should wait * -1 on error or impossibility */ -static int can_reserve_drive(DCR *dcr, RCTX &rctx) +static int can_reserve_drive(DCR *dcr, RCTX &rctx) { DEVICE *dev = dcr->dev; JCR *jcr = dcr->jcr; @@ -954,10 +973,10 @@ static int can_reserve_drive(DCR *dcr, RCTX &rctx) /* setting any_drive overrides PreferMountedVols flag */ if (!rctx.any_drive) { /* - * When PreferMountedVols is set, we keep track of the + * When PreferMountedVols is set, we keep track of the * drive in use that has the least number of writers, then if - * no unmounted drive is found, we try that drive. This - * helps spread the load to the least used drives. + * no unmounted drive is found, we try that drive. This + * helps spread the load to the least used drives. */ if (rctx.try_low_use_drive && dev == rctx.low_use_drive) { Dmsg2(dbglvl, "OK dev=%s == low_drive=%s.\n", @@ -970,24 +989,24 @@ static int can_reserve_drive(DCR *dcr, RCTX &rctx) if ((dev->num_writers + dev->num_reserved()) < rctx.num_writers) { rctx.num_writers = dev->num_writers + dev->num_reserved(); rctx.low_use_drive = dev; - Dmsg2(dbglvl, "set low use drive=%s num_writers=%d\n", + Dmsg2(dbglvl, "set low use drive=%s num_writers=%d\n", dev->print_name(), rctx.num_writers); } else { Dmsg1(dbglvl, "not low use num_writers=%d\n", dev->num_writers+dev->num_reserved()); } - Mmsg(jcr->errmsg, _("3605 JobId=%u wants free drive but device %s is busy.\n"), - jcr->JobId, dev->print_name()); - Dmsg1(dbglvl, "Failed: %s", jcr->errmsg); + Mmsg(jcr->errmsg, _("3605 JobId=%u wants free drive but %s device %s is busy.\n"), + jcr->JobId, dev->print_type(), dev->print_name()); queue_reserve_message(jcr); + Dmsg1(dbglvl, "Failed: %s", jcr->errmsg); return 0; } /* Check for prefer mounted volumes */ if (rctx.PreferMountedVols && !dev->vol && dev->is_tape()) { - Mmsg(jcr->errmsg, _("3606 JobId=%u prefers mounted drives, but drive %s has no Volume.\n"), - jcr->JobId, dev->print_name()); - Dmsg1(dbglvl, "Failed: %s", jcr->errmsg); + Mmsg(jcr->errmsg, _("3606 JobId=%u prefers mounted drives, but %s device %s has no Volume.\n"), + jcr->JobId, dev->print_type(), dev->print_name()); queue_reserve_message(jcr); + Dmsg1(dbglvl, "Failed: %s", jcr->errmsg); return 0; /* No volume mounted */ } @@ -1001,14 +1020,14 @@ static int can_reserve_drive(DCR *dcr, RCTX &rctx) rctx.PreferMountedVols, rctx.exact_match, rctx.suitable_device, rctx.autochanger_only, rctx.any_drive); Dmsg4(dbglvl, "have_vol=%d have=%s resvol=%s want=%s\n", - rctx.have_volume, dev->VolHdr.VolumeName, + rctx.have_volume, dev->VolHdr.VolumeName, dev->vol?dev->vol->vol_name:"*none*", rctx.VolumeName); ok = strcmp(dev->VolHdr.VolumeName, rctx.VolumeName) == 0 || (dev->vol && strcmp(dev->vol->vol_name, rctx.VolumeName) == 0); if (!ok) { - Mmsg(jcr->errmsg, _("3607 JobId=%u wants Vol=\"%s\" drive has Vol=\"%s\" on drive %s.\n"), - jcr->JobId, rctx.VolumeName, dev->VolHdr.VolumeName, - dev->print_name()); + Mmsg(jcr->errmsg, _("3607 JobId=%u wants Vol=\"%s\" drive has Vol=\"%s\" on %s device %s.\n"), + jcr->JobId, rctx.VolumeName, dev->VolHdr.VolumeName, + dev->print_type(), dev->print_name()); queue_reserve_message(jcr); Dmsg3(dbglvl, "not OK: dev have=%s resvol=%s want=%s\n", dev->VolHdr.VolumeName, dev->vol?dev->vol->vol_name:"*none*", rctx.VolumeName); @@ -1035,11 +1054,11 @@ static int can_reserve_drive(DCR *dcr, RCTX &rctx) */ if (dev->num_writers == 0) { /* Now check if there are any reservations on the drive */ - if (dev->num_reserved()) { + if (dev->num_reserved()) { return is_pool_ok(dcr); } else if (dev->can_append()) { if (is_pool_ok(dcr)) { - return 1; + return 1; } else { /* Changing pool, unload old tape if any in drive */ Dmsg0(dbglvl, "OK dev: num_writers=0, not reserved, pool change, unload changer\n"); @@ -1062,28 +1081,26 @@ static int can_reserve_drive(DCR *dcr, RCTX &rctx) return is_pool_ok(dcr); } else { Pmsg1(000, _("Logic error!!!! JobId=%u Should not get here.\n"), (int)jcr->JobId); - Mmsg(jcr->errmsg, _("3910 JobId=%u Logic error!!!! drive %s Should not get here.\n"), - jcr->JobId, dev->print_name()); + Mmsg(jcr->errmsg, _("3910 JobId=%u Logic error!!!! %s device %s Should not get here.\n"), + jcr->JobId, dev->print_type(), dev->print_name()); queue_reserve_message(jcr); Jmsg0(jcr, M_FATAL, 0, _("Logic error!!!! Should not get here.\n")); return -1; /* error, should not get here */ } - Mmsg(jcr->errmsg, _("3911 JobId=%u failed reserve drive %s.\n"), - jcr->JobId, dev->print_name()); + Mmsg(jcr->errmsg, _("3911 JobId=%u failed reserve %s device %s.\n"), + jcr->JobId, dev->print_type(), dev->print_name()); queue_reserve_message(jcr); Dmsg1(dbglvl, "Failed: No reserve %s\n", dev->print_name()); return 0; } - - /* * Queue a reservation error or failure message for this jcr */ static void queue_reserve_message(JCR *jcr) { - int i; + int i; alist *msgs; char *msg; @@ -1106,7 +1123,7 @@ static void queue_reserve_message(JCR *jcr) if (strncmp(msg, jcr->errmsg, 4) == 0) { goto bail_out; } - } + } /* Message unique, so insert it */ jcr->reserve_msgs->push(bstrdup(jcr->errmsg)); @@ -1163,7 +1180,7 @@ bail_out: } /* - * Also called from acquire.c + * Also called from acquire.c */ void release_reserve_messages(JCR *jcr) { diff --git a/bacula/src/stored/reserve.h b/bacula/src/stored/reserve.h index 2683a0244c..20f7e74e2f 100644 --- a/bacula/src/stored/reserve.h +++ b/bacula/src/stored/reserve.h @@ -1,37 +1,24 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2006-2007 Free Software Foundation Europe e.V. + Copyright (C) 2006-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Definitions for reservation system. * * Kern Sibbald, February MMVI * - * Version $Id$ - */ + */ /* * Use Device command from Director diff --git a/bacula/src/stored/scan.c b/bacula/src/stored/scan.c index 514331c865..c2dba1dbb8 100644 --- a/bacula/src/stored/scan.c +++ b/bacula/src/stored/scan.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2006-2011 Free Software Foundation Europe e.V. + Copyright (C) 2006-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * @@ -69,15 +57,15 @@ bool DEVICE::scan_dir_for_volume(DCR *dcr) } else { mount_point = device->device_name; } - + if (!(dp = opendir(mount_point))) { berrno be; dev_errno = errno; - Dmsg3(29, "scan_dir_for_vol: failed to open dir %s (dev=%s), ERR=%s\n", + Dmsg3(29, "scan_dir_for_vol: failed to open dir %s (dev=%s), ERR=%s\n", mount_point, print_name(), be.bstrerror()); goto get_out; } - + len = strlen(mount_point); if (len > 0) { need_slash = !IsPathSeparator(mount_point[len - 1]); @@ -86,15 +74,15 @@ bool DEVICE::scan_dir_for_volume(DCR *dcr) for ( ;; ) { if ((readdir_r(dp, entry, &result) != 0) || (result == NULL)) { dev_errno = EIO; - Dmsg2(129, "scan_dir_for_vol: failed to find suitable file in dir %s (dev=%s)\n", + Dmsg2(129, "scan_dir_for_vol: failed to find suitable file in dir %s (dev=%s)\n", mount_point, print_name()); break; } - if (strcmp(result->d_name, ".") == 0 || + if (strcmp(result->d_name, ".") == 0 || strcmp(result->d_name, "..") == 0) { continue; } - + if (!is_volume_name_legal(result->d_name)) { continue; } @@ -128,7 +116,7 @@ bool DEVICE::scan_dir_for_volume(DCR *dcr) } free(entry); closedir(dp); - + get_out: if (!found) { /* Restore VolumeName we really wanted */ diff --git a/bacula/src/stored/sd_plugins.c b/bacula/src/stored/sd_plugins.c index a9df662bc6..968a69b97d 100644 --- a/bacula/src/stored/sd_plugins.c +++ b/bacula/src/stored/sd_plugins.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2007-2011 Free Software Foundation Europe e.V. + Copyright (C) 2007-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation, which is - listed in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Main program to test loading and running Bacula plugins. @@ -41,13 +29,14 @@ const char *plugin_type = "-sd.so"; /* Forward referenced functions */ static bRC baculaGetValue(bpContext *ctx, bsdrVariable var, void *value); +static bRC baculaGetGlobal(bsdrGlobalVariable var, void *value); static bRC baculaSetValue(bpContext *ctx, bsdwVariable var, void *value); static bRC baculaRegisterEvents(bpContext *ctx, ...); static bRC baculaJobMsg(bpContext *ctx, const char *file, int line, int type, utime_t mtime, const char *fmt, ...); static bRC baculaDebugMsg(bpContext *ctx, const char *file, int line, int level, const char *fmt, ...); -static char *baculaEditDeviceCodes(DCR *dcr, char *omsg, +static char *baculaEditDeviceCodes(DCR *dcr, char *omsg, const char *imsg, const char *cmd); static bool is_plugin_compatible(Plugin *plugin); @@ -67,10 +56,11 @@ static bsdFuncs bfuncs = { baculaSetValue, baculaJobMsg, baculaDebugMsg, - baculaEditDeviceCodes + baculaEditDeviceCodes, + baculaGetGlobal }; -/* +/* * Bacula private context */ struct bacula_ctx { @@ -97,7 +87,7 @@ static bool is_plugin_disabled(JCR *jcr) #endif /* - * Create a plugin event + * Create a plugin event */ int generate_plugin_event(JCR *jcr, bsdEventType eventType, void *value) { @@ -119,9 +109,17 @@ int generate_plugin_event(JCR *jcr, bsdEventType eventType, void *value) Dmsg0(dbglvl, "No plugin_ctx_list: generate_plugin_event ignored.\n"); return bRC_OK; /* Return if no plugins loaded */ } - if (jcr->is_job_canceled()) { - Dmsg0(dbglvl, "Cancel return from generate_plugin_event\n"); - return bRC_Cancel; + + /* Always handle JobEnd and DeviceClose requests */ + switch (eventType) { + case bsdEventJobEnd: + case bsdEventDeviceClose: + break; /* pass these through even if canceled */ + default: + if (jcr->is_job_canceled()) { + Dmsg0(dbglvl, "Cancel return from generate_plugin_event\n"); + return bRC_Cancel; + } } bpContext *plugin_ctx_list = (bpContext *)jcr->plugin_ctx_list; @@ -139,10 +137,38 @@ int generate_plugin_event(JCR *jcr, bsdEventType eventType, void *value) break; } } + return rc; +} + + +/* + * Create a global plugin event -- i.e. no context + */ +int generate_global_plugin_event(bsdGlobalEventType eventType, void *value) +{ + bsdEvent event; + Plugin *plugin; + int i; + bRC rc = bRC_OK; + + if (!bplugin_list) { + Dmsg0(dbglvl, "No bplugin_list: generate_global_plugin_event ignored.\n"); + return bRC_OK; + } + event.eventType = eventType; + foreach_alist_index(i, plugin, bplugin_list) { + if (sdplug_func(plugin)->handleGlobalPluginEvent != NULL) { + rc = sdplug_func(plugin)->handleGlobalPluginEvent(&event, value); + if (rc != bRC_OK) { + break; + } + } + } return rc; } + /* * Print to file the plugin info. */ @@ -176,7 +202,7 @@ void load_sd_plugins(const char *plugin_dir) return; } bplugin_list = New(alist(10, not_owned_by_alist)); - if (!load_plugins((void *)&binfo, (void *)&bfuncs, plugin_dir, plugin_type, + if (!load_plugins((void *)&binfo, (void *)&bfuncs, plugin_dir, plugin_type, is_plugin_compatible)) { /* Either none found, or some error */ if (bplugin_list->size() == 0) { @@ -186,7 +212,7 @@ void load_sd_plugins(const char *plugin_dir) return; } } - /* + /* * Verify that the plugin is acceptable, and print information * about it. */ @@ -207,13 +233,13 @@ static bool is_plugin_compatible(Plugin *plugin) { psdInfo *info = (psdInfo *)plugin->pinfo; Dmsg0(50, "is_plugin_compatible called\n"); - if (debug_level >= 50) { + if (chk_dbglvl(50)) { dump_sd_plugin(plugin, stdin); } if (strcmp(info->plugin_magic, SD_PLUGIN_MAGIC) != 0) { Jmsg(NULL, M_ERROR, 0, _("Plugin magic wrong. Plugin=%s wanted=%s got=%s\n"), plugin->file, SD_PLUGIN_MAGIC, info->plugin_magic); - Dmsg3(50, "Plugin magic wrong. Plugin=%s wanted=%s got=%s\n", + Dmsg3(000, "Plugin magic wrong. Plugin=%s wanted=%s got=%s\n", plugin->file, SD_PLUGIN_MAGIC, info->plugin_magic); return false; @@ -221,7 +247,7 @@ static bool is_plugin_compatible(Plugin *plugin) if (info->version != SD_PLUGIN_INTERFACE_VERSION) { Jmsg(NULL, M_ERROR, 0, _("Plugin version incorrect. Plugin=%s wanted=%d got=%d\n"), plugin->file, SD_PLUGIN_INTERFACE_VERSION, info->version); - Dmsg3(50, "Plugin version incorrect. Plugin=%s wanted=%d got=%d\n", + Dmsg3(000, "Plugin version incorrect. Plugin=%s wanted=%d got=%d\n", plugin->file, SD_PLUGIN_INTERFACE_VERSION, info->version); return false; } @@ -230,7 +256,7 @@ static bool is_plugin_compatible(Plugin *plugin) strcmp(info->plugin_license, "Bacula Systems(R) SA") != 0) { Jmsg(NULL, M_ERROR, 0, _("Plugin license incompatible. Plugin=%s license=%s\n"), plugin->file, info->plugin_license); - Dmsg2(50, "Plugin license incompatible. Plugin=%s license=%s\n", + Dmsg2(000, "Plugin license incompatible. Plugin=%s license=%s\n", plugin->file, info->plugin_license); return false; } @@ -240,7 +266,7 @@ static bool is_plugin_compatible(Plugin *plugin) plugin->file, sizeof(psdInfo), info->size); return false; } - + return true; } @@ -261,7 +287,7 @@ void new_plugins(JCR *jcr) if (jcr->is_job_canceled()) { return; } - /* + /* * If plugins already loaded, just return */ if (jcr->plugin_ctx_list) { @@ -322,6 +348,21 @@ void free_plugins(JCR *jcr) * * ============================================================== */ + +/* Get a global. No job context */ +static bRC baculaGetGlobal(bsdrGlobalVariable var, void *value) +{ + if (!value) { + return bRC_Error; + } + switch (var) { + default: + break; + } + return bRC_OK; +} + + static bRC baculaGetValue(bpContext *ctx, bsdrVariable var, void *value) { JCR *jcr; @@ -352,16 +393,16 @@ static bRC baculaGetValue(bpContext *ctx, bsdrVariable var, void *value) static bRC baculaSetValue(bpContext *ctx, bsdwVariable var, void *value) { - JCR *jcr; + JCR *jcr; if (!value || !ctx) { return bRC_Error; } -// Dmsg1(dbglvl, "bacula: baculaGetValue var=%d\n", var); +// Dmsg1(dbglvl, "bacula: baculaSetValue var=%d\n", var); jcr = ((bacula_ctx *)ctx->bContext)->jcr; if (!jcr) { return bRC_Error; } -// Dmsg1(dbglvl, "Bacula: jcr=%p\n", jcr); +// Dmsg1(dbglvl, "Bacula: jcr=%p\n", jcr); /* Nothing implemented yet */ Dmsg1(dbglvl, "sd-plugin: baculaSetValue var=%d\n", var); return bRC_OK; @@ -413,7 +454,7 @@ static bRC baculaDebugMsg(bpContext *ctx, const char *file, int line, return bRC_OK; } -static char *baculaEditDeviceCodes(DCR *dcr, char *omsg, +static char *baculaEditDeviceCodes(DCR *dcr, char *omsg, const char *imsg, const char *cmd) { return edit_device_codes(dcr, omsg, imsg, cmd); @@ -429,7 +470,7 @@ int main(int argc, char *argv[]) JCR *jcr2 = &mjcr2; strcpy(my_name, "test-dir"); - + getcwd(plugin_dir, sizeof(plugin_dir)-1); load_sd_plugins(plugin_dir); @@ -448,7 +489,7 @@ int main(int argc, char *argv[]) unload_plugins(); - Dmsg0(dbglvl, "sd-plugin: OK ...\n"); + Dmsg0(dbglvl, "sd-plugin: Test OK ...\n"); close_memory_pool(); sm_dump(false); return 0; diff --git a/bacula/src/stored/sd_plugins.h b/bacula/src/stored/sd_plugins.h index 0e41e8b4a7..e4ccb01a45 100644 --- a/bacula/src/stored/sd_plugins.h +++ b/bacula/src/stored/sd_plugins.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2007-2011 Free Software Foundation Europe e.V. + Copyright (C) 2007-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation, which is - listed in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Interface definition for Bacula Plugins @@ -31,8 +19,8 @@ * Kern Sibbald, October 2007 * */ - -#ifndef __SD_PLUGINS_H + +#ifndef __SD_PLUGINS_H #define __SD_PLUGINS_H #ifndef _BACULA_H @@ -71,29 +59,34 @@ extern "C" { /* Bacula Variable Ids */ typedef enum { - bsdVarJob = 1, - bsdVarLevel = 2, - bsdVarType = 3, - bsdVarJobId = 4, - bsdVarClient = 5, - bsdVarNumVols = 6, - bsdVarPool = 7, - bsdVarStorage = 8, - bsdVarCatalog = 9, - bsdVarMediaType = 10, - bsdVarJobName = 11, - bsdVarJobStatus = 12, - bsdVarPriority = 13, - bsdVarVolumeName = 14, - bsdVarCatalogRes = 15, - bsdVarJobErrors = 16, - bsdVarJobFiles = 17, - bsdVarSDJobFiles = 18, - bsdVarSDErrors = 19, + bsdVarJob = 1, + bsdVarLevel = 2, + bsdVarType = 3, + bsdVarJobId = 4, + bsdVarClient = 5, + bsdVarNumVols = 6, + bsdVarPool = 7, + bsdVarStorage = 8, + bsdVarCatalog = 9, + bsdVarMediaType = 10, + bsdVarJobName = 11, + bsdVarJobStatus = 12, + bsdVarPriority = 13, + bsdVarVolumeName = 14, + bsdVarCatalogRes = 15, + bsdVarJobErrors = 16, + bsdVarJobFiles = 17, + bsdVarSDJobFiles = 18, + bsdVarSDErrors = 19, bsdVarFDJobStatus = 20, bsdVarSDJobStatus = 21 } bsdrVariable; +typedef enum { + bsdVarDevTypes = 1 +} bsdrGlobalVariable; + + typedef enum { bsdwVarJobReport = 1, bsdwVarVolumeName = 2, @@ -111,28 +104,34 @@ typedef enum { bsdEventDeviceClose = 6 } bsdEventType; +typedef enum { + bsdGlobalEventDeviceInit = 1 +} bsdGlobalEventType; + + typedef struct s_bsdEvent { uint32_t eventType; } bsdEvent; typedef struct s_sdbaculaInfo { uint32_t size; - uint32_t version; + uint32_t version; } bsdInfo; /* Bacula interface version and function pointers */ -typedef struct s_sdbaculaFuncs { +typedef struct s_sdbaculaFuncs { uint32_t size; uint32_t version; bRC (*registerBaculaEvents)(bpContext *ctx, ...); bRC (*getBaculaValue)(bpContext *ctx, bsdrVariable var, void *value); bRC (*setBaculaValue)(bpContext *ctx, bsdwVariable var, void *value); - bRC (*JobMessage)(bpContext *ctx, const char *file, int line, + bRC (*JobMessage)(bpContext *ctx, const char *file, int line, int type, utime_t mtime, const char *fmt, ...); bRC (*DebugMessage)(bpContext *ctx, const char *file, int line, int level, const char *fmt, ...); char *(*EditDeviceCodes)(DCR *dcr, char *omsg, const char *imsg, const char *cmd); + bRC (*getBaculaGlobal)(bsdrGlobalVariable var, void *value); } bsdFuncs; /* Bacula Subroutines */ @@ -140,7 +139,7 @@ void load_sd_plugins(const char *plugin_dir); void new_plugins(JCR *jcr); void free_plugins(JCR *jcr); int generate_plugin_event(JCR *jcr, bsdEventType event, void *value=NULL); - +int generate_global_plugin_event(bsdGlobalEventType event, void *value=NULL); /**************************************************************************** @@ -155,8 +154,9 @@ typedef enum { } psdVariable; -#define SD_PLUGIN_MAGIC "*SDPluginData*" -#define SD_PLUGIN_INTERFACE_VERSION 1 +# define SD_PLUGIN_MAGIC "*BaculaSDPluginData*" + +#define SD_PLUGIN_INTERFACE_VERSION ( 12 ) typedef struct s_sdpluginInfo { uint32_t size; @@ -169,10 +169,10 @@ typedef struct s_sdpluginInfo { const char *plugin_description; } psdInfo; -/* +/* * Functions that must be defined in every plugin */ -typedef struct s_sdpluginFuncs { +typedef struct s_sdpluginFuncs { uint32_t size; uint32_t version; bRC (*newPlugin)(bpContext *ctx); @@ -180,6 +180,7 @@ typedef struct s_sdpluginFuncs { bRC (*getPluginValue)(bpContext *ctx, psdVariable var, void *value); bRC (*setPluginValue)(bpContext *ctx, psdVariable var, void *value); bRC (*handlePluginEvent)(bpContext *ctx, bsdEvent *event, void *value); + bRC (*handleGlobalPluginEvent)(bsdEvent *event, void *value); } psdFuncs; #define sdplug_func(plugin) ((psdFuncs *)(plugin->pfuncs)) diff --git a/bacula/src/stored/spool.c b/bacula/src/stored/spool.c index 42868f9e2d..4306655b35 100644 --- a/bacula/src/stored/spool.c +++ b/bacula/src/stored/spool.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2004-2012 Free Software Foundation Europe e.V. + Copyright (C) 2004-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Spooling code @@ -95,7 +83,7 @@ void list_spool_stats(void sendit(const char *msg, int len, void *sarg), void *a spool_stats.attr_jobs, edit_uint64_with_commas(spool_stats.attr_size, ed1), spool_stats.total_attr_jobs, edit_uint64_with_commas(spool_stats.max_attr_size, ed2)); - + sendit(msg.c_str(), len, arg); } } @@ -178,31 +166,6 @@ static bool open_data_spool_file(DCR *dcr) return true; } -static bool close_data_spool_file(DCR *dcr) -{ - POOLMEM *name = get_pool_memory(PM_MESSAGE); - - P(mutex); - spool_stats.data_jobs--; - spool_stats.total_data_jobs++; - if (spool_stats.data_size < dcr->job_spool_size) { - spool_stats.data_size = 0; - } else { - spool_stats.data_size -= dcr->job_spool_size; - } - dcr->job_spool_size = 0; - V(mutex); - - make_unique_data_spool_filename(dcr, &name); - close(dcr->spool_fd); - dcr->spool_fd = -1; - dcr->spooling = false; - unlink(name); - Dmsg1(100, "Deleted spool file: %s\n", name); - free_pool_memory(name); - return true; -} - static const char *spool_name = "*spool*"; /* @@ -218,7 +181,6 @@ static bool despool_data(DCR *dcr, bool commit) JCR *jcr = dcr->jcr; int stat; char ec1[50]; - BSOCK *dir = jcr->dir_bsock; Dmsg0(100, "Despooling data\n"); if (jcr->dcr->job_spool_size == 0) { @@ -227,7 +189,7 @@ static bool despool_data(DCR *dcr, bool commit) /* * Commit means that the job is done, so we commit, otherwise, we - * are despooling because of user spool size max or some error + * are despooling because of user spool size max or some error * (e.g. filesystem full). */ if (commit) { @@ -266,7 +228,7 @@ static bool despool_data(DCR *dcr, bool commit) rdev->max_block_size = dcr->dev->max_block_size; rdev->min_block_size = dcr->dev->min_block_size; rdev->device = dcr->dev->device; - rdcr = new_dcr(jcr, NULL, rdev); + rdcr = new_dcr(jcr, NULL, rdev, SD_READ); rdcr->spool_fd = dcr->spool_fd; block = dcr->block; /* save block */ dcr->block = rdcr->block; /* make read and write block the same */ @@ -299,34 +261,23 @@ static bool despool_data(DCR *dcr, bool commit) if (!ok) { Jmsg2(jcr, M_FATAL, 0, _("Fatal append error on device %s: ERR=%s\n"), dcr->dev->print_name(), dcr->dev->bstrerror()); - Dmsg2(000, "Fatal append error on device %s: ERR=%s\n", + Pmsg2(000, "Fatal append error on device %s: ERR=%s\n", dcr->dev->print_name(), dcr->dev->bstrerror()); - /* Force in case Incomplete set */ jcr->forceJobStatus(JS_FatalError); } Dmsg3(800, "Write block ok=%d FI=%d LI=%d\n", ok, block->FirstIndex, block->LastIndex); } - /* - * If this Job is incomplete, we need to backup the FileIndex - * to the last correctly saved file so that the JobMedia - * LastIndex is correct. - */ - if (jcr->is_JobStatus(JS_Incomplete)) { - dcr->VolLastIndex = dir->get_FileIndex(); - Dmsg1(100, "======= Set FI=%ld\n", dir->get_FileIndex()); - } - if (!dir_create_jobmedia_record(dcr)) { Jmsg2(jcr, M_FATAL, 0, _("Could not create JobMedia record for Volume=\"%s\" Job=%s\n"), dcr->getVolCatName(), jcr->Job); - jcr->forceJobStatus(JS_FatalError); /* override any Incomplete */ + jcr->forceJobStatus(JS_FatalError); } /* Set new file/block parameters for current dcr */ set_new_file_parameters(dcr); /* - * Subtracting run_time give us elapsed time - wait_time since + * Subtracting run_time give us elapsed time - wait_time since * we started despooling. Note, don't use time_t as it is 32 or 64 * bits depending on the OS and doesn't edit with %d */ @@ -410,21 +361,21 @@ static int read_block_from_spool_file(DCR *dcr) Pmsg2(000, _("Spool read error. Wanted %u bytes, got %d\n"), rlen, stat); Jmsg2(jcr, M_FATAL, 0, _("Spool header read error. Wanted %u bytes, got %d\n"), rlen, stat); } - jcr->forceJobStatus(JS_FatalError); /* override any Incomplete */ + jcr->forceJobStatus(JS_FatalError); return RB_ERROR; } rlen = hdr.len; if (rlen > block->buf_len) { Pmsg2(000, _("Spool block too big. Max %u bytes, got %u\n"), block->buf_len, rlen); Jmsg2(jcr, M_FATAL, 0, _("Spool block too big. Max %u bytes, got %u\n"), block->buf_len, rlen); - jcr->forceJobStatus(JS_FatalError); /* override any Incomplete */ + jcr->forceJobStatus(JS_FatalError); return RB_ERROR; } stat = read(dcr->spool_fd, (char *)block->buf, (size_t)rlen); if (stat != (ssize_t)rlen) { Pmsg2(000, _("Spool data read error. Wanted %u bytes, got %d\n"), rlen, stat); Jmsg2(dcr->jcr, M_FATAL, 0, _("Spool data read error. Wanted %u bytes, got %d\n"), rlen, stat); - jcr->forceJobStatus(JS_FatalError); /* override any Incomplete */ + jcr->forceJobStatus(JS_FatalError); return RB_ERROR; } /* Setup write pointers */ @@ -531,7 +482,7 @@ static bool write_spool_header(DCR *dcr) berrno be; Jmsg(jcr, M_FATAL, 0, _("Error writing header to spool file. ERR=%s\n"), be.bstrerror()); - jcr->forceJobStatus(JS_FatalError); /* override any Incomplete */ + jcr->forceJobStatus(JS_FatalError); } if (stat != (ssize_t)sizeof(hdr)) { Jmsg(jcr, M_ERROR, 0, _("Error writing header to spool file." @@ -553,7 +504,7 @@ static bool write_spool_header(DCR *dcr) } if (!despool_data(dcr, false)) { Jmsg(jcr, M_FATAL, 0, _("Fatal despooling error.")); - jcr->forceJobStatus(JS_FatalError); /* override any Incomplete */ + jcr->forceJobStatus(JS_FatalError); return false; } continue; /* try again */ @@ -561,7 +512,7 @@ static bool write_spool_header(DCR *dcr) return true; } Jmsg(jcr, M_FATAL, 0, _("Retrying after header spooling error failed.\n")); - jcr->forceJobStatus(JS_FatalError); /* override any Incomplete */ + jcr->forceJobStatus(JS_FatalError); return false; } @@ -578,7 +529,7 @@ static bool write_spool_data(DCR *dcr) berrno be; Jmsg(jcr, M_FATAL, 0, _("Error writing data to spool file. ERR=%s\n"), be.bstrerror()); - jcr->forceJobStatus(JS_FatalError); /* override any Incomplete */ + jcr->forceJobStatus(JS_FatalError); } if (stat != (ssize_t)block->binbuf) { /* @@ -599,7 +550,7 @@ static bool write_spool_data(DCR *dcr) } if (!despool_data(dcr, false)) { Jmsg(jcr, M_FATAL, 0, _("Fatal despooling error.")); - jcr->forceJobStatus(JS_FatalError); /* override any Incomplete */ + jcr->forceJobStatus(JS_FatalError); return false; } if (!write_spool_header(dcr)) { @@ -610,11 +561,36 @@ static bool write_spool_data(DCR *dcr) return true; } Jmsg(jcr, M_FATAL, 0, _("Retrying after data spooling error failed.\n")); - jcr->forceJobStatus(JS_FatalError); /* override any Incomplete */ + jcr->forceJobStatus(JS_FatalError); return false; } +static bool close_data_spool_file(DCR *dcr) +{ + POOLMEM *name = get_pool_memory(PM_MESSAGE); + + P(mutex); + spool_stats.data_jobs--; + spool_stats.total_data_jobs++; + if (spool_stats.data_size < dcr->job_spool_size) { + spool_stats.data_size = 0; + } else { + spool_stats.data_size -= dcr->job_spool_size; + } + V(mutex); + P(dcr->dev->spool_mutex); + dcr->job_spool_size = 0; + V(dcr->dev->spool_mutex); + make_unique_data_spool_filename(dcr, &name); + close(dcr->spool_fd); + dcr->spool_fd = -1; + dcr->spooling = false; + unlink(name); + Dmsg1(100, "Deleted spool file: %s\n", name); + free_pool_memory(name); + return true; +} bool are_attributes_spooled(JCR *jcr) { @@ -636,14 +612,6 @@ bool begin_attribute_spool(JCR *jcr) return true; } -bool discard_attribute_spool(JCR *jcr) -{ - if (are_attributes_spooled(jcr)) { - return close_attr_spool_file(jcr, jcr->dir_bsock); - } - return true; -} - static void update_attr_spool_size(ssize_t size) { P(mutex); @@ -664,7 +632,7 @@ static void make_unique_spool_filename(JCR *jcr, POOLMEM **name, int fd) } /* - * Tell Director where to find the attributes spool file + * Tell Director where to find the attributes spool file * Note, if we are not on the same machine, the Director will * return an error, and the higher level routine will transmit * the data record by record -- using bsock->despool(). @@ -677,13 +645,13 @@ static bool blast_attr_spool_file(JCR *jcr, boffset_t size) bash_spaces(name); jcr->dir_bsock->fsend("BlastAttr Job=%s File=%s\n", jcr->Job, name); free_pool_memory(name); - + if (jcr->dir_bsock->recv() <= 0) { Jmsg(jcr, M_FATAL, 0, _("Network error on BlastAttributes.\n")); - jcr->forceJobStatus(JS_FatalError); /* override any Incomplete */ + jcr->forceJobStatus(JS_FatalError); return false; } - + if (!bstrcmp(jcr->dir_bsock->msg, "1000 OK BlastAttr\n")) { return false; } @@ -692,7 +660,7 @@ static bool blast_attr_spool_file(JCR *jcr, boffset_t size) bool commit_attribute_spool(JCR *jcr) { - boffset_t size, data_end; + boffset_t size; char ec1[30]; char tbuf[100]; BSOCK *dir; @@ -705,31 +673,15 @@ bool commit_attribute_spool(JCR *jcr) berrno be; Jmsg(jcr, M_FATAL, 0, _("Fseek on attributes file failed: ERR=%s\n"), be.bstrerror()); - jcr->forceJobStatus(JS_FatalError); /* override any Incomplete */ + jcr->forceJobStatus(JS_FatalError); goto bail_out; } size = ftello(dir->m_spool_fd); - if (jcr->is_JobStatus(JS_Incomplete)) { - data_end = dir->get_data_end(); - /* Check and truncate to last valid data_end if necssary */ - if (size > data_end) { - if (ftruncate(fileno(dir->m_spool_fd), data_end) != 0) { - berrno be; - Jmsg(jcr, M_FATAL, 0, _("Truncate on attributes file failed: ERR=%s\n"), - be.bstrerror()); - jcr->forceJobStatus(JS_FatalError); /* override any Incomplete */ - goto bail_out; - } - Dmsg2(100, "=== Attrib spool truncated from %lld to %lld\n", - size, data_end); - size = data_end; - } - } if (size < 0) { berrno be; Jmsg(jcr, M_FATAL, 0, _("Fseek on attributes file failed: ERR=%s\n"), be.bstrerror()); - jcr->forceJobStatus(JS_FatalError); /* override any Incomplete */ + jcr->forceJobStatus(JS_FatalError); goto bail_out; } P(mutex); @@ -767,7 +719,7 @@ static bool open_attr_spool_file(JCR *jcr, BSOCK *bs) berrno be; Jmsg(jcr, M_FATAL, 0, _("fopen attr spool file %s failed: ERR=%s\n"), name, be.bstrerror()); - jcr->forceJobStatus(JS_FatalError); /* override any Incomplete */ + jcr->forceJobStatus(JS_FatalError); free_pool_memory(name); return false; } @@ -802,3 +754,11 @@ static bool close_attr_spool_file(JCR *jcr, BSOCK *bs) bs->clear_spooling(); return true; } + +bool discard_attribute_spool(JCR *jcr) +{ + if (are_attributes_spooled(jcr)) { + return close_attr_spool_file(jcr, jcr->dir_bsock); + } + return true; +} diff --git a/bacula/src/stored/status.c b/bacula/src/stored/status.c index 20f2c086c3..33d47e3d00 100644 --- a/bacula/src/stored/status.c +++ b/bacula/src/stored/status.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2003-2012 Free Software Foundation Europe e.V. + Copyright (C) 2003-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * This file handles the status command @@ -63,8 +51,6 @@ static void list_jobs_waiting_on_reservation(STATUS_PKT *sp); static void list_status_header(STATUS_PKT *sp); static void list_devices(STATUS_PKT *sp); -static const char *level_to_str(int level); - /* * Status command from Director */ @@ -178,14 +164,14 @@ static void list_devices(STATUS_PKT *sp) " Volume: %s\n" " Pool: %s\n" " Media type: %s\n"), - dev->print_name(), + dev->print_name(), dev->blocked()?_("waiting for"):_("mounted with"), - dev->VolHdr.VolumeName, + dev->VolHdr.VolumeName, dev->pool_name[0]?dev->pool_name:_("*unknown*"), dev->device->media_type); sendit(msg, len, sp); } else { - len = Mmsg(msg, _("\nDevice %s open but no Bacula volume is currently mounted.\n"), + len = Mmsg(msg, _("\nDevice %s open but no Bacula volume is currently mounted.\n"), dev->print_name()); sendit(msg, len, sp); } @@ -245,7 +231,7 @@ static void list_status_header(STATUS_PKT *sp) POOL_MEM msg(PM_MESSAGE); int len; - len = Mmsg(msg, _("%s Version: %s (%s) %s %s %s\n"), + len = Mmsg(msg, _("%s Version: %s (%s) %s %s %s\n"), my_name, VERSION, BDATE, HOST_OS, DISTNAME, DISTVER); sendit(msg, len, sp); @@ -263,7 +249,7 @@ static void list_status_header(STATUS_PKT *sp) edit_uint64_with_commas(sm_max_buffers, b5)); sendit(msg, len, sp); len = Mmsg(msg, " Sizes: boffset_t=%d size_t=%d int32_t=%d int64_t=%d " - "mode=%d,%d\n", + "mode=%d,%d\n", (int)sizeof(boffset_t), (int)sizeof(size_t), (int)sizeof(int32_t), (int)sizeof(int64_t), (int)DEVELOPER_MODE, (int)BEEF); sendit(msg, len, sp); @@ -308,6 +294,7 @@ static void send_blocked_status(DEVICE *dev, STATUS_PKT *sp) DCR *dcr; bool found_jcr = false; dev->Lock(); + dev->Lock_dcrs(); foreach_dlist(dcr, dev->attached_dcrs) { if (dcr->jcr->JobStatus == JS_WaitMount) { len = Mmsg(msg, _(" Device is BLOCKED waiting for mount of volume \"%s\",\n" @@ -328,6 +315,7 @@ static void send_blocked_status(DEVICE *dev, STATUS_PKT *sp) found_jcr = true; } } + dev->Unlock_dcrs(); dev->Unlock(); if (!found_jcr) { len = Mmsg(msg, _(" Device is BLOCKED waiting for media.\n")); @@ -349,7 +337,7 @@ static void send_blocked_status(DEVICE *dev, STATUS_PKT *sp) /* Send autochanger slot status */ if (dev->is_autochanger()) { if (dev->get_slot() > 0) { - len = Mmsg(msg, _(" Slot %d %s loaded in drive %d.\n"), + len = Mmsg(msg, _(" Slot %d %s loaded in drive %d.\n"), dev->get_slot(), dev->is_open()?"is": "was last", dev->drive_index); sendit(msg, len, sp); } else if (dev->get_slot() <= 0) { @@ -357,7 +345,7 @@ static void send_blocked_status(DEVICE *dev, STATUS_PKT *sp) sendit(msg, len, sp); } } - if (debug_level > 1) { + if (chk_dbglvl(1)) { send_device_status(dev, sp); } } @@ -366,51 +354,52 @@ static void send_device_status(DEVICE *dev, STATUS_PKT *sp) { POOL_MEM msg(PM_MESSAGE); int len; + DCR *dcr = NULL; + bool found = false; - if (debug_level > 5) { + if (chk_dbglvl(5)) { len = Mmsg(msg, _("Configured device capabilities:\n")); sendit(msg, len, sp); len = Mmsg(msg, " %sEOF %sBSR %sBSF %sFSR %sFSF %sEOM %sREM %sRACCESS %sAUTOMOUNT %sLABEL %sANONVOLS %sALWAYSOPEN\n", - dev->capabilities & CAP_EOF ? "" : "!", - dev->capabilities & CAP_BSR ? "" : "!", - dev->capabilities & CAP_BSF ? "" : "!", - dev->capabilities & CAP_FSR ? "" : "!", - dev->capabilities & CAP_FSF ? "" : "!", - dev->capabilities & CAP_EOM ? "" : "!", - dev->capabilities & CAP_REM ? "" : "!", + dev->capabilities & CAP_EOF ? "" : "!", + dev->capabilities & CAP_BSR ? "" : "!", + dev->capabilities & CAP_BSF ? "" : "!", + dev->capabilities & CAP_FSR ? "" : "!", + dev->capabilities & CAP_FSF ? "" : "!", + dev->capabilities & CAP_EOM ? "" : "!", + dev->capabilities & CAP_REM ? "" : "!", dev->capabilities & CAP_RACCESS ? "" : "!", - dev->capabilities & CAP_AUTOMOUNT ? "" : "!", - dev->capabilities & CAP_LABEL ? "" : "!", - dev->capabilities & CAP_ANONVOLS ? "" : "!", + dev->capabilities & CAP_AUTOMOUNT ? "" : "!", + dev->capabilities & CAP_LABEL ? "" : "!", + dev->capabilities & CAP_ANONVOLS ? "" : "!", dev->capabilities & CAP_ALWAYSOPEN ? "" : "!"); sendit(msg, len, sp); } len = Mmsg(msg, _("Device state:\n")); sendit(msg, len, sp); - len = Mmsg(msg, " %sOPENED %sTAPE %sLABEL %sMALLOC %sAPPEND %sREAD %sEOT %sWEOT %sEOF %sNEXTVOL %sSHORT %sMOUNTED\n", - dev->is_open() ? "" : "!", - dev->is_tape() ? "" : "!", - dev->is_labeled() ? "" : "!", - dev->state & ST_MALLOC ? "" : "!", - dev->can_append() ? "" : "!", - dev->can_read() ? "" : "!", - dev->at_eot() ? "" : "!", - dev->state & ST_WEOT ? "" : "!", - dev->at_eof() ? "" : "!", - dev->state & ST_NEXTVOL ? "" : "!", - dev->state & ST_SHORT ? "" : "!", + len = Mmsg(msg, " %sOPENED %sTAPE %sLABEL %sMALLOC %sAPPEND %sREAD %sEOT %sWEOT %sEOF %sNEXTVOL %sSHORT %sMOUNTED\n", + dev->is_open() ? "" : "!", + dev->is_tape() ? "" : "!", + dev->is_labeled() ? "" : "!", + dev->state & ST_MALLOC ? "" : "!", + dev->can_append() ? "" : "!", + dev->can_read() ? "" : "!", + dev->at_eot() ? "" : "!", + dev->state & ST_WEOT ? "" : "!", + dev->at_eof() ? "" : "!", + dev->state & ST_NEXTVOL ? "" : "!", + dev->state & ST_SHORT ? "" : "!", dev->state & ST_MOUNTED ? "" : "!"); sendit(msg, len, sp); len = Mmsg(msg, _(" num_writers=%d reserves=%d block=%d\n"), dev->num_writers, dev->num_reserved(), dev->blocked()); sendit(msg, len, sp); - len = Mmsg(msg, _("Attached Jobs: ")); + len = Mmsg(msg, _("Attached JobsIds: ")); sendit(msg, len, sp); - DCR *dcr = NULL; - bool found = false; dev->Lock(); + dev->Lock_dcrs(); foreach_dlist(dcr, dev->attached_dcrs) { if (dcr->jcr) { if (found) { @@ -421,6 +410,7 @@ static void send_device_status(DEVICE *dev, STATUS_PKT *sp) found = true; } } + dev->Unlock_dcrs(); dev->Unlock(); sendit("\n", 1, sp); @@ -476,7 +466,7 @@ static void list_running_jobs(STATUS_PKT *sp) jcr->JobId, rdcr->VolumeName, rdcr->pool_name, - rdcr->dev?rdcr->dev->print_name(): + rdcr->dev?rdcr->dev->print_name(): rdcr->device->device_name); sendit(msg, len, sp); } @@ -489,7 +479,7 @@ static void list_running_jobs(STATUS_PKT *sp) jcr->JobId, dcr->VolumeName, dcr->pool_name, - dcr->dev?dcr->dev->print_name(): + dcr->dev?dcr->dev->print_name(): dcr->device->device_name); sendit(msg, len, sp); len= Mmsg(msg, _(" spooling=%d despooling=%d despool_wait=%d\n"), @@ -542,7 +532,7 @@ static void list_running_jobs(STATUS_PKT *sp) } static void list_jobs_waiting_on_reservation(STATUS_PKT *sp) -{ +{ JCR *jcr; POOL_MEM msg(PM_MESSAGE); int len; @@ -561,158 +551,9 @@ static void list_jobs_waiting_on_reservation(STATUS_PKT *sp) if (!sp->api) sendit("====\n", 5, sp); } - -static void list_terminated_jobs(STATUS_PKT *sp) -{ - char dt[MAX_TIME_LENGTH], b1[30], b2[30]; - char level[10]; - struct s_last_job *je; - const char *msg; - - msg = _("\nTerminated Jobs:\n"); - if (!sp->api) sendit(msg, strlen(msg), sp); - if (last_jobs->size() == 0) { - if (!sp->api) sendit("====\n", 5, sp); - return; - } - lock_last_jobs_list(); - msg = _(" JobId Level Files Bytes Status Finished Name \n"); - if (!sp->api) sendit(msg, strlen(msg), sp); - msg = _("===================================================================\n"); - if (!sp->api) sendit(msg, strlen(msg), sp); - foreach_dlist(je, last_jobs) { - char JobName[MAX_NAME_LENGTH]; - const char *termstat; - char buf[1000]; - - bstrftime_nc(dt, sizeof(dt), je->end_time); - switch (je->JobType) { - case JT_ADMIN: - case JT_RESTORE: - bstrncpy(level, " ", sizeof(level)); - break; - default: - bstrncpy(level, level_to_str(je->JobLevel), sizeof(level)); - level[4] = 0; - break; - } - switch (je->JobStatus) { - case JS_Created: - termstat = _("Created"); - break; - case JS_FatalError: - case JS_ErrorTerminated: - termstat = _("Error"); - break; - case JS_Differences: - termstat = _("Diffs"); - break; - case JS_Canceled: - termstat = _("Cancel"); - break; - case JS_Terminated: - termstat = _("OK"); - break; - case JS_Warnings: - termstat = _("OK -- with warnings"); - break; - default: - termstat = _("Other"); - break; - } - bstrncpy(JobName, je->Job, sizeof(JobName)); - /* There are three periods after the Job name */ - char *p; - for (int i=0; i<3; i++) { - if ((p=strrchr(JobName, '.')) != NULL) { - *p = 0; - } - } - if (sp->api) { - bsnprintf(buf, sizeof(buf), _("%6d\t%-6s\t%8s\t%10s\t%-7s\t%-8s\t%s\n"), - je->JobId, - level, - edit_uint64_with_commas(je->JobFiles, b1), - edit_uint64_with_suffix(je->JobBytes, b2), - termstat, - dt, JobName); - } else { - bsnprintf(buf, sizeof(buf), _("%6d %-6s %8s %10s %-7s %-8s %s\n"), - je->JobId, - level, - edit_uint64_with_commas(je->JobFiles, b1), - edit_uint64_with_suffix(je->JobBytes, b2), - termstat, - dt, JobName); - } - sendit(buf, strlen(buf), sp); - } - unlock_last_jobs_list(); - if (!sp->api) sendit("====\n", 5, sp); -} - -/* - * Convert Job Level into a string - */ -static const char *level_to_str(int level) -{ - const char *str; - - switch (level) { - case L_BASE: - str = _("Base"); - case L_FULL: - str = _("Full"); - break; - case L_INCREMENTAL: - str = _("Incremental"); - break; - case L_DIFFERENTIAL: - str = _("Differential"); - break; - case L_SINCE: - str = _("Since"); - break; - case L_VERIFY_CATALOG: - str = _("Verify Catalog"); - break; - case L_VERIFY_INIT: - str = _("Init Catalog"); - break; - case L_VERIFY_VOLUME_TO_CATALOG: - str = _("Volume to Catalog"); - break; - case L_VERIFY_DISK_TO_CATALOG: - str = _("Disk to Catalog"); - break; - case L_VERIFY_DATA: - str = _("Data"); - break; - case L_NONE: - str = " "; - break; - default: - str = _("Unknown Job Level"); - break; - } - return str; -} - /* * Send to Director */ -static void sendit(const char *msg, int len, STATUS_PKT *sp) -{ - BSOCK *bs = sp->bs; - if (bs) { - memcpy(bs->msg, msg, len+1); - bs->msglen = len+1; - bs->send(); - } else { - sp->callback(msg, len, sp->context); - } -} - static void sendit(const char *msg, int len, void *sp) { sendit(msg, len, (STATUS_PKT *)sp); diff --git a/bacula/src/stored/stored.c b/bacula/src/stored/stored.c index a180cfa407..aaff80b390 100644 --- a/bacula/src/stored/stored.c +++ b/bacula/src/stored/stored.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2012 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Second generation Storage daemon. @@ -42,9 +30,9 @@ /* TODO: fix problem with bls, bextract * that use findlib and already declare - * filed plugins + * filed plugins */ -#include "sd_plugins.h" +#include "sd_plugins.h" /* Imported functions */ extern bool parse_sd_config(CONFIG *config, const char *configfile, int exit_code); @@ -246,7 +234,7 @@ int main (int argc, char *argv[]) create_pid_file(me->pid_directory, "bacula-sd", get_first_port_host_order(me->sdaddrs)); - read_state_file(me->working_directory, "bacula-sd", + read_state_file(me->working_directory, "bacula-sd", get_first_port_host_order(me->sdaddrs)); set_jcr_in_tsd(INVALID_JCR); @@ -345,7 +333,7 @@ static int check_resources() DIRRES *director; STORES *store; - foreach_res(store, R_STORAGE) { + foreach_res(store, R_STORAGE) { /* tls_require implies tls_enable */ if (store->tls_require) { if (have_tls) { @@ -390,7 +378,7 @@ static int check_resources() store->tls_keyfile, NULL, NULL, store->tls_dhfile, store->tls_verify_peer); - if (!store->tls_ctx) { + if (!store->tls_ctx) { Jmsg(NULL, M_FATAL, 0, _("Failed to initialize TLS context for Storage \"%s\" in %s.\n"), store->hdr.name, configfile); OK = false; @@ -398,7 +386,7 @@ static int check_resources() } } - foreach_res(director, R_DIRECTOR) { + foreach_res(director, R_DIRECTOR) { /* tls_require implies tls_enable */ if (director->tls_require) { director->tls_enable = true; @@ -437,7 +425,7 @@ static int check_resources() director->tls_keyfile, NULL, NULL, director->tls_dhfile, director->tls_verify_peer); - if (!director->tls_ctx) { + if (!director->tls_ctx) { Jmsg(NULL, M_FATAL, 0, _("Failed to initialize TLS context for Director \"%s\" in %s.\n"), director->hdr.name, configfile); OK = false; @@ -447,7 +435,7 @@ static int check_resources() OK = init_autochangers(); - + if (OK) { close_msg(NULL); /* close temp message handler */ init_msg(NULL, me->messages); /* open daemon message handler */ @@ -497,10 +485,10 @@ static void cleanup_old_files() if (name_max < 1024) { name_max = 1024; } - + if (!(dp = opendir(me->working_directory))) { berrno be; - Pmsg2(000, "Failed to open working dir %s for cleanup: ERR=%s\n", + Pmsg2(000, "Failed to open working dir %s for cleanup: ERR=%s\n", me->working_directory, be.bstrerror()); goto get_out1; } @@ -514,7 +502,7 @@ static void cleanup_old_files() if (strcmp(result->d_name, ".") == 0 || strcmp(result->d_name, "..") == 0 || strncmp(result->d_name, my_name, my_name_len) != 0) { Dmsg1(500, "Skipped: %s\n", result->d_name); - continue; + continue; } /* Unlink files that match regex */ @@ -607,7 +595,8 @@ void *device_initialization(void *arg) jcr->dcr = NULL; } #endif - free_jcr(jcr); + free_plugins(jcr); + free_jcr(jcr); init_done = true; UnlockRes(); return NULL; @@ -694,7 +683,7 @@ void terminate_stored(int sig) config = NULL; } - if (debug_level > 10) { + if (chk_dbglvl(10)) { print_memory_pool_stats(); } term_msg(); diff --git a/bacula/src/stored/stored.h b/bacula/src/stored/stored.h index 2af78c4dca..7721184fed 100644 --- a/bacula/src/stored/stored.h +++ b/bacula/src/stored/stored.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2013 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Storage daemon specific defines and includes @@ -35,10 +23,17 @@ #define STORAGE_DAEMON 1 -/* Set to debug mutexes */ -//#define SD_DEBUG_LOCK +/* Set to debug Lock() and Unlock() only */ +#define DEV_DEBUG_LOCK + +/* + * Set to define all SD locks except Lock() + * currently this does not work. More locks + * must be converted. + */ +#define SD_DEBUG_LOCK #ifdef SD_DEBUG_LOCK -const int sd_dbglvl = 3; +const int sd_dbglvl = 300; #else const int sd_dbglvl = 300; #endif @@ -61,6 +56,8 @@ const int sd_dbglvl = 300; #include "block.h" #include "record.h" #include "dev.h" +#include "file_dev.h" +#include "tape_dev.h" #include "stored_conf.h" #include "bsr.h" #include "jcr.h" @@ -72,10 +69,6 @@ const int sd_dbglvl = 300; #else #define uLongf uint32_t #endif -#ifdef HAVE_LZO -#include -#include -#endif #ifdef HAVE_FNMATCH #include #else @@ -89,13 +82,15 @@ const int sd_dbglvl = 300; int readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result); #endif -#include "vtape.h" +#include "file_dev.h" +#include "tape_dev.h" +#include "vtape_dev.h" #include "sd_plugins.h" /* Daemon globals from stored.c */ extern STORES *me; /* "Global" daemon resource */ extern bool forge_on; /* proceed inspite of I/O errors */ extern pthread_mutex_t device_release_mutex; -extern pthread_cond_t wait_device_release; /* wait for any device to be released */ +extern pthread_cond_t wait_device_release; /* wait for any device to be released */ #endif /* __STORED_H_ */ diff --git a/bacula/src/stored/stored_conf.c b/bacula/src/stored/stored_conf.c index f659d16b3b..dce408b9b6 100644 --- a/bacula/src/stored/stored_conf.c +++ b/bacula/src/stored/stored_conf.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2009 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Configuration file parser for Bacula Storage daemon @@ -41,11 +29,6 @@ static RES *sres_head[R_LAST - R_FIRST + 1]; RES **res_head = sres_head; -/* Forward referenced subroutines */ -static void store_devtype(LEX *lc, RES_ITEM *item, int index, int pass); -static void store_maxblocksize(LEX *lc, RES_ITEM *item, int index, int pass); - - /* We build the current resource here statically, * then move it to dynamic memory */ #if defined(_MSC_VER) @@ -142,12 +125,12 @@ static RES_ITEM dev_items[] = { {"offlineonunmount", store_bit, ITEM(res_dev.cap_bits), CAP_OFFLINEUNMOUNT, ITEM_DEFAULT, 0}, {"blockchecksum", store_bit, ITEM(res_dev.cap_bits), CAP_BLOCKCHECKSUM, ITEM_DEFAULT, 1}, {"autoselect", store_bool, ITEM(res_dev.autoselect), 1, ITEM_DEFAULT, 1}, + {"readonly", store_bool, ITEM(res_dev.read_only), 1, ITEM_DEFAULT, 0}, {"changerdevice", store_strname,ITEM(res_dev.changer_name), 0, 0, 0}, {"changercommand", store_strname,ITEM(res_dev.changer_command), 0, 0, 0}, {"alertcommand", store_strname,ITEM(res_dev.alert_command), 0, 0, 0}, {"maximumchangerwait", store_time, ITEM(res_dev.max_changer_wait), 0, ITEM_DEFAULT, 5 * 60}, {"maximumopenwait", store_time, ITEM(res_dev.max_open_wait), 0, ITEM_DEFAULT, 5 * 60}, - {"maximumopenvolumes", store_pint32, ITEM(res_dev.max_open_vols), 0, ITEM_DEFAULT, 1}, {"maximumnetworkbuffersize", store_pint32, ITEM(res_dev.max_network_buffer_size), 0, 0, 0}, {"volumepollinterval", store_time, ITEM(res_dev.vol_poll_interval), 0, ITEM_DEFAULT, 5 * 60}, {"maximumrewindwait", store_time, ITEM(res_dev.max_rewind_wait), 0, ITEM_DEFAULT, 5 * 60}, @@ -224,7 +207,7 @@ static s_kw dev_types[] = { * Store Device Type (File, FIFO, Tape, DVD) * */ -static void store_devtype(LEX *lc, RES_ITEM *item, int index, int pass) +void store_devtype(LEX *lc, RES_ITEM *item, int index, int pass) { int i; @@ -248,11 +231,11 @@ static void store_devtype(LEX *lc, RES_ITEM *item, int index, int pass) * Store Maximum Block Size, and check it is not greater than MAX_BLOCK_LENGTH * */ -static void store_maxblocksize(LEX *lc, RES_ITEM *item, int index, int pass) +void store_maxblocksize(LEX *lc, RES_ITEM *item, int index, int pass) { store_size32(lc, item, index, pass); if (*(uint32_t *)(item->value) > MAX_BLOCK_LENGTH) { - scan_err2(lc, _("Maximum Block Size configured value %u is greater than allowed maximum: %u"), + scan_err2(lc, _("Maximum Block Size configured value %u is greater than allowed maximum: %u"), *(uint32_t *)(item->value), MAX_BLOCK_LENGTH ); } } @@ -425,7 +408,7 @@ void free_resource(RES *sres, int type) if (res->res_dir.address) { free(res->res_dir.address); } - if (res->res_dir.tls_ctx) { + if (res->res_dir.tls_ctx) { free_tls_context(res->res_dir.tls_ctx); } if (res->res_dir.tls_ca_certfile) { @@ -458,7 +441,7 @@ void free_resource(RES *sres, int type) delete res->res_changer.device; } rwl_destroy(&res->res_changer.changer_lock); - break; + break; case R_STORAGE: if (res->res_store.sdaddrs) { free_addresses(res->res_store.sdaddrs); @@ -481,7 +464,7 @@ void free_resource(RES *sres, int type) if (res->res_store.scripts_directory) { free(res->res_store.scripts_directory); } - if (res->res_store.tls_ctx) { + if (res->res_store.tls_ctx) { free_tls_context(res->res_store.tls_ctx); } if (res->res_store.tls_ca_certfile) { @@ -566,7 +549,7 @@ void free_resource(RES *sres, int type) /* Save the new resource by chaining it into the head list for * the resource. If this is pass 2, we update any resource - * or alist pointers. + * or alist pointers. */ void save_resource(int type, RES_ITEM *items, int pass) { @@ -627,17 +610,17 @@ void save_resource(int type, RES_ITEM *items, int pass) /* we must explicitly copy the device alist pointer */ res->res_changer.device = res_all.res_changer.device; /* - * Now update each device in this resource to point back + * Now update each device in this resource to point back * to the changer resource. */ foreach_alist(dev, res->res_changer.device) { dev->changer_res = (AUTOCHANGER *)&res->res_changer; } - if ((errstat = rwl_init(&res->res_changer.changer_lock, + if ((errstat = rwl_init(&res->res_changer.changer_lock, PRIO_SD_ACH_ACCESS)) != 0) { berrno be; - Jmsg1(NULL, M_ERROR_TERM, 0, _("Unable to init lock: ERR=%s\n"), + Jmsg1(NULL, M_ERROR_TERM, 0, _("Unable to init lock: ERR=%s\n"), be.bstrerror(errstat)); } break; diff --git a/bacula/src/stored/stored_conf.h b/bacula/src/stored/stored_conf.h index 13d8c74bf5..98c2925a7d 100644 --- a/bacula/src/stored/stored_conf.h +++ b/bacula/src/stored/stored_conf.h @@ -1,30 +1,20 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2011 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ + + /* * Resource codes -- they must be sequential for indexing * @@ -86,6 +76,7 @@ public: char *scripts_directory; uint32_t max_concurrent_jobs; /* maximum concurrent jobs to run */ MSGS *messages; /* Daemon message handler */ + utime_t ClientConnectTimeout; /* Max time to wait to connect client */ utime_t heartbeat_interval; /* Interval to send hb to FD */ utime_t client_wait; /* Time to wait for FD to connect */ bool tls_authenticate; /* Authenticate with TLS */ @@ -120,18 +111,19 @@ public: char *media_type; /* User assigned media type */ char *device_name; /* Archive device name */ char *changer_name; /* Changer device name */ + char *control_name; /* SCSI control device name */ char *changer_command; /* Changer command -- external program */ char *alert_command; /* Alert command -- external program */ char *spool_directory; /* Spool file directory */ uint32_t dev_type; /* device type */ uint32_t label_type; /* label type */ bool autoselect; /* Automatically select from AutoChanger */ + bool read_only; /* Drive is read only */ uint32_t drive_index; /* Autochanger drive index */ uint32_t cap_bits; /* Capabilities of this device */ utime_t max_changer_wait; /* Changer timeout */ utime_t max_rewind_wait; /* maximum secs to wait for rewind */ utime_t max_open_wait; /* maximum secs to wait for open */ - uint32_t max_open_vols; /* maximum simultaneous open volumes */ uint32_t min_block_size; /* min block size */ uint32_t max_block_size; /* max block size */ uint32_t max_volume_jobs; /* max jobs to put on one volume */ @@ -142,16 +134,17 @@ public: int64_t max_volume_size; /* max bytes to put on one volume */ int64_t max_file_size; /* max file size in bytes */ int64_t volume_capacity; /* advisory capacity */ + int64_t min_free_space; /* Minimum disk free space */ int64_t max_spool_size; /* Max spool size for all jobs */ int64_t max_job_spool_size; /* Max spool size for any single job */ - + int64_t max_part_size; /* Max part size */ char *mount_point; /* Mount point for require mount devices */ char *mount_command; /* Mount command */ char *unmount_command; /* Unmount command */ char *write_part_command; /* Write part command */ char *free_space_command; /* Free space command */ - + /* The following are set at runtime */ DEVICE *dev; /* Pointer to phyical dev -- set at runtime */ AUTOCHANGER *changer_res; /* pointer to changer res if any */ diff --git a/bacula/src/stored/tape_dev.c b/bacula/src/stored/tape_dev.c new file mode 100644 index 0000000000..281b85af2f --- /dev/null +++ b/bacula/src/stored/tape_dev.c @@ -0,0 +1,1000 @@ +/* + Bacula® - The Network Backup Solution + + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. + + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. + + Bacula® is a registered trademark of Kern Sibbald. +*/ +/* + * + * tape_dev.c -- low level operations on tape devices + * + * written by, Kern Sibbald, MM + * separated from dev.c in February 2014 + * + * The separation between tape and file is not yet clean. + * + */ + +/* + * Handling I/O errors and end of tape conditions are a bit tricky. + * This is how it is currently done when writing. + * On either an I/O error or end of tape, + * we will stop writing on the physical device (no I/O recovery is + * attempted at least in this daemon). The state flag will be sent + * to include ST_EOT, which is ephemeral, and ST_WEOT, which is + * persistent. Lots of routines clear ST_EOT, but ST_WEOT is + * cleared only when the problem goes away. Now when ST_WEOT + * is set all calls to write_block_to_device() call the fix_up + * routine. In addition, all threads are blocked + * from writing on the tape by calling lock_dev(), and thread other + * than the first thread to hit the EOT will block on a condition + * variable. The first thread to hit the EOT will continue to + * be able to read and write the tape (he sort of tunnels through + * the locking mechanism -- see lock_dev() for details). + * + * Now presumably somewhere higher in the chain of command + * (device.c), someone will notice the EOT condition and + * get a new tape up, get the tape label read, and mark + * the label for rewriting. Then this higher level routine + * will write the unwritten buffer to the new volume. + * Finally, he will release + * any blocked threads by doing a broadcast on the condition + * variable. At that point, we should be totally back in + * business with no lost data. + */ + +#include "bacula.h" +#include "stored.h" + +#ifndef O_NONBLOCK +#define O_NONBLOCK 0 +#endif + +/* Imported functions */ +extern void set_os_device_parameters(DCR *dcr); +extern bool dev_get_os_pos(DEVICE *dev, struct mtget *mt_stat); +extern uint32_t status_dev(DEVICE *dev); +const char *mode_to_str(int mode); + +/* + */ +void DEVICE::open_tape_device(DCR *dcr, int omode) +{ + file_size = 0; + int timeout = max_open_wait; +#if !defined(HAVE_WIN32) + struct mtop mt_com; + utime_t start_time = time(NULL); +#endif + + mount(1); /* do mount if required */ + + Dmsg0(100, "Open dev: device is tape\n"); + + get_autochanger_loaded_slot(dcr); + + openmode = omode; + set_mode(omode); + + if (timeout < 1) { + timeout = 1; + } + errno = 0; + if (is_fifo() && timeout) { + /* Set open timer */ + tid = start_thread_timer(dcr->jcr, pthread_self(), timeout); + } + Dmsg2(100, "Try open %s mode=%s\n", print_name(), mode_to_str(omode)); +#if defined(HAVE_WIN32) + + /* Windows Code */ + if ((m_fd = d_open(dev_name, mode)) < 0) { + dev_errno = errno; + } + +#else + + /* UNIX Code */ + /* If busy retry each second for max_open_wait seconds */ + for ( ;; ) { + /* Try non-blocking open */ + m_fd = d_open(dev_name, mode+O_NONBLOCK); + if (m_fd < 0) { + berrno be; + dev_errno = errno; + Dmsg5(100, "Open error on %s omode=%d mode=%x errno=%d: ERR=%s\n", + print_name(), omode, mode, errno, be.bstrerror()); + } else { + /* Tape open, now rewind it */ + Dmsg0(100, "Rewind after open\n"); + mt_com.mt_op = MTREW; + mt_com.mt_count = 1; + /* rewind only if dev is a tape */ + if (is_tape() && (d_ioctl(m_fd, MTIOCTOP, (char *)&mt_com) < 0)) { + berrno be; + dev_errno = errno; /* set error status from rewind */ + d_close(m_fd); + clear_opened(); + Dmsg2(100, "Rewind error on %s close: ERR=%s\n", print_name(), + be.bstrerror(dev_errno)); + /* If we get busy, device is probably rewinding, try again */ + if (dev_errno != EBUSY) { + break; /* error -- no medium */ + } + } else { + /* Got fd and rewind worked, so we must have medium in drive */ + d_close(m_fd); + m_fd = d_open(dev_name, mode); /* open normally */ + if (m_fd < 0) { + berrno be; + dev_errno = errno; + Dmsg5(100, "Open error on %s omode=%d mode=%x errno=%d: ERR=%s\n", + print_name(), omode, mode, errno, be.bstrerror()); + break; + } + dev_errno = 0; + lock_door(); + set_os_device_parameters(dcr); /* do system dependent stuff */ + break; /* Successfully opened and rewound */ + } + } + bmicrosleep(5, 0); + /* Exceed wait time ? */ + if (time(NULL) - start_time >= max_open_wait) { + break; /* yes, get out */ + } + } +#endif + + if (!is_open()) { + berrno be; + Mmsg2(errmsg, _("Unable to open device %s: ERR=%s\n"), + print_name(), be.bstrerror(dev_errno)); + Dmsg1(100, "%s", errmsg); + } + + /* Stop any open() timer we started */ + if (tid) { + stop_thread_timer(tid); + tid = 0; + } + Dmsg1(100, "open dev: tape %d opened\n", m_fd); +} + + +/* + * Rewind the device. + * Returns: true on success + * false on failure + */ +bool tape_dev::rewind(DCR *dcr) +{ + struct mtop mt_com; + unsigned int i; + bool first = true; + + Dmsg3(400, "rewind res=%d fd=%d %s\n", num_reserved(), m_fd, print_name()); + state &= ~(ST_EOT|ST_EOF|ST_WEOT); /* remove EOF/EOT flags */ + block_num = file = 0; + file_size = 0; + file_addr = 0; + if (m_fd < 0) { + return false; + } + if (is_tape()) { + mt_com.mt_op = MTREW; + mt_com.mt_count = 1; + /* If we get an I/O error on rewind, it is probably because + * the drive is actually busy. We loop for (about 5 minutes) + * retrying every 5 seconds. + */ + for (i=max_rewind_wait; ; i -= 5) { + if (d_ioctl(m_fd, MTIOCTOP, (char *)&mt_com) < 0) { + berrno be; + clrerror(MTREW); + if (i == max_rewind_wait) { + Dmsg1(200, "Rewind error, %s. retrying ...\n", be.bstrerror()); + } + /* + * This is a gross hack, because if the user has the + * device mounted (i.e. open), then uses mtx to load + * a tape, the current open file descriptor is invalid. + * So, we close the drive and re-open it. + */ + if (first && dcr) { + int open_mode = openmode; + d_close(m_fd); + clear_opened(); + open(dcr, open_mode); + if (m_fd < 0) { + return false; + } + first = false; + continue; + } +#ifdef HAVE_SUN_OS + if (dev_errno == EIO) { + Mmsg1(errmsg, _("No tape loaded or drive offline on %s.\n"), print_name()); + return false; + } +#else + if (dev_errno == EIO && i > 0) { + Dmsg0(200, "Sleeping 5 seconds.\n"); + bmicrosleep(5, 0); + continue; + } +#endif + Mmsg2(errmsg, _("Rewind error on %s. ERR=%s.\n"), + print_name(), be.bstrerror()); + return false; + } + break; + } + } + return true; +} + +/* + * Position device to end of medium (end of data) + * Returns: true on succes + * false on error + */ +bool DEVICE::eod(DCR *dcr) +{ + struct mtop mt_com; + bool ok = true; + boffset_t pos; + int32_t os_file; + + Enter(100); + if (m_fd < 0) { + dev_errno = EBADF; + Mmsg1(errmsg, _("Bad call to eod. Device %s not open\n"), print_name()); + Dmsg1(100, "%s", errmsg); + return false; + } + +#if defined (__digital__) && defined (__unix__) + return fsf(VolCatInfo.VolCatFiles); +#endif + + if (at_eot()) { + Leave(100); + return true; + } + clear_eof(); /* remove EOF flag */ + block_num = file = 0; + file_size = 0; + file_addr = 0; + if (is_fifo()) { + Leave(100); + return true; + } + if (!is_tape()) { + pos = lseek(dcr, (boffset_t)0, SEEK_END); + Dmsg1(200, "====== Seek to %lld\n", pos); + if (pos >= 0) { + update_pos(dcr); + set_eot(); + Leave(100); + return true; + } + dev_errno = errno; + berrno be; + Mmsg2(errmsg, _("lseek error on %s. ERR=%s.\n"), + print_name(), be.bstrerror()); + Dmsg1(100, "%s", errmsg); + Leave(100); + return false; + } +#ifdef MTEOM + if (has_cap(CAP_FASTFSF) && !has_cap(CAP_EOM)) { + Dmsg0(100,"Using FAST FSF for EOM\n"); + /* If unknown position, rewind */ + if (get_os_tape_file() < 0) { + if (!rewind(NULL)) { + Dmsg0(100, "Rewind error\n"); + Leave(100); + return false; + } + } + mt_com.mt_op = MTFSF; + /* + * ***FIXME*** fix code to handle case that INT16_MAX is + * not large enough. + */ + mt_com.mt_count = INT16_MAX; /* use big positive number */ + if (mt_com.mt_count < 0) { + mt_com.mt_count = INT16_MAX; /* brain damaged system */ + } + } + + if (has_cap(CAP_MTIOCGET) && (has_cap(CAP_FASTFSF) || has_cap(CAP_EOM))) { + if (has_cap(CAP_EOM)) { + Dmsg0(100,"Using EOM for EOM\n"); + mt_com.mt_op = MTEOM; + mt_com.mt_count = 1; + } + + if (d_ioctl(m_fd, MTIOCTOP, (char *)&mt_com) < 0) { + berrno be; + clrerror(mt_com.mt_op); + Dmsg1(50, "ioctl error: %s\n", be.bstrerror()); + update_pos(dcr); + Mmsg2(errmsg, _("ioctl MTEOM error on %s. ERR=%s.\n"), + print_name(), be.bstrerror()); + Dmsg1(100, "%s", errmsg); + Leave(100); + return false; + } + + os_file = get_os_tape_file(); + if (os_file < 0) { + berrno be; + clrerror(-1); + Mmsg2(errmsg, _("ioctl MTIOCGET error on %s. ERR=%s.\n"), + print_name(), be.bstrerror()); + Dmsg1(100, "%s", errmsg); + Leave(100); + return false; + } + Dmsg1(100, "EOD file=%d\n", os_file); + set_ateof(); + file = os_file; + } else { +#else + { +#endif + /* + * Rewind then use FSF until EOT reached + */ + if (!rewind(NULL)) { + Dmsg0(100, "Rewind error.\n"); + Leave(100); + return false; + } + /* + * Move file by file to the end of the tape + */ + int file_num; + for (file_num=file; !at_eot(); file_num++) { + Dmsg0(200, "eod: doing fsf 1\n"); + if (!fsf(1)) { + Dmsg0(100, "fsf error.\n"); + Leave(100); + return false; + } + /* + * Avoid infinite loop by ensuring we advance. + */ + if (!at_eot() && file_num == (int)file) { + Dmsg1(100, "fsf did not advance from file %d\n", file_num); + set_ateof(); + os_file = get_os_tape_file(); + if (os_file >= 0) { + Dmsg2(100, "Adjust file from %d to %d\n", file_num, os_file); + file = os_file; + } + break; + } + } + } + /* + * Some drivers leave us after second EOF when doing + * MTEOM, so we must backup so that appending overwrites + * the second EOF. + */ + if (has_cap(CAP_BSFATEOM)) { + /* Backup over EOF */ + ok = bsf(1); + /* If BSF worked and fileno is known (not -1), set file */ + os_file = get_os_tape_file(); + if (os_file >= 0) { + Dmsg2(100, "BSFATEOF adjust file from %d to %d\n", file , os_file); + file = os_file; + } else { + file++; /* wing it -- not correct on all OSes */ + } + } else { + update_pos(dcr); /* update position */ + } + Dmsg1(200, "EOD dev->file=%d\n", file); + Leave(100); + return ok; +} + +/* + * Load medium in device + * Returns: true on success + * false on failure + */ +bool load_dev(DEVICE *dev) +{ +#ifdef MTLOAD + struct mtop mt_com; +#endif + + if (dev->fd() < 0) { + dev->dev_errno = EBADF; + Mmsg0(dev->errmsg, _("Bad call to load_dev. Device not open\n")); + Emsg0(M_FATAL, 0, dev->errmsg); + return false; + } + if (!(dev->is_tape())) { + return true; + } +#ifndef MTLOAD + Dmsg0(200, "stored: MTLOAD command not available\n"); + berrno be; + dev->dev_errno = ENOTTY; /* function not available */ + Mmsg2(dev->errmsg, _("ioctl MTLOAD error on %s. ERR=%s.\n"), + dev->print_name(), be.bstrerror()); + return false; +#else + + dev->block_num = dev->file = 0; + dev->file_size = 0; + dev->file_addr = 0; + mt_com.mt_op = MTLOAD; + mt_com.mt_count = 1; + if (dev->d_ioctl(dev->fd(), MTIOCTOP, (char *)&mt_com) < 0) { + berrno be; + dev->dev_errno = errno; + Mmsg2(dev->errmsg, _("ioctl MTLOAD error on %s. ERR=%s.\n"), + dev->print_name(), be.bstrerror()); + return false; + } + return true; +#endif +} + +/* + * Rewind device and put it offline + * Returns: true on success + * false on failure + */ +bool tape_dev::offline() +{ + struct mtop mt_com; + + if (!is_tape()) { + return true; /* device not open */ + } + + state &= ~(ST_APPEND|ST_READ|ST_EOT|ST_EOF|ST_WEOT); /* remove EOF/EOT flags */ + block_num = file = 0; + file_size = 0; + file_addr = 0; + unlock_door(); + mt_com.mt_op = MTOFFL; + mt_com.mt_count = 1; + if (d_ioctl(m_fd, MTIOCTOP, (char *)&mt_com) < 0) { + berrno be; + dev_errno = errno; + Mmsg2(errmsg, _("ioctl MTOFFL error on %s. ERR=%s.\n"), + print_name(), be.bstrerror()); + return false; + } + Dmsg1(100, "Offlined device %s\n", print_name()); + return true; +} + +bool DEVICE::offline_or_rewind() +{ + if (m_fd < 0) { + return false; + } + if (has_cap(CAP_OFFLINEUNMOUNT)) { + return offline(); + } else { + /* + * Note, this rewind probably should not be here (it wasn't + * in prior versions of Bacula), but on FreeBSD, this is + * needed in the case the tape was "frozen" due to an error + * such as backspacing after writing and EOF. If it is not + * done, all future references to the drive get and I/O error. + */ + clrerror(MTREW); + return rewind(NULL); + } +} + +/* + * Foward space a file + * Returns: true on success + * false on failure + */ +bool tape_dev::fsf(int num) +{ + int32_t os_file = 0; + struct mtop mt_com; + int stat = 0; + + if (!is_open()) { + dev_errno = EBADF; + Mmsg0(errmsg, _("Bad call to fsf. Device not open\n")); + Emsg0(M_FATAL, 0, errmsg); + return false; + } + + if (!is_tape()) { + return true; + } + + if (at_eot()) { + dev_errno = 0; + Mmsg1(errmsg, _("Device %s at End of Tape.\n"), print_name()); + return false; + } + if (at_eof()) { + Dmsg0(200, "ST_EOF set on entry to FSF\n"); + } + + Dmsg0(100, "fsf\n"); + block_num = 0; + /* + * If Fast forward space file is set, then we + * use MTFSF to forward space and MTIOCGET + * to get the file position. We assume that + * the SCSI driver will ensure that we do not + * forward space past the end of the medium. + */ + if (has_cap(CAP_FSF) && has_cap(CAP_MTIOCGET) && has_cap(CAP_FASTFSF)) { + int my_errno = 0; + mt_com.mt_op = MTFSF; + mt_com.mt_count = num; + stat = d_ioctl(m_fd, MTIOCTOP, (char *)&mt_com); + if (stat < 0) { + my_errno = errno; /* save errno */ + } else if ((os_file=get_os_tape_file()) < 0) { + my_errno = errno; /* save errno */ + } + if (my_errno != 0) { + berrno be; + set_eot(); + Dmsg0(200, "Set ST_EOT\n"); + clrerror(MTFSF); + Mmsg2(errmsg, _("ioctl MTFSF error on %s. ERR=%s.\n"), + print_name(), be.bstrerror(my_errno)); + Dmsg1(200, "%s", errmsg); + return false; + } + + Dmsg1(200, "fsf file=%d\n", os_file); + set_ateof(); + file = os_file; + return true; + + /* + * Here if CAP_FSF is set, and virtually all drives + * these days support it, we read a record, then forward + * space one file. Using this procedure, which is slow, + * is the only way we can be sure that we don't read + * two consecutive EOF marks, which means End of Data. + */ + } else if (has_cap(CAP_FSF)) { + POOLMEM *rbuf; + int rbuf_len; + Dmsg0(200, "FSF has cap_fsf\n"); + if (max_block_size == 0) { + rbuf_len = DEFAULT_BLOCK_SIZE; + } else { + rbuf_len = max_block_size; + } + rbuf = get_memory(rbuf_len); + mt_com.mt_op = MTFSF; + mt_com.mt_count = 1; + while (num-- && !at_eot()) { + Dmsg0(100, "Doing read before fsf\n"); + if ((stat = this->read((char *)rbuf, rbuf_len)) < 0) { + if (errno == ENOMEM) { /* tape record exceeds buf len */ + stat = rbuf_len; /* This is OK */ + /* + * On IBM drives, they return ENOSPC at EOM + * instead of EOF status + */ + } else if (at_eof() && errno == ENOSPC) { + stat = 0; + } else { + berrno be; + set_eot(); + clrerror(-1); + Dmsg2(100, "Set ST_EOT read errno=%d. ERR=%s\n", dev_errno, + be.bstrerror()); + Mmsg2(errmsg, _("read error on %s. ERR=%s.\n"), + print_name(), be.bstrerror()); + Dmsg1(100, "%s", errmsg); + break; + } + } + if (stat == 0) { /* EOF */ + Dmsg1(100, "End of File mark from read. File=%d\n", file+1); + /* Two reads of zero means end of tape */ + if (at_eof()) { + set_eot(); + Dmsg0(100, "Set ST_EOT\n"); + break; + } else { + set_ateof(); + continue; + } + } else { /* Got data */ + clear_eot(); + clear_eof(); + } + + Dmsg0(100, "Doing MTFSF\n"); + stat = d_ioctl(m_fd, MTIOCTOP, (char *)&mt_com); + if (stat < 0) { /* error => EOT */ + berrno be; + set_eot(); + Dmsg0(100, "Set ST_EOT\n"); + clrerror(MTFSF); + Mmsg2(errmsg, _("ioctl MTFSF error on %s. ERR=%s.\n"), + print_name(), be.bstrerror()); + Dmsg0(100, "Got < 0 for MTFSF\n"); + Dmsg1(100, "%s", errmsg); + } else { + set_ateof(); + } + } + free_memory(rbuf); + + /* + * No FSF, so use FSR to simulate it + */ + } else { + Dmsg0(200, "Doing FSR for FSF\n"); + while (num-- && !at_eot()) { + fsr(INT32_MAX); /* returns -1 on EOF or EOT */ + } + if (at_eot()) { + dev_errno = 0; + Mmsg1(errmsg, _("Device %s at End of Tape.\n"), print_name()); + stat = -1; + } else { + stat = 0; + } + } + Dmsg1(200, "Return %d from FSF\n", stat); + if (at_eof()) { + Dmsg0(200, "ST_EOF set on exit FSF\n"); + } + if (at_eot()) { + Dmsg0(200, "ST_EOT set on exit FSF\n"); + } + Dmsg1(200, "Return from FSF file=%d\n", file); + return stat == 0; +} + +/* + * Backward space a file + * Returns: false on failure + * true on success + */ +bool tape_dev::bsf(int num) +{ + struct mtop mt_com; + int stat; + + if (!is_open()) { + dev_errno = EBADF; + Mmsg0(errmsg, _("Bad call to bsf. Device not open\n")); + Emsg0(M_FATAL, 0, errmsg); + return false; + } + + if (!is_tape()) { + Mmsg1(errmsg, _("Device %s cannot BSF because it is not a tape.\n"), + print_name()); + return false; + } + + Dmsg0(100, "bsf\n"); + clear_eot(); + clear_eof(); + file -= num; + file_addr = 0; + file_size = 0; + mt_com.mt_op = MTBSF; + mt_com.mt_count = num; + stat = d_ioctl(m_fd, MTIOCTOP, (char *)&mt_com); + if (stat < 0) { + berrno be; + clrerror(MTBSF); + Mmsg2(errmsg, _("ioctl MTBSF error on %s. ERR=%s.\n"), + print_name(), be.bstrerror()); + } + return stat == 0; +} + + +/* + * Foward space num records + * Returns: false on failure + * true on success + */ +bool DEVICE::fsr(int num) +{ + struct mtop mt_com; + int stat; + + if (!is_open()) { + dev_errno = EBADF; + Mmsg0(errmsg, _("Bad call to fsr. Device not open\n")); + Emsg0(M_FATAL, 0, errmsg); + return false; + } + + if (!is_tape()) { + return false; + } + + if (!has_cap(CAP_FSR)) { + Mmsg1(errmsg, _("ioctl MTFSR not permitted on %s.\n"), print_name()); + return false; + } + + Dmsg1(100, "fsr %d\n", num); + mt_com.mt_op = MTFSR; + mt_com.mt_count = num; + stat = d_ioctl(m_fd, MTIOCTOP, (char *)&mt_com); + if (stat == 0) { + clear_eof(); + block_num += num; + } else { + berrno be; + struct mtget mt_stat; + clrerror(MTFSR); + Dmsg1(100, "FSF fail: ERR=%s\n", be.bstrerror()); + if (dev_get_os_pos(this, &mt_stat)) { + Dmsg4(100, "Adjust from %d:%d to %d:%d\n", file, + block_num, mt_stat.mt_fileno, mt_stat.mt_blkno); + file = mt_stat.mt_fileno; + block_num = mt_stat.mt_blkno; + } else { + if (at_eof()) { + set_eot(); + } else { + set_ateof(); + } + } + Mmsg3(errmsg, _("ioctl MTFSR %d error on %s. ERR=%s.\n"), + num, print_name(), be.bstrerror()); + } + return stat == 0; +} + +/* + * Backward space a record + * Returns: false on failure + * true on success + */ +bool DEVICE::bsr(int num) +{ + struct mtop mt_com; + int stat; + + if (!is_open()) { + dev_errno = EBADF; + Mmsg0(errmsg, _("Bad call to bsr_dev. Device not open\n")); + Emsg0(M_FATAL, 0, errmsg); + return false; + } + + if (!is_tape()) { + return false; + } + + if (!has_cap(CAP_BSR)) { + Mmsg1(errmsg, _("ioctl MTBSR not permitted on %s.\n"), print_name()); + return false; + } + + Dmsg0(100, "bsr_dev\n"); + block_num -= num; + clear_eof(); + clear_eot(); + mt_com.mt_op = MTBSR; + mt_com.mt_count = num; + stat = d_ioctl(m_fd, MTIOCTOP, (char *)&mt_com); + if (stat < 0) { + berrno be; + clrerror(MTBSR); + Mmsg2(errmsg, _("ioctl MTBSR error on %s. ERR=%s.\n"), + print_name(), be.bstrerror()); + } + return stat == 0; +} + +void tape_dev::lock_door() +{ +#ifdef MTLOCK + struct mtop mt_com; + if (!is_tape()) return; + mt_com.mt_op = MTLOCK; + mt_com.mt_count = 1; + d_ioctl(m_fd, MTIOCTOP, (char *)&mt_com); +#endif +} + +void tape_dev::unlock_door() +{ +#ifdef MTUNLOCK + struct mtop mt_com; + if (!is_tape()) return; + mt_com.mt_op = MTUNLOCK; + mt_com.mt_count = 1; + d_ioctl(m_fd, MTIOCTOP, (char *)&mt_com); +#endif +} + +/* + * Reposition the device to file, block + * Returns: false on failure + * true on success + */ +bool tape_dev::reposition(DCR *dcr, uint32_t rfile, uint32_t rblock) +{ + if (!is_open()) { + dev_errno = EBADF; + Mmsg0(errmsg, _("Bad call to reposition. Device not open\n")); + Emsg0(M_FATAL, 0, errmsg); + return false; + } + + /* After this point, we are tape only */ + Dmsg4(100, "reposition from %u:%u to %u:%u\n", file, block_num, rfile, rblock); + if (rfile < file) { + Dmsg0(100, "Rewind\n"); + if (!rewind(NULL)) { + return false; + } + } + if (rfile > file) { + Dmsg1(100, "fsf %d\n", rfile-file); + if (!fsf(rfile-file)) { + Dmsg1(100, "fsf failed! ERR=%s\n", bstrerror()); + return false; + } + Dmsg2(100, "wanted_file=%d at_file=%d\n", rfile, file); + } + if (rblock < block_num) { + Dmsg2(100, "wanted_blk=%d at_blk=%d\n", rblock, block_num); + Dmsg0(100, "bsf 1\n"); + bsf(1); + Dmsg0(100, "fsf 1\n"); + fsf(1); + Dmsg2(100, "wanted_blk=%d at_blk=%d\n", rblock, block_num); + } + if (has_cap(CAP_POSITIONBLOCKS) && rblock > block_num) { + /* Ignore errors as Bacula can read to the correct block */ + Dmsg1(100, "fsr %d\n", rblock-block_num); + return fsr(rblock-block_num); + } else { + while (rblock > block_num) { + if (!dcr->read_block_from_dev(NO_BLOCK_NUMBER_CHECK)) { + berrno be; + dev_errno = errno; + Dmsg2(30, "Failed to find requested block on %s: ERR=%s", + print_name(), be.bstrerror()); + return false; + } + Dmsg2(300, "moving forward wanted_blk=%d at_blk=%d\n", rblock, block_num); + } + } + return true; +} + + +/* + * Write an end of file on the device + * Returns: true on success + * false on failure + */ +bool DEVICE::weof(int num) +{ + struct mtop mt_com; + int stat; + Dmsg1(129, "=== weof_dev=%s\n", print_name()); + + if (!is_open()) { + dev_errno = EBADF; + Mmsg0(errmsg, _("Bad call to weof_dev. Device not open\n")); + Emsg0(M_FATAL, 0, errmsg); + return false; + } + file_size = 0; + + if (!is_tape()) { + return true; + } + if (!can_append()) { + Mmsg0(errmsg, _("Attempt to WEOF on non-appendable Volume\n")); + Emsg0(M_FATAL, 0, errmsg); + return false; + } + + clear_eof(); + clear_eot(); + mt_com.mt_op = MTWEOF; + mt_com.mt_count = num; + stat = d_ioctl(m_fd, MTIOCTOP, (char *)&mt_com); + if (stat == 0) { + block_num = 0; + file += num; + file_addr = 0; + } else { + berrno be; + clrerror(MTWEOF); + if (stat == -1) { + Mmsg2(errmsg, _("ioctl MTWEOF error on %s. ERR=%s.\n"), + print_name(), be.bstrerror()); + } + } + return stat == 0; +} + +/* + * (Un)mount the device (for tape devices) + */ +bool DEVICE::do_tape_mount(int mount, int dotimeout) +{ + POOL_MEM ocmd(PM_FNAME); + POOLMEM *results; + char *icmd; + int status, tries; + berrno be; + + Dsm_check(200); + if (mount) { + icmd = device->mount_command; + } else { + icmd = device->unmount_command; + } + + edit_mount_codes(ocmd, icmd); + + Dmsg2(100, "do_tape_mount: cmd=%s mounted=%d\n", ocmd.c_str(), !!is_mounted()); + + if (dotimeout) { + /* Try at most 10 times to (un)mount the device. This should perhaps be configurable. */ + tries = 10; + } else { + tries = 1; + } + results = get_memory(4000); + + /* If busy retry each second */ + Dmsg1(100, "do_tape_mount run_prog=%s\n", ocmd.c_str()); + while ((status = run_program_full_output(ocmd.c_str(), max_open_wait/2, results)) != 0) { + if (tries-- > 0) { + continue; + } + + Dmsg5(100, "Device %s cannot be %smounted. stat=%d result=%s ERR=%s\n", print_name(), + (mount ? "" : "un"), status, results, be.bstrerror(status)); + Mmsg(errmsg, _("Device %s cannot be %smounted. ERR=%s\n"), + print_name(), (mount ? "" : "un"), be.bstrerror(status)); + + set_mounted(false); + free_pool_memory(results); + Dmsg0(200, "============ mount=0\n"); + Dsm_check(200); + return false; + } + + set_mounted(mount); /* set/clear mounted flag */ + free_pool_memory(results); + Dmsg1(200, "============ mount=%d\n", mount); + return true; +} diff --git a/bacula/src/stored/tape_dev.h b/bacula/src/stored/tape_dev.h new file mode 100644 index 0000000000..f6e087b0f0 --- /dev/null +++ b/bacula/src/stored/tape_dev.h @@ -0,0 +1,39 @@ +/* + Bacula® - The Network Backup Solution + + Copyright (C) 2014-2014 Free Software Foundation Europe e.V. + + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. + + Bacula® is a registered trademark of Kern Sibbald. +*/ +/* + * Inspired by vtape.h + */ + +#ifndef __TAPE_DEV_ +#define __TAPE_DEV_ + +class tape_dev : public DEVICE { +public: + + tape_dev() { }; + ~tape_dev() { }; + + /* DEVICE virtual functions that we redefine with our tape code */ + bool fsf(int num); + bool offline(); + bool rewind(DCR *dcr); + bool bsf(int num); + void lock_door(); + void unlock_door(); + bool reposition(DCR *dcr, uint32_t rfile, uint32_t rblock); +}; + +#endif /* __TAPE_DEV_ */ diff --git a/bacula/src/stored/vbackup.c b/bacula/src/stored/vbackup.c new file mode 100644 index 0000000000..a8ae560542 --- /dev/null +++ b/bacula/src/stored/vbackup.c @@ -0,0 +1,267 @@ +/* + Bacula® - The Network Backup Solution + + Copyright (C) 2006-2014 Free Software Foundation Europe e.V. + + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. + + Bacula® is a registered trademark of Kern Sibbald. +*/ +/* + * SD -- vbackup.c -- responsible for doing virtual backup jobs. + * + * Kern Sibbald, January MMVI + * + */ + +#include "bacula.h" +#include "stored.h" + +/* Import functions */ +extern char Job_end[]; + +/* Forward referenced subroutines */ +static bool record_cb(DCR *dcr, DEV_RECORD *rec); + +/* + * Read Data and send to File Daemon + * Returns: false on failure + * true on success + */ +bool do_vbackup(JCR *jcr) +{ + bool ok = true; + BSOCK *dir = jcr->dir_bsock; + const char *Type; + char ec1[50]; + DEVICE *dev; + + switch(jcr->getJobType()) { + case JT_MIGRATE: + Type = "Migration"; + break; + case JT_ARCHIVE: + Type = "Archive"; + break; + case JT_COPY: + Type = "Copy"; + break; + case JT_BACKUP: + Type = "Virtual Backup"; + break; + default: + Type = "Unknown"; + break; + } + + + Dmsg0(20, "Start read data.\n"); + + if (!jcr->read_dcr || !jcr->dcr) { + Jmsg(jcr, M_FATAL, 0, _("Read and write devices not properly initialized.\n")); + goto bail_out; + } + Dmsg2(100, "read_dcr=%p write_dcr=%p\n", jcr->read_dcr, jcr->dcr); + + if (jcr->NumReadVolumes == 0) { + Jmsg(jcr, M_FATAL, 0, _("No Volume names found for %s.\n"), Type); + goto bail_out; + } + + Dmsg3(200, "Found %d volumes names for %s. First=%s\n", jcr->NumReadVolumes, + jcr->VolList->VolumeName, Type); + + ASSERT(jcr->read_dcr != jcr->dcr); + ASSERT(jcr->read_dcr->dev != jcr->dcr->dev); + /* Ready devices for reading and writing */ + if (!acquire_device_for_read(jcr->read_dcr) || + !acquire_device_for_append(jcr->dcr)) { + jcr->setJobStatus(JS_ErrorTerminated); + goto bail_out; + } + + Dmsg2(200, "===== After acquire pos %u:%u\n", jcr->dcr->dev->file, jcr->dcr->dev->block_num); + + jcr->sendJobStatus(JS_Running); + + begin_data_spool(jcr->dcr); + begin_attribute_spool(jcr); + + jcr->dcr->VolFirstIndex = jcr->dcr->VolLastIndex = 0; + jcr->run_time = time(NULL); + set_start_vol_position(jcr->dcr); + + jcr->JobFiles = 0; + ok = read_records(jcr->read_dcr, record_cb, mount_next_read_volume); + goto ok_out; + +bail_out: + ok = false; + +ok_out: + if (jcr->dcr) { + dev = jcr->dcr->dev; + Dmsg1(100, "ok=%d\n", ok); + if (ok || dev->can_write()) { + /* Flush out final partial block of this session */ + if (!jcr->dcr->write_block_to_device()) { + Jmsg2(jcr, M_FATAL, 0, _("Fatal append error on device %s: ERR=%s\n"), + dev->print_name(), dev->bstrerror()); + Dmsg0(100, _("Set ok=FALSE after write_block_to_device.\n")); + ok = false; + } + Dmsg2(200, "Flush block to device pos %u:%u\n", dev->file, dev->block_num); + } + + if (!ok) { + discard_data_spool(jcr->dcr); + } else { + /* Note: if commit is OK, the device will remain blocked */ + commit_data_spool(jcr->dcr); + } + + /* + * Don't use time_t for job_elapsed as time_t can be 32 or 64 bits, + * and the subsequent Jmsg() editing will break + */ + int32_t job_elapsed = time(NULL) - jcr->run_time; + + if (job_elapsed <= 0) { + job_elapsed = 1; + } + + Jmsg(jcr, M_INFO, 0, _("Elapsed time=%02d:%02d:%02d, Transfer rate=%s Bytes/second\n"), + job_elapsed / 3600, job_elapsed % 3600 / 60, job_elapsed % 60, + edit_uint64_with_suffix(jcr->JobBytes / job_elapsed, ec1)); + +#ifdef BUILD_DVD + if (ok && dev->is_dvd()) { + ok = dvd_close_job(jcr->dcr); /* do DVD cleanup if any */ + } +#endif + + /* Release the device -- and send final Vol info to DIR */ + release_device(jcr->dcr); + + if (!ok || job_canceled(jcr)) { + discard_attribute_spool(jcr); + } else { + commit_attribute_spool(jcr); + } + } + + if (jcr->read_dcr) { + if (!release_device(jcr->read_dcr)) { + ok = false; + } + } + + jcr->sendJobStatus(); /* update director */ + + Dmsg0(30, "Done reading.\n"); + jcr->end_time = time(NULL); + dequeue_messages(jcr); /* send any queued messages */ + if (ok) { + jcr->setJobStatus(JS_Terminated); + } + generate_daemon_event(jcr, "JobEnd"); + generate_plugin_event(jcr, bsdEventJobEnd); + dir->fsend(Job_end, jcr->Job, jcr->JobStatus, jcr->JobFiles, + edit_uint64(jcr->JobBytes, ec1), jcr->JobErrors); + Dmsg4(100, Job_end, jcr->Job, jcr->JobStatus, jcr->JobFiles, ec1); + + dir->signal(BNET_EOD); /* send EOD to Director daemon */ + free_plugins(jcr); /* release instantiated plugins */ + + return ok; +} + + +/* + * Called here for each record from read_records() + * Returns: true if OK + * false if error + */ +static bool record_cb(DCR *dcr, DEV_RECORD *rec) +{ + JCR *jcr = dcr->jcr; + DEVICE *dev = jcr->dcr->dev; + char buf1[100], buf2[100]; + +#ifdef xxx + Pmsg5(000, "on entry JobId=%d FI=%s SessId=%d Strm=%s len=%d\n", + jcr->JobId, + FI_to_ascii(buf1, rec->FileIndex), rec->VolSessionId, + stream_to_ascii(buf2, rec->Stream, rec->FileIndex), rec->data_len); +#endif + /* If label and not for us, discard it */ + if (rec->FileIndex < 0 && rec->match_stat <= 0) { + return true; + } + /* We want to write SOS_LABEL and EOS_LABEL discard all others */ + switch (rec->FileIndex) { + case PRE_LABEL: + case VOL_LABEL: + case EOT_LABEL: + case EOM_LABEL: + return true; /* don't write vol labels */ + } + + /* + * For normal migration jobs, FileIndex values are sequential because + * we are dealing with one job. However, for Vbackup (consolidation), + * we will be getting records from multiple jobs and writing them back + * out, so we need to ensure that the output FileIndex is sequential. + * We do so by detecting a FileIndex change and incrementing the + * JobFiles, which we then use as the output FileIndex. + */ + if (rec->FileIndex >= 0) { + /* If something changed, increment FileIndex */ + if (rec->VolSessionId != rec->last_VolSessionId || + rec->VolSessionTime != rec->last_VolSessionTime || + rec->FileIndex != rec->last_FileIndex) { + jcr->JobFiles++; + rec->last_VolSessionId = rec->VolSessionId; + rec->last_VolSessionTime = rec->VolSessionTime; + rec->last_FileIndex = rec->FileIndex; + } + rec->FileIndex = jcr->JobFiles; /* set sequential output FileIndex */ + } + + /* + * Modify record SessionId and SessionTime to correspond to + * output. + */ + rec->VolSessionId = jcr->VolSessionId; + rec->VolSessionTime = jcr->VolSessionTime; + Dmsg5(200, "before write JobId=%d FI=%s SessId=%d Strm=%s len=%d\n", + jcr->JobId, + FI_to_ascii(buf1, rec->FileIndex), rec->VolSessionId, + stream_to_ascii(buf2, rec->Stream, rec->FileIndex), rec->data_len); + if (!jcr->dcr->write_record(rec)) { + Jmsg2(jcr, M_FATAL, 0, _("Fatal append error on device %s: ERR=%s\n"), + dev->print_name(), dev->bstrerror()); + return false; + } + /* Restore packet */ + rec->VolSessionId = rec->last_VolSessionId; + rec->VolSessionTime = rec->last_VolSessionTime; + if (rec->FileIndex < 0) { + return true; /* don't send LABELs to Dir */ + } + jcr->JobBytes += rec->data_len; /* increment bytes this job */ + Dmsg5(500, "wrote_record JobId=%d FI=%s SessId=%d Strm=%s len=%d\n", + jcr->JobId, + FI_to_ascii(buf1, rec->FileIndex), rec->VolSessionId, + stream_to_ascii(buf2, rec->Stream, rec->FileIndex), rec->data_len); + + send_attrs_to_dir(jcr, rec); + + return true; +} diff --git a/bacula/src/stored/vol_mgr.c b/bacula/src/stored/vol_mgr.c index f3e28e7b6b..3a317150f5 100644 --- a/bacula/src/stored/vol_mgr.c +++ b/bacula/src/stored/vol_mgr.c @@ -1,34 +1,22 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2013 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Volume management functions for Storage Daemon * - * Kern Sibbald, MM + * Written by Kern Sibbald, MM * * Split from reserve.c October 2008 * @@ -52,7 +40,7 @@ static void debug_list_volumes(const char *imsg); /* * For append volumes the key is the VolumeName. */ -static int my_compare(void *item1, void *item2) +static int name_compare(void *item1, void *item2) { return strcmp(((VOLRES *)item1)->vol_name, ((VOLRES *)item2)->vol_name); } @@ -74,8 +62,7 @@ static int read_compare(void *item1, void *item2) return 1; } - -bool is_vol_list_empty() +bool is_vol_list_empty() { return vol_list->empty(); } @@ -125,12 +112,13 @@ void _unlock_volumes() } } -void lock_read_volumes(const char *file="**Unknown", int line=0) +#define lock_read_volumes() lock_read_volumes_p(__FILE__, __LINE__) +static void lock_read_volumes_p(const char *file="**Unknown", int line=0) { bthread_mutex_lock_p(&read_vol_lock, file, line); } -void unlock_read_volumes() +static void unlock_read_volumes() { bthread_mutex_unlock(&read_vol_lock); } @@ -140,7 +128,7 @@ void unlock_read_volumes() * Note, we use VOLRES because it simplifies the code * even though, the only part of VOLRES that we need is * the volume name. The same volume may be in the list - * multiple times, but each one is distinguished by the + * multiple times, but each one is distinguished by the * JobId. We use JobId, VolumeName as the key. * We can get called multiple times for the same volume because * when parsing the bsr, the volume name appears multiple times. @@ -151,15 +139,30 @@ void add_read_volume(JCR *jcr, const char *VolumeName) nvol = new_vol_item(NULL, VolumeName); nvol->set_jobid(jcr->JobId); + nvol->set_reading(); lock_read_volumes(); vol = (VOLRES *)read_vol_list->binary_insert(nvol, read_compare); - unlock_read_volumes(); if (vol != nvol) { free_vol_item(nvol); Dmsg2(dbglvl, "read_vol=%s JobId=%d already in list.\n", VolumeName, jcr->JobId); } else { Dmsg2(dbglvl, "add read_vol=%s JobId=%d\n", VolumeName, jcr->JobId); } + unlock_read_volumes(); +} + +/* + * Check if volume name is in the read list. + */ +bool is_read_volume(JCR *jcr, const char *VolumeName) +{ + VOLRES vol, *fvol; + lock_read_volumes(); + vol.vol_name = bstrdup(VolumeName); + fvol = (VOLRES *)read_vol_list->binary_search(&vol, name_compare); + free(vol.vol_name); + unlock_read_volumes(); + return fvol != NULL; } /* @@ -197,12 +200,17 @@ static void debug_list_volumes(const char *imsg) VOLRES *vol; POOL_MEM msg(PM_MESSAGE); + if (debug_level < dbglvl) { + return; + } + foreach_vol(vol) { if (vol->dev) { - Mmsg(msg, "List %s: %s in_use=%d swap=%d on device %s\n", imsg, - vol->vol_name, vol->is_in_use(), vol->is_swapping(), vol->dev->print_name()); + Mmsg(msg, "List %s: %s in_use=%d swap=%d on %s device %s\n", imsg, + vol->vol_name, vol->is_in_use(), vol->is_swapping(), + vol->dev->print_type(), vol->dev->print_name()); } else { - Mmsg(msg, "List %s: %s in_use=%d swap=%d no dev\n", imsg, vol->vol_name, + Mmsg(msg, "List %s: %s in_use=%d swap=%d no dev\n", imsg, vol->vol_name, vol->is_in_use(), vol->is_swapping()); } Dmsg1(dbglvl, "%s", msg.c_str()); @@ -223,14 +231,15 @@ void list_volumes(void sendit(const char *msg, int len, void *sarg), void *arg) foreach_vol(vol) { DEVICE *dev = vol->dev; if (dev) { - len = Mmsg(msg, "%s on device %s\n", vol->vol_name, dev->print_name()); + len = Mmsg(msg, "Reserved volume: %s on %s device %s\n", vol->vol_name, + dev->print_type(), dev->print_name()); sendit(msg.c_str(), len, arg); len = Mmsg(msg, " Reader=%d writers=%d reserves=%d volinuse=%d\n", dev->can_read()?1:0, dev->num_writers, dev->num_reserved(), vol->is_in_use()); sendit(msg.c_str(), len, arg); } else { - len = Mmsg(msg, "Volume %s no device. volinuse= %d\n", vol->vol_name, + len = Mmsg(msg, "Volume %s no device. volinuse=%d\n", vol->vol_name, vol->is_in_use()); sendit(msg.c_str(), len, arg); } @@ -241,14 +250,15 @@ void list_volumes(void sendit(const char *msg, int len, void *sarg), void *arg) foreach_dlist(vol, read_vol_list) { DEVICE *dev = vol->dev; if (dev) { - len = Mmsg(msg, "Read volume: %s on device %s\n", vol->vol_name, dev->print_name()); + len = Mmsg(msg, "Read volume: %s on %s device %s\n", vol->vol_name, + dev->print_type(), dev->print_name()); sendit(msg.c_str(), len, arg); len = Mmsg(msg, " Reader=%d writers=%d reserves=%d volinuse=%d JobId=%d\n", dev->can_read()?1:0, dev->num_writers, dev->num_reserved(), vol->is_in_use(), vol->get_jobid()); sendit(msg.c_str(), len, arg); } else { - len = Mmsg(msg, "Volume: %s no device. volinuse= %d\n", vol->vol_name, + len = Mmsg(msg, "Volume: %s no device. volinuse=%d\n", vol->vol_name, vol->is_in_use()); sendit(msg.c_str(), len, arg); } @@ -281,12 +291,12 @@ static void free_vol_item(VOLRES *vol) DEVICE *dev = NULL; vol->dec_use_count(); - vol->Lock(); + vol->vLock(); if (vol->use_count() > 0) { - vol->Unlock(); + vol->vUnlock(); return; } - vol->Unlock(); + vol->vUnlock(); free(vol->vol_name); if (vol->dev) { dev = vol->dev; @@ -306,7 +316,7 @@ static void free_vol_item(VOLRES *vol) * If the device has any current volume associated with it, * and it is a different Volume, and the device is not busy, * we release the old Volume item and insert the new one. - * + * * It is assumed that the device is free and locked so that * we can change the device structure. * @@ -347,20 +357,32 @@ static void free_vol_item(VOLRES *vol) * * Return: VOLRES entry on success * NULL volume busy on another drive + * jcr->errmsg has details */ VOLRES *reserve_volume(DCR *dcr, const char *VolumeName) { VOLRES *vol, *nvol; DEVICE * volatile dev = dcr->dev; + JCR *jcr = dcr->jcr; + jcr->errmsg[0] = 0; if (job_canceled(dcr->jcr)) { + Mmsg1(jcr->errmsg, _("Could not reserve volume \"%s\", because job canceled.\n"), + dev->VolHdr.VolumeName); return NULL; } - ASSERT(dev != NULL); + ASSERT2(dev != NULL, "No device in reserve_volume!"); Dmsg2(dbglvl, "enter reserve_volume=%s drive=%s\n", VolumeName, dcr->dev->print_name()); + /* If acquiring to write, don't accept a Volume in read list */ + if (dcr->is_writing() && is_read_volume(dcr->jcr, VolumeName)) { + Mmsg1(jcr->errmsg, _("Could not reserve volume \"%s\" for append, because it will be read.\n"), + dev->VolHdr.VolumeName); + return NULL; + } + /* * We lock the reservations system here to ensure * when adding a new volume that no newly scheduled @@ -382,13 +404,16 @@ VOLRES *reserve_volume(DCR *dcr, const char *VolumeName) * is not being used and is marked as not reserved. */ if (strcmp(vol->vol_name, VolumeName) == 0) { - Dmsg2(dbglvl, "=== set reserved vol=%s dev=%s\n", VolumeName, + Dmsg2(dbglvl, "set reserved vol=%s dev=%s\n", VolumeName, vol->dev->print_name()); goto get_out; /* Volume already on this device */ } else { /* Don't release a volume if it was reserved by someone other than us */ - if (vol->is_in_use() && !dcr->reserved_volume) { - Dmsg1(dbglvl, "Cannot free vol=%s. It is reserved.\n", vol->vol_name); + if (vol->is_in_use() && !dcr->reserved_volume) { + Dmsg2(dbglvl, "Set wait(). Cannot free vol=%s for %s. It is reserved.\n", vol->vol_name, VolumeName); + Mmsg1(dcr->jcr->errmsg, _("Cannot free Volume \"%s\", because it is reserved by someone else.\n"), + vol->vol_name); + dev->set_wait(); vol = NULL; /* vol in use */ goto get_out; } @@ -407,21 +432,40 @@ VOLRES *reserve_volume(DCR *dcr, const char *VolumeName) nvol = new_vol_item(dcr, VolumeName); /* - * Now try to insert the new Volume + * Handle request for read volume for file + * device, for which we assume we can open multiple + * devices to read the Volume. + * + * Note: when doing multiple simultaneous reads + * of the same volume, the volume names are not + * inserted into the write volume list. + */ + if (dcr->is_reading() && dev->is_file()) { + nvol->set_jobid(dcr->jcr->JobId); + nvol->set_reading(); + vol = nvol; + dev->vol = vol; + goto get_out; + } else { + vol = (VOLRES *)vol_list->binary_insert(nvol, name_compare); + } + + /* + * This part handles any write volumes or read volumes that + * cannot be simultaneously on multiple devices. */ - vol = (VOLRES *)vol_list->binary_insert(nvol, my_compare); if (vol != nvol) { - Dmsg2(dbglvl, "Found vol=%s dev-same=%d\n", vol->vol_name, dev==vol->dev); /* * At this point, a Volume with this name already is in the list, * so we simply release our new Volume entry. Note, this should * only happen if we are moving the volume from one drive to another. */ - Dmsg2(dbglvl, "reserve_vol free-tmp vol=%s at %p\n", + Dmsg2(dbglvl, "Found vol=%s dev-same=%d\n", vol->vol_name, dev==vol->dev); + Dmsg2(dbglvl, "reserve_vol free-tmp vol=%s at %p\n", vol->vol_name, vol->vol_name); /* - * Clear dev pointer so that free_vol_item() doesn't - * take away our volume. + * Clear dev pointer so that free_vol_item() doesn't + * take away our volume. */ nvol->dev = NULL; /* don't zap dev entry */ free_vol_item(nvol); @@ -439,7 +483,7 @@ VOLRES *reserve_volume(DCR *dcr, const char *VolumeName) /* Caller wants to switch Volume to another device */ if (!vol->dev->is_busy() && !vol->is_swapping()) { int32_t slot; - Dmsg3(dbglvl, "==== Swap vol=%s from dev=%s to %s\n", + Dmsg3(dbglvl, "==== Swap vol=%s from dev=%s to %s\n", VolumeName, vol->dev->print_name(), dev->print_name()); free_volume(dev); /* free any volume attached to our drive */ Dmsg1(50, "set_unload dev=%s\n", dev->print_name()); @@ -456,18 +500,26 @@ VOLRES *reserve_volume(DCR *dcr, const char *VolumeName) vol->dev = dev; /* point the Volume at our drive */ dev->vol = vol; /* point our drive at the Volume */ } else { - Jmsg7(dcr->jcr, M_WARNING, 0, "Need volume from other drive, " - "but swap not possible. Status: read=%d num_writers=%d " - "num_reserve=%d swap=%d vol=%s from dev=%s to %s\n", - vol->dev->can_read(), vol->dev->num_writers, - vol->dev->num_reserved(), vol->is_swapping(), - VolumeName, vol->dev->print_name(), dev->print_name()); - if (vol->is_swapping() && dev->swap_dev) { - Dmsg3(dbglvl, "Swap failed vol=%s from=%s to dev=%s\n", - vol->vol_name, dev->swap_dev->print_name(), dev->print_name()); + if (dev) { + Jmsg8(jcr, M_WARNING, 0, "Need volume for %s from other drive, " + "but swap not possible. Status: reader=%d writers=%d " + "reserves=%d swap=%d vol=%s from dev=%s to %s\n", + dcr->is_writing()?"write":"read", + vol->dev->can_read(), vol->dev->num_writers, + vol->dev->num_reserved(), vol->is_swapping(), + VolumeName, vol->dev->print_name(), dev->print_name()); + } + if (vol->is_swapping()) { + if (vol->dev && vol->dev->swap_dev && dev && dev->swap_dev) { + Mmsg3(jcr->errmsg, _("Volume %s is busy swapping from %s to %s\n"), + vol->vol_name, dev->print_name(), dev->swap_dev->print_name()); + } else { + Mmsg1(jcr->errmsg, _("Volume %s is busy swapping.\n"), + vol->vol_name); + } } else { - Dmsg3(dbglvl, "Swap failed vol=%s from=%p to dev=%s\n", - vol->vol_name, dev->swap_dev, dev->print_name()); + Mmsg2(jcr->errmsg, _("%s device %s is busy.\n"), + vol->dev->print_type(), vol->dev->print_name()); } debug_list_volumes("failed swap"); vol = NULL; /* device busy */ @@ -482,7 +534,7 @@ VOLRES *reserve_volume(DCR *dcr, const char *VolumeName) get_out: if (vol) { - Dmsg2(dbglvl, "=== set in_use. vol=%s dev=%s\n", vol->vol_name, + Dmsg2(dbglvl, "set in_use. vol=%s dev=%s\n", vol->vol_name, vol->dev->print_name()); vol->set_in_use(); dcr->reserved_volume = true; @@ -537,10 +589,10 @@ VOLRES *vol_walk_next(VOLRES *prev_vol) Dmsg2(dbglvl, "Inc walk_next use_count=%d volname=%s\n", vol->use_count(), vol->vol_name); } - unlock_volumes(); if (prev_vol) { free_vol_item(prev_vol); } + unlock_volumes(); return vol; } @@ -550,9 +602,11 @@ VOLRES *vol_walk_next(VOLRES *prev_vol) void vol_walk_end(VOLRES *vol) { if (vol) { + lock_volumes(); Dmsg2(dbglvl, "Free walk_end use_count=%d volname=%s\n", vol->use_count(), vol->vol_name); free_vol_item(vol); + unlock_volumes(); } } @@ -562,7 +616,7 @@ void vol_walk_end(VOLRES *vol) * Returns: VOLRES entry on success * NULL if the Volume is not in the list */ -VOLRES *find_volume(const char *VolumeName) +static VOLRES *find_volume(const char *VolumeName) { VOLRES vol, *fvol; @@ -572,7 +626,7 @@ VOLRES *find_volume(const char *VolumeName) /* Do not lock reservations here */ lock_volumes(); vol.vol_name = bstrdup(VolumeName); - fvol = (VOLRES *)vol_list->binary_search(&vol, my_compare); + fvol = (VOLRES *)vol_list->binary_search(&vol, name_compare); free(vol.vol_name); Dmsg2(dbglvl, "find_vol=%s found=%d\n", VolumeName, fvol!=NULL); debug_list_volumes("find_volume"); @@ -586,7 +640,7 @@ VOLRES *find_volume(const char *VolumeName) * Returns: VOLRES entry on success * NULL if the Volume is not in the list */ -static VOLRES *find_read_volume(const char *VolumeName) +static VOLRES *find_read_volume(const char *VolumeName) { VOLRES vol, *fvol; @@ -597,8 +651,8 @@ static VOLRES *find_read_volume(const char *VolumeName) /* Do not lock reservations here */ lock_read_volumes(); vol.vol_name = bstrdup(VolumeName); - /* Note, we do want a simple my_compare on volume name only here */ - fvol = (VOLRES *)read_vol_list->binary_search(&vol, my_compare); + /* Note, we do want a simple name_compare on volume name only here */ + fvol = (VOLRES *)read_vol_list->binary_search(&vol, name_compare); free(vol.vol_name); Dmsg2(dbglvl, "find_read_vol=%s found=%d\n", VolumeName, fvol!=NULL); unlock_read_volumes(); @@ -626,7 +680,7 @@ bool volume_unused(DCR *dcr) return false; } - Dmsg1(dbglvl, "=== clear in_use vol=%s\n", dev->vol->vol_name); + Dmsg1(dbglvl, "Clear in_use vol=%s\n", dev->vol->vol_name); dev->vol->clear_in_use(); if (dev->vol->is_swapping()) { @@ -641,7 +695,7 @@ bool volume_unused(DCR *dcr) * explicitly read in this drive. This allows the SD to remember * where the tapes are or last were. */ - Dmsg4(dbglvl, "=== set not reserved vol=%s num_writers=%d dev_reserved=%d dev=%s\n", + Dmsg4(dbglvl, "set not reserved vol=%s writers=%d reserves=%d dev=%s\n", dev->vol->vol_name, dev->num_writers, dev->num_reserved(), dev->print_name()); if (dev->is_tape() || dev->is_autochanger()) { return true; @@ -656,6 +710,8 @@ bool volume_unused(DCR *dcr) /* * Unconditionally release the volume entry + * Note: read volumes are not in the list, so + * do not attempt to remove them. */ bool free_volume(DEVICE *dev) { @@ -670,21 +726,22 @@ bool free_volume(DEVICE *dev) } /* Don't free a volume while it is being swapped */ if (!vol->is_swapping()) { - Dmsg1(dbglvl, "=== clear in_use vol=%s\n", vol->vol_name); + Dmsg1(dbglvl, "Clear in_use vol=%s\n", vol->vol_name); dev->vol = NULL; - vol_list->remove(vol); - Dmsg2(dbglvl, "=== remove volume %s dev=%s\n", vol->vol_name, dev->print_name()); + if (vol->is_writing()) { + vol_list->remove(vol); + } + Dmsg2(dbglvl, "Remove volume %s dev=%s\n", vol->vol_name, dev->print_name()); free_vol_item(vol); debug_list_volumes("free_volume"); } else { - Dmsg1(dbglvl, "=== cannot clear swapping vol=%s\n", vol->vol_name); + Dmsg1(dbglvl, "=== Cannot clear. Swapping vol=%s\n", vol->vol_name); } unlock_volumes(); -// pthread_cond_broadcast(&wait_next_vol); return true; } - + /* Create the Volume list */ void create_volume_lists() { @@ -746,8 +803,9 @@ void free_volume_lists() } } -/* - * Determine if caller can write on volume +/* + * Determine if caller can write on volume. + * If not, return reason in jcr->errmsg */ bool DCR::can_i_write_volume() { @@ -755,6 +813,7 @@ bool DCR::can_i_write_volume() vol = find_read_volume(VolumeName); if (vol) { + Mmsg(jcr->errmsg, "Found in read list; cannot write vol=%s\n", VolumeName); Dmsg1(100, "Found in read list; cannot write vol=%s\n", VolumeName); return false; } @@ -762,7 +821,8 @@ bool DCR::can_i_write_volume() } /* - * Determine if caller can read or write volume + * Determine if caller can read or write volume. + * If not, return reason in jcr->errmsg */ bool DCR::can_i_use_volume() { @@ -770,6 +830,7 @@ bool DCR::can_i_use_volume() VOLRES *vol; if (job_canceled(jcr)) { + Mmsg(jcr->errmsg, "Job is canceled\n"); return false; } lock_volumes(); @@ -778,7 +839,7 @@ bool DCR::can_i_use_volume() Dmsg1(dbglvl, "Vol=%s not in use.\n", VolumeName); goto get_out; /* vol not in list */ } - ASSERT(vol->dev != NULL); + ASSERT2(vol->dev != NULL, "No device in can_i_use_volume!"); if (dev == vol->dev) { /* same device OK */ Dmsg1(dbglvl, "Vol=%s on same dev.\n", VolumeName); @@ -794,7 +855,8 @@ bool DCR::can_i_use_volume() } else { Dmsg2(dbglvl, "Vol=%s dev=%s busy.\n", VolumeName, vol->dev->print_name()); } - Dmsg2(dbglvl, "Vol=%s in use by %s.\n", VolumeName, vol->dev->print_name()); + Mmsg(jcr->errmsg, "Volume=%s in use on another device %s.\n", VolumeName, vol->dev->print_name()); + Dmsg2(dbglvl, "Volume=%s in use on another device %s.\n", VolumeName, vol->dev->print_name()); rtn = false; get_out: @@ -827,7 +889,7 @@ dlist *dup_vol_list(JCR *jcr) memset(tvol, 0, sizeof(VOLRES)); tvol->vol_name = bstrdup(vol->vol_name); tvol->dev = vol->dev; - nvol = (VOLRES *)temp_vol_list->binary_insert(tvol, my_compare); + nvol = (VOLRES *)temp_vol_list->binary_insert(tvol, name_compare); if (tvol != nvol) { tvol->dev = NULL; /* don't zap dev entry */ free_vol_item(tvol); diff --git a/bacula/src/stored/vol_mgr.h b/bacula/src/stored/vol_mgr.h index 44659ede4f..a065f3fb6c 100644 --- a/bacula/src/stored/vol_mgr.h +++ b/bacula/src/stored/vol_mgr.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2013 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Pulled out of dev.h @@ -55,7 +43,7 @@ void vol_walk_end(VOLRES *vol); /* * Volume reservation class -- see vol_mgr.c and reserve.c */ -class VOLRES { +class VOLRES { bool m_swapping; /* set when swapping to another drive */ bool m_in_use; /* set when volume reserved or in use */ bool m_reading; /* set when reading */ @@ -70,8 +58,8 @@ public: void init_mutex() { pthread_mutex_init(&m_mutex, NULL); }; void destroy_mutex() { pthread_mutex_destroy(&m_mutex); }; - void Lock() { P(m_mutex); }; - void Unlock() { V(m_mutex); }; + void vLock() { P(m_mutex); }; + void vUnlock() { V(m_mutex); }; void inc_use_count(void) {P(m_mutex); m_use_count++; V(m_mutex); }; void dec_use_count(void) {P(m_mutex); m_use_count--; V(m_mutex); }; int32_t use_count() const { return m_use_count; }; diff --git a/bacula/src/stored/vtape.c b/bacula/src/stored/vtape.c deleted file mode 100644 index c7c9f9b3bb..0000000000 --- a/bacula/src/stored/vtape.c +++ /dev/null @@ -1,930 +0,0 @@ -/* - Bacula® - The Network Backup Solution - - Copyright (C) 2008-2010 Free Software Foundation Europe e.V. - - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation, which is - listed in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. - - Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. -*/ - -/* - -Device { - Name = Drive-1 # - Maximum File Size = 800M - Maximum Volume Size = 3G - Device Type = TAPE - Archive Device = /tmp/fake - Media Type = DLT-8000 - AutomaticMount = yes; # when device opened, read it - AlwaysOpen = yes; - RemovableMedia = yes; - RandomAccess = no; -} - - Block description : - - block { - int32 size; - void *data; - } - - EOF description : - - EOF { - int32 size=0; - } - - - */ - -#include "bacula.h" /* define 64bit file usage */ -#include "stored.h" - -#include "vtape.h" - - -#ifdef USE_VTAPE - -static int dbglevel = 100; -#define FILE_OFFSET 30 - -void vtape_debug(int level) -{ - dbglevel = level; -} - -int vtape::d_ioctl(int fd, ioctl_req_t request, char *op) -{ - int result = 0; - - if (request == MTIOCTOP) { - result = tape_op((mtop *)op); - } else if (request == MTIOCGET) { - result = tape_get((mtget *)op); - } else if (request == MTIOCPOS) { - result = tape_pos((mtpos *)op); - } else { - errno = ENOTTY; - result = -1; - } - - return result; -} - -int vtape::tape_op(struct mtop *mt_com) -{ - int result=0; - int count = mt_com->mt_count; - - if (!online) { - errno = ENOMEDIUM; - return -1; - } - - switch (mt_com->mt_op) - { - case MTRESET: - case MTNOP: - case MTSETDRVBUFFER: - break; - - default: - case MTRAS1: - case MTRAS2: - case MTRAS3: - case MTSETDENSITY: - errno = ENOTTY; - result = -1; - break; - - case MTFSF: /* Forward space over mt_count filemarks. */ - do { - result = fsf(); - } while (--count > 0 && result == 0); - break; - - case MTBSF: /* Backward space over mt_count filemarks. */ - do { - result = bsf(); - } while (--count > 0 && result == 0); - break; - - case MTFSR: /* Forward space over mt_count records (tape blocks). */ -/* - file number = 1 - block number = 0 - - file number = 1 - block number = 1 - - mt: /dev/lto2: Erreur d'entree/sortie - - file number = 2 - block number = 0 -*/ - /* tester si on se trouve a la fin du fichier */ - result = fsr(mt_com->mt_count); - break; - - case MTBSR: /* Backward space over mt_count records (tape blocks). */ - result = bsr(mt_com->mt_count); - break; - - case MTWEOF: /* Write mt_count filemarks. */ - do { - result = weof(); - } while (result == 0 && --count > 0); - break; - - case MTREW: /* Rewind. */ - Dmsg0(dbglevel, "rewind vtape\n"); - check_eof(); - atEOF = atEOD = false; - atBOT = true; - current_file = 0; - current_block = 0; - lseek(fd, 0, SEEK_SET); - result = !read_fm(VT_READ_EOF); - break; - - case MTOFFL: /* put tape offline */ - result = offline(); - break; - - case MTRETEN: /* Re-tension tape. */ - result = 0; - break; - - case MTBSFM: /* not used by bacula */ - errno = EIO; - result = -1; - break; - - case MTFSFM: /* not used by bacula */ - errno = EIO; - result = -1; - break; - - case MTEOM:/* Go to the end of the recorded media (for appending files). */ - while (next_FM) { - lseek(fd, next_FM, SEEK_SET); - if (read_fm(VT_READ_EOF)) { - current_file++; - } - } - boffset_t l; - while (::read(fd, &l, sizeof(l)) > 0) { - if (l) { - lseek(fd, l, SEEK_CUR); - } else { - ASSERT(0); - } - Dmsg0(dbglevel, "skip 1 block\n"); - } - current_block = -1; - atEOF = false; - atEOD = true; - -/* - file number = 3 - block number = -1 -*/ - /* Can be at EOM */ - break; - - case MTERASE: /* not used by bacula */ - atEOD = true; - atEOF = false; - atEOT = false; - - current_file = 0; - current_block = -1; - lseek(fd, 0, SEEK_SET); - read_fm(VT_READ_EOF); - truncate_file(); - break; - - case MTSETBLK: - break; - - case MTSEEK: - break; - - case MTTELL: - break; - - case MTFSS: - break; - - case MTBSS: - break; - - case MTWSM: - break; - - case MTLOCK: - break; - - case MTUNLOCK: - break; - - case MTLOAD: - break; - - case MTUNLOAD: - break; - - case MTCOMPRESSION: - break; - - case MTSETPART: - break; - - case MTMKPART: - break; - } - - return result == 0 ? 0 : -1; -} - -int vtape::tape_get(struct mtget *mt_get) -{ - int density = 1; - int block_size = 1024; - - mt_get->mt_type = MT_ISSCSI2; - mt_get->mt_blkno = current_block; - mt_get->mt_fileno = current_file; - - mt_get->mt_resid = -1; -// pos_info.PartitionBlockValid ? pos_info.Partition : (ULONG)-1; - - /* TODO */ - mt_get->mt_dsreg = - ((density << MT_ST_DENSITY_SHIFT) & MT_ST_DENSITY_MASK) | - ((block_size << MT_ST_BLKSIZE_SHIFT) & MT_ST_BLKSIZE_MASK); - - - mt_get->mt_gstat = 0x00010000; /* Immediate report mode.*/ - - if (atEOF) { - mt_get->mt_gstat |= 0x80000000; // GMT_EOF - } - - if (atBOT) { - mt_get->mt_gstat |= 0x40000000; // GMT_BOT - } - if (atEOT) { - mt_get->mt_gstat |= 0x20000000; // GMT_EOT - } - - if (atEOD) { - mt_get->mt_gstat |= 0x08000000; // GMT_EOD - } - - if (0) { //WriteProtected) { - mt_get->mt_gstat |= 0x04000000; // GMT_WR_PROT - } - - if (online) { - mt_get->mt_gstat |= 0x01000000; // GMT_ONLINE - } else { - mt_get->mt_gstat |= 0x00040000; // GMT_DR_OPEN - } - mt_get->mt_erreg = 0; - - return 0; -} - -int vtape::tape_pos(struct mtpos *mt_pos) -{ - if (current_block >= 0) { - mt_pos->mt_blkno = current_block; - return 0; - } - - return -1; -} - -/* - * This function try to emulate the append only behavior - * of a tape. When you wrote something, data after the - * current position are discarded. - */ -int vtape::truncate_file() -{ - Dmsg2(dbglevel, "truncate %i:%i\n", current_file, current_block); - ftruncate(fd, lseek(fd, 0, SEEK_CUR)); - last_file = current_file; - atEOD=true; - update_pos(); - return 0; -} - -vtape::~vtape() -{ -} - -vtape::vtape() -{ - fd = -1; - - atEOF = false; - atBOT = false; - atEOT = false; - atEOD = false; - online = false; - needEOF = false; - - file_block = 0; - last_file = 0; - current_file = 0; - current_block = -1; - - max_block = VTAPE_MAX_BLOCK; -} - -int vtape::get_fd() -{ - return this->fd; -} - -/* - * Write a variable block of count size. - * block = vtape_header + data - * vtape_header = sizeof(data) - * if vtape_header == 0, this is a EOF - */ -ssize_t vtape::d_write(int, const void *buffer, size_t count) -{ - ASSERT(online); - ASSERT(current_file >= 0); - ASSERT(count > 0); - ASSERT(buffer); - - ssize_t nb; - Dmsg3(dbglevel*2, "write len=%i %i:%i\n", - count, current_file,current_block); - - if (atEOT) { - Dmsg0(dbglevel, "write nothing, EOT !\n"); - errno = ENOSPC; - return -1; - } - - if (!atEOD) { /* if not at the end of the data */ - truncate_file(); - } - - if (current_block != -1) { - current_block++; - } - - atBOT = false; - atEOF = false; - atEOD = true; /* End of data */ - - needEOF = true; /* next operation need EOF mark */ - - uint32_t size = count; - ::write(fd, &size, sizeof(uint32_t)); - nb = ::write(fd, buffer, count); - - if (nb != (ssize_t)count) { - atEOT = true; - Dmsg2(dbglevel, - "Not enough space writing only %i of %i requested\n", - nb, count); - } - - update_pos(); - - return nb; -} - -/* - * +---+---------+---+------------------+---+-------------------+ - * |00N| DATA |0LN| DATA |0LC| DATA | - * +---+---------+---+------------------+---+-------------------+ - * - * 0 : zero - * L : Last FileMark offset - * N : Next FileMark offset - * C : Current FileMark Offset - */ -int vtape::weof() -{ - ASSERT(online); - ASSERT(current_file >= 0); - - if (atEOT) { - errno = ENOSPC; - current_block = -1; - return -1; - } - - if (!atEOD) { - truncate_file(); /* nothing after this point */ - } - - last_FM = cur_FM; - cur_FM = lseek(fd, 0, SEEK_CUR); // current position - - /* update previous next_FM */ - lseek(fd, last_FM + sizeof(uint32_t)+sizeof(boffset_t), SEEK_SET); - ::write(fd, &cur_FM, sizeof(boffset_t)); - lseek(fd, cur_FM, SEEK_SET); - - next_FM = 0; - - uint32_t c=0; - ::write(fd, &c, sizeof(uint32_t)); // EOF - ::write(fd, &last_FM, sizeof(last_FM)); // F-1 - ::write(fd, &next_FM, sizeof(next_FM)); // F (will be updated next time) - - current_file++; - current_block = 0; - - needEOF = false; - atEOD = false; - atBOT = false; - atEOF = true; - - last_file = MAX(current_file, last_file); - - Dmsg4(dbglevel, "Writing EOF %i:%i last=%lli cur=%lli next=0\n", - current_file, current_block, last_FM, cur_FM); - - return 0; -} - -/* - * Go to next FM - */ -int vtape::fsf() -{ - ASSERT(online); - ASSERT(current_file >= 0); - ASSERT(fd >= 0); -/* - * 1 0 -> fsf -> 2 0 -> fsf -> 2 -1 - */ - - int ret=0; - if (atEOT || atEOD) { - errno = EIO; - current_block = -1; - return -1; - } - - atBOT = false; - Dmsg2(dbglevel+1, "fsf %i <= %i\n", current_file, last_file); - - if (next_FM > cur_FM) { /* not the last file */ - lseek(fd, next_FM, SEEK_SET); - read_fm(VT_READ_EOF); - current_file++; - atEOF = true; - ret = 0; - - } else if (atEOF) { /* last file mark */ - current_block=-1; - errno = EIO; - atEOF = false; - atEOD = true; - - } else { /* last file, but no at the end */ - fsr(100000); - - Dmsg0(dbglevel, "Try to FSF after EOT\n"); - errno = EIO; - current_file = last_file ; - current_block = -1; - atEOD=true; - ret = -1; - } - return ret; -} - -/* /------------\ /---------------\ - * +---+------+---+---------------+-+ - * |OLN| |0LN| | | - * +---+------+---+---------------+-+ - */ - -bool vtape::read_fm(VT_READ_FM_MODE read_all) -{ - int ret; - uint32_t c = 0; - if (read_all == VT_READ_EOF) { - ::read(fd, &c, sizeof(c)); - if (c != 0) { - lseek(fd, cur_FM, SEEK_SET); - return false; - } - } - - cur_FM = lseek(fd, 0, SEEK_CUR) - sizeof(c); - - ::read(fd, &last_FM, sizeof(last_FM)); - ret = ::read(fd, &next_FM, sizeof(next_FM)); - - current_block=0; - - Dmsg3(dbglevel, "Read FM cur=%lli last=%lli next=%lli\n", - cur_FM, last_FM, next_FM); - - return (ret == sizeof(next_FM)); -} - -/* - * TODO: Check fsr with EOF - */ -int vtape::fsr(int count) -{ - ASSERT(online); - ASSERT(current_file >= 0); - ASSERT(fd >= 0); - - int i,nb, ret=0; -// boffset_t where=0; - uint32_t s; - Dmsg4(dbglevel, "fsr %i:%i EOF=%i c=%i\n", - current_file,current_block,atEOF,count); - - check_eof(); - - if (atEOT) { - errno = EIO; - current_block = -1; - return -1; - } - - if (atEOD) { - errno = EIO; - return -1; - } - - atBOT = atEOF = false; - - /* check all block record */ - for(i=0; (i < count) && !atEOF ; i++) { - nb = ::read(fd, &s, sizeof(uint32_t)); /* get size of next block */ - if (nb == sizeof(uint32_t) && s) { - current_block++; - lseek(fd, s, SEEK_CUR); /* seek after this block */ - } else { - Dmsg4(dbglevel, "read EOF %i:%i nb=%i s=%i\n", - current_file, current_block, nb,s); - errno = EIO; - ret = -1; - if (next_FM) { - current_file++; - read_fm(VT_SKIP_EOF); - } - atEOF = true; /* stop the loop */ - } - } - - return ret; -} - -/* - * BSR + EOF => begin of EOF + EIO - * BSR + BSR + EOF => last block - * current_block = -1 - */ -int vtape::bsr(int count) -{ - ASSERT(online); - ASSERT(current_file >= 0); - ASSERT(count == 1); - ASSERT(fd >= 0); - - check_eof(); - - if (!count) { - return 0; - } - - int ret=0; - int last_f=0; - int last_b=0; - - boffset_t last=-1, last2=-1; - boffset_t orig = lseek(fd, 0, SEEK_CUR); - int orig_f = current_file; - int orig_b = current_block; - - Dmsg4(dbglevel, "bsr(%i) cur_blk=%i orig=%lli cur_FM=%lli\n", - count, current_block, orig, cur_FM); - - /* begin of tape, do nothing */ - if (atBOT) { - errno = EIO; - return -1; - } - - /* at EOF 0:-1 BOT=0 EOD=0 EOF=0 ERR: Input/output error */ - if (atEOF) { - lseek(fd, cur_FM, SEEK_SET); - atEOF = false; - if (current_file > 0) { - current_file--; - } - current_block=-1; - errno = EIO; - return -1; - } - - /* - * First, go to cur/last_FM and read all blocks to find the good one - */ - if (cur_FM == orig) { /* already just before EOF */ - lseek(fd, last_FM, SEEK_SET); - - } else { - lseek(fd, cur_FM, SEEK_SET); - } - - ret = read_fm(VT_READ_EOF); - - do { - if (!atEOF) { - last2 = last; /* keep track of the 2 last blocs position */ - last = lseek(fd, 0, SEEK_CUR); - last_f = current_file; - last_b = current_block; - Dmsg6(dbglevel, "EOF=%i last2=%lli last=%lli < orig=%lli %i:%i\n", - atEOF, last2, last, orig, current_file, current_block); - } - ret = fsr(1); - } while ((lseek(fd, 0, SEEK_CUR) < orig) && (ret == 0)); - - if (last2 > 0 && atEOF) { /* we take the previous position */ - lseek(fd, last2, SEEK_SET); - current_file = last_f; - current_block = last_b - 1; - Dmsg3(dbglevel, "1 set offset2=%lli %i:%i\n", - last, current_file, current_block); - - } else if (last > 0) { - lseek(fd, last, SEEK_SET); - current_file = last_f; - current_block = last_b; - Dmsg3(dbglevel, "2 set offset=%lli %i:%i\n", - last, current_file, current_block); - } else { - lseek(fd, orig, SEEK_SET); - current_file = orig_f; - current_block = orig_b; - return -1; - } - - Dmsg2(dbglevel, "bsr %i:%i\n", current_file, current_block); - errno=0; - atEOT = atEOF = atEOD = false; - atBOT = (lseek(fd, 0, SEEK_CUR) - (sizeof(uint32_t)+2*sizeof(boffset_t))) == 0; - - if (orig_b == -1) { - current_block = orig_b; - } - - return 0; -} - -boffset_t vtape::lseek(int fd, off_t offset, int whence) -{ - return ::lseek(fd, offset, whence); -} - -/* BSF => just before last EOF - * EOF + BSF => just before EOF - * file 0 + BSF => BOT + errno - */ -int vtape::bsf() -{ - ASSERT(online); - ASSERT(current_file >= 0); - Dmsg2(dbglevel, "bsf %i:%i count=%i\n", current_file, current_block); - int ret = 0; - - check_eof(); - - atBOT = atEOF = atEOT = atEOD = false; - - if (current_file == 0) {/* BOT + errno */ - lseek(fd, 0, SEEK_SET); - read_fm(VT_READ_EOF); - current_file = 0; - current_block = 0; - atBOT = true; - errno = EIO; - ret = -1; - } else { - Dmsg1(dbglevel, "bsf last=%lli\n", last_FM); - lseek(fd, cur_FM, SEEK_SET); - current_file--; - current_block=-1; - } - return ret; -} - -/* - * Put vtape in offline mode - */ -int vtape::offline() -{ - close(); - - atEOF = false; /* End of file */ - atEOT = false; /* End of tape */ - atEOD = false; /* End of data */ - atBOT = false; /* Begin of tape */ - online = false; - - file_block = 0; - current_file = -1; - current_block = -1; - last_file = -1; - return 0; -} - -/* A filemark is automatically written to tape if the last tape operation - * before close was a write. - */ -int vtape::d_close(int) -{ - check_eof(); - ::close(fd); - fd = -1; - return 0; -} - -/* - * When a filemark is encountered while reading, the following happens. If - * there are data remaining in the buffer when the filemark is found, the - * buffered data is returned. The next read returns zero bytes. The following - * read returns data from the next file. The end of recorded data is signaled - * by returning zero bytes for two consecutive read calls. The third read - * returns an error. - */ -ssize_t vtape::d_read(int, void *buffer, size_t count) -{ - ASSERT(online); - ASSERT(current_file >= 0); - ssize_t nb; - uint32_t s; - - Dmsg2(dbglevel*2, "read %i:%i\n", current_file, current_block); - - if (atEOT || atEOD) { - errno = EIO; - return -1; - } - - if (atEOF) { - if (!next_FM) { - atEOD = true; - atEOF = false; - current_block=-1; - return 0; - } - atEOF=false; - } - - check_eof(); - - atEOD = atBOT = false; - - /* reading size of data */ - nb = ::read(fd, &s, sizeof(uint32_t)); - if (nb <= 0) { - atEOF = true; /* TODO: check this */ - return 0; - } - - if (s > count) { /* not enough buffer to read block */ - Dmsg2(dbglevel, "Need more buffer to read next block %i > %i\n",s,count); - lseek(fd, s, SEEK_CUR); - errno = ENOMEM; - return -1; - } - - if (!s) { /* EOF */ - atEOF = true; - if (read_fm(VT_SKIP_EOF)) { - current_file++; - } - - return 0; - } - - /* reading data itself */ - nb = ::read(fd, buffer, s); - if (nb != (ssize_t)s) { /* read error */ - errno=EIO; - atEOT=true; - current_block = -1; - Dmsg0(dbglevel, "EOT during reading\n"); - return -1; - } /* read ok */ - - if (current_block >= 0) { - current_block++; - } - - return nb; -} - -int vtape::d_open(const char *pathname, int uflags) -{ - Dmsg2(dbglevel, "vtape::d_open(%s, %i)\n", pathname, uflags); - - online = true; /* assume that drive contains a tape */ - - struct stat statp; - if (stat(pathname, &statp) != 0) { - fd = -1; - Dmsg1(dbglevel, "Can't stat on %s\n", pathname); - if (uflags & O_NONBLOCK) { - online = false; - fd = ::open("/dev/null", O_CREAT | O_RDWR | O_LARGEFILE, 0600); - } - } else { - fd = ::open(pathname, O_CREAT | O_RDWR | O_LARGEFILE, 0600); - } - - if (fd < 0) { - errno = ENOMEDIUM; - return -1; - } - - file_block = 0; - current_block = 0; - current_file = 0; - cur_FM = next_FM = last_FM = 0; - needEOF = false; - atBOT = true; - atEOT = atEOD = false; - - /* If the vtape is empty, start by writing a EOF */ - if (online && !read_fm(VT_READ_EOF)) { - lseek(fd, 0, SEEK_SET); /* rewind */ - cur_FM = next_FM = last_FM = 0; /* reset */ - weof(); /* write the first EOF */ - last_file = current_file=0; - } - - return fd; -} - -/* use this to track file usage */ -void vtape::update_pos() -{ - ASSERT(online); - struct stat statp; - if (fstat(fd, &statp) == 0) { - file_block = statp.st_blocks; - } - - Dmsg1(dbglevel*2, "update_pos=%i\n", file_block); - - if (file_block > max_block) { - atEOT = true; - } else { - atEOT = false; - } -} - -void vtape::dump() -{ - Dmsg0(dbglevel+1, "===================\n"); - Dmsg2(dbglevel, "file:block = %i:%i\n", current_file, current_block); - Dmsg1(dbglevel+1, "last_file=%i\n", last_file); - Dmsg1(dbglevel+1, "file_block=%i\n", file_block); - Dmsg4(dbglevel+1, "EOF=%i EOT=%i EOD=%i BOT=%i\n", - atEOF, atEOT, atEOD, atBOT); -} - -#endif /* ! USE_VTAPE */ diff --git a/bacula/src/stored/vtape.h b/bacula/src/stored/vtape.h deleted file mode 100644 index 057ecdaf9d..0000000000 --- a/bacula/src/stored/vtape.h +++ /dev/null @@ -1,125 +0,0 @@ -/* - Bacula® - The Network Backup Solution - - Copyright (C) 2008-2010 Free Software Foundation Europe e.V. - - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation, which is - listed in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. - - Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. -*/ -/* - * vtape.h - Emulate the Linux st (scsi tape) driver on file. - * for regression and bug hunting purpose - * - */ - -#ifndef VTAPE_H -#define VTAPE_H - -#include -#include -#include "bacula.h" - -void vtape_debug(int level); - -#ifdef USE_VTAPE - -#define FTAPE_MAX_DRIVE 50 - -#define VTAPE_MAX_BLOCK 20*1024*2048; /* 20GB */ - -typedef enum { - VT_READ_EOF, /* Need to read the entire EOF struct */ - VT_SKIP_EOF /* Have already read the EOF byte */ -} VT_READ_FM_MODE; - -class vtape: public DEVICE { -private: - int fd; /* Our file descriptor */ - - boffset_t file_block; /* size */ - boffset_t max_block; - - boffset_t last_FM; /* last file mark (last file) */ - boffset_t next_FM; /* next file mark (next file) */ - boffset_t cur_FM; /* current file mark */ - - bool atEOF; /* End of file */ - bool atEOT; /* End of media */ - bool atEOD; /* End of data */ - bool atBOT; /* Begin of tape */ - bool online; /* volume online */ - bool needEOF; /* check if last operation need eof */ - - int32_t last_file; /* last file of the volume */ - int32_t current_file; /* current position */ - int32_t current_block; /* current position */ - - void destroy(); - int offline(); - int truncate_file(); - void check_eof() { if(needEOF) weof();}; - void update_pos(); - bool read_fm(VT_READ_FM_MODE readfirst); - -public: - int fsf(); - int fsr(int count); - int weof(); - int bsf(); - int bsr(int count); - - vtape(); - ~vtape(); - int get_fd(); - void dump(); - - /* interface from DEVICE */ - int d_close(int); - int d_open(const char *pathname, int flags); - int d_ioctl(int fd, ioctl_req_t request, char *mt=NULL); - ssize_t d_read(int, void *buffer, size_t count); - ssize_t d_write(int, const void *buffer, size_t count); - - boffset_t lseek(DCR *dcr, off_t offset, int whence) { return -1; } - boffset_t lseek(int fd, off_t offset, int whence); - - int tape_op(struct mtop *mt_com); - int tape_get(struct mtget *mt_com); - int tape_pos(struct mtpos *mt_com); -}; - - -#else /*!USE_VTAPE */ - -class vtape: public DEVICE { -public: - int d_open(const char *pathname, int flags) { return -1; } - ssize_t d_read(void *buffer, size_t count) { return -1; } - ssize_t d_write(const void *buffer, size_t count) { return -1; } - int d_close(int) { return -1; } - int d_ioctl(int fd, ioctl_req_t request, char *mt=NULL) { return -1; } - boffset_t lseek(DCR *dcr, off_t offset, int whence) { return -1; } -}; - -#endif /* USE_VTAPE */ - -#endif /* !VTAPE_H */ diff --git a/bacula/src/stored/vtape_dev.c b/bacula/src/stored/vtape_dev.c new file mode 100644 index 0000000000..d50cc2ba05 --- /dev/null +++ b/bacula/src/stored/vtape_dev.c @@ -0,0 +1,971 @@ +/* + Bacula® - The Network Backup Solution + + Copyright (C) 2008-2014 Free Software Foundation Europe e.V. + + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. + + Bacula® is a registered trademark of Kern Sibbald. +*/ + +/* + * Please note!!! The VTAPE device is for testing only. + * It simulates a tape drive, which is useful for testing + * without a real drive, but is inefficient for writing + * disk volumes. In addition, we do not test for every + * possible error condition, so please do not use this + * in production. + */ +/* + +Device { + Name = Drive-1 # + Maximum File Size = 800M + Maximum Volume Size = 3G + Device Type = TAPE + Archive Device = /tmp/fake + Media Type = DLT-8000 + AutomaticMount = yes; # when device opened, read it + AlwaysOpen = yes; + RemovableMedia = yes; + RandomAccess = no; +} + + Block description : + + block { + int32 size; + void *data; + } + + EOF description : + + EOF { + int32 size=0; + } + + + */ + +#include "bacula.h" /* define 64bit file usage */ +#include "stored.h" + +#ifdef USE_VTAPE +#include + +static int dbglevel = 100; +#define FILE_OFFSET 30 + +void vtape_debug(int level) +{ + dbglevel = level; +} + +/* DEVICE virtual that we redefine. */ +int vtape::d_ioctl(int fd, ioctl_req_t request, char *op) +{ + int result = 0; + + if (request == MTIOCTOP) { + result = tape_op((mtop *)op); + } else if (request == MTIOCGET) { + result = tape_get((mtget *)op); + } else if (request == MTIOCPOS) { + result = tape_pos((mtpos *)op); + } else { + errno = ENOTTY; + result = -1; + } + + return result; +} + +int vtape::tape_op(struct mtop *mt_com) +{ + int result=0; + int count = mt_com->mt_count; + + if (!online) { + errno = ENOMEDIUM; + return -1; + } + + switch (mt_com->mt_op) + { + case MTRESET: + case MTNOP: + case MTSETDRVBUFFER: + break; + + default: + case MTRAS1: + case MTRAS2: + case MTRAS3: + case MTSETDENSITY: + errno = ENOTTY; + result = -1; + break; + + case MTFSF: /* Forward space over mt_count filemarks. */ + do { + result = fsf(); + } while (--count > 0 && result == 0); + break; + + case MTBSF: /* Backward space over mt_count filemarks. */ + do { + result = bsf(); + } while (--count > 0 && result == 0); + break; + + case MTFSR: /* Forward space over mt_count records (tape blocks). */ +/* + file number = 1 + block number = 0 + + file number = 1 + block number = 1 + + mt: /dev/lto2: Erreur d'entree/sortie + + file number = 2 + block number = 0 +*/ + /* tester si on se trouve a la fin du fichier */ + result = fsr(mt_com->mt_count); + break; + + case MTBSR: /* Backward space over mt_count records (tape blocks). */ + result = bsr(mt_com->mt_count); + break; + + case MTWEOF: /* Write mt_count filemarks. */ + do { + result = weof(); + } while (result == 0 && --count > 0); + break; + + case MTREW: /* Rewind. */ + Dmsg0(dbglevel, "rewind vtape\n"); + check_eof(); + atEOF = atEOD = false; + atBOT = true; + current_file = 0; + current_block = 0; + lseek(fd, 0, SEEK_SET); + result = !read_fm(VT_READ_EOF); + break; + + case MTOFFL: /* put tape offline */ + result = offline() ? 0 : -1; + break; + + case MTRETEN: /* Re-tension tape. */ + result = 0; + break; + + case MTBSFM: /* not used by bacula */ + errno = EIO; + result = -1; + break; + + case MTFSFM: /* not used by bacula */ + errno = EIO; + result = -1; + break; + + case MTEOM:/* Go to the end of the recorded media (for appending files). */ + while (next_FM) { + lseek(fd, next_FM, SEEK_SET); + if (read_fm(VT_READ_EOF)) { + current_file++; + } + } + boffset_t l; + while (::read(fd, &l, sizeof(l)) > 0) { + if (l) { + lseek(fd, l, SEEK_CUR); + } else { + ASSERT(0); + } + Dmsg0(dbglevel, "skip 1 block\n"); + } + current_block = -1; + atEOF = false; + atEOD = true; + +/* + file number = 3 + block number = -1 +*/ + /* Can be at EOM */ + break; + + case MTERASE: /* not used by bacula */ + atEOD = true; + atEOF = false; + atEOT = false; + + current_file = 0; + current_block = -1; + lseek(fd, 0, SEEK_SET); + read_fm(VT_READ_EOF); + truncate_file(); + break; + + case MTSETBLK: + break; + + case MTSEEK: + break; + + case MTTELL: + break; + + case MTFSS: + break; + + case MTBSS: + break; + + case MTWSM: + break; + + case MTLOCK: + break; + + case MTUNLOCK: + break; + + case MTLOAD: + break; + + case MTUNLOAD: + break; + + case MTCOMPRESSION: + break; + + case MTSETPART: + break; + + case MTMKPART: + break; + } + + return result == 0 ? 0 : -1; +} + +int vtape::tape_get(struct mtget *mt_get) +{ + int density = 1; + int block_size = 1024; + + mt_get->mt_type = MT_ISSCSI2; + mt_get->mt_blkno = current_block; + mt_get->mt_fileno = current_file; + + mt_get->mt_resid = -1; +// pos_info.PartitionBlockValid ? pos_info.Partition : (ULONG)-1; + + /* TODO */ + mt_get->mt_dsreg = + ((density << MT_ST_DENSITY_SHIFT) & MT_ST_DENSITY_MASK) | + ((block_size << MT_ST_BLKSIZE_SHIFT) & MT_ST_BLKSIZE_MASK); + + + mt_get->mt_gstat = 0x00010000; /* Immediate report mode.*/ + + if (atEOF) { + mt_get->mt_gstat |= 0x80000000; // GMT_EOF + } + + if (atBOT) { + mt_get->mt_gstat |= 0x40000000; // GMT_BOT + } + if (atEOT) { + mt_get->mt_gstat |= 0x20000000; // GMT_EOT + } + + if (atEOD) { + mt_get->mt_gstat |= 0x08000000; // GMT_EOD + } + + if (0) { //WriteProtected) { + mt_get->mt_gstat |= 0x04000000; // GMT_WR_PROT + } + + if (online) { + mt_get->mt_gstat |= 0x01000000; // GMT_ONLINE + } else { + mt_get->mt_gstat |= 0x00040000; // GMT_DR_OPEN + } + mt_get->mt_erreg = 0; + + return 0; +} + +int vtape::tape_pos(struct mtpos *mt_pos) +{ + if (current_block >= 0) { + mt_pos->mt_blkno = current_block; + return 0; + } + + return -1; +} + +/* + * This function try to emulate the append only behavior + * of a tape. When you wrote something, data after the + * current position are discarded. + */ +int vtape::truncate_file() +{ + Dmsg2(dbglevel, "truncate %i:%i\n", current_file, current_block); + ftruncate(fd, lseek(fd, 0, SEEK_CUR)); + last_file = current_file; + atEOD=true; + update_pos(); + return 0; +} + +vtape::~vtape() +{ +} + +vtape::vtape() +{ + lockfd = fd = -1; + + atEOF = false; + atBOT = false; + atEOT = false; + atEOD = false; + online = false; + needEOF = false; + + file_block = 0; + last_file = 0; + current_file = 0; + current_block = -1; + + lockfile = NULL; + + max_block = VTAPE_MAX_BLOCK; +} + +int vtape::get_fd() +{ + return this->fd; +} + +/* + * DEVICE virtual that we redefine. + * + * Write a variable block of count size. + * block = vtape_header + data + * vtape_header = sizeof(data) + * if vtape_header == 0, this is a EOF + */ +ssize_t vtape::d_write(int, const void *buffer, size_t count) +{ + ASSERT(online); + ASSERT(current_file >= 0); + ASSERT(count > 0); + ASSERT(buffer); + + ssize_t nb; + Dmsg3(dbglevel*2, "write len=%i %i:%i\n", + count, current_file,current_block); + + if (atEOT) { + Dmsg0(dbglevel, "write nothing, EOT !\n"); + errno = ENOSPC; + return -1; + } + + if (!atEOD) { /* if not at the end of the data */ + truncate_file(); + } + + if (current_block != -1) { + current_block++; + } + + atBOT = false; + atEOF = false; + atEOD = true; /* End of data */ + + needEOF = true; /* next operation need EOF mark */ + + uint32_t size = count; + ::write(fd, &size, sizeof(uint32_t)); + nb = ::write(fd, buffer, count); + + if (nb != (ssize_t)count) { + atEOT = true; + Dmsg2(dbglevel, + "Not enough space writing only %i of %i requested\n", + nb, count); + } + + update_pos(); + + return nb; +} + +/* + * +---+---------+---+------------------+---+-------------------+ + * |00N| DATA |0LN| DATA |0LC| DATA | + * +---+---------+---+------------------+---+-------------------+ + * + * 0 : zero + * L : Last FileMark offset + * N : Next FileMark offset + * C : Current FileMark Offset + */ +int vtape::weof() +{ + ASSERT(online); + ASSERT(current_file >= 0); + + if (atEOT) { + errno = ENOSPC; + current_block = -1; + return -1; + } + + if (!atEOD) { + truncate_file(); /* nothing after this point */ + } + + last_FM = cur_FM; + cur_FM = lseek(fd, 0, SEEK_CUR); // current position + + /* update previous next_FM */ + lseek(fd, last_FM + sizeof(uint32_t)+sizeof(boffset_t), SEEK_SET); + ::write(fd, &cur_FM, sizeof(boffset_t)); + lseek(fd, cur_FM, SEEK_SET); + + next_FM = 0; + + uint32_t c=0; + ::write(fd, &c, sizeof(uint32_t)); // EOF + ::write(fd, &last_FM, sizeof(last_FM)); // F-1 + ::write(fd, &next_FM, sizeof(next_FM)); // F (will be updated next time) + + current_file++; + current_block = 0; + + needEOF = false; + atEOD = false; + atBOT = false; + atEOF = true; + + last_file = MAX(current_file, last_file); + + Dmsg4(dbglevel, "Writing EOF %i:%i last=%lli cur=%lli next=0\n", + current_file, current_block, last_FM, cur_FM); + + return 0; +} + +/* + * Go to next FM + */ +int vtape::fsf() +{ + ASSERT(online); + ASSERT(current_file >= 0); + ASSERT(fd >= 0); +/* + * 1 0 -> fsf -> 2 0 -> fsf -> 2 -1 + */ + + int ret=0; + if (atEOT || atEOD) { + errno = EIO; + current_block = -1; + return -1; + } + + atBOT = false; + Dmsg2(dbglevel+1, "fsf %i <= %i\n", current_file, last_file); + + if (next_FM > cur_FM) { /* not the last file */ + lseek(fd, next_FM, SEEK_SET); + read_fm(VT_READ_EOF); + current_file++; + atEOF = true; + ret = 0; + + } else if (atEOF) { /* last file mark */ + current_block=-1; + errno = EIO; + atEOF = false; + atEOD = true; + + } else { /* last file, but no at the end */ + fsr(100000); + + Dmsg0(dbglevel, "Try to FSF after EOT\n"); + errno = EIO; + current_file = last_file ; + current_block = -1; + atEOD=true; + ret = -1; + } + return ret; +} + +/* /------------\ /---------------\ + * +---+------+---+---------------+-+ + * |OLN| |0LN| | | + * +---+------+---+---------------+-+ + */ + +bool vtape::read_fm(VT_READ_FM_MODE read_all) +{ + int ret; + uint32_t c = 0; + if (read_all == VT_READ_EOF) { + ::read(fd, &c, sizeof(c)); + if (c != 0) { + lseek(fd, cur_FM, SEEK_SET); + return false; + } + } + + cur_FM = lseek(fd, 0, SEEK_CUR) - sizeof(c); + + ::read(fd, &last_FM, sizeof(last_FM)); + ret = ::read(fd, &next_FM, sizeof(next_FM)); + + current_block=0; + + Dmsg3(dbglevel, "Read FM cur=%lli last=%lli next=%lli\n", + cur_FM, last_FM, next_FM); + + return (ret == sizeof(next_FM)); +} + +/* + * TODO: Check fsr with EOF + */ +int vtape::fsr(int count) +{ + ASSERT(online); + ASSERT(current_file >= 0); + ASSERT(fd >= 0); + + int i,nb, ret=0; +// boffset_t where=0; + uint32_t s; + Dmsg4(dbglevel, "fsr %i:%i EOF=%i c=%i\n", + current_file,current_block,atEOF,count); + + check_eof(); + + if (atEOT) { + errno = EIO; + current_block = -1; + return -1; + } + + if (atEOD) { + errno = EIO; + return -1; + } + + atBOT = atEOF = false; + + /* check all block record */ + for(i=0; (i < count) && !atEOF ; i++) { + nb = ::read(fd, &s, sizeof(uint32_t)); /* get size of next block */ + if (nb == sizeof(uint32_t) && s) { + current_block++; + lseek(fd, s, SEEK_CUR); /* seek after this block */ + } else { + Dmsg4(dbglevel, "read EOF %i:%i nb=%i s=%i\n", + current_file, current_block, nb,s); + errno = EIO; + ret = -1; + if (next_FM) { + current_file++; + read_fm(VT_SKIP_EOF); + } + atEOF = true; /* stop the loop */ + } + } + + return ret; +} + +/* + * BSR + EOF => begin of EOF + EIO + * BSR + BSR + EOF => last block + * current_block = -1 + */ +int vtape::bsr(int count) +{ + ASSERT(online); + ASSERT(current_file >= 0); + ASSERT(count == 1); + ASSERT(fd >= 0); + + check_eof(); + + if (!count) { + return 0; + } + + int ret=0; + int last_f=0; + int last_b=0; + + boffset_t last=-1, last2=-1; + boffset_t orig = lseek(fd, 0, SEEK_CUR); + int orig_f = current_file; + int orig_b = current_block; + + Dmsg4(dbglevel, "bsr(%i) cur_blk=%i orig=%lli cur_FM=%lli\n", + count, current_block, orig, cur_FM); + + /* begin of tape, do nothing */ + if (atBOT) { + errno = EIO; + return -1; + } + + /* at EOF 0:-1 BOT=0 EOD=0 EOF=0 ERR: Input/output error */ + if (atEOF) { + lseek(fd, cur_FM, SEEK_SET); + atEOF = false; + if (current_file > 0) { + current_file--; + } + current_block=-1; + errno = EIO; + return -1; + } + + /* + * First, go to cur/last_FM and read all blocks to find the good one + */ + if (cur_FM == orig) { /* already just before EOF */ + lseek(fd, last_FM, SEEK_SET); + + } else { + lseek(fd, cur_FM, SEEK_SET); + } + + ret = read_fm(VT_READ_EOF); + + do { + if (!atEOF) { + last2 = last; /* keep track of the 2 last blocs position */ + last = lseek(fd, 0, SEEK_CUR); + last_f = current_file; + last_b = current_block; + Dmsg6(dbglevel, "EOF=%i last2=%lli last=%lli < orig=%lli %i:%i\n", + atEOF, last2, last, orig, current_file, current_block); + } + ret = fsr(1); + } while ((lseek(fd, 0, SEEK_CUR) < orig) && (ret == 0)); + + if (last2 > 0 && atEOF) { /* we take the previous position */ + lseek(fd, last2, SEEK_SET); + current_file = last_f; + current_block = last_b - 1; + Dmsg3(dbglevel, "1 set offset2=%lli %i:%i\n", + last, current_file, current_block); + + } else if (last > 0) { + lseek(fd, last, SEEK_SET); + current_file = last_f; + current_block = last_b; + Dmsg3(dbglevel, "2 set offset=%lli %i:%i\n", + last, current_file, current_block); + } else { + lseek(fd, orig, SEEK_SET); + current_file = orig_f; + current_block = orig_b; + return -1; + } + + Dmsg2(dbglevel, "bsr %i:%i\n", current_file, current_block); + errno=0; + atEOT = atEOF = atEOD = false; + atBOT = (lseek(fd, 0, SEEK_CUR) - (sizeof(uint32_t)+2*sizeof(boffset_t))) == 0; + + if (orig_b == -1) { + current_block = orig_b; + } + + return 0; +} + +/* BSF => just before last EOF + * EOF + BSF => just before EOF + * file 0 + BSF => BOT + errno + */ +int vtape::bsf() +{ + ASSERT(online); + ASSERT(current_file >= 0); + Dmsg2(dbglevel, "bsf %i:%i count=%i\n", current_file, current_block); + int ret = 0; + + check_eof(); + + atBOT = atEOF = atEOT = atEOD = false; + + if (current_file == 0) {/* BOT + errno */ + lseek(fd, 0, SEEK_SET); + read_fm(VT_READ_EOF); + current_file = 0; + current_block = 0; + atBOT = true; + errno = EIO; + ret = -1; + } else { + Dmsg1(dbglevel, "bsf last=%lli\n", last_FM); + lseek(fd, cur_FM, SEEK_SET); + current_file--; + current_block=-1; + } + return ret; +} + +/* + * DEVICE virtual that we redefine. + * + * Put vtape in offline mode + */ +bool vtape::offline() +{ + close(); + + atEOF = false; /* End of file */ + atEOT = false; /* End of tape */ + atEOD = false; /* End of data */ + atBOT = false; /* Begin of tape */ + online = false; + + file_block = 0; + current_file = -1; + current_block = -1; + last_file = -1; + return true; +} + +/* + * DEVICE virtual that we redefine. + * + * A filemark is automatically written to tape if the last tape operation + * before close was a write. + */ +int vtape::d_close(int) +{ + struct flock lock; + + check_eof(); + + if (lockfd >= 0) { + lock.l_type = F_UNLCK; + lock.l_start = 0; + lock.l_whence = SEEK_SET; + lock.l_len = 0; + lock.l_pid = getpid(); + + ASSERT(fcntl(fd, F_SETLK, &lock) != -1); + ::close(lockfd); + free(lockfile); + } + + ::close(fd); + lockfd = fd = -1; + return 0; +} + +/* + * DEVICE virtual that we redefine. + * + * When a filemark is encountered while reading, the following happens. If + * there are data remaining in the buffer when the filemark is found, the + * buffered data is returned. The next read returns zero bytes. The following + * read returns data from the next file. The end of recorded data is signaled + * by returning zero bytes for two consecutive read calls. The third read + * returns an error. + */ +ssize_t vtape::d_read(int, void *buffer, size_t count) +{ + ASSERT(online); + ASSERT(current_file >= 0); + ssize_t nb; + uint32_t s; + + Dmsg2(dbglevel*2, "read %i:%i\n", current_file, current_block); + + if (atEOT || atEOD) { + errno = EIO; + return -1; + } + + if (atEOF) { + if (!next_FM) { + atEOD = true; + atEOF = false; + current_block=-1; + return 0; + } + atEOF=false; + } + + check_eof(); + + atEOD = atBOT = false; + + /* reading size of data */ + nb = ::read(fd, &s, sizeof(uint32_t)); + if (nb <= 0) { + atEOF = true; /* TODO: check this */ + return 0; + } + + if (s > count) { /* not enough buffer to read block */ + Dmsg2(dbglevel, "Need more buffer to read next block %i > %i\n",s,count); + lseek(fd, s, SEEK_CUR); + errno = ENOMEM; + return -1; + } + + if (!s) { /* EOF */ + atEOF = true; + if (read_fm(VT_SKIP_EOF)) { + current_file++; + } + + return 0; + } + + /* reading data itself */ + nb = ::read(fd, buffer, s); + if (nb != (ssize_t)s) { /* read error */ + errno=EIO; + atEOT=true; + current_block = -1; + Dmsg0(dbglevel, "EOT during reading\n"); + return -1; + } /* read ok */ + + if (current_block >= 0) { + current_block++; + } + + return nb; +} + +/* Redefine DEVICE virtual function */ +int vtape::d_open(const char *pathname, int uflags) +{ + Dmsg2(dbglevel, "vtape::d_open(%s, %i)\n", pathname, uflags); + + online = true; /* assume that drive contains a tape */ + struct flock lock; + struct stat statp; + + ASSERT(!m_shstore || (m_shstore_lock && m_shstore_register)); + + if (stat(pathname, &statp) != 0) { + fd = -1; + Dmsg1(dbglevel, "Can't stat on %s\n", pathname); + if (uflags & O_NONBLOCK) { + online = false; + fd = ::open("/dev/null", O_RDWR | O_LARGEFILE, 0600); + } + } else { + fd = ::open(pathname, O_RDWR | O_LARGEFILE, 0600); + } + + if (fd < 0) { + berrno be; + Dmsg2(0, "Unable to open vtape device %s ERR=%s\n", pathname, be.bstrerror()); + errno = ENOMEDIUM; + return -1; + } + + lockfile = (char *)malloc(strlen(pathname) + 3); + strcpy(lockfile, pathname); + strcat(lockfile, ".l"); + + lockfd = ::open(lockfile, O_CREAT | O_RDWR | O_LARGEFILE, 0600); + if (lockfd < 0) { + berrno be; + Dmsg2(0, "Unable to open vtape device lock %s ERR=%s\n", lockfile, be.bstrerror()); + + } else { + lock.l_type = F_WRLCK; + lock.l_start = 0; + lock.l_whence = SEEK_SET; + lock.l_len = 0; + lock.l_pid = getpid(); + + ASSERT(fcntl(lockfd, F_SETLK, &lock) != -1); + } + + file_block = 0; + current_block = 0; + current_file = 0; + cur_FM = next_FM = last_FM = 0; + needEOF = false; + atBOT = true; + atEOT = atEOD = false; + + /* If the vtape is empty, start by writing a EOF */ + if (online && !read_fm(VT_READ_EOF)) { + lseek(fd, 0, SEEK_SET); /* rewind */ + cur_FM = next_FM = last_FM = 0; /* reset */ + weof(); /* write the first EOF */ + last_file = current_file=0; + } + + return fd; +} + +/* use this to track file usage */ +void vtape::update_pos() +{ + ASSERT(online); + struct stat statp; + if (fstat(fd, &statp) == 0) { + file_block = statp.st_blocks; + } + + Dmsg1(dbglevel*2, "update_pos=%i\n", file_block); + + if (file_block > max_block) { + atEOT = true; + } else { + atEOT = false; + } +} + +void vtape::dump() +{ + Dmsg0(dbglevel+1, "===================\n"); + Dmsg2(dbglevel, "file:block = %i:%i\n", current_file, current_block); + Dmsg1(dbglevel+1, "last_file=%i\n", last_file); + Dmsg1(dbglevel+1, "file_block=%i\n", file_block); + Dmsg4(dbglevel+1, "EOF=%i EOT=%i EOD=%i BOT=%i\n", + atEOF, atEOT, atEOD, atBOT); +} + +#endif /* ! USE_VTAPE */ diff --git a/bacula/src/stored/vtape_dev.h b/bacula/src/stored/vtape_dev.h new file mode 100644 index 0000000000..98c09400d0 --- /dev/null +++ b/bacula/src/stored/vtape_dev.h @@ -0,0 +1,117 @@ +/* + Bacula® - The Network Backup Solution + + Copyright (C) 2008-2014 Free Software Foundation Europe e.V. + + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. + + Bacula® is a registered trademark of Kern Sibbald. +*/ +/* + * vtape.h - Emulate the Linux st (scsi tape) driver on file. + * for regression and bug hunting purpose + * + */ + +#ifndef VTAPE_H +#define VTAPE_H + +#include +#include +#include "bacula.h" +#include "tape_dev.h" + +void vtape_debug(int level); + +#ifdef USE_VTAPE + +#define FTAPE_MAX_DRIVE 50 + +#define VTAPE_MAX_BLOCK 20*1024*2048; /* 20GB */ + +typedef enum { + VT_READ_EOF, /* Need to read the entire EOF struct */ + VT_SKIP_EOF /* Have already read the EOF byte */ +} VT_READ_FM_MODE; + +class vtape: public tape_dev { +private: + int fd; /* Our file descriptor */ + int lockfd; /* File descriptor for the lock file */ + + boffset_t file_block; /* size */ + boffset_t max_block; + + boffset_t last_FM; /* last file mark (last file) */ + boffset_t next_FM; /* next file mark (next file) */ + boffset_t cur_FM; /* current file mark */ + + bool atEOF; /* End of file */ + bool atEOT; /* End of media */ + bool atEOD; /* End of data */ + bool atBOT; /* Begin of tape */ + bool online; /* volume online */ + bool needEOF; /* check if last operation need eof */ + + int32_t last_file; /* last file of the volume */ + int32_t current_file; /* current position */ + int32_t current_block; /* current position */ + char * lockfile; /* Name of the lock file */ + + void destroy(); + int truncate_file(); + void check_eof() { if(needEOF) weof();}; + void update_pos(); + bool read_fm(VT_READ_FM_MODE readfirst); + +public: + int fsf(); + int fsr(int count); + int weof(); + int bsf(); + int bsr(int count); + + vtape(); + ~vtape(); + int get_fd(); + void dump(); + + int tape_op(struct mtop *mt_com); + int tape_get(struct mtget *mt_com); + int tape_pos(struct mtpos *mt_com); + + /* DEVICE virtual interfaces that we redefine */ + int d_close(int); + int d_open(const char *pathname, int flags); + int d_ioctl(int fd, ioctl_req_t request, char *op=NULL); + ssize_t d_read(int, void *buffer, size_t count); + ssize_t d_write(int, const void *buffer, size_t count); + bool offline(); + + boffset_t lseek(DCR *dcr, off_t offset, int whence) { return -1; } + boffset_t lseek(int fd, off_t offset, int whence) + { return ::lseek(fd, offset, whence); } +}; + + +#else /*!USE_VTAPE */ + +class vtape: public DEVICE { +public: + int d_open(const char *pathname, int flags) { return -1; } + ssize_t d_read(void *buffer, size_t count) { return -1; } + ssize_t d_write(const void *buffer, size_t count) { return -1; } + int d_close(int) { return -1; } + int d_ioctl(int fd, ioctl_req_t request, char *mt=NULL) { return -1; } + boffset_t lseek(DCR *dcr, off_t offset, int whence) { return -1; } +}; + +#endif /* USE_VTAPE */ + +#endif /* !VTAPE_H */ diff --git a/bacula/src/stored/wait.c b/bacula/src/stored/wait.c index 87f809facb..e74c7bcaf6 100644 --- a/bacula/src/stored/wait.c +++ b/bacula/src/stored/wait.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2011 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Subroutines to handle waiting for operator intervention @@ -44,7 +32,7 @@ const int dbglvl = 400; /* * Wait for SysOp to mount a tape on a specific device * - * Returns: W_ERROR, W_TIMEOUT, W_POLL, W_MOUNT, or W_WAKE + * Returns: W_ERROR, W_TIMEOUT, W_POLL, W_MOUNT, or W_WAKE */ int wait_for_sysop(DCR *dcr) { @@ -59,7 +47,7 @@ int wait_for_sysop(DCR *dcr) DEVICE *dev = dcr->dev; JCR *jcr = dcr->jcr; - dev->Lock(); + dev->Lock(); Dmsg1(dbglvl, "Enter blocked=%s\n", dev->print_blocked()); /* @@ -100,12 +88,12 @@ int wait_for_sysop(DCR *dcr) timeout.tv_nsec = tv.tv_usec * 1000; timeout.tv_sec = tv.tv_sec + add_wait; - Dmsg4(dbglvl, "I'm going to sleep on device %s. HB=%d rem_wait=%d add_wait=%d\n", + Dmsg4(dbglvl, "I'm going to sleep on device %s. HB=%d rem_wait=%d add_wait=%d\n", dev->print_name(), (int)me->heartbeat_interval, dev->rem_wait_sec, add_wait); start = time(NULL); /* Wait required time */ - stat = pthread_cond_timedwait(&dev->wait_next_vol, &dev->m_mutex, &timeout); + stat = dev->next_vol_timedwait(&timeout); Dmsg2(dbglvl, "Wokeup from sleep on device stat=%d blocked=%s\n", stat, dev->print_blocked()); @@ -136,7 +124,7 @@ int wait_for_sysop(DCR *dcr) } /* - * Continue waiting if operator is labeling volumes + * Continue waiting if operator is labeling volumes */ if (dev->blocked() == BST_WRITING_LABEL) { continue; @@ -171,7 +159,7 @@ int wait_for_sysop(DCR *dcr) /* * If we did not timeout, then some event happened, so - * return to check if state changed. + * return to check if state changed. */ if (stat != ETIMEDOUT) { berrno be; @@ -180,7 +168,7 @@ int wait_for_sysop(DCR *dcr) break; } - /* + /* * At this point, we know we woke up because of a timeout, * that was due to a heartbeat, because any other reason would * have caused us to return, so update the wait counters and continue. @@ -192,7 +180,7 @@ int wait_for_sysop(DCR *dcr) /* If the user did not unmount the tape and we are polling, ensure * that we poll at the correct interval. */ - if (!unmounted && dev->vol_poll_interval && + if (!unmounted && dev->vol_poll_interval && add_wait > dev->vol_poll_interval - total_waited) { add_wait = dev->vol_poll_interval - total_waited; } @@ -212,16 +200,16 @@ int wait_for_sysop(DCR *dcr) /* - * Wait for any device to be released, then we return, so + * Wait for any device to be released, then we return, so * higher level code can rescan possible devices. Since there * could be a job waiting for a drive to free up, we wait a maximum - * of 1 minute then retry just in case a broadcast was lost, and + * of 1 minute then retry just in case a broadcast was lost, and * we return to rescan the devices. - * + * * Returns: true if a device has changed state * false if the total wait time has expired. */ -bool wait_for_device(JCR *jcr, int &retries) +bool wait_for_any_device(JCR *jcr, int &retries) { struct timeval tv; struct timezone tz; @@ -231,12 +219,12 @@ bool wait_for_device(JCR *jcr, int &retries) const int max_wait_time = 1 * 60; /* wait 1 minute */ char ed1[50]; - Dmsg0(dbglvl, "Enter wait_for_device\n"); + Dmsg0(dbglvl, "Enter wait_for_any_device\n"); P(device_release_mutex); if (++retries % 5 == 0) { /* Print message every 5 minutes */ - Jmsg(jcr, M_MOUNT, 0, _("JobId=%s, Job %s waiting to reserve a device.\n"), + Jmsg(jcr, M_MOUNT, 0, _("JobId=%s, Job %s waiting to reserve a device.\n"), edit_uint64(jcr->JobId, ed1), jcr->Job); } @@ -255,6 +243,53 @@ bool wait_for_device(JCR *jcr, int &retries) return ok; } +/* + * Wait for a specific device to be released + * We wait a maximum of 1 minute then + * retry just in case a broadcast was lost. + * + * Returns: true if the device has changed state + * false if the total wait time has expired. + */ +bool wait_for_device(DCR *dcr, int &retries) +{ + struct timeval tv; + struct timezone tz; + struct timespec timeout; + JCR *jcr = dcr->jcr; + DEVICE *dev = dcr->dev; + int stat = 0; + bool ok = true; + const int max_wait_time = 1 * 60; /* wait 1 minute */ + char ed1[50]; + + Dmsg3(40, "Enter wait_for_device. busy=%d dcrvol=%s devvol=%s\n", + dev->is_busy(), dcr->VolumeName, dev->getVolCatName()); + + P(device_release_mutex); + + if (++retries % 5 == 0) { + /* Print message every 5 minutes */ + Jmsg(jcr, M_MOUNT, 0, _("JobId=%s, Job %s waiting device %s.\n"), + edit_uint64(jcr->JobId, ed1), jcr->Job, dcr->dev->print_name()); + } + + gettimeofday(&tv, &tz); + timeout.tv_nsec = tv.tv_usec * 1000; + timeout.tv_sec = tv.tv_sec + max_wait_time; + + Dmsg0(dbglvl, "Going to wait for a device.\n"); + + /* Wait required time */ + stat = pthread_cond_timedwait(&wait_device_release, &device_release_mutex, &timeout); + Dmsg1(dbglvl, "Wokeup from sleep on device stat=%d\n", stat); + + V(device_release_mutex); + Dmsg1(dbglvl, "Return from wait_device ok=%d\n", ok); + return ok; +} + + #ifdef xxx /* * The jcr timers are used for waiting on any device * diff --git a/bacula/src/streams.h b/bacula/src/streams.h index 78b1e6897e..d85adf78b9 100644 --- a/bacula/src/streams.h +++ b/bacula/src/streams.h @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2010 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /** * Stream definitions. Split from baconfig.h Nov 2010 @@ -48,7 +36,7 @@ #define STREAMBITS_TYPE 11 /* type bit size */ #define STREAMMASK_TYPE (~((~0)<< STREAMBITS_TYPE) << STREAMBASE_TYPE) /* - * Note additional base, bits, and masks can be defined for new + * Note additional base, bits, and masks can be defined for new * ranges or subranges of stream attributes. */ diff --git a/bacula/src/tabs b/bacula/src/tabs deleted file mode 100644 index 485ab85720..0000000000 --- a/bacula/src/tabs +++ /dev/null @@ -1,5 +0,0 @@ -/* Configure vim and python to use the correct whitespace - * These *should* be the right settings for Bacula development - * vim: set tabstop=8 shiftwidth=3: - * -*- mode: c; tab-width: 3 -*- - */ diff --git a/bacula/src/tools/assert_macro.h b/bacula/src/tools/assert_macro.h index 477b9121c7..2b4f302502 100644 --- a/bacula/src/tools/assert_macro.h +++ b/bacula/src/tools/assert_macro.h @@ -1,33 +1,21 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2010 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /** * Assertion definitions - * + * */ diff --git a/bacula/src/tools/bbatch.c b/bacula/src/tools/bbatch.c index 00244f0d6c..462547a335 100644 --- a/bacula/src/tools/bbatch.c +++ b/bacula/src/tools/bbatch.c @@ -10,39 +10,27 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2001-2006 Free Software Foundation Europe e.V. + Copyright (C) 2001-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* to create datafile - + for i in $(seq 10000 99999) ; do j=$((($i % 1000) + 555)) echo "$i;/tmp/totabofds$j/fiddddle${j}$i;xxxLSTATxxxx;xxxxxxxMD5xxxxxx" done > dat1 - + or j=0 @@ -57,7 +45,7 @@ #include "findlib/find.h" #include "cats/cats.h" #include "cats/sql_glue.h" - + /* Forward referenced functions */ static void *do_batch(void *); @@ -117,7 +105,7 @@ int main (int argc, char *argv[]) textdomain("bacula"); init_stack_dump(); lmgr_init_thread(); - + char **files = (char **) malloc (10 * sizeof(char *)); int i; my_name_is(argc, argv, "bbatch"); @@ -195,7 +183,7 @@ int main (int argc, char *argv[]) uint64_t nb_file=0; btime_t start, end; /* To use the -r option, the catalog should already contains records */ - + if ((db = db_init_database(NULL, NULL, db_name, db_user, db_password, db_host, 0, NULL, false, disable_batch)) == NULL) { Emsg0(M_ERROR_TERM, 0, _("Could not init Bacula database\n")); @@ -208,9 +196,9 @@ int main (int argc, char *argv[]) db_get_file_list(NULL, db, restore_list, false, false, list_handler, &nb_file); end = get_current_btime(); - Pmsg3(0, _("Computing file list for jobid=%s files=%lld secs=%d\n"), + Pmsg3(0, _("Computing file list for jobid=%s files=%lld secs=%d\n"), restore_list, nb_file, (uint32_t)btime_to_unix(end-start)); - + free(restore_list); return 0; } @@ -244,7 +232,7 @@ int main (int argc, char *argv[]) pm_strcpy(bjcr->fileset_name, "Dummy.fileset.name"); bjcr->fileset_md5 = get_pool_memory(PM_FNAME); pm_strcpy(bjcr->fileset_md5, "Dummy.fileset.md5"); - + if ((db = db_init_database(NULL, NULL, db_name, db_user, db_password, db_host, 0, NULL, false, false)) == NULL) { Emsg0(M_ERROR_TERM, 0, _("Could not init Bacula database\n")); @@ -256,7 +244,7 @@ int main (int argc, char *argv[]) if (verbose) { Pmsg2(000, _("Using Database: %s, User: %s\n"), db_name, db_user); } - + bjcr->db = db; pthread_create(&thid, NULL, do_batch, bjcr); @@ -328,12 +316,12 @@ static void *do_batch(void *jcr) fclose(fd); db_write_batch_file_records(bjcr); btime_t end = get_current_btime(); - + P(mutex); char ed1[200], ed2[200]; printf("\rbegin = %s, end = %s\n", edit_int64(begin, ed1),edit_int64(end, ed2)); printf("Insert time = %sms\n", edit_int64((end - begin) / 10000, ed1)); - printf("Create %u files at %.2f/s\n", lineno, + printf("Create %u files at %.2f/s\n", lineno, (lineno / ((float)((end - begin) / 1000000)))); nb--; V(mutex); diff --git a/bacula/src/tools/bpluginfo.c b/bacula/src/tools/bpluginfo.c index faa27545d3..1655bd5bca 100644 --- a/bacula/src/tools/bpluginfo.c +++ b/bacula/src/tools/bpluginfo.c @@ -1,6 +1,6 @@ /* * Contributed in 2012 by Inteos sp. z o.o. - * + * * Utility tool display various information about Bacula plugin, * including but not limited to: * - Name and Author of the plugin @@ -12,29 +12,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2006-2012 Free Software Foundation Europe e.V. + Copyright (C) 2006-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ #include @@ -97,7 +85,7 @@ union _plugfuncs { */ /* * TODO: change to union - * + * typedef union _baculafuncs baculafuncs; union _baculafuncs { bDirFuncs bdirfuncs; @@ -120,7 +108,7 @@ struct _baculafuncs { void (*baculaFree) (void *ctx, const char *file, int line, void *mem); }; -/* +/* * bDirInfo * bInfo * bsdInfo @@ -251,13 +239,13 @@ void freepdata(progdata * pdata) /* * parse execution arguments and fills required pdata structure fields - * + * * input: * pdata - pointer to program data structure * argc, argv - execution envinroment variables * output: * pdata - required structure fields - * + * * supported options: * -v verbose flag * -i list plugin header info only (default) @@ -330,10 +318,10 @@ void parse_args(progdata * pdata, int argc, char *argv[]) progdir = MALLOC(PATH_MAX); ASSERT_MEMORY(progdir); dirtmp = getcwd(dirtmp, PATH_MAX); - + strcat(dirtmp, "/"); strcat(dirtmp, argv[i]); - + if (realpath(dirtmp, progdir) == NULL) { /* error in resolving path */ FREE(progdir); @@ -352,7 +340,7 @@ void parse_args(progdata * pdata, int argc, char *argv[]) /* * checks a plugin type based on a plugin magic string - * + * * input: * pdata - program data with plugin info structure * output: @@ -385,7 +373,7 @@ int getplugintype(progdata * pdata) /* * prints any available information about a plugin - * + * * input: * pdata - program data with plugin info structure * output: @@ -448,7 +436,7 @@ void dump_pluginfo(progdata * pdata) /* * prints any available information about plugin' functions - * + * * input: * pdata - program data with plugin info structure * output: @@ -555,7 +543,7 @@ void dump_plugfuncs(progdata * pdata) /* * input parameters: * argv[0] [options] - * + * * exit codes: * 0 - success * 1 - cannot load a plugin diff --git a/bacula/src/tools/bregex.c b/bacula/src/tools/bregex.c index ac382a8594..ceefa91ec0 100644 --- a/bacula/src/tools/bregex.c +++ b/bacula/src/tools/bregex.c @@ -7,29 +7,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2006-2006 Free Software Foundation Europe e.V. + Copyright (C) 2006-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ #include "bacula.h" @@ -86,7 +74,7 @@ int main(int argc, char *const *argv) bool match_only = true; int lineno; bool no_linenos = false; - + setlocale(LC_ALL, ""); bindtextdomain("bacula", LOCALEDIR); diff --git a/bacula/src/tools/bregtest.c b/bacula/src/tools/bregtest.c index f7dd9c6a6b..4853d93f04 100644 --- a/bacula/src/tools/bregtest.c +++ b/bacula/src/tools/bregtest.c @@ -1,36 +1,24 @@ +/* + Bacula® - The Network Backup Solution + + Copyright (C) 2006-2014 Free Software Foundation Europe e.V. + + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. + + Bacula® is a registered trademark of Kern Sibbald. +*/ /* * Test program for testing regular expressions. * * Kern Sibbald, MMVI * */ -/* - Bacula® - The Network Backup Solution - - Copyright (C) 2006-2008 Free Software Foundation Europe e.V. - - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation, which is - listed in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. - - Bacula® is a registered trademark o fKern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. -*/ /* * If you define BACULA_REGEX, bregex will be built with the @@ -124,7 +112,7 @@ int main(int argc, char *const *argv) alist *list; char *p; - + list = get_bregexps(expr); if (!list) { @@ -153,10 +141,10 @@ int main(int argc, char *const *argv) exit(0); } /* - TODO: + TODO: - ajout /g - - tests + - tests * test avec /i * test avec un sed et faire un diff * test avec une boucle pour voir les fuites diff --git a/bacula/src/tools/bsmtp.c b/bacula/src/tools/bsmtp.c index d502ead961..b2274384bd 100644 --- a/bacula/src/tools/bsmtp.c +++ b/bacula/src/tools/bsmtp.c @@ -1,34 +1,22 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2001-2012 Free Software Foundation Europe e.V. + Copyright (C) 2001-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* Derived from a SMTPclient: - ======== Original copyrights ========== + ======== Original copyrights ========== SMTPclient -- simple SMTP client @@ -75,7 +63,7 @@ /* * Dummy functions */ -int generate_daemon_event(JCR *jcr, const char *event) +int generate_daemon_event(JCR *jcr, const char *event) { return 1; } @@ -104,7 +92,7 @@ static char my_hostname[MAXSTRING]; static bool content_utf8 = false; static resolv_type default_resolv_type = RESOLV_PROTO_IPV4; -/* +/* * Take input that may have names and other stuff and strip * it down to the mail box address ... i.e. what is enclosed * in < >. Otherwise add < >. @@ -126,7 +114,7 @@ static char *cleanup_addr(char *addr, char *buf, int buf_len) *q = 0; } Dmsg2(100, "cleanup in=%s out=%s\n", addr, buf); - return buf; + return buf; } /* @@ -293,7 +281,7 @@ int main (int argc, char *argv[]) #else const char *options = "48ac:d:f:h:r:s:l:?"; #endif - + setlocale(LC_ALL, "en_US"); bindtextdomain("bacula", LOCALEDIR); textdomain("bacula"); @@ -594,7 +582,7 @@ lookup_host: get_response(); /* banner */ chat("HELO %s\r\n", my_hostname); chat("MAIL FROM:%s\r\n", cleanup_addr(from_addr, buf, sizeof(buf))); - + for (i = 0; i < argc; i++) { Dmsg1(20, "rcpt to: %s\n", argv[i]); chat("RCPT TO:%s\r\n", cleanup_addr(argv[i], buf, sizeof(buf))); diff --git a/bacula/src/tools/bvfs_test.c b/bacula/src/tools/bvfs_test.c index 06ecbecab2..1f93e07fae 100644 --- a/bacula/src/tools/bvfs_test.c +++ b/bacula/src/tools/bvfs_test.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2009-2011 Free Software Foundation Europe e.V. + Copyright (C) 2009-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * @@ -39,7 +27,7 @@ #include "cats/sql_glue.h" #include "cats/bvfs.h" #include "findlib/find.h" - + /* Local variables */ static B_DB *db; static const char *file = "COPYRIGHT"; @@ -85,13 +73,13 @@ static int result_handler(void *ctx, int fields, char **row) /* display clean stuffs */ if (bvfs_is_dir(row)) { - pm_strcpy(attr->ofname, bvfs_basename_dir(row[BVFS_Name])); + pm_strcpy(attr->ofname, bvfs_basename_dir(row[BVFS_Name])); } else { /* if we see the requested file, note his filenameid */ if (bstrcmp(row[BVFS_Name], file)) { fnid = str_to_int64(row[BVFS_FilenameId]); } - pm_strcpy(attr->ofname, row[BVFS_Name]); + pm_strcpy(attr->ofname, row[BVFS_Name]); } print_ls_output(vfs->get_jcr(), attr); @@ -122,7 +110,7 @@ int main (int argc, char *argv[]) init_stack_dump(); Dmsg0(0, "Starting bvfs_test tool\n"); - + my_name_is(argc, argv, "bvfs_test"); init_msg(NULL, NULL); @@ -209,7 +197,7 @@ int main (int argc, char *argv[]) bjcr->client_name = get_pool_memory(PM_FNAME); pm_strcpy(bjcr->client_name, "Dummy.Client.Name"); bstrncpy(bjcr->Job, "bvfs_test", sizeof(bjcr->Job)); - + if ((db = db_init_database(NULL, NULL, db_name, db_user, db_password, db_host, 0, NULL, false, false)) == NULL) { Emsg0(M_ERROR_TERM, 0, _("Could not init Bacula database\n")); @@ -223,7 +211,7 @@ int main (int argc, char *argv[]) if (verbose) { Pmsg2(000, _("Using Database: %s, User: %s\n"), db_name, db_user); } - + bjcr->db = db; if (clean) { @@ -259,7 +247,7 @@ int main (int argc, char *argv[]) exit (0); } - + Pmsg0(0, "list /\n"); fs.ch_dir("/"); fs.ls_special_dirs(); diff --git a/bacula/src/tools/bwild.c b/bacula/src/tools/bwild.c index 775b8c0131..ca5dd66c3d 100644 --- a/bacula/src/tools/bwild.c +++ b/bacula/src/tools/bwild.c @@ -1,35 +1,23 @@ /* * Test program for testing wild card expressions - * + * * Kern Sibbald, MMVI * */ /* Bacula® - The Network Backup Solution - Copyright (C) 2006-2006 Free Software Foundation Europe e.V. - - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + Copyright (C) 2006-2014 Free Software Foundation Europe e.V. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ #include "bacula.h" @@ -61,7 +49,7 @@ int main(int argc, char *const *argv) int lineno; bool no_linenos = false; int ic = 0; - + setlocale(LC_ALL, ""); bindtextdomain("bacula", LOCALEDIR); diff --git a/bacula/src/tools/cats_test.c b/bacula/src/tools/cats_test.c index 76a09e0814..9e350766a0 100644 --- a/bacula/src/tools/cats_test.c +++ b/bacula/src/tools/cats_test.c @@ -1,34 +1,22 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2011-2011 Free Software Foundation Europe e.V. + Copyright (C) 2011-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Program to test CATS DB routines * - * + * */ #define _BDB_PRIV_INTERFACE_ @@ -38,7 +26,7 @@ #include "cats/sql_glue.h" #include "cats/bvfs.h" #include "findlib/find.h" - + /* Local variables */ static B_DB *db; static const char *file = "COPYRIGHT"; @@ -163,7 +151,7 @@ static void cmp_client(CLIENT_DBR &cr, CLIENT_DBR &cr2) ok(!strcmp(cr2.Name, cr.Name), " Check Client Name"); ok(!strcmp(cr2.Uname, cr.Uname), " Check Client Uname"); ok(cr.AutoPrune == cr2.AutoPrune, " Check Client Autoprune"); - ok(cr.JobRetention == cr2.JobRetention, " Check Client JobRetention"); + ok(cr.JobRetention == cr2.JobRetention, " Check Client JobRetention"); ok(cr.FileRetention == cr2.FileRetention," Check Client FileRetention"); } @@ -239,7 +227,7 @@ int main (int argc, char *argv[]) pid = getpid(); Pmsg0(0, "Starting cats_test tool" PLINE); - + my_name_is(argc, argv, ""); init_msg(NULL, NULL); @@ -346,7 +334,7 @@ int main (int argc, char *argv[]) Pmsg1(0, PLINE "Test DB connection \"%s\"" PLINE, db_name); if (full_test) { - db = db_init_database(jcr /* JCR */, + db = db_init_database(jcr /* JCR */, NULL /* dbi driver */, db_name, db_user, db_password, db_address, db_port + 100, NULL /* db_socket */, @@ -360,7 +348,7 @@ int main (int argc, char *argv[]) db_close_database(jcr, db); } - db = db_init_database(jcr /* JCR */, + db = db_init_database(jcr /* JCR */, NULL /* dbi driver */, db_name, db_user, db_password, db_address, db_port, NULL /* db_socket */, @@ -386,7 +374,7 @@ int main (int argc, char *argv[]) /* Check if the SQL library is thread-safe */ //db_check_backend_thread_safe(); ok(check_tables_version(jcr, db), "Check table version"); - ok(db_sql_query(db, "SELECT VersionId FROM Version", + ok(db_sql_query(db, "SELECT VersionId FROM Version", db_int_handler, &j), "SELECT VersionId"); ok(UPDATE_DB(jcr, db, (char*)"UPDATE Version SET VersionId = 1"), @@ -399,15 +387,15 @@ int main (int argc, char *argv[]) ok(db_check_max_connections(jcr, db, 1), "Test min Max Connexion"); nok(db_check_max_connections(jcr, db, 10000), "Test max Max Connexion"); } - + ok(db_open_batch_connexion(jcr, db), "Opening batch connection"); db_close_database(jcr, jcr->db_batch); jcr->db_batch = NULL; /* ---------------------------------------------------------------- */ - + uint32_t storageid=0; - ok(db_sql_query(db, "SELECT MIN(StorageId) FROM Storage", + ok(db_sql_query(db, "SELECT MIN(StorageId) FROM Storage", db_int_handler, &storageid), "Get StorageId"); ok(storageid > 0, "Check StorageId"); if (!storageid) { @@ -419,7 +407,7 @@ int main (int argc, char *argv[]) Pmsg0(0, PLINE "Doing Basic SQL tests" PLINE); ok(db_sql_query(db, "SELECT 1,2,3,4,5", count_col, &j), "Count 5 rows"); ok(j == 5, "Check number of columns"); - ok(db_sql_query(db, "SELECT 1,2,3,4,5,'a','b','c','d','e'", + ok(db_sql_query(db, "SELECT 1,2,3,4,5,'a','b','c','d','e'", count_col, &j), "Count 10 rows"); ok(j == 10, "Check number of columns"); @@ -427,7 +415,7 @@ int main (int argc, char *argv[]) ok(db_sql_query(db, "SELECT 2", db_int_handler, &j), "Good SELECT query"); ok(db_sql_query(db, "SELECT 1 FROM Media WHERE VolumeName='missing'", db_int_handler, &j), "Good empty SELECT query"); - + db_int64_ctx i64; i64.value = 0; i64.count = 0; ok(db_sql_query(db, "SELECT 1",db_int64_handler, &i64),"db_int64_handler"); @@ -466,10 +454,10 @@ int main (int argc, char *argv[]) Mmsg(buf, "DELETE FROM %s", temp); ok(DELETE_DB(jcr, db, buf), "DELETE query"); nok(DELETE_DB(jcr, db, buf), "Empty DELETE query"); /* TODO bug ? */ - + Mmsg(buf, "DELETE FROM aaa%s", temp); ok(DELETE_DB(jcr, db, buf), "Bad DELETE query"); /* TODO bug ? */ - + Mmsg(buf, "DROP TABLE %s", temp); ok(QUERY_DB(jcr, db, buf), "DROP query"); nok(QUERY_DB(jcr, db, buf), "Empty DROP query"); @@ -483,7 +471,7 @@ int main (int argc, char *argv[]) ok(db_sql_query(db, buf, NULL, NULL), "Inserting quoted string"); /* ---------------------------------------------------------------- */ - Pmsg0(0, PLINE "Doing Job tests" PLINE); + Pmsg0(0, PLINE "Doing Job tests" PLINE); JOB_DBR jr, jr2; memset(&jr, 0, sizeof(jr)); @@ -491,7 +479,7 @@ int main (int argc, char *argv[]) jr.JobId = 1; ok(db_get_job_record(jcr, db, &jr), "Get Job record for JobId=1"); ok(jr.JobFiles > 10, "Check number of files"); - + jr.JobId = (JobId_t)pid; Mmsg(buf, "%s-%lld", jr.Job, pid); strcpy(jr.Job, buf); @@ -566,7 +554,7 @@ int main (int argc, char *argv[]) ok(db_get_client_record(jcr, db, &cr2), "Search client by ClientId"); cmp_client(cr, cr2); - + Pmsg0(0, "Search client by Name\n"); memset(&cr2, 0, sizeof(cr2)); strcpy(cr2.Name, cr.Name); @@ -603,7 +591,7 @@ int main (int argc, char *argv[]) POOL_DBR pr, pr2; memset(&pr, 0, sizeof(pr)); memset(&pr2, 0, sizeof(pr2)); - + bsnprintf(pr.Name, sizeof(pr.Name), "pool-%lld", pid); pr.MaxVols = 10; pr.UseOnce = 0; @@ -622,10 +610,10 @@ int main (int argc, char *argv[]) pr.RecyclePoolId = 0; pr.ScratchPoolId = 0; pr.ActionOnPurge = 1; - + ok(db_create_pool_record(jcr, db, &pr), "db_create_pool_record()"); ok(pr.PoolId > 0, "Check PoolId"); - + pr2.PoolId = pr.PoolId; pr.PoolId = 0; @@ -661,11 +649,11 @@ int main (int argc, char *argv[]) /* ---------------------------------------------------------------- */ Pmsg0(0, PLINE "Doing Media tests" PLINE); - + MEDIA_DBR mr, mr2; memset(&mr, 0, sizeof(mr)); memset(&mr2, 0, sizeof(mr2)); - + bsnprintf(mr.VolumeName, sizeof(mr.VolumeName), "media-%lld", pid); bsnprintf(mr.MediaType, sizeof(mr.MediaType), "type-%lld", pid); @@ -700,7 +688,7 @@ int main (int argc, char *argv[]) /* ---------------------------------------------------------------- */ Pmsg0(0, PLINE "Doing ... tests" PLINE); - + db_close_database(jcr, db); report(); free_pool_memory(buf); diff --git a/bacula/src/tools/dbcheck.c b/bacula/src/tools/dbcheck.c index 55986665f8..069d07aeef 100644 --- a/bacula/src/tools/dbcheck.c +++ b/bacula/src/tools/dbcheck.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2002-2011 Free Software Foundation Europe e.V. + Copyright (C) 2002-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * @@ -884,9 +872,9 @@ static void eliminate_orphaned_path_records() { db_int64_ctx lctx; lctx.count=0; - db_sql_query(db, "SELECT 1 FROM Job WHERE HasCache=1 LIMIT 1", + db_sql_query(db, "SELECT 1 FROM Job WHERE HasCache=1 LIMIT 1", db_int64_handler, &lctx); - + if (lctx.count == 1) { printf(_("Pruning orphaned Path entries isn't possible when using BVFS.\n")); return; diff --git a/bacula/src/tools/drivetype.c b/bacula/src/tools/drivetype.c index 0a630385d3..23cb42dce9 100644 --- a/bacula/src/tools/drivetype.c +++ b/bacula/src/tools/drivetype.c @@ -9,36 +9,24 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2006-2006 Free Software Foundation Europe e.V. + Copyright (C) 2006-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ #include "bacula.h" #include "findlib/find.h" /* Dummy functions */ -int generate_daemon_event(JCR *jcr, const char *event) +int generate_daemon_event(JCR *jcr, const char *event) { return 1; } static void usage() @@ -117,7 +105,7 @@ main (int argc, char *const *argv) argv += optind; OSDependentInit(); - + if (argc < 1 && display_all) { /* Try all letters */ for (drive = 'A'; drive <= 'Z'; drive++) { diff --git a/bacula/src/tools/fstype.c b/bacula/src/tools/fstype.c index 8a8c31a350..2335a20a84 100644 --- a/bacula/src/tools/fstype.c +++ b/bacula/src/tools/fstype.c @@ -9,29 +9,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2004-2006 Free Software Foundation Europe e.V. + Copyright (C) 2004-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ #include "bacula.h" @@ -39,7 +27,7 @@ #include "lib/mntent_cache.h" /* Dummy functions */ -int generate_daemon_event(JCR *jcr, const char *event) +int generate_daemon_event(JCR *jcr, const char *event) { return 1; } static void usage() diff --git a/bacula/src/tools/ing_test.c b/bacula/src/tools/ing_test.c index 90ab1e6324..b66d532461 100644 --- a/bacula/src/tools/ing_test.c +++ b/bacula/src/tools/ing_test.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2009-2011 Free Software Foundation Europe e.V. + Copyright (C) 2009-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * @@ -40,7 +28,7 @@ #include "bacula.h" #include "cats/cats.h" #include "cats/sql_glue.h" - + /* Local variables */ static B_DB *db; static const char *file = "COPYRIGHT"; @@ -106,7 +94,7 @@ int main (int argc, char *argv[]) init_stack_dump(); Dmsg0(0, "Starting ing_test tool\n"); - + my_name_is(argc, argv, "ing_test"); init_msg(NULL, NULL); @@ -185,7 +173,7 @@ int main (int argc, char *argv[]) Pmsg0(0, _("Wrong number of arguments: \n")); usage(); } - + if ((db = db_init_database(NULL, NULL, db_name, db_user, db_password, db_host, 0, NULL, false, false)) == NULL) { Emsg0(M_ERROR_TERM, 0, _("Could not init Bacula database\n")); @@ -304,7 +292,7 @@ int main (int argc, char *argv[]) } - /* + /* * datatypes test */ Pmsg0(0, "\ndatatypes test... (TODO)\n\n"); diff --git a/bacula/src/tools/testfind.c b/bacula/src/tools/testfind.c index 613a4186d1..71bc7a7b0d 100644 --- a/bacula/src/tools/testfind.c +++ b/bacula/src/tools/testfind.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2008 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Test program for find files @@ -157,7 +145,7 @@ main (int argc, char *const *argv) FILESET *var; fprintf(stderr, "Valid FileSets:\n"); - + foreach_res(var, R_FILESET) { fprintf(stderr, " %s\n", var->hdr.name); } @@ -166,7 +154,7 @@ main (int argc, char *const *argv) } ff = init_find_files(); - + copy_fileset(ff, jcr); find_files(jcr, ff, print_file, NULL); @@ -177,7 +165,7 @@ main (int argc, char *const *argv) free(config); config = NULL; } - + term_last_jobs_list(); /* Clean up fileset */ @@ -252,7 +240,7 @@ main (int argc, char *const *argv) exit(0); } -static int print_file(JCR *jcr, FF_PKT *ff, bool top_level) +static int print_file(JCR *jcr, FF_PKT *ff, bool top_level) { switch (ff->type) { diff --git a/bacula/src/tools/testls.c b/bacula/src/tools/testls.c index 0e5481a531..6cedf40bc8 100644 --- a/bacula/src/tools/testls.c +++ b/bacula/src/tools/testls.c @@ -1,29 +1,17 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2010 Free Software Foundation Europe e.V. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. */ /* * Test program for listing files during regression testing @@ -197,7 +185,7 @@ static int count_files(JCR *jcr, FF_PKT *ff, bool top_level) return 1; } -static int print_file(JCR *jcr, FF_PKT *ff, bool top_level) +static int print_file(JCR *jcr, FF_PKT *ff, bool top_level) { switch (ff->type) { diff --git a/bacula/src/version.h b/bacula/src/version.h index 6f1d7e01d6..818dd94008 100644 --- a/bacula/src/version.h +++ b/bacula/src/version.h @@ -1,39 +1,34 @@ #undef VERSION -#define VERSION "5.2.13" -#define BDATE "19 February 2013" -#define LSMDATE "19Jan13" +#define VERSION "7.0.0" +#define BDATE "28 March 2014" +#define LSMDATE "28Mar14" -#define PROG_COPYRIGHT "Copyright (C) %d-2012 Free Software Foundation Europe e.V.\n" -#define BYEAR "2013" /* year for copyright messages in progs */ +#define PROG_COPYRIGHT "Copyright (C) %d-2014 Free Software Foundation Europe e.V.\n" +#define BYEAR "2014" /* year for copyright messages in progs */ /* - Bacula® - The Network Backup Solution + * Versions of packages needed to build Bacula components + */ +#define DEPKGS_QT_VERSION "01Jan13" +#define DEPKGS_VERSION "29Feb12" +#define BQT4_VERSION "4.8.4" - Copyright (C) 2000-2013 Free Software Foundation Europe e.V. - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. +/* + Bacula® - The Network Backup Solution - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. + Copyright (C) 2000-2014 Free Software Foundation Europe e.V. - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + The main author of Bacula is Kern Sibbald, with contributions from many + others, a complete list can be found in the file AUTHORS. - Bacula® is a registered trademark of Kern Sibbald. + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. + Bacula® is a registered trademark of Kern Sibbald. */ /* Shared object library versions */ @@ -54,7 +49,7 @@ #define TRACE_FILE 1 /* If this is set stdout will not be closed on startup */ -/* #define DEVELOPER 1 */ +#define DEVELOPER 1 /* adjust DEVELOPER_MODE for status command */ #ifdef DEVELOPER @@ -91,7 +86,7 @@ #define USE_LOCKMGR_PRIORITY /* - * Enable thread verification before kill + * Enable thread verification before kill * * Note, this extra check have a high cost when using * dozens of thread, so turn this only for debugging. @@ -115,7 +110,7 @@ */ // #define USE_FTP -/* +/* * for fastest speed but you must have a UPS to avoid unwanted shutdowns */ //#define SQLITE3_INIT_QUERY "PRAGMA synchronous = OFF" @@ -126,14 +121,14 @@ #define SQLITE3_INIT_QUERY "PRAGMA synchronous = NORMAL" /* - * This should always be on. It enables data encryption code + * This should always be on. It enables data encryption code * providing it is configured. */ #define DATA_ENCRYPTION 1 /* * This uses a Bacula specific bsnprintf rather than the sys lib - * version because it is much more secure. It should always be + * version because it is much more secure. It should always be * on. */ #define USE_BSNPRINTF 1 @@ -167,7 +162,7 @@ /* The following are turned on for performance testing */ -/* +/* * If you turn on the NO_ATTRIBUTES_TEST and rebuild, the SD * will receive the attributes from the FD, will write them * to disk, then when the data is written to tape, it will @@ -178,11 +173,11 @@ */ /* #define NO_ATTRIBUTES_TEST 1 */ -/* +/* * If you turn on NO_TAPE_WRITE_TEST and rebuild, the SD * will do all normal actions, but will not write to the * Volume. Note, this means a lot of functions such as -* labeling will not work, so you must use it only when +* labeling will not work, so you must use it only when * Bacula is going to append to a Volume. This will eliminate * the time it takes to write to the Volume (not the time * it takes to do any positioning). diff --git a/bacula/unaccepted-projects b/bacula/unaccepted-projects deleted file mode 100644 index f9757d412f..0000000000 --- a/bacula/unaccepted-projects +++ /dev/null @@ -1,32 +0,0 @@ - - This file contains Feature Requests that either were not - accepted because the project manager veto'ed them (not Bacula - philosophy, impossible to implement, ...) or that did not have - adequate support by the Bacula community. - -Item 1: Allow Jobdefs to inherit from other Jobdefs - Origin: Darien Hager - Date: 10 April 2007 - Status: Initial Request - - What: Allow JobDefs to inherit/modify settings from other JobDefs - - Why: Makes setting up jobs much easier for situations with many -clients doing similar work - - Notes: - -Example: User has several JobDefs which all need Messages=standard, -Type=Backup, and settings for "Rerun Failed Levels" and "Max * Time". -This feature would allow those "common" properties to be within a -single JobDef which each child JobDefs inherits from, before the -final Job definitions sets further specifics such as Client. - -Currently the documentation leaves open the possibility that this can -be done, but tests with Bacula 2.0.1 suggest that JobDefs entries -cannot themselves have a JobDefs property. - -Technical caveat: Should probably include rudimentary checks against -a cyclic relationship, such as a limit to the number of allowed layers. - -See also: "Job Groups or hierarchy" Feb 6 2007